ld/
* ld.texinfo (Options): Describe -Trodata-segment. * ldlex.h (enum option_values): Add OPTION_TRODATA_SEGMENT. * lexsup.c (ld_options, parse_args): Handle -Trodata-segment. * scripttempl/elf.sc (RODATA_ADDR, SHLIB_RODATA_ADDR): Wrap SEGMENT_START("rodata-segment", ...) + SIZEOF_HEADERS around the value.
This commit is contained in:
parent
d8a4f9280a
commit
9d5777a34c
@ -1,3 +1,11 @@
|
||||
2012-12-18 Roland McGrath <mcgrathr@google.com>
|
||||
|
||||
* ld.texinfo (Options): Describe -Trodata-segment.
|
||||
* ldlex.h (enum option_values): Add OPTION_TRODATA_SEGMENT.
|
||||
* lexsup.c (ld_options, parse_args): Handle -Trodata-segment.
|
||||
* scripttempl/elf.sc (RODATA_ADDR, SHLIB_RODATA_ADDR): Wrap
|
||||
SEGMENT_START("rodata-segment", ...) + SIZEOF_HEADERS around the value.
|
||||
|
||||
2012-12-17 Nick Clifton <nickc@redhat.com>
|
||||
|
||||
* MAINTAINERS: Add copyright notice.
|
||||
|
@ -1837,6 +1837,13 @@ Same as @option{--section-start}, with @code{.bss}, @code{.data} or
|
||||
When creating an ELF executable or shared object, it will set the address
|
||||
of the first byte of the text segment.
|
||||
|
||||
@kindex -Trodata-segment=@var{org}
|
||||
@item -Trodata-segment=@var{org}
|
||||
@cindex rodata segment origin, cmd line
|
||||
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 --unresolved-symbols
|
||||
@item --unresolved-symbols=@var{method}
|
||||
Determine how to handle unresolved symbols. There are four possible
|
||||
|
@ -68,6 +68,7 @@ enum option_values
|
||||
OPTION_TDATA,
|
||||
OPTION_TTEXT,
|
||||
OPTION_TTEXT_SEGMENT,
|
||||
OPTION_TRODATA_SEGMENT,
|
||||
OPTION_TRADITIONAL_FORMAT,
|
||||
OPTION_UR,
|
||||
OPTION_VERBOSE,
|
||||
|
@ -441,6 +441,8 @@ static const struct ld_option ld_options[] =
|
||||
'\0', N_("ADDRESS"), N_("Set address of .text section"), ONE_DASH },
|
||||
{ {"Ttext-segment", required_argument, NULL, OPTION_TTEXT_SEGMENT},
|
||||
'\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 },
|
||||
{ {"unresolved-symbols=<method>", required_argument, NULL,
|
||||
OPTION_UNRESOLVED_SYMBOLS},
|
||||
'\0', NULL, N_("How to handle unresolved symbols. <method> is:\n"
|
||||
@ -1191,6 +1193,9 @@ parse_args (unsigned argc, char **argv)
|
||||
case OPTION_TTEXT_SEGMENT:
|
||||
set_segment_start (".text-segment", optarg);
|
||||
break;
|
||||
case OPTION_TRODATA_SEGMENT:
|
||||
set_segment_start (".rodata-segment", optarg);
|
||||
break;
|
||||
case OPTION_TRADITIONAL_FORMAT:
|
||||
link_info.traditional_format = TRUE;
|
||||
break;
|
||||
|
@ -492,12 +492,26 @@ cat <<EOF
|
||||
EOF
|
||||
|
||||
if test -n "${SEPARATE_CODE}"; then
|
||||
if test -n "${RODATA_ADDR}"; then
|
||||
RODATA_ADDR="\
|
||||
SEGMENT_START(\"rodata-segment\", ${RODATA_ADDR}) + SIZEOF_HEADERS"
|
||||
else
|
||||
RODATA_ADDR="ALIGN(${SEGMENT_SIZE}) + (. & (${MAXPAGESIZE} - 1))}"
|
||||
RODATA_ADDR="SEGMENT_START(\"rodata-segment\", ${RODATA_ADDR})"
|
||||
fi
|
||||
if test -n "${SHLIB_RODATA_ADDR}"; then
|
||||
SHLIB_RODATA_ADDR="\
|
||||
SEGMENT_START(\"rodata-segment\", ${SHLIB_RODATA_ADDR}) + SIZEOF_HEADERS"
|
||||
else
|
||||
SHLIB_RODATA_ADDR="SEGMENT_START(\"rodata-segment\", ${SHLIB_RODATA_ADDR})"
|
||||
SHLIB_RODATA_ADDR="ALIGN(${SEGMENT_SIZE}) + (. & (${MAXPAGESIZE} - 1))"
|
||||
fi
|
||||
cat <<EOF
|
||||
/* Adjust the address for the rodata segment. We want to adjust up to
|
||||
the same address within the page on the next page up. */
|
||||
${CREATE_SHLIB-${CREATE_PIE-${RELOCATING+. = ${RODATA_ADDR-ALIGN(${SEGMENT_SIZE}) + (. & (${MAXPAGESIZE} - 1))};}}}
|
||||
${CREATE_SHLIB+${RELOCATING+. = ${SHLIB_RODATA_ADDR-ALIGN(${SEGMENT_SIZE}) + (. & (${MAXPAGESIZE} - 1))};}}
|
||||
${CREATE_PIE+${RELOCATING+. = ${SHLIB_RODATA_ADDR-ALIGN(${SEGMENT_SIZE}) + (. & (${MAXPAGESIZE} - 1))};}}
|
||||
${CREATE_SHLIB-${CREATE_PIE-${RELOCATING+. = ${RODATA_ADDR};}}}
|
||||
${CREATE_SHLIB+${RELOCATING+. = ${SHLIB_RODATA_ADDR};}}
|
||||
${CREATE_PIE+${RELOCATING+. = ${SHLIB_RODATA_ADDR};}}
|
||||
EOF
|
||||
emit_early_ro
|
||||
emit_dyn
|
||||
|
Loading…
x
Reference in New Issue
Block a user