Skip to content

Commit db7f4fc

Browse files
committed
Fix JIT compilation with SYSTEM/ELF_LOADER enabled
This introduces SYSTEM_MMIO feature flag to properly gate MMIO-related code in JIT. This flag is enabled only when SYSTEM=1 and ELF_LOADER=0 (Linux kernel mode), preventing compilation errors when both SYSTEM and ELF_LOADER are enabled.
1 parent a657a17 commit db7f4fc

File tree

4 files changed

+24
-9
lines changed

4 files changed

+24
-9
lines changed

src/feature.h

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,5 +118,16 @@
118118
#define RV32_FEATURE_ARCH_TEST 0
119119
#endif
120120

121+
/* MMIO support for system emulation
122+
* It is enabled when running in SYSTEM mode without ELF_LOADER, corresponding
123+
* to booting a full Linux kernel that requires memory-mapped I/O to interact
124+
* with virtual devices (UART, PLIC, virtio-blk).
125+
*/
126+
#if RV32_FEATURE_SYSTEM && !RV32_FEATURE_ELF_LOADER
127+
#define RV32_FEATURE_SYSTEM_MMIO 1
128+
#else
129+
#define RV32_FEATURE_SYSTEM_MMIO 0
130+
#endif
131+
121132
/* Feature test macro */
122133
#define RV32_HAS(x) RV32_FEATURE_##x

src/jit.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1395,7 +1395,7 @@ static void muldivmod(struct jit_state *state,
13951395
}
13961396
#endif /* RV32_HAS(EXT_M) */
13971397

1398-
#if RV32_HAS(SYSTEM)
1398+
#if RV32_HAS(SYSTEM_MMIO)
13991399
uint32_t jit_mmio_read_wrapper(riscv_t *rv, uint32_t addr)
14001400
{
14011401
MMIO_READ();

src/rv32_jit.c

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,7 @@ GEN(bgeu, {
155155
GEN(lb, {
156156
memory_t *m = PRIV(rv)->mem;
157157
vm_reg[0] = ra_load(state, ir->rs1);
158-
IIF(RV32_HAS(SYSTEM))
158+
IIF(RV32_HAS(SYSTEM_MMIO))
159159
(
160160
{
161161
emit_load_imm_sext(state, temp_reg, ir->imm);
@@ -207,7 +207,7 @@ GEN(lb, {
207207
GEN(lh, {
208208
memory_t *m = PRIV(rv)->mem;
209209
vm_reg[0] = ra_load(state, ir->rs1);
210-
IIF(RV32_HAS(SYSTEM))
210+
IIF(RV32_HAS(SYSTEM_MMIO))
211211
(
212212
{
213213
emit_load_imm_sext(state, temp_reg, ir->imm);
@@ -259,7 +259,7 @@ GEN(lh, {
259259
GEN(lw, {
260260
memory_t *m = PRIV(rv)->mem;
261261
vm_reg[0] = ra_load(state, ir->rs1);
262-
IIF(RV32_HAS(SYSTEM))
262+
IIF(RV32_HAS(SYSTEM_MMIO))
263263
(
264264
{
265265
emit_load_imm_sext(state, temp_reg, ir->imm);
@@ -311,7 +311,7 @@ GEN(lw, {
311311
GEN(lbu, {
312312
memory_t *m = PRIV(rv)->mem;
313313
vm_reg[0] = ra_load(state, ir->rs1);
314-
IIF(RV32_HAS(SYSTEM))
314+
IIF(RV32_HAS(SYSTEM_MMIO))
315315
(
316316
{
317317
emit_load_imm_sext(state, temp_reg, ir->imm);
@@ -363,7 +363,7 @@ GEN(lbu, {
363363
GEN(lhu, {
364364
memory_t *m = PRIV(rv)->mem;
365365
vm_reg[0] = ra_load(state, ir->rs1);
366-
IIF(RV32_HAS(SYSTEM))
366+
IIF(RV32_HAS(SYSTEM_MMIO))
367367
(
368368
{
369369
emit_load_imm_sext(state, temp_reg, ir->imm);
@@ -415,7 +415,7 @@ GEN(lhu, {
415415
GEN(sb, {
416416
memory_t *m = PRIV(rv)->mem;
417417
vm_reg[0] = ra_load(state, ir->rs1);
418-
IIF(RV32_HAS(SYSTEM))
418+
IIF(RV32_HAS(SYSTEM_MMIO))
419419
(
420420
{
421421
emit_load_imm_sext(state, temp_reg, ir->imm);
@@ -465,7 +465,7 @@ GEN(sb, {
465465
GEN(sh, {
466466
memory_t *m = PRIV(rv)->mem;
467467
vm_reg[0] = ra_load(state, ir->rs1);
468-
IIF(RV32_HAS(SYSTEM))
468+
IIF(RV32_HAS(SYSTEM_MMIO))
469469
(
470470
{
471471
emit_load_imm_sext(state, temp_reg, ir->imm);
@@ -515,7 +515,7 @@ GEN(sh, {
515515
GEN(sw, {
516516
memory_t *m = PRIV(rv)->mem;
517517
vm_reg[0] = ra_load(state, ir->rs1);
518-
IIF(RV32_HAS(SYSTEM))
518+
IIF(RV32_HAS(SYSTEM_MMIO))
519519
(
520520
{
521521
emit_load_imm_sext(state, temp_reg, ir->imm);

src/system.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,10 @@
1616
#define R 1
1717
#define W 0
1818

19+
/* MMIO definitions for Linux kernel emulation.
20+
* Only defined when ELF_LOADER is disabled, as kernel mode needs MMIO but ELF
21+
* test mode does not.
22+
*/
1923
#if !RV32_HAS(ELF_LOADER)
2024

2125
#define MMIO_R 1

0 commit comments

Comments
 (0)