Re: Wrong RSS field in ps

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




----- Original Message -----
> On Tue, 4 Aug 2015 16:57:35 -0400 (EDT)
> Dave Anderson <anderson@xxxxxxxxxx> wrote:
> 
> > 
> > 
> > ----- Original Message -----
> > 
> > > > Michael
> > > 
> > > OK, so it would seem to be somewhere in the trail from enumerator_value()
> > > into the gdb_command_funnel() via the GNU_GET_DATATYPE req->command in
> > > datatype_info().
> > > 
> > > I'm having a hard time provisioning an s390x machine internally at this time.
> > > When I get one, I'll see if the problem has been there all along.
> > > 
> > > Dave
> > > 
> > 
> > Michael,
> > 
> > I finally got access to an s390x and I see the same thing.  In fact it also
> > happens on a RHEL6 2.6.32-based kernel, so it appears it's always been an
> > issue.  I'll look into it tomorrow.
> 
> Great, thanks!
> 
> Michael
> 

The problem is in gdb-7.6/gdb/symtab.c, in the eval_enum() function that
gets created/added by the crash utility's gdb-7.6.patch: 

static void
eval_enum(struct type *type, struct gnu_request *req)
{
        register int i;
        int len;
        int lastval;

        len = TYPE_NFIELDS (type);
        lastval = 0;

        for (i = 0; i < len; i++) {
                if (lastval != TYPE_FIELD_BITPOS (type, i)) {
                        lastval = TYPE_FIELD_BITPOS (type, i);
                }
                if (STREQ(TYPE_FIELD_NAME(type, i), req->name)) {
                        req->tagname = "(unknown)";
                        req->value = lastval;
                        return;
                }
                lastval++;
        }
}

The function is only used for anonymous (nameless) enums like MM_ANONPAGES.
It simply walks through the enumerator fields and looks for a matching string,
having captured the value of each enumerator in "lastval".  This function hasn't
changed, and has simply been forward-ported with each upgrade of gdb.  What has
changed, though, is gdb itself between gdb-7.3.1 and gdb-7.6, which added a new
TYPE_FIELD_ENUMVAL() macro, which should replace the two instances of 
TYPE_FIELD_BITPOS() above.

I'm thinking that this is an endian issue, where the generic TYPE_FIELD_BITPOS()
macro works OK for little-endian machines, and probably has always failed for big-endian
machines.  I'm provisioning a big-endian ppc64 to verify that.  (Although I'm not sure
what macro should have been used in the older gdb versions that didn't have a
TYPE_FIELD_ENUMVAL()?)

Anyway, that's the resolution -- I'll be updating the gdb-7.6.patch upstream later today
or tomorrow.

Dave






--
Crash-utility mailing list
Crash-utility@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/crash-utility



[Index of Archives]     [Fedora Development]     [Fedora Desktop]     [Fedora SELinux]     [Yosemite News]     [KDE Users]     [Fedora Tools]

 

Powered by Linux