kunlun1和kunlun3 适配 riscv gcc 15版本

This commit is contained in:
2024-11-03 11:22:45 +08:00
parent ff1d8f698a
commit 31698d0808
8 changed files with 42 additions and 3 deletions

View File

@@ -191,7 +191,12 @@ void exception_handler_2(uintptr_t mcause, uintptr_t epc, saved_registers *reg)
//disble global interrupt; //disble global interrupt;
__asm volatile ( "csrc mstatus,8" ); __asm volatile ( "csrc mstatus,8" );
// 在mbadaddr寄存器写入值 gcc 15 中这个寄存器名称改了
#if __GNUC__ <= 10
__asm volatile ( "csrr %0, mbadaddr" : "=r"(mbadaddr)); __asm volatile ( "csrr %0, mbadaddr" : "=r"(mbadaddr));
#else
__asm volatile ( "csrr %0, mtval" : "=r"(mbadaddr));
#endif
switch(mcause) { switch(mcause) {
case 0x0: case 0x0:

View File

@@ -30,7 +30,13 @@ else
RISCV_VER = riscv3 RISCV_VER = riscv3
else else
CC = riscv64-unknown-elf-gcc CC = riscv64-unknown-elf-gcc
ISA = rv32imc gcc_version=$(shell (${CC} -dumpversion | awk -F. '{print $1}'))
# $(info "gcc version is " ${gcc_version})
ifeq ($(gcc_version), 15.0.0)
ISA = rv32imc_zicsr
else
ISA = rv32imc
endif
ABI = ilp32 ABI = ilp32
RISCV_VER = riscv RISCV_VER = riscv
endif endif

View File

@@ -195,7 +195,12 @@ uint32_t IRAM_ATTR wdg_handler(uint32_t vector, iot_addrword_t data)
uintptr_t mbadaddr = 0, mepc = 0, mcause = 0; uintptr_t mbadaddr = 0, mepc = 0, mcause = 0;
mbadaddr = 0xdeadfeed; mbadaddr = 0xdeadfeed;
__asm volatile ( "csrc mstatus, 8" ); __asm volatile ( "csrc mstatus, 8" );
// 在mbadaddr寄存器写入值 gcc 15 中这个寄存器名称改了
#if __GNUC__ <= 10
__asm volatile ( "csrw mbadaddr, %0" :: "r"(mbadaddr) ); __asm volatile ( "csrw mbadaddr, %0" :: "r"(mbadaddr) );
#else
__asm volatile ( "csrw mtval, %0" :: "r"(mbadaddr) );
#endif
__asm volatile ( "csrr %0, mepc" : "=r"(mepc) ); __asm volatile ( "csrr %0, mepc" : "=r"(mepc) );
__asm volatile ( "csrr %0, mcause" : "=r"(mcause) ); __asm volatile ( "csrr %0, mcause" : "=r"(mcause) );
iot_sprintf(buf, "mcause: 0x%08x, mepc: 0x%08x, mbadaddr: 0x%08x\n", iot_sprintf(buf, "mcause: 0x%08x, mepc: 0x%08x, mbadaddr: 0x%08x\n",
@@ -266,7 +271,12 @@ uint32_t wdg_handler_1(uint32_t vector, iot_addrword_t data)
print_cache_error_msg(buf); print_cache_error_msg(buf);
uint32_t mbadaddr = 0, mepc = 0, mcause = 0; uint32_t mbadaddr = 0, mepc = 0, mcause = 0;
__asm volatile ( "csrc mstatus, 8" ); __asm volatile ( "csrc mstatus, 8" );
__asm volatile ( "csrr %0, mbadaddr" : "=r"(mbadaddr) ); // 在mbadaddr寄存器写入值 gcc 15 中这个寄存器名称改了
#if __GNUC__ <= 10
__asm volatile ( "csrr %0, mbadaddr" : "=r"(mbadaddr));
#else
__asm volatile ( "csrr %0, mtval" : "=r"(mbadaddr));
#endif
__asm volatile ( "csrr %0, mepc" : "=r"(mepc) ); __asm volatile ( "csrr %0, mepc" : "=r"(mepc) );
__asm volatile ( "csrr %0, mcause" : "=r"(mcause) ); __asm volatile ( "csrr %0, mcause" : "=r"(mcause) );
iot_sprintf(buf, "mcause: 0x%08x, mepc: 0x%08x, mbadaddr: 0x%08x\n", iot_sprintf(buf, "mcause: 0x%08x, mepc: 0x%08x, mbadaddr: 0x%08x\n",

View File

@@ -211,7 +211,12 @@ uint32_t IRAM_ATTR wdg_timeout_handler(uint32_t vector, iot_addrword_t data)
uintptr_t mbadaddr = 0, mepc = 0, mcause = 0; uintptr_t mbadaddr = 0, mepc = 0, mcause = 0;
mbadaddr = 0xdeadfeed; mbadaddr = 0xdeadfeed;
__asm volatile ( "csrc mstatus, 8" ); __asm volatile ( "csrc mstatus, 8" );
// 在mbadaddr寄存器写入值 gcc 15 中这个寄存器名称改了
#if __GNUC__ <= 10
__asm volatile ( "csrw mbadaddr, %0" :: "r"(mbadaddr) ); __asm volatile ( "csrw mbadaddr, %0" :: "r"(mbadaddr) );
#else
__asm volatile ( "csrw mtval, %0" :: "r"(mbadaddr) );
#endif
__asm volatile ( "csrr %0, mepc" : "=r"(mepc) ); __asm volatile ( "csrr %0, mepc" : "=r"(mepc) );
__asm volatile ( "csrr %0, mcause" : "=r"(mcause) ); __asm volatile ( "csrr %0, mcause" : "=r"(mcause) );
iot_sprintf(buf, "mcause: 0x%08x, mepc: 0x%08x, mbadaddr: 0x%08x\n", iot_sprintf(buf, "mcause: 0x%08x, mepc: 0x%08x, mbadaddr: 0x%08x\n",

View File

@@ -14,7 +14,7 @@ Information is free from patent or copyright infringement.
****************************************************************************/ ****************************************************************************/
/* os shim includes */ /* os shim includes */
#include <stdio.h> #include <stdio.h>
#include "stdint.h"
#include "strformat.h" #include "strformat.h"
static StrFormatResult write_str(void *user_data, const char *data, unsigned int len) static StrFormatResult write_str(void *user_data, const char *data, unsigned int len)

View File

@@ -178,7 +178,12 @@ void exception_handler_3(uintptr_t mcause, uintptr_t epc, saved_registers *reg)
//disble global interrupt; //disble global interrupt;
__asm volatile ( "csrc mstatus,8" ); __asm volatile ( "csrc mstatus,8" );
// 在mbadaddr寄存器写入值 gcc 15 中这个寄存器名称改了
#if __GNUC__ <= 10
__asm volatile ( "csrr %0, mbadaddr" : "=r"(mbadaddr)); __asm volatile ( "csrr %0, mbadaddr" : "=r"(mbadaddr));
#else
__asm volatile ( "csrr %0, mtval" : "=r"(mbadaddr));
#endif
switch(mcause) { switch(mcause) {
case 0x0: case 0x0:

View File

@@ -441,7 +441,11 @@ void exception_handler(uintptr_t mcause, uintptr_t epc, saved_registers *reg)
//disble global interrupt; //disble global interrupt;
__asm volatile ( "csrc mstatus,8" ); __asm volatile ( "csrc mstatus,8" );
#if __GNUC__ <= 10
__asm volatile ( "csrr %0, mbadaddr" : "=r"(mbadaddr)); __asm volatile ( "csrr %0, mbadaddr" : "=r"(mbadaddr));
#else
__asm volatile ( "csrr %0, mtval" : "=r"(mbadaddr));
#endif
switch(mcause) { switch(mcause) {
case 0x0: case 0x0:

View File

@@ -461,7 +461,11 @@ void IRAM_ATTR exception_handler(uintptr_t mcause, uintptr_t epc, saved_register
//disble global interrupt; //disble global interrupt;
__asm volatile ( "csrc mstatus,8" ); __asm volatile ( "csrc mstatus,8" );
#if __GNUC__ <= 10
__asm volatile ( "csrr %0, mbadaddr" : "=r"(mbadaddr)); __asm volatile ( "csrr %0, mbadaddr" : "=r"(mbadaddr));
#else
__asm volatile ( "csrr %0, mtval" : "=r"(mbadaddr));
#endif
asm volatile ( "csrr %0, mcause" : "=r"(curr_mcause)); asm volatile ( "csrr %0, mcause" : "=r"(curr_mcause));
asm volatile ( "csrr %0, mip" : "=r"(curr_mip)); asm volatile ( "csrr %0, mip" : "=r"(curr_mip));