From: Tom Tromey Date: Fri, 16 Dec 2022 14:49:01 +0000 (-0700) Subject: Don't use struct buffer in handle_qxfer_traceframe_info X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=c9d9117a12be1ff0d86a6d5bd0c9380ee5107858;p=binutils-gdb.git Don't use struct buffer in handle_qxfer_traceframe_info This changes handle_qxfer_traceframe_info, in gdbserver, to use std::string rather than struct buffer. --- diff --git a/gdbserver/server.cc b/gdbserver/server.cc index 46dfe70838b..443c11f7d1b 100644 --- a/gdbserver/server.cc +++ b/gdbserver/server.cc @@ -1770,8 +1770,7 @@ handle_qxfer_traceframe_info (const char *annex, ULONGEST offset, LONGEST len) { client_state &cs = get_client_state (); - static char *result = 0; - static unsigned int result_length = 0; + static std::string result; if (writebuf != NULL) return -2; @@ -1781,35 +1780,25 @@ handle_qxfer_traceframe_info (const char *annex, if (offset == 0) { - struct buffer buffer; - /* When asked for data at offset 0, generate everything and store into 'result'. Successive reads will be served off 'result'. */ - free (result); + result.clear (); - buffer_init (&buffer); - - traceframe_read_info (cs.current_traceframe, &buffer); - - result = buffer_finish (&buffer); - result_length = strlen (result); - buffer_free (&buffer); + traceframe_read_info (cs.current_traceframe, &result); } - if (offset >= result_length) + if (offset >= result.length ()) { /* We're out of data. */ - free (result); - result = NULL; - result_length = 0; + result.clear (); return 0; } - if (len > result_length - offset) - len = result_length - offset; + if (len > result.length () - offset) + len = result.length () - offset; - memcpy (readbuf, result + offset, len); + memcpy (readbuf, result.c_str () + offset, len); return len; } diff --git a/gdbserver/tracepoint.cc b/gdbserver/tracepoint.cc index b59077a3896..3f60989e4c7 100644 --- a/gdbserver/tracepoint.cc +++ b/gdbserver/tracepoint.cc @@ -5390,13 +5390,13 @@ traceframe_read_sdata (int tfnum, ULONGEST offset, } /* Callback for traceframe_walk_blocks. Builds a traceframe-info - object. DATA is pointer to a struct buffer holding the - traceframe-info object being built. */ + object. DATA is pointer to a string holding the traceframe-info + object being built. */ static int build_traceframe_info_xml (char blocktype, unsigned char *dataptr, void *data) { - struct buffer *buffer = (struct buffer *) data; + std::string *buffer = (std::string *) data; switch (blocktype) { @@ -5409,9 +5409,9 @@ build_traceframe_info_xml (char blocktype, unsigned char *dataptr, void *data) dataptr += sizeof (maddr); memcpy (&mlen, dataptr, sizeof (mlen)); dataptr += sizeof (mlen); - buffer_xml_printf (buffer, - "\n", - paddress (maddr), phex_nz (mlen, sizeof (mlen))); + string_xml_appendf (*buffer, + "\n", + paddress (maddr), phex_nz (mlen, sizeof (mlen))); break; } case 'V': @@ -5419,7 +5419,7 @@ build_traceframe_info_xml (char blocktype, unsigned char *dataptr, void *data) int vnum; memcpy (&vnum, dataptr, sizeof (vnum)); - buffer_xml_printf (buffer, "\n", vnum); + string_xml_appendf (*buffer, "\n", vnum); break; } case 'R': @@ -5441,7 +5441,7 @@ build_traceframe_info_xml (char blocktype, unsigned char *dataptr, void *data) BUFFER. */ int -traceframe_read_info (int tfnum, struct buffer *buffer) +traceframe_read_info (int tfnum, std::string *buffer) { struct traceframe *tframe; @@ -5455,10 +5455,10 @@ traceframe_read_info (int tfnum, struct buffer *buffer) return 1; } - buffer_grow_str (buffer, "\n"); + *buffer += "\n"; traceframe_walk_blocks (tframe->data, tframe->data_size, tfnum, build_traceframe_info_xml, buffer); - buffer_grow_str0 (buffer, "\n"); + *buffer += "\n"; return 0; } diff --git a/gdbserver/tracepoint.h b/gdbserver/tracepoint.h index a30f540d130..060d44d0033 100644 --- a/gdbserver/tracepoint.h +++ b/gdbserver/tracepoint.h @@ -95,7 +95,7 @@ int traceframe_read_sdata (int tfnum, ULONGEST offset, unsigned char *buf, ULONGEST length, ULONGEST *nbytes); -int traceframe_read_info (int tfnum, struct buffer *buffer); +int traceframe_read_info (int tfnum, std::string *buffer); /* If a thread is determined to be collecting a fast tracepoint, this structure holds the collect status. */