* [PATCH] target/riscv/cpu_helper: Fix linking problem with semihosting disabled
@ 2024-09-06 8:09 Thomas Huth
2024-09-06 8:58 ` Peter Maydell
0 siblings, 1 reply; 4+ messages in thread
From: Thomas Huth @ 2024-09-06 8:09 UTC (permalink / raw)
To: qemu-devel, qemu-riscv, Palmer Dabbelt, Alistair Francis,
Bin Meng
Cc: Weiwei Li, Daniel Henrique Barboza, Liu Zhiwei, Peter Maydell,
Philippe Mathieu-Daudé
When QEMU has been configured with "--without-default-devices", the build
is currently failing with:
/usr/bin/ld: libqemu-riscv32-softmmu.a.p/target_riscv_cpu_helper.c.o:
in function `riscv_cpu_do_interrupt':
.../qemu/target/riscv/cpu_helper.c:1678:(.text+0x2214): undefined
reference to `do_common_semihosting'
Avoid calling into do_common_semihosting() if the corresponding Kconfig
switch has not been set.
Signed-off-by: Thomas Huth <thuth@redhat.com>
---
target/riscv/cpu_helper.c | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/target/riscv/cpu_helper.c b/target/riscv/cpu_helper.c
index 395a1d9140..c7a6569e2d 100644
--- a/target/riscv/cpu_helper.c
+++ b/target/riscv/cpu_helper.c
@@ -34,6 +34,10 @@
#include "debug.h"
#include "tcg/oversized-guest.h"
+#ifndef CONFIG_USER_ONLY
+#include CONFIG_DEVICES
+#endif
+
int riscv_env_mmu_index(CPURISCVState *env, bool ifetch)
{
#ifdef CONFIG_USER_ONLY
@@ -1674,10 +1678,12 @@ void riscv_cpu_do_interrupt(CPUState *cs)
if (!async) {
/* set tval to badaddr for traps with address information */
switch (cause) {
+#ifdef CONFIG_ARM_COMPATIBLE_SEMIHOSTING
case RISCV_EXCP_SEMIHOST:
do_common_semihosting(cs);
env->pc += 4;
return;
+#endif
case RISCV_EXCP_LOAD_GUEST_ACCESS_FAULT:
case RISCV_EXCP_STORE_GUEST_AMO_ACCESS_FAULT:
case RISCV_EXCP_LOAD_ADDR_MIS:
--
2.46.0
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH] target/riscv/cpu_helper: Fix linking problem with semihosting disabled
2024-09-06 8:09 [PATCH] target/riscv/cpu_helper: Fix linking problem with semihosting disabled Thomas Huth
@ 2024-09-06 8:58 ` Peter Maydell
2024-09-06 9:30 ` Thomas Huth
0 siblings, 1 reply; 4+ messages in thread
From: Peter Maydell @ 2024-09-06 8:58 UTC (permalink / raw)
To: Thomas Huth
Cc: qemu-devel, qemu-riscv, Palmer Dabbelt, Alistair Francis,
Bin Meng, Weiwei Li, Daniel Henrique Barboza, Liu Zhiwei,
Philippe Mathieu-Daudé
On Fri, 6 Sept 2024 at 09:09, Thomas Huth <thuth@redhat.com> wrote:
>
> When QEMU has been configured with "--without-default-devices", the build
> is currently failing with:
>
> /usr/bin/ld: libqemu-riscv32-softmmu.a.p/target_riscv_cpu_helper.c.o:
> in function `riscv_cpu_do_interrupt':
> .../qemu/target/riscv/cpu_helper.c:1678:(.text+0x2214): undefined
> reference to `do_common_semihosting'
>
> Avoid calling into do_common_semihosting() if the corresponding Kconfig
> switch has not been set.
This would be inconsistent with Arm, where you always
get semihosting if you're using TCG. (For KVM, semihosting
is up to the kernel to provide, which is why we don't
want the code in that case.)
> Signed-off-by: Thomas Huth <thuth@redhat.com>
> ---
> target/riscv/cpu_helper.c | 6 ++++++
> 1 file changed, 6 insertions(+)
>
> diff --git a/target/riscv/cpu_helper.c b/target/riscv/cpu_helper.c
> index 395a1d9140..c7a6569e2d 100644
> --- a/target/riscv/cpu_helper.c
> +++ b/target/riscv/cpu_helper.c
> @@ -34,6 +34,10 @@
> #include "debug.h"
> #include "tcg/oversized-guest.h"
>
> +#ifndef CONFIG_USER_ONLY
> +#include CONFIG_DEVICES
> +#endif
> +
> int riscv_env_mmu_index(CPURISCVState *env, bool ifetch)
> {
> #ifdef CONFIG_USER_ONLY
> @@ -1674,10 +1678,12 @@ void riscv_cpu_do_interrupt(CPUState *cs)
> if (!async) {
> /* set tval to badaddr for traps with address information */
> switch (cause) {
> +#ifdef CONFIG_ARM_COMPATIBLE_SEMIHOSTING
> case RISCV_EXCP_SEMIHOST:
> do_common_semihosting(cs);
> env->pc += 4;
> return;
> +#endif
> case RISCV_EXCP_LOAD_GUEST_ACCESS_FAULT:
> case RISCV_EXCP_STORE_GUEST_AMO_ACCESS_FAULT:
> case RISCV_EXCP_LOAD_ADDR_MIS:
If you do want to do this thhen this isn't sufficient, because
you would also need to change the code that generates the
RISCV_EXCP_SEMIHOST exception so that it instead generates
the "behave as if we don't have semihosting and the
semihosting-trap instruction sequence were executed "normally".
But I think the best thing is to use "select if TCG" in the Kconfig.
thanks
-- PMM
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] target/riscv/cpu_helper: Fix linking problem with semihosting disabled
2024-09-06 8:58 ` Peter Maydell
@ 2024-09-06 9:30 ` Thomas Huth
2024-09-06 9:33 ` Peter Maydell
0 siblings, 1 reply; 4+ messages in thread
From: Thomas Huth @ 2024-09-06 9:30 UTC (permalink / raw)
To: Peter Maydell
Cc: qemu-devel, qemu-riscv, Palmer Dabbelt, Alistair Francis,
Bin Meng, Weiwei Li, Daniel Henrique Barboza, Liu Zhiwei,
Philippe Mathieu-Daudé
On 06/09/2024 10.58, Peter Maydell wrote:
> On Fri, 6 Sept 2024 at 09:09, Thomas Huth <thuth@redhat.com> wrote:
>>
>> When QEMU has been configured with "--without-default-devices", the build
>> is currently failing with:
>>
>> /usr/bin/ld: libqemu-riscv32-softmmu.a.p/target_riscv_cpu_helper.c.o:
>> in function `riscv_cpu_do_interrupt':
>> .../qemu/target/riscv/cpu_helper.c:1678:(.text+0x2214): undefined
>> reference to `do_common_semihosting'
>>
>> Avoid calling into do_common_semihosting() if the corresponding Kconfig
>> switch has not been set.
>
> This would be inconsistent with Arm, where you always
> get semihosting if you're using TCG. (For KVM, semihosting
> is up to the kernel to provide, which is why we don't
> want the code in that case.)
>
>> Signed-off-by: Thomas Huth <thuth@redhat.com>
>> ---
>> target/riscv/cpu_helper.c | 6 ++++++
>> 1 file changed, 6 insertions(+)
>>
>> diff --git a/target/riscv/cpu_helper.c b/target/riscv/cpu_helper.c
>> index 395a1d9140..c7a6569e2d 100644
>> --- a/target/riscv/cpu_helper.c
>> +++ b/target/riscv/cpu_helper.c
>> @@ -34,6 +34,10 @@
>> #include "debug.h"
>> #include "tcg/oversized-guest.h"
>>
>> +#ifndef CONFIG_USER_ONLY
>> +#include CONFIG_DEVICES
>> +#endif
>> +
>> int riscv_env_mmu_index(CPURISCVState *env, bool ifetch)
>> {
>> #ifdef CONFIG_USER_ONLY
>> @@ -1674,10 +1678,12 @@ void riscv_cpu_do_interrupt(CPUState *cs)
>> if (!async) {
>> /* set tval to badaddr for traps with address information */
>> switch (cause) {
>> +#ifdef CONFIG_ARM_COMPATIBLE_SEMIHOSTING
>> case RISCV_EXCP_SEMIHOST:
>> do_common_semihosting(cs);
>> env->pc += 4;
>> return;
>> +#endif
>> case RISCV_EXCP_LOAD_GUEST_ACCESS_FAULT:
>> case RISCV_EXCP_STORE_GUEST_AMO_ACCESS_FAULT:
>> case RISCV_EXCP_LOAD_ADDR_MIS:
>
> If you do want to do this thhen this isn't sufficient, because
> you would also need to change the code that generates the
> RISCV_EXCP_SEMIHOST exception so that it instead generates
> the "behave as if we don't have semihosting and the
> semihosting-trap instruction sequence were executed "normally".
> But I think the best thing is to use "select if TCG" in the Kconfig.
Ok, but I think we then still need a #ifdef CONFIG_TCG here, otherwise
linking will fail for KVM-only builds?
Thomas
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] target/riscv/cpu_helper: Fix linking problem with semihosting disabled
2024-09-06 9:30 ` Thomas Huth
@ 2024-09-06 9:33 ` Peter Maydell
0 siblings, 0 replies; 4+ messages in thread
From: Peter Maydell @ 2024-09-06 9:33 UTC (permalink / raw)
To: Thomas Huth
Cc: qemu-devel, qemu-riscv, Palmer Dabbelt, Alistair Francis,
Bin Meng, Weiwei Li, Daniel Henrique Barboza, Liu Zhiwei,
Philippe Mathieu-Daudé
On Fri, 6 Sept 2024 at 10:30, Thomas Huth <thuth@redhat.com> wrote:
>
> On 06/09/2024 10.58, Peter Maydell wrote:
> > On Fri, 6 Sept 2024 at 09:09, Thomas Huth <thuth@redhat.com> wrote:
> >>
> >> When QEMU has been configured with "--without-default-devices", the build
> >> is currently failing with:
> >>
> >> /usr/bin/ld: libqemu-riscv32-softmmu.a.p/target_riscv_cpu_helper.c.o:
> >> in function `riscv_cpu_do_interrupt':
> >> .../qemu/target/riscv/cpu_helper.c:1678:(.text+0x2214): undefined
> >> reference to `do_common_semihosting'
> >>
> >> Avoid calling into do_common_semihosting() if the corresponding Kconfig
> >> switch has not been set.
> >
> > This would be inconsistent with Arm, where you always
> > get semihosting if you're using TCG. (For KVM, semihosting
> > is up to the kernel to provide, which is why we don't
> > want the code in that case.)
> > If you do want to do this thhen this isn't sufficient, because
> > you would also need to change the code that generates the
> > RISCV_EXCP_SEMIHOST exception so that it instead generates
> > the "behave as if we don't have semihosting and the
> > semihosting-trap instruction sequence were executed "normally".
> > But I think the best thing is to use "select if TCG" in the Kconfig.
>
> Ok, but I think we then still need a #ifdef CONFIG_TCG here, otherwise
> linking will fail for KVM-only builds?
Yes, I expect so -- the equivalent code in target/arm is
wrapped in #ifdef CONFIG_TCG.
-- PMM
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2024-09-06 9:34 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-09-06 8:09 [PATCH] target/riscv/cpu_helper: Fix linking problem with semihosting disabled Thomas Huth
2024-09-06 8:58 ` Peter Maydell
2024-09-06 9:30 ` Thomas Huth
2024-09-06 9:33 ` Peter Maydell
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).