[binutils-gdb] aarch64: Fix .unreq of predefined aliases
Alice Carlotti via Binutils-cvs <[email protected]> Fri, 10 Jul 2026 15:18:04 +0000 (GMT)
| Newsgroups | gmane.comp.gnu.binutils.cvs |
|---|---|
| Message-ID | <[email protected]> |
https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=535fe82b83426e98599f37f3be889223768b38a9 commit 535fe82b83426e98599f37f3be889223768b38a9 Author: Alice Carlotti <[email protected]> Date: Wed Feb 18 15:03:41 2026 +0000 aarch64: Fix .unreq of predefined aliases Attempting to free a static reg_entry is invalid, so use insert_reg_alias to create a dynamic copy of the content. Diff: --- gas/config/tc-aarch64.c | 15 ++++++++++++--- gas/testsuite/gas/aarch64/register_aliases.s | 10 ++++++++++ 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/gas/config/tc-aarch64.c b/gas/config/tc-aarch64.c index 373b97b1534..dddaa615ab8 100644 --- a/gas/config/tc-aarch64.c +++ b/gas/config/tc-aarch64.c @@ -1595,7 +1595,7 @@ parse_simd_vector_with_bit_index (char **ccp, struct vector_type_el *typeinfo) /* Directives: register aliases. */ static reg_entry * -insert_reg_alias (char *str, int number, aarch64_reg_type type) +insert_reg_alias (const char *str, int number, aarch64_reg_type type) { reg_entry *new; const char *name; @@ -10699,8 +10699,17 @@ md_begin (void) aarch64_sys_regs_sr + i); for (i = 0; i < ARRAY_SIZE (reg_names); i++) - checked_hash_insert (aarch64_reg_hsh, reg_names[i].name, - reg_names + i); + { + if (reg_names[i].builtin) + checked_hash_insert (aarch64_reg_hsh, reg_names[i].name, + reg_names + i); + else + /* Aliases need to be safely removable, so create a copy of + the reg_entry data. */ + insert_reg_alias (reg_names[i].name, reg_names[i].number, + reg_names[i].type); + } + for (i = 0; i < ARRAY_SIZE (nzcv_names); i++) checked_hash_insert (aarch64_nzcv_hsh, nzcv_names[i].template, diff --git a/gas/testsuite/gas/aarch64/register_aliases.s b/gas/testsuite/gas/aarch64/register_aliases.s index 856be5699ce..c9aaea79f1b 100644 --- a/gas/testsuite/gas/aarch64/register_aliases.s +++ b/gas/testsuite/gas/aarch64/register_aliases.s @@ -10,3 +10,13 @@ str IP0, [fp] ldr IP1, [fp] str zero, [x0] + + # Removal of user-defined aliases. + foo .req x13 + .unreq foo + + # Removing builtin register aliases should not segfault. + .unreq lr + .unreq fp + .unreq ip0 + .unreq ip1