diff options
author | Alan Modra <amodra@gmail.com> | 2023-03-02 07:34:40 +1030 |
---|---|---|
committer | Alan Modra <amodra@gmail.com> | 2023-03-02 07:55:37 +1030 |
commit | 40e7bdbddc8ba144ae90641be58d6ac939ba096b (patch) | |
tree | 71eca4a86ea9e6ef614ec76145fc02a3b62c04df /gas | |
parent | 9d834fcaa141705738d3322a753358f845dd8bbc (diff) | |
download | gdb-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.c | 15 |
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); |