sim/ppc: fixes for arguments to printf style functions
authorAndrew Burgess <aburgess@redhat.com>
Tue, 11 Oct 2022 14:02:08 +0000 (15:02 +0100)
committerAndrew Burgess <aburgess@redhat.com>
Wed, 12 Oct 2022 09:37:00 +0000 (10:37 +0100)
After the recent series of fixes to mark more functions in the
simulator with ATTRIBUTE_PRINTF, there were some build failures in the
ppc sim due, in some cases, to bugs with the arguments being passed,
and in other cases, the issues were (maybe) less serious, with
arguments being the wrong size, or type, for the printf format being
used.

This commit fixes all of the issues that I ran into.

In each case I selected the easiest solution to the problem, which is
usually just casting the argument to the correct type.  If anyone
later on thinks the print format should change, please feel free to do
that.  What we have here should keep the simulator basically working
as it does currently, which is my goal with this commit.

sim/ppc/corefile.c
sim/ppc/emul_bugapi.c
sim/ppc/emul_chirp.c
sim/ppc/interrupts.c
sim/ppc/psim.c

index 1b3eeef8b53c97307f5fb0ec3b557ae892d6c04a..b2faef58c5b53e0e191294ecb96992a1e69c3ff6 100644 (file)
@@ -292,8 +292,8 @@ core_map_find_mapping(core_map *map,
     mapping = mapping->next;
   }
   if (abort)
-    error("core_find_mapping() - access to unmaped address, attach a default map to handle this - addr=0x%x nr_bytes=0x%x processor=0x%x cia=0x%x\n",
-         addr, nr_bytes, processor, cia);
+    error("core_find_mapping() - access to unmaped address, attach a default map to handle this - addr=0x%x nr_bytes=0x%x processor=0x%p cia=0x%x\n",
+         addr, nr_bytes, (void *) processor, cia);
   return NULL;
 }
 
index c3c607b43f0457235c0a26c5ea63d546c9f34624..f4eed443d8bdf995d616a9e7adca836568ffeaaa 100644 (file)
@@ -493,7 +493,7 @@ emul_bugapi_instruction_call(cpu *processor,
   switch (call_id) {
   default:
     error("emul-bugapi: unimplemented bugapi %s from address 0x%lx\n",
-         emul_bugapi_instruction_name (call_id), SRR0);
+         emul_bugapi_instruction_name (call_id), (unsigned long) SRR0);
     break;
 
   /* read a single character, output r3 = byte */
index 7a585388f63aa17ea1aa5f096db8ad7f91e1f3e6..116f3732ac74abe31942004caa06c6eed0c42a8e 100644 (file)
@@ -1509,7 +1509,7 @@ map_over_chirp_note(bfd *image,
       return;
     /* check the name field */
     if (head.namesz > sizeof(name)) {
-      error("chirp: note name too long (%d > %d)\n", (int)head.namesz, sizeof(name));
+      error("chirp: note name too long (%d > %d)\n", (int)head.namesz, (int)sizeof(name));
     }
     if (!bfd_get_section_contents(image, sect,
                                  name, sizeof(head), head.namesz)) {
@@ -1971,12 +1971,14 @@ emul_chirp_instruction_call(cpu *processor,
     }
     if (emul_data->n_args > 6) { /* See iee1275 requirements on nr returns */
       error("OpenFirmware service %s called from 0x%lx with args 0x%lx, too many args (%d)\n",
+           service_name,
            (unsigned long)emul_data->return_address,
            (unsigned long)emul_data->arguments,
            emul_data->n_returns);
     }
     if (emul_data->n_returns > 6) {
       error("OpenFirmware service %s called from 0x%lx with args 0x%lx,  with too many returns (%d)\n",
+           service_name,
            (unsigned long)emul_data->return_address,
            (unsigned long)emul_data->arguments,
            emul_data->n_args);
index 133638fdcafd7b53c19bb75080119b4d15c657b9..a33274aa56206cb0016ae37cd16b13a041e03c91 100644 (file)
@@ -234,7 +234,7 @@ instruction_storage_interrupt(cpu *processor,
        break;
       default:
        srr1_set = 0;
-       error("internal error - instruction_storage_interrupt - reason %d not implemented");
+       error("internal error - instruction_storage_interrupt - reason %d not implemented", reason);
        break;
       }
       TRACE(trace_interrupts, ("instruction storage interrupt - cia=0x%lx SRR1|=0x%lx\n",
index 9f1db675e509f63080327c2c31ea659df03320b2..acc40edf8aaf8be36290f6dd3009b9c95bc92d60 100644 (file)
@@ -99,7 +99,7 @@ find_arg(const char *err_msg,
 {
   *ptr_to_argp += 1;
   if (argv[*ptr_to_argp] == NULL)
-    error(err_msg);
+    error("%s", err_msg);
   return argv[*ptr_to_argp];
 }
 
@@ -535,7 +535,7 @@ psim_create(const char *file_name,
   if (ppc_trace[trace_print_device_tree] || ppc_trace[trace_dump_device_tree])
     tree_print(root);
   if (ppc_trace[trace_dump_device_tree])
-    error("");
+    error("%s", "");
 
   return system;
 }
@@ -1186,7 +1186,7 @@ psim_merge_device_file(device *root,
       /* append the next line */
       if (!fgets(device_path + curlen, sizeof(device_path) - curlen, description)) {
        fclose(description);
-       error("%s:%s: unexpected eof in line continuation - %s",
+       error("%s:%d: unexpected eof in line continuation - %s",
              file_name, line_nr, device_path);
       }
       if (strchr(device_path, '\n') == NULL) {