This is the mail archive of the
binutils@sources.redhat.com
mailing list for the binutils project.
Re: [PATCH/RFA] Fix C-referenceable sections with explicit LMAs
- From: Nick Clifton <nickc at redhat dot com>
- To: thorpej at wasabisystems dot com
- Cc: binutils at sources dot redhat dot com
- Date: 06 Dec 2002 18:16:13 +0000
- Subject: Re: [PATCH/RFA] Fix C-referenceable sections with explicit LMAs
- References: <20021120064225.GA11777@yeah-baby.shagadelic.org> <Pine.BSF.4.44.0211200743480.39106-100000@dair.pair.com> <20021120185302.GA2478@yeah-baby.shagadelic.org>
Hi Jason,
> Yes indeed. Here is the patch for current Binutils, as well as a
> test case. Test case fails without the patch, passes with, and no
> new regressions (tested on arm-netbsdelf).
>
> OK for mainline? OK for 2.13 branch?
>
> * ldexp.c (fold_name): Handle SIZEOF_UNADJ. When handling
> SIZEOF, apply any size adjustment that has been recorded
> for the section.
> * ldgram.y (SIZEOF_UNADJ): New token.
> * ldlang.c (lang_output_section_statement_lookup): Initialize
> size_adj and last_orphan members.
> * ldlang.h (lang_output_section_statement_type): Add size_adj
> and last_orphan members.
> * emultempl/elf32.em (place_orphan): If no .rodata output section
> is present, allow read-only data to be placed with .text. If
> the output section has an explicit LMA, compute an explicit LMA
> for the orphan based on the LMA of the output section or the
> previous orphan. Record a size adjustment of the output section
> for each orphan placed with it.
>
> * ld-scripts/refsec-lma.exp: New test.
> * ld-scripts/refsec-lma.s: New test.
> * ld-scripts/refsec-lma.t: New test.
Approved for the mainline. I am not sure about the branch though -
lets wait a few days to see if the patch creates any problems first.
Before applying the patch though, please could you fix the following
issues:
> Index: ldexp.c
> + case SIZEOF_UNADJ: /* not actually allowed in grammar */
Formatting of comment.
> Index: testsuite/ld-scripts/refsec-lma.exp
> + # This tests a feature found in the ELF back-end.
> + if { ![istarget *-*-sysv4*] \
> + && ![istarget *-*-unixware*] \
> + && ![istarget *-*-elf*] \
> + && ![istarget *-*-eabi*] \
> + && ![istarget hppa*64*-*-hpux*] \
> + && ![istarget *-*-linux*] \
> + && ![istarget *-*-netbsd*] \
> + && ![istarget *-*-irix5*] \
> + && ![istarget *-*-irix6*] \
> + && ![istarget *-*-solaris2*] } {
> + return
> + }
> +
> + if { [istarget *-*-linux*aout*] \
> + || [istarget *-*-linux*oldld*] } {
> + return
> + }
These tests can already be found in ld-lib.exp as proc is_elf_format.
> + if { ![istarget *-*-netbsdelf*] \
> + && [[istarget *-*-netbsd*aout*] \
> + || [istarget *-*-netbsdpe*] \
> + || [istarget arm*-*-netbsd*] \
> + || [istarget sparc-*-netbsd*] \
> + || [istarget i*86-*-netbsd*] \
> + || [istarget m68*-*-netbsd*] \
> + || [istarget vax*-*-netbsd*] \
> + || [istarget ns32k-*-netbsd*]] } {
> + return
> + }
This does not work. The double square brackets should be replace with
a round bracket and a square bracket, ie:
if { ![istarget *-*-netbsdelf*] \
&& ([istarget *-*-netbsd*aout*] \
|| [istarget *-*-netbsdpe*] \
|| [istarget arm*-*-netbsd*] \
|| [istarget sparc-*-netbsd*] \
|| [istarget i*86-*-netbsd*] \
|| [istarget m68*-*-netbsd*] \
|| [istarget vax*-*-netbsd*] \
|| [istarget ns32k-*-netbsd*]) } {
return
}
Cheers
Nick