/* Testsuite macros for OpenRISC. Copyright (C) 2017-2023 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #ifndef OR1K_ASM_TEST_ENV_H #define OR1K_ASM_TEST_ENV_H #include "or1k-asm.h" #include "or1k-asm-test.h" .macro STANDARD_TEST_HEADER /* Without the "a" (allocatable) flag, this section gets some default flags and is discarded by objcopy when flattening to the binary file. */ .section .exception_vectors, "ax" .org 0x100 .global _start _start: /* Clear R0 on start-up. There is no guarantee that R0 is hardwired to zero and indeed it is not when simulating. */ CLEAR_REG r0 OR1K_DELAYED_NOP(l.j test_startup) .section .text test_startup: .endm .macro STANDARD_TEST_BODY LOAD_IMMEDIATE STACK_POINTER_R1, stack_begin CLEAR_BSS r3, r4 CALL r3, start_tests EXIT_SIMULATION_WITH_IMMEDIATE_EXIT_CODE SEC_SUCCESS .section .stack .space 4096 /* We need more than EXCEPTION_STACK_SKIP_SIZE bytes. */ stack_begin: .endm .macro STANDARD_TEST_ENVIRONMENT /* One of the test cases needs to do some tests before setting up the stack and so on. That's the reason this macro is split into 2 parts allowing the caller to inject code between the 2 initialisation phases. */ STANDARD_TEST_HEADER STANDARD_TEST_BODY .endm #endif /* OR1K_ASM_TEST_ENV_H */