[patch] gdbserver/win32-low.c: Fix printf-like formatting (was Re: [patch]: Replace stryoul call to fetch address)

Corinna Vinschen vinschen@redhat.com
Thu Feb 28 09:19:00 GMT 2013


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



More information about the Gdb-patches mailing list