diff options
author | Peter Schauer <Peter.Schauer@mytum.de> | 1996-11-09 09:17:34 +0000 |
---|---|---|
committer | Peter Schauer <Peter.Schauer@mytum.de> | 1996-11-09 09:17:34 +0000 |
commit | 074d813d38a8c811d8ca2d346ce0266ac4331cb2 (patch) | |
tree | 7f41fcfdbd80af8381fd70ce13e6c10fbaaa7747 /gdb/alpha-tdep.c | |
parent | 849c575f9757b1c2d001dc771d6b1f77d3254003 (diff) | |
download | gdb-074d813d38a8c811d8ca2d346ce0266ac4331cb2.zip gdb-074d813d38a8c811d8ca2d346ce0266ac4331cb2.tar.gz gdb-074d813d38a8c811d8ca2d346ce0266ac4331cb2.tar.bz2 |
* alpha-tdep.c (heuristic_proc_desc): Stop examining the prologue
if we encounter a positive stack adjustment.
(find_proc_desc): If heuristic_fence_post is non-zero, use
heuristic_proc_start to determine the start of a function before
calling heuristic_proc_desc.
* coffread.c (coff_symtab_read): Change minimal symbol types
for C_LABEL symbols from mst_* to mst_file_*.
* config/m68k/sun3os4.mh (MMALLOC_CFLAGS): Define MMCHECK_FORCE to 1.
* configure.in: Handle error message from sun3 native ld when
configuring HLDFLAGS.
* configure: Regenerated with autoconf.
* c-valprint.c (c_value_print): Adjust value address by VALUE_OFFSET.
* cp-valprint.c (cp_print_value): Prevent gdb crashes by making sure
that the virtual base pointer from an user object still points to
accessible memory.
* dbxread.c (dbx_symfile_init): Initialize sym_stab_info to
clear the recently added header_files fields.
(dbx_symfile_finish): Free hfiles[i].vector to avoid storage leak.
Diffstat (limited to 'gdb/alpha-tdep.c')
-rw-r--r-- | gdb/alpha-tdep.c | 20 |
1 files changed, 17 insertions, 3 deletions
diff --git a/gdb/alpha-tdep.c b/gdb/alpha-tdep.c index 08cd6d4..e07d75a 100644 --- a/gdb/alpha-tdep.c +++ b/gdb/alpha-tdep.c @@ -1,5 +1,5 @@ /* Target-dependent code for the ALPHA architecture, for GDB, the GNU Debugger. - Copyright 1993, 1994, 1995 Free Software Foundation, Inc. + Copyright 1993, 1994, 1995, 1996 Free Software Foundation, Inc. This file is part of GDB. @@ -489,7 +489,15 @@ heuristic_proc_desc(start_pc, limit_pc, next_frame) word = extract_unsigned_integer (buf, 4); if ((word & 0xffff0000) == 0x23de0000) /* lda $sp,n($sp) */ - frame_size += (-word) & 0xffff; + { + if (word & 0x8000) + frame_size += (-word) & 0xffff; + else + /* Exit loop if a positive stack adjustment is found, which + usually means that the stack cleanup code in the function + epilogue is reached. */ + break; + } else if ((word & 0xfc1f0000) == 0xb41e0000 /* stq reg,n($sp) */ && (word & 0xffff0000) != 0xb7fe0000) /* reg != $zero */ { @@ -728,7 +736,13 @@ find_proc_desc (pc, next_frame) if (offset >= 0) return push_sigtramp_desc (pc - offset); - if (startaddr == 0) + /* If heuristic_fence_post is non-zero, determine the procedure + start address by examining the instructions. + This allows us to find the start address of static functions which + have no symbolic information, as startaddr would have been set to + the preceding global function start address by the + find_pc_partial_function call above. */ + if (startaddr == 0 || heuristic_fence_post != 0) startaddr = heuristic_proc_start (pc); proc_desc = |