blob: 65dd32935631b2b978e67378d13712e1e43df2b4 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
id = 2074
title = "riscv64 cannot use the mret instruction to jump to the address corresponding to s mode"
state = "closed"
created_at = "2024-01-05T08:17:33.034Z"
closed_at = "2024-01-18T06:49:14.552Z"
labels = ["target: riscv"]
url = "https://gitlab.com/qemu-project/qemu/-/issues/2074"
host-os = "Linux"
host-arch = "x86"
qemu-version = "QEMU emulator version 8.1.90"
guest-os = "coreboot/bios"
guest-arch = "riscv"
description = """I use coreboot to boot my linux kernel.The kernel is copied at 0x82200000,I set reg mepc 0x82200000,and set reg mstatus a00000800.
and I use "mret" instruction so that qemu can jump to 0x82200000 and enter S mode.But some errors happened.
It shows:
[DEBUG] Exception: Instruction access fault
[DEBUG] Hart ID: 0
[DEBUG] Previous mode: machine
[DEBUG] Bad instruction pc: 0x8103f7c0
[DEBUG] Bad address: 0x00000000
[DEBUG] Stored ra: 0x8103f7b8
[DEBUG] Stored sp: 0x82032f08
Bad instruction pc: 0x8103f7c0 in my elf file instruction is "mret".
So I can not jump to my kernel's load address.
I think when I use -bios option,my qemu should in M mode.How could I can jump to my mepc address?"""
reproduce = """1.download qemu
2.download coreboot"""
additional = """When I enter qemu with -bios option,I find that the reg mstatus is 0xa0000000."""
|