aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/Makefile3
-rw-r--r--src/buildvm_asm.c60
-rw-r--r--src/buildvm_x64.h45
-rw-r--r--src/buildvm_x64win.h45
-rw-r--r--src/buildvm_x86.dasc45
-rw-r--r--src/buildvm_x86.h45
-rw-r--r--src/lj_err.c4
7 files changed, 216 insertions, 31 deletions
diff --git a/src/Makefile b/src/Makefile
index 96039ba0..da9d143b 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -299,8 +299,7 @@ ifeq (Windows,$(HOST_SYS))
299endif 299endif
300ifeq (Windows,$(TARGET_SYS)) 300ifeq (Windows,$(TARGET_SYS))
301 TARGET_DYNCC= $(STATIC_CC) 301 TARGET_DYNCC= $(STATIC_CC)
302 LJVM_BOUT= $(LJVM_O) 302 LJVM_MODE= coffasm
303 LJVM_MODE= peobj
304 LUAJIT_SO= $(TARGET_DLLNAME) 303 LUAJIT_SO= $(TARGET_DLLNAME)
305 LUAJIT_T= luajit.exe 304 LUAJIT_T= luajit.exe
306 ifneq ($(HOST_SYS),$(TARGET_SYS)) 305 ifneq ($(HOST_SYS),$(TARGET_SYS))
diff --git a/src/buildvm_asm.c b/src/buildvm_asm.c
index bd835ebc..2d0ba3b5 100644
--- a/src/buildvm_asm.c
+++ b/src/buildvm_asm.c
@@ -33,14 +33,14 @@ static void emit_asm_reloc(BuildCtx *ctx, int type, const char *sym)
33 fprintf(ctx->fp, "\t.long %s\n", sym); 33 fprintf(ctx->fp, "\t.long %s\n", sym);
34 break; 34 break;
35 case BUILD_coffasm: 35 case BUILD_coffasm:
36 fprintf(ctx->fp, "\t.def _%s; .scl 3; .type 32; .endef\n", sym); 36 fprintf(ctx->fp, "\t.def %s; .scl 3; .type 32; .endef\n", sym);
37 if (type) 37 if (type)
38 fprintf(ctx->fp, "\t.long _%s-.-4\n", sym); 38 fprintf(ctx->fp, "\t.long %s-.-4\n", sym);
39 else 39 else
40 fprintf(ctx->fp, "\t.long _%s\n", sym); 40 fprintf(ctx->fp, "\t.long %s\n", sym);
41 break; 41 break;
42 default: /* BUILD_machasm for relative relocations handled below. */ 42 default: /* BUILD_machasm for relative relocations handled below. */
43 fprintf(ctx->fp, "\t.long _%s\n", sym); 43 fprintf(ctx->fp, "\t.long %s\n", sym);
44 break; 44 break;
45 } 45 }
46} 46}
@@ -70,7 +70,7 @@ err:
70 exit(1); 70 exit(1);
71 } 71 }
72 emit_asm_bytes(ctx, cp, n); 72 emit_asm_bytes(ctx, cp, n);
73 fprintf(ctx->fp, "\t%s _%s\n", opname, sym); 73 fprintf(ctx->fp, "\t%s %s\n", opname, sym);
74} 74}
75 75
76/* Emit an assembler label. */ 76/* Emit an assembler label. */
@@ -87,15 +87,15 @@ static void emit_asm_label(BuildCtx *ctx, const char *name, int size, int isfunc
87 name, name, name, isfunc ? "function" : "object", name, size, name); 87 name, name, name, isfunc ? "function" : "object", name, size, name);
88 break; 88 break;
89 case BUILD_coffasm: 89 case BUILD_coffasm:
90 fprintf(ctx->fp, "\n\t.globl _%s\n", name); 90 fprintf(ctx->fp, "\n\t.globl %s\n", name);
91 if (isfunc) 91 if (isfunc)
92 fprintf(ctx->fp, "\t.def _%s; .scl 3; .type 32; .endef\n", name); 92 fprintf(ctx->fp, "\t.def %s; .scl 3; .type 32; .endef\n", name);
93 fprintf(ctx->fp, "_%s:\n", name); 93 fprintf(ctx->fp, "%s:\n", name);
94 break; 94 break;
95 case BUILD_machasm: 95 case BUILD_machasm:
96 fprintf(ctx->fp, 96 fprintf(ctx->fp,
97 "\n\t.private_extern _%s\n" 97 "\n\t.private_extern %s\n"
98 "_%s:\n", name, name); 98 "%s:\n", name, name);
99 break; 99 break;
100 default: 100 default:
101 break; 101 break;
@@ -126,13 +126,22 @@ void emit_asm(BuildCtx *ctx)
126 char name[80]; 126 char name[80];
127 int32_t prev; 127 int32_t prev;
128 int i, pi, rel; 128 int i, pi, rel;
129#if LJ_64
130 const char *symprefix = ctx->mode == BUILD_machasm ? "_" : "";
131 int keepfc = 0;
132#else
133 const char *symprefix = ctx->mode != BUILD_elfasm ? "_" : "";
134 /* Keep fastcall suffix for COFF on WIN32. */
135 int keepfc = (ctx->mode == BUILD_coffasm);
136#endif
129 137
130 fprintf(ctx->fp, "\t.file \"buildvm_%s.dasc\"\n", ctx->dasm_arch); 138 fprintf(ctx->fp, "\t.file \"buildvm_%s.dasc\"\n", ctx->dasm_arch);
131 fprintf(ctx->fp, "\t.text\n"); 139 fprintf(ctx->fp, "\t.text\n");
132 emit_asm_align(ctx, 4); 140 emit_asm_align(ctx, 4);
133 141
134 emit_asm_label(ctx, LABEL_ASM_BEGIN, 0, 0); 142 sprintf(name, "%s" LABEL_ASM_BEGIN, symprefix);
135 if (ctx->mode == BUILD_elfasm) 143 emit_asm_label(ctx, name, 0, 0);
144 if (ctx->mode != BUILD_machasm)
136 fprintf(ctx->fp, ".Lbegin:\n"); 145 fprintf(ctx->fp, ".Lbegin:\n");
137 146
138 i = 0; 147 i = 0;
@@ -148,10 +157,10 @@ void emit_asm(BuildCtx *ctx)
148 int32_t stop = next; 157 int32_t stop = next;
149 if (pi >= ctx->npc) { 158 if (pi >= ctx->npc) {
150 char *p; 159 char *p;
151 sprintf(name, LABEL_PREFIX "%s", ctx->globnames[pi-ctx->npc]); 160 sprintf(name, "%s" LABEL_PREFIX "%s", symprefix,
152 /* Always strip fastcall suffix. Wrong for (unused) COFF on Win32. */ 161 ctx->globnames[pi-ctx->npc]);
153 p = strchr(name, '@'); 162 p = strchr(name, '@');
154 if (p) *p = '\0'; 163 if (p) { if (keepfc) name[0] = '@'; else *p = '\0'; }
155 emit_asm_label(ctx, name, size, 1); 164 emit_asm_label(ctx, name, size, 1);
156#if LJ_HASJIT 165#if LJ_HASJIT
157 } else { 166 } else {
@@ -160,25 +169,21 @@ void emit_asm(BuildCtx *ctx)
160 pi == BC_JLOOP || pi == BC_IFORL || pi == BC_IITERL || 169 pi == BC_JLOOP || pi == BC_IFORL || pi == BC_IITERL ||
161 pi == BC_ILOOP)) { 170 pi == BC_ILOOP)) {
162#endif 171#endif
163 sprintf(name, LABEL_PREFIX_BC "%s", bc_names[pi]); 172 sprintf(name, "%s" LABEL_PREFIX_BC "%s", symprefix, bc_names[pi]);
164 emit_asm_label(ctx, name, size, 1); 173 emit_asm_label(ctx, name, size, 1);
165 } 174 }
166 while (rel < ctx->nreloc && ctx->reloc[rel].ofs < stop) { 175 while (rel < ctx->nreloc && ctx->reloc[rel].ofs < stop) {
167 BuildReloc *r = &ctx->reloc[rel]; 176 BuildReloc *r = &ctx->reloc[rel];
168 int n = r->ofs - prev; 177 int n = r->ofs - prev;
169 const char *sym = ctx->extnames[r->sym]; 178 char *p;
170 const char *p = strchr(sym, '@'); 179 sprintf(name, "%s%s", symprefix, ctx->extnames[r->sym]);
171 if (p) { 180 p = strchr(name, '@');
172 /* Always strip fastcall suffix. Wrong for (unused) COFF on Win32. */ 181 if (p) { if (keepfc) name[0] = '@'; else *p = '\0'; }
173 strncpy(name, sym, p-sym);
174 name[p-sym] = '\0';
175 sym = name;
176 }
177 if (ctx->mode == BUILD_machasm && r->type != 0) { 182 if (ctx->mode == BUILD_machasm && r->type != 0) {
178 emit_asm_reloc_mach(ctx, ctx->code+prev, n, sym); 183 emit_asm_reloc_mach(ctx, ctx->code+prev, n, name);
179 } else { 184 } else {
180 emit_asm_bytes(ctx, ctx->code+prev, n); 185 emit_asm_bytes(ctx, ctx->code+prev, n);
181 emit_asm_reloc(ctx, r->type, sym); 186 emit_asm_reloc(ctx, r->type, name);
182 } 187 }
183 prev += n+4; 188 prev += n+4;
184 rel++; 189 rel++;
@@ -203,7 +208,8 @@ void emit_asm(BuildCtx *ctx)
203 } 208 }
204 emit_asm_align(ctx, 5); 209 emit_asm_align(ctx, 5);
205 210
206 emit_asm_label(ctx, LABEL_OP_OFS, 2*ctx->npc, 0); 211 sprintf(name, "%s" LABEL_OP_OFS, symprefix);
212 emit_asm_label(ctx, name, 2*ctx->npc, 0);
207 for (i = 0; i < ctx->npc; i++) 213 for (i = 0; i < ctx->npc; i++)
208 fprintf(ctx->fp, "\t.short %d\n", ctx->sym_ofs[i]); 214 fprintf(ctx->fp, "\t.short %d\n", ctx->sym_ofs[i]);
209 215
diff --git a/src/buildvm_x64.h b/src/buildvm_x64.h
index 76c640da..615b9b82 100644
--- a/src/buildvm_x64.h
+++ b/src/buildvm_x64.h
@@ -2252,6 +2252,51 @@ static void emit_asm_debug(BuildCtx *ctx)
2252 "\t.align " SZPTR "\n" 2252 "\t.align " SZPTR "\n"
2253 ".LEFDE1:\n\n", (int)ctx->codesz, CFRAME_SIZE); 2253 ".LEFDE1:\n\n", (int)ctx->codesz, CFRAME_SIZE);
2254 break; 2254 break;
2255 case BUILD_coffasm:
2256 fprintf(ctx->fp, "\t.section .eh_frame,\"dr\"\n");
2257 fprintf(ctx->fp,
2258 "\t.def %slj_err_unwind_dwarf; .scl 2; .type 32; .endef\n",
2259 LJ_32 ? "_" : "");
2260 fprintf(ctx->fp,
2261 "Lframe1:\n"
2262 "\t.long LECIE1-LSCIE1\n"
2263 "LSCIE1:\n"
2264 "\t.long 0\n"
2265 "\t.byte 0x1\n"
2266 "\t.string \"zP\"\n"
2267 "\t.uleb128 0x1\n"
2268 "\t.sleb128 -" SZPTR "\n"
2269 "\t.byte " REG_RA "\n"
2270 "\t.uleb128 5\n" /* augmentation length */
2271 "\t.byte 0x00\n" /* absptr */
2272 "\t.long %slj_err_unwind_dwarf\n"
2273 "\t.byte 0xc\n\t.uleb128 " REG_SP "\n\t.uleb128 " SZPTR "\n"
2274 "\t.byte 0x80+" REG_RA "\n\t.uleb128 0x1\n"
2275 "\t.align " SZPTR "\n"
2276 "LECIE1:\n\n", LJ_32 ? "_" : "");
2277 fprintf(ctx->fp,
2278 "LSFDE1:\n"
2279 "\t.long LEFDE1-LASFDE1\n"
2280 "LASFDE1:\n"
2281 "\t.long LASFDE1-Lframe1\n"
2282 "\t.long %slj_vm_asm_begin\n"
2283 "\t.long %d\n"
2284 "\t.uleb128 0\n" /* augmentation length */
2285 "\t.byte 0xe\n\t.uleb128 %d\n" /* def_cfa_offset */
2286#if LJ_64
2287 "\t.byte 0x86\n\t.uleb128 0x2\n" /* offset rbp */
2288 "\t.byte 0x83\n\t.uleb128 0x3\n" /* offset rbx */
2289 "\t.byte 0x8f\n\t.uleb128 0x4\n" /* offset r15 */
2290 "\t.byte 0x8e\n\t.uleb128 0x5\n" /* offset r14 */
2291#else
2292 "\t.byte 0x85\n\t.uleb128 0x2\n" /* offset ebp */
2293 "\t.byte 0x87\n\t.uleb128 0x3\n" /* offset edi */
2294 "\t.byte 0x86\n\t.uleb128 0x4\n" /* offset esi */
2295 "\t.byte 0x83\n\t.uleb128 0x5\n" /* offset ebx */
2296#endif
2297 "\t.align " SZPTR "\n"
2298 "LEFDE1:\n\n", LJ_32 ? "_" : "", (int)ctx->codesz, CFRAME_SIZE);
2299 break;
2255 case BUILD_machasm: 2300 case BUILD_machasm:
2256 fprintf(ctx->fp, "\t.section __TEXT,__eh_frame,coalesced,no_toc+strip_static_syms+live_support\n"); 2301 fprintf(ctx->fp, "\t.section __TEXT,__eh_frame,coalesced,no_toc+strip_static_syms+live_support\n");
2257 fprintf(ctx->fp, 2302 fprintf(ctx->fp,
diff --git a/src/buildvm_x64win.h b/src/buildvm_x64win.h
index e4cb8851..2ea21bb8 100644
--- a/src/buildvm_x64win.h
+++ b/src/buildvm_x64win.h
@@ -2248,6 +2248,51 @@ static void emit_asm_debug(BuildCtx *ctx)
2248 "\t.align " SZPTR "\n" 2248 "\t.align " SZPTR "\n"
2249 ".LEFDE1:\n\n", (int)ctx->codesz, CFRAME_SIZE); 2249 ".LEFDE1:\n\n", (int)ctx->codesz, CFRAME_SIZE);
2250 break; 2250 break;
2251 case BUILD_coffasm:
2252 fprintf(ctx->fp, "\t.section .eh_frame,\"dr\"\n");
2253 fprintf(ctx->fp,
2254 "\t.def %slj_err_unwind_dwarf; .scl 2; .type 32; .endef\n",
2255 LJ_32 ? "_" : "");
2256 fprintf(ctx->fp,
2257 "Lframe1:\n"
2258 "\t.long LECIE1-LSCIE1\n"
2259 "LSCIE1:\n"
2260 "\t.long 0\n"
2261 "\t.byte 0x1\n"
2262 "\t.string \"zP\"\n"
2263 "\t.uleb128 0x1\n"
2264 "\t.sleb128 -" SZPTR "\n"
2265 "\t.byte " REG_RA "\n"
2266 "\t.uleb128 5\n" /* augmentation length */
2267 "\t.byte 0x00\n" /* absptr */
2268 "\t.long %slj_err_unwind_dwarf\n"
2269 "\t.byte 0xc\n\t.uleb128 " REG_SP "\n\t.uleb128 " SZPTR "\n"
2270 "\t.byte 0x80+" REG_RA "\n\t.uleb128 0x1\n"
2271 "\t.align " SZPTR "\n"
2272 "LECIE1:\n\n", LJ_32 ? "_" : "");
2273 fprintf(ctx->fp,
2274 "LSFDE1:\n"
2275 "\t.long LEFDE1-LASFDE1\n"
2276 "LASFDE1:\n"
2277 "\t.long LASFDE1-Lframe1\n"
2278 "\t.long %slj_vm_asm_begin\n"
2279 "\t.long %d\n"
2280 "\t.uleb128 0\n" /* augmentation length */
2281 "\t.byte 0xe\n\t.uleb128 %d\n" /* def_cfa_offset */
2282#if LJ_64
2283 "\t.byte 0x86\n\t.uleb128 0x2\n" /* offset rbp */
2284 "\t.byte 0x83\n\t.uleb128 0x3\n" /* offset rbx */
2285 "\t.byte 0x8f\n\t.uleb128 0x4\n" /* offset r15 */
2286 "\t.byte 0x8e\n\t.uleb128 0x5\n" /* offset r14 */
2287#else
2288 "\t.byte 0x85\n\t.uleb128 0x2\n" /* offset ebp */
2289 "\t.byte 0x87\n\t.uleb128 0x3\n" /* offset edi */
2290 "\t.byte 0x86\n\t.uleb128 0x4\n" /* offset esi */
2291 "\t.byte 0x83\n\t.uleb128 0x5\n" /* offset ebx */
2292#endif
2293 "\t.align " SZPTR "\n"
2294 "LEFDE1:\n\n", LJ_32 ? "_" : "", (int)ctx->codesz, CFRAME_SIZE);
2295 break;
2251 case BUILD_machasm: 2296 case BUILD_machasm:
2252 fprintf(ctx->fp, "\t.section __TEXT,__eh_frame,coalesced,no_toc+strip_static_syms+live_support\n"); 2297 fprintf(ctx->fp, "\t.section __TEXT,__eh_frame,coalesced,no_toc+strip_static_syms+live_support\n");
2253 fprintf(ctx->fp, 2298 fprintf(ctx->fp,
diff --git a/src/buildvm_x86.dasc b/src/buildvm_x86.dasc
index 1878613e..4e4ccc49 100644
--- a/src/buildvm_x86.dasc
+++ b/src/buildvm_x86.dasc
@@ -4920,6 +4920,51 @@ static void emit_asm_debug(BuildCtx *ctx)
4920 "\t.align " SZPTR "\n" 4920 "\t.align " SZPTR "\n"
4921 ".LEFDE1:\n\n", (int)ctx->codesz, CFRAME_SIZE); 4921 ".LEFDE1:\n\n", (int)ctx->codesz, CFRAME_SIZE);
4922 break; 4922 break;
4923 case BUILD_coffasm:
4924 fprintf(ctx->fp, "\t.section .eh_frame,\"dr\"\n");
4925 fprintf(ctx->fp,
4926 "\t.def %slj_err_unwind_dwarf; .scl 2; .type 32; .endef\n",
4927 LJ_32 ? "_" : "");
4928 fprintf(ctx->fp,
4929 "Lframe1:\n"
4930 "\t.long LECIE1-LSCIE1\n"
4931 "LSCIE1:\n"
4932 "\t.long 0\n"
4933 "\t.byte 0x1\n"
4934 "\t.string \"zP\"\n"
4935 "\t.uleb128 0x1\n"
4936 "\t.sleb128 -" SZPTR "\n"
4937 "\t.byte " REG_RA "\n"
4938 "\t.uleb128 5\n" /* augmentation length */
4939 "\t.byte 0x00\n" /* absptr */
4940 "\t.long %slj_err_unwind_dwarf\n"
4941 "\t.byte 0xc\n\t.uleb128 " REG_SP "\n\t.uleb128 " SZPTR "\n"
4942 "\t.byte 0x80+" REG_RA "\n\t.uleb128 0x1\n"
4943 "\t.align " SZPTR "\n"
4944 "LECIE1:\n\n", LJ_32 ? "_" : "");
4945 fprintf(ctx->fp,
4946 "LSFDE1:\n"
4947 "\t.long LEFDE1-LASFDE1\n"
4948 "LASFDE1:\n"
4949 "\t.long LASFDE1-Lframe1\n"
4950 "\t.long %slj_vm_asm_begin\n"
4951 "\t.long %d\n"
4952 "\t.uleb128 0\n" /* augmentation length */
4953 "\t.byte 0xe\n\t.uleb128 %d\n" /* def_cfa_offset */
4954#if LJ_64
4955 "\t.byte 0x86\n\t.uleb128 0x2\n" /* offset rbp */
4956 "\t.byte 0x83\n\t.uleb128 0x3\n" /* offset rbx */
4957 "\t.byte 0x8f\n\t.uleb128 0x4\n" /* offset r15 */
4958 "\t.byte 0x8e\n\t.uleb128 0x5\n" /* offset r14 */
4959#else
4960 "\t.byte 0x85\n\t.uleb128 0x2\n" /* offset ebp */
4961 "\t.byte 0x87\n\t.uleb128 0x3\n" /* offset edi */
4962 "\t.byte 0x86\n\t.uleb128 0x4\n" /* offset esi */
4963 "\t.byte 0x83\n\t.uleb128 0x5\n" /* offset ebx */
4964#endif
4965 "\t.align " SZPTR "\n"
4966 "LEFDE1:\n\n", LJ_32 ? "_" : "", (int)ctx->codesz, CFRAME_SIZE);
4967 break;
4923 case BUILD_machasm: 4968 case BUILD_machasm:
4924 fprintf(ctx->fp, "\t.section __TEXT,__eh_frame,coalesced,no_toc+strip_static_syms+live_support\n"); 4969 fprintf(ctx->fp, "\t.section __TEXT,__eh_frame,coalesced,no_toc+strip_static_syms+live_support\n");
4925 fprintf(ctx->fp, 4970 fprintf(ctx->fp,
diff --git a/src/buildvm_x86.h b/src/buildvm_x86.h
index 68f27f93..e98d2622 100644
--- a/src/buildvm_x86.h
+++ b/src/buildvm_x86.h
@@ -2403,6 +2403,51 @@ static void emit_asm_debug(BuildCtx *ctx)
2403 "\t.align " SZPTR "\n" 2403 "\t.align " SZPTR "\n"
2404 ".LEFDE1:\n\n", (int)ctx->codesz, CFRAME_SIZE); 2404 ".LEFDE1:\n\n", (int)ctx->codesz, CFRAME_SIZE);
2405 break; 2405 break;
2406 case BUILD_coffasm:
2407 fprintf(ctx->fp, "\t.section .eh_frame,\"dr\"\n");
2408 fprintf(ctx->fp,
2409 "\t.def %slj_err_unwind_dwarf; .scl 2; .type 32; .endef\n",
2410 LJ_32 ? "_" : "");
2411 fprintf(ctx->fp,
2412 "Lframe1:\n"
2413 "\t.long LECIE1-LSCIE1\n"
2414 "LSCIE1:\n"
2415 "\t.long 0\n"
2416 "\t.byte 0x1\n"
2417 "\t.string \"zP\"\n"
2418 "\t.uleb128 0x1\n"
2419 "\t.sleb128 -" SZPTR "\n"
2420 "\t.byte " REG_RA "\n"
2421 "\t.uleb128 5\n" /* augmentation length */
2422 "\t.byte 0x00\n" /* absptr */
2423 "\t.long %slj_err_unwind_dwarf\n"
2424 "\t.byte 0xc\n\t.uleb128 " REG_SP "\n\t.uleb128 " SZPTR "\n"
2425 "\t.byte 0x80+" REG_RA "\n\t.uleb128 0x1\n"
2426 "\t.align " SZPTR "\n"
2427 "LECIE1:\n\n", LJ_32 ? "_" : "");
2428 fprintf(ctx->fp,
2429 "LSFDE1:\n"
2430 "\t.long LEFDE1-LASFDE1\n"
2431 "LASFDE1:\n"
2432 "\t.long LASFDE1-Lframe1\n"
2433 "\t.long %slj_vm_asm_begin\n"
2434 "\t.long %d\n"
2435 "\t.uleb128 0\n" /* augmentation length */
2436 "\t.byte 0xe\n\t.uleb128 %d\n" /* def_cfa_offset */
2437#if LJ_64
2438 "\t.byte 0x86\n\t.uleb128 0x2\n" /* offset rbp */
2439 "\t.byte 0x83\n\t.uleb128 0x3\n" /* offset rbx */
2440 "\t.byte 0x8f\n\t.uleb128 0x4\n" /* offset r15 */
2441 "\t.byte 0x8e\n\t.uleb128 0x5\n" /* offset r14 */
2442#else
2443 "\t.byte 0x85\n\t.uleb128 0x2\n" /* offset ebp */
2444 "\t.byte 0x87\n\t.uleb128 0x3\n" /* offset edi */
2445 "\t.byte 0x86\n\t.uleb128 0x4\n" /* offset esi */
2446 "\t.byte 0x83\n\t.uleb128 0x5\n" /* offset ebx */
2447#endif
2448 "\t.align " SZPTR "\n"
2449 "LEFDE1:\n\n", LJ_32 ? "_" : "", (int)ctx->codesz, CFRAME_SIZE);
2450 break;
2406 case BUILD_machasm: 2451 case BUILD_machasm:
2407 fprintf(ctx->fp, "\t.section __TEXT,__eh_frame,coalesced,no_toc+strip_static_syms+live_support\n"); 2452 fprintf(ctx->fp, "\t.section __TEXT,__eh_frame,coalesced,no_toc+strip_static_syms+live_support\n");
2408 fprintf(ctx->fp, 2453 fprintf(ctx->fp,
diff --git a/src/lj_err.c b/src/lj_err.c
index 5ec81302..56ca0c37 100644
--- a/src/lj_err.c
+++ b/src/lj_err.c
@@ -63,7 +63,7 @@
63** EXT is mandatory on POSIX/x64 since the interpreter doesn't save r12/r13. 63** EXT is mandatory on POSIX/x64 since the interpreter doesn't save r12/r13.
64*/ 64*/
65 65
66#if defined(__ELF__) || defined(__MACH__) 66#if defined(__GNUC__)
67#if LJ_TARGET_X86 67#if LJ_TARGET_X86
68#ifdef LUAJIT_UNWIND_EXTERNAL 68#ifdef LUAJIT_UNWIND_EXTERNAL
69#define LJ_UNWIND_EXT 1 69#define LJ_UNWIND_EXT 1
@@ -532,7 +532,7 @@ static void *err_unwind(lua_State *L, void *stopcf, int errcode)
532 532
533/* -- External frame unwinding -------------------------------------------- */ 533/* -- External frame unwinding -------------------------------------------- */
534 534
535#if defined(__ELF__) || defined(__MACH__) 535#if defined(__GNUC__)
536 536
537#include <unwind.h> 537#include <unwind.h>
538 538