Re: [PATCH] newlib: riscv: Fix build

Kito Cheng <[email protected]>
Newsgroups gmane.comp.lib.newlib
Message-ID <CA+yXCZDiSdz7DH4-HTR369Xiqfna8H1hNK0Mvdj9E-RrLOjkyA@mail.gmail.com>
Just one more comment, don't put xlenint.h in
newlib/libc/machine/riscv/sys, please move that into
newlib/libc/machine/riscv
The difference between the two is that the former will be installed
into the toolchain, but the latter one won't.

Otherwise LGTM, also verified on my side :)


On Wed, Mar 26, 2025 at 3:20 AM Eric Salem <[email protected]> wrote:
>
> The sys/asm.h header file is included for certain assembly files, so
> move the typedef to a separate header file due to the build breaking on
> some systems. Also include the port's string.h header file instead of
> the system's version.
>
> Addresses: https://sourceware.org/pipermail/newlib/2025/021591.html
> Fixes: c3b9bb173c8c ("newlib: riscv: Add XLEN typedef and clean up types")
> Reported-by: Jeff Law <[email protected]>
> Suggested-by: Kito Cheng <[email protected]>
> Signed-off-by: Eric Salem <[email protected]>
> ---
>  newlib/libc/machine/riscv/stpcpy.c      |  2 +-
>  newlib/libc/machine/riscv/strcpy.c      |  2 +-
>  newlib/libc/machine/riscv/strlen.c      |  4 ++--
>  newlib/libc/machine/riscv/sys/asm.h     |  4 ----
>  newlib/libc/machine/riscv/sys/string.h  |  2 +-
>  newlib/libc/machine/riscv/sys/xlenint.h | 14 ++++++++++++++
>  6 files changed, 19 insertions(+), 9 deletions(-)
>  create mode 100644 newlib/libc/machine/riscv/sys/xlenint.h
>
> diff --git a/newlib/libc/machine/riscv/stpcpy.c b/newlib/libc/machine/riscv/stpcpy.c
> index 9243457b25a2..0c545623ba9e 100644
> --- a/newlib/libc/machine/riscv/stpcpy.c
> +++ b/newlib/libc/machine/riscv/stpcpy.c
> @@ -1,5 +1,5 @@
> -#include <string.h>
>  #include <stdbool.h>
> +#include "sys/string.h"
>
>  char *stpcpy(char *dst, const char *src)
>  {
> diff --git a/newlib/libc/machine/riscv/strcpy.c b/newlib/libc/machine/riscv/strcpy.c
> index f770493fbc2d..856b66ebc801 100644
> --- a/newlib/libc/machine/riscv/strcpy.c
> +++ b/newlib/libc/machine/riscv/strcpy.c
> @@ -9,8 +9,8 @@
>     http://www.opensource.org/licenses.
>  */
>
> -#include <string.h>
>  #include <stdbool.h>
> +#include "sys/string.h"
>
>  char *strcpy(char *dst, const char *src)
>  {
> diff --git a/newlib/libc/machine/riscv/strlen.c b/newlib/libc/machine/riscv/strlen.c
> index 7e5d41617eac..398c4b426676 100644
> --- a/newlib/libc/machine/riscv/strlen.c
> +++ b/newlib/libc/machine/riscv/strlen.c
> @@ -9,9 +9,9 @@
>     http://www.opensource.org/licenses.
>  */
>
> -#include <string.h>
> +#include <stddef.h>
>  #include <stdint.h>
> -#include "sys/asm.h"
> +#include "sys/string.h"
>
>  size_t strlen(const char *str)
>  {
> diff --git a/newlib/libc/machine/riscv/sys/asm.h b/newlib/libc/machine/riscv/sys/asm.h
> index 0a354b220517..8c8aeb3ae775 100644
> --- a/newlib/libc/machine/riscv/sys/asm.h
> +++ b/newlib/libc/machine/riscv/sys/asm.h
> @@ -12,8 +12,6 @@
>  #ifndef _SYS_ASM_H
>  #define _SYS_ASM_H
>
> -#include <stdint.h>
> -
>  /*
>   * Macros to handle different pointer/register sizes for 32/64-bit code
>   */
> @@ -22,13 +20,11 @@
>  # define SZREG 8
>  # define REG_S sd
>  # define REG_L ld
> -typedef uint64_t uintxlen_t;
>  #elif __riscv_xlen == 32
>  # define PTRLOG 2
>  # define SZREG 4
>  # define REG_S sw
>  # define REG_L lw
> -typedef uint32_t uintxlen_t;
>  #else
>  # error __riscv_xlen must equal 32 or 64
>  #endif
> diff --git a/newlib/libc/machine/riscv/sys/string.h b/newlib/libc/machine/riscv/sys/string.h
> index b65635cb6cb6..f72ffa6caac1 100644
> --- a/newlib/libc/machine/riscv/sys/string.h
> +++ b/newlib/libc/machine/riscv/sys/string.h
> @@ -13,7 +13,7 @@
>  #define _SYS_STRING_H
>
>  #include <stdbool.h>
> -#include "asm.h"
> +#include "xlenint.h"
>
>  #if __riscv_zbb
>    #include <riscv_bitmanip.h>
> diff --git a/newlib/libc/machine/riscv/sys/xlenint.h b/newlib/libc/machine/riscv/sys/xlenint.h
> new file mode 100644
> index 000000000000..37f0ac81f307
> --- /dev/null
> +++ b/newlib/libc/machine/riscv/sys/xlenint.h
> @@ -0,0 +1,14 @@
> +#ifndef _SYS_XLENINT_H
> +#define _SYS_XLENINT_H
> +
> +#include <stdint.h>
> +
> +#if __riscv_xlen == 64
> +typedef uint64_t uintxlen_t;
> +#elif __riscv_xlen == 32
> +typedef uint32_t uintxlen_t;
> +#else
> +# error __riscv_xlen must equal 32 or 64
> +#endif
> +
> +#endif /* sys/xlenint.h */
> --
> 2.49.0
>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.