Skip to content

Commit

Permalink
Add thread context support for A32, A64 (+)
Browse files Browse the repository at this point in the history
- Add support for Arm A32 and A64
- Add segment registers for x86, x86-64
- Add enums to get specific register
  • Loading branch information
dd86k committed Sep 16, 2024
1 parent 175110e commit 8887d5a
Show file tree
Hide file tree
Showing 6 changed files with 496 additions and 173 deletions.
3 changes: 2 additions & 1 deletion src/adbg/debugger.d
Original file line number Diff line number Diff line change
Expand Up @@ -714,6 +714,7 @@ Lwait:
// - Windows does, though, and points to it
// - gdbserver and lldb never attempt to do such thing anyway
// - RIP-1 (x86) could *maybe* point to int3 or similar.
// - User area might have DR3, it does have "fault_address"
// NOTE: Newer D compilers fixed siginfo_t as a whole
// for version (linux). Noticed on DMD 2.103.1.
// Old glibc: ._sifields._sigfault.si_addr
Expand All @@ -728,7 +729,7 @@ Lwait:
}
exception.fault_address = cast(size_t)sig._sifields._sigfault.si_addr;
break;
// case SIGINT, SIGTERM, SIGABRT: //TODO: Killed?
// case SIGINT, SIGTERM, SIGABRT: //TODO: Killed?
default:
exception.fault_address = 0;
}
Expand Down
57 changes: 18 additions & 39 deletions src/adbg/include/linux/user.d
Original file line number Diff line number Diff line change
Expand Up @@ -209,46 +209,25 @@ version (X86) {

enum NGREG = 18;


/*#define ARM_cpsr uregs[16]
#define ARM_pc uregs[15]
#define ARM_lr uregs[14]
#define ARM_sp uregs[13]
#define ARM_ip uregs[12]
#define ARM_fp uregs[11]
#define ARM_r10 uregs[10]
#define ARM_r9 uregs[9]
#define ARM_r8 uregs[8]
#define ARM_r7 uregs[7]
#define ARM_r6 uregs[6]
#define ARM_r5 uregs[5]
#define ARM_r4 uregs[4]
#define ARM_r3 uregs[3]
#define ARM_r2 uregs[2]
#define ARM_r1 uregs[1]
#define ARM_r0 uregs[0]
#define ARM_ORIG_r0 uregs[17]*/
struct user_regs_struct {
c_ulongint r0;
c_ulongint r1;
c_ulongint r2;
c_ulongint r3;
c_ulongint r4;
c_ulongint r5;
c_ulongint r6;
c_ulongint r7;
c_ulongint r8;
c_ulongint r9;
c_ulongint r10;
c_ulongint fp;
c_ulongint ip;
c_ulongint sp;
c_ulongint lr;
c_ulongint pc;
c_ulongint orig_r0;
}
struct user_regs_struct {
c_ulongint[NGREG] uregs; ///
c_ulongint r0; // ARM_r0
c_ulongint r1; // ARM_r1
c_ulongint r2; // ARM_r2
c_ulongint r3; // ARM_r3
c_ulongint r4; // ARM_r4
c_ulongint r5; // ARM_r5
c_ulongint r6; // ARM_r6
c_ulongint r7; // ARM_r7
c_ulongint r8; // ARM_r8
c_ulongint r9; // ARM_r9
c_ulongint r10; // ARM_r10
c_ulongint fp; // ARM_fp
c_ulongint ip; // ARM_ip
c_ulongint sp; // ARM_sp
c_ulongint lr; // ARM_lr
c_ulongint pc; // ARM_pc
c_ulongint cpsr; // ARM_cpsr
c_ulongint orig_r0; // ARM_ORIG_r0
}

struct fpregset_t {
Expand Down
2 changes: 1 addition & 1 deletion src/adbg/include/windows/winnt.d
Original file line number Diff line number Diff line change
Expand Up @@ -362,7 +362,7 @@ align(16) struct ARM64_NT_CONTEXT { // DECLSPEC_ALIGN(16)

}

alias PARM64_NT_CONTEXT = ARM64_NT_CONTEXT;
alias PARM64_NT_CONTEXT = ARM64_NT_CONTEXT*;

align(8) struct ARM_NT_CONTEXT { // DECLSPEC_ALIGN(8)

Expand Down
4 changes: 2 additions & 2 deletions src/adbg/objectserver.d
Original file line number Diff line number Diff line change
Expand Up @@ -320,7 +320,7 @@ int adbg_object_read_at(adbg_object_t *o, long location, void *buffer, size_t rd
/// flags = Additional settings.
/// Returns: Null pointer on error.
void* adbg_object_readalloc_at(adbg_object_t *o, long location, size_t rdsize, int flags = 0) {
version (Trace) trace("location=%lld buffer=%p", location, rdsize);
version (Trace) trace("location=%lld rdsize=%zx", location, rdsize);

if (o == null || rdsize == 0) {
adbg_oops(AdbgError.invalidArgument);
Expand Down Expand Up @@ -384,7 +384,7 @@ int adbg_object_loadv(adbg_object_t *o) {
return adbg_object_pdb70_load(o);

// 64-bit signature detection
version (Trace) trace("u64=%#x", sig.u64);
version (Trace) trace("u64=%#llx", sig.u64);
if (siglen > ulong.sizeof) switch (sig.u64) {
case AR_MAGIC:
return adbg_object_ar_load(o);
Expand Down
Loading

0 comments on commit 8887d5a

Please sign in to comment.