public inbox for binutils@sourceware.org
 help / color / mirror / Atom feed
* [PATCH] Updated RDOS support
@ 2013-01-04 22:03 Leif Ekblad
  2013-01-08  9:24 ` Alan Modra
  0 siblings, 1 reply; 7+ messages in thread
From: Leif Ekblad @ 2013-01-04 22:03 UTC (permalink / raw)
  To: binutils

[-- Attachment #1: Type: text/plain, Size: 521 bytes --]

Change log:
* bfd/config.bfd: Removed unsupported models for rdos.
* ld/configure.tgt: Changed rdos target emulation to use a new file
* ld/emulparams/elf64rdos.sh: New emulation file for target rdos.
* ld/Makefile.am: Added target emulation file to makefile.
* ld/scripttempl/elf.sc: Fixed error in RODATA_ADDR script. Added support 
for putting large data in separate segment at a fixed address.
* ld/Makefile.in: Regenerated with autoconf from ld/Makefile.am

Tested with target rdos and rdos32.

Regards,
Leif Ekblad

[-- Attachment #2: binutils.diff --]
[-- Type: application/octet-stream, Size: 6330 bytes --]

diff -crN binutils-/bfd/config.bfd binutils-work/bfd/config.bfd
*** binutils-/bfd/config.bfd	2013-01-02 14:13:36.000000000 +0100
--- binutils-work/bfd/config.bfd	2013-01-04 19:51:54.000000000 +0100
***************
*** 680,686 ****
      ;;
    x86_64-*-rdos*)
      targ_defvec=bfd_elf64_x86_64_vec
-     targ_selvecs="bfd_elf32_i386_vec bfd_elf64_l1om_vec bfd_elf64_k1om_vec"
      want64=true
      ;;
  #endif
--- 680,685 ----
diff -crN binutils-/ld/configure.tgt binutils-work/ld/configure.tgt
*** binutils-/ld/configure.tgt	2012-12-05 06:48:20.000000000 +0100
--- binutils-work/ld/configure.tgt	2013-01-04 19:51:54.000000000 +0100
***************
*** 199,205 ****
  i[3-7]86-*-rtems*)	targ_emul=elf_i386 ;;
  i[3-7]86-*-aros*)	targ_emul=elf_i386 ;;
  i[3-7]86-*-rdos*)	targ_emul=elf_i386 ;;
! x86_64-*-rdos*)		targ_emul=elf_x86_64 ;;
  i[3-7]86-*-bsd)		targ_emul=i386bsd ;;
  i[3-7]86-*-bsd386)	targ_emul=i386bsd ;;
  i[3-7]86-*-bsdi*)	targ_emul=i386bsd ;;
--- 199,205 ----
  i[3-7]86-*-rtems*)	targ_emul=elf_i386 ;;
  i[3-7]86-*-aros*)	targ_emul=elf_i386 ;;
  i[3-7]86-*-rdos*)	targ_emul=elf_i386 ;;
! x86_64-*-rdos*)		targ_emul=elf64rdos ;;
  i[3-7]86-*-bsd)		targ_emul=i386bsd ;;
  i[3-7]86-*-bsd386)	targ_emul=i386bsd ;;
  i[3-7]86-*-bsdi*)	targ_emul=i386bsd ;;
diff -crN binutils-/ld/emulparams/elf64rdos.sh binutils-work/ld/emulparams/elf64rdos.sh
*** binutils-/ld/emulparams/elf64rdos.sh	1970-01-01 01:00:00.000000000 +0100
--- binutils-work/ld/emulparams/elf64rdos.sh	2013-01-04 20:30:28.000000000 +0100
***************
*** 0 ****
--- 1,23 ----
+ . ${srcdir}/emulparams/plt_unwind.sh
+ SCRIPT_NAME=elf
+ ELFSIZE=64
+ OUTPUT_FORMAT="elf64-x86-64"
+ NO_REL_RELOCS=yes
+ MAXPAGESIZE=0x1000
+ COMMONPAGESIZE=0x1000
+ TEXT_START_ADDR=0x180E0000000
+ LARGE_DATA_ADDR=0x30020000000
+ ARCH="i386:x86-64"
+ MACHINE=
+ TEMPLATE_NAME=elf32
+ GENERATE_SHLIB_SCRIPT=yes
+ GENERATE_PIE_SCRIPT=yes
+ LARGE_SECTIONS=yes
+ IREL_IN_PLT=
+ 
+ if [ "x${host}" = "x${target}" ]; then
+   case " $EMULATION_LIBPATH " in
+     *" ${EMULATION_NAME} "*)
+       NATIVE=yes
+   esac
+ fi
diff -crN binutils-/ld/Makefile.am binutils-work/ld/Makefile.am
*** binutils-/ld/Makefile.am	2012-12-17 17:56:04.000000000 +0100
--- binutils-work/ld/Makefile.am	2013-01-04 19:51:54.000000000 +0100
***************
*** 512,517 ****
--- 512,518 ----
  	eelf64mmix.c \
  	eelf64ppc.c \
  	eelf64ppc_fbsd.c \
+ 	eelf64rdos.c \
  	eelf64tilegx.c \
  	eelf64tilegx_be.c \
  	eelf_l1om.c \
***************
*** 2084,2089 ****
--- 2085,2093 ----
    $(srcdir)/emultempl/ppc64elf.em ldemul-list.h \
    $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
  	${GENSCRIPTS} elf64ppc_fbsd "$(tdir_elf64ppc_fbsd)"
+ eelf64rdos.c: $(srcdir)/emulparams/elf64rdos.sh \
+   $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ 	${GENSCRIPTS} elf64tilegx "$(tdir_elf64rdos)"
  eelf64tilegx.c: $(srcdir)/emulparams/elf64tilegx.sh \
    $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/needrelax.em \
    $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
diff -crN binutils-/ld/Makefile.in binutils-work/ld/Makefile.in
*** binutils-/ld/Makefile.in	2012-12-17 17:56:04.000000000 +0100
--- binutils-work/ld/Makefile.in	2013-01-04 19:51:54.000000000 +0100
***************
*** 819,824 ****
--- 819,825 ----
  	eelf64mmix.c \
  	eelf64ppc.c \
  	eelf64ppc_fbsd.c \
+ 	eelf64rdos.c \
  	eelf64tilegx.c \
  	eelf64tilegx_be.c \
  	eelf_l1om.c \
***************
*** 1232,1237 ****
--- 1233,1239 ----
  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf64mmix.Po@am__quote@
  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf64ppc.Po@am__quote@
  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf64ppc_fbsd.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf64rdos.Po@am__quote@
  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf64tilegx.Po@am__quote@
  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf64tilegx_be.Po@am__quote@
  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf_i386.Po@am__quote@
***************
*** 3558,3563 ****
--- 3560,3568 ----
    $(srcdir)/emultempl/ppc64elf.em ldemul-list.h \
    $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
  	${GENSCRIPTS} elf64ppc_fbsd "$(tdir_elf64ppc_fbsd)"
+ eelf64rdos.c: $(srcdir)/emulparams/elf64rdos.sh \
+   $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+ 	${GENSCRIPTS} elf64rdos "$(tdir_elf64rdos)"
  eelf64tilegx.c: $(srcdir)/emulparams/elf64tilegx.sh \
    $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/needrelax.em \
    $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
diff -crN binutils-/ld/scripttempl/elf.sc binutils-work/ld/scripttempl/elf.sc
*** binutils-/ld/scripttempl/elf.sc	2012-12-18 21:42:44.000000000 +0100
--- binutils-work/ld/scripttempl/elf.sc	2013-01-04 20:17:00.000000000 +0100
***************
*** 496,502 ****
      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
--- 496,502 ----
      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
***************
*** 605,610 ****
--- 605,626 ----
        pad the .data section.  */
     ${RELOCATING+. = ALIGN(. != 0 ? ${ALIGNMENT} : 1);}
    }
+ 
+ EOF
+ 
+ if test -n "${LARGE_DATA_ADDR}"; then
+   LARGE_DATA_ADDR=". = \
+ SEGMENT_START(\"ldata-segment\", ${LARGE_DATA_ADDR}) + SIZEOF_HEADERS;"
+ fi
+ if test -n "${SHLIB_LARGE_DATA_ADDR}"; then
+   SHLIB_LARGE_DATA_ADDR=". = \
+ SEGMENT_START(\"ldata-segment\", ${SHLIB_LARGE_DATA_ADDR}) + SIZEOF_HEADERS;"
+ fi
+   cat <<EOF
+   ${RELOCATING+${CREATE_SHLIB-${CREATE_PIE-${LARGE_DATA_ADDR}}}}
+   ${RELOCATING+${CREATE_SHLIB+${SHLIB_LARGE_DATA_ADDR}}}
+   ${RELOCATING+${CREATE_PIE+${SHLIB_LARGE_DATA_ADDR}}}
+ 
    ${OTHER_BSS_SECTIONS}
    ${RELOCATING+${OTHER_BSS_END_SYMBOLS}}
    ${RELOCATING+. = ALIGN(${ALIGNMENT});}

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH] Updated RDOS support
  2013-01-04 22:03 [PATCH] Updated RDOS support Leif Ekblad
@ 2013-01-08  9:24 ` Alan Modra
  2013-01-08 20:43   ` Leif Ekblad
  0 siblings, 1 reply; 7+ messages in thread
From: Alan Modra @ 2013-01-08  9:24 UTC (permalink / raw)
  To: Leif Ekblad; +Cc: binutils

On Fri, Jan 04, 2013 at 11:03:51PM +0100, Leif Ekblad wrote:
> Change log:
> * bfd/config.bfd: Removed unsupported models for rdos.
> * ld/configure.tgt: Changed rdos target emulation to use a new file
> * ld/emulparams/elf64rdos.sh: New emulation file for target rdos.
> * ld/Makefile.am: Added target emulation file to makefile.
> * ld/scripttempl/elf.sc: Fixed error in RODATA_ADDR script. Added
> support for putting large data in separate segment at a fixed
> address.
> * ld/Makefile.in: Regenerated with autoconf from ld/Makefile.am

> *** 2084,2089 ****
> --- 2085,2093 ----
>     $(srcdir)/emultempl/ppc64elf.em ldemul-list.h \
>     $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
>   	${GENSCRIPTS} elf64ppc_fbsd "$(tdir_elf64ppc_fbsd)"
> + eelf64rdos.c: $(srcdir)/emulparams/elf64rdos.sh \
> +   $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
> + 	${GENSCRIPTS} elf64tilegx "$(tdir_elf64rdos)"

elf64tilegx?

> + 
> + EOF
> + 
> + if test -n "${LARGE_DATA_ADDR}"; then
> +   LARGE_DATA_ADDR=". = \
> + SEGMENT_START(\"ldata-segment\", ${LARGE_DATA_ADDR}) + SIZEOF_HEADERS;"
> + fi
> + if test -n "${SHLIB_LARGE_DATA_ADDR}"; then
> +   SHLIB_LARGE_DATA_ADDR=". = \
> + SEGMENT_START(\"ldata-segment\", ${SHLIB_LARGE_DATA_ADDR}) + SIZEOF_HEADERS;"
> + fi
> +   cat <<EOF
> +   ${RELOCATING+${CREATE_SHLIB-${CREATE_PIE-${LARGE_DATA_ADDR}}}}
> +   ${RELOCATING+${CREATE_SHLIB+${SHLIB_LARGE_DATA_ADDR}}}
> +   ${RELOCATING+${CREATE_PIE+${SHLIB_LARGE_DATA_ADDR}}}
> + 
>     ${OTHER_BSS_SECTIONS}
>     ${RELOCATING+${OTHER_BSS_END_SYMBOLS}}
>     ${RELOCATING+. = ALIGN(${ALIGNMENT});}

Why should $LARGE_DATA_ADDR affect $OTHER_BSS_SECTIONS?  Hmm, I see
LARGE_SECTIONS=yes adds .lbss to OTHER_BSS_SECTIONS.  That's not very
nice as quite a few targets use OTHER_BSS_SECTIONS for other purposes.
Your patch makes this even more confusing.  Also, since you seem to
want a separate large segment, do you really want to lay out your
large sections as .lbss, .lrodata, .ldata?  Wouldn't .lrodata, .ldata,
.lbss make more sense?

Also, there isn't much point in adding support for -Tldata-segment
here without the rest of the support, so that needs adding or simply
omit use of SEGMENT_START().

I committed your fix for RODATA_ADDR.  Thanks!

-- 
Alan Modra
Australia Development Lab, IBM

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH] Updated RDOS support
  2013-01-08  9:24 ` Alan Modra
@ 2013-01-08 20:43   ` Leif Ekblad
  2013-01-09  5:51     ` Alan Modra
  0 siblings, 1 reply; 7+ messages in thread
From: Leif Ekblad @ 2013-01-08 20:43 UTC (permalink / raw)
  To: Alan Modra; +Cc: binutils


----- Original Message ----- 
From: "Alan Modra" <amodra@gmail.com>
> Why should $LARGE_DATA_ADDR affect $OTHER_BSS_SECTIONS?  Hmm, I see
> LARGE_SECTIONS=yes adds .lbss to OTHER_BSS_SECTIONS.  That's not very
> nice as quite a few targets use OTHER_BSS_SECTIONS for other purposes.
> Your patch makes this even more confusing.  Also, since you seem to
> want a separate large segment, do you really want to lay out your
> large sections as .lbss, .lrodata, .ldata?  Wouldn't .lrodata, .ldata,
> .lbss make more sense?

Yes, absolutely. If the lbss area is large it will also increase executable 
size for no reason.
But, shouldn't this be the order regardless of LARGE_DATA_ADDR setting? This
seems like a bug.

Thoughts?


> Also, there isn't much point in adding support for -Tldata-segment
> here without the rest of the support, so that needs adding or simply
> omit use of SEGMENT_START().

I think that if the large segment is separated by some TBs of virtual 
memory,
the executable file would become enormous without a new section. But
I might be wrong here.

I'll look into the additional support reqúired for -Tldata-segment.


> I committed your fix for RODATA_ADDR.  Thanks!

There is also a problem with SEPARATE_CODE. First to achieve reasonable
separation it is not enough to increase address by page-size. There needs to 
be
at least on guard-page for effective separation. I would suggest the 
algorithm
should be:
1. Page align
2. Add at least one page more

Leif Ekblad

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH] Updated RDOS support
  2013-01-08 20:43   ` Leif Ekblad
@ 2013-01-09  5:51     ` Alan Modra
  2013-01-09 15:51       ` H.J. Lu
  2013-01-09 20:12       ` [PATCH] Large section data, was: " Leif Ekblad
  0 siblings, 2 replies; 7+ messages in thread
From: Alan Modra @ 2013-01-09  5:51 UTC (permalink / raw)
  To: Leif Ekblad; +Cc: binutils

On Tue, Jan 08, 2013 at 09:43:16PM +0100, Leif Ekblad wrote:
> 
> ----- Original Message ----- From: "Alan Modra" <amodra@gmail.com>
> >Why should $LARGE_DATA_ADDR affect $OTHER_BSS_SECTIONS?  Hmm, I see
> >LARGE_SECTIONS=yes adds .lbss to OTHER_BSS_SECTIONS.  That's not very
> >nice as quite a few targets use OTHER_BSS_SECTIONS for other purposes.
> >Your patch makes this even more confusing.  Also, since you seem to
> >want a separate large segment, do you really want to lay out your
> >large sections as .lbss, .lrodata, .ldata?  Wouldn't .lrodata, .ldata,
> >.lbss make more sense?
> 
> Yes, absolutely. If the lbss area is large it will also increase
> executable size for no reason.
> But, shouldn't this be the order regardless of LARGE_DATA_ADDR setting? This
> seems like a bug.
> 
> Thoughts?

I don't know why the existing scripts put .lbss first.  The patch
adding x86_64 support for large sections is here:
http://sourceware.org/ml/binutils/2005-07/msg00407.html
Prior to that, hppa64 had a huge bss section placed more or less in
the same location but no large data or rodata section as far as I
know.  

Here's a tidy that should make adding LARGE_DATA_ADDR easy.

	* emulparams/elf_x86_64.sh (LARGE_BSS_AFTER_BSS): Define.
	* emulparams/elf32_x86_64.sh: Likewise.
	* emulparams/elf_k1om.sh: Likewise.
	* emulparams/elf_l1om.sh: Likewise.
	* scripttempl/elf.sc (LARGE_BSS): Define rather than appending to
	OTHER_BSS_SECTIONS.  Substitute in script.

> >Also, there isn't much point in adding support for -Tldata-segment
> >here without the rest of the support, so that needs adding or simply
> >omit use of SEGMENT_START().
> 
> I think that if the large segment is separated by some TBs of
> virtual memory,
> the executable file would become enormous without a new section. But
> I might be wrong here.

You'll get a new segment (program header) whether or not SEGMENT_START
is used.  See bfd/elf.c:_bfd_elf_map_sections_to_segments.  I'll leave
answering your concern about SEPARATE_CODE to Roland.


Index: ld/emulparams/elf32_x86_64.sh
===================================================================
RCS file: /cvs/src/src/ld/emulparams/elf32_x86_64.sh,v
retrieving revision 1.5
diff -u -p -r1.5 elf32_x86_64.sh
--- ld/emulparams/elf32_x86_64.sh	11 Jun 2012 13:23:50 -0000	1.5
+++ ld/emulparams/elf32_x86_64.sh	9 Jan 2013 03:51:27 -0000
@@ -13,6 +13,7 @@ GENERATE_SHLIB_SCRIPT=yes
 GENERATE_PIE_SCRIPT=yes
 NO_SMALL_DATA=yes
 LARGE_SECTIONS=yes
+LARGE_BSS_AFTER_BSS=
 SEPARATE_GOTPLT="SIZEOF (.got.plt) >= 24 ? 24 : 0"
 IREL_IN_PLT=
 
Index: ld/emulparams/elf_k1om.sh
===================================================================
RCS file: /cvs/src/src/ld/emulparams/elf_k1om.sh,v
retrieving revision 1.3
diff -u -p -r1.3 elf_k1om.sh
--- ld/emulparams/elf_k1om.sh	11 Jun 2012 13:23:50 -0000	1.3
+++ ld/emulparams/elf_k1om.sh	9 Jan 2013 03:51:27 -0000
@@ -14,6 +14,7 @@ GENERATE_SHLIB_SCRIPT=yes
 GENERATE_PIE_SCRIPT=yes
 NO_SMALL_DATA=yes
 LARGE_SECTIONS=yes
+LARGE_BSS_AFTER_BSS=
 SEPARATE_GOTPLT="SIZEOF (.got.plt) >= 24 ? 24 : 0"
 
 if [ "x${host}" = "x${target}" ]; then
Index: ld/emulparams/elf_l1om.sh
===================================================================
RCS file: /cvs/src/src/ld/emulparams/elf_l1om.sh,v
retrieving revision 1.5
diff -u -p -r1.5 elf_l1om.sh
--- ld/emulparams/elf_l1om.sh	11 Jun 2012 13:23:50 -0000	1.5
+++ ld/emulparams/elf_l1om.sh	9 Jan 2013 03:51:27 -0000
@@ -14,6 +14,7 @@ GENERATE_SHLIB_SCRIPT=yes
 GENERATE_PIE_SCRIPT=yes
 NO_SMALL_DATA=yes
 LARGE_SECTIONS=yes
+LARGE_BSS_AFTER_BSS=
 SEPARATE_GOTPLT="SIZEOF (.got.plt) >= 24 ? 24 : 0"
 
 if [ "x${host}" = "x${target}" ]; then
Index: ld/emulparams/elf_x86_64.sh
===================================================================
RCS file: /cvs/src/src/ld/emulparams/elf_x86_64.sh,v
retrieving revision 1.25
diff -u -p -r1.25 elf_x86_64.sh
--- ld/emulparams/elf_x86_64.sh	11 Jun 2012 13:23:50 -0000	1.25
+++ ld/emulparams/elf_x86_64.sh	9 Jan 2013 03:51:27 -0000
@@ -13,6 +13,7 @@ GENERATE_SHLIB_SCRIPT=yes
 GENERATE_PIE_SCRIPT=yes
 NO_SMALL_DATA=yes
 LARGE_SECTIONS=yes
+LARGE_BSS_AFTER_BSS=
 SEPARATE_GOTPLT="SIZEOF (.got.plt) >= 24 ? 24 : 0"
 IREL_IN_PLT=
 
Index: ld/scripttempl/elf.sc
===================================================================
RCS file: /cvs/src/src/ld/scripttempl/elf.sc,v
retrieving revision 1.117
diff -u -p -r1.117 elf.sc
--- ld/scripttempl/elf.sc	8 Jan 2013 09:23:07 -0000	1.117
+++ ld/scripttempl/elf.sc	9 Jan 2013 03:51:27 -0000
@@ -213,8 +213,7 @@ test "${LARGE_SECTIONS}" = "yes" && REL_
   .rela.lbss    ${RELOCATING-0} : { *(.rela.lbss${RELOCATING+ .rela.lbss.* .rela.gnu.linkonce.lb.*}) }
   .rel.lrodata  ${RELOCATING-0} : { *(.rel.lrodata${RELOCATING+ .rel.lrodata.* .rel.gnu.linkonce.lr.*}) }
   .rela.lrodata ${RELOCATING-0} : { *(.rela.lrodata${RELOCATING+ .rela.lrodata.* .rela.gnu.linkonce.lr.*}) }"
-test "${LARGE_SECTIONS}" = "yes" && OTHER_BSS_SECTIONS="
-  ${OTHER_BSS_SECTIONS}
+test "${LARGE_SECTIONS}" = "yes" && LARGE_BSS="
   .lbss ${RELOCATING-0} :
   {
     *(.dynlbss)
@@ -606,9 +605,11 @@ cat <<EOF
    ${RELOCATING+. = ALIGN(. != 0 ? ${ALIGNMENT} : 1);}
   }
   ${OTHER_BSS_SECTIONS}
+  ${LARGE_BSS_AFTER_BSS+${LARGE_BSS}}
   ${RELOCATING+${OTHER_BSS_END_SYMBOLS}}
   ${RELOCATING+. = ALIGN(${ALIGNMENT});}
   ${LARGE_SECTIONS}
+  ${LARGE_BSS_AFTER_BSS-${LARGE_BSS}}
   ${RELOCATING+. = ALIGN(${ALIGNMENT});}
   ${RELOCATING+${OTHER_END_SYMBOLS}}
   ${RELOCATING+${END_SYMBOLS-${USER_LABEL_PREFIX}_end = .; PROVIDE (${USER_LABEL_PREFIX}end = .);}}

-- 
Alan Modra
Australia Development Lab, IBM

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH] Updated RDOS support
  2013-01-09  5:51     ` Alan Modra
@ 2013-01-09 15:51       ` H.J. Lu
  2013-01-09 20:12       ` [PATCH] Large section data, was: " Leif Ekblad
  1 sibling, 0 replies; 7+ messages in thread
From: H.J. Lu @ 2013-01-09 15:51 UTC (permalink / raw)
  To: Leif Ekblad, binutils

On Tue, Jan 8, 2013 at 9:51 PM, Alan Modra <amodra@gmail.com> wrote:
> On Tue, Jan 08, 2013 at 09:43:16PM +0100, Leif Ekblad wrote:
>>
>> ----- Original Message ----- From: "Alan Modra" <amodra@gmail.com>
>> >Why should $LARGE_DATA_ADDR affect $OTHER_BSS_SECTIONS?  Hmm, I see
>> >LARGE_SECTIONS=yes adds .lbss to OTHER_BSS_SECTIONS.  That's not very
>> >nice as quite a few targets use OTHER_BSS_SECTIONS for other purposes.
>> >Your patch makes this even more confusing.  Also, since you seem to
>> >want a separate large segment, do you really want to lay out your
>> >large sections as .lbss, .lrodata, .ldata?  Wouldn't .lrodata, .ldata,
>> >.lbss make more sense?
>>
>> Yes, absolutely. If the lbss area is large it will also increase
>> executable size for no reason.
>> But, shouldn't this be the order regardless of LARGE_DATA_ADDR setting? This
>> seems like a bug.
>>
>> Thoughts?
>
> I don't know why the existing scripts put .lbss first.  The patch
> adding x86_64 support for large sections is here:
> http://sourceware.org/ml/binutils/2005-07/msg00407.html
> Prior to that, hppa64 had a huge bss section placed more or less in
> the same location but no large data or rodata section as far as I
> know.
>

It was done on purpose so that we may put ldata and lbss sections n the
same segnment as bss/data sections.

-- 
H.J.

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [PATCH] Large section data, was: [PATCH] Updated RDOS support
  2013-01-09  5:51     ` Alan Modra
  2013-01-09 15:51       ` H.J. Lu
@ 2013-01-09 20:12       ` Leif Ekblad
  2013-01-14 13:38         ` Alan Modra
  1 sibling, 1 reply; 7+ messages in thread
From: Leif Ekblad @ 2013-01-09 20:12 UTC (permalink / raw)
  To: Alan Modra; +Cc: binutils

[-- Attachment #1: Type: text/plain, Size: 6646 bytes --]

I've created a specific patch for large section data and provide it 
separately since it is not directly related to rdos.

Change log (ld directory):
* scripttempl/elf.sc (LARGE_BSS): Define rather than appending to 
OTHER_BSS_SECTIONS.  Add support for LARGE_DATA_ADDR and position of lbss 
(LARGE_BSS_LAST_IN_LARGE_DATA).
* ldlex.h: Define ldata-segment option.
* lexsup.c: Process ldata-segment option.
* ld.texinfo: Describe ldata-segment parameter.
* ld.1: Regenerate.
* ld.info: Regenerate.

Tested with and without LARGE_BSS_LAST_IN_LARGE_DATA, and with address 
override for ldata-segment on target rdos.

Leif Ekblad


----- Original Message ----- 
From: "Alan Modra" <amodra@gmail.com>
To: "Leif Ekblad" <leif@rdos.net>
Cc: <binutils@sourceware.org>
Sent: Wednesday, January 09, 2013 6:51 AM
Subject: Re: [PATCH] Updated RDOS support


> On Tue, Jan 08, 2013 at 09:43:16PM +0100, Leif Ekblad wrote:
>>
>> ----- Original Message ----- From: "Alan Modra" <amodra@gmail.com>
>> >Why should $LARGE_DATA_ADDR affect $OTHER_BSS_SECTIONS?  Hmm, I see
>> >LARGE_SECTIONS=yes adds .lbss to OTHER_BSS_SECTIONS.  That's not very
>> >nice as quite a few targets use OTHER_BSS_SECTIONS for other purposes.
>> >Your patch makes this even more confusing.  Also, since you seem to
>> >want a separate large segment, do you really want to lay out your
>> >large sections as .lbss, .lrodata, .ldata?  Wouldn't .lrodata, .ldata,
>> >.lbss make more sense?
>>
>> Yes, absolutely. If the lbss area is large it will also increase
>> executable size for no reason.
>> But, shouldn't this be the order regardless of LARGE_DATA_ADDR setting? 
>> This
>> seems like a bug.
>>
>> Thoughts?
>
> I don't know why the existing scripts put .lbss first.  The patch
> adding x86_64 support for large sections is here:
> http://sourceware.org/ml/binutils/2005-07/msg00407.html
> Prior to that, hppa64 had a huge bss section placed more or less in
> the same location but no large data or rodata section as far as I
> know.
>
> Here's a tidy that should make adding LARGE_DATA_ADDR easy.
>
> * emulparams/elf_x86_64.sh (LARGE_BSS_AFTER_BSS): Define.
> * emulparams/elf32_x86_64.sh: Likewise.
> * emulparams/elf_k1om.sh: Likewise.
> * emulparams/elf_l1om.sh: Likewise.
> * scripttempl/elf.sc (LARGE_BSS): Define rather than appending to
> OTHER_BSS_SECTIONS.  Substitute in script.
>
>> >Also, there isn't much point in adding support for -Tldata-segment
>> >here without the rest of the support, so that needs adding or simply
>> >omit use of SEGMENT_START().
>>
>> I think that if the large segment is separated by some TBs of
>> virtual memory,
>> the executable file would become enormous without a new section. But
>> I might be wrong here.
>
> You'll get a new segment (program header) whether or not SEGMENT_START
> is used.  See bfd/elf.c:_bfd_elf_map_sections_to_segments.  I'll leave
> answering your concern about SEPARATE_CODE to Roland.
>
>
> Index: ld/emulparams/elf32_x86_64.sh
> ===================================================================
> RCS file: /cvs/src/src/ld/emulparams/elf32_x86_64.sh,v
> retrieving revision 1.5
> diff -u -p -r1.5 elf32_x86_64.sh
> --- ld/emulparams/elf32_x86_64.sh 11 Jun 2012 13:23:50 -0000 1.5
> +++ ld/emulparams/elf32_x86_64.sh 9 Jan 2013 03:51:27 -0000
> @@ -13,6 +13,7 @@ GENERATE_SHLIB_SCRIPT=yes
> GENERATE_PIE_SCRIPT=yes
> NO_SMALL_DATA=yes
> LARGE_SECTIONS=yes
> +LARGE_BSS_AFTER_BSS=
> SEPARATE_GOTPLT="SIZEOF (.got.plt) >= 24 ? 24 : 0"
> IREL_IN_PLT=
>
> Index: ld/emulparams/elf_k1om.sh
> ===================================================================
> RCS file: /cvs/src/src/ld/emulparams/elf_k1om.sh,v
> retrieving revision 1.3
> diff -u -p -r1.3 elf_k1om.sh
> --- ld/emulparams/elf_k1om.sh 11 Jun 2012 13:23:50 -0000 1.3
> +++ ld/emulparams/elf_k1om.sh 9 Jan 2013 03:51:27 -0000
> @@ -14,6 +14,7 @@ GENERATE_SHLIB_SCRIPT=yes
> GENERATE_PIE_SCRIPT=yes
> NO_SMALL_DATA=yes
> LARGE_SECTIONS=yes
> +LARGE_BSS_AFTER_BSS=
> SEPARATE_GOTPLT="SIZEOF (.got.plt) >= 24 ? 24 : 0"
>
> if [ "x${host}" = "x${target}" ]; then
> Index: ld/emulparams/elf_l1om.sh
> ===================================================================
> RCS file: /cvs/src/src/ld/emulparams/elf_l1om.sh,v
> retrieving revision 1.5
> diff -u -p -r1.5 elf_l1om.sh
> --- ld/emulparams/elf_l1om.sh 11 Jun 2012 13:23:50 -0000 1.5
> +++ ld/emulparams/elf_l1om.sh 9 Jan 2013 03:51:27 -0000
> @@ -14,6 +14,7 @@ GENERATE_SHLIB_SCRIPT=yes
> GENERATE_PIE_SCRIPT=yes
> NO_SMALL_DATA=yes
> LARGE_SECTIONS=yes
> +LARGE_BSS_AFTER_BSS=
> SEPARATE_GOTPLT="SIZEOF (.got.plt) >= 24 ? 24 : 0"
>
> if [ "x${host}" = "x${target}" ]; then
> Index: ld/emulparams/elf_x86_64.sh
> ===================================================================
> RCS file: /cvs/src/src/ld/emulparams/elf_x86_64.sh,v
> retrieving revision 1.25
> diff -u -p -r1.25 elf_x86_64.sh
> --- ld/emulparams/elf_x86_64.sh 11 Jun 2012 13:23:50 -0000 1.25
> +++ ld/emulparams/elf_x86_64.sh 9 Jan 2013 03:51:27 -0000
> @@ -13,6 +13,7 @@ GENERATE_SHLIB_SCRIPT=yes
> GENERATE_PIE_SCRIPT=yes
> NO_SMALL_DATA=yes
> LARGE_SECTIONS=yes
> +LARGE_BSS_AFTER_BSS=
> SEPARATE_GOTPLT="SIZEOF (.got.plt) >= 24 ? 24 : 0"
> IREL_IN_PLT=
>
> Index: ld/scripttempl/elf.sc
> ===================================================================
> RCS file: /cvs/src/src/ld/scripttempl/elf.sc,v
> retrieving revision 1.117
> diff -u -p -r1.117 elf.sc
> --- ld/scripttempl/elf.sc 8 Jan 2013 09:23:07 -0000 1.117
> +++ ld/scripttempl/elf.sc 9 Jan 2013 03:51:27 -0000
> @@ -213,8 +213,7 @@ test "${LARGE_SECTIONS}" = "yes" && REL_
>   .rela.lbss    ${RELOCATING-0} : { *(.rela.lbss${RELOCATING+ .rela.lbss.* 
> .rela.gnu.linkonce.lb.*}) }
>   .rel.lrodata  ${RELOCATING-0} : { *(.rel.lrodata${RELOCATING+ 
> .rel.lrodata.* .rel.gnu.linkonce.lr.*}) }
>   .rela.lrodata ${RELOCATING-0} : { *(.rela.lrodata${RELOCATING+ 
> .rela.lrodata.* .rela.gnu.linkonce.lr.*}) }"
> -test "${LARGE_SECTIONS}" = "yes" && OTHER_BSS_SECTIONS="
> -  ${OTHER_BSS_SECTIONS}
> +test "${LARGE_SECTIONS}" = "yes" && LARGE_BSS="
>   .lbss ${RELOCATING-0} :
>   {
>     *(.dynlbss)
> @@ -606,9 +605,11 @@ cat <<EOF
>    ${RELOCATING+. = ALIGN(. != 0 ? ${ALIGNMENT} : 1);}
>   }
>   ${OTHER_BSS_SECTIONS}
> +  ${LARGE_BSS_AFTER_BSS+${LARGE_BSS}}
>   ${RELOCATING+${OTHER_BSS_END_SYMBOLS}}
>   ${RELOCATING+. = ALIGN(${ALIGNMENT});}
>   ${LARGE_SECTIONS}
> +  ${LARGE_BSS_AFTER_BSS-${LARGE_BSS}}
>   ${RELOCATING+. = ALIGN(${ALIGNMENT});}
>   ${RELOCATING+${OTHER_END_SYMBOLS}}
>   ${RELOCATING+${END_SYMBOLS-${USER_LABEL_PREFIX}_end = .; PROVIDE 
> (${USER_LABEL_PREFIX}end = .);}}
>
> -- 
> Alan Modra
> Australia Development Lab, IBM 

[-- Attachment #2: binutils.diff --]
[-- Type: application/octet-stream, Size: 6221 bytes --]

diff -crN binutils-/ld/scripttempl/elf.sc binutils-work/ld/scripttempl/elf.sc
*** binutils-/ld/scripttempl/elf.sc	2012-12-18 21:42:44.000000000 +0100
--- binutils-work/ld/scripttempl/elf.sc	2013-01-09 19:14:48.000000000 +0100
***************
*** 213,220 ****
    .rela.lbss    ${RELOCATING-0} : { *(.rela.lbss${RELOCATING+ .rela.lbss.* .rela.gnu.linkonce.lb.*}) }
    .rel.lrodata  ${RELOCATING-0} : { *(.rel.lrodata${RELOCATING+ .rel.lrodata.* .rel.gnu.linkonce.lr.*}) }
    .rela.lrodata ${RELOCATING-0} : { *(.rela.lrodata${RELOCATING+ .rela.lrodata.* .rela.gnu.linkonce.lr.*}) }"
! test "${LARGE_SECTIONS}" = "yes" && OTHER_BSS_SECTIONS="
!   ${OTHER_BSS_SECTIONS}
    .lbss ${RELOCATING-0} :
    {
      *(.dynlbss)
--- 213,219 ----
    .rela.lbss    ${RELOCATING-0} : { *(.rela.lbss${RELOCATING+ .rela.lbss.* .rela.gnu.linkonce.lb.*}) }
    .rel.lrodata  ${RELOCATING-0} : { *(.rel.lrodata${RELOCATING+ .rel.lrodata.* .rel.gnu.linkonce.lr.*}) }
    .rela.lrodata ${RELOCATING-0} : { *(.rela.lrodata${RELOCATING+ .rela.lrodata.* .rela.gnu.linkonce.lr.*}) }"
! test "${LARGE_SECTIONS}" = "yes" && LARGE_BSS="
    .lbss ${RELOCATING-0} :
    {
      *(.dynlbss)
***************
*** 605,614 ****
--- 604,631 ----
        pad the .data section.  */
     ${RELOCATING+. = ALIGN(. != 0 ? ${ALIGNMENT} : 1);}
    }
+ 
    ${OTHER_BSS_SECTIONS}
+   ${LARGE_BSS_LAST_IN_LARGE_DATA-${LARGE_BSS}}
    ${RELOCATING+${OTHER_BSS_END_SYMBOLS}}
    ${RELOCATING+. = ALIGN(${ALIGNMENT});}
+ EOF
+ 
+ if test -n "${LARGE_DATA_ADDR}"; then
+   LARGE_DATA_ADDR=". = \
+ SEGMENT_START(\"ldata-segment\", ${LARGE_DATA_ADDR}) + SIZEOF_HEADERS;"
+ fi
+ if test -n "${SHLIB_LARGE_DATA_ADDR}"; then
+   SHLIB_LARGE_DATA_ADDR=". = \
+ SEGMENT_START(\"ldata-segment\", ${SHLIB_LARGE_DATA_ADDR}) + SIZEOF_HEADERS;"
+ fi
+   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_LAST_IN_LARGE_DATA+${LARGE_BSS}}
    ${RELOCATING+. = ALIGN(${ALIGNMENT});}
    ${RELOCATING+${OTHER_END_SYMBOLS}}
    ${RELOCATING+${END_SYMBOLS-${USER_LABEL_PREFIX}_end = .; PROVIDE (${USER_LABEL_PREFIX}end = .);}}
diff -crN binutils-/ld/ldlex.h binutils-work/ld/ldlex.h
*** binutils-/ld/ldlex.h	2012-12-18 21:42:44.000000000 +0100
--- binutils-work/ld/ldlex.h	2013-01-09 19:41:14.000000000 +0100
***************
*** 69,74 ****
--- 69,75 ----
    OPTION_TTEXT,
    OPTION_TTEXT_SEGMENT,
    OPTION_TRODATA_SEGMENT,
+   OPTION_TLDATA_SEGMENT,
    OPTION_TRADITIONAL_FORMAT,
    OPTION_UR,
    OPTION_VERBOSE,
diff -crN binutils-/ld/lexsup.c binutils-work/ld/lexsup.c
*** binutils-/ld/lexsup.c	2012-12-18 21:42:44.000000000 +0100
--- binutils-work/ld/lexsup.c	2013-01-09 19:42:04.000000000 +0100
***************
*** 443,448 ****
--- 443,450 ----
      '\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"
***************
*** 1196,1201 ****
--- 1198,1206 ----
  	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 -crN binutils-/ld/ld.texinfo binutils-work/ld/ld.texinfo
*** binutils-/ld/ld.texinfo	2012-12-18 21:42:44.000000000 +0100
--- binutils-work/ld/ld.texinfo	2013-01-09 19:38:18.000000000 +0100
***************
*** 1844,1849 ****
--- 1844,1855 ----
  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
diff -crN binutils-/ld/ld.1 binutils-work/ld/ld.1
*** binutils-/ld/ld.1	2013-01-04 06:44:26.000000000 +0100
--- binutils-work/ld/ld.1	2013-01-09 20:11:14.000000000 +0100
***************
*** 1629,1634 ****
--- 1629,1638 ----
  When creating an \s-1ELF\s0 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.
+ .IP "\fB\-Tldata\-segment=\fR\fIorg\fR" 4
+ .IX Item "-Tldata-segment=org"
+ 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.
  .IP "\fB\-\-unresolved\-symbols=\fR\fImethod\fR" 4
  .IX Item "--unresolved-symbols=method"
  Determine how to handle unresolved symbols.  There are four possible
diff -crN binutils-/ld/ld.info binutils-work/ld/ld.info
*** binutils-/ld/ld.info	2013-01-04 06:44:28.000000000 +0100
--- binutils-work/ld/ld.info	2013-01-09 20:11:56.000000000 +0100
***************
*** 1397,1402 ****
--- 1397,1406 ----
       executable text, it will set the address of the first byte of the
       read-only data segment.
  
+ `-Tldata-segment=ORG'
+      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.
+ 
  `--unresolved-symbols=METHOD'
       Determine how to handle unresolved symbols.  There are four
       possible values for `method':

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH] Large section data, was: [PATCH] Updated RDOS support
  2013-01-09 20:12       ` [PATCH] Large section data, was: " Leif Ekblad
@ 2013-01-14 13:38         ` Alan Modra
  0 siblings, 0 replies; 7+ messages in thread
From: Alan Modra @ 2013-01-14 13:38 UTC (permalink / raw)
  To: Leif Ekblad; +Cc: binutils

Adjusted and applied as follows.  You don't want to add SIZEOF_HEADERS
to LARGE_DATA_ADDR.  That's a special case for -Trodata-segment where
the file headers are put in the rodata segment.  (We really ought to
have support in the script for the non-SEPARATE_CODE case.)

	* 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.

Index: ld/ld.texinfo
===================================================================
RCS file: /cvs/src/src/ld/ld.texinfo,v
retrieving revision 1.290
diff -u -p -r1.290 ld.texinfo
--- ld/ld.texinfo	7 Jan 2013 12:11:11 -0000	1.290
+++ ld/ld.texinfo	14 Jan 2013 06:22:10 -0000
@@ -1846,6 +1846,12 @@ When creating an ELF executable or share
 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
Index: ld/ldlex.h
===================================================================
RCS file: /cvs/src/src/ld/ldlex.h,v
retrieving revision 1.13
diff -u -p -r1.13 ldlex.h
--- ld/ldlex.h	18 Dec 2012 20:42:43 -0000	1.13
+++ ld/ldlex.h	14 Jan 2013 06:22:10 -0000
@@ -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,
Index: ld/lexsup.c
===================================================================
RCS file: /cvs/src/src/ld/lexsup.c,v
retrieving revision 1.137
diff -u -p -r1.137 lexsup.c
--- ld/lexsup.c	7 Jan 2013 16:58:59 -0000	1.137
+++ ld/lexsup.c	14 Jan 2013 06:22:11 -0000
@@ -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;
Index: ld/scripttempl/elf.sc
===================================================================
RCS file: /cvs/src/src/ld/scripttempl/elf.sc,v
retrieving revision 1.118
diff -u -p -r1.118 elf.sc
--- ld/scripttempl/elf.sc	9 Jan 2013 05:51:32 -0000	1.118
+++ ld/scripttempl/elf.sc	14 Jan 2013 12:46:19 -0000
@@ -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});}

-- 
Alan Modra
Australia Development Lab, IBM

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2013-01-14 13:38 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-01-04 22:03 [PATCH] Updated RDOS support Leif Ekblad
2013-01-08  9:24 ` Alan Modra
2013-01-08 20:43   ` Leif Ekblad
2013-01-09  5:51     ` Alan Modra
2013-01-09 15:51       ` H.J. Lu
2013-01-09 20:12       ` [PATCH] Large section data, was: " Leif Ekblad
2013-01-14 13:38         ` Alan Modra

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).