* blockframe.c (frameless_look_for_prologue): Correct the

comment.
	* gdbtypes.h, gdbtypes.c:  Use const in decl of
	cplus_struct_default, now that pa-gas assembler has been fixed.
	* hppah-nat.c:  Formatting.
	* hppah-tdep.c:  Remove lots of useless externs for variables we
	don't use.
	* (find_unwind_entry):  Speed up by using binary search, and a one
	entry cache.
	* (rp_saved):  New routine to see what unwind info says about RP
	being saved on the stack frame.
	* (frame_saved_pc):  Look for prologue to see if we need to
	examine the stack for the saved RP or not.
	* (init_extra_frame_info):  Check for prologue, instead of
	framesize to determine if we are frameless or not.
	* (frame_chain_valid):  Stop backtraces when we run into _start.
	* (push_dummy_frame):  Reformat to make more readable.
	* (find_dummy_frame_regs):  ditto.
	* (hp_pop_frame):  ditto.
	* (hp_restore_pc_queue):  small cleanup.
	* (hp_push_arguments):  ditto.
	* (pa_do_registers_info):  ditto.
	* (skip_prologue):  New routine created from SKIP_PROLOGUE macro.
	* tm-hppa.h:  Move contents of SKIP_PROLOGUE into hppah-tdep.c.
	* Define FRAME_CHAIN_VALID.
	* Turn on BELIEVE_PCC_PROMOTION so that we can access char args
	passed to functions.

	* paread.c (pa_symtab_read):  Use new bfd conventions for
	accessing linker symbol table.
	* (pa_symfile_init):  Access embedded STAB info via BFD section
	mechanism and related macros.
This commit is contained in:
Stu Grossman 1993-01-10 04:23:06 +00:00
parent d0a650a475
commit 0213d96f60
7 changed files with 230 additions and 155 deletions

View File

@ -1,3 +1,39 @@
Sat Jan 9 19:59:33 1993 Stu Grossman (grossman at cygnus.com)
* blockframe.c (frameless_look_for_prologue): Correct the
comment.
* gdbtypes.h, gdbtypes.c: Use const in decl of
cplus_struct_default, now that pa-gas assembler has been fixed.
* hppah-nat.c: Formatting.
* hppah-tdep.c: Remove lots of useless externs for variables we
don't use.
* (find_unwind_entry): Speed up by using binary search, and a one
entry cache.
* (rp_saved): New routine to see what unwind info says about RP
being saved on the stack frame.
* (frame_saved_pc): Look for prologue to see if we need to
examine the stack for the saved RP or not.
* (init_extra_frame_info): Check for prologue, instead of
framesize to determine if we are frameless or not.
* (frame_chain_valid): Stop backtraces when we run into _start.
* (push_dummy_frame): Reformat to make more readable.
* (find_dummy_frame_regs): ditto.
* (hp_pop_frame): ditto.
* (hp_restore_pc_queue): small cleanup.
* (hp_push_arguments): ditto.
* (pa_do_registers_info): ditto.
* (skip_prologue): New routine created from SKIP_PROLOGUE macro.
* tm-hppa.h: Move contents of SKIP_PROLOGUE into hppah-tdep.c.
* Define FRAME_CHAIN_VALID.
* Turn on BELIEVE_PCC_PROMOTION so that we can access char args
passed to functions.
* paread.c (pa_symtab_read): Use new bfd conventions for
accessing linker symbol table.
* (pa_symfile_init): Access embedded STAB info via BFD section
mechanism and related macros.
Sat Jan 9 19:31:43 1993 Stu Grossman (grossman at cygnus.com)
* sparc-stub.c: Use a seperate stack for our traps.

View File

@ -879,7 +879,7 @@ check_stub_method (type, i, j)
TYPE_FN_FIELD_STUB (f, j) = 0;
}
struct cplus_struct_type cplus_struct_default;
const struct cplus_struct_type cplus_struct_default;
void
allocate_cplus_struct_type (type)

View File

@ -374,7 +374,7 @@ struct cplus_struct_type
/* The default value of TYPE_CPLUS_SPECIFIC(T) points to the
this shared static structure. */
extern struct cplus_struct_type cplus_struct_default;
extern const struct cplus_struct_type cplus_struct_default;
extern void
allocate_cplus_struct_type PARAMS ((struct type *));

View File

@ -248,8 +248,6 @@ fetch_register (regno)
supply_register (regno, buf);
}
/* Resume execution of the inferior process.
If STEP is nonzero, single-step it.
If SIGNAL is nonzero, give it that signal. */

View File

@ -57,46 +57,6 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
#include "gdbcmd.h"
#include "target.h"
/* Last modification time of executable file.
Also used in source.c to compare against mtime of a source file. */
extern int exec_mtime;
/* Virtual addresses of bounds of the two areas of memory in the core file. */
/* extern CORE_ADDR data_start; */
extern CORE_ADDR data_end;
extern CORE_ADDR stack_start;
extern CORE_ADDR stack_end;
/* Virtual addresses of bounds of two areas of memory in the exec file.
Note that the data area in the exec file is used only when there is no core file. */
extern CORE_ADDR text_start;
extern CORE_ADDR text_end;
extern CORE_ADDR exec_data_start;
extern CORE_ADDR exec_data_end;
/* Address in executable file of start of text area data. */
extern int text_offset;
/* Address in executable file of start of data area data. */
extern int exec_data_offset;
/* Address in core file of start of data area data. */
extern int data_offset;
/* Address in core file of start of stack area data. */
extern int stack_offset;
struct header file_hdr;
struct som_exec_auxhdr exec_hdr;
/* Routines to extract various sized constants out of hppa
instructions. */
@ -121,8 +81,6 @@ low_sign_extend (val, bits)
}
/* extract the immediate field from a ld{bhw}s instruction */
unsigned
get_field (val, from, to)
unsigned val, from, to;
@ -266,11 +224,10 @@ static struct unwind_table_entry *
find_unwind_entry(pc)
CORE_ADDR pc;
{
static struct unwind_table_entry *unwind = NULL, *unwind_end;
struct unwind_table_entry *u;
if (!use_unwind)
return NULL;
static struct unwind_table_entry *unwind = NULL;
static int unwind_last;
static int unwind_cache = -1;
int first, middle, last;
if (!unwind)
{
@ -283,19 +240,33 @@ find_unwind_entry(pc)
size = bfd_section_size (exec_bfd, unwind_sec);
unwind = malloc (size);
unwind_end = unwind + size/sizeof (struct unwind_table_entry);
unwind_last = size / sizeof (struct unwind_table_entry) - 1;
bfd_get_section_contents (exec_bfd, unwind_sec, unwind, 0, size);
}
}
for (u = unwind; u < unwind_end; u++)
if (unwind_cache > 0
&& pc >= unwind[unwind_cache].region_start
&& pc <= unwind[unwind_cache].region_end)
return &unwind[unwind_cache];
first = 0;
last = unwind_last;
while (first <= last)
{
if (pc >= u->region_start
&& pc <= u->region_end)
return u;
middle = (first + last) / 2;
if (pc >= unwind[middle].region_start
&& pc <= unwind[middle].region_end)
return &unwind[middle];
if (pc < unwind[middle].region_start)
last = middle - 1;
else
first = middle + 1;
}
return NULL;
return NULL;
}
static int
@ -321,6 +292,9 @@ find_proc_framesize(pc)
{
struct unwind_table_entry *u;
if (!use_unwind)
return -1;
u = find_unwind_entry (pc);
if (!u)
@ -328,6 +302,22 @@ find_proc_framesize(pc)
return u->Total_frame_size << 3;
}
int
rp_saved(pc)
{
struct unwind_table_entry *u;
u = find_unwind_entry (pc);
if (!u)
return 0;
if (u->Save_RP)
return 1;
else
return 0;
}
CORE_ADDR
saved_pc_after_call (frame)
@ -344,16 +334,20 @@ CORE_ADDR
frame_saved_pc (frame)
FRAME frame;
{
if (!frame->next)
CORE_ADDR pc = get_frame_pc (frame);
if (frameless_look_for_prologue (frame))
{
CORE_ADDR pc = get_frame_pc (frame);
int ret_regnum;
ret_regnum = find_return_regnum (pc);
return read_register (ret_regnum) & ~0x3;
}
return read_memory_integer (frame->frame - 20, 4) & ~0x3;
else if (rp_saved (pc))
return read_memory_integer (frame->frame - 20, 4) & ~0x3;
else
return read_register (RP_REGNUM) & ~0x3;
}
/* We need to correct the PC and the FP for the outermost frame when we are
@ -381,8 +375,8 @@ init_extra_frame_info (fromleaf, frame)
else
frame->frame = read_register (SP_REGNUM) - framesize;
if (framesize != 0) /* Frameless? */
return;
if (!frameless_look_for_prologue (frame)) /* Frameless? */
return; /* No, quit now */
/* For frameless functions, we need to look at the caller's frame */
framesize = find_proc_framesize(FRAME_SAVED_PC(frame));
@ -407,29 +401,26 @@ frame_chain (frame)
/* To see if a frame chain is valid, see if the caller looks like it
was compiled with gcc. */
int frame_chain_valid (chain, thisframe)
int
frame_chain_valid (chain, thisframe)
FRAME_ADDR chain;
FRAME thisframe;
{
if (chain && (chain > 0x60000000))
{
CORE_ADDR pc = get_pc_function_start (FRAME_SAVED_PC (thisframe));
if (inside_entry_file (pc))
return 0;
/* look for stw rp, -20(0,sp); copy 4,1; copy sp, 4 */
if (read_memory_integer (pc, 4) == 0x6BC23FD9)
pc = pc + 4;
if (read_memory_integer (pc, 4) == 0x8040241 &&
read_memory_integer (pc + 4, 4) == 0x81E0244)
return 1;
else
return 0;
}
else
struct minimal_symbol *msym;
if (!chain)
return 0;
msym = lookup_minimal_symbol_by_pc (FRAME_SAVED_PC (thisframe));
if (msym
&& (strcmp (SYMBOL_NAME (msym), "_start") == 0))
return 0;
else
return 1;
}
#if 0
/* Some helper functions. gcc_p returns 1 if the function beginning at
pc appears to have been compiled with gcc. hpux_cc_p returns 1 if
fn was compiled with hpux cc. gcc functions look like :
@ -451,11 +442,12 @@ gcc_p (pc)
if (read_memory_integer (pc, 4) == 0x6BC23FD9)
pc = pc + 4;
if (read_memory_integer (pc, 4) == 0x8040241 &&
read_memory_integer (pc + 4, 4) == 0x81E0244)
if (read_memory_integer (pc, 4) == 0x8040241
&& read_memory_integer (pc + 4, 4) == 0x81E0244)
return 1;
return 0;
}
#endif
/*
* These functions deal with saving and restoring register state
@ -467,25 +459,34 @@ gcc_p (pc)
int
push_dummy_frame ()
{
register CORE_ADDR sp = read_register (SP_REGNUM);
register CORE_ADDR sp;
register int regnum;
int int_buffer;
double freg_buffer;
/* Space for "arguments"; the RP goes in here. */
sp += 48;
sp = read_register (SP_REGNUM) + 48;
int_buffer = read_register (RP_REGNUM) | 0x3;
write_memory (sp - 20, (char *)&int_buffer, 4);
int_buffer = read_register (FP_REGNUM);
write_memory (sp, (char *)&int_buffer, 4);
write_register (FP_REGNUM, sp);
sp += 8;
for (regnum = 1; regnum < 32; regnum++)
if (regnum != RP_REGNUM && regnum != FP_REGNUM)
sp = push_word (sp, read_register (regnum));
sp += 4;
for (regnum = FP0_REGNUM; regnum < NUM_REGS; regnum++)
{ read_register_bytes (REGISTER_BYTE (regnum), (char *)&freg_buffer, 8);
sp = push_bytes (sp, (char *)&freg_buffer, 8);}
{
read_register_bytes (REGISTER_BYTE (regnum), (char *)&freg_buffer, 8);
sp = push_bytes (sp, (char *)&freg_buffer, 8);
}
sp = push_word (sp, read_register (IPSW_REGNUM));
sp = push_word (sp, read_register (SAR_REGNUM));
sp = push_word (sp, read_register (PCOQ_HEAD_REGNUM));
@ -506,16 +507,24 @@ find_dummy_frame_regs (frame, frame_saved_regs)
frame_saved_regs->regs[FP_REGNUM] = fp;
frame_saved_regs->regs[1] = fp + 8;
frame_saved_regs->regs[3] = fp + 12;
for (fp += 16, i = 5; i < 32; fp += 4, i++)
frame_saved_regs->regs[i] = fp;
fp += 4;
for (i = FP0_REGNUM; i < NUM_REGS; i++, fp += 8)
frame_saved_regs->regs[i] = fp;
frame_saved_regs->regs[IPSW_REGNUM] = fp; fp += 4;
frame_saved_regs->regs[SAR_REGNUM] = fp; fp += 4;
frame_saved_regs->regs[PCOQ_HEAD_REGNUM] = fp; fp +=4;
frame_saved_regs->regs[PCSQ_HEAD_REGNUM] = fp; fp +=4;
frame_saved_regs->regs[PCOQ_TAIL_REGNUM] = fp; fp +=4;
frame_saved_regs->regs[IPSW_REGNUM] = fp;
fp += 4;
frame_saved_regs->regs[SAR_REGNUM] = fp;
fp += 4;
frame_saved_regs->regs[PCOQ_HEAD_REGNUM] = fp;
fp +=4;
frame_saved_regs->regs[PCSQ_HEAD_REGNUM] = fp;
fp +=4;
frame_saved_regs->regs[PCOQ_TAIL_REGNUM] = fp;
fp +=4;
frame_saved_regs->regs[PCSQ_TAIL_REGNUM] = fp;
}
@ -528,33 +537,44 @@ hp_pop_frame ()
struct frame_saved_regs fsr;
struct frame_info *fi;
double freg_buffer;
fi = get_frame_info (frame);
fp = fi->frame;
get_frame_saved_regs (fi, &fsr);
if (fsr.regs[IPSW_REGNUM]) /* Restoring a call dummy frame */
hp_restore_pc_queue (&fsr);
for (regnum = 31; regnum > 0; regnum--)
if (fsr.regs[regnum])
write_register (regnum, read_memory_integer (fsr.regs[regnum], 4));
for (regnum = NUM_REGS - 1; regnum >= FP0_REGNUM ; regnum--)
if (fsr.regs[regnum])
{ read_memory (fsr.regs[regnum], (char *)&freg_buffer, 8);
{
read_memory (fsr.regs[regnum], (char *)&freg_buffer, 8);
write_register_bytes (REGISTER_BYTE (regnum), (char *)&freg_buffer, 8);
}
if (fsr.regs[IPSW_REGNUM])
write_register (IPSW_REGNUM,
read_memory_integer (fsr.regs[IPSW_REGNUM], 4));
if (fsr.regs[SAR_REGNUM])
write_register (SAR_REGNUM,
read_memory_integer (fsr.regs[SAR_REGNUM], 4));
if (fsr.regs[PCOQ_TAIL_REGNUM])
write_register (PCOQ_TAIL_REGNUM,
read_memory_integer (fsr.regs[PCOQ_TAIL_REGNUM], 4));
write_register (FP_REGNUM, read_memory_integer (fp, 4));
if (fsr.regs[IPSW_REGNUM]) /* call dummy */
write_register (SP_REGNUM, fp - 48);
else
write_register (SP_REGNUM, fp);
flush_cached_frames ();
set_current_frame (create_new_frame (read_register (FP_REGNUM),
read_pc ()));
@ -575,8 +595,8 @@ hp_restore_pc_queue (fsr)
int insn_count;
/* Advance past break instruction in the call dummy. */
pc += 4; write_register (PCOQ_HEAD_REGNUM, pc);
pc += 4; write_register (PCOQ_TAIL_REGNUM, pc);
write_register (PCOQ_HEAD_REGNUM, pc + 4);
write_register (PCOQ_TAIL_REGNUM, pc + 8);
/*
* HPUX doesn't let us set the space registers or the space
@ -628,7 +648,8 @@ hp_push_arguments (nargs, args, sp, struct_return, struct_addr)
for (i = 0; i < nargs; i++)
{
cum += TYPE_LENGTH (VALUE_TYPE (args[i]));
/* value must go at proper alignment. Assume alignment is a
/* value must go at proper alignment. Assume alignment is a
power of two.*/
alignment = hp_alignof (VALUE_TYPE (args[i]));
if (cum % alignment)
@ -636,11 +657,11 @@ hp_push_arguments (nargs, args, sp, struct_return, struct_addr)
offset[i] = -cum;
}
sp += min ((cum + 7) & -8, 16);
for (i = 0; i < nargs; i++)
{
write_memory (sp + offset[i], VALUE_CONTENTS (args[i]),
TYPE_LENGTH (VALUE_TYPE (args[i])));
}
write_memory (sp + offset[i], VALUE_CONTENTS (args[i]),
TYPE_LENGTH (VALUE_TYPE (args[i])));
if (struct_return)
write_register (28, struct_addr);
return sp + 32;
@ -694,10 +715,8 @@ pa_do_registers_info (regnum, fpregs)
if (regnum == -1)
pa_print_registers (raw_regs, regnum, fpregs);
else if (regnum < FP0_REGNUM)
{
printf ("%s %x\n", reg_names[regnum], *(long *)(raw_regs +
REGISTER_BYTE (regnum)));
}
printf ("%s %x\n", reg_names[regnum], *(long *)(raw_regs +
REGISTER_BYTE (regnum)));
else
pa_print_fp_reg (regnum);
}
@ -711,14 +730,14 @@ pa_print_registers (raw_regs, regnum, fpregs)
for (i = 0; i < 18; i++)
printf ("%8.8s: %8x %8.8s: %8x %8.8s: %8x %8.8s: %8x\n",
reg_names[i],
*(int *)(raw_regs + REGISTER_BYTE (i)),
reg_names[i + 18],
*(int *)(raw_regs + REGISTER_BYTE (i + 18)),
reg_names[i + 36],
*(int *)(raw_regs + REGISTER_BYTE (i + 36)),
reg_names[i + 54],
*(int *)(raw_regs + REGISTER_BYTE (i + 54)));
reg_names[i],
*(int *)(raw_regs + REGISTER_BYTE (i)),
reg_names[i + 18],
*(int *)(raw_regs + REGISTER_BYTE (i + 18)),
reg_names[i + 36],
*(int *)(raw_regs + REGISTER_BYTE (i + 36)),
reg_names[i + 54],
*(int *)(raw_regs + REGISTER_BYTE (i + 54)));
if (fpregs)
for (i = 72; i < NUM_REGS; i++)
@ -742,7 +761,6 @@ pa_print_fp_reg (i)
val_print (REGISTER_VIRTUAL_TYPE (i), virtual_buffer, 0, stdout, 0,
1, 0, Val_pretty_default);
printf_filtered ("\n");
}
/* Function calls that pass into a new compilation unit must pass through a
@ -788,6 +806,39 @@ skip_trampoline_code (pc, name)
return pc;
}
/* Advance PC across any function entry prologue instructions
to reach some "real" code. */
/* skip (stw rp, -20(0,sp)); copy 4,1; copy sp, 4; stwm 1,framesize(sp)
for gcc, or (stw rp, -20(0,sp); stwm 1, framesize(sp) for hcc */
CORE_ADDR
skip_prologue(pc)
CORE_ADDR pc;
{
int inst;
int status;
status = target_read_memory (pc, &inst, 4);
SWAP_TARGET_AND_HOST (&inst, sizeof (inst));
if (status != 0)
return pc;
if (inst == 0x6BC23FD9) /* stw rp,-20(sp) */
{
if (read_memory_integer (pc + 4, 4) == 0x8040241) /* copy r4,r1 */
pc += 16;
else if ((read_memory_integer (pc + 4, 4) & ~MASK_14) == 0x68810000) /* stw r1,(r4) */
pc += 8;
}
else if (read_memory_integer (pc, 4) == 0x8040241) /* copy r4,r1 */
pc += 12;
else if ((read_memory_integer (pc, 4) & ~MASK_14) == 0x68810000) /* stw r1,(r4) */
pc += 4;
return pc;
}
static void
unwind_command (exp, from_tty)
char *exp;

View File

@ -46,6 +46,7 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
#include <string.h>
#include "demangle.h"
#include <sys/file.h>
#include "aout/aout64.h"
/* Various things we might complain about... */
@ -116,20 +117,20 @@ pa_symtab_read (abfd, addr, objfile)
int val;
char *stringtab;
struct symbol_dictionary_record *buf, *bufp;
CONST int symsize = sizeof (struct symbol_dictionary_record);
number_of_symbols = obj_hp_sym_count (abfd);
number_of_symbols = bfd_get_symcount (abfd);
buf = alloca (obj_hp_symbol_entry_size (abfd) * number_of_symbols);
bfd_seek (abfd, obj_hp_sym_filepos (abfd), L_SET);
val = bfd_read (buf, obj_hp_symbol_entry_size (abfd) * number_of_symbols,
1, abfd);
if (val != obj_hp_symbol_entry_size (abfd) * number_of_symbols)
buf = alloca (symsize * number_of_symbols);
bfd_seek (abfd, obj_sym_filepos (abfd), L_SET);
val = bfd_read (buf, symsize * number_of_symbols, 1, abfd);
if (val != symsize * number_of_symbols)
error ("Couldn't read symbol dictionary!");
stringtab = alloca (obj_hp_stringtab_size (abfd));
bfd_seek (abfd, obj_hp_str_filepos (abfd), L_SET);
val = bfd_read (stringtab, obj_hp_stringtab_size (abfd), 1, abfd);
if (val != obj_hp_stringtab_size (abfd))
stringtab = alloca (obj_stringtab_size (abfd));
bfd_seek (abfd, obj_str_filepos (abfd), L_SET);
val = bfd_read (stringtab, obj_stringtab_size (abfd), 1, abfd);
if (val != obj_stringtab_size (abfd))
error ("Can't read in HP string table.");
for (i = 0, bufp = buf; i < number_of_symbols; i++, bufp++)
@ -161,7 +162,7 @@ pa_symtab_read (abfd, addr, objfile)
continue;
}
if (bufp->name.n_strx > obj_hp_stringtab_size (abfd))
if (bufp->name.n_strx > obj_stringtab_size (abfd))
error ("Invalid symbol data; bad HP string table offset: %d",
bufp->name.n_strx);
@ -284,22 +285,6 @@ pa_symfile_finish (objfile)
}
}
#if 0
mainline,
stabsect->filepos, /* .stab offset */
bfd_get_section_size_before_reloc (stabsect), /* .stab size */
stabstringsect->filepos, /* .stabstr offset */
bfd_get_section_size_before_reloc (stabstringsect), /* .stabstr size */
obj_dbx_symbol_entry_size (abfd));
#endif
/* PA specific initialization routine for reading symbols.
It is passed a pointer to a struct sym_fns which contains, among other
@ -317,14 +302,27 @@ pa_symfile_init (objfile)
int val;
bfd *sym_bfd = objfile->obfd;
char *name = bfd_get_filename (sym_bfd);
asection *stabsect; /* Section containing symbol table entries */
asection *stringsect; /* Section containing symbol name strings */
stabsect = bfd_get_section_by_name (sym_bfd, "$GDB_SYMBOLS$");
stringsect = bfd_get_section_by_name (sym_bfd, "$GDB_STRINGS$");
/* Allocate struct to keep track of the symfile */
objfile->sym_private = (PTR)
xmmalloc (objfile -> md, sizeof (struct dbx_symfile_info));
memset ((PTR) objfile->sym_private, 0, sizeof (struct dbx_symfile_info));
if (!stabsect)
return;
if (!stringsect)
error ("Found stabs, but not string section");
/* FIXME POKING INSIDE BFD DATA STRUCTURES */
#define STRING_TABLE_OFFSET (obj_dbx_str_filepos (sym_bfd))
#define SYMBOL_TABLE_OFFSET (obj_dbx_sym_filepos (sym_bfd))
#define STRING_TABLE_OFFSET (stringsect->filepos)
#define SYMBOL_TABLE_OFFSET (stabsect->filepos)
/* FIXME POKING INSIDE BFD DATA STRUCTURES */
@ -333,8 +331,9 @@ pa_symfile_init (objfile)
if (!DBX_TEXT_SECT (objfile))
error ("Can't find .text section in symbol file");
DBX_SYMBOL_SIZE (objfile) = obj_dbx_symbol_entry_size (sym_bfd);
DBX_SYMCOUNT (objfile) = obj_dbx_sym_count (sym_bfd);
DBX_SYMBOL_SIZE (objfile) = sizeof (struct internal_nlist);
DBX_SYMCOUNT (objfile) = bfd_section_size (sym_bfd, stabsect)
/ DBX_SYMBOL_SIZE (objfile);
DBX_SYMTAB_OFFSET (objfile) = SYMBOL_TABLE_OFFSET;
/* Read the string table and stash it away in the psymbol_obstack. It is
@ -349,7 +348,7 @@ pa_symfile_init (objfile)
however at least check to see if the size is zero or some negative
value. */
DBX_STRINGTAB_SIZE (objfile) = obj_dbx_stringtab_size (sym_bfd);
DBX_STRINGTAB_SIZE (objfile) = bfd_section_size (sym_bfd, stringsect);
if (DBX_SYMCOUNT (objfile) == 0
|| DBX_STRINGTAB_SIZE (objfile) == 0)

View File

@ -61,16 +61,7 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
/* skip (stw rp, -20(0,sp)); copy 4,1; copy sp, 4; stwm 1,framesize(sp)
for gcc, or (stw rp, -20(0,sp); stwm 1, framesize(sp) for hcc */
#define SKIP_PROLOGUE(pc) \
{ if (read_memory_integer ((pc), 4) == 0x6BC23FD9) \
{ if (read_memory_integer ((pc) + 4, 4) == 0x8040241) \
(pc) += 16; \
else if ((read_memory_integer (pc + 4, 4) & ~MASK_14) == 0x68810000) \
(pc) += 8;} \
else if (read_memory_integer ((pc), 4) == 0x8040241) \
(pc) += 12; \
else if ((read_memory_integer (pc, 4) & ~MASK_14) == 0x68810000) \
(pc) += 4;}
#define SKIP_PROLOGUE(pc) pc = skip_prologue (pc)
/* If PC is in some function-call trampoline code, return the PC
where the function itself actually starts. If not, return NULL. */
@ -311,10 +302,8 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
#define FRAME_CHAIN(thisframe) frame_chain (thisframe)
#if 0
#define FRAME_CHAIN_VALID(chain, thisframe) \
frame_chain_valid (chain, thisframe)
#endif
#define FRAME_CHAIN_COMBINE(chain, thisframe) (chain)
@ -547,6 +536,8 @@ text_space ; Otherwise, go through _sr4export,
#define GDB_TARGET_IS_HPPA
#define BELIEVE_PCC_PROMOTION 1
/*
* Unwind table and descriptor.
*/