]> granicus.if.org Git - strace/log
strace
8 years agoRobustify mpers.awk against invalid input
Dmitry V. Levin [Tue, 15 Dec 2015 00:26:46 +0000 (00:26 +0000)]
Robustify mpers.awk against invalid input

Make mpers.awk check that accessed elements of the main array that
are expected to have non-empty values really meet this requirement.

* mpers.awk (array_get): New function.
(what_is, END): Use it.
* mpers_test.sh: Use a more complicated type to test mpers machinery.

Reported-by: Mike Frysinger <vapier@gentoo.org>
8 years agoReplace HAVE_LITTLE_ENDIAN_LONG_LONG with WORDS_BIGENDIAN
Dmitry V. Levin [Mon, 14 Dec 2015 11:57:59 +0000 (11:57 +0000)]
Replace HAVE_LITTLE_ENDIAN_LONG_LONG with WORDS_BIGENDIAN

* defs.h: Use WORDS_BIGENDIAN instead of HAVE_LITTLE_ENDIAN_LONG_LONG.
* configure.ac (AC_LITTLE_ENDIAN_LONG_LONG): Remove.
* m4/long_long.m4: Remove.

8 years agoRemove unused parser of xmknod syscall
Dmitry V. Levin [Mon, 14 Dec 2015 00:08:24 +0000 (00:08 +0000)]
Remove unused parser of xmknod syscall

The last reference to this parser was removed by commit
v4.10-45-gdf4dd8b.

* mknod.c [SPARC || SPARC64] (SYS_FUNC(xmknod)): Remove.

8 years agotests/restart_syscall: add a workaround for old arm kernels
Dmitry V. Levin [Sun, 13 Dec 2015 01:12:55 +0000 (01:12 +0000)]
tests/restart_syscall: add a workaround for old arm kernels

As arm kernels used to overwrite ARM_r0 with -EINTR after
ERESTART_RESTARTBLOCK, update regexp to workaround this.

* tests/restart_syscall.c (main) [__arm__]: Add 0xfffffffc as a valid
alternative value for the first argument of restarted nanosleep syscall.

8 years agotests/.gitignore: add ksysent.h
Dmitry V. Levin [Sat, 12 Dec 2015 00:02:16 +0000 (00:02 +0000)]
tests/.gitignore: add ksysent.h

tests/ksysent.h is a generated file listed in CLEANFILES.
This change complements commit v4.10-566-gbab4ef4.

* tests/.gitignore: Add ksysent.h.

8 years agoaarch64: make arm registers unsigned
Dmitry V. Levin [Fri, 11 Dec 2015 10:52:42 +0000 (10:52 +0000)]
aarch64: make arm registers unsigned

Follow the x86_64 example and define registers in arm_pt_regs
as unsigned, to avoid potential sign extension bugs.

This also fixes --enable-gcc-Werror build.

* linux/aarch64/arch_regs.c (arm_pt_regs): Change uregs's type
from int to uint32_t.

Reported-by: Sergey Bolshakov <sbolshakov@altlinux.org>
8 years agotests: add ksysent.test
Dmitry V. Levin [Thu, 10 Dec 2015 02:06:25 +0000 (02:06 +0000)]
tests: add ksysent.test

Check that syscall names and numbers defined in syscallent files
match kernel __NR_* constants defined by <asm/unistd.h>.

Tested on various platforms, including the following combinations
of architectures and kernel headers:

x86_64: 4.4-rc, 4.3, 4.2, 4.1, 3.19, 3.17, 3.16, 3.12, 3.11,
3.10-rhel, 2.6.32-rhel, 2.6.27-sle, 2.6.18-rhel
i386: 4.4-rc, 4.3, 4.2, 4.1, 3.19, 3.17, 3.16, 3.11,
3.10-rhel, 2.6.32-rhel, 2.6.27-sle, 2.6.18-rhel
aarch64: 4.4-rc
alpha: 4.3
arm eabi: 4.4-rc, 4.2, 4.1
hppa: 3.18
ia64: 3.18
mips o32: 4.1
ppc: 3.18
ppc64: 3.10-rhel, 2.6.32-rhel
s390: 3.18
s390x: 3.18
sparc: 4.1
sparc: 3.18
x32: 3.19

The only platform which is known at this moment to fail the test
is CentOS-5 provided by OBS.  On x86_64 instance it fails with
error: "prlimit64" syscall #300 is "fanotify_init" in syscallent.h
and on i586 it similarly fails with
error: "prlimit64" syscall #338 is "fanotify_init" in syscallent.h
So this is a real platform bug that is not likely to be worked around
on the strace side.

* tests/ksysent.c: New file.
* tests/ksysent.sed: Likewise.
* tests/ksysent.test: New test.
* tests/Makefile.am (AM_CPPFLAGS): Add -I$(builddir).
(check_PROGRAMS): Add ksysent.
(TESTS): Add ksysent.test.
(EXTRA_DIST): Add ksysent.sed.
(ksysent.h): New rule.
(BUILT_SOURCES, CLEANFILES): Add ksysent.h.
* tests/.gitignore: Add ksysent.

8 years agoDocument that syscall names match kernel __NR_* constants
Dmitry V. Levin [Wed, 9 Dec 2015 15:55:33 +0000 (15:55 +0000)]
Document that syscall names match kernel __NR_* constants

* strace.1: Note syscall naming difference between architectures
and the rule of choosing the right syscall name in each case.

8 years agoia64: print all ia32 syscalls using printargs
Dmitry V. Levin [Wed, 9 Dec 2015 02:07:44 +0000 (02:07 +0000)]
ia64: print all ia32 syscalls using printargs

Printing of ia32 syscalls on ia64 must have been broken for a long time.
Do not pretend that it works, print ia32 syscalls using printargs
instead.

* linux/ia64/syscallent.h: Remove all redefinitions of sys_* macros.
Stop including"../dummy.h".  Include "../i386/syscallent.h" with
SYS_FUNC_NAME macro temporarily redirected to printargs.

8 years agoFix build on architectures for which arch_sigreturn is not implemented
Dmitry V. Levin [Wed, 9 Dec 2015 11:38:56 +0000 (11:38 +0000)]
Fix build on architectures for which arch_sigreturn is not implemented

This complements commit 527b42ff8da3f52fa7c48eb766b2b57fb0f0b977.

* linux/arch_sigreturn.c (arch_sigreturn): Define.

8 years agoaarch64: swap 64-bit and 32-bit personalities
Dmitry V. Levin [Wed, 9 Dec 2015 00:43:39 +0000 (00:43 +0000)]
aarch64: swap 64-bit and 32-bit personalities

Let native 64-bit personality be personality 0, and 32-bit personality
be personality 1, to follow the traditional layout used for other
architectures.

* defs.h [AARCH64]: Swap PERSONALITY0_WORDSIZE and
PERSONALITY1_WORDSIZE, remove DEFAULT_PERSONALITY.
[AARCH64 && HAVE_M32_MPERS]: Rename PERSONALITY1_* to PERSONALITY0_*.
* file.c [AARCH64 || defined X86_64 || defined X32]: Define
STAT32_PERSONALITY for AARCH64 as well.
* syscall.c (update_personality) [AARCH64]: Adjust PERSONALITY_NAMES.
* linux/aarch64/errnoent1.h: Adjust comment.
* linux/aarch64/get_error.c (get_error): Adjust tcp->currpers check.
* linux/aarch64/get_syscall_args.c (get_syscall_args): Likewise.
* linux/arm/arch_sigreturn.c (arch_sigreturn) [AARCH64]: Likewise.
* linux/aarch64/get_scno.c (arch_get_scno): Adjust update_personality
invocations.
* linux/aarch64/ioctls_arch0.h: Swap with ...
* linux/aarch64/ioctls_arch1.h: ... this file.
* linux/aarch64/ioctls_inc0.h: Swap with ...
* linux/aarch64/ioctls_inc1.h: ... this file.
* linux/aarch64/syscallent.h: Swap with ...
* linux/aarch64/syscallent1.h: ... this file.

8 years agomips: fix fadvise64 syscall entries
Dmitry V. Levin [Tue, 8 Dec 2015 22:32:33 +0000 (22:32 +0000)]
mips: fix fadvise64 syscall entries

* linux/mips/syscallent-n32.h [6216]: Change syscall handler
from fadvise64 to fadvise64_64.
* linux/mips/syscallent-n64.h [5215]: Rename from "fadvise64_64"
to "fadvise64"
* linux/mips/syscallent-o32.h [4254]: Likewise.

8 years agoxtensa: wire up syncfs syscall
Dmitry V. Levin [Tue, 8 Dec 2015 21:06:26 +0000 (21:06 +0000)]
xtensa: wire up syncfs syscall

* linux/xtensa/syscallent.h [179]: Add syncfs entry.

8 years agosh, sh64: fix syscall entries
Dmitry V. Levin [Tue, 8 Dec 2015 20:58:38 +0000 (20:58 +0000)]
sh, sh64: fix syscall entries

* linux/sh/syscallent.h [322]: Fix timerfd_create entry.
* linux/sh64/syscallent.h [350]: Likewise.
[0]: Fix restart_syscall entry.

8 years agopowerpc, powerpc64: wire up mlock2 syscall
Dmitry V. Levin [Tue, 8 Dec 2015 20:49:46 +0000 (20:49 +0000)]
powerpc, powerpc64: wire up mlock2 syscall

* linux/powerpc/syscallent.h [378]: Add mlock2 entry.
* linux/powerpc64/syscallent.h: Likewise.

8 years agohppa: fix syscall entries
Dmitry V. Levin [Tue, 8 Dec 2015 20:43:52 +0000 (20:43 +0000)]
hppa: fix syscall entries

* linux/hppa/syscallent.h: Swap [343] and [344] entries.

8 years agoavr32: update syscall entries
Dmitry V. Levin [Tue, 8 Dec 2015 20:37:22 +0000 (20:37 +0000)]
avr32: update syscall entries

* linux/avr32/syscallent.h [0]: Rename from setup to restart_syscall.
[284 ... 320]: New entries.

8 years agom68k: fix syscall names
Dmitry V. Levin [Tue, 8 Dec 2015 20:20:21 +0000 (20:20 +0000)]
m68k: fix syscall names

* linux/m68k/syscallent.h [335]: Rename "atomic_comxchg_32"
to "atomic_cmpxchg_32".

8 years agosparc: update syscall names
Dmitry V. Levin [Tue, 8 Dec 2015 18:24:42 +0000 (18:24 +0000)]
sparc: update syscall names

* linux/sparc/syscallent.h [160]: Rename "sched_setaffinity"
to "sched_set_affinity".
[161]: Rename "sched_getaffinity" to "sched_get_affinity".

8 years agopowerpc, powerpc64: update syscall names
Dmitry V. Levin [Tue, 8 Dec 2015 18:20:21 +0000 (18:20 +0000)]
powerpc, powerpc64: update syscall names

* linux/powerpc/syscallent.h [201]: Rename "MOL" to "multiplexer".
[225]: Rename "tux" to "tuxcall".
[256]: Rename "debug_setcontext" to "sys_debug_setcontext".
* linux/powerpc64/syscallent.h: Likewise.

8 years agoalpha: update syscall entries
Dmitry V. Levin [Tue, 8 Dec 2015 18:10:21 +0000 (18:10 +0000)]
alpha: update syscall entries

* linux/alpha/syscallent.h [224 ... 228]: Add stub entries.
[100]: Rename "osf_getpriority" to "getpriority".
[255]: Rename "osf_subsysinfo" to "osf_subsys_info".
[303]: Rename "adjtimex32" to "old_adjtimex".
[319]: Rename "sysctl" to "_sysctl".
[320]: Remove.

8 years agoFix mmap syscall entries
Dmitry V. Levin [Tue, 8 Dec 2015 18:13:58 +0000 (18:13 +0000)]
Fix mmap syscall entries

Change syscall names to match kernel __NR_* constants.

* linux/avr32/syscallent.h [90]: Rename "mmap" to "mmap2".
* linux/bfin/syscallent.h [90]: Rename "old_mmap" to "mmap".
* linux/i386/syscallent.h: Likewise.
* linux/m68k/syscallent.h: Likewise.
* linux/microblaze/syscallent.h: Likewise.
* linux/sh/syscallent.h: Likewise.
* linux/sh64/syscallent.h: Likewise.
* tests/mmap.c (main): Remove old_mmap from expected output.
* tests/mmap.test: Remove old_mmap from the list of mmap syscalls.

8 years agoFix select and _newselect syscall entries
Dmitry V. Levin [Tue, 8 Dec 2015 17:38:12 +0000 (17:38 +0000)]
Fix select and _newselect syscall entries

Change syscall names to match kernel __NR_* constants.
This reverts commit ddcf54969d253582ab2cfdcab8ede9cdae3fb171.

* linux/arm/syscallent.h [82]: Rename "oldselect" to "select".
[142]: Rename "select" to "_newselect".
* linux/bfin/syscallent.h: Likewise.
* linux/i386/syscallent.h: Likewise.
* linux/m68k/syscallent.h: Likewise.
* linux/microblaze/syscallent.h: Likewise.
* linux/powerpc/syscallent.h [82]: Likewise.
* linux/powerpc64/syscallent.h: Likewise.
* linux/sh/syscallent.h: Likewise.
* linux/sh64/syscallent.h: Likewise.
* linux/hppa/syscallent.h [142]: Rename "select" to "_newselect".
* linux/mips/syscallent-n32.h [6022]: Rename "select" to "_newselect".
* linux/mips/syscallent-n64.h [5022]: Likewise.
* linux/mips/syscallent-o32.h [4142]: Likewise.
* linux/s390/syscallent.h [142]: Rename "select" to "_newselect".
* linux/sparc/syscallent.h [230]: Rename "select" to "_newselect".
* tests/oldselect.test: Rename oldselect to select.  Convert
from match_grep to match_diff.
* tests/oldselect.expected: Likewise.
* xselect.c: New file, based on select.c.
* tests/_newselect.c: New file.
* tests/select.c: Replace with a wrapper around xselect.c.
* tests/select.test: Parametrize.
* tests/_newselect.test: New test.
* tests/Makefile.am (check_PROGRAMS): Add _newselect.
(TESTS): Add _newselect.test.
(EXTRA_DIST): Add xselect.c.
* tests/.gitignore: Add _newselect.

8 years agoFix exit syscall entries
Dmitry V. Levin [Tue, 8 Dec 2015 17:27:40 +0000 (17:27 +0000)]
Fix exit syscall entries

Change syscall names to match kernel __NR_* constants.

* linux/avr32/syscallent.h [1]: Rename "_exit" to "exit".
* linux/bfin/syscallent.h: Likewise.
* linux/i386/syscallent.h: Likewise.
* linux/m68k/syscallent.h: Likewise.
* linux/microblaze/syscallent.h: Likewise.
* linux/sh/syscallent.h: Likewise.
* linux/sh64/syscallent.h: Likewise.
* linux/x32/syscallent.h [60]: Rename "_exit" to "exit".
* linux/x86_64/syscallent.h: Likewise.

8 years agoFix pread64 and pwrite64 syscall entries
Dmitry V. Levin [Tue, 8 Dec 2015 16:52:06 +0000 (16:52 +0000)]
Fix pread64 and pwrite64 syscall entries

Change syscall names to match kernel __NR_* constants.

* linux/alpha/syscallent.h [349]: Rename "pread" to "pread64".
[350]: Rename "pwrite" to "pwrite64".
* linux/ia64/syscallent.h [1148]: Rename "pread" to "pread64".
[1149]: Rename "pwrite" to "pwrite64".
* linux/sh/syscallent.h [180]: Rename "pread" to "pread64".
[181]: Rename "pwrite" to "pwrite64".
* linux/sh64/syscallent.h: Likewise.
* linux/x32/syscallent.h [17]: Rename "pread" to "pread64".
[18]: Rename "pwrite" to "pwrite64".
* linux/x86_64/syscallent.h: Likewise.

8 years agotests: sort the list of tests
Dmitry V. Levin [Tue, 8 Dec 2015 17:33:52 +0000 (17:33 +0000)]
tests: sort the list of tests

* tests/Makefile.am (TESTS): Sort the list of regular tests.
* tests/.gitignore: Sort.

8 years agoia64: fix remap_file_pages syscall entry
Dmitry V. Levin [Tue, 8 Dec 2015 03:42:16 +0000 (03:42 +0000)]
ia64: fix remap_file_pages syscall entry

* linux/ia64/syscallent.h (1125): Set to remap_file_pages.

8 years agobfin, i386: remove sysentry for nonexistent security syscall
Dmitry V. Levin [Tue, 8 Dec 2015 02:49:39 +0000 (02:49 +0000)]
bfin, i386: remove sysentry for nonexistent security syscall

* linux/bfin/syscallent.h (223): Remove.
* linux/i386/syscallent.h: Likewise.

8 years agobuild: add -D_FILE_OFFSET_BITS=64 to _CPPFLAGS instead of _CFLAGS
Dmitry V. Levin [Tue, 8 Dec 2015 00:24:53 +0000 (00:24 +0000)]
build: add -D_FILE_OFFSET_BITS=64 to _CPPFLAGS instead of _CFLAGS

* tests/Makefile.am (fstat64_CFLAGS): Rename to fstat64_CPPFLAGS,
replace $(AM_CFLAGS) with $(AM_CPPFLAGS).
(fstatat64_CFLAGS): Rename to fstatat64_CPPFLAGS,
replace $(AM_CFLAGS) with $(AM_CPPFLAGS).
(ftruncate64_CFLAGS): Rename to ftruncate64_CPPFLAGS,
replace $(AM_CFLAGS) with $(AM_CPPFLAGS).
(lstat64_CFLAGS): Rename to lstat64_CPPFLAGS,
replace $(AM_CFLAGS) with $(AM_CPPFLAGS).
(mmap64_CFLAGS): Rename to mmap64_CPPFLAGS,
replace $(AM_CFLAGS) with $(AM_CPPFLAGS).
(newfstatat_CFLAGS): Rename to newfstatat_CPPFLAGS,
replace $(AM_CFLAGS) with $(AM_CPPFLAGS).
(stat64_CFLAGS): Rename to stat64_CPPFLAGS,
replace $(AM_CFLAGS) with $(AM_CPPFLAGS).
(statfs_CFLAGS): Rename to statfs_CPPFLAGS,
replace $(AM_CFLAGS) with $(AM_CPPFLAGS).
(truncate64_CFLAGS): Rename to truncate64_CPPFLAGS,
replace $(AM_CFLAGS) with $(AM_CPPFLAGS).
(uio_CFLAGS): Rename to uio_CPPFLAGS,
replace $(AM_CFLAGS) with $(AM_CPPFLAGS).

8 years agoMove x32 <asm/stat.h> replacement to x32 specific directory
Dmitry V. Levin [Tue, 8 Dec 2015 00:14:26 +0000 (00:14 +0000)]
Move x32 <asm/stat.h> replacement to x32 specific directory

As tests-m*32/Makefile.am files now refer to proper arch specific
directories, it's possible to relocate x32 <asm/stat.h> replacement
to its arch specific directory.

* linux/x86_64/asm_stat.h: Move ...
* linux/x32/asm_stat.h: ... here, remove x32 guard.
* Makefile.am (strace_SOURCES): Remove linux/x86_64/asm_stat.h.

8 years agobuild: set arch specific -m switches in tests-m*32/Makefile.am files properly
Dmitry V. Levin [Tue, 8 Dec 2015 00:14:10 +0000 (00:14 +0000)]
build: set arch specific -m switches in tests-m*32/Makefile.am files properly

* tests/Makefile.am (ARCH_MFLAGS, AM_LDFLAGS): New variables.
(AM_CPPFLAGS): Use ARCH_MFLAGS.
* bootstrap: In tests-m32/Makefile.am and tests-mx32/Makefile.am,
add -m32 and -mx32, respectively, to ARCH_MFLAGS instead of AM_CFLAGS.

8 years agobuild: initialize ARCH variable in tests-m*32/Makefile.am files properly
Dmitry V. Levin [Tue, 8 Dec 2015 00:13:38 +0000 (00:13 +0000)]
build: initialize ARCH variable in tests-m*32/Makefile.am files properly

* configure.ac (arch_m32): Set to sparc on sparc64, powerpc on
powerpc64, arm on aarch64, i386 on x86_64 and x32, $arch in other cases.
(arch_mx32): Set to x32 on x86_64, $arch in other cases.
(AC_SUBST): Add arch_m32 and arch_mx32.
* bootstrap: Substitute @arch@ with @arch_m32@ in tests-m32/Makefile.am.
Substitute @arch@ with @arch_mx32@ in tests-mx32/Makefile.am.

8 years agotests: add umount.test and umount2.test
Dmitry V. Levin [Mon, 7 Dec 2015 00:06:35 +0000 (00:06 +0000)]
tests: add umount.test and umount2.test

* tests/umount.c: New file.
* tests/umount2.c: Likewise.
* tests/umount.test: New test.
* tests/umount2.test: Likewise.
* tests/Makefile.am (check_PROGRAMS): Add umount and umount2.
(TESTS): Add umount.test and umount2.test.
* tests/.gitignore: Add umount and umount2.

8 years agoavr32: fix umount2 syscall entry
Dmitry V. Levin [Mon, 7 Dec 2015 00:08:51 +0000 (00:08 +0000)]
avr32: fix umount2 syscall entry

* linux/avr32/syscallent.h: Rename umount to umount2.

8 years agoUpdate umount2 flags
Dmitry V. Levin [Mon, 7 Dec 2015 00:10:58 +0000 (00:10 +0000)]
Update umount2 flags

* umount.c (MNT_FORCE, MNT_DETACH, MNT_EXPIRE): Move definitions ...
* xlat/umount_flags.in: ... here.  Add UMOUNT_NOFOLLOW.

8 years agoPrint the first argument of umount2 syscall as a path
Dmitry V. Levin [Mon, 7 Dec 2015 00:10:58 +0000 (00:10 +0000)]
Print the first argument of umount2 syscall as a path

* umount.c (SYS_FUNC(umount2)): Use printpath instead of printstr.

This fixes Debian bug #785050.

8 years agoprctl: add PR_CAP_AMBIENT parser
Dmitry V. Levin [Sun, 6 Dec 2015 15:33:53 +0000 (15:33 +0000)]
prctl: add PR_CAP_AMBIENT parser

* xlat/pr_cap_ambient.in: New file.
* prctl.c: Include "xlat/pr_cap_ambient.h".
(SYS_FUNC(prctl)): Handle PR_CAP_AMBIENT.

8 years agoprctl: finish decoding of several commands on entering syscall
Dmitry V. Levin [Sun, 6 Dec 2015 15:29:04 +0000 (15:29 +0000)]
prctl: finish decoding of several commands on entering syscall

* prctl.c (SYS_FUNC(prctl)): Return RVAL_DECODED after decoding of
PR_GET_DUMPABLE, PR_GET_KEEPCAPS, PR_GET_SECCOMP, PR_GET_TIMERSLACK,
PR_GET_TIMING, and PR_CAPBSET_READ commands.

8 years agoFix build on systems that lack EM_FRV definition
Dmitry V. Levin [Sun, 6 Dec 2015 15:13:01 +0000 (15:13 +0000)]
Fix build on systems that lack EM_FRV definition

* xlat/audit_arch.in: Guard AUDIT_ARCH_FRV with EM_FRV check.

8 years agotimes.test: workaround buggy libc
Dmitry V. Levin [Sun, 6 Dec 2015 05:28:11 +0000 (05:28 +0000)]
times.test: workaround buggy libc

* tests/times.c: Include <sys/syscall.h>.
(main): On systems where user's and kernel's long types are the same,
prefer direct times syscall over libc's times function because
the latter is more prone to return value truncation.

8 years agotimes.test: reduce cpu time consumption, increase struct tms diversity
Dmitry V. Levin [Sun, 6 Dec 2015 04:51:57 +0000 (04:51 +0000)]
times.test: reduce cpu time consumption, increase struct tms diversity

* tests/times.c (main): Reduce cpu time consumption fourfold,
make the parent process consume less cpu time than the child process
so that members of the structure returned by times syscall would be
more likely to contain different values.

8 years agomips n32, x32: fix printing of times syscall return value
Dmitry V. Levin [Sun, 6 Dec 2015 01:36:28 +0000 (01:36 +0000)]
mips n32, x32: fix printing of times syscall return value

As times syscall returns kernel's long value, it has to be printed as
RVAL_LUDECIMAL on systems where long type is less than kernel's long.

* times.c (SYS_FUNC(times)) [RVAL_LUDECIMAL && !IN_MPERS]:
Return RVAL_LUDECIMAL instead of RVAL_UDECIMAL.

8 years agounix-yy.test: fix portability issue
Dmitry V. Levin [Sun, 6 Dec 2015 06:17:45 +0000 (06:17 +0000)]
unix-yy.test: fix portability issue

* tests/unix-yy-connect.awk (r_close_listen): Quote square brackets
that are not part of a bracket expression.

8 years agoinet-cmsg.test: skip the test when the network is not functional
Dmitry V. Levin [Sun, 6 Dec 2015 01:02:17 +0000 (01:02 +0000)]
inet-cmsg.test: skip the test when the network is not functional

* tests/inet-cmsg.c (main): Return 77 if inet datagram socket
cannot be bound to INADDR_LOOPBACK.

8 years agofcntl: skip F_GETLK64, F_SETLK64, and F_SETLKW64 in fcntl syscall parser
Dmitry V. Levin [Sat, 5 Dec 2015 00:52:01 +0000 (00:52 +0000)]
fcntl: skip F_GETLK64, F_SETLK64, and F_SETLKW64 in fcntl syscall parser

As the kernel recognizes F_GETLK64, F_SETLK64, and F_SETLKW64 commands
in fcntl64 syscall only, do not parse their structures in fcntl parser.

* xlat/fcntlcmds.in: Move F_GETLK64, F_SETLK64, and F_SETLKW64 ...
* xlat/fcntl64cmds.in: ... here.
* fcntl.c: Include "xlat/fcntl64cmds.h".
(print_fcntl): Move printing of first two syscall arguments
and handling of F_GETLK64, F_SETLK64, and F_SETLKW64 commands ...
(SYS_FUNC(fcntl), SYS_FUNC(fcntl64)): ... here.
* tests/fcntl.c: New file, based on struct_flock.c.
* tests/fcntl64.c: Likewise.
* tests/struct_flock.c (test_flock_einval, create_sample): New functions.
(test_flock): Use test_flock_einval.
(test_flock64, main): Remove.
* tests/fcntl.test: New test.
* tests/fcntl64.test: Likewise.
* tests/struct_flock.test: Remove.
* tests/Makefile.am (check_PROGRAMS): Add fcntl and fcntl64,
remove struct_flock.
(TESTS): Add fcntl.test and fcntl64.test, remove struct_flock.test.
(EXTRA_DIST) Add struct_flock.c.
* tests/.gitignore: Add fcntl and fcntl64, remove struct_flock.

8 years agoprint_fcntl: finish with unrecognized commands on entering syscall
Dmitry V. Levin [Sat, 5 Dec 2015 17:54:26 +0000 (17:54 +0000)]
print_fcntl: finish with unrecognized commands on entering syscall

* fcntl.c (print_fcntl): Merge two switch statements.

8 years agofcntl: create a separate parser for fcntl64 syscall
Elvira Khabirova [Fri, 4 Dec 2015 21:42:58 +0000 (00:42 +0300)]
fcntl: create a separate parser for fcntl64 syscall

* fcntl.c(print_fcntl): New function, made from SYS_FUNC(fcntl).
(SYS_FUNC(fcntl), SYS_FUNC(fcntl64)): Use it.
* linux/32/syscallent.h: Change parser of fcntl64 to SEN(fcntl64).
* linux/arm/syscallent.h: Likewise.
* linux/avr32/syscallent.h: Likewise.
* linux/bfin/syscallent.h: Likewise.
* linux/hppa/syscallent.h: Likewise.
* linux/i386/syscallent.h: Likewise.
* linux/m68k/syscallent.h: Likewise.
* linux/microblaze/syscallent.h: Likewise.
* linux/mips/syscallent-n32.h: Likewise.
* linux/mips/syscallent-o32.h: Likewise.
* linux/powerpc/syscallent.h: Likewise.
* linux/s390/syscallent.h: Likewise.
* linux/sh/syscallent.h: Likewise.
* linux/sh64/syscallent.h: Likewise.
* linux/sparc/syscallent.h: Likewise.
* linux/xtensa/syscallent.h: Likewise.

8 years agotravis-ci: add build matrix
Dmitry V. Levin [Mon, 30 Nov 2015 22:18:16 +0000 (22:18 +0000)]
travis-ci: add build matrix

8 years agotests: replace old stat tests with stat.test and stat64.test
Dmitry V. Levin [Sat, 5 Dec 2015 00:03:49 +0000 (00:03 +0000)]
tests: replace old stat tests with stat.test and stat64.test

* tests/stat.c: Replace with a wrapper around lstatx.c
* tests/stat.test: Replace with a wrapper around statx.sh.
* tests/stat32-v.test: Remove.
* tests/stat32.c: Remove.
* tests/stat64-v.test: Remove.
* tests/stat64.c: New file.
* tests/stat64.test: New test.
* tests/Makefile.am (check_PROGRAMS): Replace stat32 with stat64.
(stat_CFLAGS): Rename to stat64_CFLAGS.
(TESTS): Replace stat32-v.test and stat64-v.test with stat64.test.
* tests/.gitignore: Replace stat32 with stat64.

8 years agotests: add lstat.test and lstat64.test
Dmitry V. Levin [Sat, 5 Dec 2015 00:03:02 +0000 (00:03 +0000)]
tests: add lstat.test and lstat64.test

* tests/lstat.c: New file.
* tests/lstat64.c: Likewise.
* tests/lstatx.c: Likewise.
* tests/lstat.test: New test.
* tests/lstat64.test: Likewise.
* tests/Makefile.am (check_PROGRAMS): Add lstat and lstat64.
(lstat64_CFLAGS): Define.
(TESTS): Add lstat.test and lstat64.test.
(EXTRA_DIST): Add lstatx.c.
* tests/.gitignore: Add lstat and lstat64.

8 years agotests: add fstat.test and fstat64.test
Dmitry V. Levin [Sat, 5 Dec 2015 00:02:44 +0000 (00:02 +0000)]
tests: add fstat.test and fstat64.test

* tests/fstat.c: New file.
* tests/fstat64.c: Likewise.
* tests/fstatx.c: Likewise.
* tests/fstat.test: New test.
* tests/fstat64.test: Likewise.
* tests/Makefile.am (check_PROGRAMS): Add fstat and fstat64.
(fstat64_CFLAGS): Define.
(TESTS): Add fstat.test and fstat64.test.
(EXTRA_DIST): Add fstatx.c.
* tests/.gitignore: Add fstat and fstat64.

8 years agotests: prepare for detailed testing of stat family syscalls
Dmitry V. Levin [Sat, 5 Dec 2015 00:01:56 +0000 (00:01 +0000)]
tests: prepare for detailed testing of stat family syscalls

Parametrize code from fstatat.c to support <asm/stat.h>
as an alternative to <sys/stat.h> and move it to a separate file.

* tests/statx.sh: New file, based on fstatat64.test.
* tests/fstatat64.test: Use it.
* tests/newfstatat.test: Likewise.
* tests/xstatx.c: New file, based on fstatat.c.
* tests/fstatat.c: Use it.
* tests/Makefile.am (EXTRA_DIST): Add statx.sh and xstatx.c.
* tests/fstatat64.c (FSTATAT_NAME): Change to TEST_SYSCALL_NAME.
* tests/newfstatat.c: Likewise.

8 years agoioctl: allow to stop decoding number
Gabriel Laskar [Fri, 4 Dec 2015 00:07:33 +0000 (01:07 +0100)]
ioctl: allow to stop decoding number

For some ioctls, like from drm, the identification of the correct ioctl
is done by custom code.  Specifying IOCTL_NUMBER_STOP_LOOKUP on
return of ioctl_decode_command_number() disables further calls to
ioctl_lookup().

* defs.h (IOCTL_NUMBER_UNKNOWN, IOCTL_NUMBER_HANDLED,
IOCTL_NUMBER_STOP_LOOKUP): Add macros representing ioctl number state
decoding.
* ioctl.c (SYS_FUNC(ioctl)): Skip ioctl_lookup() when
ioctl_decode_command_number() returns a value with
IOCTL_NUMBER_STOP_LOOKUP flag is set.

Suggested-by: Patrik Jakobsson <patrik.r.jakobsson@gmail.com>
Signed-off-by: Gabriel Laskar <gabriel@lse.epita.fr>
Signed-off-by: Dmitry V. Levin <ldv@altlinux.org>
8 years agotests: skip restart_syscall.test on x32
Dmitry V. Levin [Fri, 4 Dec 2015 16:51:11 +0000 (16:51 +0000)]
tests: skip restart_syscall.test on x32

The syscall number of restart_syscall returned by the kernel in case
of ERESTART_RESTARTBLOCK is broken on x32 from the beginning, see
https://lkml.org/lkml/2015/11/30/790

Until that improves, skip the test on x32.

* tests/restart_syscall.c (main) [__x86_64__ && __ILP32__]: Return 77.

8 years agox32: fix decoding of i386 personality lseek syscall
Dmitry V. Levin [Fri, 4 Dec 2015 16:42:30 +0000 (16:42 +0000)]
x32: fix decoding of i386 personality lseek syscall

On x32, tcp->ext_arg is not initialized for i386 personality,
so tcp->u_arg has to be used instead.

* lseek.c (SYS_FUNC(lseek)) [X32]: Handle "current_personality == 1" case.

8 years agox86_64, x32: add a replacement for <asm/stat.h>
Dmitry V. Levin [Fri, 4 Dec 2015 15:00:37 +0000 (15:00 +0000)]
x86_64, x32: add a replacement for <asm/stat.h>

Some old kernel headers, Ubuntu 14.04 in particular, provide
<asm/stat.h> editions that are completely wrong for x32.
Workaround this issue by providing a replacement.

* linux/x86_64/asm_stat.h: New file.
* linux/x32/asm_stat.h: Likewise.
* Makefile.am (strace_SOURCES): Add them.

8 years agoAdd a wrapper around <asm/stat.h>
Dmitry V. Levin [Fri, 4 Dec 2015 14:37:02 +0000 (14:37 +0000)]
Add a wrapper around <asm/stat.h>

* linux/asm_stat.h: New file.
* Makefile.am (strace_SOURCES): Add it.
* file.c: Use it.

8 years agokernel_types.h: protect from double inclusion
Dmitry V. Levin [Fri, 4 Dec 2015 14:31:07 +0000 (14:31 +0000)]
kernel_types.h: protect from double inclusion

* kernel_types.h: Add #include guard.

8 years agofstatat64.test: lift /proc requirement
Dmitry V. Levin [Thu, 3 Dec 2015 15:48:43 +0000 (15:48 +0000)]
fstatat64.test: lift /proc requirement

While -P option needs /proc to match descriptors, it does not use
/proc to match pathnames.  As this test does not need descriptor
match, the /proc requirement can be safely lifted.

* tests/fstatat64.test: Lift /proc/self/fd/ requirement.

8 years agotests: add fstatat64.test and newfstatat.test
Dmitry V. Levin [Wed, 2 Dec 2015 01:02:39 +0000 (01:02 +0000)]
tests: add fstatat64.test and newfstatat.test

* configure.ac (AC_CHECK_FUNCS): Add fstatat, ftruncate, and futimens.
* tests/fstatat.c: New file.
* tests/fstatat64.c: Likewise.
* tests/newfstatat.c: Likewise.
* tests/fstatat64.test: New test.
* tests/newfstatat.test: Likewise.
* tests/Makefile.am (check_PROGRAMS): Add fstatat64 and newfstatat.
(fstatat64_CFLAGS, newstatat_CFLAGS): Define.
(TESTS): Add fstatat64.test and newfstatat.test.
(EXTRA_DIST): Add fstatat.c.
* tests/.gitignore: Add fstatat64 and newfstatat.

8 years agoalpha, ppc, sh, sh64: fix fstatat64 syscall entries
Dmitry V. Levin [Tue, 1 Dec 2015 11:11:30 +0000 (11:11 +0000)]
alpha, ppc, sh, sh64: fix fstatat64 syscall entries

* linux/alpha/syscallent.h (newfstatat): Change sys_name to fstatat64.
* linux/powerpc/syscallent.h: Likewise.
* linux/sh/syscallent.h: Likewise.
* linux/sh64/syscallent.h: Likewise.

8 years agoppc64: clone syscallent.h from ppc
Dmitry V. Levin [Tue, 1 Dec 2015 11:13:47 +0000 (11:13 +0000)]
ppc64: clone syscallent.h from ppc

* linux/powerpc64/syscallent.h: Clone from linux/powerpc/syscallent.h
with entries for numbers 192..197, 204, 226, and 254 unassigned.

8 years agotests: add lseek.test and llseek.test
Dmitry V. Levin [Tue, 1 Dec 2015 00:59:26 +0000 (00:59 +0000)]
tests: add lseek.test and llseek.test

* tests/llseek.c: New file.
* tests/lseek.c: Likewise.
* tests/llseek.test: New test.
* tests/lseek.test: Likewise.
* tests/Makefile.am (check_PROGRAMS): Add llseek and lseek.
(TESTS): Add llseek.test and lseek.test.
* tests/.gitignore: Add llseek and lseek.

8 years agotests: add ftruncate64.test and truncate64.test
Dmitry V. Levin [Tue, 1 Dec 2015 00:32:40 +0000 (00:32 +0000)]
tests: add ftruncate64.test and truncate64.test

* tests/ftruncate64.c: New file.
* tests/truncate64.c: Likewise.
* tests/ftruncate64.test: New test.
* tests/truncate64.test: Likewise.
* tests/Makefile.am (check_PROGRAMS): Add ftruncate64 and truncate64.
(ftruncate64_CFLAGS, truncate64_CFLAGS): Define.
(TESTS): Add ftruncate64.test and truncate64.test.
* tests/.gitignore: Add ftruncate64 and truncate64.

8 years agotests: add ftruncate.test and truncate.test
Dmitry V. Levin [Tue, 1 Dec 2015 00:02:45 +0000 (00:02 +0000)]
tests: add ftruncate.test and truncate.test

* tests/ftruncate.c: New file.
* tests/truncate.c: Likewise.
* tests/ftruncate.test: New test.
* tests/truncate.test: Likewise.
* tests/Makefile.am (check_PROGRAMS): Add ftruncate and truncate.
(TESTS): Add ftruncate.test and truncate.test.
* tests/.gitignore: Add ftruncate and truncate.

8 years agobuild: robustify linux/fcntl.h check
Dmitry V. Levin [Mon, 30 Nov 2015 16:20:19 +0000 (16:20 +0000)]
build: robustify linux/fcntl.h check

* configure.ac (AC_CHECK_TYPES): Support older linux kernel headers
by including <sys/types.h> before <linux/fcntl.h>.

8 years agosyscall.c: move inclusion of arch specific files to the end of file
Dmitry V. Levin [Mon, 30 Nov 2015 13:57:51 +0000 (13:57 +0000)]
syscall.c: move inclusion of arch specific files to the end of file

Move inclusion of arch specific files that define static functions to
the end of syscall.c.

* syscall.c (get_syscall_result_regs, get_error, getregs_old):
New forward declarations.
(arch_get_scno): Move forward.
Move inclusion of "get_scno.c", "get_syscall_args.c",
"get_syscall_result.c", "get_error.c", and "getregs_old.c"
to the end of file.

8 years agox86_64: change getregs_old to forward ptrace return code
Dmitry V. Levin [Mon, 30 Nov 2015 15:30:05 +0000 (15:30 +0000)]
x86_64: change getregs_old to forward ptrace return code

* linux/x86_64/getregs_old.c (getregs_old): Change to return ptrace
return code.
* syscall.c (get_regs) [ARCH_REGS_FOR_GETREGSET && X86_64]: Use
getregs_old return code.

8 years agoCleanup print_pc
Dmitry V. Levin [Mon, 30 Nov 2015 03:30:51 +0000 (03:30 +0000)]
Cleanup print_pc

Apparently, there are only two types of instruction pointer printers
depending on the architecture: those that print a register that was
fetched earlier, and those that fetch a register themselves using upeek.
With this change, architectures of the first type have ARCH_PC_REG
defined in their arch_regs.c file, architectures of the first type
have ARCH_PC_PEEK_ADDR defined there, and the common code in syscall.c
uses these macros to print the instruction pointer.

* Makefile.am (EXTRA_DIST): Remove linux/*/print_pc.c.
* linux/*/print_pc.c: Remove.
* linux/aarch64/arch_regs.c(ARCH_PC_REG): Define macro.
* linux/arc/arch_regs.c(ARCH_PC_REG): Likewise.
* linux/arm/arch_regs.c(ARCH_PC_REG): Likewise.
* linux/avr32/arch_regs.c(ARCH_PC_REG): Likewise.
* linux/i386/arch_regs.c(ARCH_PC_REG): Likewise.
* linux/ia64/arch_regs.c(ARCH_PC_REG): Likewise.
* linux/metag/arch_regs.c(ARCH_PC_REG): Likewise.
* linux/mips/arch_regs.c(ARCH_PC_REG): Likewise.
* linux/nios2/arch_regs.c(ARCH_PC_REG): Likewise.
* linux/or1k/arch_regs.c(ARCH_PC_REG): Likewise.
* linux/powerpc64/arch_regs.c(ARCH_PC_REG): Likewise.
* linux/powerpc/arch_regs.c(ARCH_PC_REG): Likewise.
* linux/s390/arch_regs.c(ARCH_PC_REG): Likewise.
* linux/s390x/arch_regs.c(ARCH_PC_REG): Likewise.
* linux/sparc64/arch_regs.c(ARCH_PC_REG): Likewise.
* linux/sparc/arch_regs.c(ARCH_PC_REG): Likewise.
* linux/tile/arch_regs.c(ARCH_PC_REG): Likewise.
* linux/x32/arch_regs.c(ARCH_PC_REG): Likewise.
* linux/x86_64/arch_regs.c(ARCH_PC_REG): Likewise.
* linux/alpha/arch_regs.c(ARCH_PC_PEEK_ADDR): Define macro.
* linux/bfin/arch_regs.c(ARCH_PC_PEEK_ADDR): Likewise.
* linux/crisv10/arch_regs.c(ARCH_PC_PEEK_ADDR): Likewise.
* linux/crisv32/arch_regs.c(ARCH_PC_PEEK_ADDR): Likewise.
* linux/hppa/arch_regs.c(ARCH_PC_PEEK_ADDR): Likewise.
* linux/m68k/arch_regs.c(ARCH_PC_PEEK_ADDR): Likewise.
* linux/microblaze/arch_regs.c(ARCH_PC_PEEK_ADDR): Likewise.
* linux/sh64/arch_regs.c(ARCH_PC_PEEK_ADDR): Likewise.
* linux/sh/arch_regs.c(ARCH_PC_PEEK_ADDR): Likewise.
* linux/xtensa/arch_regs.c(ARCH_PC_PEEK_ADDR): Likewise.
* syscall.c (print_pc): Stop including "print_pc.c".
Use ARCH_PC_REG or ARCH_PC_PEEK_ADDR.

8 years agocleanup: make get_scno.c files more readable
Dmitry V. Levin [Mon, 30 Nov 2015 01:46:52 +0000 (01:46 +0000)]
cleanup: make get_scno.c files more readable

Make get_scno.c files more self-contained.  While they are still
being included by syscall.c, the latter no longer provides
a function framework for them.

* linux/aarch64/get_scno.c (arch_get_scno): Define.
* linux/alpha/get_scno.c: Likewise.
* linux/arc/get_scno.c: Likewise.
* linux/arm/get_scno.c: Likewise.
* linux/avr32/get_scno.c: Likewise.
* linux/bfin/get_scno.c: Likewise.
* linux/crisv10/get_scno.c: Likewise.
* linux/hppa/get_scno.c: Likewise.
* linux/i386/get_scno.c: Likewise.
* linux/ia64/get_scno.c: Likewise.
* linux/m68k/get_scno.c: Likewise.
* linux/metag/get_scno.c: Likewise.
* linux/microblaze/get_scno.c: Likewise.
* linux/mips/get_scno.c: Likewise.
* linux/nios2/get_scno.c: Likewise.
* linux/or1k/get_scno.c: Likewise.
* linux/powerpc/get_scno.c: Likewise.
* linux/powerpc64/get_scno.c: Likewise.
* linux/s390/get_scno.c: Likewise.
* linux/sh/get_scno.c: Likewise.
* linux/sh64/get_scno.c: Likewise.
* linux/sparc/get_scno.c: Likewise.
* linux/sparc64/get_scno.c: Likewise.
* linux/tile/get_scno.c: Likewise.
* linux/x86_64/get_scno.c: Likewise.
* linux/xtensa/get_scno.c: Likewise.
* syscall.c (arch_get_scno): New declaration.
Include "get_scno.c" in file scope.
(get_scno): Use arch_get_scno.

Requested-by: Denys Vlasenko <dvlasenk@redhat.com>
8 years agocleanup: make get_syscall_args.c files more readable
Dmitry V. Levin [Mon, 30 Nov 2015 00:57:14 +0000 (00:57 +0000)]
cleanup: make get_syscall_args.c files more readable

Make get_syscall_args.c files more self-contained.  While they are
still being included by syscall.c, the latter no longer defines
get_syscall_args function.

* linux/aarch64/get_syscall_args.c: Include "arm/get_syscall_args.c"
with get_syscall_args temporarily defined to arm_get_syscall_args.
(get_syscall_args): Define.
* linux/alpha/get_syscall_args.c (get_syscall_args): Define.
* linux/arc/get_syscall_args.c: Likewise.
* linux/arm/get_syscall_args.c: Likewise.
* linux/avr32/get_syscall_args.c: Likewise.
* linux/bfin/get_syscall_args.c: Likewise.
* linux/crisv10/get_syscall_args.c: Likewise.
* linux/hppa/get_syscall_args.c: Likewise.
* linux/i386/get_syscall_args.c: Likewise.
* linux/ia64/get_syscall_args.c: Likewise.
* linux/m68k/get_syscall_args.c: Likewise.
* linux/metag/get_syscall_args.c: Likewise.
* linux/microblaze/get_syscall_args.c: Likewise.
* linux/mips/get_syscall_args.c: Likewise.
* linux/nios2/get_syscall_args.c: Likewise.
* linux/or1k/get_syscall_args.c: Likewise.
* linux/powerpc/get_syscall_args.c: Likewise.
* linux/s390/get_syscall_args.c: Likewise.
* linux/sh/get_syscall_args.c: Likewise.
* linux/sh64/get_syscall_args.c: Likewise.
* linux/sparc/get_syscall_args.c: Likewise.
* linux/tile/get_syscall_args.c: Likewise.
* linux/x86_64/get_syscall_args.c: Likewise.
* linux/xtensa/get_syscall_args.c: Likewise.
* syscall.c (get_syscall_args): Remove.
Include "get_syscall_args.c" in file scope.

Requested-by: Denys Vlasenko <dvlasenk@redhat.com>
8 years agocleanup: make get_syscall_result.c files more readable
Dmitry V. Levin [Mon, 30 Nov 2015 00:01:01 +0000 (00:01 +0000)]
cleanup: make get_syscall_result.c files more readable

Make get_syscall_result.c files more self-contained.  While they are
still being included by syscall.c, the latter no longer provides
a function framework for them.

* linux/alpha/get_syscall_result.c (get_syscall_result_regs): Define.
* linux/bfin/get_syscall_result.c: Likewise.
* linux/crisv10/get_syscall_result.c: Likewise.
* linux/hppa/get_syscall_result.c: Likewise.
* linux/m68k/get_syscall_result.c: Likewise.
* linux/microblaze/get_syscall_result.c: Likewise.
* linux/sh/get_syscall_result.c: Likewise.
* linux/sh64/get_syscall_result.c: Likewise.
* linux/xtensa/get_syscall_result.c: Likewise.
* syscall.c [!ARCH_REGS_FOR_GETREGSET && !ARCH_REGS_FOR_GETREGS]:
Define USE_GET_SYSCALL_RESULT_REGS macro.
[USE_GET_SYSCALL_RESULT_REGS]: Include "get_syscall_result.c".
(get_syscall_result) [USE_GET_SYSCALL_RESULT_REGS]: Stop including
"get_syscall_result.c".  Call get_syscall_result_regs.

Requested-by: Denys Vlasenko <dvlasenk@redhat.com>
8 years agocleanup: make get_error.c files more readable
Dmitry V. Levin [Sun, 29 Nov 2015 00:06:45 +0000 (00:06 +0000)]
cleanup: make get_error.c files more readable

Make get_error.c files more self-sustained.  While they are still being
included by syscall.c, the latter no longer defines get_error function.

* linux/aarch64/get_error.c: Include "arm/get_error.c" with get_error
temporarily defined to arm_get_error.
(get_error): Define.
* linux/alpha/get_error.c (get_error): Define.
* linux/arc/get_error.c: Likewise.
* linux/arm/get_error.c: Likewise.
* linux/avr32/get_error.c: Likewise.
* linux/bfin/get_error.c: Likewise.
* linux/crisv10/get_error.c: Likewise.
* linux/hppa/get_error.c: Likewise.
* linux/i386/get_error.c: Likewise.
* linux/ia64/get_error.c: Likewise.
* linux/m68k/get_error.c: Likewise.
* linux/metag/get_error.c: Likewise.
* linux/microblaze/get_error.c: Likewise.
* linux/mips/get_error.c: Likewise.
* linux/nios2/get_error.c: Likewise.
* linux/or1k/get_error.c: Likewise.
* linux/powerpc/get_error.c: Likewise.
* linux/s390/get_error.c: Likewise.
* linux/sh/get_error.c: Likewise.
* linux/sh64/get_error.c: Likewise.
* linux/sparc/get_error.c: Likewise.
* linux/sparc64/get_error.c: Likewise.
* linux/tile/get_error.c: Likewise.
* linux/x86_64/get_error.c: Likewise.
* linux/xtensa/get_error.c: Likewise.
* syscall.c: Include "get_error.c" in file scope.
(get_error): Remove.  Move arch independent code ...
(get_syscall_result): ... here.  Update get_error invocation.

Requested-by: Denys Vlasenko <dvlasenk@redhat.com>
8 years agocleanup: make arch_sigreturn.c files more readable
Dmitry V. Levin [Sat, 28 Nov 2015 02:58:29 +0000 (02:58 +0000)]
cleanup: make arch_sigreturn.c files more readable

Make arch_sigreturn.c files more self-sustained.  While they are
still being included by sigreturn.c, the latter no longer defines
arch_sigreturn function.

* linux/alpha/arch_sigreturn.c (arch_sigreturn): Define.
* linux/arm/arch_sigreturn.c: Likewise.
* linux/crisv10/arch_sigreturn.c: Likewise.
* linux/i386/arch_sigreturn.c: Likewise.
* linux/ia64/arch_sigreturn.c: Likewise.
* linux/m68k/arch_sigreturn.c: Likewise.
* linux/microblaze/arch_sigreturn.c: Likewise.
* linux/mips/arch_sigreturn.c: Likewise.
* linux/powerpc/arch_sigreturn.c: Likewise.
* linux/s390/arch_sigreturn.c: Likewise.
* linux/sparc/arch_sigreturn.c: Likewise.
* linux/tile/arch_sigreturn.c: Likewise.
* linux/x32/arch_sigreturn.c: Remove code.
Include "x86_64/arch_sigreturn.c".
* linux/x86_64/arch_sigreturn.c: Stop including "x32/arch_sigreturn.c".
Include "i386/arch_sigreturn.c" with arch_sigreturn temporarily defined
to i386_arch_sigreturn.
(arch_sigreturn): Define.  Add x32 personality support there.
* sigreturn.c: Remove arch_sigreturn header and footer.

Requested-by: Denys Vlasenko <dvlasenk@redhat.com>
8 years agoAdd initial Travis CI support
Dmitry V. Levin [Thu, 26 Nov 2015 16:07:57 +0000 (16:07 +0000)]
Add initial Travis CI support

* .travis.yml: New file.
* travis-ci.sh: Likewise.

8 years agotests: remove temporary files left after two tests
Dmitry V. Levin [Fri, 27 Nov 2015 17:24:46 +0000 (17:24 +0000)]
tests: remove temporary files left after two tests

* tests/net-yy.test: Remove "$LOG"-connect and "$LOG"-accept.
* tests/unix-yy.test: Likewise.

8 years agotests: skip stat32-v.test on x32
Dmitry V. Levin [Fri, 27 Nov 2015 17:06:38 +0000 (17:06 +0000)]
tests: skip stat32-v.test on x32

Explicitly skip 32-bit stat test on x32 even if libc pretends
to support it.

* tests/stat.c (main) [__x86_64__ && __ILP32__]: Skip.

8 years agotests: fix ipc_msgbuf.test on x32
Dmitry V. Levin [Fri, 27 Nov 2015 14:15:30 +0000 (14:15 +0000)]
tests: fix ipc_msgbuf.test on x32

* tests/ipc_msgbuf.c: Include "config.h" and "kernel_types.h".
(main): Replace "long" with "kernel_long_t" in struct msgbuf.

8 years agox32: fix pselect6 decoding
Dmitry V. Levin [Fri, 27 Nov 2015 04:37:46 +0000 (04:37 +0000)]
x32: fix pselect6 decoding

* desc.c: Include "kernel_types.h".
(umove_kulong_array_or_printaddr): New function.
(SYS_FUNC(pselect6)): Use it.

8 years agox32: fix sigreturn decoding
Dmitry V. Levin [Fri, 27 Nov 2015 03:34:23 +0000 (03:34 +0000)]
x32: fix sigreturn decoding

* linux/x32/arch_sigreturn.c: Implement x32_rt_sigreturn decoding.
* linux/x86_64/arch_sigreturn.c: Handle (current_personality == 0)
case only.
Include "x32/arch_sigreturn.c" instead of "i386/arch_sigreturn.c".

8 years agox32: fix struct dirent decoding
Dmitry V. Levin [Fri, 27 Nov 2015 01:51:22 +0000 (01:51 +0000)]
x32: fix struct dirent decoding

* kernel_types.h: New file.
* Makefile.am (strace_SOURCES): Add it.
* configure.ac (AC_CHECK_TYPES): Check for __kernel_long_t
and __kernel_ulong_t in <asm/posix_types.h>.
* dirent.c: Stop including <dirent.h>.
(kernel_dirent): Remove.
Include "kernel_types.h".
(print_old_dirent, SYS_FUNC(getdents)): Print variables
of kernel_ulong_t type using %Lu format.
* syscall.c (kernel_long_t, kernel_ulong_t): Remove.
Include "kernel_types.h".
* tests/getdents.c (kernel_dirent): Remove.
Include "kernel_types.h".
(print_dirent): Print variables of kernel_ulong_t type using %Lu format.

8 years agoRefer to -h on incorrect usage
Elvira Khabirova [Thu, 26 Nov 2015 14:18:00 +0000 (17:18 +0300)]
Refer to -h on incorrect usage

* defs.h (error_msg_and_help): New prototype.
* strace.c (error_msg_and_help): New function.
(error_opt_arg, init): Use it.
(usage): Remove unnecessary arguments.
* count.c: Use the new function.

8 years agoRearrange flags descriptions in the usage text
Elvira Khabirova [Thu, 26 Nov 2015 03:25:12 +0000 (06:25 +0300)]
Rearrange flags descriptions in the usage text

* strace.c (usage): Rearrange descriptions.
* tests/strace-k.test: Change the option detecting regexp accordingly.

8 years agotests: run in "set -x" mode if VERBOSE variable is non-null
Dmitry V. Levin [Thu, 26 Nov 2015 21:25:31 +0000 (21:25 +0000)]
tests: run in "set -x" mode if VERBOSE variable is non-null

* tests/init.sh: Enter "set -x" mode if $VERBOSE is non-null.

8 years agotests: fix match_diff usage
Dmitry V. Levin [Thu, 26 Nov 2015 20:36:35 +0000 (20:36 +0000)]
tests: fix match_diff usage

Fix argument order in match_diff invocations:
the first argument has to be actual output,
the second argument has to be expected output.

* tests/aio.test: Swap match_diff arguments.
* tests/clock_nanosleep.test: Likewise.
* tests/clock_xettime.test: Likewise.
* tests/file_handle.test: Likewise.
* tests/getdents.test: Likewise.
* tests/getdents64.test: Likewise.
* tests/getrandom.test: Likewise.
* tests/inet-cmsg.test: Likewise.
* tests/ioctl.test: Likewise.
* tests/membarrier.test: Likewise.
* tests/mlock2.test: Likewise.
* tests/nanosleep.test: Likewise.
* tests/pselect6.test: Likewise.
* tests/readdir.test: Likewise.
* tests/readlink.test: Likewise.
* tests/readlinkat.test: Likewise.
* tests/rt_sigqueueinfo.test: Likewise.
* tests/seccomp.test: Likewise.
* tests/select.test: Likewise.
* tests/sendfile.test: Likewise.
* tests/sendfile64.test: Likewise.
* tests/struct_flock.test: Likewise.
* tests/sysinfo.test: Likewise.
* tests/time.test: Likewise.
* tests/timer_create.test: Likewise.
* tests/timer_xettime.test: Likewise.
* tests/timerfd_xettime.test: Likewise.
* tests/times-fail.test: Likewise.
* tests/times.test: Likewise.
* tests/umovestr2.test: Likewise.
* tests/userfaultfd.test: Likewise.
* tests/utime.test: Likewise.
* tests/utimensat.test: Likewise.
* tests/xet_robust_list.test: Likewise.
* tests/xetitimer.test: Likewise.
* tests/xettimeofday.test: Likewise.

8 years agox86_64: fix x32 personality support in print_llu_from_low_high_val
Dmitry V. Levin [Thu, 26 Nov 2015 20:29:25 +0000 (20:29 +0000)]
x86_64: fix x32 personality support in print_llu_from_low_high_val

x86 is the only personality supported on x86_64
that has 32-bit syscall arguments.

* io.c (print_llu_from_low_high_val) [X86_64]: Fix
current_personality == 2 case.

8 years agox86_64: fix x32 personality support in getllval
Dmitry V. Levin [Thu, 26 Nov 2015 18:25:34 +0000 (18:25 +0000)]
x86_64: fix x32 personality support in getllval

x86 is the only personality supported on x86_64
that has 32-bit syscall arguments.

* util.c (getllval) [X86_64]: Fix current_personality == 2 case.

8 years agotests/file_handle: fix expected output
Dmitry V. Levin [Thu, 26 Nov 2015 16:48:23 +0000 (16:48 +0000)]
tests/file_handle: fix expected output

* tests/file_handle.c (main): Parametrize handle_type
in open_by_handle_at parser output.

8 years agostartup_attach: fix compilation warning
Dmitry V. Levin [Thu, 26 Nov 2015 01:54:53 +0000 (01:54 +0000)]
startup_attach: fix compilation warning

* strace.c (startup_attach): Split single error_msg statement with
variable number of arguments to silence a compilation warning.

8 years ago.gitignore: add mpers_xlat.h
Dmitry V. Levin [Thu, 26 Nov 2015 01:45:42 +0000 (01:45 +0000)]
.gitignore: add mpers_xlat.h

Ignore mpers_xlat.h generated since commit v4.10-454-g5cb45b2.

* .gitignore: Add /mpers_xlat.h.

Reported-by: Elvira Khabirova <lineprinter0@gmail.com>
8 years agotests: add struct_flock.test
Dmitry V. Levin [Fri, 9 Oct 2015 00:48:19 +0000 (00:48 +0000)]
tests: add struct_flock.test

* tests/struct_flock.c: New file.
* tests/struct_flock.test: New test.
* tests/Makefile.am (check_PROGRAMS): Add struct_flock.
(TESTS): Add struct_flock.test.
* tests/.gitignore: Add struct_flock.

8 years agoConvert parsers of flock structures to new mpers infrastructure
Dmitry V. Levin [Sat, 19 Sep 2015 23:48:56 +0000 (23:48 +0000)]
Convert parsers of flock structures to new mpers infrastructure

* fetch_struct_flock.c: New file.
* Makefile.am (strace_SOURCES): Add it.
* fcntl.c (print_struct_flock64): New function.
(printflock64): Use fetch_struct_flock64 and print_struct_flock64.
(printflock): Use fetch_struct_flock and print_struct_flock64.

8 years agofcntl.c: implement decoding for all known operations
Dmitry V. Levin [Fri, 9 Oct 2015 21:08:43 +0000 (21:08 +0000)]
fcntl.c: implement decoding for all known operations

* xlat/f_owner_types.in: New file.
* xlat/f_seals.in: Likewise.
* fcntl.c: Include "xlat/f_owner_types.h" and "xlat/f_seals.h".
(print_f_owner_ex): New function.
(SYS_FUNC(fcntl)): Use it.
Handle F_SETPIPE_SZ, F_GETPIPE_SZ, F_OFD_SETLKW,
F_OFD_SETLK, F_SETOWN_EX, F_ADD_SEALS, F_SETSIG,
F_OFD_GETLK, F_GETOWN_EX, F_GET_SEALS, F_GETSIG.

8 years agofcntl.c: mark F_DUPFD and F_DUPFD_CLOEXEC return code with RVAL_FD flag
Dmitry V. Levin [Fri, 9 Oct 2015 20:19:25 +0000 (20:19 +0000)]
fcntl.c: mark F_DUPFD and F_DUPFD_CLOEXEC return code with RVAL_FD flag

* fcntl.c (SYS_FUNC(fcntl)): Set RVAL_FD flag in the return code
for F_DUPFD and F_DUPFD_CLOEXEC operations.

8 years agofcntl.c: remove redundant ifdefs
Dmitry V. Levin [Fri, 9 Oct 2015 20:10:31 +0000 (20:10 +0000)]
fcntl.c: remove redundant ifdefs

* fcntl.c (USE_PRINTFLOCK64): Remove macro.
(printflock64): Define unconditionally.
(SYS_FUNC(fcntl)): Do not check for USE_PRINTFLOCK64,
F_DUPFD_CLOEXEC, F_NOTIFY, F_SETLEASE, and F_GETLEASE macros.

8 years agoUpdate F_* constants
Dmitry V. Levin [Fri, 9 Oct 2015 19:59:22 +0000 (19:59 +0000)]
Update F_* constants

* xlat/fcntlcmds.in: Add F_SETOWN_EX, F_GETOWN_EX, F_GETOWNER_UIDS,
F_OFD_GETLK, F_OFD_SETLK, F_OFD_SETLKW, and F_CANCELLK.
Remove F_ALLOCSP, F_BLKSIZE, F_BLOCKS, F_CHKFL, F_CNVT, F_DUP2FD,
F_ISSTREAM, F_NPRIV, F_PRIV, F_QUOTACL, F_REVOKE, F_RGETLK, F_RSETLK,
F_RSETLKW, F_SHARE, and F_UNSHARE.
Add default values.

8 years agoUpdate LOCK_* constants
Dmitry V. Levin [Fri, 9 Oct 2015 19:57:21 +0000 (19:57 +0000)]
Update LOCK_* constants

* xlat/flockcmds.in: Add LOCK_MAND, LOCK_READ, LOCK_WRITE, and LOCK_RW.
Add default values.

8 years agofcntl.c: use <linux/fcntl.h> instead of <fcntl.h>
Dmitry V. Levin [Fri, 9 Oct 2015 01:38:07 +0000 (01:38 +0000)]
fcntl.c: use <linux/fcntl.h> instead of <fcntl.h>

Include <linux/fcntl.h> for proper definitions of F_* constants
and flock structures.

* configure.ac (AC_CHECK_TYPES): Check for struct flock, struct flock64,
struct __kernel_flock, and struct __kernel_flock64 in <linux/fcntl.h>.
* flock.h: New file.
* Makefile.am (strace_SOURCES): Add it.
* fcntl.c: Include it instead of <fcntl.h>.
(struct flock64): Remove.
(printflock): Use struct_kernel_flock instead of struct flock.
(printflock64): Use struct_kernel_flock64 instead of struct flock64.

8 years agompers: fix compound types with arbitrary member alignments
Elvira Khabirova [Thu, 26 Nov 2015 00:03:24 +0000 (03:03 +0300)]
mpers: fix compound types with arbitrary member alignments

* mpers.sh: Compound types are now represented as packed
with character arrays as explicit fillers inbetween members
and at the end.

8 years agoSupport C libraries without System V shared memory/ipc
Mike Frysinger [Sat, 31 Oct 2015 04:47:53 +0000 (00:47 -0400)]
Support C libraries without System V shared memory/ipc

Some systems (like Bionic) omit support for SysV related code.  That
means no C library headers for strace to include.  Add configure tests
to probe the headers from the kernel and use them when they are
available.

It might make more sense to never rely on the C library's headers as
there is no guarantee or requirement that the structure layout between
apps and the C library match that what is passed to the kernel.

* configure.ac (AC_CHECK_HEADERS): Check for linux/ipc.h,
linux/mqueue.h, linux/msg.h, linux/sem.h, linux/shm.h,
sys/ipc.h, sys/msg.h, sys/sem.h, and sys/shm.h.
* ipc_defs.h: Include <sys/ipc.h> or <linux/ipc.h> depending
on what is available.
* ipc_msg.c: Replace <sys/ipc.h> with "ipc_defs.h".
Fallback to <linux/msg.h> when available.
* ipc_msgctl.c: Include <sys/msg.h>, <asm/msgbuf.h>, or <linux/msg.h>
based on what is available.  Note missing support for old ipc structs.
* ipc_sem.c: Include <sys/sem.h> or <linux/sem.h> depending
on what is available.  Only decode sembuf when available.
* ipc_shm.c: Fallback to <linux/shm.h> when available.
* ipc_shmctl.c: Include <sys/shm.h>, <asm/shmbuf.h>, or <linux/shm.h>
based on what is available.  Note missing support for old ipc structs.
* print_mq_attr.c: Fallback to <linux/mqueue.h> when available.