From: Alexandra Petlanova Hajkova Date: Wed, 6 Dec 2023 08:14:53 +0000 (-0500) Subject: remote-utils-shared: Created files for sharing code X-Git-Tag: VALGRIND_3_23_0~230 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=ec73dcb1826091b3cbdd43a4a37522e33c3ce786;p=thirdparty%2Fvalgrind.git remote-utils-shared: Created files for sharing code between vgdb.c and m_gdbserver/server.c. This removes code redundancies that was introduced for vgdb.c by vgdb --multi implementation. --- diff --git a/coregrind/Makefile.am b/coregrind/Makefile.am index 8a7f753a6e..f1815b411f 100644 --- a/coregrind/Makefile.am +++ b/coregrind/Makefile.am @@ -80,7 +80,7 @@ valgrind_LDFLAGS += -Wl,-M,/usr/lib/ld/map.noexstk endif -vgdb_SOURCES = vgdb.c +vgdb_SOURCES = vgdb.c m_gdbserver/remote-utils-shared.c if VGCONF_OS_IS_LINUX if VGCONF_PLATVARIANT_IS_ANDROID vgdb_SOURCES += vgdb-invoker-none.c @@ -273,6 +273,7 @@ noinst_HEADERS = \ m_gdbserver/regcache.h \ m_gdbserver/regdef.h \ m_gdbserver/server.h \ + m_gdbserver/remote-utils-shared.h \ m_gdbserver/target.h \ m_gdbserver/valgrind_low.h \ m_gdbserver/gdb/signals.h \ @@ -395,6 +396,7 @@ COREGRIND_SOURCES_COMMON = \ m_gdbserver/inferiors.c \ m_gdbserver/regcache.c \ m_gdbserver/remote-utils.c \ + m_gdbserver/remote-utils-shared-gdbserver.c \ m_gdbserver/server.c \ m_gdbserver/signals.c \ m_gdbserver/target.c \ diff --git a/coregrind/m_gdbserver/remote-utils-shared-gdbserver.c b/coregrind/m_gdbserver/remote-utils-shared-gdbserver.c new file mode 100644 index 0000000000..a8a68500c6 --- /dev/null +++ b/coregrind/m_gdbserver/remote-utils-shared-gdbserver.c @@ -0,0 +1,6 @@ +/* Code shared with vgdb server. We'll include server.h here first to define + magic macros for libc functions used. */ +#include "server.h" +#include "remote-utils-shared.c" + +/* Note all code is in remote-utils-shared.c included above. */ diff --git a/coregrind/m_gdbserver/remote-utils-shared.c b/coregrind/m_gdbserver/remote-utils-shared.c new file mode 100644 index 0000000000..d0e11b302c --- /dev/null +++ b/coregrind/m_gdbserver/remote-utils-shared.c @@ -0,0 +1,62 @@ +/* Shared remote utility routines for the remote server for GDB. + Copyright (C) 1986, 1989, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, + 2001, 2002, 2003, 2004, 2005, 2006, 2011 + Free Software Foundation, Inc. + + This file is based on parts of GDB. + It has been modified to integrate it in valgrind + + 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., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. */ + +/* Note this is shared code between vgdb.c and m_gdbserver/server.c. + It is used directly by vgdb.c using libc functions. + There is another file m_gdbserver/remote-utils-shared-gdbserver.c + which first redefines the libc functions to use valgrind VG_ variants + that is used with server.c. */ + +#include "remote-utils-shared.h" + +/* When included through remote-utils-shared-gdbserver.c strlen + is already defined to make to VG_(strlen). Otherwise we are + building for vgdb, which will use the standard libc functions. */ +#ifndef strlen +#include +#endif + +/* Convert number NIB to a hex digit. */ +int tohex (int nib) +{ + if (nib < 10) + return '0' + nib; + else + return 'a' + nib - 10; +} + +int hexify (char *hex, const char *bin, int count) +{ + int i; + + /* May use a length, or a nul-terminated string as input. */ + if (count == 0) + count = strlen (bin); + + for (i = 0; i < count; i++) { + *hex++ = tohex ((*bin >> 4) & 0xf); + *hex++ = tohex (*bin++ & 0xf); + } + *hex = 0; + return i; +} diff --git a/coregrind/m_gdbserver/remote-utils-shared.h b/coregrind/m_gdbserver/remote-utils-shared.h new file mode 100644 index 0000000000..bcdd2aef81 --- /dev/null +++ b/coregrind/m_gdbserver/remote-utils-shared.h @@ -0,0 +1,7 @@ +#ifndef REMOTE_UTILS_SHARED_H +#define REMOTE_UTILS_SHARED_H + +extern int tohex (int nib); +extern int hexify (char *hex, const char *bin, int count); + +#endif /* REMOTE_UTILS_SHARED_H */ diff --git a/coregrind/m_gdbserver/remote-utils.c b/coregrind/m_gdbserver/remote-utils.c index 8e3614fb43..b22dc4482b 100644 --- a/coregrind/m_gdbserver/remote-utils.c +++ b/coregrind/m_gdbserver/remote-utils.c @@ -660,33 +660,6 @@ void decode_address (CORE_ADDR *addrp, const char *start, int len) *addrp = addr; } -/* Convert number NIB to a hex digit. */ - -static -int tohex (int nib) -{ - if (nib < 10) - return '0' + nib; - else - return 'a' + nib - 10; -} - -int hexify (char *hex, const char *bin, int count) -{ - int i; - - /* May use a length, or a nul-terminated string as input. */ - if (count == 0) - count = strlen (bin); - - for (i = 0; i < count; i++) { - *hex++ = tohex ((*bin >> 4) & 0xf); - *hex++ = tohex (*bin++ & 0xf); - } - *hex = 0; - return i; -} - /* builds an image of bin according to byte order of the architecture Useful for register and int image */ char* heximage (char *buf, const char *bin, int count) diff --git a/coregrind/m_gdbserver/server.h b/coregrind/m_gdbserver/server.h index 953abbd61d..06d15fa8c0 100644 --- a/coregrind/m_gdbserver/server.h +++ b/coregrind/m_gdbserver/server.h @@ -312,7 +312,6 @@ int decode_X_packet (char *from, int packet_len, CORE_ADDR * mem_addr_ptr, unsigned int *len_ptr, unsigned char *to); int unhexify (char *bin, const char *hex, int count); -int hexify (char *hex, const char *bin, int count); /* heximage builds an image of bin according to byte order of the architecture Useful for register and int image */ char* heximage (char *buf, const char *bin, int count); @@ -378,4 +377,7 @@ void init_registers (void); /* Version information, from version.c. */ extern const char version[]; +/* Shared remote utils functions with vgdb. */ +#include "remote-utils-shared.h" + #endif /* SERVER_H */ diff --git a/coregrind/vgdb.c b/coregrind/vgdb.c index 5bdc6d2d99..f121ea88a8 100644 --- a/coregrind/vgdb.c +++ b/coregrind/vgdb.c @@ -49,6 +49,8 @@ #include #include +#include "m_gdbserver/remote-utils-shared.h" + /* vgdb has three usages: 1. relay application between gdb and the gdbserver embedded in valgrind. 2. standalone to send monitor commands to a running valgrind-ified process @@ -904,31 +906,6 @@ void close_connection(int to_pid, int from_pid) #endif } -static -int tohex (int nib) -{ - if (nib < 10) - return '0' + nib; - else - return 'a' + nib - 10; -} - -static int hexify (char *hex, const char *bin, int count) -{ - int i; - - /* May use a length, or a nul-terminated string as input. */ - if (count == 0) - count = strlen (bin); - - for (i = 0; i < count; i++) { - *hex++ = tohex ((*bin >> 4) & 0xf); - *hex++ = tohex (*bin++ & 0xf); - } - *hex = 0; - return i; -} - /* Returns an allocated hex-decoded string from the buf. Stops decoding at end of buf (zero) or when seeing the delim char. */ static