diff options
| author | 0dminnimda <0dminnimda@gmail.com> | 2024-11-04 15:39:06 +0300 |
|---|---|---|
| committer | 0dminnimda <0dminnimda@gmail.com> | 2024-11-04 15:39:51 +0300 |
| commit | c26e7e17a18bac7f188535749240c6cc2709a633 (patch) | |
| tree | 8e153d7e218b886d403a10fc23d9ae15bf4718bb /src/linker.cpp | |
| parent | 35f1b0f11ebb97910f3b4c82abd4a87dd52985f9 (diff) | |
Simplify use of pie
Diffstat (limited to 'src/linker.cpp')
| -rw-r--r-- | src/linker.cpp | 29 |
1 files changed, 9 insertions, 20 deletions
diff --git a/src/linker.cpp b/src/linker.cpp index 6b16c6489..1ffec3bf7 100644 --- a/src/linker.cpp +++ b/src/linker.cpp @@ -607,27 +607,16 @@ gb_internal i32 linker_stage(LinkerData *gen) { } - switch (build_context.link_pie) { - case (LinkPIE_Default): - if (build_context.build_mode != BuildMode_DynamicLibrary) { - if (build_context.metrics.os != TargetOs_openbsd - && build_context.metrics.os != TargetOs_haiku - && build_context.metrics.arch != TargetArch_riscv64 - ) { - // OpenBSD and Haiku default to PIE executable. do not pass -no-pie for it. - link_settings = gb_string_appendc(link_settings, "-no-pie "); - } - } - break; - case (LinkPIE_Yes): - if (build_context.build_mode != BuildMode_Executable) { - compiler_error("linking NON-EXECUTABLE as pie (position independent EXECUTABLE)"); + if (build_context.build_mode == BuildMode_Executable && build_context.reloc_mode == RelocMode_PIC) { + // Do not disable PIE, let the linker choose. (most likely you want it enabled) + } else if (build_context.build_mode != BuildMode_DynamicLibrary) { + if (build_context.metrics.os != TargetOs_openbsd + && build_context.metrics.os != TargetOs_haiku + && build_context.metrics.arch != TargetArch_riscv64 + ) { + // OpenBSD and Haiku default to PIE executable. do not pass -no-pie for it. + link_settings = gb_string_appendc(link_settings, "-no-pie "); } - link_settings = gb_string_appendc(link_settings, "-pie "); - break; - case (LinkPIE_No): - link_settings = gb_string_appendc(link_settings, "-no-pie "); - break; } gbString platform_lib_str = gb_string_make(heap_allocator(), ""); |