]> granicus.if.org Git - strace/commitdiff
xlat: introduce XLAT_STYLE_FMT_D
authorEugene Syromyatnikov <evgsyr@gmail.com>
Wed, 4 Apr 2018 11:24:54 +0000 (13:24 +0200)
committerEugene Syromyatnikov <evgsyr@gmail.com>
Thu, 12 Apr 2018 23:00:10 +0000 (01:00 +0200)
As there are some possible users for it, apparently.

* defs.h (XLAT_STYLE_FORMAT_MASK): Update the value in order to
accommodate XLAT_STYLE_FMT_D.
(enum xlat_style) <XLAT_STYLE_FMT_D>: New enumeration entity.
(printxval64_d, printxval_d): New function, a shorthand for
printxvals_ex with a single xlat and XLAT_STYLE_FMT_D xlat style.
* xlat.c (sprint_xlat_val): Handle XLAT_STYLE_FMT_D.

defs.h
xlat.c

diff --git a/defs.h b/defs.h
index 22ccd3dde4255447424073b6d08e1d84561eab75..da757d408f5d5c37ba95475a3bc31473c1fdc7c6 100644 (file)
--- a/defs.h
+++ b/defs.h
@@ -587,7 +587,7 @@ extern void printaddr(kernel_ulong_t addr);
 
 #define XLAT_STYLE_VERBOSITY_MASK (XLAT_STYLE_RAW | XLAT_STYLE_ABBREV)
 #define XLAT_STYLE_FORMAT_SHIFT   2
-#define XLAT_STYLE_FORMAT_MASK    (1 << XLAT_STYLE_FORMAT_SHIFT)
+#define XLAT_STYLE_FORMAT_MASK    (3 << XLAT_STYLE_FORMAT_SHIFT)
 
 enum xlat_style {
        /**
@@ -610,6 +610,7 @@ enum xlat_style {
 
        XLAT_STYLE_FMT_X   = 0 << XLAT_STYLE_FORMAT_SHIFT,
        XLAT_STYLE_FMT_U   = 1 << XLAT_STYLE_FORMAT_SHIFT,
+       XLAT_STYLE_FMT_D   = 2 << XLAT_STYLE_FORMAT_SHIFT,
 };
 
 extern enum xlat_style xlat_verbosity;
@@ -866,6 +867,18 @@ printxval_u(const struct xlat *x, const unsigned int val, const char *dflt)
        return printxvals_ex(val, dflt, XLAT_STYLE_FMT_U, x, NULL);
 }
 
+static inline int
+printxval64_d(const struct xlat *x, const int64_t val, const char *dflt)
+{
+       return printxvals_ex(val, dflt, XLAT_STYLE_FMT_D, x, NULL);
+}
+
+static inline int
+printxval_d(const struct xlat *x, const int val, const char *dflt)
+{
+       return printxvals_ex(val, dflt, XLAT_STYLE_FMT_D, x, NULL);
+}
+
 static inline void
 tprint_iov(struct tcb *tcp, kernel_ulong_t len, kernel_ulong_t addr,
           enum iov_decode decode_iov)
diff --git a/xlat.c b/xlat.c
index 98ffd46233ab948115e3275aa6c5df2a644b8c21..247bff82c43710aa6dc830589aaba3dc492e797a 100644 (file)
--- a/xlat.c
+++ b/xlat.c
@@ -51,6 +51,10 @@ sprint_xlat_val(uint64_t val, enum xlat_style style)
        static char buf[sizeof(val) * 3];
 
        switch (xlat_format(style)) {
+       case XLAT_STYLE_FMT_D:
+               xsprintf(buf, "%" PRId64, val);
+               break;
+
        case XLAT_STYLE_FMT_U:
                xsprintf(buf, "%" PRIu64, val);
                break;