1999-05-03 09:29:11 +02:00
/* BFD back-end for HP/UX core files.
* bfd-in.h (bfd_getb64, bfd_getl64): Replace bfd_byte* with void*.
(bfd_getb32, bfd_getl32, bfd_getb16, bfd_getl16): Likewise.
(bfd_getb_signed_64, bfd_getl_signed_64): Likewise.
(bfd_getb_signed_32, bfd_getl_signed_32): Likewise.
(bfd_getb_signed_16, bfd_getl_signed_16): Likewise.
(bfd_putb64, bfd_putl64, bfd_putb32, bfd_putl32): Likewise.
(bfd_putb16, bfd_putl16, bfd_get_bits, bfd_put_bits): Likewise.
* libbfd.c: Likewise in function definitions.
(bfd_put_8): Mask with 0xff rather than casting to char.
(bfd_putb16, bfd_putl16, bfd_putb32, bfd_putl32): Likewise.
(bfd_putb64, bfd_putl64, bfd_put_bits): Likewise.
(H_PUT_64, H_PUT_32, H_PUT_16, H_PUT_8): Remove casts, simplify.
(H_PUT_S64, H_PUT_S32, H_PUT_S16, H_PUT_S8): Likewise.
(H_GET_64, H_GET_32, H_GET_16, H_GET_8): Likewise.
(H_GET_S64, H_GET_S32, H_GET_S16, H_GET_S8): Likewise.
* libaout.h (H_PUT_64 H_PUT_32, H_PUT_16): Remove casts, simplify.
(H_PUT_S64, H_PUT_S32, H_PUT_S16): Likewise.
(H_GET_64, H_GET_32, H_GET_16): Likewise.
(H_GET_S64, H_GET_S32, H_GET_S16): Likewise.
* archive.c (do_slurp_coff_armap): Update swap prototype.
* coff-tic54x.c (tic54x_getl32): Replace bfd_byte* with void*.
(tic54x_getl_signed_32): Likewise.
(tic54x_putl32): Likewise. Mask with 0xff rather than casting to char.
* mach-o.c (bfd_mach_o_read_header): Update get32 prototype.
* pdp11.c (bfd_getp32): Make static, replace bfd_byte* with void*.
(bfd_getp_signed_32, bfd_putp32): Likewise.
* targets.c (struct bfd_target): Use void* in place of bfd_byte* for
bfd_getx64, bfd_getx_signed_64, bfd_putx64, bfd_getx32,
bfd_getx_signed_32, bfd_putx32, bfd_getx16, bfd_getx_signed_16,
bfd_putx16, bfd_h_getx64, bfd_h_getx_signed_64, bfd_h_putx64,
bfd_h_getx32, bfd_h_getx_signed_32, bfd_h_putx32, bfd_h_getx16,
bfd_h_getx_signed_16, bfd_h_putx16.
* aix386-core.c (NO_GET, NO_GETS, NO_PUT): Update prototypes.
* hppabsd-core.c: Similarly. Rename NO_SIGNED_GET to NO_GETS.
* hpux-core.c: Likewise.
* irix-core.c: Likewise.
* netbsd-core.c: Likewise.
* osf-core.c: Likewise.
* ptrace-core.c: Likewise.
* sco5-core.c: Likewise.
* trad-core.c: Likewise.
* bfd-in2.h: Regenerate.
2004-03-15 13:23:11 +01:00
Copyright 1993 , 1994 , 1996 , 1998 , 1999 , 2001 , 2002 , 2003 , 2004
2001-03-08 22:04:02 +01:00
Free Software Foundation , Inc .
1999-05-03 09:29:11 +02:00
Written by Stu Grossman , Cygnus Support .
Converted to back - end form by Ian Lance Taylor , Cygnus SUpport
This file is part of BFD , the Binary File Descriptor library .
This program is free software ; you can redistribute it and / or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation ; either version 2 of the License , or
( at your option ) any later version .
This program is distributed in the hope that it will be useful ,
but WITHOUT ANY WARRANTY ; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
GNU General Public License for more details .
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 . , 59 Temple Place - Suite 330 , Boston , MA 02111 - 1307 , USA . */
/* This file can only be compiled on systems which use HP/UX style
core files . */
# include "bfd.h"
# include "sysdep.h"
# include "libbfd.h"
# if defined (HOST_HPPAHPUX) || defined (HOST_HP300HPUX) || defined (HOST_HPPAMPEIX)
/* FIXME: sys/core.h doesn't exist for HPUX version 7. HPUX version
5 , 6 , and 7 core files seem to be standard trad - core . c type core
files ; can we just use trad - core . c in addition to this file ? */
# include <sys/core.h>
# include <sys/utsname.h>
# endif /* HOST_HPPAHPUX */
# ifdef HOST_HPPABSD
/* Not a very swift place to put it, but that's where the BSD port
puts them . */
# include "/hpux/usr/include/sys/core.h"
# endif /* HOST_HPPABSD */
# include <sys/param.h>
# ifdef HAVE_DIRENT_H
# include <dirent.h>
# else
# ifdef HAVE_SYS_NDIR_H
# include <sys / ndir.h>
# endif
# ifdef HAVE_SYS_DIR_H
# include <sys / dir.h>
# endif
# ifdef HAVE_NDIR_H
# include <ndir.h>
# endif
# endif
# include <signal.h>
# include <machine/reg.h>
# include <sys/user.h> /* After a.out.h */
# include <sys/file.h>
/* Kludge: There's no explicit mechanism provided by sys/core.h to
conditionally know whether a proc_info has thread id fields .
However , CORE_ANON_SHMEM shows up first at 10.30 , which is
happily also when meaningful thread id ' s show up in proc_info . */
# if defined(CORE_ANON_SHMEM)
# define PROC_INFO_HAS_THREAD_ID (1)
# endif
/* This type appears at HP-UX 10.30. Defining it if not defined
by sys / core . h allows us to build for older HP - UX ' s , and ( since
it won ' t be encountered in core - dumps from older HP - UX ' s ) is
harmless . */
# if !defined(CORE_ANON_SHMEM)
# define CORE_ANON_SHMEM 0x00000200 /* anonymous shared memory */
# endif
/* These are stored in the bfd's tdata */
/* .lwpid and .user_tid are only valid if PROC_INFO_HAS_THREAD_ID, else they
are set to 0. Also , until HP - UX implements MxN threads , . user_tid and
. lwpid are synonymous . */
2001-01-23 21:27:54 +01:00
struct hpux_core_struct
1999-05-03 09:29:11 +02:00
{
int sig ;
int lwpid ; /* Kernel thread ID. */
unsigned long user_tid ; /* User thread ID. */
char cmd [ MAXCOMLEN + 1 ] ;
} ;
# define core_hdr(bfd) ((bfd)->tdata.hpux_core_data)
# define core_signal(bfd) (core_hdr(bfd)->sig)
# define core_command(bfd) (core_hdr(bfd)->cmd)
# define core_kernel_thread_id(bfd) (core_hdr(bfd)->lwpid)
# define core_user_thread_id(bfd) (core_hdr(bfd)->user_tid)
Touches most files in bfd/, so likely will be blamed for everything..
o bfd_read and bfd_write lose an unnecessary param and become
bfd_bread and bfd_bwrite.
o bfd_*alloc now all take a bfd_size_type arg, and will error if
size_t is too small. eg. 32 bit host, 64 bit bfd, verrry big files
or bugs in linker scripts etc.
o file_ptr becomes a bfd_signed_vma. Besides matching sizes with
various other types involved in handling sections, this should make
it easier for bfd to support a 64 bit off_t on 32 bit hosts that
provide it.
o I've made the H_GET_* and H_PUT_* macros (which invoke bfd_h_{get,put}_*)
generally available. They now cast their args to bfd_vma and
bfd_byte * as appropriate, which removes a swag of casts from the
source.
o Bug fixes to bfd_get8, aix386_core_vec, elf32_h8_relax_section, and
aout-encap.c.
o Zillions of formatting and -Wconversion fixes.
2001-09-18 11:57:26 +02:00
static asection * make_bfd_asection
PARAMS ( ( bfd * , const char * , flagword , bfd_size_type , bfd_vma ,
unsigned int ) ) ;
2002-11-30 09:39:46 +01:00
static const bfd_target * hpux_core_core_file_p
PARAMS ( ( bfd * ) ) ;
static char * hpux_core_core_file_failing_command
PARAMS ( ( bfd * ) ) ;
static int hpux_core_core_file_failing_signal
PARAMS ( ( bfd * ) ) ;
static bfd_boolean hpux_core_core_file_matches_executable_p
Touches most files in bfd/, so likely will be blamed for everything..
o bfd_read and bfd_write lose an unnecessary param and become
bfd_bread and bfd_bwrite.
o bfd_*alloc now all take a bfd_size_type arg, and will error if
size_t is too small. eg. 32 bit host, 64 bit bfd, verrry big files
or bugs in linker scripts etc.
o file_ptr becomes a bfd_signed_vma. Besides matching sizes with
various other types involved in handling sections, this should make
it easier for bfd to support a 64 bit off_t on 32 bit hosts that
provide it.
o I've made the H_GET_* and H_PUT_* macros (which invoke bfd_h_{get,put}_*)
generally available. They now cast their args to bfd_vma and
bfd_byte * as appropriate, which removes a swag of casts from the
source.
o Bug fixes to bfd_get8, aix386_core_vec, elf32_h8_relax_section, and
aout-encap.c.
o Zillions of formatting and -Wconversion fixes.
2001-09-18 11:57:26 +02:00
PARAMS ( ( bfd * , bfd * ) ) ;
2002-11-30 09:39:46 +01:00
static void swap_abort
PARAMS ( ( void ) ) ;
1999-05-03 09:29:11 +02:00
static asection *
make_bfd_asection ( abfd , name , flags , _raw_size , vma , alignment_power )
bfd * abfd ;
Touches most files in bfd/, so likely will be blamed for everything..
o bfd_read and bfd_write lose an unnecessary param and become
bfd_bread and bfd_bwrite.
o bfd_*alloc now all take a bfd_size_type arg, and will error if
size_t is too small. eg. 32 bit host, 64 bit bfd, verrry big files
or bugs in linker scripts etc.
o file_ptr becomes a bfd_signed_vma. Besides matching sizes with
various other types involved in handling sections, this should make
it easier for bfd to support a 64 bit off_t on 32 bit hosts that
provide it.
o I've made the H_GET_* and H_PUT_* macros (which invoke bfd_h_{get,put}_*)
generally available. They now cast their args to bfd_vma and
bfd_byte * as appropriate, which removes a swag of casts from the
source.
o Bug fixes to bfd_get8, aix386_core_vec, elf32_h8_relax_section, and
aout-encap.c.
o Zillions of formatting and -Wconversion fixes.
2001-09-18 11:57:26 +02:00
const char * name ;
1999-05-03 09:29:11 +02:00
flagword flags ;
bfd_size_type _raw_size ;
bfd_vma vma ;
unsigned int alignment_power ;
{
asection * asect ;
char * newname ;
Touches most files in bfd/, so likely will be blamed for everything..
o bfd_read and bfd_write lose an unnecessary param and become
bfd_bread and bfd_bwrite.
o bfd_*alloc now all take a bfd_size_type arg, and will error if
size_t is too small. eg. 32 bit host, 64 bit bfd, verrry big files
or bugs in linker scripts etc.
o file_ptr becomes a bfd_signed_vma. Besides matching sizes with
various other types involved in handling sections, this should make
it easier for bfd to support a 64 bit off_t on 32 bit hosts that
provide it.
o I've made the H_GET_* and H_PUT_* macros (which invoke bfd_h_{get,put}_*)
generally available. They now cast their args to bfd_vma and
bfd_byte * as appropriate, which removes a swag of casts from the
source.
o Bug fixes to bfd_get8, aix386_core_vec, elf32_h8_relax_section, and
aout-encap.c.
o Zillions of formatting and -Wconversion fixes.
2001-09-18 11:57:26 +02:00
newname = bfd_alloc ( abfd , ( bfd_size_type ) strlen ( name ) + 1 ) ;
1999-05-03 09:29:11 +02:00
if ( ! newname )
return NULL ;
strcpy ( newname , name ) ;
asect = bfd_make_section_anyway ( abfd , newname ) ;
if ( ! asect )
return NULL ;
asect - > flags = flags ;
asect - > _raw_size = _raw_size ;
asect - > vma = vma ;
asect - > filepos = bfd_tell ( abfd ) ;
asect - > alignment_power = alignment_power ;
return asect ;
}
/* this function builds a bfd target if the file is a corefile.
It returns null or 0 if it finds out thaat it is not a core file .
The way it checks this is by looking for allowed ' type ' field values .
These are declared in sys / core . h
There are some values which are ' reserved for future use ' . In particular
CORE_NONE is actually defined as 0. This may be a catch - all for cases
in which the core file is generated by some non - hpux application .
( I am just guessing here ! )
*/
static const bfd_target *
hpux_core_core_file_p ( abfd )
bfd * abfd ;
{
int good_sections = 0 ;
int unknown_sections = 0 ;
core_hdr ( abfd ) = ( struct hpux_core_struct * )
Touches most files in bfd/, so likely will be blamed for everything..
o bfd_read and bfd_write lose an unnecessary param and become
bfd_bread and bfd_bwrite.
o bfd_*alloc now all take a bfd_size_type arg, and will error if
size_t is too small. eg. 32 bit host, 64 bit bfd, verrry big files
or bugs in linker scripts etc.
o file_ptr becomes a bfd_signed_vma. Besides matching sizes with
various other types involved in handling sections, this should make
it easier for bfd to support a 64 bit off_t on 32 bit hosts that
provide it.
o I've made the H_GET_* and H_PUT_* macros (which invoke bfd_h_{get,put}_*)
generally available. They now cast their args to bfd_vma and
bfd_byte * as appropriate, which removes a swag of casts from the
source.
o Bug fixes to bfd_get8, aix386_core_vec, elf32_h8_relax_section, and
aout-encap.c.
o Zillions of formatting and -Wconversion fixes.
2001-09-18 11:57:26 +02:00
bfd_zalloc ( abfd , ( bfd_size_type ) sizeof ( struct hpux_core_struct ) ) ;
1999-05-03 09:29:11 +02:00
if ( ! core_hdr ( abfd ) )
return NULL ;
while ( 1 )
{
int val ;
struct corehead core_header ;
Touches most files in bfd/, so likely will be blamed for everything..
o bfd_read and bfd_write lose an unnecessary param and become
bfd_bread and bfd_bwrite.
o bfd_*alloc now all take a bfd_size_type arg, and will error if
size_t is too small. eg. 32 bit host, 64 bit bfd, verrry big files
or bugs in linker scripts etc.
o file_ptr becomes a bfd_signed_vma. Besides matching sizes with
various other types involved in handling sections, this should make
it easier for bfd to support a 64 bit off_t on 32 bit hosts that
provide it.
o I've made the H_GET_* and H_PUT_* macros (which invoke bfd_h_{get,put}_*)
generally available. They now cast their args to bfd_vma and
bfd_byte * as appropriate, which removes a swag of casts from the
source.
o Bug fixes to bfd_get8, aix386_core_vec, elf32_h8_relax_section, and
aout-encap.c.
o Zillions of formatting and -Wconversion fixes.
2001-09-18 11:57:26 +02:00
val = bfd_bread ( ( void * ) & core_header ,
( bfd_size_type ) sizeof core_header , abfd ) ;
1999-05-03 09:29:11 +02:00
if ( val < = 0 )
break ;
switch ( core_header . type )
{
case CORE_KERNEL :
case CORE_FORMAT :
Touches most files in bfd/, so likely will be blamed for everything..
o bfd_read and bfd_write lose an unnecessary param and become
bfd_bread and bfd_bwrite.
o bfd_*alloc now all take a bfd_size_type arg, and will error if
size_t is too small. eg. 32 bit host, 64 bit bfd, verrry big files
or bugs in linker scripts etc.
o file_ptr becomes a bfd_signed_vma. Besides matching sizes with
various other types involved in handling sections, this should make
it easier for bfd to support a 64 bit off_t on 32 bit hosts that
provide it.
o I've made the H_GET_* and H_PUT_* macros (which invoke bfd_h_{get,put}_*)
generally available. They now cast their args to bfd_vma and
bfd_byte * as appropriate, which removes a swag of casts from the
source.
o Bug fixes to bfd_get8, aix386_core_vec, elf32_h8_relax_section, and
aout-encap.c.
o Zillions of formatting and -Wconversion fixes.
2001-09-18 11:57:26 +02:00
/* Just skip this. */
bfd_seek ( abfd , ( file_ptr ) core_header . len , SEEK_CUR ) ;
1999-05-03 09:29:11 +02:00
good_sections + + ;
break ;
case CORE_EXEC :
{
struct proc_exec proc_exec ;
Touches most files in bfd/, so likely will be blamed for everything..
o bfd_read and bfd_write lose an unnecessary param and become
bfd_bread and bfd_bwrite.
o bfd_*alloc now all take a bfd_size_type arg, and will error if
size_t is too small. eg. 32 bit host, 64 bit bfd, verrry big files
or bugs in linker scripts etc.
o file_ptr becomes a bfd_signed_vma. Besides matching sizes with
various other types involved in handling sections, this should make
it easier for bfd to support a 64 bit off_t on 32 bit hosts that
provide it.
o I've made the H_GET_* and H_PUT_* macros (which invoke bfd_h_{get,put}_*)
generally available. They now cast their args to bfd_vma and
bfd_byte * as appropriate, which removes a swag of casts from the
source.
o Bug fixes to bfd_get8, aix386_core_vec, elf32_h8_relax_section, and
aout-encap.c.
o Zillions of formatting and -Wconversion fixes.
2001-09-18 11:57:26 +02:00
if ( bfd_bread ( ( void * ) & proc_exec , ( bfd_size_type ) core_header . len ,
abfd ) ! = core_header . len )
1999-05-03 09:29:11 +02:00
break ;
strncpy ( core_command ( abfd ) , proc_exec . cmd , MAXCOMLEN + 1 ) ;
good_sections + + ;
}
break ;
case CORE_PROC :
{
struct proc_info proc_info ;
char secname [ 100 ] ; /* Of arbitrary size, but plenty large. */
/* We need to read this section, 'cause we need to determine
whether the core - dumped app was threaded before we create
any . reg sections . */
Touches most files in bfd/, so likely will be blamed for everything..
o bfd_read and bfd_write lose an unnecessary param and become
bfd_bread and bfd_bwrite.
o bfd_*alloc now all take a bfd_size_type arg, and will error if
size_t is too small. eg. 32 bit host, 64 bit bfd, verrry big files
or bugs in linker scripts etc.
o file_ptr becomes a bfd_signed_vma. Besides matching sizes with
various other types involved in handling sections, this should make
it easier for bfd to support a 64 bit off_t on 32 bit hosts that
provide it.
o I've made the H_GET_* and H_PUT_* macros (which invoke bfd_h_{get,put}_*)
generally available. They now cast their args to bfd_vma and
bfd_byte * as appropriate, which removes a swag of casts from the
source.
o Bug fixes to bfd_get8, aix386_core_vec, elf32_h8_relax_section, and
aout-encap.c.
o Zillions of formatting and -Wconversion fixes.
2001-09-18 11:57:26 +02:00
if ( bfd_bread ( & proc_info , ( bfd_size_type ) core_header . len , abfd )
1999-05-03 09:29:11 +02:00
! = core_header . len )
break ;
/* However, we also want to create those sections with the
file positioned at the start of the record , it seems . */
Touches most files in bfd/, so likely will be blamed for everything..
o bfd_read and bfd_write lose an unnecessary param and become
bfd_bread and bfd_bwrite.
o bfd_*alloc now all take a bfd_size_type arg, and will error if
size_t is too small. eg. 32 bit host, 64 bit bfd, verrry big files
or bugs in linker scripts etc.
o file_ptr becomes a bfd_signed_vma. Besides matching sizes with
various other types involved in handling sections, this should make
it easier for bfd to support a 64 bit off_t on 32 bit hosts that
provide it.
o I've made the H_GET_* and H_PUT_* macros (which invoke bfd_h_{get,put}_*)
generally available. They now cast their args to bfd_vma and
bfd_byte * as appropriate, which removes a swag of casts from the
source.
o Bug fixes to bfd_get8, aix386_core_vec, elf32_h8_relax_section, and
aout-encap.c.
o Zillions of formatting and -Wconversion fixes.
2001-09-18 11:57:26 +02:00
if ( bfd_seek ( abfd , ( file_ptr ) - core_header . len , SEEK_CUR ) ! = 0 )
1999-05-03 09:29:11 +02:00
break ;
# if defined(PROC_INFO_HAS_THREAD_ID)
core_kernel_thread_id ( abfd ) = proc_info . lwpid ;
core_user_thread_id ( abfd ) = proc_info . user_tid ;
# else
core_kernel_thread_id ( abfd ) = 0 ;
core_user_thread_id ( abfd ) = 0 ;
# endif
/* If the program was unthreaded, then we'll just create a
. reg section .
If the program was threaded , then we ' ll create . reg / XXXXX
section for each thread , where XXXXX is a printable
representation of the kernel thread id . We ' ll also
create a . reg section for the thread that was running
and signalled at the time of the core - dump ( i . e . , this
is effectively an alias , needed to keep GDB happy . )
Note that we use ` . reg / XXXXX ' as opposed to ' . regXXXXX '
because GDB expects that . reg2 will be the floating -
point registers . */
if ( core_kernel_thread_id ( abfd ) = = 0 )
{
if ( ! make_bfd_asection ( abfd , " .reg " ,
SEC_HAS_CONTENTS ,
core_header . len ,
( int ) & proc_info - ( int ) & proc_info . hw_regs ,
2 ) )
2002-01-05 14:11:33 +01:00
goto fail ;
1999-05-03 09:29:11 +02:00
}
else
{
/* There are threads. Is this the one that caused the
core - dump ? We ' ll claim it was the running thread . */
if ( proc_info . sig ! = - 1 )
{
if ( ! make_bfd_asection ( abfd , " .reg " ,
SEC_HAS_CONTENTS ,
core_header . len ,
( int ) & proc_info - ( int ) & proc_info . hw_regs ,
2 ) )
2002-01-05 14:11:33 +01:00
goto fail ;
1999-05-03 09:29:11 +02:00
}
/* We always make one of these sections, for every thread. */
sprintf ( secname , " .reg/%d " , core_kernel_thread_id ( abfd ) ) ;
if ( ! make_bfd_asection ( abfd , secname ,
SEC_HAS_CONTENTS ,
core_header . len ,
( int ) & proc_info - ( int ) & proc_info . hw_regs ,
2 ) )
2002-01-05 14:11:33 +01:00
goto fail ;
1999-05-03 09:29:11 +02:00
}
core_signal ( abfd ) = proc_info . sig ;
Touches most files in bfd/, so likely will be blamed for everything..
o bfd_read and bfd_write lose an unnecessary param and become
bfd_bread and bfd_bwrite.
o bfd_*alloc now all take a bfd_size_type arg, and will error if
size_t is too small. eg. 32 bit host, 64 bit bfd, verrry big files
or bugs in linker scripts etc.
o file_ptr becomes a bfd_signed_vma. Besides matching sizes with
various other types involved in handling sections, this should make
it easier for bfd to support a 64 bit off_t on 32 bit hosts that
provide it.
o I've made the H_GET_* and H_PUT_* macros (which invoke bfd_h_{get,put}_*)
generally available. They now cast their args to bfd_vma and
bfd_byte * as appropriate, which removes a swag of casts from the
source.
o Bug fixes to bfd_get8, aix386_core_vec, elf32_h8_relax_section, and
aout-encap.c.
o Zillions of formatting and -Wconversion fixes.
2001-09-18 11:57:26 +02:00
if ( bfd_seek ( abfd , ( file_ptr ) core_header . len , SEEK_CUR ) ! = 0 )
1999-05-03 09:29:11 +02:00
break ;
good_sections + + ;
}
break ;
case CORE_DATA :
case CORE_STACK :
case CORE_TEXT :
case CORE_MMF :
case CORE_SHM :
case CORE_ANON_SHMEM :
if ( ! make_bfd_asection ( abfd , " .data " ,
SEC_ALLOC + SEC_LOAD + SEC_HAS_CONTENTS ,
core_header . len , core_header . addr , 2 ) )
2002-01-05 14:11:33 +01:00
goto fail ;
1999-05-03 09:29:11 +02:00
Touches most files in bfd/, so likely will be blamed for everything..
o bfd_read and bfd_write lose an unnecessary param and become
bfd_bread and bfd_bwrite.
o bfd_*alloc now all take a bfd_size_type arg, and will error if
size_t is too small. eg. 32 bit host, 64 bit bfd, verrry big files
or bugs in linker scripts etc.
o file_ptr becomes a bfd_signed_vma. Besides matching sizes with
various other types involved in handling sections, this should make
it easier for bfd to support a 64 bit off_t on 32 bit hosts that
provide it.
o I've made the H_GET_* and H_PUT_* macros (which invoke bfd_h_{get,put}_*)
generally available. They now cast their args to bfd_vma and
bfd_byte * as appropriate, which removes a swag of casts from the
source.
o Bug fixes to bfd_get8, aix386_core_vec, elf32_h8_relax_section, and
aout-encap.c.
o Zillions of formatting and -Wconversion fixes.
2001-09-18 11:57:26 +02:00
bfd_seek ( abfd , ( file_ptr ) core_header . len , SEEK_CUR ) ;
1999-05-03 09:29:11 +02:00
good_sections + + ;
break ;
case CORE_NONE :
/* Let's not punt if we encounter a section of unknown
type . Rather , let ' s make a note of it . If we later
see that there were also " good " sections , then we ' ll
declare that this a core file , but we ' ll also warn that
it may be incompatible with this gdb .
*/
unknown_sections + + ;
break ;
2001-01-23 21:27:54 +01:00
2002-01-05 14:11:33 +01:00
default :
goto fail ; /*unrecognized core file type */
1999-05-03 09:29:11 +02:00
}
}
/* OK, we believe you. You're a core file (sure, sure). */
/* Were there sections of unknown type? If so, yet there were
at least some complete sections of known type , then , issue
a warning . Possibly the core file was generated on a version
of HP - UX that is incompatible with that for which this gdb was
built .
*/
if ( ( unknown_sections > 0 ) & & ( good_sections > 0 ) )
( * _bfd_error_handler )
( " %s appears to be a core file, \n but contains unknown sections. It may have been created on an incompatible \n version of HP-UX. As a result, some information may be unavailable. \n " ,
abfd - > filename ) ;
return abfd - > xvec ;
2002-01-05 14:11:33 +01:00
fail :
bfd_release ( abfd , core_hdr ( abfd ) ) ;
core_hdr ( abfd ) = NULL ;
bfd_section_list_clear ( abfd ) ;
return NULL ;
1999-05-03 09:29:11 +02:00
}
static char *
hpux_core_core_file_failing_command ( abfd )
bfd * abfd ;
{
return core_command ( abfd ) ;
}
static int
hpux_core_core_file_failing_signal ( abfd )
bfd * abfd ;
{
return core_signal ( abfd ) ;
}
2002-11-30 09:39:46 +01:00
static bfd_boolean
1999-05-03 09:29:11 +02:00
hpux_core_core_file_matches_executable_p ( core_bfd , exec_bfd )
Touches most files in bfd/, so likely will be blamed for everything..
o bfd_read and bfd_write lose an unnecessary param and become
bfd_bread and bfd_bwrite.
o bfd_*alloc now all take a bfd_size_type arg, and will error if
size_t is too small. eg. 32 bit host, 64 bit bfd, verrry big files
or bugs in linker scripts etc.
o file_ptr becomes a bfd_signed_vma. Besides matching sizes with
various other types involved in handling sections, this should make
it easier for bfd to support a 64 bit off_t on 32 bit hosts that
provide it.
o I've made the H_GET_* and H_PUT_* macros (which invoke bfd_h_{get,put}_*)
generally available. They now cast their args to bfd_vma and
bfd_byte * as appropriate, which removes a swag of casts from the
source.
o Bug fixes to bfd_get8, aix386_core_vec, elf32_h8_relax_section, and
aout-encap.c.
o Zillions of formatting and -Wconversion fixes.
2001-09-18 11:57:26 +02:00
bfd * core_bfd ATTRIBUTE_UNUSED ;
bfd * exec_bfd ATTRIBUTE_UNUSED ;
1999-05-03 09:29:11 +02:00
{
2002-11-30 09:39:46 +01:00
return TRUE ; /* FIXME, We have no way of telling at this point */
1999-05-03 09:29:11 +02:00
}
/* If somebody calls any byte-swapping routines, shoot them. */
static void
Touches most files in bfd/, so likely will be blamed for everything..
o bfd_read and bfd_write lose an unnecessary param and become
bfd_bread and bfd_bwrite.
o bfd_*alloc now all take a bfd_size_type arg, and will error if
size_t is too small. eg. 32 bit host, 64 bit bfd, verrry big files
or bugs in linker scripts etc.
o file_ptr becomes a bfd_signed_vma. Besides matching sizes with
various other types involved in handling sections, this should make
it easier for bfd to support a 64 bit off_t on 32 bit hosts that
provide it.
o I've made the H_GET_* and H_PUT_* macros (which invoke bfd_h_{get,put}_*)
generally available. They now cast their args to bfd_vma and
bfd_byte * as appropriate, which removes a swag of casts from the
source.
o Bug fixes to bfd_get8, aix386_core_vec, elf32_h8_relax_section, and
aout-encap.c.
o Zillions of formatting and -Wconversion fixes.
2001-09-18 11:57:26 +02:00
swap_abort ( )
1999-05-03 09:29:11 +02:00
{
abort ( ) ; /* This way doesn't require any declaration for ANSI to fuck up */
}
* bfd-in.h (bfd_getb64, bfd_getl64): Replace bfd_byte* with void*.
(bfd_getb32, bfd_getl32, bfd_getb16, bfd_getl16): Likewise.
(bfd_getb_signed_64, bfd_getl_signed_64): Likewise.
(bfd_getb_signed_32, bfd_getl_signed_32): Likewise.
(bfd_getb_signed_16, bfd_getl_signed_16): Likewise.
(bfd_putb64, bfd_putl64, bfd_putb32, bfd_putl32): Likewise.
(bfd_putb16, bfd_putl16, bfd_get_bits, bfd_put_bits): Likewise.
* libbfd.c: Likewise in function definitions.
(bfd_put_8): Mask with 0xff rather than casting to char.
(bfd_putb16, bfd_putl16, bfd_putb32, bfd_putl32): Likewise.
(bfd_putb64, bfd_putl64, bfd_put_bits): Likewise.
(H_PUT_64, H_PUT_32, H_PUT_16, H_PUT_8): Remove casts, simplify.
(H_PUT_S64, H_PUT_S32, H_PUT_S16, H_PUT_S8): Likewise.
(H_GET_64, H_GET_32, H_GET_16, H_GET_8): Likewise.
(H_GET_S64, H_GET_S32, H_GET_S16, H_GET_S8): Likewise.
* libaout.h (H_PUT_64 H_PUT_32, H_PUT_16): Remove casts, simplify.
(H_PUT_S64, H_PUT_S32, H_PUT_S16): Likewise.
(H_GET_64, H_GET_32, H_GET_16): Likewise.
(H_GET_S64, H_GET_S32, H_GET_S16): Likewise.
* archive.c (do_slurp_coff_armap): Update swap prototype.
* coff-tic54x.c (tic54x_getl32): Replace bfd_byte* with void*.
(tic54x_getl_signed_32): Likewise.
(tic54x_putl32): Likewise. Mask with 0xff rather than casting to char.
* mach-o.c (bfd_mach_o_read_header): Update get32 prototype.
* pdp11.c (bfd_getp32): Make static, replace bfd_byte* with void*.
(bfd_getp_signed_32, bfd_putp32): Likewise.
* targets.c (struct bfd_target): Use void* in place of bfd_byte* for
bfd_getx64, bfd_getx_signed_64, bfd_putx64, bfd_getx32,
bfd_getx_signed_32, bfd_putx32, bfd_getx16, bfd_getx_signed_16,
bfd_putx16, bfd_h_getx64, bfd_h_getx_signed_64, bfd_h_putx64,
bfd_h_getx32, bfd_h_getx_signed_32, bfd_h_putx32, bfd_h_getx16,
bfd_h_getx_signed_16, bfd_h_putx16.
* aix386-core.c (NO_GET, NO_GETS, NO_PUT): Update prototypes.
* hppabsd-core.c: Similarly. Rename NO_SIGNED_GET to NO_GETS.
* hpux-core.c: Likewise.
* irix-core.c: Likewise.
* netbsd-core.c: Likewise.
* osf-core.c: Likewise.
* ptrace-core.c: Likewise.
* sco5-core.c: Likewise.
* trad-core.c: Likewise.
* bfd-in2.h: Regenerate.
2004-03-15 13:23:11 +01:00
# define NO_GET ((bfd_vma (*) (const void *)) swap_abort)
# define NO_PUT ((void (*) (bfd_vma, void *)) swap_abort)
# define NO_GETS ((bfd_signed_vma (*) (const void *)) swap_abort)
1999-05-03 09:29:11 +02:00
const bfd_target hpux_core_vec =
{
" hpux-core " ,
bfd_target_unknown_flavour ,
BFD_ENDIAN_BIG , /* target byte order */
BFD_ENDIAN_BIG , /* target headers byte order */
( HAS_RELOC | EXEC_P | /* object flags */
HAS_LINENO | HAS_DEBUG |
HAS_SYMS | HAS_LOCALS | WP_TEXT | D_PAGED ) ,
( SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC ) , /* section flags */
0 , /* symbol prefix */
' ' , /* ar_pad_char */
16 , /* ar_max_namelen */
* bfd-in.h (bfd_getb64, bfd_getl64): Replace bfd_byte* with void*.
(bfd_getb32, bfd_getl32, bfd_getb16, bfd_getl16): Likewise.
(bfd_getb_signed_64, bfd_getl_signed_64): Likewise.
(bfd_getb_signed_32, bfd_getl_signed_32): Likewise.
(bfd_getb_signed_16, bfd_getl_signed_16): Likewise.
(bfd_putb64, bfd_putl64, bfd_putb32, bfd_putl32): Likewise.
(bfd_putb16, bfd_putl16, bfd_get_bits, bfd_put_bits): Likewise.
* libbfd.c: Likewise in function definitions.
(bfd_put_8): Mask with 0xff rather than casting to char.
(bfd_putb16, bfd_putl16, bfd_putb32, bfd_putl32): Likewise.
(bfd_putb64, bfd_putl64, bfd_put_bits): Likewise.
(H_PUT_64, H_PUT_32, H_PUT_16, H_PUT_8): Remove casts, simplify.
(H_PUT_S64, H_PUT_S32, H_PUT_S16, H_PUT_S8): Likewise.
(H_GET_64, H_GET_32, H_GET_16, H_GET_8): Likewise.
(H_GET_S64, H_GET_S32, H_GET_S16, H_GET_S8): Likewise.
* libaout.h (H_PUT_64 H_PUT_32, H_PUT_16): Remove casts, simplify.
(H_PUT_S64, H_PUT_S32, H_PUT_S16): Likewise.
(H_GET_64, H_GET_32, H_GET_16): Likewise.
(H_GET_S64, H_GET_S32, H_GET_S16): Likewise.
* archive.c (do_slurp_coff_armap): Update swap prototype.
* coff-tic54x.c (tic54x_getl32): Replace bfd_byte* with void*.
(tic54x_getl_signed_32): Likewise.
(tic54x_putl32): Likewise. Mask with 0xff rather than casting to char.
* mach-o.c (bfd_mach_o_read_header): Update get32 prototype.
* pdp11.c (bfd_getp32): Make static, replace bfd_byte* with void*.
(bfd_getp_signed_32, bfd_putp32): Likewise.
* targets.c (struct bfd_target): Use void* in place of bfd_byte* for
bfd_getx64, bfd_getx_signed_64, bfd_putx64, bfd_getx32,
bfd_getx_signed_32, bfd_putx32, bfd_getx16, bfd_getx_signed_16,
bfd_putx16, bfd_h_getx64, bfd_h_getx_signed_64, bfd_h_putx64,
bfd_h_getx32, bfd_h_getx_signed_32, bfd_h_putx32, bfd_h_getx16,
bfd_h_getx_signed_16, bfd_h_putx16.
* aix386-core.c (NO_GET, NO_GETS, NO_PUT): Update prototypes.
* hppabsd-core.c: Similarly. Rename NO_SIGNED_GET to NO_GETS.
* hpux-core.c: Likewise.
* irix-core.c: Likewise.
* netbsd-core.c: Likewise.
* osf-core.c: Likewise.
* ptrace-core.c: Likewise.
* sco5-core.c: Likewise.
* trad-core.c: Likewise.
* bfd-in2.h: Regenerate.
2004-03-15 13:23:11 +01:00
NO_GET , NO_GETS , NO_PUT , /* 64 bit data */
NO_GET , NO_GETS , NO_PUT , /* 32 bit data */
NO_GET , NO_GETS , NO_PUT , /* 16 bit data */
NO_GET , NO_GETS , NO_PUT , /* 64 bit hdrs */
NO_GET , NO_GETS , NO_PUT , /* 32 bit hdrs */
NO_GET , NO_GETS , NO_PUT , /* 16 bit hdrs */
1999-05-03 09:29:11 +02:00
{ /* bfd_check_format */
_bfd_dummy_target , /* unknown format */
_bfd_dummy_target , /* object file */
_bfd_dummy_target , /* archive */
hpux_core_core_file_p /* a core file */
} ,
{ /* bfd_set_format */
bfd_false , bfd_false ,
bfd_false , bfd_false
} ,
{ /* bfd_write_contents */
bfd_false , bfd_false ,
bfd_false , bfd_false
} ,
2001-01-23 21:27:54 +01:00
2002-01-06 08:30:35 +01:00
BFD_JUMP_TABLE_GENERIC ( _bfd_generic ) ,
BFD_JUMP_TABLE_COPY ( _bfd_generic ) ,
BFD_JUMP_TABLE_CORE ( hpux_core ) ,
BFD_JUMP_TABLE_ARCHIVE ( _bfd_noarchive ) ,
BFD_JUMP_TABLE_SYMBOLS ( _bfd_nosymbols ) ,
BFD_JUMP_TABLE_RELOCS ( _bfd_norelocs ) ,
BFD_JUMP_TABLE_WRITE ( _bfd_generic ) ,
BFD_JUMP_TABLE_LINK ( _bfd_nolink ) ,
BFD_JUMP_TABLE_DYNAMIC ( _bfd_nodynamic ) ,
1999-05-03 09:29:11 +02:00
1999-07-19 16:55:16 +02:00
NULL ,
2001-01-23 21:27:54 +01:00
1999-05-03 09:29:11 +02:00
( PTR ) 0 /* backend_data */
} ;