From 1aee6198c7a4bc47a42c97a8a22743d0d95b6451 Mon Sep 17 00:00:00 2001 From: Eugene Syromyatnikov Date: Sun, 25 Mar 2018 11:54:18 +0200 Subject: [PATCH] Introduce umoven_or_printaddr64* functions Counterparts for umoven_or_printaddr/umoven_or_printaddr_ignore_syserror that always print 64 bits of addr (as this is needed in bpf and btrfs decoders). * util.c (umoven_or_printaddr64): Rename from umoven_or_printaddr, change addr argument type to uint64_t, call printaddr64 instead of printaddr. (umoven_or_printaddr64_ignore_syserror): Rename from umoven_or_printaddr_ignore_syserror, change addr argument type to uint64_t, call printaddr64 instead of printaddr. * defs.h (umoven_or_printaddr64): Rename from umoven_or_printaddr, change addr argument type to uint64_t. (umoven_or_printaddr64_ignore_syserror): Rename from umoven_or_printaddr_ignore_syserror, change addr argument type to uint64_t. (umove_or_printaddr64): New macro, a wrapper for umoven_or_printaddr64. (umoven_or_printaddr): New function, a wrapper for umoven_or_printaddr64. (umoven_or_printaddr_ignore_syserror): New function, a wrapper for umoven_or_printaddr64_ignore_syserror. --- defs.h | 24 ++++++++++++++++++++---- util.c | 12 ++++++------ 2 files changed, 26 insertions(+), 10 deletions(-) diff --git a/defs.h b/defs.h index 958d5655..4cb68dbd 100644 --- a/defs.h +++ b/defs.h @@ -462,14 +462,30 @@ umoven(struct tcb *, kernel_ulong_t addr, unsigned int len, void *laddr); umoven((pid), (addr), sizeof(*(objp)), (void *) (objp)) extern int -umoven_or_printaddr(struct tcb *, kernel_ulong_t addr, - unsigned int len, void *laddr); +umoven_or_printaddr64(struct tcb *, uint64_t addr, + unsigned int len, void *laddr); +#define umove_or_printaddr64(pid, addr, objp) \ + umoven_or_printaddr64((pid), (addr), sizeof(*(objp)), (void *) (objp)) + +static inline int +umoven_or_printaddr(struct tcb *tcp, const kernel_ulong_t addr, + unsigned int len, void *laddr) +{ + return umoven_or_printaddr64(tcp, addr, len, laddr); +} #define umove_or_printaddr(pid, addr, objp) \ umoven_or_printaddr((pid), (addr), sizeof(*(objp)), (void *) (objp)) extern int -umoven_or_printaddr_ignore_syserror(struct tcb *, kernel_ulong_t addr, - unsigned int len, void *laddr); +umoven_or_printaddr64_ignore_syserror(struct tcb *, uint64_t addr, + unsigned int len, void *laddr); + +static inline int +umoven_or_printaddr_ignore_syserror(struct tcb *tcp, const kernel_ulong_t addr, + unsigned int len, void *laddr) +{ + return umoven_or_printaddr64_ignore_syserror(tcp, addr, len, laddr); +} extern int umovestr(struct tcb *, kernel_ulong_t addr, unsigned int len, char *laddr); diff --git a/util.c b/util.c index ce516629..edec6c7a 100644 --- a/util.c +++ b/util.c @@ -984,25 +984,25 @@ dumpstr(struct tcb *const tcp, const kernel_ulong_t addr, const int len) } int -umoven_or_printaddr(struct tcb *const tcp, const kernel_ulong_t addr, - const unsigned int len, void *const our_addr) +umoven_or_printaddr64(struct tcb *const tcp, const uint64_t addr, + const unsigned int len, void *const our_addr) { if (!addr || !verbose(tcp) || (exiting(tcp) && syserror(tcp)) || umoven(tcp, addr, len, our_addr) < 0) { - printaddr(addr); + printaddr64(addr); return -1; } return 0; } int -umoven_or_printaddr_ignore_syserror(struct tcb *const tcp, - const kernel_ulong_t addr, +umoven_or_printaddr64_ignore_syserror(struct tcb *const tcp, + const uint64_t addr, const unsigned int len, void *const our_addr) { if (!addr || !verbose(tcp) || umoven(tcp, addr, len, our_addr) < 0) { - printaddr(addr); + printaddr64(addr); return -1; } return 0; -- 2.40.0