forked from Imagelibrary/binutils-gdb
ld: optionally emit _etext last, before .data
So, here's my suggestion for making _init .. __etext cover .text + .rodata (including things like the read-only exception tables) for elf64mmix. A quick web search gives that __etext (and friends) isn't well defined, so each target can interpret the "end of text segment" to their own liking. It seems likely this change is also a better fit than the default for other ports, at least those with .rodata after .text in the same segment. The presence of a separate rodata-segment is optional (and not true for elf64mmix). This is reflected in the name as SEPARATE_TEXT / SEPARATE_CODE isn't considered, to keep it simple; each target has to make sure their settings of variables make sense. ld: * scripttempl/elf.sc (ETEXT_LAST_IN_RODATA_SEGMENT): New variable. * emulparams/elf64mmix.sh (ETEXT_LAST_IN_RODATA_SEGMENT): Define. * testsuite/ld-mmix/sec-1.d: Adjust.
This commit is contained in:
@@ -1,3 +1,9 @@
|
||||
2020-07-19 Hans-Peter Nilsson <hp@bitrange.com>
|
||||
|
||||
* scripttempl/elf.sc (ETEXT_LAST_IN_RODATA_SEGMENT): New variable.
|
||||
* emulparams/elf64mmix.sh (ETEXT_LAST_IN_RODATA_SEGMENT): Define.
|
||||
* testsuite/ld-mmix/sec-1.d: Adjust.
|
||||
|
||||
2020-07-19 Alan Modra <amodra@gmail.com>
|
||||
|
||||
* emultempl/ppc64elf.em (power10-stubs): Accept optional "auto" arg.
|
||||
|
||||
@@ -44,6 +44,10 @@ ${RELOCATING+
|
||||
PROVIDE (Main = DEFINED (Main) ? Main : (DEFINED (_start) ? _start : _start.));
|
||||
}"
|
||||
|
||||
# We need a symbol at the end of the read-only data, which is
|
||||
# colocated with the code. We make __etext fit.
|
||||
ETEXT_LAST_IN_RODATA_SEGMENT=" "
|
||||
|
||||
OTHER_SECTIONS='
|
||||
.MMIX.reg_contents :
|
||||
{
|
||||
|
||||
@@ -62,6 +62,9 @@
|
||||
# OTHER_SYMBOLS - symbols to place right at the end of the script.
|
||||
# ETEXT_NAME - name of a symbol for the end of the text section,
|
||||
# normally etext.
|
||||
# ETEXT_LAST_IN_RODATA_SEGMENT - emit ETEXT_NAME after all sections in
|
||||
# the read-only data segment (which may or may not be equal to
|
||||
# the code segment), instead of after just the code parts.
|
||||
# SEPARATE_CODE - if set, .text and similar sections containing
|
||||
# actual machine instructions must be in wholly disjoint
|
||||
# pages from any other data, including headers
|
||||
@@ -526,9 +529,9 @@ cat <<EOF
|
||||
KEEP (*(SORT_NONE(.fini)))
|
||||
${RELOCATING+${FINI_END}}
|
||||
} ${FILL}
|
||||
${RELOCATING+PROVIDE (__${ETEXT_NAME} = .);}
|
||||
${RELOCATING+PROVIDE (_${ETEXT_NAME} = .);}
|
||||
${RELOCATING+PROVIDE (${ETEXT_NAME} = .);}
|
||||
${RELOCATING+${ETEXT_LAST_IN_RODATA_SEGMENT-PROVIDE (__${ETEXT_NAME} = .);}}
|
||||
${RELOCATING+${ETEXT_LAST_IN_RODATA_SEGMENT-PROVIDE (_${ETEXT_NAME} = .);}}
|
||||
${RELOCATING+${ETEXT_LAST_IN_RODATA_SEGMENT-PROVIDE (${ETEXT_NAME} = .);}}
|
||||
${RELOCATING+${TEXT_SEGMENT_ALIGN}}
|
||||
EOF
|
||||
|
||||
@@ -574,6 +577,10 @@ cat <<EOF
|
||||
.exception_ranges ${RELOCATING-0} : ONLY_IF_RO { *(.exception_ranges${RELOCATING+*}) }
|
||||
${TEXT_PLT+${PLT_NEXT_DATA+${PLT} ${OTHER_PLT_SECTIONS}}}
|
||||
|
||||
${RELOCATING+${ETEXT_LAST_IN_RODATA_SEGMENT+PROVIDE (__${ETEXT_NAME} = .);}}
|
||||
${RELOCATING+${ETEXT_LAST_IN_RODATA_SEGMENT+PROVIDE (_${ETEXT_NAME} = .);}}
|
||||
${RELOCATING+${ETEXT_LAST_IN_RODATA_SEGMENT+PROVIDE (${ETEXT_NAME} = .);}}
|
||||
|
||||
${RELOCATING+/* Adjust the address for the data segment. We want to adjust up to
|
||||
the same address within the page on the next page up. */}
|
||||
${CREATE_SHLIB-${CREATE_PIE-${RELOCATING+. = ${DATA_ADDR-${DATA_SEGMENT_ALIGN}};}}}
|
||||
|
||||
@@ -24,7 +24,7 @@ Idx Name Size VMA LMA File off Algn
|
||||
|
||||
SYMBOL TABLE:
|
||||
#...
|
||||
0+1d g +\*ABS\* _etext
|
||||
0+30 g +\*ABS\* _etext
|
||||
#...
|
||||
2000000000000013 g +\*ABS\* __bss_start
|
||||
2000000000000013 g +\*ABS\* _edata
|
||||
|
||||
Reference in New Issue
Block a user