This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[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;


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]