/[gcl]/gcl/binutils/bfd/netbsd-core.c
ViewVC logotype

Diff of /gcl/binutils/bfd/netbsd-core.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.1.1.1 by camm, Fri Aug 9 05:35:37 2002 UTC revision 1.2 by camm, Fri Sep 9 23:32:14 2005 UTC
# Line 1  Line 1 
1  /* BFD back end for NetBSD style core files  /* BFD back end for NetBSD style core files
2     Copyright 1988, 1989, 1991, 1992, 1993, 1996, 1998, 1999, 2000, 2001,     Copyright 1988, 1989, 1991, 1992, 1993, 1996, 1998, 1999, 2000, 2001,
3     2002     2002, 2003, 2004
4     Free Software Foundation, Inc.     Free Software Foundation, Inc.
5     Written by Paul Kranenburg, EUR     Written by Paul Kranenburg, EUR
6    
7  This file is part of BFD, the Binary File Descriptor library.     This file is part of BFD, the Binary File Descriptor library.
8    
9  This program is free software; you can redistribute it and/or modify     This program is free software; you can redistribute it and/or modify
10  it under the terms of the GNU General Public License as published by     it under the terms of the GNU General Public License as published by
11  the Free Software Foundation; either version 2 of the License, or     the Free Software Foundation; either version 2 of the License, or
12  (at your option) any later version.     (at your option) any later version.
13    
14  This program is distributed in the hope that it will be useful,     This program is distributed in the hope that it will be useful,
15  but WITHOUT ANY WARRANTY; without even the implied warranty of     but WITHOUT ANY WARRANTY; without even the implied warranty of
16  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17  GNU General Public License for more details.     GNU General Public License for more details.
18    
19  You should have received a copy of the GNU General Public License     You should have received a copy of the GNU General Public License
20  along with this program; if not, write to the Free Software     along with this program; if not, write to the Free Software
21  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */     Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
22    
23  #include "bfd.h"  #include "bfd.h"
24  #include "sysdep.h"  #include "sysdep.h"
25  #include "libbfd.h"  #include "libbfd.h"
26  #include "libaout.h"           /* BFD a.out internal data structures */  #include "libaout.h"           /* BFD a.out internal data structures.  */
27    
28  #include <sys/param.h>  #include <sys/param.h>
29  #include <sys/dir.h>  #include <sys/dir.h>
30  #include <signal.h>  #include <signal.h>
31  #include <sys/core.h>  #include <sys/core.h>
32    
33  /*  /* The machine ID for OpenBSD/sparc64 and older versions of
34   * FIXME: On NetBSD/sparc CORE_FPU_OFFSET should be (sizeof (struct trapframe))     NetBSD/sparc64 overlaps with M_MIPS1.  */
35   */  #define M_SPARC64_OPENBSD       M_MIPS1
36    
37    /* Offset of StackGhost cookie within `struct md_coredump' on
38       OpenBSD/sparc.  */
39    #define CORE_WCOOKIE_OFFSET     344
40    
41  struct netbsd_core_struct {  struct netbsd_core_struct
42          struct core core;  {
43      struct core core;
44  } *rawptr;  } *rawptr;
45    
46  /* forward declarations */  /* Forward declarations.  */
47    
48  static const bfd_target *netbsd_core_file_p PARAMS ((bfd *abfd));  static const bfd_target *netbsd_core_file_p
49  static char *netbsd_core_file_failing_command PARAMS ((bfd *abfd));    PARAMS ((bfd *abfd));
50  static int netbsd_core_file_failing_signal PARAMS ((bfd *abfd));  static char *netbsd_core_file_failing_command
51  static boolean netbsd_core_file_matches_executable_p    PARAMS ((bfd *abfd));
52    static int netbsd_core_file_failing_signal
53      PARAMS ((bfd *abfd));
54    static bfd_boolean netbsd_core_file_matches_executable_p
55    PARAMS ((bfd *core_bfd, bfd *exec_bfd));    PARAMS ((bfd *core_bfd, bfd *exec_bfd));
56  static void swap_abort PARAMS ((void));  static void swap_abort
57      PARAMS ((void));
58    
59  /* Handle NetBSD-style core dump file.  */  /* Handle NetBSD-style core dump file.  */
60    
 /* ARGSUSED */  
61  static const bfd_target *  static const bfd_target *
62  netbsd_core_file_p (abfd)  netbsd_core_file_p (abfd)
63       bfd *abfd;       bfd *abfd;
64    
65  {  {
66    int i, val;    int val;
67      unsigned i;
68    file_ptr offset;    file_ptr offset;
69    asection *asect, *asect2;    asection *asect;
70    struct core core;    struct core core;
71    struct coreseg coreseg;    struct coreseg coreseg;
72    bfd_size_type amt = sizeof core;    bfd_size_type amt = sizeof core;
# Line 65  netbsd_core_file_p (abfd) Line 74  netbsd_core_file_p (abfd)
74    val = bfd_bread ((void *) &core, amt, abfd);    val = bfd_bread ((void *) &core, amt, abfd);
75    if (val != sizeof core)    if (val != sizeof core)
76      {      {
77        /* Too small to be a core file */        /* Too small to be a core file.  */
78        bfd_set_error (bfd_error_wrong_format);        bfd_set_error (bfd_error_wrong_format);
79        return 0;        return 0;
80      }      }
# Line 131  netbsd_core_file_p (abfd) Line 140  netbsd_core_file_p (abfd)
140          goto punt;          goto punt;
141    
142        asect->flags = flags;        asect->flags = flags;
143        asect->_raw_size = coreseg.c_size;        asect->size = coreseg.c_size;
144        asect->vma = coreseg.c_addr;        asect->vma = coreseg.c_addr;
145        asect->filepos = offset;        asect->filepos = offset;
146        asect->alignment_power = 2;        asect->alignment_power = 2;
147    
148        offset += coreseg.c_size;        if (CORE_GETMID (core) == M_SPARC_NETBSD
149              && CORE_GETFLAG (coreseg) == CORE_CPU
150  #ifdef CORE_FPU_OFFSET            && coreseg.c_size > CORE_WCOOKIE_OFFSET)
       switch (CORE_GETFLAG (coreseg))  
151          {          {
152          case CORE_CPU:            /* Truncate the .reg section.  */
153            /* Hackish...  */            asect->size = CORE_WCOOKIE_OFFSET;
154            asect->_raw_size = CORE_FPU_OFFSET;  
155            asect2 = bfd_make_section_anyway (abfd, ".reg2");            /* And create the .wcookie section.  */
156            if (asect2 == NULL)            asect = bfd_make_section_anyway (abfd, ".wcookie");
157              if (asect == NULL)
158              goto punt;              goto punt;
159            asect2->_raw_size = coreseg.c_size - CORE_FPU_OFFSET;  
160            asect2->vma = 0;            asect->flags = SEC_ALLOC + SEC_HAS_CONTENTS;
161            asect2->filepos = asect->filepos + CORE_FPU_OFFSET;            asect->size = 4;
162            asect2->alignment_power = 2;            asect->vma = 0;
163            asect2->flags = SEC_ALLOC + SEC_HAS_CONTENTS;            asect->filepos = offset + CORE_WCOOKIE_OFFSET;
164            break;            asect->alignment_power = 2;
165          }          }
166  #endif  
167          offset += coreseg.c_size;
168        }
169    
170      /* Set architecture from machine ID.  */
171      switch (CORE_GETMID (core))
172        {
173        case M_ALPHA_NETBSD:
174          bfd_default_set_arch_mach (abfd, bfd_arch_alpha, 0);
175          break;
176    
177        case M_ARM6_NETBSD:
178          bfd_default_set_arch_mach (abfd, bfd_arch_arm, bfd_mach_arm_3);
179          break;
180    
181        case M_X86_64_NETBSD:
182          bfd_default_set_arch_mach (abfd, bfd_arch_i386, bfd_mach_x86_64);
183          break;
184    
185        case M_386_NETBSD:
186          bfd_default_set_arch_mach (abfd, bfd_arch_i386, bfd_mach_i386_i386);
187          break;
188    
189        case M_68K_NETBSD:
190        case M_68K4K_NETBSD:
191          bfd_default_set_arch_mach (abfd, bfd_arch_m68k, 0);
192          break;
193    
194        case M_88K_OPENBSD:
195          bfd_default_set_arch_mach (abfd, bfd_arch_m88k, 0);
196          break;
197    
198        case M_HPPA_OPENBSD:
199          bfd_default_set_arch_mach (abfd, bfd_arch_hppa, bfd_mach_hppa11);
200          break;
201    
202        case M_POWERPC_NETBSD:
203          bfd_default_set_arch_mach (abfd, bfd_arch_powerpc, bfd_mach_ppc);
204          break;
205    
206        case M_SPARC_NETBSD:
207          bfd_default_set_arch_mach (abfd, bfd_arch_sparc, bfd_mach_sparc);
208          break;
209    
210        case M_SPARC64_NETBSD:
211        case M_SPARC64_OPENBSD:
212          bfd_default_set_arch_mach (abfd, bfd_arch_sparc, bfd_mach_sparc_v9);
213          break;
214    
215        case M_VAX_NETBSD:
216        case M_VAX4K_NETBSD:
217          bfd_default_set_arch_mach (abfd, bfd_arch_vax, 0);
218          break;
219      }      }
220    
221    /* OK, we believe you.  You're a core file (sure, sure).  */    /* OK, we believe you.  You're a core file (sure, sure).  */
# Line 175  netbsd_core_file_failing_command (abfd) Line 236  netbsd_core_file_failing_command (abfd)
236    return abfd->tdata.netbsd_core_data->core.c_name;    return abfd->tdata.netbsd_core_data->core.c_name;
237  }  }
238    
 /* ARGSUSED */  
239  static int  static int
240  netbsd_core_file_failing_signal (abfd)  netbsd_core_file_failing_signal (abfd)
241          bfd *abfd;          bfd *abfd;
# Line 184  netbsd_core_file_failing_signal (abfd) Line 244  netbsd_core_file_failing_signal (abfd)
244    return abfd->tdata.netbsd_core_data->core.c_signo;    return abfd->tdata.netbsd_core_data->core.c_signo;
245  }  }
246    
247  /* ARGSUSED */  static bfd_boolean
 static boolean  
248  netbsd_core_file_matches_executable_p  (core_bfd, exec_bfd)  netbsd_core_file_matches_executable_p  (core_bfd, exec_bfd)
249       bfd *core_bfd ATTRIBUTE_UNUSED;       bfd *core_bfd ATTRIBUTE_UNUSED;
250       bfd *exec_bfd ATTRIBUTE_UNUSED;       bfd *exec_bfd ATTRIBUTE_UNUSED;
251  {  {
252    return true;          /* FIXME, We have no way of telling at this point */    /* FIXME, We have no way of telling at this point.  */
253      return TRUE;
254  }  }
255    
256  /* If somebody calls any byte-swapping routines, shoot them.  */  /* If somebody calls any byte-swapping routines, shoot them.  */
257    
258  static void  static void
259  swap_abort ()  swap_abort ()
260  {  {
261    abort (); /* This way doesn't require any declaration for ANSI to fuck up */   /* This way doesn't require any declaration for ANSI to fuck up.  */
262      abort ();
263  }  }
264  #define NO_GET  ((bfd_vma (*) PARAMS ((   const bfd_byte *))) swap_abort )  
265  #define NO_PUT  ((void    (*) PARAMS ((bfd_vma, bfd_byte *))) swap_abort )  #define NO_GET ((bfd_vma (*) (const void *)) swap_abort)
266  #define NO_SIGNED_GET \  #define NO_PUT ((void (*) (bfd_vma, void *)) swap_abort)
267    ((bfd_signed_vma (*) PARAMS ((const bfd_byte *))) swap_abort )  #define NO_GETS ((bfd_signed_vma (*) (const void *)) swap_abort)
268    #define NO_GET64 ((bfd_uint64_t (*) (const void *)) swap_abort)
269    #define NO_PUT64 ((void (*) (bfd_uint64_t, void *)) swap_abort)
270    #define NO_GETS64 ((bfd_int64_t (*) (const void *)) swap_abort)
271    
272  const bfd_target netbsd_core_vec =  const bfd_target netbsd_core_vec =
273    {    {
274      "netbsd-core",      "netbsd-core",
275      bfd_target_unknown_flavour,      bfd_target_unknown_flavour,
276      BFD_ENDIAN_UNKNOWN,         /* target byte order */      BFD_ENDIAN_UNKNOWN,         /* Target byte order.  */
277      BFD_ENDIAN_UNKNOWN,         /* target headers byte order */      BFD_ENDIAN_UNKNOWN,         /* Target headers byte order.  */
278      (HAS_RELOC | EXEC_P |       /* object flags */      (HAS_RELOC | EXEC_P |       /* Object flags.  */
279       HAS_LINENO | HAS_DEBUG |       HAS_LINENO | HAS_DEBUG |
280       HAS_SYMS | HAS_LOCALS | WP_TEXT | D_PAGED),       HAS_SYMS | HAS_LOCALS | WP_TEXT | D_PAGED),
281      (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC), /* section flags */      (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC), /* Section flags.  */
282      0,                                                     /* symbol prefix */      0,                                                     /* Symbol prefix.  */
283      ' ',                                                   /* ar_pad_char */      ' ',                                                   /* ar_pad_char.  */
284      16,                                                    /* ar_max_namelen */      16,                                                    /* ar_max_namelen.  */
285      NO_GET, NO_SIGNED_GET, NO_PUT,      /* 64 bit data */      NO_GET64, NO_GETS64, NO_PUT64,      /* 64 bit data.  */
286      NO_GET, NO_SIGNED_GET, NO_PUT,      /* 32 bit data */      NO_GET, NO_GETS, NO_PUT,            /* 32 bit data.  */
287      NO_GET, NO_SIGNED_GET, NO_PUT,      /* 16 bit data */      NO_GET, NO_GETS, NO_PUT,            /* 16 bit data.  */
288      NO_GET, NO_SIGNED_GET, NO_PUT,      /* 64 bit hdrs */      NO_GET64, NO_GETS64, NO_PUT64,      /* 64 bit hdrs.  */
289      NO_GET, NO_SIGNED_GET, NO_PUT,      /* 32 bit hdrs */      NO_GET, NO_GETS, NO_PUT,            /* 32 bit hdrs.  */
290      NO_GET, NO_SIGNED_GET, NO_PUT,      /* 16 bit hdrs */      NO_GET, NO_GETS, NO_PUT,            /* 16 bit hdrs.  */
291    
292      {                           /* bfd_check_format */      {                                   /* bfd_check_format.  */
293       _bfd_dummy_target,         /* unknown format */        _bfd_dummy_target,                /* Unknown format.  */
294       _bfd_dummy_target,         /* object file */        _bfd_dummy_target,                /* Object file.  */
295       _bfd_dummy_target,         /* archive */        _bfd_dummy_target,                /* Archive.  */
296       netbsd_core_file_p         /* a core file */        netbsd_core_file_p                /* A core file.  */
297      },      },
298      {                           /* bfd_set_format */      {                                   /* bfd_set_format.  */
299       bfd_false, bfd_false,        bfd_false, bfd_false,
300       bfd_false, bfd_false        bfd_false, bfd_false
301      },      },
302      {                           /* bfd_write_contents */      {                                   /* bfd_write_contents.  */
303       bfd_false, bfd_false,        bfd_false, bfd_false,
304       bfd_false, bfd_false        bfd_false, bfd_false
305      },      },
306    
307         BFD_JUMP_TABLE_GENERIC (_bfd_generic),      BFD_JUMP_TABLE_GENERIC (_bfd_generic),
308         BFD_JUMP_TABLE_COPY (_bfd_generic),      BFD_JUMP_TABLE_COPY (_bfd_generic),
309         BFD_JUMP_TABLE_CORE (netbsd),      BFD_JUMP_TABLE_CORE (netbsd),
310         BFD_JUMP_TABLE_ARCHIVE (_bfd_noarchive),      BFD_JUMP_TABLE_ARCHIVE (_bfd_noarchive),
311         BFD_JUMP_TABLE_SYMBOLS (_bfd_nosymbols),      BFD_JUMP_TABLE_SYMBOLS (_bfd_nosymbols),
312         BFD_JUMP_TABLE_RELOCS (_bfd_norelocs),      BFD_JUMP_TABLE_RELOCS (_bfd_norelocs),
313         BFD_JUMP_TABLE_WRITE (_bfd_generic),      BFD_JUMP_TABLE_WRITE (_bfd_generic),
314         BFD_JUMP_TABLE_LINK (_bfd_nolink),      BFD_JUMP_TABLE_LINK (_bfd_nolink),
315         BFD_JUMP_TABLE_DYNAMIC (_bfd_nodynamic),      BFD_JUMP_TABLE_DYNAMIC (_bfd_nodynamic),
316    
317      NULL,      NULL,
318    
319      (PTR) 0                     /* backend_data */      (PTR) 0                             /* Backend_data.  */
320  };    };

Legend:
Removed from v.1.1.1.1  
changed lines
  Added in v.1.2

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26