From: "Sam James" <sam@gentoo.org>
To: gentoo-commits@lists.gentoo.org
Subject: [gentoo-commits] proj/toolchain/binutils-patches:master commit in: 9999/
Date: Thu, 02 Jan 2025 13:48:41 +0000 (UTC) [thread overview]
Message-ID: <1735825692.58f7f7f524284de1cbbacdc6403021b1d33a720b.sam@gentoo> (raw)
commit: 58f7f7f524284de1cbbacdc6403021b1d33a720b
Author: Sam James <sam <AT> gentoo <DOT> org>
AuthorDate: Thu Jan 2 13:48:12 2025 +0000
Commit: Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Thu Jan 2 13:48:12 2025 +0000
URL: https://gitweb.gentoo.org/proj/toolchain/binutils-patches.git/commit/?id=58f7f7f5
9999: drop macro reverts
H.J. landed it upstream now.
Signed-off-by: Sam James <sam <AT> gentoo.org>
9999/0006-Revert-PR-32391-memory-leak.patch | 28 -
...7-Revert-macro.c-871-heap-buffer-overflow.patch | 38 -
9999/0008-Revert-PR-32391-testcase.patch | 185 -----
...Fix-error-macro-may-be-used-uninitialized.patch | 39 -
...the-handling-or-arguments-and-macro-pseud.patch | 900 ---------------------
5 files changed, 1190 deletions(-)
diff --git a/9999/0006-Revert-PR-32391-memory-leak.patch b/9999/0006-Revert-PR-32391-memory-leak.patch
deleted file mode 100644
index a20c54d..0000000
--- a/9999/0006-Revert-PR-32391-memory-leak.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-From 4bed21d47f9d838dc6b55ce026989ede4eacc789 Mon Sep 17 00:00:00 2001
-Message-ID: <4bed21d47f9d838dc6b55ce026989ede4eacc789.1735740264.git.sam@gentoo.org>
-From: Sam James <sam@gentoo.org>
-Date: Wed, 1 Jan 2025 14:03:43 +0000
-Subject: [PATCH 06/10] Revert "PR 32391 memory leak"
-
-This reverts commit 599739cc1c5d70ac958583130b4b5413aa101d8e.
----
- gas/macro.c | 1 -
- 1 file changed, 1 deletion(-)
-
-diff --git a/gas/macro.c b/gas/macro.c
-index 9eefc8360b1..9670b38c152 100644
---- a/gas/macro.c
-+++ b/gas/macro.c
-@@ -878,7 +878,6 @@ sub_actual (size_t start, sb *in, sb *t, struct htab *formal_hash,
- (void) macro_expand_body (add, &newadd, NULL, NULL,
- orig_macro, orig_macro->count);
- sb_add_sb (out, &newadd);
-- sb_kill (&newadd);
- }
- else
- {
-
-base-commit: 94e2b2a770fc49e42c9baec80f4fb88f63391a4e
---
-2.47.1
-
diff --git a/9999/0007-Revert-macro.c-871-heap-buffer-overflow.patch b/9999/0007-Revert-macro.c-871-heap-buffer-overflow.patch
deleted file mode 100644
index b461443..0000000
--- a/9999/0007-Revert-macro.c-871-heap-buffer-overflow.patch
+++ /dev/null
@@ -1,38 +0,0 @@
-From 7daa5da3eab39e733f40eccbf4f6cd2078e3335e Mon Sep 17 00:00:00 2001
-Message-ID: <7daa5da3eab39e733f40eccbf4f6cd2078e3335e.1735740264.git.sam@gentoo.org>
-In-Reply-To: <4bed21d47f9d838dc6b55ce026989ede4eacc789.1735740264.git.sam@gentoo.org>
-References: <4bed21d47f9d838dc6b55ce026989ede4eacc789.1735740264.git.sam@gentoo.org>
-From: Sam James <sam@gentoo.org>
-Date: Wed, 1 Jan 2025 14:03:44 +0000
-Subject: [PATCH 07/10] Revert "macro.c:871 heap-buffer-overflow"
-
-This reverts commit 6d9b7667974372357fed1f02c54a805f8c21dcde.
----
- gas/macro.c | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/gas/macro.c b/gas/macro.c
-index 9670b38c152..5fa2011ab7a 100644
---- a/gas/macro.c
-+++ b/gas/macro.c
-@@ -868,7 +868,7 @@ sub_actual (size_t start, sb *in, sb *t, struct htab *formal_hash,
- /* The parent's FORMALs might contain parameters that need further
- substitution. See gas/testsuite/gas/arm/macro-vld1.s for an
- example of this. */
-- if (memchr (add->ptr, '\\', add->len))
-+ if (strchr (add->ptr, '\\'))
- {
- sb newadd;
-
-@@ -1485,7 +1485,7 @@ delete_macro (const char *name)
- }
- }
-
-- if (j < 0)
-+ if (macro == NULL)
- as_warn (_("Attempt to purge non-existing macro `%s'"), copy);
-
- free (copy);
---
-2.47.1
-
diff --git a/9999/0008-Revert-PR-32391-testcase.patch b/9999/0008-Revert-PR-32391-testcase.patch
deleted file mode 100644
index 4376e58..0000000
--- a/9999/0008-Revert-PR-32391-testcase.patch
+++ /dev/null
@@ -1,185 +0,0 @@
-From da631c6ce21783acebd2dc44b834fd17c84a0381 Mon Sep 17 00:00:00 2001
-Message-ID: <da631c6ce21783acebd2dc44b834fd17c84a0381.1735740264.git.sam@gentoo.org>
-In-Reply-To: <4bed21d47f9d838dc6b55ce026989ede4eacc789.1735740264.git.sam@gentoo.org>
-References: <4bed21d47f9d838dc6b55ce026989ede4eacc789.1735740264.git.sam@gentoo.org>
-From: Sam James <sam@gentoo.org>
-Date: Wed, 1 Jan 2025 14:03:45 +0000
-Subject: [PATCH 08/10] Revert "PR 32391 testcase"
-
-This reverts commit c8fcfa9aad211dfd8296ae6e978a356797936c61.
----
- gas/testsuite/gas/macros/nesting.s | 120 ++++++++++++++---------------
- 1 file changed, 60 insertions(+), 60 deletions(-)
-
-diff --git a/gas/testsuite/gas/macros/nesting.s b/gas/testsuite/gas/macros/nesting.s
-index 9746ca183ef..438d5af8d00 100644
---- a/gas/testsuite/gas/macros/nesting.s
-+++ b/gas/testsuite/gas/macros/nesting.s
-@@ -1,104 +1,104 @@
-- .text
-+
-+ .text
- /* PR 32391: Automatic counters inside macros should increment when nested
-- macros finish execution. */
-- .macro o1
-- .global before_at_\@
-+ macros finish execution. */
-+.macro o1
-+.global before_at_\@
- before_at_\@:
-- .global before_plus_\+
-+.global before_plus_\+
- before_plus_\+:
-
-- .macro i1
-- .global inside_at_\@
-+ .macro i1
-+.global inside_at_\@
- inside_at_\@:
-- .global inside_plus_\+
-+.global inside_plus_\+
- inside_plus_\+:
-- .endm
-+ .endm
-
-- i1
-- i1
-+ i1
-+ i1
-
-- .global after_at_\@
-+.global after_at_\@
- after_at_\@:
-- .global after_plus_\+
-+.global after_plus_\+
- after_plus_\+:
-
-- .endm
-+.endm
-
- /* Invoking o1 should produce these symbols in this order:
-
-- before_at_0
-- before_plus_0
-- inside_at_1
-- inside_plus_0
-- inside_at_2
-- inside_plus_1
-- after_at_0
-- after_plus_0 */
-- o1
--
-+ before_at_0
-+ before_plus_0
-+ inside_at_1
-+ inside_plus_0
-+ inside_at_2
-+ inside_plus_1
-+ after_at_0
-+ after_plus_0 */
-+o1
-+
- /* A second invocation of o1 should not produce any errors about
-- symbols or macros being redefined. */
-- o1
--
-+ symbols or macros being redefined. */
-+o1
-+
- /* This definition should not collide with the definition inside o1. */
-- .macro i1
-- .global other_inner_\@
-+.macro i1
-+.global other_inner_\@
- other_inner_\@:
-- .endm
-+.endm
-
--/* And invoking it should invoke the second defintion of i1, not the first. */
-- i1
--
-- .macro o2
-- .global _m\@_
-+/* And invoking it should invoke the second defintion of i1, not the first. */
-+i1
-+
-+.macro o2
-+.global _m\@_
- _m\@_:
-- .macro i2
-- .global _m\@_
-+.macro i2
-+.global _m\@_
- _m\@_:
-- .endm
-- i2
-- .endm
-+.endm
-+i2
-+.endm
-
- /* This should not generate conflicting symbols because the assembler
- inserts the contents of o2 into the input buffer as pure text (ie
- without evaluating i2). The first use of \@ is evaluated at this
- time, creating _m4_. But the second use is not evaluated because
- it is inside a .macro definition.
--
-+
- This finishes the evaluation of o2, so the \@ counter is incremented.
--
-+
- Next the input buffer is re-evaluated and the i2 macro definition
- and invocation are encounterd. The text from i2 are inserted into
- the input buffer and at this point the second use of \@ is evaluated
- resulting in the creation of a symbol called _m5_. */
-- o2
-+o2
-
- /* Macro arguments should be independent of nesting. */
-- .macro O3 arg
-- .global o3_\arg
-+.macro O3 arg
-+.global o3_\arg
- o3_\arg:
-
-- .macro I3 arg
-- .global i3_\arg
-+ .macro I3 arg
-+.global i3_\arg
- i3_\arg:
-- .endm
-+ .endm
-
-- i3 bar /* Macro names are case insensitive. */
-- .endm
-+ i3 bar /* Macro names are case insensitive. */
-+.endm
-
-- o3 foo /* Should produce two labels: o3_foo and i3_bar. */
-+o3 foo /* Should produce two labels: o3_foo and i3_bar. */
-
- /* Nested macros can access the arguments of their parents.
- In addition their arguments can be substituted into the arguments
- that are substited from their parents: */
-- .macro OUTER arg1, arg2, arg3:vararg
-- .macro INNER arg4 arg2
-+.macro OUTER arg1, arg2, arg3:vararg
-+ .macro INNER arg4 arg2
- .dc.a \arg2
-- .dc.a \arg3
-- .endm
-- INNER \arg1 bert
-- .dc.a \arg2
-- .endm
-+ .dc.a \arg3
-+ .endm
-+ INNER \arg1 bert
-+ .dc.a \arg2
-+.endm
-
--/* This produces references to "jim", "bert" and "harryfred". */
-- OUTER fred, jim, harry\arg4
-+OUTER fred, jim, harry\arg4 /* This produces references to "jim", "bert" and "harryfred". */
---
-2.47.1
-
diff --git a/9999/0009-Revert-Fix-error-macro-may-be-used-uninitialized.patch b/9999/0009-Revert-Fix-error-macro-may-be-used-uninitialized.patch
deleted file mode 100644
index dd6ff9a..0000000
--- a/9999/0009-Revert-Fix-error-macro-may-be-used-uninitialized.patch
+++ /dev/null
@@ -1,39 +0,0 @@
-From 44100045e8d1df5df3578d60206df94498bcd236 Mon Sep 17 00:00:00 2001
-Message-ID: <44100045e8d1df5df3578d60206df94498bcd236.1735740264.git.sam@gentoo.org>
-In-Reply-To: <4bed21d47f9d838dc6b55ce026989ede4eacc789.1735740264.git.sam@gentoo.org>
-References: <4bed21d47f9d838dc6b55ce026989ede4eacc789.1735740264.git.sam@gentoo.org>
-From: Sam James <sam@gentoo.org>
-Date: Wed, 1 Jan 2025 14:03:46 +0000
-Subject: [PATCH 09/10] Revert "Fix error: macro may be used uninitialized"
-
-This reverts commit f404dc565a4ccfe6922b45cf5526c319aedf75d6.
----
- gas/macro.c | 5 +++--
- 1 file changed, 3 insertions(+), 2 deletions(-)
-
-diff --git a/gas/macro.c b/gas/macro.c
-index 5fa2011ab7a..c1b43e76a61 100644
---- a/gas/macro.c
-+++ b/gas/macro.c
-@@ -1411,6 +1411,7 @@ check_macro (const char *line, sb *expand,
- {
- const char *s;
- char *copy, *cls;
-+ macro_entry *macro;
- sb line_sb;
-
- if (! macros_defined)
-@@ -1430,8 +1431,8 @@ check_macro (const char *line, sb *expand,
- for (cls = copy; *cls != '\0'; cls ++)
- *cls = TOLOWER (*cls);
-
-- macro_entry *macro = NULL;
-- for (int i = macro_nesting_depth; i >= 0; i--)
-+ int i;
-+ for (i = macro_nesting_depth; i >= 0; i--)
- {
- macro = str_hash_find (macro_hash[i], copy);
- if (macro != NULL)
---
-2.47.1
-
diff --git a/9999/0010-Revert-Fix-the-handling-or-arguments-and-macro-pseud.patch b/9999/0010-Revert-Fix-the-handling-or-arguments-and-macro-pseud.patch
deleted file mode 100644
index 3a3b6c0..0000000
--- a/9999/0010-Revert-Fix-the-handling-or-arguments-and-macro-pseud.patch
+++ /dev/null
@@ -1,900 +0,0 @@
-From cfb2c161d55d2a4ab5ab3729b16ad364c8ec1c3f Mon Sep 17 00:00:00 2001
-Message-ID: <cfb2c161d55d2a4ab5ab3729b16ad364c8ec1c3f.1735740264.git.sam@gentoo.org>
-In-Reply-To: <4bed21d47f9d838dc6b55ce026989ede4eacc789.1735740264.git.sam@gentoo.org>
-References: <4bed21d47f9d838dc6b55ce026989ede4eacc789.1735740264.git.sam@gentoo.org>
-From: Sam James <sam@gentoo.org>
-Date: Wed, 1 Jan 2025 14:03:46 +0000
-Subject: [PATCH 10/10] Revert "Fix the handling or arguments and macro
- pseudo-variables inside nested assembler macros."
-
-This reverts commit 9f2e3c21f6506f081f1360f02b847606e0e00995.
----
- gas/config/tc-iq2000.c | 6 +-
- gas/doc/as.texi | 60 +------
- gas/input-scrub.c | 7 +-
- gas/macro.c | 270 +++++-----------------------
- gas/macro.h | 17 +-
- gas/read.c | 15 +-
- gas/testsuite/gas/macros/macros.exp | 1 -
- gas/testsuite/gas/macros/nesting.d | 28 ---
- gas/testsuite/gas/macros/nesting.s | 104 -----------
- 9 files changed, 64 insertions(+), 444 deletions(-)
- delete mode 100644 gas/testsuite/gas/macros/nesting.d
- delete mode 100644 gas/testsuite/gas/macros/nesting.s
-
-diff --git a/gas/config/tc-iq2000.c b/gas/config/tc-iq2000.c
-index 8dc3b768e3a..c65f264528f 100644
---- a/gas/config/tc-iq2000.c
-+++ b/gas/config/tc-iq2000.c
-@@ -105,6 +105,8 @@ struct iq2000_hi_fixup
- /* The list of unmatched HI relocs. */
- static struct iq2000_hi_fixup * iq2000_hi_fixup_list;
-
-+/* Macro hash table, which we will add to. */
-+extern struct htab *macro_hash;
- \f
- const char md_shortopts[] = "";
- const struct option md_longopts[] =
-@@ -277,7 +279,9 @@ iq2000_add_macro (const char * name,
- }
- }
-
-- (void) add_macro (macro, true);
-+ str_hash_insert (macro_hash, macro->name, macro, 1);
-+
-+ macro_defined = 1;
- }
-
- static void
-diff --git a/gas/doc/as.texi b/gas/doc/as.texi
-index 69d6d3c88b0..c9f65a47125 100644
---- a/gas/doc/as.texi
-+++ b/gas/doc/as.texi
-@@ -6215,12 +6215,7 @@ With that definition, @samp{SUM 0,5} is equivalent to this assembly input:
- @item .macro @var{macname}
- @itemx .macro @var{macname} @var{macargs} @dots{}
- @cindex @code{macro} directive
--Begin the definition of a macro called @var{macname}. Macro names are case
--insensitive. Macro definitions can be nested, although their behaviour is
--sometimes counter intuitive. Nested macros only have scope within their
--defining macro.
--
--If your macro
-+Begin the definition of a macro called @var{macname}. If your macro
- definition requires arguments, specify their names after the macro name,
- separated by commas or spaces. You can qualify the macro argument to
- indicate whether all invocations must specify a non-blank value (through
-@@ -6385,29 +6380,6 @@ adjacent string literals - even if separated only by a blank - will not be
- concatenated when determining macro arguments, even if they're only separated
- by white space. This is unlike certain other pseudo ops, e.g. @code{.ascii}.
-
--Nested macros can access the arguments of their parents. But also if their
--argument names clash with those of their parents, their versions are used. So
--for example:
--
--@smallexample
--.macro OUTER arg1, arg2, arg3:vararg
-- .macro INNER arg4 arg2
-- .dc.a \arg2
-- .dc.a \arg3
-- .endm
-- INNER \arg1 bert
-- .dc.a \arg2
--.endm
--
--OUTER fred, jim, harry\arg4
--@end smallexample
--
--This will generate references to symbols called @samp{jim} - from the
--definition of the OUTER macro, @samp{bert} - from the definition in INNER
--where arg2 has been overridden and @samp{harryfred} - from the definition in
--INNER where the value of arg3 from OUTER is used, but with the value of arg4
--substituted into the symbol.
--
- @item .endm
- @cindex @code{endm} directive
- Mark the end of a macro definition.
-@@ -6423,33 +6395,6 @@ Exit early from the current macro definition.
- executed in this pseudo-variable; you can copy that number to your
- output with @samp{\@@}, but @emph{only within a macro definition}.
-
--Note - the @samp{\@@} counter is incremented at the end of the expansion of a
--macro, but before the contents of any nested macros are evaluated. This can
--lead to counter-intuitive behaviour when nested macros are used. For example:
--
--@smallexample
-- .macro o
-- .macro i
-- _i\@@_:
-- .endm
-- i
-- _o\@@_:
-- .endm
-- o
--@end smallexample
--
--Produces two symbols @samp{_o0_} and @samp{_i1_}. This happens because the
--@samp{o} macro executes entirely first, putting the definition and invocation
--of the @samp{i} macro into the input buffer. It also puts the definition of
--the @samp{_o\@@_} symbol into the input buffer, evaluating the @samp{\@@}
--counter in the process and so generating a symbol called @samp{_o0_}.
--
--That finishes the invocation of @samp{o} so the @samp{\@@} counter is
--incremented. Then the input buffer is re-evaluated and the definition and
--invocation of macro @samp{i} is found. This results in @samp{_i\@@_} being put
--into the input buffer and this time @samp{\@@} evaluates to 1, so the symbol
--created is @samp{_i1_}.
--
- @cindex number of times a macro has been executed
- @cindex macro, execution count
- @item \+
-@@ -6736,9 +6681,6 @@ those explicitly specified with @code{.eject}.
- Undefine the macro @var{name}, so that later uses of the string will not be
- expanded. @xref{Macro}.
-
--Note - nested macros are automatically purged at the end of the macro that
--defines them.
--
- @ifset ELF
- @node PushSection
- @section @code{.pushsection @var{name} [, @var{subsection}] [, "@var{flags}"[, @@@var{type}[,@var{arguments}]]]}
-diff --git a/gas/input-scrub.c b/gas/input-scrub.c
-index 3433bc6472d..2e0ce832b2b 100644
---- a/gas/input-scrub.c
-+++ b/gas/input-scrub.c
-@@ -23,7 +23,6 @@
- #include "input-file.h"
- #include "sb.h"
- #include "listing.h"
--#include "macro.h"
-
- /*
- * O/S independent module to supply buffers of sanitised source code
-@@ -291,13 +290,12 @@ input_scrub_include_sb (sb *from, char *position, enum expansion expansion)
- ++macro_nest;
- }
-
-+#ifdef md_macro_start
- if (expansion == expanding_macro)
- {
--#ifdef md_macro_start
- md_macro_start ();
--#endif
-- increment_macro_nesting_depth ();
- }
-+#endif
-
- next_saved_file = input_scrub_push (position);
-
-@@ -352,7 +350,6 @@ input_scrub_next_buffer (char **bufp)
- data. */
- md_macro_end ();
- #endif
-- decrement_macro_nesting_depth ();
- }
- if (from_sb_expansion != expanding_app)
- --macro_nest;
-diff --git a/gas/macro.c b/gas/macro.c
-index c1b43e76a61..5ae76c6e661 100644
---- a/gas/macro.c
-+++ b/gas/macro.c
-@@ -44,24 +44,11 @@
-
- /* The macro hash table. */
-
--/* Macro nesting depth. Similar to macro_nest defined in sb.c, but this
-- counter is specific to macros, whereas macro_nest also counts repeated
-- string blocks. */
--static unsigned int macro_nesting_depth;
-+htab_t macro_hash;
-
--/* Maximum nesting depth. Ideally the same as the value of max_macro_nest
-- as defined in as.c (ie 100). But there is one test in the assembler
-- testsuite (bfin/allinsn16.s) that nests macros to a depth of 8192. So
-- we have a ridiculously large number here. */
--#define MAX_MACRO_DEPTH 8193
-+/* Whether any macros have been defined. */
-
--static htab_t macro_hash[MAX_MACRO_DEPTH];
--
--/* Whether any macros have been defined.
-- FIXME: This could be a counter that is incremented
-- with .macro and decremented with .purgem. */
--
--static bool macros_defined = false;
-+int macro_defined;
-
- /* Whether we should strip '@' characters. */
-
-@@ -73,18 +60,6 @@ static unsigned int macro_number;
-
- static void free_macro (macro_entry *);
-
--bool
--add_macro (macro_entry * macro, bool replace)
--{
-- if (str_hash_insert (macro_hash [macro_nesting_depth],
-- macro->name, macro, replace) == NULL)
-- {
-- macros_defined = true;
-- return true;
-- }
-- return false;
--}
--
- static void
- macro_del_f (void *ent)
- {
-@@ -97,23 +72,15 @@ macro_del_f (void *ent)
- void
- macro_init (void)
- {
-- int i;
--
-- for (i = 0; i < MAX_MACRO_DEPTH; i++)
-- macro_hash[i] = htab_create_alloc (16, hash_string_tuple, eq_string_tuple,
-- macro_del_f, notes_calloc, NULL);
-- macros_defined = false;
-+ macro_hash = htab_create_alloc (16, hash_string_tuple, eq_string_tuple,
-+ macro_del_f, notes_calloc, NULL);
-+ macro_defined = 0;
- }
-
- void
- macro_end (void)
- {
-- int i;
--
-- for (i = MAX_MACRO_DEPTH; i--;)
-- htab_delete (macro_hash[i]);
--
-- macros_defined = false;
-+ htab_delete (macro_hash);
- }
-
- /* Read input lines till we get to a TO string.
-@@ -688,13 +655,6 @@ free_macro (macro_entry *macro)
- free (macro);
- }
-
--static macro_entry * last_recorded_macro = NULL;
--void
--macro_record_invocation (macro_entry * macro)
--{
-- last_recorded_macro = macro;
--}
--
- /* Define a new macro. */
-
- macro_entry *
-@@ -758,19 +718,15 @@ define_macro (sb *in, sb *label, size_t (*get_line) (sb *))
- /* And stick it in the macro hash table. */
- for (idx = 0; idx < name.len; idx++)
- name.ptr[idx] = TOLOWER (name.ptr[idx]);
--
-- if (macro_nesting_depth > 0)
-- macro->parent = last_recorded_macro;
-- else
-- macro->parent = NULL;
--
- if (!error)
- {
-- if (! add_macro (macro, false))
-+ if (str_hash_insert (macro_hash, macro->name, macro, 0) != NULL)
- error = _("Macro `%s' was already defined");
- }
-
-- if (error != NULL)
-+ if (!error)
-+ macro_defined = 1;
-+ else
- {
- as_bad_where (macro->file, macro->line, error, macro->name);
- free_macro (macro);
-@@ -794,25 +750,11 @@ get_apost_token (size_t idx, sb *in, sb *name, int kind)
- return idx;
- }
-
--static const char *
--macro_expand_body (sb *, sb *, formal_entry *, struct htab *,
-- const macro_entry *, unsigned int);
--
--/* Find the actual value for a formal parameter starting at START inside IN.
-- Appends the value of parameter onto OUT.
-- The hash table of formal parameters is provided by FORMAL_HASH.
-- The character that indicated the presense of a formal parameter is passed
-- in KIND.
-- If COPYIFNOTTHERE is true and the parameter is not found in the hash table
-- then it is appended as plain text onto OUT.
-- The macro containing the formal parameters is passed in MACRO.
-- This can be empty.
-- Returns the offset inside IN after advanceing past the parameter.
-- Also stores the parameter's name into T. */
-+/* Substitute the actual value for a formal parameter. */
-
- static size_t
- sub_actual (size_t start, sb *in, sb *t, struct htab *formal_hash,
-- int kind, sb *out, int copyifnotthere, const macro_entry * macro)
-+ int kind, sb *out, int copyifnotthere)
- {
- size_t src;
- formal_entry *ptr;
-@@ -826,12 +768,16 @@ sub_actual (size_t start, sb *in, sb *t, struct htab *formal_hash,
- ptr = NULL;
- else
- ptr = str_hash_find (formal_hash, sb_terminate (t));
--
- if (ptr)
- {
-- sb * add = ptr->actual.len ? &ptr->actual : &ptr->def;
--
-- sb_add_sb (out, add);
-+ if (ptr->actual.len)
-+ {
-+ sb_add_sb (out, &ptr->actual);
-+ }
-+ else
-+ {
-+ sb_add_sb (out, &ptr->def);
-+ }
- }
- else if (kind == '&')
- {
-@@ -845,55 +791,6 @@ sub_actual (size_t start, sb *in, sb *t, struct htab *formal_hash,
- {
- sb_add_sb (out, t);
- }
-- else if (!macro_strip_at
-- && macro_nesting_depth > 0
-- && macro != NULL
-- && macro->parent != NULL)
-- {
-- const macro_entry * orig_macro = macro;
-- bool success = false;
--
-- /* We have failed to find T, but we are inside nested macros. So check
-- the parent macros so see if they have a FORMAL that matches T. */
-- while (macro->parent != NULL)
-- {
-- macro = macro->parent;
--
-- ptr = str_hash_find (macro->formal_hash, t->ptr);
-- if (ptr == NULL)
-- continue;
--
-- sb * add = ptr->actual.len ? &ptr->actual : &ptr->def;
--
-- /* The parent's FORMALs might contain parameters that need further
-- substitution. See gas/testsuite/gas/arm/macro-vld1.s for an
-- example of this. */
-- if (strchr (add->ptr, '\\'))
-- {
-- sb newadd;
--
-- sb_new (&newadd);
-- /* FIXME: Should we do something if the call to
-- macro_expand_body returns an error message ? */
-- (void) macro_expand_body (add, &newadd, NULL, NULL,
-- orig_macro, orig_macro->count);
-- sb_add_sb (out, &newadd);
-- }
-- else
-- {
-- sb_add_sb (out, add);
-- }
-- success = true;
-- break;
-- }
-- if (! success)
-- {
-- /* We reached the outermost macro and failed to find T, so
-- just copy the entire parameter as is. */
-- sb_add_char (out, '\\');
-- sb_add_sb (out, t);
-- }
-- }
- else
- {
- sb_add_char (out, '\\');
-@@ -902,12 +799,7 @@ sub_actual (size_t start, sb *in, sb *t, struct htab *formal_hash,
- return src;
- }
-
--/* Expands the body of a macro / block of text IN, copying it into OUT.
-- Parameters for substitution are found in FORMALS and FORMAL_HASH or
-- MACRO.
-- The number of times that this macro / block of text have already been
-- copied into the output is held in INSTANCE.
-- Returns NULL upon success or an error message otherwise. */
-+/* Expand the body of a macro. */
-
- static const char *
- macro_expand_body (sb *in, sb *out, formal_entry *formals,
-@@ -919,38 +811,18 @@ macro_expand_body (sb *in, sb *out, formal_entry *formals,
- int inquote = 0, macro_line = 0;
- formal_entry *loclist = NULL;
- const char *err = NULL;
-- int nesting = 0;
-
-- if (formals == NULL && macro != NULL)
-- formals = macro->formals;
--
-- if (formal_hash == NULL && macro != NULL)
-- formal_hash = macro->formal_hash;
--
- sb_new (&t);
-
- while (src < in->len && !err)
- {
-- if (in->ptr[src] == '.')
-- {
-- /* Check to see if we have encountered ".macro" or ".endm" */
-- if (in->len > src + 5
-- && strncmp (in->ptr + src, ".macro", 6) == 0)
-- ++ nesting;
--
-- else if (in->len > src + 4
-- && strncmp (in->ptr + src, ".endm", 5) == 0)
-- -- nesting;
-- }
--
- if (in->ptr[src] == '&')
- {
- sb_reset (&t);
- if (flag_mri)
- {
- if (src + 1 < in->len && in->ptr[src + 1] == '&')
-- src = sub_actual (src + 2, in, &t, formal_hash,
-- '\'', out, 1, macro);
-+ src = sub_actual (src + 2, in, &t, formal_hash, '\'', out, 1);
- else
- sb_add_char (out, in->ptr[src++]);
- }
-@@ -958,8 +830,7 @@ macro_expand_body (sb *in, sb *out, formal_entry *formals,
- {
- /* Permit macro parameter substitution delineated with
- an '&' prefix and optional '&' suffix. */
-- src = sub_actual (src + 1, in, &t, formal_hash,
-- '&', out, 0, macro);
-+ src = sub_actual (src + 1, in, &t, formal_hash, '&', out, 0);
- }
- }
- else if (in->ptr[src] == '\\')
-@@ -980,12 +851,7 @@ macro_expand_body (sb *in, sb *out, formal_entry *formals,
- else
- as_bad_where (macro->file, macro->line + macro_line, _("missing `)'"));
- }
-- else if (src < in->len
-- && in->ptr[src] == '@'
-- /* PR 32391: Do not perform the substition inside nested
-- macros. Instead wait until they are re-evaluated and
-- perform the substition then. */
-- && ! nesting)
-+ else if (src < in->len && in->ptr[src] == '@')
- {
- /* Sub in the total macro invocation number. */
-
-@@ -994,12 +860,7 @@ macro_expand_body (sb *in, sb *out, formal_entry *formals,
- sprintf (buffer, "%u", macro_number);
- sb_add_string (out, buffer);
- }
-- else if (src < in->len
-- && in->ptr[src] == '+'
-- /* PR 32391: Do not perform the substition inside nested
-- macros. Instead wait until they are re-evaluated and
-- perform the substition then. */
-- && ! nesting)
-+ else if (src < in->len && in->ptr[src] == '+')
- {
- /* Sub in the current macro invocation number. */
-
-@@ -1043,18 +904,7 @@ macro_expand_body (sb *in, sb *out, formal_entry *formals,
- else
- {
- sb_reset (&t);
--
-- if (nesting)
-- {
-- src = get_apost_token (src, in, &t, '\'');
-- sb_add_char (out, '\\');
-- sb_add_sb (out, &t);
-- }
-- else
-- {
-- src = sub_actual (src, in, &t, formal_hash,
-- '\'', out, 0, macro);
-- }
-+ src = sub_actual (src, in, &t, formal_hash, '\'', out, 0);
- }
- }
- else if ((flag_macro_alternate || flag_mri)
-@@ -1073,7 +923,7 @@ macro_expand_body (sb *in, sb *out, formal_entry *formals,
- sb_reset (&t);
- src = sub_actual (src, in, &t, formal_hash,
- (macro_strip_at && inquote) ? '@' : '\'',
-- out, 1, macro);
-+ out, 1);
- }
- else
- {
-@@ -1185,7 +1035,6 @@ macro_expand_body (sb *in, sb *out, formal_entry *formals,
-
- if (!err && (out->len == 0 || out->ptr[out->len - 1] != '\n'))
- sb_add_char (out, '\n');
--
- return err;
- }
-
-@@ -1370,7 +1219,8 @@ macro_expand (size_t idx, sb *in, macro_entry *m, sb *out)
- }
- }
-
-- err = macro_expand_body (&m->sub, out, NULL, NULL, m, m->count);
-+ err = macro_expand_body (&m->sub, out, m->formals, m->formal_hash, m,
-+ m->count);
- }
-
- /* Discard any unnamed formal arguments. */
-@@ -1403,9 +1253,9 @@ macro_expand (size_t idx, sb *in, macro_entry *m, sb *out)
- }
-
- /* Check for a macro. If one is found, put the expansion into
-- *EXPAND. Return TRUE if a macro is found, FALSE otherwise. */
-+ *EXPAND. Return 1 if a macro is found, 0 otherwise. */
-
--bool
-+int
- check_macro (const char *line, sb *expand,
- const char **error, macro_entry **info)
- {
-@@ -1414,12 +1264,9 @@ check_macro (const char *line, sb *expand,
- macro_entry *macro;
- sb line_sb;
-
-- if (! macros_defined)
-- return false;
--
- if (! is_name_beginner (*line)
- && (! flag_mri || *line != '.'))
-- return false;
-+ return 0;
-
- s = line + 1;
- while (is_part_of_name (*s))
-@@ -1431,17 +1278,11 @@ check_macro (const char *line, sb *expand,
- for (cls = copy; *cls != '\0'; cls ++)
- *cls = TOLOWER (*cls);
-
-- int i;
-- for (i = macro_nesting_depth; i >= 0; i--)
-- {
-- macro = str_hash_find (macro_hash[i], copy);
-- if (macro != NULL)
-- break;
-- }
-+ macro = str_hash_find (macro_hash, copy);
- free (copy);
-
- if (macro == NULL)
-- return false;
-+ return 0;
-
- /* Wrap the line up in an sb. */
- sb_new (&line_sb);
-@@ -1457,7 +1298,7 @@ check_macro (const char *line, sb *expand,
- if (info)
- *info = macro;
-
-- return true;
-+ return 1;
- }
-
- /* Delete a macro. */
-@@ -1475,20 +1316,11 @@ delete_macro (const char *name)
- copy[i] = TOLOWER (name[i]);
- copy[i] = '\0';
-
-- int j;
-- for (j = macro_nesting_depth; j >= 0; j--)
-- {
-- macro = str_hash_find (macro_hash [j], copy);
-- if (macro != NULL)
-- {
-- str_hash_delete (macro_hash[j], copy);
-- break;
-- }
-- }
--
-- if (macro == NULL)
-+ macro = str_hash_find (macro_hash, copy);
-+ if (macro != NULL)
-+ str_hash_delete (macro_hash, copy);
-+ else
- as_warn (_("Attempt to purge non-existing macro `%s'"), copy);
--
- free (copy);
- }
-
-@@ -1590,25 +1422,3 @@ expand_irp (int irpc, size_t idx, sb *in, sb *out, size_t (*get_line) (sb *))
-
- return err;
- }
--
--void
--increment_macro_nesting_depth (void)
--{
-- if (macro_nesting_depth >= (MAX_MACRO_DEPTH - 1))
-- as_fatal (_("macros nested too deeply"));
-- else
-- ++macro_nesting_depth;
--}
--
--void
--decrement_macro_nesting_depth (void)
--{
-- if (macro_nesting_depth == 0)
-- as_fatal (_("too much macro un-nesting"));
-- else
-- {
-- /* FIXME: Potential memory leak here. */
-- htab_empty (macro_hash [macro_nesting_depth]);
-- --macro_nesting_depth;
-- }
--}
-diff --git a/gas/macro.h b/gas/macro.h
-index 55b28b2f82a..3ebcfe8c8fd 100644
---- a/gas/macro.h
-+++ b/gas/macro.h
-@@ -64,28 +64,31 @@ typedef struct macro_struct
- int formal_count; /* Number of formal args. */
- formal_entry * formals; /* List of formal_structs. */
- htab_t formal_hash; /* Hash table of formals. */
-- struct macro_struct * parent; /* Parent of nested macros. */
- const char * name; /* Macro name. */
- const char * file; /* File the macro was defined in. */
- unsigned int line; /* Line number of definition. */
- unsigned int count; /* Invocation count. */
- } macro_entry;
-
--/* The macro/text block nesting level. */
-+/* Whether any macros have been defined. */
-+
-+extern int macro_defined;
-+
-+/* The macro nesting level. */
-
- extern int macro_nest;
-
-+/* The macro hash table. */
-+
-+extern htab_t macro_hash;
-+
- extern int buffer_and_nest (const char *, const char *, sb *,
- size_t (*) (sb *));
- extern void macro_init (void);
- extern void macro_end (void);
- extern macro_entry *define_macro (sb *, sb *, size_t (*) (sb *));
--extern bool check_macro (const char *, sb *, const char **, macro_entry **);
-+extern int check_macro (const char *, sb *, const char **, macro_entry **);
- extern void delete_macro (const char *);
- extern const char *expand_irp (int, size_t, sb *, sb *, size_t (*) (sb *));
--extern void increment_macro_nesting_depth (void);
--extern void decrement_macro_nesting_depth (void);
--extern void macro_record_invocation (macro_entry *);
--extern bool add_macro (macro_entry *, bool);
-
- #endif
-diff --git a/gas/read.c b/gas/read.c
-index 5be2686822d..6d0d4b5e31a 100644
---- a/gas/read.c
-+++ b/gas/read.c
-@@ -656,8 +656,7 @@ poend (void)
- }
-
- /* Helper function of read_a_source_file, which tries to expand a macro. */
--
--static bool
-+static int
- try_macro (char term, const char *line)
- {
- sb out;
-@@ -674,14 +673,12 @@ try_macro (char term, const char *line)
- sb_kill (&out);
- buffer_limit =
- input_scrub_next_buffer (&input_line_pointer);
--
-- macro_record_invocation (macro);
- #ifdef md_macro_info
- md_macro_info (macro);
- #endif
-- return true;
-+ return 1;
- }
-- return false;
-+ return 0;
- }
-
- #ifdef HANDLE_BUNDLE
-@@ -1273,7 +1270,7 @@ read_a_source_file (const char *name)
- s_ignore (0);
- nul_char = next_char = *--input_line_pointer;
- *input_line_pointer = '\0';
-- if (! try_macro (next_char, s))
-+ if (! macro_defined || ! try_macro (next_char, s))
- {
- *end = '\0';
- as_bad (_("unknown pseudo-op: `%s'"), s);
-@@ -1310,7 +1307,7 @@ read_a_source_file (const char *name)
-
- generate_lineno_debug ();
-
-- if (try_macro (next_char, s))
-+ if (macro_defined && try_macro (next_char, s))
- continue;
-
- if (mri_pending_align)
-@@ -2820,7 +2817,7 @@ s_macro (int ignore ATTRIBUTE_UNUSED)
- as_warn_where (macro->file, macro->line,
- _("attempt to redefine pseudo-op `%s' ignored"),
- macro->name);
-- delete_macro (macro->name);
-+ str_hash_delete (macro_hash, macro->name);
- }
- }
-
-diff --git a/gas/testsuite/gas/macros/macros.exp b/gas/testsuite/gas/macros/macros.exp
-index de3df4d803d..278cf405225 100644
---- a/gas/testsuite/gas/macros/macros.exp
-+++ b/gas/testsuite/gas/macros/macros.exp
-@@ -112,4 +112,3 @@ run_list_test count
- run_list_test irp-count
- run_list_test irpc-quote
- run_list_test rept-count
--run_dump_test nesting
-diff --git a/gas/testsuite/gas/macros/nesting.d b/gas/testsuite/gas/macros/nesting.d
-deleted file mode 100644
-index 2f44aedb2dc..00000000000
---- a/gas/testsuite/gas/macros/nesting.d
-+++ /dev/null
-@@ -1,28 +0,0 @@
--#nm: -j
--#name: Nested macros (PR 32391)
--# Sone targets do not support macros used like this.
--#skip: tic*-*-* mmix-*
--
--#...
--_m7_
--_m8_
--after_at_0
--after_at_3
--after_plus_0
--after_plus_1
--before_at_0
--before_at_3
--before_plus_0
--before_plus_1
--bert
--harryfred
--i3_bar
--inside_at_1
--inside_at_2
--inside_at_4
--inside_at_5
--inside_plus_0
--inside_plus_1
--jim
--o3_foo
--other_inner_6
-diff --git a/gas/testsuite/gas/macros/nesting.s b/gas/testsuite/gas/macros/nesting.s
-deleted file mode 100644
-index 438d5af8d00..00000000000
---- a/gas/testsuite/gas/macros/nesting.s
-+++ /dev/null
-@@ -1,104 +0,0 @@
--
-- .text
--/* PR 32391: Automatic counters inside macros should increment when nested
-- macros finish execution. */
--.macro o1
--.global before_at_\@
--before_at_\@:
--.global before_plus_\+
--before_plus_\+:
--
-- .macro i1
--.global inside_at_\@
--inside_at_\@:
--.global inside_plus_\+
--inside_plus_\+:
-- .endm
--
-- i1
-- i1
--
--.global after_at_\@
--after_at_\@:
--.global after_plus_\+
--after_plus_\+:
--
--.endm
--
--/* Invoking o1 should produce these symbols in this order:
--
-- before_at_0
-- before_plus_0
-- inside_at_1
-- inside_plus_0
-- inside_at_2
-- inside_plus_1
-- after_at_0
-- after_plus_0 */
--o1
--
--/* A second invocation of o1 should not produce any errors about
-- symbols or macros being redefined. */
--o1
--
--/* This definition should not collide with the definition inside o1. */
--.macro i1
--.global other_inner_\@
--other_inner_\@:
--.endm
--
--/* And invoking it should invoke the second defintion of i1, not the first. */
--i1
--
--.macro o2
--.global _m\@_
--_m\@_:
--.macro i2
--.global _m\@_
--_m\@_:
--.endm
--i2
--.endm
--
--/* This should not generate conflicting symbols because the assembler
-- inserts the contents of o2 into the input buffer as pure text (ie
-- without evaluating i2). The first use of \@ is evaluated at this
-- time, creating _m4_. But the second use is not evaluated because
-- it is inside a .macro definition.
--
-- This finishes the evaluation of o2, so the \@ counter is incremented.
--
-- Next the input buffer is re-evaluated and the i2 macro definition
-- and invocation are encounterd. The text from i2 are inserted into
-- the input buffer and at this point the second use of \@ is evaluated
-- resulting in the creation of a symbol called _m5_. */
--o2
--
--/* Macro arguments should be independent of nesting. */
--.macro O3 arg
--.global o3_\arg
--o3_\arg:
--
-- .macro I3 arg
--.global i3_\arg
--i3_\arg:
-- .endm
--
-- i3 bar /* Macro names are case insensitive. */
--.endm
--
--o3 foo /* Should produce two labels: o3_foo and i3_bar. */
--
--/* Nested macros can access the arguments of their parents.
-- In addition their arguments can be substituted into the arguments
-- that are substited from their parents: */
--.macro OUTER arg1, arg2, arg3:vararg
-- .macro INNER arg4 arg2
-- .dc.a \arg2
-- .dc.a \arg3
-- .endm
-- INNER \arg1 bert
-- .dc.a \arg2
--.endm
--
--OUTER fred, jim, harry\arg4 /* This produces references to "jim", "bert" and "harryfred". */
---
-2.47.1
-
next reply other threads:[~2025-01-02 13:48 UTC|newest]
Thread overview: 41+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-01-02 13:48 Sam James [this message]
-- strict thread matches above, loose matches on Subject: below --
2025-03-06 12:54 [gentoo-commits] proj/toolchain/binutils-patches:master commit in: 9999/ Sam James
2025-03-06 4:54 Sam James
2025-02-03 18:02 Andreas K. Hüttel
2025-01-14 2:09 Sam James
2025-01-13 6:11 Sam James
2025-01-01 14:05 Sam James
2024-12-26 1:21 Sam James
2024-12-24 6:27 Sam James
2024-12-21 0:09 Sam James
2024-08-03 22:43 Andreas K. Hüttel
2024-06-29 17:05 Andreas K. Hüttel
2024-06-29 16:32 Andreas K. Hüttel
2024-06-29 16:32 Andreas K. Hüttel
2024-06-28 21:48 Andreas K. Hüttel
2023-10-27 0:44 Sam James
2023-10-27 0:44 Sam James
2023-07-30 14:49 Andreas K. Hüttel
2023-07-28 16:23 Andreas K. Hüttel
2023-06-30 9:21 WANG Xuerui
2023-04-02 11:44 Andreas K. Hüttel
2023-01-05 16:22 Andreas K. Hüttel
2023-01-05 16:21 Andreas K. Hüttel
2023-01-03 23:03 Andreas K. Hüttel
2023-01-02 23:50 Andreas K. Hüttel
2022-10-08 12:15 WANG Xuerui
2022-07-29 7:55 WANG Xuerui
2022-01-15 22:27 Andreas K. Hüttel
2021-08-17 20:07 Andreas K. Hüttel
2021-07-30 23:25 Andreas K. Hüttel
2021-07-24 20:57 Andreas K. Hüttel
2021-07-20 19:53 Andreas K. Hüttel
2021-07-20 19:50 Andreas K. Hüttel
2021-07-06 7:04 Sergei Trofimovich
2021-07-06 7:04 Sergei Trofimovich
2021-07-06 7:04 Sergei Trofimovich
2020-07-25 17:27 Andreas K. Hüttel
2020-07-25 12:26 Andreas K. Hüttel
2020-07-25 12:23 Andreas K. Hüttel
2020-07-25 12:20 Andreas K. Hüttel
2020-05-19 21:12 Andreas K. Hüttel
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1735825692.58f7f7f524284de1cbbacdc6403021b1d33a720b.sam@gentoo \
--to=sam@gentoo.org \
--cc=gentoo-commits@lists.gentoo.org \
--cc=gentoo-dev@lists.gentoo.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox