aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Brook <paul@codesourcery.com>2006-06-19 14:22:27 +0000
committerPaul Brook <paul@codesourcery.com>2006-06-19 14:22:27 +0000
commit0fa3dcad7e7c9674d050150a1e5c5d0f9454713f (patch)
treea28b62251caaa8a1988feb318075401e57200f49
parenta6b96bebd2570d41149c9b90bc90c17599a44662 (diff)
downloadgdb-0fa3dcad7e7c9674d050150a1e5c5d0f9454713f.zip
gdb-0fa3dcad7e7c9674d050150a1e5c5d0f9454713f.tar.gz
gdb-0fa3dcad7e7c9674d050150a1e5c5d0f9454713f.tar.bz2
2006-06-19 Vladimir Prus <vladimir@codesourcery.com>
bfd/ * elf32-arm.c (elf32_arm_swap_symbol_out): Don't set low bit for undefined symbols. ld/testsuite * ld-arm/arm-elf.exp: New test. * ld-arm/use-thumb-lib.s: New file. * ld-arm/use-thumb-lib.sym: New file.
-rw-r--r--bfd/ChangeLog5
-rw-r--r--bfd/elf32-arm.c13
-rw-r--r--ld/testsuite/ChangeLog6
-rw-r--r--ld/testsuite/ld-arm/arm-elf.exp4
4 files changed, 28 insertions, 0 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index 5b10822..f947703 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,3 +1,8 @@
+2006-06-19 Vladimir Prus <vladimir@codesourcery.com>
+
+ * elf32-arm.c (elf32_arm_swap_symbol_out): Don't set low
+ bit for undefined symbols.
+
2006-06-19 Alan Modra <amodra@bigpond.net.au>
* elf-bfd.h (struct elf_backend_data): Add bfd_link_info pointer
diff --git a/bfd/elf32-arm.c b/bfd/elf32-arm.c
index b360c93..bc7bcd1 100644
--- a/bfd/elf32-arm.c
+++ b/bfd/elf32-arm.c
@@ -9172,6 +9172,19 @@ elf32_arm_swap_symbol_out (bfd *abfd,
{
newsym = *src;
newsym.st_info = ELF_ST_INFO (ELF_ST_BIND (src->st_info), STT_FUNC);
+ if (newsym.st_shndx != SHN_UNDEF)
+ {
+ /* Do this only for defined symbols. At link type, the static
+ linker will simulate the work of dynamic linker of resolving
+ symbols and will carry over the thumbness of found symbols to
+ the output symbol table. It's not clear how it happens, but
+ the thumbness of underfined symbols can well be different at
+ runtime, and writing '1' for them will be confusing for users
+ and possibly for dynamic linker itself.
+ */
+ newsym.st_value |= 1;
+ }
+
newsym.st_value |= 1;
src = &newsym;
diff --git a/ld/testsuite/ChangeLog b/ld/testsuite/ChangeLog
index 19c09c9..667c032 100644
--- a/ld/testsuite/ChangeLog
+++ b/ld/testsuite/ChangeLog
@@ -1,3 +1,9 @@
+2006-06-19 Vladimir Prus <vladimir@codesourcery.com>
+
+ * ld-arm/arm-elf.exp: New test.
+ * ld-arm/use-thumb-lib.s: New file.
+ * ld-arm/use-thumb-lib.sym: New file.
+
2006-06-15 Mark Shinwell <shinwell@codesourcery.com>
* ld-arm/group-relocs-alu-bad.d: New test.
diff --git a/ld/testsuite/ld-arm/arm-elf.exp b/ld/testsuite/ld-arm/arm-elf.exp
index 0939506..e8e6a85 100644
--- a/ld/testsuite/ld-arm/arm-elf.exp
+++ b/ld/testsuite/ld-arm/arm-elf.exp
@@ -131,6 +131,10 @@ set armelftests {
{"BE8 Mapping Symbols" "-static -T arm.ld -EB --be8" "-EB" {arm-be8.s}
{{objdump -s arm-be8.d}}
"arm-be8"}
+ {"Using Thumb lib by another lib" "-shared tmpdir/mixed-lib.so" "" {use-thumb-lib.s}
+ {{readelf -Ds use-thumb-lib.sym}}
+ "use-thumb-lib.so"}
+
}
run_ld_link_tests $armelftests