diff options
author | Alan Modra <amodra@gmail.com> | 2013-01-14 13:37:10 +0000 |
---|---|---|
committer | Alan Modra <amodra@gmail.com> | 2013-01-14 13:37:10 +0000 |
commit | 0d705e9f94332dec93970e80afec6c667c79f555 (patch) | |
tree | 72b50754b08938a17dcbddd889102ac21d96d9c2 | |
parent | d6391ce5a607711d3db4847d0fa0dd3c00c289e2 (diff) | |
download | gdb-0d705e9f94332dec93970e80afec6c667c79f555.zip gdb-0d705e9f94332dec93970e80afec6c667c79f555.tar.gz gdb-0d705e9f94332dec93970e80afec6c667c79f555.tar.bz2 |
* ld.texinfo (-Tldata-segment): Describe.
* ldlex.h (OPTION_TLDATA_SEGMENT): New enum value.
* lexsup.c (ld_options): Add -Tldata-segment.
(parse_args): Handle OPTION_TLDATA_SEGMENT.
* scripttempl/elf.sc: Support LARGE_DATA_ADDR.
-rw-r--r-- | ld/ChangeLog | 9 | ||||
-rw-r--r-- | ld/ld.texinfo | 6 | ||||
-rw-r--r-- | ld/ldlex.h | 1 | ||||
-rw-r--r-- | ld/lexsup.c | 5 | ||||
-rw-r--r-- | ld/scripttempl/elf.sc | 9 |
5 files changed, 30 insertions, 0 deletions
diff --git a/ld/ChangeLog b/ld/ChangeLog index 860f05a..cfbe799 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,12 @@ +2013-01-14 Leif Ekblad <leif@rdos.net> + Alan Modra <amodra@gmail.com> + + * ld.texinfo (-Tldata-segment): Describe. + * ldlex.h (OPTION_TLDATA_SEGMENT): New enum value. + * lexsup.c (ld_options): Add -Tldata-segment. + (parse_args): Handle OPTION_TLDATA_SEGMENT. + * scripttempl/elf.sc: Support LARGE_DATA_ADDR. + 2013-01-10 H.J. Lu <hongjiu.lu@intel.com> * deffilep.y: Remove trailing white spaces. diff --git a/ld/ld.texinfo b/ld/ld.texinfo index 4777ad5..2429668 100644 --- a/ld/ld.texinfo +++ b/ld/ld.texinfo @@ -1846,6 +1846,12 @@ When creating an ELF executable or shared object for a target where the read-only data is in its own segment separate from the executable text, it will set the address of the first byte of the read-only data segment. +@kindex -Tldata-segment=@var{org} +@item -Tldata-segment=@var{org} +@cindex ldata segment origin, cmd line +When creating an ELF executable or shared object for x86-64 medium memory +model, it will set the address of the first byte of the ldata segment. + @kindex --unresolved-symbols @item --unresolved-symbols=@var{method} Determine how to handle unresolved symbols. There are four possible @@ -69,6 +69,7 @@ enum option_values OPTION_TTEXT, OPTION_TTEXT_SEGMENT, OPTION_TRODATA_SEGMENT, + OPTION_TLDATA_SEGMENT, OPTION_TRADITIONAL_FORMAT, OPTION_UR, OPTION_VERBOSE, diff --git a/ld/lexsup.c b/ld/lexsup.c index 4fd929a..2f71750 100644 --- a/ld/lexsup.c +++ b/ld/lexsup.c @@ -446,6 +446,8 @@ static const struct ld_option ld_options[] = '\0', N_("ADDRESS"), N_("Set address of text segment"), ONE_DASH }, { {"Trodata-segment", required_argument, NULL, OPTION_TRODATA_SEGMENT}, '\0', N_("ADDRESS"), N_("Set address of rodata segment"), ONE_DASH }, + { {"Tldata-segment", required_argument, NULL, OPTION_TLDATA_SEGMENT}, + '\0', N_("ADDRESS"), N_("Set address of ldata segment"), ONE_DASH }, { {"unresolved-symbols=<method>", required_argument, NULL, OPTION_UNRESOLVED_SYMBOLS}, '\0', NULL, N_("How to handle unresolved symbols. <method> is:\n" @@ -1199,6 +1201,9 @@ parse_args (unsigned argc, char **argv) case OPTION_TRODATA_SEGMENT: set_segment_start (".rodata-segment", optarg); break; + case OPTION_TLDATA_SEGMENT: + set_segment_start (".ldata-segment", optarg); + break; case OPTION_TRADITIONAL_FORMAT: link_info.traditional_format = TRUE; break; diff --git a/ld/scripttempl/elf.sc b/ld/scripttempl/elf.sc index cf3f6d8..bbff233 100644 --- a/ld/scripttempl/elf.sc +++ b/ld/scripttempl/elf.sc @@ -608,6 +608,15 @@ cat <<EOF ${LARGE_BSS_AFTER_BSS+${LARGE_BSS}} ${RELOCATING+${OTHER_BSS_END_SYMBOLS}} ${RELOCATING+. = ALIGN(${ALIGNMENT});} +EOF + +LARGE_DATA_ADDR=". = SEGMENT_START(\"ldata-segment\", ${LARGE_DATA_ADDR-.});" +SHLIB_LARGE_DATA_ADDR=". = SEGMENT_START(\"ldata-segment\", ${SHLIB_LARGE_DATA_ADDR-.});" + + cat <<EOF + ${RELOCATING+${CREATE_SHLIB-${CREATE_PIE-${LARGE_DATA_ADDR}}}} + ${RELOCATING+${CREATE_SHLIB+${SHLIB_LARGE_DATA_ADDR}}} + ${RELOCATING+${CREATE_PIE+${SHLIB_LARGE_DATA_ADDR}}} ${LARGE_SECTIONS} ${LARGE_BSS_AFTER_BSS-${LARGE_BSS}} ${RELOCATING+. = ALIGN(${ALIGNMENT});} |