[PATCH] sim: add ATTRIBUTE_PRINTF / ATTRIBUTE_NULL_PRINTF where necessary

Simon Marchi simon.marchi@polymtl.ca
Sun May 2 15:24:54 GMT 2021


I finally got the all-targets sim building with Clang, these are all the
instances where an ATTRIBUTE_PRINTF or ATTRIBUTE_NULL_PRINTF attribute
needed to be added to avoid errors like:

    /home/simark/src/binutils-gdb/sim/aarch64/../common/sim-profile.c:464:19: error: format string is not a string literal [-Werror,-Wformat-nonliteral]
        vfprintf (fp, fmt, ap);
                      ^~~
There are more fixes needed to get everything building, but adding these
attributes is trivial enough, so I send them all in a single patch.

sim/arm/ChangeLog:

	* armdefs.h (ARMul_ConsolePrint): Use format attribute.
	* wrapper.c (op_printf): Likewise.

sim/common/ChangeLog:

	* hw-events.h (hw_event_queue_schedule_tracef): Use format attribute.
	(hw_event_queue_schedule_vtracef): Likewise.
	* hw-tree.h (hw_tree_vparse): Likewise.
	* sim-profile.c (profile_vprintf): Likewise.
	* sim-trace.c (dis_printf): Likewise.
	* sim-trace.h (trace_printf): Likewise.
	(trace_vprintf): Likewise.
	* sim-utils.h (sim_do_commandf): Likewise.

sim/rx/ChangeLog:

	* trace.c (op_printf): Likewise.

Change-Id: I1445115ce57db15bb8e35dca93014555e7555794
---
 sim/arm/armdefs.h        | 4 +++-
 sim/arm/wrapper.c        | 4 ++--
 sim/common/hw-events.h   | 4 ++--
 sim/common/hw-tree.h     | 2 +-
 sim/common/sim-profile.c | 2 +-
 sim/common/sim-trace.c   | 2 +-
 sim/common/sim-trace.h   | 5 +++--
 sim/common/sim-utils.h   | 3 ++-
 sim/rx/trace.c           | 2 +-
 9 files changed, 16 insertions(+), 12 deletions(-)

diff --git a/sim/arm/armdefs.h b/sim/arm/armdefs.h
index 2b5ff9b2dfa8..68cf199db6b3 100644
--- a/sim/arm/armdefs.h
+++ b/sim/arm/armdefs.h
@@ -18,6 +18,7 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <stdint.h>
+#include <ansidecl.h>
 
 #define FALSE 0
 #define TRUE 1
@@ -415,5 +416,6 @@ extern unsigned ARMul_OSHandleSWI (ARMul_State * state, ARMword number);
 extern void ARMul_UndefInstr      (ARMul_State *, ARMword);
 extern void ARMul_FixCPSR         (ARMul_State *, ARMword, ARMword);
 extern void ARMul_FixSPSR         (ARMul_State *, ARMword, ARMword);
-extern void ARMul_ConsolePrint    (ARMul_State *, const char *, ...);
+extern void ARMul_ConsolePrint    (ARMul_State *, const char *, ...)
+    ATTRIBUTE_PRINTF (2, 3);
 extern void ARMul_SelectProcessor (ARMul_State *, unsigned);
diff --git a/sim/arm/wrapper.c b/sim/arm/wrapper.c
index c89efe4ee971..54a04f424284 100644
--- a/sim/arm/wrapper.c
+++ b/sim/arm/wrapper.c
@@ -62,8 +62,8 @@ int trace_funcs = 0;
 static struct disassemble_info  info;
 static char opbuf[1000];
 
-static int
-op_printf (char *buf, char *fmt, ...)
+static int ATTRIBUTE_PRINTF (2, 3)
+op_printf (char *buf, const char *fmt, ...)
 {
   int ret;
   va_list ap;
diff --git a/sim/common/hw-events.h b/sim/common/hw-events.h
index 901063b73da2..51ca5bdb2f04 100644
--- a/sim/common/hw-events.h
+++ b/sim/common/hw-events.h
@@ -39,7 +39,7 @@ struct hw_event *hw_event_queue_schedule_tracef
  hw_event_callback *handler,
  void *data,
  const char *fmt,
- ...) ATTRIBUTE_PRINTF (5, 6);
+ ...) ATTRIBUTE_NULL_PRINTF (5, 6);
 
 struct hw_event *hw_event_queue_schedule_vtracef
 (struct hw *me,
@@ -47,7 +47,7 @@ struct hw_event *hw_event_queue_schedule_vtracef
  hw_event_callback *handler,
  void *data,
  const char *fmt,
- va_list ap);
+ va_list ap) ATTRIBUTE_NULL_PRINTF (5, 0);
 
 
 void hw_event_queue_deschedule
diff --git a/sim/common/hw-tree.h b/sim/common/hw-tree.h
index 86ebf1709cad..85c91ad96521 100644
--- a/sim/common/hw-tree.h
+++ b/sim/common/hw-tree.h
@@ -39,7 +39,7 @@ struct hw *hw_tree_parse
 struct hw *hw_tree_vparse
 (struct hw *root,
  const char *fmt,
- va_list ap);
+ va_list ap) ATTRIBUTE_PRINTF (2, 0);
 
 
 void hw_tree_finish
diff --git a/sim/common/sim-profile.c b/sim/common/sim-profile.c
index 75bdc70298cc..455e1a246d93 100644
--- a/sim/common/sim-profile.c
+++ b/sim/common/sim-profile.c
@@ -454,7 +454,7 @@ profile_option_handler (SIM_DESC sd,
 
 /* Profiling output hooks.  */
 
-static void
+static void ATTRIBUTE_PRINTF (3, 0)
 profile_vprintf (SIM_DESC sd, sim_cpu *cpu, const char *fmt, va_list ap)
 {
   FILE *fp = PROFILE_FILE (CPU_PROFILE_DATA (cpu));
diff --git a/sim/common/sim-trace.c b/sim/common/sim-trace.c
index 5f161da630bb..26d9556322cf 100644
--- a/sim/common/sim-trace.c
+++ b/sim/common/sim-trace.c
@@ -889,7 +889,7 @@ dis_read (bfd_vma memaddr, bfd_byte *myaddr, unsigned int length,
   return 0;
 }
 
-static int
+static int ATTRIBUTE_PRINTF (2, 3)
 dis_printf (SIM_CPU *cpu, const char *fmt, ...)
 {
   SIM_DESC sd = CPU_STATE (cpu);
diff --git a/sim/common/sim-trace.h b/sim/common/sim-trace.h
index 7ff7b021b337..c89084e94401 100644
--- a/sim/common/sim-trace.h
+++ b/sim/common/sim-trace.h
@@ -653,9 +653,10 @@ do { \
 
 
 extern void trace_printf (SIM_DESC, sim_cpu *, const char *, ...)
-     ATTRIBUTE_PRINTF (3, 4);
+    ATTRIBUTE_PRINTF (3, 4);
 
-extern void trace_vprintf (SIM_DESC, sim_cpu *, const char *, va_list);
+extern void trace_vprintf (SIM_DESC, sim_cpu *, const char *, va_list)
+    ATTRIBUTE_PRINTF (3, 0);
 
 /* Debug support.
    This is included here because there isn't enough of it to justify
diff --git a/sim/common/sim-utils.h b/sim/common/sim-utils.h
index f089245f25e4..9cc19f5567bc 100644
--- a/sim/common/sim-utils.h
+++ b/sim/common/sim-utils.h
@@ -68,7 +68,8 @@ struct bfd *sim_load_file (SIM_DESC sd, const char *myname,
 			   int lma_p, sim_write_fn do_load);
 
 /* Internal version of sim_do_command, include formatting */
-void sim_do_commandf (SIM_DESC sd, const char *fmt, ...);
+void sim_do_commandf (SIM_DESC sd, const char *fmt, ...)
+    ATTRIBUTE_PRINTF (2, 3);
 
 
 /* These are defined in callback.c as cover functions to the vprintf
diff --git a/sim/rx/trace.c b/sim/rx/trace.c
index caa51b794dfc..a005797b4ecb 100644
--- a/sim/rx/trace.c
+++ b/sim/rx/trace.c
@@ -96,7 +96,7 @@ compare_symbols (const PTR ap, const PTR bp)
 
 static char opbuf[1000];
 
-static int
+static int ATTRIBUTE_PRINTF (2, 3)
 op_printf (char *buf, char *fmt, ...)
 {
   int ret;
-- 
2.30.1



More information about the Gdb-patches mailing list