From: Alan Modra Date: Wed, 1 Mar 2023 21:04:40 +0000 (+1030) Subject: Using .mri in assembly X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=40e7bdbddc8ba144ae90641be58d6ac939ba096b;p=binutils-gdb.git 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. --- diff --git a/gas/macro.c b/gas/macro.c index afcd48b3a88..74a1317cb11 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);