From c9000d43bdd65f878722550fbec1e82aa8b699b3 Mon Sep 17 00:00:00 2001 From: Eugene Syromyatnikov Date: Sun, 11 Dec 2016 22:18:11 +0300 Subject: [PATCH] Add functions for printing pointers of kernel_ulong_t size In cases where no compat for x32/n32 is implemented, pointer is of kernel's long size, so it should be printed appropriately. * defs.h [!current_klongsize] (printnum_addr_klong_int): New prototype. (printnum_kptr): New macro. * util.c [!current_klongsize] (printnum_addr_klong_int): New function. --- defs.h | 12 ++++++++++++ util.c | 12 ++++++++++++ 2 files changed, 24 insertions(+) diff --git a/defs.h b/defs.h index 72b4fabb..6591ba89 100644 --- a/defs.h +++ b/defs.h @@ -841,6 +841,18 @@ extern bool printnum_addr_long_int(struct tcb *, kernel_ulong_t addr); printnum_addr_int((tcp), (addr)) #endif +#ifndef current_klongsize +extern bool printnum_addr_klong_int(struct tcb *, kernel_ulong_t addr); +# define printnum_kptr(tcp, addr) \ + printnum_addr_klong_int((tcp), (addr)) +#elif current_klongsize > 4 +# define printnum_kptr(tcp, addr) \ + printnum_addr_int64((tcp), (addr)) +#else /* current_klongsize == 4 */ +# define printnum_kptr(tcp, addr) \ + printnum_addr_int((tcp), (addr)) +#endif + #define DECL_PRINTPAIR(name) \ extern bool \ printpair_ ## name(struct tcb *, kernel_ulong_t addr, const char *fmt) \ diff --git a/util.c b/util.c index acb04618..e09991ff 100644 --- a/util.c +++ b/util.c @@ -544,6 +544,18 @@ printnum_addr_long_int(struct tcb *tcp, const kernel_ulong_t addr) } #endif /* !current_wordsize */ +#ifndef current_klongsize +bool +printnum_addr_klong_int(struct tcb *tcp, const kernel_ulong_t addr) +{ + if (current_klongsize > sizeof(int)) { + return printnum_addr_int64(tcp, addr); + } else { + return printnum_addr_int(tcp, addr); + } +} +#endif /* !current_klongsize */ + const char * sprinttime(time_t t) { -- 2.40.0