authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2019-03-27 13:11:01-04:00
committergravatar for noreply@github.comGitHub <noreply@github.com> 2019-03-27 13:11:01-04:00
logfbe9233aa7a84a1c382f35510e71f06d597e2a19
treec5373e65b70a3ec9ec4d4c3cdeeaed5ae70d9e4b
parentcf4e9a27c5a0f370197837312307f40bb1d6685f
parent084724c689215fe3a647ceb9d8622faeb60da1ba
signaturebadge-question-mark Signed by PGP key 4AEE18F83AFDEB23

Merge pull request #2107 from shawnl/arm64

fix build on arm64

5 files changed, 41 insertions(+), 13 deletions(-)

src/codegen.cpp+2-8
......@@ -7989,15 +7989,9 @@ static void detect_dynamic_linker(CodeGen *g) {
79897989#if defined(ZIG_OS_LINUX)
79907990 {
79917991 Error err;
7992 static const char *dyn_tests[] = {
7993#if defined(ZIG_ARCH_X86_64)
7994 "ld-linux-x86-64.so.2",
7995 "ld-musl-x86_64.so.1",
7996#endif
7997 };
79987992 Buf *result = buf_alloc();
7999 for (size_t i = 0; i < array_length(dyn_tests); i += 1) {
8000 const char *lib_name = dyn_tests[i];
7993 for (size_t i = 0; possible_ld_names[i] != NULL; i += 1) {
7994 const char *lib_name = possible_ld_names[i];
80017995 if ((err = zig_libc_cc_print_file_name(lib_name, result, false, true))) {
80027996 if (err != ErrorCCompilerCannotFindFile) {
80037997 fprintf(stderr, "Unable to detect native dynamic linker: %s\n", err_str(err));
src/compiler.cpp+6-5
......@@ -26,11 +26,12 @@ Buf *get_stage1_cache_path(void) {
2626}
2727
2828static void detect_dynamic_linker(Buf *lib_path) {
29#if defined(ZIG_OS_LINUX) && defined(ZIG_ARCH_X86_64)
30 if (buf_ends_with_str(lib_path, "ld-linux-x86-64.so.2")) {
31 buf_init_from_buf(&saved_dynamic_linker_path, lib_path);
32 } else if (buf_ends_with_str(lib_path, "ld-musl-x86-64.so.1")) {
33 buf_init_from_buf(&saved_dynamic_linker_path, lib_path);
29#if defined(ZIG_OS_LINUX)
30 for (size_t i = 0; possible_ld_names[i] != NULL; i += 1) {
31 if (buf_ends_with_str(lib_path, possible_ld_names[i])) {
32 buf_init_from_buf(&saved_dynamic_linker_path, lib_path);
33 break;
34 }
3435 }
3536#endif
3637}
src/os.cpp+18
......@@ -2076,3 +2076,21 @@ void os_file_close(OsFile file) {
20762076 close(file);
20772077#endif
20782078}
2079
2080#ifdef ZIG_OS_LINUX
2081const char *possible_ld_names[] = {
2082#if defined(ZIG_ARCH_X86_64)
2083 "ld-linux-x86-64.so.2",
2084 "ld-musl-x86_64.so.1",
2085#elif defined(ZIG_ARCH_ARM64)
2086 "ld-linux-aarch64.so.1",
2087 "ld-musl-aarch64.so.1",
2088#elif defined(ZIG_ARCH_ARM)
2089 "ld-linux-armhf.so.3",
2090 "ld-musl-armhf.so.1",
2091 "ld-linux.so.3",
2092 "ld-musl-arm.so.1",
2093#endif
2094 NULL,
2095};
2096#endif
src/os.hpp+8
......@@ -33,10 +33,18 @@
3333
3434#if defined(__x86_64__)
3535#define ZIG_ARCH_X86_64
36#elif defined(__aarch64__)
37#define ZIG_ARCH_ARM64
38#elif defined(__ARM_EABI__)
39#define ZIG_ARCH_ARM
3640#else
3741#define ZIG_ARCH_UNKNOWN
3842#endif
3943
44#ifdef ZIG_OS_LINUX
45extern const char *possible_ld_names[];
46#endif
47
4048#if defined(ZIG_OS_WINDOWS)
4149#define ZIG_PRI_usize "I64u"
4250#define ZIG_PRI_u64 "I64u"
std/special/bootstrap.zig+7
......@@ -171,6 +171,13 @@ fn linuxSetThreadArea(addr: usize) void {
171171 // acrh_prctl is documented to never fail
172172 assert(rc == 0);
173173 },
174 builtin.Arch.aarch64 => {
175 asm volatile (
176 \\ msr tpidr_el0,x0
177 \\ mov w0,#0
178 \\ ret
179 );
180 },
174181 else => @compileError("Unsupported architecture"),
175182 }
176183}