binutils/binutils: do not fwd declare struct stat (2.22).
For canadian cross to host i686-mingw32 fwd declaring
struct stat is not possible.
Instead #include <sys/stat.h>
Signed-off-by: Titus von Boxberg <titus@v9g.de>
Message-Id: <417a15d4277913841ddd.1353100974@tschetwerikow.boxberg.lan>
Patchwork-Id: 199733
1 http://sources.redhat.com/bugzilla/show_bug.cgi?id=1026
2 http://sourceware.org/ml/libc-alpha/2005-02/msg00122.html
4 2005-02-26 GOTO Masanori <gotom@debian.or.jp>
6 * sysdeps/unix/sysv/linux/kernel-features.h: Define
7 __ASSUME_STAT64_SYSCALL.
8 * sysdeps/unix/sysv/linux/alpha/fxstat.c: Check
9 __ASSUME_STAT64_SYSCALL.
10 * sysdeps/unix/sysv/linux/alpha/fxstatat.c: Likewise.
11 * sysdeps/unix/sysv/linux/alpha/lxstat.c: Likewise.
12 * sysdeps/unix/sysv/linux/alpha/xstat.c: Likewise.
13 * sysdeps/unix/sysv/linux/alpha/xstatconv.c: Don't define
14 __libc_missing_axp_stat64 when it's not needed.
15 * sysdeps/unix/sysv/linux/alpha/xstatconv.h: Likewise.
17 diff -durN glibc-2.10.1.orig/glibc-ports-2.10.1/sysdeps/unix/sysv/linux/alpha/fxstat.c glibc-2.10.1/glibc-ports-2.10.1/sysdeps/unix/sysv/linux/alpha/fxstat.c
18 --- glibc-2.10.1.orig/glibc-ports-2.10.1/sysdeps/unix/sysv/linux/alpha/fxstat.c 2009-05-16 10:36:20.000000000 +0200
19 +++ glibc-2.10.1/glibc-ports-2.10.1/sysdeps/unix/sysv/linux/alpha/fxstat.c 2009-11-13 00:50:45.000000000 +0100
21 __fxstat (int vers, int fd, struct stat *buf)
23 INTERNAL_SYSCALL_DECL (err);
24 - int result, errno_out;
26 struct kernel_stat kbuf;
28 +#if __ASSUME_STAT64_SYSCALL > 0
29 + if (vers == _STAT_VER_KERNEL64)
31 + result = INTERNAL_SYSCALL (fstat64, err, 2, fd, buf);
32 + if (__builtin_expect (!INTERNAL_SYSCALL_ERROR_P (result, err), 1))
34 + __set_errno (INTERNAL_SYSCALL_ERRNO (result, err));
37 +#elif defined __NR_fstat64
38 if (vers == _STAT_VER_KERNEL64 && !__libc_missing_axp_stat64)
41 result = INTERNAL_SYSCALL (fstat64, err, 2, fd, buf);
42 if (__builtin_expect (!INTERNAL_SYSCALL_ERROR_P (result, err), 1))
44 errno_out = INTERNAL_SYSCALL_ERRNO (result, err);
45 if (errno_out != ENOSYS)
48 + __set_errno (errno_out);
51 __libc_missing_axp_stat64 = 1;
55 result = INTERNAL_SYSCALL (fstat, err, 2, fd, &kbuf);
56 if (__builtin_expect (!INTERNAL_SYSCALL_ERROR_P (result, err), 1))
57 return __xstat_conv (vers, &kbuf, buf);
58 - errno_out = INTERNAL_SYSCALL_ERRNO (result, err);
61 - __set_errno (errno_out);
62 + __set_errno (INTERNAL_SYSCALL_ERRNO (result, err));
66 diff -durN glibc-2.10.1.orig/glibc-ports-2.10.1/sysdeps/unix/sysv/linux/alpha/fxstatat.c glibc-2.10.1/glibc-ports-2.10.1/sysdeps/unix/sysv/linux/alpha/fxstatat.c
67 --- glibc-2.10.1.orig/glibc-ports-2.10.1/sysdeps/unix/sysv/linux/alpha/fxstatat.c 2009-05-16 10:36:20.000000000 +0200
68 +++ glibc-2.10.1/glibc-ports-2.10.1/sysdeps/unix/sysv/linux/alpha/fxstatat.c 2009-11-13 00:50:45.000000000 +0100
70 int result, errno_out;
71 struct kernel_stat kst;
73 +#if __ASSUME_STAT64_SYSCALL > 0
74 + if (vers == _STAT_VER_KERNEL64)
76 + if (flag & AT_SYMLINK_NOFOLLOW)
77 + result = INTERNAL_SYSCALL (lstat64, err, 2, file, st);
79 + result = INTERNAL_SYSCALL (stat64, err, 2, file, st);
81 + if (__builtin_expect (!INTERNAL_SYSCALL_ERROR_P (result, err), 1))
83 + errno_out = INTERNAL_SYSCALL_ERRNO (result, err);
86 +#elif defined __NR_stat64
87 if (vers == _STAT_VER_KERNEL64 && !__libc_missing_axp_stat64)
89 if (flag & AT_SYMLINK_NOFOLLOW)
92 __libc_missing_axp_stat64 = 1;
96 if (flag & AT_SYMLINK_NOFOLLOW)
97 result = INTERNAL_SYSCALL (lstat, err, 2, file, &kst);
98 diff -durN glibc-2.10.1.orig/glibc-ports-2.10.1/sysdeps/unix/sysv/linux/alpha/lxstat.c glibc-2.10.1/glibc-ports-2.10.1/sysdeps/unix/sysv/linux/alpha/lxstat.c
99 --- glibc-2.10.1.orig/glibc-ports-2.10.1/sysdeps/unix/sysv/linux/alpha/lxstat.c 2009-05-16 10:36:20.000000000 +0200
100 +++ glibc-2.10.1/glibc-ports-2.10.1/sysdeps/unix/sysv/linux/alpha/lxstat.c 2009-11-13 00:50:45.000000000 +0100
102 __lxstat (int vers, const char *name, struct stat *buf)
104 INTERNAL_SYSCALL_DECL (err);
105 - int result, errno_out;
107 struct kernel_stat kbuf;
109 +#if __ASSUME_STAT64_SYSCALL > 0
110 + if (vers == _STAT_VER_KERNEL64)
112 + result = INTERNAL_SYSCALL (lstat64, err, 2, name, buf);
113 + if (__builtin_expect (!INTERNAL_SYSCALL_ERROR_P (result, err), 1))
115 + __set_errno (INTERNAL_SYSCALL_ERRNO (result, err));
118 +#elif defined __NR_lstat64
119 if (vers == _STAT_VER_KERNEL64 && !__libc_missing_axp_stat64)
122 result = INTERNAL_SYSCALL (lstat64, err, 2, name, buf);
123 if (__builtin_expect (!INTERNAL_SYSCALL_ERROR_P (result, err), 1))
125 errno_out = INTERNAL_SYSCALL_ERRNO (result, err);
126 if (errno_out != ENOSYS)
129 + __set_errno (errno_out);
132 __libc_missing_axp_stat64 = 1;
136 result = INTERNAL_SYSCALL (lstat, err, 2, name, &kbuf);
137 if (__builtin_expect (!INTERNAL_SYSCALL_ERROR_P (result, err), 1))
138 return __xstat_conv (vers, &kbuf, buf);
139 - errno_out = INTERNAL_SYSCALL_ERRNO (result, err);
142 - __set_errno (errno_out);
143 + __set_errno (INTERNAL_SYSCALL_ERRNO (result, err));
146 hidden_def (__lxstat)
147 diff -durN glibc-2.10.1.orig/glibc-ports-2.10.1/sysdeps/unix/sysv/linux/alpha/xstat.c glibc-2.10.1/glibc-ports-2.10.1/sysdeps/unix/sysv/linux/alpha/xstat.c
148 --- glibc-2.10.1.orig/glibc-ports-2.10.1/sysdeps/unix/sysv/linux/alpha/xstat.c 2009-05-16 10:36:20.000000000 +0200
149 +++ glibc-2.10.1/glibc-ports-2.10.1/sysdeps/unix/sysv/linux/alpha/xstat.c 2009-11-13 00:50:45.000000000 +0100
151 __xstat (int vers, const char *name, struct stat *buf)
153 INTERNAL_SYSCALL_DECL (err);
154 - int result, errno_out;
156 struct kernel_stat kbuf;
158 +#if __ASSUME_STAT64_SYSCALL > 0
159 + if (vers == _STAT_VER_KERNEL64)
161 + result = INTERNAL_SYSCALL (stat64, err, 2, name, buf);
162 + if (__builtin_expect (!INTERNAL_SYSCALL_ERROR_P (result, err), 1))
164 + __set_errno (INTERNAL_SYSCALL_ERRNO (result, err));
167 +#elif defined __NR_stat64
168 if (vers == _STAT_VER_KERNEL64 && !__libc_missing_axp_stat64)
171 result = INTERNAL_SYSCALL (stat64, err, 2, name, buf);
172 if (__builtin_expect (!INTERNAL_SYSCALL_ERROR_P (result, err), 1))
174 errno_out = INTERNAL_SYSCALL_ERRNO (result, err);
175 if (errno_out != ENOSYS)
178 + __set_errno (errno_out);
181 __libc_missing_axp_stat64 = 1;
185 result = INTERNAL_SYSCALL (stat, err, 2, name, &kbuf);
186 if (__builtin_expect (!INTERNAL_SYSCALL_ERROR_P (result, err), 1))
187 return __xstat_conv (vers, &kbuf, buf);
188 - errno_out = INTERNAL_SYSCALL_ERRNO (result, err);
191 - __set_errno (errno_out);
192 + __set_errno (INTERNAL_SYSCALL_ERRNO (result, err));
196 diff -durN glibc-2.10.1.orig/glibc-ports-2.10.1/sysdeps/unix/sysv/linux/alpha/xstatconv.c glibc-2.10.1/glibc-ports-2.10.1/sysdeps/unix/sysv/linux/alpha/xstatconv.c
197 --- glibc-2.10.1.orig/glibc-ports-2.10.1/sysdeps/unix/sysv/linux/alpha/xstatconv.c 2009-05-16 10:36:20.000000000 +0200
198 +++ glibc-2.10.1/glibc-ports-2.10.1/sysdeps/unix/sysv/linux/alpha/xstatconv.c 2009-11-13 00:50:45.000000000 +0100
200 #include <sys/stat.h>
201 #include <kernel_stat.h>
202 #include <xstatconv.h>
203 +#include <sys/syscall.h>
207 +# if __ASSUME_STAT64_SYSCALL == 0
208 int __libc_missing_axp_stat64;
213 __xstat_conv (int vers, struct kernel_stat *kbuf, void *ubuf)
214 diff -durN glibc-2.10.1.orig/glibc-ports-2.10.1/sysdeps/unix/sysv/linux/alpha/xstatconv.h glibc-2.10.1/glibc-ports-2.10.1/sysdeps/unix/sysv/linux/alpha/xstatconv.h
215 --- glibc-2.10.1.orig/glibc-ports-2.10.1/sysdeps/unix/sysv/linux/alpha/xstatconv.h 2009-05-16 10:36:20.000000000 +0200
216 +++ glibc-2.10.1/glibc-ports-2.10.1/sysdeps/unix/sysv/linux/alpha/xstatconv.h 2009-11-13 00:50:45.000000000 +0100
220 #include <kernel-features.h>
221 +#include <sys/syscall.h>
224 +# if __ASSUME_STAT64_SYSCALL == 0
225 extern int __libc_missing_axp_stat64 attribute_hidden;
228 extern int __xstat_conv (int vers, struct kernel_stat *kbuf, void *ubuf)
230 diff -durN glibc-2.10.1.orig/ports/sysdeps/unix/sysv/linux/alpha/fxstat.c glibc-2.10.1/ports/sysdeps/unix/sysv/linux/alpha/fxstat.c
231 diff -durN glibc-2.10.1.orig/ports/sysdeps/unix/sysv/linux/alpha/fxstatat.c glibc-2.10.1/ports/sysdeps/unix/sysv/linux/alpha/fxstatat.c
232 diff -durN glibc-2.10.1.orig/ports/sysdeps/unix/sysv/linux/alpha/lxstat.c glibc-2.10.1/ports/sysdeps/unix/sysv/linux/alpha/lxstat.c
233 diff -durN glibc-2.10.1.orig/ports/sysdeps/unix/sysv/linux/alpha/xstat.c glibc-2.10.1/ports/sysdeps/unix/sysv/linux/alpha/xstat.c
234 diff -durN glibc-2.10.1.orig/ports/sysdeps/unix/sysv/linux/alpha/xstatconv.c glibc-2.10.1/ports/sysdeps/unix/sysv/linux/alpha/xstatconv.c
235 diff -durN glibc-2.10.1.orig/ports/sysdeps/unix/sysv/linux/alpha/xstatconv.h glibc-2.10.1/ports/sysdeps/unix/sysv/linux/alpha/xstatconv.h
236 diff -durN glibc-2.10.1.orig/sysdeps/unix/sysv/linux/kernel-features.h glibc-2.10.1/sysdeps/unix/sysv/linux/kernel-features.h
237 --- glibc-2.10.1.orig/sysdeps/unix/sysv/linux/kernel-features.h 2009-05-09 08:54:20.000000000 +0200
238 +++ glibc-2.10.1/sysdeps/unix/sysv/linux/kernel-features.h 2009-11-13 00:50:45.000000000 +0100
240 # define __ASSUME_GETDENTS32_D_TYPE 1
243 +/* Starting with version 2.6.4, alpha stat64 syscalls are available. */
244 +#if __LINUX_KERNEL_VERSION >= 0x020604 && defined __alpha__
245 +# define __ASSUME_STAT64_SYSCALL 1
248 /* Starting with version 2.5.3, the initial location returned by `brk'
249 after exec is always rounded up to the next page. */
250 #if __LINUX_KERNEL_VERSION >= 132355