Initial revision
[deliverable/binutils-gdb.git] / bfd / aoutf1.h
CommitLineData
3c8a3c56
JG
1/* A.out "format 1" file handling code
2 Copyright (C) 1990-1991 Free Software Foundation, Inc.
3 Written by Cygnus Support.
7ed4093a 4
3c8a3c56 5This file is part of BFD, the Binary File Descriptor library.
7ed4093a 6
3c8a3c56 7This program is free software; you can redistribute it and/or modify
7ed4093a 8it under the terms of the GNU General Public License as published by
3c8a3c56
JG
9the Free Software Foundation; either version 2 of the License, or
10(at your option) any later version.
7ed4093a 11
3c8a3c56 12This program is distributed in the hope that it will be useful,
7ed4093a
SC
13but WITHOUT ANY WARRANTY; without even the implied warranty of
14MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15GNU General Public License for more details.
16
17You should have received a copy of the GNU General Public License
3c8a3c56
JG
18along with this program; if not, write to the Free Software
19Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
6f715d66 20
7ed4093a 21#include "bfd.h"
bbc8d484 22#include "sysdep.h"
7ed4093a
SC
23#include "libbfd.h"
24
bbc8d484
JG
25#include <a.out.sun4.h>
26#include "libaout.h"
27
7ed4093a
SC
28#include "aout64.h"
29#include "stab.gnu.h"
30#include "ar.h"
31
6f715d66 32/*
6f715d66
SC
33The file @code{aoutf1.h} contains the code for BFD's
34a.out back end. Control over the generated back end is given by these
4f8b8627 35two preprocessor names:
6f715d66 36@table @code
4f8b8627 37@item ARCH_SIZE
6f715d66
SC
38This value should be either 32 or 64, depending upon the size of an
39int in the target format. It changes the sizes of the structs which
40perform the memory/disk mapping of structures.
41
42The 64 bit backend may only be used if the host compiler supports 64
4f8b8627
JG
43ints (eg long long with gcc), by defining the name @code{HOST_64_BIT} in @code{bfd.h}.
44With this name defined, @emph{all} bfd operations are performed with 64bit
6f715d66
SC
45arithmetic, not just those to a 64bit target.
46
47@item TARGETNAME
4f8b8627 48The name put into the target vector.
6f715d66 49@item
4f8b8627 50@end table
6f715d66
SC
51
52*/
7ed4093a
SC
53
54void (*bfd_error_trap)();
55
56static bfd_target *sunos4_callback ();
57
58/*SUPPRESS558*/
59/*SUPPRESS529*/
60
61bfd_target *
62DEFUN(NAME(sunos,object_p), (abfd),
63 bfd *abfd)
64{
bbc8d484
JG
65 struct external_exec exec_bytes; /* Raw exec header from file */
66 struct internal_exec exec; /* Cleaned-up exec header */
7ed4093a 67
bbc8d484
JG
68 if (bfd_read ((PTR) &exec_bytes, 1, EXEC_BYTES_SIZE, abfd)
69 != EXEC_BYTES_SIZE) {
70 bfd_error = wrong_format;
7ed4093a 71 return 0;
bbc8d484
JG
72 }
73
74 exec.a_info = bfd_h_get_32 (abfd, exec_bytes.e_info);
75
76 if (N_BADMAG (exec)) return 0;
7ed4093a 77
bbc8d484 78 NAME(aout,swap_exec_header_in)(abfd, &exec_bytes, &exec);
7ed4093a 79
bbc8d484 80 return NAME(aout,some_aout_object_p) (abfd, &exec, sunos4_callback);
7ed4093a
SC
81}
82
83 /* Determine the size of a relocation entry, based on the architecture */
84static void
85DEFUN(choose_reloc_size,(abfd),
86bfd *abfd)
9e2dad8e
JG
87{
88 switch (bfd_get_arch(abfd)) {
89 case bfd_arch_sparc:
90 case bfd_arch_a29k:
91 obj_reloc_entry_size (abfd) = RELOC_EXT_SIZE;
92 break;
93 default:
94 obj_reloc_entry_size (abfd) = RELOC_STD_SIZE;
95 break;
7ed4093a 96 }
9e2dad8e 97}
7ed4093a
SC
98
99/* Set parameters about this a.out file that are machine-dependent.
100 This routine is called from some_aout_object_p just before it returns. */
101
102static bfd_target *
103sunos4_callback (abfd)
104 bfd *abfd;
105{
106 struct internal_exec *execp = exec_hdr (abfd);
9e2dad8e
JG
107 enum bfd_architecture arch;
108 long machine;
7ed4093a 109 WORK_OUT_FILE_POSITIONS(abfd, execp);
c0e5039e 110
7ed4093a
SC
111 /* Determine the architecture and machine type of the object file. */
112 switch (N_MACHTYPE (*exec_hdr (abfd))) {
9e2dad8e 113
7ed4093a 114 case M_UNKNOWN:
9e2dad8e
JG
115 arch = bfd_arch_unknown;
116 machine = 0;
7ed4093a
SC
117 break;
118
119 case M_68010:
9e2dad8e
JG
120 arch = bfd_arch_m68k;
121 machine = 68010;
7ed4093a
SC
122 break;
123
124 case M_68020:
9e2dad8e
JG
125 arch = bfd_arch_m68k;
126 machine = 68020;
7ed4093a
SC
127 break;
128
129 case M_SPARC:
9e2dad8e
JG
130 arch = bfd_arch_sparc;
131 machine = 0;
7ed4093a
SC
132 break;
133
134 case M_386:
9e2dad8e
JG
135 arch = bfd_arch_i386;
136 machine = 0;
7ed4093a
SC
137 break;
138
139 case M_29K:
9e2dad8e
JG
140 arch = bfd_arch_a29k;
141 machine = 0;
7ed4093a
SC
142 break;
143
144 default:
9e2dad8e
JG
145 arch = bfd_arch_obscure;
146 machine = 0;
7ed4093a
SC
147 break;
148 }
9e2dad8e 149 bfd_set_arch_mach(abfd, arch, machine);
7ed4093a
SC
150 choose_reloc_size(abfd);
151 return abfd->xvec;
152}
153
154
155/* Write an object file in SunOS format.
9e2dad8e
JG
156 Section contents have already been written. We write the
157 file header, symbols, and relocation. */
7ed4093a
SC
158
159boolean
9e2dad8e
JG
160DEFUN(NAME(aout,sunos4_write_object_contents),
161 (abfd),
7ed4093a 162 bfd *abfd)
9e2dad8e
JG
163{
164 bfd_size_type data_pad = 0;
165 struct external_exec exec_bytes;
166 struct internal_exec *execp = exec_hdr (abfd);
7ed4093a 167
9e2dad8e 168 execp->a_text = obj_textsec (abfd)->size;
7ed4093a 169
9e2dad8e
JG
170 /* Magic number, maestro, please! */
171 switch (bfd_get_arch(abfd)) {
172 case bfd_arch_m68k:
173 switch (bfd_get_mach(abfd)) {
174 case 68010:
175 N_SET_MACHTYPE(*execp, M_68010);
7ed4093a
SC
176 break;
177 default:
9e2dad8e
JG
178 case 68020:
179 N_SET_MACHTYPE(*execp, M_68020);
180 break;
7ed4093a 181 }
9e2dad8e
JG
182 break;
183 case bfd_arch_sparc:
184 N_SET_MACHTYPE(*execp, M_SPARC);
185 break;
186 case bfd_arch_i386:
187 N_SET_MACHTYPE(*execp, M_386);
188 break;
189 case bfd_arch_a29k:
190 N_SET_MACHTYPE(*execp, M_29K);
191 break;
192 default:
193 N_SET_MACHTYPE(*execp, M_UNKNOWN);
194 }
7ed4093a 195
9e2dad8e
JG
196 choose_reloc_size(abfd);
197
198 /* FIXME */
199 N_SET_FLAGS (*execp, 0x1);
200
201 WRITE_HEADERS(abfd, execp);
7ed4093a 202
7ed4093a
SC
203 return true;
204}
205\f
206/* core files */
207
208#define CORE_MAGIC 0x080456
209#define CORE_NAMELEN 16
210
211/* The core structure is taken from the Sun documentation.
9e2dad8e
JG
212 Unfortunately, they don't document the FPA structure, or at least I
213 can't find it easily. Fortunately the core header contains its own
214 length. So this shouldn't cause problems, except for c_ucode, which
215 so far we don't use but is easy to find with a little arithmetic. */
7ed4093a
SC
216
217/* But the reg structure can be gotten from the SPARC processor handbook.
9e2dad8e
JG
218 This really should be in a GNU include file though so that gdb can use
219 the same info. */
7ed4093a
SC
220struct regs {
221 int r_psr;
222 int r_pc;
223 int r_npc;
224 int r_y;
225 int r_g1;
226 int r_g2;
227 int r_g3;
228 int r_g4;
229 int r_g5;
230 int r_g6;
231 int r_g7;
232 int r_o0;
233 int r_o1;
234 int r_o2;
235 int r_o3;
236 int r_o4;
237 int r_o5;
238 int r_o6;
239 int r_o7;
240};
241
242/* Taken from Sun documentation: */
243
244/* FIXME: It's worse than we expect. This struct contains TWO substructs
9e2dad8e
JG
245 neither of whose size we know, WITH STUFF IN BETWEEN THEM! We can't
246 even portably access the stuff in between! */
7ed4093a 247
4f8b8627 248struct external_sparc_core {
7ed4093a
SC
249 int c_magic; /* Corefile magic number */
250 int c_len; /* Sizeof (struct core) */
4f8b8627
JG
251#define SPARC_CORE_LEN 432
252 int c_regs[19]; /* General purpose registers -- MACHDEP SIZE */
9e2dad8e
JG
253 struct external_exec c_aouthdr; /* A.out header */
254 int c_signo; /* Killing signal, if any */
255 int c_tsize; /* Text size (bytes) */
256 int c_dsize; /* Data size (bytes) */
257 int c_ssize; /* Stack size (bytes) */
7ed4093a
SC
258 char c_cmdname[CORE_NAMELEN + 1]; /* Command name */
259 double fp_stuff[1]; /* external FPU state (size unknown by us) */
260 /* The type "double" is critical here, for alignment.
261 SunOS declares a struct here, but the struct's alignment
262 is double since it contains doubles. */
263 int c_ucode; /* Exception no. from u_code */
264 /* (this member is not accessible by name since we don't
265 portably know the size of fp_stuff.) */
266};
267
4f8b8627
JG
268struct external_sun3_core {
269 int c_magic; /* Corefile magic number */
270 int c_len; /* Sizeof (struct core) */
271#define SUN3_CORE_LEN 826 /* As of SunOS 4.1.1 */
272 int c_regs[18]; /* General purpose registers -- MACHDEP SIZE */
273 struct external_exec c_aouthdr; /* A.out header */
274 int c_signo; /* Killing signal, if any */
275 int c_tsize; /* Text size (bytes) */
276 int c_dsize; /* Data size (bytes) */
277 int c_ssize; /* Stack size (bytes) */
278 char c_cmdname[CORE_NAMELEN + 1]; /* Command name */
279 double fp_stuff[1]; /* external FPU state (size unknown by us) */
280 /* The type "double" is critical here, for alignment.
281 SunOS declares a struct here, but the struct's alignment
282 is double since it contains doubles. */
283 int c_ucode; /* Exception no. from u_code */
284 /* (this member is not accessible by name since we don't
285 portably know the size of fp_stuff.) */
286};
287
288struct internal_sunos_core {
289 int c_magic; /* Corefile magic number */
290 int c_len; /* Sizeof (struct core) */
291 long c_regs_pos; /* file offset of General purpose registers */
292 int c_regs_size; /* size of General purpose registers */
9e2dad8e
JG
293 struct internal_exec c_aouthdr; /* A.out header */
294 int c_signo; /* Killing signal, if any */
295 int c_tsize; /* Text size (bytes) */
296 int c_dsize; /* Data size (bytes) */
297 int c_ssize; /* Stack size (bytes) */
298 long c_stacktop; /* Stack top (address) */
4f8b8627
JG
299 char c_cmdname[CORE_NAMELEN + 1]; /* Command name */
300 long fp_stuff_pos; /* file offset of external FPU state (regs) */
301 int fp_stuff_size; /* Size of it */
302 int c_ucode; /* Exception no. from u_code */
303};
7ed4093a 304
4f8b8627
JG
305/* byte-swap in the Sun-3 core structure */
306static void
307DEFUN(swapcore_sun3,(abfd, ext, intcore),
308 bfd *abfd AND
12e7087f 309 char *ext AND
4f8b8627
JG
310 struct internal_sunos_core *intcore)
311{
4f8b8627 312 struct external_sun3_core *extcore = (struct external_sun3_core *)ext;
9e2dad8e 313
4f8b8627
JG
314 intcore->c_magic = bfd_h_get_32 (abfd, (unsigned char *)&extcore->c_magic);
315 intcore->c_len = bfd_h_get_32 (abfd, (unsigned char *)&extcore->c_len );
316 intcore->c_regs_pos = (long) (((struct external_sun3_core *)0)->c_regs);
317 intcore->c_regs_size = sizeof (extcore->c_regs);
318 NAME(aout,swap_exec_header_in)(abfd, &extcore->c_aouthdr,&intcore->c_aouthdr);
319 intcore->c_signo = bfd_h_get_32 (abfd, (unsigned char *)&extcore->c_signo);
320 intcore->c_tsize = bfd_h_get_32 (abfd, (unsigned char *)&extcore->c_tsize);
321 intcore->c_dsize = bfd_h_get_32 (abfd, (unsigned char *)&extcore->c_dsize);
322 intcore->c_ssize = bfd_h_get_32 (abfd, (unsigned char *)&extcore->c_ssize);
323 bcopy (extcore->c_cmdname, intcore->c_cmdname, sizeof (intcore->c_cmdname));
324 intcore->fp_stuff_pos = (long) (((struct external_sun3_core *)0)->fp_stuff);
325 /* FP stuff takes up whole rest of struct, except c_ucode. */
326 intcore->fp_stuff_size = intcore->c_len - (sizeof extcore->c_ucode) -
327 (file_ptr)(((struct external_sun3_core *)0)->fp_stuff);
328 /* Ucode is the last thing in the struct -- just before the end */
9e2dad8e
JG
329 intcore->c_ucode =
330 bfd_h_get_32 (abfd,
331 intcore->c_len - sizeof (extcore->c_ucode) + (unsigned char *)extcore);
332 intcore->c_stacktop = 0x0E000000; /* By experimentation */
4f8b8627
JG
333}
334
335
fb3be09b 336/* byte-swap in the Sparc core structure */
4f8b8627
JG
337static void
338DEFUN(swapcore_sparc,(abfd, ext, intcore),
339 bfd *abfd AND
12e7087f 340 char *ext AND
4f8b8627
JG
341 struct internal_sunos_core *intcore)
342{
343 struct external_sparc_core *extcore = (struct external_sparc_core *)ext;
344
345 intcore->c_magic = bfd_h_get_32 (abfd, (unsigned char *)&extcore->c_magic);
346 intcore->c_len = bfd_h_get_32 (abfd, (unsigned char *)&extcore->c_len );
347 intcore->c_regs_pos = (long) (((struct external_sparc_core *)0)->c_regs);
348 intcore->c_regs_size = sizeof (extcore->c_regs);
349 NAME(aout,swap_exec_header_in)(abfd, &extcore->c_aouthdr,&intcore->c_aouthdr);
350 intcore->c_signo = bfd_h_get_32 (abfd, (unsigned char *)&extcore->c_signo);
351 intcore->c_tsize = bfd_h_get_32 (abfd, (unsigned char *)&extcore->c_tsize);
352 intcore->c_dsize = bfd_h_get_32 (abfd, (unsigned char *)&extcore->c_dsize);
353 intcore->c_ssize = bfd_h_get_32 (abfd, (unsigned char *)&extcore->c_ssize);
354 bcopy (extcore->c_cmdname, intcore->c_cmdname, sizeof (intcore->c_cmdname));
355 intcore->fp_stuff_pos = (long) (((struct external_sparc_core *)0)->fp_stuff);
356 /* FP stuff takes up whole rest of struct, except c_ucode. */
357 intcore->fp_stuff_size = intcore->c_len - (sizeof extcore->c_ucode) -
358 (file_ptr)(((struct external_sparc_core *)0)->fp_stuff);
359 /* Ucode is the last thing in the struct -- just before the end */
9e2dad8e
JG
360 intcore->c_ucode =
361 bfd_h_get_32 (abfd,
362 intcore->c_len - sizeof (extcore->c_ucode) + (unsigned char *)extcore);
4f8b8627
JG
363 /* Supposedly the user stack grows downward from the bottom of kernel memory.
364 Presuming that this remains true, this definition will work. */
fb3be09b
JG
365#define SPARC_USRSTACK (-(128*1024*1024))
366 intcore->c_stacktop = SPARC_USRSTACK; /* By experimentation */
4f8b8627 367}
7ed4093a 368
4f8b8627
JG
369/* need this cast because ptr is really void * */
370#define core_hdr(bfd) (((struct suncoredata *) (bfd->tdata))->hdr)
371#define core_datasec(bfd) (((struct suncoredata *) ((bfd)->tdata))->data_section)
372#define core_stacksec(bfd) (((struct suncoredata*)((bfd)->tdata))->stack_section)
373#define core_regsec(bfd) (((struct suncoredata *) ((bfd)->tdata))->reg_section)
374#define core_reg2sec(bfd) (((struct suncoredata *) ((bfd)->tdata))->reg2_section)
7ed4093a
SC
375
376/* These are stored in the bfd's tdata */
4f8b8627
JG
377struct suncoredata {
378 struct internal_sunos_core *hdr; /* core file header */
379 asection *data_section;
380 asection *stack_section;
381 asection *reg_section;
382 asection *reg2_section;
7ed4093a
SC
383};
384
385static bfd_target *
386DEFUN(sunos4_core_file_p,(abfd),
387 bfd *abfd)
388{
389 unsigned char longbuf[4]; /* Raw bytes of various header fields */
390 int core_size;
391 int core_mag;
4f8b8627
JG
392 struct internal_sunos_core *core;
393 char *extcore;
4f8b8627
JG
394 struct mergem {
395 struct suncoredata suncoredata;
396 struct internal_sunos_core internal_sunos_core;
397 char external_core[1];
398 } *mergem;
7ed4093a
SC
399
400 bfd_error = system_call_error;
401
402 if (bfd_read ((PTR)longbuf, 1, sizeof (longbuf), abfd) !=
403 sizeof (longbuf))
404 return 0;
405 core_mag = bfd_h_get_32 (abfd, longbuf);
406
407 if (core_mag != CORE_MAGIC) return 0;
408
409 /* SunOS core headers can vary in length; second word is size; */
410 if (bfd_read ((PTR)longbuf, 1, sizeof (longbuf), abfd) !=
411 sizeof (longbuf))
412 return 0;
413 core_size = bfd_h_get_32 (abfd, longbuf);
414 /* Sanity check */
415 if (core_size > 20000)
416 return 0;
417
418 if (bfd_seek (abfd, 0L, false) < 0) return 0;
419
4f8b8627
JG
420 mergem = (struct mergem *)bfd_zalloc (abfd, core_size + sizeof (struct mergem));
421 if (mergem == NULL) {
7ed4093a
SC
422 bfd_error = no_memory;
423 return 0;
424 }
425
4f8b8627 426 extcore = mergem->external_core;
7ed4093a 427
4f8b8627 428 if ((bfd_read ((PTR) extcore, 1, core_size, abfd)) != core_size) {
7ed4093a 429 bfd_error = system_call_error;
4f8b8627
JG
430 bfd_release (abfd, (char *)mergem);
431 return 0;
432 }
433
434 /* Validate that it's a core file we know how to handle, due to sun
435 botching the positioning of registers and other fields in a machine
436 dependent way. */
437 core = &mergem->internal_sunos_core;
438 switch (core_size) {
439 case SPARC_CORE_LEN:
440 swapcore_sparc (abfd, extcore, core);
441 break;
442 case SUN3_CORE_LEN:
443 swapcore_sun3 (abfd, extcore, core);
444 break;
445 default:
446 bfd_error = system_call_error; /* FIXME */
447 bfd_release (abfd, (char *)mergem);
7ed4093a
SC
448 return 0;
449 }
450
4f8b8627 451 set_tdata (abfd, &mergem->suncoredata);
7ed4093a
SC
452 core_hdr (abfd) = core;
453
454 /* create the sections. This is raunchy, but bfd_close wants to reclaim
455 them */
456 core_stacksec (abfd) = (asection *) bfd_zalloc (abfd, sizeof (asection));
457 if (core_stacksec (abfd) == NULL) {
458 loser:
459 bfd_error = no_memory;
fb3be09b 460 bfd_release (abfd, (char *)mergem);
7ed4093a
SC
461 return 0;
462 }
463 core_datasec (abfd) = (asection *) bfd_zalloc (abfd, sizeof (asection));
464 if (core_datasec (abfd) == NULL) {
465 loser1:
466 bfd_release (abfd, core_stacksec (abfd));
467 goto loser;
468 }
469 core_regsec (abfd) = (asection *) bfd_zalloc (abfd, sizeof (asection));
470 if (core_regsec (abfd) == NULL) {
471 loser2:
472 bfd_release (abfd, core_datasec (abfd));
473 goto loser1;
474 }
475 core_reg2sec (abfd) = (asection *) bfd_zalloc (abfd, sizeof (asection));
476 if (core_reg2sec (abfd) == NULL) {
477 bfd_release (abfd, core_regsec (abfd));
478 goto loser2;
479 }
480
481 core_stacksec (abfd)->name = ".stack";
482 core_datasec (abfd)->name = ".data";
483 core_regsec (abfd)->name = ".reg";
484 core_reg2sec (abfd)->name = ".reg2";
485
12e7087f
JG
486 core_stacksec (abfd)->flags = SEC_ALLOC + SEC_LOAD + SEC_HAS_CONTENTS;
487 core_datasec (abfd)->flags = SEC_ALLOC + SEC_LOAD + SEC_HAS_CONTENTS;
488 core_regsec (abfd)->flags = SEC_ALLOC + SEC_HAS_CONTENTS;
489 core_reg2sec (abfd)->flags = SEC_ALLOC + SEC_HAS_CONTENTS;
7ed4093a
SC
490
491 core_stacksec (abfd)->size = core->c_ssize;
492 core_datasec (abfd)->size = core->c_dsize;
4f8b8627
JG
493 core_regsec (abfd)->size = core->c_regs_size;
494 core_reg2sec (abfd)->size = core->fp_stuff_size;
7ed4093a 495
4f8b8627 496 core_stacksec (abfd)->vma = (core->c_stacktop - core->c_ssize);
7ed4093a
SC
497 core_datasec (abfd)->vma = N_DATADDR(core->c_aouthdr);
498 core_regsec (abfd)->vma = -1;
499 core_reg2sec (abfd)->vma = -1;
500
501 core_stacksec (abfd)->filepos = core->c_len + core->c_dsize;
502 core_datasec (abfd)->filepos = core->c_len;
4f8b8627
JG
503 /* We'll access the regs afresh in the core file, like any section: */
504 core_regsec (abfd)->filepos = (file_ptr)core->c_regs_pos;
505 core_reg2sec (abfd)->filepos = (file_ptr)core->fp_stuff_pos;
7ed4093a
SC
506
507 /* Align to word at least */
508 core_stacksec (abfd)->alignment_power = 2;
509 core_datasec (abfd)->alignment_power = 2;
510 core_regsec (abfd)->alignment_power = 2;
511 core_reg2sec (abfd)->alignment_power = 2;
512
513 abfd->sections = core_stacksec (abfd);
514 core_stacksec (abfd)->next = core_datasec (abfd);
515 core_datasec (abfd)->next = core_regsec (abfd);
516 core_regsec (abfd)->next = core_reg2sec (abfd);
517
518 abfd->section_count = 4;
519
520 return abfd->xvec;
521}
522
523static char *sunos4_core_file_failing_command (abfd)
524bfd *abfd;
525 {
526 return core_hdr (abfd)->c_cmdname;
527}
528
529static int
530DEFUN(sunos4_core_file_failing_signal,(abfd),
531 bfd *abfd)
532{
533 return core_hdr (abfd)->c_signo;
534}
535
536static boolean
537DEFUN(sunos4_core_file_matches_executable_p, (core_bfd, exec_bfd),
538 bfd *core_bfd AND
539 bfd *exec_bfd)
540{
541 if (core_bfd->xvec != exec_bfd->xvec) {
542 bfd_error = system_call_error;
543 return false;
544 }
545
fb3be09b
JG
546 return (bcmp ((char *)&core_hdr (core_bfd)->c_aouthdr,
547 (char *) exec_hdr (exec_bfd),
7ed4093a
SC
548 sizeof (struct internal_exec)) == 0) ? true : false;
549}
7ed4093a
SC
550\f
551/* We use BFD generic archive files. */
552#define aout_32_openr_next_archived_file bfd_generic_openr_next_archived_file
553#define aout_32_generic_stat_arch_elt bfd_generic_stat_arch_elt
554#define aout_32_slurp_armap bfd_slurp_bsd_armap
555#define aout_32_slurp_extended_name_table bfd_true
556#define aout_32_write_armap bsd_write_armap
557#define aout_32_truncate_arname bfd_bsd_truncate_arname
558#define aout_32_machine_type sunos_machine_type
559
560#define aout_32_core_file_failing_command sunos4_core_file_failing_command
561#define aout_32_core_file_failing_signal sunos4_core_file_failing_signal
562#define aout_32_core_file_matches_executable_p sunos4_core_file_matches_executable_p
563
564
565#define aout_64_openr_next_archived_file bfd_generic_openr_next_archived_file
566#define aout_64_generic_stat_arch_elt bfd_generic_stat_arch_elt
567#define aout_64_slurp_armap bfd_slurp_bsd_armap
568#define aout_64_slurp_extended_name_table bfd_true
569#define aout_64_write_armap bsd_write_armap
570#define aout_64_truncate_arname bfd_bsd_truncate_arname
571#define aout_64_machine_type sunos_machine_type
572
573#define aout_64_core_file_failing_command sunos4_core_file_failing_command
574#define aout_64_core_file_failing_signal sunos4_core_file_failing_signal
575#define aout_64_core_file_matches_executable_p sunos4_core_file_matches_executable_p
576
6f715d66
SC
577#define aout_64_bfd_debug_info_start bfd_void
578#define aout_64_bfd_debug_info_end bfd_void
579#define aout_64_bfd_debug_info_accumulate bfd_void
580
581#define aout_32_bfd_debug_info_start bfd_void
582#define aout_32_bfd_debug_info_end bfd_void
3c8a3c56 583#define aout_32_bfd_debug_info_accumulate (PROTO(void,(*),(bfd*, struct sec *))) bfd_void
6f715d66
SC
584
585
586
7ed4093a
SC
587/* We implement these routines ourselves, rather than using the generic
588a.out versions. */
589#define aout_write_object_contents sunos4_write_object_contents
590
591bfd_target VECNAME =
592 {
6f715d66 593 TARGETNAME,
9e2dad8e 594 bfd_target_aout_flavour,
6f715d66
SC
595 true, /* target byte order */
596 true, /* target headers byte order */
597 (HAS_RELOC | EXEC_P | /* object flags */
598 HAS_LINENO | HAS_DEBUG |
599 HAS_SYMS | HAS_LOCALS | DYNAMIC | WP_TEXT | D_PAGED),
600 (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC), /* section flags */
601 ' ', /* ar_pad_char */
602 16, /* ar_max_namelen */
603 3, /* minimum alignment power */
604 _do_getb64, _do_putb64, _do_getb32, _do_putb32, _do_getb16, _do_putb16, /* data */
605 _do_getb64, _do_putb64, _do_getb32, _do_putb32, _do_getb16, _do_putb16, /* hdrs */
606
607 {_bfd_dummy_target, NAME(sunos,object_p),
608 bfd_generic_archive_p, sunos4_core_file_p},
609 {bfd_false, NAME(aout,mkobject),
610 _bfd_generic_mkarchive, bfd_false},
611 {bfd_false, NAME(aout,sunos4_write_object_contents), /* bfd_write_contents */
612 _bfd_write_archive_contents, bfd_false},
613
614 JUMP_TABLE(JNAME(aout))
615 };
This page took 0.055546 seconds and 4 git commands to generate.