From 4ffa17dc9282f67605a2a7235708c259c4943703 Mon Sep 17 00:00:00 2001 From: poma Date: Feb 16 2016 11:13:59 +0000 Subject: Enable -Bsymbolic and -Bsymbolic-functions to PIE. Needed by Syslinux Resolves: #1308296 --- diff --git a/binutils-2.26-Bsymbolic_PIE.patch b/binutils-2.26-Bsymbolic_PIE.patch new file mode 100644 index 0000000..552056a --- /dev/null +++ b/binutils-2.26-Bsymbolic_PIE.patch @@ -0,0 +1,146 @@ +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