]> granicus.if.org Git - strace/log
strace
6 years agobuild: prepare for -Wimplicit-fallthrough=5
Dmitry V. Levin [Tue, 6 Mar 2018 23:52:08 +0000 (23:52 +0000)]
build: prepare for -Wimplicit-fallthrough=5

* gcc_compat.h (ATTRIBUTE_FALLTHROUGH): New macro.
* block.c (block_ioctl): Use it instead of "fall through" comment.
* btrfs.c (btrfs_ioctl): Likewise.
* loop.c (loop_ioctl): Likewise.
* mtd.c (mtd_ioctl): Likewise.
* rtc.c (rtc_ioctl): Likewise.
* v4l2.c (v4l2_ioctl): Likewise.
* dm.c (dm_decode_values): Likewise.
* process.c (SYS_FUNC(ptrace)): Likewise.
* quota.c (decode_cmd_data): Likewise.
* ucopy.c (umovestr): Likewise.
* unwind.c (unwind_print_stacktrace, unwind_capture_stacktrace)):
Likewise.
* term.c (term_ioctl): Add ATTRIBUTE_FALLTHROUGH.
* ioctl.c (ioctl_decode) [ALPHA || POWERPC]: Likewise.
* m4/st_warn_cflags.m4 (gl_WARN_ADD): Add -Wimplicit-fallthrough=5.
* tests/ioctl_v4l2.c (init_v4l2_format): Reorganize the switch statement
without implicit fallthrough.

6 years agoxlat: add eBPF-based device controller constants
Eugene Syromyatnikov [Tue, 20 Feb 2018 18:48:08 +0000 (19:48 +0100)]
xlat: add eBPF-based device controller constants

Add new BPF_PROG_TYPE_CGROUP_DEVICE eBPF program type and new
BPF_CGROUP_DEVICE eBPF program attach type, added in Linux commit
v4.15-rc1~84^2~120^2~2.

* xlat/bpf_attach_type.in (BPF_CGROUP_DEVICE): New constant.
* xlat/bpf_prog_types.in (BPF_PROG_TYPE_CGROUP_DEVICE): Likewise.
* NEWS: Mention it.

6 years agoxlat: provide fallback definitions for input event constants
Eugene Syromyatnikov [Mon, 19 Feb 2018 18:25:44 +0000 (19:25 +0100)]
xlat: provide fallback definitions for input event constants

Values added using the following pair of commands:

$ cat xlat/evdev_keycode.in |
while read r; do [ -n "$r" ] &&
sed -rn 's/^#define[[:space:]]+('$r'[[:space:]]+[^[:space:]]+).*/\1/p' \
~/dev/linux/include/uapi/linux/input-event-codes.h || echo;
done > xlat/evdev_keycode.in.new
$ sort -s -n -k1,1 \
<(awk '{if (NF>1) {last = strtonum($2)}; printf("%d %s\n", last, $0)}' \
xlat/evdev_keycode.in.new) \
| sed 's/^[0-9]* //'  > xlat/evdev_keycode.in

It also verifies that the values are sorted and bsearch-ready.

* xlat/evdev_keycode.in: Add constant values.

6 years agoxlat: update the list of input event constants
Eugene Syromyatnikov [Mon, 19 Feb 2018 17:53:24 +0000 (18:53 +0100)]
xlat: update the list of input event constants

Remove some duplicating definitions and add the new ones.

* xlat/evdev_keycode.in (KEY_HANGUEL): Remove, an alternative name for
KEY_HANGEUL.
(KEY_DIRECTION): Remove, an alternative name for KEY_ROTATE_DISPLAY.
(KEY_BRIGHTNESS_ZERO): Remove, an alternative name for
KEY_BRIGHTNESS_AUTO.
(KEY_WIMAX): Remove, an alternative name for KEY_WWAN.
(BTN_A): Remove, an alternative name for BTN_SOUTH.
(BTN_B): Remove, an alternative name for BTN_EAST.
(BTN_X): Remove, an alternative name for BTN_NORTH.
(BTN_Y): Remove, an alternative name for BTN_WEST.
(BTN_STYLUS3): New constant, added in Linux commit v4.15-rc1~114^2^2~1.
(KEY_BRIGHTNESS_TOGGLE): Remove, an alternative name for
KEY_DISPLAYTOGGLE.
(KEY_ROTATE_LOCK_TOGGLE): New constant, added in Linux commit
v4.16-rc1~54^2~67.
(KEY_DATA): New constant, added in Linux commit v4.9-rc8~12^2.
(KEY_ONSCREEN_KEYBOARD): New constant, added in Linux commit
v4.12-rc1~126^2~2^12~5.
* NEWS: Mention it.

6 years agoxlat: provide fallback definitions for SCTP socket option constants
Eugene Syromyatnikov [Fri, 16 Feb 2018 18:36:07 +0000 (19:36 +0100)]
xlat: provide fallback definitions for SCTP socket option constants

Values for SCTP_GET_PEER_ADDRS_NUM_OLD, SCTP_GET_PEER_ADDRS_OLD,
SCTP_GET_LOCAL_ADDRS_NUM_OLD, SCTP_GET_LOCAL_ADDRS_OLD are reconstructed
from Linux commit v2.6.33-rc1~388^2~167^2~7.

xlat/socksctpoptions.in: Add constant values.

6 years agoxlat: update the list of SCTP socket option constants
Eugene Syromyatnikov [Fri, 16 Feb 2018 18:26:02 +0000 (19:26 +0100)]
xlat: update the list of SCTP socket option constants

* xlat/socksctpoptions.in (SCTP_DELAYED_ACK): Rename to...
(SCTP_DELAYED_SACK): ...this, per Linux commit v2.6.38-rc2~33^2.
(SCTP_SOCKOPT_PEELOFF_FLAGS): New constant, introduced in Linux commit
v4.13-rc1~157^2~39.
(SCTP_STREAM_SCHEDULER): New constant, introduced in Linux commit
v4.15-rc1~84^2~567^2~3.
(SCTP_STREAM_SCHEDULER_VALUE): New constant, introduced in Linux commit
v4.15-rc1~84^2~567^2~2.
(SCTP_INTERLEAVING_SUPPORTED): New constant, introduced in Linux commit
 v4.16-rc1~123^2~384^2~11.
* NEWS: Mention it.

6 years agoxlat: provide fallback definitions for Ethernet protocol constants
Eugene Syromyatnikov [Fri, 16 Feb 2018 17:44:42 +0000 (18:44 +0100)]
xlat: provide fallback definitions for Ethernet protocol constants

As those are not architecture-specific.

* xlat/ethernet_protocols.in: Add values to constants.

6 years agoxlat: update the list of Ethernet protocol constants
Eugene Syromyatnikov [Fri, 16 Feb 2018 17:28:44 +0000 (18:28 +0100)]
xlat: update the list of Ethernet protocol constants

* xlat/ethernet_protocols.in (ETH_P_ERSPAN2): New constant, introduced
in Linux commit v4.16-rc1~123^2~355^2~2.
(ETH_P_IBOE): New constant, introduced in commit v4.11-rc1~73^2~74.
* NEWS: Mention it.

6 years agov4l2: print known pixel/SDR formats
Eugene Syromyatnikov [Thu, 15 Feb 2018 20:16:15 +0000 (21:16 +0100)]
v4l2: print known pixel/SDR formats

* xlat/v4l2_pix_fmts.in: New file.
* xlat/v4l2_sdr_fmts.in: Likewise.
* v4l2.c [!v4l2_fourcc_be] (v4l2_fourcc_be): New macro.
(print_pixelformat): Add xlat parameter, print constant name
as a comment if it has been found in xlat.
(print_v4l2_fmtdesc, print_v4l2_frmivalenum): Pass v4l2_pix_fmts
to print_pixelformat.
(print_v4l2_format_fmt) <case V4L2_BUF_TYPE_VIDEO_CAPTURE, case
V4L2_BUF_TYPE_VIDEO_OUTPUT, case V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE,
case V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE, case V4L2_BUF_TYPE_VBI_CAPTURE,
case V4L2_BUF_TYPE_VBI_OUTPUT>: Pass v4l2_pix_fmts to print_pixelformat.
(print_v4l2_format_fmt) <case V4L2_BUF_TYPE_SDR_OUTPUT, case
V4L2_BUF_TYPE_SDR_CAPTURE>: Pass v4l2_sdr_fmts to print_pixelformat.
* tests/v4l2.c: Test it, update expected output.
* NEWS: Mention it.

6 years agov4l2: v4l2_fourcc is endianness-agnostic
Eugene Syromyatnikov [Thu, 1 Mar 2018 23:45:16 +0000 (00:45 +0100)]
v4l2: v4l2_fourcc is endianness-agnostic

v4l2_fourcc(a, b, c, d) is defined as (a | (b << 8) | (c << 16) | (d << 24)
regardless of endianness (no mnemonic on big-endian architectures),
so we don't need special handling for WORDS_BIGENDIAN both in decoder
and in the test.

* v4l2.c (print_pixelformat): Change initialisation to a simple
assignment of character array.
* tests/ioctl_v4l2.c [WORDS_BIGENDIAN]: Remove.
* NEWS: Mention this fix.

Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
Fixes: v4.10~371 "Implement Video4Linux video-input ioctls decoder"
6 years agotests: do not include <stdbool.h> in files that include "tests.h"
Dmitry V. Levin [Thu, 1 Mar 2018 01:00:24 +0000 (01:00 +0000)]
tests: do not include <stdbool.h> in files that include "tests.h"

Starting with commit v4.21-37-g4f63bc70ca95012d72e288fc3c1eeb3ba26068a4,
<stdbool.h> is included by tests.h, so all tests that already include
"tests.h" do not need to include <stdbool.h>.

* tests/btrfs.c: Do not include <stdbool.h>.
* tests/file_handle.c: Likewise.
* tests/futex.c: Likewise.
* tests/ioctl_dm.c: Likewise.
* tests/ioctl_loop.c: Likewise.
* tests/ioctl_sock_gifconf.c: Likewise.
* tests/keyctl.c: Likewise.
* tests/mq_sendrecv.c: Likewise.
* tests/perf_event_open.c: Likewise.
* tests/s390_guarded_storage.c: Likewise.
* tests/s390_pci_mmio_read_write.c: Likewise.
* tests/s390_sthyi.c: Likewise.
* tests/xet_thread_area_x86.c: Likewise.

6 years agotests: check printing of block/char device numbers in -yy mode
Eugene Syromyatnikov [Mon, 29 Jan 2018 17:50:09 +0000 (18:50 +0100)]
tests: check printing of block/char device numbers in -yy mode

* tests/dev-yy.c: New file.
* tests/pure_executables.list: Add dev-yy.
* tests/.gitignore: Likewise.
* tests/gen_tests.in (dev-yy): New test.

6 years agoprintfd: print character/block device number in -yy mode
Eugene Syromyatnikov [Thu, 25 Jan 2018 16:53:23 +0000 (17:53 +0100)]
printfd: print character/block device number in -yy mode

* util.c: Include <sys/stat.h>, <sys/sysmacros.h>,
and "largefile_wrappers.h".
(printsocket, printdev): New functions.
(printfd): Move socket matching/printing logic to printsocket.  Check
also for printdev.  Escape opening angle bracket in addition to closing angle
bracket as it can show up as a separator in printdev.
* tests/fsync-y.c: Update expected output.
* strace.1.in: Mention this.
* NEWS: Likewise.

Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
6 years agoutil.c: escape closing angle bracket in printfd
Eugene Syromyatnikov [Fri, 2 Feb 2018 18:06:31 +0000 (19:06 +0100)]
util.c: escape closing angle bracket in printfd

* util.c (printfd): Use print_quoted_string_ex instead of
print_quoted_string, specify ">" as escape_chars argument.
* tests/fsync-y.c (main): Update expected output.
* NEWS: Mention it.

6 years agoutil.c: add support for additional escape characters in string_quote
Eugene Syromyatnikov [Fri, 2 Feb 2018 17:46:29 +0000 (18:46 +0100)]
util.c: add support for additional escape characters in string_quote

Quotes are not always used to denote string limits; printfd uses angle
brackets for that, for example.  As result, mechanism for supplying
set of additional characters in order to avoid ambiguities regarding
the end of the quoted string is needed.

* defs.h (string_quote): Add escape_chars parameter.
(print_quoted_string_ex): New function prototype.
* util.c (string_quote): Add escape_chars parameter.
(print_quoted_string_ex): Rename from print_quoted_string, add
escape_chars parameter, pass it to string_quote call.
(print_quoted_string): Turn into a thin wrapper around
print_quoted_string_ex.
(printstr_ex): Pass NULL as escape_chars argument of string_quote call.
* socketutils.c (unix_parse_response): Pass NULL as escape_chars
argument of string_quote call.
* tests/print_quoted_string.c (print_octal): New function.
print_quoted_memory_ex): Use it.  Add escape_chars parameter.
(print_quoted_memory): Pass NULL as escape_chars argument
of print_quoted_memory_ex call.
* tests/tests.h (print_quoted_string_ex, print_quoted_memory_ex): Add
escape_chars parameter.
* tests/fsync-y.c: Pass NULL as escape_chars argument of
print_quoted_string_ex call.

Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
6 years agotests: check file name printing in strace -y mode
Eugene Syromyatnikov [Fri, 2 Feb 2018 16:21:22 +0000 (17:21 +0100)]
tests: check file name printing in strace -y mode

* tests/fsync-y.c: New file.
* tests/.gitignore: Add fsync-y.
* tests/Makefile.am (check_PROGRAMS): Likewise.
* tests/gen_tests.in (fsync-y): New test.

Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
6 years agotests: add print_quoted_string_ex and print_quoted_memory_ex functions
Eugene Syromyatnikov [Fri, 2 Feb 2018 16:58:18 +0000 (17:58 +0100)]
tests: add print_quoted_string_ex and print_quoted_memory_ex functions

* tests/tests.h (print_quoted_string_ex, print_quoted_memory_ex): New
declarations.
* tests/print_quoted_string.c (print_quoted_string_ex): New function,
a thin wrapper around print_quoted_memory_ex wrapper.
(print_quoted_memory_ex): Rename from print_quoted_memory, add quote
argument.
(print_quoted_memory): Turn into a thin wrapper around
print_quoted_memory_ex.

6 years agotests: check escaping in string printing
Eugene Syromyatnikov [Fri, 2 Feb 2018 16:29:36 +0000 (17:29 +0100)]
tests: check escaping in string printing

* tests/test_printstrn.c (test_print_memory): New function.
(test_printstrn): Use it.

6 years agoDo not go full octal if the next char is '8' or '9'
Eugene Syromyatnikov [Fri, 2 Feb 2018 15:15:48 +0000 (16:15 +0100)]
Do not go full octal if the next char is '8' or '9'

* util.c (string_quote): Change the upper limit for the next character
in unabbreviated octal printing from '9' to '7'.
* tests/print_quoted_string.c (print_quoted_memory): Likewise.

6 years agotests: fix abbreviated octal escape check in print_quoted_memory
Eugene Syromyatnikov [Fri, 2 Feb 2018 12:39:30 +0000 (13:39 +0100)]
tests: fix abbreviated octal escape check in print_quoted_memory

* tests/print_quoted_string.c (print_quoted_memory): Check the next
character after octal-escaped one instead of the first one in the
string.

6 years agoutil.c: reduce indentation in non-hexadecimal case in string_quote
Eugene Syromyatnikov [Thu, 1 Feb 2018 19:13:53 +0000 (20:13 +0100)]
util.c: reduce indentation in non-hexadecimal case in string_quote

As it is already too deep there.

* util.c (string_quote): Add string_ended label, jump there
after the loop in "if (usehex)" case.

6 years agoutil.c: fix switch statement indentation in string_quote
Eugene Syromyatnikov [Thu, 1 Feb 2018 19:08:08 +0000 (20:08 +0100)]
util.c: fix switch statement indentation in string_quote

While we are here, let's also remove unnecessary break statement
in the default case.

6 years agoReplace fopen_for_input and fopen_for_output with fopen_stream
Dmitry V. Levin [Tue, 27 Feb 2018 13:14:38 +0000 (13:14 +0000)]
Replace fopen_for_input and fopen_for_output with fopen_stream

* largefile_wrappers.h (fopen_for_input, fopen_for_output): Replace
with fopen_stream.
* mmap_cache.c (fopen_for_input) Likewise.
* strace.c (fopen_for_output): Likewise.

6 years agoUpdate the list of INET_DIAG_BC_* operators
Eugene Syromyatnikov [Thu, 15 Feb 2018 18:55:16 +0000 (19:55 +0100)]
Update the list of INET_DIAG_BC_* operators

* linux/inet_diag.h (INET_DIAG_BC_S_EQ, INET_DIAG_BC_D_EQ): New
enumeration items introduced by linux kernel commit v4.16-rc1~123^2~259.
* xlat/inet_diag_bytecodes.in (INET_DIAG_BC_S_EQ, INET_DIAG_BC_D_EQ): New
constants.
* NEWS: Mention it.

6 years agoxlat: update the list of SCHED_FLAG_* constants
Eugene Syromyatnikov [Thu, 15 Feb 2018 18:41:28 +0000 (19:41 +0100)]
xlat: update the list of SCHED_FLAG_* constants

* xlat/sched_flags.in (SCHED_FLAG_RECLAIM, SCHED_FLAG_DL_OVERRUN): New
constants introduced by linux kernel commits v4.13-rc1~205^2~27 and
v4.16-rc1~164^2~8, respectively.
(SCHED_FLAG_RESET_ON_FORK): Add constant value.
* tests/sched_xetattr.c: Update expected output.
* NEWS: Mention it.

6 years agoxlat: provide fallback definitions for arch-independent poll event flags
Eugene Syromyatnikov [Thu, 15 Feb 2018 18:08:14 +0000 (19:08 +0100)]
xlat: provide fallback definitions for arch-independent poll event flags

* xlat/pollflags.in (POLLIN, POLLPRI, POLLOUT, POLLRDNORM, POLLRDBAND,
POLLERR, POLLHUP, POLLNVAL, POLL_BUSY_LOOP): Add constant values.

6 years agoxlat: update the list of poll event flags
Eugene Syromyatnikov [Thu, 15 Feb 2018 17:34:25 +0000 (18:34 +0100)]
xlat: update the list of poll event flags

POLL_BUSY_LOOP was introduced by linux kernel commit v3.11-rc1~64^2~129
as POLL_LL and then renamed in v3.11-rc1~64^2~9.  POLLRDHUP was
introduced by linux kernel commit v2.6.17-rc1~796.  POLLMSG and
POLLREMOVE predate git repository.  POLLFREE was introduced by linux
kernel commit v3.3-rc5~8 for internal use only.

* xlat/pollflags.in (POLLMSG, POLLREMOVE, POLLRDHUP, POLL_BUSY_LOOP):
New constants.
* NEWS: Mention it.

6 years agoxlat: add arch-specific si_codes constants
Eugene Syromyatnikov [Mon, 12 Feb 2018 19:45:24 +0000 (20:45 +0100)]
xlat: add arch-specific si_codes constants

Based on Linux commits v4.16-rc1~159^2~17, v4.16-rc1~159^2~16,
v4.16-rc1~159^2~15, and v4.16-rc1~159^2~14.

* xlat/sigbus_codes.in (BUS_OPFETCH): New constant.
* xlat/sigfpe_codes.in (FPE_MDAOVF, __FPE_DECOVF, __FPE_DECDIV,
__FPE_DECERR, __FPE_INVASC, __FPE_INVDEC): New constants.
* xlat/sigill_codes.in (ILL_ILLPARAOP, ILL_ILLEXCPT, ILL_CPLB_VI,
ILL_CPLB_MISS, ILL_CPLB_MULHIT, ILL_DBLFLT, ILL_HARDWALL, ILL_BADIADDR,
__ILL_BREAK, __ILL_BNDMOD): Likewise.
* xlat/sigsegv_codes.in (SEGV_STACKFLOW, __SEGV_PSTKOVF): Likewise.
* xlat/sigtrap_codes.in (TRAP_STEP, TRAP_TRACEFLOW, TRAP_WATCHPT,
TRAP_ILLTRAP): Likewise.
* NEWS: Mention it.

6 years agortnl_tc: support new TCA_* attributes
Eugene Syromyatnikov [Mon, 12 Feb 2018 19:26:32 +0000 (20:26 +0100)]
rtnl_tc: support new TCA_* attributes

* xlat/rtnl_tc_attrs.in (TCA_HW_OFFLOAD, TCA_INGRESS_BLOCK,
TCA_EGRESS_BLOCK): New constants introduced by linux kernel commits
v4.15-rc4~13^2~5^2~2 and v4.16-rc1~123^2~139^2~5.
* rtnl_tc.c (tcmsg_nla_decoders) <TCA_HW_OFFLOAD, TCA_INGRESS_BLOCK,
TCA_EGRESS_BLOCK>: New items.

6 years agortnl_link: add decoding of new IFLA_* attributes
Eugene Syromyatnikov [Mon, 12 Feb 2018 19:02:58 +0000 (20:02 +0100)]
rtnl_link: add decoding of new IFLA_* attributes

* xlat/rtnl_link_attrs.in (IFLA_NEW_NETNSID, IFLA_IF_NETNSID,
IFLA_CARRIER_UP_COUNT, IFLA_CARRIER_DOWN_COUNT, IFLA_NEW_IFINDEX): New
constants introduced by linux kernel commits v4.15-rc1~84^2~557,
v4.15-rc1~84^2~133^2, v4.16-rc1~123^2~91, and v4.16-rc1~123^2~24^2.
* rtnl_link.c (ifinfomsg_nla_decoders) <IFLA_NEW_NETNSID,
IFLA_IF_NETNSID, IFLA_CARRIER_UP_COUNT, IFLA_CARRIER_DOWN_COUNT,
IFLA_NEW_IFINDEX>: New items.

6 years agortnl_link: implement IFLA_EVENT_* decoding
Eugene Syromyatnikov [Mon, 12 Feb 2018 18:58:47 +0000 (19:58 +0100)]
rtnl_link: implement IFLA_EVENT_* decoding

* rtnl_link.c (decode_ifla_event): New function.
(ifinfomsg_nla_decoders) <[IFLA_EVENT]>: Use it.
* xlat/rtnl_ifla_events.in: New file.
* NEWS: Mention it.

6 years agoxlat: update the list of RWF_* constants
Eugene Syromyatnikov [Mon, 12 Feb 2018 18:41:41 +0000 (19:41 +0100)]
xlat: update the list of RWF_* constants

* xlat/rwf_flags.in (RWF_APPEND): New constant introduced by linux
kernel commit v4.16-rc1~145^2~7.
* NEWS: Mention it.

6 years agotests: check decoding of ip6:port pairs associated with socket descriptors
Eugene Syromyatnikov [Thu, 8 Feb 2018 13:23:49 +0000 (14:23 +0100)]
tests: check decoding of ip6:port pairs associated with socket descriptors

* tests/net-yy-inet.c: Generalise test.
* tests/net-yy-inet6.c: New file.
* tests/pure_executables.list: Add net-yy-inet6.
* tests/.gitignore: Likewise.
* tests/gen_tests.in (net-yy-inet6): New entry.

6 years agoPrint IPv6 addresses in brackets
Eugene Syromyatnikov [Thu, 8 Feb 2018 13:15:01 +0000 (14:15 +0100)]
Print IPv6 addresses in brackets

Follow a common practice for printing address:port pair to distinguish
address parts delimiter from address/port delimiter.

* socketutils.c (inet_parse_response) <ob, cb>: New variables,
initialise them to open/closing brackets or empty strings based
on address family.
(inet_parse_response): Print ob and cb around src_buf and dst_buf.
* NEWS: Mention this improvement.

6 years agostrace.spec.in: add gcc to build requirements
Dmitry V. Levin [Mon, 26 Feb 2018 23:22:24 +0000 (23:22 +0000)]
strace.spec.in: add gcc to build requirements

There are rumors in circulation that some rpm-based distributions
are going to exclude gcc from their default build environments.
Workaround this policy silliness by adding gcc to build requirements.

* strace.spec.in (BuildRequires): Add gcc.

6 years agoMove definitions of fopen_for_input to largefile_wrappers.h
Dmitry V. Levin [Mon, 26 Feb 2018 23:22:24 +0000 (23:22 +0000)]
Move definitions of fopen_for_input to largefile_wrappers.h

* largefile_wrappers.h (fopen_for_input): Define along with
fopen_for_output.
* mmap_cache.c: Include "largefile_wrappers.h".
(fopen_for_input): Remove.

6 years agoIntroduce mmap_cache.h
Dmitry V. Levin [Mon, 26 Feb 2018 23:22:24 +0000 (23:22 +0000)]
Introduce mmap_cache.h

Let's avoid bloating defs.h and introduce a separate header for
mmap_cache.

* defs.h (struct mmap_cache_t, enum mmap_cache_protection,
enum mmap_cache_rebuild_result, mmap_cache_enable, mmap_cache_is_enabled,
mmap_cache_invalidate, mmap_cache_delete, mmap_cache_rebuild_if_invalid,
mmap_cache_search): Move ...
* mmap_cache.h: ... to this new file.
* Makefile.am (strace_SOURCES): Add mmap_cache.h.
* mmap_cache.c: Include mmap_cache.h.
* strace.c: Likewise.
* syscall.c: Likewise.
* unwind.c: Likewise.

6 years agommap_cache: record device major and minor numbers
Masatake YAMATO [Fri, 16 Feb 2018 19:37:14 +0000 (04:37 +0900)]
mmap_cache: record device major and minor numbers

* defs.h (struct mmap_cache_t): Add major and minor fields.
* mmap_cache.c (build_mmap_cache): Record device major and minor numbers.

Signed-off-by: Masatake YAMATO <yamato@redhat.com>
6 years agommap_cache: add function to enable mmap_cache
Masatake YAMATO [Fri, 16 Feb 2018 19:37:13 +0000 (04:37 +0900)]
mmap_cache: add function to enable mmap_cache

mmap_cache was enabled indirectly via unwind feature.  As now mmap_cache
can be used by other part of strace, a way to enable mmap_cache directly
is needed.

* defs.h (mmap_cache_enable, mmap_cache_is_enabled): New function
prototypes.
* mmap_cache.c (use_mmap_cache): New file local variable.
(mmap_cache_enable, mmap_cache_is_enabled): New functions.
* syscall.c (syscall_exiting_decode): Use mmap_cache_is_enabled()
instead of stack_trace_enabled.
* unwind.c (unwind_init): Invoke mmap_cache_enable.

Signed-off-by: Masatake YAMATO <yamato@redhat.com>
6 years agommap_cache, unwind: lift up mmap_cache_delete invocation from unwind.c
Masatake YAMATO [Fri, 16 Feb 2018 19:37:12 +0000 (04:37 +0900)]
mmap_cache, unwind: lift up mmap_cache_delete invocation from unwind.c

mmap_cache_delete function used to be called by destructor of unwind
related code.  Now that other parts can use mmap cache,
mmap_cache_delete is called separately from unwind_tcb_fin.

* unwind.c (unwind_tcb_fin): Move mmap_cache_delete invocation ...
* strace.c (droptcb): ... here.

Signed-off-by: Masatake YAMATO <yamato@redhat.com>
6 years agommap_cache: record protection bits
Masatake YAMATO [Fri, 16 Feb 2018 19:37:11 +0000 (04:37 +0900)]
mmap_cache: record protection bits

To make mmap_cache reusable, records protection bits of mmap entries.

* defs.h (mmap_cache_protection): New enum.
* mmap_cache.c (build_mmpa_cache): Don't ignore entries that are not
executable, just record the protection bits here.
* unwind.c (print_stack_frame): Ignore entries that are not executable.

Signed-off-by: Masatake YAMATO <yamato@redhat.com>
6 years agommap_cache: move code for searching a mmap cache from unwind
Masatake YAMATO [Fri, 16 Feb 2018 19:37:10 +0000 (04:37 +0900)]
mmap_cache: move code for searching a mmap cache from unwind

print_stack_frame function in unwind.c searches a mmap entry in mmap
cache.  The found entry is then used for unwinding.  However, a function
searching for a mmap entry may be useful for other purposes than
unwinding.

This change re-factors the function; code for searching an entry is
now defined as a stand-alone function named mmap_cache_search.

* defs.h (mmap_cache_search): New function prototype.
print_stack_frame.
* mmap_cached.c (mmap_cache_search): New function derived from
print_stack_frame.
* unwind.c (print_stack_frame): Use it.

Signed-off-by: Masatake YAMATO <yamato@redhat.com>
6 years agommap_cache: new subsystem derived from unwind.c
Masatake YAMATO [Fri, 16 Feb 2018 19:37:09 +0000 (04:37 +0900)]
mmap_cache: new subsystem derived from unwind.c

For making mmap cache code reusable from other areas in strace than
unwind, mmap cache related code and unwind related code should be
separated.

This change moves the most of mmap cache code from unwind.c
to mmap_cache.c, a new file.

* unwind.c: Move mmap_cache implementation ...
* mmap_cache.c: ... to this new file.
* Makefile.am (strace_SOURCES): add mmap_cache.c.
* defs.h (struct tcb): Move mmap_cache, mmap_cache_size, and
mmap_cache_generation fields out of [USE_LIBUNWIND] condition.
(mmap_cache_invalidate, mmap_cache_delete,
mmap_cache_rebuild_if_invalid): New function prototypes.
(struct mmap_cache_t, enum mmap_cache_rebuild_result): Move from
unwind.c.
* syscall.c (syscall_exiting_decode): Replace unwind_cache_invalidate
with mmap_cache_invalidate.

Signed-off-by: Masatake YAMATO <yamato@redhat.com>
6 years agounwind: lift up unw_flush_cache from mmap cache management code
Masatake YAMATO [Fri, 16 Feb 2018 19:37:08 +0000 (04:37 +0900)]
unwind: lift up unw_flush_cache from mmap cache management code

For making mmap cache code reusable from other areas in strace
than unwind, mmap cache related code and unwind related code
should be separated.

This change is one of the steps for the separation.  It moves
unw_flush_cache function call from the core of mmap cache code
to upper level code.

* unwind.c (mmap_cache_rebuild_result): New enum.
(rebuild_cache_if_invalid): Return MMAP_CACHE_REBUILD_* instead of
a bool value.
(build_mmap_cache): Don't call unw_flush_cache here.
(unwind_print_stacktrace, unwind_capture_stacktrace): Call
unw_flush_cache here instead.

Signed-off-by: Masatake YAMATO <yamato@redhat.com>
6 years agodebian: sync with 4.21-1 package
Dmitry V. Levin [Sun, 25 Feb 2018 00:31:14 +0000 (00:31 +0000)]
debian: sync with 4.21-1 package

Versioned dependency on debhelper is not updated for backwards
compatibility.

* debian/changelog.in: Fix ancient changelog entries.
* debian/control (Build-Depends): Add dependency on libbluetooth-dev.
(Standards-Version): Update to 4.1.3.
(Vcs-Git, Vcs-Browser): Move from alioth to salsa.d.o.
(strace, strace-udeb) <Architecture>: Change to linux-any.
(strace64, strace-udeb) <Priority>: Change to optional.
* debian/rules: Use /usr/share/dpkg/architecture.mk instead of manually
setting build variables.
(configure): New target.
(build/Makefile, build-udeb/Makefile, build64/Makefile): Depend on it.
(binary-arch): Use build64/strace.1 for strace64 subpackage.
* debian/strace.manpages: Add build/ prefix.
* debian/strace64.manpages: Add build64/ prefix.

6 years agom4/mpers.m4: fix mpers name in comments added to config.h
Eugene Syromyatnikov [Fri, 23 Feb 2018 22:26:49 +0000 (23:26 +0100)]
m4/mpers.m4: fix mpers name in comments added to config.h

* m4/mpers.m4 (st_MPERS_STRUCT_STAT): Use mpers_name instead of
MPERS_NAME in comments generated by AC_DEFINE.

Fixes: v4.14~169 ("mpers.m4: check for struct stat64, struct stat, and their members")
6 years agompers.awk: use stdint.h instead of inttypes.h
Dmitry V. Levin [Sat, 24 Feb 2018 20:42:03 +0000 (20:42 +0000)]
mpers.awk: use stdint.h instead of inttypes.h

As <inttypes.h> is included in files generated by mpers.awk to obtain
definitions of uintNN_t types provided by <stdint.h>, replace the former
header with the latter.

* mpers.awk: Use <stdint.h> instead of <inttypes.h>.
* mpers_test.sh: Update expected output.

6 years agoWipe out references to defunct sourceforge
Dmitry V. Levin [Fri, 23 Feb 2018 23:18:56 +0000 (23:18 +0000)]
Wipe out references to defunct sourceforge

The old location of strace-devel mailing list is defunct, it used to
lose email messages and sometimes did not deliver any mails for days.

The mailing list has been moved to strace-devel@lists.strace.io.

* CREDITS.in: Update the mailing list address.
(Zhang Le): Update email address.
* README: Update the mailing list address.
* README.md: Likewise.
* configure.ac (AC_INIT): Likewise.
* strace.1.in (.SH REPORTING BUGS): Likewise.
* strace-log-merge.1.in (.SH REPORTING BUGS): Likewise.
* sched.c (SYS_FUNC(sched_getattr)): Update the mailing list reference.
* tests/scno_tampering.sh: Likewise.
* qemu_multiarch_testing/README: Update git repository address.
* NEWS: Mention the change of the mailing list address.

Closes: https://github.com/strace/strace/issues/38
6 years agom68k: fix build
Dmitry V. Levin [Wed, 21 Feb 2018 23:03:27 +0000 (23:03 +0000)]
m68k: fix build

When <sys/reg.h> is included after <linux/ptrace.h>, the build fails
on m68k with the following diagnostics:

  In file included from /usr/include/linux/ptrace.h:101:0,
                   from ptrace.h:51,
                   from sigreturn.c:2:
  /usr/include/m68k-linux-gnu/sys/reg.h:26:3: error: expected identifier
  before numeric constant
     PT_D1 = 0,
     ^

Apparently, the only architecture where strace needs definitions
provided by <sys/reg.h> is x86_64, other three (m68k, tile, and x86)
are fine with definitions already provided by <linux/ptrace.h>.

Fix the issue by getting rid of <sys/reg.h> and defining necessary
macros in linux/x86_64/arch_regs.h file.

* configure.ac (AC_CHECK_HEADERS): Remove sys/reg.h.
* regs.h: Do not include <sys/reg.h>.
* linux/x86_64/arch_regs.h (R15, R14, R13, R12, RBP, RBX, R11, R10,
R9, R8, RAX, RCX, RDX, RSI, RDI, ORIG_RAX, RIP, CS, EFLAGS, RSP, SS,
FS_BASE, GS_BASE, DS, ES, FS, GS): New macros.
* NEWS: Mention this fix.

Fixes: v4.21~21 ("Include <sys/ptrace.h> early")
6 years agoDemote sourceforge.net
Dmitry V. Levin [Thu, 15 Feb 2018 11:07:03 +0000 (11:07 +0000)]
Demote sourceforge.net

https://sourceforge.net/p/strace/code/ is defunct: it doesn't accept
new commits for too long.
Likewise, https://sourceforge.net/projects/strace/files/ doesn't accept
new files for too long.

* README.md: Remove sourceforge.net URL.
* debian/copyright: Replace the sourceforge.net based strace project URL
with a github based one.
* strace.spec.in (Source): Likewise.

6 years agoUpdate copyright headers
Dmitry V. Levin [Thu, 15 Feb 2018 11:07:03 +0000 (11:07 +0000)]
Update copyright headers

* COPYING: Update copyright year number range.
* debian/copyright: Sync with COPYING.

6 years agoPost-release administrivia
Dmitry V. Levin [Wed, 14 Feb 2018 03:00:00 +0000 (03:00 +0000)]
Post-release administrivia

* NEWS: Add a header line for the next release.
* debian/changelog.in: Add a changelog entry for 4.21-1.
* strace.spec.in: Likewise.

6 years agoPrepare for 4.21 release v4.21
Dmitry V. Levin [Tue, 13 Feb 2018 23:00:00 +0000 (23:00 +0000)]
Prepare for 4.21 release

* NEWS: Update for 4.21 release.

6 years agotests/s390_sthyi.c: skip the test if s390_sthyi returns an error
Eugene Syromyatnikov [Tue, 13 Feb 2018 22:57:27 +0000 (23:57 +0100)]
tests/s390_sthyi.c: skip the test if s390_sthyi returns an error

tests/s390_sthyi.c (main): replace error_msg_and_fail with
error_msg_and_skip if rc is non-zero.

6 years agoUpdate copyright headers
Dmitry V. Levin [Tue, 13 Feb 2018 22:00:00 +0000 (22:00 +0000)]
Update copyright headers

Headers updated automatically using maint/update_copyright_years.sh
script.

6 years agoRemove old and unused maintenance scripts
Eugene Syromyatnikov [Tue, 13 Feb 2018 21:00:46 +0000 (22:00 +0100)]
Remove old and unused maintenance scripts

Firewell, last witnesses of bygone era.

* linux/sparc/gen.pl: Remove.
* linux/x86_64/gentab.pl: Likewise.
* xlate.el: Likewise.
* Makefile.am (EXTRA_DIST): Remove them.

Suggested-by: Elvira Khabirova <lineprinter@altlinux.org>
Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
6 years agoConsistently use MAX_ERRNO_VALUE
Dmitry V. Levin [Tue, 13 Feb 2018 05:05:13 +0000 (05:05 +0000)]
Consistently use MAX_ERRNO_VALUE

* filter_qualify.c (parse_inject_token): Replace 4095
with MAX_ERRNO_VALUE.
* negated_errno.h (is_negated_errno): Likewise.  Remove redundant
comment.

6 years agoExport SIZEOF_LONG and SIZEOF_KERNEL_LONG_T to tests
Dmitry V. Levin [Tue, 13 Feb 2018 04:17:08 +0000 (04:17 +0000)]
Export SIZEOF_LONG and SIZEOF_KERNEL_LONG_T to tests

* configure.ac (AC_SUBST): Add SIZEOF_LONG and SIZEOF_KERNEL_LONG_T.
* tests/Makefile.am (SIZEOF_LONG, SIZEOF_KERNEL_LONG_T): New variables.
(AM_TEST_LOG_FLAGS): Pass them.
* bootstrap: Substitute them.

6 years agotests: avoid ioctl_kvm_run test failure when built with gcc -O0
Eugene Syromyatnikov [Tue, 13 Feb 2018 01:38:54 +0000 (02:38 +0100)]
tests: avoid ioctl_kvm_run test failure when built with gcc -O0

When built with -O0, gcc (rightfully) generates function prologue, which
results in writing %rbp to the stack, causing premature KVM_EXIT_MMIO.
It could be possible to avoid such problems by "naked" attribute but,
unfortunately, the latter is not available on x86 with older GCC.
A trick suggested in [1] is used instead: assembly is moved
to the global scope.

[1] https://gcc.gnu.org/bugzilla/show_bug.cgi?id=50242#c3

* tests/ioctl_kvm_run.c (code): Remove function.
Add globally scoped __asm__ with the function code and its size.
(code, code_size): New extern symbols declarations.
(run_kvm): Remove code_size definition and initialization.

Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
6 years agotests/ioctl_kvm_run.c: add KVM_EXIT_MMIO diagnostics
Eugene Syromyatnikov [Tue, 13 Feb 2018 01:37:19 +0000 (02:37 +0100)]
tests/ioctl_kvm_run.c: add KVM_EXIT_MMIO diagnostics

As it has proven itself useful.

* tests/ioctl_kvm_run.c (run_kvm) <case KVM_EXIT_MMIO:>: Fail
on unexpected KVM_EXIT_MMIO, providing relevant diagnostics.

6 years agotests: add compatibility layer for accept call
Eugene Syromyatnikov [Tue, 13 Feb 2018 01:03:16 +0000 (02:03 +0100)]
tests: add compatibility layer for accept call

Recent glibc (since version 2.26) uses accept4 syscall for implementing
accept call on sparc.  Unfortunately, it's impossible to simply fall
back on raw syscall as it had not been wired up until linux commit
v4.4-rc8~4^2~1.

* tests/accept_compat.h: New file.
* tests/Makefile.am (EXTRA_DIST): Add it.
* tests/net-y-unix.c: Include accept_compat.h, use do_accept()
instead of accept() calls.
* tests/net-yy-inet.c: Likewise.
* tests/net-yy-unix.c: Likewise.
* tests/net.expected: Allow accept4.

6 years agodebian: build strace-udeb separately
Dmitry V. Levin [Mon, 12 Feb 2018 18:28:16 +0000 (18:28 +0000)]
debian: build strace-udeb separately

* debian/rules (extra_build_targets): Add build-udeb-stamp.
(build-udeb/Makefile): New rule.
(clean): Remove build-udeb.
* debian/strace-udeb.install: Update.

Fixes: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=826223
6 years agoEnable symbol demangling in deb- and rpm-driven builds
Dmitry V. Levin [Mon, 12 Feb 2018 18:28:16 +0000 (18:28 +0000)]
Enable symbol demangling in deb- and rpm-driven builds

* debian/control (Build-Depends) [amd64]: Add libiberty-dev.
* strace.spec.in (buildrequires_libunwind_devel): Add binutils-devel.

6 years agodebian: re-enable -k option on x86_64
Dmitry V. Levin [Mon, 12 Feb 2018 18:28:16 +0000 (18:28 +0000)]
debian: re-enable -k option on x86_64

This partially reverts commit v4.13~177.

* debian/control (Build-Depends) [amd64]: Add libunwind-dev.

6 years agoAdd "strace -V" output to build log
Dmitry V. Levin [Mon, 12 Feb 2018 18:28:16 +0000 (18:28 +0000)]
Add "strace -V" output to build log

* strace.spec.in (%check): Print "strace -V" output before
running the test suite.
* debian/rules (%-stamp): Likewise.

6 years agoxlat: update NT_* constants
Eugene Syromyatnikov [Mon, 12 Feb 2018 19:16:08 +0000 (20:16 +0100)]
xlat: update NT_* constants

* xlat/nt_descriptor_types.in (NT_PPC_PKEY): New constant introduced
by linux kernel commit v4.16-rc1~93^2~72.

6 years agoUpdate the list of PKEY_* constants
Eugene Syromyatnikov [Mon, 12 Feb 2018 18:01:10 +0000 (19:01 +0100)]
Update the list of PKEY_* constants

* xlat/pkey_access.in (PKEY_DISABLE_EXECUTE): New constant introduced
by linux kernel commit v4.16-rc1~93^2~85.
* tests/pkey_alloc.c: Update expected output.
* NEWS: Mention it.

6 years agopowerpc, powerpc64: wire up pkey_* syscalls
Eugene Syromyatnikov [Mon, 12 Feb 2018 17:58:28 +0000 (18:58 +0100)]
powerpc, powerpc64: wire up pkey_* syscalls

* linux/powerpc/syscallent.h [384..386]: Add pkey_alloc,
pkey_free, and pkey_mprotect syscalls introduced by linux kernel
commits v4.16-rc1~93^2~70 and v4.16-rc1~93^2~69, respectively.
* linux/powerpc64/syscallent.h: Likewise.
* NEWS: Mention it.

6 years agoUpdate NEWS
Eugene Syromyatnikov [Mon, 12 Feb 2018 00:25:26 +0000 (01:25 +0100)]
Update NEWS

6 years agolinux/ia64: remove IA-32 mode support
Eugene Syromyatnikov [Sun, 11 Feb 2018 21:50:38 +0000 (22:50 +0100)]
linux/ia64: remove IA-32 mode support

There is no compat support in strace and there are no systems
within reach that would allow to test it.

* linux/ia64/arch_regs.c (IA64_PSR_IS, ia64_ia32mode): Remove.
* linux/ia64/get_error.c (get_error): Remove ia64_ia32mode branch.
* linux/ia64/get_scno.c (arch_get_scno): Likewise.
* linux/ia64/get_syscall_args.c (get_syscall_args): Likewise.
* linux/ia64/set_error.c (arch_set_error, arch_set_success): Likewise.
* linux/ia64/set_scno.c (arch_set_scno): Likewise.

6 years agosyscall.c: parse return code second time after injecting
Eugene Syromyatnikov [Thu, 8 Feb 2018 10:42:19 +0000 (11:42 +0100)]
syscall.c: parse return code second time after injecting

In order to have the same view as tracee has, with regards to
"never fail" syscalls.

* syscall.c (tamper_with_syscall_exiting): Call get_error after the
return value tampering to re-initialise u_rval and u_error fields
of struct tcb.

6 years agosparc: mark as an architecture that has a dedicated error register
Eugene Syromyatnikov [Sun, 11 Feb 2018 23:39:09 +0000 (00:39 +0100)]
sparc: mark as an architecture that has a dedicated error register

* linux/sparc/arch_defs_.h (HAVE_ARCH_DEDICATED_ERR_REG): New macro,
define to 1.

6 years agostrace.1.in: ffix
Eugene Syromyatnikov [Sun, 11 Feb 2018 04:22:38 +0000 (05:22 +0100)]
strace.1.in: ffix

6 years agoInclude <sys/ptrace.h> early
Dmitry V. Levin [Sun, 11 Feb 2018 00:26:09 +0000 (00:26 +0000)]
Include <sys/ptrace.h> early

Include "ptrace.h" before any header that can include <signal.h>
because on some architectures the latter may include <asm/sigcontext.h>
which in turn may include <asm/ptrace.h> with potentially devastating
effect on <sys/ptrace.h>.

* process.c: Include "ptrace.h" before "regs.h".
* rt_sigframe.c: Likewise.
* sigreturn.c: Include "ptrace.h" before "nsig.h".
* syscall.c: Likewise.
* wait.c: Include "ptrace.h" before <sys/wait.h>.
* strace.c: Include "ptrace.h" before <signal.h>.
* tests/ptrace.c: Likewise.
* tests/test_ucopy.c: Include <sys/ptrace.h> before <signal.h>.

6 years agoInclude <limits.h> instead of <sys/param.h>
Dmitry V. Levin [Sun, 11 Feb 2018 00:26:09 +0000 (00:26 +0000)]
Include <limits.h> instead of <sys/param.h>

Do not include <sys/param.h> unnecessarily as it includes <signal.h>.

* pathtrace.c: Include <limits.h> instead of <sys/param.h>.
* strace.c: Likewise.
* syscall.c: Likewise.
* util.c: Likewise.
* tests/getcwd.c: Likewise.
* tests/group_req.c: Likewise.
* tests/inode_of_sockfd.c: Likewise.
* tests/ip_mreq.c: Likewise.
* tests/printpath-umovestr.c: Likewise.
* tests/qual_fault.c: Likewise.
* tests/test_printpath.c: Likewise.
* tests/umovestr3.c: Likewise.
* tests/net-y-unix.c: Do not include <sys/param.h>.
* tests/net-yy-unix.c: Likewise.

6 years agobasic_filters.c: introduce scno_by_name
Eugene Syromyatnikov [Thu, 1 Feb 2018 12:49:54 +0000 (13:49 +0100)]
basic_filters.c: introduce scno_by_name

As it will be used elsewhere.

* basic_filters.c (scno_by_name): New function.
(qualify_syscall_name): Use it.
* defs.h (scno_by_name): New declaration.

6 years agoxstring.h: rephrase xappendstr description a bit
Eugene Syromyatnikov [Sat, 10 Feb 2018 13:43:16 +0000 (14:43 +0100)]
xstring.h: rephrase xappendstr description a bit

6 years agoxlat.c: return NULL in sprintflags if there are no flags
Eugene Syromyatnikov [Wed, 7 Feb 2018 01:13:57 +0000 (02:13 +0100)]
xlat.c: return NULL in sprintflags if there are no flags

Otherwise the auxstr is rather ugly at times.

* xlat.c (sprintflags): Return NULL if no flags were printed.

6 years agoChange type of injected rval to kernel_long_t
Eugene Syromyatnikov [Thu, 1 Feb 2018 11:34:05 +0000 (12:34 +0100)]
Change type of injected rval to kernel_long_t

* defs.h (struct inject_data): Change type of rval field to
kernel_ulong_t.
* filter_qualify.c (parse_inject_token): Use string_to_kulong instead of
string_to_uint for rval parsing.  Warn if retval is clipped in compat
personality.

6 years agoMark architectures that indicate syscall error in a dedicated register
Eugene Syromyatnikov [Sat, 10 Feb 2018 00:43:54 +0000 (01:43 +0100)]
Mark architectures that indicate syscall error in a dedicated register

* linux/alpha/arch_defs_.h (HAVE_ARCH_DEDICATED_ERR_REG): New macro,
define to 1.
* linux/ia64/arch_defs_.h: Likewise.
* linux/mips/arch_defs_.h: Likewise.
* linux/powerpc/arch_defs_.h: Likewise.
* linux/powerpc64/arch_defs_.h: Likewise.
* linux/sparc64/arch_defs_.h: Likewise.
* linux/arch_defs_.h [!HAVE_ARCH_DEDICATED_ERR_REG]
(HAVE_ARCH_DEDICATED_ERR_REG): New macro, define to 0.
* linux/nios2/arch_defs_.h: New file.
* Makefile.am (EXTRA_DIST): Add it.

6 years agoMake string_to_uint_ex more universal
Eugene Syromyatnikov [Thu, 1 Feb 2018 11:31:21 +0000 (12:31 +0100)]
Make string_to_uint_ex more universal

And add support for reading of various types.

* string_to_uint.c (string_to_uint_ex): Change to work with long long.
(string_to_uint): Move it...
* string_to_uint.h (string_to_uint): ...here.
(string_to_uint_upto): Accept long long as max_val, return long long.
(string_to_ulong, string_to_kulong, string_to_ulonglong): New functions,
for completeness.

Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
6 years agoAdd pure syscall flag
Eugene Syromyatnikov [Wed, 7 Feb 2018 17:46:54 +0000 (18:46 +0100)]
Add pure syscall flag

* basic_filters.c (lookup_class) <syscall_class>: Add "%pure" for
TRACE_PURE.
* sysent.h (TRACE_PURE): New syscall flag.
* sysent_shorthand_defs.h (PU): New shorthand macro.
* linux/32/syscallent.h ([172], [173], [174], [175], [176], [177],
[178]): Add PU flag to getpid, getppid, getuid, geteuid, getgid,
getegid, gettid syscalls.
* linux/64/syscallent.h ([172], [173], [174], [175], [176], [177],
[178]): Add PU flag to getpid, getppid, getuid, geteuid, getgid,
getegid, gettid syscalls.
* linux/aarch64/syscallent.h ([1060]): Add PU flag to getpgrp syscalls.
* linux/alpha/syscallent.h ([20], [24], [47], [63], [64], [89],
[378]): Add PU flag to getxpid, getxuid, getxgid, getpgrp, getpagesize,
getdtablesize, gettid syscalls.
* linux/arc/syscallent.h ([246]): Add PU flag to arc_gettls syscalls.
* linux/arm/syscallent.h ([20], [24], [47], [49], [50], [64], [65],
[199], [200], [201], [202], [224], [ARM_FIRST_SHUFFLED_SYSCALL+1+6]):
Add PU flag to getpid, getuid, getgid, geteuid, getegid, getppid,
getpgrp, getuid32, getgid32, geteuid32, getegid32, gettid, get_tls
syscalls.
* linux/avr32/syscallent.h ([20], [24], [47], [49], [50], [64], [65],
[176]): Add PU flag to getpid, getuid, getgid, geteuid, getegid,
getppid, getpgrp, gettid syscalls.
* linux/bfin/syscallent.h ([20], [24], [47], [49], [50], [64], [65],
[199], [200], [201], [202], [224]): Add PU flag to getpid, getuid,
getgid, geteuid, getegid, getppid, getpgrp, getuid32, getgid32,
geteuid32, getegid32, gettid syscalls.
* linux/hppa/syscallent.h ([20], [24], [47], [49], [50], [64], [65],
[206]): Add PU flag to getpid, getuid, getgid, geteuid, getegid,
getppid, getpgrp, gettid syscalls.
* linux/i386/syscallent.h ([20], [24], [47], [49], [50], [64], [65],
[199], [200], [201], [202], [224]): Add PU flag to getpid, getuid,
getgid, geteuid, getegid, getppid, getpgrp, getuid32, getgid32,
geteuid32, getegid32, gettid syscalls.
* linux/ia64/syscallent.h ([1041], [1042], [1046], [1047], [1062],
[1063], [1105], [1171]): Add PU flag to getpid, getppid, getuid,
geteuid, getgid, getegid, gettid, getpagesize syscalls.
* linux/m68k/syscallent.h ([20], [24], [47], [49], [50], [64],
[65], [166], [199], [200], [201], [202], [221], [333]): Add PU flag
to getpid, getuid, getgid, geteuid, getegid, getppid, getpgrp,
getpagesize, getuid32, getgid32, geteuid32, getegid32, gettid,
get_thread_area syscalls.
* linux/metag/syscallent.h ([248]): Add PU flag to metag_get_tls
syscalls.
* linux/microblaze/syscallent.h ([20], [24], [47], [49], [50], [64],
[65], [199], [200], [201], [202], [224]): Add PU flag to getpid,
getuid, getgid, geteuid, getegid, getppid, getpgrp, getuid32, getgid32,
geteuid32, getegid32, gettid syscalls.
* linux/powerpc64/syscallent.h ([20], [24], [47], [49], [50], [64],
[65], [207]): Add PU flag to getpid, getuid, getgid, geteuid, getegid,
getppid, getpgrp, gettid syscalls.
* linux/powerpc/syscallent.h ([20], [24], [47], [49], [50], [64],
[65], [207]): Add PU flag to getpid, getuid, getgid, geteuid, getegid,
getppid, getpgrp, gettid syscalls.
* linux/s390/syscallent.h ([20], [24], [47], [49], [50], [64], [65],
[199], [200], [201], [202], [236]): Add PU flag to getpid, getuid,
getgid, geteuid, getegid, getppid, getpgrp, getuid32, getgid32,
geteuid32, getegid32, gettid syscalls.
* linux/s390x/syscallent.h ([20], [64], [65], [199], [200], [201],
[202], [236]): Add PU flag to getpid, getppid, getpgrp, getuid,
getgid, geteuid, getegid, gettid syscalls.
* linux/sh64/syscallent.h ([20], [24], [47], [49], [50], [64], [65],
[199], [200], [201], [202], [252]): Add PU flag to getpid, getuid,
getgid, geteuid, getegid, getppid, getpgrp, getuid32, getgid32,
geteuid32, getegid32, gettid syscalls.
* linux/sh/syscallent.h ([20], [24], [47], [49], [50], [64], [65],
[199], [200], [201], [202], [224]): Add PU flag to getpid, getuid,
getgid, geteuid, getegid, getppid, getpgrp, getuid32, getgid32,
geteuid32, getegid32, gettid syscalls.
* linux/sparc64/syscallent.h ([20], [24], [47], [49], [50], [64], [81],
[143], [197], [340]): Add PU flag to getpid, getuid, getgid, geteuid,
getegid, getpagesize, getpgrp, gettid, getppid, kern_features syscalls.
* linux/sparc/syscallent.h ([20], [24], [44], [47], [49], [50], [53],
[64], [69], [70], [81], [143], [197], [340]): Add PU flag to getpid,
getuid, getuid32, getgid, geteuid, getegid, getgid32, getpagesize,
geteuid32, getegid32, getpgrp, gettid, getppid, kern_features syscalls.
* linux/x32/syscallent.h ([39], [102], [104], [107], [108], [110],
[111], [186]): Add PU flag to getpid, getuid, getgid, geteuid, getegid,
getppid, getpgrp, gettid syscalls.
* linux/x86_64/syscallent.h ([39], [102], [104], [107], [108], [110],
[111], [186]): Add PU flag to getpid, getuid, getgid, geteuid, getegid,
getppid, getpgrp, gettid syscalls.
* linux/xtensa/syscallent.h ([120], [127], [137], [139], [140], [141],
[150], [151]): Add PU flag to getpid, gettid, getuid, getgid, geteuid,
getegid, getppid, getpgrp syscalls.
* strace.1.in (.SS Filtering): Document it.
* NEWS: Mention it.

6 years agosyscall.c: warn if tampering failed
Eugene Syromyatnikov [Wed, 7 Feb 2018 01:16:50 +0000 (02:16 +0100)]
syscall.c: warn if tampering failed

6 years agosyscall.c: set errno if syscall is tampered
Eugene Syromyatnikov [Wed, 7 Feb 2018 01:17:18 +0000 (02:17 +0100)]
syscall.c: set errno if syscall is tampered

6 years agotests/nsyscall-d.test: swap exp and log in diff calls
Eugene Syromyatnikov [Fri, 9 Feb 2018 20:48:16 +0000 (21:48 +0100)]
tests/nsyscall-d.test: swap exp and log in diff calls

In line with the rest of the tests.

* tests/nsyscalls-d.test: swap arguments of match_diff calls.

6 years agolinux/arm/get_scno.c: use debug_msg
Eugene Syromyatnikov [Fri, 9 Feb 2018 20:47:16 +0000 (21:47 +0100)]
linux/arm/get_scno.c: use debug_msg

* linux/arm/get_scno.c (arch_get_scno): replace if (debug_flag) {
error_msg() } with debug_msg() call.

6 years agoDo not shuffle scno inside syscall_name
Eugene Syromyatnikov [Thu, 1 Feb 2018 11:50:31 +0000 (12:50 +0100)]
Do not shuffle scno inside syscall_name

This makes interface a bit irregular otherwise.

* defs.h (syscall_name): Clarify description.
* syscall.c (syscall_name): Do not call shuffle_scno.
* printsiginfo.c (print_si_info) <case SIGSYS>: Use shuffle_scno.

6 years agoHandle very special __ARM_NR_-prefixed syscalls
Eugene Syromyatnikov [Wed, 31 Jan 2018 19:28:56 +0000 (20:28 +0100)]
Handle very special __ARM_NR_-prefixed syscalls

* linux/aarch64/nr_prefix.c: New file.
* linux/arm/nr_prefix.c: Likewise.
* linux/nr_prefix.c: Likewise.
* Makefile.am (EXTRA_DIST): Add them.
* printsiginfo.c: Include nr_prefix.c
(print_si_info): Use nr_prefix.

6 years agoMake shuffle_scno globally available
Eugene Syromyatnikov [Thu, 1 Feb 2018 11:48:44 +0000 (12:48 +0100)]
Make shuffle_scno globally available

* syscall.c (shuffle_scno): Move the declaration...
* defs.h (shuffle_scno): ...here. Remove static qualifier.
* linux/aarch64/shuffle_scno.c (shuffle_scno): Remove static qualifier.
* linux/arm/shuffle_scno.c: Likewise.
* linux/shuffle_scno.c: Likewise.
* linux/x32/shuffle_scno.c: Likewise.
* linux/x86_64/shuffle_scno.c: Likewise.

6 years agosyscall.c: use shuffle_scno in syscall_name
Eugene Syromyatnikov [Wed, 31 Jan 2018 19:12:14 +0000 (20:12 +0100)]
syscall.c: use shuffle_scno in syscall_name

syscall_name() is used only in printsiginfo.c:print_si_info currently,
and is supplied with raw syscall number (that's why it has this ugly
__X32_SYSCALL_BIT hack). But since it handled only __X32_SYSCALL_BIT and
not shuffle_scno(), it was broken on ARM.  Let's replace it with shuffle_scno
call, as it handles both the case of shuffled ARM syscalls and the
__X32_SYSCALL_BIT.

* syscall.c (syscall_name): Call shuffle_scno instead of custom
__X32_SYSCALL_BIT handling.

6 years agoUse shuffle_scno for x32 syscall numbers
Eugene Syromyatnikov [Wed, 31 Jan 2018 19:08:29 +0000 (20:08 +0100)]
Use shuffle_scno for x32 syscall numbers

This changes behaviour of printing of unknown syscall.

* linux/x32/shuffle_scno.c: New file.
* linux/x86_64/shuffle_scno.c: Likewise.
* Makefile.am (EXTRA_DIST): Add them.
* linux/x86_64/get_scno.c (arch_get_scno): Do not clear
__X32_SYSCALL_BIT.
* tests/nsyscalls.c: Update expected output.

6 years agoMove shuffle_scno() invocation to get_scno
Eugene Syromyatnikov [Wed, 31 Jan 2018 19:06:31 +0000 (20:06 +0100)]
Move shuffle_scno() invocation to get_scno

* linux/aarch64/get_scno.c (arch_get_scno): Remove shuffle_scno call.
* linux/arm/get_scno.c (arch_get_scno): Remove shuffle_scno calls.
* syscall.c (get_scno): Call shuffle_scno after arch_get_scno.

6 years agoMove shuffle_scno to arch-specific file
Eugene Syromyatnikov [Wed, 31 Jan 2018 18:59:48 +0000 (19:59 +0100)]
Move shuffle_scno to arch-specific file

While we are here, let's fix AArch64 by limiting scno shuffling
to compat personality only.

* syscall.c: Include shuffle_scno.c.
(shuffle_scno): Move it to a...
* linux/arm/shuffle_scno.c: New file.
* linux/aarch64/shuffle_scno.c: New file, define arm's shuffle_scno
as arm_shuffle_scno and call it only for personality 1.
* linux/shuffle_scno.c: New file, fallback trivial shuffle_scno
definition.
* Makefile.am (EXTRA_DIST): Add them.

6 years agoPrint unknown syscall number in hexadecimal
Eugene Syromyatnikov [Tue, 6 Feb 2018 02:30:41 +0000 (03:30 +0100)]
Print unknown syscall number in hexadecimal

* syscall.c (struct sysent_buf): Update buf field size.
(get_scno): Print unknown syscall number in hexadecimal form.
* tests/nsyscalls.c: Update expected output.
* strace.1.in: Document it.
* NEWS: Mention it.

6 years agotests/accept.c: call accept syscall directly, if available
Eugene Syromyatnikov [Thu, 8 Feb 2018 10:58:30 +0000 (11:58 +0100)]
tests/accept.c: call accept syscall directly, if available

* tests/accept.c [__NR_accept && !TEST_SYSCALL_NAME]: Define a wrapper that
calls accept directly.
* tests/sockname.c [TEST_SYSCALL_STR]: Do not define TEST_SYSCALL_STR.

6 years agoprintsiginfo.c: add a comment about personality detection for SIGSYS
Eugene Syromyatnikov [Thu, 1 Feb 2018 10:46:57 +0000 (11:46 +0100)]
printsiginfo.c: add a comment about personality detection for SIGSYS

Looks like it is not necessary, after all.

6 years agolinux/x86_64/set_error.c: update eax for compat personality
Eugene Syromyatnikov [Thu, 8 Feb 2018 10:40:01 +0000 (11:40 +0100)]
linux/x86_64/set_error.c: update eax for compat personality

Since this is where get_error gets the return value from in the compat case.

linux/x86_64/set_error.c (set_error, set_success): Update i386_regs.eax
if tracee is in compat personality.

6 years agoMark various arch-specific syscalls with SYSCALL_NEVER_FAILS
Eugene Syromyatnikov [Wed, 7 Feb 2018 01:07:43 +0000 (02:07 +0100)]
Mark various arch-specific syscalls with SYSCALL_NEVER_FAILS

* linux/alpha/syscallent.h (getpagesize, getdtablesize): Add NF flag.
* linux/arc/syscallent.h (arc_gettls): Likewise.
* linux/arm/syscallent.h (get_tls): Likewise.
* linux/ia64/syscallent.h (getpagesize): Likewise.
* linux/m68k/syscallent.h (getpagesize, get_thread_area): Likewise.
* linux/sparc/syscallent.h (getpagesize): Likewise.
* linux/sparc64/syscallent.h (getpagesize): Likewise.

6 years agoAdd SYSCALL_NEVER_FAILS flag to getpgrp
Eugene Syromyatnikov [Wed, 7 Feb 2018 00:58:51 +0000 (01:58 +0100)]
Add SYSCALL_NEVER_FAILS flag to getpgrp

As glibc, at least, treats it this way.

* linux/aarch64/syscallent.h (getpgrp): Add NF flag.
* linux/alpha/syscallent.h: Likewise.
* 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/powerpc/syscallent.h: Likewise.
* linux/powerpc64/syscallent.h: Likewise.
* linux/s390/syscallent.h: Likewise.
* linux/s390x/syscallent.h: Likewise.
* linux/sh/syscallent.h: Likewise.
* linux/sh64/syscallent.h: Likewise.
* linux/sparc/syscallent.h: Likewise.
* linux/sparc64/syscallent.h: Likewise.
* linux/x32/syscallent.h: Likewise.
* linux/x86_64/syscallent.h: Likewise.
* linux/xtensa/syscallent.h: Likewise.

6 years agolinux/x86_64/get_error.c: do not sign-extend if no error happened
Eugene Syromyatnikov [Wed, 7 Feb 2018 01:19:06 +0000 (02:19 +0100)]
linux/x86_64/get_error.c: do not sign-extend if no error happened