diff --git a/ChangeLog b/ChangeLog index 8a5ab448..1d7777d9 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,21 @@ +Sun May 9 02:18:30 CEST 1999 Wichert Akkerman + + * Merge in patches from Andreas Schwab + + some layout and other minor fixes + + add some m68k-specific things to linux/syscallent.h. Note that m68k + is similar enough to i386 to not need it's own subdirectory + + add support for sendfile and mremap syscalls for Linux + * Merge in patches from Sascha Schumann + + ioctls.h vs sys/ioctl.h on Alpha platform + + pointer was casted to an int in stream.c + + strsignal() needs -D_GNU_SOURCE in CFLAGS + + several other casts changed + + correct ARM/POWERPC architecture defines in acconfig.h + * Merge in patches from Morten Welinder + + add some autoconf-tests for includefiles + + handle solaris version of sigcontext struct (actually I hacked this + up again, but the idea is his :) + Sun Apr 18 22:32:42 CEST 1999 Wichert Akkerman * Update syscalls for linux alpha, patch from Bart Warmerdam diff --git a/TODO b/TODO index 18824be9..ae11ae88 100644 --- a/TODO +++ b/TODO @@ -1,9 +1,13 @@ -- new entries from wta getdents has wrong structure; track down kernel version +clone doesn't work; cloned processes can hang +replace printargs with something that reads a configuration-file +rename functions that are used for general things: + sys_chdir -> general_1stringarg +generate syscallent.h from the kernel sources -- old entries from jrs -require override to run suid and/or sgid executables normally attempt reopen of /proc file if we get EAGAIN from any /proc ioctl kill procs we error out of on svr4 enclose "total x dents" in a comment @@ -18,7 +22,6 @@ add pread, pwrite to I/O dumping add system assist for qualifiers on svr4 change printcall to getcaller and fix for linux and svr4 fix fork hang for svr4 without pollable procfs -add thread support print events on entry to and revents on exit from poll monitor procfs open and release the other child if the process wants to own it fix incorrect syscall number if exit without entry on svr4 without pr_syscall @@ -27,4 +30,3 @@ ignore faults which occur before exec look for more ioctls on solaris, used in nslookup for example consider adding backtrace support consider adding general purpose interpreter -rename program to sctrace to avoid conflict with svr4 strace? diff --git a/acconfig.h b/acconfig.h index 44a4921c..8a9a9c3d 100644 --- a/acconfig.h +++ b/acconfig.h @@ -24,6 +24,12 @@ /* Define if this is an alpha architecture. */ #undef ALPHA +/* Define if this is a arm architecture. */ +#undef ARM + +/* Define if this is an powerpc architecture. */ +#undef POWERPC + /* Define if you have SVR4 and the poll system call works on /proc files. */ #undef HAVE_POLLABLE_PROCFS diff --git a/bjm.c b/bjm.c index 2bb91a97..d21ce7cd 100644 --- a/bjm.c +++ b/bjm.c @@ -1,5 +1,7 @@ #include "defs.h" +#if defined(LINUX) + #include #include #include @@ -49,13 +51,5 @@ struct tcb *tcp; return 0; } -int -sys_delete_module(tcp) -struct tcb *tcp; -{ +#endif /* LINUX */ - if (entering(tcp)) { - printstr(tcp, tcp->u_arg[0], -1); - } - return 0; -} diff --git a/config.h.in b/config.h.in index 09991beb..4d2772f2 100644 --- a/config.h.in +++ b/config.h.in @@ -75,12 +75,12 @@ /* Define if this is an alpha architecture. */ #undef ALPHA -/* Define if this is an powerpc architecture. */ -#undef POWERPC - /* Define if this is a arm architecture. */ #undef ARM +/* Define if this is an powerpc architecture. */ +#undef POWERPC + /* Define if you have SVR4 and the poll system call works on /proc files. */ #undef HAVE_POLLABLE_PROCFS @@ -141,6 +141,9 @@ /* Define if you have the header file. */ #undef HAVE_DIRENT_H +/* Define if you have the header file. */ +#undef HAVE_IOCTLS_H + /* Define if you have the header file. */ #undef HAVE_NDIR_H @@ -153,9 +156,15 @@ /* Define if you have the header file. */ #undef HAVE_SYS_FILIO_H +/* Define if you have the header file. */ +#undef HAVE_SYS_IOCTL_H + /* Define if you have the header file. */ #undef HAVE_SYS_NDIR_H +/* Define if you have the header file. */ +#undef HAVE_SYS_PTRACE_H + /* Define if you have the header file. */ #undef HAVE_SYS_STREAM_H @@ -165,5 +174,8 @@ /* Define if you have the header file. */ #undef HAVE_SYS_TIUSER_H +/* Define if you have the header file. */ +#undef HAVE_TERMIO_H + /* Define if you have the nsl library (-lnsl). */ #undef HAVE_LIBNSL diff --git a/configure b/configure index f9ee55f4..25a903d7 100755 --- a/configure +++ b/configure @@ -629,7 +629,7 @@ echo "$ac_t""$arch" 1>&6 # Autoheader trick. Heh, heh. arch_list=' -@@@syms="$syms I386 M68K SPARC MIPS ALPHA ARM"@@@ +@@@syms="$syms I386 M68K SPARC MIPS ALPHA ARM POWERPC"@@@ ' osarch="$opsys" @@ -640,6 +640,7 @@ fi OPSYS=`echo $opsys | tr '[a-z]' '[A-Z]'` ARCH=`echo $arch | tr '[a-z]' '[A-Z]'` +CFLAG="-D_GNU_SOURCE $CFLAGS" cat >> confdefs.h <&6 -echo "configure:659: checking for $ac_word" >&5 +echo "configure:660: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -685,7 +686,7 @@ if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:689: checking for $ac_word" >&5 +echo "configure:690: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -736,7 +737,7 @@ fi # Extract the first word of "cl", so it can be a program name with args. set dummy cl; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:740: checking for $ac_word" >&5 +echo "configure:741: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -768,7 +769,7 @@ fi fi echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6 -echo "configure:772: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 +echo "configure:773: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 ac_ext=c # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. @@ -779,12 +780,12 @@ cross_compiling=$ac_cv_prog_cc_cross cat > conftest.$ac_ext << EOF -#line 783 "configure" +#line 784 "configure" #include "confdefs.h" main(){return(0);} EOF -if { (eval echo configure:788: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:789: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then ac_cv_prog_cc_works=yes # If we can't run a trivial program, we are probably using a cross compiler. if (./conftest; exit) 2>/dev/null; then @@ -810,12 +811,12 @@ if test $ac_cv_prog_cc_works = no; then { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; } fi echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6 -echo "configure:814: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5 +echo "configure:815: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5 echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6 cross_compiling=$ac_cv_prog_cc_cross echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6 -echo "configure:819: checking whether we are using GNU C" >&5 +echo "configure:820: checking whether we are using GNU C" >&5 if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -824,7 +825,7 @@ else yes; #endif EOF -if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:828: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then +if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:829: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then ac_cv_prog_gcc=yes else ac_cv_prog_gcc=no @@ -843,7 +844,7 @@ ac_test_CFLAGS="${CFLAGS+set}" ac_save_CFLAGS="$CFLAGS" CFLAGS= echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6 -echo "configure:847: checking whether ${CC-cc} accepts -g" >&5 +echo "configure:848: checking whether ${CC-cc} accepts -g" >&5 if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -888,16 +889,16 @@ then last="$i" CC="$HOSTCC -b $i" echo $ac_n "checking for working $CC""... $ac_c" 1>&6 -echo "configure:892: checking for working $CC" >&5 +echo "configure:893: checking for working $CC" >&5 cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:902: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* worked=1 break @@ -919,7 +920,7 @@ rm -f conftest* fi echo $ac_n "checking for pollable procfs""... $ac_c" 1>&6 -echo "configure:923: checking for pollable procfs" >&5 +echo "configure:924: checking for pollable procfs" >&5 if eval "test \"`echo '$''{'ac_cv_pollable_procfs'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -937,7 +938,7 @@ esac else cat > conftest.$ac_ext < @@ -976,7 +977,7 @@ fail: } EOF -if { (eval echo configure:980: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:981: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_pollable_procfs=yes else @@ -1000,19 +1001,19 @@ EOF fi echo $ac_n "checking for pr_syscall in struct prstatus""... $ac_c" 1>&6 -echo "configure:1004: checking for pr_syscall in struct prstatus" >&5 +echo "configure:1005: checking for pr_syscall in struct prstatus" >&5 if eval "test \"`echo '$''{'ac_cv_struct_pr_syscall'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { struct prstatus s; s.pr_syscall; ; return 0; } EOF -if { (eval echo configure:1016: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:1017: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_struct_pr_syscall=yes else @@ -1034,12 +1035,12 @@ EOF fi echo $ac_n "checking for msg_control in struct msghdr""... $ac_c" 1>&6 -echo "configure:1038: checking for msg_control in struct msghdr" >&5 +echo "configure:1039: checking for msg_control in struct msghdr" >&5 if eval "test \"`echo '$''{'ac_cv_struct_msg_control'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -1048,7 +1049,7 @@ int main() { struct msghdr m; m.msg_control; ; return 0; } EOF -if { (eval echo configure:1052: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:1053: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_struct_msg_control=yes else @@ -1074,7 +1075,7 @@ do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1078: checking for $ac_word" >&5 +echo "configure:1079: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_AWK'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1105,7 +1106,7 @@ done echo $ac_n "checking for primary include directory""... $ac_c" 1>&6 -echo "configure:1109: checking for primary include directory" >&5 +echo "configure:1110: checking for primary include directory" >&5 includedir=/usr/include if test -n "$GCC" then @@ -1127,7 +1128,7 @@ echo "$ac_t""$includedir" 1>&6 if test "x$OPSYS" = "xSUNOS4" && test "x$ARCH" = "xSPARC" then echo $ac_n "checking for valid machine include directory""... $ac_c" 1>&6 -echo "configure:1131: checking for valid machine include directory" >&5 +echo "configure:1132: checking for valid machine include directory" >&5 if test -d "$includedir/sun4" then rm -f machine @@ -1160,7 +1161,7 @@ then fi fi echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6 -echo "configure:1164: checking how to run the C preprocessor" >&5 +echo "configure:1165: checking how to run the C preprocessor" >&5 # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= @@ -1175,13 +1176,13 @@ else # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:1185: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:1186: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : @@ -1192,13 +1193,13 @@ else rm -rf conftest* CPP="${CC-cc} -E -traditional-cpp" cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:1202: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:1203: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : @@ -1209,13 +1210,13 @@ else rm -rf conftest* CPP="${CC-cc} -nologo -E" cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:1219: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:1220: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : @@ -1241,13 +1242,13 @@ echo "$ac_t""$CPP" 1>&6 if test $ac_cv_prog_gcc = yes; then echo $ac_n "checking whether ${CC-cc} needs -traditional""... $ac_c" 1>&6 -echo "configure:1245: checking whether ${CC-cc} needs -traditional" >&5 +echo "configure:1246: checking whether ${CC-cc} needs -traditional" >&5 if eval "test \"`echo '$''{'ac_cv_prog_gcc_traditional'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_pattern="Autoconf.*'x'" cat > conftest.$ac_ext < Autoconf TIOCGETP @@ -1265,7 +1266,7 @@ rm -f conftest* if test $ac_cv_prog_gcc_traditional = no; then cat > conftest.$ac_ext < Autoconf TCGETA @@ -1298,7 +1299,7 @@ fi # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # ./install, which can be erroneously created by make from ./install.sh. echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6 -echo "configure:1302: checking for a BSD compatible install" >&5 +echo "configure:1303: checking for a BSD compatible install" >&5 if test -z "$INSTALL"; then if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -1351,12 +1352,12 @@ test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL_PROGRAM}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' echo $ac_n "checking for working const""... $ac_c" 1>&6 -echo "configure:1355: checking for working const" >&5 +echo "configure:1356: checking for working const" >&5 if eval "test \"`echo '$''{'ac_cv_c_const'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:1410: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_const=yes else @@ -1426,12 +1427,12 @@ EOF fi echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6 -echo "configure:1430: checking for ANSI C header files" >&5 +echo "configure:1431: checking for ANSI C header files" >&5 if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -1439,7 +1440,7 @@ else #include EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:1443: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:1444: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -1456,7 +1457,7 @@ rm -f conftest* if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat > conftest.$ac_ext < EOF @@ -1474,7 +1475,7 @@ fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat > conftest.$ac_ext < EOF @@ -1495,7 +1496,7 @@ if test "$cross_compiling" = yes; then : else cat > conftest.$ac_ext < #define ISLOWER(c) ('a' <= (c) && (c) <= 'z') @@ -1506,7 +1507,7 @@ if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2); exit (0); } EOF -if { (eval echo configure:1510: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:1511: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then : else @@ -1534,12 +1535,12 @@ for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr that defines DIR""... $ac_c" 1>&6 -echo "configure:1538: checking for $ac_hdr that defines DIR" >&5 +echo "configure:1539: checking for $ac_hdr that defines DIR" >&5 if eval "test \"`echo '$''{'ac_cv_header_dirent_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include <$ac_hdr> @@ -1547,7 +1548,7 @@ int main() { DIR *dirp = 0; ; return 0; } EOF -if { (eval echo configure:1551: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:1552: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* eval "ac_cv_header_dirent_$ac_safe=yes" else @@ -1572,7 +1573,7 @@ done # Two versions of opendir et al. are in -ldir and -lx on SCO Xenix. if test $ac_header_dirent = dirent.h; then echo $ac_n "checking for opendir in -ldir""... $ac_c" 1>&6 -echo "configure:1576: checking for opendir in -ldir" >&5 +echo "configure:1577: checking for opendir in -ldir" >&5 ac_lib_var=`echo dir'_'opendir | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -1580,7 +1581,7 @@ else ac_save_LIBS="$LIBS" LIBS="-ldir $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:1596: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -1613,7 +1614,7 @@ fi else echo $ac_n "checking for opendir in -lx""... $ac_c" 1>&6 -echo "configure:1617: checking for opendir in -lx" >&5 +echo "configure:1618: checking for opendir in -lx" >&5 ac_lib_var=`echo x'_'opendir | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -1621,7 +1622,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lx $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:1637: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -1655,12 +1656,12 @@ fi fi echo $ac_n "checking return type of signal handlers""... $ac_c" 1>&6 -echo "configure:1659: checking return type of signal handlers" >&5 +echo "configure:1660: checking return type of signal handlers" >&5 if eval "test \"`echo '$''{'ac_cv_type_signal'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -1677,7 +1678,7 @@ int main() { int i; ; return 0; } EOF -if { (eval echo configure:1681: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:1682: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_type_signal=void else @@ -1696,12 +1697,12 @@ EOF echo $ac_n "checking for st_blksize in struct stat""... $ac_c" 1>&6 -echo "configure:1700: checking for st_blksize in struct stat" >&5 +echo "configure:1701: checking for st_blksize in struct stat" >&5 if eval "test \"`echo '$''{'ac_cv_struct_st_blksize'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -1709,7 +1710,7 @@ int main() { struct stat s; s.st_blksize; ; return 0; } EOF -if { (eval echo configure:1713: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:1714: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_struct_st_blksize=yes else @@ -1730,12 +1731,12 @@ EOF fi echo $ac_n "checking for st_blocks in struct stat""... $ac_c" 1>&6 -echo "configure:1734: checking for st_blocks in struct stat" >&5 +echo "configure:1735: checking for st_blocks in struct stat" >&5 if eval "test \"`echo '$''{'ac_cv_struct_st_blocks'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -1743,7 +1744,7 @@ int main() { struct stat s; s.st_blocks; ; return 0; } EOF -if { (eval echo configure:1747: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:1748: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_struct_st_blocks=yes else @@ -1766,12 +1767,12 @@ else fi echo $ac_n "checking for st_rdev in struct stat""... $ac_c" 1>&6 -echo "configure:1770: checking for st_rdev in struct stat" >&5 +echo "configure:1771: checking for st_rdev in struct stat" >&5 if eval "test \"`echo '$''{'ac_cv_struct_st_rdev'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -1779,7 +1780,7 @@ int main() { struct stat s; s.st_rdev; ; return 0; } EOF -if { (eval echo configure:1783: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:1784: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_struct_st_rdev=yes else @@ -1800,12 +1801,12 @@ EOF fi echo $ac_n "checking whether stat file-mode macros are broken""... $ac_c" 1>&6 -echo "configure:1804: checking whether stat file-mode macros are broken" >&5 +echo "configure:1805: checking whether stat file-mode macros are broken" >&5 if eval "test \"`echo '$''{'ac_cv_header_stat_broken'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -1856,12 +1857,12 @@ EOF fi echo $ac_n "checking for uid_t in sys/types.h""... $ac_c" 1>&6 -echo "configure:1860: checking for uid_t in sys/types.h" >&5 +echo "configure:1861: checking for uid_t in sys/types.h" >&5 if eval "test \"`echo '$''{'ac_cv_type_uid_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF @@ -1890,12 +1891,12 @@ EOF fi echo $ac_n "checking for mode_t""... $ac_c" 1>&6 -echo "configure:1894: checking for mode_t" >&5 +echo "configure:1895: checking for mode_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_mode_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS @@ -1923,7 +1924,7 @@ EOF fi echo $ac_n "checking type of array argument to getgroups""... $ac_c" 1>&6 -echo "configure:1927: checking type of array argument to getgroups" >&5 +echo "configure:1928: checking type of array argument to getgroups" >&5 if eval "test \"`echo '$''{'ac_cv_type_getgroups'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1931,7 +1932,7 @@ else ac_cv_type_getgroups=cross else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:1961: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_type_getgroups=gid_t else @@ -1970,7 +1971,7 @@ fi if test $ac_cv_type_getgroups = cross; then cat > conftest.$ac_ext < EOF @@ -1994,19 +1995,19 @@ EOF echo $ac_n "checking whether sys/types.h defines makedev""... $ac_c" 1>&6 -echo "configure:1998: checking whether sys/types.h defines makedev" >&5 +echo "configure:1999: checking whether sys/types.h defines makedev" >&5 if eval "test \"`echo '$''{'ac_cv_header_sys_types_h_makedev'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { return makedev(0, 0); ; return 0; } EOF -if { (eval echo configure:2010: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:2011: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_header_sys_types_h_makedev=yes else @@ -2024,17 +2025,17 @@ echo "$ac_t""$ac_cv_header_sys_types_h_makedev" 1>&6 if test $ac_cv_header_sys_types_h_makedev = no; then ac_safe=`echo "sys/mkdev.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for sys/mkdev.h""... $ac_c" 1>&6 -echo "configure:2028: checking for sys/mkdev.h" >&5 +echo "configure:2029: checking for sys/mkdev.h" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2038: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2039: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2062,17 +2063,17 @@ fi if test $ac_cv_header_sys_mkdev_h = no; then ac_safe=`echo "sys/sysmacros.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for sys/sysmacros.h""... $ac_c" 1>&6 -echo "configure:2066: checking for sys/sysmacros.h" >&5 +echo "configure:2067: checking for sys/sysmacros.h" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2076: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2077: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2100,19 +2101,19 @@ fi fi echo $ac_n "checking for sig_atomic_t in signal.h""... $ac_c" 1>&6 -echo "configure:2104: checking for sig_atomic_t in signal.h" >&5 +echo "configure:2105: checking for sig_atomic_t in signal.h" >&5 if eval "test \"`echo '$''{'ac_cv_sig_atomic_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { sig_atomic_t x; ; return 0; } EOF -if { (eval echo configure:2116: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:2117: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_sig_atomic_t=yes else @@ -2134,7 +2135,7 @@ EOF fi echo $ac_n "checking for main in -lnsl""... $ac_c" 1>&6 -echo "configure:2138: checking for main in -lnsl" >&5 +echo "configure:2139: checking for main in -lnsl" >&5 ac_lib_var=`echo nsl'_'main | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -2142,14 +2143,14 @@ else ac_save_LIBS="$LIBS" LIBS="-lnsl $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:2154: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -2179,12 +2180,12 @@ fi for ac_func in sigaction strerror strsignal pread sys_siglist _sys_siglist getdents mctl putpmsg prctl sendmsg do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:2183: checking for $ac_func" >&5 +echo "configure:2184: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:2212: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -2231,21 +2232,21 @@ else fi done -for ac_hdr in sys/filio.h sys/asynch.h sys/stream.h sys/tiuser.h sys/sysconfig.h asm/sigcontext.h +for ac_hdr in sys/filio.h sys/asynch.h sys/stream.h sys/tiuser.h sys/sysconfig.h asm/sigcontext.h ioctls.h sys/ioctl.h sys/ptrace.h termio.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:2239: checking for $ac_hdr" >&5 +echo "configure:2240: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:2249: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:2250: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -2272,12 +2273,12 @@ fi done echo $ac_n "checking for sys_errlist declaration""... $ac_c" 1>&6 -echo "configure:2276: checking for sys_errlist declaration" >&5 +echo "configure:2277: checking for sys_errlist declaration" >&5 if eval "test \"`echo '$''{'ac_cv_decl_sys_errlist'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -2290,7 +2291,7 @@ int main() { char *msg = *(sys_errlist + 1); ; return 0; } EOF -if { (eval echo configure:2294: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:2295: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_decl_sys_errlist=yes else @@ -2310,12 +2311,12 @@ EOF fi echo $ac_n "checking for sys_siglist declaration in signal.h or unistd.h""... $ac_c" 1>&6 -echo "configure:2314: checking for sys_siglist declaration in signal.h or unistd.h" >&5 +echo "configure:2315: checking for sys_siglist declaration in signal.h or unistd.h" >&5 if eval "test \"`echo '$''{'ac_cv_decl_sys_siglist'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -2327,7 +2328,7 @@ int main() { char *msg = *(sys_siglist + 1); ; return 0; } EOF -if { (eval echo configure:2331: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:2332: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_decl_sys_siglist=yes else @@ -2348,12 +2349,12 @@ EOF fi echo $ac_n "checking for _sys_siglist declaration""... $ac_c" 1>&6 -echo "configure:2352: checking for _sys_siglist declaration" >&5 +echo "configure:2353: checking for _sys_siglist declaration" >&5 if eval "test \"`echo '$''{'ac_cv_decl__sys_siglist'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include @@ -2365,7 +2366,7 @@ int main() { char *msg = *(_sys_siglist + 1); ; return 0; } EOF -if { (eval echo configure:2369: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:2370: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_decl__sys_siglist=yes else diff --git a/configure.in b/configure.in index a43b563a..1f4ef63b 100644 --- a/configure.in +++ b/configure.in @@ -61,7 +61,7 @@ AC_MSG_RESULT($arch) # Autoheader trick. Heh, heh. arch_list=' -@@@syms="$syms I386 M68K SPARC MIPS ALPHA ARM"@@@ +@@@syms="$syms I386 M68K SPARC MIPS ALPHA ARM POWERPC"@@@ ' osarch="$opsys" @@ -73,6 +73,7 @@ OPSYS=`echo $opsys | tr '[a-z]' '[A-Z]'` ARCH=`echo $arch | tr '[a-z]' '[A-Z]'` changequote([,])dnl +CFLAG="-D_GNU_SOURCE $CFLAGS" AC_CONFIG_HEADER(config.h) AC_SUBST(opsys) AC_DEFINE_UNQUOTED($OPSYS) @@ -125,7 +126,7 @@ AC_HEADER_MAJOR AC_SIG_ATOMIC_T AC_CHECK_LIB(nsl, main) AC_CHECK_FUNCS(sigaction strerror strsignal pread sys_siglist _sys_siglist getdents mctl putpmsg prctl sendmsg) -AC_CHECK_HEADERS(sys/filio.h sys/asynch.h sys/stream.h sys/tiuser.h sys/sysconfig.h asm/sigcontext.h) +AC_CHECK_HEADERS(sys/filio.h sys/asynch.h sys/stream.h sys/tiuser.h sys/sysconfig.h asm/sigcontext.h ioctls.h sys/ioctl.h sys/ptrace.h termio.h) AC_DECL_SYS_ERRLIST AC_DECL_SYS_SIGLIST AC_DECL__SYS_SIGLIST diff --git a/file.c b/file.c index b47efc20..63a7ccea 100644 --- a/file.c +++ b/file.c @@ -283,21 +283,19 @@ struct tcb *tcp; if (entering(tcp)) { if (tcp->u_arg[4] == SEEK_SET) tprintf("%ld, %llu, ", tcp->u_arg[0], - (((unsigned long long int) tcp->u_arg[1]) << 32 - | (unsigned long) tcp->u_arg[2])); + (((long long int) tcp->u_arg[1]) << 32 + | (unsigned long long) tcp->u_arg[2])); else tprintf("%ld, %lld, ", tcp->u_arg[0], (((long long int) tcp->u_arg[1]) << 32 - | (unsigned long) tcp->u_arg[2])); + | (unsigned long long) tcp->u_arg[2])); } else { - if (syserror(tcp)) + long long int off; + if (syserror(tcp) || umove(tcp, tcp->u_arg[3], &off) < 0) tprintf("%#lx, ", tcp->u_arg[3]); - else { - long long int off; - umove(tcp, tcp->u_arg[3], &off); - tprintf("{%lld}, ", off); - } + else + tprintf("[%llu], ", off); printxval(whence, tcp->u_arg[4], "SEEK_???"); } return 0; @@ -764,7 +762,8 @@ static struct xlat fsmagic[] = { { 0x9660, "ISOFS_SUPER_MAGIC" }, { 0x137f, "MINIX_SUPER_MAGIC" }, { 0x138f, "MINIX_SUPER_MAGIC2" }, - { 0x2468, "NEW_MINIX_SUPER_MAGIC" }, + { 0x2468, "MINIX2_SUPER_MAGIC" }, + { 0x2478, "MINIX2_SUPER_MAGIC2" }, { 0x4d44, "MSDOS_SUPER_MAGIC" }, { 0x6969, "NFS_SUPER_MAGIC" }, { 0x9fa0, "PROC_SUPER_MAGIC" }, @@ -814,7 +813,7 @@ long addr; tprintf("{f_type=%s, f_fbsize=%u, f_blocks=%u, f_bfree=%u, ", sprintfstype(statbuf.f_type), statbuf.f_bsize, statbuf.f_blocks, statbuf.f_bfree); - tprintf("f_bavail=%u, f_files=%u, f_ffree=%u, f_namelen=%u}", + tprintf("f_bavail=%u, f_files=%u, f_ffree=%u, f_namelen=%u", statbuf.f_bavail,statbuf.f_files, statbuf.f_ffree, statbuf.f_namelen); #else /* !ALPHA */ tprintf("{f_type=%s, f_bsize=%lu, f_blocks=%lu, f_bfree=%lu, ", @@ -826,7 +825,7 @@ long addr; (unsigned long)statbuf.f_files, (unsigned long)statbuf.f_ffree); #ifdef linux - tprintf(", f_namelen=%lu}", (unsigned long)statbuf.f_namelen); + tprintf(", f_namelen=%lu", (unsigned long)statbuf.f_namelen); #endif /* linux */ #endif /* !ALPHA */ tprintf("}"); @@ -1296,7 +1295,7 @@ struct tcb *tcp; if (syserror(tcp)) tprintf("%#lx", tcp->u_arg[0]); else - printstr(tcp, tcp->u_arg[0], tcp->u_arg[1]); + printpathn(tcp, tcp->u_arg[0], tcp->u_rval - 1); tprintf(", %lu", tcp->u_arg[1]); } return 0; diff --git a/io.c b/io.c index 4e00fe4e..543772ad 100644 --- a/io.c +++ b/io.c @@ -93,7 +93,7 @@ struct tcb *tcp; tprintf("{"); printstr(tcp, (long) iov[i].iov_base, iov[i].iov_len); - tprintf(", %u}", iov[i].iov_len); + tprintf(", %lu}", (unsigned long)iov[i].iov_len); } tprintf("]"); } @@ -129,7 +129,7 @@ struct tcb *tcp; tprintf("{"); printstr(tcp, (long) iov[i].iov_base, iov[i].iov_len); - tprintf(", %u}", iov[i].iov_len); + tprintf(", %lu}", (unsigned long)iov[i].iov_len); } tprintf("]"); } @@ -186,7 +186,8 @@ struct tcb *tcp; tprintf("%#lx", tcp->u_arg[1]); else printstr(tcp, tcp->u_arg[1], tcp->u_rval); - tprintf(", %lu, %lu", tcp->u_arg[2], tcp->u_arg[3]); + tprintf(", %lu, %llu", tcp->u_arg[2], + *(unsigned long long *)&tcp->u_arg[3]); } return 0; } @@ -198,7 +199,27 @@ struct tcb *tcp; if (entering(tcp)) { tprintf("%ld, ", tcp->u_arg[0]); printstr(tcp, tcp->u_arg[1], tcp->u_arg[2]); - tprintf(", %lu, %lu", tcp->u_arg[2], tcp->u_arg[3]); + tprintf(", %lu, %llu", tcp->u_arg[2], + *(unsigned long long *)&tcp->u_arg[3]); + } + return 0; +} + +int +sys_sendfile(tcp) +struct tcb *tcp; +{ + if (entering(tcp)) { + off_t offset; + + tprintf("%ld, %ld, ", tcp->u_arg[0], tcp->u_arg[1]); + if (!tcp->u_arg[2]) + tprintf("NULL"); + else if (umove(tcp, tcp->u_arg[2], &offset) < 0) + tprintf("%#lx", tcp->u_arg[2]); + else + tprintf("[%lu]", offset); + tprintf(", %lu", tcp->u_arg[3]); } return 0; } diff --git a/linux/dummy.h b/linux/dummy.h index 3cc87fbe..1535127d 100644 --- a/linux/dummy.h +++ b/linux/dummy.h @@ -56,7 +56,6 @@ #define sys_sched_get_priority_max printargs #define sys_sched_get_priority_min printargs #define sys_sched_rr_get_interval printargs -#define sys_mremap printargs /* like another call */ #define sys_uselib sys_chdir diff --git a/linux/syscall.h b/linux/syscall.h index ed4c620c..213e29ea 100644 --- a/linux/syscall.h +++ b/linux/syscall.h @@ -81,6 +81,7 @@ int sys_getresuid(), sys_getresgid(), sys_pread(), sys_pwrite(), sys_getcwd(); int sys_sigaltstack(), sys_rt_sigprocmask(), sys_rt_sigaction(); int sys_rt_sigpending(), sys_rt_sigsuspend(), sys_rt_sigqueueinfo(); int sys_rt_sigtimedwait(), sys_prctl(), sys_poll(), sys_vfork(); +int sys_sendfile(); /* sys_socketcall subcalls */ @@ -153,3 +154,6 @@ int osf_statfs(), osf_fstatfs(), sys_getpagesize(), sys_madvise(); int sys_setpgrp(), sys_gethostname(), sys_getdtablesize(), sys_utimes(); int sys_capget(), sys_capset(); +#ifdef M68K +int sys_cacheflush(); +#endif diff --git a/linux/syscallent.h b/linux/syscallent.h index da783026..0b66a01b 100644 --- a/linux/syscallent.h +++ b/linux/syscallent.h @@ -44,7 +44,11 @@ { 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 */ @@ -151,12 +155,16 @@ { 2, TP, sys_clone, "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 */ { 2, 0, sys_create_module, "create_module" }, /* 127 */ - { 4, 0, sys_init_module, "init_module" }, /* 128 */ + { 2, 0, sys_init_module, "init_module" }, /* 128 */ { 1, 0, sys_delete_module, "delete_module" }, /* 129 */ { 1, 0, sys_get_kernel_syms, "get_kernel_syms"}, /* 130 */ { 4, 0, sys_quotactl, "quotactl" }, /* 131 */ @@ -173,31 +181,35 @@ { 5, 0, sys_select, "select" }, /* 142 */ { 2, 0, sys_flock, "flock" }, /* 143 */ { 3, 0, sys_msync, "msync" }, /* 144 */ - { 5, 0, sys_readv, "readv" }, /* 145 */ - { 5, 0, sys_writev, "writev" }, /* 146 */ - { 5, 0, sys_getsid, "getsid" }, /* 147 */ - { 5, 0, sys_fdatasync, "fdatasync" }, /* 148 */ - { 5, 0, sys_sysctl, "_sysctl" }, /* 149 */ - { 5, 0, sys_mlock, "mlock" }, /* 150 */ - { 5, 0, sys_munlock, "munlock" }, /* 151 */ - { 5, 0, sys_mlockall, "mlockall" }, /* 152 */ - { 5, 0, sys_munlockall, "munlockall" }, /* 153 */ - { 5, 0, sys_sched_setparam, "sched_setparam"}, /* 154 */ - { 5, 0, sys_sched_getparam, "sched_getparam"}, /* 155 */ - { 5, 0, sys_sched_setscheduler, "sched_setscheduler"}, /* 156 */ - { 5, 0, sys_sched_getscheduler, "sched_getscheduler"}, /* 157 */ - { 5, 0, sys_sched_yield, "sched_yield"}, /* 158 */ - { 5, 0, sys_sched_get_priority_max,"sched_get_priority_max"}, /* 159 */ - { 5, 0, sys_sched_get_priority_min,"sched_get_priority_min"}, /* 160 */ - { 5, 0, sys_sched_rr_get_interval,"sched_rr_get_interval"}, /* 161 */ - { 5, 0, sys_nanosleep, "nanosleep" }, /* 162 */ - { 5, 0, sys_mremap, "mremap" }, /* 163 */ + { 3, 0, sys_readv, "readv" }, /* 145 */ + { 3, 0, sys_writev, "writev" }, /* 146 */ + { 1, 0, sys_getsid, "getsid" }, /* 147 */ + { 1, 0, sys_fdatasync, "fdatasync" }, /* 148 */ + { 1, 0, sys_sysctl, "_sysctl" }, /* 149 */ + { 1, 0, sys_mlock, "mlock" }, /* 150 */ + { 2, 0, sys_munlock, "munlock" }, /* 151 */ + { 2, 0, sys_mlockall, "mlockall" }, /* 152 */ + { 1, 0, sys_munlockall, "munlockall" }, /* 153 */ + { 0, 0, sys_sched_setparam, "sched_setparam"}, /* 154 */ + { 2, 0, sys_sched_getparam, "sched_getparam"}, /* 155 */ + { 3, 0, sys_sched_setscheduler, "sched_setscheduler"}, /* 156 */ + { 1, 0, sys_sched_getscheduler, "sched_getscheduler"}, /* 157 */ + { 0, 0, sys_sched_yield, "sched_yield"}, /* 158 */ + { 1, 0, sys_sched_get_priority_max,"sched_get_priority_max"}, /* 159 */ + { 1, 0, sys_sched_get_priority_min,"sched_get_priority_min"}, /* 160 */ + { 2, 0, sys_sched_rr_get_interval,"sched_rr_get_interval"}, /* 161 */ + { 2, 0, sys_nanosleep, "nanosleep" }, /* 162 */ + { 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, sys_query_module, "query_module" }, /* 167 */ { 3, 0, sys_poll, "poll" }, /* 168 */ - { 5, 0, printargs, "nfsservctl" }, /* 169 */ + { 3, 0, printargs, "nfsservctl" }, /* 169 */ { 3, 0, sys_setresgid, "setresgid" }, /* 170 */ { 3, 0, sys_getresgid, "getresgid" }, /* 171 */ { 5, 0, printargs, "prctl" }, /* 172 */ @@ -211,12 +223,16 @@ { 5, TF, sys_pread, "pread" }, /* 180 */ { 5, TF, sys_pwrite, "pwrite" }, /* 181 */ +#ifdef M68K + { 3, TF, sys_chown, "lchown" }, /* 182 */ +#else { 3, TF, sys_chown, "chown" }, /* 182 */ +#endif { 2, 0, sys_getcwd, "getcwd" }, /* 183 */ - { 5, 0, printargs, "capget" }, /* 184 */ - { 5, 0, printargs, "capset" }, /* 185 */ - { 5, TS, sys_sigaltstack, "sigaltstack" }, /* 186 */ - { 5, TF, printargs, "sendfile" }, /* 187 */ + { 2, 0, sys_capget, "capget" }, /* 184 */ + { 2, 0, sys_capset, "capset" }, /* 185 */ + { 2, TS, sys_sigaltstack, "sigaltstack" }, /* 186 */ + { 4, TF, sys_sendfile, "sendfile" }, /* 187 */ { 5, 0, printargs, "SYS_188" }, /* 188 */ { 5, 0, printargs, "SYS_189" }, /* 189 */ { 0, TP, sys_vfork, "vfork" }, /* 190 */ diff --git a/mem.c b/mem.c index 73076163..7a394123 100644 --- a/mem.c +++ b/mem.c @@ -31,11 +31,10 @@ #include "defs.h" -#ifdef LINUXSPARC +#ifdef LINUX #include -#else -#include #endif +#include #if defined(LINUX) && defined(__i386__) #include @@ -170,6 +169,26 @@ struct tcb *tcp; return 0; } +#ifdef LINUX + +static struct xlat mremap_flags[] = { + { MREMAP_MAYMOVE, "MREMAP_MAYMOVE" }, +}; + +int +sys_mremap(tcp) +struct tcb *tcp; +{ + if (entering(tcp)) { + tprintf("%#lx, %lu, %lu, ", tcp->u_arg[0], tcp->u_arg[1], + tcp->u_arg[2]); + printflags(mremap_flags, tcp->u_arg[3]); + } + return RVAL_HEX; +} + +#endif /* LINUX */ + #ifdef MS_ASYNC static struct xlat mctl_sync[] = { diff --git a/net.c b/net.c index e2319646..c6aad71e 100644 --- a/net.c +++ b/net.c @@ -384,9 +384,14 @@ long addr; { struct msghdr msg; - umove(tcp, addr, &msg); - tprintf("{msg_name=%s, msg_namelen=%u, msg_iov=%#lx, msg_iovlen=%u, ", - (char *) msg.msg_name, msg.msg_namelen, + if (umove(tcp, addr, &msg) < 0) { + tprintf("%#lx", addr); + return; + } + tprintf("{msg_name="); + printstr(tcp, (long) msg.msg_name, msg.msg_namelen); + tprintf(", msg_namelen=%u, msg_iov=%#lx, msg_iovlen=%u, ", + msg.msg_namelen, (unsigned long) msg.msg_iov, msg.msg_iovlen); #ifdef HAVE_MSG_CONTROL tprintf("msg_control=%#lx, msg_controllen=%u, msg_flags=%#x}", @@ -706,17 +711,17 @@ struct tcb *tcp; break; #endif /* PF_IPX */ default: - tprintf(", %lu", tcp->u_arg[2]); + tprintf("%lu", tcp->u_arg[2]); break; } } else { if (syserror(tcp)) { - tprintf("%#lx", tcp->u_arg[3]); + tprintf(", %#lx", tcp->u_arg[3]); return 0; } #ifdef LINUX if (umoven(tcp, tcp->u_arg[3], sizeof fds, (char *) fds) < 0) - tprintf("[...]"); + tprintf(", [...]"); else tprintf(", [%u, %u]", fds[0], fds[1]); #endif /* LINUX */ diff --git a/process.c b/process.c index 388ab97f..40a903de 100644 --- a/process.c +++ b/process.c @@ -51,7 +51,12 @@ #endif #ifdef LINUX +#ifndef __GLIBC__ #include +#endif +#include +#undef GETGROUPS_T +#define GETGROUPS_T __kernel_gid_t #endif /* LINUX */ #ifdef HAVE_PRCTL @@ -476,18 +481,24 @@ sys_getresuid(tcp) struct tcb *tcp; { if (exiting(tcp)) { - uid_t res[3]; - if (umoven(tcp, tcp->u_arg[0], sizeof(pid_t), - (char *) &res[0]) < 0 - || umoven(tcp, tcp->u_arg[2], sizeof(pid_t), - (char *) &res[1]) < 0 - || umoven(tcp, tcp->u_arg[2], sizeof(pid_t), - (char *) &res[2]) < 0) - return -1; - tprintf("ruid %lu, euid %lu, suid %lu", - (unsigned long) res[0], - (unsigned long) res[1], - (unsigned long) res[2]); + __kernel_uid_t uid; + if (syserror(tcp)) + tprintf("%#lx, %#lx, %#lx", tcp->u_arg[0], + tcp->u_arg[1], tcp->u_arg[2]); + else { + if (umove(tcp, tcp->u_arg[0], &uid) < 0) + tprintf("%#lx, ", tcp->u_arg[0]); + else + tprintf("ruid %lu, ", (unsigned long) uid); + if (umove(tcp, tcp->u_arg[0], &uid) < 0) + tprintf("%#lx, ", tcp->u_arg[0]); + else + tprintf("euid %lu, ", (unsigned long) uid); + if (umove(tcp, tcp->u_arg[0], &uid) < 0) + tprintf("%#lx", tcp->u_arg[0]); + else + tprintf("suid %lu", (unsigned long) uid); + } } return 0; } @@ -497,18 +508,24 @@ sys_getresgid(tcp) struct tcb *tcp; { if (exiting(tcp)) { - uid_t res[3]; - if (umoven(tcp, tcp->u_arg[0], sizeof(pid_t), - (char *) &res[0]) < 0 - || umoven(tcp, tcp->u_arg[2], sizeof(pid_t), - (char *) &res[1]) < 0 - || umoven(tcp, tcp->u_arg[2], sizeof(pid_t), - (char *) &res[2]) < 0) - return -1; - tprintf("rgid %lu, egid %lu, sgid %lu", - (unsigned long) res[0], - (unsigned long) res[1], - (unsigned long) res[2]); + __kernel_gid_t gid; + if (syserror(tcp)) + tprintf("%#lx, %#lx, %#lx", tcp->u_arg[0], + tcp->u_arg[1], tcp->u_arg[2]); + else { + if (umove(tcp, tcp->u_arg[0], &gid) < 0) + tprintf("%#lx, ", tcp->u_arg[0]); + else + tprintf("rgid %lu, ", (unsigned long) gid); + if (umove(tcp, tcp->u_arg[0], &gid) < 0) + tprintf("%#lx, ", tcp->u_arg[0]); + else + tprintf("egid %lu, ", (unsigned long) gid); + if (umove(tcp, tcp->u_arg[0], &gid) < 0) + tprintf("%#lx", tcp->u_arg[0]); + else + tprintf("sgid %lu", (unsigned long) gid); + } } return 0; } diff --git a/signal.c b/signal.c index 39db0b08..23cb4c83 100644 --- a/signal.c +++ b/signal.c @@ -48,7 +48,9 @@ #endif /* SVR4 */ #ifdef LINUX +#ifndef __GLIBC__ #include +#endif #ifdef HAVE_ASM_SIGCONTEXT_H #include #ifdef SPARC @@ -85,7 +87,7 @@ struct sigcontext_struct { }; #else /* !I386 */ #ifdef M68K -struct sigcontext_struct +struct sigcontext { unsigned long sc_mask; unsigned long sc_usp; @@ -216,7 +218,7 @@ int sig; return signalent[sig]; #ifdef SIGRTMIN } else if (sig >= __SIGRTMIN && sig <= __SIGRTMAX) { - sprintf(buf, "SIGRT_%d", sig - __SIGRTMIN); + sprintf(buf, "SIGRT_%ld", (long)(sig - __SIGRTMIN)); return buf; #endif /* SIGRTMIN */ } else { @@ -336,7 +338,7 @@ int sig; char buf[1024]; char *s; int i; - int signalled, blocked, ignored, caught; + unsigned int signalled, blocked, ignored, caught; /* This is incredibly costly but it's worth it. */ sprintf(sname, "/proc/%d/stat", tcp->pid); @@ -357,7 +359,7 @@ int sig; break; } } - if (sscanf(s, "%d%d%d%d", + if (sscanf(s, "%u%u%u%u", &signalled, &blocked, &ignored, &caught) != 4) { fprintf(stderr, "/proc/pid/stat format error\n"); return 1; @@ -561,6 +563,11 @@ struct old_sigaction { unsigned long sa_flags; void (*sa_restorer)(void); }; +#define SA_HANDLER __sa_handler +#endif /* LINUX */ + +#ifndef SA_HANDLER +#define SA_HANDLER sa_handler #endif int @@ -589,7 +596,7 @@ struct tcb *tcp; else if (umove(tcp, addr, &sa) < 0) tprintf("{...}"); else { - switch ((long) sa.__sa_handler) { + switch ((long) sa.SA_HANDLER) { case (long) SIG_ERR: tprintf("{SIG_ERR}"); break; @@ -612,7 +619,7 @@ struct tcb *tcp; kill(tcp->pid, SIGSTOP); } #endif /* !SVR4 */ - tprintf("{%#lx, ", (long) sa.__sa_handler); + tprintf("{%#lx, ", (long) sa.SA_HANDLER); long_to_sigset(sa.sa_mask, &sigset); printsigmask(&sigset, 0); tprintf(", "); @@ -723,7 +730,7 @@ struct tcb *tcp; #else /* !POWERPC */ #ifdef M68K long usp; - struct sigcontext_struct sc; + struct sigcontext sc; if (entering(tcp)) { tcp->u_arg[0] = 0; diff --git a/sock.c b/sock.c index dc031905..327a3de8 100644 --- a/sock.c +++ b/sock.c @@ -36,8 +36,12 @@ #endif #ifdef ALPHA +#ifdef HAVE_SYS_IOCTL_H +#include +#elif defined(HAVE_IOCTLS_H) #include #endif +#endif int sock_ioctl(tcp, code, arg) diff --git a/stream.c b/stream.c index f242b638..0ddb5f12 100644 --- a/stream.c +++ b/stream.c @@ -78,7 +78,7 @@ int getting; if (getting) tprintf("maxlen=%d, ", sbp->maxlen); tprintf("len=%d, buf=", sbp->len); - printstr(tcp, (int) sbp->buf, sbp->len); + printstr(tcp, (unsigned long) sbp->buf, sbp->len); tprintf("}"); } } diff --git a/system.c b/system.c index 16c1648c..506be614 100644 --- a/system.c +++ b/system.c @@ -45,8 +45,9 @@ #include #include -#ifdef LINUX +#ifdef __NR_personality /* Workaround for kernel namespace pollution. */ +#define _LINUX_PTRACE_H #define sys_personality kernel_sys_personality #include #undef sys_personality @@ -56,6 +57,10 @@ #include #endif +#ifdef __NR_cacheflush +#include +#endif + static struct xlat mount_flags[] = { { MS_RDONLY, "MS_RDONLY" }, { MS_NOSUID, "MS_NOSUID" }, @@ -127,6 +132,52 @@ struct tcb *tcp; return 0; } +#ifdef M68K +static struct xlat cacheflush_scope[] = { +#ifdef FLUSH_SCOPE_LINE + { FLUSH_SCOPE_LINE, "FLUSH_SCOPE_LINE" }, +#endif +#ifdef FLUSH_SCOPE_PAGE + { FLUSH_SCOPE_PAGE, "FLUSH_SCOPE_PAGE" }, +#endif +#ifdef FLUSH_SCOPE_ALL + { FLUSH_SCOPE_ALL, "FLUSH_SCOPE_ALL" }, +#endif + { 0, NULL }, +}; + +static struct xlat cacheflush_flags[] = { +#ifdef FLUSH_CACHE_BOTH + { FLUSH_CACHE_BOTH, "FLUSH_CACHE_BOTH" }, +#endif +#ifdef FLUSH_CACHE_DATA + { FLUSH_CACHE_DATA, "FLUSH_CACHE_DATA" }, +#endif +#ifdef FLUSH_CACHE_INSN + { FLUSH_CACHE_INSN, "FLUSH_CACHE_INSN" }, +#endif + { 0, NULL }, +}; + +int +sys_cacheflush(tcp) +struct tcb *tcp; +{ + if (entering(tcp)) { + /* addr */ + tprintf("%#lx, ", tcp->u_arg[0]); + /* scope */ + printxval(cacheflush_scope, tcp->u_arg[1], "FLUSH_SCOPE_???"); + tprintf(", "); + /* flags */ + printflags(cacheflush_flags, tcp->u_arg[2]); + /* len */ + tprintf(", %lu", tcp->u_arg[3]); + } + return 0; +} +#endif /* M68K */ + #endif /* LINUX */ #ifdef SUNOS4 diff --git a/term.c b/term.c index 5850e337..e60f0ed3 100644 --- a/term.c +++ b/term.c @@ -29,10 +29,12 @@ #include "defs.h" -#ifdef __GLIBC__ +#ifdef HAVE_TERMIO_H #include -#endif /* __GLIBC__ */ +#endif /* HAVE_TERMIO_H */ + #include + #ifdef HAVE_SYS_FILIO_H #include #endif @@ -330,6 +332,12 @@ long code, arg; #endif #ifdef TIOCSINTR case TIOCSINTR: +#endif +#ifdef TIOCSPTLCK + case TIOCSPTLCK: +#endif +#ifdef TIOCGPTN + case TIOCGPTN: #endif tprintf(", "); printnum(tcp, arg, "%d"); diff --git a/util.c b/util.c index 93b3c41e..d1c80b8d 100644 --- a/util.c +++ b/util.c @@ -44,9 +44,15 @@ # define PTRACE_PEEKUSR PTRACE_PEEKUSER #endif #ifdef LINUX +#ifndef __GLIBC__ #include +#endif #endif /* LINUX */ +#ifdef HAVE_SYS_PTRACE_H +#include +#endif + #ifdef SUNOS4_KERNEL_ARCH_KLUDGE #include #endif /* SUNOS4_KERNEL_ARCH_KLUDGE */ @@ -356,7 +362,7 @@ int len; return; } } - outend = outstr + max_strlen; + outend = outstr + max_strlen * 2 - 10; if (len < 0) { n = max_strlen; if (umovestr(tcp, addr, n, (char *) str) < 0) {