[Bug testsuite/80759] gcc.target/x86_64/abi/ms-sysv FAILs

daniel.santos at pobox dot com gcc-bugzilla@gcc.gnu.org
Sun Jun 25 08:03:00 GMT 2017


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80759

Daniel Santos <daniel.santos at pobox dot com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
  Attachment #41605|0                           |1
        is obsolete|                            |

--- Comment #54 from Daniel Santos <daniel.santos at pobox dot com> ---
Created attachment 41627
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=41627&action=edit
darwin fixup (on top of v6) -- second attempt

So I've learned that some_symbol@GOTPCREL(%%rip) resolves to the the address of
the GOT *entry* for that symbol, which has to be dereferenced to get the
address of the object its self.  I was able to test this on my machine by
changing #ifdef __MACH__ to #ifndef and this patch is working using the GOT.

I've re-written do_test_body and added a macro LOAD_TEST_DATA_ADDR(dest) in
hopes to make both the sources fairly readable and the resulting assembly also
readable.  To simplify the routine, I changed mem_to_regs/regs_to_mem to use
r10 instead of rax so that I don't have to save and restore it.

Of course this is sub-optimal code, but the execution of the test program is by
no means the bottleneck -- I'm trying to keep it as simple and maintainable as
possible!

The macro has only two uses, so if you prefer, I can remove it and just replace
it with inline #if blocks, e.g.,

#ifdef __MACH__
        "       mov     " ASMNAME(test_data) "@GOTPCREL(%%rip), %%rax\n"
#else
        "       lea     " ASMNAME(test_data) "(%%rip), %%rax\n"
#endif

Thanks!
Daniel


More information about the Gcc-bugs mailing list