Files
raddebugger/src/stap/stap_test.c
T

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);
}