in Source/PLCrashAsyncDwarfPrimitives.hpp [364:405]
plcrash_error_t plcrash_async_dwarf_read_uintmax64 (plcrash_async_mobject_t *mobj,
const plcrash_async_byteorder_t *byteorder,
pl_vm_address_t base_addr,
pl_vm_off_t offset,
uint8_t data_size,
T *dest)
{
union udata {
uint8_t u8;
uint16_t u16;
uint32_t u32;
uint64_t u64;
} *data;
data = (union udata *) plcrash_async_mobject_remap_address(mobj, base_addr, offset, data_size);
if (data == NULL)
return PLCRASH_EINVAL;
switch (data_size) {
case 1:
*dest = data->u8;
break;
case 2:
*dest = byteorder->swap16(data->u16);
break;
case 4:
*dest = byteorder->swap32(data->u32);
break;
case 8:
*dest = (T)byteorder->swap64(data->u64);
break;
default:
PLCF_DEBUG("Unhandled data width %" PRIu64, (uint64_t) data_size);
return PLCRASH_EINVAL;
}
return PLCRASH_ESUCCESS;
}