home *** CD-ROM | disk | FTP | other *** search
/ Frozen Fish 1: Amiga / FrozenFish-Apr94.iso / bbs / gnu / gdb-4.12.tar.gz / gdb-4.12.tar / gdb-4.12 / bfd / netbsd386.c < prev    next >
C/C++ Source or Header  |  1994-02-03  |  4KB  |  116 lines

  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. #define N_SHARED_LIB(x) 0
  29.  
  30. #define    PAGE_SIZE    4096
  31. #define    SEGMENT_SIZE    PAGE_SIZE
  32.  
  33. #define    DEFAULT_ARCH    bfd_arch_i386
  34. #define MACHTYPE_OK(mtype) ((mtype) == M_386 || (mtype) == M_386_NETBSD || (mtype) == M_UNKNOWN)
  35.  
  36. #define MY(OP) CAT(netbsd386_,OP)
  37. /* This needs to start with a.out so GDB knows it is an a.out variant.  */
  38. #define TARGETNAME "a.out-netbsd-386"
  39.  
  40. #define N_MAGIC(ex) \
  41.     ( (((ex).a_info)&0xffff0000) ? ((((ex).a_info))&0xffff) : ((ex).a_info))
  42. #define N_MACHTYPE(ex) \
  43.     ( (((ex).a_info)&0xffff0000) ? (((((ex).a_info))>>16)&0x03ff) : 0 )
  44. # define N_FLAGS(ex) \
  45.     ( (((ex).a_info)&0xffff0000) ? ((((ex).a_info)>>26)&0x3f) : 0 )
  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) \
  63.     ( (((ex).a_info)&0xffff0000) ? ((((ex).a_info))&0xffff) : \
  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.  
  81. /* On NetBSD, the magic number is always in ntohl's "network" (big-endian)
  82.    format.  */
  83. #define SWAP_MAGIC(ext) bfd_getb32 (ext)
  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.  
  116.