diff options
author | Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> | 2015-09-22 11:12:51 +0200 |
---|---|---|
committer | Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> | 2015-09-22 11:12:51 +0200 |
commit | 5c383f026242d25a3c21fdfda42e5ca218b346c8 (patch) | |
tree | d854510497f70338583a6b6c6ca22abb91d9279b | |
parent | 6dca4fd141fd0b9fe0ea662295833b8ed43cb4e8 (diff) | |
download | gdb-5c383f026242d25a3c21fdfda42e5ca218b346c8.zip gdb-5c383f026242d25a3c21fdfda42e5ca218b346c8.tar.gz gdb-5c383f026242d25a3c21fdfda42e5ca218b346c8.tar.bz2 |
Solaris PIE support
include/elf:
* common.h (DF_1_STUB, DF_1_PIE): Define.
ld:
* emulparams/solaris2.sh (GENERATE_PIE_SCRIPT): Set to yes.
* emultempl/elf32.em: Include ldlex.h.
(gld${EMULATION_NAME}_handle_option) [GENERATE_PIE_SCRIPT]
<OPTION_PIE>: Set DF_1_PIE.
binutils:
* readelf.c (process_dynamic_section): Handle DF_1_STUB, DF_1_PIE.
-rw-r--r-- | binutils/ChangeLog | 4 | ||||
-rw-r--r-- | binutils/readelf.c | 10 | ||||
-rw-r--r-- | include/elf/ChangeLog | 4 | ||||
-rw-r--r-- | include/elf/common.h | 2 | ||||
-rw-r--r-- | ld/ChangeLog | 8 | ||||
-rw-r--r-- | ld/emulparams/solaris2.sh | 2 | ||||
-rw-r--r-- | ld/emultempl/elf32.em | 8 |
7 files changed, 38 insertions, 0 deletions
diff --git a/binutils/ChangeLog b/binutils/ChangeLog index 1e1ccd4..13f2166 100644 --- a/binutils/ChangeLog +++ b/binutils/ChangeLog @@ -1,3 +1,7 @@ +2015-09-22 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> + + * readelf.c (process_dynamic_section): Handle DF_1_STUB, DF_1_PIE. + 2015-09-10 Erik Ackermann <kurterikackermann@gmail.com> * strings.c: Add -s/--output-separator option to specify custom diff --git a/binutils/readelf.c b/binutils/readelf.c index 12fb415..4d19e6f 100644 --- a/binutils/readelf.c +++ b/binutils/readelf.c @@ -9241,6 +9241,16 @@ process_dynamic_section (FILE * file) printf (" SINGLETON"); val ^= DF_1_SINGLETON; } + if (val & DF_1_STUB) + { + printf (" STUB"); + val ^= DF_1_STUB; + } + if (val & DF_1_PIE) + { + printf (" PIE"); + val ^= DF_1_PIE; + } if (val != 0) printf (" %lx", val); puts (""); diff --git a/include/elf/ChangeLog b/include/elf/ChangeLog index 47d6bad..8e6bb44 100644 --- a/include/elf/ChangeLog +++ b/include/elf/ChangeLog @@ -1,3 +1,7 @@ +2015-09-22 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> + + * common.h (DF_1_STUB, DF_1_PIE): Define. + 2015-09-21 H.J. Lu <hongjiu.lu@intel.com> * external.h (Elf64_External_Chdr): Change ch_type to 4 bytes diff --git a/include/elf/common.h b/include/elf/common.h index e6d8c14..fbf1f3c 100644 --- a/include/elf/common.h +++ b/include/elf/common.h @@ -867,6 +867,8 @@ #define DF_1_SYMINTPOSE 0x00800000 #define DF_1_GLOBAUDIT 0x01000000 #define DF_1_SINGLETON 0x02000000 +#define DF_1_STUB 0x04000000 +#define DF_1_PIE 0x08000000 /* Flag values for the DT_FLAGS entry. */ #define DF_ORIGIN (1 << 0) diff --git a/ld/ChangeLog b/ld/ChangeLog index a5f1cd7..88a46c5 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,11 @@ +2015-09-22 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> + + * emulparams/solaris2.sh (GENERATE_PIE_SCRIPT): Set to yes. + + * emultempl/elf32.em: Include ldlex.h. + (gld${EMULATION_NAME}_handle_option) [GENERATE_PIE_SCRIPT] + <OPTION_PIE>: Set DF_1_PIE. + 2015-09-22 Alan Modra <amodra@gmail.com> * ld.texinfo: Put --dotsyms/--no-dotsyms on separate lines. diff --git a/ld/emulparams/solaris2.sh b/ld/emulparams/solaris2.sh index dabbb05..aa976f8 100644 --- a/ld/emulparams/solaris2.sh +++ b/ld/emulparams/solaris2.sh @@ -8,3 +8,5 @@ # File, p.63. TEXT_START_SYMBOLS='_START_ = .;' OTHER_END_SYMBOLS='_END_ = .;' +# Beginning with Solaris 11.x and Solaris 12, there's PIE support. +GENERATE_PIE_SCRIPT=yes diff --git a/ld/emultempl/elf32.em b/ld/emultempl/elf32.em index 7fe9089..5fe576e 100644 --- a/ld/emultempl/elf32.em +++ b/ld/emultempl/elf32.em @@ -49,6 +49,7 @@ fragment <<EOF #include "ldmain.h" #include "ldmisc.h" #include "ldexp.h" +#include "ldlex.h" #include "ldlang.h" #include "ldfile.h" #include "ldemul.h" @@ -2289,6 +2290,13 @@ fragment <<EOF EOF fi +if test x"$GENERATE_PIE_SCRIPT" = xyes; then +fragment <<EOF + case OPTION_PIE: + link_info.flags_1 |= (bfd_vma) DF_1_PIE; + break; +EOF +fi fragment <<EOF case 'z': if (strcmp (optarg, "defs") == 0) |