bpf: sim: do not overflow instruction immediates in tests
authorJose E. Marchesi <jose.marchesi@oracle.com>
Mon, 31 Jul 2023 09:08:32 +0000 (11:08 +0200)
committerJose E. Marchesi <jose.marchesi@oracle.com>
Mon, 31 Jul 2023 09:09:47 +0000 (11:09 +0200)
This patch fixes some instructions in the BPF tests that overflow the
signed immediates.  Note that this happened to work before by chance,
as GAS would silently truncate.

Tested in bpf-unknown-none.

Signed-off-by: Jose E. Marchesi <jose.marchesi@oracle.com>
sim/testsuite/bpf/alu.s
sim/testsuite/bpf/alu32.s
sim/testsuite/bpf/ldabs.s
sim/testsuite/bpf/mem.s
sim/testsuite/bpf/mov.s

index 4dc37b1f01a0dabc28d62d0e4b572037dee89816..acba7b86cc6021704fc155e859323c5d818e652d 100644 (file)
@@ -59,7 +59,7 @@ main:
     fail_ne     %r2, 0x0000000050000000
 
     ;; or
-    or          %r2, 0xdeadbeef
+    or          %r2, -559038737         ; 0xdeadbeef
     fail_ne     %r2, 0xffffffffdeadbeef ; 0xdeadbeef gets sign extended
     lddw        %r1, 0xdead00000000beef
     lddw        %r2, 0x0000123456780000
@@ -67,7 +67,7 @@ main:
     fail_ne     %r1, 0xdead12345678beef
 
     ;; lsh
-    mov         %r1, 0xdeadbeef
+    mov         %r1, -559038737         ; 0xdeadbeef
     lsh         %r1, 11
     fail_ne     %r1, 0xfffffef56df77800 ; because deadbeef gets sign ext.
     mov         %r2, 21
index e8d5062476cd6200bf15dacbe1e2403dd55aaae4..d129f0fa7e01acf6644bfbd51aff8536296ed68c 100644 (file)
@@ -58,7 +58,7 @@ main:
     lsh32       %r1, 4          ; r1 <<= 4 (r1 = 0xf0)
     mov32       %r2, 24         ; r2 = 24
     lsh32       %r1, %r2
-    fail_ne32   %r1, 0xf0000000
+    fail_ne32   %r1, -268435456 ; 0xf0000000
 
     ;; rsh (right logical shift)
     rsh32       %r1, 2
@@ -67,7 +67,7 @@ main:
 
     ;; arsh (right arithmetic shift)
     arsh32      %r1, 1
-    or32        %r1, 0x80000000
+    or32        %r1, -2147483648 ; 0x80000000
     mov32       %r2, 3
     arsh32      %r1, %r2
     fail_ne     %r1, 0x00000000F0000003
@@ -92,7 +92,7 @@ main:
     ;; xor
     xor32       %r1, %r2
     fail_ne32   %r1, 4
-    xor32       %r1, 0xF000000F
+    xor32       %r1, -268435441 ; 0xF000000F
     fail_ne     %r1, 0xF000000B ; Note: check for (bad) sign-extend
     xor32       %r1, %r1
     fail_ne     %r1, 0
index ae777f1cf547eb45b922ab9403112d3e3d3e858a..f54b80544776293b6177d3258c5614481c806088 100644 (file)
@@ -34,13 +34,13 @@ main:
     ;; Write the value 0x7eadbeef into memory at 0x2004
     ;; i.e. offset 4 within the data buffer pointed to by
     ;; ((struct sk_buff *)r6)->data
-    stw         [%r6+0x1004], 0xdeadbeef
+    stw         [%r6+0x1004], 0x0eadbeef
 
     ;; Now load data[4] into r0 using the ldabsw instruction
     ldabsw      0x4
 
     ;; ...and compare to what we expect
-    fail_ne32   %r0, 0xdeadbeef
+    fail_ne32   %r0, 0x0eadbeef
 
     ;; Repeat for a half-word (2-bytes)
     sth         [%r6+0x1008], 0x1234
@@ -62,10 +62,10 @@ main:
 
     ;; Now, we do the same for the indirect loads
     mov         %r7, 0x100
-    stw         [%r6+0x1100], 0xfeedbeef
+    stw         [%r6+0x1100], 0x0eedbeef
 
     ldindw      %r7, 0x0
-    fail_ne32   %r0, 0xfeedbeef
+    fail_ne32   %r0, 0x0eedbeef
 
     ;; half-word
     sth         [%r6+0x1104], 0x6789
index f9c6a193eab242d37f7421b9065f49b2db404120..26931ae5fba8d52c4b2af247a51743b931d38311 100644 (file)
@@ -20,7 +20,7 @@ main:
 
     stb         [%r2+16], 0x5a
     sth         [%r2+18], 0xcafe
-    stw         [%r2+20], 0xbeefface
+    stw         [%r2+20], -1091568946 ; 0xbeefface
     stdw        [%r2+24], 0x7eadbeef
 
     ldxb        %r1, [%r2+16]
index 6665450468cb2d0a5bab9fa7282db0252ee5461d..f7585c1dcb296243744bd4f4fad65eb7eba75e62 100644 (file)
@@ -30,7 +30,7 @@ main:
     mov         %r2, -1
     fail_ne     %r2, 0xffffffffffffffff
 
-    mov         %r3, 0x80000000
+    mov         %r3, -2147483648 ; 0x80000000
 
     ;; should NOT sign extend
     mov32       %r4, %r3