mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2025-01-24 12:35:55 +08:00
b816042e88
Enable SME support in gdbserver by adjusting the usual fields. There is not much to this patch because the code is either in gdb or it is shared between gdbserver and gdb. One exception is the bump to gdbserver's PBUFSIZ from 18432 to 131104. Since the ZA register can be quite big (256 * 256 bytes), the g/G remote packet will also become quite big From gdbserver/tdesc.cc:init_target_desc, I estimated the new size should be at least (2 * 256 * 256 + 32), which yields 131104. It is also unlikely we will find a process starting up with SVL set to 256. Ideally we'd adjust the packet size dynamically based on what we need, but for now this should do. Please note we have the same limitation for SME that we have for SVE, and that is the fact gdbserver cannot communicate vector length changes to gdb via the remote protocol. Thiago is working on this improvement, which hopefully will be able to be adapted to SME in an easy way. Co-Authored-By: Ezra Sitorus <ezra.sitorus@arm.com> Reviewed-by: Thiago Jung Bauermann <thiago.bauermann@linaro.org>
76 lines
2.3 KiB
C++
76 lines
2.3 KiB
C++
/* GNU/Linux/aarch64 specific target description, for the remote server
|
|
for GDB.
|
|
Copyright (C) 2017-2023 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/>. */
|
|
|
|
#include "server.h"
|
|
|
|
#include "linux-aarch64-tdesc.h"
|
|
|
|
#include "tdesc.h"
|
|
#include "arch/aarch64.h"
|
|
#include "linux-aarch32-low.h"
|
|
#include <inttypes.h>
|
|
#include <unordered_map>
|
|
|
|
/* All possible aarch64 target descriptors. */
|
|
static std::unordered_map<aarch64_features, target_desc *> tdesc_aarch64_map;
|
|
|
|
static std::vector<const char *> expedited_registers;
|
|
|
|
/* Create the aarch64 target description. */
|
|
|
|
const target_desc *
|
|
aarch64_linux_read_description (const aarch64_features &features)
|
|
{
|
|
if (features.vq > AARCH64_MAX_SVE_VQ)
|
|
error (_("VQ is %" PRIu64 ", maximum supported value is %d"), features.vq,
|
|
AARCH64_MAX_SVE_VQ);
|
|
|
|
if (features.svq > AARCH64_MAX_SVE_VQ)
|
|
error (_("Streaming svq is %" PRIu8 ", maximum supported value is %d"),
|
|
features.svq,
|
|
AARCH64_MAX_SVE_VQ);
|
|
|
|
struct target_desc *tdesc = tdesc_aarch64_map[features];
|
|
|
|
if (tdesc == NULL)
|
|
{
|
|
tdesc = aarch64_create_target_description (features);
|
|
expedited_registers.clear ();
|
|
|
|
/* Configure the expedited registers. By default we include x29, sp and
|
|
pc. */
|
|
expedited_registers.push_back ("x29");
|
|
expedited_registers.push_back ("sp");
|
|
expedited_registers.push_back ("pc");
|
|
|
|
if (features.vq > 0)
|
|
expedited_registers.push_back ("vg");
|
|
if (features.svq > 0)
|
|
expedited_registers.push_back ("svg");
|
|
|
|
expedited_registers.push_back (nullptr);
|
|
|
|
init_target_desc (tdesc, (const char **) expedited_registers.data ());
|
|
|
|
tdesc_aarch64_map[features] = tdesc;
|
|
}
|
|
|
|
return tdesc;
|
|
}
|