From: "Paul E. McKenney" <[email protected]>
To: [email protected]
Cc: [email protected], [email protected], [email protected],
"Thomas Weißschuh" <[email protected]>,
"Willy Tarreau" <[email protected]>,
"Paul E . McKenney" <[email protected]>
Subject: [PATCH v2 nolibc 30/53] tools/nolibc: add autodetection for stackprotector support
Date: Mon, 12 Jun 2023 13:44:51 -0700 [thread overview]
Message-ID: <[email protected]> (raw)
In-Reply-To: <8b757cc0-3719-4e63-a755-9710384137bc@paulmck-laptop>
From: Thomas Weißschuh <[email protected]>
The stackprotector support in nolibc should be enabled iff it is also
enabled in the compiler.
Use the preprocessor defines added by gcc and clang if stackprotector
support is enable to automatically do so in nolibc.
This completely removes the need for any user-visible API.
To avoid inlining the lengthy preprocessor check into every user
introduce a new header compiler.h that abstracts the logic away.
As the define NOLIBC_STACKPROTECTOR is now not user-relevant anymore
prefix it with an underscore.
Suggested-by: Willy Tarreau <[email protected]>
Link: https://lore.kernel.org/lkml/[email protected]/
Signed-off-by: Thomas Weißschuh <[email protected]>
Signed-off-by: Willy Tarreau <[email protected]>
Signed-off-by: Paul E. McKenney <[email protected]>
---
tools/include/nolibc/Makefile | 1 +
tools/include/nolibc/arch-aarch64.h | 6 +++---
tools/include/nolibc/arch-arm.h | 6 +++---
tools/include/nolibc/arch-i386.h | 6 +++---
tools/include/nolibc/arch-loongarch.h | 6 +++---
tools/include/nolibc/arch-mips.h | 6 +++---
tools/include/nolibc/arch-riscv.h | 6 +++---
tools/include/nolibc/arch-x86_64.h | 6 +++---
tools/include/nolibc/compiler.h | 15 +++++++++++++++
tools/include/nolibc/stackprotector.h | 10 +++-------
tools/testing/selftests/nolibc/nolibc-test.c | 4 ++--
11 files changed, 42 insertions(+), 30 deletions(-)
create mode 100644 tools/include/nolibc/compiler.h
diff --git a/tools/include/nolibc/Makefile b/tools/include/nolibc/Makefile
index e37c3ac86e23..64d67b080744 100644
--- a/tools/include/nolibc/Makefile
+++ b/tools/include/nolibc/Makefile
@@ -26,6 +26,7 @@ endif
nolibc_arch := $(patsubst arm64,aarch64,$(ARCH))
arch_file := arch-$(nolibc_arch).h
all_files := \
+ compiler.h \
ctype.h \
errno.h \
nolibc.h \
diff --git a/tools/include/nolibc/arch-aarch64.h b/tools/include/nolibc/arch-aarch64.h
index 6a859131c530..64ec65b4ee38 100644
--- a/tools/include/nolibc/arch-aarch64.h
+++ b/tools/include/nolibc/arch-aarch64.h
@@ -7,6 +7,8 @@
#ifndef _NOLIBC_ARCH_AARCH64_H
#define _NOLIBC_ARCH_AARCH64_H
+#include "compiler.h"
+
/* The struct returned by the newfstatat() syscall. Differs slightly from the
* x86_64's stat one by field ordering, so be careful.
*/
@@ -172,13 +174,11 @@ struct sys_stat_struct {
char **environ __attribute__((weak));
const unsigned long *_auxv __attribute__((weak));
-#define __ARCH_SUPPORTS_STACK_PROTECTOR
-
/* startup code */
void __attribute__((weak,noreturn,optimize("omit-frame-pointer"),no_stack_protector)) _start(void)
{
__asm__ volatile (
-#ifdef NOLIBC_STACKPROTECTOR
+#ifdef _NOLIBC_STACKPROTECTOR
"bl __stack_chk_init\n" /* initialize stack protector */
#endif
"ldr x0, [sp]\n" /* argc (x0) was in the stack */
diff --git a/tools/include/nolibc/arch-arm.h b/tools/include/nolibc/arch-arm.h
index 202e64f537dc..924169522cf7 100644
--- a/tools/include/nolibc/arch-arm.h
+++ b/tools/include/nolibc/arch-arm.h
@@ -7,6 +7,8 @@
#ifndef _NOLIBC_ARCH_ARM_H
#define _NOLIBC_ARCH_ARM_H
+#include "compiler.h"
+
/* The struct returned by the stat() syscall, 32-bit only, the syscall returns
* exactly 56 bytes (stops before the unused array). In big endian, the format
* differs as devices are returned as short only.
@@ -199,13 +201,11 @@ struct sys_stat_struct {
char **environ __attribute__((weak));
const unsigned long *_auxv __attribute__((weak));
-#define __ARCH_SUPPORTS_STACK_PROTECTOR
-
/* startup code */
void __attribute__((weak,noreturn,optimize("omit-frame-pointer"),no_stack_protector)) _start(void)
{
__asm__ volatile (
-#ifdef NOLIBC_STACKPROTECTOR
+#ifdef _NOLIBC_STACKPROTECTOR
"bl __stack_chk_init\n" /* initialize stack protector */
#endif
"pop {%r0}\n" /* argc was in the stack */
diff --git a/tools/include/nolibc/arch-i386.h b/tools/include/nolibc/arch-i386.h
index 7c41897a08ce..37f813912957 100644
--- a/tools/include/nolibc/arch-i386.h
+++ b/tools/include/nolibc/arch-i386.h
@@ -7,6 +7,8 @@
#ifndef _NOLIBC_ARCH_I386_H
#define _NOLIBC_ARCH_I386_H
+#include "compiler.h"
+
/* The struct returned by the stat() syscall, 32-bit only, the syscall returns
* exactly 56 bytes (stops before the unused array).
*/
@@ -181,8 +183,6 @@ struct sys_stat_struct {
char **environ __attribute__((weak));
const unsigned long *_auxv __attribute__((weak));
-#define __ARCH_SUPPORTS_STACK_PROTECTOR
-
/* startup code */
/*
* i386 System V ABI mandates:
@@ -193,7 +193,7 @@ const unsigned long *_auxv __attribute__((weak));
void __attribute__((weak,noreturn,optimize("omit-frame-pointer"),no_stack_protector)) _start(void)
{
__asm__ volatile (
-#ifdef NOLIBC_STACKPROTECTOR
+#ifdef _NOLIBC_STACKPROTECTOR
"call __stack_chk_init\n" /* initialize stack protector */
#endif
"pop %eax\n" /* argc (first arg, %eax) */
diff --git a/tools/include/nolibc/arch-loongarch.h b/tools/include/nolibc/arch-loongarch.h
index 07e3b1fd7262..d8ea7e787df4 100644
--- a/tools/include/nolibc/arch-loongarch.h
+++ b/tools/include/nolibc/arch-loongarch.h
@@ -7,6 +7,8 @@
#ifndef _NOLIBC_ARCH_LOONGARCH_H
#define _NOLIBC_ARCH_LOONGARCH_H
+#include "compiler.h"
+
/* Syscalls for LoongArch :
* - stack is 16-byte aligned
* - syscall number is passed in a7
@@ -149,8 +151,6 @@
char **environ __attribute__((weak));
const unsigned long *_auxv __attribute__((weak));
-#define __ARCH_SUPPORTS_STACK_PROTECTOR
-
#if __loongarch_grlen == 32
#define LONGLOG "2"
#define SZREG "4"
@@ -175,7 +175,7 @@ const unsigned long *_auxv __attribute__((weak));
void __attribute__((weak,noreturn,optimize("omit-frame-pointer"),no_stack_protector)) _start(void)
{
__asm__ volatile (
-#ifdef NOLIBC_STACKPROTECTOR
+#ifdef _NOLIBC_STACKPROTECTOR
"bl __stack_chk_init\n" /* initialize stack protector */
#endif
REG_L " $a0, $sp, 0\n" /* argc (a0) was in the stack */
diff --git a/tools/include/nolibc/arch-mips.h b/tools/include/nolibc/arch-mips.h
index 65c19ccc7f9d..9860236e5340 100644
--- a/tools/include/nolibc/arch-mips.h
+++ b/tools/include/nolibc/arch-mips.h
@@ -7,6 +7,8 @@
#ifndef _NOLIBC_ARCH_MIPS_H
#define _NOLIBC_ARCH_MIPS_H
+#include "compiler.h"
+
/* The struct returned by the stat() syscall. 88 bytes are returned by the
* syscall.
*/
@@ -179,8 +181,6 @@ struct sys_stat_struct {
char **environ __attribute__((weak));
const unsigned long *_auxv __attribute__((weak));
-#define __ARCH_SUPPORTS_STACK_PROTECTOR
-
/* startup code, note that it's called __start on MIPS */
void __attribute__((weak,noreturn,optimize("omit-frame-pointer"),no_stack_protector)) __start(void)
{
@@ -189,7 +189,7 @@ void __attribute__((weak,noreturn,optimize("omit-frame-pointer"),no_stack_protec
".set push\n"
".set noreorder\n"
".option pic0\n"
-#ifdef NOLIBC_STACKPROTECTOR
+#ifdef _NOLIBC_STACKPROTECTOR
"jal __stack_chk_init\n" /* initialize stack protector */
"nop\n" /* delayed slot */
#endif
diff --git a/tools/include/nolibc/arch-riscv.h b/tools/include/nolibc/arch-riscv.h
index d0439249c9c9..86616aeb77a0 100644
--- a/tools/include/nolibc/arch-riscv.h
+++ b/tools/include/nolibc/arch-riscv.h
@@ -7,6 +7,8 @@
#ifndef _NOLIBC_ARCH_RISCV_H
#define _NOLIBC_ARCH_RISCV_H
+#include "compiler.h"
+
struct sys_stat_struct {
unsigned long st_dev; /* Device. */
unsigned long st_ino; /* File serial number. */
@@ -177,8 +179,6 @@ struct sys_stat_struct {
char **environ __attribute__((weak));
const unsigned long *_auxv __attribute__((weak));
-#define __ARCH_SUPPORTS_STACK_PROTECTOR
-
/* startup code */
void __attribute__((weak,noreturn,optimize("omit-frame-pointer"),no_stack_protector)) _start(void)
{
@@ -187,7 +187,7 @@ void __attribute__((weak,noreturn,optimize("omit-frame-pointer"),no_stack_protec
".option norelax\n"
"lla gp, __global_pointer$\n"
".option pop\n"
-#ifdef NOLIBC_STACKPROTECTOR
+#ifdef _NOLIBC_STACKPROTECTOR
"call __stack_chk_init\n" /* initialize stack protector */
#endif
REG_L" a0, 0(sp)\n" /* argc (a0) was in the stack */
diff --git a/tools/include/nolibc/arch-x86_64.h b/tools/include/nolibc/arch-x86_64.h
index e201af15e142..485a7ff72a87 100644
--- a/tools/include/nolibc/arch-x86_64.h
+++ b/tools/include/nolibc/arch-x86_64.h
@@ -7,6 +7,8 @@
#ifndef _NOLIBC_ARCH_X86_64_H
#define _NOLIBC_ARCH_X86_64_H
+#include "compiler.h"
+
/* The struct returned by the stat() syscall, equivalent to stat64(). The
* syscall returns 116 bytes and stops in the middle of __unused.
*/
@@ -181,8 +183,6 @@ struct sys_stat_struct {
char **environ __attribute__((weak));
const unsigned long *_auxv __attribute__((weak));
-#define __ARCH_SUPPORTS_STACK_PROTECTOR
-
/* startup code */
/*
* x86-64 System V ABI mandates:
@@ -193,7 +193,7 @@ const unsigned long *_auxv __attribute__((weak));
void __attribute__((weak,noreturn,optimize("omit-frame-pointer"),no_stack_protector)) _start(void)
{
__asm__ volatile (
-#ifdef NOLIBC_STACKPROTECTOR
+#ifdef _NOLIBC_STACKPROTECTOR
"call __stack_chk_init\n" /* initialize stack protector */
#endif
"pop %rdi\n" /* argc (first arg, %rdi) */
diff --git a/tools/include/nolibc/compiler.h b/tools/include/nolibc/compiler.h
new file mode 100644
index 000000000000..57da75cea799
--- /dev/null
+++ b/tools/include/nolibc/compiler.h
@@ -0,0 +1,15 @@
+/* SPDX-License-Identifier: LGPL-2.1 OR MIT */
+/*
+ * NOLIBC compiler support header
+ * Copyright (C) 2023 Thomas Weißschuh <[email protected]>
+ */
+#ifndef _NOLIBC_COMPILER_H
+#define _NOLIBC_COMPILER_H
+
+#if defined(__SSP__) || defined(__SSP_STRONG__) || defined(__SSP_ALL__) || defined(__SSP_EXPLICIT__)
+
+#define _NOLIBC_STACKPROTECTOR
+
+#endif /* defined(__SSP__) ... */
+
+#endif /* _NOLIBC_COMPILER_H */
diff --git a/tools/include/nolibc/stackprotector.h b/tools/include/nolibc/stackprotector.h
index b0156fc077a0..0a89e2b89ca6 100644
--- a/tools/include/nolibc/stackprotector.h
+++ b/tools/include/nolibc/stackprotector.h
@@ -7,13 +7,9 @@
#ifndef _NOLIBC_STACKPROTECTOR_H
#define _NOLIBC_STACKPROTECTOR_H
-#include "arch.h"
+#include "compiler.h"
-#if defined(NOLIBC_STACKPROTECTOR)
-
-#if !defined(__ARCH_SUPPORTS_STACK_PROTECTOR)
-#error "nolibc does not support stack protectors on this arch"
-#endif
+#if defined(_NOLIBC_STACKPROTECTOR)
#include "sys.h"
#include "stdlib.h"
@@ -49,6 +45,6 @@ void __stack_chk_init(void)
if (__stack_chk_guard != (uintptr_t) &__stack_chk_guard)
__stack_chk_guard ^= (uintptr_t) &__stack_chk_guard;
}
-#endif /* defined(NOLIBC_STACKPROTECTOR) */
+#endif /* defined(_NOLIBC_STACKPROTECTOR) */
#endif /* _NOLIBC_STACKPROTECTOR_H */
diff --git a/tools/testing/selftests/nolibc/nolibc-test.c b/tools/testing/selftests/nolibc/nolibc-test.c
index 861b9a74b71f..b50b5a8bcc90 100644
--- a/tools/testing/selftests/nolibc/nolibc-test.c
+++ b/tools/testing/selftests/nolibc/nolibc-test.c
@@ -802,13 +802,13 @@ static int run_protection(int min, int max)
llen += printf("0 -fstackprotector ");
-#if !defined(NOLIBC_STACKPROTECTOR)
+#if !defined(_NOLIBC_STACKPROTECTOR)
llen += printf("not supported");
pad_spc(llen, 64, "[SKIPPED]\n");
return 0;
#endif
-#if defined(NOLIBC_STACKPROTECTOR)
+#if defined(_NOLIBC_STACKPROTECTOR)
if (!__stack_chk_guard) {
llen += printf("__stack_chk_guard not initialized");
pad_spc(llen, 64, "[FAIL]\n");
--
2.40.1
next prev parent reply other threads:[~2023-06-12 20:45 UTC|newest]
Thread overview: 70+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-05-18 14:55 [PATCH nolibc 0/15] nolibc updates for v6.5] Paul E. McKenney
2023-05-18 14:55 ` [PATCH v2 nolibc 01/15] tools/nolibc: tests: use volatile to force stack smashing Paul E. McKenney
2023-05-18 14:55 ` [PATCH v2 nolibc 02/15] tools/nolibc: tests: fix build on non-c99 compliant compilers Paul E. McKenney
2023-05-18 14:55 ` [PATCH v2 nolibc 03/15] tools/nolibc: fix build of the test case using glibc Paul E. McKenney
2023-05-18 14:55 ` [PATCH v2 nolibc 04/15] tools/nolibc: add libc-test binary Paul E. McKenney
2023-05-18 14:55 ` [PATCH v2 nolibc 05/15] tools/nolibc: add wrapper for memfd_create Paul E. McKenney
2023-05-18 14:55 ` [PATCH v2 nolibc 06/15] tools/nolibc: implement fd-based FILE streams Paul E. McKenney
2023-05-18 14:55 ` [PATCH v2 nolibc 07/15] tools/nolibc: add testcases for vfprintf Paul E. McKenney
2023-05-18 14:55 ` [PATCH v2 nolibc 08/15] tools/nolibc: Fix build of stdio.h due to header ordering Paul E. McKenney
2023-05-18 14:55 ` [PATCH v2 nolibc 09/15] tools/nolibc: use standard __asm__ statements Paul E. McKenney
2023-05-18 14:55 ` [PATCH v2 nolibc 10/15] tools/nolibc: use __inline__ syntax Paul E. McKenney
2023-05-18 14:55 ` [PATCH v2 nolibc 11/15] tools/nolibc: use C89 comment syntax Paul E. McKenney
2023-05-18 14:55 ` [PATCH v2 nolibc 12/15] tools/nolibc: validate C89 compatibility Paul E. McKenney
2023-05-18 14:55 ` [PATCH v2 nolibc 13/15] tools/nolibc: s390: provide custom implementation for sys_fork Paul E. McKenney
2023-05-18 14:55 ` [PATCH v2 nolibc 14/15] tools/nolibc: add testcase for fork()/waitpid() Paul E. McKenney
2023-05-18 14:55 ` [PATCH v2 nolibc 15/15] tools/nolibc: remove LINUX_REBOOT_ constants Paul E. McKenney
2023-06-12 20:44 ` [PATCH v2 nolibc 0/15] nolibc updates for v6.5] Paul E. McKenney
2023-06-12 20:44 ` [PATCH v2 nolibc 01/53] tools/nolibc: tests: use volatile to force stack smashing Paul E. McKenney
2023-06-12 20:44 ` [PATCH v2 nolibc 02/53] tools/nolibc: tests: fix build on non-c99 compliant compilers Paul E. McKenney
2023-06-12 20:44 ` [PATCH v2 nolibc 03/53] tools/nolibc: fix build of the test case using glibc Paul E. McKenney
2023-06-12 20:44 ` [PATCH v2 nolibc 04/53] tools/nolibc: add libc-test binary Paul E. McKenney
2023-06-12 20:44 ` [PATCH v2 nolibc 05/53] tools/nolibc: add wrapper for memfd_create Paul E. McKenney
2023-06-12 20:44 ` [PATCH v2 nolibc 06/53] tools/nolibc: implement fd-based FILE streams Paul E. McKenney
2023-06-12 20:44 ` [PATCH v2 nolibc 07/53] tools/nolibc: add testcases for vfprintf Paul E. McKenney
2023-06-12 20:44 ` [PATCH v2 nolibc 08/53] tools/nolibc: Fix build of stdio.h due to header ordering Paul E. McKenney
2023-06-12 20:44 ` [PATCH v2 nolibc 09/53] tools/nolibc: use standard __asm__ statements Paul E. McKenney
2023-06-12 20:44 ` [PATCH v2 nolibc 10/53] tools/nolibc: use __inline__ syntax Paul E. McKenney
2023-06-12 20:44 ` [PATCH v2 nolibc 11/53] tools/nolibc: use C89 comment syntax Paul E. McKenney
2023-06-12 20:44 ` [PATCH v2 nolibc 12/53] tools/nolibc: validate C89 compatibility Paul E. McKenney
2023-06-12 20:44 ` [PATCH v2 nolibc 13/53] tools/nolibc: s390: provide custom implementation for sys_fork Paul E. McKenney
2023-06-12 20:44 ` [PATCH v2 nolibc 14/53] tools/nolibc: add testcase for fork()/waitpid() Paul E. McKenney
2023-06-12 20:44 ` [PATCH v2 nolibc 15/53] tools/nolibc: remove LINUX_REBOOT_ constants Paul E. McKenney
2023-06-12 20:44 ` [PATCH v2 nolibc 16/53] tools/nolibc: riscv: Fix up load/store instructions for rv32 Paul E. McKenney
2023-06-12 20:44 ` [PATCH v2 nolibc 17/53] tools/nolibc/unistd: add syscall() Paul E. McKenney
2023-06-12 20:44 ` [PATCH v2 nolibc 18/53] selftests/nolibc: syscall_args: use generic __NR_statx Paul E. McKenney
2023-06-12 20:44 ` [PATCH v2 nolibc 19/53] selftests/nolibc: reduce syscalls during space padding Paul E. McKenney
2023-06-12 20:44 ` [PATCH v2 nolibc 20/53] tools/nolibc: aarch64: add stackprotector support Paul E. McKenney
2023-06-12 20:44 ` [PATCH v2 nolibc 21/53] tools/nolibc: arm: " Paul E. McKenney
2023-06-12 20:44 ` [PATCH v2 nolibc 22/53] tools/nolibc: loongarch: " Paul E. McKenney
2023-06-12 20:44 ` [PATCH v2 nolibc 23/53] tools/nolibc: mips: " Paul E. McKenney
2023-06-12 20:44 ` [PATCH v2 nolibc 24/53] tools/nolibc: riscv: " Paul E. McKenney
2023-06-12 20:44 ` [PATCH v2 nolibc 25/53] tools/nolibc: fix typo pint -> point Paul E. McKenney
2023-06-12 20:44 ` [PATCH v2 nolibc 26/53] tools/nolibc: x86_64: disable stack protector for _start Paul E. McKenney
2023-06-12 20:44 ` [PATCH v2 nolibc 27/53] tools/nolibc: ensure stack protector guard is never zero Paul E. McKenney
2023-06-12 20:44 ` [PATCH v2 nolibc 28/53] tools/nolibc: add test for __stack_chk_guard initialization Paul E. McKenney
2023-06-12 20:44 ` [PATCH v2 nolibc 29/53] tools/nolibc: reformat list of headers to be installed Paul E. McKenney
2023-06-12 20:44 ` Paul E. McKenney [this message]
2023-06-12 20:44 ` [PATCH v2 nolibc 31/53] tools/nolibc: simplify stackprotector compiler flags Paul E. McKenney
2023-06-12 20:44 ` [PATCH v2 nolibc 32/53] tools/nolibc: fix segfaults on compilers without attribute no_stack_protector Paul E. McKenney
2023-06-12 20:44 ` [PATCH v2 nolibc 33/53] tools/nolibc: s390: disable stackprotector in _start Paul E. McKenney
2023-06-12 20:44 ` [PATCH v2 nolibc 34/53] tools/nolibc: add support for prctl() Paul E. McKenney
2023-06-12 20:44 ` [PATCH v2 nolibc 35/53] selftests/nolibc: prevent coredumps during test execution Paul E. McKenney
2023-06-12 20:44 ` [PATCH v2 nolibc 36/53] tools/nolibc: support nanoseconds in stat() Paul E. McKenney
2023-06-12 20:44 ` [PATCH v2 nolibc 37/53] selftests/nolibc: print name instead of number for EOVERFLOW Paul E. McKenney
2023-06-12 20:44 ` [PATCH v2 nolibc 38/53] selftests/nolibc: remove the duplicated gettimeofday_bad2 Paul E. McKenney
2023-06-12 20:45 ` [PATCH v2 nolibc 39/53] tools/nolibc: ppoll/ppoll_time64: add a missing argument Paul E. McKenney
2023-06-12 20:45 ` [PATCH v2 nolibc 40/53] selftests/nolibc: test_fork: fix up duplicated print Paul E. McKenney
2023-06-12 20:45 ` [PATCH v2 nolibc 41/53] tools/nolibc: ensure fast64 integer types have 64 bits Paul E. McKenney
2023-06-12 20:45 ` [PATCH v2 nolibc 42/53] selftests/nolibc: remove test gettimeofday_null Paul E. McKenney
2023-06-12 20:45 ` [PATCH v2 nolibc 43/53] selftests/nolibc: allow specify extra arguments for qemu Paul E. McKenney
2023-06-12 20:45 ` [PATCH v2 nolibc 44/53] selftests/nolibc: fix up compile warning with glibc on x86_64 Paul E. McKenney
2023-06-12 20:45 ` [PATCH v2 nolibc 45/53] selftests/nolibc: not include limits.h for nolibc Paul E. McKenney
2023-06-12 20:45 ` [PATCH v2 nolibc 46/53] selftests/nolibc: use INT_MAX instead of __INT_MAX__ Paul E. McKenney
2023-06-12 20:45 ` [PATCH v2 nolibc 47/53] tools/nolibc: arm: add missing my_syscall6 Paul E. McKenney
2023-06-12 20:45 ` [PATCH v2 nolibc 48/53] tools/nolibc: open: fix up compile warning for arm Paul E. McKenney
2023-06-12 20:45 ` [PATCH v2 nolibc 49/53] selftests/nolibc: support two errnos with EXPECT_SYSER2() Paul E. McKenney
2023-06-12 20:45 ` [PATCH v2 nolibc 50/53] selftests/nolibc: remove gettimeofday_bad1/2 completely Paul E. McKenney
2023-06-12 20:45 ` [PATCH v2 nolibc 51/53] selftests/nolibc: add new gettimeofday test cases Paul E. McKenney
2023-06-12 20:45 ` [PATCH v2 nolibc 52/53] selftests/nolibc: also count skipped and failed tests in output Paul E. McKenney
2023-06-12 20:45 ` [PATCH v2 nolibc 53/53] selftests/nolibc: make sure gcc always use little endian on MIPS Paul E. McKenney
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
[email protected] \
[email protected] \
[email protected] \
[email protected] \
[email protected] \
[email protected] \
[email protected] \
[email protected] \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox