On Thu, Apr 10, 2025 at 2:26 PM Ard Biesheuvel <ardb+...@google.com> wrote:
>
> From: Ard Biesheuvel <a...@kernel.org>
>
> -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 <a...@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.

LGTM.

Thanks,
Uros.

> ---
>  gcc/config/i386/i386-options.cc            |  4 ++--
>  gcc/testsuite/gcc.target/i386/pr119386-3.c | 10 ++++++++++
>  2 files changed, 12 insertions(+), 2 deletions(-)
>  create mode 100644 gcc/testsuite/gcc.target/i386/pr119386-3.c
>
> diff --git a/gcc/config/i386/i386-options.cc b/gcc/config/i386/i386-options.cc
> index a9fac011f3d..964449fa8cd 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 00000000000..287410b951a
> --- /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;
> +}
> --
> 2.49.0.504.g3bcea36a83-goog
>

Reply via email to