mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-10-14 12:59:41 -07:00
generalize machine ops
This commit is contained in:
1 parent
782f87e512
commit
952afd49a7
7 files changed
+89
-119
No files matched your search
+7
-7
@@ -2,24 +2,24 @@
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
internal GNU_RDebugInfoList
|
||||
gnu_parse_rdebug(Arena *arena, B32 is_64bit, U64 first_rdebug_vaddr, GNU_MemRead *mem_read_func, void *mem_read_ud)
|
||||
gnu_parse_rdebug(Arena *arena, B32 is_64bit, U64 first_rdebug_vaddr, MachineOp_MemRead *mem_read_func, void *mem_read_ud)
|
||||
{
|
||||
GNU_RDebugInfoList result = {0};
|
||||
|
||||
for (U64 rdebug_vaddr = first_rdebug_vaddr, rdebug_next = 0; rdebug_vaddr != 0; rdebug_vaddr = rdebug_next) {
|
||||
GNU_RDebugInfo64 rdebug;
|
||||
if (is_64bit) {
|
||||
U64 rdebug_read_size = mem_read_func(rdebug_vaddr, sizeof(rdebug), &rdebug, mem_read_ud);
|
||||
U64 rdebug_read_size = mem_read_func(rdebug_vaddr, &rdebug, sizeof(rdebug),mem_read_ud);
|
||||
if (rdebug_read_size != sizeof(rdebug)) { goto exit; }
|
||||
} else {
|
||||
GNU_RDebugInfo32 rdebug32;
|
||||
U64 rdebug_read_size = mem_read_func(rdebug_vaddr, sizeof(rdebug32), &rdebug32, mem_read_ud);
|
||||
U64 rdebug_read_size = mem_read_func(rdebug_vaddr, &rdebug32, sizeof(rdebug32), mem_read_ud);
|
||||
if (rdebug_read_size != sizeof(rdebug32)) { goto exit; }
|
||||
}
|
||||
if (rdebug.r_version < 1) { goto exit; }
|
||||
|
||||
if (rdebug.r_version > 1) {
|
||||
U64 r_next_size = mem_read_func(rdebug_vaddr + sizeof(rdebug), sizeof(rdebug_next), &rdebug_next, mem_read_ud);
|
||||
U64 r_next_size = mem_read_func(rdebug_vaddr + sizeof(rdebug), &rdebug_next, sizeof(rdebug_next), mem_read_ud);
|
||||
if (r_next_size != sizeof(rdebug_next)) { goto exit; }
|
||||
}
|
||||
|
||||
@@ -34,18 +34,18 @@ gnu_parse_rdebug(Arena *arena, B32 is_64bit, U64 first_rdebug_vaddr, GNU_MemRead
|
||||
}
|
||||
|
||||
internal GNU_LinkMapList
|
||||
gnu_parse_link_map_list(Arena *arena, B32 is_64bit, U64 first_link_map_vaddr, GNU_MemRead *mem_read_func, void *mem_read_ud)
|
||||
gnu_parse_link_map_list(Arena *arena, B32 is_64bit, U64 first_link_map_vaddr, MachineOp_MemRead *mem_read_func, void *mem_read_ud)
|
||||
{
|
||||
GNU_LinkMapList result = {0};
|
||||
|
||||
GNU_LinkMap64 link_map = {0};
|
||||
for (U64 link_map_vaddr = first_link_map_vaddr; link_map_vaddr != 0; link_map_vaddr = link_map.next_vaddr) {
|
||||
if (is_64bit) {
|
||||
U64 link_map_size = mem_read_func(link_map_vaddr, sizeof(link_map), &link_map, mem_read_ud);
|
||||
U64 link_map_size = mem_read_func(link_map_vaddr, &link_map, sizeof(link_map), mem_read_ud);
|
||||
if (link_map_size != sizeof(link_map)) { goto exit; }
|
||||
} else {
|
||||
GNU_LinkMap32 link_map32 = {0};
|
||||
U64 link_map_size = mem_read_func(link_map_vaddr, sizeof(link_map32), &link_map32, mem_read_ud);
|
||||
U64 link_map_size = mem_read_func(link_map_vaddr, &link_map32, sizeof(link_map32), mem_read_ud);
|
||||
if (link_map_size != sizeof(link_map32)) { goto exit; }
|
||||
gnu_linkmap64_from_linkmap32(link_map32);
|
||||
}
|
||||
|
||||
+3
-5
@@ -30,12 +30,10 @@ typedef struct GNU_RDebugInfoList
|
||||
GNU_RDebugInfoNode *last;
|
||||
} GNU_RDebugInfoList;
|
||||
|
||||
#define GNU_MEM_READ(name) U64 name(U64 addr, U64 size, void *buffer, void *ud)
|
||||
typedef GNU_MEM_READ(GNU_MemRead);
|
||||
|
||||
////////////////////////////////
|
||||
internal GNU_RDebugInfoList gnu_parse_rdebug(Arena *arena, B32 is_64bit, U64 first_rdebug_vaddr, GNU_MemRead *mem_read_func, void *mem_read_ud);
|
||||
internal GNU_LinkMapList gnu_parse_link_map_list(Arena *arena, B32 is_64bit, U64 first_link_map_vaddr, GNU_MemRead *mem_read_func, void *mem_read_ud);
|
||||
|
||||
internal GNU_RDebugInfoList gnu_parse_rdebug(Arena *arena, B32 is_64bit, U64 first_rdebug_vaddr, MachineOp_MemRead *mem_read_func, void *mem_read_ud);
|
||||
internal GNU_LinkMapList gnu_parse_link_map_list(Arena *arena, B32 is_64bit, U64 first_link_map_vaddr, MachineOp_MemRead *mem_read_func, void *mem_read_ud);
|
||||
|
||||
#endif
|
||||
|
||||
Reference in new issue
Block a user