coff-z80.c revision 1.10 1 1.1 christos /* BFD back-end for Zilog Z80 COFF binaries.
2 1.10 christos Copyright (C) 2005-2022 Free Software Foundation, Inc.
3 1.1 christos Contributed by Arnold Metselaar <arnold_m (at) operamail.com>
4 1.1 christos
5 1.1 christos This file is part of BFD, the Binary File Descriptor library.
6 1.1 christos
7 1.1 christos This program is free software; you can redistribute it and/or modify
8 1.1 christos it under the terms of the GNU General Public License as published by
9 1.1 christos the Free Software Foundation; either version 3 of the License, or
10 1.1 christos (at your option) any later version.
11 1.1 christos
12 1.1 christos This program is distributed in the hope that it will be useful,
13 1.1 christos but WITHOUT ANY WARRANTY; without even the implied warranty of
14 1.1 christos MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 1.1 christos GNU General Public License for more details.
16 1.1 christos
17 1.1 christos You should have received a copy of the GNU General Public License
18 1.1 christos along with this program; if not, write to the Free Software
19 1.1 christos Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
20 1.1 christos MA 02110-1301, USA. */
21 1.1 christos
22 1.1 christos #include "sysdep.h"
23 1.1 christos #include "bfd.h"
24 1.1 christos #include "libbfd.h"
25 1.1 christos #include "bfdlink.h"
26 1.1 christos #include "coff/z80.h"
27 1.1 christos #include "coff/internal.h"
28 1.1 christos #include "libcoff.h"
29 1.9 christos #include "libiberty.h"
30 1.1 christos
31 1.1 christos #define COFF_DEFAULT_SECTION_ALIGNMENT_POWER 0
32 1.1 christos
33 1.10 christos typedef const struct {
34 1.9 christos bfd_reloc_code_real_type r_type;
35 1.9 christos reloc_howto_type howto;
36 1.9 christos } bfd_howto_type;
37 1.1 christos
38 1.9 christos #define BFD_EMPTY_HOWTO(rt,x) {rt, EMPTY_HOWTO(x)}
39 1.9 christos #define BFD_HOWTO(rt,a,b,c,d,e,f,g,h,i,j,k,l,m) {rt, HOWTO(a,b,c,d,e,f,g,h,i,j,k,l,m)}
40 1.9 christos
41 1.9 christos static bfd_howto_type howto_table[] =
42 1.9 christos {
43 1.9 christos BFD_EMPTY_HOWTO (BFD_RELOC_NONE, 0),
44 1.9 christos
45 1.9 christos BFD_HOWTO (BFD_RELOC_32,
46 1.9 christos R_IMM32, /* type */
47 1.9 christos 0, /* rightshift */
48 1.10 christos 4, /* size */
49 1.9 christos 32, /* bitsize */
50 1.10 christos false, /* pc_relative */
51 1.9 christos 0, /* bitpos */
52 1.9 christos complain_overflow_bitfield, /* complain_on_overflow */
53 1.9 christos 0, /* special_function */
54 1.9 christos "r_imm32", /* name */
55 1.10 christos false, /* partial_inplace */
56 1.9 christos 0xffffffff, /* src_mask */
57 1.9 christos 0xffffffff, /* dst_mask */
58 1.10 christos false), /* pcrel_offset */
59 1.9 christos
60 1.9 christos BFD_HOWTO (BFD_RELOC_24,
61 1.9 christos R_IMM24, /* type */
62 1.9 christos 0, /* rightshift */
63 1.10 christos 3, /* size */
64 1.9 christos 24, /* bitsize */
65 1.10 christos false, /* pc_relative */
66 1.9 christos 0, /* bitpos */
67 1.9 christos complain_overflow_bitfield, /* complain_on_overflow */
68 1.9 christos 0, /* special_function */
69 1.9 christos "r_imm24", /* name */
70 1.10 christos false, /* partial_inplace */
71 1.9 christos 0x00ffffff, /* src_mask */
72 1.9 christos 0x00ffffff, /* dst_mask */
73 1.10 christos false), /* pcrel_offset */
74 1.9 christos
75 1.9 christos BFD_HOWTO (BFD_RELOC_16,
76 1.9 christos R_IMM16, /* type */
77 1.9 christos 0, /* rightshift */
78 1.10 christos 2, /* size */
79 1.9 christos 16, /* bitsize */
80 1.10 christos false, /* pc_relative */
81 1.9 christos 0, /* bitpos */
82 1.9 christos complain_overflow_bitfield, /* complain_on_overflow */
83 1.9 christos 0, /* special_function */
84 1.9 christos "r_imm16", /* name */
85 1.10 christos false, /* partial_inplace */
86 1.9 christos 0x0000ffff, /* src_mask */
87 1.9 christos 0x0000ffff, /* dst_mask */
88 1.10 christos false), /* pcrel_offset */
89 1.9 christos
90 1.9 christos BFD_HOWTO (BFD_RELOC_8,
91 1.9 christos R_IMM8, /* type */
92 1.9 christos 0, /* rightshift */
93 1.10 christos 1, /* size */
94 1.9 christos 8, /* bitsize */
95 1.10 christos false, /* pc_relative */
96 1.9 christos 0, /* bitpos */
97 1.9 christos complain_overflow_bitfield, /* complain_on_overflow */
98 1.9 christos 0, /* special_function */
99 1.9 christos "r_imm8", /* name */
100 1.10 christos false, /* partial_inplace */
101 1.9 christos 0x000000ff, /* src_mask */
102 1.9 christos 0x000000ff, /* dst_mask */
103 1.10 christos false), /* pcrel_offset */
104 1.9 christos
105 1.9 christos BFD_HOWTO (BFD_RELOC_8_PCREL,
106 1.9 christos R_JR, /* type */
107 1.9 christos 0, /* rightshift */
108 1.10 christos 1, /* size */
109 1.9 christos 8, /* bitsize */
110 1.10 christos true, /* pc_relative */
111 1.9 christos 0, /* bitpos */
112 1.9 christos complain_overflow_signed, /* complain_on_overflow */
113 1.9 christos 0, /* special_function */
114 1.9 christos "r_jr", /* name */
115 1.10 christos false, /* partial_inplace */
116 1.9 christos 0, /* src_mask */
117 1.9 christos 0xFF, /* dst_mask */
118 1.10 christos true), /* pcrel_offset */
119 1.9 christos
120 1.9 christos BFD_HOWTO (BFD_RELOC_Z80_DISP8,
121 1.9 christos R_OFF8, /* type */
122 1.9 christos 0, /* rightshift */
123 1.10 christos 1, /* size */
124 1.9 christos 8, /* bitsize */
125 1.10 christos false, /* pc_relative */
126 1.9 christos 0, /* bitpos */
127 1.9 christos complain_overflow_signed, /* complain_on_overflow */
128 1.9 christos 0, /* special_function */
129 1.9 christos "r_off8", /* name */
130 1.10 christos false, /* partial_inplace */
131 1.9 christos 0, /* src_mask */
132 1.9 christos 0xff, /* dst_mask */
133 1.10 christos false), /* pcrel_offset */
134 1.9 christos
135 1.9 christos BFD_HOWTO (BFD_RELOC_Z80_BYTE0,
136 1.9 christos R_BYTE0, /* type */
137 1.9 christos 0, /* rightshift */
138 1.10 christos 1, /* size */
139 1.9 christos 8, /* bitsize */
140 1.10 christos false, /* pc_relative */
141 1.9 christos 0, /* bitpos */
142 1.9 christos complain_overflow_dont, /* complain_on_overflow */
143 1.9 christos 0, /* special_function */
144 1.9 christos "r_byte0", /* name */
145 1.10 christos false, /* partial_inplace */
146 1.9 christos 0, /* src_mask */
147 1.9 christos 0xff, /* dst_mask */
148 1.10 christos false), /* pcrel_offset */
149 1.9 christos
150 1.9 christos BFD_HOWTO (BFD_RELOC_Z80_BYTE1,
151 1.9 christos R_BYTE1, /* type */
152 1.9 christos 8, /* rightshift */
153 1.10 christos 1, /* size */
154 1.9 christos 8, /* bitsize */
155 1.10 christos false, /* pc_relative */
156 1.9 christos 0, /* bitpos */
157 1.9 christos complain_overflow_dont, /* complain_on_overflow */
158 1.9 christos 0, /* special_function */
159 1.9 christos "r_byte1", /* name */
160 1.10 christos false, /* partial_inplace */
161 1.9 christos 0, /* src_mask */
162 1.9 christos 0xff, /* dst_mask */
163 1.10 christos false), /* pcrel_offset */
164 1.9 christos
165 1.9 christos BFD_HOWTO (BFD_RELOC_Z80_BYTE2,
166 1.9 christos R_BYTE2, /* type */
167 1.9 christos 16, /* rightshift */
168 1.10 christos 1, /* size */
169 1.9 christos 8, /* bitsize */
170 1.10 christos false, /* pc_relative */
171 1.9 christos 0, /* bitpos */
172 1.9 christos complain_overflow_dont, /* complain_on_overflow */
173 1.9 christos 0, /* special_function */
174 1.9 christos "r_byte2", /* name */
175 1.10 christos false, /* partial_inplace */
176 1.9 christos 0, /* src_mask */
177 1.9 christos 0xff, /* dst_mask */
178 1.10 christos false), /* pcrel_offset */
179 1.9 christos
180 1.9 christos BFD_HOWTO (BFD_RELOC_Z80_BYTE3,
181 1.9 christos R_BYTE3, /* type */
182 1.9 christos 24, /* rightshift */
183 1.10 christos 1, /* size */
184 1.9 christos 8, /* bitsize */
185 1.10 christos false, /* pc_relative */
186 1.9 christos 0, /* bitpos */
187 1.9 christos complain_overflow_dont, /* complain_on_overflow */
188 1.9 christos 0, /* special_function */
189 1.9 christos "r_byte3", /* name */
190 1.10 christos false, /* partial_inplace */
191 1.9 christos 0, /* src_mask */
192 1.9 christos 0xff, /* dst_mask */
193 1.10 christos false), /* pcrel_offset */
194 1.9 christos
195 1.9 christos BFD_HOWTO (BFD_RELOC_Z80_WORD0,
196 1.9 christos R_WORD0, /* type */
197 1.9 christos 0, /* rightshift */
198 1.10 christos 2, /* size */
199 1.9 christos 16, /* bitsize */
200 1.10 christos false, /* pc_relative */
201 1.9 christos 0, /* bitpos */
202 1.9 christos complain_overflow_dont, /* complain_on_overflow */
203 1.9 christos 0, /* special_function */
204 1.9 christos "r_word0", /* name */
205 1.10 christos false, /* partial_inplace */
206 1.9 christos 0, /* src_mask */
207 1.9 christos 0xffff, /* dst_mask */
208 1.10 christos false), /* pcrel_offset */
209 1.9 christos
210 1.9 christos BFD_HOWTO (BFD_RELOC_Z80_WORD1,
211 1.9 christos R_WORD1, /* type */
212 1.9 christos 16, /* rightshift */
213 1.10 christos 2, /* size */
214 1.9 christos 16, /* bitsize */
215 1.10 christos false, /* pc_relative */
216 1.9 christos 0, /* bitpos */
217 1.9 christos complain_overflow_dont, /* complain_on_overflow */
218 1.9 christos 0, /* special_function */
219 1.9 christos "r_word1", /* name */
220 1.10 christos false, /* partial_inplace */
221 1.9 christos 0, /* src_mask */
222 1.9 christos 0xffff, /* dst_mask */
223 1.10 christos false), /* pcrel_offset */
224 1.9 christos
225 1.9 christos BFD_HOWTO (BFD_RELOC_Z80_16_BE,
226 1.9 christos R_IMM16BE, /* type */
227 1.9 christos 0, /* rightshift */
228 1.10 christos 2, /* size */
229 1.9 christos 16, /* bitsize */
230 1.10 christos false, /* pc_relative */
231 1.9 christos 0, /* bitpos */
232 1.9 christos complain_overflow_bitfield, /* complain_on_overflow */
233 1.9 christos 0, /* special_function */
234 1.9 christos "r_imm16be", /* name */
235 1.10 christos false, /* partial_inplace */
236 1.9 christos 0x0000ffff, /* src_mask */
237 1.9 christos 0x0000ffff, /* dst_mask */
238 1.10 christos false), /* pcrel_offset */
239 1.9 christos };
240 1.9 christos
241 1.9 christos #define NUM_HOWTOS ARRAY_SIZE (howto_table)
242 1.1 christos
243 1.1 christos #define BADMAG(x) Z80BADMAG(x)
244 1.1 christos #define Z80 1 /* Customize coffcode.h. */
245 1.1 christos #define __A_MAGIC_SET__
246 1.1 christos
247 1.1 christos /* Code to swap in the reloc. */
248 1.1 christos
249 1.1 christos #define SWAP_IN_RELOC_OFFSET H_GET_32
250 1.1 christos #define SWAP_OUT_RELOC_OFFSET H_PUT_32
251 1.1 christos
252 1.1 christos #define SWAP_OUT_RELOC_EXTRA(abfd, src, dst) \
253 1.1 christos dst->r_stuff[0] = 'S'; \
254 1.1 christos dst->r_stuff[1] = 'C';
255 1.1 christos
256 1.1 christos /* Code to turn a r_type into a howto ptr, uses the above howto table. */
257 1.1 christos static void
258 1.1 christos rtype2howto (arelent *internal, struct internal_reloc *dst)
259 1.1 christos {
260 1.9 christos unsigned i;
261 1.9 christos for (i = 0; i < NUM_HOWTOS; i++)
262 1.1 christos {
263 1.9 christos if (howto_table[i].howto.type == dst->r_type)
264 1.9 christos {
265 1.9 christos internal->howto = &howto_table[i].howto;
266 1.9 christos return;
267 1.9 christos }
268 1.1 christos }
269 1.9 christos internal->howto = NULL;
270 1.1 christos }
271 1.1 christos
272 1.1 christos #define RTYPE2HOWTO(internal, relocentry) rtype2howto (internal, relocentry)
273 1.1 christos
274 1.1 christos static reloc_howto_type *
275 1.1 christos coff_z80_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED,
276 1.1 christos bfd_reloc_code_real_type code)
277 1.1 christos {
278 1.9 christos unsigned i;
279 1.9 christos for (i = 0; i < NUM_HOWTOS; i++)
280 1.9 christos if (howto_table[i].r_type == code)
281 1.9 christos return &howto_table[i].howto;
282 1.9 christos
283 1.9 christos BFD_FAIL ();
284 1.9 christos return NULL;
285 1.1 christos }
286 1.1 christos
287 1.1 christos static reloc_howto_type *
288 1.1 christos coff_z80_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
289 1.1 christos const char *r_name)
290 1.1 christos {
291 1.9 christos unsigned i;
292 1.9 christos for (i = 0; i < NUM_HOWTOS; i++)
293 1.9 christos if (strcasecmp(howto_table[i].howto.name, r_name) == 0)
294 1.9 christos return &howto_table[i].howto;
295 1.1 christos
296 1.1 christos return NULL;
297 1.1 christos }
298 1.1 christos
299 1.1 christos /* Perform any necessary magic to the addend in a reloc entry. */
300 1.1 christos
301 1.1 christos #define CALC_ADDEND(abfd, symbol, ext_reloc, cache_ptr) \
302 1.1 christos cache_ptr->addend = ext_reloc.r_offset;
303 1.1 christos
304 1.1 christos #define RELOC_PROCESSING(relent,reloc,symbols,abfd,section) \
305 1.1 christos reloc_processing(relent, reloc, symbols, abfd, section)
306 1.1 christos
307 1.1 christos static void
308 1.1 christos reloc_processing (arelent *relent,
309 1.8 christos struct internal_reloc *reloc,
310 1.8 christos asymbol **symbols,
311 1.8 christos bfd *abfd,
312 1.8 christos asection *section)
313 1.1 christos {
314 1.1 christos relent->address = reloc->r_vaddr;
315 1.1 christos rtype2howto (relent, reloc);
316 1.1 christos
317 1.10 christos if (reloc->r_symndx == -1 || symbols == NULL)
318 1.10 christos relent->sym_ptr_ptr = bfd_abs_section_ptr->symbol_ptr_ptr;
319 1.10 christos else if (reloc->r_symndx >= 0 && reloc->r_symndx < obj_conv_table_size (abfd))
320 1.1 christos relent->sym_ptr_ptr = symbols + obj_convert (abfd)[reloc->r_symndx];
321 1.1 christos else
322 1.10 christos {
323 1.10 christos _bfd_error_handler
324 1.10 christos /* xgettext:c-format */
325 1.10 christos (_("%pB: warning: illegal symbol index %ld in relocs"),
326 1.10 christos abfd, reloc->r_symndx);
327 1.10 christos relent->sym_ptr_ptr = bfd_abs_section_ptr->symbol_ptr_ptr;
328 1.10 christos }
329 1.1 christos relent->addend = reloc->r_offset;
330 1.1 christos relent->address -= section->vma;
331 1.1 christos }
332 1.1 christos
333 1.1 christos static void
334 1.1 christos extra_case (bfd *in_abfd,
335 1.8 christos struct bfd_link_info *link_info,
336 1.8 christos struct bfd_link_order *link_order,
337 1.8 christos arelent *reloc,
338 1.8 christos bfd_byte *data,
339 1.8 christos unsigned int *src_ptr,
340 1.8 christos unsigned int *dst_ptr)
341 1.1 christos {
342 1.1 christos asection * input_section = link_order->u.indirect.section;
343 1.9 christos int val = bfd_coff_reloc16_get_value (reloc, link_info, input_section);
344 1.1 christos
345 1.1 christos switch (reloc->howto->type)
346 1.1 christos {
347 1.1 christos case R_OFF8:
348 1.9 christos if (reloc->howto->partial_inplace)
349 1.9 christos val += (signed char)(bfd_get_8 ( in_abfd, data+*src_ptr)
350 1.9 christos & reloc->howto->src_mask);
351 1.9 christos if (val>127 || val<-128) /* Test for overflow. */
352 1.6 christos (*link_info->callbacks->reloc_overflow)
353 1.6 christos (link_info, NULL, bfd_asymbol_name (*reloc->sym_ptr_ptr),
354 1.6 christos reloc->howto->name, reloc->addend, input_section->owner,
355 1.6 christos input_section, reloc->address);
356 1.6 christos
357 1.1 christos bfd_put_8 (in_abfd, val, data + *dst_ptr);
358 1.1 christos (*dst_ptr) += 1;
359 1.1 christos (*src_ptr) += 1;
360 1.1 christos break;
361 1.1 christos
362 1.9 christos case R_BYTE3:
363 1.9 christos bfd_put_8 (in_abfd, val >> 24, data + *dst_ptr);
364 1.9 christos (*dst_ptr) += 1;
365 1.9 christos (*src_ptr) += 1;
366 1.9 christos break;
367 1.9 christos
368 1.9 christos case R_BYTE2:
369 1.9 christos bfd_put_8 (in_abfd, val >> 16, data + *dst_ptr);
370 1.9 christos (*dst_ptr) += 1;
371 1.9 christos (*src_ptr) += 1;
372 1.9 christos break;
373 1.9 christos
374 1.9 christos case R_BYTE1:
375 1.9 christos bfd_put_8 (in_abfd, val >> 8, data + *dst_ptr);
376 1.9 christos (*dst_ptr) += 1;
377 1.9 christos (*src_ptr) += 1;
378 1.9 christos break;
379 1.9 christos
380 1.1 christos case R_IMM8:
381 1.9 christos if (reloc->howto->partial_inplace)
382 1.9 christos val += bfd_get_8 ( in_abfd, data+*src_ptr) & reloc->howto->src_mask;
383 1.9 christos /* Fall through. */
384 1.9 christos case R_BYTE0:
385 1.1 christos bfd_put_8 (in_abfd, val, data + *dst_ptr);
386 1.1 christos (*dst_ptr) += 1;
387 1.1 christos (*src_ptr) += 1;
388 1.1 christos break;
389 1.1 christos
390 1.9 christos case R_WORD1:
391 1.9 christos bfd_put_16 (in_abfd, val >> 16, data + *dst_ptr);
392 1.9 christos (*dst_ptr) += 2;
393 1.9 christos (*src_ptr) += 2;
394 1.9 christos break;
395 1.9 christos
396 1.1 christos case R_IMM16:
397 1.9 christos if (reloc->howto->partial_inplace)
398 1.9 christos val += bfd_get_16 ( in_abfd, data+*src_ptr) & reloc->howto->src_mask;
399 1.9 christos /* Fall through. */
400 1.9 christos case R_WORD0:
401 1.1 christos bfd_put_16 (in_abfd, val, data + *dst_ptr);
402 1.1 christos (*dst_ptr) += 2;
403 1.1 christos (*src_ptr) += 2;
404 1.1 christos break;
405 1.1 christos
406 1.1 christos case R_IMM24:
407 1.9 christos if (reloc->howto->partial_inplace)
408 1.10 christos val += (bfd_get_24 (in_abfd, data + *src_ptr)
409 1.10 christos & reloc->howto->src_mask);
410 1.10 christos bfd_put_24 (in_abfd, val, data + *dst_ptr);
411 1.1 christos (*dst_ptr) += 3;
412 1.1 christos (*src_ptr) += 3;
413 1.1 christos break;
414 1.1 christos
415 1.1 christos case R_IMM32:
416 1.9 christos if (reloc->howto->partial_inplace)
417 1.9 christos val += bfd_get_32 ( in_abfd, data+*src_ptr) & reloc->howto->src_mask;
418 1.1 christos bfd_put_32 (in_abfd, val, data + *dst_ptr);
419 1.1 christos (*dst_ptr) += 4;
420 1.1 christos (*src_ptr) += 4;
421 1.1 christos break;
422 1.1 christos
423 1.1 christos case R_JR:
424 1.1 christos {
425 1.9 christos if (reloc->howto->partial_inplace)
426 1.9 christos val += (signed char)(bfd_get_8 ( in_abfd, data+*src_ptr)
427 1.9 christos & reloc->howto->src_mask);
428 1.1 christos bfd_vma dot = (*dst_ptr
429 1.1 christos + input_section->output_offset
430 1.1 christos + input_section->output_section->vma);
431 1.9 christos int gap = val - dot;
432 1.1 christos if (gap >= 128 || gap < -128)
433 1.6 christos (*link_info->callbacks->reloc_overflow)
434 1.6 christos (link_info, NULL, bfd_asymbol_name (*reloc->sym_ptr_ptr),
435 1.6 christos reloc->howto->name, reloc->addend, input_section->owner,
436 1.6 christos input_section, reloc->address);
437 1.6 christos
438 1.1 christos bfd_put_8 (in_abfd, gap, data + *dst_ptr);
439 1.1 christos (*dst_ptr)++;
440 1.1 christos (*src_ptr)++;
441 1.1 christos break;
442 1.1 christos }
443 1.1 christos
444 1.9 christos case R_IMM16BE:
445 1.9 christos if (reloc->howto->partial_inplace)
446 1.9 christos val += (bfd_get_8 ( in_abfd, data+*src_ptr+0) * 0x100 +
447 1.9 christos bfd_get_8 ( in_abfd, data+*src_ptr+1)) & reloc->howto->src_mask;
448 1.9 christos
449 1.9 christos bfd_put_8 (in_abfd, val >> 8, data + *dst_ptr+0);
450 1.9 christos bfd_put_8 (in_abfd, val, data + *dst_ptr+1);
451 1.9 christos (*dst_ptr) += 2;
452 1.9 christos (*src_ptr) += 2;
453 1.9 christos break;
454 1.9 christos
455 1.1 christos default:
456 1.1 christos abort ();
457 1.1 christos }
458 1.1 christos }
459 1.1 christos
460 1.10 christos static bool
461 1.9 christos z80_is_local_label_name (bfd * abfd ATTRIBUTE_UNUSED,
462 1.9 christos const char * name)
463 1.9 christos {
464 1.9 christos return (name[0] == '.' && name[1] == 'L') ||
465 1.9 christos _bfd_coff_is_local_label_name (abfd, name);
466 1.9 christos }
467 1.9 christos
468 1.9 christos #define coff_bfd_is_local_label_name z80_is_local_label_name
469 1.9 christos
470 1.1 christos #define coff_reloc16_extra_cases extra_case
471 1.1 christos #define coff_bfd_reloc_type_lookup coff_z80_reloc_type_lookup
472 1.1 christos #define coff_bfd_reloc_name_lookup coff_z80_reloc_name_lookup
473 1.1 christos
474 1.1 christos #ifndef bfd_pe_print_pdata
475 1.1 christos #define bfd_pe_print_pdata NULL
476 1.1 christos #endif
477 1.1 christos
478 1.1 christos #include "coffcode.h"
479 1.1 christos
480 1.1 christos #undef coff_bfd_get_relocated_section_contents
481 1.1 christos #define coff_bfd_get_relocated_section_contents \
482 1.1 christos bfd_coff_reloc16_get_relocated_section_contents
483 1.1 christos
484 1.1 christos #undef coff_bfd_relax_section
485 1.1 christos #define coff_bfd_relax_section bfd_coff_reloc16_relax_section
486 1.1 christos
487 1.3 christos CREATE_LITTLE_COFF_TARGET_VEC (z80_coff_vec, "coff-z80", 0,
488 1.1 christos SEC_CODE | SEC_DATA, '\0', NULL,
489 1.1 christos COFF_SWAP_TABLE)
490 1.1 christos
491