Hi Luc, The processing of bit fields on big endian systems in sial is currently broken, because the bits are not copied to the correct position and are not shifted the right way. To fix this, the following patch does the processing on big endian systems as follows: 1. sial_exemem(): Copy complete bit field to the "end" (right) of the long long variable. 2. get_bit_value(): Shift the bits of the bit field member right to the "end" of the long long variable. This results in the value of the requested bitfield member. Michael --- extensions/libsial/sial_member.c | 7 +++++-- extensions/libsial/sial_type.c | 6 +++++- 2 files changed, 10 insertions(+), 3 deletions(-) Index: crash-4.0.9/extensions/libsial/sial_member.c =================================================================== --- crash-4.0.9.orig/extensions/libsial/sial_member.c +++ crash-4.0.9/extensions/libsial/sial_member.c @@ -236,10 +236,13 @@ srcpos_t p; } /* bit field gymnastic */ else if(stm->m.nbits) { - ull value=0; + void *target = &value; + + if (__BYTE_ORDER != __LITTLE_ENDIAN) + target = target + (sizeof(value) - stm->m.size); - API_GETMEM(m->mem+stm->m.offset, &value, stm->m.size); + API_GETMEM(m->mem+stm->m.offset, target, stm->m.size); get_bit_value(value, stm->m.nbits, stm->m.fbit, stm->m.size, v); /* no mempos for bit fields ... */ Index: crash-4.0.9/extensions/libsial/sial_type.c =================================================================== --- crash-4.0.9.orig/extensions/libsial/sial_type.c +++ crash-4.0.9/extensions/libsial/sial_type.c @@ -287,7 +287,11 @@ get_bit_value(ull val, int nbits, int bo else { mask = ((1 << nbits) - 1); } - val = val >> boff; + + if (__BYTE_ORDER == __LITTLE_ENDIAN) + val = val >> boff; + else + val = val >> (vnbits - boff - nbits); val &= mask; if(issigned(v)) { -- Crash-utility mailing list Crash-utility@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/crash-utility