/* BFD back end for traditional Unix core files (U-area and raw sections)
- Copyright 1988, 1989, 1991, 1992, 1993 Free Software Foundation, Inc.
+ Copyright 1988, 1989, 1991, 1992, 1993, 1994 Free Software Foundation, Inc.
Written by John Gilmore of Cygnus Support.
This file is part of BFD, the Binary File Descriptor library.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
-Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
-
-/* To use this file on a particular host, configure the host with these
- parameters in the config/h-HOST file:
-
- HDEFINES=-DTRAD_CORE
- HDEPFILES=trad-core.o
-
- */
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#include "bfd.h"
#include "sysdep.h"
#include <signal.h>
#include <sys/user.h> /* After a.out.h */
-#if 0
-/* file.h is included by std-host.h. So we better not try to include it
- twice; on some systems (dpx2) it is not protected against multiple
- inclusion. I have checked that all the hosts which use this file
- include sys/file.h in the hosts file. */
-#include <sys/file.h>
-#endif
-#include <errno.h>
+#ifdef TRAD_HEADER
+#include TRAD_HEADER
+#endif
struct trad_core_struct
{
asection *stack_section;
asection *reg_section;
struct user u;
- } *rawptr;
+ };
#define core_upage(bfd) (&((bfd)->tdata.trad_core_data->u))
#define core_datasec(bfd) ((bfd)->tdata.trad_core_data->data_section)
/* forward declarations */
-bfd_target * trad_unix_core_file_p PARAMS ((bfd *abfd));
+const bfd_target *trad_unix_core_file_p PARAMS ((bfd *abfd));
char * trad_unix_core_file_failing_command PARAMS ((bfd *abfd));
int trad_unix_core_file_failing_signal PARAMS ((bfd *abfd));
boolean trad_unix_core_file_matches_executable_p
/* Handle 4.2-style (and perhaps also sysV-style) core dump file. */
/* ARGSUSED */
-bfd_target *
+const bfd_target *
trad_unix_core_file_p (abfd)
bfd *abfd;
{
int val;
struct user u;
+ struct trad_core_struct *rawptr;
#ifdef TRAD_CORE_USER_OFFSET
/* If defined, this macro is the file position of the user struct. */
a single free() will free them both. */
rawptr = (struct trad_core_struct *)
bfd_zmalloc (sizeof (struct trad_core_struct));
- if (rawptr == NULL) {
- bfd_set_error (bfd_error_no_memory);
+ if (rawptr == NULL)
return 0;
- }
abfd->tdata.trad_core_data = rawptr;
/* Create the sections. This is raunchy, but bfd_close wants to free
them separately. */
- core_stacksec(abfd) = (asection *) bfd_zmalloc (sizeof (asection));
- if (core_stacksec (abfd) == NULL) {
- loser:
- bfd_set_error (bfd_error_no_memory);
- free ((void *)rawptr);
- return 0;
- }
- core_datasec (abfd) = (asection *) bfd_zmalloc (sizeof (asection));
- if (core_datasec (abfd) == NULL) {
- loser1:
- free ((void *)core_stacksec (abfd));
- goto loser;
- }
- core_regsec (abfd) = (asection *) bfd_zmalloc (sizeof (asection));
- if (core_regsec (abfd) == NULL) {
- free ((void *)core_datasec (abfd));
- goto loser1;
- }
+ core_stacksec(abfd) = (asection *) bfd_zalloc (abfd, sizeof (asection));
+ if (core_stacksec (abfd) == NULL)
+ return NULL;
+ core_datasec (abfd) = (asection *) bfd_zalloc (abfd, sizeof (asection));
+ if (core_datasec (abfd) == NULL)
+ return NULL;
+ core_regsec (abfd) = (asection *) bfd_zalloc (abfd, sizeof (asection));
+ if (core_regsec (abfd) == NULL)
+ return NULL;
core_stacksec (abfd)->name = ".stack";
core_datasec (abfd)->name = ".data";
core_stacksec (abfd)->flags = SEC_ALLOC + SEC_LOAD + SEC_HAS_CONTENTS;
core_datasec (abfd)->flags = SEC_ALLOC + SEC_LOAD + SEC_HAS_CONTENTS;
- core_regsec (abfd)->flags = SEC_ALLOC + SEC_HAS_CONTENTS;
+ core_regsec (abfd)->flags = SEC_HAS_CONTENTS;
core_datasec (abfd)->_raw_size = NBPG * u.u_dsize
#ifdef TRAD_CORE_DSIZE_INCLUDES_TSIZE
0 is at the place pointed to by u_ar0 (by setting the vma of the start
of the section to -u_ar0). GDB uses this info to locate the regs,
using minor trickery to get around the offset-or-absolute-addr problem. */
- core_regsec (abfd)->vma = 0 - (int) u.u_ar0;
+ core_regsec (abfd)->vma = 0 - (bfd_vma) u.u_ar0;
core_datasec (abfd)->filepos = NBPG * UPAGES;
core_stacksec (abfd)->filepos = (NBPG * UPAGES) + NBPG * u.u_dsize
#define NO_SIGNED_GET \
((bfd_signed_vma (*) PARAMS ((const bfd_byte *))) swap_abort )
-bfd_target trad_core_vec =
+const bfd_target trad_core_vec =
{
"trad-core",
bfd_target_unknown_flavour,
0, /* symbol prefix */
' ', /* ar_pad_char */
16, /* ar_max_namelen */
- 3, /* minimum alignment power */
NO_GET, NO_SIGNED_GET, NO_PUT, /* 64 bit data */
NO_GET, NO_SIGNED_GET, NO_PUT, /* 32 bit data */
NO_GET, NO_SIGNED_GET, NO_PUT, /* 16 bit data */
BFD_JUMP_TABLE_RELOCS (_bfd_norelocs),
BFD_JUMP_TABLE_WRITE (_bfd_generic),
BFD_JUMP_TABLE_LINK (_bfd_nolink),
+ BFD_JUMP_TABLE_DYNAMIC (_bfd_nodynamic),
(PTR) 0 /* backend_data */
};