summaryrefslogtreecommitdiff
path: root/bfd
diff options
context:
space:
mode:
authorThomas Preud'homme <thomas.preudhomme@arm.com>2016-08-26 14:00:39 +0100
committerThomas Preud'homme <thomas.preudhomme@arm.com>2016-08-26 14:00:39 +0100
commit68c398921742291719d97f803891b5113874a22b (patch)
tree07458345ba56403e672191a52f6bdd232d6932b6 /bfd
parentc2abbbebcccf6c9403f8d6327e3fe3655acffbc1 (diff)
downloadbinutils-gdb-68c398921742291719d97f803891b5113874a22b.tar.gz
Reduce parameter list in bfd_elf32_arm_target_relocs
2016-08-26 Thomas Preud'homme <thomas.preudhomme@arm.com> bfd/ * bfd-in.h (struct elf32_arm_params): Define. (bfd_elf32_arm_set_target_relocs): Rename into ... (bfd_elf32_arm_set_target_params): This. Use a struct elf32_arm_params to pass all parameters but the bfd and bfd_link_info. * bfd-in2.h: Regenerate. * elf32-arm.c (bfd_elf32_arm_set_target_relocs): Rename into ... (bfd_elf32_arm_set_target_params): This. Pass all values via a struct elf32_arm_params rather than as individual parameters. ld/ * emultempl/armelf.em (params): New static variable. (thumb_entry_symbol, byteswap_code, target1_is_rel, target2_type, fix_v4bx, use_blx, vfp11_denorm_fix, stm32l4xx_fix, fix_cortex_a8, no_enum_size_warning, no_wchar_size_warning, pic_veneer, merge_exidx_entries, fix_arm1176, cmse_implib): move as part of the above new structure. (arm_elf_before_allocation): Access static variable from the params structure. (gld${EMULATION_NAME}_finish): Likewise. (arm_elf_create_output_section_statements): Likewise and pass the address of that structure to bfd_elf32_arm_set_target_relocs instead of the static variables. (PARSE_AND_LIST_ARGS_CASES): Access static variable from the params structure.
Diffstat (limited to 'bfd')
-rw-r--r--bfd/ChangeLog11
-rw-r--r--bfd/bfd-in.h24
-rw-r--r--bfd/bfd-in2.h24
-rw-r--r--bfd/elf32-arm.c47
4 files changed, 73 insertions, 33 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index 05c9b2eca59..4790c28c4f6 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,5 +1,16 @@
2016-08-26 Thomas Preud'homme <thomas.preudhomme@arm.com>
+ * bfd-in.h (struct elf32_arm_params): Define.
+ (bfd_elf32_arm_set_target_relocs): Rename into ...
+ (bfd_elf32_arm_set_target_params): This. Use a struct
+ elf32_arm_params to pass all parameters but the bfd and bfd_link_info.
+ * bfd-in2.h: Regenerate.
+ * elf32-arm.c (bfd_elf32_arm_set_target_relocs): Rename into ...
+ (bfd_elf32_arm_set_target_params): This. Pass all values via a struct
+ elf32_arm_params rather than as individual parameters.
+
+2016-08-26 Thomas Preud'homme <thomas.preudhomme@arm.com>
+
* elf32-arm.c (elf32_arm_get_stub_entry): Assert that we don't access
passed the end of htab->stub_group array.
(elf32_arm_create_or_find_stub_sec): Likewise.
diff --git a/bfd/bfd-in.h b/bfd/bfd-in.h
index 8e50bc5e5f3..fa3da8327c5 100644
--- a/bfd/bfd-in.h
+++ b/bfd/bfd-in.h
@@ -900,9 +900,27 @@ extern bfd_boolean bfd_elf32_arm_allocate_interworking_sections
extern bfd_boolean bfd_elf32_arm_process_before_allocation
(bfd *, struct bfd_link_info *);
-void bfd_elf32_arm_set_target_relocs
- (bfd *, struct bfd_link_info *, int, char *, int, int, bfd_arm_vfp11_fix,
- bfd_arm_stm32l4xx_fix, int, int, int, int, int, int, bfd *);
+struct elf32_arm_params {
+ char *thumb_entry_symbol;
+ int byteswap_code;
+ int target1_is_rel;
+ char * target2_type;
+ int fix_v4bx;
+ int use_blx;
+ bfd_arm_vfp11_fix vfp11_denorm_fix;
+ bfd_arm_stm32l4xx_fix stm32l4xx_fix;
+ int no_enum_size_warning;
+ int no_wchar_size_warning;
+ int pic_veneer;
+ int fix_cortex_a8;
+ int fix_arm1176;
+ int merge_exidx_entries;
+ int cmse_implib;
+ bfd *in_implib_bfd;
+};
+
+void bfd_elf32_arm_set_target_params
+ (bfd *, struct bfd_link_info *, struct elf32_arm_params *);
extern bfd_boolean bfd_elf32_arm_get_bfd_for_interworking
(bfd *, struct bfd_link_info *);
diff --git a/bfd/bfd-in2.h b/bfd/bfd-in2.h
index 3e74662f932..00eb857020b 100644
--- a/bfd/bfd-in2.h
+++ b/bfd/bfd-in2.h
@@ -907,9 +907,27 @@ extern bfd_boolean bfd_elf32_arm_allocate_interworking_sections
extern bfd_boolean bfd_elf32_arm_process_before_allocation
(bfd *, struct bfd_link_info *);
-void bfd_elf32_arm_set_target_relocs
- (bfd *, struct bfd_link_info *, int, char *, int, int, bfd_arm_vfp11_fix,
- bfd_arm_stm32l4xx_fix, int, int, int, int, int, int, bfd *);
+struct elf32_arm_params {
+ char *thumb_entry_symbol;
+ int byteswap_code;
+ int target1_is_rel;
+ char * target2_type;
+ int fix_v4bx;
+ int use_blx;
+ bfd_arm_vfp11_fix vfp11_denorm_fix;
+ bfd_arm_stm32l4xx_fix stm32l4xx_fix;
+ int no_enum_size_warning;
+ int no_wchar_size_warning;
+ int pic_veneer;
+ int fix_cortex_a8;
+ int fix_arm1176;
+ int merge_exidx_entries;
+ int cmse_implib;
+ bfd *in_implib_bfd;
+};
+
+void bfd_elf32_arm_set_target_params
+ (bfd *, struct bfd_link_info *, struct elf32_arm_params *);
extern bfd_boolean bfd_elf32_arm_get_bfd_for_interworking
(bfd *, struct bfd_link_info *);
diff --git a/bfd/elf32-arm.c b/bfd/elf32-arm.c
index 564fcb75b23..9ff418a6836 100644
--- a/bfd/elf32-arm.c
+++ b/bfd/elf32-arm.c
@@ -8674,18 +8674,9 @@ error_return:
/* Set target relocation values needed during linking. */
void
-bfd_elf32_arm_set_target_relocs (struct bfd *output_bfd,
+bfd_elf32_arm_set_target_params (struct bfd *output_bfd,
struct bfd_link_info *link_info,
- int target1_is_rel,
- char * target2_type,
- int fix_v4bx,
- int use_blx,
- bfd_arm_vfp11_fix vfp11_fix,
- bfd_arm_stm32l4xx_fix stm32l4xx_fix,
- int no_enum_warn, int no_wchar_warn,
- int pic_veneer, int fix_cortex_a8,
- int fix_arm1176, int cmse_implib,
- bfd *in_implib_bfd)
+ struct elf32_arm_params *params)
{
struct elf32_arm_link_hash_table *globals;
@@ -8693,31 +8684,33 @@ bfd_elf32_arm_set_target_relocs (struct bfd *output_bfd,
if (globals == NULL)
return;
- globals->target1_is_rel = target1_is_rel;
- if (strcmp (target2_type, "rel") == 0)
+ globals->target1_is_rel = params->target1_is_rel;
+ if (strcmp (params->target2_type, "rel") == 0)
globals->target2_reloc = R_ARM_REL32;
- else if (strcmp (target2_type, "abs") == 0)
+ else if (strcmp (params->target2_type, "abs") == 0)
globals->target2_reloc = R_ARM_ABS32;
- else if (strcmp (target2_type, "got-rel") == 0)
+ else if (strcmp (params->target2_type, "got-rel") == 0)
globals->target2_reloc = R_ARM_GOT_PREL;
else
{
_bfd_error_handler (_("Invalid TARGET2 relocation type '%s'."),
- target2_type);
+ params->target2_type);
}
- globals->fix_v4bx = fix_v4bx;
- globals->use_blx |= use_blx;
- globals->vfp11_fix = vfp11_fix;
- globals->stm32l4xx_fix = stm32l4xx_fix;
- globals->pic_veneer = pic_veneer;
- globals->fix_cortex_a8 = fix_cortex_a8;
- globals->fix_arm1176 = fix_arm1176;
- globals->cmse_implib = cmse_implib;
- globals->in_implib_bfd = in_implib_bfd;
+ globals->fix_v4bx = params->fix_v4bx;
+ globals->use_blx |= params->use_blx;
+ globals->vfp11_fix = params->vfp11_denorm_fix;
+ globals->stm32l4xx_fix = params->stm32l4xx_fix;
+ globals->pic_veneer = params->pic_veneer;
+ globals->fix_cortex_a8 = params->fix_cortex_a8;
+ globals->fix_arm1176 = params->fix_arm1176;
+ globals->cmse_implib = params->cmse_implib;
+ globals->in_implib_bfd = params->in_implib_bfd;
BFD_ASSERT (is_arm_elf (output_bfd));
- elf_arm_tdata (output_bfd)->no_enum_size_warning = no_enum_warn;
- elf_arm_tdata (output_bfd)->no_wchar_size_warning = no_wchar_warn;
+ elf_arm_tdata (output_bfd)->no_enum_size_warning
+ = params->no_enum_size_warning;
+ elf_arm_tdata (output_bfd)->no_wchar_size_warning
+ = params->no_wchar_size_warning;
}
/* Replace the target offset of a Thumb bl or b.w instruction. */