Skip to content

Commit 875cc35

Browse files
committed
feat: kernel/libcpu: fit into ilp32d
1 parent ca9f92a commit 875cc35

23 files changed

+242
-256
lines changed

include/rthw.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -172,8 +172,8 @@ void rt_hw_context_switch_interrupt(rt_ubase_t from, rt_ubase_t to, rt_thread_t
172172
* Hardware Layer Backtrace Service
173173
*/
174174
struct rt_hw_backtrace_frame {
175-
rt_base_t fp;
176-
rt_base_t pc;
175+
rt_uintptr_t fp;
176+
rt_uintptr_t pc;
177177
};
178178

179179
rt_err_t rt_hw_backtrace_frame_get(rt_thread_t thread, struct rt_hw_backtrace_frame *frame);

include/rttypes.h

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,6 @@ extern "C" {
3333
*/
3434

3535
typedef int rt_bool_t; /**< boolean type */
36-
typedef signed long rt_base_t; /**< Nbit CPU related data type */
37-
typedef unsigned long rt_ubase_t; /**< Nbit unsigned CPU related data type */
3836

3937
#ifndef RT_USING_ARCH_DATA_TYPE
4038
#ifdef RT_USING_LIBC
@@ -63,12 +61,24 @@ typedef unsigned long long rt_uint64_t; /**< 64bit unsigned inte
6361
#endif /* RT_USING_LIBC */
6462
#endif /* RT_USING_ARCH_DATA_TYPE */
6563

64+
#ifdef ARCH_CPU_64BIT
65+
typedef rt_int64_t rt_base_t; /**< Nbit CPU related data type */
66+
typedef rt_uint64_t rt_ubase_t; /**< Nbit unsigned CPU related data type */
67+
#else
68+
typedef rt_int32_t rt_base_t; /**< Nbit CPU related data type */
69+
typedef rt_uint32_t rt_ubase_t; /**< Nbit unsigned CPU related data type */
70+
#endif
71+
6672
#if defined(RT_USING_LIBC) && !defined(RT_USING_NANO)
6773
typedef size_t rt_size_t; /**< Type for size number */
6874
typedef ssize_t rt_ssize_t; /**< Used for a count of bytes or an error indication */
75+
typedef intptr_t rt_intptr_t; /**< Type for signed pointer length integer */
76+
typedef uintptr_t rt_uintptr_t; /**< Type for unsigned pointer length integer */
6977
#else
7078
typedef rt_ubase_t rt_size_t; /**< Type for size number */
7179
typedef rt_base_t rt_ssize_t; /**< Used for a count of bytes or an error indication */
80+
typedef rt_ubase_t rt_intptr_t; /**< Type for signed pointer length integer */
81+
typedef rt_base_t rt_uintptr_t; /**< Type for unsigned pointer length integer */
7282
#endif /* defined(RT_USING_LIBC) && !defined(RT_USING_NANO) */
7383

7484
typedef rt_base_t rt_err_t; /**< Type for error number */

libcpu/risc-v/virt64/backtrace.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ rt_inline rt_err_t _bt_uaddr(rt_lwp_t lwp, rt_ubase_t *fp, struct rt_hw_backtrac
6767
rt_err_t rt_hw_backtrace_frame_unwind(rt_thread_t thread, struct rt_hw_backtrace_frame *frame)
6868
{
6969
rt_err_t rc = -RT_ERROR;
70-
rt_ubase_t *fp = (rt_ubase_t *)frame->fp;
70+
rt_uintptr_t *fp = (rt_uintptr_t *)frame->fp;
7171

7272
if (fp && !((long)fp & 0x7))
7373
{

libcpu/risc-v/virt64/context_gcc.S

Lines changed: 32 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -15,56 +15,56 @@
1515
#include "cpuport.h"
1616
#include "stackframe.h"
1717

18-
.macro PUSH_8 reg
18+
.macro PUSH_REG reg
1919
addi sp, sp, -REGBYTES
2020
STORE \reg, (sp)
2121
.endm
2222

23-
.macro POP_8 reg
23+
.macro POP_REG reg
2424
LOAD \reg, (sp)
2525
addi sp, sp, REGBYTES
2626
.endm
2727

2828
.macro RESERVE_CONTEXT
29-
PUSH_8 tp
30-
PUSH_8 ra
31-
PUSH_8 s0
32-
PUSH_8 s1
33-
PUSH_8 s2
34-
PUSH_8 s3
35-
PUSH_8 s4
36-
PUSH_8 s5
37-
PUSH_8 s6
38-
PUSH_8 s7
39-
PUSH_8 s8
40-
PUSH_8 s9
41-
PUSH_8 s10
42-
PUSH_8 s11
29+
PUSH_REG tp
30+
PUSH_REG ra
31+
PUSH_REG s0
32+
PUSH_REG s1
33+
PUSH_REG s2
34+
PUSH_REG s3
35+
PUSH_REG s4
36+
PUSH_REG s5
37+
PUSH_REG s6
38+
PUSH_REG s7
39+
PUSH_REG s8
40+
PUSH_REG s9
41+
PUSH_REG s10
42+
PUSH_REG s11
4343
csrr s11, sstatus
4444
li s10, (SSTATUS_SPP)
4545
or s11, s11, s10
46-
PUSH_8 s11
46+
PUSH_REG s11
4747
addi sp, sp, -REGBYTES
4848
.endm
4949

5050
.macro RESTORE_CONTEXT
5151
addi sp, sp, REGBYTES
52-
POP_8 s11
52+
POP_REG s11
5353
csrw sstatus, s11
54-
POP_8 s11
55-
POP_8 s10
56-
POP_8 s9
57-
POP_8 s8
58-
POP_8 s7
59-
POP_8 s6
60-
POP_8 s5
61-
POP_8 s4
62-
POP_8 s3
63-
POP_8 s2
64-
POP_8 s1
65-
POP_8 s0
66-
POP_8 ra
67-
POP_8 tp
54+
POP_REG s11
55+
POP_REG s10
56+
POP_REG s9
57+
POP_REG s8
58+
POP_REG s7
59+
POP_REG s6
60+
POP_REG s5
61+
POP_REG s4
62+
POP_REG s3
63+
POP_REG s2
64+
POP_REG s1
65+
POP_REG s0
66+
POP_REG ra
67+
POP_REG tp
6868
csrw sepc, ra
6969
.endm
7070

libcpu/risc-v/virt64/cpuport.c

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616
#include "stack.h"
1717
#include <sbi.h>
1818
#include <encoding.h>
19-
#include "regtypes.h"
2019

2120
#define K_SSTATUS_DEFAULT (SSTATUS_SPP | SSTATUS_SPIE | SSTATUS_SUM | SSTATUS_FS)
2221

@@ -36,7 +35,7 @@ volatile rt_ubase_t rt_interrupt_to_thread = 0;
3635
*/
3736
volatile rt_ubase_t rt_thread_switch_interrupt_flag = 0;
3837

39-
void *_rt_hw_stack_init(rt_uintreg_t *sp, rt_uintreg_t ra, rt_uintreg_t sstatus)
38+
void *_rt_hw_stack_init(rt_ubase_t *sp, rt_ubase_t ra, rt_ubase_t sstatus)
4039
{
4140
(*--sp) = 0; /* tp */
4241
(*--sp) = ra; /* ra */
@@ -81,17 +80,17 @@ rt_uint8_t *rt_hw_stack_init(void *tentry,
8180
rt_uint8_t *stack_addr,
8281
void *texit)
8382
{
84-
rt_uintreg_t *sp = (rt_uintreg_t *)stack_addr;
83+
rt_ubase_t *sp = (rt_ubase_t *)stack_addr;
8584
// we use a strict alignment requirement for Q extension
86-
sp = (rt_uintreg_t *)RT_ALIGN_DOWN((rt_uintreg_t)sp, 16);
85+
sp = (rt_ubase_t *)RT_ALIGN_DOWN((rt_ubase_t)sp, 16);
8786

88-
(*--sp) = (rt_uintreg_t)tentry;
89-
(*--sp) = (rt_uintreg_t)parameter;
90-
(*--sp) = (rt_uintreg_t)texit;
87+
(*--sp) = (rt_ubase_t)tentry;
88+
(*--sp) = (rt_ubase_t)parameter;
89+
(*--sp) = (rt_ubase_t)texit;
9190

9291
/* compatible to RESTORE_CONTEXT */
9392
extern void _rt_thread_entry(void);
94-
return (rt_uint8_t *)_rt_hw_stack_init(sp, (rt_uintreg_t)_rt_thread_entry, K_SSTATUS_DEFAULT);
93+
return (rt_uint8_t *)_rt_hw_stack_init(sp, (rt_ubase_t)_rt_thread_entry, K_SSTATUS_DEFAULT);
9594
}
9695

9796
/*

libcpu/risc-v/virt64/ext_context.h

Lines changed: 32 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -28,38 +28,38 @@
2828
*/
2929

3030
#ifdef ENABLE_FPU
31-
#define FPU_CTX_F0_OFF REGBYTES * 0 /* offsetof(fpu_context_t, fpustatus.f[0]) - offsetof(fpu_context_t, fpustatus.f[0]) */
32-
#define FPU_CTX_F1_OFF REGBYTES * 1 /* offsetof(fpu_context_t, fpustatus.f[1]) - offsetof(fpu_context_t, fpustatus.f[0]) */
33-
#define FPU_CTX_F2_OFF REGBYTES * 2 /* offsetof(fpu_context_t, fpustatus.f[2]) - offsetof(fpu_context_t, fpustatus.f[0]) */
34-
#define FPU_CTX_F3_OFF REGBYTES * 3 /* offsetof(fpu_context_t, fpustatus.f[3]) - offsetof(fpu_context_t, fpustatus.f[0]) */
35-
#define FPU_CTX_F4_OFF REGBYTES * 4 /* offsetof(fpu_context_t, fpustatus.f[4]) - offsetof(fpu_context_t, fpustatus.f[0]) */
36-
#define FPU_CTX_F5_OFF REGBYTES * 5 /* offsetof(fpu_context_t, fpustatus.f[5]) - offsetof(fpu_context_t, fpustatus.f[0]) */
37-
#define FPU_CTX_F6_OFF REGBYTES * 6 /* offsetof(fpu_context_t, fpustatus.f[6]) - offsetof(fpu_context_t, fpustatus.f[0]) */
38-
#define FPU_CTX_F7_OFF REGBYTES * 7 /* offsetof(fpu_context_t, fpustatus.f[7]) - offsetof(fpu_context_t, fpustatus.f[0]) */
39-
#define FPU_CTX_F8_OFF REGBYTES * 8 /* offsetof(fpu_context_t, fpustatus.f[8]) - offsetof(fpu_context_t, fpustatus.f[0]) */
40-
#define FPU_CTX_F9_OFF REGBYTES * 9 /* offsetof(fpu_context_t, fpustatus.f[9]) - offsetof(fpu_context_t, fpustatus.f[0]) */
41-
#define FPU_CTX_F10_OFF REGBYTES * 10 /* offsetof(fpu_context_t, fpustatus.f[10]) - offsetof(fpu_context_t, fpustatus.f[0]) */
42-
#define FPU_CTX_F11_OFF REGBYTES * 11 /* offsetof(fpu_context_t, fpustatus.f[11]) - offsetof(fpu_context_t, fpustatus.f[0]) */
43-
#define FPU_CTX_F12_OFF REGBYTES * 12 /* offsetof(fpu_context_t, fpustatus.f[12]) - offsetof(fpu_context_t, fpustatus.f[0]) */
44-
#define FPU_CTX_F13_OFF REGBYTES * 13 /* offsetof(fpu_context_t, fpustatus.f[13]) - offsetof(fpu_context_t, fpustatus.f[0]) */
45-
#define FPU_CTX_F14_OFF REGBYTES * 14 /* offsetof(fpu_context_t, fpustatus.f[14]) - offsetof(fpu_context_t, fpustatus.f[0]) */
46-
#define FPU_CTX_F15_OFF REGBYTES * 15 /* offsetof(fpu_context_t, fpustatus.f[15]) - offsetof(fpu_context_t, fpustatus.f[0]) */
47-
#define FPU_CTX_F16_OFF REGBYTES * 16 /* offsetof(fpu_context_t, fpustatus.f[16]) - offsetof(fpu_context_t, fpustatus.f[0]) */
48-
#define FPU_CTX_F17_OFF REGBYTES * 17 /* offsetof(fpu_context_t, fpustatus.f[17]) - offsetof(fpu_context_t, fpustatus.f[0]) */
49-
#define FPU_CTX_F18_OFF REGBYTES * 18 /* offsetof(fpu_context_t, fpustatus.f[18]) - offsetof(fpu_context_t, fpustatus.f[0]) */
50-
#define FPU_CTX_F19_OFF REGBYTES * 19 /* offsetof(fpu_context_t, fpustatus.f[19]) - offsetof(fpu_context_t, fpustatus.f[0]) */
51-
#define FPU_CTX_F20_OFF REGBYTES * 20 /* offsetof(fpu_context_t, fpustatus.f[20]) - offsetof(fpu_context_t, fpustatus.f[0]) */
52-
#define FPU_CTX_F21_OFF REGBYTES * 21 /* offsetof(fpu_context_t, fpustatus.f[21]) - offsetof(fpu_context_t, fpustatus.f[0]) */
53-
#define FPU_CTX_F22_OFF REGBYTES * 22 /* offsetof(fpu_context_t, fpustatus.f[22]) - offsetof(fpu_context_t, fpustatus.f[0]) */
54-
#define FPU_CTX_F23_OFF REGBYTES * 23 /* offsetof(fpu_context_t, fpustatus.f[23]) - offsetof(fpu_context_t, fpustatus.f[0]) */
55-
#define FPU_CTX_F24_OFF REGBYTES * 24 /* offsetof(fpu_context_t, fpustatus.f[24]) - offsetof(fpu_context_t, fpustatus.f[0]) */
56-
#define FPU_CTX_F25_OFF REGBYTES * 25 /* offsetof(fpu_context_t, fpustatus.f[25]) - offsetof(fpu_context_t, fpustatus.f[0]) */
57-
#define FPU_CTX_F26_OFF REGBYTES * 26 /* offsetof(fpu_context_t, fpustatus.f[26]) - offsetof(fpu_context_t, fpustatus.f[0]) */
58-
#define FPU_CTX_F27_OFF REGBYTES * 27 /* offsetof(fpu_context_t, fpustatus.f[27]) - offsetof(fpu_context_t, fpustatus.f[0]) */
59-
#define FPU_CTX_F28_OFF REGBYTES * 28 /* offsetof(fpu_context_t, fpustatus.f[28]) - offsetof(fpu_context_t, fpustatus.f[0]) */
60-
#define FPU_CTX_F29_OFF REGBYTES * 29 /* offsetof(fpu_context_t, fpustatus.f[29]) - offsetof(fpu_context_t, fpustatus.f[0]) */
61-
#define FPU_CTX_F30_OFF REGBYTES * 30 /* offsetof(fpu_context_t, fpustatus.f[30]) - offsetof(fpu_context_t, fpustatus.f[0]) */
62-
#define FPU_CTX_F31_OFF REGBYTES * 31 /* offsetof(fpu_context_t, fpustatus.f[31]) - offsetof(fpu_context_t, fpustatus.f[0]) */
31+
#define FPU_CTX_F0_OFF (REGBYTES * 0) /* offsetof(fpu_context_t, fpustatus.f[0]) - offsetof(fpu_context_t, fpustatus.f[0]) */
32+
#define FPU_CTX_F1_OFF (REGBYTES * 1) /* offsetof(fpu_context_t, fpustatus.f[1]) - offsetof(fpu_context_t, fpustatus.f[0]) */
33+
#define FPU_CTX_F2_OFF (REGBYTES * 2) /* offsetof(fpu_context_t, fpustatus.f[2]) - offsetof(fpu_context_t, fpustatus.f[0]) */
34+
#define FPU_CTX_F3_OFF (REGBYTES * 3) /* offsetof(fpu_context_t, fpustatus.f[3]) - offsetof(fpu_context_t, fpustatus.f[0]) */
35+
#define FPU_CTX_F4_OFF (REGBYTES * 4) /* offsetof(fpu_context_t, fpustatus.f[4]) - offsetof(fpu_context_t, fpustatus.f[0]) */
36+
#define FPU_CTX_F5_OFF (REGBYTES * 5) /* offsetof(fpu_context_t, fpustatus.f[5]) - offsetof(fpu_context_t, fpustatus.f[0]) */
37+
#define FPU_CTX_F6_OFF (REGBYTES * 6) /* offsetof(fpu_context_t, fpustatus.f[6]) - offsetof(fpu_context_t, fpustatus.f[0]) */
38+
#define FPU_CTX_F7_OFF (REGBYTES * 7) /* offsetof(fpu_context_t, fpustatus.f[7]) - offsetof(fpu_context_t, fpustatus.f[0]) */
39+
#define FPU_CTX_F8_OFF (REGBYTES * 8) /* offsetof(fpu_context_t, fpustatus.f[8]) - offsetof(fpu_context_t, fpustatus.f[0]) */
40+
#define FPU_CTX_F9_OFF (REGBYTES * 9) /* offsetof(fpu_context_t, fpustatus.f[9]) - offsetof(fpu_context_t, fpustatus.f[0]) */
41+
#define FPU_CTX_F10_OFF (REGBYTES * 10) /* offsetof(fpu_context_t, fpustatus.f[10]) - offsetof(fpu_context_t, fpustatus.f[0]) */
42+
#define FPU_CTX_F11_OFF (REGBYTES * 11) /* offsetof(fpu_context_t, fpustatus.f[11]) - offsetof(fpu_context_t, fpustatus.f[0]) */
43+
#define FPU_CTX_F12_OFF (REGBYTES * 12) /* offsetof(fpu_context_t, fpustatus.f[12]) - offsetof(fpu_context_t, fpustatus.f[0]) */
44+
#define FPU_CTX_F13_OFF (REGBYTES * 13) /* offsetof(fpu_context_t, fpustatus.f[13]) - offsetof(fpu_context_t, fpustatus.f[0]) */
45+
#define FPU_CTX_F14_OFF (REGBYTES * 14) /* offsetof(fpu_context_t, fpustatus.f[14]) - offsetof(fpu_context_t, fpustatus.f[0]) */
46+
#define FPU_CTX_F15_OFF (REGBYTES * 15) /* offsetof(fpu_context_t, fpustatus.f[15]) - offsetof(fpu_context_t, fpustatus.f[0]) */
47+
#define FPU_CTX_F16_OFF (REGBYTES * 16) /* offsetof(fpu_context_t, fpustatus.f[16]) - offsetof(fpu_context_t, fpustatus.f[0]) */
48+
#define FPU_CTX_F17_OFF (REGBYTES * 17) /* offsetof(fpu_context_t, fpustatus.f[17]) - offsetof(fpu_context_t, fpustatus.f[0]) */
49+
#define FPU_CTX_F18_OFF (REGBYTES * 18) /* offsetof(fpu_context_t, fpustatus.f[18]) - offsetof(fpu_context_t, fpustatus.f[0]) */
50+
#define FPU_CTX_F19_OFF (REGBYTES * 19) /* offsetof(fpu_context_t, fpustatus.f[19]) - offsetof(fpu_context_t, fpustatus.f[0]) */
51+
#define FPU_CTX_F20_OFF (REGBYTES * 20) /* offsetof(fpu_context_t, fpustatus.f[20]) - offsetof(fpu_context_t, fpustatus.f[0]) */
52+
#define FPU_CTX_F21_OFF (REGBYTES * 21) /* offsetof(fpu_context_t, fpustatus.f[21]) - offsetof(fpu_context_t, fpustatus.f[0]) */
53+
#define FPU_CTX_F22_OFF (REGBYTES * 22) /* offsetof(fpu_context_t, fpustatus.f[22]) - offsetof(fpu_context_t, fpustatus.f[0]) */
54+
#define FPU_CTX_F23_OFF (REGBYTES * 23) /* offsetof(fpu_context_t, fpustatus.f[23]) - offsetof(fpu_context_t, fpustatus.f[0]) */
55+
#define FPU_CTX_F24_OFF (REGBYTES * 24) /* offsetof(fpu_context_t, fpustatus.f[24]) - offsetof(fpu_context_t, fpustatus.f[0]) */
56+
#define FPU_CTX_F25_OFF (REGBYTES * 25) /* offsetof(fpu_context_t, fpustatus.f[25]) - offsetof(fpu_context_t, fpustatus.f[0]) */
57+
#define FPU_CTX_F26_OFF (REGBYTES * 26) /* offsetof(fpu_context_t, fpustatus.f[26]) - offsetof(fpu_context_t, fpustatus.f[0]) */
58+
#define FPU_CTX_F27_OFF (REGBYTES * 27) /* offsetof(fpu_context_t, fpustatus.f[27]) - offsetof(fpu_context_t, fpustatus.f[0]) */
59+
#define FPU_CTX_F28_OFF (REGBYTES * 28) /* offsetof(fpu_context_t, fpustatus.f[28]) - offsetof(fpu_context_t, fpustatus.f[0]) */
60+
#define FPU_CTX_F29_OFF (REGBYTES * 29) /* offsetof(fpu_context_t, fpustatus.f[29]) - offsetof(fpu_context_t, fpustatus.f[0]) */
61+
#define FPU_CTX_F30_OFF (REGBYTES * 30) /* offsetof(fpu_context_t, fpustatus.f[30]) - offsetof(fpu_context_t, fpustatus.f[0]) */
62+
#define FPU_CTX_F31_OFF (REGBYTES * 31) /* offsetof(fpu_context_t, fpustatus.f[31]) - offsetof(fpu_context_t, fpustatus.f[0]) */
6363
#endif /* ENABLE_FPU */
6464

6565
/**

libcpu/risc-v/virt64/interrupt.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515

1616
#include <rthw.h>
1717
#include "stack.h"
18-
#include "regtypes.h"
1918

2019
enum
2120
{
@@ -42,6 +41,6 @@ int rt_hw_plic_irq_disable(int irq_number);
4241
void rt_hw_interrupt_init(void);
4342
void rt_hw_interrupt_mask(int vector);
4443
rt_isr_handler_t rt_hw_interrupt_install(int vector, rt_isr_handler_t handler, void *param, const char *name);
45-
void handle_trap(rt_uintreg_t xcause, rt_uintreg_t xtval, rt_uintreg_t xepc, struct rt_hw_stack_frame *sp);
44+
void handle_trap(rt_ubase_t xcause, rt_ubase_t xtval, rt_ubase_t xepc, struct rt_hw_stack_frame *sp);
4645

4746
#endif

0 commit comments

Comments
 (0)