LATX 提供了配置文件、环境变量、命令行参数等多种方法,控制LATX运行时的行为、优化策略和调试功能。
配置项的优先级为 命令行 > 环境变量 > ~/.config/latx-*.conf > /etc/latx-*.conf。
LATX 的配置文件分为32位版本和64位版本,分别位于 /etc/latx-i386.conf /etc/latx-x8664.conf* 和 *``~/.config/latx-i386.conf`` ~/.config/latx-x86_64.conf,均为 .ini 格式的文件。
配置文件位于代码库的 lat/configs/ 目录,安装时会自动安装到 /etc/ 目录下,运行时根据 guest 程序选择 32 位或 64 位的配置信息。
您可以通过复制系统配置文件来自定义用户配置,将配置文件复制到 ~/.config/ 目录下,并添加自己的配置信息。
LATX_XXX=X # 对所有 guest 生效的总配置
[guest_program] # 对guest_program生效的配置
LATX_YYY=YLATX 的配置的逐级流程如下:
main()
├── options_init() # 初始化默认值
├── conf_init() # 加载配置文件
│ ├── /etc/latx.conf
│ └── ~/.config/latx.conf
├── 读取环境变量
├── 解析命令行参数
└── handle_arg_latx_* # 写入 option_* 变量
所有默认值在 latx-options.c 中的 options_init() 中统一设置,这些默认值决定了 LATX 在无任何配置时的行为。
随后逐级加载配置信息,冲突的配置由高优先覆盖低优先级。
所有支持的参数(包括环境变量和命令行)统一定义在:
main.c → struct qemu_argument arg_table
每个参数包含:
struct qemu_argument {
const char *argv; #命令行名称
const char *env; #环境变量
bool has_arg; #是否带参数
void (*handle_opt)(const char *arg); #处理函数
const char *example;
const char *help; #help信息
};LATX 支持三种方式设置运行参数(以软浮点功能为例):
- 配置文件
[guest_program]LATX_SOFTFPU = 1 - 环境变量
export LATX_SOFTFPU=1 - 命令行
latx-x8664 -latx-softfpu 1 guest_program
三种方式最终都会调用同一处理函数:
handle_arg_latx_softfpu
配置参数可分为优化类和调试类,部分配置不支持环境变量和命令行设置,仅支持初始化或编译信息设置。
AOT(预翻译)会保存恢复预翻译信息,某些配置与 AOT 冲突,开启时会自动关闭 AOT 优化(在处理函数中执行关闭逻辑)部分配置开启时会关闭 AOT 优化。
以下未特殊说明的均为置 1 时开启。
| 环境变量 | 命令行 | 对应代码变量 | 功能 | AOT关系 | 备注 |
|---|---|---|---|---|---|
| LATX_OPTIMIZE | -latx-optimize tunnel-lib |
option_tunnel_lib | 影响reg_priv_plt执行 | ||
| LATX_SMC | -latx-smc 0/1/2/6 |
option_smc_opt | 自修改代码优化 | ||
| LATX_CLOSE_PARALLEL | -latx-close-parallel |
close_latx_parallel | 关闭并行 | ||
| LATX_SOFTFPU | -latx-softfpu 1/2 |
option_softfpu | 软件浮点 | 冲突 | 关闭AOT |
| LATX_SOFTFPU_FAST | -latx-softfpu-fast 0xffffff |
option_softfpu_fast | 位控制的软浮点进阶优化 | 冲突 | 仅 softfpu=2 有效 |
| LATX_PRLIMIT | -latx-prlimit |
option_prlimit | 资源限制 | ||
| LATX_ROUNDING_OPT | -latx-rounding |
option_set_rounding_opt | 浮点优化 | 冲突 | 与 softfpu 冲突 |
| LATX_CVT_OPT | -latx-cvt-opt |
option_cvt_opt | 转换优化 | ||
| LATX_AVX_CPUID | -latx-avx-cpuid |
option_avx_cpuid | AVX 上报 CPUID | 编译加参数 -a 开启 | |
| LATX_KZT | -latx-kzt |
option_kzt | 库直通 | ||
| LATX_FPUTAG | -latx-fputag |
option_fputag | 使用软件 FPU tag | ||
| SAVE_XMM | -save-xmm |
option_save_xmm | xmm 保存控制 | ||
| LATX_JRRA | -latx-jrra |
option_jr_ra
option_jr_ra_stack
|
jr ra 优化 | 冲突 | |
| LATX_IMM_REG | -latx-imm-reg 1111 |
option_imm_reg
option_imm_rip
option_imm_complex
option_imm_precache
|
imm 优化 | 位域控制 | |
| LATX_MT | -latx-mem-test |
option_mem_test | 内存权限检测 | 冲突 | |
| LATX_REAL_MAPS | -latx-real-maps |
option_real_maps | 使用真实 maps | 冲突 | |
| LATX_MONITOR_SHARED_MEM | -latx-monitor-shared-mem |
option_monitor_shared_mem | 共享内存监控 | ||
| LATX_AOT | -latx-aot |
option_aot
option_load_aot
option_aot_wine
|
预翻译 | 部分优化下关闭 | |
| LAT_AOT_FILE_SIZE | -latx-aot-file-size file |
aot_file_size_optarg | |||
| LAT_AOT_LEFT_FILE_SIZE | -latx-aot-left-file-size |
aot_left_file_minsize_optarg | 预翻译相关 | ||
| LATX_AOT_WINE_PEFILES_CACHE | -latx-aot-wine-pefiles-cache |
latx_aot_wine_pefiles_cache | |||
| LATX_ANONYM | -latx-anonym |
option_anonym | 隐藏虚拟化 | 冲突 | |
| LATX_MMAP_START | -latx-mmap_start addr |
mmap_next_start | 设置mmap初始地址 | ||
| LATX_MMAP_FIXED | -latx-mmap_fixed abi_ulong |
option_mmap_fixed | 设置强制强制使用 MAP_FIXED 的 mmap | ||
| LATX_UNIMP_DUMP | -latx-unimp-dump |
option_mmap_fixed | 打印不支持的 syscall |
部分无环境变量和命令行控制的优化选项可在 optimize-config.h 修改编译信息开启或关闭
| 对应宏 | 对应代码变量 | 功能 |
|---|---|---|
| CONFIG_LATX_FLAG_REDUCTION | option_flag_reduction | flag 优化 |
| CONFIG_LATX_INSTS_PATTERN | option_instptn | inst pattern 优化 |
| CONFIG_LATX_SPLIT_TB | option_split_tb | TB分离 |
| 自动检测 | option_enable_lasx | LASX 启用 |
| 自动检测 | option_fast_atomic | 原子优化 |
| LOW_MEM_MODE_0 | option_shadow_file | shadow 页 |
| 无 | option_lative | 随机测试用 |
| CONFIG_LATX_AOT | option_load_aot | AOT 加载控制 |
| 无 | option_aot_wine | AOT wine |
调试类配置需在 debug 模式的 LATX 下使用,添加编译参数 --enable-debug 或使用 debug 模式编译脚本 latxbuild/build64-dbg.sh
下表总结了 debug 模式下可开启的调试信息开关:
| 环境变量 | 命令行 | 对应代码变量 | 功能 |
|---|---|---|---|
| LATX_BEGIN_TRACE | -latx-runtime-trace-begin |
option_begin_trace_addr | trace 起点 |
| LATX_END_TRACE | -latx-runtime-trace-end |
option_end_trace_addr | trace 终点 |
| LATX_DUMP | -latx-dump 11111 |
option_dump
option_dump_ir1
option_dump_ir2
option_dump_host
option_dump_profile
|
dump 信息 |
| LATX_SHOW_TB | -latx-show-tb |
debug_tb_pc | 打印指定 TB |
| LATX_TRACE_MEM | -latx-trace-mem |
latx_trace_mem | 内存写追踪 |
| LATX_BREAK_INSN | -latx-break-insn |
latx_break_insn | 指令断点 |
| LATX_DEBUG_LATIVE | -latx-debug-lative |
option_debug_lative | 调试模式 |
| LATX_ENABLE_FCSR_EXC | -latx-enable-fcsr-exc |
option_enable_fcsr_exc | 浮点异常 |
| LATX_UNLINK | -latx-unlink |
latx_unlink_count
latx_unlink_cpu
|
TB unlink 控制 |
| LATX_TRACE | -latx-trace 11 |
option_trace_tb
option_trace_ir1
|
打印 TB 信息 |
| LATX_DISASSEMBLE_TRACE_CMP | -latx-disassemble-trace-cmp a:b |
option_latx_disassemble_trace_cmp | 对比不同反汇编器结果 |
| 环境变量 | 命令行 | 功能说明 |
|---|---|---|
| 无 | -h or help |
打印帮助信息 |
| LAT_GDB | -g <port> |
启动时暂停执行,并在指定端口等待 GDB 远程连接(用于调试 guest 程序) |
| LAT_STACK_SIZE | -s <size> |
设置 guest 程序的栈大小(单位:字节) |
| LAT_CPU | -cpu <model> |
指定模拟 CPU 类型(影响指令集与特性支持) |
| LAT_SET_ENV | -E var=value |
为 guest 程序设置环境变量 |
| LAT_UNSET_ENV | -U var |
从 guest 环境中移除指定变量 |
| LAT_ARGV0 | -0 <argv0> |
强制指定 guest 程序的 argv[0] |
| LAT_UNAME | -r <string> |
修改 uname 返回值(用于绕过兼容性检查) |
| LAT_GUEST_BASE | -B <addr> |
设置 guest 内存基地址(用于地址空间布局控制) |
| LAT_RESERVED_VA | -R <size> |
预留一段虚拟地址空间给 guest 使用 |
| LAT_LOG | -d <items> |
启用调试日志(如 cpu、exec、in_asm 等) |
| LAT_IMM_SKIP_PC | -imm-skip |
imm_re优化跳过的pc |
| LAT_DFILTER | -dfilter |
基于地址范围过滤日志记录 |
| LAT_LOG_FILENAME | -D <file> |
指定日志输出文件(默认 stderr) |
| LAT_PAGESIZE | -p <size> |
强制指定 host 页大小 |
| LAT_SINGLESTEP | -singlestep |
启用单步执行模式(每条指令执行后返回) |
| LAT_STRACE | -strace |
跟踪 guest 的系统调用 |
| LAT_STRACE_ERROR | -strace-error |
仅打印失败的系统调用 |
| LAT_RAND_SEED | -seed <value> |
设置随机数种子(用于可重复测试) |
| LAT_TRACE | -trace |
启用 trace 事件系统 |
| LAT_PLUGIN | -plugin <file> |
加载插件(用于扩展功能或分析) |
| LAT_LD_PREFIX | -L <path> |
指定 ELF loader 路径(用于自定义运行环境) |