sim: add ATTRIBUTE_PRINTF / ATTRIBUTE_NULL_PRINTF where necessary
authorSimon Marchi <simon.marchi@polymtl.ca>
Mon, 3 May 2021 14:54:08 +0000 (10:54 -0400)
committerSimon Marchi <simon.marchi@polymtl.ca>
Mon, 3 May 2021 14:55:25 +0000 (10:55 -0400)
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.

Adding the format attributes introduces some format string errors when
building with GCC (because now format strings are checked), so
corresponding changes are needed to avoid breaking the build.  Other
than simple format string specified changes, there is this one:

    /home/simark/src/binutils-gdb/sim/aarch64/../common/hw-events.c: In function 'hw_event_queue_schedule':
    /home/simark/src/binutils-gdb/sim/aarch64/../common/hw-events.c:95:15: error: too many arguments for format [-Werror=format-extra-args]
       95 |         NULL, dummy);
          |               ^~~~~

We can fix it and avoid using a dummy variable by simply calling
hw_event_queue_schedule_tracef instead of
hw_event_queue_schedule_vtracef.

sim/arm/ChangeLog:

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

sim/bfin/ChangeLog:

* interp.c (sim_open): Adjust format string specifier.

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.
* hw-events.c (hw_event_queue_schedule): Use
hw_event_queue_schedule_tracef.

sim/rx/ChangeLog:

* trace.c (op_printf): Likewise.

sim/v850/ChangeLog:

* interp.c (sim_open): Adjust format string specifier.

Change-Id: I1445115ce57db15bb8e35dca93014555e7555794

17 files changed:
sim/arm/ChangeLog
sim/arm/armdefs.h
sim/arm/wrapper.c
sim/bfin/ChangeLog
sim/bfin/interp.c
sim/common/ChangeLog
sim/common/hw-events.c
sim/common/hw-events.h
sim/common/hw-tree.h
sim/common/sim-profile.c
sim/common/sim-trace.c
sim/common/sim-trace.h
sim/common/sim-utils.h
sim/rx/ChangeLog
sim/rx/trace.c
sim/v850/ChangeLog
sim/v850/interp.c

index 639942afbad9c33f3767c2c2938d0578a7699138..54712e37766654bcf6bb38a5e34d6958e1dd6f55 100644 (file)
@@ -1,3 +1,8 @@
+2021-05-03  Simon Marchi  <simon.marchi@polymtl.ca>
+
+       * armdefs.h (ARMul_ConsolePrint): Use format attribute.
+       * wrapper.c (op_printf): Likewise.
+
 2021-05-01  Mike Frysinger  <vapier@gentoo.org>
 
        * config.in, configure: Regenerate.
index 2b5ff9b2dfa8bf611fed4fc567fef03bf65d7e93..68cf199db6b3e53c8f1df83494e4a052a5dd63f2 100644 (file)
@@ -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);
index c89efe4ee971dd69424e164cb70679ea72125507..54a04f424284632a577ae315eb1cffdeb699f7d8 100644 (file)
@@ -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;
index 98d8e668eca80ae98b264d2d52389b759132d039..832effc2d0b47edd42d13ec5544ac64281f4e4f9 100644 (file)
@@ -1,3 +1,7 @@
+2021-05-03  Simon Marchi  <simon.marchi@polymtl.ca>
+
+       * interp.c (sim_open): Adjust format string specifier.
+
 2021-05-02  Mike Frysinger  <vapier@gentoo.org>
 
        * bfin-sim.c: Include ansidecl.h.
index 2aa9279aef8939d1662ddce7b214b7ead1e597fd..a4333daa44dd5514b4ebc034505006e502fa57cb 100644 (file)
@@ -747,7 +747,7 @@ sim_open (SIM_OPEN_KIND kind, host_callback *callback,
   if (sim_core_read_buffer (sd, NULL, read_map, &c, 4, 1) == 0)
     {
       bu16 emuexcpt = 0x25;
-      sim_do_commandf (sd, "memory-size 0x%lx", BFIN_DEFAULT_MEM_SIZE);
+      sim_do_commandf (sd, "memory-size 0x%x", BFIN_DEFAULT_MEM_SIZE);
       sim_write (sd, 0, (void *)&emuexcpt, 2);
     }
 
index fd9a5dd70ff0e7447596982b6764c4574f539712..17b711c965e4726355b6a0f20dbd187f4aa6543f 100644 (file)
@@ -1,3 +1,16 @@
+2021-05-03  Simon Marchi  <simon.marchi@polymtl.ca>
+
+       * 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.
+       * hw-events.c (hw_event_queue_schedule): Use
+       hw_event_queue_schedule_tracef.
+
 2021-05-02  Simon Marchi  <simon.marchi@polymtl.ca>
 
        * sim-options.c (standard_option_handler): Add default cases to
index 1c749dd8c27c9c014427786f06f861d06ad03be4..81628f0b642f2596dcc630ae18b2c10dac779017 100644 (file)
@@ -88,12 +88,7 @@ hw_event_queue_schedule (struct hw *me,
                         hw_event_callback *callback,
                         void *data)
 {
-  struct hw_event *event;
-  va_list dummy;
-  memset (&dummy, 0, sizeof dummy);
-  event = hw_event_queue_schedule_vtracef (me, delta_time, callback, data,
-                                          NULL, dummy);
-  return event;
+  return hw_event_queue_schedule_tracef (me, delta_time, callback, data, NULL);
 }
 
 struct hw_event *
index 901063b73da2b1862fa6d29100edfa63a214c674..51ca5bdb2f0441a097d17c91a4fa2a7bc70531a6 100644 (file)
@@ -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
index 86ebf1709cad4b097f86af9221139767aa34036f..85c91ad96521d50b1bf2ccfa3ab3dfec57389793 100644 (file)
@@ -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
index 75bdc70298ccd649bc02fb1c84a62828fb2f24af..455e1a246d93e998d2627981c57839c71e1ec27c 100644 (file)
@@ -454,7 +454,7 @@ profile_option_handler (SIM_DESC sd,
 \f
 /* 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));
index 5f161da630bb5c0681ec9eccaa6ce695c99f8195..26d9556322cf10f85969019f89ff52868900d873 100644 (file)
@@ -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);
index 7ff7b021b3372dcf3e04b1c8fb4f4b03d334d423..c89084e94401f4589f00412446e52aeec23ee6a9 100644 (file)
@@ -653,9 +653,10 @@ do { \
 
 \f
 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
index f089245f25e4921fc9f2eedf774a346320248e58..9cc19f5567bcf59c4ad7187b2c34bf7e33412972 100644 (file)
@@ -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
index d49ff89c57bb6f3bc585eeda0489a8c0510e4ca2..4d7e93dabe92bdca980333b0c08afd5fa1752f65 100644 (file)
@@ -1,3 +1,7 @@
+2021-05-03  Simon Marchi  <simon.marchi@polymtl.ca>
+
+       * trace.c (op_printf): Likewise.
+
 2021-05-01  Mike Frysinger  <vapier@gentoo.org>
 
        * config.in, configure: Regenerate.
index caa51b794dfc915bafa074135a434c685fc31724..a005797b4ecbcf09d68578b0f7d2e790edf02235 100644 (file)
@@ -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;
index 643d28b017a9b7e7cf279259fb1a7571a3c84e85..9e5f770e48b5bc1b49cf46517b84e8cf74deceaa 100644 (file)
@@ -1,3 +1,7 @@
+2021-05-03  Simon Marchi  <simon.marchi@polymtl.ca>
+
+       * interp.c (sim_open): Adjust format string specifier.
+
 2021-05-01  Mike Frysinger  <vapier@gentoo.org>
 
        * config.in, configure: Regenerate.
index e72dab645dd94cf4024c864a82a5955b8840cc97..ff2f6a23e56d8989404174a091c1b4982fc6446d 100644 (file)
@@ -215,9 +215,9 @@ sim_open (SIM_OPEN_KIND    kind,
   /* Allocate core managed memory */
 
   /* "Mirror" the ROM addresses below 1MB. */
-  sim_do_commandf (sd, "memory region 0,0x100000,0x%lx", V850_ROM_SIZE);
+  sim_do_commandf (sd, "memory region 0,0x100000,0x%x", V850_ROM_SIZE);
   /* Chunk of ram adjacent to rom */
-  sim_do_commandf (sd, "memory region 0x100000,0x%lx", V850_LOW_END-0x100000);
+  sim_do_commandf (sd, "memory region 0x100000,0x%x", V850_LOW_END-0x100000);
   /* peripheral I/O region - mirror 1K across 4k (0x1000) */
   sim_do_command (sd, "memory region 0xfff000,0x1000,1024");
   /* similarly if in the internal RAM region */