bug-binutils
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Bug ld/23309] New: ld.bfd -u option to force symbol discards symbol whe


From: zenith432 at users dot sourceforge.net
Subject: [Bug ld/23309] New: ld.bfd -u option to force symbol discards symbol when used with LTO plugin and the symbol has hidden or internal visibility
Date: Mon, 18 Jun 2018 16:35:57 +0000

https://sourceware.org/bugzilla/show_bug.cgi?id=23309

            Bug ID: 23309
           Summary: ld.bfd -u option to force symbol discards symbol when
                    used with LTO plugin and the symbol has hidden or
                    internal visibility
           Product: binutils
           Version: 2.31 (HEAD)
            Status: UNCONFIRMED
          Severity: normal
          Priority: P2
         Component: ld
          Assignee: unassigned at sourceware dot org
          Reporter: zenith432 at users dot sourceforge.net
  Target Milestone: ---

Test Case:

test.c
==========
#include <stdio.h>

int main(int argc, char** argv)
{
        printf("Hello World\n");
        return 0;
}

void KeepMe(void)
{
        __asm__ volatile ( ".asciz \"This string should appear in the
executable.\"" );
}
==========

compile with

gcc -o test -flto -fvisibility=hidden -ffunction-sections -save-temps
-fuse-ld=bfd -Wl,--gc-sections,--print-gc-sections,-u,KeepMe test.c
strings -a test | grep This

Output:
/usr/bin/ld.bfd: Removing unused section '.rodata.cst4' in file
'/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/crt1.o'
/usr/bin/ld.bfd: Removing unused section '.data' in file
'/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/crt1.o'
/usr/bin/ld.bfd: Removing unused section '.rodata' in file
'/usr/lib/gcc/x86_64-redhat-linux/8/crtbegin.o'
/usr/bin/ld.bfd: Removing unused section '.text.KeepMe' in file
'test.ltrans0.ltrans.o'

Notice that KeepMe is discarded and does not appear in the output file.

Save the file test.ltrans0.s as test.bfd.s

Now compile with

gcc -o test -flto -fvisibility=hidden -ffunction-sections -save-temps
-fuse-ld=gold -Wl,--gc-sections,--print-gc-sections,-u,KeepMe test.c
strings -a test | grep This

(Using gold instead of bfd)

Output:
/usr/bin/ld.gold: removing unused section from '.rodata.cst4' in file
'/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/crt1.o'
/usr/bin/ld.gold: removing unused section from '.data' in file
'/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/crt1.o'
/usr/bin/ld.gold: removing unused section from '.bss' in file
'/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/crt1.o'
/usr/bin/ld.gold: removing unused section from '.text' in file
'/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/crti.o'
/usr/bin/ld.gold: removing unused section from '.data' in file
'/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/crti.o'
/usr/bin/ld.gold: removing unused section from '.bss' in file
'/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/crti.o'
/usr/bin/ld.gold: removing unused section from '.data' in file
'/usr/lib/gcc/x86_64-redhat-linux/8/crtbegin.o'
/usr/bin/ld.gold: removing unused section from '.rodata' in file
'/usr/lib/gcc/x86_64-redhat-linux/8/crtbegin.o'
/usr/bin/ld.gold: removing unused section from '.data' in file
'/usr/lib64/libc_nonshared.a(elf-init.oS)'
/usr/bin/ld.gold: removing unused section from '.bss' in file
'/usr/lib64/libc_nonshared.a(elf-init.oS)'
/usr/bin/ld.gold: removing unused section from '.text' in file
'/usr/lib/gcc/x86_64-redhat-linux/8/crtend.o'
/usr/bin/ld.gold: removing unused section from '.data' in file
'/usr/lib/gcc/x86_64-redhat-linux/8/crtend.o'
/usr/bin/ld.gold: removing unused section from '.bss' in file
'/usr/lib/gcc/x86_64-redhat-linux/8/crtend.o'
/usr/bin/ld.gold: removing unused section from '.text' in file
'/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/crtn.o'
/usr/bin/ld.gold: removing unused section from '.data' in file
'/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/crtn.o'
/usr/bin/ld.gold: removing unused section from '.bss' in file
'/usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/crtn.o'
/usr/bin/ld.gold: removing unused section from '.text' in file
'test.ltrans0.ltrans.o'
/usr/bin/ld.gold: removing unused section from '.data' in file
'test.ltrans0.ltrans.o'
/usr/bin/ld.gold: removing unused section from '.bss' in file
'test.ltrans0.ltrans.o'
This string should appear in the executable.

So KeepMe is in the executable as it should be.

Rename test.ltrans0.s to test.gold.s

and then... diff test.bfd.s test.gold.s
30a31,32
>       .globl  KeepMe
>       .hidden KeepMe

-- 
You are receiving this mail because:
You are on the CC list for the bug.


reply via email to

[Prev in Thread] Current Thread [Next in Thread]