diff options
Diffstat (limited to 'arch/sh/kernel/entry.S')
-rw-r--r-- | arch/sh/kernel/entry.S | 333 |
1 files changed, 10 insertions, 323 deletions
diff --git a/arch/sh/kernel/entry.S b/arch/sh/kernel/entry.S index 7dfd2ba75f7..fe8221855b2 100644 --- a/arch/sh/kernel/entry.S +++ b/arch/sh/kernel/entry.S | |||
@@ -18,24 +18,6 @@ | |||
18 | #include <asm/cpu/mmu_context.h> | 18 | #include <asm/cpu/mmu_context.h> |
19 | #include <asm/unistd.h> | 19 | #include <asm/unistd.h> |
20 | 20 | ||
21 | #if !defined(CONFIG_NFSD) && !defined(CONFIG_NFSD_MODULE) | ||
22 | #define sys_nfsservctl sys_ni_syscall | ||
23 | #endif | ||
24 | |||
25 | #if !defined(CONFIG_MMU) | ||
26 | #define sys_madvise sys_ni_syscall | ||
27 | #define sys_readahead sys_ni_syscall | ||
28 | #define sys_mprotect sys_ni_syscall | ||
29 | #define sys_msync sys_ni_syscall | ||
30 | #define sys_mlock sys_ni_syscall | ||
31 | #define sys_munlock sys_ni_syscall | ||
32 | #define sys_mlockall sys_ni_syscall | ||
33 | #define sys_munlockall sys_ni_syscall | ||
34 | #define sys_mremap sys_ni_syscall | ||
35 | #define sys_mincore sys_ni_syscall | ||
36 | #define sys_remap_file_pages sys_ni_syscall | ||
37 | #endif | ||
38 | |||
39 | ! NOTE: | 21 | ! NOTE: |
40 | ! GNU as (as of 2.9.1) changes bf/s into bt/s and bra, when the address | 22 | ! GNU as (as of 2.9.1) changes bf/s into bt/s and bra, when the address |
41 | ! to be jumped is too far, but it causes illegal slot exception. | 23 | ! to be jumped is too far, but it causes illegal slot exception. |
@@ -326,7 +308,7 @@ ENTRY(exception_error) | |||
326 | .align 2 | 308 | .align 2 |
327 | ret_from_exception: | 309 | ret_from_exception: |
328 | preempt_stop() | 310 | preempt_stop() |
329 | ret_from_irq: | 311 | ENTRY(ret_from_irq) |
330 | ! | 312 | ! |
331 | mov #OFF_SR, r0 | 313 | mov #OFF_SR, r0 |
332 | mov.l @(r0,r15), r0 ! get status register | 314 | mov.l @(r0,r15), r0 ! get status register |
@@ -389,11 +371,12 @@ work_pending: | |||
389 | ! r8: current_thread_info | 371 | ! r8: current_thread_info |
390 | ! t: result of "tst #_TIF_NEED_RESCHED, r0" | 372 | ! t: result of "tst #_TIF_NEED_RESCHED, r0" |
391 | bf/s work_resched | 373 | bf/s work_resched |
392 | tst #_TIF_SIGPENDING, r0 | 374 | tst #(_TIF_SIGPENDING | _TIF_RESTORE_SIGMASK), r0 |
393 | work_notifysig: | 375 | work_notifysig: |
394 | bt/s restore_all | 376 | bt/s restore_all |
395 | mov r15, r4 | 377 | mov r15, r4 |
396 | mov #0, r5 | 378 | mov r12, r5 ! set arg1(save_r0) |
379 | mov r0, r6 | ||
397 | mov.l 2f, r1 | 380 | mov.l 2f, r1 |
398 | mova restore_all, r0 | 381 | mova restore_all, r0 |
399 | jmp @r1 | 382 | jmp @r1 |
@@ -431,7 +414,7 @@ work_resched: | |||
431 | 414 | ||
432 | .align 2 | 415 | .align 2 |
433 | 1: .long schedule | 416 | 1: .long schedule |
434 | 2: .long do_signal | 417 | 2: .long do_notify_resume |
435 | 418 | ||
436 | .align 2 | 419 | .align 2 |
437 | syscall_exit_work: | 420 | syscall_exit_work: |
@@ -552,6 +535,7 @@ syscall_call: | |||
552 | mov.l @r9, r8 | 535 | mov.l @r9, r8 |
553 | jsr @r8 ! jump to specific syscall handler | 536 | jsr @r8 ! jump to specific syscall handler |
554 | nop | 537 | nop |
538 | mov.l @(OFF_R0,r15), r12 ! save r0 | ||
555 | mov.l r0, @(OFF_R0,r15) ! save the return value | 539 | mov.l r0, @(OFF_R0,r15) ! save the return value |
556 | ! | 540 | ! |
557 | syscall_exit: | 541 | syscall_exit: |
@@ -644,7 +628,7 @@ skip_restore: | |||
644 | ! | 628 | ! |
645 | #if defined(CONFIG_KGDB_NMI) | 629 | #if defined(CONFIG_KGDB_NMI) |
646 | ! Clear in_nmi | 630 | ! Clear in_nmi |
647 | mov.l 4f, k0 | 631 | mov.l 6f, k0 |
648 | mov #0, k1 | 632 | mov #0, k1 |
649 | mov.b k1, @k0 | 633 | mov.b k1, @k0 |
650 | #endif | 634 | #endif |
@@ -722,7 +706,7 @@ interrupt: | |||
722 | ! | 706 | ! |
723 | ! | 707 | ! |
724 | .align 2 | 708 | .align 2 |
725 | handle_exception: | 709 | ENTRY(handle_exception) |
726 | ! Using k0, k1 for scratch registers (r0_bank1, r1_bank), | 710 | ! Using k0, k1 for scratch registers (r0_bank1, r1_bank), |
727 | ! save all registers onto stack. | 711 | ! save all registers onto stack. |
728 | ! | 712 | ! |
@@ -732,8 +716,8 @@ handle_exception: | |||
732 | bt/s 1f ! It's a kernel to kernel transition. | 716 | bt/s 1f ! It's a kernel to kernel transition. |
733 | mov r15, k0 ! save original stack to k0 | 717 | mov r15, k0 ! save original stack to k0 |
734 | /* User space to kernel */ | 718 | /* User space to kernel */ |
735 | mov #0x20, k1 | 719 | mov #(THREAD_SIZE >> 8), k1 |
736 | shll8 k1 ! k1 := 8192 (== THREAD_SIZE) | 720 | shll8 k1 ! k1 := THREAD_SIZE |
737 | add current, k1 | 721 | add current, k1 |
738 | mov k1, r15 ! change to kernel stack | 722 | mov k1, r15 ! change to kernel stack |
739 | ! | 723 | ! |
@@ -838,300 +822,3 @@ ENTRY(exception_none) | |||
838 | rts | 822 | rts |
839 | nop | 823 | nop |
840 | 824 | ||
841 | .data | ||
842 | ENTRY(sys_call_table) | ||
843 | .long sys_ni_syscall /* 0 - old "setup()" system call*/ | ||
844 | .long sys_exit | ||
845 | .long sys_fork | ||
846 | .long sys_read | ||
847 | .long sys_write | ||
848 | .long sys_open /* 5 */ | ||
849 | .long sys_close | ||
850 | .long sys_waitpid | ||
851 | .long sys_creat | ||
852 | .long sys_link | ||
853 | .long sys_unlink /* 10 */ | ||
854 | .long sys_execve | ||
855 | .long sys_chdir | ||
856 | .long sys_time | ||
857 | .long sys_mknod | ||
858 | .long sys_chmod /* 15 */ | ||
859 | .long sys_lchown16 | ||
860 | .long sys_ni_syscall /* old break syscall holder */ | ||
861 | .long sys_stat | ||
862 | .long sys_lseek | ||
863 | .long sys_getpid /* 20 */ | ||
864 | .long sys_mount | ||
865 | .long sys_oldumount | ||
866 | .long sys_setuid16 | ||
867 | .long sys_getuid16 | ||
868 | .long sys_stime /* 25 */ | ||
869 | .long sys_ptrace | ||
870 | .long sys_alarm | ||
871 | .long sys_fstat | ||
872 | .long sys_pause | ||
873 | .long sys_utime /* 30 */ | ||
874 | .long sys_ni_syscall /* old stty syscall holder */ | ||
875 | .long sys_ni_syscall /* old gtty syscall holder */ | ||
876 | .long sys_access | ||
877 | .long sys_nice | ||
878 | .long sys_ni_syscall /* 35 */ /* old ftime syscall holder */ | ||
879 | .long sys_sync | ||
880 | .long sys_kill | ||
881 | .long sys_rename | ||
882 | .long sys_mkdir | ||
883 | .long sys_rmdir /* 40 */ | ||
884 | .long sys_dup | ||
885 | .long sys_pipe | ||
886 | .long sys_times | ||
887 | .long sys_ni_syscall /* old prof syscall holder */ | ||
888 | .long sys_brk /* 45 */ | ||
889 | .long sys_setgid16 | ||
890 | .long sys_getgid16 | ||
891 | .long sys_signal | ||
892 | .long sys_geteuid16 | ||
893 | .long sys_getegid16 /* 50 */ | ||
894 | .long sys_acct | ||
895 | .long sys_umount /* recycled never used phys() */ | ||
896 | .long sys_ni_syscall /* old lock syscall holder */ | ||
897 | .long sys_ioctl | ||
898 | .long sys_fcntl /* 55 */ | ||
899 | .long sys_ni_syscall /* old mpx syscall holder */ | ||
900 | .long sys_setpgid | ||
901 | .long sys_ni_syscall /* old ulimit syscall holder */ | ||
902 | .long sys_ni_syscall /* sys_olduname */ | ||
903 | .long sys_umask /* 60 */ | ||
904 | .long sys_chroot | ||
905 | .long sys_ustat | ||
906 | .long sys_dup2 | ||
907 | .long sys_getppid | ||
908 | .long sys_getpgrp /* 65 */ | ||
909 | .long sys_setsid | ||
910 | .long sys_sigaction | ||
911 | .long sys_sgetmask | ||
912 | .long sys_ssetmask | ||
913 | .long sys_setreuid16 /* 70 */ | ||
914 | .long sys_setregid16 | ||
915 | .long sys_sigsuspend | ||
916 | .long sys_sigpending | ||
917 | .long sys_sethostname | ||
918 | .long sys_setrlimit /* 75 */ | ||
919 | .long sys_old_getrlimit | ||
920 | .long sys_getrusage | ||
921 | .long sys_gettimeofday | ||
922 | .long sys_settimeofday | ||
923 | .long sys_getgroups16 /* 80 */ | ||
924 | .long sys_setgroups16 | ||
925 | .long sys_ni_syscall /* sys_oldselect */ | ||
926 | .long sys_symlink | ||
927 | .long sys_lstat | ||
928 | .long sys_readlink /* 85 */ | ||
929 | .long sys_uselib | ||
930 | .long sys_swapon | ||
931 | .long sys_reboot | ||
932 | .long old_readdir | ||
933 | .long old_mmap /* 90 */ | ||
934 | .long sys_munmap | ||
935 | .long sys_truncate | ||
936 | .long sys_ftruncate | ||
937 | .long sys_fchmod | ||
938 | .long sys_fchown16 /* 95 */ | ||
939 | .long sys_getpriority | ||
940 | .long sys_setpriority | ||
941 | .long sys_ni_syscall /* old profil syscall holder */ | ||
942 | .long sys_statfs | ||
943 | .long sys_fstatfs /* 100 */ | ||
944 | .long sys_ni_syscall /* ioperm */ | ||
945 | .long sys_socketcall | ||
946 | .long sys_syslog | ||
947 | .long sys_setitimer | ||
948 | .long sys_getitimer /* 105 */ | ||
949 | .long sys_newstat | ||
950 | .long sys_newlstat | ||
951 | .long sys_newfstat | ||
952 | .long sys_uname | ||
953 | .long sys_ni_syscall /* 110 */ /* iopl */ | ||
954 | .long sys_vhangup | ||
955 | .long sys_ni_syscall /* idle */ | ||
956 | .long sys_ni_syscall /* vm86old */ | ||
957 | .long sys_wait4 | ||
958 | .long sys_swapoff /* 115 */ | ||
959 | .long sys_sysinfo | ||
960 | .long sys_ipc | ||
961 | .long sys_fsync | ||
962 | .long sys_sigreturn | ||
963 | .long sys_clone /* 120 */ | ||
964 | .long sys_setdomainname | ||
965 | .long sys_newuname | ||
966 | .long sys_ni_syscall /* sys_modify_ldt */ | ||
967 | .long sys_adjtimex | ||
968 | .long sys_mprotect /* 125 */ | ||
969 | .long sys_sigprocmask | ||
970 | .long sys_ni_syscall /* old "create_module" */ | ||
971 | .long sys_init_module | ||
972 | .long sys_delete_module | ||
973 | .long sys_ni_syscall /* 130: old "get_kernel_syms" */ | ||
974 | .long sys_quotactl | ||
975 | .long sys_getpgid | ||
976 | .long sys_fchdir | ||
977 | .long sys_bdflush | ||
978 | .long sys_sysfs /* 135 */ | ||
979 | .long sys_personality | ||
980 | .long sys_ni_syscall /* for afs_syscall */ | ||
981 | .long sys_setfsuid16 | ||
982 | .long sys_setfsgid16 | ||
983 | .long sys_llseek /* 140 */ | ||
984 | .long sys_getdents | ||
985 | .long sys_select | ||
986 | .long sys_flock | ||
987 | .long sys_msync | ||
988 | .long sys_readv /* 145 */ | ||
989 | .long sys_writev | ||
990 | .long sys_getsid | ||
991 | .long sys_fdatasync | ||
992 | .long sys_sysctl | ||
993 | .long sys_mlock /* 150 */ | ||
994 | .long sys_munlock | ||
995 | .long sys_mlockall | ||
996 | .long sys_munlockall | ||
997 | .long sys_sched_setparam | ||
998 | .long sys_sched_getparam /* 155 */ | ||
999 | .long sys_sched_setscheduler | ||
1000 | .long sys_sched_getscheduler | ||
1001 | .long sys_sched_yield | ||
1002 | .long sys_sched_get_priority_max | ||
1003 | .long sys_sched_get_priority_min /* 160 */ | ||
1004 | .long sys_sched_rr_get_interval | ||
1005 | .long sys_nanosleep | ||
1006 | .long sys_mremap | ||
1007 | .long sys_setresuid16 | ||
1008 | .long sys_getresuid16 /* 165 */ | ||
1009 | .long sys_ni_syscall /* vm86 */ | ||
1010 | .long sys_ni_syscall /* old "query_module" */ | ||
1011 | .long sys_poll | ||
1012 | .long sys_nfsservctl | ||
1013 | .long sys_setresgid16 /* 170 */ | ||
1014 | .long sys_getresgid16 | ||
1015 | .long sys_prctl | ||
1016 | .long sys_rt_sigreturn | ||
1017 | .long sys_rt_sigaction | ||
1018 | .long sys_rt_sigprocmask /* 175 */ | ||
1019 | .long sys_rt_sigpending | ||
1020 | .long sys_rt_sigtimedwait | ||
1021 | .long sys_rt_sigqueueinfo | ||
1022 | .long sys_rt_sigsuspend | ||
1023 | .long sys_pread_wrapper /* 180 */ | ||
1024 | .long sys_pwrite_wrapper | ||
1025 | .long sys_chown16 | ||
1026 | .long sys_getcwd | ||
1027 | .long sys_capget | ||
1028 | .long sys_capset /* 185 */ | ||
1029 | .long sys_sigaltstack | ||
1030 | .long sys_sendfile | ||
1031 | .long sys_ni_syscall /* streams1 */ | ||
1032 | .long sys_ni_syscall /* streams2 */ | ||
1033 | .long sys_vfork /* 190 */ | ||
1034 | .long sys_getrlimit | ||
1035 | .long sys_mmap2 | ||
1036 | .long sys_truncate64 | ||
1037 | .long sys_ftruncate64 | ||
1038 | .long sys_stat64 /* 195 */ | ||
1039 | .long sys_lstat64 | ||
1040 | .long sys_fstat64 | ||
1041 | .long sys_lchown | ||
1042 | .long sys_getuid | ||
1043 | .long sys_getgid /* 200 */ | ||
1044 | .long sys_geteuid | ||
1045 | .long sys_getegid | ||
1046 | .long sys_setreuid | ||
1047 | .long sys_setregid | ||
1048 | .long sys_getgroups /* 205 */ | ||
1049 | .long sys_setgroups | ||
1050 | .long sys_fchown | ||
1051 | .long sys_setresuid | ||
1052 | .long sys_getresuid | ||
1053 | .long sys_setresgid /* 210 */ | ||
1054 | .long sys_getresgid | ||
1055 | .long sys_chown | ||
1056 | .long sys_setuid | ||
1057 | .long sys_setgid | ||
1058 | .long sys_setfsuid /* 215 */ | ||
1059 | .long sys_setfsgid | ||
1060 | .long sys_pivot_root | ||
1061 | .long sys_mincore | ||
1062 | .long sys_madvise | ||
1063 | .long sys_getdents64 /* 220 */ | ||
1064 | .long sys_fcntl64 | ||
1065 | .long sys_ni_syscall /* reserved for TUX */ | ||
1066 | .long sys_ni_syscall /* Reserved for Security */ | ||
1067 | .long sys_gettid | ||
1068 | .long sys_readahead /* 225 */ | ||
1069 | .long sys_setxattr | ||
1070 | .long sys_lsetxattr | ||
1071 | .long sys_fsetxattr | ||
1072 | .long sys_getxattr | ||
1073 | .long sys_lgetxattr /* 230 */ | ||
1074 | .long sys_fgetxattr | ||
1075 | .long sys_listxattr | ||
1076 | .long sys_llistxattr | ||
1077 | .long sys_flistxattr | ||
1078 | .long sys_removexattr /* 235 */ | ||
1079 | .long sys_lremovexattr | ||
1080 | .long sys_fremovexattr | ||
1081 | .long sys_tkill | ||
1082 | .long sys_sendfile64 | ||
1083 | .long sys_futex /* 240 */ | ||
1084 | .long sys_sched_setaffinity | ||
1085 | .long sys_sched_getaffinity | ||
1086 | .long sys_ni_syscall | ||
1087 | .long sys_ni_syscall | ||
1088 | .long sys_io_setup /* 245 */ | ||
1089 | .long sys_io_destroy | ||
1090 | .long sys_io_getevents | ||
1091 | .long sys_io_submit | ||
1092 | .long sys_io_cancel | ||
1093 | .long sys_fadvise64 /* 250 */ | ||
1094 | .long sys_ni_syscall | ||
1095 | .long sys_exit_group | ||
1096 | .long sys_lookup_dcookie | ||
1097 | .long sys_epoll_create | ||
1098 | .long sys_epoll_ctl /* 255 */ | ||
1099 | .long sys_epoll_wait | ||
1100 | .long sys_remap_file_pages | ||
1101 | .long sys_set_tid_address | ||
1102 | .long sys_timer_create | ||
1103 | .long sys_timer_settime /* 260 */ | ||
1104 | .long sys_timer_gettime | ||
1105 | .long sys_timer_getoverrun | ||
1106 | .long sys_timer_delete | ||
1107 | .long sys_clock_settime | ||
1108 | .long sys_clock_gettime /* 265 */ | ||
1109 | .long sys_clock_getres | ||
1110 | .long sys_clock_nanosleep | ||
1111 | .long sys_statfs64 | ||
1112 | .long sys_fstatfs64 | ||
1113 | .long sys_tgkill /* 270 */ | ||
1114 | .long sys_utimes | ||
1115 | .long sys_fadvise64_64_wrapper | ||
1116 | .long sys_ni_syscall /* Reserved for vserver */ | ||
1117 | .long sys_ni_syscall /* Reserved for mbind */ | ||
1118 | .long sys_ni_syscall /* 275 - get_mempolicy */ | ||
1119 | .long sys_ni_syscall /* set_mempolicy */ | ||
1120 | .long sys_mq_open | ||
1121 | .long sys_mq_unlink | ||
1122 | .long sys_mq_timedsend | ||
1123 | .long sys_mq_timedreceive /* 280 */ | ||
1124 | .long sys_mq_notify | ||
1125 | .long sys_mq_getsetattr | ||
1126 | .long sys_ni_syscall /* Reserved for kexec */ | ||
1127 | .long sys_waitid | ||
1128 | .long sys_add_key /* 285 */ | ||
1129 | .long sys_request_key | ||
1130 | .long sys_keyctl | ||
1131 | .long sys_ioprio_set | ||
1132 | .long sys_ioprio_get | ||
1133 | .long sys_inotify_init /* 290 */ | ||
1134 | .long sys_inotify_add_watch | ||
1135 | .long sys_inotify_rm_watch | ||
1136 | |||
1137 | /* End of entry.S */ | ||