* Makefile.in (SFILES): Remove hpacc-abi.c.

(COMMON_OBS): Remove hpacc-abi.o.
	(ALLDEPFILES): Remove hpread.c and $(HPREAD_SOURCE).
	(hpacc-abi.o, hpread.o): Delete rules.
	* somread.c: Delete extern declarations from hpread.c.
	(som_symfile_read): Do not call do_pxdb or hpread_build_psymtabs.
	(som_symfile_finish): Do not call hpread_symfile_finish.
	(som_symfile_init): Do not call hpread_symfile_init.
	* config/pa/hppa64.mt (TDEPFILES): Remove hpread.o.
	* config/pa/hppahpux.mt (TDEPFILES): Likewise.
	* hpacc-abi.c, hpread.c: Deleted.

	* gdbint.texinfo (SOM): Correct location of the SOM reader.
This commit is contained in:
Daniel Jacobowitz 2007-04-10 11:58:15 +00:00
parent 542c95c200
commit 1a92f85678
9 changed files with 23 additions and 6694 deletions

View File

@ -1,3 +1,17 @@
2007-04-10 Daniel Jacobowitz <dan@codesourcery.com>
* Makefile.in (SFILES): Remove hpacc-abi.c.
(COMMON_OBS): Remove hpacc-abi.o.
(ALLDEPFILES): Remove hpread.c and $(HPREAD_SOURCE).
(hpacc-abi.o, hpread.o): Delete rules.
* somread.c: Delete extern declarations from hpread.c.
(som_symfile_read): Do not call do_pxdb or hpread_build_psymtabs.
(som_symfile_finish): Do not call hpread_symfile_finish.
(som_symfile_init): Do not call hpread_symfile_init.
* config/pa/hppa64.mt (TDEPFILES): Remove hpread.o.
* config/pa/hppahpux.mt (TDEPFILES): Likewise.
* hpacc-abi.c, hpread.c: Deleted.
2007-04-10 Daniel Jacobowitz <dan@codesourcery.com> 2007-04-10 Daniel Jacobowitz <dan@codesourcery.com>
* solib-svr4.c (enable_break): Simplify return value. * solib-svr4.c (enable_break): Simplify return value.

View File

@ -538,7 +538,6 @@ SFILES = ada-exp.y ada-lang.c ada-typeprint.c ada-valprint.c \
frame-base.c \ frame-base.c \
frame-unwind.c \ frame-unwind.c \
gdbarch.c arch-utils.c gdbtypes.c gnu-v2-abi.c gnu-v3-abi.c \ gdbarch.c arch-utils.c gdbtypes.c gnu-v2-abi.c gnu-v3-abi.c \
hpacc-abi.c \
inf-loop.c \ inf-loop.c \
infcall.c \ infcall.c \
infcmd.c inflow.c infrun.c \ infcmd.c inflow.c infrun.c \
@ -971,7 +970,7 @@ COMMON_OBS = $(DEPFILES) $(CONFIG_OBS) $(YYOBJ) \
user-regs.o \ user-regs.o \
frame.o frame-unwind.o doublest.o \ frame.o frame-unwind.o doublest.o \
frame-base.o \ frame-base.o \
gnu-v2-abi.o gnu-v3-abi.o hpacc-abi.o cp-abi.o cp-support.o \ gnu-v2-abi.o gnu-v3-abi.o cp-abi.o cp-support.o \
cp-namespace.o \ cp-namespace.o \
reggroups.o regset.o \ reggroups.o regset.o \
trad-frame.o \ trad-frame.o \
@ -1456,7 +1455,6 @@ ALLDEPFILES = \
hppa-tdep.c hppa-hpux-tdep.c hppa-hpux-nat.c \ hppa-tdep.c hppa-hpux-tdep.c hppa-hpux-nat.c \
hppa-linux-tdep.c hppa-linux-nat.c \ hppa-linux-tdep.c hppa-linux-nat.c \
hppabsd-nat.c hppabsd-tdep.c \ hppabsd-nat.c hppabsd-tdep.c \
hpread.c \
i386-tdep.c i386-linux-nat.c \ i386-tdep.c i386-linux-nat.c \
i386v4-nat.c i386-cygwin-tdep.c \ i386v4-nat.c i386-cygwin-tdep.c \
i386bsd-nat.c i386bsd-tdep.c i386fbsd-nat.c i386fbsd-tdep.c \ i386bsd-nat.c i386bsd-tdep.c i386fbsd-nat.c i386fbsd-tdep.c \
@ -1485,7 +1483,7 @@ ALLDEPFILES = \
mips64obsd-nat.c mips64obsd-tdep.c \ mips64obsd-nat.c mips64obsd-tdep.c \
nbsd-nat.c nbsd-tdep.c obsd-tdep.c \ nbsd-nat.c nbsd-tdep.c obsd-tdep.c \
solib-osf.c \ solib-osf.c \
somread.c solib-som.c $(HPREAD_SOURCE) \ somread.c solib-som.c \
posix-hdep.c \ posix-hdep.c \
ppc-sysv-tdep.c ppc-linux-nat.c ppc-linux-tdep.c \ ppc-sysv-tdep.c ppc-linux-nat.c ppc-linux-tdep.c \
ppcnbsd-nat.c ppcnbsd-tdep.c \ ppcnbsd-nat.c ppcnbsd-tdep.c \
@ -2067,8 +2065,6 @@ go32-nat.o: go32-nat.c $(defs_h) $(inferior_h) $(gdb_wait_h) $(gdbcore_h) \
h8300-tdep.o: h8300-tdep.c $(defs_h) $(value_h) $(arch_utils_h) $(regcache_h) \ h8300-tdep.o: h8300-tdep.c $(defs_h) $(value_h) $(arch_utils_h) $(regcache_h) \
$(gdbcore_h) $(objfiles_h) $(gdb_assert_h) $(dis_asm_h) \ $(gdbcore_h) $(objfiles_h) $(gdb_assert_h) $(dis_asm_h) \
$(dwarf2_frame_h) $(frame_base_h) $(frame_unwind_h) $(dwarf2_frame_h) $(frame_base_h) $(frame_unwind_h)
hpacc-abi.o: hpacc-abi.c $(defs_h) $(value_h) $(gdb_regex_h) $(gdb_string_h) \
$(gdbtypes_h) $(gdbcore_h) $(cp_abi_h) $(gnu_v2_abi_h)
hppabsd-nat.o: hppabsd-nat.c $(defs_h) $(inferior_h) $(regcache_h) \ hppabsd-nat.o: hppabsd-nat.c $(defs_h) $(inferior_h) $(regcache_h) \
$(target_h) $(hppa_tdep_h) $(inf_ptrace_h) $(target_h) $(hppa_tdep_h) $(inf_ptrace_h)
hppabsd-tdep.o: hppabsd-tdep.c $(defs_h) $(arch_utils_h) $(symtab_h) \ hppabsd-tdep.o: hppabsd-tdep.c $(defs_h) $(arch_utils_h) $(symtab_h) \
@ -2095,10 +2091,6 @@ hppa-tdep.o: hppa-tdep.c $(defs_h) $(bfd_h) $(inferior_h) $(regcache_h) \
$(symtab_h) $(dis_asm_h) $(trad_frame_h) $(frame_unwind_h) \ $(symtab_h) $(dis_asm_h) $(trad_frame_h) $(frame_unwind_h) \
$(frame_base_h) $(gdbcore_h) $(gdbcmd_h) $(objfiles_h) \ $(frame_base_h) $(gdbcore_h) $(gdbcmd_h) $(objfiles_h) \
$(hppa_tdep_h) $(gdbtypes_h) $(hppa_tdep_h) $(gdbtypes_h)
hpread.o: hpread.c $(defs_h) $(bfd_h) $(gdb_string_h) $(hp_symtab_h) \
$(syms_h) $(symtab_h) $(symfile_h) $(objfiles_h) $(buildsym_h) \
$(complaints_h) $(gdb_stabs_h) $(gdbtypes_h) $(demangle_h) \
$(solib_som_h) $(gdb_assert_h) $(hppa_tdep_h) $(gdb_string_h)
hpux-thread.o: hpux-thread.c $(defs_h) $(gdbthread_h) $(target_h) \ hpux-thread.o: hpux-thread.c $(defs_h) $(gdbthread_h) $(target_h) \
$(inferior_h) $(regcache_h) $(gdb_stat_h) $(gdbcore_h) \ $(inferior_h) $(regcache_h) $(gdb_stat_h) $(gdbcore_h) \
$(hppa_tdep_h) $(hppa_tdep_h)

View File

@ -1,3 +1,3 @@
# Target: HP PA-RISC 2.0 running HPUX 11.00 in wide mode # Target: HP PA-RISC 2.0 running HPUX 11.00 in wide mode
TDEPFILES= hppa-tdep.o hppa-hpux-tdep.o solib-som.o solib-pa64.o somread.o hpread.o solib.o TDEPFILES= hppa-tdep.o hppa-hpux-tdep.o solib-som.o solib-pa64.o somread.o solib.o
DEPRECATED_TM_FILE= tm-hppah.h DEPRECATED_TM_FILE= tm-hppah.h

View File

@ -1,4 +1,4 @@
# Target: HP PA-RISC running hpux # Target: HP PA-RISC running hpux
MT_CFLAGS = -DPA_SOM_ONLY=1 MT_CFLAGS = -DPA_SOM_ONLY=1
TDEPFILES= hppa-tdep.o hppa-hpux-tdep.o corelow.o somread.o hpread.o solib-som.o solib-pa64.o solib.o TDEPFILES= hppa-tdep.o hppa-hpux-tdep.o corelow.o somread.o solib-som.o solib-pa64.o solib.o
DEPRECATED_TM_FILE= tm-hppah.h DEPRECATED_TM_FILE= tm-hppah.h

View File

@ -1,3 +1,7 @@
2007-04-10 Daniel Jacobowitz <dan@codesourcery.com>
* gdbint.texinfo (SOM): Correct location of the SOM reader.
2007-04-02 Bob Wilson <bob.wilson@acm.org> 2007-04-02 Bob Wilson <bob.wilson@acm.org>
* gdb.texinfo: Consistently capitalize all significant words in * gdb.texinfo: Consistently capitalize all significant words in

View File

@ -2112,7 +2112,7 @@ The basic ELF reader is in @file{elfread.c}.
SOM is HP's object file and debug format (not to be confused with IBM's SOM is HP's object file and debug format (not to be confused with IBM's
SOM, which is a cross-language ABI). SOM, which is a cross-language ABI).
The SOM reader is in @file{hpread.c}. The SOM reader is in @file{somread.c}.
@section Debugging File Formats @section Debugging File Formats

View File

@ -1,326 +0,0 @@
/* Abstraction of HP aCC ABI.
Contributed by Daniel Berlin <dberlin@redhat.com>
Most of the real code is from HP, i've just fiddled it to fit in
the C++ ABI abstraction framework.
Copyright (C) 2001, 2005, 2007 Free Software Foundation, Inc.
This file is part of GDB.
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., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA. */
#include "defs.h"
#include "value.h"
#include "gdb_regex.h"
#include "gdb_string.h"
#include "gdbtypes.h"
#include "gdbcore.h"
#include "cp-abi.h"
#include "gnu-v2-abi.h"
struct cp_abi_ops hpacc_abi_ops;
/* It appears the is_*_name stuff is never used when we try the hpACC
* ABI. As such, I have no clue what the real answers are. Shouldn't
* have any more effect than it does now. */
static regex_t constructor_pattern;
static regex_t destructor_pattern;
static regex_t operator_pattern;
static enum dtor_kinds
hpacc_is_destructor_name (const char *name)
{
if (regexec (&destructor_pattern, name, 0, 0, 0) == 0)
return complete_object_dtor;
else
return 0;
}
static enum ctor_kinds
hpacc_is_constructor_name (const char *name)
{
if (regexec (&constructor_pattern, name, 0, 0, 0) == 0)
return complete_object_ctor;
else
return 0;
}
static int
hpacc_is_operator_name (const char *name)
{
return regexec (&operator_pattern, name, 0, 0, 0) == 0;
}
static int
hpacc_is_vtable_name (const char *name)
{
return strcmp (name,
"This will never match anything, please fill it in") == 0;
}
/* Return a virtual function as a value.
ARG1 is the object which provides the virtual function
table pointer. *ARG1P is side-effected in calling this function.
F is the list of member functions which contains the desired virtual
function.
J is an index into F which provides the desired virtual function.
TYPE is the type in which F is located. */
static struct value *
hpacc_virtual_fn_field (struct value **arg1p, struct fn_field * f, int j,
struct type * type, int offset)
{
struct value *arg1 = *arg1p;
struct type *type1 = check_typedef (value_type (arg1));
/* Deal with HP/Taligent runtime model for virtual functions */
struct value *vp;
struct value *argp; /* arg1 cast to base */
CORE_ADDR coreptr; /* pointer to target address */
int class_index; /* which class segment pointer to use */
struct type *ftype = TYPE_FN_FIELD_TYPE (f, j); /* method type */
argp = value_cast (type, *arg1p);
if (VALUE_ADDRESS (argp) == 0)
error (_("Address of object is null; object may not have been created."));
/* pai: FIXME -- 32x64 possible problem? */
/* First word (4 bytes) in object layout is the vtable pointer */
coreptr = *(CORE_ADDR *) (value_contents (argp)); /* pai: (temp) */
/* + offset + value_embedded_offset (argp)); */
if (!coreptr)
error
("Virtual table pointer is null for object; object may not have been created.");
/* pai/1997-05-09
* FIXME: The code here currently handles only
* the non-RRBC case of the Taligent/HP runtime spec; when RRBC
* is introduced, the condition for the "if" below will have to
* be changed to be a test for the RRBC case. */
if (1)
{
/* Non-RRBC case; the virtual function pointers are stored at fixed
* offsets in the virtual table. */
/* Retrieve the offset in the virtual table from the debug
* info. The offset of the vfunc's entry is in words from
* the beginning of the vtable; but first we have to adjust
* by HP_ACC_VFUNC_START to account for other entries */
/* pai: FIXME: 32x64 problem here, a word may be 8 bytes in
* which case the multiplier should be 8 and values should be long */
vp = value_at (builtin_type_int,
coreptr + 4 * (TYPE_FN_FIELD_VOFFSET (f, j) +
HP_ACC_VFUNC_START));
coreptr = *(CORE_ADDR *) (value_contents (vp));
/* coreptr now contains the address of the virtual function */
/* (Actually, it contains the pointer to the plabel for the function. */
}
else
{
/* RRBC case; the virtual function pointers are found by double
* indirection through the class segment tables. */
/* Choose class segment depending on type we were passed */
class_index = class_index_in_primary_list (type);
/* Find class segment pointer. These are in the vtable slots after
* some other entries, so adjust by HP_ACC_VFUNC_START for that. */
/* pai: FIXME 32x64 problem here, if words are 8 bytes long
* the multiplier below has to be 8 and value should be long. */
vp = value_at (builtin_type_int,
coreptr + 4 * (HP_ACC_VFUNC_START + class_index));
/* Indirect once more, offset by function index */
/* pai: FIXME 32x64 problem here, again multiplier could be 8 and value long */
coreptr =
*(CORE_ADDR *) (value_contents (vp) +
4 * TYPE_FN_FIELD_VOFFSET (f, j));
vp = value_at (builtin_type_int, coreptr);
coreptr = *(CORE_ADDR *) (value_contents (vp));
/* coreptr now contains the address of the virtual function */
/* (Actually, it contains the pointer to the plabel for the function.) */
}
if (!coreptr)
error (_("Address of virtual function is null; error in virtual table?"));
/* Wrap this addr in a value and return pointer */
vp = allocate_value (ftype);
deprecated_set_value_type (vp, ftype);
VALUE_ADDRESS (vp) = coreptr;
/* pai: (temp) do we need the value_ind stuff in value_fn_field? */
return vp;
}
static struct type *
hpacc_value_rtti_type (struct value *v, int *full, int *top, int *using_enc)
{
struct type *known_type;
struct type *rtti_type;
CORE_ADDR coreptr;
struct value *vp;
int using_enclosing = 0;
long top_offset = 0;
char rtti_type_name[256];
if (full)
*full = 0;
if (top)
*top = -1;
if (using_enc)
*using_enc = 0;
/* Get declared type */
known_type = value_type (v);
CHECK_TYPEDEF (known_type);
/* RTTI works only or class objects */
if (TYPE_CODE (known_type) != TYPE_CODE_CLASS)
return NULL;
/* If neither the declared type nor the enclosing type of the
* value structure has a HP ANSI C++ style virtual table,
* we can't do anything. */
if (!TYPE_HAS_VTABLE (known_type))
{
known_type = value_enclosing_type (v);
CHECK_TYPEDEF (known_type);
if ((TYPE_CODE (known_type) != TYPE_CODE_CLASS) ||
!TYPE_HAS_VTABLE (known_type))
return NULL; /* No RTTI, or not HP-compiled types */
CHECK_TYPEDEF (known_type);
using_enclosing = 1;
}
if (using_enclosing && using_enc)
*using_enc = 1;
/* First get the virtual table address */
coreptr = *(CORE_ADDR *) ((value_contents_all (v))
+ value_offset (v)
+ (using_enclosing
? 0
: value_embedded_offset (v)));
if (coreptr == 0)
/* return silently -- maybe called on gdb-generated value */
return NULL;
/* Fetch the top offset of the object */
/* FIXME possible 32x64 problem with pointer size & arithmetic */
vp = value_at (builtin_type_int,
coreptr + 4 * HP_ACC_TOP_OFFSET_OFFSET);
top_offset = value_as_long (vp);
if (top)
*top = top_offset;
/* Fetch the typeinfo pointer */
/* FIXME possible 32x64 problem with pointer size & arithmetic */
vp = value_at (builtin_type_int, coreptr + 4 * HP_ACC_TYPEINFO_OFFSET);
/* Indirect through the typeinfo pointer and retrieve the pointer
* to the string name */
coreptr = *(CORE_ADDR *) (value_contents (vp));
if (!coreptr)
error (_("Retrieved null typeinfo pointer in trying to determine "
"run-time type"));
/* 4 -> offset of name field */
vp = value_at (builtin_type_int, coreptr + 4);
/* FIXME possible 32x64 problem */
coreptr = *(CORE_ADDR *) (value_contents (vp));
read_memory_string (coreptr, rtti_type_name, 256);
if (strlen (rtti_type_name) == 0)
error (_("Retrieved null type name from typeinfo"));
/* search for type */
rtti_type = lookup_typename (rtti_type_name, (struct block *) 0, 1);
if (!rtti_type)
error (_("Could not find run-time type: invalid type name %s in typeinfo??"),
rtti_type_name);
CHECK_TYPEDEF (rtti_type);
#if 0
printf ("RTTI type name %s, tag %s, full? %d\n", TYPE_NAME (rtti_type),
TYPE_TAG_NAME (rtti_type), full ? *full : -1);
#endif
/* Check whether we have the entire object */
if (full /* Non-null pointer passed */
&&
/* Either we checked on the whole object in hand and found the
top offset to be zero */
(((top_offset == 0) &&
using_enclosing &&
TYPE_LENGTH (known_type) == TYPE_LENGTH (rtti_type))
||
/* Or we checked on the embedded object and top offset was the
same as the embedded offset */
((top_offset == value_embedded_offset (v)) &&
!using_enclosing &&
TYPE_LENGTH (value_enclosing_type (v)) == TYPE_LENGTH (rtti_type))))
*full = 1;
return rtti_type;
}
static void
init_hpacc_ops (void)
{
hpacc_abi_ops.shortname = "hpaCC";
hpacc_abi_ops.longname = "HP aCC ABI";
hpacc_abi_ops.doc = "HP aCC ABI";
hpacc_abi_ops.is_destructor_name = hpacc_is_destructor_name;
hpacc_abi_ops.is_constructor_name = hpacc_is_constructor_name;
hpacc_abi_ops.is_vtable_name = hpacc_is_vtable_name;
hpacc_abi_ops.is_operator_name = hpacc_is_operator_name;
hpacc_abi_ops.virtual_fn_field = hpacc_virtual_fn_field;
hpacc_abi_ops.rtti_type = hpacc_value_rtti_type;
/* It seems that this function is specific to GNU G++ < 3.0.
However, it is called for data members even in the HP
case (although not for member functions).
FIXME: Is that correct? */
hpacc_abi_ops.baseclass_offset = gnuv2_baseclass_offset;
}
extern initialize_file_ftype _initialize_hpacc_abi; /* -Wmissing-prototypes */
void
_initialize_hpacc_abi (void)
{
init_hpacc_ops ();
regcomp (&constructor_pattern,
"^This will never match anything, please fill it in$", REG_NOSUB);
regcomp (&destructor_pattern,
"^This will never match anything, please fill it in$", REG_NOSUB);
regcomp (&operator_pattern,
"^This will never match anything, please fill it in$", REG_NOSUB);
register_cp_abi (&hpacc_abi_ops);
}

File diff suppressed because it is too large Load Diff

View File

@ -40,16 +40,6 @@
/* Prototypes for local functions. */ /* Prototypes for local functions. */
static int init_import_symbols (struct objfile *objfile); static int init_import_symbols (struct objfile *objfile);
/* FIXME: These should really be in a common header somewhere */
extern void hpread_build_psymtabs (struct objfile *, int);
extern void hpread_symfile_finish (struct objfile *);
extern void hpread_symfile_init (struct objfile *);
extern void do_pxdb (bfd *);
/* /*
LOCAL FUNCTION LOCAL FUNCTION
@ -327,8 +317,6 @@ som_symfile_read (struct objfile *objfile, int mainline)
bfd *abfd = objfile->obfd; bfd *abfd = objfile->obfd;
struct cleanup *back_to; struct cleanup *back_to;
do_pxdb (symfile_bfd_open (objfile->name));
init_minimal_symbol_collection (); init_minimal_symbol_collection ();
back_to = make_cleanup_discard_minimal_symbols (); back_to = make_cleanup_discard_minimal_symbols ();
@ -363,12 +351,6 @@ som_symfile_read (struct objfile *objfile, int mainline)
This is emitted by gcc. */ This is emitted by gcc. */
stabsect_build_psymtabs (objfile, mainline, stabsect_build_psymtabs (objfile, mainline,
"$GDB_SYMBOLS$", "$GDB_STRINGS$", "$TEXT$"); "$GDB_SYMBOLS$", "$GDB_STRINGS$", "$TEXT$");
/* Now read the native debug information.
This builds the psymtab. This used to be done via a scan of
the DNTT, but is now done via the PXDB-built quick-lookup tables
together with a scan of the GNTT. See hp-psymtab-read.c. */
hpread_build_psymtabs (objfile, mainline);
} }
/* Initialize anything that needs initializing when a completely new symbol /* Initialize anything that needs initializing when a completely new symbol
@ -396,7 +378,6 @@ som_symfile_finish (struct objfile *objfile)
{ {
xfree (objfile->deprecated_sym_stab_info); xfree (objfile->deprecated_sym_stab_info);
} }
hpread_symfile_finish (objfile);
} }
/* SOM specific initialization routine for reading symbols. */ /* SOM specific initialization routine for reading symbols. */
@ -408,7 +389,6 @@ som_symfile_init (struct objfile *objfile)
find this causes a significant slowdown in gdb then we could find this causes a significant slowdown in gdb then we could
set it in the debug symbol readers only when necessary. */ set it in the debug symbol readers only when necessary. */
objfile->flags |= OBJF_REORDERED; objfile->flags |= OBJF_REORDERED;
hpread_symfile_init (objfile);
} }
/* SOM specific parsing routine for section offsets. /* SOM specific parsing routine for section offsets.