diff options
author | Petr Machata <pmachata@redhat.com> | 2014-01-30 15:34:33 +0100 |
---|---|---|
committer | Petr Machata <pmachata@redhat.com> | 2014-01-30 16:12:12 +0100 |
commit | 27ffb08c789ca9c4b2635ca89b4004b324fb4ea4 (patch) | |
tree | 7483f7d1adfdcdeb7f054c9f8a4a70d0c61da82f | |
parent | 225dddfda38c1cd90e2daa3e72da2a9d01013336 (diff) | |
download | elfutils-27ffb08c789ca9c4b2635ca89b4004b324fb4ea4.tar.gz |
backends: Make aarch64_regs.c checkable by -Wprintf
-rw-r--r-- | backends/ChangeLog | 8 | ||||
-rw-r--r-- | backends/aarch64_regs.c | 35 |
2 files changed, 21 insertions, 22 deletions
diff --git a/backends/ChangeLog b/backends/ChangeLog index 212b9f6d..2863c00a 100644 --- a/backends/ChangeLog +++ b/backends/ChangeLog @@ -1,3 +1,11 @@ +2014-01-30 Petr Machata <pmachata@redhat.com> + + * aarch64_regs.c (aarch64_register_info.regtype): Make this + variadic printf-like function. Call one vsnprintf instead of two + snprintf's. + (regtyper, regtypen): Drop. + (aarch64_register_info): Adjust callers. + 2014-01-26 Mark Wielaard <mjw@redhat.com> * Makefile.am (arm_SRCS): Add arm_initreg.c. diff --git a/backends/aarch64_regs.c b/backends/aarch64_regs.c index bd10c464..7a8a6780 100644 --- a/backends/aarch64_regs.c +++ b/backends/aarch64_regs.c @@ -33,6 +33,7 @@ #include <stdio.h> #include <string.h> #include <dwarf.h> +#include <stdarg.h> #define BACKEND aarch64_ #include "libebl_CPU.h" @@ -46,49 +47,39 @@ aarch64_register_info (Ebl *ebl __attribute__ ((unused)), if (name == NULL) return 128; + __attribute__ ((format (printf, 3, 4))) ssize_t - regtype (const char *setname, int type, const char *rname, bool nr, int arg) + regtype (const char *setname, int type, const char *fmt, ...) { *setnamep = setname; *typep = type; - int s; - if (nr) - s = snprintf (name, namelen, "%s%d", rname, arg); - else - s = snprintf (name, namelen, "%s", rname); + + va_list ap; + va_start (ap, fmt); + int s = vsnprintf (name, namelen, fmt, ap); + va_end(ap); + if (s < 0 || (unsigned) s >= namelen) return -1; return s + 1; } - ssize_t - regtyper (const char *setname, int type, const char *rname) - { - return regtype (setname, type, rname, false, 0); - } - - ssize_t - regtypen (const char *setname, int type, const char *rname, int arg) - { - return regtype (setname, type, rname, true, arg); - } - *prefix = ""; *bits = 64; switch (regno) { case 0 ... 30: - return regtypen ("integer", DW_ATE_signed, "x", regno); + return regtype ("integer", DW_ATE_signed, "x%d", regno); case 31: - return regtyper ("integer", DW_ATE_address, "sp"); + return regtype ("integer", DW_ATE_address, "sp"); case 32: return 0; case 33: - return regtyper ("integer", DW_ATE_address, "elr"); + return regtype ("integer", DW_ATE_address, "elr"); case 34 ... 63: return 0; @@ -100,7 +91,7 @@ aarch64_register_info (Ebl *ebl __attribute__ ((unused)), integers. 128-bit quad-word is the only singular value that covers the whole register, so mark the register thus. */ *bits = 128; - return regtypen ("FP/SIMD", DW_ATE_unsigned, "v", regno - 64); + return regtype ("FP/SIMD", DW_ATE_unsigned, "v%d", regno - 64); case 96 ... 127: return 0; |