in Source/PLCrashAsyncDwarfPrimitives.hpp [423:469]
plcrash_error_t plcrash_async_dwarf_read_task_uintmax64 (task_t task,
const plcrash_async_byteorder_t *byteorder,
pl_vm_address_t base_addr,
pl_vm_off_t offset,
uint8_t data_size,
T *dest)
{
plcrash_error_t err;
union {
uint8_t u8;
uint16_t u16;
uint32_t u32;
uint64_t u64;
} data;
switch (data_size) {
case 1:
if ((err = plcrash_async_task_read_uint8(task, base_addr, offset, &data.u8)) != PLCRASH_ESUCCESS)
return err;
*dest = data.u8;
break;
case 2:
if ((err = plcrash_async_task_read_uint16(task, byteorder, base_addr, offset, &data.u16)) != PLCRASH_ESUCCESS)
return err;
*dest = data.u16;
break;
case 4:
if ((err = plcrash_async_task_read_uint32(task, byteorder, base_addr, offset, &data.u32)) != PLCRASH_ESUCCESS)
return err;
*dest = data.u32;
break;
case 8:
if ((err = plcrash_async_task_read_uint64(task, byteorder, base_addr, offset, &data.u64)) != PLCRASH_ESUCCESS)
return err;
*dest = (T)data.u64;
break;
default:
PLCF_DEBUG("Unhandled data width %" PRIu64, (uint64_t) data_size);
return PLCRASH_EINVAL;
}
return PLCRASH_ESUCCESS;
}