This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
Re: [patch] gdbserver/win32-low.c: Fix printf-like formatting (was Re: [patch]: Replace stryoul call to fetch address)
On Feb 27 23:05, Eli Zaretskii wrote:
> > Date: Wed, 27 Feb 2013 21:29:02 +0100
> > From: Corinna Vinschen <vinschen@redhat.com>
> >
> > If you look closely, I didn't add the unsigned casts.
>
> Not in the part I cited (sorry), but elsewhere you did:
>
> > @@ -1317,10 +1317,10 @@ handle_exception (struct target_waitstat
> > ourstatus->kind = TARGET_WAITKIND_SPURIOUS;
> > return;
> > }
> > - OUTMSG2 (("gdbserver: unknown target exception 0x%08lx at 0x%s",
> > - current_event.u.Exception.ExceptionRecord.ExceptionCode,
> > - phex_nz ((uintptr_t) current_event.u.Exception.ExceptionRecord.
> > - ExceptionAddress, sizeof (uintptr_t))));
> > + OUTMSG2 (("gdbserver: unknown target exception 0x%08x at 0x%s",
> > + (unsigned) current_event.u.Exception.ExceptionRecord.ExceptionCode,
> > + phex_nz ((uintptr_t) current_event.u.Exception.ExceptionRecord.
> > + ExceptionAddress, sizeof (uintptr_t))));
> [...]
> > @@ -1561,10 +1561,10 @@ get_child_debug_event (struct target_wai
> >
> > default:
> > OUTMSG2 (("gdbserver: kernel event unknown "
> > - "for pid=%d tid=%x code=%ld\n",
> > + "for pid=%u tid=%x code=%x\n",
> > (unsigned) current_event.dwProcessId,
> > (unsigned) current_event.dwThreadId,
> > - current_event.dwDebugEventCode));
> > + (unsigned) current_event.dwDebugEventCode));
> > break;
> > }
>
> Are those mistakes?
No.
> > The unsigned casts are already widely used throughout the file.
>
> So why are they there?
DWORD is unsigned long on 32 bit Windows, right? So it is on 64 bit
Windows as well, since Windows is a LLP64 system. 64 bit Cygwin OTOH
will be LP64, so in 64 bit Cygwin's case, DWORD is defined as unsigned
int for hopefully obvious reasons.
So, using %ld with no cast will result in a GCC warning on 64 bit
Cygwin, because DWORD is not long. %d would be right for 64 bit Cygwin,
but might result in a warning on 32 bit Mingw/Cygwin and 64 bit Mingw.
So, whatever they did before, the casts actually do serve a purpose.
They cast the variably defined DWORD-typed value to a well known int
type with a well defined printf format specifier.
Corinna
--
Corinna Vinschen
Cygwin Maintainer
Red Hat