Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Segfault/Trap when using -show-system-calls that generate long link commands #4831

Open
spahnke opened this issue Feb 11, 2025 · 1 comment

Comments

@spahnke
Copy link
Contributor

spahnke commented Feb 11, 2025

Context

Odin: dev-2025-02-nightly:584fdc0
OS: macOS Sequoia 15.3.0 (build 24D60, kernel 24.3.0)
CPU: Apple M4
RAM: 24576 MiB
Backend: LLVM 18.1.8

Steps to Reproduce

This started happening after updating to the newest compiler version with one of my projects and I struggled a bit to reproduce minimally because it seems to be related to link command length. If you run

odin build . -out:long-executable-name -sanitize:address -show-system-calls

for the input file

package main

import "base:runtime"
import "core:c"
import "core:encoding/ansi"
import "core:fmt"
import "core:log"
import "core:image/png"
import "core:mem"
import "core:mem/virtual"
import "core:strings"
import "vendor:glfw"
import gl "vendor:OpenGL"

main :: proc() {
    glfw.Init()
}

you get a segfault. If you make the build command shorter (e.g. changing the executable name, taking away the -sanitize option), or remove an import, or even comment the line of code in main, it doesn't segfault anymore but traps. If you make it yet shorter it works.

I built from source to run it through the debugger and LLDB reports the error here:

(lldb) run build . -out:long-executable-name -sanitize:address -show-system-calls
Process 73993 launched: '/Users/sebastian/dev/Odin/odin' (arm64)
[SYSTEM CALL] ld-link
Process 73993 stopped
* thread #1, queue = 'com.apple.main-thread', stop reason = EXC_BAD_ACCESS (code=1, address=0x696c2f7765726265)
    frame #0: 0x0000000100004704 odin`gb_strlen(str="") at gb.h:3653:8
   3650                 return 0;
   3651         }
   3652         while (cast(uintptr)str % sizeof(usize)) {
-> 3653                 if (!*str)
   3654                         return str - begin;
   3655                 str++;
   3656         }
Target 0: (odin) stopped.
(lldb) bt
* thread #1, queue = 'com.apple.main-thread', stop reason = EXC_BAD_ACCESS (code=1, address=0x696c2f7765726265)
  * frame #0: 0x0000000100004704 odin`gb_strlen(str="") at gb.h:3653:8
    frame #1: 0x000000010000bc18 odin`gb__print_string(text="", max_len=8192, info=0x000000016fdfa4b8, str="") at gb.h:5907:9
    frame #2: 0x00000001000065ec odin`gb_snprintf_va(text="", max_len=8192, fmt="s\n\n", va="b -lm   -L/ -framework System  -framework Cocoa  -framework IOKit  -framework OpenGL  /Users/sebastian/dev/Odin/vendor/glfw/lib/darwin/libglfw3.a   -target arm64-apple-macosx   -fsanitize=address  -no-pie -e _main -Wl,-rpath,@loader_path  \n\n") at gb.h:6192:10
    frame #3: 0x00000001000026cc odin`::gb_printf_err(const char *, ...) [inlined] gb_fprintf_va(f=0x000000010034a830, fmt="%s\n\n", va="ebrew/lib -lm   -L/ -framework System  -framework Cocoa  -framework IOKit  -framework OpenGL  /Users/sebastian/dev/Odin/vendor/glfw/lib/darwin/libglfw3.a   -target arm64-apple-macosx   -fsanitize=address  -no-pie -e _main -Wl,-rpath,@loader_path  \n\n") at gb.h:5848:9
    frame #4: 0x0000000100002550 odin`::gb_printf_err(const char *, ...) [inlined] gb_printf_err_va(fmt="%s\n\n", va="ebrew/lib -lm   -L/ -framework System  -framework Cocoa  -framework IOKit  -framework OpenGL  /Users/sebastian/dev/Odin/vendor/glfw/lib/darwin/libglfw3.a   -target arm64-apple-macosx   -fsanitize=address  -no-pie -e _main -Wl,-rpath,@loader_path  \n\n") at gb.h:5836:9
    frame #5: 0x00000001000024a4 odin`gb_printf_err(fmt="%s\n\n") at gb.h:5797:8
@spahnke
Copy link
Contributor Author

spahnke commented Feb 11, 2025

For reference this is the command printed when it still works (using -out:probe):

clang -Wno-unused-command-line-argument "/var/folders/gb/yjg0krmn6qv7q8vg674bkhqc0000gn/T//probe-os-13744c4a0.o" "/var/folders/gb/yjg0krmn6qv7q8vg674bkhqc0000gn/T//probe-reflect-13744faa0.o" "/var/folders/gb/yjg0krmn6qv7q8vg674bkhqc0000gn/T//probe-compress-13744d0a0.o" "/var/folders/gb/yjg0krmn6qv7q8vg674bkhqc0000gn/T//probe-time-13744caa0.o" "/var/folders/gb/yjg0krmn6qv7q8vg674bkhqc0000gn/T//probe-libc-1374506a0.o" "/var/folders/gb/yjg0krmn6qv7q8vg674bkhqc0000gn/T//probe-compress_zlib-13744d3a0.o" "/var/folders/gb/yjg0krmn6qv7q8vg674bkhqc0000gn/T//probe-bytes-13744dfa0.o" "/var/folders/gb/yjg0krmn6qv7q8vg674bkhqc0000gn/T//probe-glfw_bindings-137450fa0.o" "/var/folders/gb/yjg0krmn6qv7q8vg674bkhqc0000gn/T//probe-png-13744b2a0.o" "/var/folders/gb/yjg0krmn6qv7q8vg674bkhqc0000gn/T//probe-glfw-13744bea0.o" "/var/folders/gb/yjg0krmn6qv7q8vg674bkhqc0000gn/T//probe-datetime-13744e2a0.o" "/var/folders/gb/yjg0krmn6qv7q8vg674bkhqc0000gn/T//probe-vendor_gl-13744c1a0.o" "/var/folders/gb/yjg0krmn6qv7q8vg674bkhqc0000gn/T//probe-strconv_decimal-1374500a0.o" "/var/folders/gb/yjg0krmn6qv7q8vg674bkhqc0000gn/T//probe-darwin-13744eea0.o" "/var/folders/gb/yjg0krmn6qv7q8vg674bkhqc0000gn/T//probe-posix-13744f1a0.o" "/var/folders/gb/yjg0krmn6qv7q8vg674bkhqc0000gn/T//probe-runtime-13744a0a0.o" "/var/folders/gb/yjg0krmn6qv7q8vg674bkhqc0000gn/T//probe-utf8-13744d9a0.o" "/var/folders/gb/yjg0krmn6qv7q8vg674bkhqc0000gn/T//probe-unicode-13744e8a0.o" "/var/folders/gb/yjg0krmn6qv7q8vg674bkhqc0000gn/T//probe-strings-13744bba0.o" "/var/folders/gb/yjg0krmn6qv7q8vg674bkhqc0000gn/T//probe-vulkan-1374512a0.o" "/var/folders/gb/yjg0krmn6qv7q8vg674bkhqc0000gn/T//probe-mem-13744b5a0.o" "/var/folders/gb/yjg0krmn6qv7q8vg674bkhqc0000gn/T//probe-image-13744d6a0.o" "/var/folders/gb/yjg0krmn6qv7q8vg674bkhqc0000gn/T//probe-sys_windows-1374518a0.o" "/var/folders/gb/yjg0krmn6qv7q8vg674bkhqc0000gn/T//probe-xlib-137451ba0.o" "/var/folders/gb/yjg0krmn6qv7q8vg674bkhqc0000gn/T//probe-utf16-1374503a0.o" "/var/folders/gb/yjg0krmn6qv7q8vg674bkhqc0000gn/T//probe-main-13744a3a0.o" "/var/folders/gb/yjg0krmn6qv7q8vg674bkhqc0000gn/T//probe-hash-13744dca0.o" "/var/folders/gb/yjg0krmn6qv7q8vg674bkhqc0000gn/T//probe-ansi-13744a9a0.o" "/var/folders/gb/yjg0krmn6qv7q8vg674bkhqc0000gn/T//probe-unix-13744e5a0.o" "/var/folders/gb/yjg0krmn6qv7q8vg674bkhqc0000gn/T//probe-simd-13744eba0.o" "/var/folders/gb/yjg0krmn6qv7q8vg674bkhqc0000gn/T//probe-137449d28.o" "/var/folders/gb/yjg0krmn6qv7q8vg674bkhqc0000gn/T//probe-log-13744afa0.o" "/var/folders/gb/yjg0krmn6qv7q8vg674bkhqc0000gn/T//probe-io-13744c7a0.o" "/var/folders/gb/yjg0krmn6qv7q8vg674bkhqc0000gn/T//probe-math-13744f4a0.o" "/var/folders/gb/yjg0krmn6qv7q8vg674bkhqc0000gn/T//probe-bufio-13744cda0.o" "/var/folders/gb/yjg0krmn6qv7q8vg674bkhqc0000gn/T//probe-strconv-13744fda0.o" "/var/folders/gb/yjg0krmn6qv7q8vg674bkhqc0000gn/T//probe-math_bits-13744f7a0.o" "/var/folders/gb/yjg0krmn6qv7q8vg674bkhqc0000gn/T//probe-fmt-13744aca0.o" "/var/folders/gb/yjg0krmn6qv7q8vg674bkhqc0000gn/T//probe-objc_Foundation-1374515a0.o" "/var/folders/gb/yjg0krmn6qv7q8vg674bkhqc0000gn/T//probe-mem_virtual-13744b8a0.o" "/var/folders/gb/yjg0krmn6qv7q8vg674bkhqc0000gn/T//probe--137450ca0.o" "/var/folders/gb/yjg0krmn6qv7q8vg674bkhqc0000gn/T//probe-sync-1374509a0.o" "/var/folders/gb/yjg0krmn6qv7q8vg674bkhqc0000gn/T//probe-c-13744a6a0.o"  -o "/Users/sebastian/dev/probe/probe"  -Wl,-syslibroot /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk -L/usr/local/lib -L/opt/homebrew/lib -lm   -L/ -framework System  -framework Cocoa  -framework IOKit  -framework OpenGL  /Users/sebastian/dev/Odin/vendor/glfw/lib/darwin/libglfw3.a   -target arm64-apple-macosx   -fsanitize=address  -no-pie -e _main -Wl,-rpath,@loader_path

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant