linux-kselftest.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v2 0/2] nolibc: remove reliance on system headers
@ 2023-08-30 15:07 Thomas Weißschuh
  2023-08-30 15:07 ` [PATCH v2 1/2] tools/nolibc: add stdarg.h header Thomas Weißschuh
                   ` (2 more replies)
  0 siblings, 3 replies; 6+ messages in thread
From: Thomas Weißschuh @ 2023-08-30 15:07 UTC (permalink / raw)
  To: Willy Tarreau, Shuah Khan
  Cc: Zhangjin Wu, Yuan Tan, linux-kernel, linux-kselftest,
	Thomas Weißschuh

This was prompted by the discussion about output directory support with
O=.
It seems sometimes we were pulling in system headers making testing
annoying and unreliable.

Willy:

I did not implement the '#ifdef va_start` guard that we discussed
before. In my understanding the latest agreement does not need it
anymore. Please let me know if this is incorrect.

Signed-off-by: Thomas Weißschuh <linux@weissschuh.net>
---
Changes in v2:
- Adapt comment in nolibc.h
- <stdarg.h> -> "stdarg.h"
- Link to v1: https://lore.kernel.org/r/20230827-nolibc-nostdinc-v1-0-995d1811f1f3@weissschuh.net

---
Thomas Weißschuh (2):
      tools/nolibc: add stdarg.h header
      selftests/nolibc: use -nostdinc for nolibc-test

 tools/include/nolibc/Makefile           |  1 +
 tools/include/nolibc/nolibc.h           |  4 ++--
 tools/include/nolibc/stdarg.h           | 16 ++++++++++++++++
 tools/include/nolibc/stdio.h            |  3 +--
 tools/include/nolibc/sys.h              |  2 +-
 tools/testing/selftests/nolibc/Makefile |  2 +-
 6 files changed, 22 insertions(+), 6 deletions(-)
---
base-commit: 556fb7131e03b0283672fb40f6dc2d151752aaa7
change-id: 20230827-nolibc-nostdinc-203908130d67

Best regards,
-- 
Thomas Weißschuh <linux@weissschuh.net>


^ permalink raw reply	[flat|nested] 6+ messages in thread

* [PATCH v2 1/2] tools/nolibc: add stdarg.h header
  2023-08-30 15:07 [PATCH v2 0/2] nolibc: remove reliance on system headers Thomas Weißschuh
@ 2023-08-30 15:07 ` Thomas Weißschuh
  2023-08-30 15:07 ` [PATCH v2 2/2] selftests/nolibc: use -nostdinc for nolibc-test Thomas Weißschuh
  2023-08-30 20:48 ` [PATCH v2 0/2] nolibc: remove reliance on system headers Willy Tarreau
  2 siblings, 0 replies; 6+ messages in thread
From: Thomas Weißschuh @ 2023-08-30 15:07 UTC (permalink / raw)
  To: Willy Tarreau, Shuah Khan
  Cc: Zhangjin Wu, Yuan Tan, linux-kernel, linux-kselftest,
	Thomas Weißschuh

This allows nolic to work with `-nostdinc` avoiding any reliance on
system headers.

The implementation has been lifted from musl libc 1.2.4.
There is already an implementation of stdarg.h in include/linux/stdarg.h
but that is GPL licensed and therefore not suitable for nolibc.

The used compiler builtins have been validated to be at least available
since GCC 4.1.2 and clang 3.0.0.

Signed-off-by: Thomas Weißschuh <linux@weissschuh.net>
---
 tools/include/nolibc/Makefile |  1 +
 tools/include/nolibc/nolibc.h |  4 ++--
 tools/include/nolibc/stdarg.h | 16 ++++++++++++++++
 tools/include/nolibc/stdio.h  |  3 +--
 tools/include/nolibc/sys.h    |  2 +-
 5 files changed, 21 insertions(+), 5 deletions(-)

diff --git a/tools/include/nolibc/Makefile b/tools/include/nolibc/Makefile
index 909b6eb500fe..e69c26abe1ea 100644
--- a/tools/include/nolibc/Makefile
+++ b/tools/include/nolibc/Makefile
@@ -34,6 +34,7 @@ all_files := \
 		signal.h \
 		stackprotector.h \
 		std.h \
+		stdarg.h \
 		stdint.h \
 		stdlib.h \
 		string.h \
diff --git a/tools/include/nolibc/nolibc.h b/tools/include/nolibc/nolibc.h
index 1f8d821000ac..989e707263a4 100644
--- a/tools/include/nolibc/nolibc.h
+++ b/tools/include/nolibc/nolibc.h
@@ -74,10 +74,10 @@
  *            -I../nolibc -o hello hello.c -lgcc
  *
  * The available standard (but limited) include files are:
- *   ctype.h, errno.h, signal.h, stdio.h, stdlib.h, string.h, time.h
+ *   ctype.h, errno.h, signal.h, stdarg.h, stdio.h, stdlib.h, string.h, time.h
  *
  * In addition, the following ones are expected to be provided by the compiler:
- *   float.h, stdarg.h, stddef.h
+ *   float.h, stddef.h
  *
  * The following ones which are part to the C standard are not provided:
  *   assert.h, locale.h, math.h, setjmp.h, limits.h
diff --git a/tools/include/nolibc/stdarg.h b/tools/include/nolibc/stdarg.h
new file mode 100644
index 000000000000..c628b5783da6
--- /dev/null
+++ b/tools/include/nolibc/stdarg.h
@@ -0,0 +1,16 @@
+/* SPDX-License-Identifier: LGPL-2.1 OR MIT */
+/*
+ * Variadic argument support for NOLIBC
+ * Copyright (C) 2005-2020 Rich Felker, et al.
+ */
+
+#ifndef _NOLIBC_STDARG_H
+#define _NOLIBC_STDARG_H
+
+typedef __builtin_va_list va_list;
+#define va_start(v, l)   __builtin_va_start(v, l)
+#define va_end(v)        __builtin_va_end(v)
+#define va_arg(v, l)     __builtin_va_arg(v, l)
+#define va_copy(d, s)    __builtin_va_copy(d, s)
+
+#endif /* _NOLIBC_STDARG_H */
diff --git a/tools/include/nolibc/stdio.h b/tools/include/nolibc/stdio.h
index cae402c11e57..d7ef43973916 100644
--- a/tools/include/nolibc/stdio.h
+++ b/tools/include/nolibc/stdio.h
@@ -7,13 +7,12 @@
 #ifndef _NOLIBC_STDIO_H
 #define _NOLIBC_STDIO_H
 
-#include <stdarg.h>
-
 #include "std.h"
 #include "arch.h"
 #include "errno.h"
 #include "types.h"
 #include "sys.h"
+#include "stdarg.h"
 #include "stdlib.h"
 #include "string.h"
 
diff --git a/tools/include/nolibc/sys.h b/tools/include/nolibc/sys.h
index fdb6bd6c0e2f..b478750c9004 100644
--- a/tools/include/nolibc/sys.h
+++ b/tools/include/nolibc/sys.h
@@ -7,7 +7,6 @@
 #ifndef _NOLIBC_SYS_H
 #define _NOLIBC_SYS_H
 
-#include <stdarg.h>
 #include "std.h"
 
 /* system includes */
@@ -25,6 +24,7 @@
 
 #include "arch.h"
 #include "errno.h"
+#include "stdarg.h"
 #include "types.h"
 
 

-- 
2.42.0


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH v2 2/2] selftests/nolibc: use -nostdinc for nolibc-test
  2023-08-30 15:07 [PATCH v2 0/2] nolibc: remove reliance on system headers Thomas Weißschuh
  2023-08-30 15:07 ` [PATCH v2 1/2] tools/nolibc: add stdarg.h header Thomas Weißschuh
@ 2023-08-30 15:07 ` Thomas Weißschuh
  2023-08-30 20:48 ` [PATCH v2 0/2] nolibc: remove reliance on system headers Willy Tarreau
  2 siblings, 0 replies; 6+ messages in thread
From: Thomas Weißschuh @ 2023-08-30 15:07 UTC (permalink / raw)
  To: Willy Tarreau, Shuah Khan
  Cc: Zhangjin Wu, Yuan Tan, linux-kernel, linux-kselftest,
	Thomas Weißschuh

Avoid any accidental reliance on system includes.

Signed-off-by: Thomas Weißschuh <linux@weissschuh.net>
---
 tools/testing/selftests/nolibc/Makefile | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tools/testing/selftests/nolibc/Makefile b/tools/testing/selftests/nolibc/Makefile
index dfe66776a331..689658f81a19 100644
--- a/tools/testing/selftests/nolibc/Makefile
+++ b/tools/testing/selftests/nolibc/Makefile
@@ -170,7 +170,7 @@ sysroot/$(ARCH)/include:
 ifneq ($(NOLIBC_SYSROOT),0)
 nolibc-test: nolibc-test.c sysroot/$(ARCH)/include
 	$(QUIET_CC)$(CC) $(CFLAGS) $(LDFLAGS) -o $@ \
-	  -nostdlib -static -Isysroot/$(ARCH)/include $< -lgcc
+	  -nostdlib -nostdinc -static -Isysroot/$(ARCH)/include $< -lgcc
 else
 nolibc-test: nolibc-test.c
 	$(QUIET_CC)$(CC) $(CFLAGS) $(LDFLAGS) -o $@ \

-- 
2.42.0


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [PATCH v2 0/2] nolibc: remove reliance on system headers
  2023-08-30 15:07 [PATCH v2 0/2] nolibc: remove reliance on system headers Thomas Weißschuh
  2023-08-30 15:07 ` [PATCH v2 1/2] tools/nolibc: add stdarg.h header Thomas Weißschuh
  2023-08-30 15:07 ` [PATCH v2 2/2] selftests/nolibc: use -nostdinc for nolibc-test Thomas Weißschuh
@ 2023-08-30 20:48 ` Willy Tarreau
  2023-08-31  4:12   ` Zhangjin Wu
  2 siblings, 1 reply; 6+ messages in thread
From: Willy Tarreau @ 2023-08-30 20:48 UTC (permalink / raw)
  To: Thomas Weißschuh
  Cc: Shuah Khan, Zhangjin Wu, Yuan Tan, linux-kernel, linux-kselftest

On Wed, Aug 30, 2023 at 05:07:11PM +0200, Thomas Weißschuh wrote:
> This was prompted by the discussion about output directory support with
> O=.
> It seems sometimes we were pulling in system headers making testing
> annoying and unreliable.
> 
> Willy:
> 
> I did not implement the '#ifdef va_start` guard that we discussed
> before. In my understanding the latest agreement does not need it
> anymore. Please let me know if this is incorrect.

No that's fine given your goal of including just "nolibc.h" and no
other regular include file, I agree. I've just merged it and pushed
it to the -next branch.

Thank you Thomas!
Willy

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH v2 0/2] nolibc: remove reliance on system headers
  2023-08-30 20:48 ` [PATCH v2 0/2] nolibc: remove reliance on system headers Willy Tarreau
@ 2023-08-31  4:12   ` Zhangjin Wu
  2023-08-31  5:31     ` Willy Tarreau
  0 siblings, 1 reply; 6+ messages in thread
From: Zhangjin Wu @ 2023-08-31  4:12 UTC (permalink / raw)
  To: w; +Cc: falcon, linux-kernel, linux-kselftest, linux, shuah, tanyuan

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: Type: text/plain; charset=UTF-8, Size: 1221 bytes --]

Hi, Willy

> On Wed, Aug 30, 2023 at 05:07:11PM +0200, Thomas Weißschuh wrote:
> > This was prompted by the discussion about output directory support with
> > O=.
> > It seems sometimes we were pulling in system headers making testing
> > annoying and unreliable.
> > 
> > Willy:
> > 
> > I did not implement the '#ifdef va_start` guard that we discussed
> > before. In my understanding the latest agreement does not need it
> > anymore. Please let me know if this is incorrect.
> 
> No that's fine given your goal of including just "nolibc.h" and no
> other regular include file, I agree. I've just merged it and pushed
> it to the -next branch.
>
> Thank you Thomas!
> Willy
> 
> Subject: [PATCH v2 1/2] tools/nolibc: add stdarg.h header
> 
> This allows nolic to work with `-nostdinc` avoiding any reliance on
> system headers.
>

A little typo in above commit message: nolic -> nolibc.

Thanks,
Zhangjin

> The implementation has been lifted from musl libc 1.2.4.
> There is already an implementation of stdarg.h in include/linux/stdarg.h
> but that is GPL licensed and therefore not suitable for nolibc.
> 
> The used compiler builtins have been validated to be at least available
> since GCC 4.1.2 and clang 3.0.0.

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH v2 0/2] nolibc: remove reliance on system headers
  2023-08-31  4:12   ` Zhangjin Wu
@ 2023-08-31  5:31     ` Willy Tarreau
  0 siblings, 0 replies; 6+ messages in thread
From: Willy Tarreau @ 2023-08-31  5:31 UTC (permalink / raw)
  To: Zhangjin Wu; +Cc: linux-kernel, linux-kselftest, linux, shuah, tanyuan

On Thu, Aug 31, 2023 at 12:12:02PM +0800, Zhangjin Wu wrote:
> > Subject: [PATCH v2 1/2] tools/nolibc: add stdarg.h header
> > 
> > This allows nolic to work with `-nostdinc` avoiding any reliance on
> > system headers.
> >
> 
> A little typo in above commit message: nolic -> nolibc.

Yeah I noticed and forgot to fix it. Will probably do it next time I
have the opportunity to touch that branch ;-)

Willy

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2023-08-31  5:32 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-08-30 15:07 [PATCH v2 0/2] nolibc: remove reliance on system headers Thomas Weißschuh
2023-08-30 15:07 ` [PATCH v2 1/2] tools/nolibc: add stdarg.h header Thomas Weißschuh
2023-08-30 15:07 ` [PATCH v2 2/2] selftests/nolibc: use -nostdinc for nolibc-test Thomas Weißschuh
2023-08-30 20:48 ` [PATCH v2 0/2] nolibc: remove reliance on system headers Willy Tarreau
2023-08-31  4:12   ` Zhangjin Wu
2023-08-31  5:31     ` Willy Tarreau

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).