diff -upr binutils-2.26.orig/ld/ld.texinfo binutils-2.26/ld/ld.texinfo --- binutils-2.26.orig/ld/ld.texinfo 2016-02-16 10:45:43.245336561 +0000 +++ binutils-2.26/ld/ld.texinfo 2016-02-16 10:47:04.670763451 +0000 @@ -1325,15 +1325,21 @@ libraries. When creating a shared library, bind references to global symbols to the definition within the shared library, if any. Normally, it is possible for a program linked against a shared library to override the definition -within the shared library. This option is only meaningful on ELF -platforms which support shared libraries. +within the shared library. This option can also be used with the +@option{--export-dynamic} option, when creating a position independent +executable, to bind references to global symbols to the definition within +the executable. This option is only meaningful on ELF platforms which +support shared libraries and position independent executables. @kindex -Bsymbolic-functions @item -Bsymbolic-functions When creating a shared library, bind references to global function symbols to the definition within the shared library, if any. +This option can also be used with the @option{--export-dynamic} option, +when creating a position independent executable, to bind references +to global function symbols to the definition within the executable. This option is only meaningful on ELF platforms which support shared -libraries. +libraries and position independent executables. @kindex --dynamic-list=@var{dynamic-list-file} @item --dynamic-list=@var{dynamic-list-file} diff -upr binutils-2.26.orig/ld/lexsup.c binutils-2.26/ld/lexsup.c --- binutils-2.26.orig/ld/lexsup.c 2016-02-16 10:45:43.246336567 +0000 +++ binutils-2.26/ld/lexsup.c 2016-02-16 10:47:04.671763456 +0000 @@ -1586,15 +1586,14 @@ parse_args (unsigned argc, char **argv) /* We may have -Bsymbolic, -Bsymbolic-functions, --dynamic-list-data, --dynamic-list-cpp-new, --dynamic-list-cpp-typeinfo and --dynamic-list FILE. -Bsymbolic and -Bsymbolic-functions are - for shared libraries. -Bsymbolic overrides all others and vice - versa. */ + for PIC outputs. -Bsymbolic overrides all others and vice versa. */ switch (command_line.symbolic) { case symbolic_unset: break; case symbolic: - /* -Bsymbolic is for shared library only. */ - if (bfd_link_dll (&link_info)) + /* -Bsymbolic is for PIC output only. */ + if (bfd_link_pic (&link_info)) { link_info.symbolic = TRUE; /* Should we free the unused memory? */ @@ -1603,8 +1602,8 @@ parse_args (unsigned argc, char **argv) } break; case symbolic_functions: - /* -Bsymbolic-functions is for shared library only. */ - if (bfd_link_dll (&link_info)) + /* -Bsymbolic-functions is for PIC output only. */ + if (bfd_link_pic (&link_info)) command_line.dynamic_list = dynamic_list_data; break; } diff -upr binutils-2.26.orig/ld/testsuite/ld-i386/i386.exp binutils-2.26/ld/testsuite/ld-i386/i386.exp --- binutils-2.26.orig/ld/testsuite/ld-i386/i386.exp 2016-02-16 10:45:43.319336949 +0000 +++ binutils-2.26/ld/testsuite/ld-i386/i386.exp 2016-02-16 10:47:04.672763461 +0000 @@ -319,6 +319,7 @@ run_dump_test "load5a" run_dump_test "load5b" run_dump_test "load6" run_dump_test "pr19175" +run_dump_test "pr19615" if { !([istarget "i?86-*-linux*"] || [istarget "i?86-*-gnu*"] --- /dev/null 2016-02-16 08:27:18.513962320 +0000 +++ binutils-2.26/ld/testsuite/ld-i386/pr19615.s 2016-02-16 10:56:11.886632341 +0000 @@ -0,0 +1,13 @@ + .text + .globl _start + .type _start, @function +_start: + ret + + .globl xyzzy /* This symbol should be exported */ + .type xyzzy, @function +xyzzy: + ret + + .section ".xyzzy_ptr","aw",%progbits + .dc.a xyzzy --- /dev/null 2016-02-16 08:27:18.513962320 +0000 +++ binutils-2.26/ld/testsuite/ld-i386/pr19615.d 2016-02-16 10:56:11.886632341 +0000 @@ -0,0 +1,13 @@ +#as: --32 +#ld: -pie -Bsymbolic -E -melf_i386 +#readelf: -r --wide --dyn-syms + +Relocation section '.rel.dyn' at offset 0x[0-9a-f]+ contains 1 entries: + Offset Info Type Sym. Value Symbol's Name +[0-9a-f]+ +[0-9a-f]+ +R_386_RELATIVE + + +Symbol table '.dynsym' contains [0-9]+ entries: + Num: Value Size Type Bind Vis Ndx Name +#... +[ ]*[a-f0-9]+: [a-f0-9]+ 0 FUNC GLOBAL DEFAULT [a-f0-9]+ xyzzy +#... --- /dev/null 2016-02-16 08:27:18.513962320 +0000 +++ binutils-2.26/ld/testsuite/ld-x86-64/pr19615.s 2016-02-16 10:57:55.386174958 +0000 @@ -0,0 +1,13 @@ + .text + .globl _start + .type _start, @function +_start: + ret + + .globl xyzzy /* This symbol should be exported */ + .type xyzzy, @function +xyzzy: + ret + + .section ".xyzzy_ptr","aw",%progbits + .dc.a xyzzy --- /dev/null 2016-02-16 08:27:18.513962320 +0000 +++ binutils-2.26/ld/testsuite/ld-x86-64/pr19615.d 2016-02-16 10:57:55.386174958 +0000 @@ -0,0 +1,13 @@ +#as: --64 +#ld: -pie -Bsymbolic -E -melf_x86_64 +#readelf: -r --wide --dyn-syms + +Relocation section '.rela.dyn' at offset 0x[0-9a-f]+ contains 1 entries: + Offset Info Type Symbol's Value Symbol's Name \+ Addend +[0-9a-f]+ +[0-9a-f]+ +R_X86_64_RELATIVE +[0-9]+ + +Symbol table '.dynsym' contains [0-9]+ entries: + Num: Value Size Type Bind Vis Ndx Name +#... +[ ]*[a-f0-9]+: [a-f0-9]+ 0 FUNC GLOBAL DEFAULT [a-f0-9]+ xyzzy +#... --- binutils-2.26.orig/ld/testsuite/ld-x86-64/x86-64.exp 2016-02-16 10:45:43.443337600 +0000 +++ binutils-2.26/ld/testsuite/ld-x86-64/x86-64.exp 2016-02-16 11:01:02.418162157 +0000 @@ -353,6 +353,7 @@ run_dump_test "pr19013-x32" run_dump_test "pr19013-nacl" run_dump_test "pr19162" run_dump_test "pr19175" +run_dump_test "pr19615" # Add $PLT_CFLAGS if PLT is expected. global PLT_CFLAGS