[Driver] Allow -mnop-mcount for SystemZ and -mfentry for X86 and SystemZ
authorFangrui Song <maskray@google.com>
Sun, 22 Dec 2019 07:18:24 +0000 (23:18 -0800)
committerFangrui Song <maskray@google.com>
Sun, 22 Dec 2019 08:01:42 +0000 (00:01 -0800)
commit527b0f8c7448707aa6b8159e6e4707a49f1dcb87
tree43ce9a40f1bbe61ee5de4dcf7b6ddd561ee56368
parentd0bfb3c583031f410e8219155f0cf9ee8fb08504
[Driver] Allow -mnop-mcount for SystemZ and -mfentry for X86 and SystemZ

gcc/config/{i386,s390} support -mnop-mcount. We currently only support
-mnop-mcount for SystemZ. The function attribute "mnop-mcount" is
ignored on other targets.

gcc/config/{i386,s390} support -mfentry. We currently only support
-mfentry for X86 and SystemZ. TargetOpcode::FENTRY_CALL is not handled
on other targets.

  % clang -target aarch64 -pg -mfentry a.c -c
  fatal error: error in backend: Not supported instr: <MCInst 21>

-mfentry, -mrecord-mcount, and -mnop-mcount were invented for Linux
ftrace. Linux uses $(call cc-option-yn,-mrecord-mcount) to detect if the
specific feature is available. Reject unsupported features so that Linux
build system will not wrongly consider them available and cause
build/runtime failures.

Note, GCC has stricter checks that we do not implement, e.g. -fpic/-fpie
-fnop-mcount is not allowed on x86, -fpic/-fpie -mfentry is not allowed
on x86-32.
clang/lib/Driver/ToolChains/Clang.cpp
clang/test/Driver/mcount.c
clang/test/Driver/mfentry.c [new file with mode: 0644]