* [PATCH] Move some GNU/Linux-specific Alpha code to alpha-linux-tdep.c
@ 2002-04-21 14:06 Jason R Thorpe
2002-04-21 14:09 ` Andrew Cagney
0 siblings, 1 reply; 3+ messages in thread
From: Jason R Thorpe @ 2002-04-21 14:06 UTC (permalink / raw)
To: gdb-patches
[-- Attachment #1: Type: text/plain, Size: 289 bytes --]
Committed as obvious.
* 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.
--
-- Jason R. Thorpe <thorpej@wasabisystems.com>
[-- Attachment #2: alpha-linux-patch --]
[-- Type: text/plain, Size: 6357 bytes --]
Index: alpha-linux-tdep.c
===================================================================
RCS file: alpha-linux-tdep.c
diff -N alpha-linux-tdep.c
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ alpha-linux-tdep.c 21 Apr 2002 20:53:53 -0000
@@ -0,0 +1,98 @@
+/* Target-dependent code for GNU/Linux on Alpha.
+ Copyright 2002 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., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA. */
+
+#include "defs.h"
+#include "value.h"
+
+#include "alpha-tdep.h"
+
+/* 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. */
+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;
+}
+
+static void
+alpha_linux_init_abi (struct gdbarch_info info,
+ struct gdbarch *gdbarch)
+{
+ /* Place holder. */
+}
+
+void
+_initialize_alpha_linux_tdep (void)
+{
+ alpha_gdbarch_register_os_abi (ALPHA_ABI_LINUX, alpha_linux_init_abi);
+}
Index: alpha-tdep.c
===================================================================
RCS file: /cvs/src/src/gdb/alpha-tdep.c,v
retrieving revision 1.24
diff -u -r1.24 alpha-tdep.c
--- alpha-tdep.c 21 Apr 2002 18:24:48 -0000 1.24
+++ alpha-tdep.c 21 Apr 2002 20:54:00 -0000
@@ -201,76 +201,6 @@
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;
-}
-\f
-
/* 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
Index: config/alpha/alpha-linux.mt
===================================================================
RCS file: /cvs/src/src/gdb/config/alpha/alpha-linux.mt,v
retrieving revision 1.3
diff -u -r1.3 alpha-linux.mt
--- config/alpha/alpha-linux.mt 10 Mar 2001 06:17:20 -0000 1.3
+++ config/alpha/alpha-linux.mt 21 Apr 2002 20:54:03 -0000
@@ -1,3 +1,3 @@
# Target: Little-endian Alpha
-TDEPFILES= alpha-tdep.o solib.o solib-svr4.o solib-legacy.o
+TDEPFILES= alpha-tdep.o alpha-linux-tdep.o solib.o solib-svr4.o solib-legacy.o
TM_FILE= tm-alphalinux.h
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] Move some GNU/Linux-specific Alpha code to alpha-linux-tdep.c
2002-04-21 14:06 [PATCH] Move some GNU/Linux-specific Alpha code to alpha-linux-tdep.c Jason R Thorpe
@ 2002-04-21 14:09 ` Andrew Cagney
2002-04-21 14:52 ` Jason R Thorpe
0 siblings, 1 reply; 3+ messages in thread
From: Andrew Cagney @ 2002-04-21 14:09 UTC (permalink / raw)
To: thorpej; +Cc: gdb-patches
Don't forget the makefile.
Andrew
> Committed as obvious.
>
> * 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.
>
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] Move some GNU/Linux-specific Alpha code to alpha-linux-tdep.c
2002-04-21 14:09 ` Andrew Cagney
@ 2002-04-21 14:52 ` Jason R Thorpe
0 siblings, 0 replies; 3+ messages in thread
From: Jason R Thorpe @ 2002-04-21 14:52 UTC (permalink / raw)
To: Andrew Cagney; +Cc: gdb-patches
[-- Attachment #1: Type: text/plain, Size: 435 bytes --]
On Sun, Apr 21, 2002 at 05:09:55PM -0400, Andrew Cagney wrote:
> Don't forget the makefile.
Ah, alphafbsd-tdep was missing from the Makefile, as well.
Committed the following. I will also update my alpha-netbsd patch.
* Makefile.in (ALLDEPFILES): Add alpha-linux-tdep.c and
alphafbsd-tdep.c.
(alpha-linux-tdep.o): New dependency list.
(alphafbsd-tdep.o): Likewise.
--
-- Jason R. Thorpe <thorpej@wasabisystems.com>
[-- Attachment #2: makefile-patch --]
[-- Type: text/plain, Size: 1290 bytes --]
Index: Makefile.in
===================================================================
RCS file: /cvs/src/src/gdb/Makefile.in,v
retrieving revision 1.170
diff -u -r1.170 Makefile.in
--- Makefile.in 21 Apr 2002 16:52:39 -0000 1.170
+++ Makefile.in 21 Apr 2002 21:51:28 -0000
@@ -1173,9 +1173,9 @@
ALLDEPFILES = 29k-share/udi/udip2soc.c 29k-share/udi/udr.c \
29k-share/udi/udi2go32.c \
- a29k-tdep.c a68v-nat.c alpha-nat.c alpha-tdep.c \
- arm-linux-nat.c arm-linux-tdep.c arm-tdep.c armnbsd-nat.c \
- armnbsd-tdep.c \
+ a29k-tdep.c a68v-nat.c alpha-nat.c alpha-tdep.c alpha-linux-tdep.c \
+ alphafbsd-tdep.c arm-linux-nat.c arm-linux-tdep.c arm-tdep.c \
+ armnbsd-nat.c armnbsd-tdep.c \
coff-solib.c \
core-sol2.c core-regset.c core-aout.c corelow.c \
dcache.c delta68-nat.c dpx2-nat.c dstread.c exec.c fork-child.c \
@@ -1243,6 +1243,10 @@
alpha-tdep.o: alpha-tdep.c $(defs_h) $(gdbcmd_h) $(gdbcore_h) \
$(inferior_h) $(symtab_h) $(dis_asm_h) $(gdb_string_h) $(linespec_h) \
$(regcache_h) $(doublest_h) $(BFD_SRC)/elf-bfd.h alpha-tdep.h
+
+alpha-linux-tdep.o: alpha-linux-tdep.c $(defs_h) $(value_h) alpha-tdep.h
+
+alphafbsd-tdep.o: alphafbsd-tdep.c $(defs_h) $(value_h) alpha-tdep.h
annotate.o: annotate.c $(defs_h) $(annotate_h) $(value_h) $(target_h) $(gdbtypes_h)
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2002-04-21 21:52 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2002-04-21 14:06 [PATCH] Move some GNU/Linux-specific Alpha code to alpha-linux-tdep.c Jason R Thorpe
2002-04-21 14:09 ` Andrew Cagney
2002-04-21 14:52 ` Jason R Thorpe
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox