diff options
Diffstat (limited to 'bfd')
-rw-r--r-- | bfd/ChangeLog | 11 | ||||
-rw-r--r-- | bfd/bfd-in.h | 24 | ||||
-rw-r--r-- | bfd/bfd-in2.h | 24 | ||||
-rw-r--r-- | bfd/elf32-arm.c | 47 |
4 files changed, 73 insertions, 33 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 05c9b2e..4790c28 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 8e50bc5..fa3da83 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 3e74662..00eb857 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 564fcb7..9ff418a 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. */ |