Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F145331164
D31962.id95184.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
2 KB
Referenced Files
None
Subscribers
None
D31962.id95184.diff
View Options
Index: include/Makefile
===================================================================
--- include/Makefile
+++ include/Makefile
@@ -11,8 +11,8 @@
SUBDIR_PARALLEL=
INCS= a.out.h ar.h assert.h bitstring.h complex.h cpio.h _ctype.h ctype.h \
db.h \
- dirent.h dlfcn.h elf.h elf-hints.h err.h fmtmsg.h fnmatch.h fstab.h \
- fts.h ftw.h getopt.h glob.h grp.h \
+ dirent.h dlfcn.h elf.h elf-hints.h endian.h err.h fmtmsg.h fnmatch.h \
+ fstab.h fts.h ftw.h getopt.h glob.h grp.h \
ieeefp.h ifaddrs.h \
inttypes.h iso646.h kenv.h langinfo.h libgen.h limits.h link.h \
locale.h malloc.h malloc_np.h memory.h monetary.h mpool.h mqueue.h \
Index: include/endian.h
===================================================================
--- /dev/null
+++ include/endian.h
@@ -0,0 +1,52 @@
+/*-
+ * Copyright (c) 2021 M Warner Losh <imp@FreeBSD.org>
+ *
+ * SPDX-License-Identifier: BSD-2-Clause
+ */
+
+/*
+ * A mostly compatible with Linux/glibc endian.h
+ */
+
+#ifndef _ENDIAN_H_
+#define _ENDIAN_H_
+
+/*
+ * FreeBSD's sys/endian.h is very close to the Linux. Linux doesn't define the
+ * hto* [bl]*toh macros when there's a strict name space. We request that the
+ * FreeBSD specific [lb]e{16,32,64}{enc,dec} are omitted as well.
+ */
+#define __OMIT_ENDIAN_ENCODE_DECODE
+#include <sys/endian.h>
+
+/*
+ * The bswap* functions cause problems for some Linux code (like mesa), so
+ * remove them from the name space as well. You need to include sys/endian.h
+ * directly if you want these to be visible.
+ */
+#undef bswap16
+#undef bswap32
+#undef bswap64
+
+/*
+ * glibc uses double underscore for these symbols. Define these unconditionally.
+ * The compiler defines __BYTE_ORDER__ these days, so we don't do anything
+ * with that.
+ */
+#define __BIG_ENDIAN _BIG_ENDIAN
+#define __BYTE_ORDER _BYTE_ORDER
+#define __LITTLE_ENDIAN _LITTLE_ENDIAN
+#define __PDP_ENDIAN _PDP_ENDIAN
+
+/*
+ * FreeBSD's sys/endian.h and machine/endian.h doesn't define a separate
+ * byte order for floats. Use the host non-float byte order.
+ */
+#define __FLOAT_WORD_ORDER _BYTE_ORDER
+
+/*
+ * We don't define BIG_ENDI, LITTLE_ENDI, HIGH_HALF and LOW_HALF
+ * since those appear to be internal to internal to glibc
+ */
+
+#endif /* _ENDIAN_H_ */
Index: sys/sys/endian.h
===================================================================
--- sys/sys/endian.h
+++ sys/sys/endian.h
@@ -55,6 +55,7 @@
#define _UINT64_T_DECLARED
#endif
+#if __BSD_VISIBLE
/*
* General byte order swapping functions.
*/
@@ -97,7 +98,7 @@
#endif /* _BYTE_ORDER == _LITTLE_ENDIAN */
/* Alignment-agnostic encode/decode bytestream to/from little/big endian. */
-
+#ifndef __OMIT_ENDIAN_ENCODE_DECODE
static __inline uint16_t
be16dec(const void *pp)
{
@@ -203,5 +204,6 @@
le32enc(p, (uint32_t)(u & 0xffffffffU));
le32enc(p + 4, (uint32_t)(u >> 32));
}
-
+#endif /* __OMIT_ENDIAN_ENCODE_DECODE */
+#endif /* __BSD_VISIBLE */
#endif /* _SYS_ENDIAN_H_ */
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Thu, Feb 19, 12:10 PM (5 h, 53 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
28878182
Default Alt Text
D31962.id95184.diff (2 KB)
Attached To
Mode
D31962: linux: For better compatibility, provide compatible endian.h
Attached
Detach File
Event Timeline
Log In to Comment