2007-12-24  H.J. Lu  <hongjiu.lu@intel.com>

	PR binutils/5488
	* elf.c (IS_NOTE): New.
	(IS_COREFILE_NOTE): Use IS_NOTE.
	(IS_SECTION_IN_INPUT_SEGMENT): Use IS_NOTE instead of
	IS_COREFILE_NOTE.

ld/testsuite/

2007-12-24  H.J. Lu  <hongjiu.lu@intel.com>

	PR binutils/5488
	* ld-elf/note-2.d: New.
	* ld-elf/note-2.s: Likewise.
	* ld-elf/note-2.t: Likewise.
This commit is contained in:
H.J. Lu 2007-12-24 16:58:23 +00:00
parent 147d51c232
commit 0efc80c807
6 changed files with 66 additions and 6 deletions

View file

@ -1,3 +1,11 @@
2007-12-24 H.J. Lu <hongjiu.lu@intel.com>
PR binutils/5488
* elf.c (IS_NOTE): New.
(IS_COREFILE_NOTE): Use IS_NOTE.
(IS_SECTION_IN_INPUT_SEGMENT): Use IS_NOTE instead of
IS_COREFILE_NOTE.
2007-12-24 H.J. Lu <hongjiu.lu@intel.com> 2007-12-24 H.J. Lu <hongjiu.lu@intel.com>
PR binutils/5449 PR binutils/5449

View file

@ -5090,15 +5090,22 @@ rewrite_elf_program_header (bfd *ibfd, bfd *obfd)
&& (section->lma + SECTION_SIZE (section, segment) \ && (section->lma + SECTION_SIZE (section, segment) \
<= SEGMENT_END (segment, base))) <= SEGMENT_END (segment, base)))
/* Special case: corefile "NOTE" section containing regs, prpsinfo etc. */ /* Handle PT_NOTE segment. */
#define IS_COREFILE_NOTE(p, s) \ #define IS_NOTE(p, s) \
(p->p_type == PT_NOTE \ (p->p_type == PT_NOTE \
&& bfd_get_format (ibfd) == bfd_core \ && elf_section_type (s) == SHT_NOTE \
&& s->vma == 0 && s->lma == 0 \
&& (bfd_vma) s->filepos >= p->p_offset \ && (bfd_vma) s->filepos >= p->p_offset \
&& ((bfd_vma) s->filepos + s->size \ && ((bfd_vma) s->filepos + s->size \
<= p->p_offset + p->p_filesz)) <= p->p_offset + p->p_filesz))
/* Special case: corefile "NOTE" section containing regs, prpsinfo
etc. */
#define IS_COREFILE_NOTE(p, s) \
(IS_NOTE (p, s) \
&& bfd_get_format (ibfd) == bfd_core \
&& s->vma == 0 \
&& s->lma == 0)
/* The complicated case when p_vaddr is 0 is to handle the Solaris /* The complicated case when p_vaddr is 0 is to handle the Solaris
linker, which generates a PT_INTERP section with p_vaddr and linker, which generates a PT_INTERP section with p_vaddr and
p_memsz set to 0. */ p_memsz set to 0. */
@ -5117,7 +5124,8 @@ rewrite_elf_program_header (bfd *ibfd, bfd *obfd)
A section will be included if: A section will be included if:
1. It is within the address space of the segment -- we use the LMA 1. It is within the address space of the segment -- we use the LMA
if that is set for the segment and the VMA otherwise, if that is set for the segment and the VMA otherwise,
2. It is an allocated segment, 2. It is an allocated section or a NOTE section in a PT_NOTE
segment.
3. There is an output section associated with it, 3. There is an output section associated with it,
4. The section has not already been allocated to a previous segment. 4. The section has not already been allocated to a previous segment.
5. PT_GNU_STACK segments do not include any sections. 5. PT_GNU_STACK segments do not include any sections.
@ -5130,7 +5138,7 @@ rewrite_elf_program_header (bfd *ibfd, bfd *obfd)
? IS_CONTAINED_BY_LMA (section, segment, segment->p_paddr) \ ? IS_CONTAINED_BY_LMA (section, segment, segment->p_paddr) \
: IS_CONTAINED_BY_VMA (section, segment)) \ : IS_CONTAINED_BY_VMA (section, segment)) \
&& (section->flags & SEC_ALLOC) != 0) \ && (section->flags & SEC_ALLOC) != 0) \
|| IS_COREFILE_NOTE (segment, section)) \ || IS_NOTE (segment, section)) \
&& segment->p_type != PT_GNU_STACK \ && segment->p_type != PT_GNU_STACK \
&& (segment->p_type != PT_TLS \ && (segment->p_type != PT_TLS \
|| (section->flags & SEC_THREAD_LOCAL)) \ || (section->flags & SEC_THREAD_LOCAL)) \
@ -5664,6 +5672,7 @@ rewrite_elf_program_header (bfd *ibfd, bfd *obfd)
#undef SECTION_SIZE #undef SECTION_SIZE
#undef IS_CONTAINED_BY_VMA #undef IS_CONTAINED_BY_VMA
#undef IS_CONTAINED_BY_LMA #undef IS_CONTAINED_BY_LMA
#undef IS_NOTE
#undef IS_COREFILE_NOTE #undef IS_COREFILE_NOTE
#undef IS_SOLARIS_PT_INTERP #undef IS_SOLARIS_PT_INTERP
#undef IS_SECTION_IN_INPUT_SEGMENT #undef IS_SECTION_IN_INPUT_SEGMENT

View file

@ -1,3 +1,10 @@
2007-12-24 H.J. Lu <hongjiu.lu@intel.com>
PR binutils/5488
* ld-elf/note-2.d: New.
* ld-elf/note-2.s: Likewise.
* ld-elf/note-2.t: Likewise.
2007-12-20 Hans-Peter Nilsson <hp@axis.com> 2007-12-20 Hans-Peter Nilsson <hp@axis.com>
* ld-elf/seg.d: Restrict to linux and vxworks. * ld-elf/seg.d: Restrict to linux and vxworks.

View file

@ -0,0 +1,15 @@
#ld: -Tnote-2.t
#objcopy_linked_file: -R .foo
#readelf: -l --wide
#...
Program Headers:
Type.*
LOAD +0x[0-9a-f]+ .*
NOTE +0x[0-9a-f]+ .*
#...
Segment Sections...
00[ \t]+.text *
01[ \t]+.note *
#pass

View file

@ -0,0 +1,8 @@
.globl _entry
.text
_entry:
.byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
.section .foo,"awx",%progbits
.byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
.section .note,"",%note
.byte 0

View file

@ -0,0 +1,13 @@
ENTRY(_entry)
PHDRS
{
data PT_LOAD;
note PT_NOTE;
}
SECTIONS
{
.text : { *(.text) } :data
.foo : { *(.foo) } :data
.note : { *(.note) } :note
/DISCARD/ : { *(*) }
}