feat: support standalone ASM stack injection with operator-named output
本目录是 Windows 交付包,包含 LACP 脚本和配套的 LASM 编译器、布局文件。安装后可在任意目录运行 LACP,无需安装外部 Python 工程或执行 pip install。
LACP
pip install
lasm.exe
在交付包根目录打开 CMD 或 PowerShell,运行:
.\install.cmd
安装脚本将 LACP.cmd、Bash 入口、tools/ 和 toolchain/ 等运行文件复制到当前用户的 %LOCALAPPDATA%\Programs\LACP,并将该目录加入当前用户的 PATH。无需管理员权限,重复运行会更新安装文件。ops/ 中的算子工程文件不会复制,请自行保留。
LACP.cmd
tools/
toolchain/
%LOCALAPPDATA%\Programs\LACP
PATH
ops/
关闭并重新打开终端,然后在任意目录运行:
LACP --check
看到 [LACP] environment: PASS 表示 Python、LACP 模块、LASM 文件和布局文件已找到。--check 不实际调用 LASM 编译器;首次安装及 Windows 7 机器还应运行下面的验收样例。
[LACP] environment: PASS
--check
CMD 中运行:
"%LOCALAPPDATA%\Programs\LACP\tools\LACP\examples\run_smoke_test.cmd"
PowerShell 中运行:
& "$env:LOCALAPPDATA\Programs\LACP\tools\LACP\examples\run_smoke_test.cmd"
验收脚本会分别编译 O0 和 O2、直接处理独立 ASM 样例,并检查出入栈元数据;成功时输出 [PASS] LACP smoke test passed.。安装完成后,LACP 不再依赖交付包原目录。
[PASS] LACP smoke test passed.
.la
在任意目录使用源文件路径调用:
LACP -op "D:\project\kernel.la" -O0 LACP -op "D:\project\kernel.la" -O2 LACP -op "D:\project\kernel.la" -O2 --output-dir "D:\project\output"
-O0 使用 LASM 默认优化,-O2 将 -O2 传给 LASM。未指定 --output-dir 时,默认在 .la 文件同目录生成同名的 .asm、.dat、.dis。
-O0
-O2
--output-dir
.asm
.dat
.dis
需要使用其他 LASM 或布局文件时,可传入 --lasm <lasm.exe 路径> 和 --layout <m7004.json 路径>;也可设置 LASM_BIN 和 LASM_LAYOUT 环境变量。完整的工具发现顺序和源码要求见 tools/LACP/README.md。
--lasm <lasm.exe 路径>
--layout <m7004.json 路径>
LASM_BIN
LASM_LAYOUT
无需 .la、LASM 编译器或布局文件,直接运行:
LACP -op "D:\project\kernel.asm" LACP -op "D:\project\kernel.asm" --output-dir "D:\project\output" LACP -op "D:\project\handwritten.asm" --entry kernel
输出 ASM 文件名始终与主算子函数名一致。例如主函数为 kernel,输出就是 kernel.asm。输入也是 kernel.asm 时,成功处理后原文件改名为同目录的 kernel_orin.asm;输入为 handwritten.asm 时保留输入文件,另生成 kernel.asm。--output-dir 只改变输出目录,同名输入仍在原目录改名备份。已有 _orin.asm 不会被覆盖。不生成或修改 .dat/.dis,ASM 模式不接受 -O0/-O2、--lasm、--layout。
kernel
kernel.asm
kernel_orin.asm
handwritten.asm
_orin.asm
.dat/.dis
-O0/-O2
--lasm
--layout
默认优先匹配与输入文件同名的 .global 函数(兼容 $0 前缀);无法按文件名匹配时,自动采用唯一导出函数。存在多个候选入口时使用 --entry 指定主函数。输入必须包含对应的入口标签、.size 和单一无条件返回出口(SBR R63:R62 或交付用 SMFENCE)。已含 LACP 出入栈的入口会被拒绝,避免重复注入;重新生成可运行 LACP -op kernel_orin.asm --entry kernel。完整输入示例、限制和验收命令见 tools/LACP/README.md。
.global
$0
--entry
.size
SBR R63:R62
SMFENCE
LACP -op kernel_orin.asm --entry kernel
交付包中的默认 LASM 版本由 toolchain\lasm\DEFAULT_VERSION 决定。更新时:
toolchain\lasm\DEFAULT_VERSION
toolchain\lasm\<版本号>\
bin\lasm.exe
layout\m7004.json
DEFAULT_VERSION
安装目录中是独立副本;只修改交付包而不重新安装,不会改变 LACP 命令使用的版本。回退时将 DEFAULT_VERSION 改回旧版本号并重新安装。
在交付包根目录可直接运行 .\LACP.cmd --check;Git Bash 可运行 bash ./LACP.sh --check。此方式依赖交付包原目录保持完整。
.\LACP.cmd --check
bash ./LACP.sh --check
脚本构建LASM代码+自动出入栈
版权所有:中国计算机学会技术支持:开源发展技术委员会 京ICP备13000930号-9 京公网安备 11010802047560号
LACP:FT-M7004 LASM 编译与 ASM 自动出入栈工具
本目录是 Windows 交付包,包含 LACP 脚本和配套的 LASM 编译器、布局文件。安装后可在任意目录运行
LACP,无需安装外部 Python 工程或执行pip install。运行要求
lasm.exe是 64 位程序。安装
在交付包根目录打开 CMD 或 PowerShell,运行:
安装脚本将
LACP.cmd、Bash 入口、tools/和toolchain/等运行文件复制到当前用户的%LOCALAPPDATA%\Programs\LACP,并将该目录加入当前用户的PATH。无需管理员权限,重复运行会更新安装文件。ops/中的算子工程文件不会复制,请自行保留。关闭并重新打开终端,然后在任意目录运行:
看到
[LACP] environment: PASS表示 Python、LACP 模块、LASM 文件和布局文件已找到。--check不实际调用 LASM 编译器;首次安装及 Windows 7 机器还应运行下面的验收样例。CMD 中运行:
PowerShell 中运行:
验收脚本会分别编译 O0 和 O2、直接处理独立 ASM 样例,并检查出入栈元数据;成功时输出
[PASS] LACP smoke test passed.。安装完成后,LACP 不再依赖交付包原目录。编译
.la算子在任意目录使用源文件路径调用:
-O0使用 LASM 默认优化,-O2将-O2传给 LASM。未指定--output-dir时,默认在.la文件同目录生成同名的.asm、.dat、.dis。需要使用其他 LASM 或布局文件时,可传入
--lasm <lasm.exe 路径>和--layout <m7004.json 路径>;也可设置LASM_BIN和LASM_LAYOUT环境变量。完整的工具发现顺序和源码要求见 tools/LACP/README.md。只有
.asm时添加出入栈无需
.la、LASM 编译器或布局文件,直接运行:输出 ASM 文件名始终与主算子函数名一致。例如主函数为
kernel,输出就是kernel.asm。输入也是kernel.asm时,成功处理后原文件改名为同目录的kernel_orin.asm;输入为handwritten.asm时保留输入文件,另生成kernel.asm。--output-dir只改变输出目录,同名输入仍在原目录改名备份。已有_orin.asm不会被覆盖。不生成或修改.dat/.dis,ASM 模式不接受-O0/-O2、--lasm、--layout。默认优先匹配与输入文件同名的
.global函数(兼容$0前缀);无法按文件名匹配时,自动采用唯一导出函数。存在多个候选入口时使用--entry指定主函数。输入必须包含对应的入口标签、.size和单一无条件返回出口(SBR R63:R62或交付用SMFENCE)。已含 LACP 出入栈的入口会被拒绝,避免重复注入;重新生成可运行LACP -op kernel_orin.asm --entry kernel。完整输入示例、限制和验收命令见 tools/LACP/README.md。更新与回退
交付包中的默认 LASM 版本由
toolchain\lasm\DEFAULT_VERSION决定。更新时:toolchain\lasm\<版本号>\,放入bin\lasm.exe和layout\m7004.json。DEFAULT_VERSION的内容改为新版本号,保留旧版本目录。.\install.cmd,再运行LACP --check和验收样例。安装目录中是独立副本;只修改交付包而不重新安装,不会改变
LACP命令使用的版本。回退时将DEFAULT_VERSION改回旧版本号并重新安装。不安装时直接运行
在交付包根目录可直接运行
.\LACP.cmd --check;Git Bash 可运行bash ./LACP.sh --check。此方式依赖交付包原目录保持完整。