include/elf/

* internal.h (ELF_SECTION_SIZE): Protect macro args with parentheses.
	Invert logic to clarify test for .tbss.
	(ELF_IS_SECTION_IN_SEGMENT): Rename to..
	(ELF_SECTION_IN_SEGMENT_1): ..this.  Add check_vma param.  Protect
	macro args with parentheses.
	(ELF_SECTION_IN_SEGMENT): Define.
	(ELF_IS_SECTION_IN_SEGMENT_FILE): Delete.
	(ELF_IS_SECTION_IN_SEGMENT_MEMORY): Delete.
bfd/
	* elf.c: Replace use of ELF_IS_SECTION_IN_SEGMENT and
	ELF_IS_SECTION_IN_SEGMENT_FILE with ELF_SECTION_IN_SEGMENT
	throughout file.
	(assign_file_positions_for_load_sections): Modify section in
	segment warning to ignore overlay vmas.
	* elf32-spu.c (spu_elf_object_p): Replace use of
	ELF_IS_SECTION_IN_SEGMENT_MEMORY with ELF_SECTION_IN_SEGMENT.
binutils/
	* readelf.c (process_program_headers): Replace use of
	ELF_IS_SECTION_IN_SEGMENT_MEMORY with ELF_SECTION_IN_SEGMENT.
This commit is contained in:
Alan Modra 2010-04-24 01:05:22 +00:00
parent a39be4e22d
commit 3134b8ad36
2 changed files with 33 additions and 28 deletions

View File

@ -1,3 +1,14 @@
2010-04-23 Alan Modra <amodra@gmail.com>
* internal.h (ELF_SECTION_SIZE): Protect macro args with parentheses.
Invert logic to clarify test for .tbss.
(ELF_IS_SECTION_IN_SEGMENT): Rename to..
(ELF_SECTION_IN_SEGMENT_1): ..this. Add check_vma param. Protect
macro args with parentheses.
(ELF_SECTION_IN_SEGMENT): Define.
(ELF_IS_SECTION_IN_SEGMENT_FILE): Delete.
(ELF_IS_SECTION_IN_SEGMENT_MEMORY): Delete.
2010-04-15 Matthew Gretton-Dann <matthew.gretton-dann@arm.com>
* arm.h (Tag_FP_arch, Tag_ABI_align_needed, Tag_ABI_align_preserved,

View File

@ -292,42 +292,36 @@ struct elf_segment_map
/* .tbss is special. It doesn't contribute memory space to normal
segments and it doesn't take file space in normal segments. */
#define ELF_SECTION_SIZE(sec_hdr, segment) \
(((sec_hdr->sh_flags & SHF_TLS) == 0 \
|| sec_hdr->sh_type != SHT_NOBITS \
|| segment->p_type == PT_TLS) ? sec_hdr->sh_size : 0)
((!(((sec_hdr)->sh_flags & SHF_TLS) != 0 \
&& (sec_hdr)->sh_type == SHT_NOBITS) \
|| (segment)->p_type == PT_TLS) ? (sec_hdr)->sh_size : 0)
/* Decide if the given sec_hdr is in the given segment. PT_TLS segment
contains only SHF_TLS sections. Only PT_LOAD, PT_GNU_RELRO and
and PT_TLS segments can contain SHF_TLS sections. */
#define ELF_IS_SECTION_IN_SEGMENT(sec_hdr, segment) \
(((((sec_hdr->sh_flags & SHF_TLS) != 0) \
&& (segment->p_type == PT_TLS \
|| segment->p_type == PT_GNU_RELRO \
|| segment->p_type == PT_LOAD)) \
|| ((sec_hdr->sh_flags & SHF_TLS) == 0 \
&& segment->p_type != PT_TLS \
&& segment->p_type != PT_PHDR)) \
#define ELF_SECTION_IN_SEGMENT_1(sec_hdr, segment, check_vma) \
((((((sec_hdr)->sh_flags & SHF_TLS) != 0) \
&& ((segment)->p_type == PT_TLS \
|| (segment)->p_type == PT_GNU_RELRO \
|| (segment)->p_type == PT_LOAD)) \
|| (((sec_hdr)->sh_flags & SHF_TLS) == 0 \
&& (segment)->p_type != PT_TLS \
&& (segment)->p_type != PT_PHDR)) \
/* Any section besides one of type SHT_NOBITS must have a file \
offset within the segment. */ \
&& (sec_hdr->sh_type == SHT_NOBITS \
|| ((bfd_vma) sec_hdr->sh_offset >= segment->p_offset \
&& (sec_hdr->sh_offset + ELF_SECTION_SIZE(sec_hdr, segment) \
<= segment->p_offset + segment->p_filesz))) \
&& ((sec_hdr)->sh_type == SHT_NOBITS \
|| ((bfd_vma) (sec_hdr)->sh_offset >= (segment)->p_offset \
&& ((sec_hdr)->sh_offset + ELF_SECTION_SIZE(sec_hdr, segment) \
<= (segment)->p_offset + (segment)->p_filesz))) \
/* SHF_ALLOC sections must have VMAs within the segment. Be \
careful about segments right at the end of memory. */ \
&& ((sec_hdr->sh_flags & SHF_ALLOC) == 0 \
|| (sec_hdr->sh_addr >= segment->p_vaddr \
&& (sec_hdr->sh_addr - segment->p_vaddr \
+ ELF_SECTION_SIZE(sec_hdr, segment) <= segment->p_memsz))))
&& (!(check_vma) \
|| ((sec_hdr)->sh_flags & SHF_ALLOC) == 0 \
|| ((sec_hdr)->sh_addr >= (segment)->p_vaddr \
&& ((sec_hdr)->sh_addr - (segment)->p_vaddr \
+ ELF_SECTION_SIZE(sec_hdr, segment) <= (segment)->p_memsz))))
/* Decide if the given sec_hdr is in the given segment in file. */
#define ELF_IS_SECTION_IN_SEGMENT_FILE(sec_hdr, segment) \
(sec_hdr->sh_size > 0 \
&& ELF_IS_SECTION_IN_SEGMENT (sec_hdr, segment))
/* Decide if the given sec_hdr is in the given segment in memory. */
#define ELF_IS_SECTION_IN_SEGMENT_MEMORY(sec_hdr, segment) \
(ELF_SECTION_SIZE(sec_hdr, segment) > 0 \
&& ELF_IS_SECTION_IN_SEGMENT (sec_hdr, segment))
#define ELF_SECTION_IN_SEGMENT(sec_hdr, segment) \
(ELF_SECTION_IN_SEGMENT_1 (sec_hdr, segment, 1))
#endif /* _ELF_INTERNAL_H */