From 6a3cd2b4ed1653d84463fadb1bef8783dba92b1a Mon Sep 17 00:00:00 2001 From: Alan Modra Date: Fri, 29 Jun 2007 01:21:08 +0000 Subject: * elf.c (assign_file_positions_for_load_sections): Use elf section header sh_size rather than bfd section size, simplifying .tbss handling. --- bfd/elf.c | 32 +++++++++++++------------------- 1 file changed, 13 insertions(+), 19 deletions(-) (limited to 'bfd/elf.c') diff --git a/bfd/elf.c b/bfd/elf.c index a269f32..baa9512 100644 --- a/bfd/elf.c +++ b/bfd/elf.c @@ -4578,8 +4578,8 @@ assign_file_positions_for_load_sections (bfd *abfd, if (i == 0) { this_hdr->sh_offset = sec->filepos = off; - off += sec->size; - p->p_filesz = sec->size; + off += this_hdr->sh_size; + p->p_filesz = this_hdr->sh_size; p->p_memsz = 0; p->p_align = 1; } @@ -4598,33 +4598,27 @@ assign_file_positions_for_load_sections (bfd *abfd, { this_hdr->sh_offset = sec->filepos = off; if (this_hdr->sh_type != SHT_NOBITS) - off += sec->size; + off += this_hdr->sh_size; } if (this_hdr->sh_type != SHT_NOBITS) { - p->p_filesz += sec->size; + p->p_filesz += this_hdr->sh_size; /* A load section without SHF_ALLOC is something like a note section in a PT_NOTE segment. These take file space but are not loaded into memory. */ if ((this_hdr->sh_flags & SHF_ALLOC) != 0) - p->p_memsz += sec->size; + p->p_memsz += this_hdr->sh_size; } - - /* .tbss is special. It doesn't contribute to p_memsz of - normal segments. */ - else if ((this_hdr->sh_flags & SHF_ALLOC) != 0 - && ((this_hdr->sh_flags & SHF_TLS) == 0 - || p->p_type == PT_TLS)) - p->p_memsz += sec->size; - - if (p->p_type == PT_TLS - && sec->size == 0 - && (sec->flags & SEC_HAS_CONTENTS) == 0) + else if ((this_hdr->sh_flags & SHF_ALLOC) != 0) { - struct bfd_link_order *o = sec->map_tail.link_order; - if (o != NULL) - p->p_memsz += o->offset + o->size; + if (p->p_type == PT_TLS) + p->p_memsz += this_hdr->sh_size; + + /* .tbss is special. It doesn't contribute to p_memsz of + normal segments. */ + else if ((this_hdr->sh_flags & SHF_TLS) == 0) + p->p_memsz += this_hdr->sh_size; } if (p->p_type == PT_GNU_RELRO) -- cgit v1.1