mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-08-14 09:18:09 +00:00
eval, local variable resolution -> do not assume offset evaluations. infer evaluation mode from location info
This commit is contained in:
@@ -68,3 +68,8 @@ target:
|
||||
executable: "build/ryan_scratch.exe"
|
||||
working_directory: build
|
||||
}
|
||||
target:
|
||||
{
|
||||
executable: "../../Program Files/SuperTux/bin/supertux2.exe"
|
||||
working_directory: "../../Program Files/SuperTux/bin/"
|
||||
}
|
||||
|
||||
@@ -1025,63 +1025,77 @@ internal U64
|
||||
cv_name_offset_from_symbol(CV_SymKind kind, String8 data)
|
||||
{
|
||||
U64 offset = data.size;
|
||||
switch (kind) {
|
||||
case CV_SymKind_COMPILE: break;
|
||||
case CV_SymKind_OBJNAME: break;
|
||||
case CV_SymKind_THUNK32: {
|
||||
switch(kind)
|
||||
{
|
||||
case CV_SymKind_COMPILE:{}break;
|
||||
case CV_SymKind_OBJNAME:{}break;
|
||||
case CV_SymKind_THUNK32:
|
||||
{
|
||||
offset = sizeof(CV_SymThunk32);
|
||||
} break;
|
||||
case CV_SymKind_LABEL32: {
|
||||
}break;
|
||||
case CV_SymKind_LABEL32:
|
||||
{
|
||||
offset = sizeof(CV_SymLabel32);
|
||||
} break;
|
||||
case CV_SymKind_REGISTER: {
|
||||
}break;
|
||||
case CV_SymKind_REGISTER:
|
||||
{
|
||||
offset = sizeof(CV_SymRegister);
|
||||
} break;
|
||||
case CV_SymKind_CONSTANT: {
|
||||
}break;
|
||||
case CV_SymKind_CONSTANT:
|
||||
{
|
||||
offset = sizeof(CV_SymConstant);
|
||||
CV_NumericParsed size;
|
||||
offset += cv_read_numeric(data, offset, &size);
|
||||
} break;
|
||||
case CV_SymKind_UDT: {
|
||||
}break;
|
||||
case CV_SymKind_UDT:
|
||||
{
|
||||
offset = sizeof(CV_SymUDT);
|
||||
} break;
|
||||
case CV_SymKind_BPREL32: {
|
||||
}break;
|
||||
case CV_SymKind_BPREL32:
|
||||
{
|
||||
offset = sizeof(CV_SymBPRel32);
|
||||
} break;
|
||||
}break;
|
||||
case CV_SymKind_LDATA32:
|
||||
case CV_SymKind_GDATA32: {
|
||||
case CV_SymKind_GDATA32:
|
||||
{
|
||||
offset = sizeof(CV_SymData32);
|
||||
} break;
|
||||
case CV_SymKind_PUB32: {
|
||||
}break;
|
||||
case CV_SymKind_PUB32:
|
||||
{
|
||||
offset = sizeof(CV_SymPub32);
|
||||
} break;
|
||||
}break;
|
||||
case CV_SymKind_LPROC32:
|
||||
case CV_SymKind_GPROC32:
|
||||
case CV_SymKind_LPROC32_ID:
|
||||
case CV_SymKind_GPROC32_ID: {
|
||||
case CV_SymKind_GPROC32_ID:
|
||||
{
|
||||
offset = sizeof(CV_SymProc32);
|
||||
} break;
|
||||
case CV_SymKind_REGREL32: {
|
||||
}break;
|
||||
case CV_SymKind_REGREL32:
|
||||
{
|
||||
offset = sizeof(CV_SymRegrel32);
|
||||
} break;
|
||||
}break;
|
||||
case CV_SymKind_LTHREAD32:
|
||||
case CV_SymKind_GTHREAD32: {
|
||||
case CV_SymKind_GTHREAD32:
|
||||
{
|
||||
offset = sizeof(CV_SymData32);
|
||||
} break;
|
||||
}break;
|
||||
case CV_SymKind_COMPILE2: break;
|
||||
case CV_SymKind_LOCALSLOT: {
|
||||
case CV_SymKind_LOCALSLOT:
|
||||
{
|
||||
offset = sizeof(CV_SymSlot);
|
||||
} break;
|
||||
}break;
|
||||
case CV_SymKind_PROCREF:
|
||||
case CV_SymKind_LPROCREF:
|
||||
case CV_SymKind_DATAREF: {
|
||||
case CV_SymKind_DATAREF:
|
||||
{
|
||||
offset = sizeof(CV_SymRef2);
|
||||
} break;
|
||||
}break;
|
||||
case CV_SymKind_TRAMPOLINE: break;
|
||||
case CV_SymKind_LOCAL: {
|
||||
case CV_SymKind_LOCAL:
|
||||
{
|
||||
offset = sizeof(CV_SymLocal);
|
||||
} break;
|
||||
default: InvalidPath;
|
||||
}break;
|
||||
}
|
||||
return offset;
|
||||
}
|
||||
|
||||
@@ -709,8 +709,7 @@ e_oplist_from_location(Arena *arena, RDI_Parsed *rdi, RDI_Location loc)
|
||||
ARCH_RegCode reg_code = arch_reg_code_from_rdi(arch, rdi_regcode);
|
||||
Rng1U16 reg_rng = arch_info->reg_code_rng_table[reg_code];
|
||||
U64 byte_size = (U64)dim_1u16(reg_rng);
|
||||
U64 byte_pos = reg_rng.min;
|
||||
e_oplist_push_op(arena, &result, RDI_EvalOp_RegRead, e_value_u64(RDI_EncodeRegReadParam(rdi_regcode, byte_size, byte_pos)));
|
||||
e_oplist_push_op(arena, &result, RDI_EvalOp_RegRead, e_value_u64(RDI_EncodeRegReadParam(rdi_regcode, byte_size, 0)));
|
||||
}break;
|
||||
|
||||
//- rjf: space offsets
|
||||
|
||||
@@ -1874,6 +1874,7 @@ e_push_irtree_and_type_from_expr(Arena *arena, E_IRTreeAndType *root_parent, E_I
|
||||
U64 ip_voff = e_base_ctx->thread_ip_voff;
|
||||
{
|
||||
mapped_location = rdi_location_from_location_voff(rdi, local->location, ip_voff);
|
||||
mapped_bytecode_mode = E_Mode_Null;
|
||||
if(mapped_location != 0)
|
||||
{
|
||||
got_location_block = 1;
|
||||
|
||||
@@ -3983,6 +3983,7 @@ txt_artifact_create(String8 key, B32 *cancel_signal, AC_Status *status_out, U64
|
||||
//- rjf: advance across many token candidates until we find the new line
|
||||
if(line_advance)
|
||||
{
|
||||
B32 found = 0;
|
||||
U64 scan_cand_chunk_idx = cand_chunk_idx;
|
||||
for(TokenEndpointCandidateChunkNode *n = cand_chunk_n; n != 0; n = n->next)
|
||||
{
|
||||
@@ -3990,6 +3991,7 @@ txt_artifact_create(String8 key, B32 *cancel_signal, AC_Status *status_out, U64
|
||||
{
|
||||
if(n->v[n_idx] >= active_token_end_off)
|
||||
{
|
||||
found = 1;
|
||||
cand_chunk_n = n;
|
||||
cand_chunk_idx = n_idx;
|
||||
goto dbl_break_find_candidate_in_next_line;
|
||||
@@ -3998,6 +4000,11 @@ txt_artifact_create(String8 key, B32 *cancel_signal, AC_Status *status_out, U64
|
||||
scan_cand_chunk_idx = 0;
|
||||
}
|
||||
dbl_break_find_candidate_in_next_line:;
|
||||
if(!found)
|
||||
{
|
||||
cand_chunk_n = 0;
|
||||
cand_chunk_idx = 0;
|
||||
}
|
||||
}
|
||||
|
||||
//- rjf: advance by token candidate
|
||||
|
||||
Reference in New Issue
Block a user