[v2] m68k: Avoid CONFIG_COLDFIRE switch in uapi header

Message ID 20240219160126.510498-1-thuth@redhat.com
State New
Headers
Series [v2] m68k: Avoid CONFIG_COLDFIRE switch in uapi header |

Commit Message

Thomas Huth Feb. 19, 2024, 4:01 p.m. UTC
  We should not use any CONFIG switches in uapi headers since these
only work during kernel compilation; they are not defined for
userspace. Fix it by moving the struct pt_regs to the kernel-internal
header instead - struct pt_regs does not seem to be required for
the userspace headers on m68k at all.

Suggested-by: Greg Ungerer <gerg@linux-m68k.org>
Signed-off-by: Thomas Huth <thuth@redhat.com>
---
 v2: Move the struct instead of changing the #ifdef

 See previous discussion here:
 https://lore.kernel.org/lkml/6e3f2a2e-2430-4b4f-9ead-d9a4d5e42713@linux-m68k.org/

 arch/m68k/include/asm/ptrace.h      | 29 +++++++++++++++++++++++++++++
 arch/m68k/include/uapi/asm/ptrace.h | 28 ----------------------------
 scripts/headers_install.sh          |  1 -
 3 files changed, 29 insertions(+), 29 deletions(-)
  

Comments

Greg Ungerer Feb. 20, 2024, 2:13 p.m. UTC | #1
On 20/2/24 02:01, Thomas Huth wrote:
> We should not use any CONFIG switches in uapi headers since these
> only work during kernel compilation; they are not defined for
> userspace. Fix it by moving the struct pt_regs to the kernel-internal
> header instead - struct pt_regs does not seem to be required for
> the userspace headers on m68k at all.
> 
> Suggested-by: Greg Ungerer <gerg@linux-m68k.org>
> Signed-off-by: Thomas Huth <thuth@redhat.com>
> ---
>   v2: Move the struct instead of changing the #ifdef
> 
>   See previous discussion here:
>   https://lore.kernel.org/lkml/6e3f2a2e-2430-4b4f-9ead-d9a4d5e42713@linux-m68k.org/

I am fine with this. FWIW the following architectures do
not define pt_regs in their uapi/ptrace.h header either:
arc, arm64, loongarch, nios2, openrisc, riscv, s390, xtensa
Though quite a few of them have a user_pt_regs instead.

So for me:

Acked-by: Greg Ungerer <gerg@linux-m68k.org>

Geert, Arnd, do you have any thoughts on this?

Regards
Greg



>   arch/m68k/include/asm/ptrace.h      | 29 +++++++++++++++++++++++++++++
>   arch/m68k/include/uapi/asm/ptrace.h | 28 ----------------------------
>   scripts/headers_install.sh          |  1 -
>   3 files changed, 29 insertions(+), 29 deletions(-)
> 
> diff --git a/arch/m68k/include/asm/ptrace.h b/arch/m68k/include/asm/ptrace.h
> index ea5a80ca1ab33..f200712946603 100644
> --- a/arch/m68k/include/asm/ptrace.h
> +++ b/arch/m68k/include/asm/ptrace.h
> @@ -6,6 +6,35 @@
>   
>   #ifndef __ASSEMBLY__
>   
> +/*
> + * This struct defines the way the registers are stored on the
> + * stack during a system call.
> + */
> +struct pt_regs {
> +	long     d1;
> +	long     d2;
> +	long     d3;
> +	long     d4;
> +	long     d5;
> +	long     a0;
> +	long     a1;
> +	long     a2;
> +	long     d0;
> +	long     orig_d0;
> +	long     stkadj;
> +#ifdef CONFIG_COLDFIRE
> +	unsigned format :  4; /* frame format specifier */
> +	unsigned vector : 12; /* vector offset */
> +	unsigned short sr;
> +	unsigned long  pc;
> +#else
> +	unsigned short sr;
> +	unsigned long  pc;
> +	unsigned format :  4; /* frame format specifier */
> +	unsigned vector : 12; /* vector offset */
> +#endif
> +};
> +
>   #ifndef PS_S
>   #define PS_S  (0x2000)
>   #define PS_M  (0x1000)
> diff --git a/arch/m68k/include/uapi/asm/ptrace.h b/arch/m68k/include/uapi/asm/ptrace.h
> index 5b50ea592e002..a83bfe36dd10a 100644
> --- a/arch/m68k/include/uapi/asm/ptrace.h
> +++ b/arch/m68k/include/uapi/asm/ptrace.h
> @@ -24,34 +24,6 @@
>   
>   #ifndef __ASSEMBLY__
>   
> -/* this struct defines the way the registers are stored on the
> -   stack during a system call. */
> -
> -struct pt_regs {
> -  long     d1;
> -  long     d2;
> -  long     d3;
> -  long     d4;
> -  long     d5;
> -  long     a0;
> -  long     a1;
> -  long     a2;
> -  long     d0;
> -  long     orig_d0;
> -  long     stkadj;
> -#ifdef CONFIG_COLDFIRE
> -  unsigned format :  4; /* frame format specifier */
> -  unsigned vector : 12; /* vector offset */
> -  unsigned short sr;
> -  unsigned long  pc;
> -#else
> -  unsigned short sr;
> -  unsigned long  pc;
> -  unsigned format :  4; /* frame format specifier */
> -  unsigned vector : 12; /* vector offset */
> -#endif
> -};
> -
>   /*
>    * This is the extended stack used by signal handlers and the context
>    * switcher: it's pushed after the normal "struct pt_regs".
> diff --git a/scripts/headers_install.sh b/scripts/headers_install.sh
> index f7d9b114de8f7..6bbccb43f7e72 100755
> --- a/scripts/headers_install.sh
> +++ b/scripts/headers_install.sh
> @@ -74,7 +74,6 @@ arch/arc/include/uapi/asm/page.h:CONFIG_ARC_PAGE_SIZE_16K
>   arch/arc/include/uapi/asm/page.h:CONFIG_ARC_PAGE_SIZE_4K
>   arch/arc/include/uapi/asm/swab.h:CONFIG_ARC_HAS_SWAPE
>   arch/arm/include/uapi/asm/ptrace.h:CONFIG_CPU_ENDIAN_BE8
> -arch/m68k/include/uapi/asm/ptrace.h:CONFIG_COLDFIRE
>   arch/nios2/include/uapi/asm/swab.h:CONFIG_NIOS2_CI_SWAB_NO
>   arch/nios2/include/uapi/asm/swab.h:CONFIG_NIOS2_CI_SWAB_SUPPORT
>   arch/x86/include/uapi/asm/auxvec.h:CONFIG_IA32_EMULATION
  
Arnd Bergmann Feb. 20, 2024, 3:09 p.m. UTC | #2
On Tue, Feb 20, 2024, at 15:13, Greg Ungerer wrote:
> On 20/2/24 02:01, Thomas Huth wrote:
>> We should not use any CONFIG switches in uapi headers since these
>> only work during kernel compilation; they are not defined for
>> userspace. Fix it by moving the struct pt_regs to the kernel-internal
>> header instead - struct pt_regs does not seem to be required for
>> the userspace headers on m68k at all.
>> 
>> Suggested-by: Greg Ungerer <gerg@linux-m68k.org>
>> Signed-off-by: Thomas Huth <thuth@redhat.com>
>> ---
>>   v2: Move the struct instead of changing the #ifdef
>> 
>>   See previous discussion here:
>>   https://lore.kernel.org/lkml/6e3f2a2e-2430-4b4f-9ead-d9a4d5e42713@linux-m68k.org/
>
> I am fine with this. FWIW the following architectures do
> not define pt_regs in their uapi/ptrace.h header either:
> arc, arm64, loongarch, nios2, openrisc, riscv, s390, xtensa
> Though quite a few of them have a user_pt_regs instead.
>
> So for me:
>
> Acked-by: Greg Ungerer <gerg@linux-m68k.org>
>
> Geert, Arnd, do you have any thoughts on this?

It clearly doesn't change the ABI, so that part is fine.

If asm/ptrace.h is included by some userspace tool to
get the definition, it might cause a compile-time error
that needs a trivial source change.

This could be needed for ptrace (gdb, strace) or signal
handling and setjmp (libc), though it's more likely that these
already have their own copies.

     Arnd
  
Thomas Huth Feb. 23, 2024, 8:13 a.m. UTC | #3
On 20/02/2024 16.09, Arnd Bergmann wrote:
> On Tue, Feb 20, 2024, at 15:13, Greg Ungerer wrote:
>> On 20/2/24 02:01, Thomas Huth wrote:
>>> We should not use any CONFIG switches in uapi headers since these
>>> only work during kernel compilation; they are not defined for
>>> userspace. Fix it by moving the struct pt_regs to the kernel-internal
>>> header instead - struct pt_regs does not seem to be required for
>>> the userspace headers on m68k at all.
>>>
>>> Suggested-by: Greg Ungerer <gerg@linux-m68k.org>
>>> Signed-off-by: Thomas Huth <thuth@redhat.com>
>>> ---
>>>    v2: Move the struct instead of changing the #ifdef
>>>
>>>    See previous discussion here:
>>>    https://lore.kernel.org/lkml/6e3f2a2e-2430-4b4f-9ead-d9a4d5e42713@linux-m68k.org/
>>
>> I am fine with this. FWIW the following architectures do
>> not define pt_regs in their uapi/ptrace.h header either:
>> arc, arm64, loongarch, nios2, openrisc, riscv, s390, xtensa
>> Though quite a few of them have a user_pt_regs instead.
>>
>> So for me:
>>
>> Acked-by: Greg Ungerer <gerg@linux-m68k.org>
>>
>> Geert, Arnd, do you have any thoughts on this?
> 
> It clearly doesn't change the ABI, so that part is fine.
> 
> If asm/ptrace.h is included by some userspace tool to
> get the definition, it might cause a compile-time error
> that needs a trivial source change.
> 
> This could be needed for ptrace (gdb, strace) or signal
> handling and setjmp (libc), though it's more likely that these
> already have their own copies.

If we still feel unsure, we should maybe rather go with v1:

  https://lore.kernel.org/lkml/20231110103120.387517-1-thuth@redhat.com/

?

  Thomas
  

Patch

diff --git a/arch/m68k/include/asm/ptrace.h b/arch/m68k/include/asm/ptrace.h
index ea5a80ca1ab33..f200712946603 100644
--- a/arch/m68k/include/asm/ptrace.h
+++ b/arch/m68k/include/asm/ptrace.h
@@ -6,6 +6,35 @@ 
 
 #ifndef __ASSEMBLY__
 
+/*
+ * This struct defines the way the registers are stored on the
+ * stack during a system call.
+ */
+struct pt_regs {
+	long     d1;
+	long     d2;
+	long     d3;
+	long     d4;
+	long     d5;
+	long     a0;
+	long     a1;
+	long     a2;
+	long     d0;
+	long     orig_d0;
+	long     stkadj;
+#ifdef CONFIG_COLDFIRE
+	unsigned format :  4; /* frame format specifier */
+	unsigned vector : 12; /* vector offset */
+	unsigned short sr;
+	unsigned long  pc;
+#else
+	unsigned short sr;
+	unsigned long  pc;
+	unsigned format :  4; /* frame format specifier */
+	unsigned vector : 12; /* vector offset */
+#endif
+};
+
 #ifndef PS_S
 #define PS_S  (0x2000)
 #define PS_M  (0x1000)
diff --git a/arch/m68k/include/uapi/asm/ptrace.h b/arch/m68k/include/uapi/asm/ptrace.h
index 5b50ea592e002..a83bfe36dd10a 100644
--- a/arch/m68k/include/uapi/asm/ptrace.h
+++ b/arch/m68k/include/uapi/asm/ptrace.h
@@ -24,34 +24,6 @@ 
 
 #ifndef __ASSEMBLY__
 
-/* this struct defines the way the registers are stored on the
-   stack during a system call. */
-
-struct pt_regs {
-  long     d1;
-  long     d2;
-  long     d3;
-  long     d4;
-  long     d5;
-  long     a0;
-  long     a1;
-  long     a2;
-  long     d0;
-  long     orig_d0;
-  long     stkadj;
-#ifdef CONFIG_COLDFIRE
-  unsigned format :  4; /* frame format specifier */
-  unsigned vector : 12; /* vector offset */
-  unsigned short sr;
-  unsigned long  pc;
-#else
-  unsigned short sr;
-  unsigned long  pc;
-  unsigned format :  4; /* frame format specifier */
-  unsigned vector : 12; /* vector offset */
-#endif
-};
-
 /*
  * This is the extended stack used by signal handlers and the context
  * switcher: it's pushed after the normal "struct pt_regs".
diff --git a/scripts/headers_install.sh b/scripts/headers_install.sh
index f7d9b114de8f7..6bbccb43f7e72 100755
--- a/scripts/headers_install.sh
+++ b/scripts/headers_install.sh
@@ -74,7 +74,6 @@  arch/arc/include/uapi/asm/page.h:CONFIG_ARC_PAGE_SIZE_16K
 arch/arc/include/uapi/asm/page.h:CONFIG_ARC_PAGE_SIZE_4K
 arch/arc/include/uapi/asm/swab.h:CONFIG_ARC_HAS_SWAPE
 arch/arm/include/uapi/asm/ptrace.h:CONFIG_CPU_ENDIAN_BE8
-arch/m68k/include/uapi/asm/ptrace.h:CONFIG_COLDFIRE
 arch/nios2/include/uapi/asm/swab.h:CONFIG_NIOS2_CI_SWAB_NO
 arch/nios2/include/uapi/asm/swab.h:CONFIG_NIOS2_CI_SWAB_SUPPORT
 arch/x86/include/uapi/asm/auxvec.h:CONFIG_IA32_EMULATION