This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
[Darwin]: Handle more x86-64 relocations
- From: Tristan Gingold <gingold at adacore dot com>
- To: binutils Development <binutils at sourceware dot org>
- Date: Wed, 4 Jan 2012 13:59:07 +0100
- Subject: [Darwin]: Handle more x86-64 relocations
Hi,
preliminary work to support gas for mach-o x86-64: handle more relic conversions from BFD to mach-o.
Committed on trunk.
Tristan.
bfd/
2012-01-04 Tristan Gingold <gingold@adacore.com>
* mach-o-x86-64.c (bfd_mach_o_x86_64_swap_reloc_out): Handle
BFD_RELOC_32, BFD_RELOC_MACH_O_X86_64_PCREL32_1,
BFD_RELOC_MACH_O_X86_64_PCREL32_2,
BFD_RELOC_MACH_O_X86_64_PCREL32_4,
BFD_RELOC_MACH_O_X86_64_BRANCH32,
BFD_RELOC_MACH_O_X86_64_SUBTRACTOR32,
BFD_RELOC_MACH_O_X86_64_GOT.
RCS file: /cvs/src/src/bfd/mach-o-x86-64.c,v
retrieving revision 1.6
diff -c -r1.6 mach-o-x86-64.c
*** mach-o-x86-64.c 19 Dec 2011 15:42:36 -0000 1.6
--- mach-o-x86-64.c 4 Jan 2012 12:55:33 -0000
***************
*** 224,244 ****
--- 224,279 ----
rinfo->r_scattered = 0;
switch (rel->howto->type)
{
+ case BFD_RELOC_32:
+ rinfo->r_type = BFD_MACH_O_X86_64_RELOC_UNSIGNED;
+ rinfo->r_pcrel = 0;
+ rinfo->r_length = 2;
+ break;
case BFD_RELOC_64:
rinfo->r_type = BFD_MACH_O_X86_64_RELOC_UNSIGNED;
rinfo->r_pcrel = 0;
rinfo->r_length = 3;
break;
case BFD_RELOC_32_PCREL:
+ rinfo->r_type = BFD_MACH_O_X86_64_RELOC_SIGNED;
+ rinfo->r_pcrel = 1;
+ rinfo->r_length = 2;
+ break;
+ case BFD_RELOC_MACH_O_X86_64_PCREL32_1:
+ rinfo->r_type = BFD_MACH_O_X86_64_RELOC_SIGNED_1;
+ rinfo->r_pcrel = 1;
+ rinfo->r_length = 2;
+ break;
+ case BFD_RELOC_MACH_O_X86_64_PCREL32_2:
+ rinfo->r_type = BFD_MACH_O_X86_64_RELOC_SIGNED_2;
+ rinfo->r_pcrel = 1;
+ rinfo->r_length = 2;
+ break;
+ case BFD_RELOC_MACH_O_X86_64_PCREL32_4:
+ rinfo->r_type = BFD_MACH_O_X86_64_RELOC_SIGNED_4;
+ rinfo->r_pcrel = 1;
+ rinfo->r_length = 2;
+ break;
+ case BFD_RELOC_MACH_O_X86_64_BRANCH32:
rinfo->r_type = BFD_MACH_O_X86_64_RELOC_BRANCH;
rinfo->r_pcrel = 1;
rinfo->r_length = 2;
break;
+ case BFD_RELOC_MACH_O_X86_64_SUBTRACTOR32:
+ rinfo->r_type = BFD_MACH_O_X86_64_RELOC_SUBTRACTOR;
+ rinfo->r_pcrel = 0;
+ rinfo->r_length = 2;
+ break;
case BFD_RELOC_MACH_O_X86_64_SUBTRACTOR64:
rinfo->r_type = BFD_MACH_O_X86_64_RELOC_SUBTRACTOR;
rinfo->r_pcrel = 0;
rinfo->r_length = 3;
break;
+ case BFD_RELOC_MACH_O_X86_64_GOT:
+ rinfo->r_type = BFD_MACH_O_X86_64_RELOC_GOT;
+ rinfo->r_pcrel = 1;
+ rinfo->r_length = 2;
+ break;
case BFD_RELOC_MACH_O_X86_64_GOT_LOAD:
rinfo->r_type = BFD_MACH_O_X86_64_RELOC_GOT_LOAD;
rinfo->r_pcrel = 1;