endian.h: Define unsigned fixed-width integer types [BZ #31749]
Checks
Context |
Check |
Description |
redhat-pt-bot/TryBot-apply_patch |
success
|
Patch applied to master at the time it was sent
|
redhat-pt-bot/TryBot-32bit |
success
|
Build for i686
|
linaro-tcwg-bot/tcwg_glibc_build--master-aarch64 |
success
|
Test passed
|
linaro-tcwg-bot/tcwg_glibc_check--master-aarch64 |
success
|
Test passed
|
linaro-tcwg-bot/tcwg_glibc_build--master-arm |
success
|
Test passed
|
linaro-tcwg-bot/tcwg_glibc_check--master-arm |
success
|
Test passed
|
Commit Message
The upcoming POSIX revision requires that uint16_t, uint32_t, and
uint64_t are defined in endian.h. Optionally all symbols from
<stdint.h> may be defined.
This patch includes <bits/stdint-uintn.h> which defines the required
types and uint8_t. This allows glibc to pass Gnulib's checks.
Signed-off-by: Collin Funk <collin.funk1@gmail.com>
---
string/endian.h | 3 +++
string/test-endian-types.c | 1 -
2 files changed, 3 insertions(+), 1 deletion(-)
Comments
On Tue, 11 Jun 2024, Collin Funk wrote:
> #if defined __USE_MISC && !defined __ASSEMBLER__
> +/* Define uintN_t types. */
> +#include <bits/stdint-uintn.h>
> +
__USE_MISC is not defined for any standard POSIX version.
Do you know the _POSIX_C_SOURCE value in the 2024 edition of POSIX (the
most recent version I have is the February draft, which still has it as
20yymmL; the HTML edition hasn't been published yet)? We need to set up
(in features.h) and document (in creature.texi) support for the new
_XOPEN_SOURCE and _POSIX_C_SOURCE values, with associated internal
conditions __GLIBC_USE (XOPEN2024) and __GLIBC_USE (POSIX2024), and go
through all the changes in the new edition of POSIX, making sure that
header declarations appear under appropriate conditions (or, as
applicable, no longer appear for strict conformance with the latest
version, in the case of any declarations that POSIX has removed) and that
new features in general are properly implemented in glibc.
*In this particular case*, since <endian.h> wasn't in any previous version
of POSIX, we don't actually need those conditionals - we could just remove
__USE_MISC conditions around everything defined for the header in the new
POSIX version (making sure to adjust the spaces after "#" accordingly for
the removed #if level), and define the types in question unconditionally.
Hi Joseph,
Joseph Myers <josmyers@redhat.com> writes:
> On Tue, 11 Jun 2024, Collin Funk wrote:
>
>> #if defined __USE_MISC && !defined __ASSEMBLER__
>> +/* Define uintN_t types. */
>> +#include <bits/stdint-uintn.h>
>> +
>
> __USE_MISC is not defined for any standard POSIX version.
>
> Do you know the _POSIX_C_SOURCE value in the 2024 edition of POSIX (the
> most recent version I have is the February draft, which still has it as
> 20yymmL; the HTML edition hasn't been published yet)?
No, I was using the February draft PDF as well. I checked <features.h>
and didn't see a definition so I just left it behind __USE_MISC for the
time being.
> *In this particular case*, since <endian.h> wasn't in any previous version
> of POSIX, we don't actually need those conditionals - we could just remove
> __USE_MISC conditions around everything defined for the header in the new
> POSIX version (making sure to adjust the spaces after "#" accordingly for
> the removed #if level), and define the types in question unconditionally.
Sounds good, I can submit a revised patch.
Is the !defined __ASSEMBLER__ safe to remove? It looks like perhaps
this header was at some point used in assembly code for constant macro
definitions without the functions. Not sure if this is still the case
or if it should be worried about.
Collin
On Tue, 11 Jun 2024, Collin Funk wrote:
> Is the !defined __ASSEMBLER__ safe to remove? It looks like perhaps
> this header was at some point used in assembly code for constant macro
> definitions without the functions. Not sure if this is still the case
> or if it should be worried about.
That's the sort of thing that would best be tested with
build-many-glibcs.py to see if any configurations are using <endian.h>
(possibly indirectly) in assembly source at present. It appears the
original addition of that check was because of a use in SH strlen.S, which
was removed in commit 3ce2865f93d42f4721d58088dd6ab1dac06ea85b "SH:
Replace <endian.h> usage with pre-processor macros.", but maybe there are
other places still relying on it in assembly source.
Joseph Myers <josmyers@redhat.com> writes:
> That's the sort of thing that would best be tested with
> build-many-glibcs.py to see if any configurations are using <endian.h>
> (possibly indirectly) in assembly source at present. It appears the
> original addition of that check was because of a use in SH strlen.S, which
> was removed in commit 3ce2865f93d42f4721d58088dd6ab1dac06ea85b "SH:
> Replace <endian.h> usage with pre-processor macros.", but maybe there are
> other places still relying on it in assembly source.
Thanks for the advice. I'll do some testing and send an updated patch.
Collin
@@ -31,6 +31,9 @@
#endif
#if defined __USE_MISC && !defined __ASSEMBLER__
+/* Define uintN_t types. */
+#include <bits/stdint-uintn.h>
+
/* Conversion interfaces. */
# include <bits/byteswap.h>
# include <bits/uintn-identity.h>
@@ -17,7 +17,6 @@
<https://www.gnu.org/licenses/>. */
#include <endian.h>
-#include <stdint.h>
int i;
uint16_t u16;