mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-06-13 07:32:23 -07:00
copyright year
This commit is contained in:
+1
-1
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2024 Epic Games Tools
|
||||
// Copyright (c) Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
#undef LAYER_COLOR
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2024 Epic Games Tools
|
||||
// Copyright (c) Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
#ifndef ASYNC_H
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2024 Epic Games Tools
|
||||
// Copyright (c) Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
////////////////////////////////
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2024 Epic Games Tools
|
||||
// Copyright (c) Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
#ifndef BASE_ARENA_H
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2024 Epic Games Tools
|
||||
// Copyright (c) Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
////////////////////////////////
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2024 Epic Games Tools
|
||||
// Copyright (c) Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
#ifndef BASE_COMMAND_LINE_H
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2024 Epic Games Tools
|
||||
// Copyright (c) Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
#ifndef BASE_CONTEXT_CRACKING_H
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2024 Epic Games Tools
|
||||
// Copyright (c) Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
////////////////////////////////
|
||||
@@ -523,7 +523,7 @@ date_time_from_unix_time(U64 unix_time)
|
||||
date.sec = (U32)unix_time % 60;
|
||||
date.min = (U32)(unix_time / 60) % 60;
|
||||
date.hour = (U32)(unix_time / 3600) % 24;
|
||||
|
||||
|
||||
for(;;)
|
||||
{
|
||||
for(date.month = 0; date.month < 12; ++date.month)
|
||||
@@ -564,7 +564,7 @@ date_time_from_unix_time(U64 unix_time)
|
||||
++date.year;
|
||||
}
|
||||
exit:;
|
||||
|
||||
|
||||
return date;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2024 Epic Games Tools
|
||||
// Copyright (c) Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
#ifndef BASE_CORE_H
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2024 Epic Games Tools
|
||||
// Copyright (c) Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
global U64 global_update_tick_idx = 0;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2024 Epic Games Tools
|
||||
// Copyright (c) Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
#ifndef BASE_ENTRY_POINT_H
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2024 Epic Games Tools
|
||||
// Copyright (c) Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
////////////////////////////////
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2024 Epic Games Tools
|
||||
// Copyright (c) Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
#ifndef BASE_INC_H
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2024 Epic Games Tools
|
||||
// Copyright (c) Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
////////////////////////////////
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2024 Epic Games Tools
|
||||
// Copyright (c) Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
#ifndef BASE_LOG_H
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2024 Epic Games Tools
|
||||
// Copyright (c) Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
internal void
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2024 Epic Games Tools
|
||||
// Copyright (c) Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
#ifndef BASE_MARKUP_H
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2024 Epic Games Tools
|
||||
// Copyright (c) Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
////////////////////////////////
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2024 Epic Games Tools
|
||||
// Copyright (c) Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
#ifndef BASE_MATH_H
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2024 Epic Games Tools
|
||||
// Copyright (c) Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
////////////////////////////////
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2024 Epic Games Tools
|
||||
// Copyright (c) Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
#ifndef BASE_META_H
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2024 Epic Games Tools
|
||||
// Copyright (c) Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
#if PROFILE_SPALL
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2024 Epic Games Tools
|
||||
// Copyright (c) Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
#ifndef BASE_PROFILE_H
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2024 Epic Games Tools
|
||||
// Copyright (c) Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
////////////////////////////////
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2024 Epic Games Tools
|
||||
// Copyright (c) Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
#ifndef BASE_STRINGS_H
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2024 Epic Games Tools
|
||||
// Copyright (c) Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
////////////////////////////////
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2024 Epic Games Tools
|
||||
// Copyright (c) Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
#ifndef BASE_THREAD_CONTEXT_H
|
||||
|
||||
+72
-72
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2024 Epic Games Tools
|
||||
// Copyright (c) Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
////////////////////////////////
|
||||
@@ -14,30 +14,30 @@ cv_arch_from_coff_machine(COFF_MachineType machine)
|
||||
CV_Arch arch = 0;
|
||||
switch(machine)
|
||||
{
|
||||
case COFF_MachineType_X64: arch = CV_Arch_X64; break;
|
||||
case COFF_MachineType_X86: arch = CV_Arch_8086; break;
|
||||
case COFF_MachineType_Am33: arch = CV_Arch_AM33; break;
|
||||
case COFF_MachineType_Arm: NotImplemented; break;
|
||||
case COFF_MachineType_Arm64: arch = CV_Arch_ARM64; break;
|
||||
case COFF_MachineType_ArmNt: arch = CV_Arch_ARMNT; break;
|
||||
case COFF_MachineType_Ebc: arch = CV_Arch_EBC; break;
|
||||
case COFF_MachineType_Ia64: arch = CV_Arch_IA64; break;
|
||||
case COFF_MachineType_M32R: arch = CV_Arch_M32R; break;
|
||||
case COFF_MachineType_Mips16: arch = CV_Arch_MIPS16; break;
|
||||
case COFF_MachineType_MipsFpu: NotImplemented; break;
|
||||
case COFF_MachineType_MipsFpu16: NotImplemented; break;
|
||||
case COFF_MachineType_PowerPc: NotImplemented; break;
|
||||
case COFF_MachineType_PowerPcFp: arch = CV_Arch_PPCFP; break;
|
||||
case COFF_MachineType_R4000: NotImplemented; break;
|
||||
case COFF_MachineType_RiscV32: NotImplemented; break;
|
||||
case COFF_MachineType_RiscV64: NotImplemented; break;
|
||||
case COFF_MachineType_RiscV128: NotImplemented; break;
|
||||
case COFF_MachineType_Sh3: arch = CV_Arch_SH3; break;
|
||||
case COFF_MachineType_Sh3Dsp: arch = CV_Arch_SH3DSP; break;
|
||||
case COFF_MachineType_Sh4: arch = CV_Arch_SH4; break;
|
||||
case COFF_MachineType_Sh5: NotImplemented; break;
|
||||
case COFF_MachineType_Thumb: arch = CV_Arch_THUMB; break;
|
||||
case COFF_MachineType_WceMipsV2: NotImplemented; break;
|
||||
case COFF_MachineType_X64: arch = CV_Arch_X64; break;
|
||||
case COFF_MachineType_X86: arch = CV_Arch_8086; break;
|
||||
case COFF_MachineType_Am33: arch = CV_Arch_AM33; break;
|
||||
case COFF_MachineType_Arm: NotImplemented; break;
|
||||
case COFF_MachineType_Arm64: arch = CV_Arch_ARM64; break;
|
||||
case COFF_MachineType_ArmNt: arch = CV_Arch_ARMNT; break;
|
||||
case COFF_MachineType_Ebc: arch = CV_Arch_EBC; break;
|
||||
case COFF_MachineType_Ia64: arch = CV_Arch_IA64; break;
|
||||
case COFF_MachineType_M32R: arch = CV_Arch_M32R; break;
|
||||
case COFF_MachineType_Mips16: arch = CV_Arch_MIPS16; break;
|
||||
case COFF_MachineType_MipsFpu: NotImplemented; break;
|
||||
case COFF_MachineType_MipsFpu16: NotImplemented; break;
|
||||
case COFF_MachineType_PowerPc: NotImplemented; break;
|
||||
case COFF_MachineType_PowerPcFp: arch = CV_Arch_PPCFP; break;
|
||||
case COFF_MachineType_R4000: NotImplemented; break;
|
||||
case COFF_MachineType_RiscV32: NotImplemented; break;
|
||||
case COFF_MachineType_RiscV64: NotImplemented; break;
|
||||
case COFF_MachineType_RiscV128: NotImplemented; break;
|
||||
case COFF_MachineType_Sh3: arch = CV_Arch_SH3; break;
|
||||
case COFF_MachineType_Sh3Dsp: arch = CV_Arch_SH3DSP; break;
|
||||
case COFF_MachineType_Sh4: arch = CV_Arch_SH4; break;
|
||||
case COFF_MachineType_Sh5: NotImplemented; break;
|
||||
case COFF_MachineType_Thumb: arch = CV_Arch_THUMB; break;
|
||||
case COFF_MachineType_WceMipsV2: NotImplemented; break;
|
||||
}
|
||||
return arch;
|
||||
}
|
||||
@@ -47,9 +47,9 @@ cv_size_from_reg(CV_Arch arch, CV_Reg reg)
|
||||
{
|
||||
switch(arch)
|
||||
{
|
||||
case CV_Arch_8086: return cv_size_from_reg_x86(reg);
|
||||
case CV_Arch_X64 : return cv_size_from_reg_x64(reg);
|
||||
default: NotImplemented;
|
||||
case CV_Arch_8086: return cv_size_from_reg_x86(reg);
|
||||
case CV_Arch_X64 : return cv_size_from_reg_x64(reg);
|
||||
default: NotImplemented;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@@ -59,9 +59,9 @@ cv_is_reg_sp(CV_Arch arch, CV_Reg reg)
|
||||
{
|
||||
switch(arch)
|
||||
{
|
||||
case CV_Arch_8086: return reg == CV_Regx86_ESP;
|
||||
case CV_Arch_X64: return reg == CV_Regx64_RSP;
|
||||
default: NotImplemented;
|
||||
case CV_Arch_8086: return reg == CV_Regx86_ESP;
|
||||
case CV_Arch_X64: return reg == CV_Regx64_RSP;
|
||||
default: NotImplemented;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@@ -84,7 +84,7 @@ cv_size_from_reg_x64(CV_Reg reg)
|
||||
switch(reg)
|
||||
{
|
||||
#define X(NAME, CODE, RDI_NAME, BYTE_POS, BYTE_SIZE) case CV_Regx64_##NAME: return BYTE_SIZE;
|
||||
CV_Reg_X64_XList(X)
|
||||
CV_Reg_X64_XList(X)
|
||||
#undef X
|
||||
}
|
||||
return 0;
|
||||
@@ -111,30 +111,30 @@ cv_decode_fp_reg(CV_Arch arch, CV_EncodedFramePtrReg encoded_reg)
|
||||
CV_Reg fp_reg = 0;
|
||||
switch (arch)
|
||||
{
|
||||
case CV_Arch_8086:
|
||||
{
|
||||
switch (encoded_reg)
|
||||
{
|
||||
case CV_EncodedFramePtrReg_None : break;
|
||||
case CV_EncodedFramePtrReg_StackPtr: AssertAlways(!"TODO: not tested, this is a guess");
|
||||
fp_reg = CV_Regx86_ESP; break;
|
||||
case CV_EncodedFramePtrReg_FramePtr: fp_reg = CV_Regx86_EBP; break;
|
||||
case CV_EncodedFramePtrReg_BasePtr : fp_reg = CV_Regx86_EBX; break;
|
||||
default: InvalidPath;
|
||||
}
|
||||
} break;
|
||||
case CV_Arch_X64:
|
||||
{
|
||||
switch (encoded_reg)
|
||||
{
|
||||
case CV_EncodedFramePtrReg_None : break;
|
||||
case CV_EncodedFramePtrReg_StackPtr: fp_reg = CV_Regx64_RSP; break;
|
||||
case CV_EncodedFramePtrReg_FramePtr: fp_reg = CV_Regx64_RBP; break;
|
||||
case CV_EncodedFramePtrReg_BasePtr : fp_reg = CV_Regx64_R13; break;
|
||||
default: InvalidPath;
|
||||
}
|
||||
} break;
|
||||
default: NotImplemented;
|
||||
case CV_Arch_8086:
|
||||
{
|
||||
switch (encoded_reg)
|
||||
{
|
||||
case CV_EncodedFramePtrReg_None : break;
|
||||
case CV_EncodedFramePtrReg_StackPtr: AssertAlways(!"TODO: not tested, this is a guess");
|
||||
fp_reg = CV_Regx86_ESP; break;
|
||||
case CV_EncodedFramePtrReg_FramePtr: fp_reg = CV_Regx86_EBP; break;
|
||||
case CV_EncodedFramePtrReg_BasePtr : fp_reg = CV_Regx86_EBX; break;
|
||||
default: InvalidPath;
|
||||
}
|
||||
} break;
|
||||
case CV_Arch_X64:
|
||||
{
|
||||
switch (encoded_reg)
|
||||
{
|
||||
case CV_EncodedFramePtrReg_None : break;
|
||||
case CV_EncodedFramePtrReg_StackPtr: fp_reg = CV_Regx64_RSP; break;
|
||||
case CV_EncodedFramePtrReg_FramePtr: fp_reg = CV_Regx64_RBP; break;
|
||||
case CV_EncodedFramePtrReg_BasePtr : fp_reg = CV_Regx64_R13; break;
|
||||
default: InvalidPath;
|
||||
}
|
||||
} break;
|
||||
default: NotImplemented;
|
||||
}
|
||||
return fp_reg;
|
||||
}
|
||||
@@ -144,22 +144,22 @@ cv_map_encoded_base_pointer(CV_Arch arch, U32 encoded_frame_reg)
|
||||
{
|
||||
U32 r = 0;
|
||||
switch (arch) {
|
||||
case CV_Arch_8086: {
|
||||
switch (encoded_frame_reg) {
|
||||
case 0: r = 0; break;
|
||||
case 1: r = CV_AllReg_VFRAME; break;
|
||||
case 2: r = CV_Regx86_EBP; break;
|
||||
case 3: r = CV_Regx86_EBX; break;
|
||||
}
|
||||
} break;
|
||||
case CV_Arch_X64: {
|
||||
switch (encoded_frame_reg) {
|
||||
case 0: r = 0; break;
|
||||
case 1: r = CV_Regx64_RSP; break;
|
||||
case 2: r = CV_Regx64_RBP; break;
|
||||
case 3: r = CV_Regx64_R13; break;
|
||||
}
|
||||
} break;
|
||||
case CV_Arch_8086: {
|
||||
switch (encoded_frame_reg) {
|
||||
case 0: r = 0; break;
|
||||
case 1: r = CV_AllReg_VFRAME; break;
|
||||
case 2: r = CV_Regx86_EBP; break;
|
||||
case 3: r = CV_Regx86_EBX; break;
|
||||
}
|
||||
} break;
|
||||
case CV_Arch_X64: {
|
||||
switch (encoded_frame_reg) {
|
||||
case 0: r = 0; break;
|
||||
case 1: r = CV_Regx64_RSP; break;
|
||||
case 2: r = CV_Regx64_RBP; break;
|
||||
case 3: r = CV_Regx64_R13; break;
|
||||
}
|
||||
} break;
|
||||
default: NotImplemented;
|
||||
}
|
||||
return r;
|
||||
|
||||
+995
-995
File diff suppressed because it is too large
Load Diff
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2024 Epic Games Tools
|
||||
// Copyright (c) Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
internal String8
|
||||
@@ -11,10 +11,10 @@ internal String8
|
||||
cv_string_from_type_index_source(CV_TypeIndexSource ti_source)
|
||||
{
|
||||
switch (ti_source) {
|
||||
case CV_TypeIndexSource_NULL: return str8_lit(""); break;
|
||||
case CV_TypeIndexSource_TPI: return str8_lit("TPI"); break;
|
||||
case CV_TypeIndexSource_IPI: return str8_lit("IPI"); break;
|
||||
case CV_TypeIndexSource_COUNT: break;
|
||||
case CV_TypeIndexSource_NULL: return str8_lit(""); break;
|
||||
case CV_TypeIndexSource_TPI: return str8_lit("TPI"); break;
|
||||
case CV_TypeIndexSource_IPI: return str8_lit("IPI"); break;
|
||||
case CV_TypeIndexSource_COUNT: break;
|
||||
}
|
||||
return str8_zero();
|
||||
}
|
||||
@@ -23,9 +23,9 @@ internal String8
|
||||
cv_string_from_language(CV_Language x)
|
||||
{
|
||||
switch (x) {
|
||||
#define X(_n,_i) case _i: return str8_lit(Stringify(_n));
|
||||
CV_LanguageXList(X)
|
||||
#undef X
|
||||
#define X(_n,_i) case _i: return str8_lit(Stringify(_n));
|
||||
CV_LanguageXList(X)
|
||||
#undef X
|
||||
}
|
||||
return str8_zero();
|
||||
}
|
||||
@@ -57,21 +57,21 @@ cv_string_from_reg_id(Arena *arena, CV_Arch arch, U32 id)
|
||||
{
|
||||
String8 result = str8_zero();
|
||||
switch (arch) {
|
||||
case CV_Arch_8086: {
|
||||
case CV_Arch_8086: {
|
||||
switch (id) {
|
||||
#define X(_N, _ID, ...) case _ID: result = str8_lit(Stringify(_N)); break;
|
||||
CV_Reg_X86_XList(X)
|
||||
#undef X
|
||||
#define X(_N, _ID, ...) case _ID: result = str8_lit(Stringify(_N)); break;
|
||||
CV_Reg_X86_XList(X)
|
||||
#undef X
|
||||
}
|
||||
} break;
|
||||
case CV_Arch_X64: {
|
||||
} break;
|
||||
case CV_Arch_X64: {
|
||||
switch (id) {
|
||||
#define X(_N, _ID, ...) case _ID: result = str8_lit(Stringify(_N)); break;
|
||||
CV_Reg_X64_XList(X)
|
||||
#undef X
|
||||
#define X(_N, _ID, ...) case _ID: result = str8_lit(Stringify(_N)); break;
|
||||
CV_Reg_X64_XList(X)
|
||||
#undef X
|
||||
}
|
||||
} break;
|
||||
default: NotImplemented; break;
|
||||
} break;
|
||||
default: NotImplemented; break;
|
||||
}
|
||||
if (result.size == 0) {
|
||||
result = push_str8f(arena, "%x", id);
|
||||
@@ -327,9 +327,9 @@ internal String8
|
||||
cv_string_from_c13_subsection_kind(CV_C13SubSectionKind x)
|
||||
{
|
||||
switch (x) {
|
||||
#define X(_N, _ID) case CV_C13SubSectionKind_##_N: return str8_lit(Stringify(_N));
|
||||
#define X(_N, _ID) case CV_C13SubSectionKind_##_N: return str8_lit(Stringify(_N));
|
||||
CV_C13SubSectionKindXList(X)
|
||||
#undef X
|
||||
#undef X
|
||||
}
|
||||
return str8_zero();
|
||||
}
|
||||
@@ -357,7 +357,7 @@ internal String8
|
||||
cv_string_from_pointer_attribs(Arena *arena, CV_PointerAttribs x)
|
||||
{
|
||||
Temp scratch = scratch_begin(&arena, 1);
|
||||
|
||||
|
||||
String8List list = {0};
|
||||
if (x & CV_PointerAttrib_IsFlat) {
|
||||
x &= ~CV_PointerAttrib_IsFlat;
|
||||
@@ -391,13 +391,13 @@ cv_string_from_pointer_attribs(Arena *arena, CV_PointerAttribs x)
|
||||
x &= ~CV_PointerAttrib_RRef;
|
||||
str8_list_pushf(scratch.arena, &list, "RRef");
|
||||
}
|
||||
|
||||
|
||||
CV_PointerKind kind = CV_PointerAttribs_Extract_Kind(x);
|
||||
CV_PointerMode mode = CV_PointerAttribs_Extract_Mode(x);
|
||||
U64 size = CV_PointerAttribs_Extract_Size(x);
|
||||
|
||||
|
||||
x &= ~(0x1f|(0x7<<5)|(0x3f<<13));
|
||||
|
||||
|
||||
if (kind) {
|
||||
String8 kind_str = cv_string_from_pointer_kind(kind);
|
||||
str8_list_pushf(scratch.arena, &list, "Kind=%S", kind_str);
|
||||
@@ -409,11 +409,11 @@ cv_string_from_pointer_attribs(Arena *arena, CV_PointerAttribs x)
|
||||
if (size) {
|
||||
str8_list_pushf(scratch.arena, &list, "Size=%llu", size);
|
||||
}
|
||||
|
||||
|
||||
if (x != 0) {
|
||||
str8_list_pushf(scratch.arena, &list, "Unknown=%x", x);
|
||||
}
|
||||
|
||||
|
||||
String8 result = str8_list_join(arena, &list, &(StringJoin){.sep=str8_lit(", ")});
|
||||
scratch_end(scratch);
|
||||
return result;
|
||||
@@ -591,13 +591,13 @@ internal String8
|
||||
cv_string_from_type_props(Arena *arena, CV_TypeProps32 x)
|
||||
{
|
||||
Temp scratch = scratch_begin(&arena, 1);
|
||||
|
||||
|
||||
U32 hfa = CV_TypeProps_Extract_HFA(x);
|
||||
U32 mcom = CV_TypeProps_Extract_MOCOM(x);
|
||||
|
||||
|
||||
String8 hfa_str = cv_string_from_hfa(hfa);
|
||||
String8 mcom_str = cv_string_from_mcom(mcom);
|
||||
|
||||
|
||||
String8 flags_str;
|
||||
{
|
||||
String8List list = {0};
|
||||
@@ -653,7 +653,7 @@ cv_string_from_type_props(Arena *arena, CV_TypeProps32 x)
|
||||
str8_list_pushf(scratch.arena, &list, "%x", x);
|
||||
}
|
||||
flags_str = str8_list_join(scratch.arena, &list, &(StringJoin){.sep=str8_lit(", ") });
|
||||
|
||||
|
||||
if (hfa) {
|
||||
str8_list_pushf(scratch.arena, &list, "HFA = %S", hfa_str);
|
||||
}
|
||||
@@ -663,7 +663,7 @@ cv_string_from_type_props(Arena *arena, CV_TypeProps32 x)
|
||||
}
|
||||
|
||||
String8 result = push_str8f(arena, "%S", flags_str);
|
||||
|
||||
|
||||
scratch_end(scratch);
|
||||
return result;
|
||||
}
|
||||
@@ -785,14 +785,14 @@ internal String8
|
||||
cv_string_from_field_attribs(Arena *arena, CV_FieldAttribs attribs)
|
||||
{
|
||||
Temp scratch = scratch_begin(&arena, 1);
|
||||
|
||||
|
||||
U32 access = CV_FieldAttribs_Extract_Access(attribs);
|
||||
U32 mprop = CV_FieldAttribs_Extract_MethodProp(attribs);
|
||||
attribs &= ~(0x3 | 0x7);
|
||||
|
||||
|
||||
String8 access_str = cv_string_from_member_access(access);
|
||||
String8 mprop_str = cv_string_from_method_prop(mprop);
|
||||
|
||||
|
||||
String8List list = {0};
|
||||
{
|
||||
if (attribs & CV_FieldAttrib_Pseudo) {
|
||||
@@ -819,16 +819,16 @@ cv_string_from_field_attribs(Arena *arena, CV_FieldAttribs attribs)
|
||||
str8_list_pushf(scratch.arena, &list, "Unknown: %x", attribs);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (access) {
|
||||
str8_list_pushf(scratch.arena, &list, "%S", access_str);
|
||||
}
|
||||
if (mprop) {
|
||||
str8_list_pushf(scratch.arena, &list, "%S", mprop_str);
|
||||
}
|
||||
|
||||
|
||||
String8 result = str8_list_join(scratch.arena, &list, &(StringJoin){.sep=str8_lit(", ")});
|
||||
|
||||
|
||||
scratch_end(scratch);
|
||||
return result;
|
||||
}
|
||||
@@ -841,7 +841,7 @@ cv_string_from_itype(Arena *arena, CV_TypeIndex min_itype, CV_TypeIndex itype)
|
||||
String8 n = cv_type_name_from_basic_type((CV_BasicType)itype);
|
||||
if (n.size) {
|
||||
Temp scratch = scratch_begin(&arena, 1);
|
||||
|
||||
|
||||
U64 type = CV_BasicTypeFromTypeId(itype);
|
||||
char *type_str = "???";
|
||||
switch (type) {
|
||||
@@ -899,7 +899,7 @@ cv_string_from_itype(Arena *arena, CV_TypeIndex min_itype, CV_TypeIndex itype)
|
||||
case CV_BasicType_CHAR8: type_str = "CHAR8"; break;
|
||||
case CV_BasicType_PTR: type_str = "PTR"; break;
|
||||
}
|
||||
|
||||
|
||||
U64 ptr = CV_BasicPointerKindFromTypeId(itype);
|
||||
char *ptr_str = "";
|
||||
switch (ptr) {
|
||||
@@ -910,7 +910,7 @@ cv_string_from_itype(Arena *arena, CV_TypeIndex min_itype, CV_TypeIndex itype)
|
||||
case 0x5: ptr_str = "32PF"; break;
|
||||
case 0x6: ptr_str = "64P"; break;
|
||||
}
|
||||
|
||||
|
||||
n = upper_from_str8(scratch.arena, n);
|
||||
result = push_str8f(arena, "T_%s%s(%x)", ptr_str, type_str, itype);
|
||||
scratch_end(scratch);
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2024 Epic Games Tools
|
||||
// Copyright (c) Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
#ifndef CODEVIEW_ENUM_H
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2024 Epic Games Tools
|
||||
// Copyright (c) Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
//- Hasher
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2024 Epic Games Tools
|
||||
// Copyright (c) Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
#ifndef CODEVIEW_PARSE_H
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2024 Epic Games Tools
|
||||
// Copyright (c) Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
//- GENERATED CODE
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2024 Epic Games Tools
|
||||
// Copyright (c) Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
//- GENERATED CODE
|
||||
|
||||
+27
-27
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2024 Epic Games Tools
|
||||
// Copyright (c) Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
internal U64
|
||||
@@ -32,20 +32,20 @@ coff_section_flag_from_align_size(U64 align)
|
||||
{
|
||||
COFF_SectionFlags flags = 0;
|
||||
switch (align) {
|
||||
case 1: flags = COFF_SectionAlign_1Bytes; break;
|
||||
case 2: flags = COFF_SectionAlign_2Bytes; break;
|
||||
case 4: flags = COFF_SectionAlign_4Bytes; break;
|
||||
case 8: flags = COFF_SectionAlign_8Bytes; break;
|
||||
case 16: flags = COFF_SectionAlign_16Bytes; break;
|
||||
case 32: flags = COFF_SectionAlign_32Bytes; break;
|
||||
case 64: flags = COFF_SectionAlign_64Bytes; break;
|
||||
case 128: flags = COFF_SectionAlign_128Bytes; break;
|
||||
case 256: flags = COFF_SectionAlign_256Bytes; break;
|
||||
case 512: flags = COFF_SectionAlign_512Bytes; break;
|
||||
case 1024: flags = COFF_SectionAlign_1024Bytes; break;
|
||||
case 2048: flags = COFF_SectionAlign_2048Bytes; break;
|
||||
case 4096: flags = COFF_SectionAlign_4096Bytes; break;
|
||||
case 8192: flags = COFF_SectionAlign_8192Bytes; break;
|
||||
case 1: flags = COFF_SectionAlign_1Bytes; break;
|
||||
case 2: flags = COFF_SectionAlign_2Bytes; break;
|
||||
case 4: flags = COFF_SectionAlign_4Bytes; break;
|
||||
case 8: flags = COFF_SectionAlign_8Bytes; break;
|
||||
case 16: flags = COFF_SectionAlign_16Bytes; break;
|
||||
case 32: flags = COFF_SectionAlign_32Bytes; break;
|
||||
case 64: flags = COFF_SectionAlign_64Bytes; break;
|
||||
case 128: flags = COFF_SectionAlign_128Bytes; break;
|
||||
case 256: flags = COFF_SectionAlign_256Bytes; break;
|
||||
case 512: flags = COFF_SectionAlign_512Bytes; break;
|
||||
case 1024: flags = COFF_SectionAlign_1024Bytes; break;
|
||||
case 2048: flags = COFF_SectionAlign_2048Bytes; break;
|
||||
case 4096: flags = COFF_SectionAlign_4096Bytes; break;
|
||||
case 8192: flags = COFF_SectionAlign_8192Bytes; break;
|
||||
}
|
||||
flags <<= COFF_SectionFlag_AlignShift;
|
||||
return flags;
|
||||
@@ -127,12 +127,12 @@ coff_apply_size_from_reloc_x64(COFF_Reloc_X64 x)
|
||||
case COFF_Reloc_X64_Section: return 2;
|
||||
case COFF_Reloc_X64_SecRel: return 4;
|
||||
case COFF_Reloc_X64_SRel32: return 4;
|
||||
|
||||
|
||||
case COFF_Reloc_X64_SecRel7:
|
||||
case COFF_Reloc_X64_Token:
|
||||
case COFF_Reloc_X64_Pair:
|
||||
case COFF_Reloc_X64_SSpan32:
|
||||
NotImplemented;
|
||||
NotImplemented;
|
||||
break;
|
||||
}
|
||||
return 0;
|
||||
@@ -153,7 +153,7 @@ coff_apply_size_from_reloc_x86(COFF_Reloc_X86 x)
|
||||
case COFF_Reloc_X86_Token: return 4;
|
||||
case COFF_Reloc_X86_SecRel7: return 1;
|
||||
case COFF_Reloc_X86_Rel32: return 4;
|
||||
|
||||
|
||||
case COFF_Reloc_X86_Unknown0:
|
||||
case COFF_Reloc_X86_Unknown2:
|
||||
case COFF_Reloc_X86_Unknown3:
|
||||
@@ -162,7 +162,7 @@ coff_apply_size_from_reloc_x86(COFF_Reloc_X86 x)
|
||||
case COFF_Reloc_X86_Unknown7:
|
||||
case COFF_Reloc_X86_Unknown8:
|
||||
case COFF_Reloc_X86_Unknown9:
|
||||
NotImplemented;
|
||||
NotImplemented;
|
||||
break;
|
||||
}
|
||||
return 0;
|
||||
@@ -217,7 +217,7 @@ coff_make_import_header_by_name(Arena *arena,
|
||||
COFF_ImportHeaderFlags flags = 0;
|
||||
flags |= (type & COFF_ImportHeader_TypeMask) << COFF_ImportHeader_TypeShift;
|
||||
flags |= COFF_ImportBy_Name << COFF_ImportHeader_ImportByShift;
|
||||
|
||||
|
||||
COFF_ImportHeader header = {0};
|
||||
header.sig1 = COFF_MachineType_Unknown;
|
||||
header.sig2 = max_U16;
|
||||
@@ -260,7 +260,7 @@ coff_make_import_header_by_ordinal(Arena *arena,
|
||||
COFF_ImportHeaderFlags flags = 0;
|
||||
flags |= (type & COFF_ImportHeader_TypeMask) << COFF_ImportHeader_TypeShift;
|
||||
flags |= COFF_ImportBy_Ordinal << COFF_ImportHeader_ImportByShift;
|
||||
|
||||
|
||||
COFF_ImportHeader header = {0};
|
||||
header.sig1 = COFF_MachineType_Unknown;
|
||||
header.sig2 = max_U16;
|
||||
@@ -296,8 +296,8 @@ coff_word_size_from_machine(COFF_MachineType machine)
|
||||
{
|
||||
U64 result = 0;
|
||||
switch (machine) {
|
||||
case COFF_MachineType_X64: result = 8; break;
|
||||
case COFF_MachineType_X86: result = 4; break;
|
||||
case COFF_MachineType_X64: result = 8; break;
|
||||
case COFF_MachineType_X86: result = 4; break;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
@@ -307,8 +307,8 @@ coff_default_exe_base_from_machine(COFF_MachineType machine)
|
||||
{
|
||||
U64 exe_base = 0;
|
||||
switch (coff_word_size_from_machine(machine)) {
|
||||
case 4: exe_base = 0x400000; break;
|
||||
case 8: exe_base = 0x140000000; break;
|
||||
case 4: exe_base = 0x400000; break;
|
||||
case 8: exe_base = 0x140000000; break;
|
||||
}
|
||||
return exe_base;
|
||||
}
|
||||
@@ -318,8 +318,8 @@ coff_default_dll_base_from_machine(COFF_MachineType machine)
|
||||
{
|
||||
U64 dll_base = 0;
|
||||
switch (coff_word_size_from_machine(machine)) {
|
||||
case 4: dll_base = 0x10000000; break;
|
||||
case 8: dll_base = 0x180000000; break;
|
||||
case 4: dll_base = 0x10000000; break;
|
||||
case 8: dll_base = 0x180000000; break;
|
||||
}
|
||||
return dll_base;
|
||||
}
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2024 Epic Games Tools
|
||||
// Copyright (c) Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
#ifndef COFF_H
|
||||
|
||||
+16
-16
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2024 Epic Games Tools
|
||||
// Copyright (c) Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
internal String8
|
||||
@@ -62,13 +62,13 @@ coff_string_from_comdat_select_type(COFF_ComdatSelectType type)
|
||||
{
|
||||
String8 result = str8_zero();
|
||||
switch (type) {
|
||||
case COFF_ComdatSelect_Null: result = str8_lit("Null"); break;
|
||||
case COFF_ComdatSelect_NoDuplicates: result = str8_lit("NoDuplicates"); break;
|
||||
case COFF_ComdatSelect_Any: result = str8_lit("Any"); break;
|
||||
case COFF_ComdatSelect_SameSize: result = str8_lit("SameSize"); break;
|
||||
case COFF_ComdatSelect_ExactMatch: result = str8_lit("ExactMatch"); break;
|
||||
case COFF_ComdatSelect_Associative: result = str8_lit("Associative"); break;
|
||||
case COFF_ComdatSelect_Largest: result = str8_lit("Largest"); break;
|
||||
case COFF_ComdatSelect_Null: result = str8_lit("Null"); break;
|
||||
case COFF_ComdatSelect_NoDuplicates: result = str8_lit("NoDuplicates"); break;
|
||||
case COFF_ComdatSelect_Any: result = str8_lit("Any"); break;
|
||||
case COFF_ComdatSelect_SameSize: result = str8_lit("SameSize"); break;
|
||||
case COFF_ComdatSelect_ExactMatch: result = str8_lit("ExactMatch"); break;
|
||||
case COFF_ComdatSelect_Associative: result = str8_lit("Associative"); break;
|
||||
case COFF_ComdatSelect_Largest: result = str8_lit("Largest"); break;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
@@ -89,7 +89,7 @@ coff_string_from_flags(Arena *arena, COFF_FileHeaderFlags flags)
|
||||
{
|
||||
Temp scratch = scratch_begin(&arena, 1);
|
||||
String8List list = {0};
|
||||
|
||||
|
||||
if (flags & COFF_FileHeaderFlag_RelocStripped) {
|
||||
str8_list_pushf(scratch.arena, &list, "Relocs Stripped");
|
||||
}
|
||||
@@ -126,9 +126,9 @@ coff_string_from_flags(Arena *arena, COFF_FileHeaderFlags flags)
|
||||
if (flags & COFF_FileHeaderFlag_UpSystemOnly) {
|
||||
str8_list_pushf(scratch.arena, &list, "Up System Only");
|
||||
}
|
||||
|
||||
|
||||
String8 result = str8_list_join(arena, &list, &(StringJoin){.sep=str8_lit(", ")});
|
||||
|
||||
|
||||
scratch_end(scratch);
|
||||
return result;
|
||||
}
|
||||
@@ -201,7 +201,7 @@ coff_string_from_section_flags(Arena *arena, COFF_SectionFlags flags)
|
||||
if (align) {
|
||||
str8_list_pushf(scratch.arena, &list, "Align=%u", align);
|
||||
}
|
||||
|
||||
|
||||
if (!list.node_count) {
|
||||
str8_list_pushf(scratch.arena, &list, "None");
|
||||
}
|
||||
@@ -218,9 +218,9 @@ internal String8
|
||||
coff_string_from_resource_memory_flags(Arena *arena, COFF_ResourceMemoryFlags flags)
|
||||
{
|
||||
Temp scratch = scratch_begin(&arena, 1);
|
||||
|
||||
|
||||
String8List list = {0};
|
||||
|
||||
|
||||
if (flags & COFF_ResourceMemoryFlag_Moveable) {
|
||||
flags &= COFF_ResourceMemoryFlag_Moveable;
|
||||
str8_list_pushf(scratch.arena, &list, "Moveable");
|
||||
@@ -236,9 +236,9 @@ coff_string_from_resource_memory_flags(Arena *arena, COFF_ResourceMemoryFlags fl
|
||||
if (flags != 0) {
|
||||
str8_list_pushf(scratch.arena, &list, "%#x", flags);
|
||||
}
|
||||
|
||||
|
||||
String8 result = str8_list_join(arena, &list, &(StringJoin){.sep=str8_lit(", ")});
|
||||
|
||||
|
||||
scratch_end(scratch);
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2024 Epic Games Tools
|
||||
// Copyright (c) Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
#ifndef COFF_ENUM_H
|
||||
|
||||
+61
-61
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2024 Epic Games Tools
|
||||
// Copyright (c) Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
internal B32
|
||||
@@ -8,9 +8,9 @@ coff_is_big_obj(String8 raw_coff)
|
||||
if (raw_coff.size >= sizeof(COFF_BigObjHeader)) {
|
||||
COFF_BigObjHeader *file_header32 = (COFF_BigObjHeader*)(raw_coff.str);
|
||||
is_big_obj = file_header32->sig1 == COFF_MachineType_Unknown &&
|
||||
file_header32->sig2 == max_U16 &&
|
||||
file_header32->version >= 2 &&
|
||||
MemoryCompare(file_header32->magic, g_coff_big_header_magic, sizeof(file_header32->magic)) == 0;
|
||||
file_header32->sig2 == max_U16 &&
|
||||
file_header32->version >= 2 &&
|
||||
MemoryCompare(file_header32->magic, g_coff_big_header_magic, sizeof(file_header32->magic)) == 0;
|
||||
}
|
||||
return is_big_obj;
|
||||
}
|
||||
@@ -163,11 +163,11 @@ coff_symbol_array_from_data_16(Arena *arena, String8 raw_coff, U64 symbol_array_
|
||||
Rng1U64 sym16_arr_range = rng_1u64(symbol_array_off, symbol_array_off + sizeof(COFF_Symbol16) * symbol_count);
|
||||
String8 raw_sym16_arr = str8_substr(raw_coff, sym16_arr_range);
|
||||
COFF_Symbol16 *sym16_arr = (COFF_Symbol16 *)raw_sym16_arr.str;
|
||||
|
||||
|
||||
for (U64 isymbol = 0, count = raw_sym16_arr.size / sizeof(COFF_Symbol16); isymbol < count; isymbol += 1) {
|
||||
COFF_Symbol16 *sym16 = &sym16_arr[isymbol];
|
||||
COFF_Symbol32 *sym32 = &result.v[isymbol];
|
||||
|
||||
|
||||
sym32->name = sym16->name;
|
||||
sym32->value = sym16->value;
|
||||
if (sym16->section_number == COFF_Symbol_DebugSection16) {
|
||||
@@ -185,7 +185,7 @@ coff_symbol_array_from_data_16(Arena *arena, String8 raw_coff, U64 symbol_array_
|
||||
for (U64 iaux = isymbol+1, iaux_hi = Min(count, iaux+sym16->aux_symbol_count); iaux < iaux_hi; iaux += 1) {
|
||||
COFF_Symbol16 *aux16 = sym16_arr + iaux;
|
||||
COFF_Symbol32 *aux32 = result.v + iaux;
|
||||
|
||||
|
||||
// 32bit COFF uses 16bit aux symbols
|
||||
MemoryCopy(aux32, aux16, sizeof(COFF_Symbol16));
|
||||
MemoryZero((U8 *)aux32 + sizeof(COFF_Symbol16), sizeof(COFF_Symbol32)-sizeof(COFF_Symbol16));
|
||||
@@ -286,11 +286,11 @@ coff_resource_string_from_str16(Arena *arena, String16 string)
|
||||
{
|
||||
AssertAlways(string.size <= max_U16);
|
||||
U16 size16 = (U16)string.size;
|
||||
|
||||
|
||||
U16 *buffer = push_array_no_zero(arena, U16, size16 + 1);
|
||||
MemoryCopy(buffer + 0, &size16, sizeof(size16));
|
||||
MemoryCopy(buffer + 1, string.str, size16 * sizeof(string.str[0]));
|
||||
|
||||
|
||||
return str8_array(buffer, size16 + 1);
|
||||
}
|
||||
|
||||
@@ -358,14 +358,14 @@ coff_read_resource(Arena *arena, String8 raw_res, U64 off, COFF_ParsedResource *
|
||||
{
|
||||
String8 raw_header = str8_skip(raw_res, off);
|
||||
U64 header_cursor = 0;
|
||||
|
||||
|
||||
// prefix
|
||||
COFF_ResourceHeaderPrefix prefix = {0};
|
||||
header_cursor += str8_deserial_read_struct(raw_header, header_cursor, &prefix);
|
||||
|
||||
|
||||
Assert(prefix.header_size >= sizeof(COFF_ResourceHeaderPrefix));
|
||||
raw_header = str8_prefix(raw_header, prefix.header_size);
|
||||
|
||||
|
||||
// header
|
||||
COFF_ResourceID16 type_16 = {0};
|
||||
COFF_ResourceID16 name_16 = {0};
|
||||
@@ -377,11 +377,11 @@ coff_read_resource(Arena *arena, String8 raw_res, U64 off, COFF_ParsedResource *
|
||||
header_cursor += str8_deserial_read_struct(raw_header, header_cursor, &res_out->version);
|
||||
header_cursor += str8_deserial_read_struct(raw_header, header_cursor, &res_out->characteristics);
|
||||
Assert(prefix.header_size == header_cursor);
|
||||
|
||||
|
||||
// convert utf-16 resource ids to utf-8
|
||||
res_out->type = coff_utf8_resource_id_from_utf16(arena, &type_16);
|
||||
res_out->name = coff_utf8_resource_id_from_utf16(arena, &name_16);
|
||||
|
||||
|
||||
// read data
|
||||
U64 data_read_size = str8_deserial_read_block(raw_res, off + prefix.header_size, prefix.data_size, &res_out->data);
|
||||
Assert(prefix.data_size == data_read_size);
|
||||
@@ -411,14 +411,14 @@ coff_write_resource_id(Arena *arena, COFF_ResourceID id)
|
||||
{
|
||||
String8 result = str8_zero();
|
||||
switch (id.type) {
|
||||
case COFF_ResourceIDType_Null: break;
|
||||
case COFF_ResourceIDType_Number: {
|
||||
result = coff_resource_number_from_u16(arena, id.u.number);
|
||||
} break;
|
||||
case COFF_ResourceIDType_String: {
|
||||
result = coff_resource_string_from_str8(arena, id.u.string);
|
||||
} break;
|
||||
default: InvalidPath;
|
||||
case COFF_ResourceIDType_Null: break;
|
||||
case COFF_ResourceIDType_Number: {
|
||||
result = coff_resource_number_from_u16(arena, id.u.number);
|
||||
} break;
|
||||
case COFF_ResourceIDType_String: {
|
||||
result = coff_resource_string_from_str8(arena, id.u.string);
|
||||
} break;
|
||||
default: InvalidPath;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
@@ -435,13 +435,13 @@ coff_write_resource(Arena *arena,
|
||||
String8 data)
|
||||
{
|
||||
Temp scratch = scratch_begin(&arena, 1);
|
||||
|
||||
|
||||
String8List list = {0};
|
||||
|
||||
|
||||
COFF_ResourceHeaderPrefix *prefix = push_array(scratch.arena, COFF_ResourceHeaderPrefix, 1);
|
||||
String8 packed_type = coff_write_resource_id(scratch.arena, type);
|
||||
String8 packed_name = coff_write_resource_id(scratch.arena, name);
|
||||
|
||||
|
||||
// prefix + header
|
||||
str8_list_push(scratch.arena, &list, str8_struct(prefix));
|
||||
str8_list_push(scratch.arena, &list, packed_type);
|
||||
@@ -451,24 +451,24 @@ coff_write_resource(Arena *arena,
|
||||
str8_list_push(scratch.arena, &list, str8_struct(&language_id));
|
||||
str8_list_push(scratch.arena, &list, str8_struct(&version));
|
||||
str8_list_push(scratch.arena, &list, str8_struct(&characteristics));
|
||||
|
||||
|
||||
prefix->data_size = safe_cast_u32(data.size);
|
||||
prefix->header_size = safe_cast_u32(list.total_size);
|
||||
|
||||
|
||||
// data
|
||||
str8_list_push(scratch.arena, &list, data);
|
||||
|
||||
|
||||
// magic
|
||||
str8_list_push_front(scratch.arena, &list, str8_array_fixed(g_coff_res_magic));
|
||||
|
||||
|
||||
// align
|
||||
U64 align_size = AlignPow2(list.total_size, COFF_ResourceAlign) - list.total_size;
|
||||
U8 *align = push_array(scratch.arena, U8, align_size);
|
||||
str8_list_push(scratch.arena, &list, str8(align, align_size));
|
||||
|
||||
|
||||
// join
|
||||
String8 res = str8_list_join(arena, &list, 0);
|
||||
|
||||
|
||||
scratch_end(scratch);
|
||||
return res;
|
||||
}
|
||||
@@ -481,10 +481,10 @@ coff_resource_id_compar(void *raw_a, void *raw_b)
|
||||
COFF_ResourceID *b = raw_b;
|
||||
if (a->type == b->type) {
|
||||
switch (a->type) {
|
||||
default:
|
||||
case COFF_ResourceIDType_Null: cmp = 0; break;
|
||||
case COFF_ResourceIDType_Number: cmp = MemoryCompare(&a->u.number, &b->u.number, sizeof(a->u.number)); break;
|
||||
case COFF_ResourceIDType_String: cmp = strncmp((char *)a->u.string.str, (char *)b->u.string.str, Min(a->u.string.size, b->u.string.size)); break;
|
||||
default:
|
||||
case COFF_ResourceIDType_Null: cmp = 0; break;
|
||||
case COFF_ResourceIDType_Number: cmp = MemoryCompare(&a->u.number, &b->u.number, sizeof(a->u.number)); break;
|
||||
case COFF_ResourceIDType_String: cmp = strncmp((char *)a->u.string.str, (char *)b->u.string.str, Min(a->u.string.size, b->u.string.size)); break;
|
||||
}
|
||||
} else {
|
||||
cmp = a->type < b->type ? -1 : a->type > b->type ? +1 : 0;
|
||||
@@ -563,10 +563,10 @@ coff_parse_archive_member_header(String8 raw_archive, U64 offset, COFF_ParsedArc
|
||||
String8 mode = str8_skip_chop_whitespace(str8_cstring_capped(header->mode, header->mode + sizeof(header->mode) ));
|
||||
String8 size = str8_skip_chop_whitespace(str8_cstring_capped(header->size, header->size + sizeof(header->size) ));
|
||||
String8 end = str8_cstring_capped(header->end, header->end + sizeof(header->end));
|
||||
|
||||
|
||||
U32 data_size = u32_from_str8(size, 10);
|
||||
U64 data_off = offset + sizeof(COFF_ArchiveMemberHeader);
|
||||
|
||||
|
||||
header_out->name = name;
|
||||
header_out->time_stamp = u32_from_str8(date, 10);
|
||||
header_out->user_id = u32_from_str8(user_id, 10);
|
||||
@@ -574,7 +574,7 @@ coff_parse_archive_member_header(String8 raw_archive, U64 offset, COFF_ParsedArc
|
||||
header_out->mode = mode;
|
||||
header_out->is_end_correct = str8_match_lit("`\n", end, 0);
|
||||
header_out->data_range = rng_1u64(data_off, data_off + data_size);
|
||||
|
||||
|
||||
return sizeof(*header);
|
||||
}
|
||||
return 0;
|
||||
@@ -584,7 +584,7 @@ internal COFF_ArchiveFirstMember
|
||||
coff_parse_first_archive_member(COFF_ArchiveMember *member)
|
||||
{
|
||||
Assert(str8_match_lit("/", member->header.name, 0));
|
||||
|
||||
|
||||
U64 cursor = 0;
|
||||
|
||||
U32 symbol_count = 0;
|
||||
@@ -597,17 +597,17 @@ coff_parse_first_archive_member(COFF_ArchiveMember *member)
|
||||
|
||||
Rng1U64 string_table_range = rng_1u64(cursor, member->data.size);
|
||||
cursor += dim_1u64(string_table_range);
|
||||
|
||||
|
||||
String8 raw_member_offsets = str8_substr(member->data, member_offsets_range);
|
||||
U32 *member_offsets = (U32 *)raw_member_offsets.str;
|
||||
U64 member_offset_count = raw_member_offsets.size / sizeof(member_offsets[0]);
|
||||
|
||||
|
||||
COFF_ArchiveFirstMember result = {0};
|
||||
result.symbol_count = symbol_count;
|
||||
result.member_offset_count = member_offset_count;
|
||||
result.member_offsets = member_offsets;
|
||||
result.string_table = str8_substr(member->data, string_table_range);
|
||||
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -615,7 +615,7 @@ internal COFF_ArchiveSecondMember
|
||||
coff_parse_second_archive_member(COFF_ArchiveMember *member)
|
||||
{
|
||||
COFF_ArchiveSecondMember result = {0};
|
||||
|
||||
|
||||
if (str8_match_lit("/", member->header.name, 0)) {
|
||||
U64 cursor = 0;
|
||||
|
||||
@@ -632,13 +632,13 @@ coff_parse_second_archive_member(COFF_ArchiveMember *member)
|
||||
cursor += dim_1u64(symbol_indices_range);
|
||||
|
||||
Rng1U64 string_table_range = rng_1u64(cursor, member->data.size);
|
||||
|
||||
|
||||
String8 raw_member_offsets = str8_substr(member->data, member_offsets_range);
|
||||
String8 raw_indices = str8_substr(member->data, symbol_indices_range);
|
||||
|
||||
|
||||
U32 *member_offsets = (U32 *)raw_member_offsets.str;
|
||||
U64 member_offset_count = raw_member_offsets.size / sizeof(member_offsets[0]);
|
||||
|
||||
|
||||
U16 *symbol_indices = (U16 *)raw_indices.str;
|
||||
U64 symbol_index_count = raw_indices.size / sizeof(symbol_indices[0]);
|
||||
|
||||
@@ -650,7 +650,7 @@ coff_parse_second_archive_member(COFF_ArchiveMember *member)
|
||||
result.symbol_index_count = symbol_index_count;
|
||||
result.string_table = str8_substr(member->data, string_table_range);
|
||||
}
|
||||
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -683,7 +683,7 @@ coff_parse_import(String8 raw_archive_member, U64 offset, COFF_ParsedArchiveImpo
|
||||
Rng1U64 data_range = rng_1u64(offset + sizeof(*header), offset + sizeof(*header) + header->data_size);
|
||||
String8 raw_data = str8_substr(raw_archive_member, data_range);
|
||||
U64 data_cursor = 0;
|
||||
|
||||
|
||||
header_out->version = header->version;
|
||||
header_out->machine = header->machine;
|
||||
header_out->time_stamp = header->time_stamp;
|
||||
@@ -744,7 +744,7 @@ coff_regular_archive_member_iter_next(String8 raw_archive, U64 *offset, COFF_Arc
|
||||
if (member_out->header.is_end_correct) {
|
||||
member_out->offset = *offset;
|
||||
member_out->data = str8_substr(raw_archive, member_out->header.data_range);
|
||||
|
||||
|
||||
U64 read_size = AlignPow2(header_size + dim_1u64(member_out->header.data_range), COFF_Archive_MemberAlign);
|
||||
*offset += read_size;
|
||||
|
||||
@@ -771,19 +771,19 @@ coff_thin_archive_member_iter_next(String8 raw_archive, U64 *offset, COFF_Archiv
|
||||
|
||||
member_out->header.is_end_correct = 0;
|
||||
U64 header_size = coff_parse_archive_member_header(raw_archive, *offset, &member_out->header);
|
||||
|
||||
|
||||
if (member_out->header.is_end_correct) {
|
||||
Rng1U64 data_in_archive_range = {0};
|
||||
if (str8_match_lit("/", member_out->header.name, 0) || str8_match_lit("//", member_out->header.name, 0)) {
|
||||
data_in_archive_range = member_out->header.data_range;
|
||||
}
|
||||
|
||||
|
||||
member_out->offset = *offset;
|
||||
member_out->data = str8_substr(raw_archive, data_in_archive_range);
|
||||
|
||||
|
||||
U64 read_size = AlignPow2(header_size + dim_1u64(data_in_archive_range), COFF_Archive_MemberAlign);
|
||||
*offset += read_size;
|
||||
|
||||
|
||||
is_parsed = 1;
|
||||
}
|
||||
|
||||
@@ -806,9 +806,9 @@ coff_archive_parse_from_member_list(COFF_ArchiveMemberList member_list)
|
||||
COFF_ArchiveMember first_header = {0};
|
||||
COFF_ArchiveMember second_header = {0};
|
||||
COFF_ArchiveMember long_names_member = {0};
|
||||
|
||||
|
||||
COFF_ArchiveMemberNode *ptr = member_list.first;
|
||||
|
||||
|
||||
if (ptr) {
|
||||
if (str8_match_lit("/", ptr->data.header.name, 0)) {
|
||||
if (ptr->data.header.is_end_correct) {
|
||||
@@ -821,7 +821,7 @@ coff_archive_parse_from_member_list(COFF_ArchiveMemberList member_list)
|
||||
} else {
|
||||
error = str8_lit("missing first header");
|
||||
}
|
||||
|
||||
|
||||
if (!error.size && ptr) {
|
||||
if (str8_match_lit("/", ptr->data.header.name, 0)) {
|
||||
if (ptr->data.header.is_end_correct) {
|
||||
@@ -833,7 +833,7 @@ coff_archive_parse_from_member_list(COFF_ArchiveMemberList member_list)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (!error.size && ptr) {
|
||||
if (str8_match_lit("//", ptr->data.header.name, 0)) {
|
||||
if (ptr->data.header.is_end_correct) {
|
||||
@@ -853,7 +853,7 @@ coff_archive_parse_from_member_list(COFF_ArchiveMemberList member_list)
|
||||
parse.second_member = coff_parse_second_archive_member(&second_header);
|
||||
parse.long_names = long_names_member.data;
|
||||
parse.error = error;
|
||||
|
||||
|
||||
return parse;
|
||||
}
|
||||
|
||||
@@ -894,9 +894,9 @@ coff_archive_parse_from_data(String8 raw_archive)
|
||||
{
|
||||
COFF_ArchiveType type = coff_archive_type_from_data(raw_archive);
|
||||
switch (type) {
|
||||
case COFF_Archive_Null: break;
|
||||
case COFF_Archive_Regular: return coff_regular_archive_parse_from_data(raw_archive);
|
||||
case COFF_Archive_Thin: return coff_thin_archive_parse_from_data(raw_archive);
|
||||
case COFF_Archive_Null: break;
|
||||
case COFF_Archive_Regular: return coff_regular_archive_parse_from_data(raw_archive);
|
||||
case COFF_Archive_Thin: return coff_thin_archive_parse_from_data(raw_archive);
|
||||
}
|
||||
COFF_ArchiveParse null_parse = {0};
|
||||
return null_parse;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2024 Epic Games Tools
|
||||
// Copyright (c) Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
#ifndef COFF_PARSE_H
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2024 Epic Games Tools
|
||||
// Copyright (c) Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
////////////////////////////////
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2024 Epic Games Tools
|
||||
// Copyright (c) Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
////////////////////////////////
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2024 Epic Games Tools
|
||||
// Copyright (c) Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
#ifndef CTRL_CORE_H
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2024 Epic Games Tools
|
||||
// Copyright (c) Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
#undef LAYER_COLOR
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2024 Epic Games Tools
|
||||
// Copyright (c) Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
#ifndef CTRL_INC_H
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2024 Epic Games Tools
|
||||
// Copyright (c) Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
//- GENERATED CODE
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2024 Epic Games Tools
|
||||
// Copyright (c) Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
//- GENERATED CODE
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2024 Epic Games Tools
|
||||
// Copyright (c) Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
#undef LAYER_COLOR
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2024 Epic Games Tools
|
||||
// Copyright (c) Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
#ifndef DASM_CACHE_H
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2024 Epic Games Tools
|
||||
// Copyright (c) Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
////////////////////////////////
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2024 Epic Games Tools
|
||||
// Copyright (c) Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
#undef LAYER_COLOR
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2024 Epic Games Tools
|
||||
// Copyright (c) Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
#ifndef DBG_ENGINE_CORE_H
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2024 Epic Games Tools
|
||||
// Copyright (c) Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
#include "dbg_engine_core.c"
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2024 Epic Games Tools
|
||||
// Copyright (c) Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
#ifndef DBG_ENGINE_INC_H
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2024 Epic Games Tools
|
||||
// Copyright (c) Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
//- GENERATED CODE
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2024 Epic Games Tools
|
||||
// Copyright (c) Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
//- GENERATED CODE
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2024 Epic Games Tools
|
||||
// Copyright (c) Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
#undef LAYER_COLOR
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2024 Epic Games Tools
|
||||
// Copyright (c) Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
#ifndef DBGI_H
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2024 Epic Games Tools
|
||||
// Copyright (c) Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
////////////////////////////////
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2024 Epic Games Tools
|
||||
// Copyright (c) Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
#ifndef DEMON_CORE_H
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2024 Epic Games Tools
|
||||
// Copyright (c) Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
#include "demon/demon_core.c"
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2024 Epic Games Tools
|
||||
// Copyright (c) Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
#ifndef DEMON_INC_H
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2024 Epic Games Tools
|
||||
// Copyright (c) Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
//- GENERATED CODE
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2024 Epic Games Tools
|
||||
// Copyright (c) Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
//- GENERATED CODE
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2024 Epic Games Tools
|
||||
// Copyright (c) Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
////////////////////////////////
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2024 Epic Games Tools
|
||||
// Copyright (c) Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
#ifndef DEMON_CORE_LINUX_H
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2024 Epic Games Tools
|
||||
// Copyright (c) Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
// TODO(allen): run controls: ignore_previous_exception
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2024 Epic Games Tools
|
||||
// Copyright (c) Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
#ifndef DEMON_OS_LINUX_H
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2024 Epic Games Tools
|
||||
// Copyright (c) Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
////////////////////////////////
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2024 Epic Games Tools
|
||||
// Copyright (c) Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
#ifndef DEMON_CORE_WIN32_H
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2024 Epic Games Tools
|
||||
// Copyright (c) Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
////////////////////////////////
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2024 Epic Games Tools
|
||||
// Copyright (c) Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
#ifndef DRAW_H
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2024 Epic Games Tools
|
||||
// Copyright (c) Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
@table(name, name_lower, type, default_init)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2024 Epic Games Tools
|
||||
// Copyright (c) Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
//- GENERATED CODE
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2024 Epic Games Tools
|
||||
// Copyright (c) Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
//- GENERATED CODE
|
||||
|
||||
+90
-90
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2024 Epic Games Tools
|
||||
// Copyright (c) Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
internal U64
|
||||
@@ -49,10 +49,10 @@ internal U64
|
||||
dw_reg_size_from_code(Arch arch, DW_Reg reg_code)
|
||||
{
|
||||
switch (arch) {
|
||||
case Arch_Null: break;
|
||||
case Arch_x86: return dw_reg_size_from_code_x86(reg_code);
|
||||
case Arch_x64: return dw_reg_size_from_code_x64(reg_code);
|
||||
default: NotImplemented; break;
|
||||
case Arch_Null: break;
|
||||
case Arch_x86: return dw_reg_size_from_code_x86(reg_code);
|
||||
case Arch_x64: return dw_reg_size_from_code_x64(reg_code);
|
||||
default: NotImplemented; break;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@@ -61,10 +61,10 @@ internal U64
|
||||
dw_reg_pos_from_code(Arch arch, DW_Reg reg_code)
|
||||
{
|
||||
switch (arch) {
|
||||
case Arch_Null: break;
|
||||
case Arch_x86: return dw_reg_pos_from_code_x86(reg_code);
|
||||
case Arch_x64: return dw_reg_pos_from_code_x64(reg_code);
|
||||
default: NotImplemented; break;
|
||||
case Arch_Null: break;
|
||||
case Arch_x86: return dw_reg_pos_from_code_x86(reg_code);
|
||||
case Arch_x64: return dw_reg_pos_from_code_x64(reg_code);
|
||||
default: NotImplemented; break;
|
||||
}
|
||||
return max_U64;
|
||||
}
|
||||
@@ -73,9 +73,9 @@ internal DW_AttribClass
|
||||
dw_attrib_class_from_attrib_kind_v2(DW_AttribKind k)
|
||||
{
|
||||
switch (k) {
|
||||
#define X(_N,_C) case DW_Attrib_##_N: return _C;
|
||||
#define X(_N,_C) case DW_Attrib_##_N: return _C;
|
||||
DW_AttribKind_ClassFlags_V2_XList(X)
|
||||
#undef X
|
||||
#undef X
|
||||
}
|
||||
return DW_AttribClass_Null;
|
||||
}
|
||||
@@ -84,9 +84,9 @@ internal DW_AttribClass
|
||||
dw_attrib_class_from_attrib_kind_v3(DW_AttribKind k)
|
||||
{
|
||||
switch (k) {
|
||||
#define X(_N,_C) case DW_Attrib_##_N: return _C;
|
||||
#define X(_N,_C) case DW_Attrib_##_N: return _C;
|
||||
DW_AttribKind_ClassFlags_V3_XList(X)
|
||||
#undef X
|
||||
#undef X
|
||||
}
|
||||
return DW_AttribClass_Null;
|
||||
}
|
||||
@@ -95,9 +95,9 @@ internal DW_AttribClass
|
||||
dw_attrib_class_from_attrib_kind_v4(DW_AttribKind k)
|
||||
{
|
||||
switch (k) {
|
||||
#define X(_N,_C) case DW_Attrib_##_N: return _C;
|
||||
#define X(_N,_C) case DW_Attrib_##_N: return _C;
|
||||
DW_AttribKind_ClassFlags_V4_XList(X)
|
||||
#undef X
|
||||
#undef X
|
||||
}
|
||||
return DW_AttribClass_Null;
|
||||
}
|
||||
@@ -106,9 +106,9 @@ internal DW_AttribClass
|
||||
dw_attrib_class_from_attrib_kind_v5(DW_AttribKind k)
|
||||
{
|
||||
switch (k) {
|
||||
#define X(_N,_C) case DW_Attrib_##_N: return _C;
|
||||
#define X(_N,_C) case DW_Attrib_##_N: return _C;
|
||||
DW_AttribKind_ClassFlags_V5_XList(X)
|
||||
#undef X
|
||||
#undef X
|
||||
}
|
||||
return DW_AttribClass_Null;
|
||||
}
|
||||
@@ -117,9 +117,9 @@ internal DW_AttribClass
|
||||
dw_attrib_class_from_attrib_kind_gnu(DW_AttribKind k)
|
||||
{
|
||||
switch (k) {
|
||||
#define X(_N,_C) case DW_Attrib_##_N: return _C;
|
||||
#define X(_N,_C) case DW_Attrib_##_N: return _C;
|
||||
DW_AttribKind_ClassFlags_GNU_XList(X)
|
||||
#undef X
|
||||
#undef X
|
||||
}
|
||||
return DW_AttribClass_Null;
|
||||
}
|
||||
@@ -128,9 +128,9 @@ internal DW_AttribClass
|
||||
dw_attrib_class_from_attrib_kind_llvm(DW_AttribKind k)
|
||||
{
|
||||
switch (k) {
|
||||
#define X(_N,_C) case DW_Attrib_##_N: return _C;
|
||||
#define X(_N,_C) case DW_Attrib_##_N: return _C;
|
||||
DW_AttribKind_ClassFlags_LLVM_XList(X)
|
||||
#undef X
|
||||
#undef X
|
||||
}
|
||||
return DW_AttribClass_Null;
|
||||
}
|
||||
@@ -139,9 +139,9 @@ internal DW_AttribClass
|
||||
dw_attrib_class_from_attrib_kind_apple(DW_AttribKind k)
|
||||
{
|
||||
switch (k) {
|
||||
#define X(_N,_C) case DW_Attrib_##_N: return _C;
|
||||
#define X(_N,_C) case DW_Attrib_##_N: return _C;
|
||||
DW_AttribKind_ClassFlags_APPLE_XList(X)
|
||||
#undef X
|
||||
#undef X
|
||||
}
|
||||
return DW_AttribClass_Null;
|
||||
}
|
||||
@@ -150,9 +150,9 @@ internal DW_AttribClass
|
||||
dw_attrib_class_from_attrib_kind_mips(DW_AttribKind k)
|
||||
{
|
||||
switch (k) {
|
||||
#define X(_N,_C) case DW_Attrib_##_N: return _C;
|
||||
#define X(_N,_C) case DW_Attrib_##_N: return _C;
|
||||
DW_AttribKind_ClassFlags_MIPS_XList(X)
|
||||
#undef X
|
||||
#undef X
|
||||
}
|
||||
return DW_AttribClass_Null;
|
||||
}
|
||||
@@ -161,7 +161,7 @@ internal DW_AttribClass
|
||||
dw_attrib_class_from_attrib_kind(DW_Version ver, DW_Ext ext, DW_AttribKind k)
|
||||
{
|
||||
DW_AttribClass result = DW_AttribClass_Null;
|
||||
|
||||
|
||||
while (ext) {
|
||||
U64 z = 64-clz64(ext);
|
||||
if (z == 0) {
|
||||
@@ -169,7 +169,7 @@ dw_attrib_class_from_attrib_kind(DW_Version ver, DW_Ext ext, DW_AttribKind k)
|
||||
}
|
||||
U64 flag = 1 << (z-1);
|
||||
ext &= ~flag;
|
||||
|
||||
|
||||
switch (flag) {
|
||||
case DW_Ext_Null: break;
|
||||
case DW_Ext_GNU: result = dw_attrib_class_from_attrib_kind_gnu(k); break;
|
||||
@@ -178,12 +178,12 @@ dw_attrib_class_from_attrib_kind(DW_Version ver, DW_Ext ext, DW_AttribKind k)
|
||||
case DW_Ext_MIPS: result = dw_attrib_class_from_attrib_kind_mips(k); break;
|
||||
default: InvalidPath; break;
|
||||
}
|
||||
|
||||
|
||||
if (result != DW_AttribClass_Null) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (result == DW_AttribClass_Null) {
|
||||
switch (ver) {
|
||||
case DW_Version_Null: break;
|
||||
@@ -195,19 +195,19 @@ dw_attrib_class_from_attrib_kind(DW_Version ver, DW_Ext ext, DW_AttribKind k)
|
||||
default: InvalidPath; break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
internal DW_AttribClass
|
||||
dw_attrib_class_from_form_kind(DW_Version ver, DW_FormKind k)
|
||||
{
|
||||
#define X(_N,_C) case DW_Form_##_N: return _C;
|
||||
|
||||
#define X(_N,_C) case DW_Form_##_N: return _C;
|
||||
|
||||
switch (k) {
|
||||
DW_Form_AttribClass_GNU_XList(X)
|
||||
}
|
||||
|
||||
|
||||
switch (ver) {
|
||||
case DW_Version_5: {
|
||||
switch (k) {
|
||||
@@ -233,8 +233,8 @@ dw_attrib_class_from_form_kind(DW_Version ver, DW_FormKind k)
|
||||
} break;
|
||||
case DW_Version_Null: break;
|
||||
}
|
||||
#undef X
|
||||
|
||||
#undef X
|
||||
|
||||
return DW_AttribClass_Null;
|
||||
}
|
||||
|
||||
@@ -250,9 +250,9 @@ internal String8
|
||||
dw_name_string_from_section_kind(DW_SectionKind k)
|
||||
{
|
||||
switch (k) {
|
||||
#define X(_N,_L,_M,_D) case DW_Section_##_N: return str8_lit(_L);
|
||||
#define X(_N,_L,_M,_D) case DW_Section_##_N: return str8_lit(_L);
|
||||
DW_SectionKind_XList(X)
|
||||
#undef X
|
||||
#undef X
|
||||
}
|
||||
return str8_zero();
|
||||
}
|
||||
@@ -261,9 +261,9 @@ internal String8
|
||||
dw_mach_name_string_from_section_kind(DW_SectionKind k)
|
||||
{
|
||||
switch (k) {
|
||||
#define X(_N,_L,_M,_D) case DW_Section_##_N: return str8_lit(_M);
|
||||
#define X(_N,_L,_M,_D) case DW_Section_##_N: return str8_lit(_M);
|
||||
DW_SectionKind_XList(X)
|
||||
#undef X
|
||||
#undef X
|
||||
}
|
||||
return str8_zero();
|
||||
}
|
||||
@@ -272,9 +272,9 @@ internal String8
|
||||
dw_dwo_name_string_from_section_kind(DW_SectionKind k)
|
||||
{
|
||||
switch (k) {
|
||||
#define X(_N,_L,_M,_D) case DW_Section_##_N: return str8_lit(_D);
|
||||
#define X(_N,_L,_M,_D) case DW_Section_##_N: return str8_lit(_D);
|
||||
DW_SectionKind_XList(X)
|
||||
#undef X
|
||||
#undef X
|
||||
}
|
||||
return str8_zero();
|
||||
}
|
||||
@@ -301,10 +301,10 @@ dw_pick_attrib_value_class(DW_Version ver, DW_Ext ext, B32 relaxed, DW_AttribKin
|
||||
//
|
||||
// This function's purpose is to find the overlapping class between an
|
||||
// DW_AttribKind and DW_FormKind.
|
||||
|
||||
|
||||
DW_AttribClass attrib_class = dw_attrib_class_from_attrib_kind(ver, ext, attrib_kind);
|
||||
DW_AttribClass form_class = dw_attrib_class_from_form_kind(ver, form_kind);
|
||||
|
||||
|
||||
if(relaxed)
|
||||
{
|
||||
if(attrib_class == DW_AttribClass_Null || form_class == DW_AttribClass_Null)
|
||||
@@ -313,12 +313,12 @@ dw_pick_attrib_value_class(DW_Version ver, DW_Ext ext, B32 relaxed, DW_AttribKin
|
||||
form_class = dw_attrib_class_from_form_kind(DW_Version_Last, form_kind);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
DW_AttribClass result = DW_AttribClass_Null;
|
||||
if(attrib_class != DW_AttribClass_Null && form_class != DW_AttribClass_Null)
|
||||
{
|
||||
result = DW_AttribClass_Undefined;
|
||||
|
||||
|
||||
for(U32 i = 0; i < 32; ++i)
|
||||
{
|
||||
U32 n = 1u << i;
|
||||
@@ -329,7 +329,7 @@ dw_pick_attrib_value_class(DW_Version ver, DW_Ext ext, B32 relaxed, DW_AttribKin
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -338,50 +338,50 @@ dw_pick_default_lower_bound(DW_Language lang)
|
||||
{
|
||||
U64 lower_bound = max_U64;
|
||||
switch (lang) {
|
||||
case DW_Language_Null: break;
|
||||
case DW_Language_C89:
|
||||
case DW_Language_C:
|
||||
case DW_Language_CPlusPlus:
|
||||
case DW_Language_C99:
|
||||
case DW_Language_CPlusPlus03:
|
||||
case DW_Language_CPlusPlus11:
|
||||
case DW_Language_C11:
|
||||
case DW_Language_CPlusPlus14:
|
||||
case DW_Language_Java:
|
||||
case DW_Language_ObjC:
|
||||
case DW_Language_ObjCPlusPlus:
|
||||
case DW_Language_UPC:
|
||||
case DW_Language_D:
|
||||
case DW_Language_Python:
|
||||
case DW_Language_OpenCL:
|
||||
case DW_Language_Go:
|
||||
case DW_Language_Haskell:
|
||||
case DW_Language_OCaml:
|
||||
case DW_Language_Rust:
|
||||
case DW_Language_Swift:
|
||||
case DW_Language_Dylan:
|
||||
case DW_Language_RenderScript:
|
||||
case DW_Language_BLISS:
|
||||
lower_bound = 0;
|
||||
break;
|
||||
case DW_Language_Ada83:
|
||||
case DW_Language_Cobol74:
|
||||
case DW_Language_Cobol85:
|
||||
case DW_Language_Fortran77:
|
||||
case DW_Language_Fortran90:
|
||||
case DW_Language_Pascal83:
|
||||
case DW_Language_Modula2:
|
||||
case DW_Language_Ada95:
|
||||
case DW_Language_Fortran95:
|
||||
case DW_Language_PLI:
|
||||
case DW_Language_Modula3:
|
||||
case DW_Language_Julia:
|
||||
case DW_Language_Fortran03:
|
||||
case DW_Language_Fortran08:
|
||||
lower_bound = 1;
|
||||
default:
|
||||
NotImplemented;
|
||||
break;
|
||||
case DW_Language_Null: break;
|
||||
case DW_Language_C89:
|
||||
case DW_Language_C:
|
||||
case DW_Language_CPlusPlus:
|
||||
case DW_Language_C99:
|
||||
case DW_Language_CPlusPlus03:
|
||||
case DW_Language_CPlusPlus11:
|
||||
case DW_Language_C11:
|
||||
case DW_Language_CPlusPlus14:
|
||||
case DW_Language_Java:
|
||||
case DW_Language_ObjC:
|
||||
case DW_Language_ObjCPlusPlus:
|
||||
case DW_Language_UPC:
|
||||
case DW_Language_D:
|
||||
case DW_Language_Python:
|
||||
case DW_Language_OpenCL:
|
||||
case DW_Language_Go:
|
||||
case DW_Language_Haskell:
|
||||
case DW_Language_OCaml:
|
||||
case DW_Language_Rust:
|
||||
case DW_Language_Swift:
|
||||
case DW_Language_Dylan:
|
||||
case DW_Language_RenderScript:
|
||||
case DW_Language_BLISS:
|
||||
lower_bound = 0;
|
||||
break;
|
||||
case DW_Language_Ada83:
|
||||
case DW_Language_Cobol74:
|
||||
case DW_Language_Cobol85:
|
||||
case DW_Language_Fortran77:
|
||||
case DW_Language_Fortran90:
|
||||
case DW_Language_Pascal83:
|
||||
case DW_Language_Modula2:
|
||||
case DW_Language_Ada95:
|
||||
case DW_Language_Fortran95:
|
||||
case DW_Language_PLI:
|
||||
case DW_Language_Modula3:
|
||||
case DW_Language_Julia:
|
||||
case DW_Language_Fortran03:
|
||||
case DW_Language_Fortran08:
|
||||
lower_bound = 1;
|
||||
default:
|
||||
NotImplemented;
|
||||
break;
|
||||
}
|
||||
return lower_bound;
|
||||
}
|
||||
|
||||
+1356
-1356
File diff suppressed because it is too large
Load Diff
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2024 Epic Games Tools
|
||||
// Copyright (c) Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
internal B32
|
||||
@@ -8,22 +8,22 @@ dw_is_dwarf_present_coff_section_table(String8 raw_image,
|
||||
COFF_SectionHeader *section_table)
|
||||
{
|
||||
B32 is_dwarf_present = 0;
|
||||
|
||||
|
||||
for (U64 i = 0; i < section_count; ++i) {
|
||||
COFF_SectionHeader *header = §ion_table[i];
|
||||
String8 name = coff_name_from_section_header(string_table, header);
|
||||
|
||||
|
||||
DW_SectionKind s = dw_section_kind_from_string(name);
|
||||
if (s == DW_Section_Null) {
|
||||
s = dw_section_dwo_kind_from_string(name);
|
||||
}
|
||||
|
||||
|
||||
is_dwarf_present = s != DW_Section_Null;
|
||||
if (is_dwarf_present) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return is_dwarf_present;
|
||||
}
|
||||
|
||||
@@ -36,19 +36,19 @@ dw_input_from_coff_section_table(Arena *arena,
|
||||
{
|
||||
DW_Input input = {0};
|
||||
B32 sect_status[ArrayCount(input.sec)] = {0};
|
||||
|
||||
|
||||
for (U64 i = 0; i < section_count; ++i) {
|
||||
COFF_SectionHeader *header = §ion_table[i];
|
||||
Rng1U64 raw_data_range = rng_1u64(header->foff, header->foff + header->fsize);
|
||||
String8 name = coff_name_from_section_header(string_table, header);
|
||||
|
||||
|
||||
DW_SectionKind s = dw_section_kind_from_string(name);
|
||||
B32 is_dwo = 0;
|
||||
if (s == DW_Section_Null) {
|
||||
s = dw_section_dwo_kind_from_string(name);
|
||||
is_dwo = 1;
|
||||
}
|
||||
|
||||
|
||||
if (s != DW_Section_Null) {
|
||||
if (sect_status[s]) {
|
||||
Assert(!"too many debug sections with identical name, picking first");
|
||||
@@ -61,7 +61,7 @@ dw_input_from_coff_section_table(Arena *arena,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return input;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2024 Epic Games Tools
|
||||
// Copyright (c) Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
#ifndef DWARF_COFF_H
|
||||
|
||||
+32
-32
@@ -1,18 +1,18 @@
|
||||
// Copyright (c) 2024 Epic Games Tools
|
||||
// Copyright (c) Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
internal String8
|
||||
dw_string_from_expr_op(Arena *arena, DW_Version ver, DW_Ext ext, DW_ExprOp op)
|
||||
{
|
||||
String8 result = {0};
|
||||
|
||||
#define X(_N,...) case DW_ExprOp_##_N: result = str8_lit(Stringify(_N)); goto exit;
|
||||
|
||||
#define X(_N,...) case DW_ExprOp_##_N: result = str8_lit(Stringify(_N)); goto exit;
|
||||
if (ext & DW_Ext_GNU) {
|
||||
switch (op) {
|
||||
DW_Expr_GNU_XList(X);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
switch (ver) {
|
||||
case DW_Version_5: {
|
||||
switch (op) {
|
||||
@@ -32,13 +32,13 @@ dw_string_from_expr_op(Arena *arena, DW_Version ver, DW_Ext ext, DW_ExprOp op)
|
||||
case DW_Version_2:
|
||||
case DW_Version_1:
|
||||
case DW_Version_Null:
|
||||
break;
|
||||
break;
|
||||
}
|
||||
#undef X
|
||||
|
||||
#undef X
|
||||
|
||||
result = push_str8f(arena, "%x", op);
|
||||
|
||||
exit:;
|
||||
|
||||
exit:;
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -46,12 +46,12 @@ internal String8
|
||||
dw_string_from_tag_kind(Arena *arena, DW_TagKind kind)
|
||||
{
|
||||
switch (kind) {
|
||||
case DW_Tag_Null: return str8_lit("Null");
|
||||
#define X(_N,_ID) case DW_Tag_##_N: return str8_lit(Stringify(_N));
|
||||
case DW_Tag_Null: return str8_lit("Null");
|
||||
#define X(_N,_ID) case DW_Tag_##_N: return str8_lit(Stringify(_N));
|
||||
DW_Tag_V3_XList(X)
|
||||
DW_Tag_V5_XList(X)
|
||||
DW_Tag_GNU_XList(X)
|
||||
#undef X
|
||||
DW_Tag_V5_XList(X)
|
||||
DW_Tag_GNU_XList(X)
|
||||
#undef X
|
||||
}
|
||||
return push_str8f(arena, "%llx", kind);
|
||||
}
|
||||
@@ -59,8 +59,8 @@ dw_string_from_tag_kind(Arena *arena, DW_TagKind kind)
|
||||
internal String8
|
||||
dw_string_from_attrib_kind(Arena *arena, DW_Version ver, DW_Ext ext, DW_AttribKind kind)
|
||||
{
|
||||
#define X(_N,...) case DW_Attrib_##_N: return str8_lit(Stringify(_N));
|
||||
|
||||
#define X(_N,...) case DW_Attrib_##_N: return str8_lit(Stringify(_N));
|
||||
|
||||
while (ext) {
|
||||
U64 z = 64-clz64(ext);
|
||||
if (z == 0) {
|
||||
@@ -68,7 +68,7 @@ dw_string_from_attrib_kind(Arena *arena, DW_Version ver, DW_Ext ext, DW_AttribKi
|
||||
}
|
||||
U64 flag = 1 << (z-1);
|
||||
ext &= ~flag;
|
||||
|
||||
|
||||
switch (flag) {
|
||||
case DW_Ext_Null: break;
|
||||
case DW_Ext_GNU: switch (kind) { DW_AttribKind_GNU_XList(X) } break;
|
||||
@@ -78,7 +78,7 @@ dw_string_from_attrib_kind(Arena *arena, DW_Version ver, DW_Ext ext, DW_AttribKi
|
||||
default: InvalidPath; break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
switch (ver) {
|
||||
case DW_Version_5: {
|
||||
switch (kind) {
|
||||
@@ -104,15 +104,15 @@ dw_string_from_attrib_kind(Arena *arena, DW_Version ver, DW_Ext ext, DW_AttribKi
|
||||
} // fall-through
|
||||
case DW_Version_Null: break;
|
||||
}
|
||||
#undef X
|
||||
|
||||
#undef X
|
||||
|
||||
return str8_zero();
|
||||
}
|
||||
|
||||
internal String8
|
||||
dw_string_from_form_kind(Arena *arena, DW_Version ver, DW_FormKind kind)
|
||||
{
|
||||
#define X(_N,...) case DW_Form_##_N: return str8_lit(Stringify(_N));
|
||||
#define X(_N,...) case DW_Form_##_N: return str8_lit(Stringify(_N));
|
||||
switch (ver) {
|
||||
case DW_Version_5: {
|
||||
switch (kind) {
|
||||
@@ -132,7 +132,7 @@ dw_string_from_form_kind(Arena *arena, DW_Version ver, DW_FormKind kind)
|
||||
} // fall-through
|
||||
case DW_Version_Null: break;
|
||||
}
|
||||
#undef X
|
||||
#undef X
|
||||
String8 result = push_str8f(arena, "%x", kind);
|
||||
return result;
|
||||
}
|
||||
@@ -141,9 +141,9 @@ internal String8
|
||||
dw_string_from_language(Arena *arena, DW_Language kind)
|
||||
{
|
||||
switch (kind) {
|
||||
#define X(_N,_ID) case DW_Language_##_N: return str8_lit(Stringify(_N));
|
||||
#define X(_N,_ID) case DW_Language_##_N: return str8_lit(Stringify(_N));
|
||||
DW_Language_XList(X)
|
||||
#undef X
|
||||
#undef X
|
||||
}
|
||||
return push_str8f(arena, "%x", kind);
|
||||
}
|
||||
@@ -196,9 +196,9 @@ internal String8
|
||||
dw_string_from_std_opcode(Arena *arena, DW_StdOpcode kind)
|
||||
{
|
||||
switch (kind) {
|
||||
#define X(_N,_ID) case DW_StdOpcode_##_N: return str8_lit(Stringify(_N));
|
||||
#define X(_N,_ID) case DW_StdOpcode_##_N: return str8_lit(Stringify(_N));
|
||||
DW_StdOpcode_XList(X)
|
||||
#undef X
|
||||
#undef X
|
||||
}
|
||||
return push_str8f(arena, "%x", kind);
|
||||
}
|
||||
@@ -207,9 +207,9 @@ internal String8
|
||||
dw_string_from_ext_opcode(Arena *arena, DW_ExtOpcode kind)
|
||||
{
|
||||
switch (kind) {
|
||||
#define X(_N,_ID) case DW_ExtOpcode_##_N: return str8_lit(Stringify(_N));
|
||||
#define X(_N,_ID) case DW_ExtOpcode_##_N: return str8_lit(Stringify(_N));
|
||||
DW_ExtOpcode_XList(X)
|
||||
#undef X
|
||||
#undef X
|
||||
default: InvalidPath; break;
|
||||
}
|
||||
return push_str8f(arena, "%x", kind);
|
||||
@@ -244,16 +244,16 @@ dw_string_from_register(Arena *arena, Arch arch, U64 reg_id)
|
||||
case Arch_Null: break;
|
||||
case Arch_x86: {
|
||||
switch (reg_id) {
|
||||
#define X(_N, _ID, ...) case DW_RegX86_##_N: reg_str = str8_lit(Stringify(_N)); break;
|
||||
#define X(_N, _ID, ...) case DW_RegX86_##_N: reg_str = str8_lit(Stringify(_N)); break;
|
||||
DW_Regs_X86_XList(X)
|
||||
#undef X
|
||||
#undef X
|
||||
}
|
||||
} break;
|
||||
case Arch_x64: {
|
||||
switch (reg_id) {
|
||||
#define X(_N, _ID, ...) case DW_RegX64_##_N: reg_str = str8_lit(Stringify(_N)); break;
|
||||
#define X(_N, _ID, ...) case DW_RegX64_##_N: reg_str = str8_lit(Stringify(_N)); break;
|
||||
DW_Regs_X64_XList(X)
|
||||
#undef X
|
||||
#undef X
|
||||
}
|
||||
} break;
|
||||
case Arch_arm32: NotImplemented; break;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2024 Epic Games Tools
|
||||
// Copyright (c) Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
#ifndef DWARF_ENUM_H
|
||||
|
||||
+16
-16
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2024 Epic Games Tools
|
||||
// Copyright (c) Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
//- analyzers
|
||||
@@ -10,7 +10,7 @@ dw_expr__analyze_fast(void *base, Rng1U64 range, U64 text_section_base)
|
||||
DW_SimpleLoc result = {DW_SimpleLocKind_Empty};
|
||||
|
||||
String8 expr_data = str8((U8*)data+range.min, (U8*)data+range.max);
|
||||
|
||||
|
||||
U8 op = 0;
|
||||
if (str8_deserial_read_struct(expr_data, 0, &op)) {
|
||||
// step params
|
||||
@@ -52,11 +52,11 @@ dw_expr__analyze_fast(void *base, Rng1U64 range, U64 text_section_base)
|
||||
{
|
||||
U64 x = 0;
|
||||
step_cursor += dw_based_range_read(base, range, step_cursor, size_param, &x);
|
||||
|
||||
|
||||
if (is_signed) {
|
||||
x = extend_sign64(x, size_param);
|
||||
}
|
||||
|
||||
|
||||
result.kind = DW_SimpleLocKind_Address;
|
||||
result.addr = x;
|
||||
} break;
|
||||
@@ -180,7 +180,7 @@ internal DW_ExprAnalysis
|
||||
dw_expr__analyze_details(void *in_base, Rng1U64 in_range, DW_ExprMachineCallConfig *call_config)
|
||||
{
|
||||
Temp scratch = scratch_begin(0, 0);
|
||||
|
||||
|
||||
DW_ExprAnalysis result = {0};
|
||||
|
||||
// are we resolving calls?
|
||||
@@ -560,7 +560,7 @@ dw_expr__eval(Arena *arena_optional, void *expr_base, Rng1U64 expr_range, DW_Exp
|
||||
{
|
||||
#if 0
|
||||
Temp scratch = scratch_begin(&arena_optional, 1);
|
||||
|
||||
|
||||
DW_Location result = {0};
|
||||
|
||||
// setup stack
|
||||
@@ -655,7 +655,7 @@ dw_expr__eval(Arena *arena_optional, void *expr_base, Rng1U64 expr_range, DW_Exp
|
||||
{
|
||||
U64 offset = 0;
|
||||
step_cursor += dw_based_range_read(base, range, step_cursor, 8, &offset);
|
||||
|
||||
|
||||
// earlier versions of GCC emit TLS offset with DW_ExprOp_Addr.
|
||||
B32 is_text_relative;
|
||||
{
|
||||
@@ -663,9 +663,9 @@ dw_expr__eval(Arena *arena_optional, void *expr_base, Rng1U64 expr_range, DW_Exp
|
||||
dw_based_range_read_struct(base, range, step_cursor, &next_op);
|
||||
is_text_relative = (next_op != DW_ExprOp_GNU_PushTlsAddress);
|
||||
}
|
||||
|
||||
|
||||
U64 addr = offset;
|
||||
|
||||
|
||||
if (is_text_relative) {
|
||||
if (config->text_section_base != 0) {
|
||||
addr += *config->text_section_base;
|
||||
@@ -675,7 +675,7 @@ dw_expr__eval(Arena *arena_optional, void *expr_base, Rng1U64 expr_range, DW_Exp
|
||||
goto finish;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
dw_expr__stack_push(scratch.arena, &stack, addr);
|
||||
} break;
|
||||
|
||||
@@ -748,7 +748,7 @@ dw_expr__eval(Arena *arena_optional, void *expr_base, Rng1U64 expr_range, DW_Exp
|
||||
U64 reg_idx = 0; S64 offset = 0;
|
||||
step_cursor += dw_based_range_read_uleb128(base, range, step_cursor, ®_idx);
|
||||
step_cursor += dw_based_range_read_sleb128(base, range, step_cursor, &offset);
|
||||
|
||||
|
||||
DW_RegsX64 *regs = config->regs;
|
||||
if (regs != 0) {
|
||||
if (reg_idx < ArrayCount(regs->r)) {
|
||||
@@ -816,7 +816,7 @@ dw_expr__eval(Arena *arena_optional, void *expr_base, Rng1U64 expr_range, DW_Exp
|
||||
case DW_ExprOp_Deref:
|
||||
{
|
||||
U64 addr = dw_expr__stack_pop(&stack);
|
||||
|
||||
|
||||
B32 read_success = 0;
|
||||
if (config->read_memory) {
|
||||
U64 x = 0;
|
||||
@@ -825,7 +825,7 @@ dw_expr__eval(Arena *arena_optional, void *expr_base, Rng1U64 expr_range, DW_Exp
|
||||
read_success = 1;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (!read_success) {
|
||||
stashed_loc.kind = DW_SimpleLocKind_Fail;
|
||||
stashed_loc.fail_kind = DW_LocFailKind_MissingMemory;
|
||||
@@ -838,10 +838,10 @@ dw_expr__eval(Arena *arena_optional, void *expr_base, Rng1U64 expr_range, DW_Exp
|
||||
{
|
||||
U64 raw_size = 0;
|
||||
step_cursor += dw_based_range_read(base, range, step_cursor, 1, &raw_size);
|
||||
|
||||
|
||||
U64 size = ClampTop(raw_size, 8);
|
||||
U64 addr = dw_expr__stack_pop(&stack);
|
||||
|
||||
|
||||
B32 read_success = 0;
|
||||
if (config->read_memory) {
|
||||
U64 x = 0;
|
||||
@@ -883,7 +883,7 @@ dw_expr__eval(Arena *arena_optional, void *expr_base, Rng1U64 expr_range, DW_Exp
|
||||
case DW_ExprOp_FormTlsAddress:
|
||||
{
|
||||
S64 s = (S64)dw_expr__stack_pop(&stack);
|
||||
|
||||
|
||||
if (config->tls_address != 0) {
|
||||
U64 x = *config->tls_address + s;
|
||||
dw_expr__stack_push(scratch.arena, &stack, x);
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2024 Epic Games Tools
|
||||
// Copyright (c) Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
#ifndef DWARF_EXPR_H
|
||||
|
||||
+872
-872
File diff suppressed because it is too large
Load Diff
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2024 Epic Games Tools
|
||||
// Copyright (c) Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
#ifndef DWARF_PARSE_H
|
||||
|
||||
+10
-10
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2024 Epic Games Tools
|
||||
// Copyright (c) Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
internal U64 dw_based_range_read(void *base, Rng1U64 range, U64 off, U64 size, void *out) { return 0; }
|
||||
@@ -25,9 +25,9 @@ dw_unwind_x64(String8 raw_text,
|
||||
{
|
||||
// TODO: What if ELF has two sections with instructions and pointer is ecnoded relative to .text2?
|
||||
Temp scratch = scratch_begin(0, 0);
|
||||
|
||||
|
||||
DW_UnwindResult result = {0};
|
||||
|
||||
|
||||
dw_unwind_init_x64();
|
||||
|
||||
// rebase
|
||||
@@ -46,7 +46,7 @@ dw_unwind_x64(String8 raw_text,
|
||||
//- get frame info range
|
||||
void *frame_base = raw_eh_frame.str;
|
||||
Rng1U64 frame_range = rng_1u64(0, raw_eh_frame.size);
|
||||
|
||||
|
||||
//- section vaddrs
|
||||
U64 text_base_vaddr = text_vrange.min + rebase_voff_to_vaddr;
|
||||
U64 frame_base_voff = text_vrange.min;
|
||||
@@ -113,7 +113,7 @@ dw_unwind_x64(String8 raw_text,
|
||||
result.is_invalid = 1;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// apply main row to modify the registers
|
||||
if (main_row != 0) {
|
||||
result = dw_unwind_x64__apply_frame_rules(raw_eh_frame, main_row, text_base_vaddr, read_memory, read_memory_ud, stack_pointer, regs);
|
||||
@@ -133,7 +133,7 @@ dw_unwind_x64__apply_frame_rules(String8 raw_eh_frame,
|
||||
DW_RegsX64 *regs)
|
||||
{
|
||||
DW_UnwindResult result = {0};
|
||||
|
||||
|
||||
U64 missed_read_addr = 0;
|
||||
|
||||
//- setup a dwarf expression machine
|
||||
@@ -375,7 +375,7 @@ dw_unwind_parse_pointer_x64(void *frame_base, Rng1U64 frame_range, DW_EhPtrCtx *
|
||||
case DW_EhPtrEnc_SLEB128:
|
||||
{
|
||||
U64 size = dw_based_range_read_sleb128(frame_base, frame_range, pointer_off,
|
||||
(S64*)&raw_pointer);
|
||||
(S64*)&raw_pointer);
|
||||
after_pointer_off = pointer_off + size;
|
||||
} break;
|
||||
}
|
||||
@@ -588,7 +588,7 @@ internal DW_CFIRecords
|
||||
dw_unwind_eh_frame_cfi_from_ip_slow_x64(String8 raw_eh_frame, DW_EhPtrCtx *ptr_ctx, U64 ip_voff)
|
||||
{
|
||||
Temp scratch = scratch_begin(0, 0);
|
||||
|
||||
|
||||
DW_CFIRecords result = {0};
|
||||
|
||||
DW_CIEUnpackedNode *cie_first = 0;
|
||||
@@ -622,7 +622,7 @@ dw_unwind_eh_frame_cfi_from_ip_slow_x64(String8 raw_eh_frame, DW_EhPtrCtx *ptr_c
|
||||
Rng1U64 rec_range = rng_1u64(rec_off, rec_opl);
|
||||
String8 raw_rec = str8_substr(raw_eh_frame, rec_range);
|
||||
|
||||
|
||||
|
||||
// discriminator
|
||||
U64 discrim_off = after_rec_size_off;
|
||||
U32 discrim = 0;
|
||||
@@ -839,7 +839,7 @@ internal B32
|
||||
dw_unwind_machine_run_to_ip_x64(void *base, Rng1U64 range, DW_CFIMachine *machine, U64 target_ip, DW_CFIRow *row)
|
||||
{
|
||||
Temp scratch = scratch_begin(0, 0);
|
||||
|
||||
|
||||
B32 result = 0;
|
||||
|
||||
// pull out machine's equipment
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2024 Epic Games Tools
|
||||
// Copyright (c) Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
#ifndef DWARF_UNWIND_H
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2024 Epic Games Tools
|
||||
// Copyright (c) Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
@table(name)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2024 Epic Games Tools
|
||||
// Copyright (c) Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
////////////////////////////////
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2024 Epic Games Tools
|
||||
// Copyright (c) Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
#ifndef EVAL_CORE_H
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2024 Epic Games Tools
|
||||
// Copyright (c) Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
#include "eval/eval_core.c"
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2024 Epic Games Tools
|
||||
// Copyright (c) Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
#ifndef EVAL_INC_H
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2024 Epic Games Tools
|
||||
// Copyright (c) Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
////////////////////////////////
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2024 Epic Games Tools
|
||||
// Copyright (c) Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
#ifndef EVAL_INTERPRET_H
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2024 Epic Games Tools
|
||||
// Copyright (c) Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
////////////////////////////////
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2024 Epic Games Tools
|
||||
// Copyright (c) Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
#ifndef EVAL_IR_H
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2024 Epic Games Tools
|
||||
// Copyright (c) Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
////////////////////////////////
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2024 Epic Games Tools
|
||||
// Copyright (c) Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
#ifndef EVAL_PARSE_H
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2024 Epic Games Tools
|
||||
// Copyright (c) Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
////////////////////////////////
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user