2009-05-05 Christophe lyon <christophe.lyon@st.com>

bfd/
	* elf32-arm.c (DEF_STUBS): New helper define.
	(DEF_STUB): Likewise.
	(stub_def): New type.
	(stub_definitions): New array, containing stub template pointers
	and sizes.
	(arm_size_one_stub): Make use of stub_definitions.
This commit is contained in:
Christophe Lyon
2009-05-05 13:16:56 +00:00
parent f698437e4b
commit 738a79f669
2 changed files with 45 additions and 68 deletions

View File

@ -1,3 +1,12 @@
2009-05-05 Christophe lyon <christophe.lyon@st.com>
* elf32-arm.c (DEF_STUBS): New helper define.
(DEF_STUB): Likewise.
(stub_def): New type.
(stub_definitions): New array, containing stub template pointers
and sizes.
(arm_size_one_stub): Make use of stub_definitions.
2009-05-04 Dave Korn <dave.korn.cygwin@gmail.com>
* elflink.c (find_version_for_sym): Remove from here, ...

View File

@ -2166,21 +2166,38 @@ static const insn_sequence elf32_arm_stub_long_branch_v4t_thumb_thumb_pic[] =
string. */
#define STUB_SUFFIX ".stub"
enum elf32_arm_stub_type
{
/* One entry per long/short branch stub defined above. */
#define DEF_STUBS \
DEF_STUB(long_branch_any_any) \
DEF_STUB(long_branch_v4t_arm_thumb) \
DEF_STUB(long_branch_thumb_only) \
DEF_STUB(long_branch_v4t_thumb_thumb) \
DEF_STUB(long_branch_v4t_thumb_arm) \
DEF_STUB(short_branch_v4t_thumb_arm) \
DEF_STUB(long_branch_any_arm_pic) \
DEF_STUB(long_branch_any_thumb_pic) \
DEF_STUB(long_branch_v4t_thumb_thumb_pic) \
DEF_STUB(long_branch_v4t_arm_thumb_pic) \
DEF_STUB(long_branch_v4t_thumb_arm_pic) \
DEF_STUB(long_branch_thumb_only_pic)
#define DEF_STUB(x) arm_stub_##x,
enum elf32_arm_stub_type {
arm_stub_none,
arm_stub_long_branch_any_any,
arm_stub_long_branch_v4t_arm_thumb,
arm_stub_long_branch_thumb_only,
arm_stub_long_branch_v4t_thumb_thumb,
arm_stub_long_branch_v4t_thumb_arm,
arm_stub_short_branch_v4t_thumb_arm,
arm_stub_long_branch_any_arm_pic,
arm_stub_long_branch_any_thumb_pic,
arm_stub_long_branch_v4t_arm_thumb_pic,
arm_stub_long_branch_v4t_thumb_arm_pic,
arm_stub_long_branch_thumb_only_pic,
arm_stub_long_branch_v4t_thumb_thumb_pic,
DEF_STUBS
};
#undef DEF_STUB
typedef struct
{
const insn_sequence* template;
int template_size;
} stub_def;
#define DEF_STUB(x) {elf32_arm_stub_##x, ARRAY_SIZE(elf32_arm_stub_##x)},
static const stub_def stub_definitions[] = {
{NULL, 0},
DEF_STUBS
};
struct elf32_arm_stub_hash_entry
@ -3361,60 +3378,11 @@ arm_size_one_stub (struct bfd_hash_entry *gen_entry,
stub_entry = (struct elf32_arm_stub_hash_entry *) gen_entry;
htab = (struct elf32_arm_link_hash_table *) in_arg;
switch (stub_entry->stub_type)
{
case arm_stub_long_branch_any_any:
template = elf32_arm_stub_long_branch_any_any;
template_size = ARRAY_SIZE (elf32_arm_stub_long_branch_any_any);
break;
case arm_stub_long_branch_v4t_arm_thumb:
template = elf32_arm_stub_long_branch_v4t_arm_thumb;
template_size = ARRAY_SIZE (elf32_arm_stub_long_branch_v4t_arm_thumb);
break;
case arm_stub_long_branch_thumb_only:
template = elf32_arm_stub_long_branch_thumb_only;
template_size = ARRAY_SIZE (elf32_arm_stub_long_branch_thumb_only);
break;
case arm_stub_long_branch_v4t_thumb_thumb:
template = elf32_arm_stub_long_branch_v4t_thumb_thumb;
template_size = ARRAY_SIZE (elf32_arm_stub_long_branch_v4t_thumb_thumb);
break;
case arm_stub_long_branch_v4t_thumb_arm:
template = elf32_arm_stub_long_branch_v4t_thumb_arm;
template_size = ARRAY_SIZE (elf32_arm_stub_long_branch_v4t_thumb_arm);
break;
case arm_stub_short_branch_v4t_thumb_arm:
template = elf32_arm_stub_short_branch_v4t_thumb_arm;
template_size = ARRAY_SIZE (elf32_arm_stub_short_branch_v4t_thumb_arm);
break;
case arm_stub_long_branch_any_arm_pic:
template = elf32_arm_stub_long_branch_any_arm_pic;
template_size = ARRAY_SIZE (elf32_arm_stub_long_branch_any_arm_pic);
break;
case arm_stub_long_branch_any_thumb_pic:
template = elf32_arm_stub_long_branch_any_thumb_pic;
template_size = ARRAY_SIZE (elf32_arm_stub_long_branch_any_thumb_pic);
break;
case arm_stub_long_branch_v4t_arm_thumb_pic:
template = elf32_arm_stub_long_branch_v4t_arm_thumb_pic;
template_size = ARRAY_SIZE (elf32_arm_stub_long_branch_v4t_arm_thumb_pic);
break;
case arm_stub_long_branch_v4t_thumb_arm_pic:
template = elf32_arm_stub_long_branch_v4t_thumb_arm_pic;
template_size = ARRAY_SIZE (elf32_arm_stub_long_branch_v4t_thumb_arm_pic);
break;
case arm_stub_long_branch_thumb_only_pic:
template = elf32_arm_stub_long_branch_thumb_only_pic;
template_size = ARRAY_SIZE (elf32_arm_stub_long_branch_thumb_only_pic);
break;
case arm_stub_long_branch_v4t_thumb_thumb_pic:
template = elf32_arm_stub_long_branch_v4t_thumb_thumb_pic;
template_size = ARRAY_SIZE (elf32_arm_stub_long_branch_v4t_thumb_thumb_pic);
break;
default:
BFD_FAIL ();
return FALSE;
}
BFD_ASSERT((stub_entry->stub_type > arm_stub_none)
&& stub_entry->stub_type < ARRAY_SIZE(stub_definitions));
template = stub_definitions[stub_entry->stub_type].template;
template_size = stub_definitions[stub_entry->stub_type].template_size;
size = 0;
for (i = 0; i < template_size; i++)