diff options
author | Ard Biesheuvel <ardb@kernel.org> | 2025-04-10 14:26:41 +0200 |
---|---|---|
committer | Uros Bizjak <ubizjak@gmail.com> | 2025-04-16 20:38:20 +0200 |
commit | 6b4569a3ebdd0df44d87d67a18272ec0b878f2ee (patch) | |
tree | c3f6dc1c6b8ba84063d3edd6b72a999262c5ca2a | |
parent | 9b0ae0a8d70603960f3c578d261efd18c02b803f (diff) | |
download | gcc-6b4569a3ebdd0df44d87d67a18272ec0b878f2ee.zip gcc-6b4569a3ebdd0df44d87d67a18272ec0b878f2ee.tar.gz gcc-6b4569a3ebdd0df44d87d67a18272ec0b878f2ee.tar.bz2 |
i386: Enable -mnop-mcount for -fpic with PLTs [PR119386]
-mnop-mcount can be trivially enabled for -fPIC codegen as long as PLTs
are being used, given that the instruction encodings are identical, only
the target may resolve differently depending on how the linker decides
to incorporate the object file.
So relax the option check, and add a test to ensure that 5-byte NOPs are
emitted when -mnop-mcount is being used.
Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
gcc/ChangeLog:
PR target/119386
* config/i386/i386-options.cc: Permit -mnop-mcount when
using -fpic with PLTs.
gcc/testsuite/ChangeLog:
PR target/119386
* gcc.target/i386/pr119386-3.c: New test.
-rw-r--r-- | gcc/config/i386/i386-options.cc | 4 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/i386/pr119386-3.c | 10 |
2 files changed, 12 insertions, 2 deletions
diff --git a/gcc/config/i386/i386-options.cc b/gcc/config/i386/i386-options.cc index a9fac01..964449f 100644 --- a/gcc/config/i386/i386-options.cc +++ b/gcc/config/i386/i386-options.cc @@ -2828,8 +2828,8 @@ ix86_option_override_internal (bool main_args_p, if (flag_nop_mcount) error ("%<-mnop-mcount%> is not compatible with this target"); #endif - if (flag_nop_mcount && flag_pic) - error ("%<-mnop-mcount%> is not implemented for %<-fPIC%>"); + if (flag_nop_mcount && flag_pic && !flag_plt) + error ("%<-mnop-mcount%> is not implemented for %<-fno-plt%>"); /* Accept -msseregparm only if at least SSE support is enabled. */ if (TARGET_SSEREGPARM_P (opts->x_target_flags) diff --git a/gcc/testsuite/gcc.target/i386/pr119386-3.c b/gcc/testsuite/gcc.target/i386/pr119386-3.c new file mode 100644 index 0000000..287410b --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr119386-3.c @@ -0,0 +1,10 @@ +/* PR target/119386 */ +/* { dg-do compile { target *-*-linux* } } */ +/* { dg-options "-O2 -fpic -pg -mnop-mcount" } */ +/* { dg-final { scan-assembler ".byte\[ \t\]+0x0f, 0x1f, 0x44, 0x00, 0x00" } } */ + +int +main () +{ + return 0; +} |