* aout-target.h (MY_bfd_debug_info_start, MY_bfd_debug_info_end,
[deliverable/binutils-gdb.git] / bfd / aoutf1.h
CommitLineData
250351fc
JK
1/* A.out "format 1" file handling code for BFD.
2 Copyright 1990, 1991, 1992 Free Software Foundation, Inc.
3c8a3c56 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
c3eb25fc
SC
25#include "aout/sun4.h"
26#include "libaout.h" /* BFD a.out internal data structures */
bbc8d484 27
c3eb25fc
SC
28#include "aout/aout64.h"
29#include "aout/stab_gnu.h"
30#include "aout/ar.h"
7ed4093a 31
a40fe908
JK
32/* This is needed to reject a NewsOS file, e.g. in
33 gdb/testsuite/gdb.t10/crossload.exp. */
34#define MACHTYPE_OK(mtype) ((mtype) == M_68010 || (mtype) == M_68020 \
35 || (mtype) == M_SPARC)
36
6f715d66 37/*
6f715d66
SC
38The file @code{aoutf1.h} contains the code for BFD's
39a.out back end. Control over the generated back end is given by these
4f8b8627 40two preprocessor names:
6f715d66 41@table @code
4f8b8627 42@item ARCH_SIZE
6f715d66
SC
43This value should be either 32 or 64, depending upon the size of an
44int in the target format. It changes the sizes of the structs which
45perform the memory/disk mapping of structures.
46
47The 64 bit backend may only be used if the host compiler supports 64
4f8b8627
JG
48ints (eg long long with gcc), by defining the name @code{HOST_64_BIT} in @code{bfd.h}.
49With this name defined, @emph{all} bfd operations are performed with 64bit
6f715d66
SC
50arithmetic, not just those to a 64bit target.
51
52@item TARGETNAME
4f8b8627 53The name put into the target vector.
6f715d66 54@item
4f8b8627 55@end table
6f715d66
SC
56
57*/
7ed4093a
SC
58
59void (*bfd_error_trap)();
60
7ed4093a
SC
61/*SUPPRESS558*/
62/*SUPPRESS529*/
63
214f8f23
KR
64void
65DEFUN(NAME(sunos,set_arch_mach), (abfd, machtype),
66 bfd *abfd AND int machtype)
7ed4093a 67{
214f8f23 68 /* Determine the architecture and machine type of the object file. */
9e2dad8e
JG
69 enum bfd_architecture arch;
70 long machine;
214f8f23 71 switch (machtype) {
9e2dad8e 72
7ed4093a 73 case M_UNKNOWN:
c3eb25fc
SC
74 /* Some Sun3s make magic numbers without cpu types in them, so
75 we'll default to the 68020. */
76 arch = bfd_arch_m68k;
77 machine = 68020;
7ed4093a
SC
78 break;
79
80 case M_68010:
522e0ead 81 case M_HP200:
9e2dad8e
JG
82 arch = bfd_arch_m68k;
83 machine = 68010;
7ed4093a
SC
84 break;
85
86 case M_68020:
522e0ead 87 case M_HP300:
9e2dad8e
JG
88 arch = bfd_arch_m68k;
89 machine = 68020;
7ed4093a
SC
90 break;
91
92 case M_SPARC:
9e2dad8e
JG
93 arch = bfd_arch_sparc;
94 machine = 0;
7ed4093a
SC
95 break;
96
97 case M_386:
9e2dad8e
JG
98 arch = bfd_arch_i386;
99 machine = 0;
7ed4093a
SC
100 break;
101
102 case M_29K:
9e2dad8e
JG
103 arch = bfd_arch_a29k;
104 machine = 0;
7ed4093a
SC
105 break;
106
522e0ead
SC
107 case M_HPUX:
108 arch = bfd_arch_m68k;
109 machine = 0;
110 break;
111
7ed4093a 112 default:
9e2dad8e
JG
113 arch = bfd_arch_obscure;
114 machine = 0;
7ed4093a
SC
115 break;
116 }
9e2dad8e 117 bfd_set_arch_mach(abfd, arch, machine);
7ed4093a
SC
118}
119
214f8f23
KR
120#define SET_ARCH_MACH(ABFD, EXEC) \
121 NAME(sunos,set_arch_mach)(ABFD, N_MACHTYPE (EXEC)); \
122 choose_reloc_size(ABFD);
123
124/* Determine the size of a relocation entry, based on the architecture */
125static void
126DEFUN(choose_reloc_size,(abfd),
127bfd *abfd)
128{
129 switch (bfd_get_arch(abfd)) {
130 case bfd_arch_sparc:
131 case bfd_arch_a29k:
132 obj_reloc_entry_size (abfd) = RELOC_EXT_SIZE;
133 break;
134 default:
135 obj_reloc_entry_size (abfd) = RELOC_STD_SIZE;
136 break;
137 }
138}
7ed4093a
SC
139
140/* Write an object file in SunOS format.
9e2dad8e
JG
141 Section contents have already been written. We write the
142 file header, symbols, and relocation. */
7ed4093a 143
c3eb25fc 144static boolean
9e2dad8e
JG
145DEFUN(NAME(aout,sunos4_write_object_contents),
146 (abfd),
7ed4093a 147 bfd *abfd)
9e2dad8e 148{
9e2dad8e
JG
149 struct external_exec exec_bytes;
150 struct internal_exec *execp = exec_hdr (abfd);
7ed4093a 151
9e2dad8e
JG
152 /* Magic number, maestro, please! */
153 switch (bfd_get_arch(abfd)) {
154 case bfd_arch_m68k:
155 switch (bfd_get_mach(abfd)) {
156 case 68010:
157 N_SET_MACHTYPE(*execp, M_68010);
7ed4093a
SC
158 break;
159 default:
9e2dad8e
JG
160 case 68020:
161 N_SET_MACHTYPE(*execp, M_68020);
162 break;
7ed4093a 163 }
9e2dad8e
JG
164 break;
165 case bfd_arch_sparc:
166 N_SET_MACHTYPE(*execp, M_SPARC);
167 break;
168 case bfd_arch_i386:
169 N_SET_MACHTYPE(*execp, M_386);
170 break;
171 case bfd_arch_a29k:
172 N_SET_MACHTYPE(*execp, M_29K);
173 break;
174 default:
175 N_SET_MACHTYPE(*execp, M_UNKNOWN);
176 }
7ed4093a 177
9e2dad8e 178 choose_reloc_size(abfd);
250351fc 179
a40fe908 180#if 0
250351fc
JK
181 /* Some tools want this to be 0, some tools want this to be one.
182 Today, it seems that 0 is the most important setting (PR1927) */
183 N_SET_FLAGS (*execp, 0x0);
a40fe908
JK
184#else
185
186 /* Fri Jun 11 14:23:31 PDT 1993
187 FIXME
188 Today's optimal setting is 1. This is a pain, since it
189 reopens 1927. This should be readdressed by creating a new
190 target for each each supported, giving perhaps sun3/m68k
191 and sun4/sparc a.out formats.
192 */
193 N_SET_FLAGS (*execp, 1);
194#endif
9e2dad8e
JG
195
196 WRITE_HEADERS(abfd, execp);
214f8f23 197
7ed4093a
SC
198 return true;
199}
200\f
201/* core files */
202
203#define CORE_MAGIC 0x080456
204#define CORE_NAMELEN 16
205
206/* The core structure is taken from the Sun documentation.
9e2dad8e
JG
207 Unfortunately, they don't document the FPA structure, or at least I
208 can't find it easily. Fortunately the core header contains its own
209 length. So this shouldn't cause problems, except for c_ucode, which
210 so far we don't use but is easy to find with a little arithmetic. */
7ed4093a
SC
211
212/* But the reg structure can be gotten from the SPARC processor handbook.
9e2dad8e
JG
213 This really should be in a GNU include file though so that gdb can use
214 the same info. */
7ed4093a
SC
215struct regs {
216 int r_psr;
217 int r_pc;
218 int r_npc;
219 int r_y;
220 int r_g1;
221 int r_g2;
222 int r_g3;
223 int r_g4;
224 int r_g5;
225 int r_g6;
226 int r_g7;
227 int r_o0;
228 int r_o1;
229 int r_o2;
230 int r_o3;
231 int r_o4;
232 int r_o5;
233 int r_o6;
234 int r_o7;
235};
236
237/* Taken from Sun documentation: */
238
239/* FIXME: It's worse than we expect. This struct contains TWO substructs
9e2dad8e
JG
240 neither of whose size we know, WITH STUFF IN BETWEEN THEM! We can't
241 even portably access the stuff in between! */
7ed4093a 242
4f8b8627 243struct external_sparc_core {
7ed4093a
SC
244 int c_magic; /* Corefile magic number */
245 int c_len; /* Sizeof (struct core) */
4f8b8627
JG
246#define SPARC_CORE_LEN 432
247 int c_regs[19]; /* General purpose registers -- MACHDEP SIZE */
9e2dad8e
JG
248 struct external_exec c_aouthdr; /* A.out header */
249 int c_signo; /* Killing signal, if any */
250 int c_tsize; /* Text size (bytes) */
251 int c_dsize; /* Data size (bytes) */
252 int c_ssize; /* Stack size (bytes) */
7ed4093a
SC
253 char c_cmdname[CORE_NAMELEN + 1]; /* Command name */
254 double fp_stuff[1]; /* external FPU state (size unknown by us) */
255 /* The type "double" is critical here, for alignment.
256 SunOS declares a struct here, but the struct's alignment
257 is double since it contains doubles. */
258 int c_ucode; /* Exception no. from u_code */
259 /* (this member is not accessible by name since we don't
260 portably know the size of fp_stuff.) */
261};
262
4f8b8627
JG
263struct external_sun3_core {
264 int c_magic; /* Corefile magic number */
265 int c_len; /* Sizeof (struct core) */
266#define SUN3_CORE_LEN 826 /* As of SunOS 4.1.1 */
267 int c_regs[18]; /* General purpose registers -- MACHDEP SIZE */
268 struct external_exec c_aouthdr; /* A.out header */
269 int c_signo; /* Killing signal, if any */
270 int c_tsize; /* Text size (bytes) */
271 int c_dsize; /* Data size (bytes) */
272 int c_ssize; /* Stack size (bytes) */
273 char c_cmdname[CORE_NAMELEN + 1]; /* Command name */
274 double fp_stuff[1]; /* external FPU state (size unknown by us) */
275 /* The type "double" is critical here, for alignment.
276 SunOS declares a struct here, but the struct's alignment
277 is double since it contains doubles. */
278 int c_ucode; /* Exception no. from u_code */
279 /* (this member is not accessible by name since we don't
280 portably know the size of fp_stuff.) */
281};
282
283struct internal_sunos_core {
284 int c_magic; /* Corefile magic number */
285 int c_len; /* Sizeof (struct core) */
286 long c_regs_pos; /* file offset of General purpose registers */
287 int c_regs_size; /* size of General purpose registers */
9e2dad8e
JG
288 struct internal_exec c_aouthdr; /* A.out header */
289 int c_signo; /* Killing signal, if any */
290 int c_tsize; /* Text size (bytes) */
291 int c_dsize; /* Data size (bytes) */
292 int c_ssize; /* Stack size (bytes) */
250351fc 293 bfd_vma c_stacktop; /* Stack top (address) */
4f8b8627
JG
294 char c_cmdname[CORE_NAMELEN + 1]; /* Command name */
295 long fp_stuff_pos; /* file offset of external FPU state (regs) */
296 int fp_stuff_size; /* Size of it */
297 int c_ucode; /* Exception no. from u_code */
298};
7ed4093a 299
4f8b8627
JG
300/* byte-swap in the Sun-3 core structure */
301static void
302DEFUN(swapcore_sun3,(abfd, ext, intcore),
303 bfd *abfd AND
12e7087f 304 char *ext AND
4f8b8627
JG
305 struct internal_sunos_core *intcore)
306{
4f8b8627 307 struct external_sun3_core *extcore = (struct external_sun3_core *)ext;
9e2dad8e 308
4f8b8627
JG
309 intcore->c_magic = bfd_h_get_32 (abfd, (unsigned char *)&extcore->c_magic);
310 intcore->c_len = bfd_h_get_32 (abfd, (unsigned char *)&extcore->c_len );
311 intcore->c_regs_pos = (long) (((struct external_sun3_core *)0)->c_regs);
312 intcore->c_regs_size = sizeof (extcore->c_regs);
313 NAME(aout,swap_exec_header_in)(abfd, &extcore->c_aouthdr,&intcore->c_aouthdr);
314 intcore->c_signo = bfd_h_get_32 (abfd, (unsigned char *)&extcore->c_signo);
315 intcore->c_tsize = bfd_h_get_32 (abfd, (unsigned char *)&extcore->c_tsize);
316 intcore->c_dsize = bfd_h_get_32 (abfd, (unsigned char *)&extcore->c_dsize);
317 intcore->c_ssize = bfd_h_get_32 (abfd, (unsigned char *)&extcore->c_ssize);
214f8f23 318 memcpy (intcore->c_cmdname, extcore->c_cmdname, sizeof (intcore->c_cmdname));
4f8b8627
JG
319 intcore->fp_stuff_pos = (long) (((struct external_sun3_core *)0)->fp_stuff);
320 /* FP stuff takes up whole rest of struct, except c_ucode. */
321 intcore->fp_stuff_size = intcore->c_len - (sizeof extcore->c_ucode) -
322 (file_ptr)(((struct external_sun3_core *)0)->fp_stuff);
323 /* Ucode is the last thing in the struct -- just before the end */
9e2dad8e
JG
324 intcore->c_ucode =
325 bfd_h_get_32 (abfd,
326 intcore->c_len - sizeof (extcore->c_ucode) + (unsigned char *)extcore);
327 intcore->c_stacktop = 0x0E000000; /* By experimentation */
4f8b8627
JG
328}
329
330
fb3be09b 331/* byte-swap in the Sparc core structure */
4f8b8627
JG
332static void
333DEFUN(swapcore_sparc,(abfd, ext, intcore),
334 bfd *abfd AND
12e7087f 335 char *ext AND
4f8b8627
JG
336 struct internal_sunos_core *intcore)
337{
338 struct external_sparc_core *extcore = (struct external_sparc_core *)ext;
339
340 intcore->c_magic = bfd_h_get_32 (abfd, (unsigned char *)&extcore->c_magic);
341 intcore->c_len = bfd_h_get_32 (abfd, (unsigned char *)&extcore->c_len );
342 intcore->c_regs_pos = (long) (((struct external_sparc_core *)0)->c_regs);
343 intcore->c_regs_size = sizeof (extcore->c_regs);
344 NAME(aout,swap_exec_header_in)(abfd, &extcore->c_aouthdr,&intcore->c_aouthdr);
345 intcore->c_signo = bfd_h_get_32 (abfd, (unsigned char *)&extcore->c_signo);
346 intcore->c_tsize = bfd_h_get_32 (abfd, (unsigned char *)&extcore->c_tsize);
347 intcore->c_dsize = bfd_h_get_32 (abfd, (unsigned char *)&extcore->c_dsize);
348 intcore->c_ssize = bfd_h_get_32 (abfd, (unsigned char *)&extcore->c_ssize);
214f8f23 349 memcpy (intcore->c_cmdname, extcore->c_cmdname, sizeof (intcore->c_cmdname));
4f8b8627
JG
350 intcore->fp_stuff_pos = (long) (((struct external_sparc_core *)0)->fp_stuff);
351 /* FP stuff takes up whole rest of struct, except c_ucode. */
352 intcore->fp_stuff_size = intcore->c_len - (sizeof extcore->c_ucode) -
353 (file_ptr)(((struct external_sparc_core *)0)->fp_stuff);
354 /* Ucode is the last thing in the struct -- just before the end */
9e2dad8e
JG
355 intcore->c_ucode =
356 bfd_h_get_32 (abfd,
357 intcore->c_len - sizeof (extcore->c_ucode) + (unsigned char *)extcore);
250351fc 358
4f8b8627 359 /* Supposedly the user stack grows downward from the bottom of kernel memory.
250351fc
JK
360 Presuming that this remains true, this definition will work. */
361 /* Now sun has provided us with another challenge. The value is different
362 for sparc2 and sparc10 (both running SunOS 4.1.3). We pick one or
363 the other based on the current value of the stack pointer. This
364 loses (a) if the stack pointer has been clobbered, or (b) if the stack
365 is larger than 128 megabytes.
366
367 It's times like these you're glad they're switching to ELF.
368
369 Note that using include files or nlist on /vmunix would be wrong,
370 because we want the value for this core file, no matter what kind of
371 machine we were compiled on or are running on. */
372#define SPARC_USRSTACK_SPARC2 ((bfd_vma)0xf8000000)
373#define SPARC_USRSTACK_SPARC10 ((bfd_vma)0xf0000000)
374 {
375 bfd_vma sp = bfd_h_get_32
376 (abfd, (unsigned char *)&((struct regs *)&extcore->c_regs[0])->r_o6);
377 if (sp < SPARC_USRSTACK_SPARC10)
378 intcore->c_stacktop = SPARC_USRSTACK_SPARC10;
379 else
380 intcore->c_stacktop = SPARC_USRSTACK_SPARC2;
381 }
4f8b8627 382}
7ed4093a 383
4f8b8627 384/* need this cast because ptr is really void * */
214f8f23
KR
385#define core_hdr(bfd) ((bfd)->tdata.sun_core_data)
386#define core_datasec(bfd) (core_hdr(bfd)->data_section)
387#define core_stacksec(bfd) (core_hdr(bfd)->stack_section)
388#define core_regsec(bfd) (core_hdr(bfd)->reg_section)
389#define core_reg2sec(bfd) (core_hdr(bfd)->reg2_section)
7ed4093a
SC
390
391/* These are stored in the bfd's tdata */
214f8f23 392struct sun_core_struct {
4f8b8627
JG
393 struct internal_sunos_core *hdr; /* core file header */
394 asection *data_section;
395 asection *stack_section;
396 asection *reg_section;
397 asection *reg2_section;
7ed4093a
SC
398};
399
400static bfd_target *
401DEFUN(sunos4_core_file_p,(abfd),
402 bfd *abfd)
403{
404 unsigned char longbuf[4]; /* Raw bytes of various header fields */
405 int core_size;
406 int core_mag;
4f8b8627
JG
407 struct internal_sunos_core *core;
408 char *extcore;
4f8b8627 409 struct mergem {
214f8f23 410 struct sun_core_struct suncoredata;
4f8b8627
JG
411 struct internal_sunos_core internal_sunos_core;
412 char external_core[1];
413 } *mergem;
7ed4093a 414
7ed4093a
SC
415 if (bfd_read ((PTR)longbuf, 1, sizeof (longbuf), abfd) !=
416 sizeof (longbuf))
417 return 0;
418 core_mag = bfd_h_get_32 (abfd, longbuf);
419
420 if (core_mag != CORE_MAGIC) return 0;
421
422 /* SunOS core headers can vary in length; second word is size; */
423 if (bfd_read ((PTR)longbuf, 1, sizeof (longbuf), abfd) !=
424 sizeof (longbuf))
425 return 0;
426 core_size = bfd_h_get_32 (abfd, longbuf);
427 /* Sanity check */
428 if (core_size > 20000)
429 return 0;
430
f8e01940 431 if (bfd_seek (abfd, (file_ptr) 0, SEEK_SET) < 0) return 0;
7ed4093a 432
4f8b8627
JG
433 mergem = (struct mergem *)bfd_zalloc (abfd, core_size + sizeof (struct mergem));
434 if (mergem == NULL) {
7ed4093a
SC
435 bfd_error = no_memory;
436 return 0;
437 }
438
4f8b8627 439 extcore = mergem->external_core;
7ed4093a 440
4f8b8627 441 if ((bfd_read ((PTR) extcore, 1, core_size, abfd)) != core_size) {
7ed4093a 442 bfd_error = system_call_error;
4f8b8627
JG
443 bfd_release (abfd, (char *)mergem);
444 return 0;
445 }
446
447 /* Validate that it's a core file we know how to handle, due to sun
448 botching the positioning of registers and other fields in a machine
449 dependent way. */
450 core = &mergem->internal_sunos_core;
451 switch (core_size) {
452 case SPARC_CORE_LEN:
453 swapcore_sparc (abfd, extcore, core);
454 break;
455 case SUN3_CORE_LEN:
456 swapcore_sun3 (abfd, extcore, core);
457 break;
458 default:
459 bfd_error = system_call_error; /* FIXME */
460 bfd_release (abfd, (char *)mergem);
7ed4093a
SC
461 return 0;
462 }
463
214f8f23
KR
464 abfd->tdata.sun_core_data = &mergem->suncoredata;
465 abfd->tdata.sun_core_data->hdr = core;
7ed4093a
SC
466
467 /* create the sections. This is raunchy, but bfd_close wants to reclaim
468 them */
469 core_stacksec (abfd) = (asection *) bfd_zalloc (abfd, sizeof (asection));
470 if (core_stacksec (abfd) == NULL) {
471 loser:
472 bfd_error = no_memory;
fb3be09b 473 bfd_release (abfd, (char *)mergem);
7ed4093a
SC
474 return 0;
475 }
476 core_datasec (abfd) = (asection *) bfd_zalloc (abfd, sizeof (asection));
477 if (core_datasec (abfd) == NULL) {
478 loser1:
479 bfd_release (abfd, core_stacksec (abfd));
480 goto loser;
481 }
482 core_regsec (abfd) = (asection *) bfd_zalloc (abfd, sizeof (asection));
483 if (core_regsec (abfd) == NULL) {
484 loser2:
485 bfd_release (abfd, core_datasec (abfd));
486 goto loser1;
487 }
488 core_reg2sec (abfd) = (asection *) bfd_zalloc (abfd, sizeof (asection));
489 if (core_reg2sec (abfd) == NULL) {
490 bfd_release (abfd, core_regsec (abfd));
491 goto loser2;
492 }
493
494 core_stacksec (abfd)->name = ".stack";
495 core_datasec (abfd)->name = ".data";
496 core_regsec (abfd)->name = ".reg";
497 core_reg2sec (abfd)->name = ".reg2";
498
12e7087f
JG
499 core_stacksec (abfd)->flags = SEC_ALLOC + SEC_LOAD + SEC_HAS_CONTENTS;
500 core_datasec (abfd)->flags = SEC_ALLOC + SEC_LOAD + SEC_HAS_CONTENTS;
501 core_regsec (abfd)->flags = SEC_ALLOC + SEC_HAS_CONTENTS;
502 core_reg2sec (abfd)->flags = SEC_ALLOC + SEC_HAS_CONTENTS;
7ed4093a 503
214f8f23
KR
504 core_stacksec (abfd)->_raw_size = core->c_ssize;
505 core_datasec (abfd)->_raw_size = core->c_dsize;
506 core_regsec (abfd)->_raw_size = core->c_regs_size;
507 core_reg2sec (abfd)->_raw_size = core->fp_stuff_size;
7ed4093a 508
4f8b8627 509 core_stacksec (abfd)->vma = (core->c_stacktop - core->c_ssize);
7ed4093a 510 core_datasec (abfd)->vma = N_DATADDR(core->c_aouthdr);
522e0ead
SC
511 core_regsec (abfd)->vma = 0;
512 core_reg2sec (abfd)->vma = 0;
7ed4093a
SC
513
514 core_stacksec (abfd)->filepos = core->c_len + core->c_dsize;
515 core_datasec (abfd)->filepos = core->c_len;
4f8b8627
JG
516 /* We'll access the regs afresh in the core file, like any section: */
517 core_regsec (abfd)->filepos = (file_ptr)core->c_regs_pos;
518 core_reg2sec (abfd)->filepos = (file_ptr)core->fp_stuff_pos;
7ed4093a
SC
519
520 /* Align to word at least */
521 core_stacksec (abfd)->alignment_power = 2;
522 core_datasec (abfd)->alignment_power = 2;
523 core_regsec (abfd)->alignment_power = 2;
524 core_reg2sec (abfd)->alignment_power = 2;
525
526 abfd->sections = core_stacksec (abfd);
527 core_stacksec (abfd)->next = core_datasec (abfd);
528 core_datasec (abfd)->next = core_regsec (abfd);
529 core_regsec (abfd)->next = core_reg2sec (abfd);
530
531 abfd->section_count = 4;
532
533 return abfd->xvec;
534}
535
536static char *sunos4_core_file_failing_command (abfd)
537bfd *abfd;
538 {
214f8f23 539 return core_hdr (abfd)->hdr->c_cmdname;
7ed4093a
SC
540}
541
542static int
543DEFUN(sunos4_core_file_failing_signal,(abfd),
544 bfd *abfd)
545{
214f8f23 546 return core_hdr (abfd)->hdr->c_signo;
7ed4093a
SC
547}
548
549static boolean
550DEFUN(sunos4_core_file_matches_executable_p, (core_bfd, exec_bfd),
551 bfd *core_bfd AND
552 bfd *exec_bfd)
553{
554 if (core_bfd->xvec != exec_bfd->xvec) {
555 bfd_error = system_call_error;
556 return false;
557 }
558
214f8f23
KR
559 return (memcmp ((char *)&((core_hdr (core_bfd)->hdr)->c_aouthdr),
560 (char *) exec_hdr (exec_bfd),
561 sizeof (struct internal_exec)) == 0) ? true : false;
562}
563
250351fc 564#define MY_set_sizes sunos4_set_sizes
214f8f23
KR
565static boolean
566DEFUN (sunos4_set_sizes, (abfd),
567 bfd *abfd)
568{
569 switch (bfd_get_arch (abfd))
570 {
571 default:
572 return false;
573 case bfd_arch_sparc:
574 adata(abfd).page_size = 0x2000;
575 adata(abfd).segment_size = 0x2000;
576 adata(abfd).exec_bytes_size = EXEC_BYTES_SIZE;
577 return true;
578 case bfd_arch_m68k:
579 adata(abfd).page_size = 0x2000;
580 adata(abfd).segment_size = 0x20000;
581 adata(abfd).exec_bytes_size = EXEC_BYTES_SIZE;
582 return true;
583 }
584}
585
586static CONST struct aout_backend_data sunos4_aout_backend = {
7f90aa8b 587 0, 1, 0, sunos4_set_sizes, 0,
214f8f23 588};
7ed4093a 589\f
c3eb25fc
SC
590#define MY_core_file_failing_command sunos4_core_file_failing_command
591#define MY_core_file_failing_signal sunos4_core_file_failing_signal
592#define MY_core_file_matches_executable_p sunos4_core_file_matches_executable_p
6f715d66 593
c3eb25fc
SC
594#define MY_bfd_debug_info_start bfd_void
595#define MY_bfd_debug_info_end bfd_void
250351fc
JK
596#define MY_bfd_debug_info_accumulate \
597 (void (*) PARAMS ((bfd *, struct sec *))) bfd_void
598#define MY_core_file_p sunos4_core_file_p
599#define MY_write_object_contents NAME(aout,sunos4_write_object_contents)
214f8f23 600#define MY_backend_data &sunos4_aout_backend
6f715d66 601
c3eb25fc 602#define TARGET_IS_BIG_ENDIAN_P
6f715d66 603
c3eb25fc 604#include "aout-target.h"
This page took 0.113129 seconds and 4 git commands to generate.