aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorH.J. Lu <hjl.tools@gmail.com>2005-06-05 15:28:36 +0000
committerH.J. Lu <hjl.tools@gmail.com>2005-06-05 15:28:36 +0000
commit18b7982923d444f29fafdc4b691c1f07a43aa199 (patch)
tree0d8ef23673a183e2974ce7937af6012c9fa55972
parent9ee913b8a045a3d16864035249356e544cbbac7f (diff)
downloadfsf-binutils-gdb-18b7982923d444f29fafdc4b691c1f07a43aa199.zip
fsf-binutils-gdb-18b7982923d444f29fafdc4b691c1f07a43aa199.tar.gz
fsf-binutils-gdb-18b7982923d444f29fafdc4b691c1f07a43aa199.tar.bz2
ld/
2005-06-05 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-05 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.
-rw-r--r--ld/ChangeLog5
-rw-r--r--ld/ldexp.c27
-rw-r--r--ld/testsuite/ChangeLog6
-rw-r--r--ld/testsuite/ld-cris/hiddef1.d4
-rw-r--r--ld/testsuite/ld-cris/libdso-10.d4
-rw-r--r--ld/testsuite/ld-cris/libdso-2.d34
6 files changed, 48 insertions, 32 deletions
diff --git a/ld/ChangeLog b/ld/ChangeLog
index 12d643b..d4a15a8 100644
--- a/ld/ChangeLog
+++ b/ld/ChangeLog
@@ -1,3 +1,8 @@
+2005-06-05 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.
+
2005-06-04 H.J. Lu <hongjiu.lu@intel.com>
PR 992
diff --git a/ld/ldexp.c b/ld/ldexp.c
index 7d63c8d..3927f85 100644
--- a/ld/ldexp.c
+++ b/ld/ldexp.c
@@ -1247,24 +1247,33 @@ exp_mark_used_section (etree_type *tree, asection *current_section)
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)
diff --git a/ld/testsuite/ChangeLog b/ld/testsuite/ChangeLog
index a2a946e..52cffd3 100644
--- a/ld/testsuite/ChangeLog
+++ b/ld/testsuite/ChangeLog
@@ -1,3 +1,9 @@
+2005-06-05 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.
+
2005-06-04 H.J. Lu <hongjiu.lu@intel.com>
* ld-cris/hiddef1.d: Updated.
diff --git a/ld/testsuite/ld-cris/hiddef1.d b/ld/testsuite/ld-cris/hiddef1.d
index 99d8a3d..fd79f92 100644
--- a/ld/testsuite/ld-cris/hiddef1.d
+++ b/ld/testsuite/ld-cris/hiddef1.d
@@ -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 offset 0x[0-9a-f]+ contains 1 entries:
#...
Symbol table '\.dynsym' contains 9 entries:
#...
-Symbol table '\.symtab' contains 20 entries:
+Symbol table '\.symtab' contains 19 entries:
#pass
diff --git a/ld/testsuite/ld-cris/libdso-10.d b/ld/testsuite/ld-cris/libdso-10.d
index a0c75c1..3fe6ddb 100644
--- a/ld/testsuite/ld-cris/libdso-10.d
+++ b/ld/testsuite/ld-cris/libdso-10.d
@@ -35,7 +35,5 @@ Idx Name Size VMA LMA File off Algn
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
diff --git a/ld/testsuite/ld-cris/libdso-2.d b/ld/testsuite/ld-cris/libdso-2.d
index 48d0fe8..10bfe28 100644
--- a/ld/testsuite/ld-cris/libdso-2.d
+++ b/ld/testsuite/ld-cris/libdso-2.d
@@ -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 entries:
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 entries:
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