in Source/PLCrashAsyncThread_x86.c [424:481]
static void plcrash_async_thread_state_set_reg_32 (plcrash_async_thread_state_t *thread_state, plcrash_regnum_t regnum, plcrash_greg_t reg) {
plcrash_async_thread_state_t *ts = thread_state;
/* All word-sized registers */
switch (regnum) {
case PLCRASH_X86_EAX:
SETGEN(eax, thread.uts.ts32, ts, regnum, (uint32_t)reg);
case PLCRASH_X86_EDX:
SETGEN(edx, thread.uts.ts32, ts, regnum, (uint32_t)reg);
case PLCRASH_X86_ECX:
SETGEN(ecx, thread.uts.ts32, ts, regnum, (uint32_t)reg);
case PLCRASH_X86_EBX:
SETGEN(ebx, thread.uts.ts32, ts, regnum, (uint32_t)reg);
case PLCRASH_X86_EBP:
SETGEN(ebp, thread.uts.ts32, ts, regnum, (uint32_t)reg);
case PLCRASH_X86_ESI:
SETGEN(esi, thread.uts.ts32, ts, regnum, (uint32_t)reg);
case PLCRASH_X86_EDI:
SETGEN(edi, thread.uts.ts32, ts, regnum, (uint32_t)reg);
case PLCRASH_X86_ESP:
SETGEN(esp, thread.uts.ts32, ts, regnum, (uint32_t)reg);
case PLCRASH_X86_EIP:
SETGEN(eip, thread.uts.ts32, ts, regnum, (uint32_t)reg);
case PLCRASH_X86_EFLAGS:
SETGEN(eflags, thread.uts.ts32, ts, regnum, (uint32_t)reg);
case PLCRASH_X86_TRAPNO:
SETGEN(trapno, exception.ues.es32, ts, regnum, reg);
case PLCRASH_X86_CS:
SETGEN(cs, thread.uts.ts32, ts, regnum, (uint32_t)reg);
case PLCRASH_X86_DS:
SETGEN(ds, thread.uts.ts32, ts, regnum, (uint32_t)reg);
case PLCRASH_X86_ES:
SETGEN(es, thread.uts.ts32, ts, regnum, (uint32_t)reg);
case PLCRASH_X86_FS:
SETGEN(fs, thread.uts.ts32, ts, regnum, (uint32_t)reg);
case PLCRASH_X86_GS:
SETGEN(gs, thread.uts.ts32, ts, regnum, (uint32_t)reg);
default:
// Unsupported register
__builtin_trap();
}
}