* elf.c (map_sections_to_segments): Ignore .tbss sections for

layout purposes.

	* ldlang.c (lang_add_section): Don't force SEC_LOAD on
	SEC_THREAD_LOCAL.
	(IGNORE_SECTION): Ignore .tbss sections too.
	(lang_size_sections_1): .tbss sections do not advance dot.

	* ld-scripts/size.exp: New.
	* ld-scripts/size-[12].{d,s,t}: New.
This commit is contained in:
Nathan Sidwell 2004-03-05 11:26:05 +00:00
parent 52b5e991ee
commit e5caec89a0
12 changed files with 151 additions and 12 deletions

View File

@ -1,3 +1,8 @@
2004-03-05 Nathan Sidwell <nathan@codesourcery.com>
* elf.c (map_sections_to_segments): Ignore .tbss sections for
layout purposes.
2004-03-03 Alexandre Oliva <aoliva@redhat.com>
* elflink.c (bfd_elf_record_link_assignment): Mark undefweak and

View File

@ -3360,7 +3360,9 @@ map_sections_to_segments (bfd *abfd)
{
if ((hdr->flags & SEC_READONLY) == 0)
writable = TRUE;
last_hdr = hdr;
/* Ignore .tbss section for segment layout purposes. */
if ((hdr->flags & (SEC_THREAD_LOCAL | SEC_LOAD)) != SEC_THREAD_LOCAL)
last_hdr = hdr;
continue;
}

View File

@ -1,3 +1,10 @@
2004-03-05 Nathan Sidwell <nathan@codesourcery.com>
* ldlang.c (lang_add_section): Don't force SEC_LOAD on
SEC_THREAD_LOCAL.
(IGNORE_SECTION): Ignore .tbss sections too.
(lang_size_sections_1): .tbss sections do not advance dot.
2004-03-01 Andreas Schwab <schwab@suse.de>
* ld.texinfo (Options): Fix example for --wrap.

View File

@ -1101,10 +1101,6 @@ lang_add_section (lang_statement_list_type *ptr,
flags &= ~ (SEC_MERGE | SEC_STRINGS);
}
/* For now make .tbss normal section. */
if ((flags & SEC_THREAD_LOCAL) && ! link_info.relocatable)
flags |= SEC_LOAD;
section->output_section->flags |= flags;
if (flags & SEC_MERGE)
@ -2770,8 +2766,11 @@ size_input_section (lang_statement_union_type **this_ptr,
}
#define IGNORE_SECTION(bfd, s) \
(((bfd_get_section_flags (bfd, s) & (SEC_ALLOC | SEC_NEVER_LOAD)) \
!= SEC_ALLOC) \
(((bfd_get_section_flags (bfd, s) & SEC_THREAD_LOCAL) \
? ((bfd_get_section_flags (bfd, s) & (SEC_LOAD | SEC_NEVER_LOAD)) \
!= SEC_LOAD) \
: ((bfd_get_section_flags (bfd, s) & (SEC_ALLOC | SEC_NEVER_LOAD)) \
!= SEC_ALLOC)) \
|| bfd_section_size (bfd, s) == 0)
/* Check to see if any allocated sections overlap with other allocated
@ -3021,15 +3020,17 @@ lang_size_sections_1
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)
&& ! link_info.relocatable)
os->bfd_section->_raw_size = 0;
else
os->bfd_section->_raw_size
= TO_SIZE (after - os->bfd_section->vma);
dot = os->bfd_section->vma + TO_ADDR (os->bfd_section->_raw_size);
dot = os->bfd_section->vma;
/* .tbss sections effectively have zero size. */
if ((os->bfd_section->flags & SEC_HAS_CONTENTS) != 0
|| (os->bfd_section->flags & SEC_THREAD_LOCAL) == 0
|| link_info.relocatable)
dot += TO_ADDR (os->bfd_section->_raw_size);
os->processed = 1;
if (os->update_dot_tree != 0)

View File

@ -1,3 +1,8 @@
2004-03-05 Nathan Sidwell <nathan@codesourcery.com>
* ld-scripts/size.exp: New.
* ld-scripts/size-[12].{d,s,t}: New.
2004-03-01 Richard Sandiford <rsandifo@redhat.com>
* ld-frv/fr450-link[abc].s, fr450-link.d: New test.

View File

@ -0,0 +1,16 @@
#source: size-1.s
#ld: -T size-1.t
#objdump: -s
.*: file format .*
Contents of section \.text:
0+00 (01)?000000(01)? (02)?000000(02)? ........
Contents of section \.data:
0+08 (03)?000000(03)? (04)?000000(04)? (05)?000000(05)? ............
Contents of section \.tdata:
0+24 (06)?000000 07000000 08000000 09000000 ................
0+34 (0a)?000000 ....
Contents of section \.map:
0+38 (08)?000000(08)? (0c)?000000(0c)? (10)?000000(10)? (14)?000000(14)? ................
0+48 (18)?000000(18)? ....

View File

@ -0,0 +1,15 @@
.section .text,"ax",@progbits
.long 1,2
.section .data,"aw",@progbits
.long 3,4,5
.section .bss,"aw",@nobits
.long 0,0,0,0
# thread local storage sections
.section .tdata,"awT",@progbits
.long 6,7,8,9,10
.section .tbss,"awT",@nobits
.long 0,0,0,0,0,0

View File

@ -0,0 +1,15 @@
SECTIONS
{
.text : { *(.text) }
.data : { *(.data) }
.bss : { *(.bss) }
.tdata : { *(.tdata) }
.tbss : { *(.tbss) }
.map : {
LONG (SIZEOF (.text))
LONG (SIZEOF (.data))
LONG (SIZEOF (.bss))
LONG (SIZEOF (.tdata))
LONG (SIZEOF (.tbss))
}
}

View File

@ -0,0 +1,20 @@
#source: size-2.s
#ld: -T size-2.t
#readelf: -l
#...
Program Headers:
Type Offset VirtAddr PhysAddr
FileSiz MemSiz Flags Align
PHDR 0x[0-9a-f]+ 0x0+0000 0x0+0000
0x[0-9a-f]+ 0x[0-9a-f]+ R .
LOAD 0x[0-9a-f]+ 0x0+0000 0x0+0000
0x0+0030 0x0+0030 R [0-9a-f]+
TLS 0x[0-9a-f]+ 0x0+0008 0x0+0008
0x0+0014 0x0+002c R [0-9a-f]+
Section to Segment mapping:
Segment Sections...
00 \.text \.tdata \.tbss \.map
01 \.text \.tdata \.map
02 \.tdata \.tbss \.map

View File

@ -0,0 +1,9 @@
.section .text,"ax",@progbits
.long 1,2
# thread local storage sections
.section .tdata,"awT",@progbits
.long 6,7,8,9,10
.section .tbss,"awT",@nobits
.long 0,0,0,0,0,0

View File

@ -0,0 +1,21 @@
PHDRS
{
header PT_PHDR FILEHDR PHDRS ;
image PT_LOAD FLAGS (4);
tls PT_TLS FLAGS (4);
}
SECTIONS
{
.text : { *(.text) } :image
.tdata : { *(.tdata) } :image :tls
.tbss : { *(.tbss) } :image : tls
.map : {
LONG (SIZEOF (.text))
LONG (SIZEOF (.data))
LONG (SIZEOF (.bss))
LONG (SIZEOF (.tdata))
LONG (SIZEOF (.tbss))
} :image
}

View File

@ -0,0 +1,23 @@
# Expect script for SIZEOF tests
# Copyright (C) 2004 Free Software Foundation
#
# This file is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#
run_dump_test size-1
if { [istarget "*-*-elf*"] } {
run_dump_test size-2
}