aboutsummaryrefslogtreecommitdiff
path: root/devel/elfutils/files/patch-lib_eu-config.h
blob: f9502d4abe2a529dc484598283ca06c5dcc72004 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
--- lib/eu-config.h.orig	2020-03-30 12:17:45 UTC
+++ lib/eu-config.h
@@ -176,6 +176,182 @@ asm (".section predict_data, \"aw\"; .previous\n"
 #define ELFUTILS_HEADER(name) <lib##name.h>
 
 
+/* FreeBSD ports of glibcisms */
+#include <sys/cdefs.h>
+#include <libgen.h>
+#include <limits.h>
+#include <stdarg.h>
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <wchar.h>
+
+#define	_GL_ATTRIBUTE_PURE	__attribute__((__pure__))
+
+struct obstack;
+extern int obstack_printf(struct obstack *, const char *, ...);
+extern int obstack_vprintf(struct obstack *, const char *, va_list);
+
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wshadow"
+static inline void *
+mempcpy(void * restrict dst, const void * restrict src, size_t len)
+{
+
+	return (((char *)memcpy(dst, src, len)) + len);
+}
+
+static inline wchar_t *
+wmempcpy(wchar_t * restrict dst, const wchar_t * restrict src, size_t len)
+{
+
+	return (wmemcpy(dst, src, len) + len);
+}
+#pragma GCC diagnostic pop
+
+static inline void *
+rawmemchr(const void *s, int c)
+{
+
+	return (memchr(s, c, SSIZE_MAX));
+}
+
+static inline void
+tdestroy(void *vroot __unused, void (*freefct)(void *) __unused)
+{
+
+	/* XXX: Just leak the memory for now. */
+}
+
+static inline char *
+canonicalize_file_name(const char *path)
+{
+
+	return (realpath(path, NULL));
+}
+
+/*
+ * A GNU-like basename().
+ *
+ * Unlike POSIX basename(3), this version never modifies its argument.  If the
+ * argument ends in a slash, it returns the empty string.
+ */
+static inline char *
+eu_basename(const char *path)
+{
+	const char *slash;
+
+	slash = strrchr(path, '/');
+	if (slash != NULL)
+		slash++;
+	else
+		slash = path;
+	return (__DECONST(char *, slash));
+}
+#ifdef	basename
+#undef	basename
+#endif
+#define	basename	eu_basename
+
+#ifndef	TEMP_FAILURE_RETRY
+#define	TEMP_FAILURE_RETRY(expr)	({		\
+	long value;					\
+	do {						\
+		value = (long)(expr);			\
+	} while (value == -1 && errno == EINTR);	\
+	(value);					\
+})
+#endif
+
+#define	strndupa(s, n)	\
+({					\
+	size_t len = (n);		\
+	const char *end;		\
+	char *res;			\
+					\
+	end = memchr((s), 0, (n));	\
+	if (end != NULL)		\
+		len = end - (s);	\
+					\
+	res = alloca(len + 1);		\
+	memcpy(res, (s), len);		\
+	res[len] = '\0';		\
+	res;				\
+})
+
+
+#define	program_invocation_short_name	__DECONST(char *, getprogname())
+#ifndef	loff_t
+#define	loff_t	off_t
+#endif
+#ifndef	off64_t
+#define	off64_t	off_t
+#endif
+
+#define	ftruncate64	ftruncate
+#define	open64	open
+#define	fstat64	fstat
+#define	stat64	stat
+#define	pread64	pread
+#define	mmap64	mmap
+#define	lseek64	lseek
+
+#define	MAP_POPULATE	MAP_PREFAULT_READ
+
+#define	bswap_16	bswap16
+#define	bswap_32	bswap32
+#define	bswap_64	bswap64
+
+/*
+ * Future versions of FreeBSD will provide proper versions of these _unlocked
+ * variants.  These can and should be used instead, but won't be available
+ * until FreeBSD 11.4 and 12.2, at which point we should limit the scope of
+ * these to DragonFlyBSD.
+ */
+#ifndef fputc_unlocked
+#define	fputc_unlocked	putc_unlocked
+#endif
+#define	fputs_unlocked	fputs
+#define	fwrite_unlocked	fwrite
+#define	fread_unlocked	fread
+
+#ifndef	__BYTE_ORDER
+#define	__BYTE_ORDER	_BYTE_ORDER
+#endif
+#ifndef	__LITTLE_ENDIAN
+#define	__LITTLE_ENDIAN	_LITTLE_ENDIAN
+#endif
+#ifndef	__BIG_ENDIAN
+#define	__BIG_ENDIAN	_BIG_ENDIAN
+#endif
+
+#define	DL_CALL_FCT(fn, args)	((fn) args)
+
+/* This package doesn't really respect --disable-nls.  Hack it. */
+#if	!ENABLE_NLS
+/* Skip loading libintl.h, which is hardcoded in most source files: */
+#define	_LIBINTL_H	1
+#define	dgettext(module, str)	(str)
+#define	gettext(str)	(str)
+
+static inline char *
+bindtextdomain(const char *d __unused, const char *dr __unused)
+{
+
+	return ("/");
+}
+
+static inline char *
+textdomain(const char *dom)
+{
+
+	return (__DECONST(char *, dom));
+}
+
+#define	ngettext(s, p, n)	(((n) == 1) ? (s) : (p))
+#endif
+
 #ifdef SYMBOL_VERSIONING
 # define OLD_VERSION(name, version) \
   asm (".globl _compat." #version "." #name "\n" \