summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFabrice Le Fessant <fabrice.le_fessant@ocamlpro.com>2022-10-18 11:23:15 +0200
committerDmitry V. Levin <ldv@strace.io>2022-12-16 08:00:00 +0000
commit75318579cb1b8c7ff42e3f4254b4133d23c7a937 (patch)
tree11019c452cc534065d35527199811be705ad9dad
parent28863b3901704740823d64487711c70751d99fc9 (diff)
downloadstrace-75318579cb1b8c7ff42e3f4254b4133d23c7a937.tar.gz
src: introduce tprint_shift_begin and tprint_shift_end helpers
* src/print_fields.h (tprint_shift_begin, tprint_shift_end): New functions. * src/futex.c (do_futex): Use them. * src/ipc.c (SYS_FUNC(ipc)): Likewise. * src/ipc_shm.c (SYS_FUNC(shmget)): Likewise. * src/kd_ioctl.c (kd_mk_tone): Likewise. * src/mem.c (print_mmap_flags): Likewise. * src/memfd_create.c (SYS_FUNC(memfd_create)): Likewise. * src/netlink.c (decode_nlmsg_type_netfilter): Likewise. * src/perf.c (print_perf_event_attr): Likewise. * src/term.c (decode_cflag): Likewise. * src/util.c (print_abnormal_hi): Likewise. * src/wait.c (printstatus): Likewise. Co-authored-by: Dmitry V. Levin <ldv@strace.io>
-rw-r--r--src/futex.c8
-rw-r--r--src/ipc.c2
-rw-r--r--src/ipc_shm.c2
-rw-r--r--src/kd_ioctl.c2
-rw-r--r--src/mem.c2
-rw-r--r--src/memfd_create.c2
-rw-r--r--src/netlink.c4
-rw-r--r--src/perf.c12
-rw-r--r--src/print_fields.h10
-rw-r--r--src/term.c2
-rw-r--r--src/util.c2
-rw-r--r--src/wait.c2
12 files changed, 49 insertions, 1 deletions
diff --git a/src/futex.c b/src/futex.c
index 241a60ed3..483ad14b5 100644
--- a/src/futex.c
+++ b/src/futex.c
@@ -112,25 +112,33 @@ do_futex(struct tcb *const tcp, const print_obj_by_addr_fn print_ts)
tprint_arg_next();
if ((val3 >> 28) & FUTEX_OP_OPARG_SHIFT) {
+ tprint_shift_begin();
print_xlat(FUTEX_OP_OPARG_SHIFT);
tprint_shift();
PRINT_VAL_U(28);
+ tprint_shift_end();
tprint_flags_or();
}
+ tprint_shift_begin();
comment = printxval(futexwakeops, (val3 >> 28) & 0x7, NULL)
? NULL : "FUTEX_OP_???";
tprint_shift();
PRINT_VAL_U(28);
+ tprint_shift_end();
tprints_comment(comment);
tprint_flags_or();
+ tprint_shift_begin();
PRINT_VAL_X((val3 >> 12) & 0xfff);
tprint_shift();
PRINT_VAL_U(12);
+ tprint_shift_end();
tprint_flags_or();
+ tprint_shift_begin();
comment = printxval(futexwakecmps, (val3 >> 24) & 0xf, NULL)
? NULL : "FUTEX_OP_CMP_???";
tprint_shift();
PRINT_VAL_U(24);
+ tprint_shift_end();
tprints_comment(comment);
tprint_flags_or();
PRINT_VAL_X(val3 & 0xfff);
diff --git a/src/ipc.c b/src/ipc.c
index c165d0e34..277e5fb24 100644
--- a/src/ipc.c
+++ b/src/ipc.c
@@ -16,9 +16,11 @@ SYS_FUNC(ipc)
call &= 0xffff;
if (version) {
+ tprint_shift_begin();
PRINT_VAL_U(version);
tprint_shift();
PRINT_VAL_U(16);
+ tprint_shift_end();
tprint_flags_or();
}
diff --git a/src/ipc_shm.c b/src/ipc_shm.c
index 6a3cc06cd..e211d09ce 100644
--- a/src/ipc_shm.c
+++ b/src/ipc_shm.c
@@ -49,9 +49,11 @@ SYS_FUNC(shmget)
if (hugetlb_value) {
if (flags)
tprint_flags_or();
+ tprint_shift_begin();
PRINT_VAL_U(hugetlb_value >> SHM_HUGE_SHIFT);
tprint_shift();
print_xlat_u(SHM_HUGE_SHIFT);
+ tprint_shift_end();
}
if (flags || hugetlb_value)
diff --git a/src/kd_ioctl.c b/src/kd_ioctl.c
index aba5b17a2..c9c7cfd61 100644
--- a/src/kd_ioctl.c
+++ b/src/kd_ioctl.c
@@ -92,9 +92,11 @@ kd_mk_tone(struct tcb *const tcp, const unsigned int arg)
tprint_arg_next();
if (ticks) {
+ tprint_shift_begin();
PRINT_VAL_U(ticks);
tprint_shift();
PRINT_VAL_U(16);
+ tprint_shift_end();
tprint_flags_or();
}
PRINT_VAL_U(count);
diff --git a/src/mem.c b/src/mem.c
index 7009ec86c..ee919d291 100644
--- a/src/mem.c
+++ b/src/mem.c
@@ -81,6 +81,7 @@ print_mmap_flags(kernel_ulong_t flags)
if (hugetlb_value) {
tprint_flags_or();
+ tprint_shift_begin();
PRINT_VAL_U(hugetlb_value >> MAP_HUGE_SHIFT);
tprint_shift();
/*
@@ -88,6 +89,7 @@ print_mmap_flags(kernel_ulong_t flags)
* is potentially inside a comment already.
*/
tprints("MAP_HUGE_SHIFT");
+ tprint_shift_end();
}
if (xlat_verbose(xlat_verbosity) == XLAT_STYLE_VERBOSE)
diff --git a/src/memfd_create.c b/src/memfd_create.c
index 9d9458862..68eb48781 100644
--- a/src/memfd_create.c
+++ b/src/memfd_create.c
@@ -43,6 +43,7 @@ SYS_FUNC(memfd_create)
if (hugetlb_value) {
if (flags)
tprint_flags_or();
+ tprint_shift_begin();
PRINT_VAL_U(hugetlb_value >> MFD_HUGE_SHIFT);
tprint_shift();
/*
@@ -50,6 +51,7 @@ SYS_FUNC(memfd_create)
* is potentially inside a comment already.
*/
tprints("MFD_HUGE_SHIFT");
+ tprint_shift_end();
}
if (xlat_verbose(xlat_verbosity) == XLAT_STYLE_VERBOSE)
diff --git a/src/netlink.c b/src/netlink.c
index 80fad42c5..fb136feca 100644
--- a/src/netlink.c
+++ b/src/netlink.c
@@ -178,10 +178,12 @@ decode_nlmsg_type_netfilter(struct tcb *tcp, const struct xlat *const xlat,
const uint8_t subsys_id = (uint8_t) (type >> 8);
const uint8_t msg_type = (uint8_t) type;
+ tprint_shift_begin();
printxval(xlat, subsys_id, dflt);
-
tprint_shift();
PRINT_VAL_U(8);
+ tprint_shift_end();
+
tprint_flags_or();
if (subsys_id < ARRAY_SIZE(nf_nlmsg_types))
printxval(nf_nlmsg_types[subsys_id].xlat,
diff --git a/src/perf.c b/src/perf.c
index c15335cb1..49a406850 100644
--- a/src/perf.c
+++ b/src/perf.c
@@ -158,9 +158,11 @@ print_perf_event_attr(struct tcb *const tcp, const kernel_ulong_t addr)
tprint_struct_next();
tprints_field_name("config");
if (attr->config >> 32) {
+ tprint_shift_begin();
PRINT_VAL_X(attr->config >> 32);
tprint_shift();
PRINT_VAL_U(32);
+ tprint_shift_end();
tprint_flags_or();
}
printxval(perf_hw_id, attr->config & PERF_HW_EVENT_MASK,
@@ -191,27 +193,37 @@ print_perf_event_attr(struct tcb *const tcp, const kernel_ulong_t addr)
tprint_struct_next();
tprints_field_name("config");
if (attr->config >> 32){
+ tprint_shift_begin();
PRINT_VAL_X(attr->config >> 32);
tprint_shift();
PRINT_VAL_U(32);
+ tprint_shift_end();
tprint_flags_or();
}
if ((attr->config & PERF_HW_EVENT_MASK) >> 24) {
+ tprint_shift_begin();
PRINT_VAL_X((attr->config & PERF_HW_EVENT_MASK) >> 24);
tprint_shift();
PRINT_VAL_U(24);
+ tprint_shift_end();
tprint_flags_or();
}
+ tprint_shift_begin();
printxval(perf_hw_cache_op_result_id,
(attr->config >> 16) & 0xFF,
"PERF_COUNT_HW_CACHE_RESULT_???");
tprint_shift();
PRINT_VAL_U(16);
+ tprint_shift_end();
+
tprint_flags_or();
+ tprint_shift_begin();
printxval(perf_hw_cache_op_id, (attr->config >> 8) & 0xFF,
"PERF_COUNT_HW_CACHE_OP_???");
tprint_shift();
PRINT_VAL_U(8);
+ tprint_shift_end();
+
tprint_flags_or();
printxval(perf_hw_cache_id, attr->config & 0xFF,
"PERF_COUNT_HW_CACHE_???");
diff --git a/src/print_fields.h b/src/print_fields.h
index 099fcefa2..ab1810ed7 100644
--- a/src/print_fields.h
+++ b/src/print_fields.h
@@ -210,6 +210,16 @@ tprint_unavailable(void)
}
static inline void
+tprint_shift_begin(void)
+{
+}
+
+static inline void
+tprint_shift_end(void)
+{
+}
+
+static inline void
tprint_shift(void)
{
STRACE_PRINTS("<<");
diff --git a/src/term.c b/src/term.c
index 79366cefa..7c9d3c536 100644
--- a/src/term.c
+++ b/src/term.c
@@ -73,9 +73,11 @@ decode_cflag(uint64_t val)
tprint_flags_or();
if (val & CIBAUD) {
+ tprint_shift_begin();
printxval64(baud_options, (val & CIBAUD) >> IBSHIFT, "B???");
tprint_shift();
print_xlat(IBSHIFT);
+ tprint_shift_end();
tprint_flags_or();
}
diff --git a/src/util.c b/src/util.c
index ef15017ba..5c8cd62c2 100644
--- a/src/util.c
+++ b/src/util.c
@@ -1766,9 +1766,11 @@ print_abnormal_hi(const kernel_ulong_t val)
if (current_klongsize > 4) {
const unsigned int hi = (unsigned int) ((uint64_t) val >> 32);
if (hi) {
+ tprint_shift_begin();
PRINT_VAL_X(hi);
tprint_shift();
PRINT_VAL_U(32);
+ tprint_shift_end();
tprint_flags_or();
}
}
diff --git a/src/wait.c b/src/wait.c
index 9160fd6df..09a8a8916 100644
--- a/src/wait.c
+++ b/src/wait.c
@@ -65,9 +65,11 @@ printstatus(int status)
unsigned int event = (unsigned int) status >> 16;
if (event) {
tprint_flags_or();
+ tprint_shift_begin();
printxval(ptrace_events, event, "PTRACE_EVENT_???");
tprint_shift();
PRINT_VAL_U(16);
+ tprint_shift_end();
status &= 0xffff;
}
if (status) {