Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
View | Details | Raw Unified | Return to bug 709662 | Differences between
and this patch

Collapse All | Expand All

(-)file_not_specified_in_diff (-7 / +4 lines)
Line  Link Here
--
1
.../unix/sysv/linux/sparc/sparc32/sysdep.h    |  3 +-
.../unix/sysv/linux/sparc/sparc32/sysdep.h    |  3 +-
2
.../unix/sysv/linux/sparc/sparc64/sysdep.h    |  3 +-
1
.../unix/sysv/linux/sparc/sparc64/sysdep.h    |  3 +-
3
sysdeps/unix/sysv/linux/sparc/sysdep.h        | 80 +++++++++----------
2
sysdeps/unix/sysv/linux/sparc/sysdep.h        | 80 +++++++++----------
4
3 files changed, 38 insertions(+), 48 deletions(-)
3
3 files changed, 38 insertions(+), 48 deletions(-)
5
-- a/sysdeps/unix/sysv/linux/sparc/sparc32/sysdep.h
4
++ b/sysdeps/unix/sysv/linux/sparc/sparc32/sysdep.h
Lines 110-118 ENTRY(name); \ Link Here
110
#define __SYSCALL_STRING						\
110
#define __SYSCALL_STRING						\
111
	"ta	0x10;"							\
111
	"ta	0x10;"							\
112
	"bcc	1f;"							\
112
	"bcc	1f;"							\
113
	" mov	0, %%g1;"						\
113
	" nop;"								\
114
	"sub	%%g0, %%o0, %%o0;"					\
114
	"sub	%%g0, %%o0, %%o0;"					\
115
	"mov	1, %%g1;"						\
116
	"1:"
115
	"1:"
117
116
118
#define __SYSCALL_CLOBBERS						\
117
#define __SYSCALL_CLOBBERS						\
119
-- a/sysdeps/unix/sysv/linux/sparc/sparc64/sysdep.h
118
++ b/sysdeps/unix/sysv/linux/sparc/sparc64/sysdep.h
Lines 109-117 ENTRY(name); \ Link Here
109
#define __SYSCALL_STRING						\
109
#define __SYSCALL_STRING						\
110
	"ta	0x6d;"							\
110
	"ta	0x6d;"							\
111
	"bcc,pt	%%xcc, 1f;"						\
111
	"bcc,pt	%%xcc, 1f;"						\
112
	" mov	0, %%g1;"						\
112
	" nop;"								\
113
	"sub	%%g0, %%o0, %%o0;"					\
113
	"sub	%%g0, %%o0, %%o0;"					\
114
	"mov	1, %%g1;"						\
115
	"1:"
114
	"1:"
116
115
117
#define __SYSCALL_CLOBBERS						\
116
#define __SYSCALL_CLOBBERS						\
(-)a/sysdeps/unix/sysv/linux/sparc/sysdep.h (-45 / +36 lines)
Lines 34-46 Link Here
34
34
35
#else	/* __ASSEMBLER__ */
35
#else	/* __ASSEMBLER__ */
36
36
37
#define INTERNAL_VSYSCALL_CALL(funcptr, err, nr, args...)		\
38
  ({									\
39
    long _ret = funcptr (args);						\
40
    err = ((unsigned long) (_ret) >= (unsigned long) -4095L);		\
41
    _ret;								\
42
  })
43
44
# define VDSO_NAME  "LINUX_2.6"
37
# define VDSO_NAME  "LINUX_2.6"
45
# define VDSO_HASH  61765110
38
# define VDSO_HASH  61765110
46
39
Lines 65-172 Link Here
65
})
58
})
66
59
67
#undef INTERNAL_SYSCALL_DECL
60
#undef INTERNAL_SYSCALL_DECL
68
#define INTERNAL_SYSCALL_DECL(err) \
61
#define INTERNAL_SYSCALL_DECL(err) do { } while (0)
69
	register long err __asm__("g1");
70
62
71
#undef INTERNAL_SYSCALL
63
#undef INTERNAL_SYSCALL
72
#define INTERNAL_SYSCALL(name, err, nr, args...) \
64
#define INTERNAL_SYSCALL(name, err, nr, args...) \
73
  inline_syscall##nr(__SYSCALL_STRING, err, __NR_##name, args)
65
  internal_syscall##nr(__SYSCALL_STRING, err, __NR_##name, args)
74
66
75
#undef INTERNAL_SYSCALL_NCS
67
#undef INTERNAL_SYSCALL_NCS
76
#define INTERNAL_SYSCALL_NCS(name, err, nr, args...) \
68
#define INTERNAL_SYSCALL_NCS(name, err, nr, args...) \
77
  inline_syscall##nr(__SYSCALL_STRING, err, name, args)
69
  internal_syscall##nr(__SYSCALL_STRING, err, name, args)
78
70
79
#undef INTERNAL_SYSCALL_ERROR_P
71
#undef INTERNAL_SYSCALL_ERROR_P
80
#define INTERNAL_SYSCALL_ERROR_P(val, err) \
72
#define INTERNAL_SYSCALL_ERROR_P(val, err) \
81
  ((void) (val), __builtin_expect((err) != 0, 0))
73
  ((unsigned long int) (val) > -4096UL)
82
74
83
#undef INTERNAL_SYSCALL_ERRNO
75
#undef INTERNAL_SYSCALL_ERRNO
84
#define INTERNAL_SYSCALL_ERRNO(val, err)	(-(val))
76
#define INTERNAL_SYSCALL_ERRNO(val, err)	(-(val))
85
77
86
#define inline_syscall0(string,err,name,dummy...)			\
78
#define internal_syscall0(string,err,name,dummy...)			\
87
({									\
79
({									\
80
	register long int __g1 __asm__ ("g1") = (name);			\
88
	register long __o0 __asm__ ("o0");				\
81
	register long __o0 __asm__ ("o0");				\
89
	err = name;							\
82
	__asm __volatile (string : "=r" (__o0) :			\
90
	__asm __volatile (string : "=r" (err), "=r" (__o0) :		\
83
			  "r" (__g1) :					\
91
			  "0" (err) :					\
92
			  __SYSCALL_CLOBBERS);				\
84
			  __SYSCALL_CLOBBERS);				\
93
	__o0;								\
85
	__o0;								\
94
})
86
})
95
87
96
#define inline_syscall1(string,err,name,arg1)				\
88
#define internal_syscall1(string,err,name,arg1)				\
97
({									\
89
({									\
90
	register long int __g1 __asm__("g1") = (name);			\
98
	register long __o0 __asm__ ("o0") = (long)(arg1);		\
91
	register long __o0 __asm__ ("o0") = (long)(arg1);		\
99
	err = name;							\
92
	__asm __volatile (string : "=r" (__o0) :			\
100
	__asm __volatile (string : "=r" (err), "=r" (__o0) :		\
93
			  "r" (__g1), "0" (__o0) :			\
101
			  "0" (err), "1" (__o0) :			\
102
			  __SYSCALL_CLOBBERS);				\
94
			  __SYSCALL_CLOBBERS);				\
103
	__o0;								\
95
	__o0;								\
104
})
96
})
105
97
106
#define inline_syscall2(string,err,name,arg1,arg2)			\
98
#define internal_syscall2(string,err,name,arg1,arg2)			\
107
({									\
99
({									\
100
	register long int __g1 __asm__("g1") = (name);			\
108
	register long __o0 __asm__ ("o0") = (long)(arg1);		\
101
	register long __o0 __asm__ ("o0") = (long)(arg1);		\
109
	register long __o1 __asm__ ("o1") = (long)(arg2);		\
102
	register long __o1 __asm__ ("o1") = (long)(arg2);		\
110
	err = name;							\
103
	__asm __volatile (string : "=r" (__o0) :			\
111
	__asm __volatile (string : "=r" (err), "=r" (__o0) :		\
104
			  "r" (__g1), "0" (__o0), "r" (__o1) :		\
112
			  "0" (err), "1" (__o0), "r" (__o1) :		\
113
			  __SYSCALL_CLOBBERS);				\
105
			  __SYSCALL_CLOBBERS);				\
114
	__o0;								\
106
	__o0;								\
115
})
107
})
116
108
117
#define inline_syscall3(string,err,name,arg1,arg2,arg3)			\
109
#define internal_syscall3(string,err,name,arg1,arg2,arg3)		\
118
({									\
110
({									\
111
	register long int __g1 __asm__("g1") = (name);			\
119
	register long __o0 __asm__ ("o0") = (long)(arg1);		\
112
	register long __o0 __asm__ ("o0") = (long)(arg1);		\
120
	register long __o1 __asm__ ("o1") = (long)(arg2);		\
113
	register long __o1 __asm__ ("o1") = (long)(arg2);		\
121
	register long __o2 __asm__ ("o2") = (long)(arg3);		\
114
	register long __o2 __asm__ ("o2") = (long)(arg3);		\
122
	err = name;							\
115
	__asm __volatile (string : "=r" (__o0) :			\
123
	__asm __volatile (string : "=r" (err), "=r" (__o0) :		\
116
			  "r" (__g1), "0" (__o0), "r" (__o1),		\
124
			  "0" (err), "1" (__o0), "r" (__o1),		\
125
			  "r" (__o2) :					\
117
			  "r" (__o2) :					\
126
			  __SYSCALL_CLOBBERS);				\
118
			  __SYSCALL_CLOBBERS);				\
127
	__o0;								\
119
	__o0;								\
128
})
120
})
129
121
130
#define inline_syscall4(string,err,name,arg1,arg2,arg3,arg4)		\
122
#define internal_syscall4(string,err,name,arg1,arg2,arg3,arg4)		\
131
({									\
123
({									\
124
	register long int __g1 __asm__("g1") = (name);			\
132
	register long __o0 __asm__ ("o0") = (long)(arg1);		\
125
	register long __o0 __asm__ ("o0") = (long)(arg1);		\
133
	register long __o1 __asm__ ("o1") = (long)(arg2);		\
126
	register long __o1 __asm__ ("o1") = (long)(arg2);		\
134
	register long __o2 __asm__ ("o2") = (long)(arg3);		\
127
	register long __o2 __asm__ ("o2") = (long)(arg3);		\
135
	register long __o3 __asm__ ("o3") = (long)(arg4);		\
128
	register long __o3 __asm__ ("o3") = (long)(arg4);		\
136
	err = name;							\
129
	__asm __volatile (string : "=r" (__o0) :			\
137
	__asm __volatile (string : "=r" (err), "=r" (__o0) :		\
130
			  "r" (__g1), "0" (__o0), "r" (__o1),		\
138
			  "0" (err), "1" (__o0), "r" (__o1),		\
139
			  "r" (__o2), "r" (__o3) :			\
131
			  "r" (__o2), "r" (__o3) :			\
140
			  __SYSCALL_CLOBBERS);				\
132
			  __SYSCALL_CLOBBERS);				\
141
	__o0;								\
133
	__o0;								\
142
})
134
})
143
135
144
#define inline_syscall5(string,err,name,arg1,arg2,arg3,arg4,arg5)	\
136
#define internal_syscall5(string,err,name,arg1,arg2,arg3,arg4,arg5)	\
145
({									\
137
({									\
138
	register long int __g1 __asm__("g1") = (name);			\
146
	register long __o0 __asm__ ("o0") = (long)(arg1);		\
139
	register long __o0 __asm__ ("o0") = (long)(arg1);		\
147
	register long __o1 __asm__ ("o1") = (long)(arg2);		\
140
	register long __o1 __asm__ ("o1") = (long)(arg2);		\
148
	register long __o2 __asm__ ("o2") = (long)(arg3);		\
141
	register long __o2 __asm__ ("o2") = (long)(arg3);		\
149
	register long __o3 __asm__ ("o3") = (long)(arg4);		\
142
	register long __o3 __asm__ ("o3") = (long)(arg4);		\
150
	register long __o4 __asm__ ("o4") = (long)(arg5);		\
143
	register long __o4 __asm__ ("o4") = (long)(arg5);		\
151
	err = name;							\
144
	__asm __volatile (string : "=r" (__o0) :			\
152
	__asm __volatile (string : "=r" (err), "=r" (__o0) :		\
145
			  "r" (__g1), "0" (__o0), "r" (__o1),		\
153
			  "0" (err), "1" (__o0), "r" (__o1),		\
154
			  "r" (__o2), "r" (__o3), "r" (__o4) :		\
146
			  "r" (__o2), "r" (__o3), "r" (__o4) :		\
155
			  __SYSCALL_CLOBBERS);				\
147
			  __SYSCALL_CLOBBERS);				\
156
	__o0;								\
148
	__o0;								\
157
})
149
})
158
150
159
#define inline_syscall6(string,err,name,arg1,arg2,arg3,arg4,arg5,arg6)	\
151
#define internal_syscall6(string,err,name,arg1,arg2,arg3,arg4,arg5,arg6)\
160
({									\
152
({									\
153
	register long int __g1 __asm__("g1") = (name);			\
161
	register long __o0 __asm__ ("o0") = (long)(arg1);		\
154
	register long __o0 __asm__ ("o0") = (long)(arg1);		\
162
	register long __o1 __asm__ ("o1") = (long)(arg2);		\
155
	register long __o1 __asm__ ("o1") = (long)(arg2);		\
163
	register long __o2 __asm__ ("o2") = (long)(arg3);		\
156
	register long __o2 __asm__ ("o2") = (long)(arg3);		\
164
	register long __o3 __asm__ ("o3") = (long)(arg4);		\
157
	register long __o3 __asm__ ("o3") = (long)(arg4);		\
165
	register long __o4 __asm__ ("o4") = (long)(arg5);		\
158
	register long __o4 __asm__ ("o4") = (long)(arg5);		\
166
	register long __o5 __asm__ ("o5") = (long)(arg6);		\
159
	register long __o5 __asm__ ("o5") = (long)(arg6);		\
167
	err = name;							\
160
	__asm __volatile (string : "=r" (__o0) :			\
168
	__asm __volatile (string : "=r" (err), "=r" (__o0) :		\
161
			  "r" (__g1), "0" (__o0), "r" (__o1),		\
169
			  "0" (err), "1" (__o0), "r" (__o1),		\
170
			  "r" (__o2), "r" (__o3), "r" (__o4),		\
162
			  "r" (__o2), "r" (__o3), "r" (__o4),		\
171
			  "r" (__o5) :					\
163
			  "r" (__o5) :					\
172
			  __SYSCALL_CLOBBERS);				\
164
			  __SYSCALL_CLOBBERS);				\
Lines 182-194 Link Here
182
	register long __o4 __asm__ ("o4") = (long)(arg5);		\
174
	register long __o4 __asm__ ("o4") = (long)(arg5);		\
183
	register long __g1 __asm__ ("g1") = __NR_clone;			\
175
	register long __g1 __asm__ ("g1") = __NR_clone;			\
184
	__asm __volatile (__SYSCALL_STRING :				\
176
	__asm __volatile (__SYSCALL_STRING :				\
185
			  "=r" (__g1), "=r" (__o0), "=r" (__o1)	:	\
177
			  "=r" (__o0), "=r" (__o1) :			\
186
			  "0" (__g1), "1" (__o0), "2" (__o1),		\
178
			  "r" (__g1), "0" (__o0), "1" (__o1),		\
187
			  "r" (__o2), "r" (__o3), "r" (__o4) :		\
179
			  "r" (__o2), "r" (__o3), "r" (__o4) :		\
188
			  __SYSCALL_CLOBBERS);				\
180
			  __SYSCALL_CLOBBERS);				\
189
	if (INTERNAL_SYSCALL_ERROR_P (__o0, __g1))			\
181
	if (__glibc_unlikely ((unsigned long int) (__o0) > -4096UL))	\
190
	  {		     			       		   	\
182
	  {		     			       		   	\
191
	    __set_errno (INTERNAL_SYSCALL_ERRNO (__o0, __g1));		\
183
	    __set_errno (-__o0);					\
192
	    __o0 = -1L;			    				\
184
	    __o0 = -1L;			    				\
193
	  } 	      							\
185
	  } 	      							\
194
	else								\
186
	else								\
195
- 

Return to bug 709662