2006-02-07 Paul Brook <paul@codesourcery.com>

ld/
	* emultempl/armelf.em: Include elf/arm.h.
	(arm_elf_finish): Set low address bit if enty point is a Thumb
	function.
ld/testsuite/
	* ld-arm/arm-elf.exp: Add thumb-entry test.
	* ld-arm/thumb-entry.d: New test.
	* ld-arm/thumb-entry.s: New test.
This commit is contained in:
Paul Brook 2006-02-07 03:50:20 +00:00
parent f31cddcbd4
commit 1d022697d9
6 changed files with 48 additions and 5 deletions

View File

@ -1,3 +1,9 @@
2006-02-07 Paul Brook <paul@codesourcery.com>
* emultempl/armelf.em: Include elf/arm.h.
(arm_elf_finish): Set low address bit if enty point is a Thumb
function.
2006-02-01 Danny Smith <dannysmith@users.sourceforge.net>
* deffilep.y (def_image_name): If the image name does not have

View File

@ -26,6 +26,8 @@
test -z "$TARGET2_TYPE" && TARGET2_TYPE="rel"
cat >>e${EMULATION_NAME}.c <<EOF
#include "elf/arm.h"
static char *thumb_entry_symbol = NULL;
static bfd *bfd_for_interwork;
static int byteswap_code = 0;
@ -150,11 +152,25 @@ arm_elf_finish (void)
/* Call the elf32.em routine. */
gld${EMULATION_NAME}_finish ();
if (thumb_entry_symbol == NULL)
return;
if (thumb_entry_symbol)
{
h = bfd_link_hash_lookup (link_info.hash, thumb_entry_symbol,
FALSE, FALSE, TRUE);
}
else
{
struct elf_link_hash_entry * eh;
if (!entry_symbol.name)
return;
h = bfd_link_hash_lookup (link_info.hash, entry_symbol.name,
FALSE, FALSE, TRUE);
eh = (struct elf_link_hash_entry *)h;
if (!h || ELF_ST_TYPE(eh->type) != STT_ARM_TFUNC)
return;
}
h = bfd_link_hash_lookup (link_info.hash, thumb_entry_symbol,
FALSE, FALSE, TRUE);
if (h != (struct bfd_link_hash_entry *) NULL
&& (h->type == bfd_link_hash_defined
@ -180,7 +196,8 @@ arm_elf_finish (void)
sprintf_vma (buffer + 2, val);
if (entry_symbol.name != NULL && entry_from_cmdline)
if (thumb_entry_symbol != NULL && entry_symbol.name != NULL
&& entry_from_cmdline)
einfo (_("%P: warning: '--thumb-entry %s' is overriding '-e %s'\n"),
thumb_entry_symbol, entry_symbol.name);
entry_symbol.name = buffer;

View File

@ -1,3 +1,9 @@
2006-02-07 Paul Brook <paul@codesourcery.com>
* ld-arm/arm-elf.exp: Add thumb-entry test.
* ld-arm/thumb-entry.d: New test.
* ld-arm/thumb-entry.s: New test.
2006-02-04 Richard Sandiford <richard@codesourcery.com>
* ld-mips-elf/tls-hidden2a.s, ld-mips-elf/tls-hidden2b.s,

View File

@ -89,6 +89,9 @@ set armelftests {
{"TLS dynamic application" "-T arm-dyn.ld tmpdir/tls-lib.so" "" {tls-app.s}
{{objdump -fdw tls-app.d} {objdump -Rw tls-app.r}}
"tls-app"}
{"Thumb entry point" "-T arm.ld" "" {thumb-entry.s}
{{readelf -h thumb-entry.d}}
"thumb-entry"}
}
run_ld_link_tests $armelftests

View File

@ -0,0 +1,3 @@
#...
Entry point address: 0x8001
#...

View File

@ -0,0 +1,8 @@
.text
.arch armv4t
.thumb
.global _start
.thumb_func
_start:
bx lr