aboutsummaryrefslogtreecommitdiff
path: root/bfd/mach-o-i386.c
diff options
context:
space:
mode:
authorTristan Gingold <gingold@adacore.com>2015-11-18 15:43:27 +0100
committerTristan Gingold <gingold@adacore.com>2015-11-18 15:47:56 +0100
commitbcb51645d3ef1211efbce59f0935f5f0223602a3 (patch)
treeb13d0345ad27ab30bd8ce54f80b0129cddd1716e /bfd/mach-o-i386.c
parent1798301e20d5c5be69a362bbec149abce446c215 (diff)
downloadfsf-binutils-gdb-bcb51645d3ef1211efbce59f0935f5f0223602a3.zip
fsf-binutils-gdb-bcb51645d3ef1211efbce59f0935f5f0223602a3.tar.gz
fsf-binutils-gdb-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.c31
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