authorgravatar for shawn@git.icuShawn Landden <shawn@git.icu> 2018-08-29 17:37:58-07:00
committergravatar for shawn@git.icuShawn Landden <shawn@git.icu> 2018-09-08 03:52:28+00:00
log342cff28f5033887ac9c2e8b02da9067e8ad2f3d
tree1f15d22c030505bfc3002b42684c8df783581b9c
parent4a8c992ef1e550d969ef1b26a460327fa188451c

initial arm64 support


8 files changed, 487 insertions(+), 12 deletions(-)

CMakeLists.txt+1
......@@ -574,6 +574,7 @@ set(ZIG_STD_FILES
574574 "os/linux/index.zig"
575575 "os/linux/vdso.zig"
576576 "os/linux/x86_64.zig"
577 "os/linux/arm64.zig"
577578 "os/path.zig"
578579 "os/time.zig"
579580 "os/windows/advapi32.zig"
src-self-hosted/libc_installation.zig+2-2
......@@ -280,7 +280,7 @@ pub const LibCInstallation = struct {
280280 switch (builtin.arch) {
281281 builtin.Arch.i386 => try stream.write("x86"),
282282 builtin.Arch.x86_64 => try stream.write("x64"),
283 builtin.Arch.aarch64 => try stream.write("arm"),
283 builtin.Arch.aarch64v8 => try stream.write("arm"),
284284 else => return error.UnsupportedArchitecture,
285285 }
286286 const ucrt_lib_path = try std.os.path.join(loop.allocator, result_buf.toSliceConst(), "ucrt.lib");
......@@ -355,7 +355,7 @@ pub const LibCInstallation = struct {
355355 switch (builtin.arch) {
356356 builtin.Arch.i386 => try stream.write("x86\\"),
357357 builtin.Arch.x86_64 => try stream.write("x64\\"),
358 builtin.Arch.aarch64 => try stream.write("arm\\"),
358 builtin.Arch.aarch64v8 => try stream.write("arm\\"),
359359 else => return error.UnsupportedArchitecture,
360360 }
361361 const kernel32_path = try std.os.path.join(loop.allocator, result_buf.toSliceConst(), "kernel32.lib");
src-self-hosted/link.zig+2-2
......@@ -330,7 +330,7 @@ fn constructLinkerArgsCoff(ctx: *Context) !void {
330330 switch (ctx.comp.target.getArch()) {
331331 builtin.Arch.i386 => try ctx.args.append(c"-MACHINE:X86"),
332332 builtin.Arch.x86_64 => try ctx.args.append(c"-MACHINE:X64"),
333 builtin.Arch.aarch64 => try ctx.args.append(c"-MACHINE:ARM"),
333 builtin.Arch.aarch64v8 => try ctx.args.append(c"-MACHINE:ARM"),
334334 else => return error.UnsupportedLinkArchitecture,
335335 }
336336
......@@ -556,7 +556,7 @@ fn constructLinkerArgsMachO(ctx: *Context) !void {
556556 }
557557 },
558558 DarwinPlatform.Kind.IPhoneOS => {
559 if (ctx.comp.target.getArch() == builtin.Arch.aarch64) {
559 if (ctx.comp.target.getArch() == builtin.Arch.aarch64v8) {
560560 // iOS does not need any crt1 files for arm64
561561 } else if (platform.versionLessThan(3, 1)) {
562562 try ctx.args.append(c"-lcrt1.o");
src-self-hosted/target.zig+39-5
......@@ -250,8 +250,20 @@ pub const Target = union(enum) {
250250 builtin.Arch.renderscript32,
251251 => return 32,
252252
253 builtin.Arch.aarch64,
254 builtin.Arch.aarch64_be,
253 builtin.Arch.aarch64v8_3a,
254 builtin.Arch.aarch64v8_2a,
255 builtin.Arch.aarch64v8_1a,
256 builtin.Arch.aarch64v8,
257 builtin.Arch.aarch64v8r,
258 builtin.Arch.aarch64v8m_baseline,
259 builtin.Arch.aarch64v8m_mainline,
260 builtin.Arch.aarch64_bev8_3a,
261 builtin.Arch.aarch64_bev8_2a,
262 builtin.Arch.aarch64_bev8_1a,
263 builtin.Arch.aarch64_bev8,
264 builtin.Arch.aarch64_bev8r,
265 builtin.Arch.aarch64_bev8m_baseline,
266 builtin.Arch.aarch64_bev8m_mainline,
255267 builtin.Arch.mips64,
256268 builtin.Arch.mips64el,
257269 builtin.Arch.powerpc64,
......@@ -316,8 +328,23 @@ pub const Target = union(enum) {
316328 builtin.Arch.sparcel,
317329 => return "/lib/ld-linux.so.2",
318330
319 builtin.Arch.aarch64 => return "/lib/ld-linux-aarch64.so.1",
320 builtin.Arch.aarch64_be => return "/lib/ld-linux-aarch64_be.so.1",
331 builtin.Arch.aarch64v8_3a,
332 builtin.Arch.aarch64v8_2a,
333 builtin.Arch.aarch64v8_1a,
334 builtin.Arch.aarch64v8,
335 builtin.Arch.aarch64v8r,
336 builtin.Arch.aarch64v8m_baseline,
337 builtin.Arch.aarch64v8m_mainline,
338 => return "/lib/ld-linux-aarch64.so.1",
339
340 builtin.Arch.aarch64_bev8_3a,
341 builtin.Arch.aarch64_bev8_2a,
342 builtin.Arch.aarch64_bev8_1a,
343 builtin.Arch.aarch64_bev8,
344 builtin.Arch.aarch64_bev8r,
345 builtin.Arch.aarch64_bev8m_baseline,
346 builtin.Arch.aarch64_bev8m_mainline,
347 => return "/lib/ld-linux-aarch64_be.so.1",
321348
322349 builtin.Arch.armv8_3a,
323350 builtin.Arch.armv8_2a,
......@@ -530,7 +557,14 @@ pub const Target = union(enum) {
530557 pub fn getDarwinArchString(self: Target) []const u8 {
531558 const arch = self.getArch();
532559 switch (arch) {
533 builtin.Arch.aarch64 => return "arm64",
560 builtin.Arch.aarch64v8_3a,
561 builtin.Arch.aarch64v8_2a,
562 builtin.Arch.aarch64v8_1a,
563 builtin.Arch.aarch64v8,
564 builtin.Arch.aarch64v8r,
565 builtin.Arch.aarch64v8m_baseline,
566 builtin.Arch.aarch64v8m_mainline,
567 => return "arm64",
534568 builtin.Arch.thumb,
535569 builtin.Arch.armv8_3a,
536570 builtin.Arch.armv8_2a,
src/target.cpp+18-3
......@@ -55,8 +55,22 @@ static const ArchType arch_list[] = {
5555 {ZigLLVM_armeb, ZigLLVM_ARMSubArch_v5te},
5656 {ZigLLVM_armeb, ZigLLVM_ARMSubArch_v4t},
5757
58 {ZigLLVM_aarch64, ZigLLVM_NoSubArch},
59 {ZigLLVM_aarch64_be, ZigLLVM_NoSubArch},
58 {ZigLLVM_aarch64, ZigLLVM_ARMSubArch_v8_3a},
59 {ZigLLVM_aarch64, ZigLLVM_ARMSubArch_v8_2a},
60 {ZigLLVM_aarch64, ZigLLVM_ARMSubArch_v8_1a},
61 {ZigLLVM_aarch64, ZigLLVM_ARMSubArch_v8},
62 {ZigLLVM_aarch64, ZigLLVM_ARMSubArch_v8r},
63 {ZigLLVM_aarch64, ZigLLVM_ARMSubArch_v8m_baseline},
64 {ZigLLVM_aarch64, ZigLLVM_ARMSubArch_v8m_mainline},
65
66 {ZigLLVM_aarch64_be, ZigLLVM_ARMSubArch_v8_3a},
67 {ZigLLVM_aarch64_be, ZigLLVM_ARMSubArch_v8_2a},
68 {ZigLLVM_aarch64_be, ZigLLVM_ARMSubArch_v8_1a},
69 {ZigLLVM_aarch64_be, ZigLLVM_ARMSubArch_v8},
70 {ZigLLVM_aarch64_be, ZigLLVM_ARMSubArch_v8r},
71 {ZigLLVM_aarch64_be, ZigLLVM_ARMSubArch_v8m_baseline},
72 {ZigLLVM_aarch64_be, ZigLLVM_ARMSubArch_v8m_mainline},
73
6074 {ZigLLVM_arc, ZigLLVM_NoSubArch},
6175 {ZigLLVM_avr, ZigLLVM_NoSubArch},
6276 {ZigLLVM_bpfel, ZigLLVM_NoSubArch},
......@@ -928,8 +942,9 @@ const char *arch_stack_pointer_register_name(const ArchType *arch) {
928942 return "sp";
929943 case ZigLLVM_x86_64:
930944 return "rsp";
931
932945 case ZigLLVM_aarch64:
946 return "sp";
947
933948 case ZigLLVM_arm:
934949 case ZigLLVM_thumb:
935950 case ZigLLVM_aarch64_be:
std/os/linux/arm64.zig created+419
......@@ -0,0 +1,419 @@
1const std = @import("../../index.zig");
2const linux = std.os.linux;
3const socklen_t = linux.socklen_t;
4const iovec = linux.iovec;
5
6pub const SYS_io_setup = 0;
7pub const SYS_io_destroy = 1;
8pub const SYS_io_submit = 2;
9pub const SYS_io_cancel = 3;
10pub const SYS_io_getevents = 4;
11pub const SYS_setxattr = 5;
12pub const SYS_lsetxattr = 6;
13pub const SYS_fsetxattr = 7;
14pub const SYS_getxattr = 8;
15pub const SYS_lgetxattr = 9;
16pub const SYS_fgetxattr = 10;
17pub const SYS_listxattr = 11;
18pub const SYS_llistxattr = 12;
19pub const SYS_flistxattr = 13;
20pub const SYS_removexattr = 14;
21pub const SYS_lremovexattr = 15;
22pub const SYS_fremovexattr = 16;
23pub const SYS_getcwd = 17;
24pub const SYS_lookup_dcookie = 18;
25pub const SYS_eventfd2 = 19;
26pub const SYS_epoll_create1 = 20;
27pub const SYS_epoll_ctl = 21;
28pub const SYS_epoll_pwait = 22;
29pub const SYS_dup = 23;
30pub const SYS_dup3 = 24;
31pub const SYS_fcntl = 25;
32pub const SYS_inotify_init1 = 26;
33pub const SYS_inotify_add_watch = 27;
34pub const SYS_inotify_rm_watch = 28;
35pub const SYS_ioctl = 29;
36pub const SYS_ioprio_set = 30;
37pub const SYS_ioprio_get = 31;
38pub const SYS_flock = 32;
39pub const SYS_mknodat = 33;
40pub const SYS_mkdirat = 34;
41pub const SYS_unlinkat = 35;
42pub const SYS_symlinkat = 36;
43pub const SYS_linkat = 37;
44pub const SYS_renameat = 38;
45pub const SYS_umount2 = 39;
46pub const SYS_mount = 40;
47pub const SYS_pivot_root = 41;
48pub const SYS_nfsservctl = 42;
49pub const SYS_statfs = 43;
50pub const SYS_fstatfs = 44;
51pub const SYS_truncate = 45;
52pub const SYS_ftruncate = 46;
53pub const SYS_fallocate = 47;
54pub const SYS_faccessat = 48;
55pub const SYS_chdir = 49;
56pub const SYS_fchdir = 50;
57pub const SYS_chroot = 51;
58pub const SYS_fchmod = 52;
59pub const SYS_fchmodat = 53;
60pub const SYS_fchownat = 54;
61pub const SYS_fchown = 55;
62pub const SYS_openat = 56;
63pub const SYS_close = 57;
64pub const SYS_vhangup = 58;
65pub const SYS_pipe2 = 59;
66pub const SYS_quotactl = 60;
67pub const SYS_getdents64 = 61;
68pub const SYS_lseek = 62;
69pub const SYS_read = 63;
70pub const SYS_write = 64;
71pub const SYS_readv = 65;
72pub const SYS_writev = 66;
73pub const SYS_pread64 = 67;
74pub const SYS_pwrite64 = 68;
75pub const SYS_preadv = 69;
76pub const SYS_pwritev = 70;
77pub const SYS_pselect6 = 72;
78pub const SYS_ppoll = 73;
79pub const SYS_signalfd4 = 74;
80pub const SYS_vmsplice = 75;
81pub const SYS_splice = 76;
82pub const SYS_tee = 77;
83pub const SYS_readlinkat = 78;
84pub const SYS_fstatat = 79;
85pub const SYS_fstat = 80;
86pub const SYS_sync = 81;
87pub const SYS_fsync = 82;
88pub const SYS_fdatasync = 83;
89pub const SYS_sync_file_range2 = 84;
90pub const SYS_sync_file_range = 84;
91pub const SYS_timerfd_create = 85;
92pub const SYS_timerfd_settime = 86;
93pub const SYS_timerfd_gettime = 87;
94pub const SYS_utimensat = 88;
95pub const SYS_acct = 89;
96pub const SYS_capget = 90;
97pub const SYS_capset = 91;
98pub const SYS_personality = 92;
99pub const SYS_exit = 93;
100pub const SYS_exit_group = 94;
101pub const SYS_waitid = 95;
102pub const SYS_set_tid_address = 96;
103pub const SYS_unshare = 97;
104pub const SYS_futex = 98;
105pub const SYS_set_robust_list = 99;
106pub const SYS_get_robust_list = 100;
107pub const SYS_nanosleep = 101;
108pub const SYS_getitimer = 102;
109pub const SYS_setitimer = 103;
110pub const SYS_kexec_load = 104;
111pub const SYS_init_module = 105;
112pub const SYS_delete_module = 106;
113pub const SYS_timer_create = 107;
114pub const SYS_timer_gettime = 108;
115pub const SYS_timer_getoverrun = 109;
116pub const SYS_timer_settime = 110;
117pub const SYS_timer_delete = 111;
118pub const SYS_clock_settime = 112;
119pub const SYS_clock_gettime = 113;
120pub const SYS_clock_getres = 114;
121pub const SYS_clock_nanosleep = 115;
122pub const SYS_syslog = 116;
123pub const SYS_ptrace = 117;
124pub const SYS_sched_setparam = 118;
125pub const SYS_sched_setscheduler = 119;
126pub const SYS_sched_getscheduler = 120;
127pub const SYS_sched_getparam = 121;
128pub const SYS_sched_setaffinity = 122;
129pub const SYS_sched_getaffinity = 123;
130pub const SYS_sched_yield = 124;
131pub const SYS_sched_get_priority_max = 125;
132pub const SYS_sched_get_priority_min = 126;
133pub const SYS_sched_rr_get_interval = 127;
134pub const SYS_restart_syscall = 128;
135pub const SYS_kill = 129;
136pub const SYS_tkill = 130;
137pub const SYS_tgkill = 131;
138pub const SYS_sigaltstack = 132;
139pub const SYS_rt_sigsuspend = 133;
140pub const SYS_rt_sigaction = 134;
141pub const SYS_rt_sigprocmask = 135;
142pub const SYS_rt_sigpending = 136;
143pub const SYS_rt_sigtimedwait = 137;
144pub const SYS_rt_sigqueueinfo = 138;
145pub const SYS_rt_sigreturn = 139;
146pub const SYS_setpriority = 140;
147pub const SYS_getpriority = 141;
148pub const SYS_reboot = 142;
149pub const SYS_setregid = 143;
150pub const SYS_setgid = 144;
151pub const SYS_setreuid = 145;
152pub const SYS_setuid = 146;
153pub const SYS_setresuid = 147;
154pub const SYS_getresuid = 148;
155pub const SYS_setresgid = 149;
156pub const SYS_getresgid = 150;
157pub const SYS_setfsuid = 151;
158pub const SYS_setfsgid = 152;
159pub const SYS_times = 153;
160pub const SYS_setpgid = 154;
161pub const SYS_getpgid = 155;
162pub const SYS_getsid = 156;
163pub const SYS_setsid = 157;
164pub const SYS_getgroups = 158;
165pub const SYS_setgroups = 159;
166pub const SYS_uname = 160;
167pub const SYS_sethostname = 161;
168pub const SYS_setdomainname = 162;
169pub const SYS_getrlimit = 163;
170pub const SYS_setrlimit = 164;
171pub const SYS_getrusage = 165;
172pub const SYS_umask = 166;
173pub const SYS_prctl = 167;
174pub const SYS_getcpu = 168;
175pub const SYS_gettimeofday = 169;
176pub const SYS_settimeofday = 170;
177pub const SYS_adjtimex = 171;
178pub const SYS_getpid = 172;
179pub const SYS_getppid = 173;
180pub const SYS_getuid = 174;
181pub const SYS_geteuid = 175;
182pub const SYS_getgid = 176;
183pub const SYS_getegid = 177;
184pub const SYS_gettid = 178;
185pub const SYS_sysinfo = 179;
186pub const SYS_mq_open = 180;
187pub const SYS_mq_unlink = 181;
188pub const SYS_mq_timedsend = 182;
189pub const SYS_mq_timedreceive = 183;
190pub const SYS_mq_notify = 184;
191pub const SYS_mq_getsetattr = 185;
192pub const SYS_msgget = 186;
193pub const SYS_msgctl = 187;
194pub const SYS_msgrcv = 188;
195pub const SYS_msgsnd = 189;
196pub const SYS_semget = 190;
197pub const SYS_semctl = 191;
198pub const SYS_semtimedop = 192;
199pub const SYS_semop = 193;
200pub const SYS_shmget = 194;
201pub const SYS_shmctl = 195;
202pub const SYS_shmat = 196;
203pub const SYS_shmdt = 197;
204pub const SYS_socket = 198;
205pub const SYS_socketpair = 199;
206pub const SYS_bind = 200;
207pub const SYS_listen = 201;
208pub const SYS_accept = 202;
209pub const SYS_connect = 203;
210pub const SYS_getsockname = 204;
211pub const SYS_getpeername = 205;
212pub const SYS_sendto = 206;
213pub const SYS_recvfrom = 207;
214pub const SYS_setsockopt = 208;
215pub const SYS_getsockopt = 209;
216pub const SYS_shutdown = 210;
217pub const SYS_sendmsg = 211;
218pub const SYS_recvmsg = 212;
219pub const SYS_readahead = 213;
220pub const SYS_brk = 214;
221pub const SYS_munmap = 215;
222pub const SYS_mremap = 216;
223pub const SYS_add_key = 217;
224pub const SYS_request_key = 218;
225pub const SYS_keyctl = 219;
226pub const SYS_clone = 220;
227pub const SYS_execve = 221;
228pub const SYS_mmap = 222;
229pub const SYS_fadvise64 = 223;
230pub const SYS_swapon = 224;
231pub const SYS_swapoff = 225;
232pub const SYS_mprotect = 226;
233pub const SYS_msync = 227;
234pub const SYS_mlock = 228;
235pub const SYS_munlock = 229;
236pub const SYS_mlockall = 230;
237pub const SYS_munlockall = 231;
238pub const SYS_mincore = 232;
239pub const SYS_madvise = 233;
240pub const SYS_remap_file_pages = 234;
241pub const SYS_mbind = 235;
242pub const SYS_get_mempolicy = 236;
243pub const SYS_set_mempolicy = 237;
244pub const SYS_migrate_pages = 238;
245pub const SYS_move_pages = 239;
246pub const SYS_rt_tgsigqueueinfo = 240;
247pub const SYS_perf_event_open = 241;
248pub const SYS_accept4 = 242;
249pub const SYS_recvmmsg = 243;
250pub const SYS_arch_specific_syscall = 244;
251pub const SYS_wait4 = 260;
252pub const SYS_prlimit64 = 261;
253pub const SYS_fanotify_init = 262;
254pub const SYS_fanotify_mark = 263;
255pub const SYS_clock_adjtime = 266;
256pub const SYS_syncfs = 267;
257pub const SYS_setns = 268;
258pub const SYS_sendmmsg = 269;
259pub const SYS_process_vm_readv = 270;
260pub const SYS_process_vm_writev = 271;
261pub const SYS_kcmp = 272;
262pub const SYS_finit_module = 273;
263pub const SYS_sched_setattr = 274;
264pub const SYS_sched_getattr = 275;
265pub const SYS_renameat2 = 276;
266pub const SYS_seccomp = 277;
267pub const SYS_getrandom = 278;
268pub const SYS_memfd_create = 279;
269pub const SYS_bpf = 280;
270pub const SYS_execveat = 281;
271pub const SYS_userfaultfd = 282;
272pub const SYS_membarrier = 283;
273pub const SYS_mlock2 = 284;
274pub const SYS_copy_file_range = 285;
275pub const SYS_preadv2 = 286;
276pub const SYS_pwritev2 = 287;
277pub const SYS_pkey_mprotect = 288;
278pub const SYS_pkey_alloc = 289;
279pub const SYS_pkey_free = 290;
280pub const SYS_statx = 291;
281pub const SYS_io_pgetevents = 292;
282pub const SYS_syscalls = 293;
283
284pub const VDSO_USEFUL = true;
285pub const VDSO_CGT_SYM = "__vdso_clock_gettime";
286pub const VDSO_CGT_VER = "LINUX_2.6";
287pub const VDSO_GETCPU_SYM = "__vdso_getcpu";
288pub const VDSO_GETCPU_VER = "LINUX_2.6";
289
290pub fn syscall0(number: usize) usize {
291 return asm volatile ("svc #0"
292 : [ret] "={x0}" (-> usize)
293 : [number] "{x8}" (number)
294 );
295}
296
297pub fn syscall1(number: usize, arg1: usize) usize {
298 return asm volatile ("svc #0"
299 : [ret] "={x0}" (-> usize)
300 : [number] "{x8}" (number),
301 [arg1] "{x0}" (arg1)
302 );
303}
304
305pub fn syscall2(number: usize, arg1: usize, arg2: usize) usize {
306 return asm volatile ("svc #0"
307 : [ret] "={x0}" (-> usize)
308 : [number] "{x8}" (number),
309 [arg1] "{x0}" (arg1),
310 [arg2] "{x1}" (arg2)
311 );
312}
313
314pub fn syscall3(number: usize, arg1: usize, arg2: usize, arg3: usize) usize {
315 return asm volatile ("svc #0"
316 : [ret] "={x0}" (-> usize)
317 : [number] "{x8}" (number),
318 [arg1] "{x0}" (arg1),
319 [arg2] "{x1}" (arg2),
320 [arg3] "{x2}" (arg3)
321 );
322}
323
324pub fn syscall4(number: usize, arg1: usize, arg2: usize, arg3: usize, arg4: usize) usize {
325 return asm volatile ("svc #0"
326 : [ret] "={x0}" (-> usize)
327 : [number] "{x8}" (number),
328 [arg1] "{x0}" (arg1),
329 [arg2] "{x1}" (arg2),
330 [arg3] "{x2}" (arg3),
331 [arg4] "{x3}" (arg4)
332 );
333}
334
335pub fn syscall5(number: usize, arg1: usize, arg2: usize, arg3: usize, arg4: usize, arg5: usize) usize {
336 return asm volatile ("svc #0"
337 : [ret] "={x0}" (-> usize)
338 : [number] "{x8}" (number),
339 [arg1] "{x0}" (arg1),
340 [arg2] "{x1}" (arg2),
341 [arg3] "{x2}" (arg3),
342 [arg4] "{x3}" (arg4),
343 [arg5] "{x4}" (arg5)
344 );
345}
346
347pub fn syscall6(
348 number: usize,
349 arg1: usize,
350 arg2: usize,
351 arg3: usize,
352 arg4: usize,
353 arg5: usize,
354 arg6: usize,
355) usize {
356 return asm volatile ("svc #0"
357 : [ret] "={x0}" (-> usize)
358 : [number] "{x8}" (number),
359 [arg1] "{x0}" (arg1),
360 [arg2] "{x1}" (arg2),
361 [arg3] "{x2}" (arg3),
362 [arg4] "{x3}" (arg4),
363 [arg5] "{x4}" (arg5),
364 [arg6] "{x5}" (arg6)
365 );
366}
367
368/// This matches the libc clone function.
369pub extern fn clone(func: extern fn (arg: usize) u8, stack: usize, flags: usize, arg: usize, ptid: *i32, tls: usize, ctid: *i32) usize;
370
371pub const msghdr = extern struct {
372 msg_name: *u8,
373 msg_namelen: socklen_t,
374 msg_iov: *iovec,
375 msg_iovlen: i32,
376 __pad1: i32,
377 msg_control: *u8,
378 msg_controllen: socklen_t,
379 __pad2: socklen_t,
380 msg_flags: i32,
381};
382
383/// Renamed to Stat to not conflict with the stat function.
384pub const Stat = extern struct {
385 dev: u64,
386 ino: u64,
387 nlink: usize,
388
389 mode: u32,
390 uid: u32,
391 gid: u32,
392 __pad0: u32,
393 rdev: u64,
394 size: i64,
395 blksize: isize,
396 blocks: i64,
397
398 atim: timespec,
399 mtim: timespec,
400 ctim: timespec,
401 __unused: [3]isize,
402};
403
404pub const timespec = extern struct {
405 tv_sec: isize,
406 tv_nsec: isize,
407};
408
409pub const timeval = extern struct {
410 tv_sec: isize,
411 tv_usec: isize,
412};
413
414pub const timezone = extern struct {
415 tz_minuteswest: i32,
416 tz_dsttime: i32,
417};
418
419pub const Elf_Symndx = u32;
std/os/linux/index.zig+1
......@@ -5,6 +5,7 @@ const vdso = @import("vdso.zig");
55pub use switch (builtin.arch) {
66 builtin.Arch.x86_64 => @import("x86_64.zig"),
77 builtin.Arch.i386 => @import("i386.zig"),
8 builtin.Arch.aarch64v8 => @import("arm64.zig"),
89 else => @compileError("unsupported arch"),
910};
1011pub use @import("errno.zig");
std/special/bootstrap.zig+5
......@@ -30,6 +30,11 @@ nakedcc fn _start() noreturn {
3030 : [argc] "=r" (-> [*]usize)
3131 );
3232 },
33 builtin.Arch.aarch64v8 => {
34 argc_ptr = asm ("mov %[argc], sp"
35 : [argc] "=r" (-> [*]usize)
36 );
37 },
3338 else => @compileError("unsupported arch"),
3439 }
3540 // If LLVM inlines stack variables into _start, they will overwrite