Use generic syscall header thus the port is no longer compatible to the old
libc. Additionally, remove the duplicated syscall table from entry.S. The
table is now generated from the (generic) unistd.h.

TODO: signals

Signed-off-by: Michael Walle <mich...@walle.cc>

Conflicts:

        arch/lm32/include/asm/stat.h
        arch/lm32/kernel/Makefile
        arch/lm32/kernel/entry.S
---
 arch/lm32/include/asm/stat.h      |   73 +-------
 arch/lm32/include/asm/syscalls.h  |    1 +
 arch/lm32/include/asm/ucontext.h  |    1 +
 arch/lm32/include/asm/unistd.h    |  422 +------------------------------------
 arch/lm32/kernel/Makefile         |    3 +-
 arch/lm32/kernel/entry.S          |  369 +-------------------------------
 arch/lm32/kernel/signal.c         |   30 ++-
 arch/lm32/kernel/sys_call_table.c |   12 +
 arch/lm32/kernel/sys_lm32.c       |  104 ++--------
 9 files changed, 70 insertions(+), 945 deletions(-)
 create mode 100644 arch/lm32/include/asm/syscalls.h
 create mode 100644 arch/lm32/include/asm/ucontext.h
 create mode 100644 arch/lm32/kernel/sys_call_table.c

diff --git a/arch/lm32/include/asm/stat.h b/arch/lm32/include/asm/stat.h
index 8aa73a9..3dc90fa 100644
--- a/arch/lm32/include/asm/stat.h
+++ b/arch/lm32/include/asm/stat.h
@@ -1,72 +1 @@
-/*
- * Based on:
- * include/asm-m68k/stat.h
- */
-
-#ifndef _LM32_ASM_STAT_H
-#define _LM32_ASM_STAT_H
-
-;
-
-/* TODO: Change ABI and use asm-generic */
-
-struct stat {
-       unsigned short st_dev;
-       unsigned short __pad1;
-       unsigned long  st_ino;
-       unsigned short st_mode;
-       unsigned short st_nlink;
-       unsigned short st_uid;
-       unsigned short st_gid;
-       unsigned short st_rdev;
-       unsigned short __pad2;
-       unsigned long  st_size;
-       unsigned long  st_blksize;
-       unsigned long  st_blocks;
-       unsigned long  st_atime;
-       unsigned long  __unused1;
-       unsigned long  st_mtime;
-       unsigned long  __unused2;
-       unsigned long  st_ctime;
-       unsigned long  __unused3;
-       unsigned long  __unused4;
-       unsigned long  __unused5;
-};
-
-/* This matches struct stat64 in glibc2.1, hence the absolutely
- * insane amounts of padding around dev_t's.
- */
-struct stat64 {
-       unsigned long long      st_dev;
-       unsigned char   __pad1[4];
-
-#define STAT64_HAS_BROKEN_ST_INO       1
-       unsigned long   __st_ino;
-
-       unsigned int    st_mode;
-       unsigned int    st_nlink;
-
-       unsigned long   st_uid;
-       unsigned long   st_gid;
-
-       unsigned long long      st_rdev;
-       unsigned char   __pad3[4];
-
-       long long       st_size;
-       unsigned long   st_blksize;
-
-       unsigned long long      st_blocks;      /* Number 512-byte blocks 
allocated. */
-
-       unsigned long   st_atime;
-       unsigned long   st_atime_nsec;
-
-       unsigned long   st_mtime;
-       unsigned long   st_mtime_nsec;
-
-       unsigned long   st_ctime;
-       unsigned long   st_ctime_nsec;
-
-       unsigned long long      st_ino;
-};
-
-#endif /* _LM32_ASM_STAT_H */
+#include <asm-generic/stat.h>
diff --git a/arch/lm32/include/asm/syscalls.h b/arch/lm32/include/asm/syscalls.h
new file mode 100644
index 0000000..8f1cb00
--- /dev/null
+++ b/arch/lm32/include/asm/syscalls.h
@@ -0,0 +1 @@
+#include <asm-generic/syscalls.h>
diff --git a/arch/lm32/include/asm/ucontext.h b/arch/lm32/include/asm/ucontext.h
new file mode 100644
index 0000000..9bc07b9
--- /dev/null
+++ b/arch/lm32/include/asm/ucontext.h
@@ -0,0 +1 @@
+#include <asm-generic/ucontext.h>
diff --git a/arch/lm32/include/asm/unistd.h b/arch/lm32/include/asm/unistd.h
index 5fa6b12..bd51295 100644
--- a/arch/lm32/include/asm/unistd.h
+++ b/arch/lm32/include/asm/unistd.h
@@ -1,417 +1,11 @@
-/*
- * (C) Copyright 2007
- *     Theobroma Systems <www.theobroma-systems.com>
- *
- * See file CREDITS for list of people who contributed to this
- * project.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of
- * the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
- * MA 02111-1307 USA
- */
+#if !defined(_ASM_LM32_UNISTD_H) || defined(__SYSCALL)
+#define _ASM_LM32_UNISTD_H
 
-#ifndef __ASM_LM32_UNISTD_H
-#define __ASM_LM32_UNISTD_H
+#define __ARCH_WANT_SYSCALL_NO_AT
+#define __ARCH_WANT_SYSCALL_NO_FLAGS
+#define __ARCH_WANT_SYSCALL_OFF_T
+#define __ARCH_WANT_SYSCALL_DEPRECATED
 
-#define __NR_SYSCALL_BASE      0
+#include <asm-generic/unistd.h>
 
-/*
- * This file contains the system call numbers.
- */
-
-#define __NR_exit                1
-#define __NR_fork                2
-#define __NR_read                3
-#define __NR_write               4
-#define __NR_open                5
-#define __NR_close               6
-                               /* 7 __NR_waitpid obsolete */
-#define __NR_creat               8
-#define __NR_link                9
-#define __NR_unlink             10
-#define __NR_execve             11
-#define __NR_chdir              12
-#define __NR_time               13
-#define __NR_mknod              14
-#define __NR_chmod              15
-#define __NR_chown              16
-                               /* 17 __NR_break obsolete */
-                               /* 18 __NR_oldstat obsolete */
-#define __NR_lseek              19
-#define __NR_getpid             20
-#define __NR_mount              21
-                               /* 22 __NR_umount obsolete */
-#define __NR_setuid             23
-#define __NR_getuid             24
-#define __NR_stime              25
-#define __NR_ptrace             26
-#define __NR_alarm              27
-                               /* 28 __NR_oldfstat obsolete */
-#define __NR_pause              29
-                               /* 30 __NR_utime obsolete */
-                               /* 31 __NR_stty obsolete */
-                               /* 32 __NR_gtty obsolete */
-#define __NR_access             33
-#define __NR_nice               34
-                               /* 35 __NR_ftime obsolete */
-#define __NR_sync               36
-#define __NR_kill               37
-#define __NR_rename             38
-#define __NR_mkdir              39
-#define __NR_rmdir              40
-#define __NR_dup                41
-#define __NR_pipe               42
-#define __NR_times              43
-                               /* 44 __NR_prof obsolete */
-#define __NR_brk                45
-#define __NR_setgid             46
-#define __NR_getgid             47
-                               /* 48 __NR_signal obsolete */
-#define __NR_geteuid            49
-#define __NR_getegid            50
-#define __NR_acct               51
-#define __NR_umount2            52
-                               /* 53 __NR_lock obsolete */
-#define __NR_ioctl              54
-#define __NR_fcntl              55
-                               /* 56 __NR_mpx obsolete */
-#define __NR_setpgid            57
-                               /* 58 __NR_ulimit obsolete */
-                               /* 59 __NR_oldolduname obsolete */
-#define __NR_umask              60
-#define __NR_chroot             61
-#define __NR_ustat              62
-#define __NR_dup2               63
-#define __NR_getppid            64
-#define __NR_getpgrp            65
-#define __NR_setsid             66
-                               /* 67 __NR_sigaction obsolete */
-#define __NR_sgetmask           68
-#define __NR_ssetmask           69
-#define __NR_setreuid           70
-#define __NR_setregid           71
-                               /* 72 __NR_sigsuspend obsolete */
-                               /* 73 __NR_sigpending obsolete */
-#define __NR_sethostname        74
-#define __NR_setrlimit          75
-                               /* 76 __NR_old_getrlimit obsolete */
-#define __NR_getrusage          77
-#define __NR_gettimeofday       78
-#define __NR_settimeofday       79
-#define __NR_getgroups          80
-#define __NR_setgroups          81
-                               /* 82 __NR_select obsolete */
-#define __NR_symlink            83
-                               /* 84 __NR_oldlstat obsolete */
-#define __NR_readlink           85
-                               /* 86 __NR_uselib obsolete */
-#define __NR_swapon             87 /* obsolete but needed by generic allocator 
*/
-#define __NR_reboot             88
-                               /* 89 __NR_readdir obsolete */
-                               /* 90 __NR_mmap obsolete */
-#define __NR_munmap             91
-#define __NR_truncate           92
-#define __NR_ftruncate          93
-#define __NR_fchmod             94
-#define __NR_fchown             95
-#define __NR_getpriority        96
-#define __NR_setpriority        97
-                               /* 98 __NR_profil obsolete */
-#define __NR_statfs             99
-#define __NR_fstatfs           100
-                               /* 101 __NR_ioperm */
-                               /* 102 __NR_socketcall obsolete */
-#define __NR_syslog            103
-#define __NR_setitimer         104
-#define __NR_getitimer         105
-#define __NR_stat              106
-#define __NR_lstat             107
-#define __NR_fstat             108
-                               /* 109 __NR_olduname obsolete */
-                               /* 110 __NR_iopl obsolete */
-#define __NR_vhangup           111
-                               /* 112 __NR_idle obsolete */
-                               /* 113 __NR_vm86old */
-#define __NR_wait4             114
-                               /* 115 __NR_swapoff obsolete */
-#define __NR_sysinfo           116
-                               /* 117 __NR_ipc oboslete */
-#define __NR_fsync             118
-#define __NR_sigreturn 119 
-#define __NR_clone             120
-#define __NR_setdomainname     121
-#define __NR_uname             122
-                               /* 123 __NR_modify_ldt obsolete */
-#define __NR_adjtimex          124
-#define __NR_mprotect          125
-                               /* 126 __NR_sigprocmask obsolete */
-                               /* 127 __NR_create_module obsolete */
-#define __NR_init_module       128
-#define __NR_delete_module     129
-                               /* 130 __NR_get_kernel_syms obsolete */
-#define __NR_quotactl          131
-#define __NR_getpgid           132
-#define __NR_fchdir            133
-#define __NR_bdflush           134
-                               /* 135 was sysfs */
-#define __NR_personality       136
-                               /* 137 __NR_afs_syscall */
-#define __NR_setfsuid          138
-#define __NR_setfsgid          139
-#define __NR__llseek           140
-#define __NR_getdents          141
-#define __NR__newselect         142
-#define __NR_flock             143
-                               /* 144 __NR_msync obsolete */
-#define __NR_readv             145
-#define __NR_writev            146
-#define __NR_getsid            147
-#define __NR_fdatasync         148
-#define __NR__sysctl           149
-                               /* 150 __NR_mlock */
-                               /* 151 __NR_munlock */
-                               /* 152 __NR_mlockall */
-                               /* 153 __NR_munlockall */
-#define __NR_sched_setparam            154
-#define __NR_sched_getparam            155
-#define __NR_sched_setscheduler                156
-#define __NR_sched_getscheduler                157
-#define __NR_sched_yield               158
-#define __NR_sched_get_priority_max    159
-#define __NR_sched_get_priority_min    160
-#define __NR_sched_rr_get_interval     161
-#define __NR_nanosleep         162
-                               /* 163 __NR_mremap */
-#define __NR_setresuid         164
-#define __NR_getresuid         165
-                               /* 166 __NR_vm86 */
-                               /* 167 __NR_query_module */
-                               /* 168 __NR_poll */
-                               /* 169 __NR_nfsservctl */
-#define __NR_setresgid         170
-#define __NR_getresgid         171
-#define __NR_prctl             172
-#define __NR_rt_sigreturn      173
-#define __NR_rt_sigaction      174
-#define __NR_rt_sigprocmask    175
-#define __NR_rt_sigpending     176
-#define __NR_rt_sigtimedwait   177
-#define __NR_rt_sigqueueinfo   178
-#define __NR_rt_sigsuspend     179
-#define __NR_pread             180
-#define __NR_pwrite            181
-#define __NR_lchown            182
-#define __NR_getcwd            183
-#define __NR_capget            184
-#define __NR_capset            185
-#define __NR_sigaltstack       186
-#define __NR_sendfile          187
-                               /* 188 __NR_getpmsg */
-                               /* 189 __NR_putpmsg */
-#define __NR_vfork             190
-#define __NR_getrlimit         191
-#define __NR_mmap2             192
-#define __NR_truncate64                193
-#define __NR_ftruncate64       194
-#define __NR_stat64            195
-#define __NR_lstat64           196
-#define __NR_fstat64           197
-#define __NR_chown32           198
-#define __NR_getuid32          199
-#define __NR_getgid32          200
-#define __NR_geteuid32         201
-#define __NR_getegid32         202
-#define __NR_setreuid32                203
-#define __NR_setregid32                204
-#define __NR_getgroups32       205
-#define __NR_setgroups32       206
-#define __NR_fchown32          207
-#define __NR_setresuid32       208
-#define __NR_getresuid32       209
-#define __NR_setresgid32       210
-#define __NR_getresgid32       211
-#define __NR_lchown32          212
-#define __NR_setuid32          213
-#define __NR_setgid32          214
-#define __NR_setfsuid32                215
-#define __NR_setfsgid32                216
-#define __NR_pivot_root                217
-                               /* 218 __NR_mincore */
-                               /* 219 __NR_madvise */
-#define __NR_getdents64                220
-#define __NR_fcntl64           221
-                               /* 222 reserved for TUX */
-                               /* 223 reserved for TUX */
-#define __NR_gettid            224
-                               /* 225 __NR_readahead */
-#define __NR_setxattr          226
-#define __NR_lsetxattr         227
-#define __NR_fsetxattr         228
-#define __NR_getxattr          229
-#define __NR_lgetxattr         230
-#define __NR_fgetxattr         231
-#define __NR_listxattr         232
-#define __NR_llistxattr                233
-#define __NR_flistxattr                234
-#define __NR_removexattr       235
-#define __NR_lremovexattr      236
-#define __NR_fremovexattr      237
-#define __NR_tkill             238
-#define __NR_sendfile64                239
-#define __NR_futex             240
-#define __NR_sched_setaffinity 241
-#define __NR_sched_getaffinity 242
-                               /* 243 __NR_set_thread_area */
-                               /* 244 __NR_get_thread_area */
-#define __NR_io_setup          245
-#define __NR_io_destroy                246
-#define __NR_io_getevents      247
-#define __NR_io_submit         248
-#define __NR_io_cancel         249
-                               /* 250 __NR_alloc_hugepages */
-                               /* 251 __NR_free_hugepages */
-#define __NR_exit_group                252
-#define __NR_lookup_dcookie     253
-                               /* 254 spinlock (on bfin) */
-#define __NR_epoll_create      255
-#define __NR_epoll_ctl         256
-#define __NR_epoll_wait                257
-                               /* 258 __NR_remap_file_pages */
-#define __NR_set_tid_address   259
-#define __NR_timer_create      260
-#define __NR_timer_settime     (__NR_timer_create+1)
-#define __NR_timer_gettime     (__NR_timer_create+2)
-#define __NR_timer_getoverrun  (__NR_timer_create+3)
-#define __NR_timer_delete      (__NR_timer_create+4)
-#define __NR_clock_settime     (__NR_timer_create+5)
-#define __NR_clock_gettime     (__NR_timer_create+6)
-#define __NR_clock_getres      (__NR_timer_create+7)
-#define __NR_clock_nanosleep   (__NR_timer_create+8)
-#define __NR_statfs64          269
-#define __NR_fstatfs64         270
-#define __NR_tgkill            271
-#define __NR_utimes            272
-#define __NR_fadvise64_64      273
-                               /* 274 __NR_vserver */
-                               /* 275 __NR_mbind */
-                               /* 276 __NR_get_mempolicy */
-                               /* 277 __NR_set_mempolicy */
-#define __NR_mq_open           278
-#define __NR_mq_unlink         (__NR_mq_open+1)
-#define __NR_mq_timedsend      (__NR_mq_open+2)
-#define __NR_mq_timedreceive   (__NR_mq_open+3)
-#define __NR_mq_notify         (__NR_mq_open+4)
-#define __NR_mq_getsetattr     (__NR_mq_open+5)
-                               /* 284 __NR_sys_kexec_load */
-#define __NR_waitid            285
-#define __NR_add_key           286
-#define __NR_request_key       287
-#define __NR_keyctl            288
-#define __NR_ioprio_set                289
-#define __NR_ioprio_get                290
-#define __NR_inotify_init      291
-#define __NR_inotify_add_watch 292
-#define __NR_inotify_rm_watch  293
-                               /* 294 __NR_migrate_pages */
-#define __NR_openat            295
-#define __NR_mkdirat           296
-#define __NR_mknodat           297
-#define __NR_fchownat          298
-#define __NR_futimesat         299
-#define __NR_fstatat64         300
-#define __NR_unlinkat          301
-#define __NR_renameat          302
-#define __NR_linkat            303
-#define __NR_symlinkat         304
-#define __NR_readlinkat                305
-#define __NR_fchmodat          306
-#define __NR_faccessat         307
-#define __NR_pselect6          308
-#define __NR_ppoll             309
-#define __NR_unshare           310
-
-/* private syscalls (not implemented) */
-#define __NR_sram_alloc                311
-#define __NR_sram_free         312
-#define __NR_dma_memcpy                313
-
-/* socket syscalls */
-#define __NR_accept            314
-#define __NR_bind              315
-#define __NR_connect           316
-#define __NR_getpeername       317
-#define __NR_getsockname       318
-#define __NR_getsockopt                319
-#define __NR_listen            320
-#define __NR_recv              321
-#define __NR_recvfrom          322
-#define __NR_recvmsg           323
-#define __NR_send              324
-#define __NR_sendmsg           325
-#define __NR_sendto            326
-#define __NR_setsockopt                327
-#define __NR_shutdown          328
-#define __NR_socket            329
-#define __NR_socketpair                330
-
-#define __NR_splice    331
-#define __NR_sync_file_range2  332
-#define __NR_tee       333
-#define __NR_vmsplice  334
-#define __NR_getcpu    335
-
-/* sysv ipc syscalls */
-#define __NR_semctl            336
-#define __NR_semget            337
-#define __NR_semop             338
-#define __NR_msgctl            339
-#define __NR_msgget            340
-#define __NR_msgrcv            341
-#define __NR_msgsnd            342
-#define __NR_shmat             343
-#define __NR_shmctl            344
-#define __NR_shmdt             345
-#define __NR_shmget            346
-
-#define __NR_syscall           347
-#define NR_syscalls            __NR_syscall
-
-#ifdef __KERNEL__
-#define __ARCH_WANT_IPC_PARSE_VERSION
-#define __ARCH_WANT_STAT64
-#define __ARCH_WANT_SYS_ALARM
-#define __ARCH_WANT_SYS_GETHOSTNAME
-#define __ARCH_WANT_SYS_PAUSE
-#define __ARCH_WANT_SYS_SGETMASK
-#define __ARCH_WANT_SYS_TIME
-#define __ARCH_WANT_SYS_FADVISE64
-#define __ARCH_WANT_SYS_GETPGRP
-#define __ARCH_WANT_SYS_LLSEEK
-#define __ARCH_WANT_SYS_NICE
-#define __ARCH_WANT_SYS_SIGPENDING
-#define __ARCH_WANT_SYS_SIGPROCMASK
-#define __ARCH_WANT_SYS_RT_SIGACTION
-#define __ARCH_WANT_SYS_SIGNAL
-
-/*
- * "Conditional" syscalls
- *
- * What we want is __attribute__((weak,alias("sys_ni_syscall"))),
- * but it doesn't work on all toolchains, so we just do it by hand
- */
-#define cond_syscall(x) asm(".weak\t_" #x "\n\t.set\t_" #x ",_sys_ni_syscall");
-
-#endif /* __KERNEL__ */
-
-#endif
+#endif /* _ASM_LM32_UNISTD_H */
diff --git a/arch/lm32/kernel/Makefile b/arch/lm32/kernel/Makefile
index 2ace8b0..457db15 100644
--- a/arch/lm32/kernel/Makefile
+++ b/arch/lm32/kernel/Makefile
@@ -3,11 +3,10 @@
 #
 
 extra-y := head.o init_task.o vmlinux.lds
-
 obj-y := \
        sys_lm32.o setup.o traps.o signal.o time.o \
        ptrace.o irq.o process.o entry.o dma.o gpio.o \
-       flat.o
+       flat.o sys_call_table.o
 
 obj-$(CONFIG_EARLY_PRINTK)  += early_printk.o 
 obj-$(CONFIG_MODULES)       += module.o
diff --git a/arch/lm32/kernel/entry.S b/arch/lm32/kernel/entry.S
index f957def..3bd1b56 100644
--- a/arch/lm32/kernel/entry.S
+++ b/arch/lm32/kernel/entry.S
@@ -139,6 +139,7 @@ ENTRY(system_call)
 
        /* r7 always holds the pointer to struct pt_regs */
        addi  r7, sp, 4
+       #addi  r4, sp, 4
 
 #ifdef LM32_DEBUG_SYSCALL_CALL
        /* call debug */
@@ -160,10 +161,10 @@ ENTRY(system_call)
 
        /* r8 always holds the syscall number */
        /* check if syscall number is valid */
-       mvi r9, __NR_syscall
+       mvi r9, __NR_syscalls
        bgeu r8, r9, .badsyscall
-       mvhi r9, hi(_sys_call_table) /* load address of syscall table */
-       ori r9, r9, lo(_sys_call_table)
+       mvhi r9, hi(sys_call_table) /* load address of syscall table */
+       ori r9, r9, lo(sys_call_table)
        sli r10, r8, 2 /* TODO: only works with shifter enabled */
        add r9, r9, r10 /* add offset of syscall no to address */
        lw r9, (r9+0) /* fetch address of syscall function */
@@ -179,7 +180,6 @@ ENTRY(system_call)
        /* debug syscall return value */
        lw r2,  (sp+36) /* get saved syscall no from sp+36 for debug */
        addi  r3, sp, 4
-       calli lm32_debug_syscall_ret /* debug */
 #endif
 
        bi      _restore_and_return_exception
@@ -189,7 +189,6 @@ ENTRY(system_call)
        mvi r1, -ENOSYS
        mv r2, r8
        addi  r3, sp, 4
-       calli lm32_debug_syscall_ret
 #endif
        mvi r1, -ENOSYS
 
@@ -292,17 +291,9 @@ ENTRY(sys_fork)
        mvi r0, -EINVAL
        ret
 
-ENTRY(sys_execve_wrapper)
-       /* save ra to stack */
-       addi sp,sp,-4
-       sw (sp+4), ra
-       /* store regs into 4th argument */
+ENTRY(sys_execve)
        mv r4, r7
-       calli sys_execve
-       /* load ra from stack */
-       lw ra, (sp+4)
-       addi sp,sp,4
-       ret
+       bi lm32_execve
 
 ENTRY(sys_rt_sigsuspend_wrapper)
        /* save ra to kernel stack */
@@ -316,7 +307,7 @@ ENTRY(sys_rt_sigsuspend_wrapper)
        addi sp,sp,4
        ret
 
-ENTRY(sys_vfork_wrapper)
+ENTRY(sys_vfork)
        /* save ra to kernel stack */
        addi sp,sp,-4
        sw (sp+4), ra
@@ -331,7 +322,7 @@ ENTRY(sys_vfork_wrapper)
        ret
 
 /* purpose of this wrapper: put struct pt_regs* into first argument */
-ENTRY(sys_sigreturn_wrapper)
+ENTRY(sys_sigreturn)
        /* save ra to stack */
        addi sp,sp,-4
        sw (sp+4), ra
@@ -343,7 +334,7 @@ ENTRY(sys_sigreturn_wrapper)
        addi sp,sp,4
        ret
 
-ENTRY(sys_clone_wrapper)
+ENTRY(sys_clone)
        /* save ra to stack */
        addi sp,sp,-4
        sw (sp+4), ra
@@ -670,345 +661,3 @@ ENTRY(resume)
        lw  sp,  (sp+116)
 
        ret
-
-.align 4
-ENTRY(_sys_call_table)
-       .long sys_ni_syscall    /* 0  -  old "setup()" system call*/
-       .long sys_exit
-       .long sys_fork
-       .long sys_read
-       .long sys_write
-       .long sys_open          /* 5 */
-       .long sys_close
-       .long sys_ni_syscall    /* old waitpid */
-       .long sys_creat
-       .long sys_link
-       .long sys_unlink        /* 10 */
-       .long sys_execve_wrapper
-       .long sys_chdir
-       .long sys_time
-       .long sys_mknod
-       .long sys_chmod         /* 15 */
-       .long sys_chown /* chown16 */
-       .long sys_ni_syscall    /* old break syscall holder */
-       .long sys_ni_syscall    /* old stat */
-       .long sys_lseek
-       .long sys_getpid        /* 20 */
-       .long sys_mount
-       .long sys_ni_syscall    /* old umount */
-       .long sys_setuid
-       .long sys_getuid
-       .long sys_stime         /* 25 */
-       .long sys_ptrace
-       .long sys_alarm
-       .long sys_ni_syscall    /* old fstat */
-       .long sys_pause
-       .long sys_ni_syscall    /* old utime */ /* 30 */
-       .long sys_ni_syscall    /* old stty syscall holder */
-       .long sys_ni_syscall    /* old gtty syscall holder */
-       .long sys_access
-       .long sys_nice
-       .long sys_ni_syscall    /* 35 */ /* old ftime syscall holder */
-       .long sys_sync
-       .long sys_kill
-       .long sys_rename
-       .long sys_mkdir
-       .long sys_rmdir         /* 40 */
-       .long sys_dup
-       .long sys_pipe
-       .long sys_times
-       .long sys_ni_syscall    /* old prof syscall holder */
-       .long sys_brk           /* 45 */
-       .long sys_setgid
-       .long sys_getgid
-       .long sys_signal
-       .long sys_geteuid       /* geteuid16 */
-       .long sys_getegid       /* getegid16 */ /* 50 */
-       .long sys_ni_syscall /* sys_acct */
-       .long sys_umount        /* recycled never used phys() */
-       .long sys_ni_syscall    /* old lock syscall holder */
-       .long sys_ioctl
-       .long sys_fcntl         /* 55 */
-       .long sys_ni_syscall    /* old mpx syscall holder */
-       .long sys_setpgid
-       .long sys_ni_syscall    /* old ulimit syscall holder */
-       .long sys_ni_syscall    /* old old uname */
-       .long sys_umask         /* 60 */
-       .long sys_chroot
-       .long sys_ustat
-       .long sys_dup2
-       .long sys_getppid
-       .long sys_getpgrp       /* 65 */
-       .long sys_setsid
-       .long sys_sigaction
-       .long sys_sgetmask
-       .long sys_ssetmask
-       .long sys_setreuid      /* setreuid16 */        /* 70 */
-       .long sys_setregid      /* setregid16 */
-       .long sys_ni_syscall /* old sys_sigsuspend */
-       .long sys_sigpending
-       .long sys_sethostname
-       .long sys_setrlimit     /* 75 */
-       .long sys_ni_syscall    /* old getrlimit */
-       .long sys_getrusage
-       .long sys_gettimeofday
-       .long sys_settimeofday
-       .long sys_getgroups     /* getgroups16 */       /* 80 */
-       .long sys_setgroups     /* setgroups16 */
-       .long sys_select        /* backwards compatibility */
-       .long sys_symlink
-       .long sys_ni_syscall    /* old lstat */
-       .long sys_readlink      /* 85 */
-       .long sys_uselib
-       .long sys_ni_syscall    /* sys_swapon */
-       .long sys_reboot
-       .long sys_ni_syscall    /* old_readdir */
-       .long sys_ni_syscall    /* sys_mmap */  /* 90 */
-       .long sys_munmap
-       .long sys_truncate
-       .long sys_ftruncate
-       .long sys_fchmod
-       .long sys_fchown        /* fchown16 */  /* 95 */
-       .long sys_getpriority
-       .long sys_setpriority
-       .long sys_ni_syscall    /* old profil syscall holder */
-       .long sys_statfs
-       .long sys_fstatfs       /* 100 */
-       .long sys_ni_syscall
-       .long sys_ni_syscall    /* old sys_socketcall */
-       .long sys_syslog
-       .long sys_setitimer
-       .long sys_getitimer     /* 105 */
-       .long sys_newstat
-       .long sys_newlstat
-       .long sys_newfstat
-       .long sys_ni_syscall    /* old uname */
-       .long sys_ni_syscall    /* iopl for i386 */ /* 110 */
-       .long sys_vhangup
-       .long sys_ni_syscall    /* obsolete idle() syscall */
-       .long sys_ni_syscall    /* vm86old for i386 */
-       .long sys_wait4
-       .long sys_ni_syscall    /* 115 */ /* sys_swapoff */
-       .long sys_sysinfo
-       .long sys_ni_syscall    /* old sys_ipc */
-       .long sys_fsync
-       .long sys_sigreturn_wrapper
-       .long sys_clone_wrapper         /* 120 */
-       .long sys_setdomainname
-       .long sys_newuname
-       .long sys_ni_syscall    /* old sys_modify_ldt */
-       .long sys_adjtimex
-       .long sys_ni_syscall    /* 125 */ /* sys_mprotect */
-       .long sys_ni_syscall    /* old sys_sigprocmask */
-       .long sys_ni_syscall    /* old "creat_module" */
-       .long sys_init_module
-       .long sys_delete_module
-       .long sys_ni_syscall    /* 130: old "get_kernel_syms" */
-       .long sys_ni_syscall /* sys_quotactl */
-       .long sys_getpgid
-       .long sys_fchdir
-       .long sys_bdflush
-       .long sys_ni_syscall    /* 135 */ /* sys_sysfs */
-       .long sys_personality
-       .long sys_ni_syscall    /* for afs_syscall */
-       .long sys_setfsuid      /* setfsuid16 */
-       .long sys_setfsgid      /* setfsgid16 */
-       .long sys_llseek        /* 140 */
-       .long sys_getdents
-       .long sys_select        /* backwards compatibility */
-       .long sys_flock
-       .long sys_ni_syscall    /* sys_msync */
-       .long sys_readv         /* 145 */
-       .long sys_writev
-       .long sys_getsid
-       .long sys_fdatasync
-       .long sys_sysctl
-       .long sys_ni_syscall    /* 150 */ /* sys_mlock */
-       .long sys_ni_syscall    /* sys_munlock */
-       .long sys_ni_syscall    /* sys_mlockall */
-       .long sys_ni_syscall    /* sys_munlockall */
-       .long sys_sched_setparam
-       .long sys_sched_getparam /* 155 */
-       .long sys_sched_setscheduler
-       .long sys_sched_getscheduler
-       .long sys_sched_yield
-       .long sys_sched_get_priority_max
-       .long sys_sched_get_priority_min  /* 160 */
-       .long sys_sched_rr_get_interval
-       .long sys_nanosleep
-       .long sys_ni_syscall    /* sys_mremap */
-       .long sys_setresuid     /* setresuid16 */
-       .long sys_getresuid     /* getresuid16 */       /* 165 */
-       .long sys_ni_syscall    /* for vm86 */
-       .long sys_ni_syscall    /* old "query_module" */
-       .long sys_poll          /* sys_poll */
-       .long sys_ni_syscall    /* sys_nfsservctl */
-       .long sys_setresgid     /* setresgid16 */       /* 170 */
-       .long sys_getresgid     /* getresgid16 */
-       .long sys_prctl
-       .long sys_ni_syscall /* sys_rt_sigreturn */
-       .long sys_rt_sigaction
-       .long sys_rt_sigprocmask /* 175 */
-       .long sys_rt_sigpending
-       .long sys_rt_sigtimedwait
-       .long sys_rt_sigqueueinfo
-       .long sys_rt_sigsuspend_wrapper
-       .long sys_pread64       /* 180 */
-       .long sys_pwrite64
-       .long sys_lchown        /* lchown16 */
-       .long sys_getcwd
-       .long sys_capget
-       .long sys_capset        /* 185 */
-       .long sys_sigaltstack
-       .long sys_sendfile
-       .long sys_ni_syscall    /* streams1 */
-       .long sys_ni_syscall    /* streams2 */
-       .long sys_vfork_wrapper         /* 190 */
-       .long sys_getrlimit
-  .long sys_mmap2
-       .long sys_truncate64
-       .long sys_ftruncate64
-       .long sys_stat64        /* 195 */
-       .long sys_lstat64
-       .long sys_fstat64
-       .long sys_chown
-       .long sys_getuid
-       .long sys_getgid        /* 200 */
-       .long sys_geteuid
-       .long sys_getegid
-       .long sys_setreuid
-       .long sys_setregid
-       .long sys_getgroups     /* 205 */
-       .long sys_setgroups
-       .long sys_fchown
-       .long sys_setresuid
-       .long sys_getresuid
-       .long sys_setresgid     /* 210 */
-       .long sys_getresgid
-       .long sys_lchown
-       .long sys_setuid
-       .long sys_setgid
-       .long sys_setfsuid      /* 215 */
-       .long sys_setfsgid
-       .long sys_pivot_root
-       .long sys_ni_syscall    /* sys_mincore */
-       .long sys_ni_syscall    /* sys_madvise */
-       .long sys_getdents64    /* 220 */
-       .long sys_fcntl64
-       .long sys_ni_syscall    /* reserved for TUX */
-       .long sys_ni_syscall
-       .long sys_gettid
-       .long sys_ni_syscall    /* 225 */ /* sys_readahead */
-       .long sys_setxattr
-       .long sys_lsetxattr
-       .long sys_fsetxattr
-       .long sys_getxattr
-       .long sys_lgetxattr     /* 230 */
-       .long sys_fgetxattr
-       .long sys_listxattr
-       .long sys_llistxattr
-       .long sys_flistxattr
-       .long sys_removexattr   /* 235 */
-       .long sys_lremovexattr
-       .long sys_fremovexattr
-       .long sys_tkill
-       .long sys_sendfile64
-       .long sys_futex         /* 240 */
-       .long sys_sched_setaffinity
-       .long sys_sched_getaffinity
-       .long sys_ni_syscall    /* sys_set_thread_area */
-       .long sys_ni_syscall    /* sys_get_thread_area */
-       .long sys_io_setup      /* 245 */
-       .long sys_io_destroy
-       .long sys_io_getevents
-       .long sys_io_submit
-       .long sys_io_cancel
-       .long sys_ni_syscall    /* 250 */ /* sys_alloc_hugepages */
-       .long sys_ni_syscall    /* sys_freec_hugepages */
-       .long sys_exit_group
-       .long sys_ni_syscall
-       .long sys_ni_syscall
-       .long sys_ni_syscall /* 255 */
-       .long sys_ni_syscall
-       .long sys_ni_syscall
-       .long sys_ni_syscall /* remap_file_pages */
-       .long sys_set_tid_address
-       .long sys_timer_create  /* 260 */
-       .long sys_timer_settime
-       .long sys_timer_gettime
-       .long sys_timer_getoverrun
-       .long sys_timer_delete
-       .long sys_clock_settime /* 265 */
-       .long sys_clock_gettime
-       .long sys_clock_getres
-       .long sys_clock_nanosleep
-       .long sys_statfs64
-       .long sys_fstatfs64     /* 270 */
-       .long sys_tgkill
-       .long sys_utimes
-       .long sys_fadvise64_64
-       .long sys_ni_syscall /* vserver */
-       .long sys_ni_syscall /* 275, mbind */
-       .long sys_ni_syscall /* get_mempolicy */
-       .long sys_ni_syscall /* set_mempolicy */
-       .long sys_ni_syscall /* mq */
-       .long sys_ni_syscall /* mq */
-       .long sys_ni_syscall /* 280 */ /* mq */
-       .long sys_ni_syscall /* mq */
-       .long sys_ni_syscall /* mq */
-       .long sys_ni_syscall /* mq */
-       .long sys_ni_syscall /* kexec_load */
-       .long sys_waitid        /* 285 */
-       .long sys_ni_syscall
-       .long sys_ni_syscall
-       .long sys_ni_syscall
-       .long sys_ioprio_set
-       .long sys_ioprio_get    /* 290 */
-       .long sys_ni_syscall /* inotify */
-       .long sys_ni_syscall /* inotify */
-       .long sys_ni_syscall /* inotify */
-       .long sys_ni_syscall /* migrate_pages */
-       .long sys_openat        /* 295 */
-       .long sys_mkdirat
-       .long sys_mknodat
-       .long sys_fchownat
-       .long sys_futimesat
-       .long sys_fstatat64     /* 300 */
-       .long sys_unlinkat
-       .long sys_renameat
-       .long sys_linkat
-       .long sys_symlinkat
-       .long sys_readlinkat    /* 305 */
-       .long sys_fchmodat
-       .long sys_faccessat
-       .long sys_ni_syscall /* sys_pselect6 */
-       .long sys_ppoll      /* sys_ppoll */
-       .long sys_unshare       /* 310 */
-       .long sys_ni_syscall
-       .long sys_ni_syscall
-       .long sys_ni_syscall
-       .long sys_accept
-       .long sys_bind          /* 315 */
-       .long sys_connect
-       .long sys_getpeername
-       .long sys_getsockname
-       .long sys_getsockopt
-       .long sys_listen        /* 320 */
-       .long sys_recv
-       .long sys_recvfrom
-       .long sys_recvmsg
-       .long sys_send
-       .long sys_sendmsg       /* 325 */
-       .long sys_sendto
-       .long sys_setsockopt
-       .long sys_shutdown
-       .long sys_socket
-       .long sys_socketpair    /* 330 */
-       .long sys_splice
-       .long sys_sync_file_range2
-       .long sys_tee
-       .long sys_vmsplice
-       .long sys_getcpu  /* 335 */
-       .rept NR_syscalls-(.-_sys_call_table)/4
-       .long sys_ni_syscall
-       .endr
diff --git a/arch/lm32/kernel/signal.c b/arch/lm32/kernel/signal.c
index fd81c5a..42c943b 100644
--- a/arch/lm32/kernel/signal.c
+++ b/arch/lm32/kernel/signal.c
@@ -51,6 +51,7 @@
 #include <linux/hardirq.h>
 
 #include <asm/uaccess.h>
+#include <asm/ucontext.h>
 #include <asm/pgtable.h>
 #include <asm/pgalloc.h>
 #include <asm/thread_info.h>
@@ -68,6 +69,7 @@ int do_signal(int retval, struct pt_regs *regs, int* handled);
  * Atomically swap in the new signal mask, and wait for a signal.
  */
 
+#ifdef MW_UNDEFINED
 asmlinkage int
 sys_rt_sigsuspend(sigset_t *unewset, size_t sigsetsize, struct pt_regs *regs)
 {
@@ -94,6 +96,7 @@ sys_rt_sigsuspend(sigset_t *unewset, size_t sigsetsize, 
struct pt_regs *regs)
                        return -EINTR;
        }
 }
+#endif
 
 asmlinkage int 
 sys_sigaction(int sig, const struct old_sigaction *act,
@@ -145,12 +148,18 @@ struct sigframe
        unsigned long tramp[2]; /* signal trampoline */
 };
 
-static int
-restore_sigcontext(struct pt_regs *regs, struct sigcontext *sc, int *rval_p)
+struct rt_sigframe {
+       struct siginfo info;
+       struct ucontext uc;
+       unsigned long tramp[2]; /* signal trampoline */
+};
+
+static int restore_sigcontext(struct pt_regs *regs,
+                               struct sigcontext __user *sc, int *rval_p)
 {
        unsigned int err = 0;
 
-#define COPY(x)                err |= __get_user(regs->x, &sc->regs.x)
+#define COPY(x)                {err |= __get_user(regs->x, &sc->regs.x); }
        COPY(r0);       COPY(r1);       COPY(r2);       COPY(r3);
        COPY(r4);       COPY(r5);       COPY(r6);       COPY(r7);
        COPY(r8);       COPY(r9);       COPY(r10);      COPY(r11);
@@ -166,9 +175,11 @@ restore_sigcontext(struct pt_regs *regs, struct sigcontext 
*sc, int *rval_p)
        return err;
 }
 
-asmlinkage int sys_sigreturn(struct pt_regs *regs)
+asmlinkage int sys_rt_sigreturn(struct pt_regs *regs)
 {
-       struct sigframe *frame = (struct sigframe *)(current->thread.usp+4);
+#if 0
+       struct rt_sigframe __user *frame =
+               (struct rt_sigframe __user *)(current->thread.usp+4);
        sigset_t set;
        int rval = 0;
 
@@ -198,6 +209,7 @@ asmlinkage int sys_sigreturn(struct pt_regs *regs)
 
 badframe:
        force_sig(SIGSEGV, current);
+#endif
        return 0;
 }
 
@@ -210,7 +222,7 @@ setup_sigcontext(struct sigcontext *sc, struct pt_regs 
*regs,
 {
        int err = 0;
 
-#define COPY(x)                err |= __put_user(regs->x, &sc->regs.x)
+#define COPY(x)                {err |= __put_user(regs->x, &sc->regs.x); }
        COPY(r0);       COPY(r1);       COPY(r2);       COPY(r3);
        COPY(r4);       COPY(r5);       COPY(r6);       COPY(r7);
        COPY(r8);       COPY(r9);       COPY(r10);      COPY(r11);
@@ -229,7 +241,7 @@ setup_sigcontext(struct sigcontext *sc, struct pt_regs 
*regs,
 /*
  * Determine which stack to use..
  */
-static inline void *
+static inline void __user *
 get_sigframe(struct k_sigaction *ka, struct pt_regs *regs, size_t frame_size)
 {
        /* Per default use user stack of userspace process */
@@ -239,7 +251,7 @@ get_sigframe(struct k_sigaction *ka, struct pt_regs *regs, 
size_t frame_size)
                /* use stack set by sigaltstack */
                sp = current->sas_ss_sp + current->sas_ss_size;
 
-       return (void *)((sp - frame_size) & -8UL);
+       return (void __user *)((sp - frame_size) & -8UL);
 }
 
 static int setup_frame(int sig, struct k_sigaction *ka,
@@ -271,7 +283,7 @@ static int setup_frame(int sig, struct k_sigaction *ka,
        /* Set up to return from userspace. */
 
        /* mvi  r8, __NR_sigreturn = addi  r8, r0, __NR_sigreturn */
-       err |= __put_user(0x34080000 | __NR_sigreturn, &frame->tramp[0]);
+       err |= __put_user(0x34080000 | __NR_rt_sigreturn, &frame->tramp[0]);
 
        /* scall */
        err |= __put_user(0xac000007, &frame->tramp[1]);
diff --git a/arch/lm32/kernel/sys_call_table.c 
b/arch/lm32/kernel/sys_call_table.c
new file mode 100644
index 0000000..287369b
--- /dev/null
+++ b/arch/lm32/kernel/sys_call_table.c
@@ -0,0 +1,12 @@
+#include <linux/syscalls.h>
+#include <linux/signal.h>
+#include <linux/unistd.h>
+
+#include <asm/syscalls.h>
+
+#undef __SYSCALL
+#define __SYSCALL(nr, call) [nr] = (call),
+
+void *sys_call_table[__NR_syscalls] = {
+#include <asm/unistd.h>
+};
diff --git a/arch/lm32/kernel/sys_lm32.c b/arch/lm32/kernel/sys_lm32.c
index ed9a9fc..2316e8a 100644
--- a/arch/lm32/kernel/sys_lm32.c
+++ b/arch/lm32/kernel/sys_lm32.c
@@ -40,6 +40,22 @@
 #include <asm/unistd.h>
 
 
+asmlinkage long
+sys_mmap2(unsigned long addr, unsigned long len, unsigned long prot,
+       unsigned long flags, unsigned long fd, unsigned long pgoff)
+{
+       return sys_mmap_pgoff(addr, len, prot, flags, fd, pgoff);
+}
+
+asmlinkage long
+sys_mmap(unsigned long addr, unsigned long len, unsigned long prot,
+       unsigned long flags, unsigned long fd, off_t offset)
+{
+       if (unlikely(offset & ~PAGE_MASK))
+               return -EINVAL;
+       return sys_mmap_pgoff(addr, len, prot, flags, fd, offset >> PAGE_SHIFT);
+}
+
 int kernel_execve(const char *filename, const char *const argv[], const char 
*const envp[])
 {
     register unsigned int  r_syscall   asm("r8") = __NR_execve; 
@@ -103,91 +119,3 @@ asmlinkage int sys_lm32_clone(
        return ret;
 }
 
-static inline unsigned long
-do_mmap2 (unsigned long addr, size_t len,
-        unsigned long prot, unsigned long flags,
-        unsigned long fd, unsigned long pgoff)
-{
-       struct file * file = NULL;
-       int ret = -EBADF;
-
-       flags &= ~(MAP_EXECUTABLE | MAP_DENYWRITE);
-       if (! (flags & MAP_ANONYMOUS)) {
-               if (!(file = fget (fd)))
-                       goto out;
-       }
-       
-       down_write (&current->mm->mmap_sem);
-       ret = do_mmap_pgoff (file, addr, len, prot, flags, pgoff);
-       up_write (&current->mm->mmap_sem);
-       if (file)
-               fput (file);
-out:
-       return ret;
-}
-
-unsigned long sys_mmap2 (unsigned long addr, size_t len,
-                       unsigned long prot, unsigned long flags,
-                       unsigned long fd, unsigned long pgoff)
-{
-       return do_mmap2 (addr, len, prot, flags, fd, pgoff);
-}
-
-asmlinkage void lm32_debug_syscall(
-               unsigned long p1,
-               unsigned long p2,
-               unsigned long p3,
-               unsigned long p4,
-               unsigned long p5,
-               unsigned long p6,
-               struct pt_regs* regs,
-               unsigned long syscallno)
-{
-       switch( syscallno ) {
-               case __NR_write:
-               case __NR_read:
-               case __NR_nanosleep:
-               case __NR_close:
-               case __NR_access:
-                       /* do not debug those syscalls */
-                       break;
-
-               default:
-                       printk("Syscall: %lu (%lx, %lx, %lx, %lx, %lx, %lx) 
[regs = %lx]\n",
-                                       syscallno, p1, p2, p3, p4, p5, p6, 
(unsigned long)regs);
-                       break;
-       }
-}
-
-asmlinkage void lm32_debug_syscall_ret(int retval, unsigned long syscallno, 
struct pt_regs* regs)
-{
-       switch( syscallno ) {
-               case __NR_write:
-               case __NR_read:
-               case __NR_nanosleep:
-               case __NR_access:
-               default:
-                       /* do not debug those syscalls except for errors */
-
-                       /* do not debug ECHILD for wait() */
-                       if( syscallno == __NR_wait4 && retval == -10 )
-                               break;
-                       if( retval < 0 )
-                               printk("ERROR: syscall %lu returned %d\n", 
syscallno, retval);
-                       break;
-
-               case __NR_close:
-                       /* do not even debug those syscalls for errors because 
busybox often
-                        * "cleanups" by closing several hundred never opened 
fd's */
-                       break;
-
-               case __NR_pause:
-                       printk("syscall %lu returned %d and ea=%lx\n", 
syscallno, retval, regs->ea);
-                       break;
-                       /*
-               default:
-                       printk("syscall %lu returned %d\n", syscallno, retval);
-                       break;
-                       */
-       }
-}
-- 
1.7.2.3

_______________________________________________
http://lists.milkymist.org/listinfo.cgi/devel-milkymist.org
IRC: #milkymist@Freenode
Twitter: www.twitter.com/milkymistvj
Ideas? http://milkymist.uservoice.com

Reply via email to