diff options
| author | gingerBill <gingerBill@users.noreply.github.com> | 2026-01-15 18:12:39 +0000 |
|---|---|---|
| committer | gingerBill <gingerBill@users.noreply.github.com> | 2026-01-15 18:12:39 +0000 |
| commit | 557e854864e13f5da23533547b443ffde471cfc9 (patch) | |
| tree | b7ba1f5dd2128ce84162d407ee4da5df3dacb777 /src | |
| parent | f4a7e0b279043357a550c26f1972835f9f5688a1 (diff) | |
`-disable-unwind`
Diffstat (limited to 'src')
| -rw-r--r-- | src/build_settings.cpp | 1 | ||||
| -rw-r--r-- | src/llvm_backend_proc.cpp | 4 | ||||
| -rw-r--r-- | src/main.cpp | 8 |
3 files changed, 13 insertions, 0 deletions
diff --git a/src/build_settings.cpp b/src/build_settings.cpp index 7160f3721..31a07aa69 100644 --- a/src/build_settings.cpp +++ b/src/build_settings.cpp @@ -582,6 +582,7 @@ struct BuildContext { RelocMode reloc_mode; bool disable_red_zone; + bool disable_unwind; isize max_error_count; diff --git a/src/llvm_backend_proc.cpp b/src/llvm_backend_proc.cpp index 524c37186..640a43111 100644 --- a/src/llvm_backend_proc.cpp +++ b/src/llvm_backend_proc.cpp @@ -153,6 +153,10 @@ gb_internal lbProcedure *lb_create_procedure(lbModule *m, Entity *entity, bool i lb_ensure_abi_function_type(m, p); lb_add_function_type_attributes(p->value, p->abi_function_type, p->abi_function_type->calling_convention); + if (build_context.disable_unwind) { + lb_add_attribute_to_proc(m, p->value, "nounwind"); + } + if (pt->Proc.diverging) { lb_add_attribute_to_proc(m, p->value, "noreturn"); } diff --git a/src/main.cpp b/src/main.cpp index 326c4c457..753f58986 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -363,6 +363,8 @@ enum BuildFlagKind { BuildFlag_RelocMode, BuildFlag_DisableRedZone, + BuildFlag_DisableUnwind, + BuildFlag_DisallowDo, BuildFlag_DefaultToNilAllocator, BuildFlag_DefaultToPanicAllocator, @@ -592,6 +594,8 @@ gb_internal bool parse_build_flags(Array<String> args) { add_flag(&build_flags, BuildFlag_RelocMode, str_lit("reloc-mode"), BuildFlagParam_String, Command__does_build); add_flag(&build_flags, BuildFlag_DisableRedZone, str_lit("disable-red-zone"), BuildFlagParam_None, Command__does_build); + add_flag(&build_flags, BuildFlag_DisableUnwind, str_lit("disable-unwind"), BuildFlagParam_None, Command__does_build); + add_flag(&build_flags, BuildFlag_DisallowDo, str_lit("disallow-do"), BuildFlagParam_None, Command__does_check); add_flag(&build_flags, BuildFlag_DefaultToNilAllocator, str_lit("default-to-nil-allocator"), BuildFlagParam_None, Command__does_check); add_flag(&build_flags, BuildFlag_DefaultToPanicAllocator, str_lit("default-to-panic-allocator"),BuildFlagParam_None, Command__does_check); @@ -1424,6 +1428,10 @@ gb_internal bool parse_build_flags(Array<String> args) { case BuildFlag_DisableRedZone: build_context.disable_red_zone = true; break; + case BuildFlag_DisableUnwind: + build_context.disable_unwind = true; + break; + case BuildFlag_DisallowDo: build_context.disallow_do = true; break; |