Index: source/Core/DataExtractor.cpp =================================================================== --- source/Core/DataExtractor.cpp +++ source/Core/DataExtractor.cpp @@ -733,8 +733,11 @@ uint64_t uval64 = GetMaxU64 (offset_ptr, size); if (bitfield_bit_size > 0) { - if (bitfield_bit_offset > 0) - uval64 >>= bitfield_bit_offset; + int32_t lsbcount = bitfield_bit_offset; + if (m_byte_order == eByteOrderBig) + lsbcount = size * 8 - bitfield_bit_offset - bitfield_bit_size; + if (lsbcount > 0) + uval64 >>= lsbcount; uint64_t bitfield_mask = ((1ul << bitfield_bit_size) - 1); if (!bitfield_mask && bitfield_bit_offset == 0 && bitfield_bit_size == 64) return uval64; @@ -749,8 +752,11 @@ int64_t sval64 = GetMaxS64 (offset_ptr, size); if (bitfield_bit_size > 0) { - if (bitfield_bit_offset > 0) - sval64 >>= bitfield_bit_offset; + int32_t lsbcount = bitfield_bit_offset; + if (m_byte_order == eByteOrderBig) + lsbcount = size * 8 - bitfield_bit_offset - bitfield_bit_size; + if (lsbcount > 0) + sval64 >>= lsbcount; uint64_t bitfield_mask = (((uint64_t)1) << bitfield_bit_size) - 1; sval64 &= bitfield_mask; // sign extend if needed Index: source/Core/ValueObject.cpp =================================================================== --- source/Core/ValueObject.cpp +++ source/Core/ValueObject.cpp @@ -2146,6 +2146,10 @@ synthetic_child_sp = GetSyntheticChild (index_const_str); if (!synthetic_child_sp) { + uint32_t bit_field_size = to - from + 1; + uint32_t bit_field_offset = from; + if (GetDataExtractor().GetByteOrder() == eByteOrderBig) + bit_field_offset = GetByteSize() * 8 - bit_field_size - bit_field_offset; // We haven't made a synthetic array member for INDEX yet, so // lets make one and cache it for any future reference. ValueObjectChild *synthetic_child = new ValueObjectChild (*this, @@ -2153,8 +2157,8 @@ index_const_str, GetByteSize(), 0, - to-from+1, - from, + bit_field_size, + bit_field_offset, false, false, eAddressTypeInvalid,