summaryrefslogtreecommitdiff
path: root/src/jit
diff options
context:
space:
mode:
authorMike Pall <mike>2015-08-25 10:16:39 +0200
committerMike Pall <mike>2015-08-25 10:16:39 +0200
commit0a3cd94631f1d2d1d18b641ecd25f49ed54f832e (patch)
treee932e344a590959fd7f75bf92a24de6d03f5fe96 /src/jit
parentba617df6f8ce4a9ab50974f993bcfe38bb4a28b4 (diff)
downloadluajit-0a3cd94631f1d2d1d18b641ecd25f49ed54f832e.tar.gz
luajit-0a3cd94631f1d2d1d18b641ecd25f49ed54f832e.tar.bz2
luajit-0a3cd94631f1d2d1d18b641ecd25f49ed54f832e.zip
ARM64: Add support for saving bytecode as object files.
Diffstat (limited to 'src/jit')
-rw-r--r--src/jit/bcsave.lua14
1 files changed, 8 insertions, 6 deletions
diff --git a/src/jit/bcsave.lua b/src/jit/bcsave.lua
index ef5a1aa9..1fe9d389 100644
--- a/src/jit/bcsave.lua
+++ b/src/jit/bcsave.lua
@@ -63,7 +63,7 @@ local map_type = {
63} 63}
64 64
65local map_arch = { 65local map_arch = {
66 x86 = true, x64 = true, arm = true, ppc = true, 66 x86 = true, x64 = true, arm = true, arm64 = true, ppc = true,
67 mips = true, mipsel = true, 67 mips = true, mipsel = true,
68} 68}
69 69
@@ -237,7 +237,7 @@ typedef struct {
237 hdr.eendian = isbe and 2 or 1 237 hdr.eendian = isbe and 2 or 1
238 hdr.eversion = 1 238 hdr.eversion = 1
239 hdr.type = f16(1) 239 hdr.type = f16(1)
240 hdr.machine = f16(({ x86=3, x64=62, arm=40, ppc=20, mips=8, mipsel=8 })[ctx.arch]) 240 hdr.machine = f16(({ x86=3, x64=62, arm=40, arm64=183, ppc=20, mips=8, mipsel=8 })[ctx.arch])
241 if ctx.arch == "mips" or ctx.arch == "mipsel" then 241 if ctx.arch == "mips" or ctx.arch == "mipsel" then
242 hdr.flags = 0x50001006 242 hdr.flags = 0x50001006
243 end 243 end
@@ -477,13 +477,13 @@ typedef struct {
477} mach_obj_64; 477} mach_obj_64;
478typedef struct { 478typedef struct {
479 mach_fat_header fat; 479 mach_fat_header fat;
480 mach_fat_arch fat_arch[4]; 480 mach_fat_arch fat_arch[2];
481 struct { 481 struct {
482 mach_header hdr; 482 mach_header hdr;
483 mach_segment_command seg; 483 mach_segment_command seg;
484 mach_section sec; 484 mach_section sec;
485 mach_symtab_command sym; 485 mach_symtab_command sym;
486 } arch[4]; 486 } arch[2];
487 mach_nlist sym_entry; 487 mach_nlist sym_entry;
488 uint8_t space[4096]; 488 uint8_t space[4096];
489} mach_fat_obj; 489} mach_fat_obj;
@@ -494,6 +494,8 @@ typedef struct {
494 is64, align, mobj = true, 8, "mach_obj_64" 494 is64, align, mobj = true, 8, "mach_obj_64"
495 elseif ctx.arch == "arm" then 495 elseif ctx.arch == "arm" then
496 isfat, mobj = true, "mach_fat_obj" 496 isfat, mobj = true, "mach_fat_obj"
497 elseif ctx.arch == "arm64" then
498 is64, align, isfat, mobj = true, 8, true, "mach_fat_obj"
497 else 499 else
498 check(ctx.arch == "x86", "unsupported architecture for OSX") 500 check(ctx.arch == "x86", "unsupported architecture for OSX")
499 end 501 end
@@ -503,8 +505,8 @@ typedef struct {
503 -- Create Mach-O object and fill in header. 505 -- Create Mach-O object and fill in header.
504 local o = ffi.new(mobj) 506 local o = ffi.new(mobj)
505 local mach_size = aligned(ffi.offsetof(o, "space")+#symname+2, align) 507 local mach_size = aligned(ffi.offsetof(o, "space")+#symname+2, align)
506 local cputype = ({ x86={7}, x64={0x01000007}, arm={7,12,12,12} })[ctx.arch] 508 local cputype = ({ x86={7}, x64={0x01000007}, arm={7,12}, arm64={0x01000007,0x0100000c} })[ctx.arch]
507 local cpusubtype = ({ x86={3}, x64={3}, arm={3,6,9,11} })[ctx.arch] 509 local cpusubtype = ({ x86={3}, x64={3}, arm={3,9}, arm64={3,0} })[ctx.arch]
508 if isfat then 510 if isfat then
509 o.fat.magic = be32(0xcafebabe) 511 o.fat.magic = be32(0xcafebabe)
510 o.fat.nfat_arch = be32(#cpusubtype) 512 o.fat.nfat_arch = be32(#cpusubtype)