diff options
author | Jason Thorpe <thorpej@netbsd.org> | 2002-04-21 21:07:58 +0000 |
---|---|---|
committer | Jason Thorpe <thorpej@netbsd.org> | 2002-04-21 21:07:58 +0000 |
commit | 3379287ac9a887aa3c8e2ffd697816c3aff32ef0 (patch) | |
tree | 86a837dc9bcd0a3b2cda879fa122f4a45d2bf8fd /gdb/alpha-tdep.c | |
parent | 4bcbd6cb5f3405b5d9254795fefa0f772c059c57 (diff) | |
download | gdb-3379287ac9a887aa3c8e2ffd697816c3aff32ef0.zip gdb-3379287ac9a887aa3c8e2ffd697816c3aff32ef0.tar.gz gdb-3379287ac9a887aa3c8e2ffd697816c3aff32ef0.tar.bz2 |
* alpha-linux-tdep.c: New file. Move alpha_linux_sigtramp_offset
to here...
* alpha-tdep.c: ...from here.
* config/alpha/alpha-linux.mt (TDEPFILES): Add alpha-linux-tdep.o.
Diffstat (limited to 'gdb/alpha-tdep.c')
-rw-r--r-- | gdb/alpha-tdep.c | 70 |
1 files changed, 0 insertions, 70 deletions
diff --git a/gdb/alpha-tdep.c b/gdb/alpha-tdep.c index 4f89237..537ba92 100644 --- a/gdb/alpha-tdep.c +++ b/gdb/alpha-tdep.c @@ -201,76 +201,6 @@ alpha_osf_in_sigtramp (CORE_ADDR pc, char *func_name) return (func_name != NULL && STREQ ("__sigtramp", func_name)); } -/* Under GNU/Linux, signal handler invocations can be identified by the - designated code sequence that is used to return from a signal - handler. In particular, the return address of a signal handler - points to the following sequence (the first instruction is quadword - aligned): - - bis $30,$30,$16 - addq $31,0x67,$0 - call_pal callsys - - Each instruction has a unique encoding, so we simply attempt to - match the instruction the pc is pointing to with any of the above - instructions. If there is a hit, we know the offset to the start - of the designated sequence and can then check whether we really are - executing in a designated sequence. If not, -1 is returned, - otherwise the offset from the start of the desingated sequence is - returned. - - There is a slight chance of false hits: code could jump into the - middle of the designated sequence, in which case there is no - guarantee that we are in the middle of a sigreturn syscall. Don't - think this will be a problem in praxis, though. - */ - -#ifndef TM_LINUXALPHA_H -/* HACK: Provide a prototype when compiling this file for non - linuxalpha targets. */ -long alpha_linux_sigtramp_offset (CORE_ADDR pc); -#endif -long -alpha_linux_sigtramp_offset (CORE_ADDR pc) -{ - unsigned int i[3], w; - long off; - - if (read_memory_nobpt (pc, (char *) &w, 4) != 0) - return -1; - - off = -1; - switch (w) - { - case 0x47de0410: - off = 0; - break; /* bis $30,$30,$16 */ - case 0x43ecf400: - off = 4; - break; /* addq $31,0x67,$0 */ - case 0x00000083: - off = 8; - break; /* call_pal callsys */ - default: - return -1; - } - pc -= off; - if (pc & 0x7) - { - /* designated sequence is not quadword aligned */ - return -1; - } - - if (read_memory_nobpt (pc, (char *) i, sizeof (i)) != 0) - return -1; - - if (i[0] == 0x47de0410 && i[1] == 0x43ecf400 && i[2] == 0x00000083) - return off; - - return -1; -} - - /* Under OSF/1, the __sigtramp routine is frameless and has a frame size of zero, but we are able to backtrace through it. */ CORE_ADDR |