lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Date:   Thu,  2 Feb 2023 11:02:37 -0500
From:   Vincent Dagonneau <v@....io>
To:     linux-kernel@...r.kernel.org
Cc:     w@....eu, Vincent Dagonneau <v@....io>
Subject: [PATCH] tools/nolibc: Add stdint.h

Hi,

I was testing out nolibc with some simple programs originally linked
against glibc. I noticed a quick fix for some of them was to have an
stdint.h with limits macros.

Here are the changes I made. I've got a couple more ideas for fleshing
out nolibc, let me know if you are interested in contributions.

Add stdint.h and moved the relevant definitions from std.h. Also added
macros for limits and *_least_* types.

---
 tools/include/nolibc/std.h    | 15 +------
 tools/include/nolibc/stdint.h | 77 +++++++++++++++++++++++++++++++++++
 2 files changed, 78 insertions(+), 14 deletions(-)
 create mode 100644 tools/include/nolibc/stdint.h

diff --git a/tools/include/nolibc/std.h b/tools/include/nolibc/std.h
index 1747ae125392..c65ddf2e4db1 100644
--- a/tools/include/nolibc/std.h
+++ b/tools/include/nolibc/std.h
@@ -18,20 +18,7 @@
 #define NULL ((void *)0)
 #endif
 
-/* stdint types */
-typedef unsigned char       uint8_t;
-typedef   signed char        int8_t;
-typedef unsigned short     uint16_t;
-typedef   signed short      int16_t;
-typedef unsigned int       uint32_t;
-typedef   signed int        int32_t;
-typedef unsigned long long uint64_t;
-typedef   signed long long  int64_t;
-typedef unsigned long        size_t;
-typedef   signed long       ssize_t;
-typedef unsigned long     uintptr_t;
-typedef   signed long      intptr_t;
-typedef   signed long     ptrdiff_t;
+#include <stdint.h>
 
 /* those are commonly provided by sys/types.h */
 typedef unsigned int          dev_t;
diff --git a/tools/include/nolibc/stdint.h b/tools/include/nolibc/stdint.h
new file mode 100644
index 000000000000..1f11fffe2119
--- /dev/null
+++ b/tools/include/nolibc/stdint.h
@@ -0,0 +1,77 @@
+/* SPDX-License-Identifier: LGPL-2.1 OR MIT */
+/*
+ * Standard definitions and types for NOLIBC
+ * Copyright (C) 2023 Vincent Dagonneau <v@....io>
+ */
+
+#ifndef _NOLIBC_STDINT_H
+#define _NOLIBC_STDINT_H
+
+typedef unsigned char       uint8_t;
+typedef   signed char        int8_t;
+typedef unsigned short     uint16_t;
+typedef   signed short      int16_t;
+typedef unsigned int       uint32_t;
+typedef   signed int        int32_t;
+typedef unsigned long long uint64_t;
+typedef   signed long long  int64_t;
+typedef unsigned long        size_t;
+typedef   signed long       ssize_t;
+typedef unsigned long     uintptr_t;
+typedef   signed long      intptr_t;
+typedef   signed long     ptrdiff_t;
+
+typedef   int8_t       int_least8_t;
+typedef  uint8_t      uint_least8_t;
+typedef  int16_t      int_least16_t;
+typedef uint16_t     uint_least16_t;
+typedef  int32_t      int_least32_t;
+typedef uint32_t     uint_least32_t;
+typedef  int64_t      int_least64_t;
+typedef uint64_t     uint_least64_t;
+
+typedef  int64_t           intmax_t;
+typedef uint64_t          uintmax_t;
+
+/* limits of integral types */
+
+#define        INT8_MIN  (-128)
+#define       INT16_MIN  (-32767-1)
+#define       INT32_MIN  (-2147483647-1)
+#define       INT64_MIN  (-9223372036854775807-1)
+
+#define        INT8_MAX  (127)
+#define       INT16_MAX  (32767)
+#define       INT32_MAX  (2147483647)
+#define       INT64_MAX  (9223372036854775807)
+
+#define       UINT8_MAX  (255)
+#define      UINT16_MAX  (65535)
+#define      UINT32_MAX  (4294967295U)
+#define      UINT64_MAX  (18446744073709551615)
+
+#define  INT_LEAST8_MIN  (-128)
+#define INT_LEAST16_MIN  (-32767-1)
+#define INT_LEAST32_MIN  (-2147483647-1)
+#define INT_LEAST64_MIN  (-9223372036854775807-1)
+
+#define  INT_LEAST8_MAX  (127)
+#define INT_LEAST16_MAX  (32767)
+#define INT_LEAST32_MAX  (2147483647)
+#define INT_LEAST64_MAX  (9223372036854775807)
+
+#define  UINT_LEAST8_MAX  (255)
+#define UINT_LEAST16_MAX  (65535)
+#define UINT_LEAST32_MAX  (4294967295U)
+#define UINT_LEAST64_MAX  (18446744073709551615)
+
+#define         SIZE_MAX  (18446744073709551615UL)
+
+#define       INTPTR_MIN  (-9223372036854775807L-1)
+#define       INTPTR_MAX  (9223372036854775807L)
+#define      UINTPTR_MAX  (18446744073709551615UL)
+
+#define      PTRDIFF_MIN  (-9223372036854775807L-1)
+#define      PTRDIFF_MAX  (9223372036854775807L)
+
+#endif /* _NOLIBC_STDINT_H */
-- 
2.39.1

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ