forked from Imagelibrary/binutils-gdb
This patch C++ifies the thread_item and threads_listing_context
structures in remote.c. thread_item::{extra,name} are changed to
std::string. As a result, there's a bit of awkwardness in
remote_update_thread_list, where we have to xstrdup those strings when
filling the private_thread_info structure. This is removed in the
following patch, where private_thread_info is also C++ified and its
corresponding fields made std::string too. The xstrdup then becomes an
std::move.
Other than that there's nothing really special, it's a usual day-to-day
VEC -> vector and char* -> std::string change. It allows removing a
cleanup in remote_update_thread_list.
Note that an overload of hex2bin that returns a gdb::byte_vector is
added, with corresponding selftests.
gdb/ChangeLog:
* remote.c (struct thread_item): Add constructor, disable copy
construction and copy assignment, define default move
construction and move assignment.
<extra, name>: Change type to std::string.
<core>: Initialize.
<thread_handle>: Make non-pointer.
(thread_item_t): Remove typedef.
(DEF_VEC_O(thread_item_t)): Remove.
(threads_listing_context) <contains_thread>: New method.
<remove_thread>: New method.
<items>: Change type to std::vector.
(clear_threads_listing_context): Remove.
(threads_listing_context_remove): Remove.
(remote_newthread_step): Use thread_item constructor, adjust to
change to std::vector.
(start_thread): Use thread_item constructor, adjust to change to
std::vector.
(end_thread): Adjust to change to std::vector and std::string.
(remote_get_threads_with_qthreadinfo): Use thread_item
constructor, adjust to std::vector.
(remote_update_thread_list): Adjust to change to std::vector and
std::string, use threads_listing_context methods.
(remove_child_of_pending_fork): Adjust.
(remove_new_fork_children): Adjust.
* Makefile.in (SUBDIR_UNITTESTS_SRCS): Add rsp-low-selftests.c.
(SUBDIR_UNITTESTS_OBS): Add rsp-low-selftests.o.
* unittests/rsp-low-selftests.c: New file.
* common/rsp-low.h: Include common/byte-vector.h.
(hex2bin): New overload.
* common/rsp-low.c (hex2bin): New overload.
98 lines
3.7 KiB
C++
98 lines
3.7 KiB
C++
/* Low-level RSP routines for GDB, the GNU debugger.
|
|
|
|
Copyright (C) 1988-2017 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 3 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, see <http://www.gnu.org/licenses/>. */
|
|
|
|
#ifndef COMMON_RSP_LOW_H
|
|
#define COMMON_RSP_LOW_H
|
|
|
|
#include "common/byte-vector.h"
|
|
|
|
/* Convert hex digit A to a number, or throw an exception. */
|
|
|
|
extern int fromhex (int a);
|
|
|
|
/* Convert number NIB to a hex digit. */
|
|
|
|
extern int tohex (int nib);
|
|
|
|
/* Write a character representing the low order four bits of NIBBLE in
|
|
hex to *BUF. Returns BUF+1. */
|
|
|
|
extern char *pack_nibble (char *buf, int nibble);
|
|
|
|
/* Write the low byte of BYTE in hex to *BUF. Returns BUF+2. */
|
|
|
|
extern char *pack_hex_byte (char *pkt, int byte);
|
|
|
|
/* Read hex digits from BUFF and convert to a number, which is stored
|
|
in RESULT. Reads until a non-hex digit is seen. Returns a pointer
|
|
to the terminating character. */
|
|
|
|
extern const char *unpack_varlen_hex (const char *buff, ULONGEST *result);
|
|
|
|
/* HEX is a string of characters representing hexadecimal digits.
|
|
Convert pairs of hex digits to bytes and store sequentially into
|
|
BIN. COUNT is the maximum number of characters to convert. This
|
|
will convert fewer characters if the number of hex characters
|
|
actually seen is odd, or if HEX terminates before COUNT characters.
|
|
Returns the number of characters actually converted. */
|
|
|
|
extern int hex2bin (const char *hex, gdb_byte *bin, int count);
|
|
|
|
/* Like the above, but return a gdb::byte_vector. */
|
|
|
|
gdb::byte_vector hex2bin (const char *hex);
|
|
|
|
/* Like hex2bin, but return a std::string. */
|
|
|
|
extern std::string hex2str (const char *hex);
|
|
|
|
/* Convert some bytes to a hexadecimal representation. BIN holds the
|
|
bytes to convert. COUNT says how many bytes to convert. The
|
|
resulting characters are stored in HEX, followed by a NUL
|
|
character. Returns the number of bytes actually converted. */
|
|
|
|
extern int bin2hex (const gdb_byte *bin, char *hex, int count);
|
|
|
|
/* Overloaded version of bin2hex that returns a std::string. */
|
|
|
|
extern std::string bin2hex (const gdb_byte *bin, int count);
|
|
|
|
/* Convert BUFFER, binary data at least LEN_UNITS addressable memory units
|
|
long, into escaped binary data in OUT_BUF. Only copy memory units that fit
|
|
completely in OUT_BUF. Set *OUT_LEN_UNITS to the number of units from
|
|
BUFFER successfully encoded in OUT_BUF, and return the number of bytes used
|
|
in OUT_BUF. The total number of bytes in the output buffer will be at most
|
|
OUT_MAXLEN_BYTES. This function properly escapes '*', and so is suitable
|
|
for the server side as well as the client. */
|
|
|
|
extern int remote_escape_output (const gdb_byte *buffer, int len_units,
|
|
int unit_size, gdb_byte *out_buf,
|
|
int *out_len_units, int out_maxlen_bytes);
|
|
|
|
/* Convert BUFFER, escaped data LEN bytes long, into binary data
|
|
in OUT_BUF. Return the number of bytes written to OUT_BUF.
|
|
Raise an error if the total number of bytes exceeds OUT_MAXLEN.
|
|
|
|
This function reverses remote_escape_output. */
|
|
|
|
extern int remote_unescape_input (const gdb_byte *buffer, int len,
|
|
gdb_byte *out_buf, int out_maxlen);
|
|
|
|
#endif /* COMMON_RSP_LOW_H */
|