[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.
- [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,
zenith432 at users dot sourceforge.net <=