sim/erc32: Use int32_t as IRQ callback argument
authorTsukasa OI <research_trasio@irq.a4lg.com>
Sat, 24 Sep 2022 09:54:32 +0000 (09:54 +0000)
committerTsukasa OI <research_trasio@irq.a4lg.com>
Sat, 29 Oct 2022 08:13:15 +0000 (08:13 +0000)
Clang generates a warning if an argument is passed to a function without
prototype (zero arguments, even without (void)).  Such calls are deprecated
forms of indefinite arguments passing ("-Wdeprecated-non-prototype").
On the default configuration, it (somehow) doesn't cause a build failure but
a warning is generated.

But because the cause is the same as the issue the author fixed in
"sim/erc32: Use int32_t as event callback argument", it would be better to
fix it now to prevent problems in the future.

To fix the issue, this commit makes struct irqcall to use int32_t as a
callback (callback) argument of an IRQ.

sim/erc32/README.sis
sim/erc32/func.c
sim/erc32/sis.h

index b85479ef03951feeebae83a60adc484eadc6f5ec..f10fad91748d0898dc2a7198828b3d0ee5d31885 100644 (file)
@@ -246,9 +246,9 @@ int32_t arg;
 unsigned int delta;
 
 set_int(level,callback,arg)
-int level;
-void (*callback)();
-int arg;
+int32_t level;
+void (*callback)(int32_t);
+int32_t arg;
 
 clear_int(level)
 int level;
index 85d3c0cb8ec21504a234812f280e392f76f32628..86a395fe560163015a7f223a41e6dfab204c2922 100644 (file)
@@ -874,7 +874,7 @@ init_event(void)
 }
 
 void
-set_int(int32_t level, void (*callback) (), int32_t arg)
+set_int(int32_t level, void (*callback) (int32_t), int32_t arg)
 {
     irqarr[level & 0x0f].callback = callback;
     irqarr[level & 0x0f].arg = arg;
index 36346cae641787f3b20ab3c8dcccee3fd0e4e997..df6b22c47b0b8bd5e6bc48b2c8de7b4f9ea8aee5 100644 (file)
@@ -137,7 +137,7 @@ struct estate {
 };
 
 struct irqcell {
-    void            (*callback) ();
+    void            (*callback) (int32_t);
     int32_t           arg;
 };
 
@@ -184,7 +184,7 @@ struct disassemble_info;
 extern void    dis_mem (uint32_t addr, uint32_t len,
                         struct disassemble_info *info);
 extern void    event (void (*cfunc) (int32_t), int32_t arg, uint64_t delta);
-extern void    set_int (int32_t level, void (*callback) (), int32_t arg);
+extern void    set_int (int32_t level, void (*callback) (int32_t), int32_t arg);
 extern void    advance_time (struct pstate  *sregs);
 extern uint32_t        now (void);
 extern int     wait_for_irq (void);