diff mbox series

RISC-V: Inform checksyscalls.sh about the rv32 ABI

Message ID 20210906185201.368451-1-palmerdabbelt@google.com (mailing list archive)
State New, archived
Headers show
Series RISC-V: Inform checksyscalls.sh about the rv32 ABI | expand

Commit Message

Palmer Dabbelt Sept. 6, 2021, 6:52 p.m. UTC
I remember having seen some build output from this before, but didn't
know what it meant.  These are now showing up as errors.

As far as I understand our 32-bit syscall ABI is fine, the issue here is
simply that we don't need the syscalls in question because we never had
the legacy versions to begin with.  One could imagine describing these
constraints in an arch-generic way, but I'm not sure it's worth
bothering until another arch comes along that behaves this way.

Fixes: d4c08b9776b3 ("riscv: Use latest system call ABI")
Signed-off-by: Palmer Dabbelt <palmerdabbelt@google.com>
---
 arch/riscv/include/asm/unistd.h | 14 ++++++++++++++
 1 file changed, 14 insertions(+)

Comments

Arnd Bergmann Sept. 6, 2021, 10:57 p.m. UTC | #1
On Mon, Sep 6, 2021 at 8:52 PM Palmer Dabbelt <palmerdabbelt@google.com> wrote:
>
> I remember having seen some build output from this before, but didn't
> know what it meant.  These are now showing up as errors.
>
> As far as I understand our 32-bit syscall ABI is fine, the issue here is
> simply that we don't need the syscalls in question because we never had
> the legacy versions to begin with.  One could imagine describing these
> constraints in an arch-generic way, but I'm not sure it's worth
> bothering until another arch comes along that behaves this way.
>
> Fixes: d4c08b9776b3 ("riscv: Use latest system call ABI")
> Signed-off-by: Palmer Dabbelt <palmerdabbelt@google.com>
> ---
>  arch/riscv/include/asm/unistd.h | 14 ++++++++++++++
>  1 file changed, 14 insertions(+)
>
> diff --git a/arch/riscv/include/asm/unistd.h b/arch/riscv/include/asm/unistd.h
> index 6c316093a1e5..cbc2646b4662 100644
> --- a/arch/riscv/include/asm/unistd.h
> +++ b/arch/riscv/include/asm/unistd.h
> @@ -14,3 +14,17 @@
>  #include <uapi/asm/unistd.h>
>
>  #define NR_syscalls (__NR_syscalls)
> +
> +#if __BITS_PER_LONG == 32
> +/*
> + * RISC-V never had the 32-bit off/len syscall flavors, which means we don't
> + * need the the explicit off64/len64 versions.
> + */
> +#define __IGNORE_fstat64
> +#define __IGNORE_fstatat64

These should be in the checksyscalls.pl script: new architectures can all just
use statx() here. This has nothing to do with 32-bit off/len though, only
with time64.

> +/*
> + * RISC-V never had the 32-bit time_t syscall flavors, which means we don't
> + * need the explicit 64-bit versions.
> + */
> +#define __IGNORE_clone3
> +#endif

clone3 should be implemented, IIRC it's only missing because there is no
easy way to do an architecture-independent version.

        Arnd
Palmer Dabbelt Oct. 3, 2021, 12:55 a.m. UTC | #2
On Mon, 06 Sep 2021 15:57:32 PDT (-0700), Arnd Bergmann wrote:
> On Mon, Sep 6, 2021 at 8:52 PM Palmer Dabbelt <palmerdabbelt@google.com> wrote:
>>
>> I remember having seen some build output from this before, but didn't
>> know what it meant.  These are now showing up as errors.
>>
>> As far as I understand our 32-bit syscall ABI is fine, the issue here is
>> simply that we don't need the syscalls in question because we never had
>> the legacy versions to begin with.  One could imagine describing these
>> constraints in an arch-generic way, but I'm not sure it's worth
>> bothering until another arch comes along that behaves this way.
>>
>> Fixes: d4c08b9776b3 ("riscv: Use latest system call ABI")
>> Signed-off-by: Palmer Dabbelt <palmerdabbelt@google.com>
>> ---
>>  arch/riscv/include/asm/unistd.h | 14 ++++++++++++++
>>  1 file changed, 14 insertions(+)
>>
>> diff --git a/arch/riscv/include/asm/unistd.h b/arch/riscv/include/asm/unistd.h
>> index 6c316093a1e5..cbc2646b4662 100644
>> --- a/arch/riscv/include/asm/unistd.h
>> +++ b/arch/riscv/include/asm/unistd.h
>> @@ -14,3 +14,17 @@
>>  #include <uapi/asm/unistd.h>
>>
>>  #define NR_syscalls (__NR_syscalls)
>> +
>> +#if __BITS_PER_LONG == 32
>> +/*
>> + * RISC-V never had the 32-bit off/len syscall flavors, which means we don't
>> + * need the the explicit off64/len64 versions.
>> + */
>> +#define __IGNORE_fstat64
>> +#define __IGNORE_fstatat64
>
> These should be in the checksyscalls.pl script: new architectures can all just
> use statx() here. This has nothing to do with 32-bit off/len though, only
> with time64.

OK, I've sent a patch to add it over there.

>
>> +/*
>> + * RISC-V never had the 32-bit time_t syscall flavors, which means we don't
>> + * need the explicit 64-bit versions.
>> + */
>> +#define __IGNORE_clone3
>> +#endif
>
> clone3 should be implemented, IIRC it's only missing because there is no
> easy way to do an architecture-independent version.

Not sure what I was thinking when I wrote that one.  Luckily there's an 
easy __ARCH_WANT_SYS_CLONE3 now, so we can just use that.  I'm not sure 
why it never ended up in rv32, maybe because we were only testing rv64 
at the time.

I sent a patch for this too.
diff mbox series

Patch

diff --git a/arch/riscv/include/asm/unistd.h b/arch/riscv/include/asm/unistd.h
index 6c316093a1e5..cbc2646b4662 100644
--- a/arch/riscv/include/asm/unistd.h
+++ b/arch/riscv/include/asm/unistd.h
@@ -14,3 +14,17 @@ 
 #include <uapi/asm/unistd.h>
 
 #define NR_syscalls (__NR_syscalls)
+
+#if __BITS_PER_LONG == 32
+/*
+ * RISC-V never had the 32-bit off/len syscall flavors, which means we don't
+ * need the the explicit off64/len64 versions.
+ */
+#define __IGNORE_fstat64
+#define __IGNORE_fstatat64
+/*
+ * RISC-V never had the 32-bit time_t syscall flavors, which means we don't
+ * need the explicit 64-bit versions.
+ */
+#define __IGNORE_clone3
+#endif