mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-10-10 01:45:41 +00:00
115 lines
4.1 KiB
C
115 lines
4.1 KiB
C
// Copyright (c) Epic Games Tools
|
|
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
|
|
|
#define BUILD_TITLE "STAP Parser Test"
|
|
#define BUILD_CONSOLE_INTERFACE 1
|
|
|
|
#include "base/base_inc.h"
|
|
#include "os/os_inc.h"
|
|
#include "arch/arch_inc.h"
|
|
#include "stap/stap_parse.h"
|
|
|
|
#include "base/base_inc.c"
|
|
#include "os/os_inc.c"
|
|
#include "arch/arch_inc.c"
|
|
#include "stap/stap_parse.c"
|
|
|
|
internal void
|
|
entry_point(CmdLine *cmd_line)
|
|
{
|
|
B32 passed = 0;
|
|
STAP_Arg arg = {0};
|
|
String8 error = {0};
|
|
String8 string = {0};
|
|
|
|
string = str8_lit("-2@$-123");
|
|
error = stap_parse_args_x64(string, &arg);
|
|
if (error.size != 0) { goto exit; }
|
|
AssertAlways(arg.value_type == STAP_ArgValueType_S);
|
|
AssertAlways(arg.value_size == 2);
|
|
AssertAlways(arg.type == STAP_ArgType_Imm);
|
|
AssertAlways((S64)arg.imm == -123);
|
|
|
|
string = str8_lit("1@$43");
|
|
error = stap_parse_args_x64(string, &arg);
|
|
if (error.size != 0) { goto exit; }
|
|
AssertAlways(arg.value_type == STAP_ArgValueType_U);
|
|
AssertAlways(arg.value_size == 1);
|
|
AssertAlways(arg.type == STAP_ArgType_Imm);
|
|
AssertAlways((S64)arg.imm == 43);
|
|
|
|
string = str8_lit("4f@%eax");
|
|
error = stap_parse_args_x64(string, &arg);
|
|
if (error.size != 0) { goto exit; }
|
|
AssertAlways(arg.value_type == STAP_ArgValueType_F);
|
|
AssertAlways(arg.value_size == 4);
|
|
AssertAlways(arg.type == STAP_ArgType_Reg);
|
|
AssertAlways(arg.reg.is_alias == 1);
|
|
AssertAlways(arg.reg.reg_code == REGS_AliasCodeX64_eax);
|
|
|
|
string = str8_lit("4@(%rdi)");
|
|
error = stap_parse_args_x64(string, &arg);
|
|
if (error.size != 0) { goto exit; }
|
|
AssertAlways(arg.value_size == 4);
|
|
AssertAlways(arg.value_type == STAP_ArgValueType_U);
|
|
AssertAlways(arg.type == STAP_ArgType_MemoryRef);
|
|
AssertAlways(arg.memory_ref.disp == 0);
|
|
AssertAlways(arg.memory_ref.base.reg_code == REGS_RegCodeX64_rdi);
|
|
AssertAlways(!arg.memory_ref.base.is_alias);
|
|
AssertAlways(arg.memory_ref.index.reg_code == 0);
|
|
AssertAlways(arg.memory_ref.index.is_alias == 0);
|
|
AssertAlways(arg.memory_ref.scale == 1);
|
|
|
|
string = str8_lit("4@-22(%rdi)");
|
|
error = stap_parse_args_x64(string, &arg);
|
|
if (error.size != 0) { goto exit; }
|
|
AssertAlways(arg.value_size == 4);
|
|
AssertAlways(arg.value_type == STAP_ArgValueType_U);
|
|
AssertAlways(arg.type == STAP_ArgType_MemoryRef);
|
|
AssertAlways(arg.memory_ref.disp == -22);
|
|
AssertAlways(arg.memory_ref.base.reg_code == REGS_RegCodeX64_rdi);
|
|
AssertAlways(!arg.memory_ref.base.is_alias);
|
|
AssertAlways(arg.memory_ref.index.reg_code == 0);
|
|
AssertAlways(arg.memory_ref.index.is_alias == 0);
|
|
AssertAlways(arg.memory_ref.scale == 1);
|
|
|
|
string = str8_lit("4@32(%rax,%rsi,8)");
|
|
error = stap_parse_args_x64(string, &arg);
|
|
if (error.size != 0) { goto exit; }
|
|
AssertAlways(arg.value_size == 4);
|
|
AssertAlways(arg.value_type == STAP_ArgValueType_U);
|
|
AssertAlways(arg.memory_ref.disp == 32);
|
|
AssertAlways(arg.memory_ref.base.reg_code == REGS_RegCodeX64_rax);
|
|
AssertAlways(arg.memory_ref.base.is_alias == 0);
|
|
AssertAlways(arg.memory_ref.index.reg_code == REGS_RegCodeX64_rsi);
|
|
AssertAlways(arg.memory_ref.index.is_alias == 0);
|
|
AssertAlways(arg.memory_ref.scale == 8);
|
|
|
|
string = str8_lit("4@32(,%rsi,8)");
|
|
error = stap_parse_args_x64(string, &arg);
|
|
if (error.size != 0) { goto exit; }
|
|
AssertAlways(arg.value_size == 4);
|
|
AssertAlways(arg.value_type == STAP_ArgValueType_U);
|
|
AssertAlways(arg.memory_ref.disp == 32);
|
|
AssertAlways(arg.memory_ref.base.reg_code == 0);
|
|
AssertAlways(arg.memory_ref.index.reg_code == REGS_RegCodeX64_rsi);
|
|
AssertAlways(arg.memory_ref.scale == 8);
|
|
|
|
error = stap_parse_args_x64(str8_lit("4@(,,)"), &arg);
|
|
if (error.size == 0) { goto exit; }
|
|
|
|
error = stap_parse_args_x64(str8_lit("4@()"), &arg);
|
|
if (error.size == 0) { goto exit; }
|
|
|
|
error = stap_parse_args_x64(str8_lit("4@(%rdi, %rsi, 8"), &arg);
|
|
if (error.size == 0) { goto exit; }
|
|
|
|
error = stap_parse_args_x64(str8_lit("4@( ,, 8"), &arg);
|
|
if (error.size == 0) { goto exit; }
|
|
|
|
passed = 1;
|
|
exit:;
|
|
AssertAlways(passed);
|
|
}
|
|
|