Commit c0b4121ff2
Changed files (4)
src/codegen.cpp
@@ -8390,15 +8390,16 @@ void add_cc_args(CodeGen *g, ZigList<const char *> &args, const char *out_dep_pa
}
}
- args.append("-isystem");
- args.append(buf_ptr(g->zig_c_headers_dir));
-
for (size_t i = 0; i < g->libc_include_dir_len; i += 1) {
Buf *include_dir = g->libc_include_dir_list[i];
args.append("-isystem");
args.append(buf_ptr(include_dir));
}
+ // According to Rich Felker libc headers are supposed to go before C language headers.
+ args.append("-isystem");
+ args.append(buf_ptr(g->zig_c_headers_dir));
+
if (g->zig_target->is_native) {
args.append("-march=native");
} else {
src/link.cpp
@@ -1775,11 +1775,15 @@ static void construct_linker_job_elf(LinkJob *lj) {
lj->args.append("--no-as-needed");
}
} else if (target_is_glibc(g->zig_target)) {
- lj->args.append(build_libunwind(g));
+ if (target_supports_libunwind(g->zig_target)) {
+ lj->args.append(build_libunwind(g));
+ }
add_glibc_libs(lj);
lj->args.append(get_libc_crt_file(g, "libc_nonshared.a"));
} else if (target_is_musl(g->zig_target)) {
- lj->args.append(build_libunwind(g));
+ if (target_supports_libunwind(g->zig_target)) {
+ lj->args.append(build_libunwind(g));
+ }
lj->args.append(build_musl(g));
} else {
zig_unreachable();
src/target.cpp
@@ -1687,3 +1687,9 @@ const char *target_arch_musl_name(ZigLLVM_ArchType arch) {
}
}
+bool target_supports_libunwind(const ZigTarget *target) {
+ if (target->arch == ZigLLVM_arm || target->arch == ZigLLVM_armeb) {
+ return false;
+ }
+ return true;
+}
src/target.hpp
@@ -189,6 +189,7 @@ bool target_is_single_threaded(const ZigTarget *target);
bool target_supports_stack_probing(const ZigTarget *target);
bool target_has_debug_info(const ZigTarget *target);
const char *target_arch_musl_name(ZigLLVM_ArchType arch);
+bool target_supports_libunwind(const ZigTarget *target);
uint32_t target_arch_pointer_bit_width(ZigLLVM_ArchType arch);