From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-oi1-x22a.google.com (mail-oi1-x22a.google.com [IPv6:2607:f8b0:4864:20::22a]) by sourceware.org (Postfix) with ESMTPS id 233E23858D35 for ; Mon, 30 Jan 2023 04:45:38 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 233E23858D35 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=linaro.org Received: by mail-oi1-x22a.google.com with SMTP id bj22so22223oib.11 for ; Sun, 29 Jan 2023 20:45:38 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=PnszUMsNk0Y5iW3uLk3mdJ+NBoVBbjgNcnyD8HvUQU8=; b=oFWisYUor+Tr+BsSHcTJIAZ0b512qRq40lBZjljLyaML6NJn8Lea+NG9Lsv1aJppZF IG4d7b7xLHFbZnJNp51gIkHLNh1W0nA73wRWfV0d37A8piIKPOHGZY1CxmhqRr1i/gjd Pbbs9A0h8Vz8XT5xQRhK0dAgb6gsM1MumOTr6nHiPesnfXZGBlCuALfH2XWK2WMtadVM HAbb791ccwuUe275+WpNEvadrLvJUTMNcNLKRk/oU0komyc49lmUWnS2u4ne9hYj/ZEk nUpUwVCfSwrJqVzkwi929LfVt+gDy2dbZSwvlC+13geuzgLoJqCfmoRRYKTEmZm4LwXG jkng== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=PnszUMsNk0Y5iW3uLk3mdJ+NBoVBbjgNcnyD8HvUQU8=; b=AHNaMSZs4Bx1lt9R1XgXikLN3r0xpgQUbq0KJEkDjiUMrBlTsTp4x71QAaAsy84JFh I5S6in88Icz5ybgCLsCjdEdgHt0fhwUcRSaaPsxsrx0F/1nfpjINKmUBh6XEKii8ZkuX XFctkLOpSdvZT4gXQrfUECRXw12/TcrnoFdEuhdJU7Kz81So3iX4b08o0lsQK8usZzfw pvSm317dp7jGCoapIud127MZ7vOoh086tD30mDETDji7vn7o+ySnpjiAQF0ICaJe+Bc4 Z38sKPtCrMRiIDlL9Mt3uAEChX118SVA1oAEoBP5ejsqei8XMunDhWj3py8Wp/8J8CZC TOJw== X-Gm-Message-State: AO0yUKUOe1ZNgRv8dN0YMLD1Wuc7A0qYv32erCRbwVp/dNwv3hUucyV1 K6Bmi9AA+appC50EzkR0RPFmDn/nVG4viOew X-Google-Smtp-Source: AK7set/kODab+YA9G+iN6tloGf/wPn9xHdoejeUZjUtdYxR/MCpMcobv3TbGtlejZSCg4njmCELuiQ== X-Received: by 2002:a05:6808:9:b0:378:218e:fddb with SMTP id u9-20020a056808000900b00378218efddbmr2463699oic.43.1675053937060; Sun, 29 Jan 2023 20:45:37 -0800 (PST) Received: from localhost ([2804:14d:7e39:8470:df99:10bd:7dca:b2e9]) by smtp.gmail.com with ESMTPSA id r131-20020acada89000000b0035aa617156bsm4337856oig.17.2023.01.29.20.45.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 29 Jan 2023 20:45:36 -0800 (PST) From: Thiago Jung Bauermann To: gdb-patches@sourceware.org Cc: Thiago Jung Bauermann Subject: [PATCH v3 0/8] gdbserver improvements for AArch64 SVE support Date: Mon, 30 Jan 2023 04:45:10 +0000 Message-Id: <20230130044518.3322695-1-thiago.bauermann@linaro.org> X-Mailer: git-send-email 2.39.1 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-5.1 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS,TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: Hello, This is version 3 of the patch series adding support to gdbserver for inferiors that change the SVE vector length at runtime. This is already supported by GDB, but not by gdbserver. Version 2 was posted here: https://inbox.sourceware.org/gdb-patches/20221126020452.1686509-1-thiago.bauermann@linaro.org/ This version incorporates the review comments from v2 (thanks!). The biggest change is that it implements Simon's idea¹: > If it's the case, that we need to extend the RSP to allow fetching > per-thread tdesc, here's the idea I had in mind for a while, to avoid > adding too much overhead. Stop replies and the qXfer:threads:read reply > could include a per-thread tdesc identifier. That tdesc identifier > would be something short, either an incrementing number, or some kind of > hash of the tdesc. It would be something opaque chosen by the stub. A > new packet would be introduced to allow GDB to request the XML given > that ID. On the GDB side, GDB would request the XML when encountering a > tdesc ID it doesn't know about, and then cache the result. The only difference from the above in this series is that instead of creating a new packet to allow GDB to request the XML given the ID, I'm extending the qXfer:features:read request: GDB can send "target-id-%u.xml" as the annex, where %u is the target description ID. Please let me know if you think a separate packet would be better. The remote protocol changes are documented in patch 5. I had to drop the Reviewed-by tags from some patches because they have some significant changes from the version that was reviewed. There's also a new testcase exercising the case of an inferior's thread changing its SVE vector length. The previous version of this series failed the testcase, but this one passes it. With this series applied, gdb.arch/aarch64-sve.exp passes all tests on extended-remote aarch64-linux. Without them, it fails tests after the testcase changes the vector length. Tested on native and extended-remote aarch64-linux, x86_64-linux and armv7l-linux-gnueabihf (the last one on QEMU TCG). ¹ https://inbox.sourceware.org/gdb-patches/559069a3-f3ce-2059-bf4a-44add43979f7@simark.ca/ Changes since v2: - Patch “gdbserver: Add assert in find_register_by_number” - Rewritten to follow Simon's suggestion of putting the assert in another function. - Patch “gdbserver: Add PID parameter to linux_get_auxv and linux_get_hwcap” - As suggested by Simon, directly access thread_info::id rather than use pid_of. - Also as suggested by Simon, updated doc comment of process_stratum_target::read_auxv. - Patch “gdbserver/linux-aarch64: Factor out function to get aarch64_features” - As suggested by Simon, directly access thread_info::id rather than use lwpid_of. - Also as suggested by Simon, added doc comment for aarch64_get_arch_features. - Patch “gdbserver/linux-aarch64: When thread stops, update its target description” - As suggested by Luis, added doc comments to thread_info::tdesc and arch_process_info::has_sve. - As suggested by Simon, renamed arch_update_tdesc to get_thread_tdesc, and return a target_desc pointer (or nullptr) instead of one wrapped in gdb::optional. The code was changed a bit as well. - As suggested by Luis, expanded doc comment of get_thread_tdesc. - As suggested by Luis, abstracted away trying to fetch a tdesc from a thread and then from a process to a new function "get_thread_target_desc". - Export free_register_cache_thread in gdbserver/regcache.h. - Use free_register_cache_thread in linux_process_target::filter_event to implement Simon's suggestion of only freeing the regcache for the thread with a different tdesc. - “gdb/aarch64: Factor out most of the thread_architecture method” - Dropped this patch. It's not needed anymore. - “gdbserver: Transmit target description ID in thread list and stop reply” - New patch. - “gdb/remote: Parse and use tdesc field in stop reply and threads list XML” - New patch. - “gdb/aarch64: Detect vector length changes when debugging remotely” - As suggested by Luis, clarified in the patch description that this patch improves debugging programs remotely. Also, reworded description somewhat. - As suggested by Luis, changed VL references in comments to VG. Also reworded a bit the description of the update_architecture gdbarch method. - Changed the update_architecture gdbarch method (and consequently also aarch64_update_architecture) to take a target description instead of a vector of cached_reg_t. - Changed remote_target::update_thread_list to get the thread target description from the remote target. - Changed remote_target::process_stop_reply to get the thread target description from the remote target. - Renamed remote_thread_info::expedited_arch to arch. - Changed code of remote_target::thread_architecture to be a little bit clearer, and added doc comment. - “gdb/testsuite: Add test to exercise multi-threaded AArch64 SVE inferiors” - New patch. Thiago Jung Bauermann (8): gdbserver: Add assert in find_register_by_number gdbserver: Add PID parameter to linux_get_auxv and linux_get_hwcap gdbserver/linux-aarch64: Factor out function to get aarch64_features gdbserver/linux-aarch64: When thread stops, update its target description gdbserver: Transmit target description ID in thread list and stop reply gdb/remote: Parse tdesc field in stop reply and threads list XML gdb/aarch64: Detect vector length changes when debugging remotely gdb/testsuite: Add test to exercise multi-threaded AArch64 SVE inferiors gdb/aarch64-tdep.c | 20 +++ gdb/arch-utils.c | 8 + gdb/arch-utils.h | 4 + gdb/doc/gdb.texinfo | 27 ++- gdb/features/threads.dtd | 1 + gdb/gdbarch-components.py | 15 ++ gdb/gdbarch-gen.h | 10 ++ gdb/gdbarch.c | 22 +++ gdb/remote.c | 169 +++++++++++++++++- gdb/testsuite/gdb.arch/aarch64-sve-threads.c | 125 +++++++++++++ .../gdb.arch/aarch64-sve-threads.exp | 70 ++++++++ gdb/xml-tdesc.c | 27 ++- gdb/xml-tdesc.h | 6 + gdbserver/gdbthread.h | 4 + gdbserver/linux-aarch64-low.cc | 68 +++++-- gdbserver/linux-arm-low.cc | 2 +- gdbserver/linux-low.cc | 35 +++- gdbserver/linux-low.h | 15 +- gdbserver/linux-ppc-low.cc | 6 +- gdbserver/linux-s390-low.cc | 2 +- gdbserver/netbsd-low.cc | 4 +- gdbserver/netbsd-low.h | 2 +- gdbserver/regcache.cc | 14 +- gdbserver/regcache.h | 4 + gdbserver/remote-utils.cc | 57 ++++++ gdbserver/remote-utils.h | 9 + gdbserver/server.cc | 20 ++- gdbserver/server.h | 4 + gdbserver/target.cc | 4 +- gdbserver/target.h | 4 +- gdbserver/tdesc.cc | 13 +- gdbserver/tdesc.h | 5 + 32 files changed, 717 insertions(+), 59 deletions(-) create mode 100644 gdb/testsuite/gdb.arch/aarch64-sve-threads.c create mode 100644 gdb/testsuite/gdb.arch/aarch64-sve-threads.exp base-commit: 6c76a6beade05f8b2ca93e939cf73da2917d379b