| 1 | /* BFD back-end definitions used by all NetBSD targets. |
| 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 | |
| 21 | /* NetBSD fits its header into the start of its text segment */ |
| 22 | #define N_HEADER_IN_TEXT(x) 1 |
| 23 | #define TEXT_START_ADDR PAGE_SIZE |
| 24 | |
| 25 | #define N_MAGIC(ex) \ |
| 26 | ( (((ex).a_info)&0xffff0000) ? (((ex).a_info)&0xffff) : ((ex).a_info) ) |
| 27 | #define N_MACHTYPE(ex) \ |
| 28 | ( (((ex).a_info)&0xffff0000) ? ((((ex).a_info)>>16)&0x03ff) : 0 ) |
| 29 | # define N_FLAGS(ex) \ |
| 30 | ( (((ex).a_info)&0xffff0000) ? ((((ex).a_info)>>26)&0x3f) : 0 ) |
| 31 | #define N_SET_INFO(ex, mag,mid,flag) \ |
| 32 | ( (ex).a_info = htonl( (((flag)&0x3f)<<26) | (((mid)&0x03ff)<<16) | \ |
| 33 | (((mag)&0xffff)) ) ) |
| 34 | #define N_SET_MAGIC(exec,magic) \ |
| 35 | ((exec).a_info = (((exec).a_info & ~0xffff) | ((magic) & 0xffff))) |
| 36 | #define N_SET_MACHTYPE(exec,machtype) \ |
| 37 | ((exec).a_info = \ |
| 38 | (((exec).a_info & ~(0x3ff<<16)) | (((machtype)&0xff) << 16))) |
| 39 | #define N_SET_FLAGS(exec, flags) \ |
| 40 | ((exec).a_info = ((exec).a_info & 0xffff) | (flags & 0xffff)) |
| 41 | |
| 42 | #include "bfd.h" |
| 43 | #include "sysdep.h" |
| 44 | #include "libbfd.h" |
| 45 | #include "libaout.h" |
| 46 | |
| 47 | #define N_GETMAGIC(ex) \ |
| 48 | ( (((ex).a_info)&0xffff0000) ? (((ex).a_info)&0xffff) : ((ex).a_info)) |
| 49 | #define N_GETMAGIC2(ex) \ |
| 50 | ( (((ex).a_info)&0xffff0000) ? (((ex).a_info)&0xffff) : \ |
| 51 | (((ex).a_info) | 0x10000) ) |
| 52 | |
| 53 | #define N_TXTADDR(ex) (N_GETMAGIC2(ex) == (ZMAGIC|0x10000) ? 0 : __LDPGSZ) |
| 54 | #define N_TXTOFF(ex) \ |
| 55 | ( N_GETMAGIC2(ex)==ZMAGIC || N_GETMAGIC2(ex)==(QMAGIC|0x10000) ? \ |
| 56 | 0 : (N_GETMAGIC2(ex)==(ZMAGIC|0x10000) ? __LDPGSZ : EXEC_BYTES_SIZE )) |
| 57 | #define N_ALIGN(ex,x) \ |
| 58 | (N_MAGIC(ex) == ZMAGIC || N_MAGIC(ex) == QMAGIC ? \ |
| 59 | ((x) + __LDPGSZ - 1) & ~(__LDPGSZ - 1) : (x)) |
| 60 | #define N_DATADDR(ex) \ |
| 61 | (N_GETMAGIC(ex) == OMAGIC ? N_TXTADDR(ex) + (ex).a_text : \ |
| 62 | (N_TXTADDR(ex) + (ex).a_text + __LDPGSZ - 1) & ~(__LDPGSZ - 1)) |
| 63 | |
| 64 | /* Data segment offset. */ |
| 65 | #define N_DATOFF(ex) \ |
| 66 | N_ALIGN(ex, N_TXTOFF(ex) + (ex).a_text) |
| 67 | |
| 68 | /* On NetBSD, the magic number is always in ntohl's "network" (big-endian) |
| 69 | format. */ |
| 70 | #define SWAP_MAGIC(ext) bfd_getb32 (ext) |
| 71 | |
| 72 | #include "aout-target.h" |