175fd0b74Schristos /* Intel x86-64 Mach-O support for BFD.
2*e992f068Schristos Copyright (C) 2010-2022 Free Software Foundation, Inc.
375fd0b74Schristos
475fd0b74Schristos This file is part of BFD, the Binary File Descriptor library.
575fd0b74Schristos
675fd0b74Schristos This program is free software; you can redistribute it and/or modify
775fd0b74Schristos it under the terms of the GNU General Public License as published by
875fd0b74Schristos the Free Software Foundation; either version 3 of the License, or
975fd0b74Schristos (at your option) any later version.
1075fd0b74Schristos
1175fd0b74Schristos This program is distributed in the hope that it will be useful,
1275fd0b74Schristos but WITHOUT ANY WARRANTY; without even the implied warranty of
1375fd0b74Schristos MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
1475fd0b74Schristos GNU General Public License for more details.
1575fd0b74Schristos
1675fd0b74Schristos You should have received a copy of the GNU General Public License
1775fd0b74Schristos along with this program; if not, write to the Free Software
1875fd0b74Schristos Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
1975fd0b74Schristos MA 02110-1301, USA. */
2075fd0b74Schristos
2175fd0b74Schristos #include "sysdep.h"
2275fd0b74Schristos #include "bfd.h"
2375fd0b74Schristos #include "libbfd.h"
2475fd0b74Schristos #include "libiberty.h"
25012573ebSchristos #include "mach-o.h"
2675fd0b74Schristos #include "mach-o/x86-64.h"
2775fd0b74Schristos
2875fd0b74Schristos #define bfd_mach_o_object_p bfd_mach_o_x86_64_object_p
2975fd0b74Schristos #define bfd_mach_o_core_p bfd_mach_o_x86_64_core_p
3075fd0b74Schristos #define bfd_mach_o_mkobject bfd_mach_o_x86_64_mkobject
3175fd0b74Schristos
32*e992f068Schristos static bfd_cleanup
bfd_mach_o_x86_64_object_p(bfd * abfd)3375fd0b74Schristos bfd_mach_o_x86_64_object_p (bfd *abfd)
3475fd0b74Schristos {
3575fd0b74Schristos return bfd_mach_o_header_p (abfd, 0, 0, BFD_MACH_O_CPU_TYPE_X86_64);
3675fd0b74Schristos }
3775fd0b74Schristos
38*e992f068Schristos static bfd_cleanup
bfd_mach_o_x86_64_core_p(bfd * abfd)3975fd0b74Schristos bfd_mach_o_x86_64_core_p (bfd *abfd)
4075fd0b74Schristos {
4175fd0b74Schristos return bfd_mach_o_header_p (abfd, 0,
4275fd0b74Schristos BFD_MACH_O_MH_CORE, BFD_MACH_O_CPU_TYPE_X86_64);
4375fd0b74Schristos }
4475fd0b74Schristos
45*e992f068Schristos static bool
bfd_mach_o_x86_64_mkobject(bfd * abfd)4675fd0b74Schristos bfd_mach_o_x86_64_mkobject (bfd *abfd)
4775fd0b74Schristos {
4875fd0b74Schristos bfd_mach_o_data_struct *mdata;
4975fd0b74Schristos
5075fd0b74Schristos if (!bfd_mach_o_mkobject_init (abfd))
51*e992f068Schristos return false;
5275fd0b74Schristos
5375fd0b74Schristos mdata = bfd_mach_o_get_data (abfd);
5475fd0b74Schristos mdata->header.magic = BFD_MACH_O_MH_MAGIC_64;
5575fd0b74Schristos mdata->header.cputype = BFD_MACH_O_CPU_TYPE_X86_64;
5675fd0b74Schristos mdata->header.cpusubtype =
5775fd0b74Schristos BFD_MACH_O_CPU_SUBTYPE_X86_ALL | BFD_MACH_O_CPU_SUBTYPE_LIB64;
5875fd0b74Schristos mdata->header.byteorder = BFD_ENDIAN_LITTLE;
5975fd0b74Schristos mdata->header.version = 2;
6075fd0b74Schristos
61*e992f068Schristos return true;
6275fd0b74Schristos }
6375fd0b74Schristos
6475fd0b74Schristos /* In case we're on a 32-bit machine, construct a 64-bit "-1" value. */
6575fd0b74Schristos #define MINUS_ONE (~ (bfd_vma) 0)
6675fd0b74Schristos
6775fd0b74Schristos static reloc_howto_type x86_64_howto_table[]=
6875fd0b74Schristos {
6975fd0b74Schristos /* 0 */
70*e992f068Schristos HOWTO(BFD_RELOC_64, 0, 8, 64, false, 0,
7175fd0b74Schristos complain_overflow_bitfield,
7275fd0b74Schristos NULL, "64",
73*e992f068Schristos false, MINUS_ONE, MINUS_ONE, false),
74*e992f068Schristos HOWTO(BFD_RELOC_32, 0, 4, 32, false, 0,
7575fd0b74Schristos complain_overflow_bitfield,
7675fd0b74Schristos NULL, "32",
77*e992f068Schristos false, 0xffffffff, 0xffffffff, false),
78*e992f068Schristos HOWTO(BFD_RELOC_32_PCREL, 0, 4, 32, true, 0,
7975fd0b74Schristos complain_overflow_bitfield,
8075fd0b74Schristos NULL, "DISP32",
81*e992f068Schristos false, 0xffffffff, 0xffffffff, true),
82*e992f068Schristos HOWTO(BFD_RELOC_MACH_O_X86_64_PCREL32_1, 0, 4, 32, true, 0,
8375fd0b74Schristos complain_overflow_bitfield,
8475fd0b74Schristos NULL, "DISP32_1",
85*e992f068Schristos false, 0xffffffff, 0xffffffff, true),
8675fd0b74Schristos /* 4 */
87*e992f068Schristos HOWTO(BFD_RELOC_MACH_O_X86_64_PCREL32_2, 0, 4, 32, true, 0,
8875fd0b74Schristos complain_overflow_bitfield,
8975fd0b74Schristos NULL, "DISP32_2",
90*e992f068Schristos false, 0xffffffff, 0xffffffff, true),
91*e992f068Schristos HOWTO(BFD_RELOC_MACH_O_X86_64_PCREL32_4, 0, 4, 32, true, 0,
9275fd0b74Schristos complain_overflow_bitfield,
9375fd0b74Schristos NULL, "DISP32_4",
94*e992f068Schristos false, 0xffffffff, 0xffffffff, true),
95*e992f068Schristos HOWTO(BFD_RELOC_MACH_O_X86_64_BRANCH32, 0, 4, 32, true, 0,
9675fd0b74Schristos complain_overflow_bitfield,
9775fd0b74Schristos NULL, "BRANCH32",
98*e992f068Schristos false, 0xffffffff, 0xffffffff, true),
99*e992f068Schristos HOWTO(BFD_RELOC_MACH_O_X86_64_GOT_LOAD, 0, 4, 32, true, 0,
10075fd0b74Schristos complain_overflow_bitfield,
10175fd0b74Schristos NULL, "GOT_LOAD",
102*e992f068Schristos false, 0xffffffff, 0xffffffff, true),
10375fd0b74Schristos /* 8 */
104*e992f068Schristos HOWTO(BFD_RELOC_MACH_O_SUBTRACTOR32, 0, 4, 32, false, 0,
10575fd0b74Schristos complain_overflow_bitfield,
10675fd0b74Schristos NULL, "SUBTRACTOR32",
107*e992f068Schristos false, 0xffffffff, 0xffffffff, false),
108*e992f068Schristos HOWTO(BFD_RELOC_MACH_O_SUBTRACTOR64, 0, 8, 64, false, 0,
10975fd0b74Schristos complain_overflow_bitfield,
11075fd0b74Schristos NULL, "SUBTRACTOR64",
111*e992f068Schristos false, MINUS_ONE, MINUS_ONE, false),
112*e992f068Schristos HOWTO(BFD_RELOC_MACH_O_X86_64_GOT, 0, 4, 32, true, 0,
11375fd0b74Schristos complain_overflow_bitfield,
11475fd0b74Schristos NULL, "GOT",
115*e992f068Schristos false, 0xffffffff, 0xffffffff, true),
116*e992f068Schristos HOWTO(BFD_RELOC_MACH_O_X86_64_BRANCH8, 0, 1, 8, true, 0,
11775fd0b74Schristos complain_overflow_bitfield,
11875fd0b74Schristos NULL, "BRANCH8",
119*e992f068Schristos false, 0xff, 0xff, true),
120ede78133Schristos /* 12 */
121*e992f068Schristos HOWTO(BFD_RELOC_MACH_O_X86_64_TLV, 0, 4, 32, true, 0,
122ede78133Schristos complain_overflow_bitfield,
123ede78133Schristos NULL, "TLV",
124*e992f068Schristos false, 0xffffffff, 0xffffffff, true),
12575fd0b74Schristos };
12675fd0b74Schristos
127*e992f068Schristos static bool
bfd_mach_o_x86_64_canonicalize_one_reloc(bfd * abfd,struct mach_o_reloc_info_external * raw,arelent * res,asymbol ** syms,arelent * res_base ATTRIBUTE_UNUSED)12875fd0b74Schristos bfd_mach_o_x86_64_canonicalize_one_reloc (bfd * abfd,
12975fd0b74Schristos struct mach_o_reloc_info_external * raw,
130ede78133Schristos arelent * res,
131ede78133Schristos asymbol ** syms,
132ede78133Schristos arelent * res_base ATTRIBUTE_UNUSED)
13375fd0b74Schristos {
13475fd0b74Schristos bfd_mach_o_reloc_info reloc;
13575fd0b74Schristos
13675fd0b74Schristos if (!bfd_mach_o_pre_canonicalize_one_reloc (abfd, raw, &reloc, res, syms))
137*e992f068Schristos return false;
13875fd0b74Schristos
13975fd0b74Schristos /* On x86-64, scattered relocs are not used. */
14075fd0b74Schristos if (reloc.r_scattered)
141*e992f068Schristos return false;
14275fd0b74Schristos
14375fd0b74Schristos switch (reloc.r_type)
14475fd0b74Schristos {
14575fd0b74Schristos case BFD_MACH_O_X86_64_RELOC_UNSIGNED:
14675fd0b74Schristos if (reloc.r_pcrel)
147*e992f068Schristos return false;
14875fd0b74Schristos switch (reloc.r_length)
14975fd0b74Schristos {
15075fd0b74Schristos case 2:
15175fd0b74Schristos res->howto = &x86_64_howto_table[1];
152*e992f068Schristos return true;
15375fd0b74Schristos case 3:
15475fd0b74Schristos res->howto = &x86_64_howto_table[0];
155*e992f068Schristos return true;
15675fd0b74Schristos default:
157*e992f068Schristos return false;
15875fd0b74Schristos }
15975fd0b74Schristos case BFD_MACH_O_X86_64_RELOC_SIGNED:
16075fd0b74Schristos if (reloc.r_length == 2 && reloc.r_pcrel)
16175fd0b74Schristos {
16275fd0b74Schristos res->howto = &x86_64_howto_table[2];
163*e992f068Schristos return true;
16475fd0b74Schristos }
16575fd0b74Schristos break;
16675fd0b74Schristos case BFD_MACH_O_X86_64_RELOC_BRANCH:
16775fd0b74Schristos if (!reloc.r_pcrel)
168*e992f068Schristos return false;
16975fd0b74Schristos switch (reloc.r_length)
17075fd0b74Schristos {
17175fd0b74Schristos case 2:
17275fd0b74Schristos res->howto = &x86_64_howto_table[6];
173*e992f068Schristos return true;
17475fd0b74Schristos default:
175*e992f068Schristos return false;
17675fd0b74Schristos }
17775fd0b74Schristos break;
17875fd0b74Schristos case BFD_MACH_O_X86_64_RELOC_GOT_LOAD:
17975fd0b74Schristos if (reloc.r_length == 2 && reloc.r_pcrel && reloc.r_extern)
18075fd0b74Schristos {
18175fd0b74Schristos res->howto = &x86_64_howto_table[7];
182*e992f068Schristos return true;
18375fd0b74Schristos }
18475fd0b74Schristos break;
18575fd0b74Schristos case BFD_MACH_O_X86_64_RELOC_GOT:
18675fd0b74Schristos if (reloc.r_length == 2 && reloc.r_pcrel && reloc.r_extern)
18775fd0b74Schristos {
18875fd0b74Schristos res->howto = &x86_64_howto_table[10];
189*e992f068Schristos return true;
19075fd0b74Schristos }
19175fd0b74Schristos break;
19275fd0b74Schristos case BFD_MACH_O_X86_64_RELOC_SUBTRACTOR:
19375fd0b74Schristos if (reloc.r_pcrel)
194*e992f068Schristos return false;
19575fd0b74Schristos switch (reloc.r_length)
19675fd0b74Schristos {
19775fd0b74Schristos case 2:
19875fd0b74Schristos res->howto = &x86_64_howto_table[8];
199*e992f068Schristos return true;
20075fd0b74Schristos case 3:
20175fd0b74Schristos res->howto = &x86_64_howto_table[9];
202*e992f068Schristos return true;
20375fd0b74Schristos default:
204*e992f068Schristos return false;
20575fd0b74Schristos }
20675fd0b74Schristos break;
20775fd0b74Schristos case BFD_MACH_O_X86_64_RELOC_SIGNED_1:
20875fd0b74Schristos if (reloc.r_length == 2 && reloc.r_pcrel)
20975fd0b74Schristos {
21075fd0b74Schristos res->howto = &x86_64_howto_table[3];
211*e992f068Schristos return true;
21275fd0b74Schristos }
21375fd0b74Schristos break;
21475fd0b74Schristos case BFD_MACH_O_X86_64_RELOC_SIGNED_2:
21575fd0b74Schristos if (reloc.r_length == 2 && reloc.r_pcrel)
21675fd0b74Schristos {
21775fd0b74Schristos res->howto = &x86_64_howto_table[4];
218*e992f068Schristos return true;
21975fd0b74Schristos }
22075fd0b74Schristos break;
22175fd0b74Schristos case BFD_MACH_O_X86_64_RELOC_SIGNED_4:
22275fd0b74Schristos if (reloc.r_length == 2 && reloc.r_pcrel)
22375fd0b74Schristos {
22475fd0b74Schristos res->howto = &x86_64_howto_table[5];
225*e992f068Schristos return true;
22675fd0b74Schristos }
22775fd0b74Schristos break;
228ede78133Schristos case BFD_MACH_O_X86_64_RELOC_TLV:
229ede78133Schristos if (reloc.r_length == 2 && reloc.r_pcrel && reloc.r_extern)
230ede78133Schristos {
231ede78133Schristos res->howto = &x86_64_howto_table[12];
232*e992f068Schristos return true;
233ede78133Schristos }
234ede78133Schristos break;
23575fd0b74Schristos default:
236*e992f068Schristos return false;
23775fd0b74Schristos }
238*e992f068Schristos return false;
23975fd0b74Schristos }
24075fd0b74Schristos
241*e992f068Schristos static bool
bfd_mach_o_x86_64_swap_reloc_out(arelent * rel,bfd_mach_o_reloc_info * rinfo)24275fd0b74Schristos bfd_mach_o_x86_64_swap_reloc_out (arelent *rel, bfd_mach_o_reloc_info *rinfo)
24375fd0b74Schristos {
24475fd0b74Schristos rinfo->r_address = rel->address;
24575fd0b74Schristos rinfo->r_scattered = 0;
24675fd0b74Schristos switch (rel->howto->type)
24775fd0b74Schristos {
24875fd0b74Schristos case BFD_RELOC_32:
24975fd0b74Schristos rinfo->r_type = BFD_MACH_O_X86_64_RELOC_UNSIGNED;
25075fd0b74Schristos rinfo->r_pcrel = 0;
25175fd0b74Schristos rinfo->r_length = 2;
25275fd0b74Schristos break;
25375fd0b74Schristos case BFD_RELOC_64:
25475fd0b74Schristos rinfo->r_type = BFD_MACH_O_X86_64_RELOC_UNSIGNED;
25575fd0b74Schristos rinfo->r_pcrel = 0;
25675fd0b74Schristos rinfo->r_length = 3;
25775fd0b74Schristos break;
25875fd0b74Schristos case BFD_RELOC_32_PCREL:
25975fd0b74Schristos rinfo->r_type = BFD_MACH_O_X86_64_RELOC_SIGNED;
26075fd0b74Schristos rinfo->r_pcrel = 1;
26175fd0b74Schristos rinfo->r_length = 2;
26275fd0b74Schristos break;
26375fd0b74Schristos case BFD_RELOC_MACH_O_X86_64_PCREL32_1:
26475fd0b74Schristos rinfo->r_type = BFD_MACH_O_X86_64_RELOC_SIGNED_1;
26575fd0b74Schristos rinfo->r_pcrel = 1;
26675fd0b74Schristos rinfo->r_length = 2;
26775fd0b74Schristos break;
26875fd0b74Schristos case BFD_RELOC_MACH_O_X86_64_PCREL32_2:
26975fd0b74Schristos rinfo->r_type = BFD_MACH_O_X86_64_RELOC_SIGNED_2;
27075fd0b74Schristos rinfo->r_pcrel = 1;
27175fd0b74Schristos rinfo->r_length = 2;
27275fd0b74Schristos break;
27375fd0b74Schristos case BFD_RELOC_MACH_O_X86_64_PCREL32_4:
27475fd0b74Schristos rinfo->r_type = BFD_MACH_O_X86_64_RELOC_SIGNED_4;
27575fd0b74Schristos rinfo->r_pcrel = 1;
27675fd0b74Schristos rinfo->r_length = 2;
27775fd0b74Schristos break;
27875fd0b74Schristos case BFD_RELOC_MACH_O_X86_64_BRANCH32:
27975fd0b74Schristos rinfo->r_type = BFD_MACH_O_X86_64_RELOC_BRANCH;
28075fd0b74Schristos rinfo->r_pcrel = 1;
28175fd0b74Schristos rinfo->r_length = 2;
28275fd0b74Schristos break;
28375fd0b74Schristos case BFD_RELOC_MACH_O_SUBTRACTOR32:
28475fd0b74Schristos rinfo->r_type = BFD_MACH_O_X86_64_RELOC_SUBTRACTOR;
28575fd0b74Schristos rinfo->r_pcrel = 0;
28675fd0b74Schristos rinfo->r_length = 2;
28775fd0b74Schristos break;
28875fd0b74Schristos case BFD_RELOC_MACH_O_SUBTRACTOR64:
28975fd0b74Schristos rinfo->r_type = BFD_MACH_O_X86_64_RELOC_SUBTRACTOR;
29075fd0b74Schristos rinfo->r_pcrel = 0;
29175fd0b74Schristos rinfo->r_length = 3;
29275fd0b74Schristos break;
29375fd0b74Schristos case BFD_RELOC_MACH_O_X86_64_GOT:
29475fd0b74Schristos rinfo->r_type = BFD_MACH_O_X86_64_RELOC_GOT;
29575fd0b74Schristos rinfo->r_pcrel = 1;
29675fd0b74Schristos rinfo->r_length = 2;
29775fd0b74Schristos break;
29875fd0b74Schristos case BFD_RELOC_MACH_O_X86_64_GOT_LOAD:
29975fd0b74Schristos rinfo->r_type = BFD_MACH_O_X86_64_RELOC_GOT_LOAD;
30075fd0b74Schristos rinfo->r_pcrel = 1;
30175fd0b74Schristos rinfo->r_length = 2;
30275fd0b74Schristos break;
303ede78133Schristos case BFD_RELOC_MACH_O_X86_64_TLV:
304ede78133Schristos rinfo->r_type = BFD_MACH_O_X86_64_RELOC_TLV;
305ede78133Schristos rinfo->r_pcrel = 1;
306ede78133Schristos rinfo->r_length = 2;
307ede78133Schristos break;
30875fd0b74Schristos default:
309*e992f068Schristos return false;
31075fd0b74Schristos }
31175fd0b74Schristos if ((*rel->sym_ptr_ptr)->flags & BSF_SECTION_SYM)
31275fd0b74Schristos {
31375fd0b74Schristos rinfo->r_extern = 0;
31475fd0b74Schristos rinfo->r_value =
31575fd0b74Schristos (*rel->sym_ptr_ptr)->section->output_section->target_index;
31675fd0b74Schristos }
31775fd0b74Schristos else
31875fd0b74Schristos {
31975fd0b74Schristos rinfo->r_extern = 1;
32075fd0b74Schristos rinfo->r_value = (*rel->sym_ptr_ptr)->udata.i;
32175fd0b74Schristos }
322*e992f068Schristos return true;
32375fd0b74Schristos }
32475fd0b74Schristos
32575fd0b74Schristos static reloc_howto_type *
bfd_mach_o_x86_64_bfd_reloc_type_lookup(bfd * abfd ATTRIBUTE_UNUSED,bfd_reloc_code_real_type code)32675fd0b74Schristos bfd_mach_o_x86_64_bfd_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED,
32775fd0b74Schristos bfd_reloc_code_real_type code)
32875fd0b74Schristos {
32975fd0b74Schristos unsigned int i;
33075fd0b74Schristos
33175fd0b74Schristos for (i = 0;
33275fd0b74Schristos i < sizeof (x86_64_howto_table) / sizeof (*x86_64_howto_table);
33375fd0b74Schristos i++)
33475fd0b74Schristos if (code == x86_64_howto_table[i].type)
33575fd0b74Schristos return &x86_64_howto_table[i];
33675fd0b74Schristos return NULL;
33775fd0b74Schristos }
33875fd0b74Schristos
33975fd0b74Schristos static reloc_howto_type *
bfd_mach_o_x86_64_bfd_reloc_name_lookup(bfd * abfd ATTRIBUTE_UNUSED,const char * name ATTRIBUTE_UNUSED)34075fd0b74Schristos bfd_mach_o_x86_64_bfd_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
34175fd0b74Schristos const char *name ATTRIBUTE_UNUSED)
34275fd0b74Schristos {
34375fd0b74Schristos return NULL;
34475fd0b74Schristos }
34575fd0b74Schristos
346*e992f068Schristos static bool
bfd_mach_o_section_type_valid_for_x86_64(unsigned long val)34775fd0b74Schristos bfd_mach_o_section_type_valid_for_x86_64 (unsigned long val)
34875fd0b74Schristos {
34975fd0b74Schristos if (val == BFD_MACH_O_S_NON_LAZY_SYMBOL_POINTERS
35075fd0b74Schristos || val == BFD_MACH_O_S_LAZY_SYMBOL_POINTERS
35175fd0b74Schristos || val == BFD_MACH_O_S_SYMBOL_STUBS)
352*e992f068Schristos return false;
353*e992f068Schristos return true;
35475fd0b74Schristos }
35575fd0b74Schristos
35675fd0b74Schristos /* We want to bump the alignment of some sections. */
35775fd0b74Schristos static const mach_o_section_name_xlat text_section_names_xlat[] =
35875fd0b74Schristos {
35975fd0b74Schristos { ".eh_frame", "__eh_frame",
36075fd0b74Schristos SEC_READONLY | SEC_DATA | SEC_LOAD, BFD_MACH_O_S_COALESCED,
36175fd0b74Schristos BFD_MACH_O_S_ATTR_LIVE_SUPPORT
36275fd0b74Schristos | BFD_MACH_O_S_ATTR_STRIP_STATIC_SYMS
36375fd0b74Schristos | BFD_MACH_O_S_ATTR_NO_TOC, 3},
36475fd0b74Schristos { NULL, NULL, 0, 0, 0, 0}
36575fd0b74Schristos };
36675fd0b74Schristos
36775fd0b74Schristos const mach_o_segment_name_xlat mach_o_x86_64_segsec_names_xlat[] =
36875fd0b74Schristos {
36975fd0b74Schristos { "__TEXT", text_section_names_xlat },
37075fd0b74Schristos { NULL, NULL }
37175fd0b74Schristos };
37275fd0b74Schristos
37375fd0b74Schristos #define bfd_mach_o_canonicalize_one_reloc bfd_mach_o_x86_64_canonicalize_one_reloc
37475fd0b74Schristos #define bfd_mach_o_swap_reloc_out bfd_mach_o_x86_64_swap_reloc_out
37575fd0b74Schristos
37675fd0b74Schristos #define bfd_mach_o_bfd_reloc_type_lookup bfd_mach_o_x86_64_bfd_reloc_type_lookup
37775fd0b74Schristos #define bfd_mach_o_bfd_reloc_name_lookup bfd_mach_o_x86_64_bfd_reloc_name_lookup
37875fd0b74Schristos #define bfd_mach_o_print_thread NULL
37975fd0b74Schristos #define bfd_mach_o_tgt_seg_table mach_o_x86_64_segsec_names_xlat
38075fd0b74Schristos #define bfd_mach_o_section_type_valid_for_tgt bfd_mach_o_section_type_valid_for_x86_64
38175fd0b74Schristos
38275fd0b74Schristos #define TARGET_NAME x86_64_mach_o_vec
38375fd0b74Schristos #define TARGET_STRING "mach-o-x86-64"
38475fd0b74Schristos #define TARGET_ARCHITECTURE bfd_arch_i386
38575fd0b74Schristos #define TARGET_PAGESIZE 4096
38675fd0b74Schristos #define TARGET_BIG_ENDIAN 0
38775fd0b74Schristos #define TARGET_ARCHIVE 0
38875fd0b74Schristos #define TARGET_PRIORITY 0
38975fd0b74Schristos #include "mach-o-target.c"
390