[5/5] sim/iq2000: silence pointer-sign warnings
Commit Message
When building the iq2000 simulator I see a few warnings like this:
/tmp/build/sim/../../src/sim/iq2000/iq2000.c: In function ‘fetch_str’:
/tmp/build/sim/../../src/sim/iq2000/iq2000.c:50:54: error: pointer targets in passing argument 3 of ‘sim_read’ differ in signedness [-Werror=pointer-sign]
50 | sim_read (CPU_STATE (current_cpu), CPU2DATA(addr), buf, nr);
| ^~~
| |
| char *
I've silenced these warnings by casting buf to 'unsigned char *'.
With this change I now see no warnings when compiling iq2000.c, so
I've removed the line from Makefile.in that disables -Werror.
Makefile.in was also disabling -Werror when compiling mloop.c,
however, I'm not seeing any warnings when compiling that file, so I've
removed the -Werror disable in that case too.
---
sim/iq2000/Makefile.in | 3 ---
sim/iq2000/iq2000.c | 9 ++++++---
2 files changed, 6 insertions(+), 6 deletions(-)
Comments
On 12 Oct 2022 13:38, Andrew Burgess via Gdb-patches wrote:
> When building the iq2000 simulator I see a few warnings like this:
>
> /tmp/build/sim/../../src/sim/iq2000/iq2000.c: In function ‘fetch_str’:
> /tmp/build/sim/../../src/sim/iq2000/iq2000.c:50:54: error: pointer targets in passing argument 3 of ‘sim_read’ differ in signedness [-Werror=pointer-sign]
> 50 | sim_read (CPU_STATE (current_cpu), CPU2DATA(addr), buf, nr);
> | ^~~
> | |
> | char *
>
> I've silenced these warnings by casting buf to 'unsigned char *'.
> With this change I now see no warnings when compiling iq2000.c, so
> I've removed the line from Makefile.in that disables -Werror.
i left this warning in place so someone would fix it properly rather than
just cast it away
-mike
Mike Frysinger <vapier@gentoo.org> writes:
> On 12 Oct 2022 13:38, Andrew Burgess via Gdb-patches wrote:
>> When building the iq2000 simulator I see a few warnings like this:
>>
>> /tmp/build/sim/../../src/sim/iq2000/iq2000.c: In function ‘fetch_str’:
>> /tmp/build/sim/../../src/sim/iq2000/iq2000.c:50:54: error: pointer targets in passing argument 3 of ‘sim_read’ differ in signedness [-Werror=pointer-sign]
>> 50 | sim_read (CPU_STATE (current_cpu), CPU2DATA(addr), buf, nr);
>> | ^~~
>> | |
>> | char *
>>
>> I've silenced these warnings by casting buf to 'unsigned char *'.
>> With this change I now see no warnings when compiling iq2000.c, so
>> I've removed the line from Makefile.in that disables -Werror.
>
> i left this warning in place so someone would fix it properly rather than
> just cast it away
Sorry for not understanding that. If you'd like to expand on "properly"
I'll take a pass at fixing it.
Thanks,
Andrew
On 24 Oct 2022 16:45, Andrew Burgess wrote:
> Mike Frysinger <vapier@gentoo.org> writes:
>
> > On 12 Oct 2022 13:38, Andrew Burgess via Gdb-patches wrote:
> >> When building the iq2000 simulator I see a few warnings like this:
> >>
> >> /tmp/build/sim/../../src/sim/iq2000/iq2000.c: In function ‘fetch_str’:
> >> /tmp/build/sim/../../src/sim/iq2000/iq2000.c:50:54: error: pointer targets in passing argument 3 of ‘sim_read’ differ in signedness [-Werror=pointer-sign]
> >> 50 | sim_read (CPU_STATE (current_cpu), CPU2DATA(addr), buf, nr);
> >> | ^~~
> >> | |
> >> | char *
> >>
> >> I've silenced these warnings by casting buf to 'unsigned char *'.
> >> With this change I now see no warnings when compiling iq2000.c, so
> >> I've removed the line from Makefile.in that disables -Werror.
> >
> > i left this warning in place so someone would fix it properly rather than
> > just cast it away
>
> Sorry for not understanding that. If you'd like to expand on "properly"
> I'll take a pass at fixing it.
whatever doesn't require a lot of casting :). sprinkling casts around means
leaving landmines for ourselves in the future.
in this particular case, i think the only reasonable answer is to change the
sim_read & sim_write APIs to work on void* much like the C library funcs. i
get that void pointers are basically implicit casts, but i think that's still
the right way to go unless i'm forgetting something obvious.
i also vaguely recall that we really shouldn't be using sim_read & sim_write
in sim backends in the first place, but instead leaning on sim_core_* APIs.
-mike
@@ -37,9 +37,6 @@ ALL_CPU_CFLAGS = -DHAVE_CPU_IQ2000BF -DHAVE_CPU_IQ10BF
SIM_EXTRA_CLEAN = iq2000-clean
-# Some modules don't build cleanly yet.
-iq2000.o mloop.o: SIM_WERROR_CFLAGS =
-
## COMMON_POST_CONFIG_FRAG
arch = iq2000
@@ -47,7 +47,8 @@ fetch_str (SIM_CPU *current_cpu, PCADDR pc, DI addr)
pc, read_map, CPU2DATA(addr + nr)) != 0)
nr++;
buf = NZALLOC (char, nr + 1);
- sim_read (CPU_STATE (current_cpu), CPU2DATA(addr), buf, nr);
+ sim_read (CPU_STATE (current_cpu), CPU2DATA(addr), (unsigned char *) buf,
+ nr);
return buf;
}
@@ -82,7 +83,8 @@ do_syscall (SIM_CPU *current_cpu, PCADDR pc)
case TARGET_NEWLIB_SYS_write:
buf = zalloc (PARM3);
- sim_read (CPU_STATE (current_cpu), CPU2DATA(PARM2), buf, PARM3);
+ sim_read (CPU_STATE (current_cpu), CPU2DATA(PARM2),
+ (unsigned char *) buf, PARM3);
SET_H_GR (ret_reg,
sim_io_write (CPU_STATE (current_cpu),
PARM1, buf, PARM3));
@@ -105,7 +107,8 @@ do_syscall (SIM_CPU *current_cpu, PCADDR pc)
SET_H_GR (ret_reg,
sim_io_read (CPU_STATE (current_cpu),
PARM1, buf, PARM3));
- sim_write (CPU_STATE (current_cpu), CPU2DATA(PARM2), buf, PARM3);
+ sim_write (CPU_STATE (current_cpu), CPU2DATA(PARM2),
+ (unsigned char *) buf, PARM3);
free (buf);
break;