[MIPS] Au1xx0: fix prom_getenv() to handle YAMON style environment
[GitHub/mt8127/android_kernel_alcatel_ttab.git] / arch / mips / kernel / scall32-o32.S
CommitLineData
1da177e4
LT
1/*
2 * This file is subject to the terms and conditions of the GNU General Public
3 * License. See the file "COPYING" in the main directory of this archive
4 * for more details.
5 *
6 * Copyright (C) 1995, 96, 97, 98, 99, 2000, 01, 02 by Ralf Baechle
7 * Copyright (C) 2001 MIPS Technologies, Inc.
8 * Copyright (C) 2004 Thiemo Seufer
9 */
10#include <linux/config.h>
11#include <linux/errno.h>
12#include <asm/asm.h>
13#include <asm/asmmacro.h>
14#include <asm/mipsregs.h>
15#include <asm/regdef.h>
16#include <asm/stackframe.h>
17#include <asm/isadep.h>
18#include <asm/sysmips.h>
19#include <asm/thread_info.h>
20#include <asm/unistd.h>
21#include <asm/war.h>
048eb582 22#include <asm/asm-offsets.h>
1da177e4
LT
23
24/* Highest syscall used of any syscall flavour */
25#define MAX_SYSCALL_NO __NR_O32_Linux + __NR_O32_Linux_syscalls
26
27 .align 5
28NESTED(handle_sys, PT_SIZE, sp)
29 .set noat
30 SAVE_SOME
31 STI
32 .set at
33
34 lw t1, PT_EPC(sp) # skip syscall on return
35
36#if defined(CONFIG_BINFMT_IRIX)
37 sltiu t0, v0, MAX_SYSCALL_NO + 1 # check syscall number
38#else
39 subu v0, v0, __NR_O32_Linux # check syscall number
40 sltiu t0, v0, __NR_O32_Linux_syscalls + 1
41#endif
42 addiu t1, 4 # skip to next instruction
43 sw t1, PT_EPC(sp)
44 beqz t0, illegal_syscall
45
46 sll t0, v0, 3
47 la t1, sys_call_table
48 addu t1, t0
49 lw t2, (t1) # syscall routine
50 lw t3, 4(t1) # >= 0 if we need stack arguments
51 beqz t2, illegal_syscall
52
53 sw a3, PT_R26(sp) # save a3 for syscall restarting
54 bgez t3, stackargs
55
56stack_done:
57 lw t0, TI_FLAGS($28) # syscall tracing enabled?
58 li t1, _TIF_SYSCALL_TRACE | _TIF_SYSCALL_AUDIT
59 and t0, t1
60 bnez t0, syscall_trace_entry # -> yes
61
62 jalr t2 # Do The Real Thing (TM)
63
64 li t0, -EMAXERRNO - 1 # error?
65 sltu t0, t0, v0
66 sw t0, PT_R7(sp) # set error flag
67 beqz t0, 1f
68
69 negu v0 # error
70 sw v0, PT_R0(sp) # set flag for syscall
71 # restarting
721: sw v0, PT_R2(sp) # result
73
74o32_syscall_exit:
75 local_irq_disable # make sure need_resched and
76 # signals dont change between
77 # sampling and return
78 lw a2, TI_FLAGS($28) # current->work
79 li t0, _TIF_ALLWORK_MASK
80 and t0, a2
81 bnez t0, o32_syscall_exit_work
82
83 j restore_partial
84
85o32_syscall_exit_work:
86 j syscall_exit_work_partial
87
88/* ------------------------------------------------------------------------ */
89
90syscall_trace_entry:
91 SAVE_STATIC
92 move s0, t2
93 move a0, sp
94 li a1, 0
95 jal do_syscall_trace
96
04a7052c
RB
97 move t0, s0
98 RESTORE_STATIC
1da177e4
LT
99 lw a0, PT_R4(sp) # Restore argument registers
100 lw a1, PT_R5(sp)
101 lw a2, PT_R6(sp)
102 lw a3, PT_R7(sp)
04a7052c 103 jalr t0
1da177e4
LT
104
105 li t0, -EMAXERRNO - 1 # error?
106 sltu t0, t0, v0
107 sw t0, PT_R7(sp) # set error flag
108 beqz t0, 1f
109
110 negu v0 # error
111 sw v0, PT_R0(sp) # set flag for syscall
112 # restarting
1131: sw v0, PT_R2(sp) # result
114
115 j syscall_exit
116
117/* ------------------------------------------------------------------------ */
118
119 /*
120 * More than four arguments. Try to deal with it by copying the
121 * stack arguments from the user stack to the kernel stack.
122 * This Sucks (TM).
123 */
124stackargs:
125 lw t0, PT_R29(sp) # get old user stack pointer
126
127 /*
128 * We intentionally keep the kernel stack a little below the top of
129 * userspace so we don't have to do a slower byte accurate check here.
130 */
131 lw t5, TI_ADDR_LIMIT($28)
132 addu t4, t0, 32
133 and t5, t4
134 bltz t5, bad_stack # -> sp is bad
135
136 /* Ok, copy the args from the luser stack to the kernel stack.
137 * t3 is the precomputed number of instruction bytes needed to
138 * load or store arguments 6-8.
139 */
140
141 la t1, 5f # load up to 3 arguments
142 subu t1, t3
1431: lw t5, 16(t0) # argument #5 from usp
144 .set push
145 .set noreorder
146 .set nomacro
147 jr t1
148 addiu t1, 6f - 5f
149
1502: lw t8, 28(t0) # argument #8 from usp
1513: lw t7, 24(t0) # argument #7 from usp
1524: lw t6, 20(t0) # argument #6 from usp
1535: jr t1
154 sw t5, 16(sp) # argument #5 to ksp
155
156 sw t8, 28(sp) # argument #8 to ksp
157 sw t7, 24(sp) # argument #7 to ksp
158 sw t6, 20(sp) # argument #6 to ksp
1596: j stack_done # go back
160 nop
161 .set pop
162
163 .section __ex_table,"a"
164 PTR 1b,bad_stack
165 PTR 2b,bad_stack
166 PTR 3b,bad_stack
167 PTR 4b,bad_stack
168 .previous
169
170 /*
171 * The stackpointer for a call with more than 4 arguments is bad.
172 * We probably should handle this case a bit more drastic.
173 */
174bad_stack:
175 negu v0 # error
176 sw v0, PT_R0(sp)
177 sw v0, PT_R2(sp)
178 li t0, 1 # set error flag
179 sw t0, PT_R7(sp)
180 j o32_syscall_exit
181
182 /*
183 * The system call does not exist in this kernel
184 */
185illegal_syscall:
186 li v0, -ENOSYS # error
187 sw v0, PT_R2(sp)
188 li t0, 1 # set error flag
189 sw t0, PT_R7(sp)
190 j o32_syscall_exit
191 END(handle_sys)
192
193 LEAF(mips_atomic_set)
194 andi v0, a1, 3 # must be word aligned
195 bnez v0, bad_alignment
196
197 lw v1, TI_ADDR_LIMIT($28) # in legal address range?
198 addiu a0, a1, 4
199 or a0, a0, a1
200 and a0, a0, v1
201 bltz a0, bad_address
202
203#ifdef CONFIG_CPU_HAS_LLSC
204 /* Ok, this is the ll/sc case. World is sane :-) */
2051: ll v0, (a1)
206 move a0, a2
2072: sc a0, (a1)
208#if R10000_LLSC_WAR
209 beqzl a0, 1b
210#else
211 beqz a0, 1b
212#endif
213
214 .section __ex_table,"a"
215 PTR 1b, bad_stack
216 PTR 2b, bad_stack
217 .previous
218#else
219 sw a1, 16(sp)
220 sw a2, 20(sp)
221
222 move a0, sp
223 move a2, a1
224 li a1, 1
225 jal do_page_fault
226
227 lw a1, 16(sp)
228 lw a2, 20(sp)
229
230 /*
231 * At this point the page should be readable and writable unless
232 * there was no more memory available.
233 */
2341: lw v0, (a1)
2352: sw a2, (a1)
236
237 .section __ex_table,"a"
238 PTR 1b, no_mem
239 PTR 2b, no_mem
240 .previous
241#endif
242
243 sw zero, PT_R7(sp) # success
244 sw v0, PT_R2(sp) # result
245
edcb98d1 246 j o32_syscall_exit # continue like a normal syscall
1da177e4
LT
247
248no_mem: li v0, -ENOMEM
249 jr ra
250
251bad_address:
252 li v0, -EFAULT
253 jr ra
254
255bad_alignment:
256 li v0, -EINVAL
257 jr ra
258 END(mips_atomic_set)
259
260 LEAF(sys_sysmips)
261 beq a0, MIPS_ATOMIC_SET, mips_atomic_set
262 j _sys_sysmips
263 END(sys_sysmips)
264
265 LEAF(sys_syscall)
266#if defined(CONFIG_BINFMT_IRIX)
267 sltiu v0, a0, MAX_SYSCALL_NO + 1 # check syscall number
268#else
269 subu t0, a0, __NR_O32_Linux # check syscall number
270 sltiu v0, t0, __NR_O32_Linux_syscalls + 1
271#endif
272 sll t1, t0, 3
273 beqz v0, einval
274
275 lw t2, sys_call_table(t1) # syscall routine
276
277#if defined(CONFIG_BINFMT_IRIX)
278 li v1, 4000 # nr of sys_syscall
279#else
280 li v1, 4000 - __NR_O32_Linux # index of sys_syscall
281#endif
282 beq t0, v1, einval # do not recurse
283
284 /* Some syscalls like execve get their arguments from struct pt_regs
285 and claim zero arguments in the syscall table. Thus we have to
286 assume the worst case and shuffle around all potential arguments.
287 If you want performance, don't use indirect syscalls. */
288
289 move a0, a1 # shift argument registers
290 move a1, a2
291 move a2, a3
292 lw a3, 16(sp)
293 lw t4, 20(sp)
294 lw t5, 24(sp)
295 lw t6, 28(sp)
296 sw t4, 16(sp)
297 sw t5, 20(sp)
298 sw t6, 24(sp)
299 sw a0, PT_R4(sp) # .. and push back a0 - a3, some
300 sw a1, PT_R5(sp) # syscalls expect them there
301 sw a2, PT_R6(sp)
302 sw a3, PT_R7(sp)
303 sw a3, PT_R26(sp) # update a3 for syscall restarting
304 jr t2
305 /* Unreached */
306
307einval: li v0, -EINVAL
308 jr ra
309 END(sys_syscall)
310
311 .macro fifty ptr, nargs, from=1, to=50
312 sys \ptr \nargs
313 .if \to-\from
314 fifty \ptr,\nargs,"(\from+1)",\to
315 .endif
316 .endm
317
318 .macro mille ptr, nargs, from=1, to=20
319 fifty \ptr,\nargs
320 .if \to-\from
321 mille \ptr,\nargs,"(\from+1)",\to
322 .endif
323 .endm
324
325 .macro syscalltable
326#if defined(CONFIG_BINFMT_IRIX)
327 mille sys_ni_syscall 0 /* 0 - 999 SVR4 flavour */
328 mille sys_ni_syscall 0 /* 1000 - 1999 32-bit IRIX */
329 mille sys_ni_syscall 0 /* 2000 - 2999 BSD43 flavour */
330 mille sys_ni_syscall 0 /* 3000 - 3999 POSIX flavour */
331#endif
332
333 sys sys_syscall 8 /* 4000 */
334 sys sys_exit 1
335 sys sys_fork 0
336 sys sys_read 3
337 sys sys_write 3
338 sys sys_open 3 /* 4005 */
339 sys sys_close 1
340 sys sys_waitpid 3
341 sys sys_creat 2
342 sys sys_link 2
343 sys sys_unlink 1 /* 4010 */
344 sys sys_execve 0
345 sys sys_chdir 1
346 sys sys_time 1
347 sys sys_mknod 3
348 sys sys_chmod 2 /* 4015 */
349 sys sys_lchown 3
350 sys sys_ni_syscall 0
351 sys sys_ni_syscall 0 /* was sys_stat */
352 sys sys_lseek 3
353 sys sys_getpid 0 /* 4020 */
354 sys sys_mount 5
355 sys sys_oldumount 1
356 sys sys_setuid 1
357 sys sys_getuid 0
358 sys sys_stime 1 /* 4025 */
359 sys sys_ptrace 4
360 sys sys_alarm 1
361 sys sys_ni_syscall 0 /* was sys_fstat */
362 sys sys_pause 0
363 sys sys_utime 2 /* 4030 */
364 sys sys_ni_syscall 0
365 sys sys_ni_syscall 0
366 sys sys_access 2
367 sys sys_nice 1
368 sys sys_ni_syscall 0 /* 4035 */
369 sys sys_sync 0
370 sys sys_kill 2
371 sys sys_rename 2
372 sys sys_mkdir 2
373 sys sys_rmdir 1 /* 4040 */
374 sys sys_dup 1
375 sys sys_pipe 0
376 sys sys_times 1
377 sys sys_ni_syscall 0
378 sys sys_brk 1 /* 4045 */
379 sys sys_setgid 1
380 sys sys_getgid 0
381 sys sys_ni_syscall 0 /* was signal(2) */
382 sys sys_geteuid 0
383 sys sys_getegid 0 /* 4050 */
384 sys sys_acct 1
385 sys sys_umount 2
386 sys sys_ni_syscall 0
387 sys sys_ioctl 3
388 sys sys_fcntl 3 /* 4055 */
389 sys sys_ni_syscall 2
390 sys sys_setpgid 2
391 sys sys_ni_syscall 0
392 sys sys_olduname 1
393 sys sys_umask 1 /* 4060 */
394 sys sys_chroot 1
395 sys sys_ustat 2
396 sys sys_dup2 2
397 sys sys_getppid 0
398 sys sys_getpgrp 0 /* 4065 */
399 sys sys_setsid 0
400 sys sys_sigaction 3
401 sys sys_sgetmask 0
402 sys sys_ssetmask 1
403 sys sys_setreuid 2 /* 4070 */
404 sys sys_setregid 2
405 sys sys_sigsuspend 0
406 sys sys_sigpending 1
407 sys sys_sethostname 2
408 sys sys_setrlimit 2 /* 4075 */
409 sys sys_getrlimit 2
410 sys sys_getrusage 2
411 sys sys_gettimeofday 2
412 sys sys_settimeofday 2
413 sys sys_getgroups 2 /* 4080 */
414 sys sys_setgroups 2
415 sys sys_ni_syscall 0 /* old_select */
416 sys sys_symlink 2
417 sys sys_ni_syscall 0 /* was sys_lstat */
418 sys sys_readlink 3 /* 4085 */
419 sys sys_uselib 1
420 sys sys_swapon 2
421 sys sys_reboot 3
422 sys old_readdir 3
423 sys old_mmap 6 /* 4090 */
424 sys sys_munmap 2
425 sys sys_truncate 2
426 sys sys_ftruncate 2
427 sys sys_fchmod 2
428 sys sys_fchown 3 /* 4095 */
429 sys sys_getpriority 2
430 sys sys_setpriority 3
431 sys sys_ni_syscall 0
432 sys sys_statfs 2
433 sys sys_fstatfs 2 /* 4100 */
434 sys sys_ni_syscall 0 /* was ioperm(2) */
435 sys sys_socketcall 2
436 sys sys_syslog 3
437 sys sys_setitimer 3
438 sys sys_getitimer 2 /* 4105 */
439 sys sys_newstat 2
440 sys sys_newlstat 2
441 sys sys_newfstat 2
442 sys sys_uname 1
443 sys sys_ni_syscall 0 /* 4110 was iopl(2) */
444 sys sys_vhangup 0
445 sys sys_ni_syscall 0 /* was sys_idle() */
446 sys sys_ni_syscall 0 /* was sys_vm86 */
447 sys sys_wait4 4
448 sys sys_swapoff 1 /* 4115 */
449 sys sys_sysinfo 1
450 sys sys_ipc 6
451 sys sys_fsync 1
452 sys sys_sigreturn 0
453 sys sys_clone 0 /* 4120 */
454 sys sys_setdomainname 2
455 sys sys_newuname 1
456 sys sys_ni_syscall 0 /* sys_modify_ldt */
457 sys sys_adjtimex 1
458 sys sys_mprotect 3 /* 4125 */
459 sys sys_sigprocmask 3
460 sys sys_ni_syscall 0 /* was create_module */
461 sys sys_init_module 5
462 sys sys_delete_module 1
463 sys sys_ni_syscall 0 /* 4130 was get_kernel_syms */
464 sys sys_quotactl 4
465 sys sys_getpgid 1
466 sys sys_fchdir 1
467 sys sys_bdflush 2
468 sys sys_sysfs 3 /* 4135 */
469 sys sys_personality 1
470 sys sys_ni_syscall 0 /* for afs_syscall */
471 sys sys_setfsuid 1
472 sys sys_setfsgid 1
473 sys sys_llseek 5 /* 4140 */
474 sys sys_getdents 3
475 sys sys_select 5
476 sys sys_flock 2
477 sys sys_msync 3
478 sys sys_readv 3 /* 4145 */
479 sys sys_writev 3
480 sys sys_cacheflush 3
481 sys sys_cachectl 3
482 sys sys_sysmips 4
483 sys sys_ni_syscall 0 /* 4150 */
484 sys sys_getsid 1
485 sys sys_fdatasync 1
486 sys sys_sysctl 1
487 sys sys_mlock 2
488 sys sys_munlock 2 /* 4155 */
489 sys sys_mlockall 1
490 sys sys_munlockall 0
491 sys sys_sched_setparam 2
492 sys sys_sched_getparam 2
493 sys sys_sched_setscheduler 3 /* 4160 */
494 sys sys_sched_getscheduler 1
495 sys sys_sched_yield 0
496 sys sys_sched_get_priority_max 1
497 sys sys_sched_get_priority_min 1
498 sys sys_sched_rr_get_interval 2 /* 4165 */
499 sys sys_nanosleep, 2
500 sys sys_mremap, 4
501 sys sys_accept 3
502 sys sys_bind 3
503 sys sys_connect 3 /* 4170 */
504 sys sys_getpeername 3
505 sys sys_getsockname 3
506 sys sys_getsockopt 5
507 sys sys_listen 2
508 sys sys_recv 4 /* 4175 */
509 sys sys_recvfrom 6
510 sys sys_recvmsg 3
511 sys sys_send 4
512 sys sys_sendmsg 3
513 sys sys_sendto 6 /* 4180 */
514 sys sys_setsockopt 5
515 sys sys_shutdown 2
516 sys sys_socket 3
517 sys sys_socketpair 4
518 sys sys_setresuid 3 /* 4185 */
519 sys sys_getresuid 3
520 sys sys_ni_syscall 0 /* was sys_query_module */
521 sys sys_poll 3
522 sys sys_nfsservctl 3
523 sys sys_setresgid 3 /* 4190 */
524 sys sys_getresgid 3
525 sys sys_prctl 5
526 sys sys_rt_sigreturn 0
527 sys sys_rt_sigaction 4
528 sys sys_rt_sigprocmask 4 /* 4195 */
529 sys sys_rt_sigpending 2
530 sys sys_rt_sigtimedwait 4
531 sys sys_rt_sigqueueinfo 3
532 sys sys_rt_sigsuspend 0
533 sys sys_pread64 6 /* 4200 */
534 sys sys_pwrite64 6
535 sys sys_chown 3
536 sys sys_getcwd 2
537 sys sys_capget 2
538 sys sys_capset 2 /* 4205 */
539 sys sys_sigaltstack 0
540 sys sys_sendfile 4
541 sys sys_ni_syscall 0
542 sys sys_ni_syscall 0
543 sys sys_mmap2 6 /* 4210 */
544 sys sys_truncate64 4
545 sys sys_ftruncate64 4
546 sys sys_stat64 2
547 sys sys_lstat64 2
548 sys sys_fstat64 2 /* 4215 */
549 sys sys_pivot_root 2
550 sys sys_mincore 3
551 sys sys_madvise 3
552 sys sys_getdents64 3
553 sys sys_fcntl64 3 /* 4220 */
554 sys sys_ni_syscall 0
555 sys sys_gettid 0
556 sys sys_readahead 5
557 sys sys_setxattr 5
558 sys sys_lsetxattr 5 /* 4225 */
559 sys sys_fsetxattr 5
560 sys sys_getxattr 4
561 sys sys_lgetxattr 4
562 sys sys_fgetxattr 4
563 sys sys_listxattr 3 /* 4230 */
564 sys sys_llistxattr 3
565 sys sys_flistxattr 3
566 sys sys_removexattr 2
567 sys sys_lremovexattr 2
568 sys sys_fremovexattr 2 /* 4235 */
569 sys sys_tkill 2
570 sys sys_sendfile64 5
90a67b59 571 sys sys_futex 6
f088fc84
RB
572#ifdef CONFIG_MIPS_MT_FPAFF
573 /*
574 * For FPU affinity scheduling on MIPS MT processors, we need to
575 * intercept sys_sched_xxxaffinity() calls until we get a proper hook
576 * in kernel/sched.c. Considered only temporary we only support these
577 * hooks for the 32-bit kernel - there is no MIPS64 MT processor atm.
578 */
579 sys mipsmt_sys_sched_setaffinity 3
580 sys mipsmt_sys_sched_getaffinity 3
581#else
1da177e4
LT
582 sys sys_sched_setaffinity 3
583 sys sys_sched_getaffinity 3 /* 4240 */
f088fc84 584#endif /* CONFIG_MIPS_MT_FPAFF */
1da177e4
LT
585 sys sys_io_setup 2
586 sys sys_io_destroy 1
587 sys sys_io_getevents 5
588 sys sys_io_submit 3
589 sys sys_io_cancel 3 /* 4245 */
590 sys sys_exit_group 1
0d507d61 591 sys sys_lookup_dcookie 4
1da177e4
LT
592 sys sys_epoll_create 1
593 sys sys_epoll_ctl 4
594 sys sys_epoll_wait 3 /* 4250 */
595 sys sys_remap_file_pages 5
596 sys sys_set_tid_address 1
597 sys sys_restart_syscall 0
598 sys sys_fadvise64_64 7
599 sys sys_statfs64 3 /* 4255 */
600 sys sys_fstatfs64 2
601 sys sys_timer_create 3
602 sys sys_timer_settime 4
603 sys sys_timer_gettime 2
604 sys sys_timer_getoverrun 1 /* 4260 */
605 sys sys_timer_delete 1
606 sys sys_clock_settime 2
607 sys sys_clock_gettime 2
608 sys sys_clock_getres 2
609 sys sys_clock_nanosleep 4 /* 4265 */
610 sys sys_tgkill 3
611 sys sys_utimes 2
612 sys sys_mbind 4
613 sys sys_ni_syscall 0 /* sys_get_mempolicy */
614 sys sys_ni_syscall 0 /* 4270 sys_set_mempolicy */
615 sys sys_mq_open 4
616 sys sys_mq_unlink 1
617 sys sys_mq_timedsend 5
618 sys sys_mq_timedreceive 5
619 sys sys_mq_notify 2 /* 4275 */
620 sys sys_mq_getsetattr 3
621 sys sys_ni_syscall 0 /* sys_vserver */
a19050f3 622 sys sys_waitid 5
1da177e4 623 sys sys_ni_syscall 0 /* available, was setaltroot */
e50c0a8f 624 sys sys_add_key 5 /* 4280 */
1da177e4
LT
625 sys sys_request_key 4
626 sys sys_keyctl 5
3c37026d 627 sys sys_set_thread_area 1
7db36c85
RB
628 sys sys_inotify_init 0
629 sys sys_inotify_add_watch 3 /* 4285 */
630 sys sys_inotify_rm_watch 2
72bf8914
RB
631 sys sys_migrate_pages 4
632 sys sys_openat 4
633 sys sys_mkdirat 3
634 sys sys_mknodat 4 /* 4290 */
635 sys sys_fchownat 5
636 sys sys_futimesat 3
326a6257 637 sys sys_fstatat64 4
72bf8914
RB
638 sys sys_unlinkat 3
639 sys sys_renameat 4 /* 4295 */
c04030e1 640 sys sys_linkat 5
72bf8914
RB
641 sys sys_symlinkat 3
642 sys sys_readlinkat 4
643 sys sys_fchmodat 3
644 sys sys_faccessat 3 /* 4300 */
645 sys sys_pselect6 6
646 sys sys_ppoll 5
647 sys sys_unshare 1
f115da9c 648 sys sys_splice 4
a8d587a7 649 sys sys_sync_file_range 7 /* 4305 */
1da177e4
LT
650 .endm
651
652 /* We pre-compute the number of _instruction_ bytes needed to
653 load or store the arguments 6-8. Negative values are ignored. */
654
655 .macro sys function, nargs
656 PTR \function
657 LONG (\nargs << 2) - (5 << 2)
658 .endm
659
660 .align 3
661 .type sys_call_table,@object
662EXPORT(sys_call_table)
663 syscalltable
664 .size sys_call_table, . - sys_call_table