On Mon, 4 Jul 2005, Roland McGrath wrote: > This is just a new symptom of the fact that m68k support has been wrong for > a long time. It's using the syscall table that's right for i386, and they > are not the same any more. An m68k hacker needs to supply a current > syscall table for strace.
While the syscall table is indeed outdated (the lchown32/chown32 swap isn't in there, and it just totally gets lost after around syscall 220), the root cause is a missing __NR_exit_group declaration in defs.h. Patch attached FYI; please note that this will only generate a new linux/syscallent.h.m68k suitable for compilation; I still need to merge the changes back into linux/syscallent.h proper, or add a linux/m68k subdir. With these changes applied, the compilation actually completes normally and I can run the resulting strace binary inside the chroot. A point I'm not clear on: is the inclusion of __NR_exit_group or SYS_exit as real syscall no in the defs really necessary? powerpc also calls the same function on both exit and exit_group, but doesn't pass the real syscall number to the strace handler function. Michael
--- defs.h.orig 2005-07-05 18:44:14.000000000 +0200 +++ defs.h 2005-07-05 18:44:14.000000000 +0200 @@ -343,6 +343,8 @@ # define __NR_exit_group 248 # elif defined SPARC || defined SPARC64 # define __NR_exit_group 188 +# elif defined M68K +# define __NR_exit_group 247 # endif /* ALPHA et al */ # endif /* !__NR_exit_group */ #endif /* LINUX */ --- linux/syscallent.h.orig 2005-06-08 01:21:24.000000000 +0200 +++ linux/syscallent.h.m68k 2005-07-05 16:13:22.000000000 +0200 @@ -44,11 +44,7 @@ { 1, 0, sys_time, "time" }, /* 13 */ { 3, TF, sys_mknod, "mknod" }, /* 14 */ { 2, TF, sys_chmod, "chmod" }, /* 15 */ -#ifdef M68K { 3, TF, sys_chown, "chown" }, /* 16 */ -#else - { 3, TF, sys_chown, "lchown" }, /* 16 */ -#endif { 0, 0, sys_break, "break" }, /* 17 */ { 2, TF, sys_oldstat, "oldstat" }, /* 18 */ { 3, 0, sys_lseek, "lseek" }, /* 19 */ @@ -155,11 +151,7 @@ { 5, TP, sys_clone, "clone", SYS_clone }, /* 120 */ { 2, 0, sys_setdomainname, "setdomainname" }, /* 121 */ { 1, 0, sys_uname, "uname" }, /* 122 */ -#ifdef M68K { 4, 0, sys_cacheflush, "cacheflush" }, /* 123 */ -#else - { 3, 0, sys_modify_ldt, "modify_ldt" }, /* 123 */ -#endif { 1, 0, sys_adjtimex, "adjtimex" }, /* 124 */ { 3, 0, sys_mprotect, "mprotect" }, /* 125 */ { 3, TS, sys_sigprocmask, "sigprocmask" }, /* 126 */ @@ -202,11 +194,7 @@ { 4, 0, sys_mremap, "mremap" }, /* 163 */ { 3, 0, sys_setresuid, "setresuid" }, /* 164 */ { 3, 0, sys_getresuid, "getresuid" }, /* 165 */ -#ifdef M68K - { 5, 0, printargs, "SYS_166" }, /* 166 */ -#else - { 5, 0, printargs, "vm86" }, /* 166 */ -#endif + { 5, 0, printargs, "getpagesize" }, /* 166 */ { 5, 0, sys_query_module, "query_module" }, /* 167 */ { 3, 0, sys_poll, "poll" }, /* 168 */ { 3, 0, printargs, "nfsservctl" }, /* 169 */ @@ -220,14 +208,9 @@ { 4, TS, sys_rt_sigtimedwait, "rt_sigtimedwait"}, /* 177 */ { 3, TS, sys_rt_sigqueueinfo, "rt_sigqueueinfo"}, /* 178 */ { 2, TS, sys_rt_sigsuspend, "rt_sigsuspend" }, /* 179 */ - { 5, TF, sys_pread, "pread64", SYS_read }, /* 180 */ { 5, TF, sys_pwrite, "pwrite64", SYS_write }, /* 181 */ -#ifdef M68K { 3, TF, sys_chown, "lchown" }, /* 182 */ -#else - { 3, TF, sys_chown, "chown" }, /* 182 */ -#endif { 2, TF, sys_getcwd, "getcwd" }, /* 183 */ { 2, 0, sys_capget, "capget" }, /* 184 */ { 2, 0, sys_capset, "capset" }, /* 185 */ @@ -243,7 +226,7 @@ { 2, TF, sys_stat64, "stat64" }, /* 195 */ { 2, TF, sys_lstat64, "lstat64" }, /* 196 */ { 2, TF, sys_fstat64, "fstat64" }, /* 197 */ - { 3, TF, sys_chown, "lchown32" }, /* 198 */ + { 3, TF, sys_chown, "chown32" }, /* 198 */ { 0, 0, sys_getuid, "getuid32" }, /* 199 */ { 0, 0, sys_getgid, "getgid32" }, /* 200 */ @@ -258,82 +241,88 @@ { 3, 0, sys_getresuid, "getresuid32" }, /* 209 */ { 3, 0, sys_setresgid, "setresgid32" }, /* 210 */ { 3, 0, sys_getresgid, "getresgid32" }, /* 211 */ - { 3, TF, sys_chown, "chown32" }, /* 212 */ + { 3, TF, sys_chown, "lchown32" }, /* 212 */ { 1, 0, sys_setuid, "setuid32" }, /* 213 */ { 1, 0, sys_setgid, "setgid32" }, /* 214 */ { 1, 0, sys_setfsuid, "setfsuid32" }, /* 215 */ { 1, 0, sys_setfsgid, "setfsgid32" }, /* 216 */ { 2, TF, sys_pivotroot, "pivot_root" }, /* 217 */ - { 3, 0, sys_mincore, "mincore" }, /* 218 */ - { 3, 0, sys_madvise, "madvise" }, /* 219 */ + +/* m68k sync stops here */ + + { 5, 0, printargs, "SYS_218" }, /* 218 */ + { 5, 0, printargs, "SYS_219" }, /* 219 */ + { 4, 0, sys_getdents64, "getdents64" }, /* 220 */ - { 3, 0, sys_fcntl, "fcntl64" }, /* 221 */ - { 4, 0, printargs, "SYS_222" }, /* 222 */ -/*TODO*/{ 5, 0, printargs, "security" }, /* 223 */ - { 0, 0, printargs, "gettid" }, /* 224 */ - { 4, 0, sys_readahead, "readahead" }, /* 225 */ - { 5, TF, sys_setxattr, "setxattr" }, /* 226 */ - { 5, TF, sys_setxattr, "lsetxattr" }, /* 227 */ - { 5, 0, sys_fsetxattr, "fsetxattr" }, /* 228 */ - { 4, TF, sys_getxattr, "getxattr" }, /* 229 */ - { 4, TF, sys_getxattr, "lgetxattr" }, /* 230 */ - { 4, 0, sys_fgetxattr, "fgetxattr" }, /* 231 */ - { 3, TF, sys_listxattr, "listxattr" }, /* 232 */ - { 3, TF, sys_listxattr, "llistxattr" }, /* 233 */ - { 3, 0, sys_flistxattr, "flistxattr" }, /* 234 */ - { 2, TF, sys_removexattr, "removexattr" }, /* 235 */ - { 2, TF, sys_removexattr, "lremovexattr" }, /* 236 */ - { 2, 0, sys_fremovexattr, "fremovexattr" }, /* 237 */ - { 2, TS, sys_kill, "tkill" }, /* 238 */ - { 4, TF, sys_sendfile64, "sendfile64" }, /* 239 */ - { 5, 0, sys_futex, "futex" }, /* 240 */ - { 3, 0, sys_sched_setaffinity, "sched_setaffinity" },/* 241 */ - { 3, 0, sys_sched_getaffinity, "sched_getaffinity" },/* 242 */ - { 1, 0, sys_set_thread_area, "set_thread_area" }, /* 243 */ - { 1, 0, sys_get_thread_area, "get_thread_area" }, /* 244 */ - { 2, 0, sys_io_setup, "io_setup" }, /* 245 */ - { 1, 0, sys_io_destroy, "io_destroy" }, /* 246 */ - { 5, 0, sys_io_getevents, "io_getevents" }, /* 247 */ - { 3, 0, sys_io_submit, "io_submit" }, /* 248 */ - { 3, 0, sys_io_cancel, "io_cancel" }, /* 249 */ - { 5, TF, sys_fadvise64, "fadvise64" }, /* 250 */ - { 5, 0, printargs, "SYS_251" }, /* 251 */ - { 1, TP, sys_exit, "exit_group", __NR_exit_group }, /* 252 */ - { 4, 0, printargs, "lookup_dcookie"}, /* 253 */ - { 1, 0, sys_epoll_create, "epoll_create" }, /* 254 */ - { 4, 0, sys_epoll_ctl, "epoll_ctl" }, /* 255 */ - { 4, 0, sys_epoll_wait, "epoll_wait" }, /* 256 */ - { 5, 0, sys_remap_file_pages, "remap_file_pages"}, /* 257 */ - { 1, 0, printargs, "set_tid_address"}, /* 258 */ - { 3, 0, sys_timer_create, "timer_create" }, /* 259 */ - { 4, 0, sys_timer_settime, "timer_settime" }, /* 260 */ - { 2, 0, sys_timer_gettime, "timer_gettime" }, /* 261 */ - { 1, 0, sys_timer_getoverrun, "timer_getoverrun"}, /* 262 */ - { 1, 0, sys_timer_delete, "timer_delete" }, /* 263 */ - { 2, 0, sys_clock_settime, "clock_settime" }, /* 264 */ - { 2, 0, sys_clock_gettime, "clock_gettime" }, /* 265 */ - { 2, 0, sys_clock_getres, "clock_getres" }, /* 266 */ - { 4, 0, sys_clock_nanosleep, "clock_nanosleep"}, /* 267 */ - { 3, TF, sys_statfs64, "statfs64" }, /* 268 */ - { 3, TF, sys_fstatfs64, "fstatfs64" }, /* 269 */ - { 3, TS, sys_tgkill, "tgkill" }, /* 270 */ - { 2, TF, sys_utimes, "utimes" }, /* 271 */ - { 6, TF, sys_fadvise64_64, "fadvise64_64" }, /* 272 */ - { 5, 0, printargs, "vserver" }, /* 273 */ - { 6, 0, sys_mbind, "mbind" }, /* 274 */ - { 5, 0, sys_get_mempolicy, "get_mempolicy" }, /* 275 */ - { 3, 0, sys_set_mempolicy, "set_mempolicy" }, /* 276 */ - { 4, 0, sys_mq_open, "mq_open" }, /* 277 */ - { 1, 0, sys_mq_unlink, "mq_unlink" }, /* 278 */ - { 5, 0, sys_mq_timedsend, "mq_timedsend" }, /* 279 */ - { 5, 0, sys_mq_timedreceive, "mq_timedreceive" }, /* 280 */ - { 2, 0, sys_mq_notify, "mq_notify" }, /* 281 */ - { 3, 0, sys_mq_getsetattr, "mq_getsetattr" }, /* 282 */ - { 5, 0, printargs, "sys_kexec_load" }, /* 283 */ - { 5, TP, sys_waitid, "waitid", SYS_waitid }, /* 284 */ + { 0, 0, printargs, "gettid" }, /* 221 */ + { 2, TS, sys_kill, "tkill" }, /* 222 */ + { 5, TF, sys_setxattr, "setxattr" }, /* 223 */ + { 5, TF, sys_setxattr, "lsetxattr" }, /* 224 */ + { 5, 0, sys_fsetxattr, "fsetxattr" }, /* 225 */ + { 4, TF, sys_getxattr, "getxattr" }, /* 226 */ + { 4, TF, sys_getxattr, "lgetxattr" }, /* 227 */ + { 4, 0, sys_fgetxattr, "fgetxattr" }, /* 228 */ + { 3, TF, sys_listxattr, "listxattr" }, /* 229 */ + { 3, TF, sys_listxattr, "llistxattr" }, /* 230 */ + { 3, 0, sys_flistxattr, "flistxattr" }, /* 231 */ + { 2, TF, sys_removexattr, "removexattr" }, /* 232 */ + { 2, TF, sys_removexattr, "lremovexattr" }, /* 233 */ + { 2, 0, sys_fremovexattr, "fremovexattr" }, /* 234 */ + { 5, 0, sys_futex, "futex" }, /* 235 */ + { 4, TF, sys_sendfile64, "sendfile64" }, /* 236 */ + { 3, 0, sys_mincore, "mincore" }, /* 237 */ + { 3, 0, sys_madvise, "madvise" }, /* 238 */ + { 3, 0, sys_fcntl, "fcntl64" }, /* 239 */ + { 4, 0, sys_readahead, "readahead" }, /* 240 */ + { 2, 0, sys_io_setup, "io_setup" }, /* 241 */ + { 1, 0, sys_io_destroy, "io_destroy" }, /* 242 */ + { 5, 0, sys_io_getevents, "io_getevents" }, /* 243 */ + { 3, 0, sys_io_submit, "io_submit" }, /* 244 */ + { 3, 0, sys_io_cancel, "io_cancel" }, /* 245 */ + { 5, TF, sys_fadvise64, "fadvise64" }, /* 246 */ + { 1, TP, sys_exit, "exit_group", __NR_exit_group }, /* 247 */ + { 4, 0, printargs, "lookup_dcookie"}, /* 248 */ + { 1, 0, sys_epoll_create, "epoll_create" }, /* 249 */ + { 4, 0, sys_epoll_ctl, "epoll_ctl" }, /* 250 */ + { 4, 0, sys_epoll_wait, "epoll_wait" }, /* 251 */ + { 5, 0, sys_remap_file_pages, "remap_file_pages"}, /* 252 */ + { 1, 0, printargs, "set_tid_address"}, /* 253 */ + { 3, 0, sys_timer_create, "timer_create" }, /* 254 */ + { 4, 0, sys_timer_settime, "timer_settime" }, /* 255 */ + { 2, 0, sys_timer_gettime, "timer_gettime" }, /* 256 */ + { 1, 0, sys_timer_getoverrun, "timer_getoverrun"}, /* 257 */ + { 1, 0, sys_timer_delete, "timer_delete" }, /* 258 */ + { 2, 0, sys_clock_settime, "clock_settime" }, /* 259 */ + { 2, 0, sys_clock_gettime, "clock_gettime" }, /* 260 */ + { 2, 0, sys_clock_getres, "clock_getres" }, /* 261 */ + { 4, 0, sys_clock_nanosleep, "clock_nanosleep"}, /* 262 */ + { 3, TF, sys_statfs64, "statfs64" }, /* 263 */ + { 3, TF, sys_fstatfs64, "fstatfs64" }, /* 264 */ + { 3, TS, sys_tgkill, "tgkill" }, /* 265 */ + { 2, TF, sys_utimes, "utimes" }, /* 266 */ + { 6, TF, sys_fadvise64_64, "fadvise64_64" }, /* 267 */ + { 6, 0, sys_mbind, "mbind" }, /* 268 */ + { 5, 0, sys_get_mempolicy, "get_mempolicy" }, /* 269 */ + { 3, 0, sys_set_mempolicy, "set_mempolicy" }, /* 270 */ + { 4, 0, sys_mq_open, "mq_open" }, /* 271 */ + { 1, 0, sys_mq_unlink, "mq_unlink" }, /* 272 */ + { 5, 0, sys_mq_timedsend, "mq_timedsend" }, /* 273 */ + { 5, 0, sys_mq_timedreceive, "mq_timedreceive" }, /* 274 */ + { 2, 0, sys_mq_notify, "mq_notify" }, /* 275 */ + { 3, 0, sys_mq_getsetattr, "mq_getsetattr" }, /* 276 */ + { 5, TP, sys_waitid, "waitid", SYS_waitid }, /* 277 */ + { 5, 0, printargs, "vserver" }, /* 278 */ + { 5, 0, printargs, "add_key" }, /* 279 */ + { 5, 0, printargs, "request_key" }, /* 280 */ + { 5, 0, printargs, "keyctl" }, /* 281 */ + + { 5, 0, printargs, "SYS_282" }, /* 282 */ + { 5, 0, printargs, "SYS_283" }, /* 283 */ + { 5, 0, printargs, "SYS_284" }, /* 284 */ { 5, 0, printargs, "SYS_285" }, /* 285 */ { 5, 0, printargs, "SYS_286" }, /* 286 */ { 5, 0, printargs, "SYS_287" }, /* 287 */ + { 5, 0, printargs, "SYS_288" }, /* 288 */ { 5, 0, printargs, "SYS_289" }, /* 289 */ { 5, 0, printargs, "SYS_290" }, /* 290 */ @@ -347,6 +336,20 @@ { 5, 0, printargs, "SYS_298" }, /* 298 */ { 5, 0, printargs, "SYS_299" }, /* 299 */ + +/* leftover garbage */ + + /*{ 4, 0, printargs, "SYS_222" }, */ /* 222 */ +/*TODO*/ /*{ 5, 0, printargs, "security" }, */ /* 223 */ + + /*{ 3, 0, sys_sched_setaffinity, "sched_setaffinity" },*/ /* 241 */ + /*{ 3, 0, sys_sched_getaffinity, "sched_getaffinity" },*/ /* 242 */ + /*{ 1, 0, sys_set_thread_area, "set_thread_area" }, */ /* 243 */ + /*{ 1, 0, sys_get_thread_area, "get_thread_area" }, */ /* 244 */ + /*{ 5, 0, printargs, "SYS_251" }, */ /* 251 */ + /*{ 5, 0, printargs, "sys_kexec_load" }, */ /* 283 */ + + #if SYS_socket_subcall != 300 #error fix me #endif