This is the mail archive of the
systemtap@sourceware.org
mailing list for the systemtap project.
Re: Problem with 32-bit negative return values
- From: Mike Mason <mmlnx at us dot ibm dot com>
- To: "Frank Ch. Eigler" <fche at redhat dot com>
- Cc: systemtap at sources dot redhat dot com
- Date: Tue, 10 Oct 2006 13:40:48 -0700
- Subject: Re: Problem with 32-bit negative return values
- References: <452BD98F.8050602@us.ibm.com> <20061010175159.GH14473@redhat.com>
Frank Ch. Eigler wrote:
Hi -
On Tue, Oct 10, 2006 at 10:34:07AM -0700, Mike Mason wrote:
[...]
I'm trying to use the return value from sock_recvmsg() to determine how
many bytes are received. It ignores negative return values (errors).
[...]
But on x86_64, the negative values are interpreted and printed as large
positive values:
RECV 1440
RECV 4294967285
[...]
It could easily be a typing/sign-extension bug in the loc2c-related
code. Could you check the generated C code (-p3; look for the
_dwarf_tvar_get function)?
Here's the suspect code generated with -p3:
l->__tmp18 =
({
if (unlikely (c->nesting+2 >= MAXNESTING)) {
c->last_error = "MAXNESTING exceeded";
c->last_stmt = "identifier '$return' at nettop3.stp:56:15";
} else if (likely (! c->last_error)) {
c->nesting ++;
function__dwarf_tvar_get_return_8 (c);
c->nesting --;
if (c->last_error && ! c->last_error[0])
c->last_error = 0;
}
c->locals[c->nesting+1].function__dwarf_tvar_get_return_8.__retvalue;
});
if (likely (! c->last_error)) {
l->__tmp19 = 0;
_stp_printf ("RECV %lld\n", l->__tmp18);
}
- FChE