aboutsummaryrefslogtreecommitdiffstats
path: root/arch/sparc64/kernel/sys32.S
diff options
context:
space:
mode:
authorDavid S. Miller <davem@sunset.davemloft.net>2005-09-28 23:21:11 -0400
committerDavid S. Miller <davem@sunset.davemloft.net>2005-09-28 23:21:11 -0400
commit8cf14af0a740fb7e9f94a203b5a989beb875d58f (patch)
treea7bec4d60c352e780d6a2b75e9b95e637e3a14f7 /arch/sparc64/kernel/sys32.S
parent705747ab87c96f1b4b8e73ba617c323d9087f6ac (diff)
[SPARC64]: Convert to use generic exception table support.
The funny "range" exception table entries we had were only used by the compat layer socketcall assembly, and it wasn't even needed there. For free we now get proper exception table sorting and fast binary searching. Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'arch/sparc64/kernel/sys32.S')
-rw-r--r--arch/sparc64/kernel/sys32.S145
1 files changed, 80 insertions, 65 deletions
diff --git a/arch/sparc64/kernel/sys32.S b/arch/sparc64/kernel/sys32.S
index 5f9e4fae612e..4fb99e0bc7c3 100644
--- a/arch/sparc64/kernel/sys32.S
+++ b/arch/sparc64/kernel/sys32.S
@@ -158,163 +158,163 @@ sys32_socketcall: /* %o0=call, %o1=args */
158 jmpl %g2 + %o0, %g0 158 jmpl %g2 + %o0, %g0
159 nop 159 nop
160 160
161 /* Each entry is exactly 32 bytes. */
162 .align 32 161 .align 32
163__socketcall_table_begin: 162__socketcall_table_begin:
163
164 /* Each entry is exactly 32 bytes. */
164do_sys_socket: /* sys_socket(int, int, int) */ 165do_sys_socket: /* sys_socket(int, int, int) */
165 ldswa [%o1 + 0x0] %asi, %o0 1661: ldswa [%o1 + 0x0] %asi, %o0
166 sethi %hi(sys_socket), %g1 167 sethi %hi(sys_socket), %g1
167 ldswa [%o1 + 0x8] %asi, %o2 1682: ldswa [%o1 + 0x8] %asi, %o2
168 jmpl %g1 + %lo(sys_socket), %g0 169 jmpl %g1 + %lo(sys_socket), %g0
169 ldswa [%o1 + 0x4] %asi, %o1 1703: ldswa [%o1 + 0x4] %asi, %o1
170 nop 171 nop
171 nop 172 nop
172 nop 173 nop
173do_sys_bind: /* sys_bind(int fd, struct sockaddr *, int) */ 174do_sys_bind: /* sys_bind(int fd, struct sockaddr *, int) */
174 ldswa [%o1 + 0x0] %asi, %o0 1754: ldswa [%o1 + 0x0] %asi, %o0
175 sethi %hi(sys_bind), %g1 176 sethi %hi(sys_bind), %g1
176 ldswa [%o1 + 0x8] %asi, %o2 1775: ldswa [%o1 + 0x8] %asi, %o2
177 jmpl %g1 + %lo(sys_bind), %g0 178 jmpl %g1 + %lo(sys_bind), %g0
178 lduwa [%o1 + 0x4] %asi, %o1 1796: lduwa [%o1 + 0x4] %asi, %o1
179 nop 180 nop
180 nop 181 nop
181 nop 182 nop
182do_sys_connect: /* sys_connect(int, struct sockaddr *, int) */ 183do_sys_connect: /* sys_connect(int, struct sockaddr *, int) */
183 ldswa [%o1 + 0x0] %asi, %o0 1847: ldswa [%o1 + 0x0] %asi, %o0
184 sethi %hi(sys_connect), %g1 185 sethi %hi(sys_connect), %g1
185 ldswa [%o1 + 0x8] %asi, %o2 1868: ldswa [%o1 + 0x8] %asi, %o2
186 jmpl %g1 + %lo(sys_connect), %g0 187 jmpl %g1 + %lo(sys_connect), %g0
187 lduwa [%o1 + 0x4] %asi, %o1 1889: lduwa [%o1 + 0x4] %asi, %o1
188 nop 189 nop
189 nop 190 nop
190 nop 191 nop
191do_sys_listen: /* sys_listen(int, int) */ 192do_sys_listen: /* sys_listen(int, int) */
192 ldswa [%o1 + 0x0] %asi, %o0 19310: ldswa [%o1 + 0x0] %asi, %o0
193 sethi %hi(sys_listen), %g1 194 sethi %hi(sys_listen), %g1
194 jmpl %g1 + %lo(sys_listen), %g0 195 jmpl %g1 + %lo(sys_listen), %g0
195 ldswa [%o1 + 0x4] %asi, %o1 19611: ldswa [%o1 + 0x4] %asi, %o1
196 nop 197 nop
197 nop 198 nop
198 nop 199 nop
199 nop 200 nop
200do_sys_accept: /* sys_accept(int, struct sockaddr *, int *) */ 201do_sys_accept: /* sys_accept(int, struct sockaddr *, int *) */
201 ldswa [%o1 + 0x0] %asi, %o0 20212: ldswa [%o1 + 0x0] %asi, %o0
202 sethi %hi(sys_accept), %g1 203 sethi %hi(sys_accept), %g1
203 lduwa [%o1 + 0x8] %asi, %o2 20413: lduwa [%o1 + 0x8] %asi, %o2
204 jmpl %g1 + %lo(sys_accept), %g0 205 jmpl %g1 + %lo(sys_accept), %g0
205 lduwa [%o1 + 0x4] %asi, %o1 20614: lduwa [%o1 + 0x4] %asi, %o1
206 nop 207 nop
207 nop 208 nop
208 nop 209 nop
209do_sys_getsockname: /* sys_getsockname(int, struct sockaddr *, int *) */ 210do_sys_getsockname: /* sys_getsockname(int, struct sockaddr *, int *) */
210 ldswa [%o1 + 0x0] %asi, %o0 21115: ldswa [%o1 + 0x0] %asi, %o0
211 sethi %hi(sys_getsockname), %g1 212 sethi %hi(sys_getsockname), %g1
212 lduwa [%o1 + 0x8] %asi, %o2 21316: lduwa [%o1 + 0x8] %asi, %o2
213 jmpl %g1 + %lo(sys_getsockname), %g0 214 jmpl %g1 + %lo(sys_getsockname), %g0
214 lduwa [%o1 + 0x4] %asi, %o1 21517: lduwa [%o1 + 0x4] %asi, %o1
215 nop 216 nop
216 nop 217 nop
217 nop 218 nop
218do_sys_getpeername: /* sys_getpeername(int, struct sockaddr *, int *) */ 219do_sys_getpeername: /* sys_getpeername(int, struct sockaddr *, int *) */
219 ldswa [%o1 + 0x0] %asi, %o0 22018: ldswa [%o1 + 0x0] %asi, %o0
220 sethi %hi(sys_getpeername), %g1 221 sethi %hi(sys_getpeername), %g1
221 lduwa [%o1 + 0x8] %asi, %o2 22219: lduwa [%o1 + 0x8] %asi, %o2
222 jmpl %g1 + %lo(sys_getpeername), %g0 223 jmpl %g1 + %lo(sys_getpeername), %g0
223 lduwa [%o1 + 0x4] %asi, %o1 22420: lduwa [%o1 + 0x4] %asi, %o1
224 nop 225 nop
225 nop 226 nop
226 nop 227 nop
227do_sys_socketpair: /* sys_socketpair(int, int, int, int *) */ 228do_sys_socketpair: /* sys_socketpair(int, int, int, int *) */
228 ldswa [%o1 + 0x0] %asi, %o0 22921: ldswa [%o1 + 0x0] %asi, %o0
229 sethi %hi(sys_socketpair), %g1 230 sethi %hi(sys_socketpair), %g1
230 ldswa [%o1 + 0x8] %asi, %o2 23122: ldswa [%o1 + 0x8] %asi, %o2
231 lduwa [%o1 + 0xc] %asi, %o3 23223: lduwa [%o1 + 0xc] %asi, %o3
232 jmpl %g1 + %lo(sys_socketpair), %g0 233 jmpl %g1 + %lo(sys_socketpair), %g0
233 ldswa [%o1 + 0x4] %asi, %o1 23424: ldswa [%o1 + 0x4] %asi, %o1
234 nop 235 nop
235 nop 236 nop
236do_sys_send: /* sys_send(int, void *, size_t, unsigned int) */ 237do_sys_send: /* sys_send(int, void *, size_t, unsigned int) */
237 ldswa [%o1 + 0x0] %asi, %o0 23825: ldswa [%o1 + 0x0] %asi, %o0
238 sethi %hi(sys_send), %g1 239 sethi %hi(sys_send), %g1
239 lduwa [%o1 + 0x8] %asi, %o2 24026: lduwa [%o1 + 0x8] %asi, %o2
240 lduwa [%o1 + 0xc] %asi, %o3 24127: lduwa [%o1 + 0xc] %asi, %o3
241 jmpl %g1 + %lo(sys_send), %g0 242 jmpl %g1 + %lo(sys_send), %g0
242 lduwa [%o1 + 0x4] %asi, %o1 24328: lduwa [%o1 + 0x4] %asi, %o1
243 nop 244 nop
244 nop 245 nop
245do_sys_recv: /* sys_recv(int, void *, size_t, unsigned int) */ 246do_sys_recv: /* sys_recv(int, void *, size_t, unsigned int) */
246 ldswa [%o1 + 0x0] %asi, %o0 24729: ldswa [%o1 + 0x0] %asi, %o0
247 sethi %hi(sys_recv), %g1 248 sethi %hi(sys_recv), %g1
248 lduwa [%o1 + 0x8] %asi, %o2 24930: lduwa [%o1 + 0x8] %asi, %o2
249 lduwa [%o1 + 0xc] %asi, %o3 25031: lduwa [%o1 + 0xc] %asi, %o3
250 jmpl %g1 + %lo(sys_recv), %g0 251 jmpl %g1 + %lo(sys_recv), %g0
251 lduwa [%o1 + 0x4] %asi, %o1 25232: lduwa [%o1 + 0x4] %asi, %o1
252 nop 253 nop
253 nop 254 nop
254do_sys_sendto: /* sys_sendto(int, u32, compat_size_t, unsigned int, u32, int) */ 255do_sys_sendto: /* sys_sendto(int, u32, compat_size_t, unsigned int, u32, int) */
255 ldswa [%o1 + 0x0] %asi, %o0 25633: ldswa [%o1 + 0x0] %asi, %o0
256 sethi %hi(sys_sendto), %g1 257 sethi %hi(sys_sendto), %g1
257 lduwa [%o1 + 0x8] %asi, %o2 25834: lduwa [%o1 + 0x8] %asi, %o2
258 lduwa [%o1 + 0xc] %asi, %o3 25935: lduwa [%o1 + 0xc] %asi, %o3
259 lduwa [%o1 + 0x10] %asi, %o4 26036: lduwa [%o1 + 0x10] %asi, %o4
260 ldswa [%o1 + 0x14] %asi, %o5 26137: ldswa [%o1 + 0x14] %asi, %o5
261 jmpl %g1 + %lo(sys_sendto), %g0 262 jmpl %g1 + %lo(sys_sendto), %g0
262 lduwa [%o1 + 0x4] %asi, %o1 26338: lduwa [%o1 + 0x4] %asi, %o1
263do_sys_recvfrom: /* sys_recvfrom(int, u32, compat_size_t, unsigned int, u32, u32) */ 264do_sys_recvfrom: /* sys_recvfrom(int, u32, compat_size_t, unsigned int, u32, u32) */
264 ldswa [%o1 + 0x0] %asi, %o0 26539: ldswa [%o1 + 0x0] %asi, %o0
265 sethi %hi(sys_recvfrom), %g1 266 sethi %hi(sys_recvfrom), %g1
266 lduwa [%o1 + 0x8] %asi, %o2 26740: lduwa [%o1 + 0x8] %asi, %o2
267 lduwa [%o1 + 0xc] %asi, %o3 26841: lduwa [%o1 + 0xc] %asi, %o3
268 lduwa [%o1 + 0x10] %asi, %o4 26942: lduwa [%o1 + 0x10] %asi, %o4
269 lduwa [%o1 + 0x14] %asi, %o5 27043: lduwa [%o1 + 0x14] %asi, %o5
270 jmpl %g1 + %lo(sys_recvfrom), %g0 271 jmpl %g1 + %lo(sys_recvfrom), %g0
271 lduwa [%o1 + 0x4] %asi, %o1 27244: lduwa [%o1 + 0x4] %asi, %o1
272do_sys_shutdown: /* sys_shutdown(int, int) */ 273do_sys_shutdown: /* sys_shutdown(int, int) */
273 ldswa [%o1 + 0x0] %asi, %o0 27445: ldswa [%o1 + 0x0] %asi, %o0
274 sethi %hi(sys_shutdown), %g1 275 sethi %hi(sys_shutdown), %g1
275 jmpl %g1 + %lo(sys_shutdown), %g0 276 jmpl %g1 + %lo(sys_shutdown), %g0
276 ldswa [%o1 + 0x4] %asi, %o1 27746: ldswa [%o1 + 0x4] %asi, %o1
277 nop 278 nop
278 nop 279 nop
279 nop 280 nop
280 nop 281 nop
281do_sys_setsockopt: /* compat_sys_setsockopt(int, int, int, char *, int) */ 282do_sys_setsockopt: /* compat_sys_setsockopt(int, int, int, char *, int) */
282 ldswa [%o1 + 0x0] %asi, %o0 28347: ldswa [%o1 + 0x0] %asi, %o0
283 sethi %hi(compat_sys_setsockopt), %g1 284 sethi %hi(compat_sys_setsockopt), %g1
284 ldswa [%o1 + 0x8] %asi, %o2 28548: ldswa [%o1 + 0x8] %asi, %o2
285 lduwa [%o1 + 0xc] %asi, %o3 28649: lduwa [%o1 + 0xc] %asi, %o3
286 ldswa [%o1 + 0x10] %asi, %o4 28750: ldswa [%o1 + 0x10] %asi, %o4
287 jmpl %g1 + %lo(compat_sys_setsockopt), %g0 288 jmpl %g1 + %lo(compat_sys_setsockopt), %g0
288 ldswa [%o1 + 0x4] %asi, %o1 28951: ldswa [%o1 + 0x4] %asi, %o1
289 nop 290 nop
290do_sys_getsockopt: /* compat_sys_getsockopt(int, int, int, u32, u32) */ 291do_sys_getsockopt: /* compat_sys_getsockopt(int, int, int, u32, u32) */
291 ldswa [%o1 + 0x0] %asi, %o0 29252: ldswa [%o1 + 0x0] %asi, %o0
292 sethi %hi(compat_sys_getsockopt), %g1 293 sethi %hi(compat_sys_getsockopt), %g1
293 ldswa [%o1 + 0x8] %asi, %o2 29453: ldswa [%o1 + 0x8] %asi, %o2
294 lduwa [%o1 + 0xc] %asi, %o3 29554: lduwa [%o1 + 0xc] %asi, %o3
295 lduwa [%o1 + 0x10] %asi, %o4 29655: lduwa [%o1 + 0x10] %asi, %o4
296 jmpl %g1 + %lo(compat_sys_getsockopt), %g0 297 jmpl %g1 + %lo(compat_sys_getsockopt), %g0
297 ldswa [%o1 + 0x4] %asi, %o1 29856: ldswa [%o1 + 0x4] %asi, %o1
298 nop 299 nop
299do_sys_sendmsg: /* compat_sys_sendmsg(int, struct compat_msghdr *, unsigned int) */ 300do_sys_sendmsg: /* compat_sys_sendmsg(int, struct compat_msghdr *, unsigned int) */
300 ldswa [%o1 + 0x0] %asi, %o0 30157: ldswa [%o1 + 0x0] %asi, %o0
301 sethi %hi(compat_sys_sendmsg), %g1 302 sethi %hi(compat_sys_sendmsg), %g1
302 lduwa [%o1 + 0x8] %asi, %o2 30358: lduwa [%o1 + 0x8] %asi, %o2
303 jmpl %g1 + %lo(compat_sys_sendmsg), %g0 304 jmpl %g1 + %lo(compat_sys_sendmsg), %g0
304 lduwa [%o1 + 0x4] %asi, %o1 30559: lduwa [%o1 + 0x4] %asi, %o1
305 nop 306 nop
306 nop 307 nop
307 nop 308 nop
308do_sys_recvmsg: /* compat_sys_recvmsg(int, struct compat_msghdr *, unsigned int) */ 309do_sys_recvmsg: /* compat_sys_recvmsg(int, struct compat_msghdr *, unsigned int) */
309 ldswa [%o1 + 0x0] %asi, %o0 31060: ldswa [%o1 + 0x0] %asi, %o0
310 sethi %hi(compat_sys_recvmsg), %g1 311 sethi %hi(compat_sys_recvmsg), %g1
311 lduwa [%o1 + 0x8] %asi, %o2 31261: lduwa [%o1 + 0x8] %asi, %o2
312 jmpl %g1 + %lo(compat_sys_recvmsg), %g0 313 jmpl %g1 + %lo(compat_sys_recvmsg), %g0
313 lduwa [%o1 + 0x4] %asi, %o1 31462: lduwa [%o1 + 0x4] %asi, %o1
314 nop 315 nop
315 nop 316 nop
316 nop 317 nop
317__socketcall_table_end:
318 318
319do_einval: 319do_einval:
320 retl 320 retl
@@ -325,5 +325,20 @@ do_efault:
325 325
326 .section __ex_table 326 .section __ex_table
327 .align 4 327 .align 4
328 .word __socketcall_table_begin, 0, __socketcall_table_end, do_efault 328 .word 1b, do_efault, 2b, do_efault, 3b, do_efault, 4b, do_efault
329 .word 5b, do_efault, 6b, do_efault, 7b, do_efault, 8b, do_efault
330 .word 9b, do_efault, 10b, do_efault, 11b, do_efault, 12b, do_efault
331 .word 13b, do_efault, 14b, do_efault, 15b, do_efault, 16b, do_efault
332 .word 17b, do_efault, 18b, do_efault, 19b, do_efault, 20b, do_efault
333 .word 21b, do_efault, 22b, do_efault, 23b, do_efault, 24b, do_efault
334 .word 25b, do_efault, 26b, do_efault, 27b, do_efault, 28b, do_efault
335 .word 29b, do_efault, 30b, do_efault, 31b, do_efault, 32b, do_efault
336 .word 33b, do_efault, 34b, do_efault, 35b, do_efault, 36b, do_efault
337 .word 37b, do_efault, 38b, do_efault, 39b, do_efault, 40b, do_efault
338 .word 41b, do_efault, 42b, do_efault, 43b, do_efault, 44b, do_efault
339 .word 45b, do_efault, 46b, do_efault, 47b, do_efault, 48b, do_efault
340 .word 49b, do_efault, 50b, do_efault, 51b, do_efault, 52b, do_efault
341 .word 53b, do_efault, 54b, do_efault, 55b, do_efault, 56b, do_efault
342 .word 57b, do_efault, 58b, do_efault, 59b, do_efault, 60b, do_efault
343 .word 61b, do_efault, 62b, do_efault
329 .previous 344 .previous