aboutsummaryrefslogtreecommitdiff
path: root/gdb/alpha-mdebug-tdep.c
diff options
context:
space:
mode:
authorUlrich Weigand <uweigand@de.ibm.com>2007-10-12 16:13:20 +0000
committerUlrich Weigand <uweigand@de.ibm.com>2007-10-12 16:13:20 +0000
commit62f6180c256958f8bae44944f3db2b13f897631b (patch)
tree18e70ab9035e94f79c41fd32a989dde1dc4defa1 /gdb/alpha-mdebug-tdep.c
parentee53e8729a3de34db1558b06f97437517b203b8c (diff)
downloadgdb-62f6180c256958f8bae44944f3db2b13f897631b.zip
gdb-62f6180c256958f8bae44944f3db2b13f897631b.tar.gz
gdb-62f6180c256958f8bae44944f3db2b13f897631b.tar.bz2
* alpha-mdebug-tdep.c: Include "gdb_string.h".
(find_proc_desc): Add fix-up code for setjmp procedure descriptor. * mdebugread.c (parse_procedure): Remove setjmp fix-up code. * Makefile.in (alpha-mdebug-tdep.o): Update dependencies. * config/alpha/alpha.mt (DEPRECATED_TM_FILE): Remove. * config/alpha/alpha-linux.mt (DEPRECATED_TM_FILE): Remove. * config/alpha/alpha-osf1.mt (DEPRECATED_TM_FILE): Remove. * config/alpha/fbsd.mt (DEPRECATED_TM_FILE): Remove. * config/alpha/tm-alpha.h: Remove file.
Diffstat (limited to 'gdb/alpha-mdebug-tdep.c')
-rw-r--r--gdb/alpha-mdebug-tdep.c14
1 files changed, 13 insertions, 1 deletions
diff --git a/gdb/alpha-mdebug-tdep.c b/gdb/alpha-mdebug-tdep.c
index ab2fb91..9c82ad1 100644
--- a/gdb/alpha-mdebug-tdep.c
+++ b/gdb/alpha-mdebug-tdep.c
@@ -25,6 +25,7 @@
#include "gdbcore.h"
#include "block.h"
#include "gdb_assert.h"
+#include "gdb_string.h"
#include "alpha-tdep.h"
#include "mdebugread.h"
@@ -95,11 +96,12 @@ find_proc_desc (CORE_ADDR pc)
struct block *b = block_for_pc (pc);
struct mdebug_extra_func_info *proc_desc = NULL;
struct symbol *sym = NULL;
+ char *sh_name = NULL;
if (b)
{
CORE_ADDR startaddr;
- find_pc_partial_function (pc, NULL, &startaddr, NULL);
+ find_pc_partial_function (pc, &sh_name, &startaddr, NULL);
if (startaddr > BLOCK_START (b))
/* This is the "pathological" case referred to in a comment in
@@ -114,6 +116,16 @@ find_proc_desc (CORE_ADDR pc)
{
proc_desc = (struct mdebug_extra_func_info *) SYMBOL_VALUE (sym);
+ /* Correct incorrect setjmp procedure descriptor from the library
+ to make backtrace through setjmp work. */
+ if (proc_desc->pdr.pcreg == 0
+ && strcmp (sh_name, "setjmp") == 0)
+ {
+ proc_desc->pdr.pcreg = ALPHA_RA_REGNUM;
+ proc_desc->pdr.regmask = 0x80000000;
+ proc_desc->pdr.regoffset = -4;
+ }
+
/* If we never found a PDR for this function in symbol reading,
then examine prologues to find the information. */
if (proc_desc->pdr.framereg == -1)