From 704afa601f9abdd212d000ff61b1c6a32e085a0b Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Tue, 30 Jul 2002 14:28:55 +0000 Subject: [PATCH] * elf.c (elf_fake_sections): Fix up .tbss sh_size and sh_type. * ldlang.c (lang_add_section): Don't turn .tbss into normal sections for relocatable link. (lang_size_sections_1): Don't make .tbss zero size for relocatable link. --- bfd/ChangeLog | 4 ++++ bfd/elf.c | 15 ++++++++++++++- ld/ChangeLog | 7 +++++++ ld/ldlang.c | 5 +++-- 4 files changed, 28 insertions(+), 3 deletions(-) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 63a7b83d6fa..764b36172db 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,7 @@ +2002-07-30 Jakub Jelinek + + * elf.c (elf_fake_sections): Fix up .tbss sh_size and sh_type. + 2002-07-30 Alan Modra * aoutx.h (some_aout_object_p): Clean up tdata properly on error. diff --git a/bfd/elf.c b/bfd/elf.c index 79190e60f2b..1582496a1db 100644 --- a/bfd/elf.c +++ b/bfd/elf.c @@ -2443,7 +2443,20 @@ elf_fake_sections (abfd, asect, failedptrarg) if ((asect->flags & SEC_GROUP) == 0 && elf_group_name (asect) != NULL) this_hdr->sh_flags |= SHF_GROUP; if ((asect->flags & SEC_THREAD_LOCAL) != 0) - this_hdr->sh_flags |= SHF_TLS; + { + this_hdr->sh_flags |= SHF_TLS; + if (asect->_raw_size == 0 && (asect->flags & SEC_HAS_CONTENTS) == 0) + { + struct bfd_link_order *o; + + this_hdr->sh_size = 0; + for (o = asect->link_order_head; o != NULL; o = o->next) + if (this_hdr->sh_size < o->offset + o->size) + this_hdr->sh_size = o->offset + o->size; + if (this_hdr->sh_size) + this_hdr->sh_type = SHT_NOBITS; + } + } /* Check for processor-specific section types. */ if (bed->elf_backend_fake_sections diff --git a/ld/ChangeLog b/ld/ChangeLog index 6b9b887dee2..5b530ad74cc 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,10 @@ +2002-07-30 Jakub Jelinek + + * ldlang.c (lang_add_section): Don't turn .tbss into normal sections + for relocatable link. + (lang_size_sections_1): Don't make .tbss zero size for relocatable + link. + 2002-07-26 Bernd Schmidt * emulparams/elf32frv.sh (OTHER_RELOCATING_SECTIONS): Delete. diff --git a/ld/ldlang.c b/ld/ldlang.c index ba14c63a1f9..c2608291002 100644 --- a/ld/ldlang.c +++ b/ld/ldlang.c @@ -1218,7 +1218,7 @@ lang_add_section (ptr, section, output, file) } /* For now make .tbss normal section. */ - if (flags & SEC_THREAD_LOCAL) + if ((flags & SEC_THREAD_LOCAL) && ! link_info.relocateable) flags |= SEC_LOAD; section->output_section->flags |= flags; @@ -3055,7 +3055,8 @@ lang_size_sections_1 (s, output_section_statement, prev, fill, dot, relax) if (bfd_is_abs_section (os->bfd_section)) ASSERT (after == os->bfd_section->vma); else if ((os->bfd_section->flags & SEC_HAS_CONTENTS) == 0 - && (os->bfd_section->flags & SEC_THREAD_LOCAL)) + && (os->bfd_section->flags & SEC_THREAD_LOCAL) + && ! link_info.relocateable) os->bfd_section->_raw_size = 0; else os->bfd_section->_raw_size = -- 2.30.2