* elf32-arm.c (STUB_ENTRY_NAME): Define.
(arm_thumb_thumb_long_branch_stub): Use bx instead of b.n. (arm_pic_long_branch_stub): Mention R_ARM_REL32 instead of R_ARM_ABS32. (struct elf32_arm_stub_hash_entry): Add output_name. (arm_build_one_stub): Move offsets into the offset argument of _bfd_final_link_relocate. Correct offset for arm_thumb_arm_v4t_stub_long_branch. (elf32_arm_size_stubs): Set stub_entry->output_name. (elf32_arm_ouput_plt_map_sym): Rename to elf32_arm_output_map_sym. Update all callers. (elf32_arm_output_stub_sym): New. (arm_map_one_stub): Correct formatting. Use elf32_arm_output_stub_sym. * ld-arm/farcall-arm-arm-be8.d, ld-arm/farcall-arm-arm-pic-veneer.d, ld-arm/farcall-arm-arm.d, ld-arm/farcall-arm-thumb-blx-pic-veneer.d, ld-arm/farcall-arm-thumb-blx.d, ld-arm/farcall-arm-thumb-pic-veneer.d, ld-arm/farcall-arm-thumb.d, ld-arm/farcall-group-size2.d, ld-arm/farcall-group.d, ld-arm/farcall-mix.d, ld-arm/farcall-mix2.d, ld-arm/farcall-thumb-arm-blx-pic-veneer.d, ld-arm/farcall-thumb-arm-blx.d, ld-arm/farcall-thumb-arm.d, ld-arm/farcall-thumb-thumb-blx-pic-veneer.d, ld-arm/farcall-thumb-thumb-blx.d, ld-arm/farcall-thumb-thumb-m.d, ld-arm/thumb2-bl-as-thumb1-bad.d, ld-arm/thumb2-bl-bad.d: Update for stub symbols and stub corrections.
This commit is contained in:
parent
92677fa666
commit
7413f23fb4
23 changed files with 265 additions and 144 deletions
|
@ -1,3 +1,19 @@
|
||||||
|
2008-06-24 Daniel Jacobowitz <dan@codesourcery.com>
|
||||||
|
|
||||||
|
* elf32-arm.c (STUB_ENTRY_NAME): Define.
|
||||||
|
(arm_thumb_thumb_long_branch_stub): Use bx instead of b.n.
|
||||||
|
(arm_pic_long_branch_stub): Mention R_ARM_REL32 instead of
|
||||||
|
R_ARM_ABS32.
|
||||||
|
(struct elf32_arm_stub_hash_entry): Add output_name.
|
||||||
|
(arm_build_one_stub): Move offsets into the offset argument
|
||||||
|
of _bfd_final_link_relocate. Correct offset for
|
||||||
|
arm_thumb_arm_v4t_stub_long_branch.
|
||||||
|
(elf32_arm_size_stubs): Set stub_entry->output_name.
|
||||||
|
(elf32_arm_ouput_plt_map_sym): Rename to elf32_arm_output_map_sym.
|
||||||
|
Update all callers.
|
||||||
|
(elf32_arm_output_stub_sym): New.
|
||||||
|
(arm_map_one_stub): Correct formatting. Use elf32_arm_output_stub_sym.
|
||||||
|
|
||||||
2008-06-20 Alan Modra <amodra@bigpond.net.au>
|
2008-06-20 Alan Modra <amodra@bigpond.net.au>
|
||||||
|
|
||||||
* elf32-spu.c (needs_ovl_stub): Correctly return nonovl_stub for
|
* elf32-spu.c (needs_ovl_stub): Correctly return nonovl_stub for
|
||||||
|
|
173
bfd/elf32-arm.c
173
bfd/elf32-arm.c
|
@ -1898,6 +1898,8 @@ typedef unsigned short int insn16;
|
||||||
#define ARM_BX_GLUE_SECTION_NAME ".v4_bx"
|
#define ARM_BX_GLUE_SECTION_NAME ".v4_bx"
|
||||||
#define ARM_BX_GLUE_ENTRY_NAME "__bx_r%d"
|
#define ARM_BX_GLUE_ENTRY_NAME "__bx_r%d"
|
||||||
|
|
||||||
|
#define STUB_ENTRY_NAME "__%s_veneer"
|
||||||
|
|
||||||
/* The name of the dynamic interpreter. This is put in the .interp
|
/* The name of the dynamic interpreter. This is put in the .interp
|
||||||
section. */
|
section. */
|
||||||
#define ELF_DYNAMIC_INTERPRETER "/usr/lib/ld.so.1"
|
#define ELF_DYNAMIC_INTERPRETER "/usr/lib/ld.so.1"
|
||||||
|
@ -2024,8 +2026,8 @@ static const bfd_vma arm_thumb_thumb_long_branch_stub[] =
|
||||||
{
|
{
|
||||||
0x4e02b540, /* push {r6, lr} */
|
0x4e02b540, /* push {r6, lr} */
|
||||||
/* ldr r6, [pc, #8] */
|
/* ldr r6, [pc, #8] */
|
||||||
0xe7fe46fe, /* mov lr, pc */
|
0x473046fe, /* mov lr, pc */
|
||||||
/* b.n r6 */
|
/* bx r6 */
|
||||||
0xbf00bd40, /* pop {r6, pc} */
|
0xbf00bd40, /* pop {r6, pc} */
|
||||||
/* nop */
|
/* nop */
|
||||||
0x00000000, /* dcd R_ARM_ABS32(X) */
|
0x00000000, /* dcd R_ARM_ABS32(X) */
|
||||||
|
@ -2046,7 +2048,7 @@ static const bfd_vma arm_pic_long_branch_stub[] =
|
||||||
{
|
{
|
||||||
0xe59fc000, /* ldr r12, [pc] */
|
0xe59fc000, /* ldr r12, [pc] */
|
||||||
0xe08ff00c, /* add pc, pc, ip */
|
0xe08ff00c, /* add pc, pc, ip */
|
||||||
0x00000000, /* dcd R_ARM_ABS32(X) */
|
0x00000000, /* dcd R_ARM_REL32(X) */
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Section name for stubs is the associated section name plus this
|
/* Section name for stubs is the associated section name plus this
|
||||||
|
@ -2090,6 +2092,11 @@ struct elf32_arm_stub_hash_entry
|
||||||
/* Where this stub is being called from, or, in the case of combined
|
/* Where this stub is being called from, or, in the case of combined
|
||||||
stub sections, the first input section in the group. */
|
stub sections, the first input section in the group. */
|
||||||
asection *id_sec;
|
asection *id_sec;
|
||||||
|
|
||||||
|
/* The name for the local symbol at the start of this stub. The
|
||||||
|
stub name in the hash table has to be unique; this does not, so
|
||||||
|
it can be friendlier. */
|
||||||
|
char *output_name;
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Used to build a map of a section. This is required for mixed-endian
|
/* Used to build a map of a section. This is required for mixed-endian
|
||||||
|
@ -3111,32 +3118,30 @@ arm_build_one_stub (struct bfd_hash_entry *gen_entry,
|
||||||
{
|
{
|
||||||
case arm_stub_long_branch:
|
case arm_stub_long_branch:
|
||||||
_bfd_final_link_relocate (elf32_arm_howto_from_type (R_ARM_ABS32),
|
_bfd_final_link_relocate (elf32_arm_howto_from_type (R_ARM_ABS32),
|
||||||
stub_bfd, stub_sec, stub_sec->contents + 4,
|
stub_bfd, stub_sec, stub_sec->contents,
|
||||||
stub_entry->stub_offset, sym_value, 0);
|
stub_entry->stub_offset + 4, sym_value, 0);
|
||||||
break;
|
break;
|
||||||
case arm_thumb_v4t_stub_long_branch:
|
case arm_thumb_v4t_stub_long_branch:
|
||||||
_bfd_final_link_relocate (elf32_arm_howto_from_type (R_ARM_ABS32),
|
_bfd_final_link_relocate (elf32_arm_howto_from_type (R_ARM_ABS32),
|
||||||
stub_bfd, stub_sec, stub_sec->contents + 8,
|
stub_bfd, stub_sec, stub_sec->contents,
|
||||||
stub_entry->stub_offset, sym_value, 0);
|
stub_entry->stub_offset + 8, sym_value, 0);
|
||||||
break;
|
break;
|
||||||
case arm_thumb_thumb_stub_long_branch:
|
case arm_thumb_thumb_stub_long_branch:
|
||||||
_bfd_final_link_relocate (elf32_arm_howto_from_type (R_ARM_ABS32),
|
_bfd_final_link_relocate (elf32_arm_howto_from_type (R_ARM_ABS32),
|
||||||
stub_bfd, stub_sec, stub_sec->contents + 12,
|
stub_bfd, stub_sec, stub_sec->contents,
|
||||||
stub_entry->stub_offset, sym_value, 0);
|
stub_entry->stub_offset + 12, sym_value, 0);
|
||||||
break;
|
break;
|
||||||
case arm_thumb_arm_v4t_stub_long_branch:
|
case arm_thumb_arm_v4t_stub_long_branch:
|
||||||
_bfd_final_link_relocate (elf32_arm_howto_from_type (R_ARM_ABS32),
|
_bfd_final_link_relocate (elf32_arm_howto_from_type (R_ARM_ABS32),
|
||||||
stub_bfd, stub_sec, stub_sec->contents + 20,
|
stub_bfd, stub_sec, stub_sec->contents,
|
||||||
stub_entry->stub_offset, sym_value, 0);
|
stub_entry->stub_offset + 16, sym_value, 0);
|
||||||
break;
|
break;
|
||||||
case arm_stub_pic_long_branch:
|
case arm_stub_pic_long_branch:
|
||||||
/* We want the value relative to the address 8 bytes from the
|
/* We want the value relative to the address 8 bytes from the
|
||||||
start of the stub. */
|
start of the stub. */
|
||||||
sym_value -= stub_addr + 8;
|
_bfd_final_link_relocate (elf32_arm_howto_from_type (R_ARM_REL32),
|
||||||
|
stub_bfd, stub_sec, stub_sec->contents,
|
||||||
_bfd_final_link_relocate (elf32_arm_howto_from_type (R_ARM_ABS32),
|
stub_entry->stub_offset + 8, sym_value, 0);
|
||||||
stub_bfd, stub_sec, stub_sec->contents + 8,
|
|
||||||
stub_entry->stub_offset, sym_value, 0);
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
@ -3484,6 +3489,7 @@ elf32_arm_size_stubs (bfd *output_bfd,
|
||||||
bfd_vma sym_value;
|
bfd_vma sym_value;
|
||||||
bfd_vma destination;
|
bfd_vma destination;
|
||||||
struct elf32_arm_link_hash_entry *hash;
|
struct elf32_arm_link_hash_entry *hash;
|
||||||
|
const char *sym_name;
|
||||||
char *stub_name;
|
char *stub_name;
|
||||||
const asection *id_sec;
|
const asection *id_sec;
|
||||||
unsigned char st_type;
|
unsigned char st_type;
|
||||||
|
@ -3511,6 +3517,7 @@ elf32_arm_size_stubs (bfd *output_bfd,
|
||||||
sym_value = 0;
|
sym_value = 0;
|
||||||
destination = 0;
|
destination = 0;
|
||||||
hash = NULL;
|
hash = NULL;
|
||||||
|
sym_name = NULL;
|
||||||
if (r_indx < symtab_hdr->sh_info)
|
if (r_indx < symtab_hdr->sh_info)
|
||||||
{
|
{
|
||||||
/* It's a local symbol. */
|
/* It's a local symbol. */
|
||||||
|
@ -3539,6 +3546,10 @@ elf32_arm_size_stubs (bfd *output_bfd,
|
||||||
+ sym_sec->output_offset
|
+ sym_sec->output_offset
|
||||||
+ sym_sec->output_section->vma);
|
+ sym_sec->output_section->vma);
|
||||||
st_type = ELF_ST_TYPE (sym->st_info);
|
st_type = ELF_ST_TYPE (sym->st_info);
|
||||||
|
sym_name
|
||||||
|
= bfd_elf_string_from_elf_section (input_bfd,
|
||||||
|
symtab_hdr->sh_link,
|
||||||
|
sym->st_name);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -3576,6 +3587,7 @@ elf32_arm_size_stubs (bfd *output_bfd,
|
||||||
goto error_ret_free_internal;
|
goto error_ret_free_internal;
|
||||||
}
|
}
|
||||||
st_type = ELF_ST_TYPE (hash->root.type);
|
st_type = ELF_ST_TYPE (hash->root.type);
|
||||||
|
sym_name = hash->root.root.root.string;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Determine what (if any) linker stub is needed. */
|
/* Determine what (if any) linker stub is needed. */
|
||||||
|
@ -3614,6 +3626,33 @@ elf32_arm_size_stubs (bfd *output_bfd,
|
||||||
stub_entry->stub_type = stub_type;
|
stub_entry->stub_type = stub_type;
|
||||||
stub_entry->h = hash;
|
stub_entry->h = hash;
|
||||||
stub_entry->st_type = st_type;
|
stub_entry->st_type = st_type;
|
||||||
|
|
||||||
|
if (sym_name == NULL)
|
||||||
|
sym_name = "unnamed";
|
||||||
|
stub_entry->output_name
|
||||||
|
= bfd_alloc (htab->stub_bfd,
|
||||||
|
sizeof (THUMB2ARM_GLUE_ENTRY_NAME)
|
||||||
|
+ strlen (sym_name));
|
||||||
|
if (stub_entry->output_name == NULL)
|
||||||
|
{
|
||||||
|
free (stub_name);
|
||||||
|
goto error_ret_free_internal;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* For historical reasons, use the existing names for
|
||||||
|
ARM-to-Thumb and Thumb-to-ARM stubs. */
|
||||||
|
if (r_type == (unsigned int) R_ARM_THM_CALL
|
||||||
|
&& st_type != STT_ARM_TFUNC)
|
||||||
|
sprintf (stub_entry->output_name, THUMB2ARM_GLUE_ENTRY_NAME,
|
||||||
|
sym_name);
|
||||||
|
else if (r_type == (unsigned int) R_ARM_CALL
|
||||||
|
&& st_type == STT_ARM_TFUNC)
|
||||||
|
sprintf (stub_entry->output_name, ARM2THUMB_GLUE_ENTRY_NAME,
|
||||||
|
sym_name);
|
||||||
|
else
|
||||||
|
sprintf (stub_entry->output_name, STUB_ENTRY_NAME,
|
||||||
|
sym_name);
|
||||||
|
|
||||||
stub_changed = TRUE;
|
stub_changed = TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -11030,10 +11069,10 @@ enum map_symbol_type
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
/* Output a single PLT mapping symbol. */
|
/* Output a single mapping symbol. */
|
||||||
|
|
||||||
static bfd_boolean
|
static bfd_boolean
|
||||||
elf32_arm_ouput_plt_map_sym (output_arch_syminfo *osi,
|
elf32_arm_output_map_sym (output_arch_syminfo *osi,
|
||||||
enum map_symbol_type type,
|
enum map_symbol_type type,
|
||||||
bfd_vma offset)
|
bfd_vma offset)
|
||||||
{
|
{
|
||||||
|
@ -11083,20 +11122,20 @@ elf32_arm_output_plt_map (struct elf_link_hash_entry *h, void *inf)
|
||||||
addr = h->plt.offset;
|
addr = h->plt.offset;
|
||||||
if (htab->symbian_p)
|
if (htab->symbian_p)
|
||||||
{
|
{
|
||||||
if (!elf32_arm_ouput_plt_map_sym (osi, ARM_MAP_ARM, addr))
|
if (!elf32_arm_output_map_sym (osi, ARM_MAP_ARM, addr))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
if (!elf32_arm_ouput_plt_map_sym (osi, ARM_MAP_DATA, addr + 4))
|
if (!elf32_arm_output_map_sym (osi, ARM_MAP_DATA, addr + 4))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
else if (htab->vxworks_p)
|
else if (htab->vxworks_p)
|
||||||
{
|
{
|
||||||
if (!elf32_arm_ouput_plt_map_sym (osi, ARM_MAP_ARM, addr))
|
if (!elf32_arm_output_map_sym (osi, ARM_MAP_ARM, addr))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
if (!elf32_arm_ouput_plt_map_sym (osi, ARM_MAP_DATA, addr + 8))
|
if (!elf32_arm_output_map_sym (osi, ARM_MAP_DATA, addr + 8))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
if (!elf32_arm_ouput_plt_map_sym (osi, ARM_MAP_ARM, addr + 12))
|
if (!elf32_arm_output_map_sym (osi, ARM_MAP_ARM, addr + 12))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
if (!elf32_arm_ouput_plt_map_sym (osi, ARM_MAP_DATA, addr + 20))
|
if (!elf32_arm_output_map_sym (osi, ARM_MAP_DATA, addr + 20))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -11109,13 +11148,13 @@ elf32_arm_output_plt_map (struct elf_link_hash_entry *h, void *inf)
|
||||||
|
|
||||||
if (thumb_refs > 0)
|
if (thumb_refs > 0)
|
||||||
{
|
{
|
||||||
if (!elf32_arm_ouput_plt_map_sym (osi, ARM_MAP_THUMB, addr - 4))
|
if (!elf32_arm_output_map_sym (osi, ARM_MAP_THUMB, addr - 4))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
#ifdef FOUR_WORD_PLT
|
#ifdef FOUR_WORD_PLT
|
||||||
if (!elf32_arm_ouput_plt_map_sym (osi, ARM_MAP_ARM, addr))
|
if (!elf32_arm_output_map_sym (osi, ARM_MAP_ARM, addr))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
if (!elf32_arm_ouput_plt_map_sym (osi, ARM_MAP_DATA, addr + 12))
|
if (!elf32_arm_output_map_sym (osi, ARM_MAP_DATA, addr + 12))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
#else
|
#else
|
||||||
/* A three-word PLT with no Thumb thunk contains only Arm code,
|
/* A three-word PLT with no Thumb thunk contains only Arm code,
|
||||||
|
@ -11123,7 +11162,7 @@ elf32_arm_output_plt_map (struct elf_link_hash_entry *h, void *inf)
|
||||||
entries with thumb thunks. */
|
entries with thumb thunks. */
|
||||||
if (thumb_refs > 0 || addr == 20)
|
if (thumb_refs > 0 || addr == 20)
|
||||||
{
|
{
|
||||||
if (!elf32_arm_ouput_plt_map_sym (osi, ARM_MAP_ARM, addr))
|
if (!elf32_arm_output_map_sym (osi, ARM_MAP_ARM, addr))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -11132,6 +11171,27 @@ elf32_arm_output_plt_map (struct elf_link_hash_entry *h, void *inf)
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Output a single local symbol for a generated stub. */
|
||||||
|
|
||||||
|
static bfd_boolean
|
||||||
|
elf32_arm_output_stub_sym (output_arch_syminfo *osi, const char *name,
|
||||||
|
bfd_vma offset, bfd_vma size)
|
||||||
|
{
|
||||||
|
struct elf32_arm_link_hash_table *htab;
|
||||||
|
Elf_Internal_Sym sym;
|
||||||
|
|
||||||
|
htab = elf32_arm_hash_table (osi->info);
|
||||||
|
sym.st_value = osi->sec->output_section->vma
|
||||||
|
+ osi->sec->output_offset
|
||||||
|
+ offset;
|
||||||
|
sym.st_size = size;
|
||||||
|
sym.st_other = 0;
|
||||||
|
sym.st_info = ELF_ST_INFO (STB_LOCAL, STT_FUNC);
|
||||||
|
sym.st_shndx = osi->sec_shndx;
|
||||||
|
if (!osi->func (osi->finfo, name, &sym, osi->sec, NULL))
|
||||||
|
return FALSE;
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
static bfd_boolean
|
static bfd_boolean
|
||||||
arm_map_one_stub (struct bfd_hash_entry *gen_entry,
|
arm_map_one_stub (struct bfd_hash_entry *gen_entry,
|
||||||
|
@ -11142,6 +11202,7 @@ arm_map_one_stub (struct bfd_hash_entry *gen_entry,
|
||||||
struct elf32_arm_link_hash_table *htab;
|
struct elf32_arm_link_hash_table *htab;
|
||||||
asection *stub_sec;
|
asection *stub_sec;
|
||||||
bfd_vma addr;
|
bfd_vma addr;
|
||||||
|
char *stub_name;
|
||||||
|
|
||||||
/* Massage our args to the form they really have. */
|
/* Massage our args to the form they really have. */
|
||||||
stub_entry = (struct elf32_arm_stub_hash_entry *) gen_entry;
|
stub_entry = (struct elf32_arm_stub_hash_entry *) gen_entry;
|
||||||
|
@ -11153,43 +11214,55 @@ arm_map_one_stub (struct bfd_hash_entry *gen_entry,
|
||||||
stub_sec = stub_entry->stub_sec;
|
stub_sec = stub_entry->stub_sec;
|
||||||
|
|
||||||
/* Ensure this stub is attached to the current section being
|
/* Ensure this stub is attached to the current section being
|
||||||
processed */
|
processed. */
|
||||||
if (stub_sec != osi->sec)
|
if (stub_sec != osi->sec)
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
||||||
addr = (bfd_vma) stub_entry->stub_offset;
|
addr = (bfd_vma) stub_entry->stub_offset;
|
||||||
|
stub_name = stub_entry->output_name;
|
||||||
|
|
||||||
switch(stub_entry->stub_type) {
|
switch (stub_entry->stub_type)
|
||||||
|
{
|
||||||
case arm_stub_long_branch:
|
case arm_stub_long_branch:
|
||||||
if (!elf32_arm_ouput_plt_map_sym (osi, ARM_MAP_ARM, addr))
|
if (!elf32_arm_output_stub_sym (osi, stub_name, addr, 8))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
if (!elf32_arm_ouput_plt_map_sym (osi, ARM_MAP_DATA, addr + 4))
|
if (!elf32_arm_output_map_sym (osi, ARM_MAP_ARM, addr))
|
||||||
|
return FALSE;
|
||||||
|
if (!elf32_arm_output_map_sym (osi, ARM_MAP_DATA, addr + 4))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
break;
|
break;
|
||||||
case arm_thumb_v4t_stub_long_branch:
|
case arm_thumb_v4t_stub_long_branch:
|
||||||
if (!elf32_arm_ouput_plt_map_sym (osi, ARM_MAP_ARM, addr))
|
if (!elf32_arm_output_stub_sym (osi, stub_name, addr, 12))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
if (!elf32_arm_ouput_plt_map_sym (osi, ARM_MAP_DATA, addr + 8))
|
if (!elf32_arm_output_map_sym (osi, ARM_MAP_ARM, addr))
|
||||||
|
return FALSE;
|
||||||
|
if (!elf32_arm_output_map_sym (osi, ARM_MAP_DATA, addr + 8))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
break;
|
break;
|
||||||
case arm_thumb_thumb_stub_long_branch:
|
case arm_thumb_thumb_stub_long_branch:
|
||||||
if (!elf32_arm_ouput_plt_map_sym (osi, ARM_MAP_THUMB, addr))
|
if (!elf32_arm_output_stub_sym (osi, stub_name, addr + 1, 16))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
if (!elf32_arm_ouput_plt_map_sym (osi, ARM_MAP_DATA, addr + 12))
|
if (!elf32_arm_output_map_sym (osi, ARM_MAP_THUMB, addr))
|
||||||
|
return FALSE;
|
||||||
|
if (!elf32_arm_output_map_sym (osi, ARM_MAP_DATA, addr + 12))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
break;
|
break;
|
||||||
case arm_thumb_arm_v4t_stub_long_branch:
|
case arm_thumb_arm_v4t_stub_long_branch:
|
||||||
if (!elf32_arm_ouput_plt_map_sym (osi, ARM_MAP_THUMB, addr))
|
if (!elf32_arm_output_stub_sym (osi, stub_name, addr + 1, 20))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
if (!elf32_arm_ouput_plt_map_sym (osi, ARM_MAP_ARM, addr + 8))
|
if (!elf32_arm_output_map_sym (osi, ARM_MAP_THUMB, addr))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
if (!elf32_arm_ouput_plt_map_sym (osi, ARM_MAP_DATA, addr + 16))
|
if (!elf32_arm_output_map_sym (osi, ARM_MAP_ARM, addr + 8))
|
||||||
|
return FALSE;
|
||||||
|
if (!elf32_arm_output_map_sym (osi, ARM_MAP_DATA, addr + 16))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
break;
|
break;
|
||||||
case arm_stub_pic_long_branch:
|
case arm_stub_pic_long_branch:
|
||||||
if (!elf32_arm_ouput_plt_map_sym (osi, ARM_MAP_ARM, addr))
|
if (!elf32_arm_output_stub_sym (osi, stub_name, addr, 12))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
if (!elf32_arm_ouput_plt_map_sym (osi, ARM_MAP_DATA, addr + 8))
|
if (!elf32_arm_output_map_sym (osi, ARM_MAP_ARM, addr))
|
||||||
|
return FALSE;
|
||||||
|
if (!elf32_arm_output_map_sym (osi, ARM_MAP_DATA, addr + 8))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
@ -11240,8 +11313,8 @@ elf32_arm_output_arch_local_syms (bfd *output_bfd,
|
||||||
|
|
||||||
for (offset = 0; offset < htab->arm_glue_size; offset += size)
|
for (offset = 0; offset < htab->arm_glue_size; offset += size)
|
||||||
{
|
{
|
||||||
elf32_arm_ouput_plt_map_sym (&osi, ARM_MAP_ARM, offset);
|
elf32_arm_output_map_sym (&osi, ARM_MAP_ARM, offset);
|
||||||
elf32_arm_ouput_plt_map_sym (&osi, ARM_MAP_DATA, offset + size - 4);
|
elf32_arm_output_map_sym (&osi, ARM_MAP_DATA, offset + size - 4);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -11257,8 +11330,8 @@ elf32_arm_output_arch_local_syms (bfd *output_bfd,
|
||||||
|
|
||||||
for (offset = 0; offset < htab->thumb_glue_size; offset += size)
|
for (offset = 0; offset < htab->thumb_glue_size; offset += size)
|
||||||
{
|
{
|
||||||
elf32_arm_ouput_plt_map_sym (&osi, ARM_MAP_THUMB, offset);
|
elf32_arm_output_map_sym (&osi, ARM_MAP_THUMB, offset);
|
||||||
elf32_arm_ouput_plt_map_sym (&osi, ARM_MAP_ARM, offset + 4);
|
elf32_arm_output_map_sym (&osi, ARM_MAP_ARM, offset + 4);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -11271,7 +11344,7 @@ elf32_arm_output_arch_local_syms (bfd *output_bfd,
|
||||||
osi.sec_shndx = _bfd_elf_section_from_bfd_section
|
osi.sec_shndx = _bfd_elf_section_from_bfd_section
|
||||||
(output_bfd, osi.sec->output_section);
|
(output_bfd, osi.sec->output_section);
|
||||||
|
|
||||||
elf32_arm_ouput_plt_map_sym (&osi, ARM_MAP_ARM, 0);
|
elf32_arm_output_map_sym (&osi, ARM_MAP_ARM, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Long calls stubs. */
|
/* Long calls stubs. */
|
||||||
|
@ -11308,18 +11381,18 @@ elf32_arm_output_arch_local_syms (bfd *output_bfd,
|
||||||
/* VxWorks shared libraries have no PLT header. */
|
/* VxWorks shared libraries have no PLT header. */
|
||||||
if (!info->shared)
|
if (!info->shared)
|
||||||
{
|
{
|
||||||
if (!elf32_arm_ouput_plt_map_sym (&osi, ARM_MAP_ARM, 0))
|
if (!elf32_arm_output_map_sym (&osi, ARM_MAP_ARM, 0))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
if (!elf32_arm_ouput_plt_map_sym (&osi, ARM_MAP_DATA, 12))
|
if (!elf32_arm_output_map_sym (&osi, ARM_MAP_DATA, 12))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (!htab->symbian_p)
|
else if (!htab->symbian_p)
|
||||||
{
|
{
|
||||||
if (!elf32_arm_ouput_plt_map_sym (&osi, ARM_MAP_ARM, 0))
|
if (!elf32_arm_output_map_sym (&osi, ARM_MAP_ARM, 0))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
#ifndef FOUR_WORD_PLT
|
#ifndef FOUR_WORD_PLT
|
||||||
if (!elf32_arm_ouput_plt_map_sym (&osi, ARM_MAP_DATA, 16))
|
if (!elf32_arm_output_map_sym (&osi, ARM_MAP_DATA, 16))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,6 +19,8 @@
|
||||||
|
|
||||||
# This file was written by Jeff Johnston. (jjohnstn@redhat.com)
|
# This file was written by Jeff Johnston. (jjohnstn@redhat.com)
|
||||||
|
|
||||||
|
exp_internal 1
|
||||||
|
|
||||||
if $tracelevel then {
|
if $tracelevel then {
|
||||||
strace $tracelevel
|
strace $tracelevel
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,3 +1,17 @@
|
||||||
|
2008-06-24 Daniel Jacobowitz <dan@codesourcery.com>
|
||||||
|
|
||||||
|
* ld-arm/farcall-arm-arm-be8.d, ld-arm/farcall-arm-arm-pic-veneer.d,
|
||||||
|
ld-arm/farcall-arm-arm.d, ld-arm/farcall-arm-thumb-blx-pic-veneer.d,
|
||||||
|
ld-arm/farcall-arm-thumb-blx.d, ld-arm/farcall-arm-thumb-pic-veneer.d,
|
||||||
|
ld-arm/farcall-arm-thumb.d, ld-arm/farcall-group-size2.d,
|
||||||
|
ld-arm/farcall-group.d, ld-arm/farcall-mix.d, ld-arm/farcall-mix2.d,
|
||||||
|
ld-arm/farcall-thumb-arm-blx-pic-veneer.d,
|
||||||
|
ld-arm/farcall-thumb-arm-blx.d, ld-arm/farcall-thumb-arm.d,
|
||||||
|
ld-arm/farcall-thumb-thumb-blx-pic-veneer.d,
|
||||||
|
ld-arm/farcall-thumb-thumb-blx.d, ld-arm/farcall-thumb-thumb-m.d,
|
||||||
|
ld-arm/thumb2-bl-as-thumb1-bad.d, ld-arm/thumb2-bl-bad.d: Update for
|
||||||
|
stub symbols and stub corrections.
|
||||||
|
|
||||||
2008-06-20 Alan Modra <amodra@bigpond.net.au>
|
2008-06-20 Alan Modra <amodra@bigpond.net.au>
|
||||||
|
|
||||||
* ld-spu/ovl.d: Update.
|
* ld-spu/ovl.d: Update.
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
Disassembly of section .text:
|
Disassembly of section .text:
|
||||||
|
|
||||||
00001000 <_start-0x8>:
|
00001000 <__bar_veneer>:
|
||||||
1000: 04f01fe5 .*
|
1000: 04f01fe5 .*
|
||||||
1004: 02001020 .word 0x02001020
|
1004: 02001020 .word 0x02001020
|
||||||
|
|
||||||
|
|
|
@ -2,14 +2,14 @@
|
||||||
|
|
||||||
Disassembly of section .text:
|
Disassembly of section .text:
|
||||||
|
|
||||||
00001000 <_start-0x10>:
|
00001000 <__bar_veneer>:
|
||||||
1000: e59fc000 ldr ip, \[pc, #0\] ; 1008 <_start-0x8>
|
1000: e59fc000 ldr ip, \[pc, #0\] ; 1008 <__bar_veneer\+0x8>
|
||||||
1004: e08ff00c add pc, pc, ip
|
1004: e08ff00c add pc, pc, ip
|
||||||
1008: 02000018 .word 0x02000018
|
1008: 02000018 .word 0x02000018
|
||||||
100c: 00000000 .word 0x00000000
|
100c: 00000000 .word 0x00000000
|
||||||
|
|
||||||
00001010 <_start>:
|
00001010 <_start>:
|
||||||
1010: ebfffffa bl 1000 <_start-0x10>
|
1010: ebfffffa bl 1000 <__bar_veneer>
|
||||||
Disassembly of section .foo:
|
Disassembly of section .foo:
|
||||||
|
|
||||||
02001020 <bar>:
|
02001020 <bar>:
|
||||||
|
|
|
@ -2,12 +2,12 @@
|
||||||
|
|
||||||
Disassembly of section .text:
|
Disassembly of section .text:
|
||||||
|
|
||||||
00001000 <_start-0x8>:
|
00001000 <__bar_veneer>:
|
||||||
1000: e51ff004 ldr pc, \[pc, #-4\] ; 1004 <_start-0x4>
|
1000: e51ff004 ldr pc, \[pc, #-4\] ; 1004 <__bar_veneer\+0x4>
|
||||||
1004: 02001020 .word 0x02001020
|
1004: 02001020 .word 0x02001020
|
||||||
|
|
||||||
00001008 <_start>:
|
00001008 <_start>:
|
||||||
1008: ebfffffc bl 1000 <_start-0x8>
|
1008: ebfffffc bl 1000 <__bar_veneer>
|
||||||
Disassembly of section .foo:
|
Disassembly of section .foo:
|
||||||
|
|
||||||
02001020 <bar>:
|
02001020 <bar>:
|
||||||
|
|
|
@ -2,14 +2,14 @@
|
||||||
|
|
||||||
Disassembly of section .text:
|
Disassembly of section .text:
|
||||||
|
|
||||||
00001000 <_start-0x10>:
|
00001000 <__bar_from_arm>:
|
||||||
1000: e59fc000 ldr ip, \[pc, #0\] ; 1008 <_start-0x8>
|
1000: e59fc000 ldr ip, \[pc, #0\] ; 1008 <__bar_from_arm\+0x8>
|
||||||
1004: e08ff00c add pc, pc, ip
|
1004: e08ff00c add pc, pc, ip
|
||||||
1008: 0200000d .word 0x0200000d
|
1008: 0200000d .word 0x0200000d
|
||||||
100c: 00000000 .word 0x00000000
|
100c: 00000000 .word 0x00000000
|
||||||
|
|
||||||
00001010 <_start>:
|
00001010 <_start>:
|
||||||
1010: ebfffffa bl 1000 <_start-0x10>
|
1010: ebfffffa bl 1000 <__bar_from_arm>
|
||||||
Disassembly of section .foo:
|
Disassembly of section .foo:
|
||||||
|
|
||||||
02001014 <bar>:
|
02001014 <bar>:
|
||||||
|
|
|
@ -2,12 +2,12 @@
|
||||||
|
|
||||||
Disassembly of section .text:
|
Disassembly of section .text:
|
||||||
|
|
||||||
00001000 <_start-0x8>:
|
00001000 <__bar_from_arm>:
|
||||||
1000: e51ff004 ldr pc, \[pc, #-4\] ; 1004 <_start-0x4>
|
1000: e51ff004 ldr pc, \[pc, #-4\] ; 1004 <__bar_from_arm\+0x4>
|
||||||
1004: 02001015 .word 0x02001015
|
1004: 02001015 .word 0x02001015
|
||||||
|
|
||||||
00001008 <_start>:
|
00001008 <_start>:
|
||||||
1008: ebfffffc bl 1000 <_start-0x8>
|
1008: ebfffffc bl 1000 <__bar_from_arm>
|
||||||
Disassembly of section .foo:
|
Disassembly of section .foo:
|
||||||
|
|
||||||
02001014 <bar>:
|
02001014 <bar>:
|
||||||
|
|
|
@ -2,14 +2,14 @@
|
||||||
|
|
||||||
Disassembly of section .text:
|
Disassembly of section .text:
|
||||||
|
|
||||||
00001000 <_start-0x10>:
|
00001000 <__bar_from_arm>:
|
||||||
1000: e59fc000 ldr ip, \[pc, #0\] ; 1008 <_start-0x8>
|
1000: e59fc000 ldr ip, \[pc, #0\] ; 1008 <__bar_from_arm\+0x8>
|
||||||
1004: e08ff00c add pc, pc, ip
|
1004: e08ff00c add pc, pc, ip
|
||||||
1008: 0200000d .word 0x0200000d
|
1008: 0200000d .word 0x0200000d
|
||||||
100c: 00000000 .word 0x00000000
|
100c: 00000000 .word 0x00000000
|
||||||
|
|
||||||
00001010 <_start>:
|
00001010 <_start>:
|
||||||
1010: ebfffffa bl 1000 <_start-0x10>
|
1010: ebfffffa bl 1000 <__bar_from_arm>
|
||||||
Disassembly of section .foo:
|
Disassembly of section .foo:
|
||||||
|
|
||||||
02001014 <bar>:
|
02001014 <bar>:
|
||||||
|
|
|
@ -2,14 +2,14 @@
|
||||||
|
|
||||||
Disassembly of section .text:
|
Disassembly of section .text:
|
||||||
|
|
||||||
00001000 <_start-0x10>:
|
00001000 <__bar_from_arm>:
|
||||||
1000: e59fc000 ldr ip, \[pc, #0\] ; 1008 <_start-0x8>
|
1000: e59fc000 ldr ip, \[pc, #0\] ; 1008 <__bar_from_arm\+0x8>
|
||||||
1004: e12fff1c bx ip
|
1004: e12fff1c bx ip
|
||||||
1008: 02001015 .word 0x02001015
|
1008: 02001015 .word 0x02001015
|
||||||
100c: 00000000 .word 0x00000000
|
100c: 00000000 .word 0x00000000
|
||||||
|
|
||||||
00001010 <_start>:
|
00001010 <_start>:
|
||||||
1010: ebfffffa bl 1000 <_start-0x10>
|
1010: ebfffffa bl 1000 <__bar_from_arm>
|
||||||
Disassembly of section .foo:
|
Disassembly of section .foo:
|
||||||
|
|
||||||
02001014 <bar>:
|
02001014 <bar>:
|
||||||
|
|
|
@ -3,31 +3,35 @@
|
||||||
|
|
||||||
Disassembly of section .text:
|
Disassembly of section .text:
|
||||||
|
|
||||||
00001000 <_start-0x18>:
|
00001000 <__bar2_veneer>:
|
||||||
1000: e51ff004 ldr pc, \[pc, #-4\] ; 1004 <_start-0x14>
|
1000: e51ff004 ldr pc, \[pc, #-4\] ; 1004 <__bar2_veneer\+0x4>
|
||||||
1004: 02003024 .word 0x02003024
|
1004: 02003024 .word 0x02003024
|
||||||
1008: e59fc000 ldr ip, \[pc, #0\] ; 1010 <_start-0x8>
|
00001008 <__bar_from_arm>:
|
||||||
|
1008: e59fc000 ldr ip, \[pc, #0\] ; 1010 <__bar_from_arm\+0x8>
|
||||||
100c: e12fff1c bx ip
|
100c: e12fff1c bx ip
|
||||||
1010: 02003021 .word 0x02003021
|
1010: 02003021 .word 0x02003021
|
||||||
1014: 00000000 .word 0x00000000
|
1014: 00000000 .word 0x00000000
|
||||||
|
|
||||||
00001018 <_start>:
|
00001018 <_start>:
|
||||||
1018: ebfffffa bl 1008 <_start-0x10>
|
1018: ebfffffa bl 1008 <__bar_from_arm>
|
||||||
101c: ebfffff7 bl 1000 <_start-0x18>
|
101c: ebfffff7 bl 1000 <__bar2_veneer>
|
||||||
1020: e51ff004 ldr pc, \[pc, #-4\] ; 1024 <_start\+0xc>
|
00001020 <__bar3_veneer>:
|
||||||
|
1020: e51ff004 ldr pc, \[pc, #-4\] ; 1024 <__bar3_veneer\+0x4>
|
||||||
1024: 02003028 .word 0x02003028
|
1024: 02003028 .word 0x02003028
|
||||||
1028: e59fc000 ldr ip, \[pc, #0\] ; 1030 <_start\+0x18>
|
00001028 <__bar5_from_arm>:
|
||||||
|
1028: e59fc000 ldr ip, \[pc, #0\] ; 1030 <__bar5_from_arm\+0x8>
|
||||||
102c: e12fff1c bx ip
|
102c: e12fff1c bx ip
|
||||||
1030: 0200302f .word 0x0200302f
|
1030: 0200302f .word 0x0200302f
|
||||||
1034: e59fc000 ldr ip, \[pc, #0\] ; 103c <_start\+0x24>
|
00001034 <__bar4_from_arm>:
|
||||||
|
1034: e59fc000 ldr ip, \[pc, #0\] ; 103c <__bar4_from_arm\+0x8>
|
||||||
1038: e12fff1c bx ip
|
1038: e12fff1c bx ip
|
||||||
103c: 0200302d .word 0x0200302d
|
103c: 0200302d .word 0x0200302d
|
||||||
...
|
...
|
||||||
|
|
||||||
00001048 <myfunc>:
|
00001048 <myfunc>:
|
||||||
1048: ebfffff4 bl 1020 <_start\+0x8>
|
1048: ebfffff4 bl 1020 <__bar3_veneer>
|
||||||
104c: ebfffff8 bl 1034 <_start\+0x1c>
|
104c: ebfffff8 bl 1034 <__bar4_from_arm>
|
||||||
1050: ebfffff4 bl 1028 <_start\+0x10>
|
1050: ebfffff4 bl 1028 <__bar5_from_arm>
|
||||||
Disassembly of section .foo:
|
Disassembly of section .foo:
|
||||||
|
|
||||||
02003020 <bar>:
|
02003020 <bar>:
|
||||||
|
|
|
@ -3,30 +3,34 @@
|
||||||
|
|
||||||
Disassembly of section .text:
|
Disassembly of section .text:
|
||||||
|
|
||||||
00001000 <_start-0x40>:
|
00001000 <__bar2_veneer>:
|
||||||
1000: e51ff004 ldr pc, \[pc, #-4\] ; 1004 <_start-0x3c>
|
1000: e51ff004 ldr pc, \[pc, #-4\] ; 1004 <__bar2_veneer\+0x4>
|
||||||
1004: 02003024 .word 0x02003024
|
1004: 02003024 .word 0x02003024
|
||||||
1008: e59fc000 ldr ip, \[pc, #0\] ; 1010 <_start-0x30>
|
00001008 <__bar_from_arm>:
|
||||||
|
1008: e59fc000 ldr ip, \[pc, #0\] ; 1010 <__bar_from_arm\+0x8>
|
||||||
100c: e12fff1c bx ip
|
100c: e12fff1c bx ip
|
||||||
1010: 02003021 .word 0x02003021
|
1010: 02003021 .word 0x02003021
|
||||||
1014: e51ff004 ldr pc, \[pc, #-4\] ; 1018 <_start-0x28>
|
00001014 <__bar3_veneer>:
|
||||||
|
1014: e51ff004 ldr pc, \[pc, #-4\] ; 1018 <__bar3_veneer\+0x4>
|
||||||
1018: 02003028 .word 0x02003028
|
1018: 02003028 .word 0x02003028
|
||||||
101c: e59fc000 ldr ip, \[pc, #0\] ; 1024 <_start-0x1c>
|
0000101c <__bar4_from_arm>:
|
||||||
|
101c: e59fc000 ldr ip, \[pc, #0\] ; 1024 <__bar4_from_arm\+0x8>
|
||||||
1020: e12fff1c bx ip
|
1020: e12fff1c bx ip
|
||||||
1024: 0200302d .word 0x0200302d
|
1024: 0200302d .word 0x0200302d
|
||||||
1028: e59fc000 ldr ip, \[pc, #0\] ; 1030 <_start-0x10>
|
00001028 <__bar5_from_arm>:
|
||||||
|
1028: e59fc000 ldr ip, \[pc, #0\] ; 1030 <__bar5_from_arm\+0x8>
|
||||||
102c: e12fff1c bx ip
|
102c: e12fff1c bx ip
|
||||||
1030: 0200302f .word 0x0200302f
|
1030: 0200302f .word 0x0200302f
|
||||||
...
|
...
|
||||||
|
|
||||||
00001040 <_start>:
|
00001040 <_start>:
|
||||||
1040: ebfffff0 bl 1008 <_start-0x38>
|
1040: ebfffff0 bl 1008 <__bar_from_arm>
|
||||||
1044: ebffffed bl 1000 <_start-0x40>
|
1044: ebffffed bl 1000 <__bar2_veneer>
|
||||||
|
|
||||||
00001048 <myfunc>:
|
00001048 <myfunc>:
|
||||||
1048: ebfffff1 bl 1014 <_start-0x2c>
|
1048: ebfffff1 bl 1014 <__bar3_veneer>
|
||||||
104c: ebfffff2 bl 101c <_start-0x24>
|
104c: ebfffff2 bl 101c <__bar4_from_arm>
|
||||||
1050: ebfffff4 bl 1028 <_start-0x18>
|
1050: ebfffff4 bl 1028 <__bar5_from_arm>
|
||||||
Disassembly of section .foo:
|
Disassembly of section .foo:
|
||||||
|
|
||||||
02003020 <bar>:
|
02003020 <bar>:
|
||||||
|
|
|
@ -3,28 +3,32 @@
|
||||||
|
|
||||||
Disassembly of section .text:
|
Disassembly of section .text:
|
||||||
|
|
||||||
00001000 <_start-0x40>:
|
00001000 <__bar2_veneer>:
|
||||||
1000: e51ff004 ldr pc, \[pc, #-4\] ; 1004 <_start-0x3c>
|
1000: e51ff004 ldr pc, \[pc, #-4\] ; 1004 <__bar2_veneer\+0x4>
|
||||||
1004: 02002024 .word 0x02002024
|
1004: 02002024 .word 0x02002024
|
||||||
1008: e59fc000 ldr ip, \[pc, #0\] ; 1010 <_start-0x30>
|
00001008 <__bar_from_arm>:
|
||||||
|
1008: e59fc000 ldr ip, \[pc, #0\] ; 1010 <__bar_from_arm\+0x8>
|
||||||
100c: e12fff1c bx ip
|
100c: e12fff1c bx ip
|
||||||
1010: 02002021 .word 0x02002021
|
1010: 02002021 .word 0x02002021
|
||||||
1014: e51ff004 ldr pc, \[pc, #-4\] ; 1018 <_start-0x28>
|
00001014 <__bar3_veneer>:
|
||||||
|
1014: e51ff004 ldr pc, \[pc, #-4\] ; 1018 <__bar3_veneer\+0x4>
|
||||||
1018: 02002028 .word 0x02002028
|
1018: 02002028 .word 0x02002028
|
||||||
101c: e59fc000 ldr ip, \[pc, #0\] ; 1024 <_start-0x1c>
|
0000101c <__bar4_from_arm>:
|
||||||
|
101c: e59fc000 ldr ip, \[pc, #0\] ; 1024 <__bar4_from_arm\+0x8>
|
||||||
1020: e12fff1c bx ip
|
1020: e12fff1c bx ip
|
||||||
1024: 0200202d .word 0x0200202d
|
1024: 0200202d .word 0x0200202d
|
||||||
1028: e59fc000 ldr ip, \[pc, #0\] ; 1030 <_start-0x10>
|
00001028 <__bar5_from_arm>:
|
||||||
|
1028: e59fc000 ldr ip, \[pc, #0\] ; 1030 <__bar5_from_arm\+0x8>
|
||||||
102c: e12fff1c bx ip
|
102c: e12fff1c bx ip
|
||||||
1030: 0200202f .word 0x0200202f
|
1030: 0200202f .word 0x0200202f
|
||||||
...
|
...
|
||||||
|
|
||||||
00001040 <_start>:
|
00001040 <_start>:
|
||||||
1040: ebfffff0 bl 1008 <_start-0x38>
|
1040: ebfffff0 bl 1008 <__bar_from_arm>
|
||||||
1044: ebffffed bl 1000 <_start-0x40>
|
1044: ebffffed bl 1000 <__bar2_veneer>
|
||||||
1048: ebfffff1 bl 1014 <_start-0x2c>
|
1048: ebfffff1 bl 1014 <__bar3_veneer>
|
||||||
104c: ebfffff2 bl 101c <_start-0x24>
|
104c: ebfffff2 bl 101c <__bar4_from_arm>
|
||||||
1050: ebfffff4 bl 1028 <_start-0x18>
|
1050: ebfffff4 bl 1028 <__bar5_from_arm>
|
||||||
Disassembly of section .foo:
|
Disassembly of section .foo:
|
||||||
|
|
||||||
02002020 <bar>:
|
02002020 <bar>:
|
||||||
|
|
|
@ -3,32 +3,35 @@
|
||||||
|
|
||||||
Disassembly of section .text:
|
Disassembly of section .text:
|
||||||
|
|
||||||
00001000 <_start-0x18>:
|
00001000 <__bar2_veneer>:
|
||||||
1000: e51ff004 ldr pc, \[pc, #-4\] ; 1004 <_start-0x14>
|
1000: e51ff004 ldr pc, \[pc, #-4\] ; 1004 <__bar2_veneer\+0x4>
|
||||||
1004: 02003024 .word 0x02003024
|
1004: 02003024 .word 0x02003024
|
||||||
1008: e59fc000 ldr ip, \[pc, #0\] ; 1010 <_start-0x8>
|
00001008 <__bar_from_arm>:
|
||||||
|
1008: e59fc000 ldr ip, \[pc, #0\] ; 1010 <__bar_from_arm\+0x8>
|
||||||
100c: e12fff1c bx ip
|
100c: e12fff1c bx ip
|
||||||
1010: 02003021 .word 0x02003021
|
1010: 02003021 .word 0x02003021
|
||||||
1014: 00000000 .word 0x00000000
|
1014: 00000000 .word 0x00000000
|
||||||
|
|
||||||
00001018 <_start>:
|
00001018 <_start>:
|
||||||
1018: ebfffffa bl 1008 <_start-0x10>
|
1018: ebfffffa bl 1008 <__bar_from_arm>
|
||||||
101c: ebfffff7 bl 1000 <_start-0x18>
|
101c: ebfffff7 bl 1000 <__bar2_veneer>
|
||||||
Disassembly of section .mytext:
|
Disassembly of section .mytext:
|
||||||
|
|
||||||
00002000 <.mytext>:
|
00002000 <__bar5_from_arm>:
|
||||||
2000: e59fc000 ldr ip, \[pc, #0\] ; 2008 <__exidx_end\+0xfe8>
|
2000: e59fc000 ldr ip, \[pc, #0\] ; 2008 <__bar5_from_arm\+0x8>
|
||||||
2004: e12fff1c bx ip
|
2004: e12fff1c bx ip
|
||||||
2008: 0200302f .word 0x0200302f
|
2008: 0200302f .word 0x0200302f
|
||||||
200c: e51ff004 ldr pc, \[pc, #-4\] ; 2010 <__exidx_end\+0xff0>
|
0000200c <__bar3_veneer>:
|
||||||
|
200c: e51ff004 ldr pc, \[pc, #-4\] ; 2010 <__bar3_veneer\+0x4>
|
||||||
2010: 02003028 .word 0x02003028
|
2010: 02003028 .word 0x02003028
|
||||||
2014: e59fc000 ldr ip, \[pc, #0\] ; 201c <__exidx_end\+0xffc>
|
00002014 <__bar4_from_arm>:
|
||||||
|
2014: e59fc000 ldr ip, \[pc, #0\] ; 201c <__bar4_from_arm\+0x8>
|
||||||
2018: e12fff1c bx ip
|
2018: e12fff1c bx ip
|
||||||
201c: 0200302d .word 0x0200302d
|
201c: 0200302d .word 0x0200302d
|
||||||
...
|
...
|
||||||
2028: ebfffff7 bl 200c <__exidx_end\+0xfec>
|
2028: ebfffff7 bl 200c <__bar3_veneer>
|
||||||
202c: ebfffff8 bl 2014 <__exidx_end\+0xff4>
|
202c: ebfffff8 bl 2014 <__bar4_from_arm>
|
||||||
2030: ebfffff2 bl 2000 <__exidx_end\+0xfe0>
|
2030: ebfffff2 bl 2000 <__bar5_from_arm>
|
||||||
Disassembly of section .foo:
|
Disassembly of section .foo:
|
||||||
|
|
||||||
02003020 <bar>:
|
02003020 <bar>:
|
||||||
|
|
|
@ -2,14 +2,14 @@
|
||||||
|
|
||||||
Disassembly of section .text:
|
Disassembly of section .text:
|
||||||
|
|
||||||
00001000 <_start-0x10>:
|
00001000 <__bar_from_thumb>:
|
||||||
1000: e59fc000 ldr ip, \[pc, #0\] ; 1008 <_start-0x8>
|
1000: e59fc000 ldr ip, \[pc, #0\] ; 1008 <__bar_from_thumb\+0x8>
|
||||||
1004: e08ff00c add pc, pc, ip
|
1004: e08ff00c add pc, pc, ip
|
||||||
1008: 0200000c .word 0x0200000c
|
1008: 0200000c .word 0x0200000c
|
||||||
100c: 00000000 .word 0x00000000
|
100c: 00000000 .word 0x00000000
|
||||||
|
|
||||||
00001010 <_start>:
|
00001010 <_start>:
|
||||||
1010: f7ff eff6 blx 1000 <_start-0x10>
|
1010: f7ff eff6 blx 1000 <__bar_from_thumb>
|
||||||
Disassembly of section .foo:
|
Disassembly of section .foo:
|
||||||
|
|
||||||
02001014 <bar>:
|
02001014 <bar>:
|
||||||
|
|
|
@ -2,12 +2,12 @@
|
||||||
|
|
||||||
Disassembly of section .text:
|
Disassembly of section .text:
|
||||||
|
|
||||||
00001000 <_start-0x8>:
|
00001000 <__bar_from_thumb>:
|
||||||
1000: e51ff004 ldr pc, \[pc, #-4\] ; 1004 <_start-0x4>
|
1000: e51ff004 ldr pc, \[pc, #-4\] ; 1004 <__bar_from_thumb\+0x4>
|
||||||
1004: 02001014 .word 0x02001014
|
1004: 02001014 .word 0x02001014
|
||||||
|
|
||||||
00001008 <_start>:
|
00001008 <_start>:
|
||||||
1008: f7ff effa blx 1000 <_start-0x8>
|
1008: f7ff effa blx 1000 <__bar_from_thumb>
|
||||||
Disassembly of section .foo:
|
Disassembly of section .foo:
|
||||||
|
|
||||||
02001014 <bar>:
|
02001014 <bar>:
|
||||||
|
|
|
@ -2,17 +2,18 @@
|
||||||
|
|
||||||
Disassembly of section .text:
|
Disassembly of section .text:
|
||||||
|
|
||||||
00001000 <_start-0x18>:
|
00001000 <__bar_from_thumb>:
|
||||||
1000: b540 push {r6, lr}
|
1000: b540 push {r6, lr}
|
||||||
1002: 4e03 ldr r6, \[pc, #12\] \(1010 <_start-0x8>\)
|
1002: 4e03 ldr r6, \[pc, #12\] \(1010 <__bar_from_thumb\+0x10>\)
|
||||||
1004: 46fe mov lr, pc
|
1004: 46fe mov lr, pc
|
||||||
1006: 4730 bx r6
|
1006: 4730 bx r6
|
||||||
1008: e8bd4040 pop {r6, lr}
|
1008: e8bd4040 pop {r6, lr}
|
||||||
100c: e12fff1e bx lr
|
100c: e12fff1e bx lr
|
||||||
...
|
1010: 02001014 .word 0x02001014
|
||||||
|
1014: 00000000 .word 0x00000000
|
||||||
|
|
||||||
00001018 <_start>:
|
00001018 <_start>:
|
||||||
1018: f7ff fff2 bl 1000 <_start-0x18>
|
1018: f7ff fff2 bl 1000 <__bar_from_thumb>
|
||||||
Disassembly of section .foo:
|
Disassembly of section .foo:
|
||||||
|
|
||||||
02001014 <bar>:
|
02001014 <bar>:
|
||||||
|
|
|
@ -2,14 +2,14 @@
|
||||||
|
|
||||||
Disassembly of section .text:
|
Disassembly of section .text:
|
||||||
|
|
||||||
00001000 <_start-0x10>:
|
00001000 <__bar_veneer>:
|
||||||
1000: e59fc000 ldr ip, \[pc, #0\] ; 1008 <_start-0x8>
|
1000: e59fc000 ldr ip, \[pc, #0\] ; 1008 <__bar_veneer\+0x8>
|
||||||
1004: e08ff00c add pc, pc, ip
|
1004: e08ff00c add pc, pc, ip
|
||||||
1008: 0200000d .word 0x0200000d
|
1008: 0200000d .word 0x0200000d
|
||||||
100c: 00000000 .word 0x00000000
|
100c: 00000000 .word 0x00000000
|
||||||
|
|
||||||
00001010 <_start>:
|
00001010 <_start>:
|
||||||
1010: f7ff eff6 blx 1000 <_start-0x10>
|
1010: f7ff eff6 blx 1000 <__bar_veneer>
|
||||||
Disassembly of section .foo:
|
Disassembly of section .foo:
|
||||||
|
|
||||||
02001014 <bar>:
|
02001014 <bar>:
|
||||||
|
|
|
@ -2,12 +2,12 @@
|
||||||
|
|
||||||
Disassembly of section .text:
|
Disassembly of section .text:
|
||||||
|
|
||||||
00001000 <_start-0x8>:
|
00001000 <__bar_veneer>:
|
||||||
1000: e51ff004 ldr pc, \[pc, #-4\] ; 1004 <_start-0x4>
|
1000: e51ff004 ldr pc, \[pc, #-4\] ; 1004 <__bar_veneer\+0x4>
|
||||||
1004: 02001015 .word 0x02001015
|
1004: 02001015 .word 0x02001015
|
||||||
|
|
||||||
00001008 <_start>:
|
00001008 <_start>:
|
||||||
1008: f7ff effa blx 1000 <_start-0x8>
|
1008: f7ff effa blx 1000 <__bar_veneer>
|
||||||
Disassembly of section .foo:
|
Disassembly of section .foo:
|
||||||
|
|
||||||
02001014 <bar>:
|
02001014 <bar>:
|
||||||
|
|
|
@ -2,17 +2,17 @@
|
||||||
|
|
||||||
Disassembly of section .text:
|
Disassembly of section .text:
|
||||||
|
|
||||||
00001000 <_start-0x10>:
|
00001000 <__bar_veneer>:
|
||||||
1000: b540 push {r6, lr}
|
1000: b540 push {r6, lr}
|
||||||
1002: 4e02 ldr r6, \[pc, #8\] \(100c <_start-0x4>\)
|
1002: 4e02 ldr r6, \[pc, #8\] \(100c <__bar_veneer\+0xc>\)
|
||||||
1004: 46fe mov lr, pc
|
1004: 46fe mov lr, pc
|
||||||
1006: e7fe b.n 1006 <_start-0xa>
|
1006: 4730 bx r6
|
||||||
1008: bd40 pop {r6, pc}
|
1008: bd40 pop {r6, pc}
|
||||||
100a: bf00 nop
|
100a: bf00 nop
|
||||||
100c: 02001015 .word 0x02001015
|
100c: 02001015 .word 0x02001015
|
||||||
|
|
||||||
00001010 <_start>:
|
00001010 <_start>:
|
||||||
1010: f7ff fff6 bl 1000 <_start-0x10>
|
1010: f7ff fff6 bl 1000 <__bar_veneer>
|
||||||
Disassembly of section .foo:
|
Disassembly of section .foo:
|
||||||
|
|
||||||
02001014 <bar>:
|
02001014 <bar>:
|
||||||
|
|
|
@ -2,12 +2,12 @@
|
||||||
|
|
||||||
Disassembly of section .text:
|
Disassembly of section .text:
|
||||||
|
|
||||||
00001000 <_start-0x8>:
|
00001000 <__bar_veneer>:
|
||||||
1000: e51ff004 ldr pc, \[pc, #-4\] ; 1004 <_start-0x4>
|
1000: e51ff004 ldr pc, \[pc, #-4\] ; 1004 <__bar_veneer\+0x4>
|
||||||
1004: 0040100d .word 0x0040100d
|
1004: 0040100d .word 0x0040100d
|
||||||
|
|
||||||
00001008 <_start>:
|
00001008 <_start>:
|
||||||
1008: f7ff effa blx 1000 <_start-0x8>
|
1008: f7ff effa blx 1000 <__bar_veneer>
|
||||||
Disassembly of section .foo:
|
Disassembly of section .foo:
|
||||||
|
|
||||||
0040100c <bar>:
|
0040100c <bar>:
|
||||||
|
|
|
@ -2,12 +2,12 @@
|
||||||
|
|
||||||
Disassembly of section .text:
|
Disassembly of section .text:
|
||||||
|
|
||||||
00001000 <_start-0x8>:
|
00001000 <__bar_veneer>:
|
||||||
1000: e51ff004 ldr pc, \[pc, #-4\] ; 1004 <_start-0x4>
|
1000: e51ff004 ldr pc, \[pc, #-4\] ; 1004 <__bar_veneer\+0x4>
|
||||||
1004: 0100100d .word 0x0100100d
|
1004: 0100100d .word 0x0100100d
|
||||||
|
|
||||||
00001008 <_start>:
|
00001008 <_start>:
|
||||||
1008: f7ff effa blx 1000 <_start-0x8>
|
1008: f7ff effa blx 1000 <__bar_veneer>
|
||||||
Disassembly of section .foo:
|
Disassembly of section .foo:
|
||||||
|
|
||||||
0100100c <bar>:
|
0100100c <bar>:
|
||||||
|
|
Loading…
Reference in a new issue