From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 27786 invoked by alias); 24 Mar 2002 23:36:53 -0000 Mailing-List: contact gdb-patches-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sources.redhat.com Received: (qmail 27778 invoked from network); 24 Mar 2002 23:36:51 -0000 Received: from unknown (HELO nevyn.them.org) (128.2.145.6) by sources.redhat.com with SMTP; 24 Mar 2002 23:36:51 -0000 Received: from drow by nevyn.them.org with local (Exim 3.35 #1 (Debian)) id 16pHXl-0003oM-00 for ; Sun, 24 Mar 2002 18:36:57 -0500 Date: Sun, 24 Mar 2002 15:36:00 -0000 From: Daniel Jacobowitz To: gdb-patches@sources.redhat.com Subject: [rfa] Use shared signals/signals.c in gdbserver Message-ID: <20020324183657.A14633@nevyn.them.org> Mail-Followup-To: gdb-patches@sources.redhat.com Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.3.23i X-SW-Source: 2002-03/txt/msg00456.txt.bz2 Best version yet! Get it while it's hot! (OK? :) -- Daniel Jacobowitz Carnegie Mellon University MontaVista Software Debian GNU/Linux Developer 2002-03-24 Daniel Jacobowitz * gdbserver/server.c (main): Call target_signal_to_host_p and target_signal_to_host on signals received from the remote. * gdbserver/remote-utils.c (prepare_resume_reply): Call target_signal_from_host on signals sent to the remote. * gdbserver/server.h: Add prototypes. Include "gdb/signals.h". * gdbserver/Makefile.in: Add signals.o. Add -I${INCLUDE_DIR}. Index: Makefile.in =================================================================== RCS file: /cvs/src/src/gdb/gdbserver/Makefile.in,v retrieving revision 1.12 diff -u -p -r1.12 Makefile.in --- Makefile.in 2002/02/28 16:58:13 1.12 +++ Makefile.in 2002/03/24 23:17:05 @@ -83,7 +83,7 @@ READLINE_DEP = $$(READLINE_DIR) # -I. for config files. # -I${srcdir} for our headers. # -I$(srcdir)/../regformats for regdef.h. -INCLUDE_CFLAGS = -I. -I${srcdir} -I$(srcdir)/../regformats +INCLUDE_CFLAGS = -I. -I${srcdir} -I$(srcdir)/../regformats -I$(INCLUDE_DIR) # M{H,T}_CFLAGS, if defined, has host- and target-dependent CFLAGS # from the config/ directory. @@ -120,7 +120,7 @@ DEPFILES = @GDBSERVER_DEPFILES@ SOURCES = $(SFILES) TAGFILES = $(SOURCES) ${HFILES} ${ALLPARAM} ${POSSLIBS} -OBS = utils.o $(DEPFILES) server.o remote-utils.o regcache.o +OBS = utils.o $(DEPFILES) server.o remote-utils.o regcache.o signals.o # Prevent Sun make from putting in the machine type. Setting # TARGET_ARCH to nothing works for SunOS 3, 4.0, but not for 4.1. @@ -231,6 +231,9 @@ server.o: server.c $(server_h) remote-utils.o: remote-utils.c terminal.h $(server_h) utils.o: utils.c $(server_h) regcache.o: regcache.c $(server_h) $(regdef_h) + +signals.o: ../signals/signals.c $(server_h) + $(CC) -c $(CPPFLAGS) $(INTERNAL_CFLAGS) $< -DGDBSERVER i387-fp.o: i387-fp.c $(server_h) Index: remote-utils.c =================================================================== RCS file: /cvs/src/src/gdb/gdbserver/remote-utils.c,v retrieving revision 1.10 diff -u -p -r1.10 remote-utils.c --- remote-utils.c 2002/03/21 02:11:03 1.10 +++ remote-utils.c 2002/03/24 23:17:05 @@ -463,17 +463,15 @@ outreg (int regno, char *buf) void prepare_resume_reply (char *buf, char status, unsigned char signo) { - int nib; + int nib, sig; *buf++ = status; - /* FIXME! Should be converting this signal number (numbered - according to the signal numbering of the system we are running on) - to the signal numbers used by the gdb protocol (see enum target_signal - in gdb/target.h). */ - nib = ((signo & 0xf0) >> 4); + sig = (int)target_signal_from_host (signo); + + nib = ((sig & 0xf0) >> 4); *buf++ = tohex (nib); - nib = signo & 0x0f; + nib = sig & 0x0f; *buf++ = tohex (nib); if (status == 'T') Index: server.c =================================================================== RCS file: /cvs/src/src/gdb/gdbserver/server.c,v retrieving revision 1.6 diff -u -p -r1.6 server.c --- server.c 2002/02/14 06:21:22 1.6 +++ server.c 2002/03/24 23:17:05 @@ -190,13 +190,21 @@ main (int argc, char *argv[]) break; case 'C': convert_ascii_to_int (own_buf + 1, &sig, 1); - myresume (0, sig); + if (target_signal_to_host_p (sig)) + signal = target_signal_to_host (sig); + else + signal = 0; + myresume (0, signal); signal = mywait (&status); prepare_resume_reply (own_buf, status, signal); break; case 'S': convert_ascii_to_int (own_buf + 1, &sig, 1); - myresume (1, sig); + if (target_signal_to_host_p (sig)) + signal = target_signal_to_host (sig); + else + signal = 0; + myresume (1, signal); signal = mywait (&status); prepare_resume_reply (own_buf, status, signal); break; Index: server.h =================================================================== RCS file: /cvs/src/src/gdb/gdbserver/server.h,v retrieving revision 1.4 diff -u -p -r1.4 server.h --- server.h 2002/02/14 06:21:22 1.4 +++ server.h 2002/03/24 23:17:05 @@ -34,6 +34,7 @@ typedef long long CORE_ADDR; #include "regcache.h" +#include "gdb/signals.h" #include @@ -84,6 +85,10 @@ void decode_m_packet (char *from, CORE_A void decode_M_packet (char *from, CORE_ADDR * mem_addr_ptr, unsigned int *len_ptr, char *to); +/* Functions from ``signals.c''. */ +enum target_signal target_signal_from_host (int hostsig); +int target_signal_to_host_p (enum target_signal oursig); +int target_signal_to_host (enum target_signal oursig); /* Functions from utils.c */