diff options
author | Tristan Gingold <gingold@adacore.com> | 2015-11-18 15:43:27 +0100 |
---|---|---|
committer | Tristan Gingold <gingold@adacore.com> | 2015-11-18 15:47:56 +0100 |
commit | bcb51645d3ef1211efbce59f0935f5f0223602a3 (patch) | |
tree | b13d0345ad27ab30bd8ce54f80b0129cddd1716e /bfd/mach-o-i386.c | |
parent | 1798301e20d5c5be69a362bbec149abce446c215 (diff) | |
download | binutils-bcb51645d3ef1211efbce59f0935f5f0223602a3.zip binutils-bcb51645d3ef1211efbce59f0935f5f0223602a3.tar.gz binutils-bcb51645d3ef1211efbce59f0935f5f0223602a3.tar.bz2 |
mach-o: use a per-target reloc canonicalize function.
bfd/
* mach-o.h (bfd_mach_o_swap_in_non_scattered_reloc)
(bfd_mach_o_canonicalize_non_scattered_reloc)
(bfd_mach_o_pre_canonicalize_one_reloc): Declare.
(bfd_mach_o_backend_data): Rename field
_bfd_mach_o_swap_reloc_in to _bfd_mach_o_canonicalize_one_reloc.
* mach-o.c (bfd_mach_o_swap_in_non_scattered_reloc): Now public.
(bfd_mach_o_canonicalize_non_scattered_reloc): Renames from
bfd_mach_o_canonicalize_one_reloc.
(bfd_mach_o_pre_canonicalize_one_reloc): New function.
(bfd_mach_o_canonicalize_relocs): Adjust.
(bfd_mach_o_canonicalize_relocs): Rename define from
bfd_mach_o_swap_reloc_in.
* mach-o-target.c (TARGET_NAME_BACKEND): Use
bfd_mach_o_canonicalize_one_reloc instead of
bfd_mach_o_swap_reloc_in.
* mach-o-i386.c (bfd_mach_o_i386_canonicalize_one_reloc): Renames
from bfd_mach_o_i386_swap_reloc_in and adjust.
(bfd_mach_o_canonicalize_one_reloc): Renames from
bfd_mach_o_i386_canonicalize_one_reloc.
* mach-o-x86_64.c (bfd_mach_o_x86_64_canonicalize_one_reloc): Renames
from bfd_mach_o_x86_64_swap_reloc_in and adjust.
(bfd_mach_o_canonicalize_one_reloc): Renames from
bfd_mach_o_x86_64_canonicalize_one_reloc.
Diffstat (limited to 'bfd/mach-o-i386.c')
-rw-r--r-- | bfd/mach-o-i386.c | 31 |
1 files changed, 19 insertions, 12 deletions
diff --git a/bfd/mach-o-i386.c b/bfd/mach-o-i386.c index b409022..41b2976 100644 --- a/bfd/mach-o-i386.c +++ b/bfd/mach-o-i386.c @@ -112,20 +112,27 @@ static reloc_howto_type i386_howto_table[]= }; static bfd_boolean -bfd_mach_o_i386_swap_reloc_in (arelent *res, bfd_mach_o_reloc_info *reloc) +bfd_mach_o_i386_canonicalize_one_reloc (bfd *abfd, + struct mach_o_reloc_info_external *raw, + arelent *res, asymbol **syms) { - if (reloc->r_scattered) + bfd_mach_o_reloc_info reloc; + + if (!bfd_mach_o_pre_canonicalize_one_reloc (abfd, raw, &reloc, res, syms)) + return FALSE; + + if (reloc.r_scattered) { - switch (reloc->r_type) + switch (reloc.r_type) { case BFD_MACH_O_GENERIC_RELOC_PAIR: - if (reloc->r_length == 2) + if (reloc.r_length == 2) { res->howto = &i386_howto_table[7]; res->address = res[-1].address; return TRUE; } - else if (reloc->r_length == 1) + else if (reloc.r_length == 1) { res->howto = &i386_howto_table[10]; res->address = res[-1].address; @@ -133,24 +140,24 @@ bfd_mach_o_i386_swap_reloc_in (arelent *res, bfd_mach_o_reloc_info *reloc) } return FALSE; case BFD_MACH_O_GENERIC_RELOC_SECTDIFF: - if (reloc->r_length == 2) + if (reloc.r_length == 2) { res->howto = &i386_howto_table[5]; return TRUE; } - else if (reloc->r_length == 1) + else if (reloc.r_length == 1) { res->howto = &i386_howto_table[8]; return TRUE; } return FALSE; case BFD_MACH_O_GENERIC_RELOC_LOCAL_SECTDIFF: - if (reloc->r_length == 2) + if (reloc.r_length == 2) { res->howto = &i386_howto_table[6]; return TRUE; } - else if (reloc->r_length == 1) + else if (reloc.r_length == 1) { res->howto = &i386_howto_table[9]; return TRUE; @@ -162,10 +169,10 @@ bfd_mach_o_i386_swap_reloc_in (arelent *res, bfd_mach_o_reloc_info *reloc) } else { - switch (reloc->r_type) + switch (reloc.r_type) { case BFD_MACH_O_GENERIC_RELOC_VANILLA: - switch ((reloc->r_length << 1) | reloc->r_pcrel) + switch ((reloc.r_length << 1) | reloc.r_pcrel) { case 0: /* len = 0, pcrel = 0 */ res->howto = &i386_howto_table[2]; @@ -384,7 +391,7 @@ const mach_o_segment_name_xlat mach_o_i386_segsec_names_xlat[] = { NULL, NULL } }; -#define bfd_mach_o_swap_reloc_in bfd_mach_o_i386_swap_reloc_in +#define bfd_mach_o_canonicalize_one_reloc bfd_mach_o_i386_canonicalize_one_reloc #define bfd_mach_o_swap_reloc_out bfd_mach_o_i386_swap_reloc_out #define bfd_mach_o_print_thread bfd_mach_o_i386_print_thread |