aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorgingerBill <gingerBill@users.noreply.github.com>2026-01-15 18:12:39 +0000
committergingerBill <gingerBill@users.noreply.github.com>2026-01-15 18:12:39 +0000
commit557e854864e13f5da23533547b443ffde471cfc9 (patch)
treeb7ba1f5dd2128ce84162d407ee4da5df3dacb777 /src
parentf4a7e0b279043357a550c26f1972835f9f5688a1 (diff)
`-disable-unwind`
Diffstat (limited to 'src')
-rw-r--r--src/build_settings.cpp1
-rw-r--r--src/llvm_backend_proc.cpp4
-rw-r--r--src/main.cpp8
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;