public inbox for libc-alpha@sourceware.org
 help / color / mirror / Atom feed
From: Cyril Hrubis <chrubis@suse.cz>
To: linux-kernel@vger.kernel.org
Cc: linux-arch@vger.kernel.org, linux-api@vger.kernel.org,
	libc-alpha@sourceware.org, arnd@arndb.de, ltp@lists.linux.it,
	David.Laight@aculab.com, zack@owlfolio.org, dhowells@redhat.com,
	Cyril Hrubis <chrubis@suse.cz>
Subject: [PATCH v3] uapi: Make __{u,s}64 match {u,}int64_t in userspace
Date: Tue, 21 Jun 2022 14:03:55 +0200	[thread overview]
Message-ID: <20220621120355.2903-1-chrubis@suse.cz> (raw)

This changes the __u64 and __s64 in userspace on 64bit platforms from
long long (unsigned) int to just long (unsigned) int in order to match
the uint64_t and int64_t size in userspace for C code.

We cannot make the change for C++ since that would be non-backwards
compatible change and may cause possible regressions and even
compilation failures, e.g. overloaded function may no longer find a
correct match.

This allows us to use the kernel structure definitions in userspace in C
code. For example we can use PRIu64 and PRId64 modifiers in printf() to
print structure membere. Morever with this there would be no need to
redefine these structures in an libc implementations as it is done now.

Consider for example the newly added statx() syscall. If we use the
header from uapi we will get warnings when attempting to print it's
members as:

	printf("%" PRIu64 "\n", stx.stx_size);

We get:

	warning: format '%lu' expects argument of type 'long unsigned int',
	         but argument 5 has type '__u64' {aka 'long long unsigned int'}

Signed-off-by: Cyril Hrubis <chrubis@suse.cz>
---
 include/uapi/asm-generic/types.h | 11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)

v2: Make sure we do not break C++ applications
v3: Update commit message to explain C++ exclusion

diff --git a/include/uapi/asm-generic/types.h b/include/uapi/asm-generic/types.h
index dfaa50d99d8f..11e468a39d1e 100644
--- a/include/uapi/asm-generic/types.h
+++ b/include/uapi/asm-generic/types.h
@@ -1,9 +1,16 @@
 /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
 #ifndef _ASM_GENERIC_TYPES_H
 #define _ASM_GENERIC_TYPES_H
+
+#include <asm/bitsperlong.h>
+
 /*
- * int-ll64 is used everywhere now.
+ * int-ll64 is used everywhere in kernel now.
  */
-#include <asm-generic/int-ll64.h>
+#if !defined(__KERNEL__) && !defined(__cplusplus) && __BITSPERLONG == 64
+# include <asm-generic/int-l64.h>
+#else
+# include <asm-generic/int-ll64.h>
+#endif
 
 #endif /* _ASM_GENERIC_TYPES_H */
-- 
2.35.1


             reply	other threads:[~2022-06-21 12:02 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-06-21 12:03 Cyril Hrubis [this message]
2022-06-21 13:01 ` Alejandro Colomar
2022-06-21 13:04 ` David Laight
2022-06-21 14:15   ` Cyril Hrubis
2022-06-23  7:48 ` Arnd Bergmann

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 \
    --in-reply-to=20220621120355.2903-1-chrubis@suse.cz \
    --to=chrubis@suse.cz \
    --cc=David.Laight@aculab.com \
    --cc=arnd@arndb.de \
    --cc=dhowells@redhat.com \
    --cc=libc-alpha@sourceware.org \
    --cc=linux-api@vger.kernel.org \
    --cc=linux-arch@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=ltp@lists.linux.it \
    --cc=zack@owlfolio.org \
    /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;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).