Copy disabled (too large)
Download .txt
Showing preview only (18,065K chars total). Download the full file to get everything.
Repository: EpicGamesExt/raddebugger
Branch: master
Commit: 08642d2745da
Files: 490
Total size: 28.5 MB
Directory structure:
gitextract_k3109d9_/
├── .gitattributes
├── .github/
│ └── workflows/
│ └── builds.yml
├── .gitignore
├── CHANGELOG.md
├── LICENSE
├── README.md
├── build.bat
├── build.sh
├── data/
│ └── logo.rc
├── project.4coder
├── run_tests.bat
└── src/
├── artifact_cache/
│ ├── artifact_cache.c
│ └── artifact_cache.h
├── base/
│ ├── base_arena.c
│ ├── base_arena.h
│ ├── base_command_line.c
│ ├── base_command_line.h
│ ├── base_context_cracking.h
│ ├── base_core.c
│ ├── base_core.h
│ ├── base_entry_point.c
│ ├── base_entry_point.h
│ ├── base_hash.c
│ ├── base_hash.h
│ ├── base_inc.c
│ ├── base_inc.h
│ ├── base_log.c
│ ├── base_log.h
│ ├── base_markup.c
│ ├── base_markup.h
│ ├── base_math.c
│ ├── base_math.h
│ ├── base_meta.c
│ ├── base_meta.h
│ ├── base_profile.c
│ ├── base_profile.h
│ ├── base_strings.c
│ ├── base_strings.h
│ ├── base_thread_context.c
│ ├── base_thread_context.h
│ ├── base_threads.c
│ └── base_threads.h
├── codeview/
│ ├── codeview.c
│ ├── codeview.h
│ ├── codeview.mdesk
│ ├── codeview_dump.c
│ ├── codeview_dump.h
│ ├── codeview_parse.c
│ ├── codeview_parse.h
│ └── generated/
│ ├── codeview.meta.c
│ └── codeview.meta.h
├── coff/
│ ├── coff.c
│ ├── coff.h
│ ├── coff_dump.c
│ ├── coff_dump.h
│ ├── coff_enum.c
│ ├── coff_inc.c
│ ├── coff_inc.h
│ ├── coff_lib_writer.c
│ ├── coff_lib_writer.h
│ ├── coff_obj_writer.c
│ ├── coff_obj_writer.h
│ ├── coff_parse.c
│ └── coff_parse.h
├── config/
│ ├── config_bindings.c
│ ├── config_bindings.h
│ ├── config_core.c
│ ├── config_core.h
│ ├── config_inc.c
│ ├── config_inc.h
│ ├── config_panels.c
│ └── config_panels.h
├── content/
│ ├── content.c
│ └── content.h
├── ctrl/
│ ├── ctrl.mdesk
│ ├── ctrl_core.c
│ ├── ctrl_core.h
│ ├── ctrl_inc.c
│ ├── ctrl_inc.h
│ └── generated/
│ ├── ctrl.meta.c
│ └── ctrl.meta.h
├── dbg_engine/
│ ├── dbg_engine.mdesk
│ ├── dbg_engine_core.c
│ ├── dbg_engine_core.h
│ ├── dbg_engine_inc.c
│ ├── dbg_engine_inc.h
│ └── generated/
│ ├── dbg_engine.meta.c
│ └── dbg_engine.meta.h
├── dbg_info/
│ ├── dbg_info.c
│ └── dbg_info.h
├── demon/
│ ├── demon_core.c
│ ├── demon_core.h
│ ├── demon_core.mdesk
│ ├── demon_inc.c
│ ├── demon_inc.h
│ ├── generated/
│ │ ├── demon.meta.c
│ │ └── demon.meta.h
│ ├── linux/
│ │ ├── demon_core_linux.c
│ │ ├── demon_core_linux.h
│ │ ├── demon_os_linux.c
│ │ └── demon_os_linux.h
│ └── win32/
│ ├── demon_core_win32.c
│ └── demon_core_win32.h
├── disasm/
│ ├── disasm.c
│ └── disasm.h
├── draw/
│ ├── draw.c
│ ├── draw.h
│ ├── draw.mdesk
│ └── generated/
│ ├── draw.meta.c
│ └── draw.meta.h
├── dwarf/
│ ├── dwarf.c
│ ├── dwarf.h
│ ├── dwarf_coff.c
│ ├── dwarf_coff.h
│ ├── dwarf_dump.c
│ ├── dwarf_dump.h
│ ├── dwarf_elf.c
│ ├── dwarf_elf.h
│ ├── dwarf_expr.c
│ ├── dwarf_expr.h
│ ├── dwarf_help.c
│ ├── dwarf_help.h
│ ├── dwarf_inc.c
│ ├── dwarf_inc.h
│ ├── dwarf_notes.txt
│ ├── dwarf_parse.c
│ ├── dwarf_parse.h
│ ├── dwarf_unwind.c
│ ├── dwarf_unwind.h
│ ├── eh_dump.c
│ ├── eh_dump.h
│ ├── eh_frame.c
│ └── eh_frame.h
├── elf/
│ ├── elf.c
│ ├── elf.h
│ ├── elf_dump.c
│ ├── elf_dump.h
│ ├── elf_parse.c
│ └── elf_parse.h
├── eval/
│ ├── eval.mdesk
│ ├── eval_core.c
│ ├── eval_core.h
│ ├── eval_inc.c
│ ├── eval_inc.h
│ ├── eval_interpret.c
│ ├── eval_interpret.h
│ ├── eval_ir.c
│ ├── eval_ir.h
│ ├── eval_parse.c
│ ├── eval_parse.h
│ ├── eval_types.c
│ ├── eval_types.h
│ └── generated/
│ ├── eval.meta.c
│ └── eval.meta.h
├── eval_visualization/
│ ├── eval_visualization_core.c
│ ├── eval_visualization_core.h
│ ├── eval_visualization_inc.c
│ └── eval_visualization_inc.h
├── file_stream/
│ ├── file_stream.c
│ └── file_stream.h
├── font_cache/
│ ├── font_cache.c
│ └── font_cache.h
├── font_provider/
│ ├── dwrite/
│ │ ├── font_provider_dwrite.c
│ │ └── font_provider_dwrite.h
│ ├── font_provider.c
│ ├── font_provider.h
│ ├── font_provider_inc.c
│ ├── font_provider_inc.h
│ └── freetype/
│ ├── font_provider_freetype.c
│ └── font_provider_freetype.h
├── gnu/
│ ├── gnu.c
│ └── gnu.h
├── lib_raddbg_markup/
│ └── raddbg_markup.h
├── lib_rdi/
│ ├── rdi.c
│ ├── rdi.h
│ ├── rdi_parse.c
│ └── rdi_parse.h
├── lib_rdi_make/
│ ├── rdi_make.c
│ └── rdi_make.h
├── linker/
│ ├── base_ext/
│ │ ├── base_arena.c
│ │ ├── base_arena.h
│ │ ├── base_arrays.c
│ │ ├── base_arrays.h
│ │ ├── base_bit_array.c
│ │ ├── base_bit_array.h
│ │ ├── base_blake3.c
│ │ ├── base_blake3.h
│ │ ├── base_core.c
│ │ ├── base_core.h
│ │ ├── base_crc32.c
│ │ ├── base_crc32.h
│ │ ├── base_inc.c
│ │ ├── base_inc.h
│ │ ├── base_strings.c
│ │ └── base_strings.h
│ ├── codeview_ext/
│ │ ├── codeview.c
│ │ └── codeview.h
│ ├── hash_table.c
│ ├── hash_table.h
│ ├── linker.natvis
│ ├── lnk.c
│ ├── lnk.h
│ ├── lnk_cmd_line.c
│ ├── lnk_cmd_line.h
│ ├── lnk_config.c
│ ├── lnk_config.h
│ ├── lnk_debug_helper.c
│ ├── lnk_debug_helper.h
│ ├── lnk_debug_info.c
│ ├── lnk_debug_info.h
│ ├── lnk_error.c
│ ├── lnk_error.h
│ ├── lnk_io.c
│ ├── lnk_io.h
│ ├── lnk_lib.c
│ ├── lnk_lib.h
│ ├── lnk_log.c
│ ├── lnk_log.h
│ ├── lnk_obj.c
│ ├── lnk_obj.h
│ ├── lnk_section_table.c
│ ├── lnk_section_table.h
│ ├── lnk_symbol_table.c
│ ├── lnk_symbol_table.h
│ ├── lnk_timer.c
│ ├── lnk_timer.h
│ ├── pdb_ext/
│ │ ├── msf_builder.c
│ │ ├── msf_builder.h
│ │ ├── pdb.c
│ │ ├── pdb.h
│ │ ├── pdb_builder.c
│ │ ├── pdb_builder.h
│ │ ├── pdb_helpers.c
│ │ └── pdb_helpers.h
│ ├── rdi/
│ │ ├── rdi_builder.c
│ │ ├── rdi_builder.h
│ │ ├── rdi_coff.c
│ │ ├── rdi_coff.h
│ │ ├── rdi_cv.c
│ │ ├── rdi_cv.h
│ │ └── rdi_overrides.h
│ ├── scripts/
│ │ └── obj_paths_from_pdb.py
│ └── thread_pool/
│ ├── thread_pool.c
│ └── thread_pool.h
├── mdesk/
│ ├── mdesk.c
│ └── mdesk.h
├── metagen/
│ ├── metagen.c
│ ├── metagen.h
│ ├── metagen_base/
│ │ ├── metagen_base_arena.c
│ │ ├── metagen_base_arena.h
│ │ ├── metagen_base_command_line.c
│ │ ├── metagen_base_command_line.h
│ │ ├── metagen_base_context_cracking.h
│ │ ├── metagen_base_core.c
│ │ ├── metagen_base_core.h
│ │ ├── metagen_base_entry_point.c
│ │ ├── metagen_base_entry_point.h
│ │ ├── metagen_base_inc.c
│ │ ├── metagen_base_inc.h
│ │ ├── metagen_base_log.c
│ │ ├── metagen_base_log.h
│ │ ├── metagen_base_markup.c
│ │ ├── metagen_base_markup.h
│ │ ├── metagen_base_math.c
│ │ ├── metagen_base_math.h
│ │ ├── metagen_base_meta.c
│ │ ├── metagen_base_meta.h
│ │ ├── metagen_base_profile.c
│ │ ├── metagen_base_profile.h
│ │ ├── metagen_base_strings.c
│ │ ├── metagen_base_strings.h
│ │ ├── metagen_base_thread_context.c
│ │ └── metagen_base_thread_context.h
│ ├── metagen_main.c
│ └── metagen_os/
│ ├── core/
│ │ ├── linux/
│ │ │ ├── metagen_os_core_linux.c
│ │ │ └── metagen_os_core_linux.h
│ │ ├── metagen_os_core.c
│ │ ├── metagen_os_core.h
│ │ └── win32/
│ │ ├── metagen_os_core_win32.c
│ │ └── metagen_os_core_win32.h
│ ├── metagen_os_inc.c
│ └── metagen_os_inc.h
├── msf/
│ ├── msf.c
│ ├── msf.h
│ ├── msf_parse.c
│ └── msf_parse.h
├── msvc_crt/
│ ├── msvc_crt.c
│ └── msvc_crt.h
├── mule/
│ ├── inline_body.cpp
│ ├── mule_c.c
│ ├── mule_c.h
│ ├── mule_hotload_main.c
│ ├── mule_hotload_module_main.c
│ ├── mule_inline.cpp
│ ├── mule_main.cpp
│ ├── mule_module.cpp
│ ├── mule_o2.cpp
│ ├── mule_peb_trample.c
│ └── mule_peb_trample_reload.c
├── mutable_text/
│ ├── mutable_text.c
│ └── mutable_text.h
├── natvis/
│ └── base.natvis
├── os/
│ ├── core/
│ │ ├── linux/
│ │ │ ├── os_core_linux.c
│ │ │ ├── os_core_linux.h
│ │ │ ├── os_core_linux_old.c
│ │ │ └── os_core_linux_old.h
│ │ ├── os_core.c
│ │ ├── os_core.h
│ │ └── win32/
│ │ ├── os_core_win32.c
│ │ └── os_core_win32.h
│ ├── gfx/
│ │ ├── generated/
│ │ │ ├── os_gfx.meta.c
│ │ │ └── os_gfx.meta.h
│ │ ├── linux/
│ │ │ ├── os_gfx_linux.c
│ │ │ └── os_gfx_linux.h
│ │ ├── os_gfx.c
│ │ ├── os_gfx.h
│ │ ├── os_gfx.mdesk
│ │ ├── stub/
│ │ │ ├── os_gfx_stub.c
│ │ │ └── os_gfx_stub.h
│ │ └── win32/
│ │ ├── os_gfx_win32.c
│ │ └── os_gfx_win32.h
│ ├── os_inc.c
│ └── os_inc.h
├── pdb/
│ ├── pdb.c
│ ├── pdb.h
│ ├── pdb_parse.c
│ ├── pdb_parse.h
│ ├── pdb_stringize.c
│ └── pdb_stringize.h
├── pe/
│ ├── dos_program.asm
│ ├── pe.c
│ ├── pe.h
│ ├── pe_make_debug_dir.c
│ ├── pe_make_debug_dir.h
│ ├── pe_make_export_table.c
│ ├── pe_make_export_table.h
│ ├── pe_make_import_table.c
│ ├── pe_make_import_table.h
│ └── pe_section_flags.h
├── radbin/
│ ├── generated/
│ │ ├── radbin.meta.c
│ │ └── radbin.meta.h
│ ├── radbin.c
│ ├── radbin.h
│ ├── radbin.mdesk
│ └── radbin_main.c
├── raddbg/
│ ├── generated/
│ │ ├── raddbg.meta.c
│ │ └── raddbg.meta.h
│ ├── raddbg.mdesk
│ ├── raddbg_core.c
│ ├── raddbg_core.h
│ ├── raddbg_eval.c
│ ├── raddbg_eval.h
│ ├── raddbg_inc.c
│ ├── raddbg_inc.h
│ ├── raddbg_legacy_config.c
│ ├── raddbg_legacy_config.h
│ ├── raddbg_main.c
│ ├── raddbg_views.c
│ ├── raddbg_views.h
│ ├── raddbg_widgets.c
│ └── raddbg_widgets.h
├── raddump/
│ ├── raddump.c
│ ├── raddump.h
│ └── raddump_main.c
├── rdi/
│ ├── rdi.mdesk
│ ├── rdi_local.c
│ └── rdi_local.h
├── rdi_from_coff/
│ ├── rdi_from_coff.c
│ └── rdi_from_coff.h
├── rdi_from_dwarf/
│ ├── rdi_from_dwarf.c
│ └── rdi_from_dwarf.h
├── rdi_from_elf/
│ ├── rdi_from_elf.c
│ └── rdi_from_elf.h
├── rdi_from_pdb/
│ ├── rdi_from_pdb.c
│ └── rdi_from_pdb.h
├── rdi_make/
│ ├── rdi_make_local.c
│ └── rdi_make_local.h
├── regs/
│ ├── generated/
│ │ ├── regs.meta.c
│ │ └── regs.meta.h
│ ├── rdi/
│ │ ├── generated/
│ │ │ ├── regs_rdi.meta.c
│ │ │ └── regs_rdi.meta.h
│ │ ├── regs_rdi.c
│ │ ├── regs_rdi.h
│ │ └── regs_rdi.mdesk
│ ├── regs.c
│ ├── regs.h
│ └── regs.mdesk
├── render/
│ ├── d3d11/
│ │ ├── generated/
│ │ │ ├── render_d3d11.meta.c
│ │ │ └── render_d3d11.meta.h
│ │ ├── render_d3d11.c
│ │ ├── render_d3d11.h
│ │ └── render_d3d11.mdesk
│ ├── generated/
│ │ ├── render.meta.c
│ │ └── render.meta.h
│ ├── opengl/
│ │ ├── generated/
│ │ │ ├── render_opengl.meta.c
│ │ │ └── render_opengl.meta.h
│ │ ├── linux/
│ │ │ ├── egl/
│ │ │ │ ├── render_opengl_linux_egl.c
│ │ │ │ └── render_opengl_linux_egl.h
│ │ │ ├── glx/
│ │ │ │ ├── render_opengl_linux_glx.c
│ │ │ │ └── render_opengl_linux_glx.h
│ │ │ ├── render_opengl_linux.c
│ │ │ └── render_opengl_linux.h
│ │ ├── render_opengl.c
│ │ ├── render_opengl.h
│ │ ├── render_opengl.mdesk
│ │ └── win32/
│ │ ├── render_opengl_win32.c
│ │ └── render_opengl_win32.h
│ ├── render_core.c
│ ├── render_core.h
│ ├── render_core.mdesk
│ ├── render_inc.c
│ ├── render_inc.h
│ └── stub/
│ ├── render_stub.c
│ └── render_stub.h
├── scratch/
│ ├── debugstringperf.c
│ ├── eval_scratch.c
│ ├── parse_inline_sites.c
│ ├── ryan_scratch.c
│ └── textperf.c
├── stap/
│ ├── stap_parse.c
│ ├── stap_parse.h
│ └── stap_test.c
├── strip_lib_debug/
│ └── strip_lib_debug.c
├── tester/
│ └── tester_main.c
├── text/
│ ├── generated/
│ │ ├── text.meta.c
│ │ └── text.meta.h
│ ├── text.c
│ ├── text.h
│ └── text.mdesk
├── third_party/
│ ├── blake3/
│ │ ├── asm/
│ │ │ ├── LICENSE
│ │ │ ├── blake3.c
│ │ │ ├── blake3.h
│ │ │ ├── blake3_avx2_x86-64_unix.S
│ │ │ ├── blake3_avx2_x86-64_windows_msvc.asm
│ │ │ ├── blake3_avx512_x86-64_unix.S
│ │ │ ├── blake3_avx512_x86-64_windows_msvc.asm
│ │ │ ├── blake3_dispatch.c
│ │ │ ├── blake3_impl.h
│ │ │ ├── blake3_neon.c
│ │ │ ├── blake3_portable.c
│ │ │ ├── blake3_sse2_x86-64_unix.S
│ │ │ ├── blake3_sse2_x86-64_windows_msvc.asm
│ │ │ ├── blake3_sse41_x86-64_unix.S
│ │ │ └── blake3_sse41_x86-64_windows_msvc.asm
│ │ └── c/
│ │ ├── LICENSE
│ │ ├── blake3.c
│ │ ├── blake3.h
│ │ ├── blake3_avx2.c
│ │ ├── blake3_avx512.c
│ │ ├── blake3_dispatch.c
│ │ ├── blake3_impl.h
│ │ ├── blake3_neon.c
│ │ ├── blake3_portable.c
│ │ ├── blake3_sse2.c
│ │ └── blake3_sse41.c
│ ├── martins_hash/
│ │ ├── md5.h
│ │ ├── sha1.h
│ │ ├── sha256.h
│ │ └── sha512.h
│ ├── rad_lzb_simple/
│ │ ├── rad_lzb_simple.c
│ │ └── rad_lzb_simple.h
│ ├── radsort/
│ │ └── radsort.h
│ ├── sinfl/
│ │ └── sinfl.h
│ ├── stb/
│ │ ├── stb_image.h
│ │ └── stb_sprintf.h
│ ├── xxHash/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── SECURITY.md
│ │ ├── doc/
│ │ │ ├── README.md
│ │ │ ├── xxhash.cry
│ │ │ └── xxhash_spec.md
│ │ ├── xxh3.h
│ │ ├── xxh_x86dispatch.c
│ │ ├── xxh_x86dispatch.h
│ │ ├── xxhash.c
│ │ └── xxhash.h
│ └── zydis/
│ ├── zydis.c
│ └── zydis.h
├── torture/
│ └── torture.c
├── ui/
│ ├── generated/
│ │ ├── ui.meta.c
│ │ └── ui.meta.h
│ ├── ui.mdesk
│ ├── ui_basic_widgets.c
│ ├── ui_basic_widgets.h
│ ├── ui_core.c
│ ├── ui_core.h
│ ├── ui_inc.c
│ └── ui_inc.h
└── x64/
├── x64.c
└── x64.h
================================================
FILE CONTENTS
================================================
================================================
FILE: .gitattributes
================================================
*.sh text=auto eol=lf
================================================
FILE: .github/workflows/builds.yml
================================================
name: builds
on:
push:
paths-ignore:
- '**.md'
pull_request:
paths-ignore:
- '**.md'
jobs:
build-windows-2022:
runs-on: windows-2022
strategy:
fail-fast: false
matrix:
target:
- raddbg
- radlink
- radbin
compiler:
- msvc
- clang
mode:
- debug
- release
steps:
- name: checkout
uses: actions/checkout@v2
- name: build (vs 2022)
shell: cmd
run: |
call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" x64
call build "${{ matrix.target }}" "${{ matrix.compiler }}" "${{ matrix.mode }}" || exit /b 1
run-torture:
runs-on: windows-2022
steps:
# - name: Install ASAN
# shell: cmd
# run: |
# "C:\Program Files (x86)\Microsoft Visual Studio\Installer\vs_installer.exe" modify --installPath "C:\Program Files\Microsoft Visual Studio\2022\Enterprise" --quiet --force --norestart --add Microsoft.VisualStudio.Component.VC.ASAN
- name: checkout
uses: actions/checkout@v2
- name: run-torture
shell: cmd
run: |
call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" x64
call build radlink asan debug no_meta || exit /b 1
call build torture debug no_meta || exit /b 1
cd build
torture -l:radlink || exit /b 1
================================================
FILE: .gitignore
================================================
/build/
/local/
*~
================================================
FILE: CHANGELOG.md
================================================
# v0.9.24-alpha
## Debugger Changes
- Added the ability for the debugger to load, use, and evaluate using debug
info, even when not actively debugging. The debugger will now keep a process'
debug info loaded, even after the process ends. It stores the set of loaded
debug info files in the project configuration file, meaning it will also
automatically load the same debug info across many runs. Debug info can also
be loaded manually (without ever launching a process) with the
`Load Debug Info` command. There is also a new tab, `Debug Info`, which allows
viewing and managing the set of loaded debug info files.
- Improved the debugger's behavior when used as a drag & drop target, to allow
for debug info loading as an option (when relevant), and to better handle the
case where many files (potentially of different types) are dropped together.
- Improved debug info searching performance and reponsiveness in large projects.
- Fixed some crashes and incorrect results with the new `list` view.
- Fixed some cases where RDIs did not contain some basic types from their
originating PDBs.
- Allowed `.` and `->` operators to be used with array types.
- Fixed the debugger's treatment of quoted command line arguments when building
targets. In previous versions, calling `raddbg main.exe "foo bar baz"` would
create a target `main.exe` with arguments `foo bar baz` (dropping the quotes).
This is now fixed, such that the target's arguments string will also contain
the quotes, and pass them to the target when launched.
- Fixed the debugger not correctly responding (through font and UI scale) to DPI
changes.
- Fixed the debugger incorrectly generating conflicting source line info records
in PDB -> RDI conversion, which in some scenarios was preventing source line
maps from working (leading to breakpoint resolution failing).
- Other small fixes, improvements, and tweaks.
# v0.9.23-alpha
## Debugger Changes
- Further improved PDB -> RDI conversion performance & memory usage.
- Adjusted limits for the amount of PDB -> RDI conversion work that the
debugger will kick off, to prevent PDB -> RDI conversion interfering with
debuggee performance.
- Reintroduced the `list` lens, which gathers all nodes in a linked list, and
visualizes them as a flat list of pointers (the same as how an array of
pointers is visualized).
- Fixed a crash when closing empty Geometry 3D views. (#652, #657)
- Fixed the debugger not visualizing `enum` types when evaluated through a
bitfield type. (#655)
- Fixed the PDB -> RDI conversion not correctly generating location information
for function parameters, when the EXE/PDB were built to include support for
Edit and Continue (`-ZI` switch). (#656)
## Binary Utility Changes
- Fixed a crash when using the `--compress` option, when generating RDI files.
# v0.9.22-alpha
## Debugger Changes
- Further improved PDB -> RDI conversion performance.
- Capped the number of additional threads / processes spawned for PDB -> RDI
conversion.
- Prioritize PDB -> RDI conversion based on what is actually found to be
necessary by the debugger, rather than converting all PDBs in the order in
which they're discovered.
- Added preliminary support for DWARF -> RDI conversion on Windows.
- The debugger now relies on source file checksums to determine whether or not
a source file is out-of-date with respect to what was compiled when debug info
was produced, rather than just the modification timestamp.
- The debugger now will rely on debug info to detect the language of source code
files, if it cannot infer from the source file's extension, or view settings.
This will enable features like syntax highlighting and hover evaluation in
cases like `.inl` files being included in C++ projects.
- The debugger now will restore the last focused window when continuing
automatically. (#245, #596)
- Watch tables have been simplified in that they no longer have a separate
column for evaluation types, since this was usually taking a lot more space
than it deserved. The type of evaluations is still displayed in watch table
cells, and it can always be evaluated directly via `typeof`.
- Type evaluations have been simplified in watch tables as well; they no longer
have untitled columns for sizes and offsets, this is instead displayed as
an extra note by default. Similar behavior to the original behavior can still
be obtained using the `columns` view, if needed.
- The debugger no longer uses complex `union` types for most registers, and
instead just displays the register value plainly.
- The hover evaluation UI has been made larger when needed.
- The debugger now prefers matching global, function, and type identifiers to
the most relevant debug info and module in context; this fixes evaluation in
some multi-process debugging contexts. (#581)
- Fixed the debugger unnecessarily stripping `enum` type information when
accessed through array operators. (#634)
- The debugger now understands a standalone `unsigned` keyword as an
`unsigned int` type, to match C rules.
- The debugger now uses the current working directory to form the working
directory for targets specified on the command line, to match behavior when
running a command from the command line without the debugger.
- Improved call stack computation performance.
- Improved debugger memory usage over long periods of time.
- Fixed string-pointer comparison not working with not-equal (`!=`) operations.
- Fixed a bug which was causing bad debuggee performance on some threads after
some interactions with the debugger controller.
- Fixed incorrect results when adding two register values. (#642)
- Fixed the interpretation of register expressions in visualizers. (#649)
- Fixed "forever loading" states in disassembly views in some cases. (#643)
- Fixed jittering on window resizing. (#636)
- Fixed the bitmap visualizer crashing in some circumstances relating to
unsupported bitmap sizes. (#444, #563)
- Fixed a crash when an empty `cast()` expression would be evaluated. (#625)
- Fixed a crash when an invalid expression would be visualized using the `text`
view. (#647)
## Linker Changes
- Changed symbol resolution in libaries to match MSVC behavior.
- Optimized image building step to reduce memory usage.
- Linker memory maps all input files by default to lower memory usage.
(`/RAD_MEMORY_MAP_FILES`)
- If debug info is available, linker uses it to show file and line number for
unresolved relocations.
- Improved base relocation build performance for large images, cutting build
time by 70%.
- Added stubs for `/Brepro`, `/D2`, and /ErrorReport to improve compatability
with existing response files
- Implemented section garbage collection (`/OPT:REF`)
- Fixed bug where thread local variables pointed to incorrect types.
- Changed rules for weak and undefined symbols, now weak symbol is not allowed
to replace an undefined symbol.
- Linker no longer creates thunks for imports that don't require them.
## Binary Utility Changes
- The binary utility, like the debugger, now can convert DWARF debug info to
RDI files. When both DWARF and PDB info is present, it can now convert both,
and produce a single final RDI file with all information.
- Textual dumping of RDI files is now done in parallel, massively improving
dumping performance.
- PDB -> Breakpad conversion performance has now been parallelized to a greater
degree, improving performance.
================================================
FILE: LICENSE
================================================
Copyright (c) Epic Games Tools
Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the “Software”), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
of the Software, and to permit persons to whom the Software is furnished to do
so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
================================================
FILE: README.md
================================================
# The RAD Debugger Project
_**NOTE:** This README does not document usage instructions and tips for the
debugger itself, and is intended as a technical overview of the project. The
debugger's README, which includes usage instructions and tips, can be found
packaged along with debugger releases, or within the `build` folder after a
local copy has been built. You can find pre-built release binaries
[here](https://github.com/EpicGamesExt/raddebugger/releases)._
The RAD Debugger is a native, user-mode, multi-process, graphical debugger. It
currently only supports local-machine Windows x64 debugging with PDBs, with
plans to expand and port in the future. In the future we'll expand to also
support native Linux debugging and DWARF debug info.
The debugger is currently in *ALPHA*. In order to get the debugger
bullet-proof, it'd greatly help out if you submitted the issues you find
[here](https://github.com/EpicGamesExt/raddebugger/issues), along with any
information you can gather, like dump files (along with the build you used),
instructions to reproduce, test executables, and so on.
In addition to the debugger, we aim to further improve the toolchain with two
additional related technologies: **(1)** the RAD Debug Info (RDI) format, and
**(2)** the RAD Linker.
## The RAD Debug Info (RDI) Format
The RAD Debug Info (RDI) format is our custom debug information format, which
the debugger parses and uses, rather than the debug information natively
produced by toolchains, like PDB or DWARF. To work with these existing
toolchains, we convert PDB (and eventually PE/ELF files with embedded DWARF)
into the RDI format on-demand.
The RDI format is currently specified in code, in the files within the
`src/lib_rdi` folder. In [`rdi.h`](src/lib_rdi/rdi.h) and
[`rdi.c`](src/lib_rdi/rdi.c), the types and functions which define the format
itself are specified. In [`rdi_parse.h`](src/lib_rdi/rdi_parse.h) and
[`rdi_parse.c`](src/lib_rdi/rdi_parse.c), helpers for parsing the format are
included.
We also have an in-progress library for constructing and serializing RDI data,
located within the `src/lib_rdi_make` folder.
Our `radbin` utility (accessible through the debugger too, via the `--bin`
command line argument) is capable of converting native debug information formats
to RDI, and of producing textual dumps of contents stored within RDI files.
## The RAD Linker
The RAD Linker is a new performance linker for generating x64 PE/COFF binaries.
It is designed to be very fast when creating gigantic executables. It generates
standard PDB files for debugging, but it can also (optionally) natively create
RAD Debug Info too, which is useful both to eliminate on-demand conversion time
when debugging, but also for huge executables that otherwise create broken
PDBs that overflow internal 32-bit tables.
The RAD Linker is primarily optimized to handle huge linking projects. In our
test cases (where debug info is multiple gigabytes), we see 50% faster link
times.
The command line syntax is fully compatible with MSVC; you can get a full list
of implemented switches from `/help`.
Our current designed-for use case for the linker is to help with the
compile-debug cycle of huge projects. We don't yet have support for
link-time-optimizations, but this feature is on the road map.
By default, the linker spawns as many threads as there are cores, so if you plan
to run multiple linkers in parallel, you can limit the number of thread workers
via `/rad_workers`.
We also have support for large memory pages, which, when enabled, reduce link
time by another 25%. To link with large pages, you need to explicitly request
them via `/rad_large_pages`. Large pages are off by default, since Windows
support for large pages is a bit buggy; we recommend they only be used in Docker
or VM images where the environment is reset after each link. In a standard
Windows environment, using large pages otherwise will fragment memory quickly,
forcing a reboot. We are working on a Linux port of the linker that will be able
to build with large pages robustly.
A benchmark of the linker's performance is below:

---
# Project Development Setup Instructions
**NOTE: Currently, only x64 Windows development is supported for the project.**
## 1. Installing the Required Tools (MSVC & Windows SDK)
In order to work with the codebase, you'll need the [Microsoft C/C++ Build Tools
v15 (2017) or later](https://aka.ms/vs/17/release/vs_BuildTools.exe), for both
the Windows SDK and the MSVC compiler and linker.
If the Windows SDK is installed (e.g. via installation of the Microsoft C/C++
Build Tools), you may also build with [Clang](https://releases.llvm.org/).
## 2. Build Environment Setup
Building the codebase can be done in a terminal which is equipped with the
ability to call either MSVC or Clang from command line.
This is generally done by calling `vcvarsall.bat x64`, which is included in the
Microsoft C/C++ Build Tools. This script is automatically called by the `x64
Native Tools Command Prompt for VS <year>` variant of the vanilla `cmd.exe`. If
you've installed the build tools, this command prompt may be easily located by
searching for `Native` from the Windows Start Menu search.
You can ensure that the MSVC compiler is accessible from your command line by
running:
```
cl
```
If everything is set up correctly, you should have output very similar to the
following:
```
Microsoft (R) C/C++ Optimizing Compiler Version 19.29.30151 for x64
Copyright (C) Microsoft Corporation. All rights reserved.
usage: cl [ option... ] filename... [ /link linkoption... ]
```
### 3. Building
Within this terminal, `cd` to the root directory of the codebase, and just run
the `build.bat` script:
```
build
```
You should see the following output:
```
[debug mode]
[msvc compile]
[default mode, assuming `raddbg` build]
metagen_main.c
searching C:\devel\raddebugger/src... 458 files found
parsing metadesk... 16 metadesk files parsed
gathering tables... 97 tables found
generating layer code...
raddbg_main.c
```
If everything worked correctly, there will be a `build` folder in the root
level of the codebase, and it will contain a freshly-built `raddbg.exe`.
This `raddbg.exe` will have been built in **debug mode**, which is not built
with optimizations, and may perform worse. To produce a
**release mode executable**, run `build.bat` with a `release` argument:
```
build release
```
This build will take significantly longer.
By default, `build.bat` only builds the debugger if no arguments (or just
`release`) are passed, but additional arguments can be passed to build the RAD
Linker, or the `radbin` CLI binary file utility:
```
build radlink release
build radbin release
```
---
# Project Roadmap
### The Initial Alpha Battle-Testing Phase
The first priority for the project is to ensure that the most crucial components
are functioning extremely reliably for local, x64, Windows development.
For the debugger, this would include parts like debug info conversion, debug
info loading, process control, stepping, evaluation (correct usage of both
location info and type info), and a robust frontend which ensures the lower
level parts are usable. For the linker, this is a matter of reliability and
convergence with existing linker behavior.
We feel that we've already come a long way in all of these respects, but given
the massive set of possible combinations of languages, build settings,
toolchains, used language features, and patterns of generated code, we still
expect some issues, and are prioritizing these issues being resolved first.
We also hope to continue to improve performance in this phase. For the debugger,
this primarily includes frontend performance, introducing caches when economical
to do so, and tightening existing systems up. For the linker, it has been mostly
tuned thus far for giant projects, and so we'd like to improve linking speed for
small-to-mid sized projects as well.
For the linker, there are also a number of features to come, like
dead-code-elimination (`/opt:ref`), and link-time-optimizations with the help
of `clang` (we won't support LTCG from MSVC, since it is undocumented).
### Local x64 Linux Debugging Phase
The next priority for the project is to take the rock solid x64 Windows
debugging experience, and port all of the relevant pieces to support local x64
Linux debugging also.
The debugger has been written to abstract over the parts that need to differ on
either Linux or Windows, and this is mainly going to be a task in building out
different backends for those abstraction layers.
The major parts of this phase are:
- Porting the `src/demon` layer to implement the Demon local process control
abstraction API.
- Implementing an x64 ELF Linux unwinder in the `src/ctrl` layer.
- Creating a DWARF-to-RDI converter (in the same way that we've built a
PDB-to-RDI converter). A partial implementation of this is in
`src/rdi_from_dwarf`.
- Porting the `src/render` layer to implement all of the rendering features the
frontend needs on a Linux-compatible API (the backend used on Windows is D3D11).
- Porting the `src/font_provider` layer to a Linux-compatible font
rasterization backend, like FreeType (the backend used on Windows is
DirectWrite).
- Porting the `src/os` layers to Linux. This includes core operating system
abstraction (virtual memory allocation, threading and synchronization
primitives, and so on), and graphical operating system abstraction (windows,
input events, and so on).
Once the above list is complete, and once every part is rock solid, the Windows
debugging experience we'll have worked diligently to create will also be
available natively on Linux machines.
### And Beyond!
There are several directions we might take after these two major phases,
like remote debugging, porting to different architectures, further improving
the debugger's features (like improving the visualization engine), and so on.
But for now, we're mostly focused on those first two phases.
---
# Codebase Introduction
## Top-Level Directory Descriptions
- `data`: Small binary files which are used when building, either to embed
within build artifacts, or to package with them.
- `src`: All source code.
After setting up the codebase and building, the following directories will
also exist:
- `build`: All build artifacts. Not checked in to version control.
- `local`: Local files, used for local build configuration input files. Not
checked in to version control.
## Layer Descriptions
The codebase is organized into *layers*. Layers are separated either to isolate
certain problems, and to allow inclusion into various builds without needing to
pull everything in the codebase into a build. Layers correspond with folders
inside of the `src` directory. Sometimes, one folder inside of the `src`
directory will include multiple sub-layers, but the structure is intended to be
fairly flat.
Layers correspond roughly 1-to-1 with *namespaces*. The term "namespaces" in
this context does not refer to specific namespace language features, but rather
a naming convention for C-style namespaces, which are written in the codebase as
a short prefix, usually 1-3 characters, followed by an underscore. These
namespaces are used such that the layer to which certain code belongs may be
quickly understood by glancing at code. The namespaces are generally quite short
to ensure that they aren't much of a hassle to write. Sometimes, multiple sub-
layers will share a namespace. A few layers do not have a namespace, but most
do. Namespaces are either all-caps or lowercase depending on the context in
which they're used. For types, enum values, and some macros, they are
capitalized. For functions and global variables, they are lowercase.
Layers depend on other layers, but circular dependencies would break the
separability and isolation utility of layers (in effect, forming one big layer),
so in other words, layers are arranged into a directed acyclic graph.
A few layers are built to be used completely independently from the rest of the
codebase, as libraries in other codebases and projects. As such, these layers do
not depend on any other layers in the codebase. The folders which contain these
layers are prefixed with `lib_`, like `lib_rdi`.
A list of the layers in the codebase and their associated namespaces is below:
- `artifact_cache` (`AC_`): Implements an asynchronously-filled cache of
computation artifacts, which are automatically evicted when not accessed. Used
for asynchronously streaming and caching process memory and file system
contents, as well as asynchronously preparing visualizer data.
- `base` (no namespace): Universal, codebase-wide constructs. Strings, math,
memory allocators, helper macros, command-line parsing, and so on. Requires
no other codebase layers.
- `codeview` (`CV_`): Code for parsing and writing the CodeView format.
- `coff` (`COFF_`): Code for parsing and writing the COFF (Common Object File
Format) file format.
- `content` (`C_`): Implements a cache for general data blobs, keyed by a
128-bit hash of the data. Also implements a keying system on top, where keys
refer to a unique identity which corresponds to a history of 128-bit hashes.
Used as a general data store by other layers.
- `ctrl` (`CTRL_`): The debugger's "control system" layer. Implements
asynchronous process control, stepping, and breakpoints for all attached
processes. Runs in lockstep with attached processes. When it runs, attached
processes are halted. When attached processes are running, it is halted.
Driven by a debugger frontend on another thread.
- `dbg_engine` (`D_`): Implements the core debugger system, without any
graphical components. This contains top-level logic for things like stepping,
launching, freezing threads, mid-run breakpoint addition, some caches, and so
on.
- `dbg_info` (`DI_`): Implements asynchronous debug info conversion and loading.
Maintains a cache for loaded debug info. Loads RAD Debug Info (RDI) files.
Launches separate processes for on-demand conversion to the RDI format if
necessary. Also provides various asynchronous operations for using debug info,
like fuzzy searching across all records in loaded debug info.
- `demon` (`DMN_`): An abstraction layer for local-machine, low-level process
control. The abstraction is used to provide a common interface for process
control on target platforms. Used to implement part of `ctrl`.
- `disasm` (`DASM_`): Implements disassembly generation, including exposing the
ability to compute and cache disassembly asynchronously.
- `draw` (`DR_`): Implements a high-level graphics drawing API for the
debugger's purposes, using the underlying `render` abstraction layer. Provides
high-level APIs for various draw commands, but takes care of batching them,
and so on.
- `dwarf` (`DW_`): Code for parsing the DWARF format.
- `eh` (`EH_`): Code for parsing the EH frame format.
- `elf` (`ELF_`): Code for parsing the ELF format.
- `eval` (`E_`): A compiler for an expression language, built for evaluation of
variables, registers, types, and more, from debugger-attached processes,
debug info, debugger state, and files. Broken into several phases mostly
corresponding to traditional compiler phases: lexer, parser, type-checker, IR
generation, and IR evaluation.
- `eval_visualization` (`EV_`): Implements the core non-graphical evaluation
visualization engine, which can be used to visualize evaluations (provided by
the `eval` layer) in a number of ways. Implements core data structures and
transforms for watch tables.
- `file_stream` (`FS_`): Implements asynchronous file streaming, storing the
artifacts inside of the cache implemented by the `content` and
`artifact_cache` layers, hot-reloading the contents of files when they change.
Allows callers to map file paths to data hashes, which can then be used to
obtain the file's data.
- `font_cache` (`FNT_`): Implements a cache of rasterized font data, both in
CPU-side data for text shaping, and in GPU texture atlases for rasterized
glyphs. All cache information is sourced from the `font_provider` abstraction
layer.
- `font_provider` (`FP_`): An abstraction layer for various font file decoding
and font rasterization backends.
- `lib_raddbg_markup` (`RADDBG_`): Standalone library for marking up user
programs to work with various features in the debugger. Does not depend on
`base`, and can be independently relocated to other codebases.
- `lib_rdi` (`RDI_`): Standalone library which defines the core RDI types
and helper functions for reading and writing the RDI debug info file format.
Does not depend on `base`, and can be independently relocated to other
codebases.
- `lib_rdi_make` (`RDIM_`): Standalone library for constructing RDI debug info
data. Does not depend on `base`, and can be independently relocated
to other codebases.
- `linker` (`LNK_`): The layer which implements the RAD Linker executable
itself.
- `mdesk` (`MD_`): Code for parsing Metadesk files (stored as `.mdesk`), which
is the JSON-like (technically a JSON superset) text format used for the
debugger's user and project configuration files and metacode, which is parsed
and used to generate code with the `metagen` layer.
- `metagen` (`MG_`): A metaprogram which is used to generate primarily code and
data tables. Consumes Metadesk files, stored with the extension `.mdesk`, and
generates C code which is then included by hand-written C code. Currently, it
does not analyze the codebase's hand-written C code, but in principle this is
possible. This allows easier & less-error-prone management of large data
tables, which are then used to produce e.g. C `enum`s and a number of
associated data tables. There are also a number of other generation features,
like embedding binary files or complex multi-line strings into source code.
- `msf` (`MSF_`): Code for parsing and writing the MSF file format.
- `msvc_crt` (`MSCRT_`): Code for parsing that's specific to the MSVC CRT.
- `mule` (no namespace): Test executables for battle testing debugger
functionality.
- `mutable_text` (`MTX_`): Implements an asynchronously-filled-and-mutated
cache for text buffers which are mutated across time. In the debugger, this is
used to implement the `Output` log.
- `natvis` (no namespace): NatVis files for type visualization of the codebase's
types in other debuggers.
- `os/core` (`OS_`): An abstraction layer providing core, non-graphical
functionality from the operating system under an abstract API, which is
implemented per-target-operating-system.
- `os/gfx` (`OS_`): An abstraction layer, building on `os/core`, providing
graphical operating system features under an abstract API, which is
implemented per-target-operating-system.
- `pdb` (`PDB_`): Code for parsing and writing the PDB file format.
- `pe` (`PE_`): Code for parsing and writing the PE (Portable Executable) file
format.
- `radbin` (`RB_`): The layer implementing the `radbin` binary utility
executable.
- `raddbg` (`RD_`): The layer which ties everything together for the main
graphical debugger executable. Implements the debugger's graphical frontend,
all of the debugger-specific UI, the debugger executable's command line
interface, and all of the built-in visualizers.
- `rdi` (`RDI_`): A layer which includes the `lib_rdi` layer and bundles it with
codebase-specific helpers, to easily include the library in codebase programs,
and have it be integrated with codebase constructs.
- `rdi_from_coff` (`C2R_`): Code for converting information in COFF files to the
equivalent RDI data.
- `rdi_from_dwarf` (`D2R_`): In-progress code for converting DWARF to the
equivalent RDI data.
- `rdi_from_elf` (`E2R_`)): Code for converting ELF data to the equivalent RDI
data.
- `rdi_from_pdb` (`P2R_`): Code for converting PDB data to the equivalent RDI
data.
- `rdi_make` (`RDIM_`): A layer which includes the `lib_rdi_make` layer and
bundles it with codebase-specific helpers, to easily include the library in
codebase programs, and have it be integrated with codebase constructs.
- `regs` (`REGS_`): Types, helper functions, and metadata for registers on
supported architectures. Used in reading/writing registers in `demon`, or in
looking up register metadata.
- `render` (`R_`): An abstraction layer providing an abstract API for rendering
using various GPU APIs under a common interface. Does not implement a high
level drawing API - this layer is strictly for minimally abstracting on an
as-needed basis. Higher level drawing features are implemented in the `draw`
layer.
- `scratch` (no namespace): Scratch space for small and transient test programs.
- `tester` (no namespace): A program used for automated testing.
- `text` (`TXT_`): Implements text processing functions, like parsing line
breaks, and lexing and parsing source code. Also offers an API to do this
asynchronously.
- `third_party` (no namespace): External code from other projects, which some
layers in the codebase depend on. All external code is included and built
directly within the codebase.
- `ui` (`UI_`): Machinery for building graphical user interfaces. Provides a
core immediate mode hierarchical user interface data structure building
API, and has helper layers for building some higher-level widgets.
================================================
FILE: build.bat
================================================
@echo off
setlocal enabledelayedexpansion
cd /D "%~dp0"
:restart
:: --- Usage Notes (2024/1/10) ------------------------------------------------
::
:: This is a central build script for the RAD Debugger project, for use in
:: Windows development environments. It takes a list of simple alphanumeric-
:: only arguments which control (a) what is built, (b) which compiler & linker
:: are used, and (c) extra high-level build options. By default, if no options
:: are passed, then the main "raddbg" graphical debugger is built.
::
:: Below is a non-exhaustive list of possible ways to use the script:
:: `build raddbg`
:: `build raddbg clang`
:: `build raddbg release`
:: `build raddbg asan telemetry`
:: `build rdi_from_pdb`
::
:: For a full list of possible build targets and their build command lines,
:: search for @build_targets in this file.
::
:: Below is a list of all possible non-target command line options:
::
:: - `asan`: enable address sanitizer
:: - `telemetry`: enable RAD telemetry profiling support
:: - `spall`: enable spall profiling support
:: --- Unpack Arguments -------------------------------------------------------
for %%a in (%*) do set "%%~a=1"
if not "%msvc%"=="1" if not "%clang%"=="1" set msvc=1
if not "%release%"=="1" set debug=1
if "%debug%"=="1" set release=0 && echo [debug mode]
if "%release%"=="1" set debug=0 && echo [release mode]
if "%msvc%"=="1" set clang=0 && echo [msvc compile]
if "%clang%"=="1" set msvc=0 && echo [clang compile]
if "%~1"=="" echo [default mode, assuming `raddbg` build] && set raddbg=1
if "%~1"=="release" if "%~2"=="" echo [default mode, assuming `raddbg` build] && set raddbg=1
:: --- Unpack Command Line Build Arguments ------------------------------------
set auto_compile_flags=
if "%telemetry%"=="1" set auto_compile_flags=%auto_compile_flags% -DPROFILE_TELEMETRY=1 && echo [telemetry profiling enabled]
if "%spall%"=="1" set auto_compile_flags=%auto_compile_flags% -DPROFILE_SPALL=1 && echo [spall profiling enabled]
if "%asan%"=="1" set auto_compile_flags=%auto_compile_flags% -fsanitize=address && echo [asan enabled]
if "%opengl%"=="1" set auto_compile_flags=%auto_compile_flags% -DR_BACKEND=R_BACKEND_OPENGL && echo [opengl render backend]
if "%dwarf%"=="1" if "%clang%"=="1" set auto_compile_flags=%auto_compile_flags% -gdwarf && echo [dwarf debug info]
if "%dwarf%"=="" if "%clang%"=="1" set auto_compile_flags=%auto_compile_flags% -gcodeview
if "%pgo%"=="1" (
where llvm-profdata /q || echo llvm-profdata is not in the PATH || exit /b 1
if "%clang%"=="1" (
if "%pgo_run%" == "1" (
call llvm-profdata merge %LLVM_PROFILE_FILE% -output=%~dp0build\build.profdata || exit /b 1
set auto_compile_flags=%auto_compile_flags% -fprofile-use=%~dp0build\build.profdata
set pgo_run=0
) else (
echo [pgo enabled]
set auto_compile_flags=%auto_compile_flags% -fprofile-generate -mllvm -vp-counters-per-site=5
set LLVM_PROFILE_FILE=%~dp0build\build.profraw
set pgo_run=1
)
) else (
echo ERROR: PGO build is not supported with current compiler
exit /b 1
)
)
:: --- Compile/Link Line Definitions ------------------------------------------
set cl_common= /I..\src\ /I..\local\ /nologo /FC /Z7
set cl_debug= call cl /Od /Ob1 /DBUILD_DEBUG=1 %cl_common% %auto_compile_flags%
set cl_release= call cl /O2 /DBUILD_DEBUG=0 %cl_common% %auto_compile_flags%
set cl_link= /link /MANIFEST:EMBED /INCREMENTAL:NO /pdbaltpath:%%%%_PDB%%%% /NATVIS:"%~dp0\src\natvis\base.natvis" /noexp /nocoffgrpinfo /opt:ref /opt:icf
set cl_out= /out:
set cl_linker=
set clang_common= -I..\src\ -I..\local\ -fdiagnostics-absolute-paths -Wall -Wno-unknown-warning-option -Wno-missing-braces -Wno-unused-function -Wno-unused-parameter -Wno-writable-strings -Wno-missing-field-initializers -Wno-unused-value -Wno-unused-variable -Wno-unused-local-typedef -Wno-deprecated-register -Wno-deprecated-declarations -Wno-unused-but-set-variable -Wno-single-bit-bitfield-constant-conversion -Wno-compare-distinct-pointer-types -Wno-initializer-overrides -Wno-incompatible-pointer-types-discards-qualifiers -Xclang -flto-visibility-public-std -D_USE_MATH_DEFINES -Dstrdup=_strdup -Dgnu_printf=printf -ferror-limit=10000 -mcx16 -msha
set clang_debug= call clang -g -O0 -DBUILD_DEBUG=1 %clang_common% %auto_compile_flags%
set clang_release= call clang -g -O2 -DBUILD_DEBUG=0 %clang_common% %auto_compile_flags%
set clang_link= -fuse-ld=lld -Xlinker /MANIFEST:EMBED -Xlinker /pdbaltpath:%%%%_PDB%%%% -Xlinker /NATVIS:"%~dp0\src\natvis\base.natvis" -Xlinker /opt:ref -Xlinker /opt:icf
set clang_out= -o
set clang_linker= -Xlinker
:: --- Per-Build Settings -----------------------------------------------------
set link_dll=-DLL
set link_icon=logo.res
if "%msvc%"=="1" set linker=%cl_linker%
if "%clang%"=="1" set linker=%clang_linker%
if "%msvc%"=="1" set only_compile=/c
if "%clang%"=="1" set only_compile=-c
if "%msvc%"=="1" set EHsc=/EHsc
if "%clang%"=="1" set EHsc=
if "%msvc%"=="1" set no_aslr=/DYNAMICBASE:NO
if "%clang%"=="1" set no_aslr=-Wl,/DYNAMICBASE:NO
if "%msvc%"=="1" set rc=call rc
if "%clang%"=="1" set rc=call llvm-rc
:: --- Choose Compile/Link Lines ----------------------------------------------
if "%msvc%"=="1" set compile_debug=%cl_debug%
if "%msvc%"=="1" set compile_release=%cl_release%
if "%msvc%"=="1" set compile_link=%cl_link%
if "%msvc%"=="1" set out=%cl_out%
if "%clang%"=="1" set compile_debug=%clang_debug%
if "%clang%"=="1" set compile_release=%clang_release%
if "%clang%"=="1" set compile_link=%clang_link%
if "%clang%"=="1" set out=%clang_out%
if "%debug%"=="1" set compile=%compile_debug%
if "%release%"=="1" set compile=%compile_release%
:: --- Prep Directories -------------------------------------------------------
if not exist build mkdir build
if not exist local mkdir local
:: --- Produce Logo Icon File -------------------------------------------------
pushd build
%rc% /nologo /fo logo.res ..\data\logo.rc || exit /b 1
popd
:: --- Get Current Git Commit Id ----------------------------------------------
for /f %%i in ('call git describe --always --dirty') do set compile=%compile% -DBUILD_GIT_HASH=\"%%i\"
for /f %%i in ('call git rev-parse HEAD') do set compile=%compile% -DBUILD_GIT_HASH_FULL=\"%%i\"
:: --- Build & Run Metaprogram ------------------------------------------------
if "%meta%"=="1" (
echo [doing metagen]
pushd build
%compile_debug% ..\src\metagen\metagen_main.c %compile_link% %out%metagen.exe || exit /b 1
metagen.exe || exit /b 1
popd
)
:: --- Build Everything (@build_targets) --------------------------------------
pushd build
if "%raddbg%"=="1" set didbuild=1 && %compile% ..\src\raddbg\raddbg_main.c %compile_link% %link_icon% %out%raddbg.exe || exit /b 1
if "%radlink%"=="1" set didbuild=1 && %compile% ..\src\linker\lnk.c %compile_link% %linker% /NOIMPLIB %linker% /NATVIS:"%~dp0\src\linker\linker.natvis" %out%radlink.exe || exit /b 1
if "%radbin%"=="1" set didbuild=1 && %compile% ..\src\radbin\radbin_main.c %compile_link% %out%radbin.exe || exit /b 1
if "%raddump%"=="1" set didbuild=1 && %compile% ..\src\raddump\raddump_main.c %compile_link% %out%raddump.exe || exit /b 1
if "%tester%"=="1" set didbuild=1 && %compile% ..\src\tester\tester_main.c %compile_link% %out%tester.exe || exit /b 1
if "%ryan_scratch%"=="1" set didbuild=1 && %compile% ..\src\scratch\ryan_scratch.c %compile_link% %out%ryan_scratch.exe || exit /b 1
if "%eval_scratch%"=="1" set didbuild=1 && %compile% ..\src\scratch\eval_scratch.c %compile_link% %out%eval_scratch.exe || exit /b 1
if "%textperf%"=="1" set didbuild=1 && %compile% ..\src\scratch\textperf.c %compile_link% %out%textperf.exe || exit /b 1
if "%convertperf%"=="1" set didbuild=1 && %compile% ..\src\scratch\convertperf.c %compile_link% %out%convertperf.exe || exit /b 1
if "%debugstringperf%"=="1" set didbuild=1 && %compile% ..\src\scratch\debugstringperf.c %compile_link% %out%debugstringperf.exe || exit /b 1
if "%parse_inline_sites%"=="1" set didbuild=1 && %compile% ..\src\scratch\parse_inline_sites.c %compile_link% %out%parse_inline_sites.exe || exit /b 1
if "%strip_lib_debug%"=="1" set didbuild=1 && %compile% ..\src\strip_lib_debug\strip_lib_debug.c %compile_link% %out%strip_lib_debug.exe || exit /b 1
if "%mule_main%"=="1" set didbuild=1 && del vc*.pdb mule*.pdb && %compile_release% %only_compile% ..\src\mule\mule_inline.cpp && %compile_release% %only_compile% ..\src\mule\mule_o2.cpp && %compile_debug% %EHsc% ..\src\mule\mule_main.cpp ..\src\mule\mule_c.c mule_inline.obj mule_o2.obj %compile_link% %no_aslr% %out%mule_main.exe || exit /b 1
if "%mule_module%"=="1" set didbuild=1 && %compile% ..\src\mule\mule_module.cpp %compile_link% %link_dll% %out%mule_module.dll || exit /b 1
if "%mule_hotload%"=="1" set didbuild=1 && %compile% ..\src\mule\mule_hotload_main.c %compile_link% %out%mule_hotload.exe & %compile% ..\src\mule\mule_hotload_module_main.c %compile_link% %link_dll% %out%mule_hotload_module.dll || exit /b 1
if "%torture%"=="1" set didbuild=1 && %compile% ..\src\torture\torture.c %compile_link% %out%torture.exe || exit /b1
if "%mule_peb_trample%"=="1" (
set didbuild=1
if exist mule_peb_trample.exe move mule_peb_trample.exe mule_peb_trample_old_%random%.exe
if exist mule_peb_trample_new.pdb move mule_peb_trample_new.pdb mule_peb_trample_old_%random%.pdb
if exist mule_peb_trample_new.rdi move mule_peb_trample_new.rdi mule_peb_trample_old_%random%.rdi
%compile% ..\src\mule\mule_peb_trample.c %compile_link% %out%mule_peb_trample_new.exe || exit /b 1
move mule_peb_trample_new.exe mule_peb_trample.exe
)
popd
:: --- Warn On No Builds ------------------------------------------------------
if "%didbuild%"=="" (
echo [WARNING] no valid build target specified; must use build target names as arguments to this script, like `build raddbg` or `build rdi_from_pdb`.
exit /b 1
)
:: --- PGO Run ----------------------------------------------------------------
if "%pgo_run%"=="1" (
if "%radlink%"=="1" (
pushd local\lyra_pgo
call %~dp0build\radlink @lyra.rsp /rad_alt_pch_dir:%~dp0local\lyra_pgo || exit /b 1
popd
)
goto restart
)
================================================
FILE: build.sh
================================================
#!/bin/bash
set -eu
cd "$(dirname "$0")"
# --- Unpack Arguments --------------------------------------------------------
for arg in "$@"; do declare $arg='1'; done
if [ ! -v gcc ]; then clang=1; fi
if [ ! -v release ]; then debug=1; fi
if [ -v debug ]; then echo "[debug mode]"; fi
if [ -v release ]; then echo "[release mode]"; fi
if [ -v clang ]; then compiler="${CC:-clang}"; echo "[clang compile]"; fi
if [ -v gcc ]; then compiler="${CC:-gcc}"; echo "[gcc compile]"; fi
# --- Unpack Command Line Build Arguments -------------------------------------
auto_compile_flags=''
# --- Get Current Git Commit Id -----------------------------------------------
git_hash=$(git describe --always --dirty)
git_hash_full=$(git rev-parse HEAD)
# --- Compile/Link Line Definitions -------------------------------------------
clang_common="-I../src/ -I/usr/include/freetype2/ -I../local/ -D_GNU_SOURCE -g -DBUILD_GIT_HASH=\"$git_hash\" -DBUILD_GIT_HASH_FULL=\"$git_hash_full\" -Wno-unknown-warning-option -fdiagnostics-absolute-paths -Wall -Wno-missing-braces -Wno-unused-function -Wno-writable-strings -Wno-unused-value -Wno-unused-variable -Wno-unused-local-typedef -Wno-deprecated-register -Wno-deprecated-declarations -Wno-unused-but-set-variable -Wno-single-bit-bitfield-constant-conversion -Wno-compare-distinct-pointer-types -Wno-initializer-overrides -Wno-incompatible-pointer-types-discards-qualifiers -Wno-for-loop-analysis -Xclang -flto-visibility-public-std -D_USE_MATH_DEFINES -Dstrdup=_strdup -Dgnu_printf=printf"
clang_debug="$compiler -g -O0 -DBUILD_DEBUG=1 ${clang_common} ${auto_compile_flags}"
clang_release="$compiler -g -O2 -DBUILD_DEBUG=0 ${clang_common} ${auto_compile_flags}"
clang_link="-lpthread -lm -lrt -ldl"
clang_out="-o"
gcc_common="-I../src/ -I../local/ -g -D_GNU_SOURCE -DBUILD_GIT_HASH=\"$git_hash\" -DBUILD_GIT_HASH_FULL=\"$git_hash_full\" -Wno-unknown-warning-option -Wall -Wno-missing-braces -Wno-unused-function -Wno-attributes -Wno-unused-value -Wno-unused-variable -Wno-unused-local-typedef -Wno-deprecated-declarations -Wno-unused-but-set-variable -Wno-compare-distinct-pointer-types -D_USE_MATH_DEFINES -Dstrdup=_strdup -Dgnu_printf=printf"
gcc_debug="$compiler -g -O0 -DBUILD_DEBUG=1 ${gcc_common} ${auto_compile_flags}"
gcc_release="$compiler -g -O2 -DBUILD_DEBUG=0 ${gcc_common} ${auto_compile_flags}"
gcc_link="-lpthread -lm -lrt -ldl"
gcc_out="-o"
# --- Per-Build Settings ------------------------------------------------------
link_dll="-fPIC"
link_os_gfx="-lX11 -lXext"
link_render="-lGL -lEGL"
link_font_provider="-lfreetype"
# --- Choose Compile/Link Lines -----------------------------------------------
if [ -v gcc ]; then compile_debug="$gcc_debug"; fi
if [ -v gcc ]; then compile_release="$gcc_release"; fi
if [ -v gcc ]; then compile_link="$gcc_link"; fi
if [ -v gcc ]; then out="$gcc_out"; fi
if [ -v clang ]; then compile_debug="$clang_debug"; fi
if [ -v clang ]; then compile_release="$clang_release"; fi
if [ -v clang ]; then compile_link="$clang_link"; fi
if [ -v clang ]; then out="$clang_out"; fi
if [ -v debug ]; then compile="$compile_debug"; fi
if [ -v release ]; then compile="$compile_release"; fi
# --- Prep Directories --------------------------------------------------------
mkdir -p build
mkdir -p local
# --- Build & Run Metaprogram -------------------------------------------------
if [ -v meta ]
then
echo "[doing metagen]"
cd build
$compile_debug ../src/metagen/metagen_main.c $compile_link $out metagen
./metagen
cd ..
fi
# --- Build Everything (@build_targets) ---------------------------------------
cd build
if [ -v raddbg ]; then didbuild=1 && $compile ../src/raddbg/raddbg_main.c $compile_link $link_os_gfx $link_render $link_font_provider $out raddbg; fi
if [ -v radbin ]; then didbuild=1 && $compile ../src/radbin/radbin_main.c $compile_link $out radbin; fi
if [ -v radlink ]; then didbuild=1 && $compile ../src/linker/lnk.c $compile_link $out radlink; fi
cd ..
# --- Warn On No Builds -------------------------------------------------------
if [ ! -v didbuild ]
then
echo "[WARNING] no valid build target specified; must use build target names as arguments to this script, like \`./build.sh raddbg\` or \`./build.sh rdi_from_pdb\`."
exit 1
fi
================================================
FILE: data/logo.rc
================================================
1 ICON DISCARDABLE "logo.ico"
================================================
FILE: project.4coder
================================================
version(2);
project_name = "The RAD Debugger";
indent_width = "2";
default_tab_width = "2";
patterns =
{
"*.c",
"*.cpp",
"*.h",
"*.inc",
"*.hpp",
"*.bat",
"*.sh",
"*.4coder",
"*.glsl",
"*.bfs",
"*.html",
"*.txt",
"*.md",
"*.mdesk",
"*.asm",
};
blacklist_patterns =
{
".*",
"metagen_base_*",
"metagen_os_*",
};
paths =
{
{ .path = ".", .recursive = false, .relative = true, },
{ .path = "src", .recursive = true , .relative = true, },
{ .path = "local", .recursive = true , .relative = true, },
};
load_paths =
{
.win = paths,
.linux = paths,
};
commands =
{
//- rjf: [raddbg]
// .f1 = { .win = "raddbg_stable --ipc kill_all && build raddbg meta telemetry", .linux = "", .out = "*compilation*", .footer_panel = true, .save_dirty_files = true, .cursor_at_end = false, },
.f1 = { .win = "raddbg_stable --ipc kill_all && build radbin debug telemetry", .linux = "", .out = "*compilation*", .footer_panel = true, .save_dirty_files = true, .cursor_at_end = false, },
//- rjf: [raddbg wsl]
// .f1 = { .win = "wsl ./build.sh raddbg", .linux = "", .out = "*compilation*", .footer_panel = true, .save_dirty_files = true, .cursor_at_end = false, },
//- rjf: [scratch]
.f2 = { .win = "wsl ./build.sh raddbg", .linux = "", .out = "*compilation*", .footer_panel = true, .save_dirty_files = true, .cursor_at_end = false, },
//- rjf: [textperf]
// .f1 = { .win = "raddbg_stable --ipc kill_all && build no_meta telemetry textperf && raddbg_stable --ipc bring_to_front && raddbg_stable --ipc run", .linux = "", .out = "*compilation*", .footer_panel = true, .save_dirty_files = true, .cursor_at_end = false, },
//- rjf: [tester]
// .f1 = { .win = "raddbg_stable --ipc kill_all && build no_meta tester", .linux = "", .out = "*compilation*", .footer_panel = true, .save_dirty_files = true, .cursor_at_end = false, },
//- rjf: [radbin]
// .f1 = { .win = "raddbg_stable --ipc kill_all && build radbin", .linux = "", .out = "*compilation*", .footer_panel = true, .save_dirty_files = true, .cursor_at_end = false, },
//- rjf: running target
.f3 = { .win = "raddbg_stable --ipc run", .linux = "", .out = "*compilation*", .footer_panel = true, .save_dirty_files = true, .cursor_at_end = false, },
// .f3 = { .win = "wsl ./build/raddbg", .linux = "", .out = "*compilation*", .footer_panel = true, .save_dirty_files = true, .cursor_at_end = false, },
// .f3 = { .win = "pushd build && raddbg --user:dev.raddbg_user && popd", .linux = "", .out = "*compilation*", .footer_panel = true, .save_dirty_files = true, .cursor_at_end = false, },
// .f3 = { .win = "C:/devel/raddebugger/build/raddbg.exe --capture --user:C:/devel/raddebugger/build/local_dev.raddbg_user --project:C:/devel/raddebugger/build/local_dev.raddbg_project", .linux = "", .out = "*compilation*", .footer_panel = true, .save_dirty_files = true, .cursor_at_end = false, },
// .f3 = { .win = "wsl_launch /mnt/c/devel/raddebugger/build/raddbg", .linux = "", .out = "*compilation*", .footer_panel = true, .save_dirty_files = true, .cursor_at_end = false, },
//- rjf: local target builds
.build_raddbg = { .win = "build raddbg", .linux = "", .out = "*compilation*", .footer_panel = true, .save_dirty_files = true, .cursor_at_end = false, },
.build_rdi_from_pdb = { .win = "build rdi_from_pdb", .linux = "", .out = "*compilation*", .footer_panel = true, .save_dirty_files = true, .cursor_at_end = false, },
.build_rdi_from_dwarf = { .win = "build rdi_from_dwarf", .linux = "", .out = "*compilation*", .footer_panel = true, .save_dirty_files = true, .cursor_at_end = false, },
.build_rdi_dump = { .win = "build rdi_dump", .linux = "", .out = "*compilation*", .footer_panel = true, .save_dirty_files = true, .cursor_at_end = false, },
.build_rdi_breakpad_from_pdb = { .win = "build rdi_breakpad_from_pdb", .linux = "", .out = "*compilation*", .footer_panel = true, .save_dirty_files = true, .cursor_at_end = false, },
.build_ryan_scratch = { .win = "build ryan_scratch", .linux = "", .out = "*compilation*", .footer_panel = true, .save_dirty_files = true, .cursor_at_end = false, },
.build_mule_main = { .win = "build mule_main", .linux = "", .out = "*compilation*", .footer_panel = true, .save_dirty_files = true, .cursor_at_end = false, },
.build_mule_module = { .win = "build mule_module", .linux = "", .out = "*compilation*", .footer_panel = true, .save_dirty_files = true, .cursor_at_end = false, },
.build_mule_hotload = { .win = "build mule_hotload", .linux = "", .out = "*compilation*", .footer_panel = true, .save_dirty_files = true, .cursor_at_end = false, },
.build_mule_peb_trample = { .win = "build mule_peb_trample", .linux = "", .out = "*compilation*", .footer_panel = true, .save_dirty_files = true, .cursor_at_end = false, },
//- rjf: wsl target builds
.build_raddbg_wsl = { .win = "wsl ./build.sh raddbg", .linux = "", .out = "*compilation*", .footer_panel = true, .save_dirty_files = true, .cursor_at_end = false, },
.build_rdi_from_pdb_wsl = { .win = "wsl ./build.sh rdi_from_pdb", .linux = "", .out = "*compilation*", .footer_panel = true, .save_dirty_files = true, .cursor_at_end = false, },
.build_rdi_from_dwarf_wsl = { .win = "wsl ./build.sh rdi_from_dwarf", .linux = "", .out = "*compilation*", .footer_panel = true, .save_dirty_files = true, .cursor_at_end = false, },
.build_rdi_dump_wsl = { .win = "wsl ./build.sh rdi_dump", .linux = "", .out = "*compilation*", .footer_panel = true, .save_dirty_files = true, .cursor_at_end = false, },
.build_rdi_breakpad_from_pdb_wsl = { .win = "wsl ./build.sh rdi_breakpad_from_pdb", .linux = "", .out = "*compilation*", .footer_panel = true, .save_dirty_files = true, .cursor_at_end = false, },
.build_ryan_scratch_wsl = { .win = "wsl ./build.sh ryan_scratch", .linux = "", .out = "*compilation*", .footer_panel = true, .save_dirty_files = true, .cursor_at_end = false, },
.build_mule_main_wsl = { .win = "wsl ./build.sh mule_main", .linux = "", .out = "*compilation*", .footer_panel = true, .save_dirty_files = true, .cursor_at_end = false, },
.build_mule_module_wsl = { .win = "wsl ./build.sh mule_module", .linux = "", .out = "*compilation*", .footer_panel = true, .save_dirty_files = true, .cursor_at_end = false, },
.build_mule_hotload_wsl = { .win = "wsl ./build.sh mule_hotload", .linux = "", .out = "*compilation*", .footer_panel = true, .save_dirty_files = true, .cursor_at_end = false, },
.build_mule_peb_trample_wsl = { .win = "wsl ./build.sh mule_peb_trample", .linux = "", .out = "*compilation*", .footer_panel = true, .save_dirty_files = true, .cursor_at_end = false, },
//- rjf: local target runs
.run_raddbg = { .win = "pushd build && raddbg.exe && popd", .linux = "", .out = "*compilation*", .footer_panel = true, .save_dirty_files = true, .cursor_at_end = false, },
};
fkey_command =
{
.F1 = "f1",
.F2 = "f2",
.F3 = "f3",
};
fkey_command_override =
{
.rjf =
{
.F1 = "f1",
.F2 = "f2",
.F3 = "f3",
},
};
================================================
FILE: run_tests.bat
================================================
@echo off
setlocal
cd /D "%~dp0"
echo --- getting test data folder path ---------------------------------------------
if not exist .\local\test_data_path.txt (
echo error: You must first store the full path of your test data folder inside of `local/test_data_path.txt`.
goto :EOF
)
set /p test_data_folder=<.\local\test_data_path.txt
echo test data path: %test_data_folder%
echo:
echo --- building all testing executables ------------------------------------------
call build rdi_from_pdb rdi_dump raddbg radlink tester
echo:
echo --- running tests -------------------------------------------------------------
pushd build
call tester.exe --test_data:%test_data_folder%
popd
================================================
FILE: src/artifact_cache/artifact_cache.c
================================================
// Copyright (c) Epic Games Tools
// Licensed under the MIT license (https://opensource.org/license/mit/)
////////////////////////////////
//~ rjf: Layer Initialization
internal void
ac_init(void)
{
Arena *arena = arena_alloc();
ac_shared = push_array(arena, AC_Shared, 1);
ac_shared->arena = arena;
ac_shared->cache_slots_count = 256;
ac_shared->cache_slots = push_array(arena, AC_Cache *, ac_shared->cache_slots_count);
ac_shared->cache_stripes = stripe_array_alloc(arena);
for EachElement(idx, ac_shared->req_batches)
{
ac_shared->req_batches[idx].mutex = mutex_alloc();
ac_shared->req_batches[idx].arena = arena_alloc();
}
ac_shared->cancel_thread = thread_launch(ac_cancel_thread_entry_point, 0);
ac_shared->cancel_thread_semaphore = semaphore_alloc(0, 1, str8_zero());
}
////////////////////////////////
//~ rjf: Cache Lookups
internal AC_Artifact
ac_artifact_from_key_(Access *access, String8 key, AC_ArtifactParams *params, U64 endt_us)
{
ProfBeginFunction();
AC_RequestBatch *req_batch = &ac_shared->req_batches[params->flags & AC_Flag_HighPriority ? 0 : 1];
//- rjf: create function -> cache
AC_Cache *cache = 0;
{
U64 cache_hash = u64_hash_from_str8(str8_struct(¶ms->create));
U64 cache_slot_idx = cache_hash%ac_shared->cache_slots_count;
Stripe *cache_stripe = stripe_from_slot_idx(&ac_shared->cache_stripes, cache_slot_idx);
for(B32 write_mode = 0; write_mode <= 1; write_mode += 1)
{
RWMutexScope(cache_stripe->rw_mutex, write_mode)
{
for(AC_Cache *c = ac_shared->cache_slots[cache_slot_idx]; c != 0; c = c->next)
{
if(c->create == params->create)
{
cache = c;
break;
}
}
if(write_mode && cache == 0)
{
cache = push_array(cache_stripe->arena, AC_Cache, 1);
SLLStackPush(ac_shared->cache_slots[cache_slot_idx], cache);
cache->create = params->create;
cache->destroy = params->destroy;
cache->slots_count = Max(256, params->slots_count);
cache->slots = push_array(cache_stripe->arena, AC_Slot, cache->slots_count);
cache->stripes = stripe_array_alloc(cache_stripe->arena);
}
}
if(cache != 0)
{
break;
}
}
}
//- rjf: unpack key
U64 hash = u64_hash_from_str8(key);
U64 slot_idx = hash%cache->slots_count;
AC_Slot *slot = &cache->slots[slot_idx];
Stripe *stripe = stripe_from_slot_idx(&cache->stripes, slot_idx);
//- rjf: cache * key -> existing artifact
B32 artifact_is_stale = 1;
B32 got_artifact = 0;
B32 need_request = 0;
AC_Artifact artifact = {0};
RWMutexScope(stripe->rw_mutex, 0)
{
for(AC_Node *n = slot->first; n != 0; n = n->next)
{
if(str8_match(n->key, key, 0))
{
ins_atomic_u64_eval_assign(&n->last_requested_gen, params->gen);
B32 is_stale = (n->last_completed_gen != params->gen);
if(ins_atomic_u64_eval(&n->completion_count) != 0 && (!is_stale || !(params->flags & AC_Flag_WaitForFresh)))
{
got_artifact = 1;
artifact_is_stale = is_stale;
artifact = n->val;
access_touch(access, &n->access_pt, stripe->cv);
}
if(is_stale)
{
B32 got_task = (ins_atomic_u64_eval_cond_assign(&n->working_count, 1, 0) == 0);
need_request = got_task;
}
break;
}
}
}
//- rjf: didn't get artifact we want? -> fall back to slow path
if(!got_artifact || need_request)
{
RWMutexScope(stripe->rw_mutex, 1) for(;;)
{
B32 out_of_time = (os_now_microseconds() >= endt_us);
// rjf: find node in cache
AC_Node *node = 0;
for(AC_Node *n = slot->first; n != 0; n = n->next)
{
if(str8_match(n->key, key, 0))
{
node = n;
break;
}
}
// rjf: no node? -> create
if(node == 0)
{
need_request = 1;
node = stripe->free;
if(node)
{
stripe->free = node->next;
}
else
{
node = push_array_no_zero(stripe->arena, AC_Node, 1);
}
MemoryZeroStruct(node);
DLLPushBack(slot->first, slot->last, node);
// TODO(rjf): string allocator for keys
node->key = str8_copy(stripe->arena, key);
node->working_count = 1;
node->evict_threshold_us = params->evict_threshold_us;
}
node->access_pt.last_time_touched_us = os_now_microseconds();
node->access_pt.last_update_idx_touched = update_tick_idx();
// rjf: request
if(need_request)
{
need_request = 0;
MutexScope(req_batch->mutex)
{
AC_RequestNode *n = push_array(req_batch->arena, AC_RequestNode, 1);
if(params->flags & AC_Flag_Wide)
{
SLLQueuePush(req_batch->first_wide, req_batch->last_wide, n);
req_batch->wide_count += 1;
}
else
{
SLLQueuePush(req_batch->first_thin, req_batch->last_thin, n);
req_batch->thin_count += 1;
}
n->v.key = str8_copy(req_batch->arena, key);
n->v.gen = params->gen;
n->v.cancel_signal = &node->cancelled;
n->v.create = params->create;
}
cond_var_broadcast(async_tick_start_cond_var);
ins_atomic_u32_eval_assign(&async_loop_again, 1);
if(params->flags & AC_Flag_HighPriority)
{
ins_atomic_u32_eval_assign(&async_loop_again_high_priority, 1);
}
}
// rjf: get value from node, if possible
if(!got_artifact && ins_atomic_u64_eval(&node->completion_count) != 0 && ((node->last_completed_gen == params->gen) || !(params->flags & AC_Flag_WaitForFresh) || out_of_time))
{
got_artifact = 1;
artifact_is_stale = (node->last_completed_gen == params->gen);
artifact = node->val;
access_touch(access, &node->access_pt, stripe->cv);
}
// rjf: abort if needed
if(out_of_time || got_artifact || is_async_thread)
{
break;
}
// rjf: wait for results
cond_var_wait_rw(stripe->cv, stripe->rw_mutex, 1, endt_us);
}
}
//- rjf: report staleness
if(params->stale_out)
{
params->stale_out[0] = artifact_is_stale;
}
ProfEnd();
return artifact;
}
////////////////////////////////
//~ rjf: Asynchronous Tick
internal void
ac_async_tick(void)
{
Temp scratch = scratch_begin(0, 0);
//////////////////////////////
//- rjf: enable cancellation scanning
//
if(lane_idx() == 0)
{
semaphore_drop(ac_shared->cancel_thread_semaphore);
}
//////////////////////////////
//- rjf: do eviction pass across all caches
//
for EachIndex(cache_slot_idx, ac_shared->cache_slots_count)
{
Stripe *cache_stripe = stripe_from_slot_idx(&ac_shared->cache_stripes, cache_slot_idx);
RWMutexScope(cache_stripe->rw_mutex, 0)
{
for EachNode(cache, AC_Cache, ac_shared->cache_slots[cache_slot_idx])
{
Rng1U64 slot_range = lane_range(cache->slots_count);
for EachInRange(slot_idx, slot_range)
{
AC_Slot *slot = &cache->slots[slot_idx];
Stripe *stripe = stripe_from_slot_idx(&cache->stripes, slot_idx);
for(B32 write_mode = 0; write_mode <= 1; write_mode += 1)
{
B32 slot_has_work = 0;
RWMutexScope(stripe->rw_mutex, write_mode)
{
for(AC_Node *n = slot->first, *next = 0; n != 0; n = next)
{
next = n->next;
if(access_pt_is_expired(&n->access_pt, .time = n->evict_threshold_us) && ins_atomic_u64_eval(&n->working_count) == 0)
{
slot_has_work = 1;
if(!write_mode)
{
break;
}
else
{
DLLRemove(slot->first, slot->last, n);
n->next = (AC_Node *)stripe->free;
stripe->free = n;
if(cache->destroy)
{
cache->destroy(n->val);
}
}
}
}
}
if(!slot_has_work)
{
break;
}
}
}
}
}
}
//////////////////////////////
//- rjf: gather requests
//
typedef struct RequestBatchTask RequestBatchTask;
struct RequestBatchTask
{
AC_Request *wide;
U64 wide_count;
AC_Request *thin;
U64 thin_count;
};
RequestBatchTask *tasks = 0;
U64 tasks_count = 0;
if(lane_idx() == 0)
{
tasks_count = 2;
tasks = push_array(scratch.arena, RequestBatchTask, tasks_count);
for EachElement(task_idx, ac_shared->req_batches)
{
AC_RequestBatch *batch = &ac_shared->req_batches[task_idx];
MutexScope(batch->mutex)
{
tasks[task_idx].wide_count = batch->wide_count;
tasks[task_idx].thin_count = batch->thin_count;
tasks[task_idx].wide = push_array(scratch.arena, AC_Request, tasks[task_idx].wide_count);
tasks[task_idx].thin = push_array(scratch.arena, AC_Request, tasks[task_idx].thin_count);
{
U64 idx = 0;
for EachNode(n, AC_RequestNode, batch->first_wide)
{
MemoryCopyStruct(&tasks[task_idx].wide[idx], &n->v);
tasks[task_idx].wide[idx].key = str8_copy(scratch.arena, tasks[task_idx].wide[idx].key);
idx += 1;
}
}
{
U64 idx = 0;
for EachNode(n, AC_RequestNode, batch->first_thin)
{
MemoryCopyStruct(&tasks[task_idx].thin[idx], &n->v);
tasks[task_idx].thin[idx].key = str8_copy(scratch.arena, tasks[task_idx].thin[idx].key);
idx += 1;
}
}
arena_clear(batch->arena);
batch->first_wide = batch->last_wide = batch->first_thin = batch->last_thin = 0;
batch->wide_count = batch->thin_count = 0;
}
}
}
lane_sync_u64(&tasks, 0);
lane_sync_u64(&tasks_count, 0);
lane_sync();
//////////////////////////////
//- rjf: do all requests
//
for EachIndex(task_idx, tasks_count)
{
lane_sync();
RequestBatchTask *task = &tasks[task_idx];
//- rjf: set up cancellation signal
U64 cancelled = 0;
U64 *cancelled_ptr = 0;
if(lane_idx() == 0)
{
cancelled_ptr = &cancelled;
}
lane_sync_u64(&cancelled_ptr, 0);
//- rjf: do all wide requests for this priority
U64 done_wide_count = 0;
ProfScope("wide requests (p%I64u)", task_idx)
{
for EachIndex(idx, task->wide_count)
{
lane_sync();
AC_Request *r = &task->wide[idx];
// rjf: any new higher priority tasks? -> cancel
if(lane_idx() == 0)
{
if(task_idx == 1 && idx != 0 && ins_atomic_u32_eval(&async_loop_again_high_priority))
{
ins_atomic_u64_eval_assign(cancelled_ptr, 1);
}
}
lane_sync();
// rjf: cancelled? -> exit
if(ins_atomic_u32_eval(cancelled_ptr))
{
break;
}
// rjf: compute val
B32 retry = 0;
U64 gen = r->gen;
AC_Artifact val = r->create(r->key, r->cancel_signal, &retry, &gen);
// rjf: retry? -> resubmit request
if(retry && lane_idx() == 0 && !ins_atomic_u32_eval(r->cancel_signal))
{
AC_RequestBatch *batch = &ac_shared->req_batches[task_idx];
MutexScope(batch->mutex)
{
AC_RequestNode *n = push_array(batch->arena, AC_RequestNode, 1);
SLLQueuePush(batch->first_wide, batch->last_wide, n);
batch->wide_count += 1;
MemoryCopyStruct(&n->v, r);
n->v.key = str8_copy(batch->arena, n->v.key);
}
ins_atomic_u32_eval_assign(&async_loop_again, 1);
}
// rjf: create function -> cache
AC_Cache *cache = 0;
if(!retry && lane_idx() == 0)
{
U64 cache_hash = u64_hash_from_str8(str8_struct(&r->create));
U64 cache_slot_idx = cache_hash%ac_shared->cache_slots_count;
Stripe *cache_stripe = stripe_from_slot_idx(&ac_shared->cache_stripes, cache_slot_idx);
RWMutexScope(cache_stripe->rw_mutex, 0)
{
for(AC_Cache *c = ac_shared->cache_slots[cache_slot_idx]; c != 0; c = c->next)
{
if(c->create == r->create)
{
cache = c;
break;
}
}
}
}
// rjf: write value into cache
if(!retry && lane_idx() == 0)
{
U64 hash = u64_hash_from_str8(r->key);
U64 slot_idx = hash%cache->slots_count;
AC_Slot *slot = &cache->slots[slot_idx];
Stripe *stripe = stripe_from_slot_idx(&cache->stripes, slot_idx);
RWMutexScope(stripe->rw_mutex, 1)
{
for(AC_Node *n = slot->first; n != 0; n = n->next)
{
if(str8_match(n->key, r->key, 0))
{
n->last_completed_gen = gen;
n->val = val;
ins_atomic_u64_dec_eval(&n->working_count);
ins_atomic_u64_inc_eval(&n->completion_count);
}
}
}
cond_var_broadcast(stripe->cv);
}
// rjf: increment count
lane_sync();
done_wide_count += 1;
}
}
lane_sync();
//- rjf: do all thin requests for this priority
U64 done_thin_count = 0;
ProfScope("thin requests (p%I64u)", task_idx)
{
U64 req_take_counter = 0;
U64 *req_take_counter_ptr = 0;
if(lane_idx() == 0)
{
req_take_counter_ptr = &req_take_counter;
}
lane_sync_u64(&req_take_counter_ptr, 0);
for(;;)
{
// rjf: any new higher priority tasks? -> cancel
if(task_idx == 1 && ins_atomic_u64_eval(req_take_counter_ptr) >= task->thin_count/2 &&
ins_atomic_u32_eval(&async_loop_again_high_priority))
{
ins_atomic_u64_eval_assign(cancelled_ptr, 1);
}
// rjf: cancelled? -> exit
if(ins_atomic_u64_eval(cancelled_ptr))
{
break;
}
// rjf: take next task
U64 req_idx = ins_atomic_u64_inc_eval(req_take_counter_ptr) - 1;
if(req_idx >= task->thin_count) { break; }
AC_Request *r = &task->thin[req_idx];
// rjf: push thin lane ctx
U64 thin_lane_ctx_broadcast_memory = 0;
LaneCtx thin_lane_ctx = {0, 1, {0}, &thin_lane_ctx_broadcast_memory};
LaneCtx lane_ctx_restore = lane_ctx(thin_lane_ctx);
// rjf: compute val
B32 retry = 0;
U64 gen = r->gen;
AC_Artifact val = r->create(r->key, r->cancel_signal, &retry, &gen);
// rjf: restore wide lane ctx
lane_ctx(lane_ctx_restore);
// rjf: retry? -> resubmit request
if(retry && !ins_atomic_u32_eval(r->cancel_signal))
{
AC_RequestBatch *batch = &ac_shared->req_batches[task_idx];
MutexScope(batch->mutex)
{
AC_RequestNode *n = push_array(batch->arena, AC_RequestNode, 1);
SLLQueuePush(batch->first_thin, batch->last_thin, n);
batch->thin_count += 1;
MemoryCopyStruct(&n->v, r);
n->v.key = str8_copy(batch->arena, n->v.key);
}
ins_atomic_u32_eval_assign(&async_loop_again, 1);
}
// rjf: create function -> cache
AC_Cache *cache = 0;
if(!retry)
{
U64 cache_hash = u64_hash_from_str8(str8_struct(&r->create));
U64 cache_slot_idx = cache_hash%ac_shared->cache_slots_count;
Stripe *cache_stripe = stripe_from_slot_idx(&ac_shared->cache_stripes, cache_slot_idx);
RWMutexScope(cache_stripe->rw_mutex, 0)
{
for(AC_Cache *c = ac_shared->cache_slots[cache_slot_idx]; c != 0; c = c->next)
{
if(c->create == r->create)
{
cache = c;
break;
}
}
}
}
// rjf: write value into cache
if(!retry)
{
U64 hash = u64_hash_from_str8(r->key);
U64 slot_idx = hash%cache->slots_count;
AC_Slot *slot = &cache->slots[slot_idx];
Stripe *stripe = stripe_from_slot_idx(&cache->stripes, slot_idx);
RWMutexScope(stripe->rw_mutex, 1)
{
for(AC_Node *n = slot->first; n != 0; n = n->next)
{
if(str8_match(n->key, r->key, 0))
{
n->last_completed_gen = gen;
n->val = val;
ins_atomic_u64_dec_eval(&n->working_count);
ins_atomic_u64_inc_eval(&n->completion_count);
}
}
}
cond_var_broadcast(stripe->cv);
}
}
lane_sync();
done_thin_count = ins_atomic_u64_eval(req_take_counter_ptr);
lane_sync();
}
//- rjf: cancelled early, unfinished tasks? -> defer to next tick
if(lane_idx() == 0 && task_idx > 0)
{
B32 need_another_try = (done_wide_count < task->wide_count || done_thin_count < task->thin_count);
AC_RequestBatch *batch = &ac_shared->req_batches[task_idx];
MutexScope(batch->mutex)
{
// rjf: push leftover wide tasks
for(U64 idx = done_wide_count; idx < task->wide_count; idx += 1)
{
AC_Request *r = &task->wide[idx];
AC_RequestNode *n = push_array(batch->arena, AC_RequestNode, 1);
SLLQueuePush(batch->first_wide, batch->last_wide, n);
batch->wide_count += 1;
MemoryCopyStruct(&n->v, r);
n->v.key = str8_copy(batch->arena, n->v.key);
}
// rjf: push leftover thin tasks
for(U64 idx = done_thin_count; idx < task->thin_count; idx += 1)
{
AC_Request *r = &task->thin[idx];
AC_RequestNode *n = push_array(batch->arena, AC_RequestNode, 1);
SLLQueuePush(batch->first_thin, batch->last_thin, n);
batch->thin_count += 1;
MemoryCopyStruct(&n->v, r);
n->v.key = str8_copy(batch->arena, n->v.key);
}
}
if(need_another_try)
{
ins_atomic_u32_eval_assign(&async_loop_again, 1);
}
}
lane_sync();
}
lane_sync();
//////////////////////////////
//- rjf: disable cancellation scanning
//
if(lane_idx() == 0)
{
semaphore_take(ac_shared->cancel_thread_semaphore, max_U64);
}
scratch_end(scratch);
}
////////////////////////////////
//~ rjf: Cancel Thread
internal void
ac_cancel_thread_entry_point(void *p)
{
for(;;)
{
os_sleep_milliseconds(50);
semaphore_take(ac_shared->cancel_thread_semaphore, max_U64);
{
for EachIndex(cache_slot_idx, ac_shared->cache_slots_count)
{
Stripe *cache_stripe = stripe_from_slot_idx(&ac_shared->cache_stripes, cache_slot_idx);
RWMutexScope(cache_stripe->rw_mutex, 0)
{
for EachNode(cache, AC_Cache, ac_shared->cache_slots[cache_slot_idx])
{
Rng1U64 slot_range = lane_range(cache->slots_count);
for EachInRange(slot_idx, slot_range)
{
AC_Slot *slot = &cache->slots[slot_idx];
Stripe *stripe = stripe_from_slot_idx(&cache->stripes, slot_idx);
for(B32 write_mode = 0; write_mode <= 1; write_mode += 1)
{
B32 slot_has_work = 0;
RWMutexScope(stripe->rw_mutex, write_mode)
{
for(AC_Node *n = slot->first, *next = 0; n != 0; n = next)
{
next = n->next;
if(access_pt_is_expired(&n->access_pt, .time = n->evict_threshold_us) && ins_atomic_u64_eval(&n->working_count) > 0)
{
slot_has_work = 1;
if(!write_mode)
{
break;
}
else
{
n->cancelled = 1;
}
}
}
}
if(!slot_has_work)
{
break;
}
}
}
}
}
}
}
semaphore_drop(ac_shared->cancel_thread_semaphore);
}
}
================================================
FILE: src/artifact_cache/artifact_cache.h
================================================
// Copyright (c) Epic Games Tools
// Licensed under the MIT license (https://opensource.org/license/mit/)
#ifndef ARTIFACT_CACHE_H
#define ARTIFACT_CACHE_H
////////////////////////////////
//~ rjf: Artifact Handle Type
typedef struct AC_Artifact AC_Artifact;
struct AC_Artifact
{
U64 u64[4];
};
////////////////////////////////
//~ rjf: Artifact Computation Function Types
typedef AC_Artifact AC_CreateFunctionType(String8 key, B32 *cancel_signal, B32 *retry_out, U64 *gen_out);
typedef void AC_DestroyFunctionType(AC_Artifact artifact);
typedef U32 AC_Flags;
typedef enum AC_FlagsEnum
{
AC_Flag_WaitForFresh = (1<<0),
AC_Flag_HighPriority = (1<<1),
AC_Flag_Wide = (1<<2),
}
AC_FlagsEnum;
typedef struct AC_ArtifactParams AC_ArtifactParams;
struct AC_ArtifactParams
{
AC_CreateFunctionType *create;
AC_DestroyFunctionType *destroy;
U64 slots_count;
U64 gen;
U64 evict_threshold_us;
B32 *stale_out;
AC_Flags flags;
};
////////////////////////////////
//~ rjf: Cache Types
typedef struct AC_Request AC_Request;
struct AC_Request
{
String8 key;
U64 gen;
B32 *cancel_signal;
AC_CreateFunctionType *create;
};
typedef struct AC_RequestNode AC_RequestNode;
struct AC_RequestNode
{
AC_RequestNode *next;
AC_Request v;
};
typedef struct AC_Node AC_Node;
struct AC_Node
{
AC_Node *next;
AC_Node *prev;
// rjf: key/gen/value
String8 key;
U64 last_requested_gen;
U64 last_completed_gen;
AC_Artifact val;
// rjf: metadata
AccessPt access_pt;
U64 working_count;
U64 completion_count;
U64 evict_threshold_us;
B32 cancelled;
U64 _unused_;
};
typedef struct AC_Slot AC_Slot;
struct AC_Slot
{
AC_Node *first;
AC_Node *last;
};
typedef struct AC_Cache AC_Cache;
struct AC_Cache
{
// rjf: link / key for cache-cache
AC_Cache *next;
AC_CreateFunctionType *create;
AC_DestroyFunctionType *destroy;
// rjf: artifact cache
U64 slots_count;
AC_Slot *slots;
StripeArray stripes;
};
typedef struct AC_RequestBatch AC_RequestBatch;
struct AC_RequestBatch
{
Mutex mutex;
Arena *arena;
AC_RequestNode *first_wide;
AC_RequestNode *last_wide;
AC_RequestNode *first_thin;
AC_RequestNode *last_thin;
U64 wide_count;
U64 thin_count;
};
typedef struct AC_Shared AC_Shared;
struct AC_Shared
{
Arena *arena;
// rjf: cache cache
U64 cache_slots_count;
AC_Cache **cache_slots;
StripeArray cache_stripes;
// rjf: requests
AC_RequestBatch req_batches[2]; // 0: high priority, 1: low priority
// rjf: cancel thread
Thread cancel_thread;
Semaphore cancel_thread_semaphore;
};
////////////////////////////////
//~ rjf: Globals
global AC_Shared *ac_shared = 0;
////////////////////////////////
//~ rjf: Layer Initialization
internal void ac_init(void);
////////////////////////////////
//~ rjf: Cache Lookups
internal AC_Artifact ac_artifact_from_key_(Access *access, String8 key, AC_ArtifactParams *params, U64 endt_us);
#define ac_artifact_from_key(access, key, create_fn, destroy_fn, endt_us, ...) ac_artifact_from_key_((access), (key), &(AC_ArtifactParams){.create = (create_fn), .destroy = (destroy_fn), .evict_threshold_us = (2000000), __VA_ARGS__}, (endt_us))
////////////////////////////////
//~ rjf: Asynchronous Tick
internal void ac_async_tick(void);
////////////////////////////////
//~ rjf: Cancel Thread
internal void ac_cancel_thread_entry_point(void *p);
#endif // ARTIFACT_CACHE_H
================================================
FILE: src/base/base_arena.c
================================================
// Copyright (c) Epic Games Tools
// Licensed under the MIT license (https://opensource.org/license/mit/)
////////////////////////////////
//~ rjf: Arena Functions
//- rjf: arena creation/destruction
internal Arena *
arena_alloc_(ArenaParams *params)
{
// rjf: round up reserve/commit sizes
U64 reserve_size = params->reserve_size;
U64 commit_size = params->commit_size;
if(params->flags & ArenaFlag_LargePages)
{
reserve_size = AlignPow2(reserve_size, os_get_system_info()->large_page_size);
commit_size = AlignPow2(commit_size, os_get_system_info()->large_page_size);
}
else
{
reserve_size = AlignPow2(reserve_size, os_get_system_info()->page_size);
commit_size = AlignPow2(commit_size, os_get_system_info()->page_size);
}
// rjf: reserve/commit initial block
void *base = params->optional_backing_buffer;
if(base == 0)
{
if(params->flags & ArenaFlag_LargePages)
{
base = os_reserve_large(reserve_size);
os_commit_large(base, commit_size);
}
else
{
base = os_reserve(reserve_size);
os_commit(base, commit_size);
}
raddbg_annotate_vaddr_range(base, reserve_size, "arena %s:%i", params->allocation_site_file, params->allocation_site_line);
}
// rjf: panic on arena creation failure
#if OS_FEATURE_GRAPHICAL
if(Unlikely(base == 0))
{
os_graphical_message(1, str8_lit("Fatal Allocation Failure"), str8_lit("Unexpected memory allocation failure."));
os_abort(1);
}
#endif
// rjf: extract arena header & fill
Arena *arena = (Arena *)base;
arena->current = arena;
arena->flags = params->flags;
arena->cmt_size = params->commit_size;
arena->res_size = params->reserve_size;
arena->base_pos = 0;
arena->pos = ARENA_HEADER_SIZE;
arena->cmt = commit_size;
arena->res = reserve_size;
arena->allocation_site_file = params->allocation_site_file;
arena->allocation_site_line = params->allocation_site_line;
#if ARENA_FREE_LIST
arena->free_last = 0;
#endif
AsanPoisonMemoryRegion(base, commit_size);
AsanUnpoisonMemoryRegion(base, ARENA_HEADER_SIZE);
return arena;
}
internal void
arena_release(Arena *arena)
{
for(Arena *n = arena->current, *prev = 0; n != 0; n = prev)
{
prev = n->prev;
os_release(n, n->res);
}
}
//- rjf: arena push/pop core functions
internal void *
arena_push(Arena *arena, U64 size, U64 align, B32 zero)
{
Arena *current = arena->current;
U64 pos_pre = AlignPow2(current->pos, align);
U64 pos_pst = pos_pre + size;
// rjf: chain, if needed
if(current->res < pos_pst && !(arena->flags & ArenaFlag_NoChain))
{
Arena *new_block = 0;
#if ARENA_FREE_LIST
{
Arena *prev_block;
for(new_block = arena->free_last, prev_block = 0; new_block != 0; prev_block = new_block, new_block = new_block->prev)
{
if(new_block->res >= AlignPow2(new_block->pos, align) + size)
{
if(prev_block)
{
prev_block->prev = new_block->prev;
}
else
{
arena->free_last = new_block->prev;
}
break;
}
}
}
#endif
if(new_block == 0)
{
U64 res_size = current->res_size;
U64 cmt_size = current->cmt_size;
if(size + ARENA_HEADER_SIZE > res_size)
{
res_size = AlignPow2(size + ARENA_HEADER_SIZE, align);
cmt_size = AlignPow2(size + ARENA_HEADER_SIZE, align);
}
new_block = arena_alloc(.reserve_size = res_size,
.commit_size = cmt_size,
.flags = current->flags,
.allocation_site_file = current->allocation_site_file,
.allocation_site_line = current->allocation_site_line);
}
new_block->base_pos = current->base_pos + current->res;
SLLStackPush_N(arena->current, new_block, prev);
current = new_block;
pos_pre = AlignPow2(current->pos, align);
pos_pst = pos_pre + size;
}
// rjf: compute the size we need to zero
U64 size_to_zero = 0;
if(zero)
{
size_to_zero = Min(current->cmt, pos_pst) - pos_pre;
}
// rjf: commit new pages, if needed
if(current->cmt < pos_pst)
{
U64 cmt_pst_aligned = pos_pst + current->cmt_size-1;
cmt_pst_aligned -= cmt_pst_aligned%current->cmt_size;
U64 cmt_pst_clamped = ClampTop(cmt_pst_aligned, current->res);
U64 cmt_size = cmt_pst_clamped - current->cmt;
U8 *cmt_ptr = (U8 *)current + current->cmt;
if(current->flags & ArenaFlag_LargePages)
{
os_commit_large(cmt_ptr, cmt_size);
}
else
{
os_commit(cmt_ptr, cmt_size);
}
current->cmt = cmt_pst_clamped;
}
// rjf: push onto current block
void *result = 0;
if(current->cmt >= pos_pst)
{
result = (U8 *)current+pos_pre;
current->pos = pos_pst;
AsanUnpoisonMemoryRegion(result, size);
if(size_to_zero != 0)
{
MemoryZero(result, size_to_zero);
}
}
// rjf: panic on failure
#if OS_FEATURE_GRAPHICAL
if(Unlikely(result == 0))
{
os_graphical_message(1, str8_lit("Fatal Allocation Failure"), str8_lit("Unexpected memory allocation failure."));
os_abort(1);
}
#endif
return result;
}
internal U64
arena_pos(Arena *arena)
{
Arena *current = arena->current;
U64 pos = current->base_pos + current->pos;
return pos;
}
internal void
arena_pop_to(Arena *arena, U64 pos)
{
U64 big_pos = ClampBot(ARENA_HEADER_SIZE, pos);
Arena *current = arena->current;
#if ARENA_FREE_LIST
for(Arena *prev = 0; current->base_pos >= big_pos; current = prev)
{
prev = current->prev;
current->pos = ARENA_HEADER_SIZE;
SLLStackPush_N(arena->free_last, current, prev);
AsanPoisonMemoryRegion((U8*)current + ARENA_HEADER_SIZE, current->res - ARENA_HEADER_SIZE);
}
#else
for(Arena *prev = 0; current->base_pos >= big_pos; current = prev)
{
prev = current->prev;
os_release(current, current->res);
}
#endif
arena->current = current;
U64 new_pos = big_pos - current->base_pos;
AssertAlways(new_pos <= current->pos);
AsanPoisonMemoryRegion((U8*)current + new_pos, (current->pos - new_pos));
current->pos = new_pos;
}
//- rjf: arena push/pop helpers
internal void
arena_clear(Arena *arena)
{
arena_pop_to(arena, 0);
}
internal void
arena_pop(Arena *arena, U64 amt)
{
U64 pos_old = arena_pos(arena);
U64 pos_new = pos_old;
if(amt < pos_old)
{
pos_new = pos_old - amt;
}
arena_pop_to(arena, pos_new);
}
//- rjf: temporary arena scopes
internal Temp
temp_begin(Arena *arena)
{
U64 pos = arena_pos(arena);
Temp temp = {arena, pos};
return temp;
}
internal void
temp_end(Temp temp)
{
arena_pop_to(temp.arena, temp.pos);
}
================================================
FILE: src/base/base_arena.h
================================================
// Copyright (c) Epic Games Tools
// Licensed under the MIT license (https://opensource.org/license/mit/)
#ifndef BASE_ARENA_H
#define BASE_ARENA_H
////////////////////////////////
//~ rjf: Arena Types
#define ARENA_HEADER_SIZE 128
typedef U64 ArenaFlags;
enum
{
ArenaFlag_NoChain = (1<<0),
ArenaFlag_LargePages = (1<<1),
};
typedef struct ArenaParams ArenaParams;
struct ArenaParams
{
ArenaFlags flags;
U64 reserve_size;
U64 commit_size;
void *optional_backing_buffer;
char *allocation_site_file;
int allocation_site_line;
};
typedef struct Arena Arena;
struct Arena
{
Arena *prev; // previous arena in chain
Arena *current; // current arena in chain
ArenaFlags flags;
U64 cmt_size;
U64 res_size;
U64 base_pos;
U64 pos;
U64 cmt;
U64 res;
char *allocation_site_file;
int allocation_site_line;
#if ARENA_FREE_LIST
Arena *free_last;
#endif
};
StaticAssert(sizeof(Arena) <= ARENA_HEADER_SIZE, arena_header_size_check);
typedef struct Temp Temp;
struct Temp
{
Arena *arena;
U64 pos;
};
////////////////////////////////
//~ rjf: Arena Functions
global U64 arena_default_reserve_size = MB(64);
global U64 arena_default_commit_size = KB(64);
global ArenaFlags arena_default_flags = 0;
//- rjf: arena creation/destruction
internal Arena *arena_alloc_(ArenaParams *params);
#define arena_alloc(...) arena_alloc_(&(ArenaParams){.reserve_size = arena_default_reserve_size, .commit_size = arena_default_commit_size, .flags = arena_default_flags, .allocation_site_file = __FILE__, .allocation_site_line = __LINE__, __VA_ARGS__})
internal void arena_release(Arena *arena);
//- rjf: arena push/pop/pos core functions
internal void *arena_push(Arena *arena, U64 size, U64 align, B32 zero);
internal U64 arena_pos(Arena *arena);
internal void arena_pop_to(Arena *arena, U64 pos);
//- rjf: arena push/pop helpers
internal void arena_clear(Arena *arena);
internal void arena_pop(Arena *arena, U64 amt);
//- rjf: temporary arena scopes
internal Temp temp_begin(Arena *arena);
internal void temp_end(Temp temp);
//- rjf: push helper macros
#define push_array_no_zero_aligned(a, T, c, align) (T *)arena_push((a), sizeof(T)*(c), (align), (0))
#define push_array_aligned(a, T, c, align) (T *)arena_push((a), sizeof(T)*(c), (align), (1))
#define push_array_no_zero(a, T, c) push_array_no_zero_aligned(a, T, c, Max(8, AlignOf(T)))
#define push_array(a, T, c) push_array_aligned(a, T, c, Max(8, AlignOf(T)))
#endif // BASE_ARENA_H
================================================
FILE: src/base/base_command_line.c
================================================
// Copyright (c) Epic Games Tools
// Licensed under the MIT license (https://opensource.org/license/mit/)
////////////////////////////////
//~ rjf: Command Line Parsing Functions
internal CmdLineOpt **
cmd_line_slot_from_string(CmdLine *cmd_line, String8 string)
{
CmdLineOpt **slot = 0;
if(cmd_line->option_table_size != 0)
{
U64 hash = u64_hash_from_str8(string);
U64 bucket = hash % cmd_line->option_table_size;
slot = &cmd_line->option_table[bucket];
}
return slot;
}
internal CmdLineOpt *
cmd_line_opt_from_slot(CmdLineOpt **slot, String8 string)
{
CmdLineOpt *result = 0;
for(CmdLineOpt *var = *slot; var; var = var->hash_next)
{
if(str8_match(string, var->string, 0))
{
result = var;
break;
}
}
return result;
}
internal void
cmd_line_push_opt(CmdLineOptList *list, CmdLineOpt *var)
{
SLLQueuePush(list->first, list->last, var);
list->count += 1;
}
internal CmdLineOpt *
cmd_line_insert_opt(Arena *arena, CmdLine *cmd_line, String8 string, String8List values)
{
CmdLineOpt *var = 0;
CmdLineOpt **slot = cmd_line_slot_from_string(cmd_line, string);
CmdLineOpt *existing_var = cmd_line_opt_from_slot(slot, string);
if(existing_var != 0)
{
var = existing_var;
}
else
{
var = push_array(arena, CmdLineOpt, 1);
var->hash_next = *slot;
var->hash = u64_hash_from_str8(string);
var->string = push_str8_copy(arena, string);
var->value_strings = values;
StringJoin join = {0};
join.pre = str8_lit("");
join.sep = str8_lit(",");
join.post = str8_lit("");
var->value_string = str8_list_join(arena, &var->value_strings, &join);
*slot = var;
cmd_line_push_opt(&cmd_line->options, var);
}
return var;
}
internal CmdLine
cmd_line_from_string_list(Arena *arena, String8List command_line)
{
CmdLine parsed = {0};
parsed.exe_name = command_line.first->string;
parsed.option_table_size = 64;
parsed.option_table = push_array(arena, CmdLineOpt *, parsed.option_table_size);
//- rjf: parse options / inputs
B32 after_passthrough_option = 0;
B32 first_passthrough = 1;
for(String8Node *node = command_line.first->next, *next = 0; node != 0; node = next)
{
next = node->next;
//- rjf: look at --, -, or / (only on Windows) at the start of an
// argument to determine if it's a flag option. all arguments after a
// single "--" (with no trailing string on the command line will be
// considered as passthrough input strings.
B32 is_option = 0;
String8 option_name = node->string;
if(!after_passthrough_option)
{
is_option = 1;
if(str8_match(node->string, str8_lit("--"), 0))
{
after_passthrough_option = 1;
is_option = 0;
}
else if(str8_match(str8_prefix(node->string, 2), str8_lit("--"), 0))
{
option_name = str8_skip(option_name, 2);
}
else if(str8_match(str8_prefix(node->string, 1), str8_lit("-"), 0))
{
option_name = str8_skip(option_name, 1);
}
else if(OperatingSystem_CURRENT == OperatingSystem_Windows &&
str8_match(str8_prefix(node->string, 1), str8_lit("/"), 0))
{
option_name = str8_skip(option_name, 1);
}
else
{
is_option = 0;
}
}
//- rjf: string is an option
if(is_option)
{
// rjf: unpack option prefix
B32 has_values = 0;
U64 value_signifier_position1 = str8_find_needle(option_name, 0, str8_lit(":"), 0);
U64 value_signifier_position2 = str8_find_needle(option_name, 0, str8_lit("="), 0);
U64 value_signifier_position = Min(value_signifier_position1, value_signifier_position2);
String8 value_portion_this_string = str8_skip(option_name, value_signifier_position+1);
if(value_signifier_position < option_name.size)
{
has_values = 1;
}
option_name = str8_prefix(option_name, value_signifier_position);
// rjf: parse option's values
String8List values = {0};
if(has_values)
{
for(String8Node *n = node; n; n = n->next)
{
next = n->next;
String8 string = n->string;
if(n == node)
{
string = value_portion_this_string;
}
U8 splits[] = { ',' };
String8List values_in_this_string = str8_split(arena, string, splits, ArrayCount(splits), 0);
for(String8Node *sub_val = values_in_this_string.first; sub_val; sub_val = sub_val->next)
{
str8_list_push(arena, &values, sub_val->string);
}
if(!str8_match(str8_postfix(n->string, 1), str8_lit(","), 0) &&
(n != node || value_portion_this_string.size != 0))
{
break;
}
}
}
// rjf: store
cmd_line_insert_opt(arena, &parsed, option_name, values);
}
//- rjf: default path - treat as a passthrough input
else if(!str8_match(node->string, str8_lit("--"), 0) || !first_passthrough)
{
str8_list_push(arena, &parsed.inputs, node->string);
first_passthrough = 0;
}
}
//- rjf: fill argc/argv
parsed.argc = command_line.node_count;
parsed.argv = push_array(arena, char *, parsed.argc);
{
U64 idx = 0;
for(String8Node *n = command_line.first; n != 0; n = n->next)
{
parsed.argv[idx] = (char *)push_str8_copy(arena, n->string).str;
idx += 1;
}
}
return parsed;
}
internal CmdLineOpt *
cmd_line_opt_from_string(CmdLine *cmd_line, String8 name)
{
return cmd_line_opt_from_slot(cmd_line_slot_from_string(cmd_line, name), name);
}
internal String8List
cmd_line_strings(CmdLine *cmd_line, String8 name)
{
String8List result = {0};
CmdLineOpt *var = cmd_line_opt_from_string(cmd_line, name);
if(var != 0)
{
result = var->value_strings;
}
return result;
}
internal String8
cmd_line_string(CmdLine *cmd_line, String8 name)
{
String8 result = {0};
CmdLineOpt *var = cmd_line_opt_from_string(cmd_line, name);
if(var != 0)
{
result = var->value_string;
}
return result;
}
internal B32
cmd_line_has_flag(CmdLine *cmd_line, String8 name)
{
CmdLineOpt *var = cmd_line_opt_from_string(cmd_line, name);
return (var != 0);
}
internal B32
cmd_line_has_argument(CmdLine *cmd_line, String8 name)
{
CmdLineOpt *var = cmd_line_opt_from_string(cmd_line, name);
return (var != 0 && var->value_strings.node_count > 0);
}
================================================
FILE: src/base/base_command_line.h
================================================
// Copyright (c) Epic Games Tools
// Licensed under the MIT license (https://opensource.org/license/mit/)
#ifndef BASE_COMMAND_LINE_H
#define BASE_COMMAND_LINE_H
////////////////////////////////
//~ rjf: Parsed Command Line Types
typedef struct CmdLineOpt CmdLineOpt;
struct CmdLineOpt
{
CmdLineOpt *next;
CmdLineOpt *hash_next;
U64 hash;
String8 string;
String8List value_strings;
String8 value_string;
};
typedef struct CmdLineOptList CmdLineOptList;
struct CmdLineOptList
{
U64 count;
CmdLineOpt *first;
CmdLineOpt *last;
};
typedef struct CmdLine CmdLine;
struct CmdLine
{
String8 exe_name;
CmdLineOptList options;
String8List inputs;
U64 option_table_size;
CmdLineOpt **option_table;
U64 argc;
char **argv;
};
////////////////////////////////
//~ rjf: Command Line Parsing Functions
internal CmdLineOpt** cmd_line_slot_from_string(CmdLine *cmd_line, String8 string);
internal CmdLineOpt* cmd_line_opt_from_slot(CmdLineOpt **slot, String8 string);
internal void cmd_line_push_opt(CmdLineOptList *list, CmdLineOpt *var);
internal CmdLineOpt* cmd_line_insert_opt(Arena *arena, CmdLine *cmd_line, String8 string, String8List values);
internal CmdLine cmd_line_from_string_list(Arena *arena, String8List arguments);
internal CmdLineOpt* cmd_line_opt_from_string(CmdLine *cmd_line, String8 name);
internal String8List cmd_line_strings(CmdLine *cmd_line, String8 name);
internal String8 cmd_line_string(CmdLine *cmd_line, String8 name);
internal B32 cmd_line_has_flag(CmdLine *cmd_line, String8 name);
internal B32 cmd_line_has_argument(CmdLine *cmd_line, String8 name);
#endif // BASE_COMMAND_LINE_H
================================================
FILE: src/base/base_context_cracking.h
================================================
// Copyright (c) Epic Games Tools
// Licensed under the MIT license (https://opensource.org/license/mit/)
#ifndef BASE_CONTEXT_CRACKING_H
#define BASE_CONTEXT_CRACKING_H
////////////////////////////////
//~ rjf: Clang OS/Arch Cracking
#if defined(__clang__)
# define COMPILER_CLANG 1
# if defined(_WIN32)
# define OS_WINDOWS 1
# elif defined(__gnu_linux__) || defined(__linux__)
# define OS_LINUX 1
# elif defined(__APPLE__) && defined(__MACH__)
# define OS_MAC 1
# else
# error This compiler/OS combo is not supported.
# endif
# if defined(__amd64__) || defined(__amd64) || defined(__x86_64__) || defined(__x86_64)
# define ARCH_X64 1
# elif defined(i386) || defined(__i386) || defined(__i386__)
# define ARCH_X86 1
# elif defined(__aarch64__)
# define ARCH_ARM64 1
# elif defined(__arm__)
# define ARCH_ARM32 1
# else
# error Architecture not supported.
# endif
////////////////////////////////
//~ rjf: MSVC OS/Arch Cracking
#elif defined(_MSC_VER)
# define COMPILER_MSVC 1
# if _MSC_VER >= 1920
# define COMPILER_MSVC_YEAR 2019
# elif _MSC_VER >= 1910
# define COMPILER_MSVC_YEAR 2017
# elif _MSC_VER >= 1900
# define COMPILER_MSVC_YEAR 2015
# elif _MSC_VER >= 1800
# define COMPILER_MSVC_YEAR 2013
# elif _MSC_VER >= 1700
# define COMPILER_MSVC_YEAR 2012
# elif _MSC_VER >= 1600
# define COMPILER_MSVC_YEAR 2010
# elif _MSC_VER >= 1500
# define COMPILER_MSVC_YEAR 2008
# elif _MSC_VER >= 1400
# define COMPILER_MSVC_YEAR 2005
# else
# define COMPILER_MSVC_YEAR 0
# endif
# if defined(_WIN32)
# define OS_WINDOWS 1
# else
# error This compiler/OS combo is not supported.
# endif
# if defined(_M_AMD64)
# define ARCH_X64 1
# elif defined(_M_IX86)
# define ARCH_X86 1
# elif defined(_M_ARM64)
# define ARCH_ARM64 1
# elif defined(_M_ARM)
# define ARCH_ARM32 1
# else
# error Architecture not supported.
# endif
////////////////////////////////
//~ rjf: GCC OS/Arch Cracking
#elif defined(__GNUC__) || defined(__GNUG__)
# define COMPILER_GCC 1
# if defined(__gnu_linux__) || defined(__linux__)
# define OS_LINUX 1
# else
# error This compiler/OS combo is not supported.
# endif
# if defined(__amd64__) || defined(__amd64) || defined(__x86_64__) || defined(__x86_64)
# define ARCH_X64 1
# elif defined(i386) || defined(__i386) || defined(__i386__)
# define ARCH_X86 1
# elif defined(__aarch64__)
# define ARCH_ARM64 1
# elif defined(__arm__)
# define ARCH_ARM32 1
# else
# error Architecture not supported.
# endif
#else
# error Compiler not supported.
#endif
////////////////////////////////
//~ rjf: Arch Cracking
#if defined(ARCH_X64)
# define ARCH_64BIT 1
#elif defined(ARCH_X86)
# define ARCH_32BIT 1
#endif
#if ARCH_ARM32 || ARCH_ARM64 || ARCH_X64 || ARCH_X86
# define ARCH_LITTLE_ENDIAN 1
#else
# error Endianness of this architecture not understood by context cracker.
#endif
////////////////////////////////
//~ rjf: Language Cracking
#if defined(__cplusplus)
# define LANG_CPP 1
#else
# define LANG_C 1
#endif
////////////////////////////////
//~ rjf: Build Option Cracking
#if !defined(BUILD_DEBUG)
# define BUILD_DEBUG 1
#endif
#if !defined(BUILD_SUPPLEMENTARY_UNIT)
# define BUILD_SUPPLEMENTARY_UNIT 0
#endif
#if !defined(BUILD_ENTRY_DEFINING_UNIT)
# define BUILD_ENTRY_DEFINING_UNIT 1
#endif
#if !defined(BUILD_CONSOLE_INTERFACE)
# define BUILD_CONSOLE_INTERFACE 0
#endif
#if !defined(BUILD_VERSION_MAJOR)
# define BUILD_VERSION_MAJOR 0
#endif
#if !defined(BUILD_VERSION_MINOR)
# define BUILD_VERSION_MINOR 9
#endif
#if !defined(BUILD_VERSION_PATCH)
# define BUILD_VERSION_PATCH 25
#endif
#define BUILD_VERSION_STRING_LITERAL Stringify(BUILD_VERSION_MAJOR) "." Stringify(BUILD_VERSION_MINOR) "." Stringify(BUILD_VERSION_PATCH)
#if BUILD_DEBUG
# define BUILD_MODE_STRING_LITERAL_APPEND " [Debug]"
#else
# define BUILD_MODE_STRING_LITERAL_APPEND ""
#endif
#if defined(BUILD_GIT_HASH)
# define BUILD_GIT_HASH_STRING_LITERAL_APPEND " [" BUILD_GIT_HASH "]"
#else
# define BUILD_GIT_HASH_STRING_LITERAL_APPEND ""
#endif
#if !defined(BUILD_TITLE)
# define BUILD_TITLE "Untitled"
#endif
#if !defined(BUILD_RELEASE_PHASE_STRING_LITERAL)
# define BUILD_RELEASE_PHASE_STRING_LITERAL "ALPHA"
#endif
#if !defined(BUILD_ISSUES_LINK_STRING_LITERAL)
# define BUILD_ISSUES_LINK_STRING_LITERAL "https://github.com/EpicGamesExt/raddebugger/issues"
#endif
#define BUILD_TITLE_STRING_LITERAL BUILD_TITLE " (" BUILD_VERSION_STRING_LITERAL " " BUILD_RELEASE_PHASE_STRING_LITERAL ") - " __DATE__ "" BUILD_GIT_HASH_STRING_LITERAL_APPEND BUILD_MODE_STRING_LITERAL_APPEND
////////////////////////////////
//~ rjf: Zero All Undefined Options
#if !defined(ARCH_32BIT)
# define ARCH_32BIT 0
#endif
#if !defined(ARCH_64BIT)
# define ARCH_64BIT 0
#endif
#if !defined(ARCH_X64)
# define ARCH_X64 0
#endif
#if !defined(ARCH_X86)
# define ARCH_X86 0
#endif
#if !defined(ARCH_ARM64)
# define ARCH_ARM64 0
#endif
#if !defined(ARCH_ARM32)
# define ARCH_ARM32 0
#endif
#if !defined(COMPILER_MSVC)
# define COMPILER_MSVC 0
#endif
#if !defined(COMPILER_GCC)
# define COMPILER_GCC 0
#endif
#if !defined(COMPILER_CLANG)
# define COMPILER_CLANG 0
#endif
#if !defined(OS_WINDOWS)
# define OS_WINDOWS 0
#endif
#if !defined(OS_LINUX)
# define OS_LINUX 0
#endif
#if !defined(OS_MAC)
# define OS_MAC 0
#endif
#if !defined(LANG_CPP)
# define LANG_CPP 0
#endif
#if !defined(LANG_C)
# define LANG_C 0
#endif
////////////////////////////////
//~ rjf: Unsupported Errors
#if ARCH_X86
# error You tried to build in x86 (32 bit) mode, but currently, only building in x64 (64 bit) mode is supported.
#endif
#if !ARCH_X64
# error You tried to build with an unsupported architecture. Currently, only building in x64 mode is supported.
#endif
#endif // BASE_CONTEXT_CRACKING_H
================================================
FILE: src/base/base_core.c
================================================
// Copyright (c) Epic Games Tools
// Licensed under the MIT license (https://opensource.org/license/mit/)
////////////////////////////////
//~ rjf: Safe Casts
internal U16
safe_cast_u16(U32 x)
{
AssertAlways(x <= max_U16);
U16 result = (U16)x;
return result;
}
internal U32
safe_cast_u32(U64 x)
{
AssertAlways(x <= max_U32);
U32 result = (U32)x;
return result;
}
internal S32
safe_cast_s32(S64 x)
{
AssertAlways(x <= max_S32);
S32 result = (S32)x;
return result;
}
////////////////////////////////
//~ rjf: Large Base Type Functions
internal U128
u128_zero(void)
{
U128 v = {0};
return v;
}
internal U128
u128_make(U64 v0, U64 v1)
{
U128 v = { .u64 = { v0, v1 }};
return v;
}
internal B32
u128_match(U128 a, U128 b)
{
return MemoryMatchStruct(&a, &b);
}
////////////////////////////////
//~ rjf: Bit Patterns
internal U32
u32_from_u64_saturate(U64 x){
U32 x32 = (x > max_U32)?max_U32:(U32)x;
return(x32);
}
internal U64
u64_up_to_pow2(U64 x){
if (x == 0){
x = 1;
}
else{
x -= 1;
x |= (x >> 1);
x |= (x >> 2);
x |= (x >> 4);
x |= (x >> 8);
x |= (x >> 16);
x |= (x >> 32);
x += 1;
}
return(x);
}
internal S32
extend_sign32(U32 x, U32 size){
U32 high_bit = size * 8;
U32 shift = 32 - high_bit;
S32 result = ((S32)x << shift) >> shift;
return result;
}
internal S64
extend_sign64(U64 x, U64 size){
U64 high_bit = size * 8;
U64 shift = 64 - high_bit;
S64 result = ((S64)x << shift) >> shift;
return result;
}
internal F32
inf32(void){
union { U32 u; F32 f; } x;
x.u = exponent32;
return(x.f);
}
internal F32
neg_inf32(void){
union { U32 u; F32 f; } x;
x.u = sign32 | exponent32;
return(x.f);
}
internal U16
bswap_u16(U16 x)
{
U16 result = (((x & 0xFF00) >> 8) |
((x & 0x00FF) << 8));
return result;
}
internal U32
bswap_u32(U32 x)
{
U32 result = (((x & 0xFF000000) >> 24) |
((x & 0x00FF0000) >> 8) |
((x & 0x0000FF00) << 8) |
((x & 0x000000FF) << 24));
return result;
}
internal U64
bswap_u64(U64 x)
{
// TODO(nick): naive bswap, replace with something that is faster like an intrinsic
U64 result = (((x & 0xFF00000000000000ULL) >> 56) |
((x & 0x00FF000000000000ULL) >> 40) |
((x & 0x0000FF0000000000ULL) >> 24) |
((x & 0x000000FF00000000ULL) >> 8) |
((x & 0x00000000FF000000ULL) << 8) |
((x & 0x0000000000FF0000ULL) << 24) |
((x & 0x000000000000FF00ULL) << 40) |
((x & 0x00000000000000FFULL) << 56));
return result;
}
#if COMPILER_MSVC || (COMPILER_CLANG && OS_WINDOWS)
internal U64
count_bits_set32(U32 val)
{
return __popcnt(val);
}
internal U64
count_bits_set64(U64 val)
{
return __popcnt64(val);
}
internal U64
ctz32(U32 mask)
{
unsigned long idx;
_BitScanForward(&idx, mask);
return idx;
}
internal U64
ctz64(U64 mask)
{
unsigned long idx;
_BitScanForward64(&idx, mask);
return idx;
}
internal U64
clz32(U32 mask)
{
unsigned long idx;
_BitScanReverse(&idx, mask);
return 31 - idx;
}
internal U64
clz64(U64 mask)
{
unsigned long idx;
_BitScanReverse64(&idx, mask);
return 63 - idx;
}
#elif COMPILER_CLANG || COMPILER_GCC
internal U64
count_bits_set32(U32 val)
{
return __builtin_popcount(val);
}
internal U64
count_bits_set64(U64 val)
{
return __builtin_popcountll(val);
}
internal U64
ctz32(U32 val)
{
return __builtin_ctz(val);
}
internal U64
clz32(U32 val)
{
return __builtin_clz(val);
}
internal U64
ctz64(U64 val)
{
return __builtin_ctzll(val);
}
internal U64
clz64(U64 val)
{
return __builtin_clzll(val);
}
#else
# error "Bit intrinsic functions not defined for this compiler."
#endif
////////////////////////////////
//~ rjf: Enum -> Sign
internal S32
sign_from_side_S32(Side side){
return((side == Side_Min)?-1:1);
}
internal F32
sign_from_side_F32(Side side){
return((side == Side_Min)?-1.f:1.f);
}
////////////////////////////////
//~ rjf: Memory Functions
internal B32
memory_is_zero(void *ptr, U64 size)
{
B32 result = 1;
// break down size
U64 extra = (size&0x7);
U64 count8 = (size >> 3);
// check with 8-byte stride
U64 *p64 = (U64*)ptr;
if(result)
{
for(U64 i = 0; i < count8; i += 1, p64 += 1)
{
if(*p64 != 0)
{
result = 0;
goto done;
}
}
}
// check extra
if(result)
{
U8 *p8 = (U8*)p64;
for(U64 i = 0; i < extra; i += 1, p8 += 1)
{
if(*p8 != 0)
{
result = 0;
goto done;
}
}
}
done:;
return result;
}
////////////////////////////////
//~ rjf: Text 2D Coordinate/Range Functions
internal TxtPt
txt_pt(S64 line, S64 column)
{
TxtPt p = {0};
p.line = line;
p.column = column;
return p;
}
internal B32
txt_pt_match(TxtPt a, TxtPt b)
{
return a.line == b.line && a.column == b.column;
}
internal B32
txt_pt_less_than(TxtPt a, TxtPt b)
{
B32 result = 0;
if(a.line < b.line)
{
result = 1;
}
else if(a.line == b.line)
{
result = a.column < b.column;
}
return result;
}
internal TxtPt
txt_pt_min(TxtPt a, TxtPt b)
{
TxtPt result = b;
if(txt_pt_less_than(a, b))
{
result = a;
}
return result;
}
internal TxtPt
txt_pt_max(TxtPt a, TxtPt b)
{
TxtPt result = a;
if(txt_pt_less_than(a, b))
{
result = b;
}
return result;
}
internal TxtRng
txt_rng(TxtPt min, TxtPt max)
{
TxtRng range = {0};
if(txt_pt_less_than(min, max))
{
range.min = min;
range.max = max;
}
else
{
range.min = max;
range.max = min;
}
return range;
}
internal TxtRng
txt_rng_intersect(TxtRng a, TxtRng b)
{
TxtRng result = {0};
result.min = txt_pt_max(a.min, b.min);
result.max = txt_pt_min(a.max, b.max);
if(txt_pt_less_than(result.max, result.min))
{
MemoryZeroStruct(&result);
}
return result;
}
internal TxtRng
txt_rng_union(TxtRng a, TxtRng b)
{
TxtRng result = {0};
result.min = txt_pt_min(a.min, b.min);
result.max = txt_pt_max(a.max, b.max);
return result;
}
internal B32
txt_rng_contains(TxtRng r, TxtPt pt)
{
B32 result = ((txt_pt_less_than(r.min, pt) || txt_pt_match(r.min, pt)) &&
txt_pt_less_than(pt, r.max));
return result;
}
////////////////////////////////
//~ rjf: Toolchain/Environment Enum Functions
internal U64
bit_size_from_arch(Arch arch)
{
// TODO(rjf): metacode
U64 arch_bitsize = 0;
switch(arch)
{
case Arch_x64: arch_bitsize = 64; break;
case Arch_x86: arch_bitsize = 32; break;
case Arch_arm64: arch_bitsize = 64; break;
case Arch_arm32: arch_bitsize = 32; break;
default: break;
}
return arch_bitsize;
}
internal U64
byte_size_from_arch(Arch arch)
{
return bit_size_from_arch(arch) / 8;
}
internal U64
max_instruction_size_from_arch(Arch arch)
{
// TODO(rjf): make this real
return 64;
}
////////////////////////////////
//~ rjf: Time Functions
internal DenseTime
dense_time_from_date_time(DateTime date_time){
DenseTime result = 0;
result += date_time.year;
result *= 12;
result += date_time.mon;
result *= 31;
result += date_time.day;
result *= 24;
result += date_time.hour;
result *= 60;
result += date_time.min;
result *= 61;
result += date_time.sec;
result *= 1000;
result += date_time.msec;
return(result);
}
internal DateTime
date_time_from_dense_time(DenseTime time){
DateTime result = {0};
result.msec = time%1000;
time /= 1000;
result.sec = time%61;
time /= 61;
result.min = time%60;
time /= 60;
result.hour = time%24;
time /= 24;
result.day = time%31;
time /= 31;
result.mon = time%12;
time /= 12;
Assert(time <= max_U32);
result.year = (U32)time;
return(result);
}
internal DateTime
date_time_from_micro_seconds(U64 time){
DateTime result = {0};
result.micro_sec = time%1000;
time /= 1000;
result.msec = time%1000;
time /= 1000;
result.sec = time%60;
time /= 60;
result.min = time%60;
time /= 60;
result.hour = time%24;
time /= 24;
result.day = time%31;
time /= 31;
result.mon = time%12;
time /= 12;
Assert(time <= max_U32);
result.year = (U32)time;
return(result);
}
internal DateTime
date_time_from_unix_time(U64 unix_time)
{
DateTime date = {0};
date.year = 1970;
date.day = 1 + (unix_time / 86400);
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)
{
U64 c = 0;
switch(date.month)
{
case Month_Jan: c = 31; break;
case Month_Feb:
{
if((date.year % 4 == 0) && ((date.year % 100) != 0 || (date.year % 400) == 0))
{
c = 29;
}
else
{
c = 28;
}
} break;
case Month_Mar: c = 31; break;
case Month_Apr: c = 30; break;
case Month_May: c = 31; break;
case Month_Jun: c = 30; break;
case Month_Jul: c = 31; break;
case Month_Aug: c = 31; break;
case Month_Sep: c = 30; break;
case Month_Oct: c = 31; break;
case Month_Nov: c = 30; break;
case Month_Dec: c = 31; break;
default: InvalidPath;
}
if(date.day <= c)
{
goto exit;
}
date.day -= c;
}
++date.year;
}
exit:;
return date;
}
////////////////////////////////
//~ rjf: Non-Fancy Ring Buffer Reads/Writes
internal U64
ring_write(U8 *ring_base, U64 ring_size, U64 ring_pos, void *src_data, U64 src_data_size)
{
Assert(src_data_size <= ring_size);
{
U64 ring_off = ring_pos%ring_size;
U64 bytes_before_split = ring_size-ring_off;
U64 pre_split_bytes = Min(bytes_before_split, src_data_size);
U64 pst_split_bytes = src_data_size-pre_split_bytes;
void *pre_split_data = src_data;
void *pst_split_data = ((U8 *)src_data + pre_split_bytes);
MemoryCopy(ring_base+ring_off, pre_split_data, pre_split_bytes);
MemoryCopy(ring_base+0, pst_split_data, pst_split_bytes);
}
return src_data_size;
}
internal U64
ring_read(U8 *ring_base, U64 ring_size, U64 ring_pos, void *dst_data, U64 read_size)
{
Assert(read_size <= ring_size);
{
U64 ring_off = ring_pos%ring_size;
U64 bytes_before_split = ring_size-ring_off;
U64 pre_split_bytes = Min(bytes_before_split, read_size);
U64 pst_split_bytes = read_size-pre_split_bytes;
MemoryCopy(dst_data, ring_base+ring_off, pre_split_bytes);
MemoryCopy((U8 *)dst_data + pre_split_bytes, ring_base+0, pst_split_bytes);
}
return read_size;
}
////////////////////////////////
internal U64
u64_array_bsearch(U64 *arr, U64 count, U64 value)
{
if(count > 1 && arr[0] <= value && value < arr[count-1])
{
U64 l = 0;
U64 r = count - 1;
for(; l <= r; )
{
U64 m = l + (r - l) / 2;
if(arr[m] == value)
{
return m;
}
else if(arr[m] < value)
{
l = m + 1;
}
else
{
r = m - 1;
}
}
}
else if (count == 1 && arr[0] == value)
{
return 0;
}
return max_U64;
}
////////////////////////////////
internal U64
index_of_zero_u32(U32 *ptr, U64 count)
{
for (U64 i = 0; i < count; i += 1) {
if (ptr[i] == 0) {
return i;
}
}
return max_U64;
}
internal U64
index_of_zero_u64(U64 *ptr, U64 count)
{
for (U64 i = 0; i < count; i += 1) {
if (ptr[i] == 0) {
return i;
}
}
return max_U64;
}
////////////////////////////////
//~ rjf: Third Party Includes
#if !BUILD_SUPPLEMENTARY_UNIT
#if defined(__clang__)
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wsign-conversion"
#elif defined(_MSC_VER)
#pragma warning (push, 0)
#endif
# define STB_SPRINTF_IMPLEMENTATION
# define STB_SPRINTF_STATIC
# include "third_party/stb/stb_sprintf.h"
#endif
#if defined(__clang__)
#pragma clang diagnostic pop
#elif defined(_MSC_VER)
#pragma warning (pop, 0)
#endif
////////////////////////////////
//~ rjf: String <-> Integer Tables
read_only global U8 integer_symbols[16] =
{
'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F',
};
// NOTE(rjf): Includes reverses for uppercase and lowercase hex.
read_only global U8 integer_symbol_reverse[128] =
{
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
};
read_only global U8 base64[64] =
{
'0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm',
'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',
'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',
'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',
'_', '$',
};
read_only global U8 base64_reverse[128] =
{
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0x3F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,
0xFF,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F,0x30,0x31,0x32,
0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0xFF,0xFF,0xFF,0xFF,0x3E,
0xFF,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,
0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F,0x20,0x21,0x22,0x23,0xFF,0xFF,0xFF,0xFF,0xFF,
};
================================================
FILE: src/base/base_core.h
================================================
// Copyright (c) Epic Games Tools
// Licensed under the MIT license (https://opensource.org/license/mit/)
#ifndef BASE_CORE_H
#define BASE_CORE_H
////////////////////////////////
//~ rjf: Foreign Includes
#include <stdio.h>
#include <stdarg.h>
#include <math.h>
#include <string.h>
#include <stdint.h>
////////////////////////////////
//~ rjf: Third Party Includes
#define STB_SPRINTF_DECORATE(name) raddbg_##name
#define STB_SPRINTF_STATIC
#include "third_party/stb/stb_sprintf.h"
////////////////////////////////
//~ rjf: Codebase Keywords
#define internal static
#define global static
#define local_persist static
#if COMPILER_MSVC || (COMPILER_CLANG && OS_WINDOWS)
# pragma section(".rdata$", read)
# define read_only __declspec(allocate(".rdata$"))
#elif (COMPILER_CLANG && OS_LINUX)
# define read_only __attribute__((section(".rodata")))
#else
// NOTE(rjf): I don't know of a useful way to do this in GCC land.
// __attribute__((section(".rodata"))) looked promising, but it introduces a
// strange warning about malformed section attributes, and it doesn't look
// like writing to that section reliably produces access violations, strangely
// enough. (It does on Clang)
# define read_only
#endif
#if COMPILER_MSVC
# define thread_static __declspec(thread)
#elif COMPILER_CLANG || COMPILER_GCC
# define thread_static __thread
#else
# error thread_static not defined for this compiler.
#endif
#if COMPILER_MSVC
# define force_inline __forceinline
#elif COMPILER_CLANG || COMPILER_GCC
# define force_inline __attribute__((always_inline))
#else
# error force_inline not defined for this compiler.
#endif
#if COMPILER_MSVC
# define no_inline __declspec(noinline)
#elif COMPILER_CLANG || COMPILER_GCC
# define no_inline __attribute__((noinline))
#else
# error no_inline not defined for this compiler.
#endif
////////////////////////////////
//~ rjf: Linkage Keyword Macros
#if OS_WINDOWS
# define shared_function C_LINKAGE __declspec(dllexport)
#else
# define shared_function C_LINKAGE
#endif
#if LANG_CPP
# define C_LINKAGE_BEGIN extern "C"{
# define C_LINKAGE_END }
# define C_LINKAGE extern "C"
#else
# define C_LINKAGE_BEGIN
# define C_LINKAGE_END
# define C_LINKAGE
#endif
////////////////////////////////
//~ rjf: Optimization Settings
#if COMPILER_MSVC
# define OPTIMIZE_BEGIN _Pragma("optimize(\"\", on)")
# define OPTIMIZE_END _Pragma("optimize(\"\", off)")
#elif COMPILER_CLANG
# define OPTIMIZE_BEGIN _Pragma("clang optimize on")
# define OPTIMIZE_END _Pragma("clang optimize off")
#elif COMPILER_GCC
# define OPTIMIZE_BEGIN _Pragma("GCC push_options") _Pragma("GCC optimize(\"O2\")")
# define OPTIMIZE_END _Pragma("GCC pop_options")
#else
# define OPTIMIZE_BEGIN
# define OPTIMIZE_END
#endif
#if COMPILER_MSVC && !BUILD_DEBUG
# define NO_OPTIMIZE_BEGIN _Pragma("optimize(\"\", off)")
# define NO_OPTIMIZE_END _Pragma("optimize(\"\", on)")
#elif COMPILER_CLANG && !BUILD_DEBUG
# define NO_OPTIMIZE_BEGIN _Pragma("clang optimize off")
# define NO_OPTIMIZE_END _Pragma("clang optimize on")
#elif COMPILER_GCC && !BUILD_DEBUG
# define NO_OPTIMIZE_BEGIN _Pragma("GCC push_options") _Pragma("GCC optimize(\"O0\")")
# define NO_OPTIMIZE_END _Pragma("GCC pop_options")
#else
# define NO_OPTIMIZE_BEGIN
# define NO_OPTIMIZE_END
#endif
////////////////////////////////
//~ rjf: Versions
#define Version(major, minor, patch) (U64)((((U64)(major) & 0xffff) << 32) | ((((U64)(minor) & 0xffff) << 16)) | ((((U64)(patch) & 0xffff) << 0)))
#define MajorFromVersion(version) (((version) & 0xffff00000000ull) >> 32)
#define MinorFromVersion(version) (((version) & 0x0000ffff0000ull) >> 16)
#define PatchFromVersion(version) (((version) & 0x00000000ffffull) >> 0)
////////////////////////////////
//~ rjf: Units
#define KB(n) (((U64)(n)) << 10)
#define MB(n) (((U64)(n)) << 20)
#define GB(n) (((U64)(n)) << 30)
#define TB(n) (((U64)(n)) << 40)
#define Thousand(n) ((n)*1000)
#define Million(n) ((n)*1000000)
#define Billion(n) ((n)*1000000000)
////////////////////////////////
//~ rjf: Branch Predictor Hints
#if defined(__clang__)
# define Expect(expr, val) __builtin_expect((expr), (val))
#else
# define Expect(expr, val) (expr)
#endif
#define Likely(expr) Expect(expr,1)
#define Unlikely(expr) Expect(expr,0)
////////////////////////////////
//~ rjf: Clamps, Mins, Maxes
#define Min(A,B) (((A)<(B))?(A):(B))
#define Max(A,B) (((A)>(B))?(A):(B))
#define ClampTop(A,X) Min(A,X)
#define ClampBot(X,B) Max(X,B)
#define Clamp(A,X,B) (((X)<(A))?(A):((X)>(B))?(B):(X))
////////////////////////////////
//~ rjf: Type -> Alignment
#if COMPILER_MSVC
# define AlignOf(T) __alignof(T)
#elif COMPILER_CLANG
# define AlignOf(T) __alignof(T)
#elif COMPILER_GCC
# define AlignOf(T) __alignof__(T)
#else
# error AlignOf not defined for this compiler.
#endif
#if COMPILER_MSVC
# define AlignType(x) __declspec(align(x))
#elif COMPILER_CLANG || COMPILER_GCC
# define AlignType(x) __attribute__((aligned(x)))
#else
# error AlignType not defined for this compiler.
#endif
////////////////////////////////
//~ rjf: Member Offsets
#define Member(T,m) (((T*)0)->m)
#define OffsetOf(T,m) IntFromPtr(&Member(T,m))
#define MemberFromOffset(T,ptr,off) (T)((((U8 *)ptr)+(off)))
#define CastFromMember(T,m,ptr) (T*)(((U8*)ptr) - OffsetOf(T,m))
////////////////////////////////
//~ rjf: For-Loop Construct Macros
#define DeferLoop(begin, end) for(int _i_ = ((begin), 0); !_i_; _i_ += 1, (end))
#define DeferLoopChecked(begin, end) for(int _i_ = 2 * !(begin); (_i_ == 2 ? ((end), 0) : !_i_); _i_ += 1, (end))
#define EachIndex(it, count) (U64 it = 0; it < (count); it += 1)
#define EachElement(it, array) (U64 it = 0; it < ArrayCount(array); it += 1)
#define EachEnumVal(type, it) (type it = (type)0; it < type##_COUNT; it = (type)(it+1))
#define EachNonZeroEnumVal(type, it) (type it = (type)1; it < type##_COUNT; it = (type)(it+1))
#define EachInRange(it, range) (U64 it = (range).min; it < (range).max; it += 1)
#define EachNode(it, T, first) (T *it = first; it != 0; it = it->next)
////////////////////////////////
//~ rjf: Memory Operation Macros
#define MemoryCopy(dst, src, size) memmove((dst), (src), (size))
#define MemorySet(dst, byte, size) memset((dst), (byte), (size))
#define MemoryCompare(a, b, size) memcmp((a), (b), (size))
#define MemoryStrlen(ptr) strlen(ptr)
#define MemoryCopyStruct(d,s) MemoryCopy((d),(s),sizeof(*(d)))
#define MemoryCopyArray(d,s) MemoryCopy((d),(s),sizeof(d))
#define MemoryCopyTyped(d,s,c) MemoryCopy((d),(s),sizeof(*(d))*(c))
#define MemoryCopyStr8(dst, s) MemoryCopy(dst, (s).str, (s).size)
#define MemoryZero(s,z) memset((s),0,(z))
#define MemoryZeroStruct(s) MemoryZero((s),sizeof(*(s)))
#define MemoryZeroArray(a) MemoryZero((a),sizeof(a))
#define MemoryZeroTyped(m,c) MemoryZero((m),sizeof(*(m))*(c))
#define MemoryMatch(a,b,z) (MemoryCompare((a),(b),(z)) == 0)
#define MemoryMatchStruct(a,b) MemoryMatch((a),(b),sizeof(*(a)))
#define MemoryMatchArray(a,b) MemoryMatch((a),(b),sizeof(a))
#define MemoryIsZeroStruct(ptr) memory_is_zero((ptr), sizeof(*(ptr)))
#define MemoryRead(T,p,e) ( ((p)+sizeof(T)<=(e))?(*(T*)(p)):(0) )
#define MemoryConsume(T,p,e) ( ((p)+sizeof(T)<=(e))?((p)+=sizeof(T),*(T*)((p)-sizeof(T))):((p)=(e),0) )
////////////////////////////////
//~ rjf: Asserts
#if COMPILER_MSVC
# define Trap() __debugbreak()
#elif COMPILER_CLANG || COMPILER_GCC
# define Trap() __builtin_trap()
#else
# error Unknown trap intrinsic for this compiler.
#endif
#define AssertAlways(x) do{if(!(x)) {Trap();}}while(0)
#if BUILD_DEBUG
# define Assert(x) AssertAlways(x)
#else
# define Assert(x) (void)(x)
#endif
#define InvalidPath Assert(!"Invalid Path!")
#define NotImplemented Assert(!"Not Implemented!")
#define NoOp ((void)0)
#define StaticAssert(C, ID) global U8 Glue(ID, __LINE__)[(C)?1:-1]
////////////////////////////////
//~ rjf: Atomic Operations
#if COMPILER_MSVC
# include <intrin.h>
# if ARCH_X64
# define ins_atomic_u128_eval_cond_assign(x,k,c) (B32)InterlockedCompareExchange128((__int64 *)(x), ((__int64 *)&(k))[1], ((__int64 *)&(k))[0], (__int64 *)c)
# define ins_atomic_u64_eval(x) *((volatile U64 *)(x))
# define ins_atomic_u64_inc_eval(x) InterlockedIncrement64((__int64 *)(x))
# define ins_atomic_u64_dec_eval(x) InterlockedDecrement64((__int64 *)(x))
# define ins_atomic_u64_eval_assign(x,c) InterlockedExchange64((__int64 *)(x),(c))
# define ins_atomic_u64_add_eval(x,c) InterlockedAdd64((__int64 *)(x), c)
# define ins_atomic_u64_eval_cond_assign(x,k,c) InterlockedCompareExchange64((__int64 *)(x),(k),(c))
# define ins_atomic_u32_eval(x) *((volatile U32 *)(x))
# define ins_atomic_u32_inc_eval(x) InterlockedIncrement((LONG *)(x))
# define ins_atomic_u32_dec_eval(x) InterlockedDecrement((LONG *)(x))
# define ins_atomic_u32_eval_assign(x,c) InterlockedExchange((LONG *)(x),(c))
# define ins_atomic_u32_eval_cond_assign(x,k,c) InterlockedCompareExchange((LONG *)(x),(k),(c))
# define ins_atomic_u32_add_eval(x,c) InterlockedAdd((LONG *)(x), (c))
# define ins_atomic_u8_eval_assign(x,c) InterlockedExchange8((CHAR *)(x), (c))
# else
# error Atomic intrinsics not defined for this compiler / architecture combination.
# endif
#elif COMPILER_CLANG || COMPILER_GCC
# define ins_atomic_u128_eval_cond_assign(x,k,c) (B32)__atomic_compare_exchange_n((__int128 *)(x),(__int128 *)(c),*(__int128 *)(k),0,__ATOMIC_SEQ_CST,__ATOMIC_SEQ_CST)
# define ins_atomic_u64_eval(x) __atomic_load_n(x, __ATOMIC_SEQ_CST)
# define ins_atomic_u64_inc_eval(x) (__atomic_fetch_add((U64 *)(x), 1, __ATOMIC_SEQ_CST) + 1)
# define ins_atomic_u64_dec_eval(x) (__atomic_fetch_sub((U64 *)(x), 1, __ATOMIC_SEQ_CST) - 1)
# define ins_atomic_u64_eval_assign(x,c) __atomic_exchange_n(x, c, __ATOMIC_SEQ_CST)
# define ins_atomic_u64_add_eval(x,c) (__atomic_fetch_add((U64 *)(x), c, __ATOMIC_SEQ_CST) + (c))
# define ins_atomic_u64_eval_cond_assign(x,k,c) ({ U64 _new = (c); __atomic_compare_exchange_n((U64 *)(x),&_new,(k),0,__ATOMIC_SEQ_CST,__ATOMIC_SEQ_CST); _new; })
# define ins_atomic_u32_eval(x) __atomic_load_n(x, __ATOMIC_SEQ_CST)
# define ins_atomic_u32_inc_eval(x) (__atomic_fetch_add((U32 *)(x), 1, __ATOMIC_SEQ_CST) + 1)
# define ins_atomic_u32_dec_eval(x) (__atomic_fetch_sub((U32 *)(x), 1, __ATOMIC_SEQ_CST) - 1)
# define ins_atomic_u32_add_eval(x,c) (__atomic_fetch_add((U32 *)(x), c, __ATOMIC_SEQ_CST) + (c))
# define ins_atomic_u32_eval_assign(x,c) __atomic_exchange_n((x), (c), __ATOMIC_SEQ_CST)
# define ins_atomic_u32_eval_cond_assign(x,k,c) ({ U32 _new = (c); __atomic_compare_exchange_n((U32 *)(x),&_new,(k),0,__ATOMIC_SEQ_CST,__ATOMIC_SEQ_CST); _new; })
# define ins_atomic_u8_eval_assign(x,c) __atomic_exchange_n((x), (c), __ATOMIC_SEQ_CST)
#else
# error Atomic intrinsics not defined for this compiler / architecture.
#endif
#if ARCH_64BIT
# define ins_atomic_ptr_eval_cond_assign(x,k,c) (void *)ins_atomic_u64_eval_cond_assign((U64 *)(x), (U64)(k), (U64)(c))
# define ins_atomic_ptr_eval_assign(x,c) (void *)ins_atomic_u64_eval_assign((U64 *)(x), (U64)(c))
# define ins_atomic_ptr_eval(x) (void *)ins_atomic_u64_eval((U64 *)x)
#else
# error Atomic intrinsics for pointers not defined for this architecture.
#endif
////////////////////////////////
//~ rjf: Linked List Building Macros
//- rjf: linked list macro helpers
#define CheckNil(nil,p) ((p) == 0 || (p) == nil)
#define SetNil(nil,p) ((p) = nil)
//- rjf: doubly-linked-lists
#define DLLInsert_NPZ(nil,f,l,p,n,next,prev) (CheckNil(nil,f) ? \
((f) = (l) = (n), SetNil(nil,(n)->next), SetNil(nil,(n)->prev)) :\
CheckNil(nil,p) ? \
((n)->next = (f), (f)->prev = (n), (f) = (n), SetNil(nil,(n)->prev)) :\
((p)==(l)) ? \
((l)->next = (n), (n)->prev = (l), (l) = (n), SetNil(nil, (n)->next)) :\
(((!CheckNil(nil,p) && CheckNil(nil,(p)->next)) ? (0) : ((p)->next->prev = (n))), ((n)->next = (p)->next), ((p)->next = (n)), ((n)->prev = (p))))
#define DLLPushBack_NPZ(nil,f,l,n,next,prev) DLLInsert_NPZ(nil,f,l,l,n,next,prev)
#define DLLPushFront_NPZ(nil,f,l,n,next,prev) DLLInsert_NPZ(nil,l,f,f,n,prev,next)
#define DLLRemove_NPZ(nil,f,l,n,next,prev) (((n) == (f) ? (f) = (n)->next : (0)),\
((n) == (l) ? (l) = (l)->prev : (0)),\
(CheckNil(nil,(n)->prev) ? (0) :\
((n)->prev->next = (n)->next)),\
(CheckNil(nil,(n)->next) ? (0) :\
((n)->next->prev = (n)->prev)))
//- rjf: singly-linked, doubly-headed lists (queues)
#define SLLQueuePush_NZ(nil,f,l,n,next) (CheckNil(nil,f)?\
((f)=(l)=(n),SetNil(nil,(n)->next)):\
((l)->next=(n),(l)=(n),SetNil(nil,(n)->next)))
#define SLLQueuePushFront_NZ(nil,f,l,n,next) (CheckNil(nil,f)?\
((f)=(l)=(n),SetNil(nil,(n)->next)):\
((n)->next=(f),(f)=(n)))
#define SLLQueuePop_NZ(nil,f,l,next) ((f)==(l)?\
(SetNil(nil,f),SetNil(nil,l)):\
((f)=(f)->next))
//- rjf: singly-linked, singly-headed lists (stacks)
#define SLLStackPush_N(f,n,next) ((n)->next=(f), (f)=(n))
#define SLLStackPop_N(f,next) ((f)=(f)->next)
//- rjf: doubly-linked-list helpers
#define DLLInsert_NP(f,l,p,n,next,prev) DLLInsert_NPZ(0,f,l,p,n,next,prev)
#define DLLPushBack_NP(f,l,n,next,prev) DLLPushBack_NPZ(0,f,l,n,next,prev)
#define DLLPushFront_NP(f,l,n,next,prev) DLLPushFront_NPZ(0,f,l,n,next,prev)
#define DLLRemove_NP(f,l,n,next,prev) DLLRemove_NPZ(0,f,l,n,next,prev)
#define DLLInsert(f,l,p,n) DLLInsert_NPZ(0,f,l,p,n,next,prev)
#define DLLPushBack(f,l,n) DLLPushBack_NPZ(0,f,l,n,next,prev)
#define DLLPushFront(f,l,n) DLLPushFront_NPZ(0,f,l,n,next,prev)
#define DLLRemove(f,l,n) DLLRemove_NPZ(0,f,l,n,next,prev)
//- rjf: singly-linked, doubly-headed list helpers
#define SLLQueuePush_N(f,l,n,next) SLLQueuePush_NZ(0,f,l,n,next)
#define SLLQueuePushFront_N(f,l,n,next) SLLQueuePushFront_NZ(0,f,l,n,next)
#define SLLQueuePop_N(f,l,next) SLLQueuePop_NZ(0,f,l,next)
#define SLLQueuePush(f,l,n) SLLQueuePush_NZ(0,f,l,n,next)
#define SLLQueuePushFront(f,l,n) SLLQueuePushFront_NZ(0,f,l,n,next)
#define SLLQueuePop(f,l) SLLQueuePop_NZ(0,f,l,next)
//- rjf: singly-linked, singly-headed list helpers
#define SLLStackPush(f,n) SLLStackPush_N(f,n,next)
#define SLLStackPop(f) SLLStackPop_N(f,next)
////////////////////////////////
//~ rjf: Address Sanitizer Markup
#if COMPILER_MSVC
# if defined(__SANITIZE_ADDRESS__)
# define ASAN_ENABLED 1
# define NO_ASAN __declspec(no_sanitize_address)
# else
# define NO_ASAN
# endif
#elif COMPILER_CLANG
# if defined(__has_feature)
# if __has_feature(address_sanitizer) || defined(__SANITIZE_ADDRESS__)
# define ASAN_ENABLED 1
# endif
# endif
# define NO_ASAN __attribute__((no_sanitize("address")))
#else
# define NO_ASAN
#endif
#if ASAN_ENABLED
C_LINKAGE void __asan_poison_memory_region(void const volatile *addr, size_t size);
C_LINKAGE void __asan_unpoison_memory_region(void const volatile *addr, size_t size);
# define AsanPoisonMemoryRegion(addr, size) __asan_poison_memory_region((addr), (size))
# define AsanUnpoisonMemoryRegion(addr, size) __asan_unpoison_memory_region((addr), (size))
#else
# define AsanPoisonMemoryRegion(addr, size) ((void)(addr), (void)(size))
# define AsanUnpoisonMemoryRegion(addr, size) ((void)(addr), (void)(size))
#endif
////////////////////////////////
//~ rjf: Misc. Helper Macros
#define Stringify_(S) #S
#define Stringify(S) Stringify_(S)
#define Glue_(A,B) A##B
#define Glue(A,B) Glue_(A,B)
#define ArrayCount(a) (sizeof(a) / sizeof((a)[0]))
#define CeilIntegerDiv(a,b) (((a) + (b) - 1)/(b))
#define Swap(T,a,b) do{T t__ = a; a = b; b = t__;}while(0)
#if ARCH_64BIT
# define IntFromPtr(ptr) ((U64)(ptr))
#elif ARCH_32BIT
# define IntFromPtr(ptr) ((U32)(ptr))
#else
# error Missing pointer-to-integer cast for this architecture.
#endif
#define PtrFromInt(i) (void*)(i)
#define Compose64Bit(a,b) ((((U64)a) << 32) | ((U64)b))
#define Compose32Bit(a,b) ((((U32)a) << 16) | ((U32)b))
#define AlignPow2(x,b) (((x) + (b) - 1)&(~((b) - 1)))
#define AlignDownPow2(x,b) ((x)&(~((b) - 1)))
#define AlignPadPow2(x,b) ((0-(x)) & ((b) - 1))
#define IsPow2(x) ((x)!=0 && ((x)&((x)-1))==0)
#define IsPow2OrZero(x) ((((x) - 1)&(x)) == 0)
#define ExtractBit(word, idx) (((word) >> (idx)) & 1)
#define Extract8(word, pos) (((word) >> ((pos)*8)) & max_U8)
#define Extract16(word, pos) (((word) >> ((pos)*16)) & max_U16)
#define Extract32(word, pos) (((word) >> ((pos)*32)) & max_U32)
#if LANG_CPP
# define zero_struct {}
#else
# define zero_struct {0}
#endif
#if COMPILER_MSVC && COMPILER_MSVC_YEAR < 2015
# define this_function_name "unknown"
#else
# define this_function_name __func__
#endif
////////////////////////////////
//~ rjf: Base Types
typedef uint8_t U8;
typedef uint16_t U16;
typedef uint32_t U32;
typedef uint64_t U64;
typedef int8_t S8;
typedef int16_t S16;
typedef int32_t S32;
typedef int64_t S64;
typedef S8 B8;
typedef S16 B16;
typedef S32 B32;
typedef S64 B64;
typedef float F32;
typedef double F64;
typedef void VoidProc(void);
typedef union U128 U128;
union U128
{
U8 u8[16];
U16 u16[8];
U32 u32[4];
U64 u64[2];
};
typedef union U256 U256;
union U256
{
U8 u8[32];
U16 u16[16];
U32 u32[8];
U64 u64[4];
U128 u128[2];
};
typedef union U512 U512;
union U512
{
U8 u8[64];
U16 u16[32];
U32 u32[16];
U64 u64[8];
U128 u128[4];
U256 u256[2];
};
////////////////////////////////
//~ rjf: Basic Type Structures
typedef struct U16Array U16Array;
struct U16Array
{
U64 count;
U16 *v;
};
typedef struct U32Array U32Array;
struct U32Array
{
U64 count;
U32 *v;
};
typedef struct U64Array U64Array;
struct U64Array
{
U64 count;
U64 *v;
};
typedef struct U128Array U128Array;
struct U128Array
{
U64 count;
U128 *v;
};
////////////////////////////////
//~ rjf: Basic Types & Spaces
typedef enum Dimension
{
Dimension_X,
Dimension_Y,
Dimension_Z,
Dimension_W,
}
Dimension;
typedef enum Side
{
Side_Invalid = -1,
Side_Min,
Side_Max,
Side_COUNT,
}
Side;
#define side_flip(s) ((Side)(!(s)))
typedef enum Axis2
{
Axis2_Invalid = -1,
Axis2_X,
Axis2_Y,
Axis2_COUNT,
}
Axis2;
#define axis2_flip(a) ((Axis2)(!(a)))
typedef enum Corner
{
Corner_Invalid = -1,
Corner_00,
Corner_01,
Corner_10,
Corner_11,
Corner_COUNT
}
Corner;
typedef enum Dir2
{
Dir2_Invalid = -1,
Dir2_Left,
Dir2_Up,
Dir2_Right,
Dir2_Down,
Dir2_COUNT
}
Dir2;
#define axis2_from_dir2(d) (((d) & 1) ? Axis2_Y : Axis2_X)
#define side_from_dir2(d) (((d) < Dir2_Right) ? Side_Min : Side_Max)
////////////////////////////////
//~ rjf: Toolchain/Environment Enums
typedef enum OperatingSystem
{
OperatingSystem_Null,
OperatingSystem_Windows,
OperatingSystem_Linux,
OperatingSystem_Mac,
OperatingSystem_COUNT,
#if OS_WINDOWS
OperatingSystem_CURRENT = OperatingSystem_Windows,
#elif OS_LINUX
OperatingSystem_CURRENT = OperatingSystem_Linux,
#elif OS_MAC
OperatingSystem_CURRENT = OperatingSystem_Mac,
#else
OperatingSystem_CURRENT = OperatingSystem_Null,
#endif
}
OperatingSystem;
typedef enum ExecutableImageKind
{
ExecutableImageKind_Null,
ExecutableImageKind_CoffPe,
ExecutableImageKind_Elf32,
ExecutableImageKind_Elf64,
ExecutableImageKind_Macho,
ExecutableImageKind_COUNT
}
ExecutableImageKind;
typedef enum Arch
{
Arch_Null,
Arch_x64,
Arch_x86,
Arch_arm64,
Arch_arm32,
Arch_COUNT,
}
Arch;
#if ARCH_X64
# define Arch_CURRENT Arch_x64
#elif ARCH_X86
# define Arch_CURRENT Arch_x86
#elif ARCH_ARM64
# define Arch_CURRENT Arch_arm64
#elif ARCH_ARM32
# define Arch_CURRENT Arch_arm32
#else
# define Arch_CURRENT Arch_Null
#endif
typedef enum Compiler
{
Compiler_Null,
Compiler_msvc,
Compiler_gcc,
Compiler_clang,
Compiler_COUNT,
}
Compiler;
#if COMPILER_MSVC
# define Compiler_CURRENT Compiler_msvc
#elif COMPILER_GCC
# define Compiler_CURRENT Compiler_gcc
#elif COMPILER_CLANG
# define Compiler_CURRENT Compiler_clang
#else
# define Compiler_CURRENT Compiler_Null
#endif
////////////////////////////////
//~ rjf: Text 2D Coordinates & Ranges
typedef struct TxtPt TxtPt;
struct TxtPt
{
S64 line;
S64 column;
};
typedef struct TxtRng TxtRng;
struct TxtRng
{
TxtPt min;
TxtPt max;
};
////////////////////////////////
//~ rjf: Globally Unique Ids
typedef union Guid Guid;
union Guid
{
struct
{
U32 data1;
U16 data2;
U16 data3;
U8 data4[8];
};
U8 v[16];
};
StaticAssert(sizeof(Guid) == 16, g_guid_size_check);
////////////////////////////////
//~ rjf: Basic Constants
global U32 sign32 = 0x80000000;
global U32 exponent32 = 0x7F800000;
global U32 mantissa32 = 0x007FFFFF;
global F32 big_golden32 = 1.61803398875f;
global F32 small_golden32 = 0.61803398875f;
global F32 pi32 = 3.1415926535897f;
global F64 machine_epsilon64 = 4.94065645841247e-324;
global U64 max_U64 = 0xffffffffffffffffull;
global U32 max_U32 = 0xffffffff;
global U16 max_U16 = 0xffff;
global U8 max_U8 = 0xff;
global S64 max_S64 = (S64)0x7fffffffffffffffll;
global S32 max_S32 = (S32)0x7fffffff;
global S16 max_S16 = (S16)0x7fff;
global S8 max_S8 = (S8)0x7f;
global S64 min_S64 = (S64)0x8000000000000000ll;
global S32 min_S32 = (S32)0x80000000;
global S16 min_S16 = (S16)0x8000;
global S8 min_S8 = (S8)0x80;
global const U32 bitmask1 = 0x00000001;
global const U32 bitmask2 = 0x00000003;
global const U32 bitmask3 = 0x00000007;
global const U32 bitmask4 = 0x0000000f;
global const U32 bitmask5 = 0x0000001f;
global const U32 bitmask6 = 0x0000003f;
global const U32 bitmask7 = 0x0000007f;
global const U32 bitmask8 = 0x000000ff;
global const U32 bitmask9 = 0x000001ff;
global const U32 bitmask10 = 0x000003ff;
global const U32 bitmask11 = 0x000007ff;
global const U32 bitmask12 = 0x00000fff;
global const U32 bitmask13 = 0x00001fff;
global const U32 bitmask14 = 0x00003fff;
global const U32 bitmask15 = 0x00007fff;
global const U32 bitmask16 = 0x0000ffff;
global const U32 bitmask17 = 0x0001ffff;
global const U32 bitmask18 = 0x0003ffff;
global const U32 bitmask19 = 0x0007ffff;
global const U32 bitmask20 = 0x000fffff;
global const U32 bitmask21 = 0x001fffff;
global const U32 bitmask22 = 0x003fffff;
global const U32 bitmask23 = 0x007fffff;
global const U32 bitmask24 = 0x00ffffff;
global const U32 bitmask25 = 0x01ffffff;
global const U32 bitmask26 = 0x03ffffff;
global const U32 bitmask27 = 0x07ffffff;
global const U32 bitmask28 = 0x0fffffff;
global const U32 bitmask29 = 0x1fffffff;
global const U32 bitmask30 = 0x3fffffff;
global const U32 bitmask31 = 0x7fffffff;
global const U32 bitmask32 = 0xffffffff;
global const U64 bitmask33 = 0x00000001ffffffffull;
global const U64 bitmask34 = 0x00000003ffffffffull;
global const U64 bitmask35 = 0x00000007ffffffffull;
global const U64 bitmask36 = 0x0000000fffffffffull;
global const U64 bitmask37 = 0x0000001fffffffffull;
global const U64 bitmask38 = 0x0000003fffffffffull;
global const U64 bitmask39 = 0x0000007fffffffffull;
global const U64 bitmask40 = 0x000000ffffffffffull;
global const U64 bitmask41 = 0x000001ffffffffffull;
global const U64 bitmask42 = 0x000003ffffffffffull;
global const U64 bitmask43 = 0x000007ffffffffffull;
global const U64 bitmask44 = 0x00000fffffffffffull;
global const U64 bitmask45 = 0x00001fffffffffffull;
global const U64 bitmask46 = 0x00003fffffffffffull;
global const U64 bitmask47 = 0x00007fffffffffffull;
global const U64 bitmask48 = 0x0000ffffffffffffull;
global const U64 bitmask49 = 0x0001ffffffffffffull;
global const U64 bitmask50 = 0x0003ffffffffffffull;
global const U64 bitmask51 = 0x0007ffffffffffffull;
global const U64 bitmask52 = 0x000fffffffffffffull;
global const U64 bitmask53 = 0x001fffffffffffffull;
global const U64 bitmask54 = 0x003fffffffffffffull;
global const U64 bitmask55 = 0x007fffffffffffffull;
global const U64 bitmask56 = 0x00ffffffffffffffull;
global const U64 bitmask57 = 0x01ffffffffffffffull;
global const U64 bitmask58 = 0x03ffffffffffffffull;
global const U64 bitmask59 = 0x07ffffffffffffffull;
global const U64 bitmask60 = 0x0fffffffffffffffull;
global const U64 bitmask61 = 0x1fffffffffffffffull;
global const U64 bitmask62 = 0x3fffffffffffffffull;
global const U64 bitmask63 = 0x7fffffffffffffffull;
global const U64 bitmask64 = 0xffffffffffffffffull;
global const U32 bit1 = (1<<0);
global const U32 bit2 = (1<<1);
global const U32 bit3 = (1<<2);
global const U32 bit4 = (1<<3);
global const U32 bit5 = (1<<4);
global const U32 bit6 = (1<<5);
global const U32 bit7 = (1<<6);
global const U32 bit8 = (1<<7);
global const U32 bit9 = (1<<8);
global const U32 bit10 = (1<<9);
global const U32 bit11 = (1<<10);
global const U32 bit12 = (1<<11);
global const U32 bit13 = (1<<12);
global const U32 bit14 = (1<<13);
global const U32 bit15 = (1<<14);
global const U32 bit16 = (1<<15);
global const U32 bit17 = (1<<16);
global const U32 bit18 = (1<<17);
global const U32 bit19 = (1<<18);
global const U32 bit20 = (1<<19);
global const U32 bit21 = (1<<20);
global const U32 bit22 = (1<<21);
global const U32 bit23 = (1<<22);
global const U32 bit24 = (1<<23);
global const U32 bit25 = (1<<24);
global const U32 bit26 = (1<<25);
global const U32 bit27 = (1<<26);
global const U32 bit28 = (1<<27);
global const U32 bit29 = (1<<28);
global const U32 bit30 = (1<<29);
global const U32 bit31 = (1<<30);
global const U32 bit32 = (1<<31);
global const U64 bit33 = (1ull<<32);
global const U64 bit34 = (1ull<<33);
global const U64 bit35 = (1ull<<34);
global const U64 bit36 = (1ull<<35);
global const U64 bit37 = (1ull<<36);
global const U64 bit38 = (1ull<<37);
global const U64 bit39 = (1ull<<38);
global const U64 bit40 = (1ull<<39);
global const U64 bit41 = (1ull<<40);
global const U64 bit42 = (1ull<<41);
global const U64 bit43 = (1ull<<42);
global const U64 bit44 = (1ull<<43);
global const U64 bit45 = (1ull<<44);
global const U64 bit46 = (1ull<<45);
global const U64 bit47 = (1ull<<46);
global const U64 bit48 = (1ull<<47);
global const U64 bit49 = (1ull<<48);
global const U64 bit50 = (1ull<<49);
global const U64 bit51 = (1ull<<50);
global const U64 bit52 = (1ull<<51);
global const U64 bit53 = (1ull<<52);
global const U64 bit54 = (1ull<<53);
global const U64 bit55 = (1ull<<54);
global const U64 bit56 = (1ull<<55);
global const U64 bit57 = (1ull<<56);
global const U64 bit58 = (1ull<<57);
global const U64 bit59 = (1ull<<58);
global const U64 bit60 = (1ull<<59);
global const U64 bit61 = (1ull<<60);
global const U64 bit62 = (1ull<<61);
global const U64 bit63 = (1ull<<62);
global const U64 bit64 = (1ull<<63);
////////////////////////////////
//~ rjf: Time Types
typedef enum WeekDay
{
WeekDay_Sun,
WeekDay_Mon,
WeekDay_Tue,
WeekDay_Wed,
WeekDay_Thu,
WeekDay_Fri,
WeekDay_Sat,
WeekDay_COUNT,
}
WeekDay;
typedef enum Month
{
Month_Jan,
Month_Feb,
Month_Mar,
Month_Apr,
Month_May,
Month_Jun,
Month_Jul,
Month_Aug,
Month_Sep,
Month_Oct,
Month_Nov,
Month_Dec,
Month_COUNT,
}
Month;
typedef struct DateTime DateTime;
struct DateTime
{
U16 micro_sec; // [0,999]
U16 msec; // [0,999]
U16 sec; // [0,60]
U16 min; // [0,59]
U16 hour; // [0,24]
U16 day; // [0,30]
union
{
WeekDay week_day;
U32 wday;
};
union
{
Month month;
U32 mon;
};
U32 year; // 1 = 1 CE, 0 = 1 BC
};
typedef U64 DenseTime;
////////////////////////////////
//~ rjf: File Types
typedef U32 FilePropertyFlags;
enum
{
FilePropertyFlag_IsFolder = (1 << 0),
};
typedef struct FileProperties FileProperties;
struct FileProperties
{
U64 size;
DenseTime modified;
DenseTime created;
FilePropertyFlags flags;
};
////////////////////////////////
//~ rjf: Safe Casts
internal U16 safe_cast_u16(U32 x);
internal U32 safe_cast_u32(U64 x);
internal S32 safe_cast_s32(S64 x);
////////////////////////////////
//~ rjf: Large Base Type Functions
internal U128 u128_zero(void);
internal U128 u128_make(U64 v0, U64 v1);
internal B32 u128_match(U128 a, U128 b);
////////////////////////////////
//~ rjf: Bit Patterns
internal U32 u32_from_u64_saturate(U64 x);
internal U64 u64_up_to_pow2(U64 x);
internal S32 extend_sign32(U32 x, U32 size);
internal S64 extend_sign64(U64 x, U64 size);
internal F32 inf32(void);
internal F32 neg_inf32(void);
internal U16 bswap_u16(U16 x);
internal U32 bswap_u32(U32 x);
internal U64 bswap_u64(U64 x);
#if ARCH_LITTLE_ENDIAN
# define from_be_u16(x) bswap_u16(x)
# define from_be_u32(x) bswap_u32(x)
# define from_be_u64(x) bswap_u64(x)
#else
# define from_be_u16(x) (x)
# define from_be_u32(x) (x)
# define from_be_u64(x) (x)
#endif
internal U64 count_bits_set32(U32 val);
internal U64 count_bits_set64(U64 val);
internal U64 ctz32(U32 val);
internal U64 ctz64(U64 val);
internal U64 clz32(U32 val);
internal U64 clz64(U64 val);
////////////////////////////////
//~ rjf: Enum -> Sign
internal S32 sign_from_side_S32(Side side);
internal F32 sign_from_side_F32(Side side);
////////////////////////////////
//~ rjf: Memory Functions
internal B32 memory_is_zero(void *ptr, U64 size);
////////////////////////////////
//~ rjf: Text 2D Coordinate/Range Functions
internal TxtPt txt_pt(S64 line, S64 column);
internal B32 txt_pt_match(TxtPt a, TxtPt b);
internal B32 txt_pt_less_than(TxtPt a, TxtPt b);
internal TxtPt txt_pt_min(TxtPt a, TxtPt b);
internal TxtPt txt_pt_max(TxtPt a, TxtPt b);
internal TxtRng txt_rng(TxtPt min, TxtPt max);
internal TxtRng txt_rng_intersect(TxtRng a, TxtRng b);
internal TxtRng txt_rng_union(TxtRng a, TxtRng b);
internal B32 txt_rng_contains(TxtRng r, TxtPt pt);
////////////////////////////////
//~ rjf: Toolchain/Environment Enum Functions
internal U64 bit_size_from_arch(Arch arch);
internal U64 byte_size_from_arch(Arch arch);
internal U64 max_instruction_size_from_arch(Arch arch);
////////////////////////////////
//~ rjf: Time Functions
internal DenseTime dense_time_from_date_time(DateTime date_time);
internal DateTime date_time_from_dense_time(DenseTime time);
internal DateTime date_time_from_micro_seconds(U64 time);
internal DateTime date_time_from_unix_time(U64 unix_time);
////////////////////////////////
//~ rjf: Non-Fancy Ring Buffer Reads/Writes
internal U64 ring_write(U8 *ring_base, U64 ring_size, U64 ring_pos, void *src_data, U64 src_data_size);
internal U64 ring_read(U8 *ring_base, U64 ring_size, U64 ring_pos, void *dst_data, U64 read_size);
#define ring_write_struct(ring_base, ring_size, ring_pos, ptr) ring_write((ring_base), (ring_size), (ring_pos), (ptr), sizeof(*(ptr)))
#define ring_read_struct(ring_base, ring_size, ring_pos, ptr) ring_read((ring_base), (ring_size), (ring_pos), (ptr), sizeof(*(ptr)))
////////////////////////////////
//~ rjf: Sorts
#define quick_sort(ptr, count, element_size, cmp_function) qsort((ptr), (count), (element_size), (int (*)(const void *, const void *))(cmp_function))
////////////////////////////////
internal U64 u64_array_bsearch(U64 *arr, U64 count, U64 value);
////////////////////////////////
internal U64 index_of_zero_u32(U32 *ptr, U64 count);
internal U64 index_of_zero_u64(U64 *ptr, U64 count);
#endif // BASE_CORE_H
================================================
FILE: src/base/base_entry_point.c
================================================
// Copyright (c) Epic Games Tools
// Licensed under the MIT license (https://opensource.org/license/mit/)
global U64 global_update_tick_idx = 0;
global U64 async_threads_count = 0;
global CondVar async_tick_start_cond_var = {0};
global Mutex async_tick_start_mutex = {0};
global Mutex async_tick_stop_mutex = {0};
global B32 async_loop_again = 0;
global B32 async_loop_again_high_priority = 0;
global B32 global_async_exit = 0;
thread_static B32 is_async_thread = 0;
internal void
main_thread_base_entry_point(int arguments_count, char **arguments)
{
ThreadNameF("main_thread");
Temp scratch = scratch_begin(0, 0);
//- rjf: set up async thread group info
async_tick_start_cond_var = cond_var_alloc();
async_tick_start_mutex = mutex_alloc();
async_tick_stop_mutex = mutex_alloc();
//- rjf: set up telemetry
#if PROFILE_TELEMETRY
local_persist char tm_data[MB(64)];
tmLoadLibrary(TM_RELEASE);
tmSetMaxThreadCount(256);
tmInitialize(sizeof(tm_data), tm_data);
#endif
//- rjf: set up spall
#if PROFILE_SPALL
spall_profile = spall_init_file_ex("spall_capture", 1, 0);
#endif
//- rjf: parse command line
String8List command_line_argument_strings = {0};
{
for EachIndex(idx, arguments_count)
{
str8_list_push(scratch.arena, &command_line_argument_strings, str8_cstring(arguments[idx]));
}
}
CmdLine cmdline = cmd_line_from_string_list(scratch.arena, command_line_argument_strings);
//- rjf: begin captures
B32 capture = cmd_line_has_flag(&cmdline, str8_lit("capture"));
if(capture)
{
ProfBeginCapture(arguments[0]);
ProfMsg(BUILD_TITLE);
}
//- rjf: initialize all included layers
#if defined(ARTIFACT_CACHE_H) && !defined(AC_INIT_MANUAL)
ac_init();
#endif
#if defined(CONTENT_H) && !defined(C_INIT_MANUAL)
c_init();
#endif
#if defined(FILE_STREAM_H) && !defined(FS_INIT_MANUAL)
fs_init();
#endif
#if defined(MUTABLE_TEXT_H) && !defined(MTX_INIT_MANUAL)
mtx_init();
#endif
#if defined(DBG_INFO_H) && !defined(DI_INIT_MANUAL)
di_init(&cmdline);
#endif
#if defined(DEMON_CORE_H) && !defined(DMN_INIT_MANUAL)
dmn_init();
#endif
#if defined(CTRL_CORE_H) && !defined(CTRL_INIT_MANUAL)
ctrl_init();
#endif
#if defined(OS_GFX_H) && !defined(OS_GFX_INIT_MANUAL)
os_gfx_init();
#endif
#if defined(FONT_PROVIDER_H) && !defined(FP_INIT_MANUAL)
fp_init();
#endif
#if defined(RENDER_CORE_H) && !defined(R_INIT_MANUAL)
r_init(&cmdline);
#endif
#if defined(FONT_CACHE_H) && !defined(FNT_INIT_MANUAL)
fnt_init();
#endif
#if defined(DBG_ENGINE_CORE_H) && !defined(D_INIT_MANUAL)
d_init();
#endif
#if defined(RADDBG_CORE_H) && !defined(RD_INIT_MANUAL)
rd_init(&cmdline);
#endif
//- rjf: launch async threads
Thread *async_threads = 0;
U64 lane_broadcast_val = 0;
{
U64 num_main_threads = 1;
#if defined(CTRL_CORE_H)
num_main_threads += 1;
#endif
U64 num_async_threads = os_get_system_info()->logical_processor_count;
U64 num_main_threads_clamped = Min(num_async_threads, num_main_threads);
num_async_threads -= num_main_threads_clamped;
String8 num_async_threads_string = cmd_line_string(&cmdline, str8_lit("async_thread_count"));
if(num_async_threads_string.size != 0)
{
try_u64_from_str8_c_rules(num_async_threads_string, &num_async_threads);
}
num_async_threads = Max(1, num_async_threads);
Barrier barrier = barrier_alloc(num_async_threads);
LaneCtx *lane_ctxs = push_array(scratch.arena, LaneCtx, num_async_threads);
async_threads_count = num_async_threads;
async_threads = push_array(scratch.arena, Thread, async_threads_count);
for EachIndex(idx, num_async_threads)
{
lane_ctxs[idx].lane_idx = idx;
lane_ctxs[idx].lane_count = async_threads_count;
lane_ctxs[idx].barrier = barrier;
lane_ctxs[idx].broadcast_memory = &lane_broadcast_val;
async_threads[idx] = thread_launch(async_thread_entry_point, &lane_ctxs[idx]);
}
}
//- rjf: call into entry point
entry_point(&cmdline);
//- rjf: join async threads
ins_atomic_u32_inc_eval(&global_async_exit);
cond_var_broadcast(async_tick_start_cond_var);
for EachIndex(idx, async_threads_count)
{
thread_join(async_threads[idx], max_U64);
}
//- rjf: end captures
if(capture)
{
ProfEndCapture();
}
scratch_end(scratch);
}
internal void
supplement_thread_base_entry_point(void (*entry_point)(void *params), void *params)
{
TCTX *tctx = tctx_alloc();
tctx_select(tctx);
entry_point(params);
tctx_release(tctx);
}
internal U64
update_tick_idx(void)
{
U64 result = ins_atomic_u64_eval(&global_update_tick_idx);
return result;
}
internal B32
update(void)
{
ProfTick(0);
ins_atomic_u64_inc_eval(&global_update_tick_idx);
#if defined(FONT_CACHE_H)
fnt_frame();
#endif
#if OS_FEATURE_GRAPHICAL
B32 result = frame();
#else
B32 result = 0;
#endif
return result;
}
internal void
async_thread_entry_point(void *params)
{
LaneCtx lctx = *(LaneCtx *)params;
lane_ctx(lctx);
is_async_thread = 1;
ThreadNameF("async_thread_%I64u", lane_idx());
for(;;)
{
// rjf: wait for signal if we need, otherwise reset loop signal & continue
if(lane_idx() == 0)
{
if(!ins_atomic_u32_eval(&async_loop_again))
{
MutexScope(async_tick_start_mutex) cond_var_wait(async_tick_start_cond_var, async_tick_start_mutex, os_now_microseconds()+1000000);
}
ins_atomic_u32_eval_assign(&async_loop_again, 0);
ins_atomic_u32_eval_assign(&async_loop_again_high_priority, 0);
}
lane_sync();
// rjf: do all ticks for all layers
ProfScope("async tick")
{
#if defined(ARTIFACT_CACHE_H)
ac_async_tick();
#endif
#if defined(CONTENT_H)
c_async_tick();
#endif
#if defined(FILE_STREAM_H)
fs_async_tick();
#endif
#if defined(DBG_INFO_H)
di_async_tick();
#endif
}
// rjf: take exit signal; break if set
lane_sync();
B32 need_exit = 0;
if(lane_idx() == 0)
{
need_exit = ins_atomic_u32_eval(&global_async_exit);
}
lane_sync_u64(&need_exit, 0);
if(need_exit)
{
break;
}
}
}
================================================
FILE: src/base/base_entry_point.h
================================================
// Copyright (c) Epic Games Tools
// Licensed under the MIT license (https://opensource.org/license/mit/)
#ifndef BASE_ENTRY_POINT_H
#define BASE_ENTRY_POINT_H
internal void main_thread_base_entry_point(int argc, char **argv);
internal void supplement_thread_base_entry_point(void (*entry_point)(void *params), void *params);
internal U64 update_tick_idx(void);
internal B32 update(void);
internal void async_thread_entry_point(void *params);
#endif // BASE_ENTRY_POINT_H
================================================
FILE: src/base/base_hash.c
================================================
// Copyright (c) Epic Games Tools
// Licensed under the MIT license (https://opensource.org/license/mit/)
////////////////////////////////
//~ rjf: MD5
#include "third_party/martins_hash/md5.h"
internal MD5
md5_from_data(String8 data)
{
md5_ctx ctx = {0};
md5_init(&ctx);
md5_update(&ctx, (void*)data.str, data.size);
MD5 result = {0};
md5_finish(&ctx, result.u8);
return result;
}
////////////////////////////////
//~ rjf: SHA
#include "third_party/martins_hash/sha1.h"
#include "third_party/martins_hash/sha256.h"
internal SHA1
sha1_from_data(String8 data)
{
SHA1 result = {0};
{
sha1_ctx ctx = {0};
sha1_init(&ctx);
sha1_update(&ctx, data.str, data.size);
sha1_finish(&ctx, result.u8);
}
return result;
}
internal SHA256
sha256_from_data(String8 data)
{
SHA256 result = {0};
{
sha256_ctx ctx = {0};
sha256_init(&ctx);
sha256_update(&ctx, data.str, data.size);
sha256_finish(&ctx, result.u8);
}
return result;
}
================================================
FILE: src/base/base_hash.h
================================================
// Copyright (c) Epic Games Tools
// Licensed under the MIT license (https://opensource.org/license/mit/)
#ifndef BASE_HASH_H
#define BASE_HASH_H
////////////////////////////////
//~ rjf: Hash Result Types
typedef union MD5 MD5;
union MD5
{
U8 u8[16];
U16 u16[8];
U32 u32[4];
U64 u64[2];
U128 u128;
};
typedef union SHA1 SHA1;
union SHA1
{
U8 u8[20];
};
typedef union SHA256 SHA256;
union SHA256
{
U8 u8[32];
U16 u16[16];
U32 u32[8];
U64 u64[4];
U128 u128[2];
U256 u256;
};
////////////////////////////////
//~ rjf: MD5
internal MD5 md5_from_data(String8 data);
////////////////////////////////
//~ rjf: SHA
internal SHA1 sha1_from_data(String8 data);
internal SHA256 sha256_from_data(String8 data);
#endif // BASE_HASH_H
================================================
FILE: src/base/base_inc.c
================================================
// Copyright (c) Epic Games Tools
// Licensed under the MIT license (https://opensource.org/license/mit/)
////////////////////////////////
//~ rjf: Base Includes
#undef LAYER_COLOR
#define LAYER_COLOR 0x3399ccff
#include "base_core.c"
#include "base_profile.c"
#include "base_arena.c"
#include "base_math.c"
#include "base_strings.c"
#include "base_hash.c"
#include "base_threads.c"
#include "base_thread_context.c"
#include "base_command_line.c"
#include "base_markup.c"
#include "base_meta.c"
#include "base_log.c"
#include "base_entry_point.c"
================================================
FILE: src/base/base_inc.h
================================================
// Copyright (c) Epic Games Tools
// Licensed under the MIT license (https://opensource.org/license/mit/)
#ifndef BASE_INC_H
#define BASE_INC_H
////////////////////////////////
//~ rjf: Base Includes
#include "base_context_cracking.h"
#include "base_core.h"
#include "base_profile.h"
#include "base_arena.h"
#include "base_math.h"
#include "base_strings.h"
#include "base_hash.h"
#include "base_threads.h"
#include "base_thread_context.h"
#include "base_command_line.h"
#include "base_markup.h"
#include "base_meta.h"
#include "base_log.h"
#include "base_entry_point.h"
#endif // BASE_INC_H
================================================
FILE: src/base/base_log.c
================================================
// Copyright (c) Epic Games Tools
// Licensed under the MIT license (https://opensource.org/license/mit/)
////////////////////////////////
//~ rjf: Globals/Thread-Locals
C_LINKAGE thread_static Log *log_active;
#if !BUILD_SUPPLEMENTARY_UNIT
C_LINKAGE thread_static Log *log_active = 0;
#endif
////////////////////////////////
//~ rjf: Log Creation/Selection
internal Log *
log_alloc(void)
{
Arena *arena = arena_alloc();
Log *log = push_array(arena, Log, 1);
log->arena = arena;
return log;
}
internal void
log_release(Log *log)
{
arena_release(log->arena);
}
internal void
log_select(Log *log)
{
log_active = log;
}
////////////////////////////////
//~ rjf: Log Building/Clearing
internal void
log_msg(LogMsgKind kind, String8 string)
{
if(log_active != 0 && log_active->top_scope != 0)
{
String8 string_copy = push_str8_copy(log_active->arena, string);
str8_list_push(log_active->arena, &log_active->top_scope->strings[kind], string_copy);
}
}
internal void
log_msgf(LogMsgKind kind, char *fmt, ...)
{
if(log_active != 0)
{
Temp scratch = scratch_begin(0, 0);
va_list args;
va_start(args, fmt);
String8 string = push_str8fv(scratch.arena, fmt, args);
log_msg(kind, string);
va_end(args);
scratch_end(scratch);
}
}
////////////////////////////////
//~ rjf: Log Scopes
internal void
log_scope_begin(void)
{
if(log_active != 0)
{
U64 pos = arena_pos(log_active->arena);
LogScope *scope = push_array(log_active->arena, LogScope, 1);
scope->pos = pos;
SLLStackPush(log_active->top_scope, scope);
}
}
internal LogScopeResult
log_scope_end(Arena *arena)
{
LogScopeResult result = {0};
if(log_active != 0)
{
LogScope *scope = log_active->top_scope;
if(scope != 0)
{
SLLStackPop(log_active->top_scope);
if(arena != 0)
{
for EachEnumVal(LogMsgKind, kind)
{
Temp scratch = scratch_begin(&arena, 1);
String8 result_unindented = str8_list_join(scratch.arena, &scope->strings[kind], 0);
result.strings[kind] = indented_from_string(arena, result_unindented);
scratch_end(scratch);
}
}
arena_pop_to(log_active->arena, scope->pos);
}
}
return result;
}
================================================
FILE: src/base/base_log.h
================================================
// Copyright (c) Epic Games Tools
// Licensed under the MIT license (https://opensource.org/license/mit/)
#ifndef BASE_LOG_H
#define BASE_LOG_H
////////////////////////////////
//~ rjf: Log Types
typedef enum LogMsgKind
{
LogMsgKind_Info,
LogMsgKind_UserError,
LogMsgKind_COUNT
}
LogMsgKind;
typedef struct LogScope LogScope;
struct LogScope
{
LogScope *next;
U64 pos;
String8List strings[LogMsgKind_COUNT];
};
typedef struct LogScopeResult LogScopeResult;
struct LogScopeResult
{
String8 strings[LogMsgKind_COUNT];
};
typedef struct Log Log;
struct Log
{
Arena *arena;
LogScope *top_scope;
};
////////////////////////////////
//~ rjf: Log Creation/Selection
internal Log *log_alloc(void);
internal void log_release(Log *log);
internal void log_select(Log *log);
////////////////////////////////
//~ rjf: Log Building
internal void log_msg(LogMsgKind kind, String8 string);
internal void log_msgf(LogMsgKind kind, char *fmt, ...);
#define log_info(s) log_msg(LogMsgKind_Info, (s))
#define log_infof(...) log_msgf(LogMsgKind_Info, __VA_ARGS__)
#define log_user_error(s) log_msg(LogMsgKind_UserError, (s))
#define log_user_errorf(...) log_msgf(LogMsgKind_UserError, __VA_ARGS__)
#define LogInfoNamedBlock(s) DeferLoop(log_infof("%S:\n{\n", (s)), log_infof("}\n"))
#define LogInfoNamedBlockF(...) DeferLoop((log_infof(__VA_ARGS__), log_infof(":\n{\n")), log_infof("}\n"))
////////////////////////////////
//~ rjf: Log Scopes
internal void log_scope_begin(void);
internal LogScopeResult log_scope_end(Arena *arena);
#endif // BASE_LOG_H
================================================
FILE: src/base/base_markup.c
================================================
// Copyright (c) Epic Games Tools
// Licensed under the MIT license (https://opensource.org/license/mit/)
internal void
set_thread_name(String8 string)
{
ProfThreadName("%.*s", str8_varg(string));
os_set_thread_name(string);
}
internal void
set_thread_namef(char *fmt, ...)
{
Temp scratch = scratch_begin(0, 0);
va_list args;
va_start(args, fmt);
String8 string = push_str8fv(scratch.arena, fmt, args);
set_thread_name(string);
va_end(args);
scratch_end(scratch);
}
================================================
FILE: src/base/base_markup.h
================================================
// Copyright (c) Epic Games Tools
// Licensed under the MIT license (https://opensource.org/license/mit/)
#ifndef BASE_MARKUP_H
#define BASE_MARKUP_H
#define RADDBG_MARKUP_IMPLEMENTATION
#define RADDBG_MARKUP_VSNPRINTF raddbg_vsnprintf
#if OS_LINUX
# define RADDBG_MARKUP_STUBS
#endif
#include "lib_raddbg_markup/raddbg_markup.h"
#if !defined(LAYER_COLOR)
# define LAYER_COLOR 0x404040ff
#endif
internal void set_thread_name(String8 string);
internal void set_thread_namef(char *fmt, ...);
#define ThreadNameF(...) (set_thread_namef(__VA_ARGS__), raddbg_thread_color_u32(LAYER_COLOR))
#endif // BASE_MARKUP_H
================================================
FILE: src/base/base_math.c
================================================
// Copyright (c) Epic Games Tools
// Licensed under the MIT license (https://opensource.org/license/mit/)
////////////////////////////////
//~ rjf: Scalar Math Ops
internal F32
mix_1f32(F32 a, F32 b, F32 t)
{
F32 c = (a + (b-a) * Clamp(0.f, t, 1.f));
return c;
}
internal F64
mix_1f64(F64 a, F64 b, F64 t)
{
F64 c = (a + (b-a) * Clamp(0.0, t, 1.0));
return c;
}
////////////////////////////////
//~ rjf: Vector Ops
internal Vec2F32 vec_2f32(F32 x, F32 y) {Vec2F32 v = {x, y}; return v;}
internal Vec2F32 add_2f32(Vec2F32 a, Vec2F32 b) {Vec2F32 c = {a.x+b.x, a.y+b.y}; return c;}
internal Vec2F32 sub_2f32(Vec2F32 a, Vec2F32 b) {Vec2F32 c = {a.x-b.x, a.y-b.y}; return c;}
internal Vec2F32 mul_2f32(Vec2F32 a, Vec2F32 b) {Vec2F32 c = {a.x*b.x, a.y*b.y}; return c;}
internal Vec2F32 div_2f32(Vec2F32 a, Vec2F32 b) {Vec2F32 c = {a.x/b.x, a.y/b.y}; return c;}
internal Vec2F32 scale_2f32(Vec2F32 v, F32 s) {Vec2F32 c = {v.x*s, v.y*s}; return c;}
internal F32 dot_2f32(Vec2F32 a, Vec2F32 b) {F32 c = a.x*b.x + a.y*b.y; return c;}
internal F32 length_squared_2f32(Vec2F32 v) {F32 c = v.x*v.x + v.y*v.y; return c;}
internal F32 length_2f32(Vec2F32 v) {F32 c = sqrt_f32(v.x*v.x + v.y*v.y); return c;}
internal Vec2F32 normalize_2f32(Vec2F32 v) {v = scale_2f32(v, 1.f/length_2f32(v)); return v;}
internal Vec2F32 mix_2f32(Vec2F32 a, Vec2F32 b, F32 t) {Vec2F32 c = {mix_1f32(a.x, b.x, t), mix_1f32(a.y, b.y, t)}; return c;}
internal Vec2S64 vec_2s64(S64 x, S64 y) {Vec2S64 v = {x, y}; return v;}
internal Vec2S64 add_2s64(Vec2S64 a, Vec2S64 b) {Vec2S64 c = {a.x+b.x, a.y+b.y}; return c;}
internal Vec2S64 sub_2s64(Vec2S64 a, Vec2S64 b) {Vec2S64 c = {a.x-b.x, a.y-b.y}; return c;}
internal Vec2S64 mul_2s64(Vec2S64 a, Vec2S64 b) {Vec2S64 c = {a.x*b.x, a.y*b.y}; return c;}
internal Vec2S64 div_2s64(Vec2S64 a, Vec2S64 b) {Vec2S64 c = {a.x/b.x, a.y/b.y}; return c;}
internal Vec2S64 scale_2s64(Vec2S64 v, S64 s) {Vec2S64 c = {v.x*s, v.y*s}; return c;}
internal S64 dot_2s64(Vec2S64 a, Vec2S64 b) {S64 c = a.x*b.x + a.y*b.y; return c;}
internal S64 length_squared_2s64(Vec2S64 v) {S64 c = v.x*v.x + v.y*v.y; return c;}
internal S64 length_2s64(Vec2S64 v) {S64 c = (S64)sqrt_f64((F64)(v.x*v.x + v.y*v.y)); return c;}
internal Vec2S64 mix_2s64(Vec2S64 a, Vec2S64 b, F32 t) {Vec2S64 c = {(S64)mix_1f32((F32)a.x, (F32)b.x, t), (S64)mix_1f32((F32)a.y, (F32)b.y, t)}; return c;}
internal Vec2S32 vec_2s32(S32 x, S32 y) {Vec2S32 v = {x, y}; return v;}
internal Vec2S32 add_2s32(Vec2S32 a, Vec2S32 b) {Vec2S32 c = {a.x+b.x, a.y+b.y}; return c;}
internal Vec2S32 sub_2s32(Vec2S32 a, Vec2S32 b) {Vec2S32 c = {a.x-b.x, a.y-b.y}; return c;}
internal Vec2S32 mul_2s32(Vec2S32 a, Vec2S32 b) {Vec2S32 c = {a.x*b.x, a.y*b.y}; return c;}
internal Vec2S32 div_2s32(Vec2S32 a, Vec2S32 b) {Vec2S32 c = {a.x/b.x, a.y/b.y}; return c;}
internal Vec2S32 scale_2s32(Vec2S32 v, S32 s) {Vec2S32 c = {v.x*s, v.y*s}; return c;}
internal S32 dot_2s32(Vec2S32 a, Vec2S32 b) {S32 c = a.x*b.x + a.y*b.y; return c;}
internal S32 length_squared_2s32(Vec2S32 v) {S32 c = v.x*v.x + v.y*v.y; return c;}
internal S32 length_2s32(Vec2S32 v) {S32 c = (S32)sqrt_f32((F32)v.x*(F32)v.x + (F32)v.y*(F32)v.y); return c;}
internal Vec2S32 mix_2s32(Vec2S32 a, Vec2S32 b, F32 t) {Vec2S32 c = {(S32)mix_1f32((F32)a.x, (F32)b.x, t), (S32)mix_1f32((F32)a.y, (F32)b.y, t)}; return c;}
internal Vec2S16 vec_2s16(S16 x, S16 y) {Vec2S16 v = {x, y}; return v;}
internal Vec2S16 add_2s16(Vec2S16 a, Vec2S16 b) {Vec2S16 c = {(S16)(a.x+b.x), (S16)(a.y+b.y)}; return c;}
internal Vec2S16 sub_2s16(Vec2S16 a, Vec2S16 b) {Vec2S16 c = {(S16)(a.x-b.x), (S16)(a.y-b.y)}; return c;}
internal Vec2S16 mul_2s16(Vec2S16 a, Vec2S16 b) {Vec2S16 c = {(S16)(a.x*b.x), (S16)(a.y*b.y)}; return c;}
internal Vec2S16 div_2s16(Vec2S16 a, Vec2S16 b) {Vec2S16 c = {(S16)(a.x/b.x), (S16)(a.y/b.y)}; return c;}
internal Vec2S16 scale_2s16(Vec2S16 v, S16 s) {Vec2S16 c = {(S16)(v.x*s), (S16)(v.y*s)}; return c;}
internal S16 dot_2s16(Vec2S16 a, Vec2S16 b) {S16 c = a.x*b.x + a.y*b.y; return c;}
internal S16 length_squared_2s16(Vec2S16 v) {S16 c = v.x*v.x + v.y*v.y; return c;}
internal S16 length_2s16(Vec2S16 v) {S16 c = (S16)sqrt_f32((F32)(v.x*v.x + v.y*v.y)); return c;}
internal Vec2S16 mix_2s16(Vec2S16 a, Vec2S16 b, F32 t) {Vec2S16 c = {(S16)mix_1f32((F32)a.x, (F32)b.x, t), (S16)mix_1f32((F32)a.y, (F32)b.y, t)}; return c;}
internal Vec3F32 vec_3f32(F32 x, F32 y, F32 z) {Vec3F32 v = {x, y, z}; return v;}
internal Vec3F32 add_3f32(Vec3F32 a, Vec3F32 b) {Vec3F32 c = {a.x+b.x, a.y+b.y, a.z+b.z}; return c;}
internal Vec3F32 sub_3f32(Vec3F32 a, Vec3F32 b) {Vec3F32 c = {a.x-b.x, a.y-b.y, a.z-b.z}; return c;}
internal Vec3F32 mul_3f32(Vec3F32 a, Vec3F32 b) {Vec3F32 c = {a.x*b.x, a.y*b.y, a.z*b.z}; return c;}
internal Vec3F32 div_3f32(Vec3F32 a, Vec3F32 b) {Vec3F32 c = {a.x/b.x, a.y/b.y, a.z/b.z}; return c;}
internal Vec3F32 scale_3f32(Vec3F32 v, F32 s) {Vec3F32 c = {v.x*s, v.y*s, v.z*s}; return c;}
internal F32 dot_3f32(Vec3F32 a, Vec3F32 b) {F32 c = a.x*b.x + a.y*b.y + a.z*b.z; return c;}
internal F32 length_squared_3f32(Vec3F32 v) {F32 c = v.x*v.x + v.y*v.y + v.z*v.z; return c;}
internal F32 length_3f32(Vec3F32 v) {F32 c = sqrt_f32(v.x*v.x + v.y*v.y + v.z*v.z); return c;}
internal Vec3F32 normalize_3f32(Vec3F32 v) {v = scale_3f32(v, 1.f/length_3f32(v)); return v;}
internal Vec3F32 mix_3f32(Vec3F32 a, Vec3F32 b, F32 t) {Vec3F32 c = {mix_1f32(a.x, b.x, t), mix_1f32(a.y, b.y, t), mix_1f32(a.z, b.z, t)}; return c;}
internal Vec3F32 cross_3f32(Vec3F32 a, Vec3F32 b) {Vec3F32 c = {a.y*b.z - a.z*b.y, a.z*b.x - a.x*b.z, a.x*b.y - a.y*b.x}; return c;}
internal Vec3F32 xform_3f32(Vec3F32 v, Mat3x3F32 m)
{
Vec3F32 result;
result.x = v.x*m.v[0][0] + v.y*m.v[1][0] + v.z*m.v[2][0];
result.y = v.x*m.v[0][1] + v.y*m.v[1][1] + v.z*m.v[2][1];
result.z = v.x*m.v[0][2] + v.y*m.v[1][2] + v.z*m.v[2][2];
return result;
}
internal Vec3S32 vec_3s32(S32 x, S32 y, S32 z) {Vec3S32 v = {x, y, z}; return v;}
internal Vec3S32 add_3s32(Vec3S32 a, Vec3S32 b) {Vec3S32 c = {a.x+b.x, a.y+b.y, a.z+b.z}; return c;}
internal Vec3S32 sub_3s32(Vec3S32 a, Vec3S32 b) {Vec3S32 c = {a.x-b.x, a.y-b.y, a.z-b.z}; return c;}
internal Vec3S32 mul_3s32(Vec3S32 a, Vec3S32 b) {Vec3S32 c = {a.x*b.x, a.y*b.y, a.z*b.z}; return c;}
internal Vec3S32 div_3s32(Vec3S32 a, Vec3S32 b) {Vec3S32 c = {a.x/b.x, a.y/b.y, a.z/b.z}; return c;}
internal Vec3S32 scale_3s32(Vec3S32 v, S32 s) {Vec3S32 c = {v.x*s, v.y*s, v.z*s}; return c;}
internal S32 dot_3s32(Vec3S32 a, Vec3S32 b) {S32 c = a.x*b.x + a.y*b.y + a.z*b.z; return c;}
internal S32 length_squared_3s32(Vec3S32 v) {S32 c = v.x*v.x + v.y*v.y + v.z*v.z; return c;}
internal S32 length_3s32(Vec3S32 v) {S32 c = (S32)sqrt_f32((F32)(v.x*v.x + v.y*v.y + v.z*v.z)); return c;}
internal Vec3S32 mix_3s32(Vec3S32 a, Vec3S32 b, F32 t) {Vec3S32 c = {(S32)mix_1f32((F32)a.x, (F32)b.x, t), (S32)mix_1f32((F32)a.y, (F32)b.y, t), (S32)mix_1f32((F32)a.z, (F32)b.z, t)}; return c;}
internal Vec3S32 cross_3s32(Vec3S32 a, Vec3S32 b) {Vec3S32 c = {a.y*b.z - a.z*b.y, a.z*b.x - a.x*b.z, a.x*b.y - a.y*b.x}; return c;}
internal Vec4F32 vec_4f32(F32 x, F32 y, F32 z, F32 w) {Vec4F32 v = {x, y, z, w}; return v;}
internal Vec4F32 add_4f32(Vec4F32 a, Vec4F32 b) {Vec4F32 c = {a.x+b.x, a.y+b.y, a.z+b.z, a.w+b.w}; return c;}
internal Vec4F32 sub_4f32(Vec4F32 a, Vec4F32 b) {Vec4F32 c = {a.x-b.x, a.y-b.y, a.z-b.z, a.w-b.w}; return c;}
internal Vec4F32 mul_4f32(Vec4F32 a, Vec4F32 b) {Vec4F32 c = {a.x*b.x, a.y*b.y, a.z*b.z, a.w*b.w}; return c;}
internal Vec4F32 div_4f32(Vec4F32 a, Vec4F32 b) {Vec4F32 c = {a.x/b.x, a.y/b.y, a.z/b.z, a.w/b.w}; return c;}
internal Vec4F32 scale_4f32(Vec4F32 v, F32 s) {Vec4F32 c = {v.x*s, v.y*s, v.z*s, v.w*s}; return c;}
internal F32 dot_4f32(Vec4F32 a, Vec4F32 b) {F32 c = a.x*b.x + a.y*b.y + a.z*b.z + a.w*b.w; return c;}
internal F32 length_squared_4f32(Vec4F32 v) {F32 c = v.x*v.x + v.y*v.y + v.z*v.z + v.w*v.w; return c;}
internal F32 length_4f32(Vec4F32 v) {F32 c = sqrt_f32(v.x*v.x + v.y*v.y + v.z*v.z + v.w*v.w); return c;}
internal Vec4F32 normalize_4f32(Vec4F32 v) {v = scale_4f32(v, 1.f/length_4f32(v)); return v;}
internal Vec4F32 mix_4f32(Vec4F32 a, Vec4F32 b, F32 t) {Vec4F32 c = {mix_1f32(a.x, b.x, t), mix_1f32(a.y, b.y, t), mix_1f32(a.z, b.z, t), mix_1f32(a.w, b.w, t)}; return c;}
internal Vec4S32 vec_4s32(S32 x, S32 y, S32 z, S32 w) {Vec4S32 v = {x, y, z, w}; return v;}
internal Vec4S32 add_4s32(Vec4S32 a, Vec4S32 b) {Vec4S32 c = {a.x+b.x, a.y+b.y, a.z+b.z, a.w+b.w}; return c;}
internal Vec4S32 sub_4s32(Vec4S32 a, Vec4S32 b) {Vec4S32 c = {a.x-b.x, a.y-b.y, a.z-b.z, a.w-b.w}; return c;}
internal Vec4S32 mul_4s32(Vec4S32 a, Vec4S32 b) {Vec4S32 c = {a.x*b.x, a.y*b.y, a.z*b.z, a.w*b.w}; return c;}
internal Vec4S32 div_4s32(Vec4S32 a, Vec4S32 b) {Vec4S32 c = {a.x/b.x, a.y/b.y, a.z/b.z, a.w/b.w}; return c;}
internal Vec4S32 scale_4s32(Vec4S32 v, S32 s) {Vec4S32 c = {v.x*s, v.y*s, v.z*s, v.w*s}; return c;}
internal S32 dot_4s32(Vec4S32 a, Vec4S32 b) {S32 c = a.x*b.x + a.y*b.y + a.z*b.z + a.w*b.w; return c;}
internal S32 length_squared_4s32(Vec4S32 v) {S32 c = v.x*v.x + v.y*v.y + v.z*v.z + v.w*v.w; return c;}
internal S32 length_4s32(Vec4S32 v) {S32 c = (S32)sqrt_f32((F32)(v.x*v.x + v.y*v.y + v.z*v.z + v.w*v.w)); return c;}
internal Vec4S32 mix_4s32(Vec4S32 a, Vec4S32 b, F32 t) {Vec4S32 c = {(S32)mix_1f32((F32)a.x, (F32)b.x, t), (S32)mix_1f32((F32)a.y, (F32)b.y, t), (S32)mix_1f32((F32)a.z, (F32)b.z, t), (S32)mix_1f32((F32)a.w, (F32)b.w, t)}; return c;}
////////////////////////////////
//~ rjf: Matrix Ops
internal Mat3x3F32
mat_3x3f32(F32 diagonal)
{
Mat3x3F32 result = {0};
result.v[0][0] = diagonal;
result.v[1][1] = diagonal;
result.v[2][2] = diagonal;
return result;
}
internal Mat3x3F32
make_translate_3x3f32(Vec2F32 delta)
{
Mat3x3F32 mat = mat_3x3f32(1.f);
mat.v[2][0] = delta.x;
mat.v[2][1] = delta.y;
return mat;
}
internal Mat3x3F32
make_scale_3x3f32(Vec2F32 scale)
{
Mat3x3F32 mat = mat_3x3f32(1.f);
mat.v[0][0] = scale.x;
mat.v[1][1] = scale.y;
return mat;
}
internal Mat3x3F32
mul_3x3f32(Mat3x3F32 a, Mat3x3F32 b)
{
Mat3x3F32 c = {0};
for(int j = 0; j < 3; j += 1)
{
for(int i = 0; i < 3; i += 1)
{
c.v[i][j] = (a.v[0][j]*b.v[i][0] +
a.v[1][j]*b.v[i][1] +
a.v[2][j]*b.v[i][2]);
}
}
return c;
}
internal Mat4x4F32
mat_4x4f32(F32 diagonal)
{
Mat4x4F32 result = {0};
result.v[0][0] = diagonal;
result.v[1][1] = diagonal;
result.v[2][2] = diagonal;
result.v[3][3] = diagonal;
return result;
}
internal Mat4x4F32
make_translate_4x4f32(Vec3F32 delta)
{
Mat4x4F32 result = mat_4x4f32(1.f);
result.v[3][0] = delta.x;
result.v[3][1] = delta.y;
result.v[3][2] = delta.z;
return result;
}
internal Mat4x4F32
make_scale_4x4f32(Vec3F32 scale)
{
Mat4x4F32 result = mat_4x4f32(1.f);
result.v[0][0] = scale.x;
result.v[1][1] = scale.y;
result.v[2][2] = scale.z;
return result;
}
internal Mat4x4F32
make_perspective_4x4f32(F32 fov, F32 aspect_ratio, F32 near_z, F32 far_z)
{
Mat4x4F32 result = mat_4x4f32(1.f);
F32 tan_theta_over_2 = tan_f32(fov / 2);
result.v[0][0] = 1.f / tan_theta_over_2;
result.v[1][1] = aspect_ratio / tan_theta_over_2;
result.v[2][3] = 1.f;
result.v[2][2] = -(near_z + far_z) / (near_z - far_z);
result.v[3][2] = (2.f * near_z * far_z) / (near_z - far_z);
result.v[3][3] = 0.f;
return result;
}
internal Mat4x4F32
make_orthographic_4x4f32(F32 left, F32 right, F32 bottom, F32 top, F32 near_z, F32 far_z)
{
Mat4x4F32 result = mat_4x4f32(1.f);
result.v[0][0] = 2.f / (right - left);
result.v[1][1] = 2.f / (top - bottom);
result.v[2][2] = 2.f / (far_z - near_z);
result.v[3][3] = 1.f;
result.v[3][0] = (left + right) / (left - right);
result.v[3][1] = (bottom + top) / (bottom - top);
result.v[3][2] = (near_z + far_z) / (near_z - far_z);
return result;
}
internal Mat4x4F32
make_look_at_4x4f32(Vec3F32 eye, Vec3F32 center, Vec3F32 up)
{
Mat4x4F32 result;
Vec3F32 f = normalize_3f32(sub_3f32(eye, center));
Vec3F32 s = normalize_3f32(cross_3f32(f, up));
Vec3F32 u = cross_3f32(s, f);
result.v[0][0] = s.x;
result.v[0][1] = u.x;
result.v[0][2] = -f.x;
result.v[0][3] = 0.0f;
result.v[1][0] = s.y;
result.v[1][1] = u.y;
result.v[1][2] = -f.y;
result.v[1][3] = 0.0f;
result.v[2][0] = s.z;
result.v[2][1] = u.z;
result.v[2][2] = -f.z;
result.v[2][3] = 0.0f;
result.v[3][0] = -dot_3f32(s, eye);
result.v[3][1] = -dot_3f32(u, eye);
result.v[3][2] = dot_3f32(f, eye);
result.v[3][3] = 1.0f;
return result;
}
internal Mat4x4F32
make_rotate_4x4f32(Vec3F32 axis, F32 turns)
{
Mat4x4F32 result = mat_4x4f32(1.f);
axis = normalize_3f32(axis);
F32 sin_theta = sin_f32(turns);
F32 cos_theta = cos_f32(turns);
F32 cos_value = 1.f - cos_theta;
result.v[0][0] = (axis.x * axis.x * cos_value) + cos_theta;
result.v[0][1] = (axis.x * axis.y * cos_value) + (axis.z * sin_theta);
result.v[0][2] = (axis.x * axis.z * cos_value) - (axis.y * sin_theta);
result.v[1][0] = (axis.y * axis.x * cos_value) - (axis.z * sin_theta);
result.v[1][1] = (axis.y * axis.y * cos_value) + cos_theta;
result.v[1][2] = (axis.y * axis.z * cos_value) + (axis.x * sin_theta);
result.v[2][0] = (axis.z * axis.x * cos_value) + (axis.y * sin_theta);
result.v[2][1] = (axis.z * axis.y * cos_value) - (axis.x * sin_theta);
result.v[2][2] = (axis.z * axis.z * cos_value) + cos_theta;
return result;
}
internal Mat4x4F32
mul_4x4f32(Mat4x4F32 a, Mat4x4F32 b)
{
Mat4x4F32 c = {0};
for(int j = 0; j < 4; j += 1)
{
for(int i = 0; i < 4; i += 1)
{
c.v[i][j] = (a.v[0][j]*b.v[i][0] +
a.v[1][j]*b.v[i][1] +
a.v[2][j]*b.v[i][2] +
a.v[3][j]*b.v[i][3]);
}
}
return c;
}
internal Mat4x4F32
scale_4x4f32(Mat4x4F32 m, F32 scale)
{
for(int j = 0; j < 4; j += 1)
{
for(int i = 0; i < 4; i += 1)
{
m.v[i][j] *= scale;
}
}
return m;
}
internal Mat4x4F32
inverse_4x4f32(Mat4x4F32 m)
{
F32 coef00 = m.v[2][2] * m.v[3][3] - m.v[3][2] * m.v[2][3];
F32 coef02 = m.v[1][2] * m.v[3][3] - m.v[3][2] * m.v[1][3];
F32 coef03 = m.v[1][2] * m.v[2][3] - m.v[2][2] * m.v[1][3];
F32 coef04 = m.v[2][1] * m.v[3][3] - m.v[3][1] * m.v[2][3];
F32 coef06 = m.v[1][1] * m.v[3][3] - m.v[3][1] * m.v[1][3];
F32 coef07 = m.v[1][1] * m.v[2][3] - m.v[2][1] * m.v[1][3];
F32 coef08 = m.v[2][1] * m.v[3][2] - m.v[3][1] * m.v[2][2];
F32 coef10 = m.v[1][1] * m.v[3][2] - m.v[3][1] * m.v[1][2];
F32 coef11 = m.v[1][1] * m.v[2][2] - m.v[2][1] * m.v[1][2];
F32 coef12 = m.v[2][0] * m.v[3][3] - m.v[3][0] * m.v[2][3];
F32 coef14 = m.v[1][0] * m.v[3][3] - m.v[3][0] * m.v[1][3];
F32 coef15 = m.v[1][0] * m.v[2][3] - m.v[2][0] * m.v[1][3];
F32 coef16 = m.v[2][0] * m.v[3][2] - m.v[3][0] * m.v[2][2];
F32 coef18 = m.v[1][0] * m.v[3][2] - m.v[3][0] * m.v[1][2];
F32 coef19 = m.v[1][0] * m.v[2][2] - m.v[2][0] * m.v[1][2];
F32 coef20 = m.v[2][0] * m.v[3][1] - m.v[3][0] * m.v[2][1];
F32 coef22 = m.v[1][0] * m.v[3][1] - m.v[3][0] * m.v[1][1];
F32 coef23 = m.v[1][0] * m.v[2][1] - m.v[2][0] * m.v[1][1];
Vec4F32 fac0 = { coef00, coef00, coef02, coef03 };
Vec4F32 fac1 = { coef04, coef04, coef06, coef07 };
Vec4F32 fac2 = { coef08, coef08, coef10, coef11 };
Vec4F32 fac3 = { coef12, coef12, coef14, coef15 };
Vec4F32 fac4 = { coef16, coef16, coef18, coef19 };
Vec4F32 fac5 = { coef20, coef20, coef22, coef23 };
Vec4F32 vec0 = { m.v[1][0], m.v[0][0], m.v[0][0], m.v[0][0] };
Vec4F32 vec1 = { m.v[1][1], m.v[0][1], m.v[0][1], m.v[0][1] };
Vec4F32 vec2 = { m.v[1][2], m.v[0][2], m.v[0][2], m.v[0][2] };
Vec4F32 vec3 = { m.v[1][3], m.v[0][3], m.v[0][3], m.v[0][3] };
Vec4F32 inv0 = add_4f32(sub_4f32(mul_4f32(vec1, fac0), mul_4f32(vec2, fac1)), mul_4f32(vec3, fac2));
Vec4F32 inv1 = add_4f32(sub_4f32(mul_4f32(vec0, fac0), mul_4f32(vec2, fac3)), mul_4f32(vec3, fac4));
Vec4F32 inv2 = add_4f32(sub_4f32(mul_4f32(vec0, fac1), mul_4f32(vec1, fac3)), mul_4f32(vec3, fac5));
Vec4F32 inv3 = add_4f32(sub_4f32(mul_4f32(vec0, fac2), mul_4f32(vec1, fac4)), mul_4f32(vec2, fac5));
Vec4F32 sign_a = { +1, -1, +1, -1 };
Vec4F32 sign_b = { -1, +1, -1, +1 };
Mat4x4F32 inverse;
for(U32 i = 0; i < 4; i += 1)
{
inverse.v[0][i] = inv0.v[i] * sign_a.v[i];
inverse.v[1][i] = inv1.v[i] * sign_b.v[i];
inverse.v[2][i] = inv2.v[i] * sign_a.v[i];
inverse.v[3][i] = inv3.v[i] * sign_b.v[i];
}
Vec4F32 row0 = { inverse.v[0][0], inverse.v[1][0], inverse.v[2][0], inverse.v[3][0] };
Vec4F32 m0 = { m.v[0][0], m.v[0][1], m.v[0][2], m.v[0][3] };
Vec4F32 dot0 = mul_4f32(m0, row0);
F32 dot1 = (dot0.x + dot0.y) + (dot0.z + dot0.w);
F32 one_over_det = 1 / dot1;
return scale_4x4f32(inverse, one_over_det);
}
internal Mat4x4F32
derotate_4x4f32(Mat4x4F32 mat)
{
Vec3F32 scale =
{
length_3f32(v3f32(mat.v[0][0], mat.v[0][1], mat.v[0][2])),
length_3f32(v3f32(mat.v[1][0], mat.v[1][1], mat.v[1][2])),
length_3f32(v3f32(mat.v[2][0], mat.v[2][1], mat.v[2][2])),
};
mat.v[0][0] = scale.x;
mat.v[1][0] = 0.f;
mat.v[2][0] = 0.f;
mat.v[0][1] = 0.f;
mat.v[1][1] = scale.y;
mat.v[2][1] = 0.f;
mat.v[0][2] = 0.f;
mat.v[1][2] = 0.f;
mat.v[2][2] = scale.z;
return mat;
}
internal Mat4x4F32
transpose_4x4f32(Mat4x4F32 mat)
{
Mat4x4F32 result =
{
{
mat.v[0][0], mat.v[1][0], mat.v[2][0], mat.v[3][0],
mat.v[0][1], mat.v[1][1], mat.v[2][1], mat.v[3][1],
mat.v[0][2], mat.v[1][2], mat.v[2][2], mat.v[3][2],
mat.v[0][3], mat.v[1][3], mat.v[2][3], mat.v[3][3],
}
};
return result;
}
////////////////////////////////
//~ rjf: Range Ops
internal Rng1U32 rng_1u32(U32 min, U32 max) {Rng1U32 r = {min, max}; if(r.min > r.max) { Swap(U32, r.min, r.max); } return r;}
internal Rng1U32 shift_1u32(Rng1U32 r, U32 x) {r.min += x; r.max += x; return r;}
internal Rng1U32 pad_1u32(Rng1U32 r, U32 x) {r.min -= x; r.max += x; return r;}
internal U32 center_1u32(Rng1U32 r) {U32 c = (r.min+r.max)/2; return c;}
internal B32 contains_1u32(Rng1U32 r, U32 x) {B32 c = (r.min <= x && x < r.max); return c;}
internal U32 dim_1u32(Rng1U32 r) {U32 c = ((r.max > r.min) ? (r.max - r.min) : 0); return c;}
internal Rng1U32 union_1u32(Rng1U32 a, Rng1U32 b) {Rng1U32 c = {Min(a.min, b.min), Max(a.max, b.max)}; return c;}
internal Rng1U32 intersect_1u32(Rng1U32 a, Rng1U32 b) {Rng1U32 c = {Max(a.min, b.min), Min(a.max, b.max)}; return c;}
internal U32 clamp_1u32(Rng1U32 r, U32 v) {v = Clamp(r.min, v, r.max); return v;}
internal Rng1S32 rng_1s32(S32 min, S32 max) {Rng1S32 r = {min, max}; if(r.min > r.max) { Swap(S32, r.min, r.max); } return r;}
internal Rng1S32 shift_1s32(Rng1S32 r, S32 x) {r.min += x; r.max += x; return r;}
internal Rng1S32 pad_1s32(Rng1S32 r, S32 x) {r.min -= x; r.max += x; return r;}
internal S32 center_1s32(Rng1S32 r) {S32 c = (r.min+r.max)/2; return c;}
internal B32 contains_1s32(Rng1S32 r, S32 x) {B32 c = (r.min <= x && x < r.max); return c;}
internal S32 dim_1s32(Rng1S32 r) {S32 c = ((r.max > r.min) ? (r.max - r.min) : 0); return c;}
internal Rng1S32 union_1s32(Rng1S32 a, Rng1S32 b) {Rng1S32 c = {Min(a.min, b.min), Max(a.max, b.max)}; return c;}
internal Rng1S32 intersect_1s32(Rng1S32 a, Rng1S32 b) {Rng1S32 c = {Max(a.min, b.min), Min(a.max, b.max)}; return c;}
internal S32 clamp_1s32(Rng1S32 r, S32 v) {v = Clamp(r.min, v, r.max); return v;}
internal Rng1U64 rng_1u64(U64 min, U64 max) {Rng1U64 r = {min, max}; if(r.min > r.max) { Swap(U64, r.min, r.max); } return r;}
internal Rng1U64 shift_1u64(Rng1U64 r, U64 x) {r.min += x; r.max += x; return r;}
internal Rng1U64 pad_1u64(Rng1U64 r, U64 x) {r.min -= x; r.max += x; return r;}
internal U64 center_1u64(Rng1U64 r) {U64 c = (r.min+r.max)/2; return c;}
internal B32 contains_1u64(Rng1U64 r, U64 x) {B32 c = (r.min <= x && x < r.max); return c;}
internal U64 dim_1u64(Rng1U64 r) {U64 c = ((r.max > r.min) ? (r.max - r.min) : 0); return c;}
internal Rng1U64 union_1u64(Rng1U64 a, Rng1U64 b) {Rng1U64 c = {Min(a.min, b.min), Max(a.max, b.max)}; return c;}
internal Rng1U64 intersect_1u64(Rng1U64 a, Rng1U64 b) {Rng1U64 c = {Max(a.min, b.min), Min(a.max, b.max)}; return c;}
internal U64 clamp_1u64(Rng1U64 r, U64 v) {v = Clamp(r.min, v, r.max); return v;}
internal Rng1S64 rng_1s64(S64 min, S64 max) {Rng1S64 r = {min, max}; if(r.min > r.max) { Swap(S64, r.min, r.max); } return r;}
internal Rng1S64 shift_1s64(Rng1S64 r, S64 x) {r.min += x; r.max += x; return r;}
internal Rng1S64 pad_1s64(Rng1S64 r, S64 x) {r.min -= x; r.max += x; return r;}
internal S64 center_1s64(Rng1S64 r) {S64 c = (r.min+r.max)/2; return c;}
internal B32 contains_1s64(Rng1S64 r, S64 x) {B32 c = (r.min <= x && x < r.max); return c;}
internal S64 dim_1s64(Rng1S64 r) {S64 c = ((r.max > r.min) ? (r.max - r.min) : 0); return c;}
internal Rng1S64 union_1s64(Rng1S64 a, Rng1S64 b) {Rng1S64 c = {Min(a.min, b.min), Max(a.max, b.max)}; return c;}
internal Rng1S64 intersect_1s64(Rng1S64 a, Rng1S64 b) {Rng1S64 c = {Max(a.min, b.min), Min(a.max, b.max)}; return c;}
internal S64 clamp_1s64(Rng1S64 r, S64 v) {v = Clamp(r.min, v, r.max); return v;}
internal Rng1F32 rng_1f32(F32 min, F32 max) {Rng1F32 r = {min, max}; if(r.min > r.max) { Swap(F32, r.min, r.max); } return r;}
internal Rng1F32 shift_1f32(Rng1F32 r, F32 x) {r.min += x; r.max += x; return r;}
internal Rng1F32 pad_1f32(Rng1F32 r, F32 x) {r.min -= x; r.max += x; return r;}
internal F32 center_1f32(Rng1F32 r) {F32 c = (r.min+r.max)/2; return c;}
internal B32 contains_1f32(Rng1F32 r, F32 x) {B32 c = (r.min <= x && x < r.max); return c;}
internal F32 dim_1f32(Rng1F32 r) {F32 c = ((r.max > r.min) ? (r.max - r.min) : 0); return c;}
internal Rng1F32 union_1f32(Rng1F32 a, Rng1F32 b) {Rng1F32 c = {Min(a.min, b.min), Max(a.max, b.max)}; return c;}
internal Rng1F32 intersect_1f32(Rng1F32 a, Rng1F32 b) {Rng1F32 c = {Max(a.min, b.min), Min(a.max, b.max)}; return c;}
internal F32 clamp_1f32(Rng1F32 r, F32 v) {v = Clamp(r.min, v, r.max); return v;}
internal Rng2S16 rng_2s16(Vec2S16 min, Vec2S16 max) {Rng2S16 r = {min, max}; return r;}
internal Rng2S16 shift_2s16(Rng2S16 r, Vec2S16 x) {r.min = add_2s16(r.min, x); r.max = add_2s16(r.max, x); return r;}
internal Rng2S16 pad_2s16(Rng2S16 r, S16 x) {Vec2S16 xv = {x, x}; r.min = sub_2s16(r.min, xv); r.max = add_2s16(r.max, xv); return r;}
internal Vec2S16 center_2s16(Rng2S16 r) {Vec2S16 c = {(S16)((r.min.x+r.max.x)/2), (S16)((r.min.y+r.max.y)/2)}; return c;}
internal B32 contains_2s16(Rng2S16 r, Vec2S16 x) {B32 c = (r.min.x <= x.x && x.x < r.max.x && r.min.y <= x.y && x.y < r.max.y); return c;}
internal Vec2S16 dim_2s16(Rng2S16 r) {Vec2S16 dim = {(S16)(((r.max.x > r.min.x) ? (r.max.x - r.min.x) : 0)), (S16)(((r.max.y > r.min.y) ? (r.max.y - r.min.y) : 0))}; return dim;}
internal Rng2S16 union_2s16(Rng2S16 a, Rng2S16 b) {Rng2S16 c; c.p0.x = Min(a.min.x, b.min.x); c.p0.y = Min(a.min.y, b.min.y); c.p1.x = Max(a.max.x, b.max.x); c.p1.y = Max(a.max.y, b.max.y); return c;}
internal Rng2S16 intersect_2s16(Rng2S16 a, Rng2S16 b) {Rng2S16 c; c.p0.x = Max(a.min.x, b.min.x); c.p0.y = Max(a.min.y, b.min.y); c.p1.x = Min(a.max.x, b.max.x); c.p1.y = Min(a.max.y, b.max.y); return c;}
internal Vec2S16 clamp_2s16(Rng2S16 r, Vec2S16 v) {v.x = Clamp(r.min.x, v.x, r.max.x); v.y = Clamp(r.min.y, v.y, r.max.y); return v;}
internal Rng2S32 rng_2s32(Vec2S32 min, Vec2S32 max) {Rng2S32 r = {min, max}; return r;}
internal Rng2S32 shift_2s32(Rng2S32 r, Vec2S32 x) {r.min = add_2s32(r.min, x); r.max = add_2s32(r.max, x); return r;}
internal Rng2S32 pad_2s32(Rng2S32 r, S32 x) {Vec2S32 xv = {x, x}; r.min = sub_2s32(r.min, xv); r.max = add_2s32(r.max, xv); return r;}
internal Vec2S32 center_2s32(Rng2S32 r) {Vec2S32 c = {(r.min.x+r.max.x)/2, (r.min.y+r.max.y)/2}; return c;}
internal B32 contains_2s32(Rng2S32 r, Vec2S32 x) {B32 c = (r.min.x <= x.x && x.x < r.max.x && r.min.y <= x.y && x.y < r.max.y); return c;}
internal Vec2S32 dim_2s32(Rng2S32 r) {Vec2S32 dim = {((r.max.x > r.min.x) ? (r.max.x - r.min.x) : 0), ((r.max.y > r.min.y) ? (r.max.y - r.min.y) : 0)}; return dim;}
internal Rng2S32 union_2s32(Rng2S32 a, Rng2S32 b) {Rng2S32 c; c.p0.x = Min(a.min.x, b.min.x); c.p0.y = Min(a.min.y, b.min.y); c.p1.x = Max(a.max.x, b.max.x); c.p1.y = Max(a.max.y, b.max.y); return c;}
internal Rng2S32 intersect_2s32(Rng2S32 a, Rng2S32 b) {Rng2S32 c; c.p0.x = Max(a.min.x, b.min.x); c.p0.y = Max(a.min.y, b.min.y); c.p1.x = Min(a.max.x, b.max.x); c.p1.y = Min(a.max.y, b.max.y); return c;}
internal Vec2S32 clamp_2s32(Rng2S32 r, Vec2S32 v) {v.x = Clamp(r.min.x, v.x, r.max.x); v.y = Clamp(r.min.y, v.y, r.max.y); return v;}
internal Rng2S64 rng_2s64(Vec2S64 min, Vec2S64 max) {Rng2S64 r = {min, max}; return r;}
internal Rng2S64 shift_2s64(Rng2S64 r, Vec2S64 x) {r.min = add_2s64(r.min, x); r.max = add_2s64(r.max, x); return r;}
internal Rng2S64 pad_2s64(Rng2S64 r, S64 x) {Vec2S64 xv = {x, x}; r.min = sub_2s64(r.min, xv); r.max = add_2s64(r.max, xv); return r;}
internal Vec2S64 center_2s64(Rng2S64 r) {Vec2S64 c = {(r.min.x+r.max.x)/2, (r.min.y+r.max.y)/2}; return c;}
internal B32 contains_2s64(Rng2S64 r, Vec2S64 x) {B32 c = (r.min.x <= x.x && x.x < r.max.x && r.min.y <= x.y && x.y < r.max.y); return c;}
internal Vec2S64 dim_2s64(Rng2S64 r) {Vec2S64 dim = {((r.max.x > r.min.x) ? (r.max.x - r.min.x) : 0), ((r.max.y > r.min.y) ? (r.max.y - r.min.y) : 0)}; return dim;}
internal Rng2S64 union_2s64(Rng2S64 a, Rng2S64 b) {Rng2S64 c; c.p0.x = Min(a.min.x, b.min.x); c.p0.y = Min(a.min.y, b.min.y); c.p1.x = Max(a.max.x, b.max.x); c.p1.y = Max(a.max.y, b.max.y); return c;}
internal Rng2S64 intersect_2s64(Rng2S64 a, Rng2S64 b) {Rng2S64 c; c.p0.x = Max(a.min.x, b.min.x); c.p0.y = Max(a.min.y, b.min.y); c.p1.x = Min(a.max.x, b.max.x); c.p1.y = Min(a.max.y, b.max.y); return c;}
internal Vec2S64 clamp_2s
gitextract_k3109d9_/
├── .gitattributes
├── .github/
│ └── workflows/
│ └── builds.yml
├── .gitignore
├── CHANGELOG.md
├── LICENSE
├── README.md
├── build.bat
├── build.sh
├── data/
│ └── logo.rc
├── project.4coder
├── run_tests.bat
└── src/
├── artifact_cache/
│ ├── artifact_cache.c
│ └── artifact_cache.h
├── base/
│ ├── base_arena.c
│ ├── base_arena.h
│ ├── base_command_line.c
│ ├── base_command_line.h
│ ├── base_context_cracking.h
│ ├── base_core.c
│ ├── base_core.h
│ ├── base_entry_point.c
│ ├── base_entry_point.h
│ ├── base_hash.c
│ ├── base_hash.h
│ ├── base_inc.c
│ ├── base_inc.h
│ ├── base_log.c
│ ├── base_log.h
│ ├── base_markup.c
│ ├── base_markup.h
│ ├── base_math.c
│ ├── base_math.h
│ ├── base_meta.c
│ ├── base_meta.h
│ ├── base_profile.c
│ ├── base_profile.h
│ ├── base_strings.c
│ ├── base_strings.h
│ ├── base_thread_context.c
│ ├── base_thread_context.h
│ ├── base_threads.c
│ └── base_threads.h
├── codeview/
│ ├── codeview.c
│ ├── codeview.h
│ ├── codeview.mdesk
│ ├── codeview_dump.c
│ ├── codeview_dump.h
│ ├── codeview_parse.c
│ ├── codeview_parse.h
│ └── generated/
│ ├── codeview.meta.c
│ └── codeview.meta.h
├── coff/
│ ├── coff.c
│ ├── coff.h
│ ├── coff_dump.c
│ ├── coff_dump.h
│ ├── coff_enum.c
│ ├── coff_inc.c
│ ├── coff_inc.h
│ ├── coff_lib_writer.c
│ ├── coff_lib_writer.h
│ ├── coff_obj_writer.c
│ ├── coff_obj_writer.h
│ ├── coff_parse.c
│ └── coff_parse.h
├── config/
│ ├── config_bindings.c
│ ├── config_bindings.h
│ ├── config_core.c
│ ├── config_core.h
│ ├── config_inc.c
│ ├── config_inc.h
│ ├── config_panels.c
│ └── config_panels.h
├── content/
│ ├── content.c
│ └── content.h
├── ctrl/
│ ├── ctrl.mdesk
│ ├── ctrl_core.c
│ ├── ctrl_core.h
│ ├── ctrl_inc.c
│ ├── ctrl_inc.h
│ └── generated/
│ ├── ctrl.meta.c
│ └── ctrl.meta.h
├── dbg_engine/
│ ├── dbg_engine.mdesk
│ ├── dbg_engine_core.c
│ ├── dbg_engine_core.h
│ ├── dbg_engine_inc.c
│ ├── dbg_engine_inc.h
│ └── generated/
│ ├── dbg_engine.meta.c
│ └── dbg_engine.meta.h
├── dbg_info/
│ ├── dbg_info.c
│ └── dbg_info.h
├── demon/
│ ├── demon_core.c
│ ├── demon_core.h
│ ├── demon_core.mdesk
│ ├── demon_inc.c
│ ├── demon_inc.h
│ ├── generated/
│ │ ├── demon.meta.c
│ │ └── demon.meta.h
│ ├── linux/
│ │ ├── demon_core_linux.c
│ │ ├── demon_core_linux.h
│ │ ├── demon_os_linux.c
│ │ └── demon_os_linux.h
│ └── win32/
│ ├── demon_core_win32.c
│ └── demon_core_win32.h
├── disasm/
│ ├── disasm.c
│ └── disasm.h
├── draw/
│ ├── draw.c
│ ├── draw.h
│ ├── draw.mdesk
│ └── generated/
│ ├── draw.meta.c
│ └── draw.meta.h
├── dwarf/
│ ├── dwarf.c
│ ├── dwarf.h
│ ├── dwarf_coff.c
│ ├── dwarf_coff.h
│ ├── dwarf_dump.c
│ ├── dwarf_dump.h
│ ├── dwarf_elf.c
│ ├── dwarf_elf.h
│ ├── dwarf_expr.c
│ ├── dwarf_expr.h
│ ├── dwarf_help.c
│ ├── dwarf_help.h
│ ├── dwarf_inc.c
│ ├── dwarf_inc.h
│ ├── dwarf_notes.txt
│ ├── dwarf_parse.c
│ ├── dwarf_parse.h
│ ├── dwarf_unwind.c
│ ├── dwarf_unwind.h
│ ├── eh_dump.c
│ ├── eh_dump.h
│ ├── eh_frame.c
│ └── eh_frame.h
├── elf/
│ ├── elf.c
│ ├── elf.h
│ ├── elf_dump.c
│ ├── elf_dump.h
│ ├── elf_parse.c
│ └── elf_parse.h
├── eval/
│ ├── eval.mdesk
│ ├── eval_core.c
│ ├── eval_core.h
│ ├── eval_inc.c
│ ├── eval_inc.h
│ ├── eval_interpret.c
│ ├── eval_interpret.h
│ ├── eval_ir.c
│ ├── eval_ir.h
│ ├── eval_parse.c
│ ├── eval_parse.h
│ ├── eval_types.c
│ ├── eval_types.h
│ └── generated/
│ ├── eval.meta.c
│ └── eval.meta.h
├── eval_visualization/
│ ├── eval_visualization_core.c
│ ├── eval_visualization_core.h
│ ├── eval_visualization_inc.c
│ └── eval_visualization_inc.h
├── file_stream/
│ ├── file_stream.c
│ └── file_stream.h
├── font_cache/
│ ├── font_cache.c
│ └── font_cache.h
├── font_provider/
│ ├── dwrite/
│ │ ├── font_provider_dwrite.c
│ │ └── font_provider_dwrite.h
│ ├── font_provider.c
│ ├── font_provider.h
│ ├── font_provider_inc.c
│ ├── font_provider_inc.h
│ └── freetype/
│ ├── font_provider_freetype.c
│ └── font_provider_freetype.h
├── gnu/
│ ├── gnu.c
│ └── gnu.h
├── lib_raddbg_markup/
│ └── raddbg_markup.h
├── lib_rdi/
│ ├── rdi.c
│ ├── rdi.h
│ ├── rdi_parse.c
│ └── rdi_parse.h
├── lib_rdi_make/
│ ├── rdi_make.c
│ └── rdi_make.h
├── linker/
│ ├── base_ext/
│ │ ├── base_arena.c
│ │ ├── base_arena.h
│ │ ├── base_arrays.c
│ │ ├── base_arrays.h
│ │ ├── base_bit_array.c
│ │ ├── base_bit_array.h
│ │ ├── base_blake3.c
│ │ ├── base_blake3.h
│ │ ├── base_core.c
│ │ ├── base_core.h
│ │ ├── base_crc32.c
│ │ ├── base_crc32.h
│ │ ├── base_inc.c
│ │ ├── base_inc.h
│ │ ├── base_strings.c
│ │ └── base_strings.h
│ ├── codeview_ext/
│ │ ├── codeview.c
│ │ └── codeview.h
│ ├── hash_table.c
│ ├── hash_table.h
│ ├── linker.natvis
│ ├── lnk.c
│ ├── lnk.h
│ ├── lnk_cmd_line.c
│ ├── lnk_cmd_line.h
│ ├── lnk_config.c
│ ├── lnk_config.h
│ ├── lnk_debug_helper.c
│ ├── lnk_debug_helper.h
│ ├── lnk_debug_info.c
│ ├── lnk_debug_info.h
│ ├── lnk_error.c
│ ├── lnk_error.h
│ ├── lnk_io.c
│ ├── lnk_io.h
│ ├── lnk_lib.c
│ ├── lnk_lib.h
│ ├── lnk_log.c
│ ├── lnk_log.h
│ ├── lnk_obj.c
│ ├── lnk_obj.h
│ ├── lnk_section_table.c
│ ├── lnk_section_table.h
│ ├── lnk_symbol_table.c
│ ├── lnk_symbol_table.h
│ ├── lnk_timer.c
│ ├── lnk_timer.h
│ ├── pdb_ext/
│ │ ├── msf_builder.c
│ │ ├── msf_builder.h
│ │ ├── pdb.c
│ │ ├── pdb.h
│ │ ├── pdb_builder.c
│ │ ├── pdb_builder.h
│ │ ├── pdb_helpers.c
│ │ └── pdb_helpers.h
│ ├── rdi/
│ │ ├── rdi_builder.c
│ │ ├── rdi_builder.h
│ │ ├── rdi_coff.c
│ │ ├── rdi_coff.h
│ │ ├── rdi_cv.c
│ │ ├── rdi_cv.h
│ │ └── rdi_overrides.h
│ ├── scripts/
│ │ └── obj_paths_from_pdb.py
│ └── thread_pool/
│ ├── thread_pool.c
│ └── thread_pool.h
├── mdesk/
│ ├── mdesk.c
│ └── mdesk.h
├── metagen/
│ ├── metagen.c
│ ├── metagen.h
│ ├── metagen_base/
│ │ ├── metagen_base_arena.c
│ │ ├── metagen_base_arena.h
│ │ ├── metagen_base_command_line.c
│ │ ├── metagen_base_command_line.h
│ │ ├── metagen_base_context_cracking.h
│ │ ├── metagen_base_core.c
│ │ ├── metagen_base_core.h
│ │ ├── metagen_base_entry_point.c
│ │ ├── metagen_base_entry_point.h
│ │ ├── metagen_base_inc.c
│ │ ├── metagen_base_inc.h
│ │ ├── metagen_base_log.c
│ │ ├── metagen_base_log.h
│ │ ├── metagen_base_markup.c
│ │ ├── metagen_base_markup.h
│ │ ├── metagen_base_math.c
│ │ ├── metagen_base_math.h
│ │ ├── metagen_base_meta.c
│ │ ├── metagen_base_meta.h
│ │ ├── metagen_base_profile.c
│ │ ├── metagen_base_profile.h
│ │ ├── metagen_base_strings.c
│ │ ├── metagen_base_strings.h
│ │ ├── metagen_base_thread_context.c
│ │ └── metagen_base_thread_context.h
│ ├── metagen_main.c
│ └── metagen_os/
│ ├── core/
│ │ ├── linux/
│ │ │ ├── metagen_os_core_linux.c
│ │ │ └── metagen_os_core_linux.h
│ │ ├── metagen_os_core.c
│ │ ├── metagen_os_core.h
│ │ └── win32/
│ │ ├── metagen_os_core_win32.c
│ │ └── metagen_os_core_win32.h
│ ├── metagen_os_inc.c
│ └── metagen_os_inc.h
├── msf/
│ ├── msf.c
│ ├── msf.h
│ ├── msf_parse.c
│ └── msf_parse.h
├── msvc_crt/
│ ├── msvc_crt.c
│ └── msvc_crt.h
├── mule/
│ ├── inline_body.cpp
│ ├── mule_c.c
│ ├── mule_c.h
│ ├── mule_hotload_main.c
│ ├── mule_hotload_module_main.c
│ ├── mule_inline.cpp
│ ├── mule_main.cpp
│ ├── mule_module.cpp
│ ├── mule_o2.cpp
│ ├── mule_peb_trample.c
│ └── mule_peb_trample_reload.c
├── mutable_text/
│ ├── mutable_text.c
│ └── mutable_text.h
├── natvis/
│ └── base.natvis
├── os/
│ ├── core/
│ │ ├── linux/
│ │ │ ├── os_core_linux.c
│ │ │ ├── os_core_linux.h
│ │ │ ├── os_core_linux_old.c
│ │ │ └── os_core_linux_old.h
│ │ ├── os_core.c
│ │ ├── os_core.h
│ │ └── win32/
│ │ ├── os_core_win32.c
│ │ └── os_core_win32.h
│ ├── gfx/
│ │ ├── generated/
│ │ │ ├── os_gfx.meta.c
│ │ │ └── os_gfx.meta.h
│ │ ├── linux/
│ │ │ ├── os_gfx_linux.c
│ │ │ └── os_gfx_linux.h
│ │ ├── os_gfx.c
│ │ ├── os_gfx.h
│ │ ├── os_gfx.mdesk
│ │ ├── stub/
│ │ │ ├── os_gfx_stub.c
│ │ │ └── os_gfx_stub.h
│ │ └── win32/
│ │ ├── os_gfx_win32.c
│ │ └── os_gfx_win32.h
│ ├── os_inc.c
│ └── os_inc.h
├── pdb/
│ ├── pdb.c
│ ├── pdb.h
│ ├── pdb_parse.c
│ ├── pdb_parse.h
│ ├── pdb_stringize.c
│ └── pdb_stringize.h
├── pe/
│ ├── dos_program.asm
│ ├── pe.c
│ ├── pe.h
│ ├── pe_make_debug_dir.c
│ ├── pe_make_debug_dir.h
│ ├── pe_make_export_table.c
│ ├── pe_make_export_table.h
│ ├── pe_make_import_table.c
│ ├── pe_make_import_table.h
│ └── pe_section_flags.h
├── radbin/
│ ├── generated/
│ │ ├── radbin.meta.c
│ │ └── radbin.meta.h
│ ├── radbin.c
│ ├── radbin.h
│ ├── radbin.mdesk
│ └── radbin_main.c
├── raddbg/
│ ├── generated/
│ │ ├── raddbg.meta.c
│ │ └── raddbg.meta.h
│ ├── raddbg.mdesk
│ ├── raddbg_core.c
│ ├── raddbg_core.h
│ ├── raddbg_eval.c
│ ├── raddbg_eval.h
│ ├── raddbg_inc.c
│ ├── raddbg_inc.h
│ ├── raddbg_legacy_config.c
│ ├── raddbg_legacy_config.h
│ ├── raddbg_main.c
│ ├── raddbg_views.c
│ ├── raddbg_views.h
│ ├── raddbg_widgets.c
│ └── raddbg_widgets.h
├── raddump/
│ ├── raddump.c
│ ├── raddump.h
│ └── raddump_main.c
├── rdi/
│ ├── rdi.mdesk
│ ├── rdi_local.c
│ └── rdi_local.h
├── rdi_from_coff/
│ ├── rdi_from_coff.c
│ └── rdi_from_coff.h
├── rdi_from_dwarf/
│ ├── rdi_from_dwarf.c
│ └── rdi_from_dwarf.h
├── rdi_from_elf/
│ ├── rdi_from_elf.c
│ └── rdi_from_elf.h
├── rdi_from_pdb/
│ ├── rdi_from_pdb.c
│ └── rdi_from_pdb.h
├── rdi_make/
│ ├── rdi_make_local.c
│ └── rdi_make_local.h
├── regs/
│ ├── generated/
│ │ ├── regs.meta.c
│ │ └── regs.meta.h
│ ├── rdi/
│ │ ├── generated/
│ │ │ ├── regs_rdi.meta.c
│ │ │ └── regs_rdi.meta.h
│ │ ├── regs_rdi.c
│ │ ├── regs_rdi.h
│ │ └── regs_rdi.mdesk
│ ├── regs.c
│ ├── regs.h
│ └── regs.mdesk
├── render/
│ ├── d3d11/
│ │ ├── generated/
│ │ │ ├── render_d3d11.meta.c
│ │ │ └── render_d3d11.meta.h
│ │ ├── render_d3d11.c
│ │ ├── render_d3d11.h
│ │ └── render_d3d11.mdesk
│ ├── generated/
│ │ ├── render.meta.c
│ │ └── render.meta.h
│ ├── opengl/
│ │ ├── generated/
│ │ │ ├── render_opengl.meta.c
│ │ │ └── render_opengl.meta.h
│ │ ├── linux/
│ │ │ ├── egl/
│ │ │ │ ├── render_opengl_linux_egl.c
│ │ │ │ └── render_opengl_linux_egl.h
│ │ │ ├── glx/
│ │ │ │ ├── render_opengl_linux_glx.c
│ │ │ │ └── render_opengl_linux_glx.h
│ │ │ ├── render_opengl_linux.c
│ │ │ └── render_opengl_linux.h
│ │ ├── render_opengl.c
│ │ ├── render_opengl.h
│ │ ├── render_opengl.mdesk
│ │ └── win32/
│ │ ├── render_opengl_win32.c
│ │ └── render_opengl_win32.h
│ ├── render_core.c
│ ├── render_core.h
│ ├── render_core.mdesk
│ ├── render_inc.c
│ ├── render_inc.h
│ └── stub/
│ ├── render_stub.c
│ └── render_stub.h
├── scratch/
│ ├── debugstringperf.c
│ ├── eval_scratch.c
│ ├── parse_inline_sites.c
│ ├── ryan_scratch.c
│ └── textperf.c
├── stap/
│ ├── stap_parse.c
│ ├── stap_parse.h
│ └── stap_test.c
├── strip_lib_debug/
│ └── strip_lib_debug.c
├── tester/
│ └── tester_main.c
├── text/
│ ├── generated/
│ │ ├── text.meta.c
│ │ └── text.meta.h
│ ├── text.c
│ ├── text.h
│ └── text.mdesk
├── third_party/
│ ├── blake3/
│ │ ├── asm/
│ │ │ ├── LICENSE
│ │ │ ├── blake3.c
│ │ │ ├── blake3.h
│ │ │ ├── blake3_avx2_x86-64_unix.S
│ │ │ ├── blake3_avx2_x86-64_windows_msvc.asm
│ │ │ ├── blake3_avx512_x86-64_unix.S
│ │ │ ├── blake3_avx512_x86-64_windows_msvc.asm
│ │ │ ├── blake3_dispatch.c
│ │ │ ├── blake3_impl.h
│ │ │ ├── blake3_neon.c
│ │ │ ├── blake3_portable.c
│ │ │ ├── blake3_sse2_x86-64_unix.S
│ │ │ ├── blake3_sse2_x86-64_windows_msvc.asm
│ │ │ ├── blake3_sse41_x86-64_unix.S
│ │ │ └── blake3_sse41_x86-64_windows_msvc.asm
│ │ └── c/
│ │ ├── LICENSE
│ │ ├── blake3.c
│ │ ├── blake3.h
│ │ ├── blake3_avx2.c
│ │ ├── blake3_avx512.c
│ │ ├── blake3_dispatch.c
│ │ ├── blake3_impl.h
│ │ ├── blake3_neon.c
│ │ ├── blake3_portable.c
│ │ ├── blake3_sse2.c
│ │ └── blake3_sse41.c
│ ├── martins_hash/
│ │ ├── md5.h
│ │ ├── sha1.h
│ │ ├── sha256.h
│ │ └── sha512.h
│ ├── rad_lzb_simple/
│ │ ├── rad_lzb_simple.c
│ │ └── rad_lzb_simple.h
│ ├── radsort/
│ │ └── radsort.h
│ ├── sinfl/
│ │ └── sinfl.h
│ ├── stb/
│ │ ├── stb_image.h
│ │ └── stb_sprintf.h
│ ├── xxHash/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── SECURITY.md
│ │ ├── doc/
│ │ │ ├── README.md
│ │ │ ├── xxhash.cry
│ │ │ └── xxhash_spec.md
│ │ ├── xxh3.h
│ │ ├── xxh_x86dispatch.c
│ │ ├── xxh_x86dispatch.h
│ │ ├── xxhash.c
│ │ └── xxhash.h
│ └── zydis/
│ ├── zydis.c
│ └── zydis.h
├── torture/
│ └── torture.c
├── ui/
│ ├── generated/
│ │ ├── ui.meta.c
│ │ └── ui.meta.h
│ ├── ui.mdesk
│ ├── ui_basic_widgets.c
│ ├── ui_basic_widgets.h
│ ├── ui_core.c
│ ├── ui_core.h
│ ├── ui_inc.c
│ └── ui_inc.h
└── x64/
├── x64.c
└── x64.h
Showing preview only (686K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (10370 symbols across 352 files)
FILE: src/artifact_cache/artifact_cache.c
function internal (line 7) | internal void
function internal (line 28) | internal AC_Artifact
function internal (line 210) | internal void
type RequestBatchTask (line 279) | typedef struct RequestBatchTask RequestBatchTask;
type RequestBatchTask (line 280) | struct RequestBatchTask
function internal (line 600) | internal void
FILE: src/artifact_cache/artifact_cache.h
type AC_Artifact (line 10) | typedef struct AC_Artifact AC_Artifact;
type AC_Artifact (line 11) | struct AC_Artifact
type AC_Artifact (line 19) | typedef AC_Artifact AC_CreateFunctionType(String8 key, B32 *cancel_signa...
type U32 (line 22) | typedef U32 AC_Flags;
type AC_FlagsEnum (line 23) | typedef enum AC_FlagsEnum
type AC_ArtifactParams (line 31) | typedef struct AC_ArtifactParams AC_ArtifactParams;
type AC_ArtifactParams (line 32) | struct AC_ArtifactParams
type AC_Request (line 46) | typedef struct AC_Request AC_Request;
type AC_Request (line 47) | struct AC_Request
type AC_RequestNode (line 55) | typedef struct AC_RequestNode AC_RequestNode;
type AC_RequestNode (line 56) | struct AC_RequestNode
type AC_Node (line 62) | typedef struct AC_Node AC_Node;
type AC_Node (line 63) | struct AC_Node
type AC_Slot (line 83) | typedef struct AC_Slot AC_Slot;
type AC_Slot (line 84) | struct AC_Slot
type AC_Cache (line 90) | typedef struct AC_Cache AC_Cache;
type AC_Cache (line 91) | struct AC_Cache
type AC_RequestBatch (line 104) | typedef struct AC_RequestBatch AC_RequestBatch;
type AC_RequestBatch (line 105) | struct AC_RequestBatch
type AC_Shared (line 117) | typedef struct AC_Shared AC_Shared;
type AC_Shared (line 118) | struct AC_Shared
FILE: src/base/base_arena.c
function internal (line 9) | internal Arena *
function internal (line 72) | internal void
function internal (line 84) | internal void *
function internal (line 192) | internal U64
function internal (line 200) | internal void
function internal (line 230) | internal void
function internal (line 236) | internal void
function internal (line 250) | internal Temp
function internal (line 258) | internal void
FILE: src/base/base_arena.h
type U64 (line 12) | typedef U64 ArenaFlags;
type ArenaParams (line 19) | typedef struct ArenaParams ArenaParams;
type ArenaParams (line 20) | struct ArenaParams
type Arena (line 30) | typedef struct Arena Arena;
type Arena (line 31) | struct Arena
type Temp (line 50) | typedef struct Temp Temp;
type Temp (line 51) | struct Temp
FILE: src/base/base_command_line.c
function internal (line 7) | internal CmdLineOpt **
function internal (line 20) | internal CmdLineOpt *
function internal (line 35) | internal void
function internal (line 42) | internal CmdLineOpt *
function internal (line 70) | internal CmdLine
function internal (line 186) | internal CmdLineOpt *
function internal (line 192) | internal String8List
function internal (line 204) | internal String8
function internal (line 216) | internal B32
function internal (line 223) | internal B32
FILE: src/base/base_command_line.h
type CmdLineOpt (line 10) | typedef struct CmdLineOpt CmdLineOpt;
type CmdLineOpt (line 11) | struct CmdLineOpt
type CmdLineOptList (line 21) | typedef struct CmdLineOptList CmdLineOptList;
type CmdLineOptList (line 22) | struct CmdLineOptList
type CmdLine (line 29) | typedef struct CmdLine CmdLine;
type CmdLine (line 30) | struct CmdLine
FILE: src/base/base_core.c
function internal (line 7) | internal U16
function internal (line 15) | internal U32
function internal (line 23) | internal S32
function internal (line 34) | internal U128
function internal (line 41) | internal U128
function internal (line 48) | internal B32
function internal (line 57) | internal U32
function internal (line 63) | internal U64
function internal (line 81) | internal S32
function internal (line 89) | internal S64
function internal (line 97) | internal F32
function internal (line 104) | internal F32
function internal (line 111) | internal U16
function internal (line 119) | internal U32
function internal (line 129) | internal U64
function internal (line 146) | internal U64
function internal (line 152) | internal U64
function internal (line 158) | internal U64
function internal (line 166) | internal U64
function internal (line 174) | internal U64
function internal (line 182) | internal U64
function internal (line 192) | internal U64
function internal (line 198) | internal U64
function internal (line 204) | internal U64
function internal (line 210) | internal U64
function internal (line 216) | internal U64
function internal (line 222) | internal U64
function internal (line 235) | internal S32
function internal (line 240) | internal F32
function internal (line 248) | internal B32
function internal (line 292) | internal TxtPt
function internal (line 301) | internal B32
function internal (line 307) | internal B32
function internal (line 322) | internal TxtPt
function internal (line 333) | internal TxtPt
function internal (line 344) | internal TxtRng
function internal (line 361) | internal TxtRng
function internal (line 374) | internal TxtRng
function internal (line 383) | internal B32
function internal (line 394) | internal U64
function internal (line 410) | internal U64
function internal (line 416) | internal U64
function internal (line 426) | internal DenseTime
function internal (line 445) | internal DateTime
function internal (line 465) | internal DateTime
function internal (line 487) | internal DateTime
function internal (line 544) | internal U64
function internal (line 561) | internal U64
function internal (line 578) | internal U64
function internal (line 611) | internal U64
function internal (line 622) | internal U64
FILE: src/base/base_core.h
type U8 (line 443) | typedef uint8_t U8;
type U16 (line 444) | typedef uint16_t U16;
type U32 (line 445) | typedef uint32_t U32;
type U64 (line 446) | typedef uint64_t U64;
type S8 (line 447) | typedef int8_t S8;
type S16 (line 448) | typedef int16_t S16;
type S32 (line 449) | typedef int32_t S32;
type S64 (line 450) | typedef int64_t S64;
type S8 (line 451) | typedef S8 B8;
type S16 (line 452) | typedef S16 B16;
type S32 (line 453) | typedef S32 B32;
type S64 (line 454) | typedef S64 B64;
type F32 (line 455) | typedef float F32;
type F64 (line 456) | typedef double F64;
type U128 (line 458) | typedef union U128 U128;
type U256 (line 466) | typedef union U256 U256;
type U512 (line 475) | typedef union U512 U512;
type U16Array (line 489) | typedef struct U16Array U16Array;
type U16Array (line 490) | struct U16Array
type U32Array (line 496) | typedef struct U32Array U32Array;
type U32Array (line 497) | struct U32Array
type U64Array (line 503) | typedef struct U64Array U64Array;
type U64Array (line 504) | struct U64Array
type U128Array (line 510) | typedef struct U128Array U128Array;
type U128Array (line 511) | struct U128Array
type Dimension (line 520) | typedef enum Dimension
type Side (line 529) | typedef enum Side
type Axis2 (line 539) | typedef enum Axis2
type Corner (line 549) | typedef enum Corner
type Dir2 (line 560) | typedef enum Dir2
type OperatingSystem (line 576) | typedef enum OperatingSystem
type ExecutableImageKind (line 595) | typedef enum ExecutableImageKind
type Arch (line 606) | typedef enum Arch
type Compiler (line 628) | typedef enum Compiler
type TxtPt (line 650) | typedef struct TxtPt TxtPt;
type TxtPt (line 651) | struct TxtPt
type TxtRng (line 657) | typedef struct TxtRng TxtRng;
type TxtRng (line 658) | struct TxtRng
type Guid (line 667) | typedef union Guid Guid;
type WeekDay (line 845) | typedef enum WeekDay
type Month (line 858) | typedef enum Month
type DateTime (line 876) | typedef struct DateTime DateTime;
type DateTime (line 877) | struct DateTime
type U64 (line 898) | typedef U64 DenseTime;
type U32 (line 903) | typedef U32 FilePropertyFlags;
type FileProperties (line 909) | typedef struct FileProperties FileProperties;
type FileProperties (line 910) | struct FileProperties
FILE: src/base/base_entry_point.c
function internal (line 14) | internal void
function internal (line 148) | internal void
function internal (line 157) | internal U64
function internal (line 164) | internal B32
function internal (line 180) | internal void
FILE: src/base/base_hash.c
function internal (line 9) | internal MD5
function internal (line 26) | internal SHA1
function internal (line 39) | internal SHA256
FILE: src/base/base_hash.h
type MD5 (line 10) | typedef union MD5 MD5;
type SHA1 (line 20) | typedef union SHA1 SHA1;
type SHA256 (line 26) | typedef union SHA256 SHA256;
FILE: src/base/base_log.c
function internal (line 15) | internal Log *
function internal (line 24) | internal void
function internal (line 30) | internal void
function internal (line 39) | internal void
function internal (line 49) | internal void
function internal (line 67) | internal void
function internal (line 79) | internal LogScopeResult
FILE: src/base/base_log.h
type LogMsgKind (line 10) | typedef enum LogMsgKind
type LogScope (line 18) | typedef struct LogScope LogScope;
type LogScope (line 19) | struct LogScope
type LogScopeResult (line 26) | typedef struct LogScopeResult LogScopeResult;
type LogScopeResult (line 27) | struct LogScopeResult
type Log (line 32) | typedef struct Log Log;
type Log (line 33) | struct Log
FILE: src/base/base_markup.c
function internal (line 4) | internal void
function internal (line 11) | internal void
FILE: src/base/base_math.c
function internal (line 7) | internal F32
function internal (line 14) | internal F64
function internal (line 24) | internal Vec2F32 vec_2f32(F32 x, F32 y) {Vec2F32...
function internal (line 25) | internal Vec2F32 add_2f32(Vec2F32 a, Vec2F32 b) {Vec2F32...
function internal (line 26) | internal Vec2F32 sub_2f32(Vec2F32 a, Vec2F32 b) {Vec2F32...
function internal (line 27) | internal Vec2F32 mul_2f32(Vec2F32 a, Vec2F32 b) {Vec2F32...
function internal (line 28) | internal Vec2F32 div_2f32(Vec2F32 a, Vec2F32 b) {Vec2F32...
function internal (line 29) | internal Vec2F32 scale_2f32(Vec2F32 v, F32 s) {Vec2F32...
function internal (line 30) | internal F32 dot_2f32(Vec2F32 a, Vec2F32 b) {F32 c =...
function internal (line 31) | internal F32 length_squared_2f32(Vec2F32 v) {F32 c =...
function internal (line 32) | internal F32 length_2f32(Vec2F32 v) {F32 c =...
function internal (line 33) | internal Vec2F32 normalize_2f32(Vec2F32 v) {v = sca...
function internal (line 34) | internal Vec2F32 mix_2f32(Vec2F32 a, Vec2F32 b, F32 t) {Vec2F32...
function internal (line 36) | internal Vec2S64 vec_2s64(S64 x, S64 y) {Vec2S64...
function internal (line 37) | internal Vec2S64 add_2s64(Vec2S64 a, Vec2S64 b) {Vec2S64...
function internal (line 38) | internal Vec2S64 sub_2s64(Vec2S64 a, Vec2S64 b) {Vec2S64...
function internal (line 39) | internal Vec2S64 mul_2s64(Vec2S64 a, Vec2S64 b) {Vec2S64...
function internal (line 40) | internal Vec2S64 div_2s64(Vec2S64 a, Vec2S64 b) {Vec2S64...
function internal (line 41) | internal Vec2S64 scale_2s64(Vec2S64 v, S64 s) {Vec2S64...
function internal (line 42) | internal S64 dot_2s64(Vec2S64 a, Vec2S64 b) {S64 c =...
function internal (line 43) | internal S64 length_squared_2s64(Vec2S64 v) {S64 c =...
function internal (line 44) | internal S64 length_2s64(Vec2S64 v) {S64 c =...
function internal (line 45) | internal Vec2S64 mix_2s64(Vec2S64 a, Vec2S64 b, F32 t) {Vec2S64...
function internal (line 47) | internal Vec2S32 vec_2s32(S32 x, S32 y) {Vec2S32...
function internal (line 48) | internal Vec2S32 add_2s32(Vec2S32 a, Vec2S32 b) {Vec2S32...
function internal (line 49) | internal Vec2S32 sub_2s32(Vec2S32 a, Vec2S32 b) {Vec2S32...
function internal (line 50) | internal Vec2S32 mul_2s32(Vec2S32 a, Vec2S32 b) {Vec2S32...
function internal (line 51) | internal Vec2S32 div_2s32(Vec2S32 a, Vec2S32 b) {Vec2S32...
function internal (line 52) | internal Vec2S32 scale_2s32(Vec2S32 v, S32 s) {Vec2S32...
function internal (line 53) | internal S32 dot_2s32(Vec2S32 a, Vec2S32 b) {S32 c =...
function internal (line 54) | internal S32 length_squared_2s32(Vec2S32 v) {S32 c =...
function internal (line 55) | internal S32 length_2s32(Vec2S32 v) {S32 c =...
function internal (line 56) | internal Vec2S32 mix_2s32(Vec2S32 a, Vec2S32 b, F32 t) {Vec2S32...
function internal (line 58) | internal Vec2S16 vec_2s16(S16 x, S16 y) {Vec2S16...
function internal (line 59) | internal Vec2S16 add_2s16(Vec2S16 a, Vec2S16 b) {Vec2S16...
function internal (line 60) | internal Vec2S16 sub_2s16(Vec2S16 a, Vec2S16 b) {Vec2S16...
function internal (line 61) | internal Vec2S16 mul_2s16(Vec2S16 a, Vec2S16 b) {Vec2S16...
function internal (line 62) | internal Vec2S16 div_2s16(Vec2S16 a, Vec2S16 b) {Vec2S16...
function internal (line 63) | internal Vec2S16 scale_2s16(Vec2S16 v, S16 s) {Vec2S16...
function internal (line 64) | internal S16 dot_2s16(Vec2S16 a, Vec2S16 b) {S16 c =...
function internal (line 65) | internal S16 length_squared_2s16(Vec2S16 v) {S16 c =...
function internal (line 66) | internal S16 length_2s16(Vec2S16 v) {S16 c =...
function internal (line 67) | internal Vec2S16 mix_2s16(Vec2S16 a, Vec2S16 b, F32 t) {Vec2S16...
function internal (line 69) | internal Vec3F32 vec_3f32(F32 x, F32 y, F32 z) {Vec3F32...
function internal (line 70) | internal Vec3F32 add_3f32(Vec3F32 a, Vec3F32 b) {Vec3F32...
function internal (line 71) | internal Vec3F32 sub_3f32(Vec3F32 a, Vec3F32 b) {Vec3F32...
function internal (line 72) | internal Vec3F32 mul_3f32(Vec3F32 a, Vec3F32 b) {Vec3F32...
function internal (line 73) | internal Vec3F32 div_3f32(Vec3F32 a, Vec3F32 b) {Vec3F32...
function internal (line 74) | internal Vec3F32 scale_3f32(Vec3F32 v, F32 s) {Vec3F32...
function internal (line 75) | internal F32 dot_3f32(Vec3F32 a, Vec3F32 b) {F32 c =...
function internal (line 76) | internal F32 length_squared_3f32(Vec3F32 v) {F32 c =...
function internal (line 77) | internal F32 length_3f32(Vec3F32 v) {F32 c =...
function internal (line 78) | internal Vec3F32 normalize_3f32(Vec3F32 v) {v = sca...
function internal (line 79) | internal Vec3F32 mix_3f32(Vec3F32 a, Vec3F32 b, F32 t) {Vec3F32...
function internal (line 80) | internal Vec3F32 cross_3f32(Vec3F32 a, Vec3F32 b) {Vec3F32...
function internal (line 81) | internal Vec3F32 xform_3f32(Vec3F32 v, Mat3x3F32 m)
function internal (line 90) | internal Vec3S32 vec_3s32(S32 x, S32 y, S32 z) {Vec3S32...
function internal (line 91) | internal Vec3S32 add_3s32(Vec3S32 a, Vec3S32 b) {Vec3S32...
function internal (line 92) | internal Vec3S32 sub_3s32(Vec3S32 a, Vec3S32 b) {Vec3S32...
function internal (line 93) | internal Vec3S32 mul_3s32(Vec3S32 a, Vec3S32 b) {Vec3S32...
function internal (line 94) | internal Vec3S32 div_3s32(Vec3S32 a, Vec3S32 b) {Vec3S32...
function internal (line 95) | internal Vec3S32 scale_3s32(Vec3S32 v, S32 s) {Vec3S32...
function internal (line 96) | internal S32 dot_3s32(Vec3S32 a, Vec3S32 b) {S32 c =...
function internal (line 97) | internal S32 length_squared_3s32(Vec3S32 v) {S32 c =...
function internal (line 98) | internal S32 length_3s32(Vec3S32 v) {S32 c =...
function internal (line 99) | internal Vec3S32 mix_3s32(Vec3S32 a, Vec3S32 b, F32 t) {Vec3S32...
function internal (line 100) | internal Vec3S32 cross_3s32(Vec3S32 a, Vec3S32 b) {Vec3S32...
function internal (line 102) | internal Vec4F32 vec_4f32(F32 x, F32 y, F32 z, F32 w) {Vec4F32...
function internal (line 103) | internal Vec4F32 add_4f32(Vec4F32 a, Vec4F32 b) {Vec4F32...
function internal (line 104) | internal Vec4F32 sub_4f32(Vec4F32 a, Vec4F32 b) {Vec4F32...
function internal (line 105) | internal Vec4F32 mul_4f32(Vec4F32 a, Vec4F32 b) {Vec4F32...
function internal (line 106) | internal Vec4F32 div_4f32(Vec4F32 a, Vec4F32 b) {Vec4F32...
function internal (line 107) | internal Vec4F32 scale_4f32(Vec4F32 v, F32 s) {Vec4F32...
function internal (line 108) | internal F32 dot_4f32(Vec4F32 a, Vec4F32 b) {F32 c =...
function internal (line 109) | internal F32 length_squared_4f32(Vec4F32 v) {F32 c =...
function internal (line 110) | internal F32 length_4f32(Vec4F32 v) {F32 c =...
function internal (line 111) | internal Vec4F32 normalize_4f32(Vec4F32 v) {v = sca...
function internal (line 112) | internal Vec4F32 mix_4f32(Vec4F32 a, Vec4F32 b, F32 t) {Vec4F32...
function internal (line 114) | internal Vec4S32 vec_4s32(S32 x, S32 y, S32 z, S32 w) {Vec4S32...
function internal (line 115) | internal Vec4S32 add_4s32(Vec4S32 a, Vec4S32 b) {Vec4S32...
function internal (line 116) | internal Vec4S32 sub_4s32(Vec4S32 a, Vec4S32 b) {Vec4S32...
function internal (line 117) | internal Vec4S32 mul_4s32(Vec4S32 a, Vec4S32 b) {Vec4S32...
function internal (line 118) | internal Vec4S32 div_4s32(Vec4S32 a, Vec4S32 b) {Vec4S32...
function internal (line 119) | internal Vec4S32 scale_4s32(Vec4S32 v, S32 s) {Vec4S32...
function internal (line 120) | internal S32 dot_4s32(Vec4S32 a, Vec4S32 b) {S32 c =...
function internal (line 121) | internal S32 length_squared_4s32(Vec4S32 v) {S32 c =...
function internal (line 122) | internal S32 length_4s32(Vec4S32 v) {S32 c =...
function internal (line 123) | internal Vec4S32 mix_4s32(Vec4S32 a, Vec4S32 b, F32 t) {Vec4S32...
function internal (line 128) | internal Mat3x3F32
function internal (line 138) | internal Mat3x3F32
function internal (line 147) | internal Mat3x3F32
function internal (line 156) | internal Mat3x3F32
function internal (line 172) | internal Mat4x4F32
function internal (line 183) | internal Mat4x4F32
function internal (line 193) | internal Mat4x4F32
function internal (line 203) | internal Mat4x4F32
function internal (line 217) | internal Mat4x4F32
function internal (line 234) | internal Mat4x4F32
function internal (line 260) | internal Mat4x4F32
function internal (line 280) | internal Mat4x4F32
function internal (line 297) | internal Mat4x4F32
function internal (line 310) | internal Mat4x4F32
function internal (line 371) | internal Mat4x4F32
function internal (line 392) | internal Mat4x4F32
function internal (line 410) | internal Rng1U32 rng_1u32(U32 min, U32 max) {Rng1U32...
function internal (line 411) | internal Rng1U32 shift_1u32(Rng1U32 r, U32 x) {r.min +...
function internal (line 412) | internal Rng1U32 pad_1u32(Rng1U32 r, U32 x) {r.min -...
function internal (line 413) | internal U32 center_1u32(Rng1U32 r) {U32 c =...
function internal (line 414) | internal B32 contains_1u32(Rng1U32 r, U32 x) {B32 c =...
function internal (line 415) | internal U32 dim_1u32(Rng1U32 r) {U32 c =...
function internal (line 416) | internal Rng1U32 union_1u32(Rng1U32 a, Rng1U32 b) {Rng1U32...
function internal (line 417) | internal Rng1U32 intersect_1u32(Rng1U32 a, Rng1U32 b) {Rng1U32...
function internal (line 418) | internal U32 clamp_1u32(Rng1U32 r, U32 v) {v = Cla...
function internal (line 420) | internal Rng1S32 rng_1s32(S32 min, S32 max) {Rng1S32...
function internal (line 421) | internal Rng1S32 shift_1s32(Rng1S32 r, S32 x) {r.min +...
function internal (line 422) | internal Rng1S32 pad_1s32(Rng1S32 r, S32 x) {r.min -...
function internal (line 423) | internal S32 center_1s32(Rng1S32 r) {S32 c =...
function internal (line 424) | internal B32 contains_1s32(Rng1S32 r, S32 x) {B32 c =...
function internal (line 425) | internal S32 dim_1s32(Rng1S32 r) {S32 c =...
function internal (line 426) | internal Rng1S32 union_1s32(Rng1S32 a, Rng1S32 b) {Rng1S32...
function internal (line 427) | internal Rng1S32 intersect_1s32(Rng1S32 a, Rng1S32 b) {Rng1S32...
function internal (line 428) | internal S32 clamp_1s32(Rng1S32 r, S32 v) {v = Cla...
function internal (line 430) | internal Rng1U64 rng_1u64(U64 min, U64 max) {Rng1U64...
function internal (line 431) | internal Rng1U64 shift_1u64(Rng1U64 r, U64 x) {r.min +...
function internal (line 432) | internal Rng1U64 pad_1u64(Rng1U64 r, U64 x) {r.min -...
function internal (line 433) | internal U64 center_1u64(Rng1U64 r) {U64 c =...
function internal (line 434) | internal B32 contains_1u64(Rng1U64 r, U64 x) {B32 c =...
function internal (line 435) | internal U64 dim_1u64(Rng1U64 r) {U64 c =...
function internal (line 436) | internal Rng1U64 union_1u64(Rng1U64 a, Rng1U64 b) {Rng1U64...
function internal (line 437) | internal Rng1U64 intersect_1u64(Rng1U64 a, Rng1U64 b) {Rng1U64...
function internal (line 438) | internal U64 clamp_1u64(Rng1U64 r, U64 v) {v = Cla...
function internal (line 440) | internal Rng1S64 rng_1s64(S64 min, S64 max) {Rng1S64...
function internal (line 441) | internal Rng1S64 shift_1s64(Rng1S64 r, S64 x) {r.min +...
function internal (line 442) | internal Rng1S64 pad_1s64(Rng1S64 r, S64 x) {r.min -...
function internal (line 443) | internal S64 center_1s64(Rng1S64 r) {S64 c =...
function internal (line 444) | internal B32 contains_1s64(Rng1S64 r, S64 x) {B32 c =...
function internal (line 445) | internal S64 dim_1s64(Rng1S64 r) {S64 c =...
function internal (line 446) | internal Rng1S64 union_1s64(Rng1S64 a, Rng1S64 b) {Rng1S64...
function internal (line 447) | internal Rng1S64 intersect_1s64(Rng1S64 a, Rng1S64 b) {Rng1S64...
function internal (line 448) | internal S64 clamp_1s64(Rng1S64 r, S64 v) {v = Cla...
function internal (line 450) | internal Rng1F32 rng_1f32(F32 min, F32 max) {Rng1F32...
function internal (line 451) | internal Rng1F32 shift_1f32(Rng1F32 r, F32 x) {r.min +...
function internal (line 452) | internal Rng1F32 pad_1f32(Rng1F32 r, F32 x) {r.min -...
function internal (line 453) | internal F32 center_1f32(Rng1F32 r) {F32 c =...
function internal (line 454) | internal B32 contains_1f32(Rng1F32 r, F32 x) {B32 c =...
function internal (line 455) | internal F32 dim_1f32(Rng1F32 r) {F32 c =...
function internal (line 456) | internal Rng1F32 union_1f32(Rng1F32 a, Rng1F32 b) {Rng1F32...
function internal (line 457) | internal Rng1F32 intersect_1f32(Rng1F32 a, Rng1F32 b) {Rng1F32...
function internal (line 458) | internal F32 clamp_1f32(Rng1F32 r, F32 v) {v = Cla...
function internal (line 460) | internal Rng2S16 rng_2s16(Vec2S16 min, Vec2S16 max) {Rng2S16...
function internal (line 461) | internal Rng2S16 shift_2s16(Rng2S16 r, Vec2S16 x) {r.min =...
function internal (line 462) | internal Rng2S16 pad_2s16(Rng2S16 r, S16 x) {Vec2S16...
function internal (line 463) | internal Vec2S16 center_2s16(Rng2S16 r) {Vec2S16...
function internal (line 464) | internal B32 contains_2s16(Rng2S16 r, Vec2S16 x) {B32 c =...
function internal (line 465) | internal Vec2S16 dim_2s16(Rng2S16 r) {Vec2S16...
function internal (line 466) | internal Rng2S16 union_2s16(Rng2S16 a, Rng2S16 b) {Rng2S16...
function internal (line 467) | internal Rng2S16 intersect_2s16(Rng2S16 a, Rng2S16 b) {Rng2S16...
function internal (line 468) | internal Vec2S16 clamp_2s16(Rng2S16 r, Vec2S16 v) {v.x = C...
function internal (line 470) | internal Rng2S32 rng_2s32(Vec2S32 min, Vec2S32 max) {Rng2S32...
function internal (line 471) | internal Rng2S32 shift_2s32(Rng2S32 r, Vec2S32 x) {r.min =...
function internal (line 472) | internal Rng2S32 pad_2s32(Rng2S32 r, S32 x) {Vec2S32...
function internal (line 473) | internal Vec2S32 center_2s32(Rng2S32 r) {Vec2S32...
function internal (line 474) | internal B32 contains_2s32(Rng2S32 r, Vec2S32 x) {B32 c =...
function internal (line 475) | internal Vec2S32 dim_2s32(Rng2S32 r) {Vec2S32...
function internal (line 476) | internal Rng2S32 union_2s32(Rng2S32 a, Rng2S32 b) {Rng2S32...
function internal (line 477) | internal Rng2S32 intersect_2s32(Rng2S32 a, Rng2S32 b) {Rng2S32...
function internal (line 478) | internal Vec2S32 clamp_2s32(Rng2S32 r, Vec2S32 v) {v.x = C...
function internal (line 480) | internal Rng2S64 rng_2s64(Vec2S64 min, Vec2S64 max) {Rng2S64...
function internal (line 481) | internal Rng2S64 shift_2s64(Rng2S64 r, Vec2S64 x) {r.min =...
function internal (line 482) | internal Rng2S64 pad_2s64(Rng2S64 r, S64 x) {Vec2S64...
function internal (line 483) | internal Vec2S64 center_2s64(Rng2S64 r) {Vec2S64...
function internal (line 484) | internal B32 contains_2s64(Rng2S64 r, Vec2S64 x) {B32 c =...
function internal (line 485) | internal Vec2S64 dim_2s64(Rng2S64 r) {Vec2S64...
function internal (line 486) | internal Rng2S64 union_2s64(Rng2S64 a, Rng2S64 b) {Rng2S64...
function internal (line 487) | internal Rng2S64 intersect_2s64(Rng2S64 a, Rng2S64 b) {Rng2S64...
function internal (line 488) | internal Vec2S64 clamp_2s64(Rng2S64 r, Vec2S64 v) {v.x = C...
function internal (line 490) | internal Rng2F32 rng_2f32(Vec2F32 min, Vec2F32 max) {Rng2F32...
function internal (line 491) | internal Rng2F32 shift_2f32(Rng2F32 r, Vec2F32 x) {r.min =...
function internal (line 492) | internal Rng2F32 pad_2f32(Rng2F32 r, F32 x) {Vec2F32...
function internal (line 493) | internal Vec2F32 center_2f32(Rng2F32 r) {Vec2F32...
function internal (line 494) | internal B32 contains_2f32(Rng2F32 r, Vec2F32 x) {B32 c =...
function internal (line 495) | internal Vec2F32 dim_2f32(Rng2F32 r) {Vec2F32...
function internal (line 496) | internal Rng2F32 union_2f32(Rng2F32 a, Rng2F32 b) {Rng2F32...
function internal (line 497) | internal Rng2F32 intersect_2f32(Rng2F32 a, Rng2F32 b) {Rng2F32...
function internal (line 498) | internal Vec2F32 clamp_2f32(Rng2F32 r, Vec2F32 v) {v.x = C...
function internal (line 505) | internal Vec3F32
function internal (line 522) | internal Vec3F32
function internal (line 572) | internal Vec4F32
function internal (line 581) | internal Vec4F32
function internal (line 592) | internal Vec3F32
function internal (line 603) | internal Vec3F32
function internal (line 614) | internal Vec4F32
function internal (line 623) | internal Vec4F32
function internal (line 634) | internal Vec3F32
function internal (line 650) | internal Vec3F32
function internal (line 666) | internal Vec4F32
function internal (line 675) | internal Vec4F32
function internal (line 686) | internal U32
function internal (line 697) | internal Vec4F32
function internal (line 710) | internal void
function internal (line 717) | internal Rng1U64Node *
function internal (line 726) | internal void
function internal (line 745) | internal Rng1U64Array
function internal (line 760) | internal U64
function internal (line 791) | internal void
function internal (line 800) | internal Rng1S64Array
function internal (line 818) | internal Rng1U64
FILE: src/base/base_math.h
type Vec2F32 (line 12) | typedef union Vec2F32 Vec2F32;
type Vec2S64 (line 23) | typedef union Vec2S64 Vec2S64;
type Vec2S32 (line 34) | typedef union Vec2S32 Vec2S32;
type Vec2S16 (line 45) | typedef union Vec2S16 Vec2S16;
type Vec3F32 (line 58) | typedef union Vec3F32 Vec3F32;
type Vec3S32 (line 80) | typedef union Vec3S32 Vec3S32;
type Vec4F32 (line 104) | typedef union Vec4F32 Vec4F32;
type Vec4S32 (line 132) | typedef union Vec4S32 Vec4S32;
type Mat3x3F32 (line 163) | typedef struct Mat3x3F32 Mat3x3F32;
type Mat3x3F32 (line 164) | struct Mat3x3F32
type Mat4x4F32 (line 169) | typedef struct Mat4x4F32 Mat4x4F32;
type Mat4x4F32 (line 170) | struct Mat4x4F32
type Rng1U32 (line 180) | typedef union Rng1U32 Rng1U32;
type Rng1S32 (line 191) | typedef union Rng1S32 Rng1S32;
type Rng1U64 (line 202) | typedef union Rng1U64 Rng1U64;
type Rng1S64 (line 213) | typedef union Rng1S64 Rng1S64;
type Rng1F32 (line 224) | typedef union Rng1F32 Rng1F32;
type Rng2S16 (line 237) | typedef union Rng2S16 Rng2S16;
type Rng2S32 (line 260) | typedef union Rng2S32 Rng2S32;
type Rng2F32 (line 283) | typedef union Rng2F32 Rng2F32;
type Rng2S64 (line 306) | typedef union Rng2S64 Rng2S64;
type Rng1U64Node (line 332) | typedef struct Rng1U64Node Rng1U64Node;
type Rng1U64Node (line 333) | struct Rng1U64Node
type Rng1U64List (line 339) | typedef struct Rng1U64List Rng1U64List;
type Rng1U64List (line 340) | struct Rng1U64List
type Rng1U64Array (line 347) | typedef struct Rng1U64Array Rng1U64Array;
type Rng1U64Array (line 348) | struct Rng1U64Array
type Rng1S64Node (line 354) | typedef struct Rng1S64Node Rng1S64Node;
type Rng1S64Node (line 355) | struct Rng1S64Node
type Rng1S64List (line 361) | typedef struct Rng1S64List Rng1S64List;
type Rng1S64List (line 362) | struct Rng1S64List
type Rng1S64Array (line 369) | typedef struct Rng1S64Array Rng1S64Array;
type Rng1S64Array (line 370) | struct Rng1S64Array
FILE: src/base/base_meta.c
function internal (line 7) | internal Member *
function internal (line 28) | internal void
function internal (line 77) | internal String8
function internal (line 238) | internal String8
function internal (line 413) | internal String8
FILE: src/base/base_meta.h
type TweakB32Info (line 17) | typedef struct TweakB32Info TweakB32Info;
type TweakB32Info (line 18) | struct TweakB32Info
type TweakF32Info (line 25) | typedef struct TweakF32Info TweakF32Info;
type TweakF32Info (line 26) | struct TweakF32Info
type TweakB32InfoTable (line 34) | typedef struct TweakB32InfoTable TweakB32InfoTable;
type TweakB32InfoTable (line 35) | struct TweakB32InfoTable
type TweakF32InfoTable (line 41) | typedef struct TweakF32InfoTable TweakF32InfoTable;
type TweakF32InfoTable (line 42) | struct TweakF32InfoTable
type EmbedInfo (line 48) | typedef struct EmbedInfo EmbedInfo;
type EmbedInfo (line 49) | struct EmbedInfo
type EmbedInfoTable (line 56) | typedef struct EmbedInfoTable EmbedInfoTable;
type EmbedInfoTable (line 57) | struct EmbedInfoTable
type TypeKind (line 66) | typedef enum TypeKind
type U32 (line 100) | typedef U32 TypeFlags;
type U32 (line 108) | typedef U32 MemberFlags;
type Type (line 114) | typedef struct Type Type;
type Member (line 115) | typedef struct Member Member;
type Member (line 116) | struct Member
type Type (line 125) | typedef struct Type Type;
type Type (line 126) | struct Type
type TypeSerializePtrRefInfo (line 141) | typedef struct TypeSerializePtrRefInfo TypeSerializePtrRefInfo;
type TypeSerializePtrRefInfo (line 142) | struct TypeSerializePtrRefInfo
type TypeSerializeParams (line 150) | typedef struct TypeSerializeParams TypeSerializeParams;
type TypeSerializeParams (line 151) | struct TypeSerializeParams
FILE: src/base/base_profile.c
function internal (line 5) | internal inline void
FILE: src/base/base_strings.c
function internal (line 7) | internal B32
function internal (line 13) | internal B32
function internal (line 19) | internal B32
function internal (line 25) | internal B32
function internal (line 31) | internal B32
function internal (line 37) | internal B32
function internal (line 52) | internal U8
function internal (line 62) | internal U8
function internal (line 72) | internal U8
function internal (line 85) | internal U64
function internal (line 98) | internal U64
function internal (line 111) | internal U64
function internal (line 127) | internal String8
function internal (line 134) | internal String8
function internal (line 141) | internal String8
function internal (line 148) | internal String16
function internal (line 155) | internal String16
function internal (line 162) | internal String16
function internal (line 169) | internal String32
function internal (line 176) | internal String32
function internal (line 183) | internal String32
function internal (line 190) | internal String8
function internal (line 197) | internal String16
function internal (line 204) | internal String32
function internal (line 211) | internal String8
function internal (line 222) | internal String16
function internal (line 233) | internal String8
function internal (line 254) | internal String8
function internal (line 265) | internal String8
function internal (line 276) | internal String8
function internal (line 290) | internal B32
function internal (line 328) | internal U64
function internal (line 368) | internal U64
function internal (line 384) | internal B32
function internal (line 414) | internal String8
function internal (line 424) | internal String8
function internal (line 431) | internal String8
function internal (line 440) | internal String8
function internal (line 449) | internal String8
function internal (line 457) | internal String8
function internal (line 482) | internal String8
function internal (line 510) | internal String8
function internal (line 522) | internal String8
function internal (line 533) | internal String8
function internal (line 546) | internal String8
function internal (line 556) | internal String8
function internal (line 572) | internal S64
function internal (line 596) | internal B32
function internal (line 619) | internal B32
function internal (line 635) | internal U64
function internal (line 650) | internal S64
function internal (line 658) | internal U32
function internal (line 666) | internal S32
function internal (line 674) | internal B32
function internal (line 714) | internal B32
function internal (line 727) | internal String8
function internal (line 756) | internal String8
function internal (line 805) | internal String8
function internal (line 820) | internal String8
function internal (line 845) | internal String8
function internal (line 938) | internal String8
function internal (line 960) | internal F64
function internal (line 1006) | internal String8Node *
function internal (line 1015) | internal String8Node *
function internal (line 1025) | internal String8Node *
function internal (line 1034) | internal String8Node *
function internal (line 1044) | internal String8Node *
function internal (line 1052) | internal String8Node *
function internal (line 1060) | internal void
function internal (line 1080) | internal String8Node*
function internal (line 1103) | internal String8Node*
function internal (line 1114) | internal String8Node*
function internal (line 1125) | internal String8List
function internal (line 1141) | internal String8List
function internal (line 1178) | internal String8List
function internal (line 1185) | internal String8
function internal (line 1224) | internal String8List
function str8_array_zero (line 1242) | str8_array_zero(void)
function internal (line 1248) | internal String8Array
function internal (line 1262) | internal String8Array *
function internal (line 1272) | internal String8Array
function internal (line 1281) | internal String8Array
function internal (line 1297) | internal U64
function internal (line 1319) | internal String8
function internal (line 1332) | internal String8
function internal (line 1357) | internal String8
function internal (line 1380) | internal String8
function internal (line 1397) | internal String8
function internal (line 1414) | internal PathStyle
function internal (line 1434) | internal String8List
function internal (line 1441) | internal void
function internal (line 1530) | internal String8
function internal (line 1553) | internal String8TxtPtPair
function internal (line 1608) | internal String8
function internal (line 1689) | internal String8
function internal (line 1710) | internal String8List
function internal (line 1728) | internal String8
function internal (line 1739) | internal B32
function internal (line 1753) | internal PathStyle
function internal (line 1766) | internal String8
function internal (line 1773) | internal String8
function internal (line 1787) | internal StringMatchFlags
function internal (line 1807) | internal String8
function internal (line 1819) | internal String8
function internal (line 1835) | internal UnicodeDecode
function internal (line 1896) | internal UnicodeDecode
function internal (line 1910) | internal U32
function internal (line 1948) | internal U32
function internal (line 1973) | internal String8
function internal (line 1997) | internal String16
function internal (line 2021) | internal String8
function internal (line 2043) | internal String32
function internal (line 2084) | internal OperatingSystem
function internal (line 2097) | internal String8
function internal (line 2115) | internal String8
function internal (line 2131) | internal String8
function internal (line 2142) | internal String8
function internal (line 2159) | internal String8
function internal (line 2180) | internal String8
function internal (line 2206) | internal String8
function internal (line 2226) | internal String8
function internal (line 2236) | internal String8
function internal (line 2266) | internal String8
function internal (line 2284) | internal B32
function internal (line 2327) | internal Guid
function internal (line 2338) | internal String8
function internal (line 2380) | internal String8
function internal (line 2422) | internal String8
function internal (line 2473) | internal String8List
function internal (line 2531) | internal String8
function internal (line 2538) | internal Vec4F32
function internal (line 2563) | internal FuzzyMatchRangeList
function internal (line 2605) | internal FuzzyMatchRangeList
function internal (line 2624) | internal void
function internal (line 2633) | internal String8
function internal (line 2642) | internal void
function internal (line 2654) | internal U64
function internal (line 2678) | internal void *
function internal (line 2698) | internal void *
function internal (line 2708) | internal void
function internal (line 2717) | internal void
function internal (line 2731) | internal void
function internal (line 2745) | internal void
function internal (line 2750) | internal void
function internal (line 2755) | internal void
function internal (line 2761) | internal void
function internal (line 2769) | internal U64
function internal (line 2782) | internal U64
function internal (line 2797) | internal void *
function internal (line 2807) | internal U64
function internal (line 2820) | internal U64
function internal (line 2833) | internal U64
function internal (line 2843) | internal int
function internal (line 2884) | internal int str8_compar_ignore_case(const void *a, const void *b)
function internal (line 2889) | internal int
function internal (line 2895) | internal int
function internal (line 2912) | internal U64
function internal (line 2919) | internal U64
function internal (line 2926) | internal U128
function internal (line 2935) | internal U128
FILE: src/base/base_strings.h
type String8 (line 10) | typedef struct String8 String8;
type String8 (line 11) | struct String8
type String16 (line 17) | typedef struct String16 String16;
type String16 (line 18) | struct String16
type String32 (line 24) | typedef struct String32 String32;
type String32 (line 25) | struct String32
type String8Node (line 34) | typedef struct String8Node String8Node;
type String8Node (line 35) | struct String8Node
type String8List (line 41) | typedef struct String8List String8List;
type String8List (line 42) | struct String8List
type String8Array (line 50) | typedef struct String8Array String8Array;
type String8Array (line 51) | struct String8Array
type U32 (line 61) | typedef U32 StringMatchFlags;
type U32 (line 69) | typedef U32 StringSplitFlags;
type PathStyle (line 75) | typedef enum PathStyle
type StringJoin (line 92) | typedef struct StringJoin StringJoin;
type StringJoin (line 93) | struct StringJoin
type String8TxtPtPair (line 103) | typedef struct String8TxtPtPair String8TxtPtPair;
type String8TxtPtPair (line 104) | struct String8TxtPtPair
type UnicodeDecode (line 113) | typedef struct UnicodeDecode UnicodeDecode;
type UnicodeDecode (line 114) | struct UnicodeDecode
type FuzzyMatchRangeNode (line 123) | typedef struct FuzzyMatchRangeNode FuzzyMatchRangeNode;
type FuzzyMatchRangeNode (line 124) | struct FuzzyMatchRangeNode
type FuzzyMatchRangeList (line 130) | typedef struct FuzzyMatchRangeList FuzzyMatchRangeList;
type FuzzyMatchRangeList (line 131) | struct FuzzyMatchRangeList
FILE: src/base/base_thread_context.c
function internal (line 17) | internal TCTX *
function internal (line 28) | internal void
function internal (line 35) | internal void
function internal (line 41) | internal TCTX *
function internal (line 49) | internal Arena *
function internal (line 78) | internal LaneCtx
function internal (line 87) | internal void
function internal (line 121) | internal void
function internal (line 130) | internal String8
function internal (line 140) | internal void
function internal (line 148) | internal void
function internal (line 159) | internal Access *
function internal (line 179) | internal void
function internal (line 192) | internal void
function internal (line 215) | internal B32
FILE: src/base/base_thread_context.h
type LaneCtx (line 10) | typedef struct LaneCtx LaneCtx;
type LaneCtx (line 11) | struct LaneCtx
type AccessPt (line 22) | typedef struct AccessPt AccessPt;
type AccessPt (line 23) | struct AccessPt
type AccessPtExpireParams (line 30) | typedef struct AccessPtExpireParams AccessPtExpireParams;
type AccessPtExpireParams (line 31) | struct AccessPtExpireParams
type Touch (line 37) | typedef struct Touch Touch;
type Touch (line 38) | struct Touch
type Access (line 45) | typedef struct Access Access;
type Access (line 46) | struct Access
type TCTX (line 55) | typedef struct TCTX TCTX;
type TCTX (line 56) | struct TCTX
FILE: src/base/base_threads.c
function internal (line 7) | internal Thread
function internal (line 14) | internal B32
function internal (line 21) | internal void
function internal (line 32) | internal Mutex mutex_alloc(void) {return os_mutex_alloc();}
function internal (line 33) | internal void mutex_release(Mutex mutex) {os_mutex_release(mutex);}
function internal (line 34) | internal void mutex_take(Mutex mutex) {os_mutex_take(mutex);}
function internal (line 35) | internal void mutex_drop(Mutex mutex) {os_mutex_drop(mutex);}
function internal (line 39) | internal RWMutex rw_mutex_alloc(void) {return os_rw_mutex_all...
function internal (line 40) | internal void rw_mutex_release(RWMutex mutex) {os_rw_mutex_release(mu...
function internal (line 41) | internal void rw_mutex_take(RWMutex mutex, B32 write_mode) {os_rw_mut...
function internal (line 42) | internal void rw_mutex_drop(RWMutex mutex, B32 write_mode) {os_rw_mut...
function internal (line 46) | internal CondVar cond_var_alloc(void) ...
function internal (line 47) | internal void cond_var_release(CondVar cv) ...
function internal (line 48) | internal B32 cond_var_wait(CondVar cv, Mutex mutex, U64 endt_us) ...
function internal (line 49) | internal B32 cond_var_wait_rw(CondVar cv, RWMutex mutex_rw, B32 wr...
function internal (line 50) | internal void cond_var_signal(CondVar cv) ...
function internal (line 51) | internal void cond_var_broadcast(CondVar cv) ...
function internal (line 55) | internal Semaphore semaphore_alloc(U32 initial_count, U32 max_count, Str...
function internal (line 56) | internal void semaphore_release(Semaphore semaphore) ...
function internal (line 57) | internal Semaphore semaphore_open(String8 name) ...
function internal (line 58) | internal void semaphore_close(Semaphore semaphore) ...
function internal (line 59) | internal B32 semaphore_take(Semaphore semaphore, U64 endt_us) ...
function internal (line 60) | internal void semaphore_drop(Semaphore semaphore) ...
function internal (line 64) | internal Barrier barrier_alloc(U64 count) {return os_barrier_a...
function internal (line 65) | internal void barrier_release(Barrier barrier) {os_barrier_release(...
function internal (line 66) | internal void barrier_wait(Barrier barrier) {os_barrier_wait(bar...
function internal (line 71) | internal StripeArray
function internal (line 86) | internal void
function internal (line 97) | internal Stripe *
FILE: src/base/base_threads.h
type Thread (line 10) | typedef struct Thread Thread;
type Thread (line 11) | struct Thread
type Mutex (line 20) | typedef struct Mutex Mutex;
type Mutex (line 21) | struct Mutex
type RWMutex (line 26) | typedef struct RWMutex RWMutex;
type RWMutex (line 27) | struct RWMutex
type CondVar (line 32) | typedef struct CondVar CondVar;
type CondVar (line 33) | struct CondVar
type Semaphore (line 38) | typedef struct Semaphore Semaphore;
type Semaphore (line 39) | struct Semaphore
type Barrier (line 44) | typedef struct Barrier Barrier;
type Barrier (line 45) | struct Barrier
type Stripe (line 53) | typedef struct Stripe Stripe;
type Stripe (line 54) | struct Stripe
type StripeArray (line 62) | typedef struct StripeArray StripeArray;
type StripeArray (line 63) | struct StripeArray
FILE: src/codeview/codeview.c
function internal (line 11) | internal CV_Arch
function internal (line 45) | internal U64
function internal (line 57) | internal B32
function internal (line 69) | internal U64
function internal (line 81) | internal U64
function internal (line 93) | internal CV_EncodedFramePtrReg
function internal (line 108) | internal CV_Reg
function internal (line 142) | internal U32
function internal (line 172) | internal String8
function internal (line 182) | internal String8
function internal (line 194) | internal String8
function internal (line 205) | internal String8
function internal (line 232) | internal String8
function internal (line 244) | internal String8
function internal (line 259) | internal String8
function internal (line 271) | internal String8
function internal (line 283) | internal String8
function internal (line 305) | internal String8
function internal (line 320) | internal String8
function internal (line 331) | internal String8
function internal (line 346) | internal String8
function internal (line 356) | internal String8
function internal (line 371) | internal String8
function internal (line 404) | internal String8
function internal (line 420) | internal String8
function internal (line 441) | internal String8
function internal (line 454) | internal String8
function internal (line 466) | internal String8
function internal (line 476) | internal String8
function internal (line 487) | internal String8
function internal (line 506) | internal String8
function internal (line 572) | internal String8
function internal (line 591) | internal String8
function internal (line 619) | internal String8
function internal (line 635) | internal String8
function internal (line 657) | internal String8
function internal (line 673) | internal String8
function internal (line 740) | internal String8
function internal (line 821) | internal String8
function internal (line 864) | internal String8
function internal (line 914) | internal String8
function internal (line 924) | internal String8
function internal (line 934) | internal String8
function internal (line 986) | internal String8
function internal (line 1076) | internal String8
function internal (line 1083) | internal String8
function internal (line 1091) | internal String8
function internal (line 1099) | internal String8
function internal (line 1107) | internal String8
FILE: src/codeview/codeview.h
type U32 (line 15) | typedef U32 CV_TypeIndex;
type CV_TypeIndex (line 16) | typedef CV_TypeIndex CV_TypeId;
type CV_TypeIndex (line 17) | typedef CV_TypeIndex CV_ItemId;
type U16 (line 21) | typedef U16 CV_ModIndex;
type U16 (line 23) | typedef U16 CV_SectionIndex;
type U16 (line 24) | typedef U16 CV_Reg;
type U16 (line 290) | typedef U16 CV_Regx86;
type CV_Regx86Enum (line 291) | typedef enum CV_Regx86Enum
type U16 (line 1007) | typedef U16 CV_Regx64;
type CV_Regx64Enum (line 1008) | typedef enum CV_Regx64Enum
type U32 (line 1024) | typedef U32 CV_Signature;
type CV_SignatureEnum (line 1025) | typedef enum CV_SignatureEnum
type U16 (line 1053) | typedef U16 CV_Language;
type CV_LanguageEnum (line 1054) | typedef enum CV_LanguageEnum
type U16 (line 1068) | typedef U16 CV_LeafSize;
type U16 (line 1071) | typedef U16 CV_SymSize;
type CV_RecHeader (line 1073) | typedef struct CV_RecHeader CV_RecHeader;
type CV_RecHeader (line 1074) | struct CV_RecHeader
type U8 (line 1086) | typedef U8 CV_ProcFlags;
type U16 (line 1099) | typedef U16 CV_LocalFlags;
type CV_LocalVarAttr (line 1115) | typedef struct CV_LocalVarAttr CV_LocalVarAttr;
type CV_LocalVarAttr (line 1116) | struct CV_LocalVarAttr
type U32 (line 1125) | typedef U32 CV_CompileFlags;
type CV_SymCompile (line 1133) | typedef struct CV_SymCompile CV_SymCompile;
type CV_SymCompile (line 1134) | struct CV_SymCompile
type CV_SymStartSearch (line 1143) | typedef struct CV_SymStartSearch CV_SymStartSearch;
type CV_SymStartSearch (line 1144) | struct CV_SymStartSearch
type U8 (line 1154) | typedef U8 CV_GenericStyle;
type CV_GenericStyleEnum (line 1155) | typedef enum CV_GenericStyleEnum
type U16 (line 1167) | typedef U16 CV_GenericFlags;
type CV_SymReturn (line 1174) | typedef struct CV_SymReturn CV_SymReturn;
type CV_SymReturn (line 1175) | struct CV_SymReturn
type CV_SymSLink32 (line 1183) | typedef struct CV_SymSLink32 CV_SymSLink32;
type CV_SymSLink32 (line 1184) | struct CV_SymSLink32
type CV_SymOEM (line 1193) | typedef struct CV_SymOEM CV_SymOEM;
type CV_SymOEM (line 1194) | struct CV_SymOEM
type CV_SymVPath32 (line 1203) | typedef struct CV_SymVPath32 CV_SymVPath32;
type CV_SymVPath32 (line 1204) | struct CV_SymVPath32
type U8 (line 1214) | typedef U8 CV_EncodedFramePtrReg;
type CV_EncodedFramePtrRegEnum (line 1215) | typedef enum CV_EncodedFramePtrRegEnum
type U32 (line 1224) | typedef U32 CV_FrameprocFlags;
type CV_SymFrameproc (line 1252) | typedef struct CV_SymFrameproc CV_SymFrameproc;
type CV_SymFrameproc (line 1253) | struct CV_SymFrameproc
type CV_SymAnnotation (line 1266) | typedef struct CV_SymAnnotation CV_SymAnnotation;
type CV_SymAnnotation (line 1267) | struct CV_SymAnnotation
type CV_SymObjName (line 1277) | typedef struct CV_SymObjName CV_SymObjName;
type CV_SymObjName (line 1278) | struct CV_SymObjName
type U8 (line 1286) | typedef U8 CV_ThunkOrdinal;
type CV_ThunkOrdinalEnum (line 1287) | typedef enum CV_ThunkOrdinalEnum
type CV_SymThunk32 (line 1299) | typedef struct CV_SymThunk32 CV_SymThunk32;
type CV_SymThunk32 (line 1300) | struct CV_SymThunk32
type CV_SymBlock32 (line 1315) | typedef struct CV_SymBlock32 CV_SymBlock32;
type CV_SymBlock32 (line 1316) | struct CV_SymBlock32
type CV_SymLabel32 (line 1328) | typedef struct CV_SymLabel32 CV_SymLabel32;
type CV_SymLabel32 (line 1329) | struct CV_SymLabel32
type CV_SymRegister (line 1339) | typedef struct CV_SymRegister CV_SymRegister;
type CV_SymRegister (line 1340) | struct CV_SymRegister
type CV_SymConstant (line 1349) | typedef struct CV_SymConstant CV_SymConstant;
type CV_SymConstant (line 1350) | struct CV_SymConstant
type CV_SymUDT (line 1359) | typedef struct CV_SymUDT CV_SymUDT;
type CV_SymUDT (line 1360) | struct CV_SymUDT
type CV_SymManyreg (line 1368) | typedef struct CV_SymManyreg CV_SymManyreg;
type CV_SymManyreg (line 1369) | struct CV_SymManyreg
type CV_SymBPRel32 (line 1378) | typedef struct CV_SymBPRel32 CV_SymBPRel32;
type CV_SymBPRel32 (line 1379) | struct CV_SymBPRel32
type CV_SymData32 (line 1388) | typedef struct CV_SymData32 CV_SymData32;
type CV_SymData32 (line 1389) | struct CV_SymData32
type U32 (line 1399) | typedef U32 CV_Pub32Flags;
type CV_SymPub32 (line 1408) | typedef struct CV_SymPub32 CV_SymPub32;
type CV_SymPub32 (line 1409) | struct CV_SymPub32
type CV_SymProc32 (line 1419) | typedef struct CV_SymProc32 CV_SymProc32;
type CV_SymProc32 (line 1420) | struct CV_SymProc32
type CV_SymRegrel32 (line 1437) | typedef struct CV_SymRegrel32 CV_SymRegrel32;
type CV_SymRegrel32 (line 1438) | struct CV_SymRegrel32
type CV_SymThread32 (line 1448) | typedef struct CV_SymThread32 CV_SymThread32;
type CV_SymThread32 (line 1449) | struct CV_SymThread32
type U32 (line 1459) | typedef U32 CV_Compile2Flags;
type CV_SymCompile2 (line 1471) | typedef struct CV_SymCompile2 CV_SymCompile2;
type CV_SymCompile2 (line 1472) | struct CV_SymCompile2
type CV_SymManyreg2 (line 1487) | typedef struct CV_SymManyreg2 CV_SymManyreg2;
type CV_SymManyreg2 (line 1488) | struct CV_SymManyreg2
type CV_SymSlot (line 1497) | typedef struct CV_SymSlot CV_SymSlot;
type CV_SymSlot (line 1498) | struct CV_SymSlot
type CV_SymAttrFrameRel (line 1507) | typedef struct CV_SymAttrFrameRel CV_SymAttrFrameRel;
type CV_SymAttrFrameRel (line 1508) | struct CV_SymAttrFrameRel
type CV_SymAttrReg (line 1518) | typedef struct CV_SymAttrReg CV_SymAttrReg;
type CV_SymAttrReg (line 1519) | struct CV_SymAttrReg
type CV_SymAttrManyReg (line 1530) | typedef struct CV_SymAttrManyReg CV_SymAttrManyReg;
type CV_SymAttrManyReg (line 1531) | struct CV_SymAttrManyReg
type CV_SymAttrRegRel (line 1542) | typedef struct CV_SymAttrRegRel CV_SymAttrRegRel;
type CV_SymAttrRegRel (line 1543) | struct CV_SymAttrRegRel
type CV_SymUNamespace (line 1554) | typedef struct CV_SymUNamespace CV_SymUNamespace;
type CV_SymUNamespace (line 1555) | struct CV_SymUNamespace
type CV_SymRef2 (line 1568) | typedef struct CV_SymRef2 CV_SymRef2;
type CV_SymRef2 (line 1569) | struct CV_SymRef2
type U16 (line 1579) | typedef U16 CV_TrampolineKind;
type CV_TrampolineKindEnum (line 1580) | typedef enum CV_TrampolineKindEnum
type CV_SymTrampoline (line 1587) | typedef struct CV_SymTrampoline CV_SymTrampoline;
type CV_SymTrampoline (line 1588) | struct CV_SymTrampoline
type U32 (line 1600) | typedef U32 CV_SepcodeFlags;
type CV_SymSepcode (line 1607) | typedef struct CV_SymSepcode CV_SymSepcode;
type CV_SymSepcode (line 1608) | struct CV_SymSepcode
type CV_SymSection (line 1622) | typedef struct CV_SymSection CV_SymSection;
type CV_SymSection (line 1623) | struct CV_SymSection
type CV_SymCoffGroup (line 1636) | typedef struct CV_SymCoffGroup CV_SymCoffGroup;
type CV_SymCoffGroup (line 1637) | struct CV_SymCoffGroup
type U16 (line 1648) | typedef U16 CV_ExportFlags;
type CV_SymExport (line 1659) | typedef struct CV_SymExport CV_SymExport;
type CV_SymExport (line 1660) | struct CV_SymExport
type CV_SymCallSiteInfo (line 1669) | typedef struct CV_SymCallSiteInfo CV_SymCallSiteInfo;
type CV_SymCallSiteInfo (line 1670) | struct CV_SymCallSiteInfo
type U8 (line 1680) | typedef U8 CV_FrameCookieKind;
type CV_FrameCookieKindEnum (line 1681) | typedef enum CV_FrameCookieKindEnum
type CV_SymFrameCookie (line 1690) | typedef struct CV_SymFrameCookie CV_SymFrameCookie;
type CV_SymFrameCookie (line 1691) | struct CV_SymFrameCookie
type U8 (line 1701) | typedef U8 CV_DiscardedKind;
type CV_DiscardedKindEnum (line 1702) | typedef enum CV_DiscardedKindEnum
type CV_SymDiscarded (line 1710) | typedef struct CV_SymDiscarded CV_SymDiscarded;
type CV_SymDiscarded (line 1711) | struct CV_SymDiscarded
type U32 (line 1720) | typedef U32 CV_Compile3Flags;
type U32 (line 1739) | typedef U32 CV_Compile3Flags;
type CV_SymCompile3 (line 1754) | typedef struct CV_SymCompile3 CV_SymCompile3;
type CV_SymCompile3 (line 1755) | struct CV_SymCompile3
type CV_SymEnvBlock (line 1772) | typedef struct CV_SymEnvBlock CV_SymEnvBlock;
type CV_SymEnvBlock (line 1773) | struct CV_SymEnvBlock
type CV_SymLocal (line 1781) | typedef struct CV_SymLocal CV_SymLocal;
type CV_SymLocal (line 1782) | struct CV_SymLocal
type CV_LvarAddrRange (line 1791) | typedef struct CV_LvarAddrRange CV_LvarAddrRange;
type CV_LvarAddrRange (line 1792) | struct CV_LvarAddrRange
type CV_LvarAddrGap (line 1799) | typedef struct CV_LvarAddrGap CV_LvarAddrGap;
type CV_LvarAddrGap (line 1800) | struct CV_LvarAddrGap
type U16 (line 1806) | typedef U16 CV_RangeAttribs;
type CV_SymDefrange (line 1814) | typedef struct CV_SymDefrange CV_SymDefrange;
type CV_SymDefrange (line 1815) | struct CV_SymDefrange
type CV_SymDefrangeSubfield (line 1824) | typedef struct CV_SymDefrangeSubfield CV_SymDefrangeSubfield;
type CV_SymDefrangeSubfield (line 1825) | struct CV_SymDefrangeSubfield
type CV_SymDefrangeRegister (line 1835) | typedef struct CV_SymDefrangeRegister CV_SymDefrangeRegister;
type CV_SymDefrangeRegister (line 1836) | struct CV_SymDefrangeRegister
type CV_SymDefrangeFramepointerRel (line 1846) | typedef struct CV_SymDefrangeFramepointerRel CV_SymDefrangeFramepointerRel;
type CV_SymDefrangeFramepointerRel (line 1847) | struct CV_SymDefrangeFramepointerRel
type CV_SymDefrangeSubfieldRegister (line 1858) | typedef struct CV_SymDefrangeSubfieldRegister CV_SymDefrangeSubfieldRegi...
type CV_SymDefrangeSubfieldRegister (line 1859) | struct CV_SymDefrangeSubfieldRegister
type CV_SymDefrangeFramepointerRelFullScope (line 1870) | typedef struct CV_SymDefrangeFramepointerRelFullScope CV_SymDefrangeFram...
type CV_SymDefrangeFramepointerRelFullScope (line 1871) | struct CV_SymDefrangeFramepointerRelFullScope
type U16 (line 1878) | typedef U16 CV_DefrangeRegisterRelFlags;
type CV_SymDefrangeRegisterRel (line 1885) | typedef struct CV_SymDefrangeRegisterRel CV_SymDefrangeRegisterRel;
type CV_SymDefrangeRegisterRel (line 1886) | struct CV_SymDefrangeRegisterRel
type CV_SymBuildInfo (line 1897) | typedef struct CV_SymBuildInfo CV_SymBuildInfo;
type CV_SymBuildInfo (line 1898) | struct CV_SymBuildInfo
type U32 (line 1905) | typedef U32 CV_InlineBinaryAnnotation;
type CV_InlineBinaryAnnotationEnum (line 1906) | typedef enum CV_InlineBinaryAnnotationEnum
type U32 (line 1925) | typedef U32 CV_InlineRangeKind;
type CV_InlineRangeKindEnum (line 1926) | typedef enum CV_InlineRangeKindEnum
type CV_SymInlineSite (line 1933) | typedef struct CV_SymInlineSite CV_SymInlineSite;
type CV_SymInlineSite (line 1934) | struct CV_SymInlineSite
type CV_SymInlineSite2 (line 1944) | typedef struct CV_SymInlineSite2 CV_SymInlineSite2;
type CV_SymInlineSite2 (line 1945) | struct CV_SymInlineSite2
type CV_SymFileStatic (line 1958) | typedef struct CV_SymFileStatic CV_SymFileStatic;
type CV_SymFileStatic (line 1959) | struct CV_SymFileStatic
type U16 (line 1969) | typedef U16 CV_ArmSwitchKind;
type CV_ArmSwitchKindEnum (line 1970) | typedef enum CV_ArmSwitchKindEnum
type CV_SymArmSwitchTable (line 1986) | typedef struct CV_SymArmSwitchTable CV_SymArmSwitchTable;
type CV_SymArmSwitchTable (line 1987) | struct CV_SymArmSwitchTable
type CV_SymFunctionList (line 2001) | typedef struct CV_SymFunctionList CV_SymFunctionList;
type CV_SymFunctionList (line 2002) | struct CV_SymFunctionList
type CV_SymPogoInfo (line 2011) | typedef struct CV_SymPogoInfo CV_SymPogoInfo;
type CV_SymPogoInfo (line 2012) | struct CV_SymPogoInfo
type CV_SymHeapAllocSite (line 2022) | typedef struct CV_SymHeapAllocSite CV_SymHeapAllocSite;
type CV_SymHeapAllocSite (line 2023) | struct CV_SymHeapAllocSite
type U32 (line 2033) | typedef U32 CV_ModTypeRefFlags;
type CV_SymModTypeRef (line 2044) | typedef struct CV_SymModTypeRef CV_SymModTypeRef;
type CV_SymModTypeRef (line 2045) | struct CV_SymModTypeRef
type U16 (line 2055) | typedef U16 CV_RefMiniPdbFlags;
type CV_SymRefMiniPdb (line 2065) | typedef struct CV_SymRefMiniPdb CV_SymRefMiniPdb;
type CV_SymRefMiniPdb (line 2066) | struct CV_SymRefMiniPdb
type U16 (line 2076) | typedef U16 CV_FastLinkFlags;
type CV_SymFastLink (line 2088) | typedef struct CV_SymFastLink CV_SymFastLink;
type CV_SymFastLink (line 2089) | struct CV_SymFastLink
type CV_SymInlinees (line 2098) | typedef struct CV_SymInlinees CV_SymInlinees;
type CV_SymInlinees (line 2099) | struct CV_SymInlinees
type U8 (line 2122) | typedef U8 CV_BasicPointerKind;
type CV_BasicPointerKindEnum (line 2123) | typedef enum
type U8 (line 2133) | typedef U8 CV_HFAKind;
type CV_HFAKindEnum (line 2134) | typedef enum CV_HFAKindEnum
type U8 (line 2142) | typedef U8 CV_MoComUDTKind;
type CV_MoComUDTKindEnum (line 2143) | typedef enum CV_MoComUDTKindEnum
type U16 (line 2151) | typedef U16 CV_TypeProps;
type U32 (line 2152) | typedef U32 CV_TypeProps32;
type U8 (line 2173) | typedef U8 CV_PointerKind;
type CV_PointerKindEnum (line 2174) | typedef enum CV_PointerKindEnum
type U8 (line 2191) | typedef U8 CV_PointerMode;
type CV_PointerModeEnum (line 2192) | typedef enum CV_PointerModeEnum
type U16 (line 2202) | typedef U16 CV_MemberPointerKind;
type CV_MemberPointerKindEnum (line 2203) | typedef enum CV_MemberPointerKindEnum
type U32 (line 2217) | typedef U32 CV_VirtualTableShape;
type CV_VirtualTableShapeEnum (line 2218) | typedef enum CV_VirtualTableShapeEnum
type U8 (line 2230) | typedef U8 CV_MethodProp;
type U8 (line 2242) | typedef U8 CV_MemberAccess;
type CV_MemberAccessEnum (line 2243) | typedef enum CV_MemberAccessEnum
type U16 (line 2252) | typedef U16 CV_FieldAttribs;
type U16 (line 2266) | typedef U16 CV_LabelKind;
type CV_LabelKindEnum (line 2267) | typedef enum CV_LabelKindEnum
type U8 (line 2274) | typedef U8 CV_FunctionAttribs;
type U8 (line 2282) | typedef U8 CV_CallKind;
type CV_CallKindEnum (line 2283) | typedef enum CV_CallKindEnum
type CV_LeafPreComp (line 2315) | typedef struct CV_LeafPreComp CV_LeafPreComp;
type CV_LeafPreComp (line 2316) | struct CV_LeafPreComp
type CV_LeafEndPreComp (line 2326) | typedef struct CV_LeafEndPreComp CV_LeafEndPreComp;
type CV_LeafEndPreComp (line 2327) | struct CV_LeafEndPreComp
type CV_LeafTypeServer (line 2334) | typedef struct CV_LeafTypeServer CV_LeafTypeServer;
type CV_LeafTypeServer (line 2335) | struct CV_LeafTypeServer
type CV_LeafTypeServer2 (line 2344) | typedef struct CV_LeafTypeServer2 CV_LeafTypeServer2;
type CV_LeafTypeServer2 (line 2345) | struct CV_LeafTypeServer2
type CV_LeafSkip (line 2354) | typedef struct CV_LeafSkip CV_LeafSkip;
type CV_LeafSkip (line 2355) | struct CV_LeafSkip
type CV_LeafVTShape (line 2362) | typedef struct CV_LeafVTShape CV_LeafVTShape;
type CV_LeafVTShape (line 2363) | struct CV_LeafVTShape
type CV_LeafLabel (line 2371) | typedef struct CV_LeafLabel CV_LeafLabel;
type CV_LeafLabel (line 2372) | struct CV_LeafLabel
type U16 (line 2379) | typedef U16 CV_ModifierFlags;
type CV_LeafModifier (line 2387) | typedef struct CV_LeafModifier CV_LeafModifier;
type CV_LeafModifier (line 2388) | struct CV_LeafModifier
type U32 (line 2396) | typedef U32 CV_PointerAttribs;
type CV_LeafPointer (line 2416) | typedef struct CV_LeafPointer CV_LeafPointer;
type CV_LeafPointer (line 2417) | struct CV_LeafPointer
type CV_LeafProcedure (line 2425) | typedef struct CV_LeafProcedure CV_LeafProcedure;
type CV_LeafProcedure (line 2426) | struct CV_LeafProcedure
type CV_LeafMFunction (line 2437) | typedef struct CV_LeafMFunction CV_LeafMFunction;
type CV_LeafMFunction (line 2438) | struct CV_LeafMFunction
type CV_LeafArgList (line 2452) | typedef struct CV_LeafArgList CV_LeafArgList;
type CV_LeafArgList (line 2453) | struct CV_LeafArgList
type CV_LeafBitField (line 2461) | typedef struct CV_LeafBitField CV_LeafBitField;
type CV_LeafBitField (line 2462) | struct CV_LeafBitField
type CV_LeafMethodListMember (line 2472) | typedef struct CV_LeafMethodListMember CV_LeafMethodListMember;
type CV_LeafMethodListMember (line 2473) | struct CV_LeafMethodListMember
type CV_LeafIndex (line 2483) | typedef struct CV_LeafIndex CV_LeafIndex;
type CV_LeafIndex (line 2484) | struct CV_LeafIndex
type CV_LeafArray (line 2492) | typedef struct CV_LeafArray CV_LeafArray;
type CV_LeafArray (line 2493) | struct CV_LeafArray
type CV_LeafStruct (line 2502) | typedef struct CV_LeafStruct CV_LeafStruct;
type CV_LeafStruct (line 2503) | struct CV_LeafStruct
type CV_LeafUnion (line 2517) | typedef struct CV_LeafUnion CV_LeafUnion;
type CV_LeafUnion (line 2518) | struct CV_LeafUnion
type CV_LeafEnum (line 2530) | typedef struct CV_LeafEnum CV_LeafEnum;
type CV_LeafEnum (line 2531) | struct CV_LeafEnum
type CV_LeafAlias (line 2543) | typedef struct CV_LeafAlias CV_LeafAlias;
type CV_LeafAlias (line 2544) | struct CV_LeafAlias
type CV_LeafMember (line 2552) | typedef struct CV_LeafMember CV_LeafMember;
type CV_LeafMember (line 2553) | struct CV_LeafMember
type CV_LeafStMember (line 2563) | typedef struct CV_LeafStMember CV_LeafStMember;
type CV_LeafStMember (line 2564) | struct CV_LeafStMember
type CV_LeafMethod (line 2573) | typedef struct CV_LeafMethod CV_LeafMethod;
type CV_LeafMethod (line 2574) | struct CV_LeafMethod
type CV_LeafOneMethod (line 2583) | typedef struct CV_LeafOneMethod CV_LeafOneMethod;
type CV_LeafOneMethod (line 2584) | struct CV_LeafOneMethod
type CV_LeafEnumerate (line 2594) | typedef struct CV_LeafEnumerate CV_LeafEnumerate;
type CV_LeafEnumerate (line 2595) | struct CV_LeafEnumerate
type CV_LeafNestType (line 2604) | typedef struct CV_LeafNestType CV_LeafNestType;
type CV_LeafNestType (line 2605) | struct CV_LeafNestType
type CV_LeafNestTypeEx (line 2614) | typedef struct CV_LeafNestTypeEx CV_LeafNestTypeEx;
type CV_LeafNestTypeEx (line 2615) | struct CV_LeafNestTypeEx
type CV_LeafBClass (line 2624) | typedef struct CV_LeafBClass CV_LeafBClass;
type CV_LeafBClass (line 2625) | struct CV_LeafBClass
type CV_LeafVBClass (line 2634) | typedef struct CV_LeafVBClass CV_LeafVBClass;
type CV_LeafVBClass (line 2635) | struct CV_LeafVBClass
type CV_LeafVFuncTab (line 2646) | typedef struct CV_LeafVFuncTab CV_LeafVFuncTab;
type CV_LeafVFuncTab (line 2647) | struct CV_LeafVFuncTab
type CV_LeafVFuncOff (line 2655) | typedef struct CV_LeafVFuncOff CV_LeafVFuncOff;
type CV_LeafVFuncOff (line 2656) | struct CV_LeafVFuncOff
type CV_LeafVFTable (line 2665) | typedef struct CV_LeafVFTable CV_LeafVFTable;
type CV_LeafVFTable (line 2666) | struct CV_LeafVFTable
type CV_LeafVFPath (line 2677) | typedef struct CV_LeafVFPath CV_LeafVFPath;
type CV_LeafVFPath (line 2678) | struct CV_LeafVFPath
type CV_LeafStruct2 (line 2686) | typedef struct CV_LeafStruct2 CV_LeafStruct2;
type CV_LeafStruct2 (line 2687) | struct CV_LeafStruct2
type CV_LeafFuncId (line 2702) | typedef struct CV_LeafFuncId CV_LeafFuncId;
type CV_LeafFuncId (line 2703) | struct CV_LeafFuncId
type CV_LeafMFuncId (line 2712) | typedef struct CV_LeafMFuncId CV_LeafMFuncId;
type CV_LeafMFuncId (line 2713) | struct CV_LeafMFuncId
type CV_LeafStringId (line 2722) | typedef struct CV_LeafStringId CV_LeafStringId;
type CV_LeafStringId (line 2723) | struct CV_LeafStringId
type CV_BuildInfoIndexEnum (line 2731) | typedef enum CV_BuildInfoIndexEnum
type CV_LeafBuildInfo (line 2741) | typedef struct CV_LeafBuildInfo CV_LeafBuildInfo;
type CV_LeafBuildInfo (line 2742) | struct CV_LeafBuildInfo
type CV_LeafSubstrList (line 2750) | typedef struct CV_LeafSubstrList CV_LeafSubstrList;
type CV_LeafSubstrList (line 2751) | struct CV_LeafSubstrList
type CV_LeafUDTSrcLine (line 2759) | typedef struct CV_LeafUDTSrcLine CV_LeafUDTSrcLine;
type CV_LeafUDTSrcLine (line 2760) | struct CV_LeafUDTSrcLine
type CV_LeafUDTModSrcLine (line 2769) | typedef struct CV_LeafUDTModSrcLine CV_LeafUDTModSrcLine;
type CV_LeafUDTModSrcLine (line 2770) | struct CV_LeafUDTModSrcLine
type U32 (line 2800) | typedef U32 CV_C13SubSectionKind;
type CV_C13SubSectionKindEnum (line 2801) | typedef enum CV_C13SubSectionKindEnum
type CV_C13SubSectionHeader (line 2809) | typedef struct CV_C13SubSectionHeader CV_C13SubSectionHeader;
type CV_C13SubSectionHeader (line 2810) | struct CV_C13SubSectionHeader
type U8 (line 2818) | typedef U8 CV_C13ChecksumKind;
type CV_C13ChecksumKindEnum (line 2819) | typedef enum CV_C13ChecksumKindEnum
type CV_C13Checksum (line 2828) | typedef struct CV_C13Checksum CV_C13Checksum;
type CV_C13Checksum (line 2829) | struct CV_C13Checksum
type U16 (line 2838) | typedef U16 CV_C13SubSecLinesFlags;
type CV_C13SubSecLinesHeader (line 2844) | typedef struct CV_C13SubSecLinesHeader CV_C13SubSecLinesHeader;
type CV_C13SubSecLinesHeader (line 2845) | struct CV_C13SubSecLinesHeader
type CV_C13File (line 2853) | typedef struct CV_C13File CV_C13File;
type CV_C13File (line 2854) | struct CV_C13File
type U32 (line 2863) | typedef U32 CV_C13LineFlags;
type CV_C13Line (line 2868) | typedef struct CV_C13Line CV_C13Line;
type CV_C13Line (line 2869) | struct CV_C13Line
type CV_C13Column (line 2875) | typedef struct CV_C13Column CV_C13Column;
type CV_C13Column (line 2876) | struct CV_C13Column
type U32 (line 2884) | typedef U32 CV_C13FrameDataFlags;
type CV_C13FrameData (line 2892) | typedef struct CV_C13FrameData CV_C13FrameData;
type CV_C13FrameData (line 2893) | struct CV_C13FrameData
type U32 (line 2908) | typedef U32 CV_C13InlineeLinesSig;
type CV_C13InlineeSourceLineHeader (line 2915) | typedef struct CV_C13InlineeSourceLineHeader CV_C13InlineeSourceLineHeader;
type CV_C13InlineeSourceLineHeader (line 2916) | struct CV_C13InlineeSourceLineHeader
type CV_TypeIndexSource (line 2931) | enum CV_TypeIndexSource
type CV_TypeIndexSource (line 2938) | typedef enum CV_TypeIndexSource CV_TypeIndexSource;
type CV_TypeIndexInfo (line 2940) | typedef struct CV_TypeIndexInfo CV_TypeIndexInfo;
type CV_TypeIndexInfo (line 2941) | struct CV_TypeIndexInfo
type CV_TypeIndexInfoList (line 2948) | typedef struct CV_TypeIndexInfoList CV_TypeIndexInfoList;
type CV_TypeIndexInfoList (line 2949) | struct CV_TypeIndexInfoList
type CV_TypeIndexArray (line 2956) | typedef struct CV_TypeIndexArray CV_TypeIndexArray;
type CV_TypeIndexArray (line 2957) | struct CV_TypeIndexArray
FILE: src/codeview/codeview_dump.c
function internal (line 4) | internal String8
FILE: src/codeview/codeview_parse.c
function internal (line 6) | internal U64
function internal (line 17) | internal U64
function internal (line 26) | internal CV_NumericParsed
function internal (line 79) | internal U64
function internal (line 86) | internal B32
function internal (line 102) | internal B32
function internal (line 119) | internal B32
function internal (line 134) | internal U64
function internal (line 151) | internal S64
function internal (line 165) | internal F64
function internal (line 179) | internal U64
function internal (line 232) | internal U64
function internal (line 249) | internal S32
function internal (line 264) | internal CV_C13InlineSiteDecoder
function internal (line 276) | internal CV_C13InlineSiteDecoderStep
function internal (line 461) | internal B32
function internal (line 472) | internal B32
function internal (line 488) | internal B32
function internal (line 502) | internal B32
function internal (line 511) | internal B32
function internal (line 527) | internal B32
function internal (line 536) | internal B32
function internal (line 545) | internal B32
function internal (line 554) | internal CV_TypeIndexSource
function internal (line 579) | internal CV_TypeIndexInfo *
function internal (line 593) | internal CV_TypeIndexInfoList
function internal (line 660) | internal CV_TypeIndexInfoList
function internal (line 958) | internal CV_TypeIndexInfoList
function internal (line 993) | internal String8Array
function internal (line 1024) | internal U64
function internal (line 1089) | internal String8
function internal (line 1099) | internal CV_UDTInfo
function internal (line 1205) | internal String8
function internal (line 1216) | internal CV_RecRangeStream*
function internal (line 1250) | internal CV_RecRangeArray
function internal (line 1271) | internal CV_SymParsed *
function internal (line 1345) | internal CV_LeafParsed *
function internal (line 1366) | internal CV_C13Parsed *
FILE: src/codeview/codeview_parse.h
type CV_NumericParsed (line 16) | typedef struct CV_NumericParsed CV_NumericParsed;
type CV_NumericParsed (line 17) | struct CV_NumericParsed
type CV_RecRange (line 24) | typedef struct CV_RecRange CV_RecRange;
type CV_RecRange (line 25) | struct CV_RecRange
type CV_RecRangeChunk (line 33) | typedef struct CV_RecRangeChunk CV_RecRangeChunk;
type CV_RecRangeChunk (line 34) | struct CV_RecRangeChunk
type CV_RecRangeStream (line 40) | typedef struct CV_RecRangeStream CV_RecRangeStream;
type CV_RecRangeStream (line 41) | struct CV_RecRangeStream
type CV_RecRangeArray (line 48) | typedef struct CV_RecRangeArray CV_RecRangeArray;
type CV_RecRangeArray (line 49) | struct CV_RecRangeArray
type CV_SymTopLevelInfo (line 58) | typedef struct CV_SymTopLevelInfo CV_SymTopLevelInfo;
type CV_SymTopLevelInfo (line 59) | struct CV_SymTopLevelInfo
type CV_SymParsed (line 66) | typedef struct CV_SymParsed CV_SymParsed;
type CV_SymParsed (line 67) | struct CV_SymParsed
type CV_LeafParsed (line 83) | typedef struct CV_LeafParsed CV_LeafParsed;
type CV_LeafParsed (line 84) | struct CV_LeafParsed
type CV_C13InlineSiteDecoder (line 98) | typedef struct CV_C13InlineSiteDecoder CV_C13InlineSiteDecoder;
type CV_C13InlineSiteDecoder (line 99) | struct CV_C13InlineSiteDecoder
type U32 (line 122) | typedef U32 CV_C13InlineSiteDecoderStepFlags;
type CV_C13InlineSiteDecoderStep (line 131) | typedef struct CV_C13InlineSiteDecoderStep CV_C13InlineSiteDecoderStep;
type CV_C13InlineSiteDecoderStep (line 132) | struct CV_C13InlineSiteDecoderStep
type CV_C13LinesParsed (line 143) | typedef struct CV_C13LinesParsed CV_C13LinesParsed;
type CV_C13LinesParsed (line 144) | struct CV_C13LinesParsed
type CV_C13LinesParsedNode (line 161) | typedef struct CV_C13LinesParsedNode CV_C13LinesParsedNode;
type CV_C13LinesParsedNode (line 162) | struct CV_C13LinesParsedNode
type CV_C13InlineeLinesParsed (line 168) | typedef struct CV_C13InlineeLinesParsed CV_C13InlineeLinesParsed;
type CV_C13InlineeLinesParsed (line 169) | struct CV_C13InlineeLinesParsed
type CV_C13InlineeLinesParsedNode (line 181) | typedef struct CV_C13InlineeLinesParsedNode CV_C13InlineeLinesParsedNode;
type CV_C13InlineeLinesParsedNode (line 182) | struct CV_C13InlineeLinesParsedNode
type CV_C13SubSectionNode (line 189) | typedef struct CV_C13SubSectionNode CV_C13SubSectionNode;
type CV_C13SubSectionNode (line 190) | struct CV_C13SubSectionNode
type CV_C13Parsed (line 202) | typedef struct CV_C13Parsed CV_C13Parsed;
type CV_C13Parsed (line 203) | struct CV_C13Parsed
type CV_UDTInfo (line 221) | typedef struct CV_UDTInfo CV_UDTInfo;
type CV_UDTInfo (line 222) | struct CV_UDTInfo
type CV_TypeIdArray (line 232) | typedef struct CV_TypeIdArray CV_TypeIdArray;
type CV_TypeIdArray (line 233) | struct CV_TypeIdArray
FILE: src/codeview/generated/codeview.meta.c
function internal (line 6) | internal String8
function internal (line 40) | internal String8
function internal (line 111) | internal String8
function internal (line 315) | internal String8
function internal (line 379) | internal String8
function internal (line 443) | internal String8
function internal (line 588) | internal U64
function internal (line 667) | internal U64
FILE: src/codeview/generated/codeview.meta.h
type U16 (line 9) | typedef U16 CV_NumericKind;
type CV_NumericKindEnum (line 10) | typedef enum CV_NumericKindEnum
type U16 (line 37) | typedef U16 CV_Arch;
type CV_ArchEnum (line 38) | typedef enum CV_ArchEnum
type U16 (line 107) | typedef U16 CV_AllReg;
type CV_AllRegEnum (line 108) | typedef enum CV_AllRegEnum
type U16 (line 125) | typedef U16 CV_SymKind;
type CV_SymKindEnum (line 126) | typedef enum CV_SymKindEnum
type U8 (line 323) | typedef U8 CV_BasicType;
type CV_BasicTypeEnum (line 324) | typedef enum CV_BasicTypeEnum
type U16 (line 381) | typedef U16 CV_LeafKind;
type CV_LeafKindEnum (line 382) | typedef enum CV_LeafKindEnum
FILE: src/coff/coff.c
function internal (line 4) | internal U64
function internal (line 29) | internal COFF_SectionFlags
function internal (line 54) | internal String8
function internal (line 66) | internal void
function internal (line 88) | internal String8
function internal (line 106) | internal U64
function internal (line 121) | internal U64
function internal (line 149) | internal U64
function internal (line 179) | internal U64
function internal (line 190) | internal COFF_RelocValue
function internal (line 264) | internal String8
function internal (line 289) | internal String8
function internal (line 301) | internal U32
function internal (line 308) | internal U64
function internal (line 315) | internal String8
function internal (line 336) | internal String8
function internal (line 381) | internal U8
function internal (line 396) | internal U16
function internal (line 410) | internal U64
function internal (line 421) | internal U64
function internal (line 432) | internal U64
function internal (line 444) | internal Arch
function internal (line 458) | internal U64
function internal (line 480) | internal String8
function internal (line 536) | internal String8
function internal (line 552) | internal String8
function internal (line 563) | internal String8
function internal (line 612) | internal String8
function internal (line 693) | internal String8
function internal (line 722) | internal String8
function internal (line 733) | internal String8
function internal (line 745) | internal String8
function internal (line 769) | internal String8
function internal (line 804) | internal String8
function internal (line 815) | internal String8
function internal (line 843) | internal String8
function internal (line 868) | internal String8
function internal (line 896) | internal String8
function internal (line 921) | internal String8
function internal (line 933) | internal COFF_MachineType
function internal (line 944) | internal COFF_ImportType
FILE: src/coff/coff.h
type U32 (line 25) | typedef U32 COFF_TimeStamp;
type U16 (line 27) | typedef U16 COFF_FileHeaderFlags;
type U16 (line 48) | typedef U16 COFF_MachineType;
type COFF_FileHeader (line 78) | typedef struct COFF_FileHeader
type COFF_BigObjHeader (line 89) | typedef struct COFF_BigObjHeader
type U32 (line 103) | typedef U32 COFF_SectionAlign;
type U32 (line 123) | typedef U32 COFF_SectionFlags;
type COFF_SectionHeader (line 166) | typedef struct COFF_SectionHeader
type U8 (line 182) | typedef U8 COFF_SymType;
type U8 (line 203) | typedef U8 COFF_SymStorageClass;
type U8 (line 235) | typedef U8 COFF_SymDType;
type COFF_SymbolName (line 251) | typedef union COFF_SymbolName
type COFF_SymbolType (line 265) | typedef union COFF_SymbolType
type COFF_Symbol16 (line 274) | typedef struct COFF_Symbol16
type COFF_Symbol32 (line 284) | typedef struct COFF_Symbol32
type U32 (line 294) | typedef U32 COFF_WeakExtType;
type COFF_SymbolFuncDef (line 305) | typedef struct COFF_SymbolFuncDef
type COFF_SymbolFunc (line 315) | typedef struct COFF_SymbolFunc
type COFF_SymbolWeakExt (line 325) | typedef struct COFF_SymbolWeakExt
type COFF_SymbolFile (line 332) | typedef struct COFF_SymbolFile
type U8 (line 337) | typedef U8 COFF_ComdatSelectType;
type COFF_SymbolSecDef (line 351) | typedef struct COFF_SymbolSecDef
type U16 (line 365) | typedef U16 COFF_RelocType;
type COFF_RelocType (line 367) | typedef COFF_RelocType COFF_Reloc_X64;
type COFF_RelocType (line 391) | typedef COFF_RelocType COFF_Reloc_X86;
type COFF_RelocType (line 416) | typedef COFF_RelocType COFF_Reloc_Arm;
type COFF_RelocType (line 441) | typedef COFF_RelocType COFF_Reloc_Arm64;
type COFF_Reloc (line 463) | typedef struct COFF_Reloc
type COFF_ResourceHeaderPrefix (line 474) | typedef struct COFF_ResourceHeaderPrefix
type U16 (line 480) | typedef U16 COFF_ResourceMemoryFlags;
type COFF_ResourceDataEntry (line 489) | typedef struct COFF_ResourceDataEntry
type COFF_ResourceDirTable (line 497) | typedef struct COFF_ResourceDirTable
type COFF_ResourceDirEntry (line 508) | typedef struct COFF_ResourceDirEntry
type COFF_ArchiveMemberHeader (line 525) | typedef struct COFF_ArchiveMemberHeader
type U16 (line 537) | typedef U16 COFF_ImportType;
type U32 (line 545) | typedef U32 COFF_ImportByType;
type U16 (line 554) | typedef U16 COFF_ImportHeaderFlags;
type COFF_ImportHeader (line 565) | typedef struct COFF_ImportHeader
type COFF_RelocValue (line 581) | typedef struct COFF_RelocValue
FILE: src/coff/coff_dump.c
function internal (line 5) | internal void
function internal (line 21) | internal void
function internal (line 215) | internal void
function internal (line 246) | internal void
function internal (line 274) | internal void
function internal (line 352) | internal void
function internal (line 452) | internal void
function internal (line 472) | internal void
function internal (line 495) | internal void
function internal (line 519) | internal void
function internal (line 577) | internal void
function internal (line 659) | internal void
FILE: src/coff/coff_lib_writer.c
function internal (line 4) | internal COFF_LibWriterSymbolNode *
function internal (line 15) | internal COFF_LibWriterMemberNode *
function internal (line 26) | internal COFF_LibWriterSymbol *
function internal (line 39) | internal COFF_LibWriterMember *
function internal (line 51) | internal int
function internal (line 59) | internal int
function internal (line 65) | internal int
function internal (line 72) | internal void
function internal (line 79) | internal void
function internal (line 86) | internal COFF_LibWriter *
function internal (line 95) | internal void
function internal (line 102) | internal U64
function internal (line 130) | internal void
function internal (line 164) | internal String8
FILE: src/coff/coff_lib_writer.h
type COFF_LibWriterMember (line 7) | typedef struct COFF_LibWriterMember
type COFF_LibWriterMemberNode (line 13) | typedef struct COFF_LibWriterMemberNode
type COFF_LibWriterMemberList (line 19) | typedef struct COFF_LibWriterMemberList
type COFF_LibWriterSymbol (line 26) | typedef struct COFF_LibWriterSymbol
type COFF_LibWriterSymbolNode (line 32) | typedef struct COFF_LibWriterSymbolNode
type COFF_LibWriterSymbolList (line 38) | typedef struct COFF_LibWriterSymbolList
type COFF_LibWriter (line 45) | typedef struct COFF_LibWriter
FILE: src/coff/coff_obj_writer.c
function internal (line 1) | internal COFF_ObjWriter*
function internal (line 12) | internal void
function internal (line 19) | internal String8
function internal (line 251) | internal COFF_ObjSection *
function internal (line 269) | internal COFF_ObjSymbol *
function internal (line 286) | internal COFF_ObjSymbol *
function internal (line 296) | internal COFF_ObjSymbol *
function internal (line 305) | internal COFF_ObjSymbol *
function internal (line 318) | internal COFF_ObjSymbol *
function internal (line 328) | internal COFF_ObjSymbol *
function internal (line 339) | internal COFF_ObjSymbol *
function internal (line 355) | internal COFF_ObjSymbol *
function internal (line 364) | internal COFF_ObjSymbol *
function internal (line 374) | internal COFF_ObjSymbol *
function internal (line 385) | internal COFF_ObjSymbol *
function internal (line 395) | internal COFF_ObjSymbol *
function internal (line 410) | internal COFF_ObjSymbol *
function internal (line 420) | internal void
function internal (line 428) | internal COFF_ObjReloc*
function internal (line 443) | internal COFF_ObjReloc *
function internal (line 455) | internal COFF_ObjReloc *
function internal (line 467) | internal COFF_ObjReloc *
function internal (line 479) | internal void
function internal (line 491) | internal int
FILE: src/coff/coff_obj_writer.h
type COFF_SymbolLocationType (line 4) | typedef enum
type COFF_SymbolLocation (line 13) | typedef struct COFF_SymbolLocation
type COFF_ObjSymbolWeak (line 21) | typedef struct COFF_ObjSymbolWeak
type COFF_ObjSymbolSecDef (line 27) | typedef struct COFF_ObjSymbolSecDef
type COFF_ObjSymbol (line 33) | typedef struct COFF_ObjSymbol
type COFF_ObjSymbolNode (line 44) | typedef struct COFF_ObjSymbolNode
type COFF_ObjReloc (line 50) | typedef struct COFF_ObjReloc
type COFF_ObjRelocNode (line 57) | typedef struct COFF_ObjRelocNode
type COFF_ObjSection (line 63) | typedef struct COFF_ObjSection
type COFF_ObjSectionNode (line 76) | typedef struct COFF_ObjSectionNode
type COFF_ObjWriter (line 82) | typedef struct COFF_ObjWriter
FILE: src/coff/coff_parse.c
function internal (line 4) | internal B32
function internal (line 18) | internal B32
function internal (line 94) | internal COFF_FileHeaderInfo
function internal (line 124) | internal COFF_SectionHeader **
function internal (line 136) | internal COFF_ParsedSymbol
function internal (line 150) | internal COFF_ParsedSymbol
function internal (line 170) | internal COFF_ParsedSymbol
function internal (line 182) | internal COFF_Symbol32Array
function internal (line 227) | internal COFF_Symbol32Array
function internal (line 236) | internal COFF_Symbol32Array
function internal (line 247) | internal COFF_Symbol16Node *
function internal (line 258) | internal COFF_SymbolValueInterpType
function internal (line 282) | internal COFF_SymbolValueInterpType
function internal (line 288) | internal B32
function internal (line 295) | internal void
function internal (line 316) | internal COFF_SymbolWeakExt *
function internal (line 332) | internal COFF_RelocNode *
function internal (line 342) | internal COFF_RelocInfo
function internal (line 360) | internal String8
function internal (line 373) | internal String8
function internal (line 383) | internal String8
function internal (line 392) | internal COFF_ResourceID
function internal (line 410) | internal U64
function internal (line 432) | internal U64
function internal (line 470) | internal COFF_ParsedResourceList
function internal (line 485) | internal String8
function internal (line 502) | internal String8
function internal (line 552) | internal int
function internal (line 571) | internal B32
function internal (line 583) | internal COFF_DataType
function internal (line 597) | internal B32
function internal (line 608) | internal B32
function internal (line 619) | internal COFF_ArchiveType
function internal (line 630) | internal U64
function internal (line 659) | internal COFF_ArchiveFirstMember
function internal (line 690) | internal COFF_ArchiveSecondMember
function internal (line 733) | internal String8
function internal (line 754) | internal String8
function internal (line 765) | internal U64
function internal (line 791) | internal COFF_ArchiveMember
function internal (line 799) | internal COFF_ArchiveMember
function internal (line 805) | internal COFF_ParsedArchiveImportHeader
function internal (line 813) | internal U64
function internal (line 823) | internal B32
function internal (line 844) | internal U64
function internal (line 854) | internal B32
function internal (line 880) | internal void
function internal (line 887) | internal COFF_ArchiveParse
function internal (line 947) | internal COFF_ArchiveParse
function internal (line 963) | internal COFF_ArchiveParse
function internal (line 979) | internal COFF_ArchiveParse
FILE: src/coff/coff_parse.h
type COFF_FileHeaderInfo (line 7) | typedef struct COFF_FileHeaderInfo
type COFF_SectionHeaderArray (line 23) | typedef struct COFF_SectionHeaderArray
type COFF_Symbol16Node (line 31) | typedef struct COFF_Symbol16Node
type COFF_Symbol16List (line 37) | typedef struct COFF_Symbol16List
type COFF_Symbol32Array (line 44) | typedef struct COFF_Symbol32Array
type COFF_ParsedSymbol (line 50) | typedef struct COFF_ParsedSymbol
type U32 (line 61) | typedef U32 COFF_SymbolValueInterpType;
type COFF_RelocNode (line 74) | typedef struct COFF_RelocNode
type COFF_RelocList (line 80) | typedef struct COFF_RelocList
type COFF_RelocArray (line 87) | typedef struct COFF_RelocArray
type COFF_RelocInfo (line 93) | typedef struct COFF_RelocInfo
type U32 (line 101) | typedef U32 COFF_ResourceIDType;
type COFF_ResourceIDTypeEnum (line 102) | enum COFF_ResourceIDTypeEnum
type COFF_ResourceID16 (line 110) | typedef struct COFF_ResourceID16
type COFF_ResourceID (line 119) | typedef struct COFF_ResourceID
type COFF_ParsedResource (line 128) | typedef struct COFF_ParsedResource
type COFF_ParsedResourceNode (line 140) | typedef struct COFF_ParsedResourceNode
type COFF_ParsedResourceList (line 146) | typedef struct COFF_ParsedResourceList
type COFF_DataType (line 155) | typedef enum
type COFF_ArchiveType (line 163) | typedef enum
type COFF_ParsedArchiveMemberHeader (line 170) | typedef struct COFF_ParsedArchiveMemberHeader
type COFF_ParsedArchiveImportHeader (line 181) | typedef struct COFF_ParsedArchiveImportHeader
type COFF_ArchiveMember (line 195) | typedef struct COFF_ArchiveMember
type COFF_ArchiveFirstMember (line 202) | typedef struct COFF_ArchiveFirstMember
type COFF_ArchiveSecondMember (line 210) | typedef struct COFF_ArchiveSecondMember
type COFF_ArchiveMemberNode (line 221) | typedef struct COFF_ArchiveMemberNode
type COFF_ArchiveMemberList (line 227) | typedef struct COFF_ArchiveMemberList
type COFF_ArchiveParse (line 234) | typedef struct COFF_ArchiveParse
FILE: src/config/config_bindings.c
function internal (line 4) | internal CFG_KeyMap *
function internal (line 71) | internal CFG_KeyMapNodePtrList
function internal (line 92) | internal CFG_KeyMapNodePtrList
FILE: src/config/config_bindings.h
type CFG_Binding (line 7) | typedef struct CFG_Binding CFG_Binding;
type CFG_Binding (line 8) | struct CFG_Binding
type CFG_KeyMapNode (line 14) | typedef struct CFG_KeyMapNode CFG_KeyMapNode;
type CFG_KeyMapNode (line 15) | struct CFG_KeyMapNode
type CFG_KeyMapNodePtr (line 24) | typedef struct CFG_KeyMapNodePtr CFG_KeyMapNodePtr;
type CFG_KeyMapNodePtr (line 25) | struct CFG_KeyMapNodePtr
type CFG_KeyMapNodePtrList (line 31) | typedef struct CFG_KeyMapNodePtrList CFG_KeyMapNodePtrList;
type CFG_KeyMapNodePtrList (line 32) | struct CFG_KeyMapNodePtrList
type CFG_KeyMapSlot (line 39) | typedef struct CFG_KeyMapSlot CFG_KeyMapSlot;
type CFG_KeyMapSlot (line 40) | struct CFG_KeyMapSlot
type CFG_KeyMap (line 46) | typedef struct CFG_KeyMap CFG_KeyMap;
type CFG_KeyMap (line 47) | struct CFG_KeyMap
FILE: src/config/config_core.c
function internal (line 7) | internal void
function internal (line 16) | internal CFG_IDList
function internal (line 30) | internal void
function internal (line 39) | internal void
function internal (line 48) | internal CFG_NodePtrArray
function internal (line 68) | internal void
function internal (line 91) | internal MD_Node *
function internal (line 111) | internal MD_NodePtrList
function internal (line 145) | internal void
function internal (line 153) | internal U64
function internal (line 164) | internal CFG_Node *
function internal (line 175) | internal CFG_Node *
function internal (line 203) | internal CFG_Node *
function internal (line 221) | internal CFG_Node *
function internal (line 232) | internal CFG_NodePtrList
function internal (line 246) | internal CFG_NodePtrList
function internal (line 263) | internal CFG_NodeRec
function internal (line 285) | internal String8
function internal (line 459) | internal CFG_State *
function internal (line 471) | internal void
function internal (line 479) | internal CFG_Ctx *
function internal (line 488) | internal U64
function internal (line 506) | internal String8
function internal (line 572) | internal void
function internal (line 587) | internal CFG_Node *
function internal (line 631) | internal void
function internal (line 673) | internal void
function internal (line 683) | internal CFG_Node *
function internal (line 692) | internal CFG_Node *
function internal (line 705) | internal CFG_Node *
function internal (line 725) | internal CFG_Node *
function internal (line 738) | internal CFG_Node *
function internal (line 764) | internal void
function internal (line 772) | internal void
function internal (line 784) | internal void
function internal (line 798) | internal void
function internal (line 808) | internal CFG_Node *
function internal (line 821) | internal CFG_NodePtrList
FILE: src/config/config_core.h
type U64 (line 10) | typedef U64 CFG_ID;
type CFG_IDNode (line 12) | typedef struct CFG_IDNode CFG_IDNode;
type CFG_IDNode (line 13) | struct CFG_IDNode
type CFG_IDList (line 19) | typedef struct CFG_IDList CFG_IDList;
type CFG_IDList (line 20) | struct CFG_IDList
type CFG_Node (line 30) | typedef struct CFG_Node CFG_Node;
type CFG_Node (line 31) | struct CFG_Node
type CFG_NodePtrNode (line 42) | typedef struct CFG_NodePtrNode CFG_NodePtrNode;
type CFG_NodePtrNode (line 43) | struct CFG_NodePtrNode
type CFG_NodePtrSlot (line 50) | typedef struct CFG_NodePtrSlot CFG_NodePtrSlot;
type CFG_NodePtrSlot (line 51) | struct CFG_NodePtrSlot
type CFG_NodePtrList (line 57) | typedef struct CFG_NodePtrList CFG_NodePtrList;
type CFG_NodePtrList (line 58) | struct CFG_NodePtrList
type CFG_NodePtrArray (line 65) | typedef struct CFG_NodePtrArray CFG_NodePtrArray;
type CFG_NodePtrArray (line 66) | struct CFG_NodePtrArray
type CFG_NodeRec (line 72) | typedef struct CFG_NodeRec CFG_NodeRec;
type CFG_NodeRec (line 73) | struct CFG_NodeRec
type CFG_StringChunkNode (line 95) | typedef struct CFG_StringChunkNode CFG_StringChunkNode;
type CFG_StringChunkNode (line 96) | struct CFG_StringChunkNode
type CFG_Ctx (line 105) | typedef struct CFG_Ctx CFG_Ctx;
type CFG_Ctx (line 106) | struct CFG_Ctx
type CFG_State (line 116) | typedef struct CFG_State CFG_State;
type CFG_State (line 117) | struct CFG_State
type CFG_SchemaNode (line 130) | typedef struct CFG_SchemaNode CFG_SchemaNode;
type CFG_SchemaNode (line 131) | struct CFG_SchemaNode
type CFG_SchemaTable (line 138) | typedef struct CFG_SchemaTable CFG_SchemaTable;
type CFG_SchemaTable (line 139) | struct CFG_SchemaTable
FILE: src/config/config_panels.c
function internal (line 4) | internal CFG_Node *
function internal (line 19) | internal CFG_PanelTree
function internal (line 110) | internal CFG_PanelNodeRec
function internal (line 130) | internal CFG_PanelNode *
function internal (line 147) | internal Rng2F32
function internal (line 175) | internal Rng2F32
FILE: src/config/config_panels.h
type CFG_PanelNode (line 7) | typedef struct CFG_PanelNode CFG_PanelNode;
type CFG_PanelNode (line 8) | struct CFG_PanelNode
type CFG_PanelTree (line 31) | typedef struct CFG_PanelTree CFG_PanelTree;
type CFG_PanelTree (line 32) | struct CFG_PanelTree
type CFG_PanelNodeRec (line 38) | typedef struct CFG_PanelNodeRec CFG_PanelNodeRec;
type CFG_PanelNodeRec (line 39) | struct CFG_PanelNodeRec
FILE: src/content/content.c
function internal (line 10) | internal C_ID
function internal (line 19) | internal B32
function internal (line 26) | internal C_Key
function internal (line 33) | internal B32
function internal (line 42) | internal void
function internal (line 89) | internal C_Root
function internal (line 116) | internal void
function internal (line 158) | internal U128
function internal (line 331) | internal void
function internal (line 377) | internal void
function internal (line 397) | internal void
function internal (line 420) | internal U128
function internal (line 443) | internal String8
function internal (line 471) | internal void
FILE: src/content/content.h
type C_Root (line 46) | typedef struct C_Root C_Root;
type C_Root (line 47) | struct C_Root
type C_ID (line 52) | typedef struct C_ID C_ID;
type C_ID (line 53) | struct C_ID
type C_Key (line 58) | typedef struct C_Key C_Key;
type C_Key (line 59) | struct C_Key
type C_Stripe (line 69) | typedef struct C_Stripe C_Stripe;
type C_Stripe (line 70) | struct C_Stripe
type C_RootIDChunkNode (line 80) | typedef struct C_RootIDChunkNode C_RootIDChunkNode;
type C_RootIDChunkNode (line 81) | struct C_RootIDChunkNode
type C_RootIDChunkList (line 89) | typedef struct C_RootIDChunkList C_RootIDChunkList;
type C_RootIDChunkList (line 90) | struct C_RootIDChunkList
type C_RootNode (line 98) | typedef struct C_RootNode C_RootNode;
type C_RootNode (line 99) | struct C_RootNode
type C_RootSlot (line 108) | typedef struct C_RootSlot C_RootSlot;
type C_RootSlot (line 109) | struct C_RootSlot
type C_KeyNode (line 121) | typedef struct C_KeyNode C_KeyNode;
type C_KeyNode (line 122) | struct C_KeyNode
type C_KeySlot (line 131) | typedef struct C_KeySlot C_KeySlot;
type C_KeySlot (line 132) | struct C_KeySlot
type C_BlobNode (line 141) | typedef struct C_BlobNode C_BlobNode;
type C_BlobNode (line 142) | struct C_BlobNode
type C_BlobSlot (line 154) | typedef struct C_BlobSlot C_BlobSlot;
type C_BlobSlot (line 155) | struct C_BlobSlot
type C_Shared (line 164) | typedef struct C_Shared C_Shared;
type C_Shared (line 165) | struct C_Shared
FILE: src/ctrl/ctrl_core.c
function internal (line 18) | internal U64
function internal (line 25) | internal U64
function internal (line 33) | internal CTRL_EventCause
function internal (line 48) | internal CTRL_ExceptionKind
function internal (line 63) | internal String8
function internal (line 91) | internal String8
function internal (line 111) | internal CTRL_EntityKind
function internal (line 126) | internal DMN_TrapFlags
function internal (line 136) | internal CTRL_UserBreakpointFlags
function ctrl_handle_zero (line 150) | ctrl_handle_zero(void)
function internal (line 156) | internal CTRL_Handle
function internal (line 163) | internal B32
function internal (line 171) | internal void
function internal (line 180) | internal CTRL_HandleList
function internal (line 191) | internal CTRL_HandleArray
function internal (line 207) | internal String8
function internal (line 214) | internal CTRL_Handle
function internal (line 238) | internal void
function internal (line 247) | internal CTRL_TrapList
function internal (line 261) | internal void
function internal (line 270) | internal CTRL_UserBreakpointList
function internal (line 290) | internal void
function internal (line 304) | internal CTRL_Msg *
function internal (line 314) | internal CTRL_MsgList
function internal (line 327) | internal void
function internal (line 345) | internal String8
function internal (line 439) | internal CTRL_MsgList
function internal (line 567) | internal CTRL_Event *
function internal (line 577) | internal void
function internal (line 595) | internal String8
function internal (line 629) | internal CTRL_Event
function internal (line 664) | internal void
function internal (line 673) | internal CTRL_EntityList
function internal (line 687) | internal CTRL_EntityArray
function internal (line 703) | internal CTRL_Entity *
function internal (line 725) | internal CTRL_Entity *
function internal (line 742) | internal CTRL_Entity *
function internal (line 757) | internal CTRL_Entity *
function internal (line 772) | internal CTRL_Entity *
function internal (line 789) | internal DI_Key
function internal (line 797) | internal CTRL_Entity *
function internal (line 820) | internal U64
function internal (line 827) | internal U64
function internal (line 834) | internal Rng1U64
function internal (line 843) | internal Rng1U64
function internal (line 852) | internal B32
function internal (line 869) | internal CTRL_EntityCtxRWStore *
function internal (line 886) | internal void
function internal (line 894) | internal U64
function internal (line 912) | internal String8
function internal (line 978) | internal void
function internal (line 993) | internal CTRL_Entity *
function internal (line 1064) | internal void
function internal (line 1125) | internal void
function internal (line 1137) | internal CTRL_EntityCtxLookupAccel *
function internal (line 1153) | internal CTRL_EntityArray
function internal (line 1178) | internal CTRL_EntityList
function internal (line 1195) | internal CTRL_Entity *
function internal (line 1212) | internal CTRL_EntityRec
function internal (line 1236) | internal void
function internal (line 1438) | internal void
function internal (line 1518) | internal void
function internal (line 1529) | internal void *
function internal (line 1589) | internal U64
function internal (line 1596) | internal U64
function internal (line 1608) | internal U64
function internal (line 1622) | internal B32
function internal (line 1639) | internal PE_IntelPdata *
function internal (line 1706) | internal U64
function internal (line 1726) | internal Rng1U64
function internal (line 1746) | internal String8
function internal (line 1766) | internal String8
function internal (line 1789) | internal Arch
function internal (line 1802) | internal CTRL_Unwind
type CTRL_MemoryReadContextDwarfX64 (line 1823) | typedef struct
function internal (line 1829) | internal
function internal (line 1850) | internal
function internal (line 1876) | internal
function internal (line 1902) | internal CTRL_UnwindStepResult
function internal (line 2136) | internal REGS_Reg64 *
function internal (line 2163) | internal CTRL_UnwindStepResult
function internal (line 2976) | internal CTRL_UnwindStepResult
function internal (line 2999) | internal CTRL_Unwind
function internal (line 3086) | internal CTRL_CallStack
function internal (line 3180) | internal CTRL_CallStackFrame *
function internal (line 3209) | internal void
function internal (line 3220) | internal U64
function internal (line 3227) | internal U64
function internal (line 3234) | internal U64
function internal (line 3243) | internal E_String2NumMap *
function internal (line 3249) | internal E_String2NumMap *
function internal (line 3260) | internal B32
function internal (line 3292) | internal CTRL_MsgList
function internal (line 3319) | internal void
function internal (line 3355) | internal CTRL_EventList
function internal (line 3388) | internal void
function internal (line 3594) | internal void
function internal (line 3685) | internal void
function internal (line 3706) | internal void
function internal (line 3723) | internal
function internal (line 3730) | internal void
function internal (line 4169) | internal void
function internal (line 4214) | internal DMN_Event *
function internal (line 4642) | internal U64
function internal (line 4657) | internal B32
function internal (line 4698) | internal CTRL_EvalScope *
function internal (line 4934) | internal void
function internal (line 4942) | internal void
function internal (line 4961) | internal void
function internal (line 5026) | internal void
function internal (line 5080) | internal void
function internal (line 5135) | internal void
function internal (line 5221) | internal void
function internal (line 5271) | internal void
function internal (line 6367) | internal void
function internal (line 6445) | internal AC_Artifact
function internal (line 6598) | internal void
function internal (line 6606) | internal C_Key
function internal (line 6635) | internal CTRL_ProcessMemorySlice
function internal (line 6778) | internal B32
function internal (line 6799) | internal B32
function internal (line 6838) | internal AC_Artifact
function internal (line 7007) | internal void
function internal (line 7017) | internal CTRL_CallStack
function internal (line 7037) | internal AC_Artifact
function internal (line 7157) | internal void
function internal (line 7167) | internal CTRL_CallStackTree
FILE: src/ctrl/ctrl_core.h
type U64 (line 10) | typedef U64 CTRL_MsgID;
type U64 (line 11) | typedef U64 CTRL_MachineID;
type U32 (line 18) | typedef U32 CTRL_UserBreakpointFlags;
type CTRL_UserBreakpointKind (line 26) | typedef enum CTRL_UserBreakpointKind
type CTRL_UserBreakpoint (line 35) | typedef struct CTRL_UserBreakpoint CTRL_UserBreakpoint;
type CTRL_UserBreakpoint (line 36) | struct CTRL_UserBreakpoint
type CTRL_UserBreakpointNode (line 47) | typedef struct CTRL_UserBreakpointNode CTRL_UserBreakpointNode;
type CTRL_UserBreakpointNode (line 48) | struct CTRL_UserBreakpointNode
type CTRL_UserBreakpointList (line 54) | typedef struct CTRL_UserBreakpointList CTRL_UserBreakpointList;
type CTRL_UserBreakpointList (line 55) | struct CTRL_UserBreakpointList
type CTRL_Handle (line 65) | typedef struct CTRL_Handle CTRL_Handle;
type CTRL_Handle (line 66) | struct CTRL_Handle
type CTRL_HandleNode (line 72) | typedef struct CTRL_HandleNode CTRL_HandleNode;
type CTRL_HandleNode (line 73) | struct CTRL_HandleNode
type CTRL_HandleList (line 79) | typedef struct CTRL_HandleList CTRL_HandleList;
type CTRL_HandleList (line 80) | struct CTRL_HandleList
type CTRL_HandleArray (line 87) | typedef struct CTRL_HandleArray CTRL_HandleArray;
type CTRL_HandleArray (line 88) | struct CTRL_HandleArray
type CTRL_Entity (line 102) | typedef struct CTRL_Entity CTRL_Entity;
type CTRL_Entity (line 103) | struct CTRL_Entity
type CTRL_EntityNode (line 124) | typedef struct CTRL_EntityNode CTRL_EntityNode;
type CTRL_EntityNode (line 125) | struct CTRL_EntityNode
type CTRL_EntityList (line 131) | typedef struct CTRL_EntityList CTRL_EntityList;
type CTRL_EntityList (line 132) | struct CTRL_EntityList
type CTRL_EntityArray (line 139) | typedef struct CTRL_EntityArray CTRL_EntityArray;
type CTRL_EntityArray (line 140) | struct CTRL_EntityArray
type CTRL_EntityRec (line 146) | typedef struct CTRL_EntityRec CTRL_EntityRec;
type CTRL_EntityRec (line 147) | struct CTRL_EntityRec
type CTRL_EntityHashNode (line 154) | typedef struct CTRL_EntityHashNode CTRL_EntityHashNode;
type CTRL_EntityHashNode (line 155) | struct CTRL_EntityHashNode
type CTRL_EntityHashSlot (line 162) | typedef struct CTRL_EntityHashSlot CTRL_EntityHashSlot;
type CTRL_EntityHashSlot (line 163) | struct CTRL_EntityHashSlot
type CTRL_EntityStringChunkNode (line 169) | typedef struct CTRL_EntityStringChunkNode CTRL_EntityStringChunkNode;
type CTRL_EntityStringChunkNode (line 170) | struct CTRL_EntityStringChunkNode
type CTRL_EntityCtx (line 188) | typedef struct CTRL_EntityCtx CTRL_EntityCtx;
type CTRL_EntityCtx (line 189) | struct CTRL_EntityCtx
type CTRL_EntityCtxRWStore (line 198) | typedef struct CTRL_EntityCtxRWStore CTRL_EntityCtxRWStore;
type CTRL_EntityCtxRWStore (line 199) | struct CTRL_EntityCtxRWStore
type CTRL_EntityCtxLookupAccel (line 208) | typedef struct CTRL_EntityCtxLookupAccel CTRL_EntityCtxLookupAccel;
type CTRL_EntityCtxLookupAccel (line 209) | struct CTRL_EntityCtxLookupAccel
type U32 (line 220) | typedef U32 CTRL_UnwindFlags;
type CTRL_UnwindStepResult (line 227) | typedef struct CTRL_UnwindStepResult CTRL_UnwindStepResult;
type CTRL_UnwindStepResult (line 228) | struct CTRL_UnwindStepResult
type CTRL_UnwindFrame (line 233) | typedef struct CTRL_UnwindFrame CTRL_UnwindFrame;
type CTRL_UnwindFrame (line 234) | struct CTRL_UnwindFrame
type CTRL_UnwindFrameNode (line 239) | typedef struct CTRL_UnwindFrameNode CTRL_UnwindFrameNode;
type CTRL_UnwindFrameNode (line 240) | struct CTRL_UnwindFrameNode
type CTRL_UnwindFrameArray (line 247) | typedef struct CTRL_UnwindFrameArray CTRL_UnwindFrameArray;
type CTRL_UnwindFrameArray (line 248) | struct CTRL_UnwindFrameArray
type CTRL_Unwind (line 254) | typedef struct CTRL_Unwind CTRL_Unwind;
type CTRL_Unwind (line 255) | struct CTRL_Unwind
type CTRL_CallStackFrame (line 264) | typedef struct CTRL_CallStackFrame CTRL_CallStackFrame;
type CTRL_CallStackFrame (line 265) | struct CTRL_CallStackFrame
type CTRL_CallStack (line 272) | typedef struct CTRL_CallStack CTRL_CallStack;
type CTRL_CallStack (line 273) | struct CTRL_CallStack
type CTRL_CallStackTreeNode (line 284) | typedef struct CTRL_CallStackTreeNode CTRL_CallStackTreeNode;
type CTRL_CallStackTreeNode (line 285) | struct CTRL_CallStackTreeNode
type CTRL_CallStackTree (line 301) | typedef struct CTRL_CallStackTree CTRL_CallStackTree;
type CTRL_CallStackTree (line 302) | struct CTRL_CallStackTree
type U32 (line 312) | typedef U32 CTRL_TrapFlags;
type CTRL_Trap (line 322) | typedef struct CTRL_Trap CTRL_Trap;
type CTRL_Trap (line 323) | struct CTRL_Trap
type CTRL_TrapNode (line 329) | typedef struct CTRL_TrapNode CTRL_TrapNode;
type CTRL_TrapNode (line 330) | struct CTRL_TrapNode
type CTRL_TrapList (line 336) | typedef struct CTRL_TrapList CTRL_TrapList;
type CTRL_TrapList (line 337) | struct CTRL_TrapList
type CTRL_Spoof (line 344) | typedef struct CTRL_Spoof CTRL_Spoof;
type CTRL_Spoof (line 345) | struct CTRL_Spoof
type U64 (line 356) | typedef U64 CTRL_EvalSpaceKind;
type CTRL_MsgKind (line 366) | typedef enum CTRL_MsgKind
type U32 (line 384) | typedef U32 CTRL_RunFlags;
type CTRL_Msg (line 390) | typedef struct CTRL_Msg CTRL_Msg;
type CTRL_Msg (line 391) | struct CTRL_Msg
type CTRL_MsgNode (line 414) | typedef struct CTRL_MsgNode CTRL_MsgNode;
type CTRL_MsgNode (line 415) | struct CTRL_MsgNode
type CTRL_MsgList (line 421) | typedef struct CTRL_MsgList CTRL_MsgList;
type CTRL_MsgList (line 422) | struct CTRL_MsgList
type CTRL_EventKind (line 432) | typedef enum CTRL_EventKind
type CTRL_EventCause (line 474) | typedef enum CTRL_EventCause
type CTRL_ExceptionKind (line 488) | typedef enum CTRL_ExceptionKind
type CTRL_Event (line 499) | typedef struct CTRL_Event CTRL_Event;
type CTRL_Event (line 500) | struct CTRL_Event
type CTRL_EventNode (line 522) | typedef struct CTRL_EventNode CTRL_EventNode;
type CTRL_EventNode (line 523) | struct CTRL_EventNode
type CTRL_EventList (line 529) | typedef struct CTRL_EventList CTRL_EventList;
type CTRL_EventList (line 530) | struct CTRL_EventList
type CTRL_ProcessMemorySlice (line 540) | typedef struct CTRL_ProcessMemorySlice CTRL_ProcessMemorySlice;
type CTRL_ProcessMemorySlice (line 541) | struct CTRL_ProcessMemorySlice
type CTRL_ThreadRegCacheNode (line 554) | typedef struct CTRL_ThreadRegCacheNode CTRL_ThreadRegCacheNode;
type CTRL_ThreadRegCacheNode (line 555) | struct CTRL_ThreadRegCacheNode
type CTRL_ThreadRegCacheSlot (line 565) | typedef struct CTRL_ThreadRegCacheSlot CTRL_ThreadRegCacheSlot;
type CTRL_ThreadRegCacheSlot (line 566) | struct CTRL_ThreadRegCacheSlot
type CTRL_ThreadRegCacheStripe (line 572) | typedef struct CTRL_ThreadRegCacheStripe CTRL_ThreadRegCacheStripe;
type CTRL_ThreadRegCacheStripe (line 573) | struct CTRL_ThreadRegCacheStripe
type CTRL_ThreadRegCache (line 579) | typedef struct CTRL_ThreadRegCache CTRL_ThreadRegCache;
type CTRL_ThreadRegCache (line 580) | struct CTRL_ThreadRegCache
type CTRL_ModuleImageInfoCacheNode (line 591) | typedef struct CTRL_ModuleImageInfoCacheNode CTRL_ModuleImageInfoCacheNode;
type CTRL_ModuleImageInfoCacheNode (line 592) | struct CTRL_ModuleImageInfoCacheNode
type CTRL_ModuleImageInfoCacheSlot (line 612) | typedef struct CTRL_ModuleImageInfoCacheSlot CTRL_ModuleImageInfoCacheSlot;
type CTRL_ModuleImageInfoCacheSlot (line 613) | struct CTRL_ModuleImageInfoCacheSlot
type CTRL_ModuleImageInfoCacheStripe (line 619) | typedef struct CTRL_ModuleImageInfoCacheStripe CTRL_ModuleImageInfoCache...
type CTRL_ModuleImageInfoCacheStripe (line 620) | struct CTRL_ModuleImageInfoCacheStripe
type CTRL_ModuleImageInfoCache (line 626) | typedef struct CTRL_ModuleImageInfoCache CTRL_ModuleImageInfoCache;
type CTRL_ModuleImageInfoCache (line 627) | struct CTRL_ModuleImageInfoCache
type CTRL_DbgDirNode (line 638) | typedef struct CTRL_DbgDirNode CTRL_DbgDirNode;
type CTRL_DbgDirNode (line 639) | struct CTRL_DbgDirNode
type CTRL_EvalScope (line 655) | typedef struct CTRL_EvalScope CTRL_EvalScope;
type CTRL_EvalScope (line 656) | struct CTRL_EvalScope
type CTRL_ModuleReqCacheNode (line 667) | typedef struct CTRL_ModuleReqCacheNode CTRL_ModuleReqCacheNode;
type CTRL_ModuleReqCacheNode (line 668) | struct CTRL_ModuleReqCacheNode
type CTRL_WAKEUP_FUNCTION_DEF (line 679) | typedef CTRL_WAKEUP_FUNCTION_DEF(CTRL_WakeupFunctionType);
type CTRL_State (line 684) | typedef struct CTRL_State CTRL_State;
type CTRL_State (line 685) | struct CTRL_State
FILE: src/ctrl/generated/ctrl.meta.h
type CTRL_EntityKind (line 9) | typedef enum CTRL_EntityKind
type CTRL_ExceptionCodeKind (line 26) | typedef enum CTRL_ExceptionCodeKind
FILE: src/dbg_engine/dbg_engine_core.c
function internal (line 21) | internal U64
function internal (line 28) | internal U64
function internal (line 34) | internal U64
function internal (line 45) | internal U64
function internal (line 54) | internal D_BreakpointArray
function internal (line 73) | internal String8List
function internal (line 146) | internal D_LineList
function internal (line 166) | internal D_CmdParams
function internal (line 188) | internal void
function internal (line 293) | internal D_TrapNet
function internal (line 332) | internal D_TrapNet
function internal (line 503) | internal D_TrapNet
function internal (line 663) | internal D_LineList
function internal (line 756) | internal D_LineListArray
function internal (line 850) | internal D_LineListArray
function internal (line 955) | internal D_LineList
function internal (line 967) | internal D_LineList
function internal (line 982) | internal U64
function internal (line 1070) | internal CTRL_Event
function internal (line 1081) | internal U64
function internal (line 1089) | internal D_RunKind
function internal (line 1095) | internal U64
function internal (line 1101) | internal B32
function internal (line 1109) | internal DI_KeyList
function internal (line 1125) | internal U64
function internal (line 1132) | internal U64
function internal (line 1153) | internal U64
function internal (line 1204) | internal E_String2NumMap *
function internal (line 1258) | internal E_String2NumMap *
function internal (line 1314) | internal void
function internal (line 1322) | internal B32
function internal (line 1348) | internal void
function internal (line 1379) | internal D_EventList
FILE: src/dbg_engine/dbg_engine_core.h
type D_Target (line 10) | typedef struct D_Target D_Target;
type D_Target (line 11) | struct D_Target
type D_TargetArray (line 24) | typedef struct D_TargetArray D_TargetArray;
type D_TargetArray (line 25) | struct D_TargetArray
type U32 (line 31) | typedef U32 D_BreakpointFlags;
type D_Breakpoint (line 39) | typedef struct D_Breakpoint D_Breakpoint;
type D_Breakpoint (line 40) | struct D_Breakpoint
type D_BreakpointArray (line 51) | typedef struct D_BreakpointArray D_BreakpointArray;
type D_BreakpointArray (line 52) | struct D_BreakpointArray
type D_PathMap (line 58) | typedef struct D_PathMap D_PathMap;
type D_PathMap (line 59) | struct D_PathMap
type D_PathMapArray (line 65) | typedef struct D_PathMapArray D_PathMapArray;
type D_PathMapArray (line 66) | struct D_PathMapArray
type D_TrapNet (line 75) | typedef struct D_TrapNet D_TrapNet;
type D_TrapNet (line 76) | struct D_TrapNet
type D_EventKind (line 86) | typedef enum D_EventKind
type D_EventCause (line 96) | typedef enum D_EventCause
type D_Event (line 106) | typedef struct D_Event D_Event;
type D_Event (line 107) | struct D_Event
type D_EventNode (line 118) | typedef struct D_EventNode D_EventNode;
type D_EventNode (line 119) | struct D_EventNode
type D_EventList (line 125) | typedef struct D_EventList D_EventList;
type D_EventList (line 126) | struct D_EventList
type D_Line (line 136) | typedef struct D_Line D_Line;
type D_Line (line 137) | struct D_Line
type D_LineNode (line 145) | typedef struct D_LineNode D_LineNode;
type D_LineNode (line 146) | struct D_LineNode
type D_LineList (line 152) | typedef struct D_LineList D_LineList;
type D_LineList (line 153) | struct D_LineList
type D_LineListArray (line 160) | typedef struct D_LineListArray D_LineListArray;
type D_LineListArray (line 161) | struct D_LineListArray
type D_RunKind (line 171) | typedef enum D_RunKind
type D_CmdParams (line 188) | typedef struct D_CmdParams D_CmdParams;
type D_CmdParams (line 189) | struct D_CmdParams
type D_Cmd (line 206) | typedef struct D_Cmd D_Cmd;
type D_Cmd (line 207) | struct D_Cmd
type D_CmdNode (line 213) | typedef struct D_CmdNode D_CmdNode;
type D_CmdNode (line 214) | struct D_CmdNode
type D_CmdList (line 221) | typedef struct D_CmdList D_CmdList;
type D_CmdList (line 222) | struct D_CmdList
type D_RunTLSBaseCacheNode (line 234) | typedef struct D_RunTLSBaseCacheNode D_RunTLSBaseCacheNode;
type D_RunTLSBaseCacheNode (line 235) | struct D_RunTLSBaseCacheNode
type D_RunTLSBaseCacheSlot (line 244) | typedef struct D_RunTLSBaseCacheSlot D_RunTLSBaseCacheSlot;
type D_RunTLSBaseCacheSlot (line 245) | struct D_RunTLSBaseCacheSlot
type D_RunTLSBaseCache (line 251) | typedef struct D_RunTLSBaseCache D_RunTLSBaseCache;
type D_RunTLSBaseCache (line 252) | struct D_RunTLSBaseCache
type D_RunLocalsCacheNode (line 261) | typedef struct D_RunLocalsCacheNode D_RunLocalsCacheNode;
type D_RunLocalsCacheNode (line 262) | struct D_RunLocalsCacheNode
type D_RunLocalsCacheSlot (line 270) | typedef struct D_RunLocalsCacheSlot D_RunLocalsCacheSlot;
type D_RunLocalsCacheSlot (line 271) | struct D_RunLocalsCacheSlot
type D_RunLocalsCache (line 277) | typedef struct D_RunLocalsCache D_RunLocalsCache;
type D_RunLocalsCache (line 278) | struct D_RunLocalsCache
type D_State (line 288) | typedef struct D_State D_State;
type D_State (line 289) | struct D_State
FILE: src/dbg_engine/generated/dbg_engine.meta.h
type D_CmdKind (line 9) | typedef enum D_CmdKind
FILE: src/dbg_info/dbg_info.c
function internal (line 7) | internal DI_Key
function internal (line 14) | internal B32
function internal (line 21) | internal void
function internal (line 30) | internal DI_KeyArray
function internal (line 48) | internal void
function internal (line 106) | internal DI_Key
function internal (line 257) | internal void
function internal (line 315) | internal void
function internal (line 393) | internal U64
function internal (line 400) | internal U64
function internal (line 407) | internal DI_KeyArray
function internal (line 444) | internal RDI_Parsed *
function internal (line 510) | internal DI_EventList
function internal (line 533) | internal void
function internal (line 1032) | internal void
function internal (line 1041) | internal void
function internal (line 1075) | internal AC_Artifact
type SortRecord (line 1298) | typedef struct SortRecord SortRecord;
type SortRecord (line 1299) | struct SortRecord
function internal (line 1474) | internal void
function internal (line 1492) | internal DI_SearchItemArray
function internal (line 1521) | internal AC_Artifact
function internal (line 1639) | internal DI_Match
FILE: src/dbg_info/dbg_info.h
type DI_Key (line 10) | typedef struct DI_Key DI_Key;
type DI_Key (line 11) | struct DI_Key
type DI_KeyNode (line 16) | typedef struct DI_KeyNode DI_KeyNode;
type DI_KeyNode (line 17) | struct DI_KeyNode
type DI_KeyList (line 23) | typedef struct DI_KeyList DI_KeyList;
type DI_KeyList (line 24) | struct DI_KeyList
type DI_KeyArray (line 31) | typedef struct DI_KeyArray DI_KeyArray;
type DI_KeyArray (line 32) | struct DI_KeyArray
type DI_KeyPathNode (line 41) | typedef struct DI_KeyPathNode DI_KeyPathNode;
type DI_KeyPathNode (line 42) | struct DI_KeyPathNode
type DI_KeySlot (line 51) | typedef struct DI_KeySlot DI_KeySlot;
type DI_KeySlot (line 52) | struct DI_KeySlot
type DI_Node (line 61) | typedef struct DI_Node DI_Node;
type DI_Node (line 62) | struct DI_Node
type DI_Slot (line 87) | typedef struct DI_Slot DI_Slot;
type DI_Slot (line 88) | struct DI_Slot
type DI_Request (line 97) | typedef struct DI_Request DI_Request;
type DI_Request (line 98) | struct DI_Request
type DI_RequestNode (line 103) | typedef struct DI_RequestNode DI_RequestNode;
type DI_RequestNode (line 104) | struct DI_RequestNode
type DI_RequestBatch (line 110) | typedef struct DI_RequestBatch DI_RequestBatch;
type DI_RequestBatch (line 111) | struct DI_RequestBatch
type DI_LoadTaskStatus (line 123) | typedef enum DI_LoadTaskStatus
type DI_LoadTask (line 131) | typedef struct DI_LoadTask DI_LoadTask;
type DI_LoadTask (line 132) | struct DI_LoadTask
type DI_LoadCompletion (line 151) | typedef struct DI_LoadCompletion DI_LoadCompletion;
type DI_LoadCompletion (line 152) | struct DI_LoadCompletion
type DI_SearchItem (line 161) | typedef struct DI_SearchItem DI_SearchItem;
type DI_SearchItem (line 162) | struct DI_SearchItem
type DI_SearchItemChunk (line 170) | typedef struct DI_SearchItemChunk DI_SearchItemChunk;
type DI_SearchItemChunk (line 171) | struct DI_SearchItemChunk
type DI_SearchItemChunkList (line 180) | typedef struct DI_SearchItemChunkList DI_SearchItemChunkList;
type DI_SearchItemChunkList (line 181) | struct DI_SearchItemChunkList
type DI_SearchItemArray (line 189) | typedef struct DI_SearchItemArray DI_SearchItemArray;
type DI_SearchItemArray (line 190) | struct DI_SearchItemArray
type DI_Match (line 199) | typedef struct DI_Match DI_Match;
type DI_Match (line 200) | struct DI_Match
type DI_EventKind (line 210) | typedef enum DI_EventKind
type DI_Event (line 219) | typedef struct DI_Event DI_Event;
type DI_Event (line 220) | struct DI_Event
type DI_EventNode (line 226) | typedef struct DI_EventNode DI_EventNode;
type DI_EventNode (line 227) | struct DI_EventNode
type DI_EventList (line 233) | typedef struct DI_EventList DI_EventList;
type DI_EventList (line 234) | struct DI_EventList
type DI_Shared (line 244) | typedef struct DI_Shared DI_Shared;
type DI_Shared (line 245) | struct DI_Shared
FILE: src/demon/demon_core.c
function internal (line 14) | internal DMN_Handle
function internal (line 21) | internal B32
function internal (line 29) | internal void
function internal (line 46) | internal void
function internal (line 63) | internal void
function internal (line 80) | internal void
function internal (line 89) | internal DMN_HandleArray
function internal (line 103) | internal DMN_HandleArray
function internal (line 115) | internal DMN_Event *
function internal (line 128) | internal U64
function internal (line 144) | internal U64
function internal (line 163) | internal String8
function internal (line 184) | internal String8
function internal (line 196) | internal void *
FILE: src/demon/demon_core.h
type DMN_CtrlCtx (line 15) | typedef struct DMN_CtrlCtx DMN_CtrlCtx;
type DMN_CtrlCtx (line 16) | struct DMN_CtrlCtx
type DMN_Handle (line 24) | typedef union DMN_Handle DMN_Handle;
type DMN_HandleNode (line 31) | typedef struct DMN_HandleNode DMN_HandleNode;
type DMN_HandleNode (line 32) | struct DMN_HandleNode
type DMN_HandleList (line 38) | typedef struct DMN_HandleList DMN_HandleList;
type DMN_HandleList (line 39) | struct DMN_HandleList
type DMN_HandleArray (line 46) | typedef struct DMN_HandleArray DMN_HandleArray;
type DMN_HandleArray (line 47) | struct DMN_HandleArray
type DMN_Event (line 61) | typedef struct DMN_Event DMN_Event;
type DMN_Event (line 62) | struct DMN_Event
type DMN_EventNode (line 87) | typedef struct DMN_EventNode DMN_EventNode;
type DMN_EventNode (line 88) | struct DMN_EventNode
type DMN_EventList (line 94) | typedef struct DMN_EventList DMN_EventList;
type DMN_EventList (line 95) | struct DMN_EventList
type U32 (line 105) | typedef U32 DMN_TrapFlags;
type DMN_Trap (line 113) | typedef struct DMN_Trap DMN_Trap;
type DMN_Trap (line 114) | struct DMN_Trap
type DMN_TrapChunkNode (line 123) | typedef struct DMN_TrapChunkNode DMN_TrapChunkNode;
type DMN_TrapChunkNode (line 124) | struct DMN_TrapChunkNode
type DMN_TrapChunkList (line 132) | typedef struct DMN_TrapChunkList DMN_TrapChunkList;
type DMN_TrapChunkList (line 133) | struct DMN_TrapChunkList
type DMN_ActiveTrap (line 141) | typedef struct DMN_ActiveTrap DMN_ActiveTrap;
type DMN_ActiveTrap (line 142) | struct DMN_ActiveTrap
type DMN_RunCtrls (line 149) | typedef struct DMN_RunCtrls DMN_RunCtrls;
type DMN_RunCtrls (line 150) | struct DMN_RunCtrls
type DMN_ProcessIter (line 165) | typedef struct DMN_ProcessIter DMN_ProcessIter;
type DMN_ProcessIter (line 166) | struct DMN_ProcessIter
type DMN_ProcessInfo (line 171) | typedef struct DMN_ProcessInfo DMN_ProcessInfo;
type DMN_ProcessInfo (line 172) | struct DMN_ProcessInfo
FILE: src/demon/generated/demon.meta.h
type DMN_EventKind (line 9) | typedef enum DMN_EventKind
type DMN_ErrorKind (line 35) | typedef enum DMN_ErrorKind
type DMN_MemoryEventKind (line 44) | typedef enum DMN_MemoryEventKind
type DMN_ExceptionKind (line 54) | typedef enum DMN_ExceptionKind
FILE: src/demon/linux/demon_core_linux.c
function internal (line 7) | internal DMN_LNX_EntityNode *
function internal (line 19) | internal U64
function internal (line 38) | internal U64
function internal (line 57) | internal B32
function internal (line 79) | internal String8
function internal (line 106) | internal String8
function internal (line 115) | internal B32
function internal (line 148) | internal B32
function internal (line 173) | internal B32
function internal (line 198) | internal B32
function internal (line 224) | internal B32
function internal (line 249) | internal B32
function internal (line 274) | internal B32
function internal (line 301) | internal String8
function internal (line 332) | internal ELF_Hdr64
function internal (line 353) | internal DMN_LNX_ProcessAuxv
function internal (line 413) | internal DMN_LNX_PhdrInfo
function internal (line 450) | internal DMN_LNX_DynamicInfo
function internal (line 492) | internal U64
function internal (line 594) | internal DMN_LNX_ProbeList
function internal (line 723) | internal
function internal (line 734) | internal DMN_LNX_Entity *
function internal (line 759) | internal void
function internal (line 786) | internal DMN_Handle
function internal (line 799) | internal DMN_LNX_Entity *
function internal (line 812) | internal DMN_LNX_Entity *
function internal (line 830) | internal U64
function internal (line 842) | internal U64
function internal (line 854) | internal B32
function internal (line 868) | internal B32
function internal (line 882) | internal B32
function internal (line 1100) | internal B32
type iovec (line 1267) | struct iovec
type iovec (line 1274) | struct iovec
function internal (line 1314) | internal B32
function internal (line 1346) | internal void
function internal (line 1396) | internal void
function internal (line 1463) | internal void
function internal (line 1479) | internal DMN_CtrlCtx *
function internal (line 1487) | internal void
function internal (line 1496) | internal void
function internal (line 1505) | internal U32
function internal (line 1929) | internal B32
function internal (line 1935) | internal B32
function internal (line 1948) | internal B32
function internal (line 1961) | internal void
function internal (line 2374) | internal DMN_EventList
function internal (line 2609) | internal void
function internal (line 2633) | internal B32
function internal (line 2649) | internal void
function internal (line 2660) | internal U64
function internal (line 2666) | internal void
function internal (line 2671) | internal void
function internal (line 2676) | internal void
function internal (line 2681) | internal void
function internal (line 2686) | internal U64
function internal (line 2694) | internal B32
function internal (line 2704) | internal Arch
function internal (line 2711) | internal U64
function internal (line 2717) | internal U64
function internal (line 2723) | internal B32
function internal (line 2744) | internal B32
function internal (line 2767) | internal void
function internal (line 2775) | internal B32
function internal (line 2827) | internal void
FILE: src/demon/linux/demon_core_linux.h
type DMN_LNX_UserX64 (line 32) | typedef struct DMN_LNX_UserX64 DMN_LNX_UserX64;
type DMN_LNX_UserX64 (line 33) | struct DMN_LNX_UserX64
type DMN_LNX_Probe (line 80) | typedef struct DMN_LNX_Probe DMN_LNX_Probe;
type DMN_LNX_Probe (line 81) | struct DMN_LNX_Probe
type DMN_LNX_ProbeNode (line 91) | typedef struct DMN_LNX_ProbeNode DMN_LNX_ProbeNode;
type DMN_LNX_ProbeNode (line 92) | struct DMN_LNX_ProbeNode
type DMN_LNX_ProbeList (line 98) | typedef struct DMN_LNX_ProbeList DMN_LNX_ProbeList;
type DMN_LNX_ProbeList (line 99) | struct DMN_LNX_ProbeList
type DMN_LNX_ProbeType (line 119) | typedef enum
type DMN_LNX_ProcessAuxv (line 131) | typedef struct DMN_LNX_ProcessAuxv DMN_LNX_ProcessAuxv;
type DMN_LNX_ProcessAuxv (line 132) | struct DMN_LNX_ProcessAuxv
type DMN_LNX_PhdrInfo (line 142) | typedef struct DMN_LNX_PhdrInfo DMN_LNX_PhdrInfo;
type DMN_LNX_PhdrInfo (line 143) | struct DMN_LNX_PhdrInfo
type DMN_LNX_DynamicInfo (line 149) | typedef struct DMN_LNX_DynamicInfo DMN_LNX_DynamicInfo;
type DMN_LNX_DynamicInfo (line 150) | struct DMN_LNX_DynamicInfo
type DMN_LNX_EntityKind (line 163) | typedef enum DMN_LNX_EntityKind
type DMN_LNX_Entity (line 174) | typedef struct DMN_LNX_Entity DMN_LNX_Entity;
type DMN_LNX_Entity (line 175) | struct DMN_LNX_Entity
type DMN_LNX_EntityNode (line 216) | typedef struct DMN_LNX_EntityNode DMN_LNX_EntityNode;
type DMN_LNX_EntityNode (line 217) | struct DMN_LNX_EntityNode
type DMN_LNX_EntityList (line 223) | typedef struct DMN_LNX_EntityList DMN_LNX_EntityList;
type DMN_LNX_EntityList (line 224) | struct DMN_LNX_EntityList
type DMN_LNX_State (line 234) | typedef struct DMN_LNX_State DMN_LNX_State;
type DMN_LNX_State (line 235) | struct DMN_LNX_State
FILE: src/demon/linux/demon_os_linux.c
function internal (line 32) | internal DEMON_LNX_ThreadExt*
function internal (line 38) | internal B32
function internal (line 73) | internal String8
function internal (line 109) | internal int
function internal (line 118) | internal Arch
function internal (line 194) | internal DEMON_LNX_ProcessAux
function internal (line 248) | internal DEMON_LNX_PhdrInfo
function internal (line 301) | internal DEMON_LNX_ModuleNode*
function internal (line 426) | internal U64
function internal (line 445) | internal B32
function internal (line 464) | internal String8
function internal (line 508) | internal void
function internal (line 538) | internal void
function internal (line 570) | internal String8
function internal (line 598) | internal U64
function internal (line 607) | internal S64
function internal (line 616) | internal B32
function internal (line 627) | internal int
function internal (line 641) | internal String8
function internal (line 669) | internal int
function internal (line 678) | internal B32
function internal (line 796) | internal void
function internal (line 804) | internal DEMON_EventList
function internal (line 1384) | internal void
function internal (line 1427) | internal U32
function internal (line 1625) | internal B32
function internal (line 1739) | internal B32
function internal (line 1750) | internal B32
function internal (line 1765) | internal void
function internal (line 1773) | internal String8
function internal (line 1782) | internal U64
function internal (line 1815) | internal U64
function internal (line 1840) | internal U64
function internal (line 1847) | internal void
function internal (line 1852) | internal void
function internal (line 1859) | internal U64
function internal (line 1866) | internal B32
function internal (line 1875) | internal B32
function internal (line 1882) | internal B32
function internal (line 1889) | internal B32
function internal (line 1970) | internal B32
function internal (line 2041) | internal void
function internal (line 2048) | internal B32
function internal (line 2099) | internal void
FILE: src/demon/linux/demon_os_linux.h
type DEMON_LNX_ThreadExt (line 36) | struct DEMON_LNX_ThreadExt{
type DEMON_LNX_AttachNode (line 43) | struct DEMON_LNX_AttachNode{
type DEMON_LNX_ProcessAux (line 48) | struct DEMON_LNX_ProcessAux{
type DEMON_LNX_PhdrInfo (line 56) | struct DEMON_LNX_PhdrInfo{
type DEMON_LNX_ModuleNode (line 61) | struct DEMON_LNX_ModuleNode{
type DEMON_LNX_EntityNode (line 69) | struct DEMON_LNX_EntityNode{
type DEMON_LNX_UserRegsX64 (line 81) | struct DEMON_LNX_UserRegsX64{
type DEMON_LNX_UserX64 (line 111) | struct DEMON_LNX_UserX64{
type DEMON_LNX_UserRegsX86 (line 124) | struct DEMON_LNX_UserRegsX86{
type DEMON_LNX_UserX86 (line 144) | struct DEMON_LNX_UserX86{
type DEMON_LNX_PermFlags (line 165) | typedef int DEMON_LNX_PermFlags;
type DEMON_LNX_MapsEntryType (line 175) | typedef int DEMON_LNX_MapsEntryType;
type DEMON_LNX_MapsEntry (line 177) | struct DEMON_LNX_MapsEntry
FILE: src/demon/win32/demon_core_win32.c
function internal (line 7) | internal U64
function internal (line 18) | internal U64
function internal (line 29) | internal DMN_Handle
function internal (line 38) | internal DMN_W32_Entity *
function internal (line 53) | internal DMN_W32_Entity *
function internal (line 121) | internal void
function internal (line 185) | internal DMN_W32_Entity *
function internal (line 211) | internal String8
function internal (line 310) | internal U64
function internal (line 338) | internal B32
function internal (line 360) | internal String8
function internal (line 409) | internal String16
function internal (line 461) | internal DMN_W32_ImageInfo
function internal (line 534) | internal U16
function internal (line 570) | internal U16
function internal (line 585) | internal B32
function internal (line 891) | internal B32
function internal (line 1137) | internal DWORD
function internal (line 1153) | internal void
function internal (line 1198) | internal DMN_CtrlCtx *
function internal (line 1206) | internal void
function internal (line 1215) | internal void
function internal (line 1224) | internal U32
function internal (line 1345) | internal B32
function internal (line 1374) | internal B32
function internal (line 1389) | internal B32
function internal (line 1427) | internal DMN_EventList
function internal (line 2959) | internal void
function internal (line 2991) | internal B32
function internal (line 3007) | internal void
function internal (line 3018) | internal U64
function internal (line 3034) | internal void
function internal (line 3044) | internal void
function internal (line 3054) | internal void
function internal (line 3064) | internal void
function internal (line 3085) | internal U64
function internal (line 3097) | internal B32
function internal (line 3111) | internal Arch
function internal (line 3123) | internal U64
function internal (line 3158) | internal U64
function internal (line 3190) | internal B32
function internal (line 3202) | internal B32
function internal (line 3216) | internal void
function internal (line 3223) | internal B32
function internal (line 3259) | internal void
FILE: src/demon/win32/demon_core_win32.h
type DMN_W32_EntityKind (line 165) | typedef enum DMN_W32_EntityKind
type DMN_W32_Entity (line 176) | typedef struct DMN_W32_Entity DMN_W32_Entity;
type DMN_W32_Entity (line 177) | struct DMN_W32_Entity
type DMN_W32_EntityNode (line 215) | typedef struct DMN_W32_EntityNode DMN_W32_EntityNode;
type DMN_W32_EntityNode (line 216) | struct DMN_W32_EntityNode
type DMN_W32_EntityIDHashNode (line 222) | typedef struct DMN_W32_EntityIDHashNode DMN_W32_EntityIDHashNode;
type DMN_W32_EntityIDHashNode (line 223) | struct DMN_W32_EntityIDHashNode
type DMN_W32_EntityIDHashSlot (line 231) | typedef struct DMN_W32_EntityIDHashSlot DMN_W32_EntityIDHashSlot;
type DMN_W32_EntityIDHashSlot (line 232) | struct DMN_W32_EntityIDHashSlot
type DMN_W32_InjectedBreak (line 241) | typedef struct DMN_W32_InjectedBreak DMN_W32_InjectedBreak;
type DMN_W32_InjectedBreak (line 242) | struct DMN_W32_InjectedBreak
type DMN_W32_ImageInfo (line 253) | typedef struct DMN_W32_ImageInfo DMN_W32_ImageInfo;
type DMN_W32_ImageInfo (line 254) | struct DMN_W32_ImageInfo
type HRESULT (line 263) | typedef HRESULT DMN_W32_GetThreadDescriptionFunctionType(HANDLE hThread,...
type DMN_W32_Shared (line 268) | typedef struct DMN_W32_Shared DMN_W32_Shared;
type DMN_W32_Shared (line 269) | struct DMN_W32_Shared
FILE: src/disasm/disasm.c
function internal (line 15) | internal DASM_Inst
function internal (line 150) | internal DASM_CtrlFlowInfo
function internal (line 180) | internal B32
function internal (line 195) | internal void
function internal (line 212) | internal DASM_LineArray
function internal (line 227) | internal U64
function internal (line 246) | internal U64
type DASM_Artifact (line 260) | typedef struct DASM_Artifact DASM_Artifact;
type DASM_Artifact (line 261) | struct DASM_Artifact
function internal (line 268) | internal AC_Artifact
function internal (line 493) | internal void
function internal (line 503) | internal DASM_Info
function internal (line 529) | internal DASM_Info
FILE: src/disasm/disasm.h
type DASM_Syntax (line 10) | typedef enum DASM_Syntax
type U32 (line 21) | typedef U32 DASM_InstFlags;
type DASM_Inst (line 34) | typedef struct DASM_Inst DASM_Inst;
type DASM_Inst (line 35) | struct DASM_Inst
type DASM_CtrlFlowPoint (line 46) | typedef struct DASM_CtrlFlowPoint DASM_CtrlFlowPoint;
type DASM_CtrlFlowPoint (line 47) | struct DASM_CtrlFlowPoint
type DASM_CtrlFlowPointNode (line 54) | typedef struct DASM_CtrlFlowPointNode DASM_CtrlFlowPointNode;
type DASM_CtrlFlowPointNode (line 55) | struct DASM_CtrlFlowPointNode
type DASM_CtrlFlowPointList (line 61) | typedef struct DASM_CtrlFlowPointList DASM_CtrlFlowPointList;
type DASM_CtrlFlowPointList (line 62) | struct DASM_CtrlFlowPointList
type DASM_CtrlFlowInfo (line 69) | typedef struct DASM_CtrlFlowInfo DASM_CtrlFlowInfo;
type DASM_CtrlFlowInfo (line 70) | struct DASM_CtrlFlowInfo
type U32 (line 79) | typedef U32 DASM_StyleFlags;
type DASM_Params (line 92) | typedef struct DASM_Params DASM_Params;
type DASM_Params (line 93) | struct DASM_Params
type DASM_Request (line 106) | typedef struct DASM_Request DASM_Request;
type DASM_Request (line 107) | struct DASM_Request
type DASM_RequestNode (line 114) | typedef struct DASM_RequestNode DASM_RequestNode;
type DASM_RequestNode (line 115) | struct DASM_RequestNode
type U32 (line 124) | typedef U32 DASM_LineFlags;
type DASM_Line (line 130) | typedef struct DASM_Line DASM_Line;
type DASM_Line (line 131) | struct DASM_Line
type DASM_LineChunkNode (line 139) | typedef struct DASM_LineChunkNode DASM_LineChunkNode;
type DASM_LineChunkNode (line 140) | struct DASM_LineChunkNode
type DASM_LineChunkList (line 148) | typedef struct DASM_LineChunkList DASM_LineChunkList;
type DASM_LineChunkList (line 149) | struct DASM_LineChunkList
type DASM_LineArray (line 157) | typedef struct DASM_LineArray DASM_LineArray;
type DASM_LineArray (line 158) | struct DASM_LineArray
type DASM_Info (line 167) | typedef struct DASM_Info DASM_Info;
type DASM_Info (line 168) | struct DASM_Info
FILE: src/draw/draw.c
function internal (line 33) | internal U64
function internal (line 47) | internal void
function internal (line 57) | internal void
function internal (line 88) | internal void
function internal (line 105) | internal DR_FStrList
function internal (line 118) | internal String8
function internal (line 139) | internal FuzzyMatchRangeList
function internal (line 165) | internal DR_FRunList
function internal (line 187) | internal Vec2F32
function internal (line 202) | internal void
function internal (line 218) | internal void
function internal (line 229) | internal DR_Bucket *
function internal (line 237) | internal void
function internal (line 253) | internal void
function internal (line 261) | internal DR_Bucket *
function internal (line 286) | internal inline R_Rect2DInst *
function internal (line 328) | internal inline R_Rect2DInst *
function internal (line 374) | internal R_PassParams_Blur *
function internal (line 393) | internal R_PassParams_Geo3D *
function internal (line 408) | internal R_Mesh3DInst *
function internal (line 480) | internal void
function internal (line 536) | internal void
function internal (line 635) | internal void
function internal (line 687) | internal void
function internal (line 712) | internal void
FILE: src/draw/draw.h
type DR_FStrParams (line 10) | typedef struct DR_FStrParams DR_FStrParams;
type DR_FStrParams (line 11) | struct DR_FStrParams
type DR_FStr (line 21) | typedef struct DR_FStr DR_FStr;
type DR_FStr (line 22) | struct DR_FStr
type DR_FStrNode (line 28) | typedef struct DR_FStrNode DR_FStrNode;
type DR_FStrNode (line 29) | struct DR_FStrNode
type DR_FStrList (line 35) | typedef struct DR_FStrList DR_FStrList;
type DR_FStrList (line 36) | struct DR_FStrList
type DR_FRun (line 44) | typedef struct DR_FRun DR_FRun;
type DR_FRun (line 45) | struct DR_FRun
type DR_FRunNode (line 54) | typedef struct DR_FRunNode DR_FRunNode;
type DR_FRunNode (line 55) | struct DR_FRunNode
type DR_FRunList (line 61) | typedef struct DR_FRunList DR_FRunList;
type DR_FRunList (line 62) | struct DR_FRunList
type DR_Bucket (line 78) | typedef struct DR_Bucket DR_Bucket;
type DR_Bucket (line 79) | struct DR_Bucket
type DR_BucketSelectionNode (line 90) | typedef struct DR_BucketSelectionNode DR_BucketSelectionNode;
type DR_BucketSelectionNode (line 91) | struct DR_BucketSelectionNode
type DR_ThreadCtx (line 97) | typedef struct DR_ThreadCtx DR_ThreadCtx;
type DR_ThreadCtx (line 98) | struct DR_ThreadCtx
FILE: src/draw/generated/draw.meta.c
function internal (line 6) | internal R_Tex2DSampleKind dr_push_tex2d_sample_kind(R_Tex2DSam...
function internal (line 7) | internal Mat3x3F32 dr_push_xform2d(Mat3x3F32 v) {DR_Sta...
function internal (line 8) | internal Rng2F32 dr_push_clip(Rng2F32 v) {DR_StackPus...
function internal (line 9) | internal F32 dr_push_transparency(F32 v) {DR_Stac...
function dr_pop_tex2d_sample_kind (line 10) | dr_pop_tex2d_sample_kind(void) {DR_StackPopImpl(Tex2DSampleKind, tex2d_s...
function internal (line 11) | internal Mat3x3F32 dr_pop_xform2d(void) {DR_StackPopImp...
function internal (line 12) | internal Rng2F32 dr_pop_clip(void) {DR_StackPopImpl(C...
function internal (line 13) | internal F32 dr_pop_transparency(void) {DR_StackP...
function dr_top_tex2d_sample_kind (line 14) | dr_top_tex2d_sample_kind(void) {DR_StackTopImpl(Tex2DSampleKind, tex2d_s...
function internal (line 15) | internal Mat3x3F32 dr_top_xform2d(void) {DR_StackTopImp...
function internal (line 16) | internal Rng2F32 dr_top_clip(void) {DR_StackTopImpl(C...
function internal (line 17) | internal F32 dr_top_transparency(void) {DR_StackT...
FILE: src/draw/generated/draw.meta.h
type DR_Tex2DSampleKindNode (line 9) | typedef struct DR_Tex2DSampleKindNode DR_Tex2DSampleKindNode;
type DR_Tex2DSampleKindNode (line 9) | struct DR_Tex2DSampleKindNode {DR_Tex2DSampleKindNode *next; R_Tex2DSamp...
type DR_XForm2DNode (line 10) | typedef struct DR_XForm2DNode DR_XForm2DNode;
type DR_XForm2DNode (line 10) | struct DR_XForm2DNode {DR_XForm2DNode *next; Mat3x3F32 v;}
type DR_ClipNode (line 11) | typedef struct DR_ClipNode DR_ClipNode;
type DR_ClipNode (line 11) | struct DR_ClipNode {DR_ClipNode *next; Rng2F32 v;}
type DR_TransparencyNode (line 12) | typedef struct DR_TransparencyNode DR_TransparencyNode;
type DR_TransparencyNode (line 12) | struct DR_TransparencyNode {DR_TransparencyNode *next; F32 v;}
FILE: src/dwarf/dwarf.c
function internal (line 4) | internal U64
function internal (line 15) | internal U64
function internal (line 26) | internal U64
function internal (line 37) | internal U64
function internal (line 48) | internal U64
function internal (line 60) | internal U64
function internal (line 72) | internal U64
function internal (line 83) | internal U64
function internal (line 97) | internal U64
function internal (line 108) | internal DW_AttribClass
function internal (line 119) | internal DW_AttribClass
function internal (line 130) | internal DW_AttribClass
function internal (line 141) | internal DW_AttribClass
function internal (line 152) | internal DW_AttribClass
function internal (line 163) | internal DW_AttribClass
function internal (line 174) | internal DW_AttribClass
function internal (line 185) | internal DW_AttribClass
function internal (line 196) | internal DW_AttribClass
function internal (line 238) | internal DW_AttribClass
function internal (line 277) | internal B32
function internal (line 285) | internal String8
function internal (line 298) | internal String8
function internal (line 311) | internal String8
function internal (line 324) | internal U64
function internal (line 337) | internal DW_AttribClass
function internal (line 374) | internal U64
function internal (line 427) | internal U64
function internal (line 442) | internal U64
function internal (line 457) | internal U64
function internal (line 472) | internal U64
function internal (line 484) | internal B32
function internal (line 508) | internal B32
function internal (line 525) | internal DW_CFA_OperandType *
function internal (line 540) | internal String8
function internal (line 551) | internal String8
function internal (line 592) | internal String8
function internal (line 606) | internal String8
function internal (line 665) | internal String8
function internal (line 693) | internal String8
function internal (line 704) | internal String8
function internal (line 715) | internal String8
function internal (line 726) | internal String8
function internal (line 737) | internal String8
function internal (line 748) | internal String8
function internal (line 759) | internal String8
function internal (line 771) | internal String8
function internal (line 778) | internal String8
function internal (line 785) | internal String8
function internal (line 792) | internal String8
function internal (line 822) | internal String8
FILE: src/dwarf/dwarf.h
type U16 (line 7) | typedef U16 DW_Version;
type DW_VersionEnum (line 8) | typedef enum DW_VersionEnum
type U64 (line 19) | typedef U64 DW_Ext;
type DW_ExtEnum (line 20) | typedef enum DW_ExtEnum
type DW_Format (line 33) | typedef enum DW_Format
type U64 (line 62) | typedef U64 DW_SectionKind;
type DW_SectionKindEnum (line 63) | typedef enum DW_SectionKindEnum
type U32 (line 115) | typedef U32 DW_Language;
type DW_LanguageEnum (line 116) | typedef enum DW_LanguageEnum
type U32 (line 131) | typedef U32 DW_InlKind;
type DW_InlKindEnum (line 132) | typedef enum DW_InlKindEnum
type DW_StdOpcode (line 154) | typedef enum DW_StdOpcode
type DW_ExtOpcode (line 170) | typedef enum DW_ExtOpcode
type U64 (line 183) | typedef U64 DW_IDCaseKind;
type DW_IDCaseKindEnum (line 184) | typedef enum DW_IDCaseKindEnum
type U64 (line 267) | typedef U64 DW_TagKind;
type DW_TagKindEnum (line 268) | typedef enum DW_TagKindEnum
type U32 (line 305) | typedef U32 DW_AttribClass;
type DW_AttribClassEnum (line 306) | typedef enum DW_AttribClassEnum
type U64 (line 480) | typedef U64 DW_FormKind;
type DW_FormEnum (line 481) | typedef enum DW_FormEnum
type U32 (line 1159) | typedef U32 DW_AttribKind;
type DW_AttribKindEnum (line 1160) | typedef enum DW_AttribKindEnum
type U64 (line 1198) | typedef U64 DW_ATE;
type DW_ATEnum (line 1199) | typedef enum DW_ATEEnum
type U64 (line 1213) | typedef U64 DW_CallingConventionKind;
type DW_CallingConventionKindEnum (line 1214) | typedef enum DW_CallingConventionKindEnum
type U64 (line 1226) | typedef U64 DW_AccessKind;
type DW_AccessKindEnum (line 1227) | typedef enum DW_AccessKindEnum
type U64 (line 1239) | typedef U64 DW_VirtualityKind;
type DW_VirtualityEnum (line 1240) | typedef enum DW_VirtualityEnum
type U8 (line 1257) | typedef U8 DW_RLE;
type DW_RLE_Enum (line 1258) | typedef enum DW_RLE_Enum
type U8 (line 1279) | typedef U8 DW_LLE;
type DW_LLEEnum (line 1280) | typedef enum DW_LLE_Enum
type U64 (line 1295) | typedef U64 DW_AddrClass;
type DW_AddrClassEnum (line 1296) | typedef enum DW_AddrClassEnum
type U8 (line 1312) | typedef U8 DW_CompUnitKind;
type DW_CompUnitKindEnum (line 1313) | typedef enum DW_CompUnitKindEnum
type U64 (line 1330) | typedef U64 DW_LNCT;
type DW_LNCTEnum (line 1331) | typedef enum DW_LNCTEnum
type DW_CFA_OperandType (line 1343) | typedef enum
type U8 (line 1384) | typedef U8 DW_CFA_Opcode;
type DW_CFA_Enum (line 1385) | typedef enum DW_CFA_Enum
type U8 (line 1580) | typedef U8 DW_ExprOp;
type DW_ExprOpEnum (line 1581) | typedef enum DW_ExprOpEnum
type U32 (line 1719) | typedef U32 DW_Reg;
type DW_Reg (line 1721) | typedef DW_Reg DW_RegX86;
type DW_RegX86Enum (line 1722) | typedef enum DW_RegX86Enum
type DW_Reg (line 1730) | typedef DW_Reg DW_RegX64;
type DW_RegX64Enum (line 1731) | typedef enum DW_RegX64Enum
FILE: src/dwarf/dwarf_coff.c
function internal (line 4) | internal B32
function internal (line 26) | internal DW_Input
FILE: src/dwarf/dwarf_dump.c
function internal (line 7) | internal String8
function internal (line 22) | internal String8
function internal (line 28) | internal String8List
function internal (line 329) | internal String8
function internal (line 338) | internal String8List
function internal (line 497) | internal String8
function internal (line 510) | internal String8
function internal (line 558) | internal String8
function internal (line 570) | internal String8
function internal (line 602) | internal void
function internal (line 682) | internal void
function internal (line 829) | internal void
function internal (line 935) | internal void
function internal (line 1024) | internal void
function internal (line 1106) | internal U64
function internal (line 1133) | internal void
function internal (line 1286) | internal void
function internal (line 1425) | internal void
function internal (line 1487) | internal void
function internal (line 1493) | internal void
function internal (line 1499) | internal void
function internal (line 1529) | internal void
function internal (line 1600) | internal String8
function internal (line 1738) | internal String8List
function DumpSubset (line 1769) | DumpSubset(DebugInfo)
function DumpSubset (line 1872) | DumpSubset(DebugAbbrev)
function DumpSubset (line 1919) | DumpSubset(DebugLine)
function DumpSubset (line 2205) | DumpSubset(DebugFrame)
function DumpSubset (line 2304) | DumpSubset(DebugLoc)
function DumpSubset (line 2312) | DumpSubset(DebugRanges)
function DumpSubset (line 2320) | DumpSubset(DebugARanges)
function DumpSubset (line 2328) | DumpSubset(DebugAddr)
function DumpSubset (line 2336) | DumpSubset(DebugLocLists)
function DumpSubset (line 2344) | DumpSubset(DebugRngLists)
function DumpSubset (line 2352) | DumpSubset(DebugPubNames)
function DumpSubset (line 2360) | DumpSubset(DebugPubTypes)
function DumpSubset (line 2368) | DumpSubset(DebugLineStr)
function DumpSubset (line 2376) | DumpSubset(DebugStrOffsets)
FILE: src/dwarf/dwarf_dump.h
type DW_DumpSubset (line 27) | typedef enum DW_DumpSubset
type U32 (line 35) | typedef U32 DW_DumpSubsetFlags;
FILE: src/dwarf/dwarf_elf.c
function internal (line 4) | internal B32
function internal (line 30) | internal DW_Input
FILE: src/dwarf/dwarf_expr.c
function internal (line 7) | internal DW_SimpleLoc
function internal (line 179) | internal DW_ExprAnalysis
function internal (line 558) | internal DW_Location
function internal (line 1338) | internal DW_ExprStack
function internal (line 1345) | internal void
function internal (line 1359) | internal U64
function internal (line 1372) | internal U64
function internal (line 1387) | internal B32
function internal (line 1396) | internal DW_ExprCall*
function internal (line 1403) | internal void
function internal (line 1417) | internal void
function internal (line 1430) | internal DW_ExprAnalysisTask*
FILE: src/dwarf/dwarf_expr.h
type DW_RegsX64 (line 10) | typedef struct DW_RegsX64
type DW_READ_MEMORY_SIG (line 40) | typedef DW_READ_MEMORY_SIG(DW_ReadMemorySig);
type String8 (line 43) | typedef String8 DW_ExprResolveCallFunc(void *call_user_ptr, U64 p);
type DW_ExprMachineCallConfig (line 45) | typedef struct DW_ExprMachineCallConfig
type DW_ExprMachineConfig (line 51) | typedef struct DW_ExprMachineConfig
type U32 (line 67) | typedef U32 DW_ExprFlags;
type DW_ExprAnalysis (line 85) | typedef struct DW_ExprAnalysis
type DW_ExprAnalysisTask (line 90) | typedef struct DW_ExprAnalysisTask
type DW_SimpleLocKind (line 99) | typedef enum DW_SimpleLocKind
type DW_LocFailKind (line 109) | typedef enum DW_LocFailKind
type DW_SimpleLoc (line 134) | typedef struct DW_SimpleLoc
type DW_Piece (line 149) | typedef struct DW_Piece
type DW_Location (line 164) | typedef struct DW_Location
type DW_ExprStackNode (line 198) | typedef struct DW_ExprStackNode
type DW_ExprStack (line 204) | typedef struct DW_ExprStack
type DW_ExprCall (line 211) | typedef struct DW_ExprCall
type DW_ExprCallStack (line 219) | typedef struct DW_ExprCallStack
FILE: src/dwarf/dwarf_help.c
function internal (line 4) | internal DW_CallFrameInfo
FILE: src/dwarf/dwarf_help.h
type DW_CallFrameInfo (line 7) | typedef struct DW_CallFrameInfo
FILE: src/dwarf/dwarf_parse.c
function internal (line 4) | internal U64
function internal (line 26) | internal U64
function internal (line 46) | internal U64
function internal (line 77) | internal U64
function internal (line 112) | internal U64
function internal (line 139) | internal U64
function internal (line 166) | internal DW_SectionKind
function internal (line 178) | internal DW_SectionKind
function internal (line 189) | internal Rng1U64List
function internal (line 216) | internal U64
function internal (line 257) | internal U64
function internal (line 288) | internal U64
function internal (line 329) | internal DW_ListUnitInput
function internal (line 400) | internal U64
function internal (line 414) | internal U64
function internal (line 433) | internal U64
function internal (line 482) | internal U64
function internal (line 532) | internal DW_AbbrevTable
function internal (line 605) | internal U64
function internal (line 625) | internal U64
function internal (line 818) | internal U64
function internal (line 904) | internal U64
function internal (line 912) | internal B32
function internal (line 932) | internal U64
function internal (line 941) | internal U64
function internal (line 953) | internal String8
function internal (line 965) | internal U128
function internal (line 974) | internal U64
function internal (line 1000) | internal U64
function internal (line 1006) | internal U32
function internal (line 1014) | internal S64
function internal (line 1022) | internal S32
function internal (line 1030) | internal U64
function internal (line 1056) | internal String8
function internal (line 1063) | internal String8
function internal (line 1102) | internal String8
function internal (line 1114) | internal DW_LineFile *
function internal (line 1127) | internal DW_Reference
function internal (line 1148) | internal DW_LocList
function internal (line 1423) | internal B32
function internal (line 1435) | internal Rng1U64List
function internal (line 1626) | internal String8
function internal (line 1640) | internal String8
function internal (line 1646) | internal String8
function internal (line 1652) | internal String8
function internal (line 1658) | internal String8
function internal (line 1664) | internal DW_AttribClass
function internal (line 1670) | internal String8
function internal (line 1678) | internal U128
function internal (line 1686) | internal U64
function internal (line 1694) | internal U32
function internal (line 1702) | internal S64
function internal (line 1710) | internal S32
function internal (line 1718) | internal B32
function internal (line 1726) | internal U64
function internal (line 1751) | internal String8
function internal (line 1759) | internal String8
function internal (line 1767) | internal String8
function internal (line 1775) | internal DW_LineFile *
function internal (line 1783) | internal DW_Reference
function internal (line 1791) | internal DW_LocList
function internal (line 1801) | internal Rng1U64List
function internal (line 1814) | internal DW_Attrib *
function internal (line 1828) | internal DW_Attrib *
function internal (line 1847) | internal B32
function internal (line 1855) | internal String8
function internal (line 1861) | internal String8
function internal (line 1867) | internal U128
function internal (line 1873) | internal U64
function internal (line 1879) | internal U32
function internal (line 1885) | internal U64
function internal (line 1891) | internal String8
function internal (line 1897) | internal String8
function internal (line 1903) | internal DW_Reference
function internal (line 1909) | internal DW_LocList
function internal (line 1915) | internal Rng1U64List
function internal (line 1921) | internal B32
function internal (line 1927) | internal DW_LineFile *
function internal (line 1933) | internal B32
function internal (line 1955) | internal U64
function internal (line 1963) | internal U32
function internal (line 1974) | internal U64
function internal (line 2005) | internal DW_CompUnit
function internal (line 2179) | internal void
function internal (line 2211) | internal DW_TagTree
function internal (line 2228) | internal HashTable *
function internal (line 2277) | internal DW_TagNode *
function internal (line 2284) | internal DW_LineVMFileArray
function internal (line 2302) | internal U64
function internal (line 2363) | internal U64
function internal (line 2414) | internal U64
function internal (line 2721) | internal void
function internal (line 2737) | internal void
function internal (line 2745) | internal DW_LineSeqNode *
function internal (line 2754) | internal DW_LineNode *
function internal (line 2774) | internal String8
function internal (line 2804) | internal String8
function internal (line 2810) | internal DW_LineTableParseResult
function internal (line 3033) | internal DW_PubStringsTable
function internal (line 3106) | internal DW_Expr
function internal (line 3317) | internal void
function internal (line 3324) | internal DW_CFA_InstNode *
function internal (line 3333) | internal U64
function internal (line 3345) | internal U64
function internal (line 3373) | internal B32
function internal (line 3442) | internal B32
function internal (line 3481) | internal B32
function internal (line 3507) | internal DW_CFA_ParseErrorCode
function internal (line 3783) | internal DW_CFA_InstList
function internal (line 3807) | internal
FILE: src/dwarf/dwarf_parse.h
type DW_Section (line 7) | typedef struct DW_Section DW_Section;
type DW_Section (line 8) | struct DW_Section
type DW_Input (line 15) | typedef struct DW_Input DW_Input;
type DW_Input (line 16) | struct DW_Input
type DW_ListUnit (line 22) | typedef struct DW_ListUnit DW_ListUnit;
type DW_ListUnit (line 23) | struct DW_ListUnit
type DW_ListUnitInput (line 32) | typedef struct DW_ListUnitInput DW_ListUnitInput;
type DW_ListUnitInput (line 33) | struct DW_ListUnitInput
type DW_AbbrevTableEntry (line 49) | typedef struct DW_AbbrevTableEntry DW_AbbrevTableEntry;
type DW_AbbrevTableEntry (line 50) | struct DW_AbbrevTableEntry
type DW_AbbrevTable (line 56) | typedef struct DW_AbbrevTable DW_AbbrevTable;
type DW_AbbrevTable (line 57) | struct DW_AbbrevTable
type DW_AbbrevKind (line 63) | typedef enum DW_AbbrevKind
type U32 (line 74) | typedef U32 DW_AbbrevFlags;
type DW_Abbrev (line 81) | typedef struct DW_Abbrev DW_Abbrev;
type DW_Abbrev (line 82) | struct DW_Abbrev
type DW_Form (line 91) | typedef union DW_Form
type DW_Attrib (line 113) | typedef struct DW_Attrib DW_Attrib;
type DW_Attrib (line 114) | struct DW_Attrib
type DW_AttribNode (line 124) | typedef struct DW_AttribNode DW_AttribNode;
type DW_AttribNode (line 125) | struct DW_AttribNode
type DW_AttribList (line 131) | typedef struct DW_AttribList DW_AttribList;
type DW_AttribList (line 132) | struct DW_AttribList
type DW_Tag (line 139) | typedef struct DW_Tag DW_Tag;
type DW_Tag (line 140) | struct DW_Tag
type DW_TagNode (line 150) | typedef struct DW_TagNode DW_TagNode;
type DW_TagNode (line 151) | struct DW_TagNode
type DW_Loc (line 159) | typedef struct DW_Loc DW_Loc;
type DW_Loc (line 160) | struct DW_Loc
type DW_LocNode (line 166) | typedef struct DW_LocNode DW_LocNode;
type DW_LocNode (line 167) | struct DW_LocNode
type DW_LocList (line 173) | typedef struct DW_LocList DW_LocList;
type DW_LocList (line 174) | struct DW_LocList
type DW_CompUnit (line 181) | typedef struct DW_CompUnit DW_CompUnit;
type DW_CompUnit (line 182) | struct DW_CompUnit
type DW_TagTree (line 204) | typedef struct DW_TagTree
type DW_LineFile (line 210) | typedef struct DW_LineFile
type DW_LineVMFileNode (line 220) | typedef struct DW_LineVMFileNode
type DW_LineVMFileList (line 226) | typedef struct DW_LineVMFileList
type DW_LineVMFileArray (line 233) | typedef struct DW_LineVMFileArray
type DW_LineVMHeader (line 239) | typedef struct DW_LineVMHeader
type DW_LineVMState (line 258) | typedef struct DW_LineVMState
type DW_Line (line 285) | typedef struct DW_Line
type DW_LineNode (line 293) | typedef struct DW_LineNode
type DW_LineSeqNode (line 299) | typedef struct DW_LineSeqNode
type DW_LineTableParseResult (line 307) | typedef struct DW_LineTableParseResult
type DW_PubStringsBucket (line 318) | typedef struct DW_PubStringsBucket
type DW_PubStringsTable (line 326) | typedef struct DW_PubStringsTable
type DW_Reference (line 332) | typedef struct DW_Reference
type DW_ExprOperand (line 341) | typedef union DW_ExprOperand
type DW_ExprInst (line 356) | typedef struct DW_ExprInst
type DW_Expr (line 365) | typedef struct DW_Expr
type DW_DescriptorEntryType (line 375) | typedef enum
type DW_DescriptorEntry (line 382) | typedef struct DW_DescriptorEntry
type DW_CIE (line 391) | typedef struct DW_CIE
type DW_FDE (line 406) | typedef struct DW_FDE
type DW_CFA_Operand (line 414) | typedef union DW_CFA_Operand
type DW_CFA_ParseErrorCode (line 421) | typedef enum
type DW_CFA_Inst (line 428) | typedef struct DW_CFA_Inst
type DW_CFA_InstNode (line 434) | typedef struct DW_CFA_InstNode
type DW_CFA_InstList (line 440) | typedef struct DW_CFA_InstList
type DW_DECODE_PTR (line 448) | typedef DW_DECODE_PTR(DW_DecodePtr);
FILE: src/dwarf/dwarf_unwind.c
function internal (line 4) | internal DW_CFI_Row *
function internal (line 15) | internal void
function internal (line 22) | internal DW_CFI_Row *
function internal (line 30) | internal DW_CFI_Unwind *
function internal (line 65) | internal B32
function internal (line 202) | internal DW_CFI_Row *
function internal (line 239) | internal DW_UnwindStatus
FILE: src/dwarf/dwarf_unwind.h
type DW_CFI_RegisterRule (line 7) | typedef enum DW_CFI_RegisterRule
type DW_CFA_Rule (line 19) | typedef enum DW_CFA_Rule
type DW_CFA (line 26) | typedef struct DW_CFA
type DW_CFI_Register (line 38) | typedef struct DW_CFI_Register
type DW_CFI_Row (line 47) | typedef struct DW_CFI_Row
type DW_CFI_Unwind (line 54) | typedef struct DW_CFI_Unwind
type DW_UnwindStatus (line 68) | typedef enum {
type DW_REG_READ (line 75) | typedef DW_REG_READ(DW_RegRead);
type DW_REG_WRITE (line 78) | typedef DW_REG_WRITE(DW_RegWrite);
type DW_MEM_READ (line 81) | typedef DW_MEM_READ(DW_MemRead);
type DW_CIE (line 91) | struct DW_CIE
type DW_FDE (line 91) | struct DW_FDE
FILE: src/dwarf/eh_dump.c
function internal (line 4) | internal String8List
FILE: src/dwarf/eh_dump.h
type EH_DumpSubset (line 14) | typedef enum EH_DumpSubset {
type U32 (line 20) | typedef U32 EH_DumpSubsetFlags;
FILE: src/dwarf/eh_frame.c
function internal (line 4) | internal U64
function internal (line 74) | internal EH_FrameHdr
function internal (line 125) | internal U64
function internal (line 182) | internal U64
function internal (line 209) | internal B32
function internal (line 293) | internal B32
function internal (line 324) | internal U64
function internal (line 383) | internal int
function internal (line 389) | internal String8
function internal (line 424) | internal
function internal (line 431) | internal String8
function internal (line 449) | internal String8
function internal (line 462) | internal String8
FILE: src/dwarf/eh_frame.h
type U8 (line 10) | typedef U8 EH_PtrEnc;
type EH_PtrCtx (line 44) | typedef struct EH_PtrCtx
type U8 (line 53) | typedef U8 EH_AugFlags;
type EH_Augmentation (line 62) | typedef struct EH_Augmentation
type EH_FrameHdrEntry (line 83) | typedef struct EH_FrameHdrEntry
type EH_FrameHdr (line 89) | typedef struct EH_FrameHdr
type EH_DecodePtrCtx (line 102) | typedef struct EH_DecodePtrCtx
type DW_FDE (line 116) | struct DW_FDE
FILE: src/elf/elf.c
function internal (line 7) | internal ELF_Hdr64
function internal (line 28) | internal ELF_Shdr64
function internal (line 45) | internal ELF_Phdr64
function internal (line 60) | internal ELF_Dyn64
function internal (line 69) | internal ELF_Sym64
function internal (line 82) | internal ELF_Rel64
function internal (line 93) | internal ELF_Rela64
function internal (line 105) | internal ELF_Chdr64
function internal (line 115) | internal ELF_Auxv64
function internal (line 126) | internal String8
function internal (line 139) | internal Arch
function internal (line 156) | internal U64
function internal (line 169) | internal U64
FILE: src/elf/elf.h
type U8 (line 7) | typedef U8 ELF_Class;
type U8 (line 16) | typedef U8 ELF_OsAbi;
type U8 (line 33) | typedef U8 ELF_Version;
type U16 (line 40) | typedef U16 ELF_MachineKind;
type U8 (line 101) | typedef U8 ELF_Data;
type U16 (line 109) | typedef U16 ELF_Type;
type U32 (line 123) | typedef U32 ELF_PType;
type U32 (line 146) | typedef U32 ELF_PFlag;
type U32 (line 154) | typedef U32 ELF_ShType;
type U32 (line 192) | typedef U32 ELF_SectionIndex;
type U32 (line 219) | typedef U32 ELF_SectionFlags;
type U32 (line 242) | typedef U32 ELF_AuxType;
type U32 (line 281) | typedef U32 ELF_DynTag;
type U32 (line 363) | typedef U32 ELF_DynFlag;
type U32 (line 373) | typedef U32 ELF_DynFeatureFlag;
type U8 (line 380) | typedef U8 ELF_SymBind;
type U8 (line 393) | typedef U8 ELF_SymType;
type U8 (line 412) | typedef U8 ELF_SymVisibility;
type U32 (line 421) | typedef U32 ELF_RelocI386;
type U32 (line 471) | typedef U32 ELF_RelocX8664;
type U32 (line 521) | typedef U32 ELF_ExternalVerFlag;
type U32 (line 529) | typedef U32 ELF_NoteType;
type ELF_Identifier (line 538) | typedef enum ELF_Identifier
type ELF_Hdr64 (line 555) | typedef struct ELF_Hdr64
type ELF_Hdr32 (line 573) | typedef struct ELF_Hdr32
type ELF_Shdr64 (line 591) | typedef struct ELF_Shdr64
type ELF_Shdr32 (line 605) | typedef struct ELF_Shdr32
type ELF_Phdr64 (line 619) | typedef struct ELF_Phdr64
type ELF_Phdr32 (line 631) | typedef struct ELF_Phdr32
type ELF_Auxv32 (line 648) | typedef struct ELF_Auxv32
type ELF_Auxv64 (line 654) | typedef struct ELF_Auxv64
type ELF_Dyn32 (line 665) | typedef struct ELF_Dyn32
type ELF_Dyn64 (line 671) | typedef struct ELF_Dyn64
type ELF_Sym32 (line 680) | typedef struct
type ELF_Sym64 (line 690) | typedef struct
type ELF_Rel32 (line 705) | typedef struct
type ELF_Rela32 (line 711) | typedef struct
type ELF_Rel64 (line 718) | typedef struct
type ELF_Rela64 (line 724) | typedef struct
type ELF_ExternalVerdef (line 743) | typedef struct
type ELF_ExternalVerdaux (line 755) | typedef struct
type ELF_ExternalVerneed (line 762) | typedef struct
type ELF_ExternalVernaux (line 772) | typedef struct
type ELF_ExternalVersym (line 782) | typedef struct
type U8 (line 790) | typedef U8 ELF_CompressType;
type ELF_CompressTypeEnum (line 791) | enum ELF_CompressTypeEnum
type ELF_Chdr32 (line 804) | typedef struct ELF_Chdr32
type ELF_Chdr64 (line 811) | typedef struct ELF_Chdr64
FILE: src/elf/elf_dump.c
function internal (line 4) | internal String8List
function internal (line 186) | internal String8List
FILE: src/elf/elf_dump.h
type U32 (line 10) | typedef U32 ELF_DumpSubset;
type U32 (line 18) | typedef U32 ELF_DumpSubsetFlags;
FILE: src/elf/elf_parse.c
function internal (line 6) | internal ELF_Bin
function internal (line 115) | internal String8
function internal (line 124) | internal U64
function internal (line 140) | internal ELF_GnuDebugLink
function internal (line 168) | internal ELF_NoteList
FILE: src/elf/elf_parse.h
type ELF_Shdr64Array (line 10) | typedef struct ELF_Shdr64Array ELF_Shdr64Array;
type ELF_Shdr64Array (line 11) | struct ELF_Shdr64Array
type ELF_Phdr64Array (line 17) | typedef struct ELF_Phdr64Array ELF_Phdr64Array;
type ELF_Phdr64Array (line 18) | struct ELF_Phdr64Array
type ELF_Bin (line 24) | typedef struct ELF_Bin ELF_Bin;
type ELF_Bin (line 25) | struct ELF_Bin
type ELF_GnuDebugLink (line 33) | typedef struct ELF_GnuDebugLink ELF_GnuDebugLink;
type ELF_GnuDebugLink (line 34) | struct ELF_GnuDebugLink
type ELF_Note (line 40) | typedef struct ELF_Note ELF_Note;
type ELF_Note (line 41) | struct ELF_Note
type ELF_NoteNode (line 48) | typedef struct ELF_NoteNode ELF_NoteNode;
type ELF_NoteNode (line 49) | struct ELF_NoteNode
type ELF_NoteList (line 55) | typedef struct ELF_NoteList ELF_NoteList;
type ELF_NoteList (line 56) | struct ELF_NoteList
FILE: src/eval/eval_core.c
function internal (line 18) | internal U64
function internal (line 28) | internal RDI_EvalOp
function internal (line 59) | internal B32
function internal (line 82) | internal B32
function internal (line 89) | internal E_Key
function internal (line 99) | internal void
function internal (line 108) | internal void
function internal (line 117) | internal E_TypeKeyList
function internal (line 131) | internal void
function internal (line 143) | internal void
function internal (line 153) | internal void
function internal (line 170) | internal E_MsgList
function internal (line 184) | internal E_Space
function internal (line 192) | internal B32
function internal (line 204) | internal E_String2NumMap
function internal (line 213) | internal void
function internal (line 238) | internal U64
function internal (line 263) | internal E_String2NumMapNodeArray
function internal (line 277) | internal int
function internal (line 292) | internal void
function internal (line 300) | internal E_String2ExprMap
function internal (line 309) | internal void
function internal (line 335) | internal void
function internal (line 352) | internal void
function internal (line 369) | internal E_Expr *
function internal (line 396) | internal E_String2TypeKeyMap
function internal (line 405) | internal void
function internal (line 416) | internal E_TypeKey
function internal (line 435) | internal E_AutoHookMap
function internal (line 444) | internal void
function internal (line 527) | internal E_String2NumMap *
function internal (line 606) | internal E_String2NumMap *
function internal (line 650) | internal E_Cache *
function internal (line 660) | internal void
function internal (line 666) | internal void
function internal (line 675) | internal void
function internal (line 738) | internal void
function internal (line 752) | internal E_DbgInfo *
function internal (line 763) | internal E_DbgInfo *
function internal (line 780) | internal E_Key
function internal (line 802) | internal E_Key
function internal (line 814) | internal E_Key
function internal (line 854) | internal E_Key
function internal (line 867) | internal E_Key
function internal (line 879) | internal E_CacheBundle *
function internal (line 904) | internal E_Parse
function internal (line 918) | internal E_IRTreeAndType
function internal (line 937) | internal String8
function internal (line 953) | internal E_Interpretation
function internal (line 974) | internal String8
function internal (line 1037) | internal E_Eval
function internal (line 1057) | internal E_Eval
function internal (line 1114) | internal E_AutoHookMatchList
function internal (line 1272) | internal E_AutoHookMatchList
function internal (line 1303) | internal U64
function internal (line 1332) | internal String8
function internal (line 1356) | internal E_Key
function internal (line 1365) | internal E_Key
function internal (line 1381) | internal Rng1U64
function internal (line 1422) | internal String8
type Task (line 1501) | typedef struct Task Task;
type Task (line 1502) | struct Task
FILE: src/eval/eval_core.h
type E_Key (line 10) | typedef struct E_Key E_Key;
type E_Key (line 11) | struct E_Key
type E_MsgKind (line 19) | typedef enum E_MsgKind
type E_Msg (line 30) | typedef struct E_Msg E_Msg;
type E_Msg (line 31) | struct E_Msg
type E_MsgList (line 39) | typedef struct E_MsgList E_MsgList;
type E_MsgList (line 40) | struct E_MsgList
type E_Value (line 51) | typedef union E_Value E_Value;
type E_Op (line 79) | typedef struct E_Op E_Op;
type E_Op (line 80) | struct E_Op
type E_OpList (line 88) | typedef struct E_OpList E_OpList;
type E_OpList (line 89) | struct E_OpList
type E_OpKind (line 100) | typedef enum E_OpKind
type E_OpInfo (line 108) | typedef struct E_OpInfo E_OpInfo;
type E_OpInfo (line 109) | struct E_OpInfo
type U64 (line 132) | typedef U64 E_SpaceKind;
type E_Space (line 142) | typedef struct E_Space E_Space;
type E_Space (line 143) | struct E_Space
type E_TypeKeyKind (line 160) | typedef enum E_TypeKeyKind
type E_TypeKey (line 171) | typedef struct E_TypeKey E_TypeKey;
type E_TypeKey (line 172) | struct E_TypeKey
type E_TypeKeyNode (line 181) | typedef struct E_TypeKeyNode E_TypeKeyNode;
type E_TypeKeyNode (line 182) | struct E_TypeKeyNode
type E_TypeKeyList (line 188) | typedef struct E_TypeKeyList E_TypeKeyList;
type E_TypeKeyList (line 189) | struct E_TypeKeyList
type E_Token (line 204) | typedef struct E_Token E_Token;
type E_Token (line 205) | struct E_Token
type E_TokenChunkNode (line 211) | typedef struct E_TokenChunkNode E_TokenChunkNode;
type E_TokenChunkNode (line 212) | struct E_TokenChunkNode
type E_TokenChunkList (line 220) | typedef struct E_TokenChunkList E_TokenChunkList;
type E_TokenChunkList (line 221) | struct E_TokenChunkList
type E_TokenArray (line 229) | typedef struct E_TokenArray E_TokenArray;
type E_TokenArray (line 230) | struct E_TokenArray
type E_Mode (line 239) | typedef enum E_Mode
type E_Expr (line 250) | typedef struct E_Expr E_Expr;
type E_Expr (line 251) | struct E_Expr
type E_ExprChain (line 269) | typedef struct E_ExprChain E_ExprChain;
type E_ExprChain (line 270) | struct E_ExprChain
type E_ExprNode (line 276) | typedef struct E_ExprNode E_ExprNode;
type E_ExprNode (line 277) | struct E_ExprNode
type E_ExprList (line 283) | typedef struct E_ExprList E_ExprList;
type E_ExprList (line 284) | struct E_ExprList
type E_Parse (line 291) | typedef struct E_Parse E_Parse;
type E_Parse (line 292) | struct E_Parse
type E_IRNode (line 304) | typedef struct E_IRNode E_IRNode;
type E_IRNode (line 305) | struct E_IRNode
type E_IRTreeAndType (line 316) | typedef struct E_IRTreeAndType E_IRTreeAndType;
type E_IRTreeAndType (line 317) | struct E_IRTreeAndType
type E_Interpretation (line 331) | typedef struct E_Interpretation E_Interpretation;
type E_Interpretation (line 332) | struct E_Interpretation
type E_Eval (line 342) | typedef struct E_Eval E_Eval;
type E_Eval (line 343) | struct E_Eval
type E_MemberKind (line 360) | typedef enum E_MemberKind
type U32 (line 377) | typedef U32 E_TypeFlags;
type E_Member (line 395) | typedef struct E_Member E_Member;
type E_Member (line 396) | struct E_Member
type E_MemberNode (line 405) | typedef struct E_MemberNode E_MemberNode;
type E_MemberNode (line 406) | struct E_MemberNode
type E_MemberList (line 412) | typedef struct E_MemberList E_MemberList;
type E_MemberList (line 413) | struct E_MemberList
type E_MemberArray (line 420) | typedef struct E_MemberArray E_MemberArray;
type E_MemberArray (line 421) | struct E_MemberArray
type E_EnumVal (line 427) | typedef struct E_EnumVal E_EnumVal;
type E_EnumVal (line 428) | struct E_EnumVal
type E_EnumValNode (line 434) | typedef struct E_EnumValNode E_EnumValNode;
type E_EnumValNode (line 435) | struct E_EnumValNode
type E_EnumValList (line 441) | typedef struct E_EnumValList E_EnumValList;
type E_EnumValList (line 442) | struct E_EnumValList
type E_EnumValArray (line 449) | typedef struct E_EnumValArray E_EnumValArray;
type E_EnumValArray (line 450) | struct E_EnumValArray
type E_IRExt (line 456) | typedef struct E_IRExt E_IRExt;
type E_IRExt (line 457) | struct E_IRExt
type E_TypeExpandInfo (line 462) | typedef struct E_TypeExpandInfo E_TypeExpandInfo;
type E_TypeExpandInfo (line 463) | struct E_TypeExpandInfo
type E_TYPE_IREXT_FUNCTION_SIG (line 472) | typedef E_TYPE_IREXT_FUNCTION_SIG(E_TypeIRExtFunctionType);
type E_TYPE_ACCESS_FUNCTION_SIG (line 477) | typedef E_TYPE_ACCESS_FUNCTION_SIG(E_TypeAccessFunctionType);
type E_TYPE_EXPAND_INFO_FUNCTION_SIG (line 482) | typedef E_TYPE_EXPAND_INFO_FUNCTION_SIG(E_TypeExpandInfoFunctionType);
type E_TYPE_EXPAND_RANGE_FUNCTION_SIG (line 487) | typedef E_TYPE_EXPAND_RANGE_FUNCTION_SIG(E_TypeExpandRangeFunctionType);
type E_TYPE_EXPAND_ID_FROM_NUM_FUNCTION_SIG (line 492) | typedef E_TYPE_EXPAND_ID_FROM_NUM_FUNCTION_SIG(E_TypeExpandIDFromNumFunc...
type E_TYPE_EXPAND_NUM_FROM_ID_FUNCTION_SIG (line 497) | typedef E_TYPE_EXPAND_NUM_FROM_ID_FUNCTION_SIG(E_TypeExpandNumFromIDFunc...
type E_TypeExpandRule (line 499) | typedef struct E_TypeExpandRule E_TypeExpandRule;
type E_TypeExpandRule (line 500) | struct E_TypeExpandRule
type E_Type (line 508) | typedef struct E_Type E_Type;
type E_Type (line 509) | struct E_Type
type E_ConsTypeParams (line 533) | typedef struct E_ConsTypeParams E_ConsTypeParams;
type E_ConsTypeParams (line 534) | struct E_ConsTypeParams
type E_ConsTypeNode (line 551) | typedef struct E_ConsTypeNode E_ConsTypeNode;
type E_ConsTypeNode (line 552) | struct E_ConsTypeNode
type E_ConsTypeSlot (line 561) | typedef struct E_ConsTypeSlot E_ConsTypeSlot;
type E_ConsTypeSlot (line 562) | struct E_ConsTypeSlot
type E_DbgInfo (line 571) | typedef struct E_DbgInfo E_DbgInfo;
type E_DbgInfo (line 572) | struct E_DbgInfo
type E_Module (line 581) | typedef struct E_Module E_Module;
type E_Module (line 582) | struct E_Module
type E_String2NumMapNode (line 593) | typedef struct E_String2NumMapNode E_String2NumMapNode;
type E_String2NumMapNode (line 594) | struct E_String2NumMapNode
type E_String2NumMapNodeArray (line 602) | typedef struct E_String2NumMapNodeArray E_String2NumMapNodeArray;
type E_String2NumMapNodeArray (line 603) | struct E_String2NumMapNodeArray
type E_String2NumMapSlot (line 609) | typedef struct E_String2NumMapSlot E_String2NumMapSlot;
type E_String2NumMapSlot (line 610) | struct E_String2NumMapSlot
type E_String2NumMap (line 616) | typedef struct E_String2NumMap E_String2NumMap;
type E_String2NumMap (line 617) | struct E_String2NumMap
type E_String2ExprMapNode (line 629) | typedef struct E_String2ExprMapNode E_String2ExprMapNode;
type E_String2ExprMapNode (line 630) | struct E_String2ExprMapNode
type E_String2ExprMapSlot (line 638) | typedef struct E_String2ExprMapSlot E_String2ExprMapSlot;
type E_String2ExprMapSlot (line 639) | struct E_String2ExprMapSlot
type E_String2ExprMap (line 645) | typedef struct E_String2ExprMap E_String2ExprMap;
type E_String2ExprMap (line 646) | struct E_String2ExprMap
type E_String2TypeKeyNode (line 655) | typedef struct E_String2TypeKeyNode E_String2TypeKeyNode;
type E_String2TypeKeyNode (line 656) | struct E_String2TypeKeyNode
type E_String2TypeKeySlot (line 663) | typedef struct E_String2TypeKeySlot E_String2TypeKeySlot;
type E_String2TypeKeySlot (line 664) | struct E_String2TypeKeySlot
type E_String2TypeKeyMap (line 670) | typedef struct E_String2TypeKeyMap E_String2TypeKeyMap;
type E_String2TypeKeyMap (line 671) | struct E_String2TypeKeyMap
type E_PatternPart (line 680) | typedef struct E_PatternPart E_PatternPart;
type E_PatternPart (line 681) | struct E_PatternPart
type E_Pattern (line 688) | typedef struct E_Pattern E_Pattern;
type E_Pattern (line 689) | struct E_Pattern
type E_AutoHookWildcardInst (line 696) | typedef struct E_AutoHookWildcardInst E_AutoHookWildcardInst;
type E_AutoHookWildcardInst (line 697) | struct E_AutoHookWildcardInst
type E_AutoHookMatch (line 704) | typedef struct E_AutoHookMatch E_AutoHookMatch;
type E_AutoHookMatch (line 705) | struct E_AutoHookMatch
type E_AutoHookMatchList (line 713) | typedef struct E_AutoHookMatchList E_AutoHookMatchList;
type E_AutoHookMatchList (line 714) | struct E_AutoHookMatchList
type E_AutoHookNode (line 721) | typedef struct E_AutoHookNode E_AutoHookNode;
type E_AutoHookNode (line 722) | struct E_AutoHookNode
type E_AutoHookSlot (line 731) | typedef struct E_AutoHookSlot E_AutoHookSlot;
type E_AutoHookSlot (line 732) | struct E_AutoHookSlot
type E_AutoHookMap (line 738) | typedef struct E_AutoHookMap E_AutoHookMap;
type E_AutoHookMap (line 739) | struct E_AutoHookMap
type E_AutoHookParams (line 747) | typedef struct E_AutoHookParams E_AutoHookParams;
type E_AutoHookParams (line 748) | struct E_AutoHookParams
type U64 (line 758) | typedef U64 E_SpaceGenFunction(E_Space space);
type B32 (line 759) | typedef B32 E_SpaceRWFunction(E_Space space, void *out, Rng1U64 offset_r...
type E_BaseCtx (line 763) | typedef struct E_BaseCtx E_BaseCtx;
type E_BaseCtx (line 764) | struct E_BaseCtx
type E_IRCtx (line 791) | typedef struct E_IRCtx E_IRCtx;
type E_IRCtx (line 792) | struct E_IRCtx
type E_TypeCacheNode (line 807) | typedef struct E_TypeCacheNode E_TypeCacheNode;
type E_TypeCacheNode (line 808) | struct E_TypeCacheNode
type E_TypeCacheSlot (line 815) | typedef struct E_TypeCacheSlot E_TypeCacheSlot;
type E_TypeCacheSlot (line 816) | struct E_TypeCacheSlot
type E_MemberHashNode (line 824) | typedef struct E_MemberHashNode E_MemberHashNode;
type E_MemberHashNode (line 825) | struct E_MemberHashNode
type E_MemberHashSlot (line 831) | typedef struct E_MemberHashSlot E_MemberHashSlot;
type E_MemberHashSlot (line 832) | struct E_MemberHashSlot
type E_MemberFilterNode (line 838) | typedef struct E_MemberFilterNode E_MemberFilterNode;
type E_MemberFilterNode (line 839) | struct E_MemberFilterNode
type E_MemberFilterSlot (line 846) | typedef struct E_MemberFilterSlot E_MemberFilterSlot;
type E_MemberFilterSlot (line 847) | struct E_MemberFilterSlot
type E_MemberCacheNode (line 853) | typedef struct E_MemberCacheNode E_MemberCacheNode;
type E_MemberCacheNode (line 854) | struct E_MemberCacheNode
type E_MemberCacheSlot (line 865) | typedef struct E_MemberCacheSlot E_MemberCacheSlot;
type E_MemberCacheSlot (line 866) | struct E_MemberCacheSlot
type E_EnumValHashNode (line 874) | typedef struct E_EnumValHashNode E_EnumValHashNode;
type E_EnumValHashNode (line 875) | struct E_EnumValHashNode
type E_EnumValHashSlot (line 881) | typedef struct E_EnumValHashSlot E_EnumValHashSlot;
type E_EnumValHashSlot (line 882) | struct E_EnumValHashSlot
type E_EnumValFilterNode (line 888) | typedef struct E_EnumValFilterNode E_EnumValFilterNode;
type E_EnumValFilterNode (line 889) | struct E_EnumValFilterNode
type E_EnumValFilterSlot (line 896) | typedef struct E_EnumValFilterSlot E_EnumValFilterSlot;
type E_EnumValFilterSlot (line 897) | struct E_EnumValFilterSlot
type E_EnumValCacheNode (line 903) | typedef struct E_EnumValCacheNode E_EnumValCacheNode;
type E_EnumValCacheNode (line 904) | struct E_EnumValCacheNode
type E_EnumValCacheSlot (line 914) | typedef struct E_EnumValCacheSlot E_EnumValCacheSlot;
type E_EnumValCacheSlot (line 915) | struct E_EnumValCacheSlot
type E_UsedExprNode (line 923) | typedef struct E_UsedExprNode E_UsedExprNode;
type E_UsedExprNode (line 924) | struct E_UsedExprNode
type E_UsedExprSlot (line 931) | typedef struct E_UsedExprSlot E_UsedExprSlot;
type E_UsedExprSlot (line 932) | struct E_UsedExprSlot
type E_UsedExprMap (line 938) | typedef struct E_UsedExprMap E_UsedExprMap;
type E_UsedExprMap (line 939) | struct E_UsedExprMap
type E_TypeAutoHookCacheNode (line 947) | typedef struct E_TypeAutoHookCacheNode E_TypeAutoHookCacheNode;
type E_TypeAutoHookCacheNode (line 948) | struct E_TypeAutoHookCacheNode
type E_TypeAutoHookCacheSlot (line 955) | typedef struct E_TypeAutoHookCacheSlot E_TypeAutoHookCacheSlot;
type E_TypeAutoHookCacheSlot (line 956) | struct E_TypeAutoHookCacheSlot
type E_TypeAutoHookCacheMap (line 962) | typedef struct E_TypeAutoHookCacheMap E_TypeAutoHookCacheMap;
type E_TypeAutoHookCacheMap (line 963) | struct E_TypeAutoHookCacheMap
type E_StringIDNode (line 971) | typedef struct E_StringIDNode E_StringIDNode;
type E_StringIDNode (line 972) | struct E_StringIDNode
type E_StringIDSlot (line 980) | typedef struct E_StringIDSlot E_StringIDSlot;
type E_StringIDSlot (line 981) | struct E_StringIDSlot
type E_StringIDMap (line 987) | typedef struct E_StringIDMap E_StringIDMap;
type E_StringIDMap (line 988) | struct E_StringIDMap
type U32 (line 998) | typedef U32 E_CacheBundleFlags;
type E_CacheBundle (line 1007) | typedef struct E_CacheBundle E_CacheBundle;
type E_CacheBundle (line 1008) | struct E_CacheBundle
type E_CacheNode (line 1022) | typedef struct E_CacheNode E_CacheNode;
type E_CacheNode (line 1023) | struct E_CacheNode
type E_CacheLookup (line 1030) | typedef struct E_CacheLookup E_CacheLookup;
type E_CacheLookup (line 1031) | struct E_CacheLookup
type E_CacheSlot (line 1037) | typedef struct E_CacheSlot E_CacheSlot;
type E_CacheSlot (line 1038) | struct E_CacheSlot
type E_CacheParentNode (line 1046) | typedef struct E_CacheParentNode E_CacheParentNode;
type E_CacheParentNode (line 1047) | struct E_CacheParentNode
type E_Cache (line 1055) | typedef struct E_Cache E_Cache;
type E_Cache (line 1056) | struct E_Cache
FILE: src/eval/eval_interpret.c
function internal (line 7) | internal void
function internal (line 58) | internal U64
function internal (line 69) | internal B32
function internal (line 143) | internal B32
function internal (line 165) | internal E_Interpretation
FILE: src/eval/eval_interpret.h
type E_InterpretCtx (line 10) | typedef struct E_InterpretCtx E_InterpretCtx;
type E_InterpretCtx (line 11) | struct E_InterpretCtx
FILE: src/eval/eval_ir.c
function internal (line 9) | internal void
function internal (line 22) | internal void
function internal (line 32) | internal void
function internal (line 56) | internal void
function internal (line 67) | internal void
function internal (line 79) | internal void
function internal (line 94) | internal void
function internal (line 113) | internal E_IRNode *
function internal (line 122) | internal void
function internal (line 133) | internal E_IRNode *
function internal (line 148) | internal E_IRNode *
function internal (line 156) | internal E_IRNode *
function internal (line 165) | internal E_IRNode *
function internal (line 176) | internal E_IRNode *
function internal (line 183) | internal E_IRNode *
function internal (line 193) | internal E_IRNode *
function internal (line 201) | internal E_IRNode *
function internal (line 209) | internal E_IRNode *
function internal (line 219) | internal E_IRNode *
function internal (line 248) | internal E_IRNode *
function internal (line 257) | internal E_IRNode *
function internal (line 278) | internal E_IRNode *
function internal (line 300) | internal E_IRNode *
function internal (line 327) | internal B32
function internal (line 344) | internal void
function internal (line 354) | internal void
function E_TYPE_ACCESS_FUNCTION_DEF (line 371) | E_TYPE_ACCESS_FUNCTION_DEF(default)
function internal (line 596) | internal E_IRTreeAndType
function local_persist (line 2370) | local_persist struct
FILE: src/eval/eval_ir.h
type E_IdentifierResolutionPath (line 10) | typedef enum E_IdentifierResolutionPath
type E_IdentifierResolutionRule (line 26) | typedef struct E_IdentifierResolutionRule E_IdentifierResolutionRule;
type E_IdentifierResolutionRule (line 27) | struct E_IdentifierResolutionRule
type E_IRCacheNode (line 36) | typedef struct E_IRCacheNode E_IRCacheNode;
type E_IRCacheNode (line 37) | struct E_IRCacheNode
type E_IRCacheSlot (line 45) | typedef struct E_IRCacheSlot E_IRCacheSlot;
type E_IRCacheSlot (line 46) | struct E_IRCacheSlot
type E_IRState (line 52) | typedef struct E_IRState E_IRState;
type E_IRState (line 53) | struct E_IRState
FILE: src/eval/eval_parse.c
function internal (line 26) | internal E_Token
function internal (line 33) | internal void
function internal (line 50) | internal E_TokenArray
function internal (line 65) | internal E_TokenArray
function internal (line 292) | internal E_TokenArray
function internal (line 302) | internal E_Expr *
function internal (line 312) | internal void
function internal (line 318) | internal void
function internal (line 324) | internal void
function internal (line 330) | internal E_Expr *
function internal (line 338) | internal E_Expr *
function internal (line 413) | internal void
function internal (line 425) | internal void
function internal (line 516) | internal String8
function internal (line 528) | internal E_TypeKey
function internal (line 582) | internal E_TypeKey
function internal (line 610) | internal E_TypeKey
function internal (line 642) | internal E_Parse
function internal (line 733) | internal E_Parse
function internal (line 1545) | internal E_Parse
FILE: src/eval/eval_types.c
function internal (line 7) | internal E_TypeKind
function internal (line 38) | internal E_TypeKind
function internal (line 103) | internal E_MemberKind
function internal (line 123) | internal RDI_EvalTypeGroup
function internal (line 167) | internal B32
function internal (line 174) | internal B32
function internal (line 182) | internal B32
function internal (line 190) | internal B32
function internal (line 200) | internal void
function internal (line 209) | internal E_MemberArray
function internal (line 228) | internal void
function internal (line 237) | internal E_EnumValArray
function internal (line 258) | internal E_TypeKey
function internal (line 265) | internal E_TypeKey
function internal (line 273) | internal E_TypeKey
function internal (line 290) | internal E_TypeKey
function internal (line 299) | internal E_TypeKey
function internal (line 310) | internal U64
function internal (line 330) | internal B32
function internal (line 369) | internal E_TypeKey
function internal (line 463) | internal E_TypeKey
function internal (line 470) | internal E_TypeKey
function internal (line 477) | internal E_TypeKey
function internal (line 484) | internal E_TypeKey
function internal (line 491) | internal E_TypeKey
function internal (line 498) | internal E_TypeKey
function internal (line 545) | internal E_TypeKey
function internal (line 552) | internal E_TypeKey
function internal (line 561) | internal B32
function internal (line 570) | internal U64
function internal (line 617) | internal E_TypeKind
function internal (line 633) | internal U64
function internal (line 678) | internal E_Type *
function internal (line 1261) | internal int
function internal (line 1284) | internal E_MemberArray
function internal (line 1429) | internal E_TypeExpandRule *
function internal (line 1455) | internal E_TypeKey
function internal (line 1472) | internal E_TypeKey
function internal (line 1489) | internal E_TypeKey
function internal (line 1505) | internal E_TypeKey
function internal (line 1547) | internal B32
function internal (line 1661) | internal void
function internal (line 1819) | internal void
function internal (line 1899) | internal String8
function internal (line 1912) | internal E_TypeKey
function internal (line 2014) | internal E_Type *
function internal (line 2044) | internal E_MemberCacheNode *
function internal (line 2081) | internal E_MemberArray
function internal (line 2130) | internal E_MemberArray
function internal (line 2142) | internal E_Member
function internal (line 2165) | internal E_EnumValCacheNode *
function internal (line 2205) | internal E_EnumValArray
function internal (line 2263) | internal E_EnumValArray
function internal (line 2270) | internal E_EnumVal
function E_TYPE_EXPAND_INFO_FUNCTION_DEF (line 2301) | E_TYPE_EXPAND_INFO_FUNCTION_DEF(default)
function E_TYPE_EXPAND_RANGE_FUNCTION_DEF (line 2354) | E_TYPE_EXPAND_RANGE_FUNCTION_DEF(default)
function E_TYPE_EXPAND_ID_FROM_NUM_FUNCTION_DEF (line 2422) | E_TYPE_EXPAND_ID_FROM_NUM_FUNCTION_DEF(identity)
function E_TYPE_EXPAND_NUM_FROM_ID_FUNCTION_DEF (line 2427) | E_TYPE_EXPAND_NUM_FROM_ID_FUNCTION_DEF(identity)
type E_RowsAccel (line 2435) | typedef struct E_RowsAccel E_RowsAccel;
type E_RowsAccel (line 2436) | struct E_RowsAccel
function E_TYPE_EXPAND_INFO_FUNCTION_DEF (line 2442) | E_TYPE_EXPAND_INFO_FUNCTION_DEF(rows)
function E_TYPE_EXPAND_RANGE_FUNCTION_DEF (line 2460) | E_TYPE_EXPAND_RANGE_FUNCTION_DEF(rows)
function E_TYPE_EXPAND_INFO_FUNCTION_DEF (line 2473) | E_TYPE_EXPAND_INFO_FUNCTION_DEF(omit)
function E_TYPE_EXPAND_RANGE_FUNCTION_DEF (line 2523) | E_TYPE_EXPAND_RANGE_FUNCTION_DEF(omit)
function E_TYPE_EXPAND_INFO_FUNCTION_DEF (line 2540) | E_TYPE_EXPAND_INFO_FUNCTION_DEF(sequence)
function E_TYPE_EXPAND_RANGE_FUNCTION_DEF (line 2546) | E_TYPE_EXPAND_RANGE_FUNCTION_DEF(sequence)
function E_TYPE_EXPAND_INFO_FUNCTION_DEF (line 2558) | E_TYPE_EXPAND_INFO_FUNCTION_DEF(array)
function E_TYPE_EXPAND_RANGE_FUNCTION_DEF (line 2572) | E_TYPE_EXPAND_RANGE_FUNCTION_DEF(array)
function internal (line 2584) | internal AC_Artifact
function internal (line 2724) | internal void
type E_ListIRExt (line 2734) | typedef struct E_ListIRExt E_ListIRExt;
type E_ListIRExt (line 2735) | struct E_ListIRExt
function E_TYPE_IREXT_FUNCTION_DEF (line 2741) | E_TYPE_IREXT_FUNCTION_DEF(list)
function E_TYPE_EXPAND_INFO_FUNC
Copy disabled (too large)
Download .json
Condensed preview — 490 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (18,618K chars).
[
{
"path": ".gitattributes",
"chars": 22,
"preview": "*.sh text=auto eol=lf\n"
},
{
"path": ".github/workflows/builds.yml",
"chars": 1562,
"preview": "name: builds\r\n\r\non:\r\n push:\r\n paths-ignore:\r\n - '**.md'\r\n pull_request:\r\n paths-ignore:\r\n - '**.md'\r\n\r"
},
{
"path": ".gitignore",
"chars": 22,
"preview": "/build/\r\n/local/\r\n*~\r\n"
},
{
"path": "CHANGELOG.md",
"chars": 7483,
"preview": "# v0.9.24-alpha\n\n## Debugger Changes\n\n- Added the ability for the debugger to load, use, and evaluate using debug\n info"
},
{
"path": "LICENSE",
"chars": 1074,
"preview": "Copyright (c) Epic Games Tools\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a copy of\r\nthis "
},
{
"path": "README.md",
"chars": 21977,
"preview": "# The RAD Debugger Project\r\n\r\n_**NOTE:** This README does not document usage instructions and tips for the\r\ndebugger its"
},
{
"path": "build.bat",
"chars": 11160,
"preview": "@echo off\r\nsetlocal enabledelayedexpansion\r\ncd /D \"%~dp0\"\r\n:restart\r\n\r\n:: --- Usage Notes (2024/1/10) ------------------"
},
{
"path": "build.sh",
"chars": 4443,
"preview": "#!/bin/bash\nset -eu\ncd \"$(dirname \"$0\")\"\n\n# --- Unpack Arguments -------------------------------------------------------"
},
{
"path": "data/logo.rc",
"chars": 29,
"preview": "1 ICON DISCARDABLE \"logo.ico\""
},
{
"path": "project.4coder",
"chars": 7500,
"preview": "version(2);\r\nproject_name = \"The RAD Debugger\";\r\n\r\nindent_width = \"2\";\r\ndefault_tab_width = \"2\";\r\n\r\npatterns =\r\n{\r\n \"*."
},
{
"path": "run_tests.bat",
"chars": 704,
"preview": "@echo off\r\nsetlocal\r\ncd /D \"%~dp0\"\r\n\r\necho --- getting test data folder path -------------------------------------------"
},
{
"path": "src/artifact_cache/artifact_cache.c",
"chars": 21521,
"preview": "// Copyright (c) Epic Games Tools\r\n// Licensed under the MIT license (https://opensource.org/license/mit/)\r\n\r\n//////////"
},
{
"path": "src/artifact_cache/artifact_cache.h",
"chars": 3576,
"preview": "// Copyright (c) Epic Games Tools\r\n// Licensed under the MIT license (https://opensource.org/license/mit/)\r\n\r\n#ifndef AR"
},
{
"path": "src/base/base_arena.c",
"chars": 7005,
"preview": "// Copyright (c) Epic Games Tools\r\n// Licensed under the MIT license (https://opensource.org/license/mit/)\r\n\r\n//////////"
},
{
"path": "src/base/base_arena.h",
"chars": 2561,
"preview": "// Copyright (c) Epic Games Tools\r\n// Licensed under the MIT license (https://opensource.org/license/mit/)\r\n\r\n#ifndef BA"
},
{
"path": "src/base/base_command_line.c",
"chars": 6689,
"preview": "// Copyright (c) Epic Games Tools\r\n// Licensed under the MIT license (https://opensource.org/license/mit/)\r\n\r\n//////////"
},
{
"path": "src/base/base_command_line.h",
"chars": 1774,
"preview": "// Copyright (c) Epic Games Tools\r\n// Licensed under the MIT license (https://opensource.org/license/mit/)\r\n\r\n#ifndef BA"
},
{
"path": "src/base/base_context_cracking.h",
"chars": 5951,
"preview": "// Copyright (c) Epic Games Tools\r\n// Licensed under the MIT license (https://opensource.org/license/mit/)\r\n\r\n#ifndef BA"
},
{
"path": "src/base/base_core.c",
"chars": 14781,
"preview": "// Copyright (c) Epic Games Tools\r\n// Licensed under the MIT license (https://opensource.org/license/mit/)\r\n\r\n//////////"
},
{
"path": "src/base/base_core.h",
"chars": 32193,
"preview": "// Copyright (c) Epic Games Tools\r\n// Licensed under the MIT license (https://opensource.org/license/mit/)\r\n\r\n#ifndef BA"
},
{
"path": "src/base/base_entry_point.c",
"chars": 6349,
"preview": "// Copyright (c) Epic Games Tools\r\n// Licensed under the MIT license (https://opensource.org/license/mit/)\r\n\r\nglobal U64"
},
{
"path": "src/base/base_entry_point.h",
"chars": 488,
"preview": "// Copyright (c) Epic Games Tools\r\n// Licensed under the MIT license (https://opensource.org/license/mit/)\r\n\r\n#ifndef BA"
},
{
"path": "src/base/base_hash.c",
"chars": 981,
"preview": "// Copyright (c) Epic Games Tools\n// Licensed under the MIT license (https://opensource.org/license/mit/)\n\n/////////////"
},
{
"path": "src/base/base_hash.h",
"chars": 756,
"preview": "// Copyright (c) Epic Games Tools\n// Licensed under the MIT license (https://opensource.org/license/mit/)\n\n#ifndef BASE_"
},
{
"path": "src/base/base_inc.c",
"chars": 572,
"preview": "// Copyright (c) Epic Games Tools\r\n// Licensed under the MIT license (https://opensource.org/license/mit/)\r\n\r\n//////////"
},
{
"path": "src/base/base_inc.h",
"chars": 622,
"preview": "// Copyright (c) Epic Games Tools\r\n// Licensed under the MIT license (https://opensource.org/license/mit/)\r\n\r\n#ifndef BA"
},
{
"path": "src/base/base_log.c",
"chars": 2355,
"preview": "// Copyright (c) Epic Games Tools\r\n// Licensed under the MIT license (https://opensource.org/license/mit/)\r\n\r\n//////////"
},
{
"path": "src/base/base_log.h",
"chars": 1648,
"preview": "// Copyright (c) Epic Games Tools\r\n// Licensed under the MIT license (https://opensource.org/license/mit/)\r\n\r\n#ifndef BA"
},
{
"path": "src/base/base_markup.c",
"chars": 507,
"preview": "// Copyright (c) Epic Games Tools\r\n// Licensed under the MIT license (https://opensource.org/license/mit/)\r\n\r\ninternal v"
},
{
"path": "src/base/base_markup.h",
"chars": 636,
"preview": "// Copyright (c) Epic Games Tools\r\n// Licensed under the MIT license (https://opensource.org/license/mit/)\r\n\r\n#ifndef BA"
},
{
"path": "src/base/base_math.c",
"chars": 38901,
"preview": "// Copyright (c) Epic Games Tools\r\n// Licensed under the MIT license (https://opensource.org/license/mit/)\r\n\r\n//////////"
},
{
"path": "src/base/base_math.h",
"chars": 17715,
"preview": "// Copyright (c) Epic Games Tools\n// Licensed under the MIT license (https://opensource.org/license/mit/)\n\n#ifndef BASE_"
},
{
"path": "src/base/base_meta.c",
"chars": 16314,
"preview": "// Copyright (c) Epic Games Tools\r\n// Licensed under the MIT license (https://opensource.org/license/mit/)\r\n\r\n//////////"
},
{
"path": "src/base/base_meta.h",
"chars": 9167,
"preview": "// Copyright (c) Epic Games Tools\r\n// Licensed under the MIT license (https://opensource.org/license/mit/)\r\n\r\n#ifndef BA"
},
{
"path": "src/base/base_profile.c",
"chars": 883,
"preview": "// Copyright (c) Epic Games Tools\r\n// Licensed under the MIT license (https://opensource.org/license/mit/)\r\n\r\n#if PROFIL"
},
{
"path": "src/base/base_profile.h",
"chars": 5600,
"preview": "// Copyright (c) Epic Games Tools\r\n// Licensed under the MIT license (https://opensource.org/license/mit/)\r\n\r\n#ifndef BA"
},
{
"path": "src/base/base_strings.c",
"chars": 74473,
"preview": "// Copyright (c) Epic Games Tools\r\n// Licensed under the MIT license (https://opensource.org/license/mit/)\r\n\r\n//////////"
},
{
"path": "src/base/base_strings.h",
"chars": 17634,
"preview": "// Copyright (c) Epic Games Tools\r\n// Licensed under the MIT license (https://opensource.org/license/mit/)\r\n\r\n#ifndef BA"
},
{
"path": "src/base/base_thread_context.c",
"chars": 5697,
"preview": "// Copyright (c) Epic Games Tools\r\n// Licensed under the MIT license (https://opensource.org/license/mit/)\r\n\r\n//////////"
},
{
"path": "src/base/base_thread_context.h",
"chars": 4088,
"preview": "// Copyright (c) Epic Games Tools\r\n// Licensed under the MIT license (https://opensource.org/license/mit/)\r\n\r\n#ifndef BA"
},
{
"path": "src/base/base_threads.c",
"chars": 4117,
"preview": "// Copyright (c) Epic Games Tools\r\n// Licensed under the MIT license (https://opensource.org/license/mit/)\r\n\r\n//////////"
},
{
"path": "src/base/base_threads.h",
"chars": 4104,
"preview": "// Copyright (c) Epic Games Tools\r\n// Licensed under the MIT license (https://opensource.org/license/mit/)\r\n\r\n#ifndef BA"
},
{
"path": "src/codeview/codeview.c",
"chars": 38459,
"preview": "// Copyright (c) Epic Games Tools\r\n// Licensed under the MIT license (https://opensource.org/license/mit/)\r\n\r\n//////////"
},
{
"path": "src/codeview/codeview.h",
"chars": 83898,
"preview": "// Copyright (c) Epic Games Tools\r\n// Licensed under the MIT license (https://opensource.org/license/mit/)\r\n\r\n#ifndef CO"
},
{
"path": "src/codeview/codeview.mdesk",
"chars": 35817,
"preview": "////////////////////////////////\r\n//~ rjf: CV Numerics\r\n\r\n@table(name val)\r\nCV_NumericKindTable:\r\n{\r\n {CHAR 0"
},
{
"path": "src/codeview/codeview_dump.c",
"chars": 1440,
"preview": "// Copyright (c) Epic Games Tools\n// Licensed under the MIT license (https://opensource.org/license/mit/)\n\ninternal Stri"
},
{
"path": "src/codeview/codeview_dump.h",
"chars": 260,
"preview": "// Copyright (c) Epic Games Tools\n// Licensed under the MIT license (https://opensource.org/license/mit/)\n\n#ifndef CODEV"
},
{
"path": "src/codeview/codeview_parse.c",
"chars": 58151,
"preview": "// Copyright (c) Epic Games Tools\n// Licensed under the MIT license (https://opensource.org/license/mit/)\n\n//- Hasher\n\ni"
},
{
"path": "src/codeview/codeview_parse.h",
"chars": 8952,
"preview": "// Copyright (c) Epic Games Tools\n// Licensed under the MIT license (https://opensource.org/license/mit/)\n\n#ifndef CODEV"
},
{
"path": "src/codeview/generated/codeview.meta.c",
"chars": 43230,
"preview": "// Copyright (c) Epic Games Tools\r\n// Licensed under the MIT license (https://opensource.org/license/mit/)\r\n\r\n//- GENERA"
},
{
"path": "src/codeview/generated/codeview.meta.h",
"chars": 16259,
"preview": "// Copyright (c) Epic Games Tools\r\n// Licensed under the MIT license (https://opensource.org/license/mit/)\r\n\r\n//- GENERA"
},
{
"path": "src/coff/coff.c",
"chars": 34690,
"preview": "// Copyright (c) Epic Games Tools\r\n// Licensed under the MIT license (https://opensource.org/license/mit/)\r\n\r\ninternal U"
},
{
"path": "src/coff/coff.h",
"chars": 23136,
"preview": "// Copyright (c) Epic Games Tools\n// Licensed under the MIT license (https://opensource.org/license/mit/)\n\n#ifndef COFF_"
},
{
"path": "src/coff/coff_dump.c",
"chars": 33427,
"preview": "// Copyright (c) Epic Games Tools\n// Licensed under the MIT license (https://opensource.org/license/mit/)\n\n#if 0\ninterna"
},
{
"path": "src/coff/coff_dump.h",
"chars": 2186,
"preview": "// Copyright (c) Epic Games Tools\n// Licensed under the MIT license (https://opensource.org/license/mit/)\n\n#ifndef COFF_"
},
{
"path": "src/coff/coff_enum.c",
"chars": 1,
"preview": "\n"
},
{
"path": "src/coff/coff_inc.c",
"chars": 187,
"preview": "// Copyright (c) Epic Games Tools\n// Licensed under the MIT license (https://opensource.org/license/mit/)\n\n#include \"cof"
},
{
"path": "src/coff/coff_inc.h",
"chars": 248,
"preview": "// Copyright (c) Epic Games Tools\n// Licensed under the MIT license (https://opensource.org/license/mit/)\n\n#ifndef COFF_"
},
{
"path": "src/coff/coff_lib_writer.c",
"chars": 16326,
"preview": "// Copyright (c) Epic Games Tools\n// Licensed under the MIT license (https://opensource.org/license/mit/)\n\ninternal COFF"
},
{
"path": "src/coff/coff_lib_writer.h",
"chars": 2614,
"preview": "// Copyright (c) Epic Games Tools\n// Licensed under the MIT license (https://opensource.org/license/mit/)\n\n#ifndef COFF_"
},
{
"path": "src/coff/coff_obj_writer.c",
"chars": 18513,
"preview": "internal COFF_ObjWriter*\ncoff_obj_writer_alloc(COFF_TimeStamp time_stamp, COFF_MachineType machine)\n{\n Arena *arena = a"
},
{
"path": "src/coff/coff_obj_writer.h",
"chars": 5228,
"preview": "#ifndef COFF_OBJ_WRITER_H\n#define COFF_OBJ_WRITER_H\n\ntypedef enum\n{\n COFF_SymbolLocation_Null,\n COFF_SymbolLocation_Se"
},
{
"path": "src/coff/coff_parse.c",
"chars": 36856,
"preview": "// Copyright (c) Epic Games Tools\r\n// Licensed under the MIT license (https://opensource.org/license/mit/)\r\n\r\ninternal B"
},
{
"path": "src/coff/coff_parse.h",
"chars": 11695,
"preview": "// Copyright (c) Epic Games Tools\r\n// Licensed under the MIT license (https://opensource.org/license/mit/)\r\n\r\n#ifndef CO"
},
{
"path": "src/config/config_bindings.c",
"chars": 4217,
"preview": "// Copyright (c) Epic Games Tools\r\n// Licensed under the MIT license (https://opensource.org/license/mit/)\r\n\r\ninternal C"
},
{
"path": "src/config/config_bindings.h",
"chars": 1450,
"preview": "// Copyright (c) Epic Games Tools\r\n// Licensed under the MIT license (https://opensource.org/license/mit/)\r\n\r\n#ifndef CO"
},
{
"path": "src/config/config_core.c",
"chars": 25709,
"preview": "// Copyright (c) Epic Games Tools\r\n// Licensed under the MIT license (https://opensource.org/license/mit/)\r\n\r\n//////////"
},
{
"path": "src/config/config_core.h",
"chars": 6720,
"preview": "// Copyright (c) Epic Games Tools\r\n// Licensed under the MIT license (https://opensource.org/license/mit/)\r\n\r\n#ifndef CO"
},
{
"path": "src/config/config_inc.c",
"chars": 226,
"preview": "// Copyright (c) Epic Games Tools\r\n// Licensed under the MIT license (https://opensource.org/license/mit/)\r\n\r\n#include \""
},
{
"path": "src/config/config_inc.h",
"chars": 298,
"preview": "// Copyright (c) Epic Games Tools\r\n// Licensed under the MIT license (https://opensource.org/license/mit/)\r\n\r\n#ifndef CO"
},
{
"path": "src/config/config_panels.c",
"chars": 7237,
"preview": "// Copyright (c) Epic Games Tools\r\n// Licensed under the MIT license (https://opensource.org/license/mit/)\r\n\r\ninternal C"
},
{
"path": "src/config/config_panels.h",
"chars": 2095,
"preview": "// Copyright (c) Epic Games Tools\r\n// Licensed under the MIT license (https://opensource.org/license/mit/)\r\n\r\n#ifndef CO"
},
{
"path": "src/content/content.c",
"chars": 16340,
"preview": "// Copyright (c) Epic Games Tools\r\n// Licensed under the MIT license (https://opensource.org/license/mit/)\r\n\r\n#undef LAY"
},
{
"path": "src/content/content.h",
"chars": 6223,
"preview": "// Copyright (c) Epic Games Tools\r\n// Licensed under the MIT license (https://opensource.org/license/mit/)\r\n\r\n#ifndef CO"
},
{
"path": "src/ctrl/ctrl.mdesk",
"chars": 12617,
"preview": "// Copyright (c) Epic Games Tools\r\n// Licensed under the MIT license (https://opensource.org/license/mit/)\r\n\r\n//////////"
},
{
"path": "src/ctrl/ctrl_core.c",
"chars": 267506,
"preview": "// Copyright (c) Epic Games Tools\r\n// Licensed under the MIT license (https://opensource.org/license/mit/)\r\n\r\n//////////"
},
{
"path": "src/ctrl/ctrl_core.h",
"chars": 32063,
"preview": "// Copyright (c) Epic Games Tools\r\n// Licensed under the MIT license (https://opensource.org/license/mit/)\r\n\r\n#ifndef CT"
},
{
"path": "src/ctrl/ctrl_inc.c",
"chars": 188,
"preview": "// Copyright (c) Epic Games Tools\r\n// Licensed under the MIT license (https://opensource.org/license/mit/)\r\n\r\n#undef LAY"
},
{
"path": "src/ctrl/ctrl_inc.h",
"chars": 4636,
"preview": "// Copyright (c) Epic Games Tools\r\n// Licensed under the MIT license (https://opensource.org/license/mit/)\r\n\r\n#ifndef CT"
},
{
"path": "src/ctrl/generated/ctrl.meta.c",
"chars": 5537,
"preview": "// Copyright (c) Epic Games Tools\r\n// Licensed under the MIT license (https://opensource.org/license/mit/)\r\n\r\n//- GENERA"
},
{
"path": "src/ctrl/generated/ctrl.meta.h",
"chars": 3030,
"preview": "// Copyright (c) Epic Games Tools\r\n// Licensed under the MIT license (https://opensource.org/license/mit/)\r\n\r\n//- GENERA"
},
{
"path": "src/dbg_engine/dbg_engine.mdesk",
"chars": 22996,
"preview": "// Copyright (c) Epic Games Tools\r\n// Licensed under the MIT license (https://opensource.org/license/mit/)\r\n\r\n//////////"
},
{
"path": "src/dbg_engine/dbg_engine_core.c",
"chars": 83952,
"preview": "// Copyright (c) Epic Games Tools\r\n// Licensed under the MIT license (https://opensource.org/license/mit/)\r\n\r\n#undef LAY"
},
{
"path": "src/dbg_engine/dbg_engine_core.h",
"chars": 10685,
"preview": "// Copyright (c) Epic Games Tools\r\n// Licensed under the MIT license (https://opensource.org/license/mit/)\r\n\r\n#ifndef DB"
},
{
"path": "src/dbg_engine/dbg_engine_inc.c",
"chars": 136,
"preview": "// Copyright (c) Epic Games Tools\n// Licensed under the MIT license (https://opensource.org/license/mit/)\n\n#include \"dbg"
},
{
"path": "src/dbg_engine/dbg_engine_inc.h",
"chars": 224,
"preview": "// Copyright (c) Epic Games Tools\r\n// Licensed under the MIT license (https://opensource.org/license/mit/)\r\n\r\n#ifndef DB"
},
{
"path": "src/dbg_engine/generated/dbg_engine.meta.c",
"chars": 132,
"preview": "// Copyright (c) Epic Games Tools\r\n// Licensed under the MIT license (https://opensource.org/license/mit/)\r\n\r\n//- GENERA"
},
{
"path": "src/dbg_engine/generated/dbg_engine.meta.h",
"chars": 2060,
"preview": "// Copyright (c) Epic Games Tools\r\n// Licensed under the MIT license (https://opensource.org/license/mit/)\r\n\r\n//- GENERA"
},
{
"path": "src/dbg_info/dbg_info.c",
"chars": 56928,
"preview": "// Copyright (c) Epic Games Tools\r\n// Licensed under the MIT license (https://opensource.org/license/mit/)\r\n\r\n//////////"
},
{
"path": "src/dbg_info/dbg_info.h",
"chars": 8061,
"preview": "// Copyright (c) Epic Games Tools\r\n// Licensed under the MIT license (https://opensource.org/license/mit/)\r\n\r\n#ifndef DB"
},
{
"path": "src/demon/demon_core.c",
"chars": 5776,
"preview": "// Copyright (c) Epic Games Tools\r\n// Licensed under the MIT license (https://opensource.org/license/mit/)\r\n\r\n//////////"
},
{
"path": "src/demon/demon_core.h",
"chars": 8130,
"preview": "// Copyright (c) Epic Games Tools\r\n// Licensed under the MIT license (https://opensource.org/license/mit/)\r\n\r\n#ifndef DE"
},
{
"path": "src/demon/demon_core.mdesk",
"chars": 1452,
"preview": "////////////////////////////////\r\n//~ rjf: Event Kind Tables\r\n\r\n@table(name)\r\nDMN_EventKindTable:\r\n{\r\n {Null}\r\n {Error"
},
{
"path": "src/demon/demon_inc.c",
"chars": 346,
"preview": "// Copyright (c) Epic Games Tools\r\n// Licensed under the MIT license (https://opensource.org/license/mit/)\r\n\r\n#include \""
},
{
"path": "src/demon/demon_inc.h",
"chars": 415,
"preview": "// Copyright (c) Epic Games Tools\r\n// Licensed under the MIT license (https://opensource.org/license/mit/)\r\n\r\n#ifndef DE"
},
{
"path": "src/demon/generated/demon.meta.c",
"chars": 1059,
"preview": "// Copyright (c) Epic Games Tools\r\n// Licensed under the MIT license (https://opensource.org/license/mit/)\r\n\r\n//- GENERA"
},
{
"path": "src/demon/generated/demon.meta.h",
"chars": 1649,
"preview": "// Copyright (c) Epic Games Tools\r\n// Licensed under the MIT license (https://opensource.org/license/mit/)\r\n\r\n//- GENERA"
},
{
"path": "src/demon/linux/demon_core_linux.c",
"chars": 92813,
"preview": "// Copyright (c) Epic Games Tools\r\n// Licensed under the MIT license (https://opensource.org/license/mit/)\r\n\r\n//////////"
},
{
"path": "src/demon/linux/demon_core_linux.h",
"chars": 8993,
"preview": "// Copyright (c) Epic Games Tools\r\n// Licensed under the MIT license (https://opensource.org/license/mit/)\r\n\r\n#ifndef DE"
},
{
"path": "src/demon/linux/demon_os_linux.c",
"chars": 66161,
"preview": "// Copyright (c) Epic Games Tools\r\n// Licensed under the MIT license (https://opensource.org/license/mit/)\r\n\r\n// TODO(al"
},
{
"path": "src/demon/linux/demon_os_linux.h",
"chars": 5550,
"preview": "// Copyright (c) Epic Games Tools\r\n// Licensed under the MIT license (https://opensource.org/license/mit/)\r\n\r\n#ifndef DE"
},
{
"path": "src/demon/win32/demon_core_win32.c",
"chars": 115474,
"preview": "// Copyright (c) Epic Games Tools\r\n// Licensed under the MIT license (https://opensource.org/license/mit/)\r\n\r\n//////////"
},
{
"path": "src/demon/win32/demon_core_win32.h",
"chars": 15181,
"preview": "// Copyright (c) Epic Games Tools\r\n// Licensed under the MIT license (https://opensource.org/license/mit/)\r\n\r\n#ifndef DE"
},
{
"path": "src/disasm/disasm.c",
"chars": 20960,
"preview": "// Copyright (c) Epic Games Tools\r\n// Licensed under the MIT license (https://opensource.org/license/mit/)\r\n\r\n#undef LAY"
},
{
"path": "src/disasm/disasm.h",
"chars": 5137,
"preview": "// Copyright (c) Epic Games Tools\r\n// Licensed under the MIT license (https://opensource.org/license/mit/)\r\n\r\n#ifndef DI"
},
{
"path": "src/draw/draw.c",
"chars": 24202,
"preview": "// Copyright (c) Epic Games Tools\r\n// Licensed under the MIT license (https://opensource.org/license/mit/)\r\n\r\n//////////"
},
{
"path": "src/draw/draw.h",
"chars": 6652,
"preview": "// Copyright (c) Epic Games Tools\r\n// Licensed under the MIT license (https://opensource.org/license/mit/)\r\n\r\n#ifndef DR"
},
{
"path": "src/draw/draw.mdesk",
"chars": 2184,
"preview": "// Copyright (c) Epic Games Tools\r\n// Licensed under the MIT license (https://opensource.org/license/mit/)\r\n\r\n@table(nam"
},
{
"path": "src/draw/generated/draw.meta.c",
"chars": 1554,
"preview": "// Copyright (c) Epic Games Tools\r\n// Licensed under the MIT license (https://opensource.org/license/mit/)\r\n\r\n//- GENERA"
},
{
"path": "src/draw/generated/draw.meta.h",
"chars": 2554,
"preview": "// Copyright (c) Epic Games Tools\r\n// Licensed under the MIT license (https://opensource.org/license/mit/)\r\n\r\n//- GENERA"
},
{
"path": "src/dwarf/dwarf.c",
"chars": 19646,
"preview": "// Copyright (c) Epic Games Tools\n// Licensed under the MIT license (https://opensource.org/license/mit/)\n\ninternal U64\n"
},
{
"path": "src/dwarf/dwarf.h",
"chars": 90139,
"preview": "// Copyright (c) Epic Games Tools\n// Licensed under the MIT license (https://opensource.org/license/mit/)\n\n#ifndef DWARF"
},
{
"path": "src/dwarf/dwarf_coff.c",
"chars": 2080,
"preview": "// Copyright (c) Epic Games Tools\n// Licensed under the MIT license (https://opensource.org/license/mit/)\n\ninternal B32\n"
},
{
"path": "src/dwarf/dwarf_coff.h",
"chars": 465,
"preview": "// Copyright (c) Epic Games Tools\n// Licensed under the MIT license (https://opensource.org/license/mit/)\n\n#ifndef DWARF"
},
{
"path": "src/dwarf/dwarf_dump.c",
"chars": 97139,
"preview": "// Copyright (c) Epic Games Tools\n// Licensed under the MIT license (https://opensource.org/license/mit/)\n\n/////////////"
},
{
"path": "src/dwarf/dwarf_dump.h",
"chars": 4646,
"preview": "// Copyright (c) Epic Games Tools\n// Licensed under the MIT license (https://opensource.org/license/mit/)\n\n#ifndef DWARF"
},
{
"path": "src/dwarf/dwarf_elf.c",
"chars": 3863,
"preview": "// Copyright (c) Epic Games Tools\n// Licensed under the MIT license (https://opensource.org/license/mit/)\n\ninternal B32\n"
},
{
"path": "src/dwarf/dwarf_elf.h",
"chars": 339,
"preview": "// Copyright (c) Epic Games Tools\n// Licensed under the MIT license (https://opensource.org/license/mit/)\n\n#ifndef DWARF"
},
{
"path": "src/dwarf/dwarf_expr.c",
"chars": 47634,
"preview": "// Copyright (c) Epic Games Tools\n// Licensed under the MIT license (https://opensource.org/license/mit/)\n\n//- analyzers"
},
{
"path": "src/dwarf/dwarf_expr.h",
"chars": 9654,
"preview": "// Copyright (c) Epic Games Tools\n// Licensed under the MIT license (https://opensource.org/license/mit/)\n\n#ifndef DWARF"
},
{
"path": "src/dwarf/dwarf_help.c",
"chars": 2377,
"preview": "// Copyright (c) Epic Games Tools\n// Licensed under the MIT license (https://opensource.org/license/mit/)\n\ninternal DW_C"
},
{
"path": "src/dwarf/dwarf_help.h",
"chars": 408,
"preview": "// Copyright (c) Epic Games Tools\n// Licensed under the MIT license (https://opensource.org/license/mit/)\n\n#ifndef DWARF"
},
{
"path": "src/dwarf/dwarf_inc.c",
"chars": 399,
"preview": "// Copyright (c) Epic Games Tools\n// Licensed under the MIT license (https://opensource.org/license/mit/)\n\n#include \"dwa"
},
{
"path": "src/dwarf/dwarf_inc.h",
"chars": 463,
"preview": "// Copyright (c) Epic Games Tools\n// Licensed under the MIT license (https://opensource.org/license/mit/)\n\n#ifndef DWARF"
},
{
"path": "src/dwarf/dwarf_notes.txt",
"chars": 2217,
"preview": "--- DWARF NOTES ---------------------------------------------------------------\n\nDWARF V4 Spec: http://www.dwarfstd.org/"
},
{
"path": "src/dwarf/dwarf_parse.c",
"chars": 132358,
"preview": "// Copyright (c) Epic Games Tools\n// Licensed under the MIT license (https://opensource.org/license/mit/)\n\ninternal U64\n"
},
{
"path": "src/dwarf/dwarf_parse.h",
"chars": 19548,
"preview": "// Copyright (c) Epic Games Tools\n// Licensed under the MIT license (https://opensource.org/license/mit/)\n\n#ifndef DWARF"
},
{
"path": "src/dwarf/dwarf_unwind.c",
"chars": 11069,
"preview": "// Copyright (c) Epic Games Tools\n// Licensed under the MIT license (https://opensource.org/license/mit/)\n\ninternal DW_C"
},
{
"path": "src/dwarf/dwarf_unwind.h",
"chars": 2651,
"preview": "// Copyright (c) Epic Games Tools\n// Licensed under the MIT license (https://opensource.org/license/mit/)\n\n#ifndef DWARF"
},
{
"path": "src/dwarf/eh_dump.c",
"chars": 6126,
"preview": "// Copyright (c) Epic Games Tools\n// Licensed under the MIT license (https://opensource.org/license/mit/)\n\ninternal Stri"
},
{
"path": "src/dwarf/eh_dump.h",
"chars": 1290,
"preview": "// Copyright (c) Epic Games Tools\n// Licensed under the MIT license (https://opensource.org/license/mit/)\n\n#ifndef EH_FR"
},
{
"path": "src/dwarf/eh_frame.c",
"chars": 16759,
"preview": "// Copyright (c) Epic Games Tools\n// Licensed under the MIT license (https://opensource.org/license/mit/)\n\ninternal U64\n"
},
{
"path": "src/dwarf/eh_frame.h",
"chars": 3871,
"preview": "// Copyright (c) Epic Games Tools\n// Licensed under the MIT license (https://opensource.org/license/mit/)\n\n#ifndef EH_FR"
},
{
"path": "src/elf/elf.c",
"chars": 4609,
"preview": "// Copyright (c) Epic Games Tools\n// Licensed under the MIT license (https://opensource.org/license/mit/)\n\n/////////////"
},
{
"path": "src/elf/elf.h",
"chars": 23763,
"preview": "// Copyright (c) Epic Games Tools\n// Licensed under the MIT license (https://opensource.org/license/mit/)\n\n#ifndef ELF_H"
},
{
"path": "src/elf/elf_dump.c",
"chars": 8769,
"preview": "// Copyright (c) Epic Games Tools\r\n// Licensed under the MIT license (https://opensource.org/license/mit/)\r\n\r\ninternal S"
},
{
"path": "src/elf/elf_dump.h",
"chars": 673,
"preview": "// Copyright (c) Epic Games Tools\r\n// Licensed under the MIT license (https://opensource.org/license/mit/)\r\n\r\n#ifndef EL"
},
{
"path": "src/elf/elf_parse.c",
"chars": 6477,
"preview": "// Copyright (c) Epic Games Tools\n// Licensed under the MIT license (https://opensource.org/license/mit/)\n\n//- rjf: top-"
},
{
"path": "src/elf/elf_parse.h",
"chars": 1720,
"preview": "// Copyright (c) Epic Games Tools\n// Licensed under the MIT license (https://opensource.org/license/mit/)\n\n#ifndef ELF_P"
},
{
"path": "src/eval/eval.mdesk",
"chars": 11202,
"preview": "// Copyright (c) Epic Games Tools\n// Licensed under the MIT license (https://opensource.org/license/mit/)\n\n@table(name)\n"
},
{
"path": "src/eval/eval_core.c",
"chars": 50870,
"preview": "// Copyright (c) Epic Games Tools\r\n// Licensed under the MIT license (https://opensource.org/license/mit/)\r\n\r\n//////////"
},
{
"path": "src/eval/eval_core.h",
"chars": 34222,
"preview": "// Copyright (c) Epic Games Tools\r\n// Licensed under the MIT license (https://opensource.org/license/mit/)\r\n\r\n#ifndef EV"
},
{
"path": "src/eval/eval_inc.c",
"chars": 260,
"preview": "// Copyright (c) Epic Games Tools\r\n// Licensed under the MIT license (https://opensource.org/license/mit/)\r\n\r\n#include \""
},
{
"path": "src/eval/eval_inc.h",
"chars": 326,
"preview": "// Copyright (c) Epic Games Tools\r\n// Licensed under the MIT license (https://opensource.org/license/mit/)\r\n\r\n#ifndef EV"
},
{
"path": "src/eval/eval_interpret.c",
"chars": 27390,
"preview": "// Copyright (c) Epic Games Tools\r\n// Licensed under the MIT license (https://opensource.org/license/mit/)\r\n\r\n//////////"
},
{
"path": "src/eval/eval_interpret.h",
"chars": 1198,
"preview": "// Copyright (c) Epic Games Tools\r\n// Licensed under the MIT license (https://opensource.org/license/mit/)\r\n\r\n#ifndef EV"
},
{
"path": "src/eval/eval_ir.c",
"chars": 121680,
"preview": "// Copyright (c) Epic Games Tools\r\n// Licensed under the MIT license (https://opensource.org/license/mit/)\r\n\r\n//////////"
},
{
"path": "src/eval/eval_ir.h",
"chars": 6616,
"preview": "// Copyright (c) Epic Games Tools\r\n// Licensed under the MIT license (https://opensource.org/license/mit/)\r\n\r\n#ifndef EV"
},
{
"path": "src/eval/eval_parse.c",
"chars": 53933,
"preview": "// Copyright (c) Epic Games Tools\r\n// Licensed under the MIT license (https://opensource.org/license/mit/)\r\n\r\n//////////"
},
{
"path": "src/eval/eval_parse.h",
"chars": 2200,
"preview": "// Copyright (c) Epic Games Tools\r\n// Licensed under the MIT license (https://opensource.org/license/mit/)\r\n\r\n#ifndef EV"
},
{
"path": "src/eval/eval_types.c",
"chars": 118716,
"preview": "// Copyright (c) Epic Games Tools\r\n// Licensed under the MIT license (https://opensource.org/license/mit/)\r\n\r\n//////////"
},
{
"path": "src/eval/eval_types.h",
"chars": 8065,
"preview": "// Copyright (c) Epic Games Tools\r\n// Licensed under the MIT license (https://opensource.org/license/mit/)\r\n\r\n#ifndef EV"
},
{
"path": "src/eval/generated/eval.meta.c",
"chars": 9530,
"preview": "// Copyright (c) Epic Games Tools\r\n// Licensed under the MIT license (https://opensource.org/license/mit/)\r\n\r\n//- GENERA"
},
{
"path": "src/eval/generated/eval.meta.h",
"chars": 4226,
"preview": "// Copyright (c) Epic Games Tools\r\n// Licensed under the MIT license (https://opensource.org/license/mit/)\r\n\r\n//- GENERA"
},
{
"path": "src/eval_visualization/eval_visualization_core.c",
"chars": 82173,
"preview": "// Copyright (c) Epic Games Tools\r\n// Licensed under the MIT license (https://opensource.org/license/mit/)\r\n\r\n//////////"
},
{
"path": "src/eval_visualization/eval_visualization_core.h",
"chars": 10669,
"preview": "// Copyright (c) Epic Games Tools\r\n// Licensed under the MIT license (https://opensource.org/license/mit/)\r\n\r\n#ifndef EV"
},
{
"path": "src/eval_visualization/eval_visualization_inc.c",
"chars": 148,
"preview": "// Copyright (c) Epic Games Tools\r\n// Licensed under the MIT license (https://opensource.org/license/mit/)\r\n\r\n#include \""
},
{
"path": "src/eval_visualization/eval_visualization_inc.h",
"chars": 256,
"preview": "// Copyright (c) Epic Games Tools\r\n// Licensed under the MIT license (https://opensource.org/license/mit/)\r\n\r\n#ifndef EV"
},
{
"path": "src/file_stream/file_stream.c",
"chars": 9144,
"preview": "// Copyright (c) Epic Games Tools\r\n// Licensed under the MIT license (https://opensource.org/license/mit/)\r\n\r\n#undef LAY"
},
{
"path": "src/file_stream/file_stream.h",
"chars": 1719,
"preview": "// Copyright (c) Epic Games Tools\r\n// Licensed under the MIT license (https://opensource.org/license/mit/)\r\n\r\n#ifndef FI"
},
{
"path": "src/font_cache/font_cache.c",
"chars": 36624,
"preview": "// Copyright (c) Epic Games Tools\r\n// Licensed under the MIT license (https://opensource.org/license/mit/)\r\n\r\n//////////"
},
{
"path": "src/font_cache/font_cache.h",
"chars": 7795,
"preview": "// Copyright (c) Epic Games Tools\r\n// Licensed under the MIT license (https://opensource.org/license/mit/)\r\n\r\n#ifndef FO"
},
{
"path": "src/font_provider/dwrite/font_provider_dwrite.c",
"chars": 23769,
"preview": "// Copyright (c) Epic Games Tools\r\n// Licensed under the MIT license (https://opensource.org/license/mit/)\r\n\r\n//////////"
},
{
"path": "src/font_provider/dwrite/font_provider_dwrite.h",
"chars": 18491,
"preview": "// Copyright (c) Epic Games Tools\n// Licensed under the MIT license (https://opensource.org/license/mit/)\n\n#ifndef FONT_"
},
{
"path": "src/font_provider/font_provider.c",
"chars": 393,
"preview": "// Copyright (c) Epic Games Tools\r\n// Licensed under the MIT license (https://opensource.org/license/mit/)\r\n\r\n//////////"
},
{
"path": "src/font_provider/font_provider.h",
"chars": 1372,
"preview": "// Copyright (c) Epic Games Tools\r\n// Licensed under the MIT license (https://opensource.org/license/mit/)\r\n\r\n#ifndef FO"
},
{
"path": "src/font_provider/font_provider_inc.c",
"chars": 369,
"preview": "// Copyright (c) Epic Games Tools\r\n// Licensed under the MIT license (https://opensource.org/license/mit/)\r\n\r\n#include \""
},
{
"path": "src/font_provider/font_provider_inc.h",
"chars": 936,
"preview": "// Copyright (c) Epic Games Tools\r\n// Licensed under the MIT license (https://opensource.org/license/mit/)\r\n\r\n#ifndef FO"
},
{
"path": "src/font_provider/freetype/font_provider_freetype.c",
"chars": 4233,
"preview": "// Copyright (c) Epic Games Tools\r\n// Licensed under the MIT license (https://opensource.org/license/mit/)\r\n\r\n//////////"
},
{
"path": "src/font_provider/freetype/font_provider_freetype.h",
"chars": 918,
"preview": "// Copyright (c) Epic Games Tools\r\n// Licensed under the MIT license (https://opensource.org/license/mit/)\r\n\r\n#ifndef FO"
},
{
"path": "src/gnu/gnu.c",
"chars": 10275,
"preview": "// Copyright (c) Epic Games Tools\r\n// Licensed under the MIT license (https://opensource.org/license/mit/)\r\n\r\ninternal G"
},
{
"path": "src/gnu/gnu.h",
"chars": 6633,
"preview": "// Copyright (c) Epic Games Tools\r\n// Licensed under the MIT license (https://opensource.org/license/mit/)\r\n\r\n#ifndef GN"
},
{
"path": "src/lib_raddbg_markup/raddbg_markup.h",
"chars": 16305,
"preview": "// Copyright (c) Epic Games Tools\r\n// Licensed under the MIT license (https://opensource.org/license/mit/)\r\n\r\n#ifndef RA"
},
{
"path": "src/lib_rdi/rdi.c",
"chars": 14174,
"preview": "// Copyright (c) Epic Games Tools\r\n// Licensed under the MIT license (https://opensource.org/license/mit/)\r\n\r\n//////////"
},
{
"path": "src/lib_rdi/rdi.h",
"chars": 47036,
"preview": "// Copyright (c) Epic Games Tools\r\n// Licensed under the MIT license (https://opensource.org/license/mit/)\r\n\r\n//////////"
},
{
"path": "src/lib_rdi/rdi_parse.c",
"chars": 62471,
"preview": "// Copyright (c) Epic Games Tools\n// Licensed under the MIT license (https://opensource.org/license/mit/)\n\n/////////////"
},
{
"path": "src/lib_rdi/rdi_parse.h",
"chars": 10057,
"preview": "// Copyright (c) Epic Games Tools\n// Licensed under the MIT license (https://opensource.org/license/mit/)\n\n/////////////"
},
{
"path": "src/lib_rdi_make/rdi_make.c",
"chars": 74047,
"preview": "// Copyright (c) Epic Games Tools\r\n// Licensed under the MIT license (https://opensource.org/license/mit/)\r\n\r\n//////////"
},
{
"path": "src/lib_rdi_make/rdi_make.h",
"chars": 53373,
"preview": "// Copyright (c) Epic Games Tools\r\n// Licensed under the MIT license (https://opensource.org/license/mit/)\r\n\r\n//////////"
},
{
"path": "src/linker/base_ext/base_arena.c",
"chars": 1601,
"preview": "// Copyright (c) Epic Games Tools\n// Licensed under the MIT license (https://opensource.org/license/mit/)\n\ninternal U64 "
},
{
"path": "src/linker/base_ext/base_arena.h",
"chars": 546,
"preview": "// Copyright (c) Epic Games Tools\n// Licensed under the MIT license (https://opensource.org/license/mit/)\n\n#pragma once\n"
},
{
"path": "src/linker/base_ext/base_arrays.c",
"chars": 5184,
"preview": "// Copyright (c) Epic Games Tools\n// Licensed under the MIT license (https://opensource.org/license/mit/)\n\ninternal U64\n"
},
{
"path": "src/linker/base_ext/base_arrays.h",
"chars": 1387,
"preview": "// Copyright (c) Epic Games Tools\n// Licensed under the MIT license (https://opensource.org/license/mit/)\n\n#pragma once\n"
},
{
"path": "src/linker/base_ext/base_bit_array.c",
"chars": 6472,
"preview": "// Copyright (c) Epic Games Tools\n// Licensed under the MIT license (https://opensource.org/license/mit/)\n\ninternal U32A"
},
{
"path": "src/linker/base_ext/base_bit_array.h",
"chars": 1260,
"preview": "// Copyright (c) Epic Games Tools\n// Licensed under the MIT license (https://opensource.org/license/mit/)\n\n#pragma once\n"
},
{
"path": "src/linker/base_ext/base_blake3.c",
"chars": 3243,
"preview": "// Copyright (c) Epic Games Tools\n// Licensed under the MIT license (https://opensource.org/license/mit/)\n\n#if defined(_"
},
{
"path": "src/linker/base_ext/base_blake3.h",
"chars": 1227,
"preview": "// Copyright (c) Epic Games Tools\n// Licensed under the MIT license (https://opensource.org/license/mit/)\n\n#pragma once\n"
},
{
"path": "src/linker/base_ext/base_core.c",
"chars": 4385,
"preview": "// Copyright (c) Epic Games Tools\n// Licensed under the MIT license (https://opensource.org/license/mit/)\n\ninternal U16\n"
},
{
"path": "src/linker/base_ext/base_core.h",
"chars": 6505,
"preview": "// Copyright (c) Epic Games Tools\n// Licensed under the MIT license (https://opensource.org/license/mit/)\n\n#pragma once\n"
},
{
"path": "src/linker/base_ext/base_crc32.c",
"chars": 3799,
"preview": "// Copyright (c) Epic Games Tools\n// Licensed under the MIT license (https://opensource.org/license/mit/)\n\ninternal U32\n"
},
{
"path": "src/linker/base_ext/base_crc32.h",
"chars": 225,
"preview": "// Copyright (c) Epic Games Tools\n// Licensed under the MIT license (https://opensource.org/license/mit/)\n\n#pragma once\n"
},
{
"path": "src/linker/base_ext/base_inc.c",
"chars": 258,
"preview": "// Copyright (c) Epic Games Tools\n// Licensed under the MIT license (https://opensource.org/license/mit/)\n\n#include \"bas"
},
{
"path": "src/linker/base_ext/base_inc.h",
"chars": 297,
"preview": "// Copyright (c) Epic Games Tools\n// Licensed under the MIT license (https://opensource.org/license/mit/)\n\n#pragma once\n"
},
{
"path": "src/linker/base_ext/base_strings.c",
"chars": 1395,
"preview": "// Copyright (c) Epic Games Tools\n// Licensed under the MIT license (https://opensource.org/license/mit/)\n\ninternal B32\n"
},
{
"path": "src/linker/base_ext/base_strings.h",
"chars": 340,
"preview": "// Copyright (c) Epic Games Tools\n// Licensed under the MIT license (https://opensource.org/license/mit/)\n\n#pragma once\n"
},
{
"path": "src/linker/codeview_ext/codeview.c",
"chars": 65648,
"preview": "// Copyright (c) Epic Games Tools\n// Licensed under the MIT license (https://opensource.org/license/mit/)\n\n/////////////"
},
{
"path": "src/linker/codeview_ext/codeview.h",
"chars": 15027,
"preview": "// Copyright (c) Epic Games Tools\n// Licensed under the MIT license (https://opensource.org/license/mit/)\n\n#pragma once\n"
},
{
"path": "src/linker/hash_table.c",
"chars": 14131,
"preview": "// Copyright (c) Epic Games Tools\n// Licensed under the MIT license (https://opensource.org/license/mit/)\n\ninternal void"
},
{
"path": "src/linker/hash_table.h",
"chars": 4845,
"preview": "// Copyright (c) Epic Games Tools\n// Licensed under the MIT license (https://opensource.org/license/mit/)\n\n#pragma once\n"
},
{
"path": "src/linker/linker.natvis",
"chars": 6839,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<AutoVisualizer xmlns=\"http://schemas.microsoft.com/vstudio/debugger/natvis/2010\""
}
]
// ... and 290 more files (download for full content)
About this extraction
This page contains the full source code of the EpicGamesExt/raddebugger GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 490 files (28.5 MB), approximately 4.5M tokens, and a symbol index with 10370 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.