]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
bpf: print failing insn for unexpected register
authorVineet Gupta <vineet.gupta@linux.dev>
Tue, 31 Mar 2026 20:42:09 +0000 (13:42 -0700)
committerJose E. Marchesi <jemarch@gnu.org>
Thu, 2 Apr 2026 16:31:48 +0000 (18:31 +0200)
prev:

| /tmp/cc7214hK.s: Assembler messages:
| /tmp/cc7214hK.s:40: Error: unexpected register name `w0' in expression

New

| /tmp/cc7214hK.s: Assembler messages:
| /tmp/cc7214hK.s:40: Error: unexpected register name `w0' in instruction `*(u32 *) (r9+0) = w0'

Signed-off-by: Vineet Gupta <vineet.gupta@linux.dev>
gas/config/tc-bpf.c
gas/testsuite/gas/bpf/regs-for-symbols-pseudoc.l

index bc83d3d19d58f4687870270cfe2292c1b9a68904..57c2b869cbabcd102517cb3d27393da7ac7bc168 100644 (file)
@@ -1235,6 +1235,7 @@ add_relaxed_insn (struct bpf_insn *insn, expressionS *exp)
 
 static int exp_parse_failed = 0;
 static bool parsing_insn_operands = false;
+static char *g_curr_insn_str;
 
 static char *
 parse_expression (char *s, expressionS *exp)
@@ -1357,8 +1358,8 @@ bpf_parse_name (const char *name, expressionS *exp, enum expr_mode mode)
       if (parse_bpf_register ((char *) name, 'r', &regno)
           || parse_bpf_register ((char *) name, 'w', &regno))
         {
-          as_bad (_("unexpected register name `%s' in expression"),
-                  name);
+         as_bad (_("unexpected register name `%s' in instruction `%s'"),
+                 name, g_curr_insn_str);
           return false;
         }
     }
@@ -1464,6 +1465,7 @@ md_assemble (char *str ATTRIBUTE_UNUSED)
      function above.  */
   partial_match_length = 0;
   errmsg = NULL;
+  g_curr_insn_str = str;
 
 #define PARSE_ERROR(...) parse_error (s > str ? s - str : 0, __VA_ARGS__)
 
index eeda735fb99312f299872022e50dd77f481891c2..b12739ed7a68d64da2ad82bc7865319d838b1ccf 100644 (file)
@@ -1,8 +1,8 @@
 .*: Assembler messages:
-.*:1: Error: unexpected register name `w3' in expression
-.*:2: Error: unexpected register name `r3' in expression
-.*:2: Error: unexpected register name `r3' in expression
-.*:3: Error: unexpected register name `r3' in expression
-.*:3: Error: unexpected register name `r3' in expression
-.*:4: Error: unexpected register name `r3' in expression
-.*:4: Error: unexpected register name `r3' in expression
+.*:1: Error: unexpected register name `w3' in instruction `goto w3'
+.*:2: Error: unexpected register name `r3' in instruction `r2 =r3'
+.*:2: Error: unexpected register name `r3' in instruction `r2 =r3'
+.*:3: Error: unexpected register name `r3' in instruction `r2 =r3'
+.*:3: Error: unexpected register name `r3' in instruction `r2 =r3'
+.*:4: Error: unexpected register name `r3' in instruction `r2 =1\+r3'
+.*:4: Error: unexpected register name `r3' in instruction `r2 =1\+r3'