This is the mail archive of the
binutils@sources.redhat.com
mailing list for the binutils project.
Re: PATCH: PR 992: regression: ld selective1 and selective2 fails, cris-elf
On Sat, Jun 04, 2005 at 06:45:30AM -0700, H. J. Lu wrote:
> On Fri, Jun 03, 2005 at 11:35:51PM -0700, H. J. Lu wrote:
> > The updated patch of
> >
> > http://sourceware.org/ml/binutils/2005-06/msg00030.html
> >
> > should also fix PR 992.
> >
> >
>
> We need to check if the current section isn't abs section before
> settig SEC_KEEP.
>
>
We should set SEC_KEEP on current section only if the symbol will be
defined.
H.J.
----
ld/
2005-06-04 H.J. Lu <hongjiu.lu@intel.com>
* ldexp.c (exp_mark_used_section): Set SEC_KEEP on current
section only if the symbol will be defined.
ld/testsuite/
2005-06-04 H.J. Lu <hongjiu.lu@intel.com>
* ld-cris/hiddef1.d: Undo the last change.
* ld-cris/libdso-10.d: Likewise.
* ld-cris/libdso-2.d: Likewise.
--- ld/ldexp.c.base 2005-06-04 10:53:29.000000000 -0700
+++ ld/ldexp.c 2005-06-04 12:48:58.000000000 -0700
@@ -1247,24 +1247,33 @@ exp_mark_used_section (etree_type *tree,
if (tree->assign.dst[0] != '.' || tree->assign.dst[1] != 0)
{
etree_value_type result;
+ bfd_boolean create = tree->type.node_class == etree_assign;
+ struct bfd_link_hash_entry *h;
result = exp_fold_tree_1 (tree->assign.src,
current_section,
lang_allocating_phase_enum,
dot, &dot, TRUE);
- if (current_section != bfd_abs_section_ptr)
+
+ /* We mark the current section SEC_KEEP only if the symbol
+ will be defined. */
+ if (!create)
+ h = bfd_link_hash_lookup (link_info.hash, tree->assign.dst,
+ create, FALSE, TRUE);
+ else
+ h = NULL;
+
+ if ((create || h)
+ && current_section != bfd_abs_section_ptr)
current_section->flags |= SEC_KEEP;
+
if (result.valid_p)
{
- bfd_boolean create;
- struct bfd_link_hash_entry *h;
- if (tree->type.node_class == etree_assign)
- create = TRUE;
- else
- create = FALSE;
- h = bfd_link_hash_lookup (link_info.hash, tree->assign.dst,
- create, FALSE, TRUE);
+ if (create)
+ h = bfd_link_hash_lookup (link_info.hash,
+ tree->assign.dst, create,
+ FALSE, TRUE);
if (h == NULL)
{
if (create)
--- ld/testsuite/ld-cris/hiddef1.d.base 2005-06-04 12:52:23.000000000 -0700
+++ ld/testsuite/ld-cris/hiddef1.d 2005-06-04 12:48:14.000000000 -0700
@@ -14,7 +14,7 @@
# and sections change, make sure that there's no .plt and that
# dsofn is hidden (not exported as a dynamic symbol).
-There are 12 section headers, starting at offset 0x[0-9a-f]+:
+There are 11 section headers, starting at offset 0x[0-9a-f]+:
#...
\[[ 0-9]+\] \.got PROGBITS [0-9a-f]+ [0-9a-f]+ 0+10 04 WA 0 0 4
#...
@@ -24,5 +24,5 @@ Relocation section '\.rela\.dyn' at offs
#...
Symbol table '\.dynsym' contains 9 entries:
#...
-Symbol table '\.symtab' contains 20 entries:
+Symbol table '\.symtab' contains 19 entries:
#pass
--- ld/testsuite/ld-cris/libdso-10.d.base 2005-06-04 12:52:23.000000000 -0700
+++ ld/testsuite/ld-cris/libdso-10.d 2005-06-04 12:48:14.000000000 -0700
@@ -35,7 +35,5 @@ Idx Name Size VMA LM
CONTENTS, ALLOC, LOAD, DATA
5 \.got 0+c 0+21e0 0+21e0 0+1e0 2\*\*2
CONTENTS, ALLOC, LOAD, DATA
- 6 \.data 0+ 0+21ec 0+21ec 0+1ec 2\*\*0
- CONTENTS, ALLOC, LOAD, DATA
- 7 \.bss 0+14 0+21ec 0+21ec 0+1ec 2\*\*0
+ 6 \.bss 0+14 0+21ec 0+21ec 0+1ec 2\*\*0
ALLOC
--- ld/testsuite/ld-cris/libdso-2.d.base 2005-06-04 12:52:23.000000000 -0700
+++ ld/testsuite/ld-cris/libdso-2.d 2005-06-04 12:48:14.000000000 -0700
@@ -10,7 +10,7 @@
# entries. This formerly SEGV:ed because .rela.got was created
# too late to have it mapped to an output section.
-There are 15 section headers.*
+There are 14 section headers.*
#...
\[ 1\] \.hash HASH .*
\[ 2\] \.dynsym DYNSYM .*
@@ -21,11 +21,10 @@ There are 15 section headers.*
\[ 7\] \.text PROGBITS .*
\[ 8\] \.dynamic DYNAMIC .*
\[ 9\] \.got PROGBITS .*
- \[10\] \.data PROGBITS .*
- \[11\] \.bss NOBITS .*
- \[12\] \.shstrtab STRTAB .*
- \[13\] \.symtab SYMTAB .*
- \[14\] \.strtab STRTAB .*
+ \[10\] \.bss NOBITS .*
+ \[11\] \.shstrtab STRTAB .*
+ \[12\] \.symtab SYMTAB .*
+ \[13\] \.strtab STRTAB .*
#...
Relocation section '\.rela\.dyn' at offset 0x[0-9a-f]+ contains 1 entries:
#...
@@ -35,12 +34,12 @@ Symbol table '\.dynsym' contains 6 entri
Num: Value Size Type Bind Vis Ndx Name
0: 0+ 0 NOTYPE LOCAL DEFAULT UND
1: [0-9a-f]+ 0 SECTION LOCAL DEFAULT 7
- 2: [0-9a-f]+ 0 SECTION LOCAL DEFAULT 10
- 3: [0-9a-f]+ 0 SECTION LOCAL DEFAULT 11
+ 2: [0-9a-f]+ 0 NOTYPE LOCAL DEFAULT UND
+ 3: [0-9a-f]+ 0 SECTION LOCAL DEFAULT 10
4: 0+ 0 OBJECT GLOBAL DEFAULT ABS TST1
5: 0+188 0 FUNC GLOBAL DEFAULT 7 export_1@@TST1
-Symbol table '\.symtab' contains 23 entries:
+Symbol table '\.symtab' contains 22 entries:
Num: Value Size Type Bind Vis Ndx Name
0: 0+ 0 NOTYPE LOCAL DEFAULT UND
1: [0-9a-f]+ 0 SECTION LOCAL DEFAULT 1
@@ -56,12 +55,11 @@ Symbol table '\.symtab' contains 23 entr
11: [0-9a-f]+ 0 SECTION LOCAL DEFAULT 11
12: [0-9a-f]+ 0 SECTION LOCAL DEFAULT 12
13: [0-9a-f]+ 0 SECTION LOCAL DEFAULT 13
- 14: [0-9a-f]+ 0 SECTION LOCAL DEFAULT 14
- 15: 0+2198 0 OBJECT LOCAL DEFAULT ABS _DYNAMIC
- 16: 0+2230 0 NOTYPE LOCAL DEFAULT ABS __bss_start
- 17: 0+2230 0 NOTYPE LOCAL DEFAULT ABS _edata
- 18: 0+2220 0 OBJECT LOCAL HIDDEN ABS _GLOBAL_OFFSET_TABLE_
- 19: 0+2240 0 NOTYPE LOCAL DEFAULT ABS _end
- 20: 0+184 0 FUNC LOCAL DEFAULT 7 dsofn
- 21: 0+ 0 OBJECT GLOBAL DEFAULT ABS TST1
- 22: 0+188 0 FUNC GLOBAL DEFAULT 7 export_1
+ 14: 0+2198 0 OBJECT LOCAL DEFAULT ABS _DYNAMIC
+ 15: 0+2230 0 NOTYPE LOCAL DEFAULT ABS __bss_start
+ 16: 0+2230 0 NOTYPE LOCAL DEFAULT ABS _edata
+ 17: 0+2220 0 OBJECT LOCAL HIDDEN ABS _GLOBAL_OFFSET_TABLE_
+ 18: 0+2240 0 NOTYPE LOCAL DEFAULT ABS _end
+ 19: 0+184 0 FUNC LOCAL DEFAULT 7 dsofn
+ 20: 0+ 0 OBJECT GLOBAL DEFAULT ABS TST1
+ 21: 0+188 0 FUNC GLOBAL DEFAULT 7 export_1