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 >