mbox series

[PATCH-for-8.0,0/2] target/arm/gdbstub: Fix builds when TCG is disabled

Message ID 20230322142902.69511-1-philmd@linaro.org
Headers show
Series target/arm/gdbstub: Fix builds when TCG is disabled | expand

Message

Philippe Mathieu-Daudé March 22, 2023, 2:29 p.m. UTC
Fix when building QEMU configured with --disable-tcg:

  Undefined symbols for architecture arm64:
    "_arm_v7m_get_sp_ptr", referenced from:
        _m_sysreg_get in target_arm_gdbstub.c.o
    "_arm_v7m_mrs_control", referenced from:
        _arm_gdb_get_m_systemreg in target_arm_gdbstub.c.o
    "_pauth_ptr_mask", referenced from:
        _aarch64_gdb_get_pauth_reg in target_arm_gdbstub64.c.o
  ld: symbol(s) not found for architecture arm64
  clang: error: linker command failed with exit code 1 (use -v to see invocation)

Philippe Mathieu-Daudé (2):
  target/arm/gdbstub: Restrict aarch64_gdb_get_pauth_reg() to CONFIG_TCG
  target/arm/gdbstub: Only advertise M-profile features if TCG available

 target/arm/gdbstub.c   | 7 ++++---
 target/arm/gdbstub64.c | 4 ++++
 2 files changed, 8 insertions(+), 3 deletions(-)

Comments

Philippe Mathieu-Daudé March 22, 2023, 2:32 p.m. UTC | #1
On 22/3/23 15:29, Philippe Mathieu-Daudé wrote:
> Fix when building QEMU configured with --disable-tcg:
> 
>    Undefined symbols for architecture arm64:
>      "_arm_v7m_get_sp_ptr", referenced from:
>          _m_sysreg_get in target_arm_gdbstub.c.o
>      "_arm_v7m_mrs_control", referenced from:
>          _arm_gdb_get_m_systemreg in target_arm_gdbstub.c.o
>      "_pauth_ptr_mask", referenced from:
>          _aarch64_gdb_get_pauth_reg in target_arm_gdbstub64.c.o
>    ld: symbol(s) not found for architecture arm64
>    clang: error: linker command failed with exit code 1 (use -v to see invocation)

Beside having the non-TCG configs tested in CI, (I think) we can avoid
such breakage by moving the TCG-specific declarations from
target/arm/internals.h to some target/arm/tcg/tcg-internals.h header.
(target/arm/internals.h is 1400+ LoC anyway). Worth it?
Fabiano Rosas March 22, 2023, 5:45 p.m. UTC | #2
Philippe Mathieu-Daudé <philmd@linaro.org> writes:

> On 22/3/23 15:29, Philippe Mathieu-Daudé wrote:
>> Fix when building QEMU configured with --disable-tcg:
>> 
>>    Undefined symbols for architecture arm64:
>>      "_arm_v7m_get_sp_ptr", referenced from:
>>          _m_sysreg_get in target_arm_gdbstub.c.o
>>      "_arm_v7m_mrs_control", referenced from:
>>          _arm_gdb_get_m_systemreg in target_arm_gdbstub.c.o
>>      "_pauth_ptr_mask", referenced from:
>>          _aarch64_gdb_get_pauth_reg in target_arm_gdbstub64.c.o
>>    ld: symbol(s) not found for architecture arm64
>>    clang: error: linker command failed with exit code 1 (use -v to see invocation)
>
> Beside having the non-TCG configs tested in CI, (I think) we can avoid
> such breakage by moving the TCG-specific declarations from
> target/arm/internals.h to some target/arm/tcg/tcg-internals.h header.
> (target/arm/internals.h is 1400+ LoC anyway). Worth it?

I think it would be worth it. That still leaves the issue of these small
functions that are semantically related to what is being emulated but
don't need any TCG-specific symbols. It would be nice if we had a
default approach for where to put them. Without going back to sticking
everything in helper.c, of course. =)
Peter Maydell March 28, 2023, 9:54 a.m. UTC | #3
On Wed, 22 Mar 2023 at 14:29, Philippe Mathieu-Daudé <philmd@linaro.org> wrote:
>
> Fix when building QEMU configured with --disable-tcg:
>
>   Undefined symbols for architecture arm64:
>     "_arm_v7m_get_sp_ptr", referenced from:
>         _m_sysreg_get in target_arm_gdbstub.c.o
>     "_arm_v7m_mrs_control", referenced from:
>         _arm_gdb_get_m_systemreg in target_arm_gdbstub.c.o
>     "_pauth_ptr_mask", referenced from:
>         _aarch64_gdb_get_pauth_reg in target_arm_gdbstub64.c.o
>   ld: symbol(s) not found for architecture arm64
>   clang: error: linker command failed with exit code 1 (use -v to see invocation)
>
> Philippe Mathieu-Daudé (2):
>   target/arm/gdbstub: Restrict aarch64_gdb_get_pauth_reg() to CONFIG_TCG
>   target/arm/gdbstub: Only advertise M-profile features if TCG available

I've applied patch 2 to target-arm.next; thanks.

-- PMM
Philippe Mathieu-Daudé March 28, 2023, 1:20 p.m. UTC | #4
On 28/3/23 11:54, Peter Maydell wrote:
> On Wed, 22 Mar 2023 at 14:29, Philippe Mathieu-Daudé <philmd@linaro.org> wrote:
>>
>> Fix when building QEMU configured with --disable-tcg:
>>
>>    Undefined symbols for architecture arm64:
>>      "_arm_v7m_get_sp_ptr", referenced from:
>>          _m_sysreg_get in target_arm_gdbstub.c.o
>>      "_arm_v7m_mrs_control", referenced from:
>>          _arm_gdb_get_m_systemreg in target_arm_gdbstub.c.o
>>      "_pauth_ptr_mask", referenced from:
>>          _aarch64_gdb_get_pauth_reg in target_arm_gdbstub64.c.o
>>    ld: symbol(s) not found for architecture arm64
>>    clang: error: linker command failed with exit code 1 (use -v to see invocation)
>>
>> Philippe Mathieu-Daudé (2):
>>    target/arm/gdbstub: Restrict aarch64_gdb_get_pauth_reg() to CONFIG_TCG
>>    target/arm/gdbstub: Only advertise M-profile features if TCG available
> 
> I've applied patch 2 to target-arm.next; thanks.

If you only take #2, then you need to squash this from #1:

-- >8 --
diff --git a/target/arm/gdbstub.c b/target/arm/gdbstub.c
@@ -21,6 +21,7 @@
  #include "cpu.h"
  #include "exec/gdbstub.h"
  #include "gdbstub/helpers.h"
+#include "sysemu/tcg.h"
  #include "internals.h"
  #include "cpregs.h"
---

I can respin if it eases your workflow.

Thanks,

Phil.
Philippe Mathieu-Daudé March 28, 2023, 1:33 p.m. UTC | #5
On 28/3/23 15:20, Philippe Mathieu-Daudé wrote:
> On 28/3/23 11:54, Peter Maydell wrote:
>> On Wed, 22 Mar 2023 at 14:29, Philippe Mathieu-Daudé 
>> <philmd@linaro.org> wrote:
>>>
>>> Fix when building QEMU configured with --disable-tcg:
>>>
>>>    Undefined symbols for architecture arm64:
>>>      "_arm_v7m_get_sp_ptr", referenced from:
>>>          _m_sysreg_get in target_arm_gdbstub.c.o
>>>      "_arm_v7m_mrs_control", referenced from:
>>>          _arm_gdb_get_m_systemreg in target_arm_gdbstub.c.o
>>>      "_pauth_ptr_mask", referenced from:
>>>          _aarch64_gdb_get_pauth_reg in target_arm_gdbstub64.c.o
>>>    ld: symbol(s) not found for architecture arm64
>>>    clang: error: linker command failed with exit code 1 (use -v to 
>>> see invocation)
>>>
>>> Philippe Mathieu-Daudé (2):
>>>    target/arm/gdbstub: Restrict aarch64_gdb_get_pauth_reg() to 
>>> CONFIG_TCG
>>>    target/arm/gdbstub: Only advertise M-profile features if TCG 
>>> available
>>
>> I've applied patch 2 to target-arm.next; thanks.
> 
> If you only take #2, then you need to squash this from #1:
> 
> -- >8 --
> diff --git a/target/arm/gdbstub.c b/target/arm/gdbstub.c
> @@ -21,6 +21,7 @@
>   #include "cpu.h"
>   #include "exec/gdbstub.h"
>   #include "gdbstub/helpers.h"
> +#include "sysemu/tcg.h"
>   #include "internals.h"
>   #include "cpregs.h"
> ---
> 
> I can respin if it eases your workflow.

Posted as:
https://lore.kernel.org/qemu-devel/20230328133054.6553-2-philmd@linaro.org/

Along with rth's suggestion as another patch.