Commit | Line | Data |
---|---|---|
05c81f45 SEF |
1 | /* BFD back-end for NetBSD/386 a.out-ish binaries. |
2 | Copyright (C) 1990, 1991, 1992 Free Software Foundation, Inc. | |
3 | ||
4 | This file is part of BFD, the Binary File Descriptor library. | |
5 | ||
6 | This program is free software; you can redistribute it and/or modify | |
7 | it under the terms of the GNU General Public License as published by | |
8 | the Free Software Foundation; either version 2 of the License, or | |
9 | (at your option) any later version. | |
10 | ||
11 | This program is distributed in the hope that it will be useful, | |
12 | but WITHOUT ANY WARRANTY; without even the implied warranty of | |
13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
14 | GNU General Public License for more details. | |
15 | ||
16 | You should have received a copy of the GNU General Public License | |
17 | along with this program; if not, write to the Free Software | |
18 | Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ | |
19 | ||
20 | #define BYTES_IN_WORD 4 | |
21 | #define ARCH 32 | |
22 | ||
23 | /* ZMAGIC files never have the header in the text. */ | |
24 | #define N_HEADER_IN_TEXT(x) 0 | |
25 | ||
26 | /* ZMAGIC files start at address 0. This does not apply to QMAGIC. */ | |
27 | #define TEXT_START_ADDR 0 | |
28 | ||
29 | #define PAGE_SIZE 4096 | |
30 | #define SEGMENT_SIZE PAGE_SIZE | |
31 | ||
32 | #define DEFAULT_ARCH bfd_arch_i386 | |
f6fcc082 | 33 | #define MACHTYPE_OK(mtype) ((mtype) == M_386 || (mtype) == M_386_NETBSD || (mtype) == M_UNKNOWN) |
05c81f45 SEF |
34 | |
35 | #define MY(OP) CAT(netbsd386_,OP) | |
c28096f3 JK |
36 | /* This needs to start with a.out so GDB knows it is an a.out variant. */ |
37 | #define TARGETNAME "a.out-netbsd-386" | |
05c81f45 SEF |
38 | |
39 | #define N_MAGIC(ex) \ | |
40 | ( (((ex).a_info)&0xffff0000) ? (ntohl(((ex).a_info))&0xffff) : ((ex).a_info)) | |
41 | #define N_MACHTYPE(ex) \ | |
42 | ( (((ex).a_info)&0xffff0000) ? ((ntohl(((ex).a_info))>>16)&0x03ff) : 0 ) | |
43 | # define N_FLAGS(ex) \ | |
44 | ( (((ex).a_info)&0xffff0000) ? ((ntohl(((ex).a_info))>>26)&0x3f) : 0 ) | |
45 | #define N_SET_INFO(ex, mag,mid,flag) \ | |
46 | ( (ex).a_info = htonl( (((flag)&0x3f)<<26) | (((mid)&0x03ff)<<16) | \ | |
47 | (((mag)&0xffff)) ) ) | |
48 | #define N_SET_MAGIC(exec,magic) \ | |
49 | ((exec).a_info = (((exec).a_info & ~0xffff) | ((magic) & 0xffff))) | |
50 | #define N_SET_MACHTYPE(exec,machtype) \ | |
51 | ((exec).a_info = \ | |
52 | (((exec).a_info & ~(0x3ff<<16)) | (((machtype)&0xff) << 16))) | |
53 | #define N_SET_FLAGS(exec, flags) \ | |
54 | ((exec).a_info = ((exec).a_info & 0xffff) | (flags & 0xffff)) | |
55 | ||
56 | #include "bfd.h" | |
57 | #include "sysdep.h" | |
58 | #include "libbfd.h" | |
59 | #include "libaout.h" | |
60 | ||
61 | #define N_GETMAGIC2(ex) \ | |
62 | ( (((ex).a_info)&0xffff0000) ? (ntohl(((ex).a_info))&0xffff) : \ | |
63 | (((ex).a_info) | 0x10000) ) | |
64 | ||
65 | #define N_TXTADDR(ex) (N_GETMAGIC2(ex) == (ZMAGIC|0x10000) ? 0 : 4096) | |
66 | #define N_TXTOFF(ex) \ | |
67 | ( N_GETMAGIC2(ex)==ZMAGIC || N_GETMAGIC2(ex)==(QMAGIC|0x10000) ? \ | |
68 | 0 : (N_GETMAGIC2(ex)==(ZMAGIC|0x10000) ? 4096 : EXEC_BYTES_SIZE )) | |
69 | #define N_ALIGN(ex,x) \ | |
70 | (N_MAGIC(ex) == ZMAGIC || N_MAGIC(ex) == QMAGIC ? \ | |
71 | ((x) + 4096 - 1) & ~(4096 - 1) : (x)) | |
72 | #define N_DATADDR(ex) \ | |
73 | N_ALIGN(ex, N_TXTADDR(ex) + (ex).a_text) | |
74 | /* Data segment offset. */ | |
75 | #define N_DATOFF(ex) \ | |
76 | N_ALIGN(ex, N_TXTOFF(ex) + (ex).a_text) | |
77 | ||
78 | /* #define N_BADMAG(x) n_badmag(N_MAGIC(x)) */ | |
79 | ||
80 | #define NO_SWAP_MAGIC /* magic number already in correct endian format */ | |
81 | ||
82 | #include "aout-target.h" | |
83 | ||
84 | #if 0 | |
85 | int | |
86 | n_badmag(x) | |
87 | unsigned long x; { | |
88 | union { | |
89 | unsigned long l; | |
90 | unsigned char c[sizeof(unsigned long)]; | |
91 | } l; | |
92 | unsigned char temp; | |
93 | ||
94 | printf ("x = %o, OMAGIC = %o, NMAGIC = %o, ZMAGIC = %o, QMAGIC = %o\n", | |
95 | x, OMAGIC, NMAGIC, ZMAGIC, QMAGIC); | |
96 | ||
97 | l.l = x; | |
98 | temp = l.c[0]; | |
99 | l.c[0] = l.c[3]; | |
100 | l.c[3] = temp; | |
101 | temp = l.c[2]; | |
102 | l.c[2] = l.c[1]; | |
103 | l.c[1] = temp; | |
104 | printf ("\tbyte-swapped(x) = %o\n", l.l); | |
105 | ||
106 | return (x != OMAGIC | |
107 | && x != NMAGIC | |
108 | && x != ZMAGIC | |
109 | && x != QMAGIC); | |
110 | } | |
111 | #endif | |
112 |