RISC-V: tighten post-relocation-operator separator expectation
authorJan Beulich <jbeulich@suse.com>
Thu, 4 May 2023 08:24:36 +0000 (10:24 +0200)
committerJan Beulich <jbeulich@suse.com>
Thu, 4 May 2023 08:24:36 +0000 (10:24 +0200)
As per the spec merely a blank isn't okay as a separator, the operand
to the relocation function ought to be parenthesized. Enforcing this
then also eliminates an inconsistency in that

lui t0, %hi sym
lui t0, %hi 0x1000

were accepted, but

lui t0, %hi +sym
lui t0, %hi -0x1000

were not.

gas/config/tc-riscv.c
gas/testsuite/gas/riscv/auipc-parsing.l
gas/testsuite/gas/riscv/auipc-parsing.s

index a94d4f69df63d95ae1931d833d81fc805fb02dc8..0cc2484b0494409e1fc17b50fb184e0ca43ecaba 100644 (file)
@@ -2200,7 +2200,9 @@ parse_relocation (char **str, bfd_reloc_code_real_type *reloc,
       {
        size_t len = 1 + strlen (percent_op->str);
 
-       if (!ISSPACE ((*str)[len]) && (*str)[len] != '(')
+       while (ISSPACE ((*str)[len]))
+         ++len;
+       if ((*str)[len] != '(')
          continue;
 
        *str += len;
index 54eedcbf04fab862c735f58ac4a6d5824e7a5ac5..2ea0f7c5826521278203bde5b7cc67e6859f3056 100644 (file)
@@ -3,3 +3,5 @@
 .*: Error: illegal operands `lui x10,x11'
 .*: Error: illegal operands `auipc x12,symbol'
 .*: Error: illegal operands `lui x13,symbol'
+.*: Error: illegal operands `auipc x14,%hi symbol'
+.*: Error: illegal operands `lui x15,%hi symbol'
index 7af4df9ede1472186e4dbb52dd795a3cbd05a343..c99f3de9cc1c755f6d5fb638102e29e19a9693c1 100644 (file)
@@ -4,3 +4,6 @@
 # Don't accept a symbol without %hi() for 'u' operands.
        auipc   x12,symbol
        lui     x13,symbol
+# Don't accept reloc functions without parentheses.
+       auipc   x14,%hi symbol
+       lui     x15,%hi symbol