gas: BPF pseudo-c syntax tests
authorGuillermo E. Martinez <guillermo.e.martinez@oracle.com>
Thu, 20 Apr 2023 14:43:03 +0000 (16:43 +0200)
committerJose E. Marchesi <jose.marchesi@oracle.com>
Wed, 26 Apr 2023 17:28:06 +0000 (19:28 +0200)
This patch expands the GAS BPF testsuite in order to also test the
alternative pseudo-C syntax used in BPF assembly.

This includes three main changes:

- Some general GAS tests involving assignment and equality operands in
  expressions (such as = and ==) are disabled in bpf-* targets,
  because the syntax collides with the pseudo-C BPF assembly syntax.

- New tests are added to the BPF GAS testsuite that test the pseudo-c
syntax.  Tests for all BPF instructions are included.

- New tests are added to the BPF GAS testsuite that test the support
  for both syntaxes in the same source.

gas/ChangeLog:

2023-04-20  Guillermo E. Martinez  <guillermo.e.martinez@oracle.com>

PR gas/29728
* testsuite/gas/all/assign-bad-recursive.d: Skip test in bpf-*
targets.
* testsuite/gas/all/eqv-dot.d: Likewise.
* testsuite/gas/all/gas.exp: Skip other assignment tests in bpf-*.
* testsuite/gas/bpf/alu-pseudoc.s: New file.
* testsuite/gas/bpf/pseudoc-normal.s: Likewise.
* testsuite/gas/bpf/pseudoc-normal.d: Likewise.
* testsuite/gas/bpf/pseudoc-normal-be.d: Likewise.
* testsuite/gas/bpf/mem-pseudoc.s: Likewise.
* testsuite/gas/bpf/lddw-pseudoc.s: Likewise.
* testsuite/gas/bpf/jump32-pseudoc.s: Likewise.
* testsuite/gas/bpf/jump-pseudoc.s: Likewise.
* testsuite/gas/bpf/indcall-1-pseudoc.s: Likewise.
* testsuite/gas/bpf/atomic-pseudoc.s: Likewise.
* testsuite/gas/bpf/alu32-pseudoc.s: Likewise.
* testsuite/gas/bpf/*.d: Add -pseudoc variants of the tests.

31 files changed:
gas/ChangeLog
gas/testsuite/gas/all/assign-bad-recursive.d
gas/testsuite/gas/all/eqv-dot.d
gas/testsuite/gas/all/gas.exp
gas/testsuite/gas/bpf/alu-be.d
gas/testsuite/gas/bpf/alu-pseudoc.s [new file with mode: 0644]
gas/testsuite/gas/bpf/alu32-be.d
gas/testsuite/gas/bpf/alu32-pseudoc.s [new file with mode: 0644]
gas/testsuite/gas/bpf/alu32.d
gas/testsuite/gas/bpf/atomic-be.d
gas/testsuite/gas/bpf/atomic-pseudoc.s [new file with mode: 0644]
gas/testsuite/gas/bpf/atomic.d
gas/testsuite/gas/bpf/bpf.exp
gas/testsuite/gas/bpf/indcall-1-pseudoc.s [new file with mode: 0644]
gas/testsuite/gas/bpf/indcall-1.d
gas/testsuite/gas/bpf/indcall-bad-1.l
gas/testsuite/gas/bpf/jump-be.d
gas/testsuite/gas/bpf/jump-pseudoc.s [new file with mode: 0644]
gas/testsuite/gas/bpf/jump.d
gas/testsuite/gas/bpf/jump32-pseudoc.s [new file with mode: 0644]
gas/testsuite/gas/bpf/jump32.d
gas/testsuite/gas/bpf/lddw-be.d
gas/testsuite/gas/bpf/lddw-pseudoc.s [new file with mode: 0644]
gas/testsuite/gas/bpf/lddw.d
gas/testsuite/gas/bpf/mem-be.d
gas/testsuite/gas/bpf/mem-pseudoc.s [new file with mode: 0644]
gas/testsuite/gas/bpf/mem.d
gas/testsuite/gas/bpf/pseudoc-normal-be.d [new file with mode: 0644]
gas/testsuite/gas/bpf/pseudoc-normal.d [new file with mode: 0644]
gas/testsuite/gas/bpf/pseudoc-normal.s [new file with mode: 0644]
gas/testsuite/gas/macros/macros.exp

index e1cfcec4abfde282459dbf83cf8aac270b4a847e..88a9d2eff95d65485f8e29ed76873d89cccee689 100644 (file)
@@ -1,3 +1,23 @@
+2023-04-20  Guillermo E. Martinez  <guillermo.e.martinez@oracle.com>
+
+       PR gas/29728
+       * testsuite/gas/all/assign-bad-recursive.d: Skip test in bpf-*
+       targets.
+       * testsuite/gas/all/eqv-dot.d: Likewise.
+       * testsuite/gas/all/gas.exp: Skip other assignment tests in bpf-*.
+       * testsuite/gas/bpf/alu-pseudoc.s: New file.
+       * testsuite/gas/bpf/pseudoc-normal.s: Likewise.
+       * testsuite/gas/bpf/pseudoc-normal.d: Likewise.
+       * testsuite/gas/bpf/pseudoc-normal-be.d: Likewise.
+       * testsuite/gas/bpf/mem-pseudoc.s: Likewise.
+       * testsuite/gas/bpf/lddw-pseudoc.s: Likewise.
+       * testsuite/gas/bpf/jump32-pseudoc.s: Likewise.
+       * testsuite/gas/bpf/jump-pseudoc.s: Likewise.
+       * testsuite/gas/bpf/indcall-1-pseudoc.s: Likewise.
+       * testsuite/gas/bpf/atomic-pseudoc.s: Likewise.
+       * testsuite/gas/bpf/alu32-pseudoc.s: Likewise.
+       * testsuite/gas/bpf/*.d: Add -pseudoc variants of the tests.
+
 2023-04-20  Guillermo E. Martinez  <guillermo.e.martinez@oracle.com>
 
        PR gas/29728
index aeec5d55f8a0c06d234262b7abc0e2182241fddf..678be3e7c9fed375fdcd8e38aaf7d000248c6015 100644 (file)
@@ -1,4 +1,5 @@
 #name: bad recursive assignments
 #source: assign-bad-recursive.s
 #xfail: bfin-*-*
+#notarget: *bpf-*-*
 #error_output: assign-bad-recursive.l
index fc40b09f217923ca1ea61b6fdebaa2674ecd58bd..d97db14995e21a8ea0beea1ac9753256096cd665 100644 (file)
@@ -2,7 +2,7 @@
 #name: eqv involving dot
 # bfin doesn't support 'symbol = expression'
 # tic30 and tic4x have 4 octets per byte, tic54x has 2 octets per byte
-#notarget: bfin-*-* *c30-*-* *c4x-*-* *c54x-*-*
+#notarget: bfin-*-* *c30-*-* *c4x-*-* *c54x-*-* *bpf-*-*
 # linkrelax targets don't handle equivalence expressions well (nor any
 # other forward expression).  mep uses complex relocs
 #xfail: am33_2.0-*-* crx-*-* h8300-*-* mn10200-*-* mn10300-*-* mep-*-*
index 734634f78d3ea812c4ae49208ea6a8d8274c9841..53d825310e241183d69231923f193a4dac2ceb73 100644 (file)
@@ -105,7 +105,7 @@ if { [istarget "pdp11-*-*"] } then {
     run_dump_test eqv-dot
 }
 
-if { ![istarget "bfin-*-*"] } then {
+if { ![istarget "bfin-*-*"] && ![istarget "bpf-*-*"]  } then {
     gas_test "assign-ok.s" "" "" "== assignment support"
 }
 gas_test_error "assign-bad.s" "" "== assignment for symbol already set"
@@ -403,7 +403,8 @@ if {  ([istarget "i*86-*-*pe*"] && ![istarget "i*86-*-openbsd*"]) \
   gas_test "fastcall.s" ""   "" "fastcall labels"
 }
 
-if { ![istarget "bfin-*-*"] && ![istarget "nds32*-*-*"] } then {
+if { ![istarget "bfin-*-*"] && ![istarget "nds32*-*-*"] \
+    && ![istarget "bpf-*-*"] } then {
     run_dump_test assign
 }
 run_dump_test sleb128
index c4ddbad7d18b01896bff918d6ed825936fe6313e..d42d33bc3cb8f06b1eb97d084fb8276a5a5d38b0 100644 (file)
@@ -1,5 +1,6 @@
 #as: --EB
 #source: alu.s
+#source: alu-pseudoc.s
 #objdump: -dr
 #name: eBPF ALU64 instructions, big endian
 
diff --git a/gas/testsuite/gas/bpf/alu-pseudoc.s b/gas/testsuite/gas/bpf/alu-pseudoc.s
new file mode 100644 (file)
index 0000000..0f79929
--- /dev/null
@@ -0,0 +1,51 @@
+# Tests for the ALU64 eBPF pseudo-C instructions
+        .text
+       r2 += 666
+       r3 += -666
+       r4 += 2125315823
+       r5 += r6
+       r2 -= 666
+       r3 -= -666
+       r4 -= 2125315823
+       r5 -= r6
+       r2 *= 666
+       r3 *= -666
+       r4 *= 2125315823
+       r5 *= r6
+       r2 /= 666
+       r3 /= -666
+       r4 /= 2125315823
+       r5 /= r6
+       r2 |= 666
+       r3 |= -666
+       r4 |= 2125315823
+       r5 |= r6
+       r2 &= 666
+       r3 &= -666
+       r4 &= 2125315823
+       r5 &= r6
+       r2 <<= 666
+       r3 <<= -666
+       r4 <<= 2125315823
+       r5 <<= r6
+       r2 >>= 666
+       r3 >>= -666
+       r4 >>= 2125315823
+       r5 >>= r6
+       r2 %= 0x29a
+       r3 %= -666
+       r4 %= 0x7eadbeef
+       r5 %= r6
+       r2 ^= 666
+       r3 ^= -666
+       r4 ^= 2125315823
+       r5 ^= r6
+       r2 = 666
+       r3 = -666
+       r4 = 2125315823
+       r5 = r6
+       r2 s>>= 666
+       r3 s>>= -666
+       r4 s>>= 2125315823
+       r5 s>>= r6
+       r2 = -r2
index 2c753e2261dd832aab7cd0f0d33c4b816df881ca..2ad744dc84cf76d8fea156d9a2fd32b69bd1475d 100644 (file)
@@ -1,5 +1,6 @@
 #as: --EB
 #source: alu32.s
+#source: alu32-pseudoc.s
 #objdump: -dr
 #name: eBPF ALU instructions, big-endian
 
diff --git a/gas/testsuite/gas/bpf/alu32-pseudoc.s b/gas/testsuite/gas/bpf/alu32-pseudoc.s
new file mode 100644 (file)
index 0000000..a29f6ea
--- /dev/null
@@ -0,0 +1,57 @@
+# Tests for the ALU eBPF pseudo-C instructions
+        .text
+       W2 += 666
+       W3 += -666
+       W4 += 2125315823
+       W5 += w6
+       W2 -= 666
+       W3 -= -666
+       W4 -= 2125315823
+       W5 -= w6
+       W2 *= 666
+       W3 *= -666
+       W4 *= 2125315823
+       w5 *= w6
+       w2 /= 666
+       w3 /= -666
+       w4 /= 2125315823
+       w5 /= w6
+       w2 |= 666
+       w3 |= -666
+       w4 |= 2125315823
+       w5 |= w6
+       w2 &= 666
+       w3 &= -666
+       w4 &= 2125315823
+       w5 &= w6
+       w2 <<= 666
+       w3 <<= -666
+       w4 <<= 2125315823
+       w5 <<= w6
+       w2 >>= 666
+       w3 >>= -666
+       w4 >>= 2125315823
+       w5 >>= w6
+       w2 %= 666
+       w3 %= -666
+       w4 %= 0x7eadbeef
+       w5 %= w6
+       w2 ^= 666
+       w3 ^= -666
+       w4 ^= 2125315823
+       w5 ^= w6
+       w2 = 666
+       w3 = -666
+       w4 = 2125315823
+       w5 = w6
+       w2 s>>= 666
+       w3 s>>= -666
+       w4 s>>= 2125315823
+       w5 s>>= w6
+       w2 = -w2
+       r9 = le16 r9
+       r8 = le32 r8
+       r7 = le64 r7
+       r6 = be16 r6
+       r5 = be32 r5
+       r4 = be64 r4
index d2260fffeb655da5399465f141f2b6616b7888e8..ac5c8341e52cf6ab231b15f0f4d4fa493da12960 100644 (file)
@@ -1,5 +1,7 @@
 #as: --EL
 #objdump: -dr
+#source: alu32.s
+#source: alu32-pseudoc.s
 #name: eBPF ALU instructions
 
 .*: +file format .*bpf.*
index 04161e08acaec8b9d93bdf0ca39dc5dadc0648a5..b252571e5fdc55ec61816c31c2e17a8c280f45fd 100644 (file)
@@ -1,5 +1,6 @@
 #as: --EB
 #source: atomic.s
+#source: atomic-pseudoc.s
 #objdump: -dr
 #name: eBPF atomic instructions, big endian
 
diff --git a/gas/testsuite/gas/bpf/atomic-pseudoc.s b/gas/testsuite/gas/bpf/atomic-pseudoc.s
new file mode 100644 (file)
index 0000000..1a4f218
--- /dev/null
@@ -0,0 +1,4 @@
+        # Test for eBPF ADDW and ADDDW pseudo-C instructions
+        .text
+       lock *(u64 *)(r1 + 7919) += r2
+       lock *(u32 *)(r1 + 7919) += r2
index 1c83cb582abeb56105c639e846e423ac26ff2861..e22d54283def205a078291055907d9af24196d2e 100644 (file)
@@ -1,5 +1,7 @@
 #as: --EL
 #objdump: -dr
+#source: atomic.s
+#source: atomic-pseudoc.s
 #name: eBPF atomic instructions
 
 .*: +file format .*bpf.*
index b0c49a9e23ae88cbcde9f803c4e6e576f063d0ae..1cdaf6dcc08d6aa6ed582b9173d9b5d864c6d60d 100644 (file)
@@ -28,6 +28,7 @@ if {[istarget bpf*-*-*]} {
     run_dump_test exit
     run_dump_test atomic
     run_dump_test data
+    run_dump_test pseudoc-normal
 
     run_dump_test lddw-be
     run_dump_test alu-be
@@ -38,6 +39,7 @@ if {[istarget bpf*-*-*]} {
     run_dump_test exit-be
     run_dump_test atomic-be
     run_dump_test data-be
+    run_dump_test pseudoc-normal-be
 
     run_dump_test indcall-1
     run_list_test indcall-bad-1
diff --git a/gas/testsuite/gas/bpf/indcall-1-pseudoc.s b/gas/testsuite/gas/bpf/indcall-1-pseudoc.s
new file mode 100644 (file)
index 0000000..ede3eac
--- /dev/null
@@ -0,0 +1,13 @@
+
+    .text
+    .align 4
+main:
+       r0 = 1
+       r1 = 1
+       r2 = 2
+       r6 = 56 ll
+       callx r6
+       exit
+bar:
+       r0 = 0
+       exit
index b26e8f8853fc59e67fb00fa7c7e8510b70a2173a..158c75438d7fb6d57e1e454d961b947e3a38bce5 100644 (file)
@@ -1,5 +1,7 @@
 #as: -mxbpf --EL
 #objdump: -mxbpf -dr
+#source: indcall-1.s
+#source: indcall-1-pseudoc.s
 #name: BPF indirect call 1
 
 .*: +file format .*bpf.*
index 510ec6eabf217385c52289b0a5a19e39d6eb930a..8386736ee786512cfe5360d93e05f78551f1f0fa 100644 (file)
@@ -1,3 +1,5 @@
 .*: Assembler messages:
+.* Error: bad expression
 .* Error: illegal operand `call %r6'
+.* Error: unexpected token: '%r6'
 #pass
index 65632e0813be4ffc367dfb3043fda203fb57da58..7e235e69551597f5c72d26064fec5a46339ad6af 100644 (file)
@@ -1,5 +1,6 @@
 #as: --EB
 #source: jump.s
+#source: jump-pseudoc.s
 #objdump: -dr
 #name: eBPF JUMP instructions, big endian
 
diff --git a/gas/testsuite/gas/bpf/jump-pseudoc.s b/gas/testsuite/gas/bpf/jump-pseudoc.s
new file mode 100644 (file)
index 0000000..1331bda
--- /dev/null
@@ -0,0 +1,25 @@
+# Tests for the JUMP pseudo-C instructions
+        .text
+        goto 2f
+        r1 += r1
+1:      if r3 == 3 goto 2f
+        if r3 == r4 goto 2f
+2:      if r3 >= 3 goto 1b
+        if r3 >= r4 goto 1b
+1:      if r3 < 3 goto 1f
+        if r3 < r4 goto  1f
+1:      if r3 <= 3 goto 1f
+        if r3 <= r4 goto 1f
+1:      if r3 & 3 goto 1f
+        if r3 & r4 goto 1f
+1:      if r3 != 3 goto 1f
+        if r3 != r4 goto 1f
+1:      if r3 s> 3 goto 1f
+        if r3 s> r4 goto 1f
+1:      if r3 s>= 3 goto 1f
+        if r3 s>= r4 goto 1f
+1:      if r3 s< 3 goto 1f
+        if r3 s< r4 goto 1f
+1:      if r3 s<= 3 goto 1f
+        if r3 s<= r4 goto 1f
+1:
index ca600f602ba9fc53a9e0424d9367ead4dfb72534..903f70e804342cc9dd10758f92fed4f498f076b2 100644 (file)
@@ -1,5 +1,7 @@
 #as: --EL
 #objdump: -dr
+#source: jump.s
+#source: jump-pseudoc.s
 #name: eBPF JUMP instructions
 
 .*: +file format .*bpf.*
@@ -28,4 +30,4 @@ Disassembly of section .text:
   90:  c5 03 01 00 03 00 00 00         jslt %r3,3,1
   98:  cd 43 00 00 00 00 00 00         jslt %r3,%r4,0
   a0:  d5 03 01 00 03 00 00 00         jsle %r3,3,1
-  a8:  dd 43 00 00 00 00 00 00         jsle %r3,%r4,0
\ No newline at end of file
+  a8:  dd 43 00 00 00 00 00 00         jsle %r3,%r4,0
diff --git a/gas/testsuite/gas/bpf/jump32-pseudoc.s b/gas/testsuite/gas/bpf/jump32-pseudoc.s
new file mode 100644 (file)
index 0000000..0731165
--- /dev/null
@@ -0,0 +1,25 @@
+# Tests for the eBPF JUMP32 pseudo-C instructions
+        .text
+        goto 2f
+        r1 += r1
+1:      if w3 == 3 goto 2f
+        if w3 == w4 goto 2f
+2:      if w3 >= 3 goto 1b
+        if w3 >= w4 goto 1b
+1:      if w3 < 3 goto 1f
+        if w3 < w4 goto 1f
+1:      if w3 <= 3 goto 1f
+        if w3 <= w4 goto 1f
+1:      if w3 & 3 goto 1f
+        if w3 & w4 goto 1f
+1:      if w3 != 3 goto 1f
+        if w3 != w4 goto 1f
+1:      if w3 s> 3 goto 1f
+        if w3 s> w4 goto 1f
+1:      if w3 s>= 3 goto 1f
+        if w3 s>= w4 goto 1f
+1:      if w3 s< 3 goto 1f
+        if w3 s< w4 goto 1f
+1:      if w3 s<= 3 goto 1f
+        if w3 s<= w4 goto 1f
+1:
index 4f5ae2c5aa303f336072043e0d894bc3b69f62bd..ae8683dd69b9d039fac141938f3bcde463fcc3ab 100644 (file)
@@ -1,5 +1,7 @@
 #as: --EL
 #objdump: -dr
+#source: jump32.s
+#source: jump32-pseudoc.s
 #name: eBPF JUMP32 instructions
 
 .*: +file format .*bpf.*
index dc69d3a64d5996155adbe3754491899778456693..b9e60457cde1a61f5b46c3e0e17d67b48e86770c 100644 (file)
@@ -1,5 +1,6 @@
 #as: --EB
 #source: lddw.s
+#source: lddw-pseudoc.s
 #objdump: -dr
 #name: eBPF LDDW, big-endian
 
diff --git a/gas/testsuite/gas/bpf/lddw-pseudoc.s b/gas/testsuite/gas/bpf/lddw-pseudoc.s
new file mode 100644 (file)
index 0000000..9968c5d
--- /dev/null
@@ -0,0 +1,6 @@
+# Tests for the LDDW pseudo-C instruction
+        .text
+        r3 = 1 ll
+        r4 = 0xdeadbeef ll
+        r5 = 0x1122334455667788 ll
+        r6 = -2 ll
index f44e77243535fe390d40db460e89898a31548c8b..042e4dead30048481f52abc08ca78627f7c85850 100644 (file)
@@ -1,5 +1,7 @@
 #as: --EL
 #objdump: -dr
+#source: lddw.s
+#source: lddw-pseudoc.s
 #name: eBPF LDDW
 
 .*: +file format .*bpf.*
index b3dba80c2b67914895101c32ef91289895685e8b..148c55a3491dd5c91ca44f16bf7417c17832ce1b 100644 (file)
@@ -1,5 +1,6 @@
 #as: --EB
 #source: mem.s
+#source: mem-pseudoc.s
 #objdump: -dr
 #name: eBPF MEM instructions, modulus lddw, big endian
 
@@ -27,4 +28,4 @@ Disassembly of section .text:
   80:  72 10 7e ef 11 22 33 44         stb \[%r1\+0x7eef\],0x11223344
   88:  6a 10 7e ef 11 22 33 44         sth \[%r1\+0x7eef\],0x11223344
   90:  62 10 7e ef 11 22 33 44         stw \[%r1\+0x7eef\],0x11223344
-  98:  7a 10 ff fe 11 22 33 44         stdw \[%r1\+-2\],0x11223344
\ No newline at end of file
+  98:  7a 10 ff fe 11 22 33 44         stdw \[%r1\+-2\],0x11223344
diff --git a/gas/testsuite/gas/bpf/mem-pseudoc.s b/gas/testsuite/gas/bpf/mem-pseudoc.s
new file mode 100644 (file)
index 0000000..06c2cfc
--- /dev/null
@@ -0,0 +1,23 @@
+# eBPF tests for MEM pseudo-C instructions, modulus lddw.
+
+        .text
+       r0 = *(u32 *)skb[48879]
+       r0 = *(u16 *)skb[48879]
+       r0 = *(u8 *)skb[48879]
+       r0 = *(u64 *)skb[48879]
+       r0 = *(u32 *)skb[r3 + 0xbeef]
+       r0 = *(u16 *)skb[r5 + 0xbeef]
+       r0 = *(u8 *)skb[r7 + 0xbeef]
+       r0 = *(u64 *)skb[r9 + 0xbeef]
+       r2 = *(u32 *)(r1 + 32495)
+       r2 = *(u16 *)(r1 + 32495)
+       r2 = *(u8 *)(r1 + 32495)
+       r2 = *(u64 *)(r1 - 2)
+       *(u32 *)(r1 + 32495) = r2
+       *(u16 *)(r1 + 32495) = r2
+       *(u8 *)(r1 + 32495) = r2
+       *(u64 *)(r1 - 2) = r2
+       stb [%r1+0x7eef], 0x11223344
+       sth [%r1+0x7eef], 0x11223344
+       stw [%r1+0x7eef], 0x11223344
+       stdw [%r1+-2], 0x11223344
index 0e0b498ea91e61099356fb79a5d9055141d6406c..5f257317057490702cbd0c34c1fc73249c7bfbf8 100644 (file)
@@ -1,5 +1,7 @@
 #as: --EL
 #objdump: -dr
+#source: mem.s
+#source: mem-pseudoc.s
 #name: eBPF MEM instructions, modulus lddw
 
 .*: +file format .*bpf.*
diff --git a/gas/testsuite/gas/bpf/pseudoc-normal-be.d b/gas/testsuite/gas/bpf/pseudoc-normal-be.d
new file mode 100644 (file)
index 0000000..7a577ed
--- /dev/null
@@ -0,0 +1,214 @@
+#as: --EB
+#objdump: -dr
+#source: pseudoc-normal.s
+#name: eBPF clang (pseudo-C)/gas (normal) instructions
+
+.*: +file format .*bpf.*
+
+Disassembly of section .text:
+
+0+ <beg>:
+   0:  07 10 00 00 00 00 00 aa         add %r1,0xaa
+   8:  07 10 00 00 00 00 00 aa         add %r1,0xaa
+  10:  0f 12 00 00 00 00 00 00         add %r1,%r2
+  18:  0f 12 00 00 00 00 00 00         add %r1,%r2
+  20:  17 10 00 00 00 00 00 aa         sub %r1,0xaa
+  28:  17 10 00 00 00 00 00 aa         sub %r1,0xaa
+  30:  1f 12 00 00 00 00 00 00         sub %r1,%r2
+  38:  1f 12 00 00 00 00 00 00         sub %r1,%r2
+  40:  27 10 00 00 00 00 00 aa         mul %r1,0xaa
+  48:  27 10 00 00 00 00 00 aa         mul %r1,0xaa
+  50:  2f 12 00 00 00 00 00 00         mul %r1,%r2
+  58:  2f 12 00 00 00 00 00 00         mul %r1,%r2
+  60:  37 10 00 00 00 00 00 aa         div %r1,0xaa
+  68:  37 10 00 00 00 00 00 aa         div %r1,0xaa
+  70:  3f 12 00 00 00 00 00 00         div %r1,%r2
+  78:  3f 12 00 00 00 00 00 00         div %r1,%r2
+  80:  47 10 00 00 00 00 00 aa         or %r1,0xaa
+  88:  47 10 00 00 00 00 00 aa         or %r1,0xaa
+  90:  4f 12 00 00 00 00 00 00         or %r1,%r2
+  98:  4f 12 00 00 00 00 00 00         or %r1,%r2
+  a0:  57 10 00 00 00 00 00 aa         and %r1,0xaa
+  a8:  57 10 00 00 00 00 00 aa         and %r1,0xaa
+  b0:  5f 12 00 00 00 00 00 00         and %r1,%r2
+  b8:  5f 12 00 00 00 00 00 00         and %r1,%r2
+  c0:  67 10 00 00 00 00 00 aa         lsh %r1,0xaa
+  c8:  67 10 00 00 00 00 00 aa         lsh %r1,0xaa
+  d0:  6f 12 00 00 00 00 00 00         lsh %r1,%r2
+  d8:  6f 12 00 00 00 00 00 00         lsh %r1,%r2
+  e0:  77 10 00 00 00 00 00 aa         rsh %r1,0xaa
+  e8:  77 10 00 00 00 00 00 aa         rsh %r1,0xaa
+  f0:  7f 12 00 00 00 00 00 00         rsh %r1,%r2
+  f8:  7f 12 00 00 00 00 00 00         rsh %r1,%r2
+ 100:  a7 10 00 00 00 00 00 aa         xor %r1,0xaa
+ 108:  a7 10 00 00 00 00 00 aa         xor %r1,0xaa
+ 110:  af 12 00 00 00 00 00 00         xor %r1,%r2
+ 118:  af 12 00 00 00 00 00 00         xor %r1,%r2
+ 120:  b7 10 00 00 00 00 00 aa         mov %r1,0xaa
+ 128:  b7 10 00 00 00 00 00 aa         mov %r1,0xaa
+ 130:  bf 12 00 00 00 00 00 00         mov %r1,%r2
+ 138:  bf 12 00 00 00 00 00 00         mov %r1,%r2
+ 140:  c7 10 00 00 00 00 00 aa         arsh %r1,0xaa
+ 148:  c7 10 00 00 00 00 00 aa         arsh %r1,0xaa
+ 150:  cf 12 00 00 00 00 00 00         arsh %r1,%r2
+ 158:  cf 12 00 00 00 00 00 00         arsh %r1,%r2
+ 160:  87 10 00 00 00 00 00 00         neg %r1
+ 168:  87 10 00 00 00 00 00 00         neg %r1
+ 170:  04 10 00 00 00 00 00 aa         add32 %r1,0xaa
+ 178:  04 10 00 00 00 00 00 aa         add32 %r1,0xaa
+ 180:  0c 12 00 00 00 00 00 00         add32 %r1,%r2
+ 188:  0c 12 00 00 00 00 00 00         add32 %r1,%r2
+ 190:  14 10 00 00 00 00 00 aa         sub32 %r1,0xaa
+ 198:  14 10 00 00 00 00 00 aa         sub32 %r1,0xaa
+ 1a0:  1c 12 00 00 00 00 00 00         sub32 %r1,%r2
+ 1a8:  1c 12 00 00 00 00 00 00         sub32 %r1,%r2
+ 1b0:  24 10 00 00 00 00 00 aa         mul32 %r1,0xaa
+ 1b8:  24 10 00 00 00 00 00 aa         mul32 %r1,0xaa
+ 1c0:  2c 12 00 00 00 00 00 00         mul32 %r1,%r2
+ 1c8:  2c 12 00 00 00 00 00 00         mul32 %r1,%r2
+ 1d0:  34 10 00 00 00 00 00 aa         div32 %r1,0xaa
+ 1d8:  34 10 00 00 00 00 00 aa         div32 %r1,0xaa
+ 1e0:  3c 12 00 00 00 00 00 00         div32 %r1,%r2
+ 1e8:  3c 12 00 00 00 00 00 00         div32 %r1,%r2
+ 1f0:  44 10 00 00 00 00 00 aa         or32 %r1,0xaa
+ 1f8:  44 10 00 00 00 00 00 aa         or32 %r1,0xaa
+ 200:  4c 12 00 00 00 00 00 00         or32 %r1,%r2
+ 208:  4c 12 00 00 00 00 00 00         or32 %r1,%r2
+ 210:  54 10 00 00 00 00 00 aa         and32 %r1,0xaa
+ 218:  54 10 00 00 00 00 00 aa         and32 %r1,0xaa
+ 220:  5c 12 00 00 00 00 00 00         and32 %r1,%r2
+ 228:  5c 12 00 00 00 00 00 00         and32 %r1,%r2
+ 230:  64 10 00 00 00 00 00 aa         lsh32 %r1,0xaa
+ 238:  64 10 00 00 00 00 00 aa         lsh32 %r1,0xaa
+ 240:  6c 12 00 00 00 00 00 00         lsh32 %r1,%r2
+ 248:  6c 12 00 00 00 00 00 00         lsh32 %r1,%r2
+ 250:  74 10 00 00 00 00 00 aa         rsh32 %r1,0xaa
+ 258:  74 10 00 00 00 00 00 aa         rsh32 %r1,0xaa
+ 260:  7c 12 00 00 00 00 00 00         rsh32 %r1,%r2
+ 268:  7c 12 00 00 00 00 00 00         rsh32 %r1,%r2
+ 270:  a4 10 00 00 00 00 00 aa         xor32 %r1,0xaa
+ 278:  a4 10 00 00 00 00 00 aa         xor32 %r1,0xaa
+ 280:  ac 12 00 00 00 00 00 00         xor32 %r1,%r2
+ 288:  ac 12 00 00 00 00 00 00         xor32 %r1,%r2
+ 290:  b4 10 00 00 00 00 00 aa         mov32 %r1,0xaa
+ 298:  b4 10 00 00 00 00 00 aa         mov32 %r1,0xaa
+ 2a0:  bc 12 00 00 00 00 00 00         mov32 %r1,%r2
+ 2a8:  bc 12 00 00 00 00 00 00         mov32 %r1,%r2
+ 2b0:  c4 10 00 00 00 00 00 aa         arsh32 %r1,0xaa
+ 2b8:  c4 10 00 00 00 00 00 aa         arsh32 %r1,0xaa
+ 2c0:  cc 12 00 00 00 00 00 00         arsh32 %r1,%r2
+ 2c8:  cc 12 00 00 00 00 00 00         arsh32 %r1,%r2
+ 2d0:  84 10 00 00 00 00 00 00         neg32 %r1
+ 2d8:  84 10 00 00 00 00 00 00         neg32 %r1
+ 2e0:  d4 10 00 00 00 00 00 10         endle %r1,16
+ 2e8:  d4 10 00 00 00 00 00 10         endle %r1,16
+ 2f0:  d4 10 00 00 00 00 00 20         endle %r1,32
+ 2f8:  d4 10 00 00 00 00 00 20         endle %r1,32
+ 300:  d4 10 00 00 00 00 00 40         endle %r1,64
+ 308:  d4 10 00 00 00 00 00 40         endle %r1,64
+ 310:  dc 10 00 00 00 00 00 10         endbe %r1,16
+ 318:  dc 10 00 00 00 00 00 10         endbe %r1,16
+ 320:  dc 10 00 00 00 00 00 20         endbe %r1,32
+ 328:  dc 10 00 00 00 00 00 20         endbe %r1,32
+ 330:  dc 10 00 00 00 00 00 40         endbe %r1,64
+ 338:  dc 10 00 00 00 00 00 40         endbe %r1,64
+ 340:  71 12 00 aa 00 00 00 00         ldxb %r1,\[%r2\+0xaa\]
+ 348:  71 12 00 aa 00 00 00 00         ldxb %r1,\[%r2\+0xaa\]
+ 350:  69 12 00 aa 00 00 00 00         ldxh %r1,\[%r2\+0xaa\]
+ 358:  69 12 00 aa 00 00 00 00         ldxh %r1,\[%r2\+0xaa\]
+ 360:  61 12 00 aa 00 00 00 00         ldxw %r1,\[%r2\+0xaa\]
+ 368:  61 12 00 aa 00 00 00 00         ldxw %r1,\[%r2\+0xaa\]
+ 370:  79 12 00 aa 00 00 00 00         ldxdw %r1,\[%r2\+0xaa\]
+ 378:  79 12 00 aa 00 00 00 00         ldxdw %r1,\[%r2\+0xaa\]
+ 380:  73 12 00 aa 00 00 00 00         stxb \[%r1\+0xaa\],%r2
+ 388:  73 12 00 aa 00 00 00 00         stxb \[%r1\+0xaa\],%r2
+ 390:  6b 12 00 aa 00 00 00 00         stxh \[%r1\+0xaa\],%r2
+ 398:  6b 12 00 aa 00 00 00 00         stxh \[%r1\+0xaa\],%r2
+ 3a0:  63 12 00 aa 00 00 00 00         stxw \[%r1\+0xaa\],%r2
+ 3a8:  63 12 00 aa 00 00 00 00         stxw \[%r1\+0xaa\],%r2
+ 3b0:  7b 12 00 aa 00 00 00 00         stxdw \[%r1\+0xaa\],%r2
+ 3b8:  7b 12 00 aa 00 00 00 00         stxdw \[%r1\+0xaa\],%r2
+ 3c0:  05 00 00 bb 00 00 00 00         ja 187
+ 3c8:  05 00 00 bb 00 00 00 00         ja 187
+ 3d0:  15 10 00 bb 00 00 00 aa         jeq %r1,0xaa,187
+ 3d8:  15 10 00 bb 00 00 00 aa         jeq %r1,0xaa,187
+ 3e0:  1d 12 00 bb 00 00 00 00         jeq %r1,%r2,187
+ 3e8:  1d 12 00 bb 00 00 00 00         jeq %r1,%r2,187
+ 3f0:  25 10 00 bb 00 00 00 aa         jgt %r1,0xaa,187
+ 3f8:  25 10 00 bb 00 00 00 aa         jgt %r1,0xaa,187
+ 400:  2d 12 00 bb 00 00 00 00         jgt %r1,%r2,187
+ 408:  2d 12 00 bb 00 00 00 00         jgt %r1,%r2,187
+ 410:  35 10 00 bb 00 00 00 aa         jge %r1,0xaa,187
+ 418:  35 10 00 bb 00 00 00 aa         jge %r1,0xaa,187
+ 420:  3d 12 00 bb 00 00 00 00         jge %r1,%r2,187
+ 428:  3d 12 00 bb 00 00 00 00         jge %r1,%r2,187
+ 430:  a5 10 00 bb 00 00 00 aa         jlt %r1,0xaa,187
+ 438:  a5 10 00 bb 00 00 00 aa         jlt %r1,0xaa,187
+ 440:  ad 12 00 bb 00 00 00 00         jlt %r1,%r2,187
+ 448:  ad 12 00 bb 00 00 00 00         jlt %r1,%r2,187
+ 450:  b5 10 00 bb 00 00 00 aa         jle %r1,0xaa,187
+ 458:  b5 10 00 bb 00 00 00 aa         jle %r1,0xaa,187
+ 460:  bd 12 00 bb 00 00 00 00         jle %r1,%r2,187
+ 468:  bd 12 00 bb 00 00 00 00         jle %r1,%r2,187
+ 470:  45 10 00 bb 00 00 00 aa         jset %r1,0xaa,187
+ 478:  45 10 00 bb 00 00 00 aa         jset %r1,0xaa,187
+ 480:  4d 12 00 bb 00 00 00 00         jset %r1,%r2,187
+ 488:  4d 12 00 bb 00 00 00 00         jset %r1,%r2,187
+ 490:  55 10 00 bb 00 00 00 aa         jne %r1,0xaa,187
+ 498:  55 10 00 bb 00 00 00 aa         jne %r1,0xaa,187
+ 4a0:  5d 12 00 bb 00 00 00 00         jne %r1,%r2,187
+ 4a8:  5d 12 00 bb 00 00 00 00         jne %r1,%r2,187
+ 4b0:  65 10 00 bb 00 00 00 aa         jsgt %r1,0xaa,187
+ 4b8:  65 10 00 bb 00 00 00 aa         jsgt %r1,0xaa,187
+ 4c0:  6d 12 00 bb 00 00 00 00         jsgt %r1,%r2,187
+ 4c8:  6d 12 00 bb 00 00 00 00         jsgt %r1,%r2,187
+ 4d0:  75 10 00 bb 00 00 00 aa         jsge %r1,0xaa,187
+ 4d8:  75 10 00 bb 00 00 00 aa         jsge %r1,0xaa,187
+ 4e0:  7d 12 00 bb 00 00 00 00         jsge %r1,%r2,187
+ 4e8:  7d 12 00 bb 00 00 00 00         jsge %r1,%r2,187
+ 4f0:  c5 10 00 bb 00 00 00 aa         jslt %r1,0xaa,187
+ 4f8:  c5 10 00 bb 00 00 00 aa         jslt %r1,0xaa,187
+ 500:  cd 12 00 bb 00 00 00 00         jslt %r1,%r2,187
+ 508:  cd 12 00 bb 00 00 00 00         jslt %r1,%r2,187
+ 510:  d5 10 00 bb 00 00 00 aa         jsle %r1,0xaa,187
+ 518:  d5 10 00 bb 00 00 00 aa         jsle %r1,0xaa,187
+ 520:  dd 12 00 bb 00 00 00 00         jsle %r1,%r2,187
+ 528:  dd 12 00 bb 00 00 00 00         jsle %r1,%r2,187
+ 530:  85 00 00 00 00 00 00 aa         call 170
+ 538:  85 00 00 00 00 00 00 aa         call 170
+ 540:  95 00 00 00 00 00 00 00         exit
+ 548:  95 00 00 00 00 00 00 00         exit
+ 550:  b7 60 00 00 00 00 06 20         mov %r6,0x620
+ 558:  95 00 00 00 00 00 00 00         exit
+ 560:  20 00 00 00 00 00 00 aa         ldabsw 0xaa
+ 568:  20 00 00 00 00 00 00 aa         ldabsw 0xaa
+ 570:  50 07 00 00 00 00 00 aa         ldindb %r7,0xaa
+ 578:  50 07 00 00 00 00 00 aa         ldindb %r7,0xaa
+ 580:  20 00 00 00 00 00 00 aa         ldabsw 0xaa
+ 588:  20 00 00 00 00 00 00 aa         ldabsw 0xaa
+ 590:  50 07 00 00 00 00 00 aa         ldindb %r7,0xaa
+ 598:  50 07 00 00 00 00 00 aa         ldindb %r7,0xaa
+ 5a0:  18 30 00 00 00 00 00 01         lddw %r3,1
+ 5a8:  00 00 00 00 00 00 00 00 
+ 5b0:  18 30 00 00 00 00 00 01         lddw %r3,1
+ 5b8:  00 00 00 00 00 00 00 00 
+ 5c0:  18 40 00 00 ee ff 77 88         lddw %r4,-6144092013047351416
+ 5c8:  00 00 00 00 aa bb cc dd 
+ 5d0:  18 40 00 00 ee ff 77 88         lddw %r4,-6144092013047351416
+ 5d8:  00 00 00 00 aa bb cc dd 
+ 5e0:  18 50 00 00 55 66 77 88         lddw %r5,0x1122334455667788
+ 5e8:  00 00 00 00 11 22 33 44 
+ 5f0:  18 50 00 00 55 66 77 88         lddw %r5,0x1122334455667788
+ 5f8:  00 00 00 00 11 22 33 44 
+ 600:  18 60 00 00 00 00 06 20         lddw %r6,0x620
+ 608:  00 00 00 00 00 00 00 00 
+                       600: R_BPF_64_64        .text
+ 610:  18 60 00 00 00 00 06 20         lddw %r6,0x620
+ 618:  00 00 00 00 00 00 00 00 
+                       610: R_BPF_64_64        .text
+
+0000000000000620 <main>:
+ 620:  c3 12 00 aa 00 00 00 00         xaddw \[%r1\+0xaa\],%r2
+ 628:  c3 12 00 aa 00 00 00 00         xaddw \[%r1\+0xaa\],%r2
+ 630:  db 12 00 aa 00 00 00 00         xadddw \[%r1\+0xaa\],%r2
+ 638:  db 12 00 aa 00 00 00 00         xadddw \[%r1\+0xaa\],%r2
diff --git a/gas/testsuite/gas/bpf/pseudoc-normal.d b/gas/testsuite/gas/bpf/pseudoc-normal.d
new file mode 100644 (file)
index 0000000..5bece2a
--- /dev/null
@@ -0,0 +1,214 @@
+#as: --EL
+#objdump: -dr
+#source: pseudoc-normal.s
+#name: eBPF clang (pseudo-C)/gas (normal) instructions
+
+.*: +file format .*bpf.*
+
+Disassembly of section .text:
+
+0+ <beg>:
+   0:  07 01 00 00 aa 00 00 00         add %r1,0xaa
+   8:  07 01 00 00 aa 00 00 00         add %r1,0xaa
+  10:  0f 21 00 00 00 00 00 00         add %r1,%r2
+  18:  0f 21 00 00 00 00 00 00         add %r1,%r2
+  20:  17 01 00 00 aa 00 00 00         sub %r1,0xaa
+  28:  17 01 00 00 aa 00 00 00         sub %r1,0xaa
+  30:  1f 21 00 00 00 00 00 00         sub %r1,%r2
+  38:  1f 21 00 00 00 00 00 00         sub %r1,%r2
+  40:  27 01 00 00 aa 00 00 00         mul %r1,0xaa
+  48:  27 01 00 00 aa 00 00 00         mul %r1,0xaa
+  50:  2f 21 00 00 00 00 00 00         mul %r1,%r2
+  58:  2f 21 00 00 00 00 00 00         mul %r1,%r2
+  60:  37 01 00 00 aa 00 00 00         div %r1,0xaa
+  68:  37 01 00 00 aa 00 00 00         div %r1,0xaa
+  70:  3f 21 00 00 00 00 00 00         div %r1,%r2
+  78:  3f 21 00 00 00 00 00 00         div %r1,%r2
+  80:  47 01 00 00 aa 00 00 00         or %r1,0xaa
+  88:  47 01 00 00 aa 00 00 00         or %r1,0xaa
+  90:  4f 21 00 00 00 00 00 00         or %r1,%r2
+  98:  4f 21 00 00 00 00 00 00         or %r1,%r2
+  a0:  57 01 00 00 aa 00 00 00         and %r1,0xaa
+  a8:  57 01 00 00 aa 00 00 00         and %r1,0xaa
+  b0:  5f 21 00 00 00 00 00 00         and %r1,%r2
+  b8:  5f 21 00 00 00 00 00 00         and %r1,%r2
+  c0:  67 01 00 00 aa 00 00 00         lsh %r1,0xaa
+  c8:  67 01 00 00 aa 00 00 00         lsh %r1,0xaa
+  d0:  6f 21 00 00 00 00 00 00         lsh %r1,%r2
+  d8:  6f 21 00 00 00 00 00 00         lsh %r1,%r2
+  e0:  77 01 00 00 aa 00 00 00         rsh %r1,0xaa
+  e8:  77 01 00 00 aa 00 00 00         rsh %r1,0xaa
+  f0:  7f 21 00 00 00 00 00 00         rsh %r1,%r2
+  f8:  7f 21 00 00 00 00 00 00         rsh %r1,%r2
+ 100:  a7 01 00 00 aa 00 00 00         xor %r1,0xaa
+ 108:  a7 01 00 00 aa 00 00 00         xor %r1,0xaa
+ 110:  af 21 00 00 00 00 00 00         xor %r1,%r2
+ 118:  af 21 00 00 00 00 00 00         xor %r1,%r2
+ 120:  b7 01 00 00 aa 00 00 00         mov %r1,0xaa
+ 128:  b7 01 00 00 aa 00 00 00         mov %r1,0xaa
+ 130:  bf 21 00 00 00 00 00 00         mov %r1,%r2
+ 138:  bf 21 00 00 00 00 00 00         mov %r1,%r2
+ 140:  c7 01 00 00 aa 00 00 00         arsh %r1,0xaa
+ 148:  c7 01 00 00 aa 00 00 00         arsh %r1,0xaa
+ 150:  cf 21 00 00 00 00 00 00         arsh %r1,%r2
+ 158:  cf 21 00 00 00 00 00 00         arsh %r1,%r2
+ 160:  87 01 00 00 00 00 00 00         neg %r1
+ 168:  87 01 00 00 00 00 00 00         neg %r1
+ 170:  04 01 00 00 aa 00 00 00         add32 %r1,0xaa
+ 178:  04 01 00 00 aa 00 00 00         add32 %r1,0xaa
+ 180:  0c 21 00 00 00 00 00 00         add32 %r1,%r2
+ 188:  0c 21 00 00 00 00 00 00         add32 %r1,%r2
+ 190:  14 01 00 00 aa 00 00 00         sub32 %r1,0xaa
+ 198:  14 01 00 00 aa 00 00 00         sub32 %r1,0xaa
+ 1a0:  1c 21 00 00 00 00 00 00         sub32 %r1,%r2
+ 1a8:  1c 21 00 00 00 00 00 00         sub32 %r1,%r2
+ 1b0:  24 01 00 00 aa 00 00 00         mul32 %r1,0xaa
+ 1b8:  24 01 00 00 aa 00 00 00         mul32 %r1,0xaa
+ 1c0:  2c 21 00 00 00 00 00 00         mul32 %r1,%r2
+ 1c8:  2c 21 00 00 00 00 00 00         mul32 %r1,%r2
+ 1d0:  34 01 00 00 aa 00 00 00         div32 %r1,0xaa
+ 1d8:  34 01 00 00 aa 00 00 00         div32 %r1,0xaa
+ 1e0:  3c 21 00 00 00 00 00 00         div32 %r1,%r2
+ 1e8:  3c 21 00 00 00 00 00 00         div32 %r1,%r2
+ 1f0:  44 01 00 00 aa 00 00 00         or32 %r1,0xaa
+ 1f8:  44 01 00 00 aa 00 00 00         or32 %r1,0xaa
+ 200:  4c 21 00 00 00 00 00 00         or32 %r1,%r2
+ 208:  4c 21 00 00 00 00 00 00         or32 %r1,%r2
+ 210:  54 01 00 00 aa 00 00 00         and32 %r1,0xaa
+ 218:  54 01 00 00 aa 00 00 00         and32 %r1,0xaa
+ 220:  5c 21 00 00 00 00 00 00         and32 %r1,%r2
+ 228:  5c 21 00 00 00 00 00 00         and32 %r1,%r2
+ 230:  64 01 00 00 aa 00 00 00         lsh32 %r1,0xaa
+ 238:  64 01 00 00 aa 00 00 00         lsh32 %r1,0xaa
+ 240:  6c 21 00 00 00 00 00 00         lsh32 %r1,%r2
+ 248:  6c 21 00 00 00 00 00 00         lsh32 %r1,%r2
+ 250:  74 01 00 00 aa 00 00 00         rsh32 %r1,0xaa
+ 258:  74 01 00 00 aa 00 00 00         rsh32 %r1,0xaa
+ 260:  7c 21 00 00 00 00 00 00         rsh32 %r1,%r2
+ 268:  7c 21 00 00 00 00 00 00         rsh32 %r1,%r2
+ 270:  a4 01 00 00 aa 00 00 00         xor32 %r1,0xaa
+ 278:  a4 01 00 00 aa 00 00 00         xor32 %r1,0xaa
+ 280:  ac 21 00 00 00 00 00 00         xor32 %r1,%r2
+ 288:  ac 21 00 00 00 00 00 00         xor32 %r1,%r2
+ 290:  b4 01 00 00 aa 00 00 00         mov32 %r1,0xaa
+ 298:  b4 01 00 00 aa 00 00 00         mov32 %r1,0xaa
+ 2a0:  bc 21 00 00 00 00 00 00         mov32 %r1,%r2
+ 2a8:  bc 21 00 00 00 00 00 00         mov32 %r1,%r2
+ 2b0:  c4 01 00 00 aa 00 00 00         arsh32 %r1,0xaa
+ 2b8:  c4 01 00 00 aa 00 00 00         arsh32 %r1,0xaa
+ 2c0:  cc 21 00 00 00 00 00 00         arsh32 %r1,%r2
+ 2c8:  cc 21 00 00 00 00 00 00         arsh32 %r1,%r2
+ 2d0:  84 01 00 00 00 00 00 00         neg32 %r1
+ 2d8:  84 01 00 00 00 00 00 00         neg32 %r1
+ 2e0:  d4 01 00 00 10 00 00 00         endle %r1,16
+ 2e8:  d4 01 00 00 10 00 00 00         endle %r1,16
+ 2f0:  d4 01 00 00 20 00 00 00         endle %r1,32
+ 2f8:  d4 01 00 00 20 00 00 00         endle %r1,32
+ 300:  d4 01 00 00 40 00 00 00         endle %r1,64
+ 308:  d4 01 00 00 40 00 00 00         endle %r1,64
+ 310:  dc 01 00 00 10 00 00 00         endbe %r1,16
+ 318:  dc 01 00 00 10 00 00 00         endbe %r1,16
+ 320:  dc 01 00 00 20 00 00 00         endbe %r1,32
+ 328:  dc 01 00 00 20 00 00 00         endbe %r1,32
+ 330:  dc 01 00 00 40 00 00 00         endbe %r1,64
+ 338:  dc 01 00 00 40 00 00 00         endbe %r1,64
+ 340:  71 21 aa 00 00 00 00 00         ldxb %r1,\[%r2\+0xaa\]
+ 348:  71 21 aa 00 00 00 00 00         ldxb %r1,\[%r2\+0xaa\]
+ 350:  69 21 aa 00 00 00 00 00         ldxh %r1,\[%r2\+0xaa\]
+ 358:  69 21 aa 00 00 00 00 00         ldxh %r1,\[%r2\+0xaa\]
+ 360:  61 21 aa 00 00 00 00 00         ldxw %r1,\[%r2\+0xaa\]
+ 368:  61 21 aa 00 00 00 00 00         ldxw %r1,\[%r2\+0xaa\]
+ 370:  79 21 aa 00 00 00 00 00         ldxdw %r1,\[%r2\+0xaa\]
+ 378:  79 21 aa 00 00 00 00 00         ldxdw %r1,\[%r2\+0xaa\]
+ 380:  73 21 aa 00 00 00 00 00         stxb \[%r1\+0xaa\],%r2
+ 388:  73 21 aa 00 00 00 00 00         stxb \[%r1\+0xaa\],%r2
+ 390:  6b 21 aa 00 00 00 00 00         stxh \[%r1\+0xaa\],%r2
+ 398:  6b 21 aa 00 00 00 00 00         stxh \[%r1\+0xaa\],%r2
+ 3a0:  63 21 aa 00 00 00 00 00         stxw \[%r1\+0xaa\],%r2
+ 3a8:  63 21 aa 00 00 00 00 00         stxw \[%r1\+0xaa\],%r2
+ 3b0:  7b 21 aa 00 00 00 00 00         stxdw \[%r1\+0xaa\],%r2
+ 3b8:  7b 21 aa 00 00 00 00 00         stxdw \[%r1\+0xaa\],%r2
+ 3c0:  05 00 bb 00 00 00 00 00         ja 187
+ 3c8:  05 00 bb 00 00 00 00 00         ja 187
+ 3d0:  15 01 bb 00 aa 00 00 00         jeq %r1,0xaa,187
+ 3d8:  15 01 bb 00 aa 00 00 00         jeq %r1,0xaa,187
+ 3e0:  1d 21 bb 00 00 00 00 00         jeq %r1,%r2,187
+ 3e8:  1d 21 bb 00 00 00 00 00         jeq %r1,%r2,187
+ 3f0:  25 01 bb 00 aa 00 00 00         jgt %r1,0xaa,187
+ 3f8:  25 01 bb 00 aa 00 00 00         jgt %r1,0xaa,187
+ 400:  2d 21 bb 00 00 00 00 00         jgt %r1,%r2,187
+ 408:  2d 21 bb 00 00 00 00 00         jgt %r1,%r2,187
+ 410:  35 01 bb 00 aa 00 00 00         jge %r1,0xaa,187
+ 418:  35 01 bb 00 aa 00 00 00         jge %r1,0xaa,187
+ 420:  3d 21 bb 00 00 00 00 00         jge %r1,%r2,187
+ 428:  3d 21 bb 00 00 00 00 00         jge %r1,%r2,187
+ 430:  a5 01 bb 00 aa 00 00 00         jlt %r1,0xaa,187
+ 438:  a5 01 bb 00 aa 00 00 00         jlt %r1,0xaa,187
+ 440:  ad 21 bb 00 00 00 00 00         jlt %r1,%r2,187
+ 448:  ad 21 bb 00 00 00 00 00         jlt %r1,%r2,187
+ 450:  b5 01 bb 00 aa 00 00 00         jle %r1,0xaa,187
+ 458:  b5 01 bb 00 aa 00 00 00         jle %r1,0xaa,187
+ 460:  bd 21 bb 00 00 00 00 00         jle %r1,%r2,187
+ 468:  bd 21 bb 00 00 00 00 00         jle %r1,%r2,187
+ 470:  45 01 bb 00 aa 00 00 00         jset %r1,0xaa,187
+ 478:  45 01 bb 00 aa 00 00 00         jset %r1,0xaa,187
+ 480:  4d 21 bb 00 00 00 00 00         jset %r1,%r2,187
+ 488:  4d 21 bb 00 00 00 00 00         jset %r1,%r2,187
+ 490:  55 01 bb 00 aa 00 00 00         jne %r1,0xaa,187
+ 498:  55 01 bb 00 aa 00 00 00         jne %r1,0xaa,187
+ 4a0:  5d 21 bb 00 00 00 00 00         jne %r1,%r2,187
+ 4a8:  5d 21 bb 00 00 00 00 00         jne %r1,%r2,187
+ 4b0:  65 01 bb 00 aa 00 00 00         jsgt %r1,0xaa,187
+ 4b8:  65 01 bb 00 aa 00 00 00         jsgt %r1,0xaa,187
+ 4c0:  6d 21 bb 00 00 00 00 00         jsgt %r1,%r2,187
+ 4c8:  6d 21 bb 00 00 00 00 00         jsgt %r1,%r2,187
+ 4d0:  75 01 bb 00 aa 00 00 00         jsge %r1,0xaa,187
+ 4d8:  75 01 bb 00 aa 00 00 00         jsge %r1,0xaa,187
+ 4e0:  7d 21 bb 00 00 00 00 00         jsge %r1,%r2,187
+ 4e8:  7d 21 bb 00 00 00 00 00         jsge %r1,%r2,187
+ 4f0:  c5 01 bb 00 aa 00 00 00         jslt %r1,0xaa,187
+ 4f8:  c5 01 bb 00 aa 00 00 00         jslt %r1,0xaa,187
+ 500:  cd 21 bb 00 00 00 00 00         jslt %r1,%r2,187
+ 508:  cd 21 bb 00 00 00 00 00         jslt %r1,%r2,187
+ 510:  d5 01 bb 00 aa 00 00 00         jsle %r1,0xaa,187
+ 518:  d5 01 bb 00 aa 00 00 00         jsle %r1,0xaa,187
+ 520:  dd 21 bb 00 00 00 00 00         jsle %r1,%r2,187
+ 528:  dd 21 bb 00 00 00 00 00         jsle %r1,%r2,187
+ 530:  85 00 00 00 aa 00 00 00         call 170
+ 538:  85 00 00 00 aa 00 00 00         call 170
+ 540:  95 00 00 00 00 00 00 00         exit
+ 548:  95 00 00 00 00 00 00 00         exit
+ 550:  b7 06 00 00 20 06 00 00         mov %r6,0x620
+ 558:  95 00 00 00 00 00 00 00         exit
+ 560:  20 00 00 00 aa 00 00 00         ldabsw 0xaa
+ 568:  20 00 00 00 aa 00 00 00         ldabsw 0xaa
+ 570:  50 70 00 00 aa 00 00 00         ldindb %r7,0xaa
+ 578:  50 70 00 00 aa 00 00 00         ldindb %r7,0xaa
+ 580:  20 00 00 00 aa 00 00 00         ldabsw 0xaa
+ 588:  20 00 00 00 aa 00 00 00         ldabsw 0xaa
+ 590:  50 70 00 00 aa 00 00 00         ldindb %r7,0xaa
+ 598:  50 70 00 00 aa 00 00 00         ldindb %r7,0xaa
+ 5a0:  18 03 00 00 01 00 00 00         lddw %r3,1
+ 5a8:  00 00 00 00 00 00 00 00 
+ 5b0:  18 03 00 00 01 00 00 00         lddw %r3,1
+ 5b8:  00 00 00 00 00 00 00 00 
+ 5c0:  18 04 00 00 88 77 ff ee         lddw %r4,-6144092013047351416
+ 5c8:  00 00 00 00 dd cc bb aa 
+ 5d0:  18 04 00 00 88 77 ff ee         lddw %r4,-6144092013047351416
+ 5d8:  00 00 00 00 dd cc bb aa 
+ 5e0:  18 05 00 00 88 77 66 55         lddw %r5,0x1122334455667788
+ 5e8:  00 00 00 00 44 33 22 11 
+ 5f0:  18 05 00 00 88 77 66 55         lddw %r5,0x1122334455667788
+ 5f8:  00 00 00 00 44 33 22 11 
+ 600:  18 06 00 00 20 06 00 00         lddw %r6,0x620
+ 608:  00 00 00 00 00 00 00 00 
+                       600: R_BPF_64_64        .text
+ 610:  18 06 00 00 20 06 00 00         lddw %r6,0x620
+ 618:  00 00 00 00 00 00 00 00 
+                       610: R_BPF_64_64        .text
+
+0000000000000620 <main>:
+ 620:  c3 21 aa 00 00 00 00 00         xaddw \[%r1\+0xaa\],%r2
+ 628:  c3 21 aa 00 00 00 00 00         xaddw \[%r1\+0xaa\],%r2
+ 630:  db 21 aa 00 00 00 00 00         xadddw \[%r1\+0xaa\],%r2
+ 638:  db 21 aa 00 00 00 00 00         xadddw \[%r1\+0xaa\],%r2
diff --git a/gas/testsuite/gas/bpf/pseudoc-normal.s b/gas/testsuite/gas/bpf/pseudoc-normal.s
new file mode 100644 (file)
index 0000000..b3467d1
--- /dev/null
@@ -0,0 +1,196 @@
+# Tests for mixing pseudo-C and normal eBPF instructions
+beg:
+        .text
+       add %r1,0xaa
+       r1 += 0xaa
+       add %r1,%r2
+       r1 += r2
+       sub %r1,0xaa
+       r1 -= 0xaa
+       sub %r1,%r2
+       r1 -= r2
+       mul %r1,0xaa
+       r1 *= 0xaa
+       mul %r1,%r2
+       r1 *= r2
+       div %r1,0xaa
+       r1 /= 0xaa
+       div %r1,%r2
+       r1 /= r2
+       or %r1,0xaa
+       r1 |= 0xaa
+       or %r1,%r2
+       r1 |= r2
+       and %r1,0xaa
+       r1 &= 0xaa
+       and %r1,%r2
+       r1 &= r2
+       lsh %r1,0xaa
+       r1 <<= 0xaa
+       lsh %r1,%r2
+       r1 <<= r2
+       rsh %r1,0xaa
+       r1 >>= 0xaa
+       rsh %r1,%r2
+       r1 >>= r2
+       xor %r1,0xaa
+       r1 ^= 0xaa
+       xor %r1,%r2
+       r1 ^= r2
+       mov %r1,0xaa
+       r1 = 0xaa
+       mov %r1,%r2
+       r1 = r2
+       arsh %r1,0xaa
+       r1 s>>= 0xaa
+       arsh %r1,%r2
+       r1 s>>= r2
+       neg %r1
+       r1 = -r1
+       add32 %r1,0xaa
+       w1 += 0xaa
+       add32 %r1,%r2
+       w1 += w2
+       sub32 %r1,0xaa
+       w1 -= 0xaa
+       sub32 %r1,%r2
+       w1 -= w2
+       mul32 %r1,0xaa
+       w1 *= 0xaa
+       mul32 %r1,%r2
+       w1 *= w2
+       div32 %r1,0xaa
+       w1 /= 0xaa
+       div32 %r1,%r2
+       w1 /= w2
+       or32 %r1,0xaa
+       w1 |= 0xaa
+       or32 %r1,%r2
+       w1 |= w2
+       and32 %r1,0xaa
+       w1 &= 0xaa
+       and32 %r1,%r2
+       w1 &= w2
+       lsh32 %r1,0xaa
+       w1 <<= 0xaa
+       lsh32 %r1,%r2
+       w1 <<= w2
+       rsh32 %r1,0xaa
+       w1 >>= 0xaa
+       rsh32 %r1,%r2
+       w1 >>= w2
+       xor32 %r1,0xaa
+       w1 ^= 0xaa
+       xor32 %r1,%r2
+       w1 ^= w2
+       mov32 %r1,0xaa
+       w1 = 0xaa
+       mov32 %r1,%r2
+       w1 = w2
+       arsh32 %r1,0xaa
+       w1 s>>= 0xaa
+       arsh32 %r1,%r2
+       w1 s>>= w2
+       neg32 %r1
+       w1 = -w1
+       endle %r1,16
+       r1 = le16 r1
+       endle %r1,32
+       r1 = le32 r1
+       endle %r1,64
+       r1 = le64 r1
+       endbe %r1,16
+       r1 = be16 r1
+       endbe %r1,32
+       r1 = be32 r1
+       endbe %r1,64
+       r1 = be64 r1
+       ldxb %r1,[%r2+0xaa]
+       r1 = *(u8 *)(r2 + 0xaa)
+       ldxh %r1,[%r2+0xaa]
+       r1 = *(u16 *)(r2 + 0xaa)
+       ldxw %r1,[%r2+0xaa]
+       r1 = *(u32 *)(r2 + 0xaa)
+       ldxdw %r1,[%r2+0xaa]
+       r1 = *(u64 *)(r2 + 0xaa)
+       stxb [%r1+0xaa],%r2
+       *(u8 *)(r1 + 0xaa) = r2
+       stxh [%r1+0xaa],%r2
+       *(u16 *)(r1 + 0xaa) = r2
+       stxw [%r1+0xaa],%r2
+       *(u32 *)(r1 + 0xaa) = r2
+       stxdw [%r1+0xaa],%r2
+       *(u64 *)(r1 + 0xaa) = r2
+       ja 187
+       goto 0xbb
+       jeq %r1,0xaa,187
+       if r1 == 0xaa goto 0xbb
+       jeq %r1,%r2,187
+       if r1 == r2 goto 0xbb
+       jgt %r1,0xaa,187
+       if r1 > 0xaa goto 0xbb
+       jgt %r1,%r2,187
+       if r1 > r2 goto 0xbb
+       jge %r1,0xaa,187
+       if r1 >= 0xaa goto 0xbb
+       jge %r1,%r2,187
+       if r1 >= r2 goto 0xbb
+       jlt %r1,0xaa,187
+       if r1 < 0xaa goto 0xbb
+       jlt %r1,%r2,187
+       if r1 < r2 goto 0xbb
+       jle %r1,0xaa,187
+       if r1 <= 0xaa goto 0xbb
+       jle %r1,%r2,187
+       if r1 <= r2 goto 0xbb
+       jset %r1,0xaa,187
+       if r1 & 0xaa goto 0xbb
+       jset %r1,%r2,187
+       if r1 & r2 goto 0xbb
+       jne %r1,0xaa,187
+       if r1 != 0xaa goto 0xbb
+       jne %r1,%r2,187
+       if r1 != r2 goto 0xbb
+       jsgt %r1,0xaa,187
+       if r1 s> 0xaa goto 0xbb
+       jsgt %r1,%r2,187
+       if r1 s> r2 goto 0xbb
+       jsge %r1,0xaa,187
+       if r1 s>= 0xaa goto 0xbb
+       jsge %r1,%r2,187
+       if r1 s>= r2 goto 0xbb
+       jslt %r1,0xaa,187
+       if r1 s< 0xaa goto 0xbb
+       jslt %r1,%r2,187
+       if r1 s< r2 goto 0xbb
+       jsle %r1,0xaa,187
+       if r1 s<= 0xaa goto 0xbb
+       jsle %r1,%r2,187
+       if r1 s<= r2 goto 0xbb
+       call 170
+       call 0xaa
+       exit
+       exit
+       mov %r6,main - beg
+        exit
+       ldabsw 0xaa
+       r0 = *(u32 *)skb[0xaa]
+       ldindb %r7,0xaa
+       r0 = *(u8 *)skb[r7 + 0xaa]
+       ldabsw 0xaa
+       r0 = *(u32 *)skb[0xaa]
+       ldindb %r7,0xaa
+       r0 = *(u8 *)skb[r7 + 0xaa]
+       lddw %r3,1
+       r3 =  1 ll
+       lddw %r4,0xaabbccddeeff7788
+       r4 =  0xaabbccddeeff7788 ll
+       r5 =  0x1122334455667788 ll
+       lddw %r5,0x1122334455667788
+       lddw %r6,main
+       r6 = main ll
+       main:
+       lock *(u32 *)(r1 + 0xaa) += r2
+       xaddw [%r1+0xaa],%r2
+       lock *(u64 *)(r1 + 0xaa) += r2
+       xadddw [%r1+0xaa],%r2
index e217b2b14ae61af03bacc592389708ac275820c7..811ef7d835cb4c490a8a6d892cde96f6cf1f5ec8 100644 (file)
@@ -82,6 +82,7 @@ switch -glob $target_triplet {
     rl78-*-* { }
     rx-*-* { }
     vax-*-* { }
+    bpf-*-* { }
     default { run_list_test dot "-alm" }
 }
 run_list_test end ""