aboutsummaryrefslogtreecommitdiff
path: root/gas
diff options
context:
space:
mode:
authorAlan Modra <amodra@gmail.com>2023-03-02 07:34:40 +1030
committerAlan Modra <amodra@gmail.com>2023-03-02 07:55:37 +1030
commit40e7bdbddc8ba144ae90641be58d6ac939ba096b (patch)
tree71eca4a86ea9e6ef614ec76145fc02a3b62c04df /gas
parent9d834fcaa141705738d3322a753358f845dd8bbc (diff)
downloadgdb-40e7bdbddc8ba144ae90641be58d6ac939ba096b.zip
gdb-40e7bdbddc8ba144ae90641be58d6ac939ba096b.tar.gz
gdb-40e7bdbddc8ba144ae90641be58d6ac939ba096b.tar.bz2
Using .mri in assembly
Changing mri mode between macro definition and use isn't good. This .macro x .endm .mri 1 x leads to a segfault. Fixed with the following patch, but I suppose what should really happen is that macros be marked as being mri mode when defined, and that determine whether the magic NARG parameter be supplied at expansion. Nobody has complained about this in 30 years so I'm not inclined to change gas behaviour to that extent. * macro.c (macro_expand): Don't segfault in mri mode if NARG formal isn't found.
Diffstat (limited to 'gas')
-rw-r--r--gas/macro.c15
1 files changed, 8 insertions, 7 deletions
diff --git a/gas/macro.c b/gas/macro.c
index afcd48b..74a1317 100644
--- a/gas/macro.c
+++ b/gas/macro.c
@@ -1221,13 +1221,14 @@ macro_expand (size_t idx, sb *in, macro_entry *m, sb *out)
if (macro_mri)
{
- char buffer[20];
-
- sb_reset (&t);
- sb_add_string (&t, macro_strip_at ? "$NARG" : "NARG");
- ptr = str_hash_find (m->formal_hash, sb_terminate (&t));
- sprintf (buffer, "%d", narg);
- sb_add_string (&ptr->actual, buffer);
+ ptr = str_hash_find (m->formal_hash,
+ macro_strip_at ? "$NARG" : "NARG");
+ if (ptr)
+ {
+ char buffer[20];
+ sprintf (buffer, "%d", narg);
+ sb_add_string (&ptr->actual, buffer);
+ }
}
err = macro_expand_body (&m->sub, out, m->formals, m->formal_hash, m);