Re: Broken RISC-V code in newlib

Eric Salem <[email protected]>
Newsgroups gmane.comp.lib.newlib
Message-ID <[email protected]>
On 3/25/25 10:07 AM, Jeff Law wrote:
> On 3/25/25 8:12 AM, Eric Salem wrote:
> 
>>
>> I'm having a hard time recreating this on my machine, which is why I wouldn't have gotten these errors. Can you apply the below patch? It should address the errors. I want to make sure it works for you before emailing the list with a fix.
> Yea, I can throw it into the tester, it's got provisions for this kind of evaluation.  Results in an hour or so depending on my morning meeting schedule ;-)
> 
> jeff

Updated patch for you. I didn't add underscores as a prefix to the new type since Newlib isn't doing that for its existing typedefs, so I figured to make it consistent.

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 */
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.