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 | |
14aa9a78 | 28 | #define N_SHARED_LIB(x) 0 |
05c81f45 SEF |
29 | |
30 | #define PAGE_SIZE 4096 | |
31 | #define SEGMENT_SIZE PAGE_SIZE | |
32 | ||
33 | #define DEFAULT_ARCH bfd_arch_i386 | |
f6fcc082 | 34 | #define MACHTYPE_OK(mtype) ((mtype) == M_386 || (mtype) == M_386_NETBSD || (mtype) == M_UNKNOWN) |
05c81f45 SEF |
35 | |
36 | #define MY(OP) CAT(netbsd386_,OP) | |
c28096f3 JK |
37 | /* This needs to start with a.out so GDB knows it is an a.out variant. */ |
38 | #define TARGETNAME "a.out-netbsd-386" | |
05c81f45 SEF |
39 | |
40 | #define N_MAGIC(ex) \ | |
3f99570e | 41 | ( (((ex).a_info)&0xffff0000) ? ((((ex).a_info))&0xffff) : ((ex).a_info)) |
05c81f45 | 42 | #define N_MACHTYPE(ex) \ |
3f99570e | 43 | ( (((ex).a_info)&0xffff0000) ? (((((ex).a_info))>>16)&0x03ff) : 0 ) |
05c81f45 | 44 | # define N_FLAGS(ex) \ |
3f99570e | 45 | ( (((ex).a_info)&0xffff0000) ? ((((ex).a_info)>>26)&0x3f) : 0 ) |
05c81f45 SEF |
46 | #define N_SET_INFO(ex, mag,mid,flag) \ |
47 | ( (ex).a_info = htonl( (((flag)&0x3f)<<26) | (((mid)&0x03ff)<<16) | \ | |
48 | (((mag)&0xffff)) ) ) | |
49 | #define N_SET_MAGIC(exec,magic) \ | |
50 | ((exec).a_info = (((exec).a_info & ~0xffff) | ((magic) & 0xffff))) | |
51 | #define N_SET_MACHTYPE(exec,machtype) \ | |
52 | ((exec).a_info = \ | |
53 | (((exec).a_info & ~(0x3ff<<16)) | (((machtype)&0xff) << 16))) | |
54 | #define N_SET_FLAGS(exec, flags) \ | |
55 | ((exec).a_info = ((exec).a_info & 0xffff) | (flags & 0xffff)) | |
56 | ||
57 | #include "bfd.h" | |
58 | #include "sysdep.h" | |
59 | #include "libbfd.h" | |
60 | #include "libaout.h" | |
61 | ||
62 | #define N_GETMAGIC2(ex) \ | |
3f99570e | 63 | ( (((ex).a_info)&0xffff0000) ? ((((ex).a_info))&0xffff) : \ |
05c81f45 SEF |
64 | (((ex).a_info) | 0x10000) ) |
65 | ||
66 | #define N_TXTADDR(ex) (N_GETMAGIC2(ex) == (ZMAGIC|0x10000) ? 0 : 4096) | |
67 | #define N_TXTOFF(ex) \ | |
68 | ( N_GETMAGIC2(ex)==ZMAGIC || N_GETMAGIC2(ex)==(QMAGIC|0x10000) ? \ | |
69 | 0 : (N_GETMAGIC2(ex)==(ZMAGIC|0x10000) ? 4096 : EXEC_BYTES_SIZE )) | |
70 | #define N_ALIGN(ex,x) \ | |
71 | (N_MAGIC(ex) == ZMAGIC || N_MAGIC(ex) == QMAGIC ? \ | |
72 | ((x) + 4096 - 1) & ~(4096 - 1) : (x)) | |
73 | #define N_DATADDR(ex) \ | |
74 | N_ALIGN(ex, N_TXTADDR(ex) + (ex).a_text) | |
75 | /* Data segment offset. */ | |
76 | #define N_DATOFF(ex) \ | |
77 | N_ALIGN(ex, N_TXTOFF(ex) + (ex).a_text) | |
78 | ||
79 | /* #define N_BADMAG(x) n_badmag(N_MAGIC(x)) */ | |
80 | ||
3f99570e JK |
81 | /* On NetBSD, the magic number is always in ntohl's "network" (big-endian) |
82 | format. */ | |
83 | #define SWAP_MAGIC(ext) bfd_getb32 (ext) | |
05c81f45 SEF |
84 | |
85 | #include "aout-target.h" | |
86 | ||
87 | #if 0 | |
88 | int | |
89 | n_badmag(x) | |
90 | unsigned long x; { | |
91 | union { | |
92 | unsigned long l; | |
93 | unsigned char c[sizeof(unsigned long)]; | |
94 | } l; | |
95 | unsigned char temp; | |
96 | ||
97 | printf ("x = %o, OMAGIC = %o, NMAGIC = %o, ZMAGIC = %o, QMAGIC = %o\n", | |
98 | x, OMAGIC, NMAGIC, ZMAGIC, QMAGIC); | |
99 | ||
100 | l.l = x; | |
101 | temp = l.c[0]; | |
102 | l.c[0] = l.c[3]; | |
103 | l.c[3] = temp; | |
104 | temp = l.c[2]; | |
105 | l.c[2] = l.c[1]; | |
106 | l.c[1] = temp; | |
107 | printf ("\tbyte-swapped(x) = %o\n", l.l); | |
108 | ||
109 | return (x != OMAGIC | |
110 | && x != NMAGIC | |
111 | && x != ZMAGIC | |
112 | && x != QMAGIC); | |
113 | } | |
114 | #endif | |
115 |