]> granicus.if.org Git - strace/commitdiff
Add functions for printing pointers of kernel_ulong_t size
authorEugene Syromyatnikov <evgsyr@gmail.com>
Sun, 11 Dec 2016 19:18:11 +0000 (22:18 +0300)
committerDmitry V. Levin <ldv@altlinux.org>
Mon, 26 Dec 2016 15:32:48 +0000 (15:32 +0000)
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
util.c

diff --git a/defs.h b/defs.h
index 72b4fabbe53214982da0c797bbe0b70600e7331c..6591ba899c306a9ff494021bb15e5a07ffa0eb1e 100644 (file)
--- 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 acb04618c086a8b6ca8f56063d0ad73c17ed38ce..e09991ff4162a6064059ce2d5944fa0bc7409437 100644 (file)
--- 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)
 {