refactor: Adjust expedited registers dynamically

Instead of using static arrays, build the list of expedited registers
dynamically using a std::vector.

This refactor shouldn't cause any user-visible changes.

Regression-tested for aarch64-linux Ubuntu 22.04/20.04.

Reviewed-by: Thiago Jung Bauermann <thiago.bauermann@linaro.org>
This commit is contained in:
Luis Machado 2023-02-09 10:55:26 +00:00
parent 6a65998a8a
commit 223dbdd276

View File

@ -30,6 +30,8 @@
/* 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 *
@ -44,15 +46,20 @@ aarch64_linux_read_description (const aarch64_features &features)
if (tdesc == NULL)
{
tdesc = aarch64_create_target_description (features);
expedited_registers.clear ();
static const char *expedite_regs_aarch64[] = { "x29", "sp", "pc", NULL };
static const char *expedite_regs_aarch64_sve[] = { "x29", "sp", "pc",
"vg", NULL };
/* 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)
init_target_desc (tdesc, expedite_regs_aarch64);
else
init_target_desc (tdesc, expedite_regs_aarch64_sve);
if (features.vq > 0)
expedited_registers.push_back ("vg");
expedited_registers.push_back (nullptr);
init_target_desc (tdesc, (const char **) expedited_registers.data ());
tdesc_aarch64_map[features] = tdesc;
}