mirror of
https://gitcode.com/JianFeeeee/LuaCangjia_api.git
synced 2026-09-20 17:08:12 +00:00
- lib/lua 替换为完整 LuaJIT 2.1 仓库(Makefile+src+dynasm, 官方结构)
- 构建系统改造: lib/lua/CMakeLists.txt 改为调用 LuaJIT 自带 make
(BUILDMODE=static CFLAGS=-fPIC) 产出 libluajit.a; 顶层链接该静态库
并加 -Wl,-E 导出符号(静态链 LuaJIT 必需)
- 补充 lua.hpp 转发头兼容桥接层 'lua/lua.hpp' include 路径
- 桥接层沿用 5.1 方案: Registry 存 iopath / luaL_tolstring 兜底 /
typed interop 无 integer 子类型(LUA_VERSION_NUM=501)
- [关键修复] lua_remove 栈越界 bug(各版本共有, LuaJIT 下显性崩溃):
* unload_lib: ref 记录的是 gettop+1, 实际移除应用 ref-1
* clean(): 原逐个 remove 循环恒越界且多次移除后索引偏移,
属死代码(末尾 settop(L,0) 已清栈), 直接删除
该 bug 在 Lua 5.4 中被隐式容忍, 在 LuaJIT 的 GC finalizer 中
表现为 lj_gc_finalize_cdata 段错误
- 测试跨版本断言同步(自 5.1.5)
- 验证: GTest 44/44 通过
84 lines
2.0 KiB
C
84 lines
2.0 KiB
C
/*
|
|
** DynASM encoding engine prototypes.
|
|
** Copyright (C) 2005-2026 Mike Pall. All rights reserved.
|
|
** Released under the MIT license. See dynasm.lua for full copyright notice.
|
|
*/
|
|
|
|
#ifndef _DASM_PROTO_H
|
|
#define _DASM_PROTO_H
|
|
|
|
#include <stddef.h>
|
|
#include <stdarg.h>
|
|
|
|
#define DASM_IDENT "DynASM 1.5.0"
|
|
#define DASM_VERSION 10500 /* 1.5.0 */
|
|
|
|
#ifndef Dst_DECL
|
|
#define Dst_DECL dasm_State **Dst
|
|
#endif
|
|
|
|
#ifndef Dst_REF
|
|
#define Dst_REF (*Dst)
|
|
#endif
|
|
|
|
#ifndef DASM_FDEF
|
|
#define DASM_FDEF extern
|
|
#endif
|
|
|
|
#ifndef DASM_M_GROW
|
|
#define DASM_M_GROW(ctx, t, p, sz, need) \
|
|
do { \
|
|
size_t _sz = (sz), _need = (need); \
|
|
if (_sz < _need) { \
|
|
if (_sz < 16) _sz = 16; \
|
|
while (_sz < _need) _sz += _sz; \
|
|
(p) = (t *)realloc((p), _sz); \
|
|
if ((p) == NULL) exit(1); \
|
|
(sz) = _sz; \
|
|
} \
|
|
} while(0)
|
|
#endif
|
|
|
|
#ifndef DASM_M_FREE
|
|
#define DASM_M_FREE(ctx, p, sz) free(p)
|
|
#endif
|
|
|
|
/* Internal DynASM encoder state. */
|
|
typedef struct dasm_State dasm_State;
|
|
|
|
|
|
/* Initialize and free DynASM state. */
|
|
DASM_FDEF void dasm_init(Dst_DECL, int maxsection);
|
|
DASM_FDEF void dasm_free(Dst_DECL);
|
|
|
|
/* Setup global array. Must be called before dasm_setup(). */
|
|
DASM_FDEF void dasm_setupglobal(Dst_DECL, void **gl, unsigned int maxgl);
|
|
|
|
/* Grow PC label array. Can be called after dasm_setup(), too. */
|
|
DASM_FDEF void dasm_growpc(Dst_DECL, unsigned int maxpc);
|
|
|
|
/* Setup encoder. */
|
|
DASM_FDEF void dasm_setup(Dst_DECL, const void *actionlist);
|
|
|
|
/* Feed encoder with actions. Calls are generated by pre-processor. */
|
|
DASM_FDEF void dasm_put(Dst_DECL, int start, ...);
|
|
|
|
/* Link sections and return the resulting size. */
|
|
DASM_FDEF int dasm_link(Dst_DECL, size_t *szp);
|
|
|
|
/* Encode sections into buffer. */
|
|
DASM_FDEF int dasm_encode(Dst_DECL, void *buffer);
|
|
|
|
/* Get PC label offset. */
|
|
DASM_FDEF int dasm_getpclabel(Dst_DECL, unsigned int pc);
|
|
|
|
#ifdef DASM_CHECKS
|
|
/* Optional sanity checker to call between isolated encoding steps. */
|
|
DASM_FDEF int dasm_checkstep(Dst_DECL, int secmatch);
|
|
#else
|
|
#define dasm_checkstep(a, b) 0
|
|
#endif
|
|
|
|
|
|
#endif /* _DASM_PROTO_H */
|