On 03/23/2018 09:36 AM, Thomas Huth wrote:
> Most of the RISC-V boards currently crash when they are started with
> "-nodefaults", e.g.:
>
> $ gdb --args riscv32-softmmu/qemu-system-riscv32 -nodefaults -M sifive_e
> [...]
> (gdb) r
> Program received signal SIGSEGV, Segmentation fault.
> qemu_chr_fe_init ([...], s=s@entry=0x0, [...])
> at chardev/char-fe.c:210
> 210 } else if (s->be) {
> (gdb) bt
> 0 0x00005555558695f8 in qemu_chr_fe_init ([...], s=s@entry=0x0, [...])
> at chardev/char-fe.c:210
> 1 0x00005555556fb425 in sifive_uart_create ([...], chr=0x0, [...])
> at hw/riscv/sifive_uart.c:169
> 2 0x00005555556f8cc4 in riscv_sifive_e_init (machine=[...])
> at hw/riscv/sifive_e.c:164
> [...]
>
> With "-nodefaults" there are no entries in serial_hds[], so qemu_chr_fe_init()
> finally tries to dereference a NULL pointer. Let's fix this problem by
> creating a "null" chardev in this case instead.
>
> Signed-off-by: Thomas Huth <[email protected]>
> ---
> For other boards / targets, see also:
> https://lists.gnu.org/archive/html/qemu-devel/2018-03/msg05073.html
>
> hw/riscv/riscv_htif.c | 5 +++++
> hw/riscv/sifive_uart.c | 5 +++++
> 2 files changed, 10 insertions(+)
>
Reviewed-by: Bastian Koppelmann <[email protected]>
Cheers,
Bastian