diff options
author | Mike Pall <mike> | 2010-01-05 22:13:20 +0100 |
---|---|---|
committer | Mike Pall <mike> | 2010-01-05 22:13:20 +0100 |
commit | b3e3bad0ffffe9e1a23c658b99810c687905005d (patch) | |
tree | d29e6563dc8cab849f74310ee821cc6d1fafaf07 /src/buildvm_peobj.c | |
parent | 9df01f96b960c1db9fd123a14a443614aa4ac30c (diff) | |
download | luajit-b3e3bad0ffffe9e1a23c658b99810c687905005d.tar.gz luajit-b3e3bad0ffffe9e1a23c658b99810c687905005d.tar.bz2 luajit-b3e3bad0ffffe9e1a23c658b99810c687905005d.zip |
Fix PE object build for fastcall entry points into interpreter.
Diffstat (limited to 'src/buildvm_peobj.c')
-rw-r--r-- | src/buildvm_peobj.c | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/src/buildvm_peobj.c b/src/buildvm_peobj.c index 4b5d98c6..d45f3c97 100644 --- a/src/buildvm_peobj.c +++ b/src/buildvm_peobj.c | |||
@@ -284,8 +284,18 @@ void emit_peobj(BuildCtx *ctx) | |||
284 | for (i = nzsym; i < ctx->nsym; i++) { | 284 | for (i = nzsym; i < ctx->nsym; i++) { |
285 | int pi = ctx->perm[i]; | 285 | int pi = ctx->perm[i]; |
286 | if (pi >= ctx->npc) { | 286 | if (pi >= ctx->npc) { |
287 | sprintf(name, PEOBJ_SYM_PREFIX LABEL_PREFIX "%s", | 287 | const char *sym = ctx->globnames[pi-ctx->npc]; |
288 | ctx->globnames[pi-ctx->npc]); | 288 | const char *p = strchr(sym, '@'); |
289 | if (p) { | ||
290 | #ifdef PEOBJ_SYMF_PREFIX | ||
291 | sprintf(name, PEOBJ_SYMF_PREFIX LABEL_PREFIX "%s", sym); | ||
292 | #else | ||
293 | sprintf(name, LABEL_PREFIX "%s", sym); | ||
294 | name[p+sizeof(LABEL_PREFIX)] = '\0'; | ||
295 | #endif | ||
296 | } else { | ||
297 | sprintf(name, PEOBJ_SYM_PREFIX LABEL_PREFIX "%s", sym); | ||
298 | } | ||
289 | emit_peobj_sym_func(ctx, name, ctx->sym_ofs[pi]); | 299 | emit_peobj_sym_func(ctx, name, ctx->sym_ofs[pi]); |
290 | #if LJ_HASJIT | 300 | #if LJ_HASJIT |
291 | } else { | 301 | } else { |