[Bug target/70146] New: missed-optimization: i386 hidden references should use PC32 relocations instead of GOTOFF

luto at kernel dot org gcc-bugzilla@gcc.gnu.org
Tue Mar 8 21:12:00 GMT 2016


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

            Bug ID: 70146
           Summary: missed-optimization: i386 hidden references should use
                    PC32 relocations instead of GOTOFF
           Product: gcc
           Version: 5.3.1
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: target
          Assignee: unassigned at gcc dot gnu.org
          Reporter: luto at kernel dot org
  Target Milestone: ---

If I compile:

extern char foo[] __attribute__((visibility("hidden")));
char *get_foo(void)
{
        return foo;
}

with gcc -m32 -O2 -fPIC, I get (annocataions trimmed for brevity):

get_foo:
        call    __x86.get_pc_thunk.ax
        addl    $_GLOBAL_OFFSET_TABLE_, %eax
        leal    foo@GOTOFF(%eax), %eax
        ret

I think this should generate:

get_foo:
        call    __x86.get_pc_thunk.ax
.Lpcbase:
        leal    foo-.Lpcbase(%eax), %eax
        ret

That would be smaller, faster, and result in fewer relocations and thus less
time spend linking.


More information about the Gcc-bugs mailing list