From: Christophe Lyon Date: Tue, 5 May 2009 13:16:56 +0000 (+0000) Subject: 2009-05-05 Christophe lyon X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=738a79f66913b32e392c15c1373c1ea39f808914;p=binutils-gdb.git 2009-05-05 Christophe lyon 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. --- diff --git a/bfd/ChangeLog b/bfd/ChangeLog index adc6b8d9b4f..2e1fe68e7b5 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,12 @@ +2009-05-05 Christophe lyon + + * 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 * elflink.c (find_version_for_sym): Remove from here, ... diff --git a/bfd/elf32-arm.c b/bfd/elf32-arm.c index 831f458f635..09b46321506 100644 --- a/bfd/elf32-arm.c +++ b/bfd/elf32-arm.c @@ -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++)