From patchwork Mon Feb 12 14:40:13 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alexandra Petlanova Hajkova X-Patchwork-Id: 85600 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 164363858415 for ; Mon, 12 Feb 2024 14:40:55 +0000 (GMT) X-Original-To: gdb-patches@sourceware.org Delivered-To: gdb-patches@sourceware.org Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by sourceware.org (Postfix) with ESMTPS id A3BBE3858D32 for ; Mon, 12 Feb 2024 14:40:20 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org A3BBE3858D32 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=redhat.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=redhat.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org A3BBE3858D32 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=170.10.133.124 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1707748823; cv=none; b=H6Q7vzMBE/rcPfUvsedYg3IgPrxMHhZpb9Dv7fShH3zRRYutKicWKaLEX6YPhHRMQubjSkK1VrU68nhSy0/zwZkuPT0RJC/zbV41mNZzatK5bzKVD8JwAIWCVhYPl5amAjSqHHtfoHloTVKCU4YkcMdSOwoZAEfNB/WHCrkA+B8= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1707748823; c=relaxed/simple; bh=ylWaYxHJziITkua8/B4HPf2bkD33MSL3q/7gDm1DR+c=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=KH+zlz2cjmeEjHImlABzB4NzI0R2fwe7Y0Y/s5k40WY6fXmNB2V0ZnBS7OWnFi1mxGGHm39YTN48bCqDTVO7rA+S7bPb6v2GF8znaIKZmVkxQKSQFfnv7+q53DlKUIucsuZvKuYAlK44y2xnIUuW7Fpe8sqqzh2UMxgjUuX+4XU= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1707748820; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=1Ccuh4pms9BE1YkQ2qYXQPmDL/2j6u9t2Y8RLVMti4c=; b=FFB6wZeyRh87+e4t6RDZKqqOcajAjmxbdX3ZOYCKRrSDpfumIcKHnDp9HE5ny3fD+DpQpH WEP1q+MS5qXrCZGjx+B9C6jGUcC7OaN91QLpyenY3V4ok143rrwW/iKdIddSE5KotKGb9K kWGtNsp5gzmBwUbYGKeRkvcl34RvOls= Received: from mimecast-mx02.redhat.com (mx-ext.redhat.com [66.187.233.73]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-554-twK7kovaO32XI6aon6VB4g-1; Mon, 12 Feb 2024 09:40:18 -0500 X-MC-Unique: twK7kovaO32XI6aon6VB4g-1 Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.rdu2.redhat.com [10.11.54.5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 519AB2812FE0 for ; Mon, 12 Feb 2024 14:40:18 +0000 (UTC) Received: from fedora.redhat.com (unknown [10.45.242.15]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 9FC791BDD1 for ; Mon, 12 Feb 2024 14:40:17 +0000 (UTC) From: =?utf-8?q?Alexandra_H=C3=A1jkov=C3=A1?= To: gdb-patches@sourceware.org Subject: [PATCH 2/2] remote.c: Make packet_ok return struct packet_result Date: Mon, 12 Feb 2024 15:40:13 +0100 Message-ID: <20240212144014.438615-2-ahajkova@redhat.com> In-Reply-To: <20240212144014.438615-1-ahajkova@redhat.com> References: <20240212144014.438615-1-ahajkova@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.4.1 on 10.11.54.5 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com X-Spam-Status: No, score=-11.2 required=5.0 tests=BAYES_00, DKIMWL_WL_HIGH, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H4, RCVD_IN_MSPIKE_WL, SPF_HELO_NONE, SPF_NONE, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: gdb-patches-bounces+patchwork=sourceware.org@sourceware.org This allows to print the error message stored in a packet_result to be easily used in the calling function. --- gdb/remote.c | 166 +++++++++++++++++++++++---------------------------- 1 file changed, 76 insertions(+), 90 deletions(-) diff --git a/gdb/remote.c b/gdb/remote.c index 8caee0dcff9..85f5624f2b6 100644 --- a/gdb/remote.c +++ b/gdb/remote.c @@ -765,8 +765,8 @@ struct remote_features /* Check result value in BUF for packet WHICH_PACKET and update the packet's support configuration accordingly. */ - packet_status packet_ok (const char *buf, const int which_packet); - packet_status packet_ok (const gdb::char_vector &buf, const int which_packet); + packet_result packet_ok (const char *buf, const int which_packet); + packet_result packet_ok (const gdb::char_vector &buf, const int which_packet); /* Configuration of a remote target's memory read packet. */ memory_packet_config m_memory_read_packet_config; @@ -2499,7 +2499,7 @@ packet_check_result (const gdb::char_vector &buf, bool accept_msg) return packet_check_result (buf.data (), accept_msg); } -packet_status +packet_result remote_features::packet_ok (const char *buf, const int which_packet) { packet_config *config = &m_protocol_packets[which_packet]; @@ -2545,10 +2545,10 @@ remote_features::packet_ok (const char *buf, const int which_packet) break; } - return result.status (); + return result; } -packet_status +packet_result remote_features::packet_ok (const gdb::char_vector &buf, const int which_packet) { return packet_ok (buf.data (), which_packet); @@ -2735,14 +2735,15 @@ remote_target::remote_query_attached (int pid) putpkt (rs->buf); getpkt (&rs->buf); - switch (m_features.packet_ok (rs->buf, PACKET_qAttached)) + packet_result result = m_features.packet_ok (rs->buf, PACKET_qAttached); + switch (result.status()) { case PACKET_OK: if (strcmp (rs->buf.data (), "1") == 0) return 1; break; case PACKET_ERROR: - warning (_("Remote failure reply: %s"), rs->buf.data ()); + warning (_("Remote failure reply: %s"), result.err_msg()); break; case PACKET_UNKNOWN: break; @@ -3047,7 +3048,6 @@ remote_target::set_syscall_catchpoint (int pid, bool needed, int any_count, gdb::array_view syscall_counts) { const char *catch_packet; - enum packet_status result; int n_sysno = 0; if (m_features.packet_support (PACKET_QCatchSyscalls) == PACKET_DISABLE) @@ -3103,8 +3103,8 @@ remote_target::set_syscall_catchpoint (int pid, bool needed, int any_count, putpkt (catch_packet); getpkt (&rs->buf); - result = m_features.packet_ok (rs->buf, PACKET_QCatchSyscalls); - if (result == PACKET_OK) + packet_result result = m_features.packet_ok (rs->buf, PACKET_QCatchSyscalls); + if (result.status() == PACKET_OK) return 0; else return -1; @@ -5109,7 +5109,8 @@ remote_target::start_remote_1 (int from_tty, int extended_p) { putpkt ("QStartNoAckMode"); getpkt (&rs->buf); - if (m_features.packet_ok (rs->buf, PACKET_QStartNoAckMode) == PACKET_OK) + if ((m_features.packet_ok (rs->buf, PACKET_QStartNoAckMode)).status () + == PACKET_OK) rs->noack_mode = 1; } @@ -5894,9 +5895,10 @@ remote_target::remote_query_supported () /* If an error occurred, warn, but do not return - just reset the buffer to empty and go on to disable features. */ - if (m_features.packet_ok (rs->buf, PACKET_qSupported) == PACKET_ERROR) + packet_result result = m_features.packet_ok (rs->buf, PACKET_qSupported); + if (result.status () == PACKET_ERROR) { - warning (_("Remote failure reply: %s"), rs->buf.data ()); + warning (_("Remote failure reply: %s"), result.err_msg ()); rs->buf[0] = 0; } } @@ -6548,7 +6550,8 @@ extended_remote_target::attach (const char *args, int from_tty) putpkt (rs->buf); getpkt (&rs->buf); - switch (m_features.packet_ok (rs->buf, PACKET_vAttach)) + packet_result result = m_features.packet_ok (rs->buf, PACKET_vAttach); + switch (result.status ()) { case PACKET_OK: if (!target_is_non_stop_p ()) @@ -6560,7 +6563,7 @@ extended_remote_target::attach (const char *args, int from_tty) else if (strcmp (rs->buf.data (), "OK") != 0) error (_("Attaching to %s failed with: %s"), target_pid_to_str (ptid_t (pid)).c_str (), - rs->buf.data ()); + result.err_msg ()); break; case PACKET_UNKNOWN: error (_("This target does not support attaching to a process")); @@ -7489,14 +7492,15 @@ remote_target::remote_interrupt_ns () putpkt (rs->buf); getpkt (&rs->buf); - switch (m_features.packet_ok (rs->buf, PACKET_vCtrlC)) + packet_result result = m_features.packet_ok (rs->buf, PACKET_vCtrlC); + switch (result.status ()) { case PACKET_OK: break; case PACKET_UNKNOWN: error (_("No support for interrupting the remote target.")); case PACKET_ERROR: - error (_("Interrupting target failed: %s"), rs->buf.data ()); + error (_("Interrupting target failed: %s"), result.err_msg ()); } } @@ -8792,7 +8796,8 @@ remote_target::fetch_register_using_p (struct regcache *regcache, buf = rs->buf.data (); - switch (m_features.packet_ok (rs->buf, PACKET_p)) + packet_result result = m_features.packet_ok (rs->buf, PACKET_p); + switch (result.status ()) { case PACKET_OK: break; @@ -8801,7 +8806,7 @@ remote_target::fetch_register_using_p (struct regcache *regcache, case PACKET_ERROR: error (_("Could not fetch register \"%s\"; remote failure reply '%s'"), gdbarch_register_name (regcache->arch (), reg->regnum), - buf); + result.err_msg ()); } /* If this register is unfetchable, tell the regcache. */ @@ -9098,13 +9103,14 @@ remote_target::store_register_using_P (const struct regcache *regcache, putpkt (rs->buf); getpkt (&rs->buf); - switch (m_features.packet_ok (rs->buf, PACKET_P)) + packet_result result = m_features.packet_ok (rs->buf, PACKET_P); + switch (result.status ()) { case PACKET_OK: return 1; case PACKET_ERROR: error (_("Could not write register \"%s\"; remote failure reply '%s'"), - gdbarch_register_name (gdbarch, reg->regnum), rs->buf.data ()); + gdbarch_register_name (gdbarch, reg->regnum), result.err_msg ()); case PACKET_UNKNOWN: return 0; default: @@ -10535,7 +10541,7 @@ remote_target::remote_vkill (int pid) putpkt (rs->buf); getpkt (&rs->buf); - switch (m_features.packet_ok (rs->buf, PACKET_vKill)) + switch ((m_features.packet_ok (rs->buf, PACKET_vKill)).status ()) { case PACKET_OK: return 0; @@ -10691,7 +10697,7 @@ remote_target::extended_remote_run (const std::string &args) putpkt (rs->buf); getpkt (&rs->buf); - switch (m_features.packet_ok (rs->buf, PACKET_vRun)) + switch ((m_features.packet_ok (rs->buf, PACKET_vRun)).status ()) { case PACKET_OK: /* We have a wait response. All is well. */ @@ -10798,11 +10804,12 @@ remote_target::extended_remote_set_inferior_cwd () putpkt (rs->buf); getpkt (&rs->buf); - if (m_features.packet_ok (rs->buf, PACKET_QSetWorkingDir) != PACKET_OK) + packet_result result = m_features.packet_ok (rs->buf, PACKET_QSetWorkingDir); + if (result.status () != PACKET_OK) error (_("\ Remote replied unexpectedly while setting the inferior's working\n\ directory: %s"), - rs->buf.data ()); + result.err_msg ()); } } @@ -10971,7 +10978,7 @@ remote_target::insert_breakpoint (struct gdbarch *gdbarch, putpkt (rs->buf); getpkt (&rs->buf); - switch (m_features.packet_ok (rs->buf, PACKET_Z0)) + switch ((m_features.packet_ok (rs->buf, PACKET_Z0)).status ()) { case PACKET_ERROR: return -1; @@ -11072,8 +11079,8 @@ remote_target::insert_watchpoint (CORE_ADDR addr, int len, putpkt (rs->buf); getpkt (&rs->buf); - switch (m_features.packet_ok (rs->buf, (to_underlying (PACKET_Z0) - + to_underlying (packet)))) + switch ((m_features.packet_ok (rs->buf, (to_underlying (PACKET_Z0) + + to_underlying (packet)))).status ()) { case PACKET_ERROR: return -1; @@ -11121,8 +11128,8 @@ remote_target::remove_watchpoint (CORE_ADDR addr, int len, putpkt (rs->buf); getpkt (&rs->buf); - switch (m_features.packet_ok (rs->buf, (to_underlying (PACKET_Z0) - + to_underlying (packet)))) + switch ((m_features.packet_ok (rs->buf, (to_underlying (PACKET_Z0) + + to_underlying (packet)))).status ()) { case PACKET_ERROR: case PACKET_UNKNOWN: @@ -11284,7 +11291,7 @@ remote_target::insert_hw_breakpoint (struct gdbarch *gdbarch, putpkt (rs->buf); getpkt (&rs->buf); - switch (m_features.packet_ok (rs->buf, PACKET_Z1)) + switch ((m_features.packet_ok (rs->buf, PACKET_Z1)).status ()) { case PACKET_ERROR: if (rs->buf[1] == '.') @@ -11331,7 +11338,7 @@ remote_target::remove_hw_breakpoint (struct gdbarch *gdbarch, putpkt (rs->buf); getpkt (&rs->buf); - switch (m_features.packet_ok (rs->buf, PACKET_Z1)) + switch ((m_features.packet_ok (rs->buf, PACKET_Z1)).status ()) { case PACKET_ERROR: case PACKET_UNKNOWN: @@ -11372,7 +11379,7 @@ remote_target::verify_memory (const gdb_byte *data, CORE_ADDR lma, ULONGEST size getpkt (&rs->buf); - status = m_features.packet_ok (rs->buf, PACKET_qCRC); + status = (m_features.packet_ok (rs->buf, PACKET_qCRC)).status (); if (status == PACKET_ERROR) return -1; else if (status == PACKET_OK) @@ -11494,7 +11501,7 @@ remote_target::remote_write_qxfer (const char *object_name, if (putpkt_binary (rs->buf.data (), i + buf_len) < 0 || getpkt (&rs->buf) < 0 - || m_features.packet_ok (rs->buf, which_packet) != PACKET_OK) + || (m_features.packet_ok (rs->buf, which_packet)).status () != PACKET_OK) return TARGET_XFER_E_IO; unpack_varlen_hex (rs->buf.data (), &n); @@ -11559,7 +11566,7 @@ remote_target::remote_read_qxfer (const char *object_name, rs->buf[0] = '\0'; packet_len = getpkt (&rs->buf); if (packet_len < 0 - || m_features.packet_ok (rs->buf, which_packet) != PACKET_OK) + || (m_features.packet_ok (rs->buf, which_packet)).status () != PACKET_OK) return TARGET_XFER_E_IO; if (rs->buf[0] != 'l' && rs->buf[0] != 'm') @@ -11864,7 +11871,8 @@ remote_target::search_memory (CORE_ADDR start_addr, ULONGEST search_space_len, if (putpkt_binary (rs->buf.data (), i + escaped_pattern_len) < 0 || getpkt (&rs->buf) < 0 - || m_features.packet_ok (rs->buf, PACKET_qSearch_memory) != PACKET_OK) + || (m_features.packet_ok (rs->buf, PACKET_qSearch_memory)).status () + != PACKET_OK) { /* The request may not have worked because the command is not supported. If so, fall back to the simple way. */ @@ -12257,7 +12265,6 @@ remote_target::get_thread_local_address (ptid_t ptid, CORE_ADDR lm, struct remote_state *rs = get_remote_state (); char *p = rs->buf.data (); char *endp = p + get_remote_packet_size (); - enum packet_status result; strcpy (p, "qGetTLSAddr:"); p += strlen (p); @@ -12270,15 +12277,15 @@ remote_target::get_thread_local_address (ptid_t ptid, CORE_ADDR lm, putpkt (rs->buf); getpkt (&rs->buf); - result = m_features.packet_ok (rs->buf, PACKET_qGetTLSAddr); - if (result == PACKET_OK) + packet_result result = m_features.packet_ok (rs->buf, PACKET_qGetTLSAddr); + if (result.status () == PACKET_OK) { ULONGEST addr; unpack_varlen_hex (rs->buf.data (), &addr); return addr; } - else if (result == PACKET_UNKNOWN) + else if (result.status () == PACKET_UNKNOWN) throw_error (TLS_GENERIC_ERROR, _("Remote target doesn't support qGetTLSAddr packet")); else @@ -12303,7 +12310,6 @@ remote_target::get_tib_address (ptid_t ptid, CORE_ADDR *addr) struct remote_state *rs = get_remote_state (); char *p = rs->buf.data (); char *endp = p + get_remote_packet_size (); - enum packet_status result; strcpy (p, "qGetTIBAddr:"); p += strlen (p); @@ -12312,8 +12318,8 @@ remote_target::get_tib_address (ptid_t ptid, CORE_ADDR *addr) putpkt (rs->buf); getpkt (&rs->buf); - result = m_features.packet_ok (rs->buf, PACKET_qGetTIBAddr); - if (result == PACKET_OK) + packet_result result = m_features.packet_ok (rs->buf, PACKET_qGetTIBAddr); + if (result.status () == PACKET_OK) { ULONGEST val; unpack_varlen_hex (rs->buf.data (), &val); @@ -12321,7 +12327,7 @@ remote_target::get_tib_address (ptid_t ptid, CORE_ADDR *addr) *addr = (CORE_ADDR) val; return true; } - else if (result == PACKET_UNKNOWN) + else if (result.status () == PACKET_UNKNOWN) error (_("Remote target doesn't support qGetTIBAddr packet")); else error (_("Remote target failed to process qGetTIBAddr request")); @@ -12580,7 +12586,7 @@ remote_target::remote_hostio_send_command (int command_bytes, int which_packet, return -1; } - switch (m_features.packet_ok (rs->buf, which_packet)) + switch ((m_features.packet_ok (rs->buf, which_packet)).status ()) { case PACKET_ERROR: *remote_errno = FILEIO_EINVAL; @@ -13868,7 +13874,6 @@ remote_target::get_trace_status (struct trace_status *ts) { /* Initialize it just to avoid a GCC false warning. */ char *p = NULL; - enum packet_status result; struct remote_state *rs = get_remote_state (); if (m_features.packet_support (PACKET_qTStatus) == PACKET_DISABLE) @@ -13894,17 +13899,17 @@ remote_target::get_trace_status (struct trace_status *ts) throw; } - result = m_features.packet_ok (p, PACKET_qTStatus); + packet_result result = m_features.packet_ok (p, PACKET_qTStatus); /* If the remote target doesn't do tracing, flag it. */ - if (result == PACKET_UNKNOWN) + if (result.status () == PACKET_UNKNOWN) return -1; /* We're working with a live target. */ ts->filename = NULL; if (*p++ != 'T') - error (_("Bogus trace status reply from target: %s"), rs->buf.data ()); + error (_("Bogus trace status reply from target: %s"), result.err_msg ()); /* Function 'parse_trace_status' sets default value of each field of 'ts' at first, so we don't have to do it here. */ @@ -14248,7 +14253,6 @@ remote_target::set_trace_buffer_size (LONGEST val) struct remote_state *rs = get_remote_state (); char *buf = rs->buf.data (); char *endbuf = buf + get_remote_packet_size (); - enum packet_status result; gdb_assert (val >= 0 || val == -1); buf += xsnprintf (buf, endbuf - buf, "QTBuffer:size:"); @@ -14263,10 +14267,10 @@ remote_target::set_trace_buffer_size (LONGEST val) putpkt (rs->buf); remote_get_noisy_reply (); - result = m_features.packet_ok (rs->buf, PACKET_QTBuffer_size); + packet_result result = m_features.packet_ok (rs->buf, PACKET_QTBuffer_size); - if (result != PACKET_OK) - warning (_("Bogus reply from target: %s"), rs->buf.data ()); + if (result.status () != PACKET_OK) + warning (_("Bogus reply from target: %s"), result.err_msg ()); } } @@ -14692,14 +14696,9 @@ remote_target::btrace_sync_conf (const btrace_config *conf) putpkt (buf); getpkt (&rs->buf); - if (m_features.packet_ok (buf, PACKET_Qbtrace_conf_bts_size) - == PACKET_ERROR) - { - if (buf[0] == 'E' && buf[1] == '.') - error (_("Failed to configure the BTS buffer size: %s"), buf + 2); - else - error (_("Failed to configure the BTS buffer size.")); - } + packet_result result = m_features.packet_ok (buf, PACKET_Qbtrace_conf_bts_size); + if (result.status () == PACKET_ERROR) + error (_("Failed to configure the BTS buffer size: %s"), result.err_msg ()); rs->btrace_config.bts.size = conf->bts.size; } @@ -14715,14 +14714,9 @@ remote_target::btrace_sync_conf (const btrace_config *conf) putpkt (buf); getpkt (&rs->buf); - if (m_features.packet_ok (buf, PACKET_Qbtrace_conf_pt_size) - == PACKET_ERROR) - { - if (buf[0] == 'E' && buf[1] == '.') - error (_("Failed to configure the trace buffer size: %s"), buf + 2); - else - error (_("Failed to configure the trace buffer size.")); - } + packet_result result = m_features.packet_ok (buf, PACKET_Qbtrace_conf_pt_size); + if (result.status () == PACKET_ERROR) + error (_("Failed to configure the trace buffer size: %s"), result.err_msg ()); rs->btrace_config.pt.size = conf->pt.size; } @@ -14837,15 +14831,10 @@ remote_target::enable_btrace (thread_info *tp, putpkt (rs->buf); getpkt (&rs->buf); - if (m_features.packet_ok (rs->buf, which_packet) == PACKET_ERROR) - { - if (rs->buf[0] == 'E' && rs->buf[1] == '.') - error (_("Could not enable branch tracing for %s: %s"), - target_pid_to_str (ptid).c_str (), &rs->buf[2]); - else - error (_("Could not enable branch tracing for %s."), - target_pid_to_str (ptid).c_str ()); - } + packet_result result = m_features.packet_ok (rs->buf, which_packet); + if (result.status () == PACKET_ERROR) + error (_("Could not enable branch tracing for %s: %s"), + target_pid_to_str (ptid).c_str (), result.err_msg ()); btrace_target_info *tinfo = new btrace_target_info { ptid }; @@ -14883,15 +14872,10 @@ remote_target::disable_btrace (struct btrace_target_info *tinfo) putpkt (rs->buf); getpkt (&rs->buf); - if (m_features.packet_ok (rs->buf, PACKET_Qbtrace_off) == PACKET_ERROR) - { - if (rs->buf[0] == 'E' && rs->buf[1] == '.') + packet_result result = m_features.packet_ok (rs->buf, PACKET_Qbtrace_off); + if (result.status () == PACKET_ERROR) error (_("Could not disable branch tracing for %s: %s"), - target_pid_to_str (tinfo->ptid).c_str (), &rs->buf[2]); - else - error (_("Could not disable branch tracing for %s."), - target_pid_to_str (tinfo->ptid).c_str ()); - } + target_pid_to_str (tinfo->ptid).c_str (), result.err_msg ()); delete tinfo; } @@ -15156,7 +15140,8 @@ remote_target::thread_events (int enable) putpkt (rs->buf); getpkt (&rs->buf); - switch (m_features.packet_ok (rs->buf, PACKET_QThreadEvents)) + packet_result result = m_features.packet_ok (rs->buf, PACKET_QThreadEvents); + switch (result.status ()) { case PACKET_OK: if (strcmp (rs->buf.data (), "OK") != 0) @@ -15164,7 +15149,7 @@ remote_target::thread_events (int enable) rs->last_thread_events = enable; break; case PACKET_ERROR: - warning (_("Remote failure reply: %s"), rs->buf.data ()); + warning (_("Remote failure reply: %s"), result.err_msg ()); break; case PACKET_UNKNOWN: break; @@ -15211,14 +15196,15 @@ remote_target::commit_requested_thread_options () putpkt (rs->buf); getpkt (&rs->buf, 0); - switch (m_features.packet_ok (rs->buf, PACKET_QThreadOptions)) + packet_result result = m_features.packet_ok (rs->buf, PACKET_QThreadOptions); + switch (result.status ()) { case PACKET_OK: if (strcmp (rs->buf.data (), "OK") != 0) error (_("Remote refused setting thread options: %s"), rs->buf.data ()); break; case PACKET_ERROR: - error (_("Remote failure reply: %s"), rs->buf.data ()); + error (_("Remote failure reply: %s"), result.err_msg ()); case PACKET_UNKNOWN: gdb_assert_not_reached ("PACKET_UNKNOWN"); break;