tests/tcg/loongarch64: Add hello/memory test in loongarch64 system
- We write a very minimal softmmu harness. - This is a very simple smoke test with no need to run a full Linux/kernel. - The Makefile.softmmu-target record the rule to run. Signed-off-by: Xiaojuan Yang <yangxiaojuan@loongson.cn> Signed-off-by: Song Gao <gaosong@loongson.cn> Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Message-Id: <20220606124333.2060567-43-yangxiaojuan@loongson.cn> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
parent
ca61e75071
commit
c429333398
@ -217,6 +217,7 @@ M: Song Gao <gaosong@loongson.cn>
|
||||
M: Xiaojuan Yang <yangxiaojuan@loongson.cn>
|
||||
S: Maintained
|
||||
F: target/loongarch/
|
||||
F: tests/tcg/loongarch64/
|
||||
|
||||
M68K TCG CPUs
|
||||
M: Laurent Vivier <laurent@vivier.eu>
|
||||
|
33
tests/tcg/loongarch64/Makefile.softmmu-target
Normal file
33
tests/tcg/loongarch64/Makefile.softmmu-target
Normal file
@ -0,0 +1,33 @@
|
||||
#
|
||||
# Loongarch64 system tests
|
||||
#
|
||||
|
||||
LOONGARCH64_SYSTEM_SRC=$(SRC_PATH)/tests/tcg/loongarch64/system
|
||||
VPATH+=$(LOONGARCH64_SYSTEM_SRC)
|
||||
|
||||
# These objects provide the basic boot code and helper functions for all tests
|
||||
CRT_OBJS=boot.o
|
||||
|
||||
LOONGARCH64_TEST_SRCS=$(wildcard $(LOONGARCH64_SYSTEM_SRC)/*.c)
|
||||
LOONGARCH64_TESTS = $(patsubst $(LOONGARCH64_SYSTEM_SRC)/%.c, %, $(LOONGARCH64_TEST_SRCS))
|
||||
|
||||
CRT_PATH=$(LOONGARCH64_SYSTEM_SRC)
|
||||
LINK_SCRIPT=$(LOONGARCH64_SYSTEM_SRC)/kernel.ld
|
||||
LDFLAGS=-Wl,-T$(LINK_SCRIPT)
|
||||
TESTS+=$(LOONGARCH64_TESTS) $(MULTIARCH_TESTS)
|
||||
CFLAGS+=-nostdlib -g -O1 -march=loongarch64 -mabi=lp64d $(MINILIB_INC)
|
||||
LDFLAGS+=-static -nostdlib $(CRT_OBJS) $(MINILIB_OBJS) -lgcc
|
||||
|
||||
# building head blobs
|
||||
.PRECIOUS: $(CRT_OBJS)
|
||||
|
||||
%.o: $(CRT_PATH)/%.S
|
||||
$(CC) $(CFLAGS) $(EXTRA_CFLAGS) -x assembler-with-cpp -c $< -o $@
|
||||
|
||||
# Build and link the tests
|
||||
%: %.c $(LINK_SCRIPT) $(CRT_OBJS) $(MINILIB_OBJS)
|
||||
$(CC) $(CFLAGS) $(EXTRA_CFLAGS) $< -o $@ $(LDFLAGS)
|
||||
|
||||
memory: CFLAGS+=-DCHECK_UNALIGNED=0
|
||||
# Running
|
||||
QEMU_OPTS+=-serial chardev:output -kernel
|
56
tests/tcg/loongarch64/system/boot.S
Normal file
56
tests/tcg/loongarch64/system/boot.S
Normal file
@ -0,0 +1,56 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
||||
/*
|
||||
* Minimal LoongArch system boot code.
|
||||
*
|
||||
* Copyright (c) 2021 Loongson Technology Corporation Limited
|
||||
*/
|
||||
|
||||
#include "regdef.h"
|
||||
|
||||
.global _start
|
||||
.align 16
|
||||
_start:
|
||||
la.local t0, stack_end
|
||||
move sp, t0
|
||||
bl main
|
||||
|
||||
.type _start 2
|
||||
.size _start, .-_start
|
||||
|
||||
.global _exit
|
||||
.align 16
|
||||
_exit:
|
||||
2: /* QEMU ACPI poweroff */
|
||||
li.w t0, 0xff
|
||||
li.w t1, 0x10080010
|
||||
st.w t0, t1, 0
|
||||
idle 0
|
||||
bl 2b
|
||||
|
||||
.type _exit 2
|
||||
.size _exit, .-_exit
|
||||
|
||||
.global __sys_outc
|
||||
__sys_outc:
|
||||
li.d t1, 1000000
|
||||
loop:
|
||||
lu12i.w t2, 0x1fe00
|
||||
ori t0, t2, 0x1e5
|
||||
ld.bu t0, t0, 0
|
||||
andi t0, t0, 0x20
|
||||
ext.w.b t0, t0
|
||||
bnez t0, in
|
||||
addi.w t1, t1, -1
|
||||
bnez t1, loop
|
||||
in:
|
||||
ext.w.b a0, a0
|
||||
lu12i.w t0, 0x1fe00
|
||||
ori t0, t0, 0x1e0
|
||||
st.b a0, t0, 0
|
||||
jirl $r0, ra, 0
|
||||
|
||||
.data
|
||||
.align 4
|
||||
stack:
|
||||
.space 65536
|
||||
stack_end:
|
30
tests/tcg/loongarch64/system/kernel.ld
Normal file
30
tests/tcg/loongarch64/system/kernel.ld
Normal file
@ -0,0 +1,30 @@
|
||||
ENTRY(_start)
|
||||
|
||||
SECTIONS
|
||||
{
|
||||
/* Linux kernel legacy start address. */
|
||||
. = 0x9000000000200000;
|
||||
_text = .;
|
||||
.text : {
|
||||
*(.text)
|
||||
}
|
||||
.rodata : {
|
||||
*(.rodata)
|
||||
}
|
||||
_etext = .;
|
||||
|
||||
. = ALIGN(8192);
|
||||
_data = .;
|
||||
.got : {
|
||||
*(.got)
|
||||
}
|
||||
.data : {
|
||||
*(.sdata)
|
||||
*(.data)
|
||||
}
|
||||
_edata = .;
|
||||
.bss : {
|
||||
*(.bss)
|
||||
}
|
||||
_end = .;
|
||||
}
|
86
tests/tcg/loongarch64/system/regdef.h
Normal file
86
tests/tcg/loongarch64/system/regdef.h
Normal file
@ -0,0 +1,86 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
/*
|
||||
* Copyright (c) 2021 Loongson Technology Corporation Limited
|
||||
*/
|
||||
#ifndef _ASM_REGDEF_H
|
||||
#define _ASM_REGDEF_H
|
||||
|
||||
#define zero $r0 /* wired zero */
|
||||
#define ra $r1 /* return address */
|
||||
#define tp $r2
|
||||
#define sp $r3 /* stack pointer */
|
||||
#define v0 $r4 /* return value - caller saved */
|
||||
#define v1 $r5
|
||||
#define a0 $r4 /* argument registers */
|
||||
#define a1 $r5
|
||||
#define a2 $r6
|
||||
#define a3 $r7
|
||||
#define a4 $r8
|
||||
#define a5 $r9
|
||||
#define a6 $r10
|
||||
#define a7 $r11
|
||||
#define t0 $r12 /* caller saved */
|
||||
#define t1 $r13
|
||||
#define t2 $r14
|
||||
#define t3 $r15
|
||||
#define t4 $r16
|
||||
#define t5 $r17
|
||||
#define t6 $r18
|
||||
#define t7 $r19
|
||||
#define t8 $r20
|
||||
/* $r21: Temporarily reserved */
|
||||
#define fp $r22 /* frame pointer */
|
||||
#define s0 $r23 /* callee saved */
|
||||
#define s1 $r24
|
||||
#define s2 $r25
|
||||
#define s3 $r26
|
||||
#define s4 $r27
|
||||
#define s5 $r28
|
||||
#define s6 $r29
|
||||
#define s7 $r30
|
||||
#define s8 $r31
|
||||
|
||||
#define gr0 $r0
|
||||
#define gr1 $r1
|
||||
#define gr2 $r2
|
||||
#define gr3 $r3
|
||||
#define gr4 $r4
|
||||
#define gr5 $r5
|
||||
#define gr6 $r6
|
||||
#define gr7 $r7
|
||||
#define gr8 $r8
|
||||
#define gr9 $r9
|
||||
#define gr10 $r10
|
||||
#define gr11 $r11
|
||||
#define gr12 $r12
|
||||
#define gr13 $r13
|
||||
#define gr14 $r14
|
||||
#define gr15 $r15
|
||||
#define gr16 $r16
|
||||
#define gr17 $r17
|
||||
#define gr18 $r18
|
||||
#define gr19 $r19
|
||||
#define gr20 $r20
|
||||
#define gr21 $r21
|
||||
#define gr22 $r22
|
||||
#define gr23 $r23
|
||||
#define gr24 $r24
|
||||
#define gr25 $r25
|
||||
#define gr26 $r26
|
||||
#define gr27 $r27
|
||||
#define gr28 $r28
|
||||
#define gr29 $r29
|
||||
#define gr30 $r30
|
||||
#define gr31 $r31
|
||||
|
||||
#define STT_NOTYPE 0
|
||||
#define STT_OBJECT 1
|
||||
#define STT_FUNC 2
|
||||
#define STT_SECTION 3
|
||||
#define STT_FILE 4
|
||||
#define STT_COMMON 5
|
||||
#define STT_TLS 6
|
||||
|
||||
#define ASM_NL ;
|
||||
|
||||
#endif /* _ASM_REGDEF_H */
|
Loading…
Reference in New Issue
Block a user