[binutils-gdb] gas: don't permit "repeat" expressions with .cfi_{escape, fde_data}

Jan Beulich jbeulich@sourceware.org
Fri Mar 7 10:29:32 GMT 2025


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=757c681fc2e4a53b1a27c8770b8eb3d5881f731d

commit 757c681fc2e4a53b1a27c8770b8eb3d5881f731d
Author: Jan Beulich <jbeulich@suse.com>
Date:   Fri Mar 7 11:27:58 2025 +0100

    gas: don't permit "repeat" expressions with .cfi_{escape,fde_data}
    
    Repeat counts greater than 1 will emit data directly into the current
    (sub-)section. That's wrong with .cfi_*, which defer data emission until
    much later: N-1 instances of the specified data would not end up in
    .eh_frame (or whatever the section that CFI data was specified to go
    into). Simply disallow "repeat" expressions in such cases.

Diff:
---
 gas/read.c | 22 ++++++++++++++--------
 1 file changed, 14 insertions(+), 8 deletions(-)

diff --git a/gas/read.c b/gas/read.c
index 171182d5a0f..12b6d3029a6 100644
--- a/gas/read.c
+++ b/gas/read.c
@@ -4179,6 +4179,20 @@ static void
 parse_mri_cons (expressionS *exp, unsigned int nbytes);
 #endif
 
+/* This function is used by .cfi_* directive handling, and hence must not
+   invoke parse_repeat_cons().  */
+
+void
+do_parse_cons_expression (expressionS *exp,
+			  int nbytes ATTRIBUTE_UNUSED)
+{
+#ifdef TC_PARSE_CONS_EXPRESSION
+  (void) TC_PARSE_CONS_EXPRESSION (exp, nbytes);
+#else
+  expression (exp);
+#endif
+}
+
 #ifndef TC_PARSE_CONS_EXPRESSION
 #ifdef REPEAT_CONS_EXPRESSIONS
 #define TC_PARSE_CONS_EXPRESSION(EXP, NBYTES) \
@@ -4194,14 +4208,6 @@ parse_repeat_cons (expressionS *exp, unsigned int nbytes);
 #endif
 #endif
 
-void
-do_parse_cons_expression (expressionS *exp,
-			  int nbytes ATTRIBUTE_UNUSED)
-{
-  (void) TC_PARSE_CONS_EXPRESSION (exp, nbytes);
-}
-
-
 /* Worker to do .byte etc statements.
    Clobbers input_line_pointer and checks end-of-line.  */


More information about the Binutils-cvs mailing list