On August 18, 2018 2:40:01 PM GMT+02:00, Iain Sandoe <i...@sandoe.co.uk> wrote:
>Hi,
>
>If we use an assembler which supports HAVE_AS_GOTOFF_IN_DATA,
>(e.g. a modern GAS) on Darwin, we produce wrong code because the
>gotoff-in-data test is conducted before the mach-o case.
>
>This should be a no-op on non-Darwin targets, since the Darwin test is
>guarded
>on #ifdef TARGET_MACHO.
>
>Bootstrapped on x86_64-linux-gnu (with 32 multilib) and on
>x86_64-apple-darwin10 and 16.
>
>OK for trunk?

OK. 

Richard. 

>Iain
>
>gcc/
>
>       * config/i386/i386.c (ix86_output_addr_diff_elt): Move the MACH-O
>       specific test before the one for HAVE_AS_GOTOFF_IN_DATA.
>
>
>---
> gcc/config/i386/i386.c | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
>diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
>index 3548de2169..9c8a1f0ee9 100644
>--- a/gcc/config/i386/i386.c
>+++ b/gcc/config/i386/i386.c
>@@ -19768,8 +19768,6 @@ ix86_output_addr_diff_elt (FILE *file, int
>value, int rel)
>   if (TARGET_64BIT || TARGET_VXWORKS_RTP)
>     fprintf (file, "%s%s%d-%s%d\n",
>            directive, LPREFIX, value, LPREFIX, rel);
>-  else if (HAVE_AS_GOTOFF_IN_DATA)
>-    fprintf (file, ASM_LONG "%s%d@GOTOFF\n", LPREFIX, value);
> #if TARGET_MACHO
>   else if (TARGET_MACHO)
>     {
>@@ -19778,6 +19776,8 @@ ix86_output_addr_diff_elt (FILE *file, int
>value, int rel)
>       putc ('\n', file);
>     }
> #endif
>+  else if (HAVE_AS_GOTOFF_IN_DATA)
>+    fprintf (file, ASM_LONG "%s%d@GOTOFF\n", LPREFIX, value);
>   else
>     asm_fprintf (file, ASM_LONG "%U%s+[.-%s%d]\n",
>                GOT_SYMBOL_NAME, LPREFIX, value);

Reply via email to