gdb: move all tests to userland

This commit is contained in:
Ciro Santilli 六四事件 法轮功
2019-05-26 00:00:01 +00:00
parent dbfec89e03
commit 12005528ef
18 changed files with 49 additions and 65 deletions

View File

@@ -1,13 +0,0 @@
.global main
main:
/* 1 + 2 == 3 */
mov x0, 1
/* test-gdb-op1 */
add x1, x0, 2
/* test-gdb-result */
cmp x1, 3
beq 1f
bl abort
1:
mov x0, 0
ret

View File

@@ -1,7 +0,0 @@
def test(self):
self.sendline('tbreak main')
self.sendline('continue')
self.continue_to('op1')
assert self.get_int('$x0') == 1
self.continue_to('result')
assert self.get_int('$x1') == 3

View File

@@ -1,5 +0,0 @@
/* Call a C function. */
.global main
main:
mov x0, 0
bl exit

View File

@@ -0,0 +1,11 @@
/* Dump as many registers as we feel like to see initial CPU state. */
#include <stdio.h>
#include <inttypes.h>
int main(void) {
uint32_t sctlr_el1;
__asm__ ("mrs %0, sctlr_el1" : "=r" (sctlr_el1) : :);
printf("sctlr_el1 0x%" PRIx32 "\n", sctlr_el1);
return 0;
}

View File

@@ -1,47 +0,0 @@
/* https://github.com/cirosantilli/arm-assembly-cheat/blob/c19e187e98e99f2f4a042783ca238aa4eb2292ab/v8/floating_point.S */
.global main
main:
/* 1.5 + 2.5 == 4.0 */
fmov d0, 1.5
/* test-gdb-d0 */
fmov d1, 2.5
/* test-gdb-d1 */
fadd d2, d0, d1
/* test-gdb-d2 */
fmov d3, 4.0
fcmp d2, d3
beq 1f
bl abort
1:
/* Now in 32-bit. */
fmov s0, 1.5
/* test-gdb-s0 */
fmov s1, 2.5
/* test-gdb-s1 */
fadd s2, s0, s1
/* test-gdb-s2 */
fadd s2, s0, s1
fmov s3, 4.0
fcmp s2, s3
beq 1f
bl abort
1:
/* Higher registers. */
fmov d28, 1.5
/* test-gdb-d28 */
fmov d29, 2.5
/* test-gdb-d29 */
fadd d30, d28, d29
/* test-gdb-d30 */
fmov d31, 4.0
/* test-gdb-d31 */
fcmp d30, d31
beq 1f
bl abort
1:
mov x0, 0
ret

View File

@@ -1,30 +0,0 @@
def test(self):
self.sendline('tbreak main')
self.sendline('continue')
# Double.
self.continue_to('d0')
assert self.get_float('$d0') == 1.5
self.continue_to('d1')
assert self.get_float('$d1') == 2.5
self.continue_to('d2')
assert self.get_float('$d2') == 4.0
# Single.
self.continue_to('s0')
assert self.get_float('$s0') == 1.5
self.continue_to('s1')
assert self.get_float('$s1') == 2.5
self.continue_to('s2')
assert self.get_float('$s2') == 4.0
# High registers..
self.continue_to('d28')
assert self.get_float('$d28') == 1.5
self.continue_to('d29')
assert self.get_float('$d29') == 2.5
self.continue_to('d30')
assert self.get_float('$d30') == 4.0
self.continue_to('d31')
assert self.get_float('$d31') == 4.0

View File

@@ -1,29 +0,0 @@
/* Test that we can move:
* - set registers
* - read x30
*/
.global main
main:
mov x0, 1
/* test-gdb-x0 */
mov x1, 2
/* test-gdb-x1 */
mov x29, 1
/* test-gdb-x29 */
mov x30, 2
/* test-gdb-x30 */
fmov d0, 1.5
/* test-gdb-d0 */
fmov d1, 2.5
/* test-gdb-d1 */
fmov d30, 1.5
/* test-gdb-d30 */
fmov d31, 2.5
/* test-gdb-d31 */
/* Exit required since we messed up with x30 which is the lr. */
mov x0, 0
bl exit

View File

@@ -1,27 +0,0 @@
def test(self):
self.sendline('tbreak main')
self.sendline('continue')
self.continue_to('x0')
self.sendline('set $x0 = 3')
self.continue_to('x1')
assert self.get_int('$x0') == 3
assert self.get_int('$x1') == 2
self.sendline('set $x30 = 3')
self.continue_to('x29')
assert self.get_int('$x29') == 1
assert self.get_int('$x30') == 3
self.continue_to('x30')
assert self.get_int('$x30') == 2
self.continue_to('d0')
self.sendline('set $d0 = 3.5')
self.continue_to('d1')
assert self.get_float('$d0') == 3.5
assert self.get_float('$d1') == 2.5
self.sendline('set $d31 = 3.5')
self.continue_to('d30')
assert self.get_float('$d30') == 1.5
assert self.get_float('$d31') == 3.5
self.continue_to('d31')
assert self.get_float('$d31') == 2.5

View File

@@ -1,5 +0,0 @@
/* Return to ensure that the post main works. */
.global main
main:
mov x0, 0
ret

View File

@@ -1,5 +0,0 @@
/* https://github.com/cirosantilli/linux-kernel-module-cheat#magic-failure-string */
.global main
main:
mov x0, 1
ret

View File

@@ -1,13 +0,0 @@
.global main
main:
/* 1 + 2 == 3 */
mov r0, #1
/* test-gdb-op1 */
add r1, r0, #2
/* test-gdb-result */
cmp r1, #3
beq 1f
bl abort
1:
mov r0, #0
bx lr

View File

@@ -1,7 +0,0 @@
def test(self):
self.sendline('tbreak main')
self.sendline('continue')
self.continue_to('op1')
assert self.get_int('$r0') == 1
self.continue_to('result')
assert self.get_int('$r1') == 3

View File

@@ -1,15 +1,15 @@
/* I want to move el and all other "what's the initial value of such system register" into here. */
#include <stdio.h>
#include <inttypes.h>
int main(void) {
uint32_t cpsr;
/*uint32_t mvfr1;*/
__asm__ ("mrs %0, cpsr" : "=r" (cpsr) : :);
/* TODO this is blowing up an exception, how to I read from it? */
/*__asm__ ("vmrs %0, mvfr1" : "=r" (mvfr1) : :);*/
printf("cpsr %" PRIx32 "\n", cpsr);
/* TODO this is blowing up an exception, how to I read from it? */
/*uint32_t mvfr1;*/
/*__asm__ ("vmrs %0, mvfr1" : "=r" (mvfr1) : :);*/
/*printf("mvfr1 %" PRIx32 "\n", mvfr1);*/
return 0;
}

View File

@@ -1,11 +0,0 @@
/* See the aarch64 version. */
#include <lkmc.h>
LKMC_PROLOGUE
mov r0, #1
/* test-gdb-r0 */
mov r1, #2
/* test-gdb-r1 */
mov r0, #0
LKMC_EPILOGUE

View File

@@ -1,8 +0,0 @@
def test(self):
self.sendline('tbreak main')
self.sendline('continue')
self.continue_to('r0')
self.sendline('set $r0 = 3')
self.continue_to('r1')
assert self.get_int('$r0') == 3
assert self.get_int('$r1') == 2