-
Notifications
You must be signed in to change notification settings - Fork 524
chore: support apple m1 backtraces #354
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
Open
ajbt200128
wants to merge
1
commit into
bombela:master
Choose a base branch
from
ajbt200128:austin/arm-macos
base: master
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
should close #326 if I understand this issue correctly |
semgrep-ci bot
pushed a commit
to semgrep/semgrep
that referenced
this pull request
Aug 20, 2025
This PR adds beautiful segfaults ❤️ . Whenever we segfault in OCaml code, we should now be provided with some backtraces, including function name, file # and potentially code snippets: <details> <summary>Backtrace</summary> ``` ____ /> フ | _ _ | /` ミ_x ノ / | / ヽ ノ | | | | / ̄ | | | | ( ̄ヽ_ヽ)_)_) \二つ Segfault cat says: process 5514 received signal: > "Segmentation fault" faulting address: 0x01 Stack trace (most recent call last): #14 Object "", at 0xffffffffffffffff, in #13 Source "src/env/__libc_start_main.c", line 95, in libc_start_main_stage2 [0x2f61b77] #12 Source "runtime/main.c", line 37, in main [0x41f94f] #11 | Source "runtime/startup_nat.c", line 146, in caml_startup | Source "runtime/startup_nat.c", line 139, in caml_startup_exn Source "runtime/startup_nat.c", line 134, in caml_main [0x2f5a16f] #10 | Source "runtime/startup_nat.c", line 86, in caml_startup_common Source "runtime/startup_nat.c", line 127, in caml_startup_common [0x2f5a0d7] #9 Object "/src/semgrep-pro/_build/default/OSS/src/main/Main.exe", at 0x2f5a69f, in caml_start_program #8 Object "/src/semgrep-pro/_build/default/OSS/src/main/Main.exe", at 0x467227, in caml_program #7 Source "OSS/src/main/Main.ml", line 91, in camlDune__exe__Main.entry [0x4798a7] 88: * core' and './dune' install section. We use the argv[0] trick below to decide 89: * whether the user wants the semgrep-core or osemgrep behavior. *) 90: let () = > 91: Cap.main (fun (caps : Cap.all_caps) -> 92: let argv = CapSys.argv caps#argv in 93: let argv0 = 94: (* remove the possible ".exe" extension for Windows and ".bc" *) #6 Source "OSS/libs/commons/UCommon.ml", line 42, in camlUCommon.exn_to_real_unixexit_351 [0x22ce38b] 40: (* now in prelude: exception UnixExit of int *) 41: let exn_to_real_unixexit f = > 42: try f () with 43: (* If it is a normal exit just info log it *) 44: | UnixExit (0, msg) -> 45: (* nosemgrep: no-logs-in-library *) #5 Source "OSS/libs/commons/Common.ml", line 53, in camlCommon.protect_307 [0x22c28af] 50: *) 51: let protect ~finally work = 52: (* nosemgrep: no-fun-protect *) > 53: try Fun.protect ~finally work with 54: | Fun.Finally_raised exn1 as exn -> 55: (* Just re-raise whatever exception was raised during a 'finally', 56: * drop 'Finally_raised'. #4 Source "/root/.opam/5.3.0/.opam-switch/build/ocaml-compiler.5.3.0/stdlib/fun.ml", line 34, in camlStdlib__Fun.protect_326 [0x271037b] #3 Source "OSS/libs/commons/UCommon.ml", line 63, in camlUCommon.pp_do_in_zero_box_432 [0x22ce643] 61: let pp_do_in_zero_box f = 62: Format.open_box 0; > 63: f (); 64: Format.close_box () 65: 66: (* nosemgrep: no-ref-declarations-at-top-scope *) #2 Source "OSS/libs/commons/UCommon.ml", line 124, in camlUCommon.fun_1206 [0x22ceb43] 121: finalize 122: (fun () -> 123: pp_do_in_zero_box (fun () -> > 124: try f () with 125: (* <---- here it is *) 126: | Unix.Unix_error (e, fm, argm) -> 127: pr2 #1 Source "OSS/src/core_cli/Core_CLI.ml", line 663, in camlCore_CLI.decide_if_eio_6164 [0x621ae7] 660: (*****************************************************************************) 661: 662: let run caps (config : Core_scan_config.t) : unit = > 663: let res = Core_scan.scan caps config in 664: output_core_results 665: (caps :> < Cap.stdout ; Cap.stderr ; Cap.exit >) 666: res config #0 Source "OSS/src/core_scan/Core_scan.ml", line 1047, in camlCore_scan.scan_5956 [0x927a74] 1044: Common.with_time (fun () -> applicable_rules_of_config config) 1045: in 1046: let a : unit -> unit = Obj.magic 0 in >1047: a (); 1048: let res : Core_result.t = scan_exn caps config timed_rules in 1049: Ok 1050: (res Segmentation fault ``` </details> We also get backtraces on these signals: ``` SIGABRT, // Abort signal from abort(3) SIGBUS, // Bus error (bad memory access) SIGFPE, // Floating point exception SIGILL, // Illegal Instruction SIGIOT, // IOT trap. A synonym for SIGABRT SIGQUIT, // Quit from keyboard SIGSEGV, // Invalid memory reference SIGSYS, // Bad argument to routine (SVr4) SIGTRAP, // Trace/breakpoint trap SIGXCPU, // CPU time limit exceeded (4.2BSD) SIGXFSZ, // File size limit exceeded (4.2BSD) #if defined(BACKWARD_SYSTEM_DARWIN) SIGEMT, // emulation instruction executed ``` and I have taken the liberty of adding SIGUSR1 a la https://github.com/surma/stacksignal. ## How This PR wraps https://github.com/bombela/backward-cpp with a few modifications to get things working on linux in docker on m1 macs, and m1 macs themselves: bombela/backward-cpp#354 bombela/backward-cpp#347 This library works by walking the stack after a segfault, and then reading dwarf symbols to get the info. Dependencies: This PR adds a few more libraries, backward cpp (mit), and then libunwind, libdw (elfutils), and libdwarf which are all lgplv2. I tried to ensure that they will be statically linked/bundled where necessary, so we should be all good. Test plan: Manually introduced an ocaml segfault (see above example). Then ran this on one occurring in pcre: <details> <summary>Backtrace</summary> ``` > "Segmentation fault: 11" Stack trace (most recent call last): #10 Object "Main.exe", at 0x103150c2b, in camlCore_scan.scan_5956 + 123 #9 Object "Main.exe", at 0x1053e6883, in caml_start_program + 131 #8 Object "Main.exe", at 0x1029a1db3, in caml_program + 56027 #7 Object "Main.exe", at 0x1029b5627, in camlDune__exe__Main.entry + 111 #6 Object "Main.exe", at 0x104bedf4b, in camlUCommon.exn_to_real_unixexit_351 + 51 #5 Object "Main.exe", at 0x104be221f, in camlCommon.protect_307 + 39 #4 Object "Main.exe", at 0x10501fddb, in camlStdlib__Fun.protect_326 + 107 #3 Object "Main.exe", at 0x104bee203, in camlUCommon.pp_do_in_zero_box_432 + 51 #2 Object "Main.exe", at 0x104bee703, in camlUCommon.fun_1206 + 51 #1 Object "Main.exe", at 0x1029eab17, in camlPro_core_CLI.run_898 + 1687 #0 Object "Main.exe", at 0x103150c3c, in camlCore_scan.scan_5956 + 140 ``` </details> and a marshalling segfault out in the wild: <details> <summary>Backtrace</summary> ``` Stack trace (most recent call last): #31 Source "/root/.opam/5.3.0/.opam-switch/build/ocaml-compiler.5.3.0/stdlib/fun.ml", line 34, in camlStdlib__Fun.protect_326 [0x27bf47a] #30 Source "OSS/libs/commons/Common.ml", line 53, in camlCommon.protect_307 [0x240497b] #29 Source "/root/.opam/5.3.0/.opam-switch/build/ocaml-compiler.5.3.0/stdlib/fun.ml", line 34, in camlStdlib__Fun.protect_326 [0x27bf47a] #28 Source "OSS/libs/commons/Common.ml", line 53, in camlCommon.protect_307 [0x240497b] #27 Source "/root/.opam/5.3.0/.opam-switch/build/ocaml-compiler.5.3.0/stdlib/fun.ml", line 34, in camlStdlib__Fun.protect_326 [0x27bf47a] #26 Source "OSS/libs/commons/Common.ml", line 53, in camlCommon.protect_307 [0x240497b] #25 Source "/root/.opam/5.3.0/.opam-switch/build/ocaml-compiler.5.3.0/stdlib/fun.ml", line 34, in camlStdlib__Fun.protect_326 [0x27bf47a] #24 Source "OSS/libs/commons/Common.ml", line 53, in camlCommon.protect_307 [0x240497b] #23 Source "/root/.opam/5.3.0/.opam-switch/build/ocaml-compiler.5.3.0/stdlib/fun.ml", line 34, in camlStdlib__Fun.protect_326 [0x27bf47a] #22 Source "OSS/libs/commons/Common.ml", line 53, in camlCommon.protect_307 [0x240497b] #21 Source "/root/.opam/5.3.0/.opam-switch/build/ocaml-compiler.5.3.0/stdlib/fun.ml", line 34, in camlStdlib__Fun.protect_326 [0x27bf47a] #20 Source "OSS/libs/commons/Common.ml", line 53, in camlCommon.protect_307 [0x240497b] #19 Source "/root/.opam/5.3.0/.opam-switch/build/ocaml-compiler.5.3.0/stdlib/fun.ml", line 34, in camlStdlib__Fun.protect_326 [0x27bf47a] #18 Source "OSS/libs/commons/Common.ml", line 53, in camlCommon.protect_307 [0x240497b] #17 Source "/root/.opam/5.3.0/.opam-switch/build/ocaml-compiler.5.3.0/stdlib/fun.ml", line 34, in camlStdlib__Fun.protect_326 [0x27bf47a] #16 Source "OSS/libs/commons/Common.ml", line 53, in camlCommon.protect_307 [0x240497b] #15 Source "/root/.opam/5.3.0/.opam-switch/build/ocaml-compiler.5.3.0/stdlib/fun.ml", line 34, in camlStdlib__Fun.protect_326 [0x27bf47a] #14 Source "src/pro_scan/Pro_scan.ml", line 606, in camlPro_scan.scan_exn_4292 [0x60bdb7] #13 Source "src/core/opentelemetry.ml", line 1312, in camlOpentelemetry.with__2580 [0x23b2f52] #12 Source "/root/.opam/5.3.0/.opam-switch/build/ocaml-compiler.5.3.0/stdlib/fun.ml", line 34, in camlStdlib__Fun.protect_326 [0x27bf47a] #11 Source "OSS/src/core_scan/Core_scan.ml", line 738, in camlCore_scan.fun_7477 [0xbe214b] #10 Source "OSS/src/core_scan/Core_scan.ml", line 628, in camlCore_scan.parmap_map_5319 [0xbe4c67] #9 Source "OSS/libs/commons/Common.ml", line 53, in camlCommon.protect_307 [0x240497b] #8 Source "/root/.opam/5.3.0/.opam-switch/build/ocaml-compiler.5.3.0/stdlib/fun.ml", line 34, in camlStdlib__Fun.protect_326 [0x27bf47a] #7 Source "OSS/libs/parallelism/Parmap_.ml", line 169, in camlParmap_.parmap_479 [0x238ccbe] #6 Source "OSS/libs/commons/Common.ml", line 53, in camlCommon.protect_307 [0x240497b] #5 Source "/root/.opam/5.3.0/.opam-switch/build/ocaml-compiler.5.3.0/stdlib/fun.ml", line 34, in camlStdlib__Fun.protect_326 [0x27bf47a] #4 Source "src/parmap.ml", line 401, in camlParmap.mapper_1352 [0x2390ca3] #3 Source "src/parmap.ml", line 115, in camlParmap.unmarshal_860 [0x238f495] #2 Object "/usr/lib/python3.12/site-packages/semgrep/bin/semgrep-core-proprietary", at 0x30a695a, in caml_c_call #1 Source "runtime/intern.c", line 993, in caml_input_value_from_block [0x308b6fb] #0 Source "runtime/intern.c", line 762, in caml_parse_header [0x308a109] ``` </details> synced from Pro a5dc2cd7fd0d8736642572760d2ff6a05adbed4e
yosefAlsuhaibani
pushed a commit
to semgrep/semgrep
that referenced
this pull request
Aug 20, 2025
This PR adds beautiful segfaults ❤️ . Whenever we segfault in OCaml code, we should now be provided with some backtraces, including function name, file # and potentially code snippets: <details> <summary>Backtrace</summary> ``` ____ /> フ | _ _ | /` ミ_x ノ / | / ヽ ノ | | | | / ̄ | | | | ( ̄ヽ_ヽ)_)_) \二つ Segfault cat says: process 5514 received signal: > "Segmentation fault" faulting address: 0x01 Stack trace (most recent call last): #14 Object "", at 0xffffffffffffffff, in #13 Source "src/env/__libc_start_main.c", line 95, in libc_start_main_stage2 [0x2f61b77] #12 Source "runtime/main.c", line 37, in main [0x41f94f] #11 | Source "runtime/startup_nat.c", line 146, in caml_startup | Source "runtime/startup_nat.c", line 139, in caml_startup_exn Source "runtime/startup_nat.c", line 134, in caml_main [0x2f5a16f] #10 | Source "runtime/startup_nat.c", line 86, in caml_startup_common Source "runtime/startup_nat.c", line 127, in caml_startup_common [0x2f5a0d7] #9 Object "/src/semgrep-pro/_build/default/OSS/src/main/Main.exe", at 0x2f5a69f, in caml_start_program #8 Object "/src/semgrep-pro/_build/default/OSS/src/main/Main.exe", at 0x467227, in caml_program #7 Source "OSS/src/main/Main.ml", line 91, in camlDune__exe__Main.entry [0x4798a7] 88: * core' and './dune' install section. We use the argv[0] trick below to decide 89: * whether the user wants the semgrep-core or osemgrep behavior. *) 90: let () = > 91: Cap.main (fun (caps : Cap.all_caps) -> 92: let argv = CapSys.argv caps#argv in 93: let argv0 = 94: (* remove the possible ".exe" extension for Windows and ".bc" *) #6 Source "OSS/libs/commons/UCommon.ml", line 42, in camlUCommon.exn_to_real_unixexit_351 [0x22ce38b] 40: (* now in prelude: exception UnixExit of int *) 41: let exn_to_real_unixexit f = > 42: try f () with 43: (* If it is a normal exit just info log it *) 44: | UnixExit (0, msg) -> 45: (* nosemgrep: no-logs-in-library *) #5 Source "OSS/libs/commons/Common.ml", line 53, in camlCommon.protect_307 [0x22c28af] 50: *) 51: let protect ~finally work = 52: (* nosemgrep: no-fun-protect *) > 53: try Fun.protect ~finally work with 54: | Fun.Finally_raised exn1 as exn -> 55: (* Just re-raise whatever exception was raised during a 'finally', 56: * drop 'Finally_raised'. #4 Source "/root/.opam/5.3.0/.opam-switch/build/ocaml-compiler.5.3.0/stdlib/fun.ml", line 34, in camlStdlib__Fun.protect_326 [0x271037b] #3 Source "OSS/libs/commons/UCommon.ml", line 63, in camlUCommon.pp_do_in_zero_box_432 [0x22ce643] 61: let pp_do_in_zero_box f = 62: Format.open_box 0; > 63: f (); 64: Format.close_box () 65: 66: (* nosemgrep: no-ref-declarations-at-top-scope *) #2 Source "OSS/libs/commons/UCommon.ml", line 124, in camlUCommon.fun_1206 [0x22ceb43] 121: finalize 122: (fun () -> 123: pp_do_in_zero_box (fun () -> > 124: try f () with 125: (* <---- here it is *) 126: | Unix.Unix_error (e, fm, argm) -> 127: pr2 #1 Source "OSS/src/core_cli/Core_CLI.ml", line 663, in camlCore_CLI.decide_if_eio_6164 [0x621ae7] 660: (*****************************************************************************) 661: 662: let run caps (config : Core_scan_config.t) : unit = > 663: let res = Core_scan.scan caps config in 664: output_core_results 665: (caps :> < Cap.stdout ; Cap.stderr ; Cap.exit >) 666: res config #0 Source "OSS/src/core_scan/Core_scan.ml", line 1047, in camlCore_scan.scan_5956 [0x927a74] 1044: Common.with_time (fun () -> applicable_rules_of_config config) 1045: in 1046: let a : unit -> unit = Obj.magic 0 in >1047: a (); 1048: let res : Core_result.t = scan_exn caps config timed_rules in 1049: Ok 1050: (res Segmentation fault ``` </details> We also get backtraces on these signals: ``` SIGABRT, // Abort signal from abort(3) SIGBUS, // Bus error (bad memory access) SIGFPE, // Floating point exception SIGILL, // Illegal Instruction SIGIOT, // IOT trap. A synonym for SIGABRT SIGQUIT, // Quit from keyboard SIGSEGV, // Invalid memory reference SIGSYS, // Bad argument to routine (SVr4) SIGTRAP, // Trace/breakpoint trap SIGXCPU, // CPU time limit exceeded (4.2BSD) SIGXFSZ, // File size limit exceeded (4.2BSD) #if defined(BACKWARD_SYSTEM_DARWIN) SIGEMT, // emulation instruction executed ``` and I have taken the liberty of adding SIGUSR1 a la https://github.com/surma/stacksignal. ## How This PR wraps https://github.com/bombela/backward-cpp with a few modifications to get things working on linux in docker on m1 macs, and m1 macs themselves: bombela/backward-cpp#354 bombela/backward-cpp#347 This library works by walking the stack after a segfault, and then reading dwarf symbols to get the info. Dependencies: This PR adds a few more libraries, backward cpp (mit), and then libunwind, libdw (elfutils), and libdwarf which are all lgplv2. I tried to ensure that they will be statically linked/bundled where necessary, so we should be all good. Test plan: Manually introduced an ocaml segfault (see above example). Then ran this on one occurring in pcre: <details> <summary>Backtrace</summary> ``` > "Segmentation fault: 11" Stack trace (most recent call last): #10 Object "Main.exe", at 0x103150c2b, in camlCore_scan.scan_5956 + 123 #9 Object "Main.exe", at 0x1053e6883, in caml_start_program + 131 #8 Object "Main.exe", at 0x1029a1db3, in caml_program + 56027 #7 Object "Main.exe", at 0x1029b5627, in camlDune__exe__Main.entry + 111 #6 Object "Main.exe", at 0x104bedf4b, in camlUCommon.exn_to_real_unixexit_351 + 51 #5 Object "Main.exe", at 0x104be221f, in camlCommon.protect_307 + 39 #4 Object "Main.exe", at 0x10501fddb, in camlStdlib__Fun.protect_326 + 107 #3 Object "Main.exe", at 0x104bee203, in camlUCommon.pp_do_in_zero_box_432 + 51 #2 Object "Main.exe", at 0x104bee703, in camlUCommon.fun_1206 + 51 #1 Object "Main.exe", at 0x1029eab17, in camlPro_core_CLI.run_898 + 1687 #0 Object "Main.exe", at 0x103150c3c, in camlCore_scan.scan_5956 + 140 ``` </details> and a marshalling segfault out in the wild: <details> <summary>Backtrace</summary> ``` Stack trace (most recent call last): #31 Source "/root/.opam/5.3.0/.opam-switch/build/ocaml-compiler.5.3.0/stdlib/fun.ml", line 34, in camlStdlib__Fun.protect_326 [0x27bf47a] #30 Source "OSS/libs/commons/Common.ml", line 53, in camlCommon.protect_307 [0x240497b] #29 Source "/root/.opam/5.3.0/.opam-switch/build/ocaml-compiler.5.3.0/stdlib/fun.ml", line 34, in camlStdlib__Fun.protect_326 [0x27bf47a] #28 Source "OSS/libs/commons/Common.ml", line 53, in camlCommon.protect_307 [0x240497b] #27 Source "/root/.opam/5.3.0/.opam-switch/build/ocaml-compiler.5.3.0/stdlib/fun.ml", line 34, in camlStdlib__Fun.protect_326 [0x27bf47a] #26 Source "OSS/libs/commons/Common.ml", line 53, in camlCommon.protect_307 [0x240497b] #25 Source "/root/.opam/5.3.0/.opam-switch/build/ocaml-compiler.5.3.0/stdlib/fun.ml", line 34, in camlStdlib__Fun.protect_326 [0x27bf47a] #24 Source "OSS/libs/commons/Common.ml", line 53, in camlCommon.protect_307 [0x240497b] #23 Source "/root/.opam/5.3.0/.opam-switch/build/ocaml-compiler.5.3.0/stdlib/fun.ml", line 34, in camlStdlib__Fun.protect_326 [0x27bf47a] #22 Source "OSS/libs/commons/Common.ml", line 53, in camlCommon.protect_307 [0x240497b] #21 Source "/root/.opam/5.3.0/.opam-switch/build/ocaml-compiler.5.3.0/stdlib/fun.ml", line 34, in camlStdlib__Fun.protect_326 [0x27bf47a] #20 Source "OSS/libs/commons/Common.ml", line 53, in camlCommon.protect_307 [0x240497b] #19 Source "/root/.opam/5.3.0/.opam-switch/build/ocaml-compiler.5.3.0/stdlib/fun.ml", line 34, in camlStdlib__Fun.protect_326 [0x27bf47a] #18 Source "OSS/libs/commons/Common.ml", line 53, in camlCommon.protect_307 [0x240497b] #17 Source "/root/.opam/5.3.0/.opam-switch/build/ocaml-compiler.5.3.0/stdlib/fun.ml", line 34, in camlStdlib__Fun.protect_326 [0x27bf47a] #16 Source "OSS/libs/commons/Common.ml", line 53, in camlCommon.protect_307 [0x240497b] #15 Source "/root/.opam/5.3.0/.opam-switch/build/ocaml-compiler.5.3.0/stdlib/fun.ml", line 34, in camlStdlib__Fun.protect_326 [0x27bf47a] #14 Source "src/pro_scan/Pro_scan.ml", line 606, in camlPro_scan.scan_exn_4292 [0x60bdb7] #13 Source "src/core/opentelemetry.ml", line 1312, in camlOpentelemetry.with__2580 [0x23b2f52] #12 Source "/root/.opam/5.3.0/.opam-switch/build/ocaml-compiler.5.3.0/stdlib/fun.ml", line 34, in camlStdlib__Fun.protect_326 [0x27bf47a] #11 Source "OSS/src/core_scan/Core_scan.ml", line 738, in camlCore_scan.fun_7477 [0xbe214b] #10 Source "OSS/src/core_scan/Core_scan.ml", line 628, in camlCore_scan.parmap_map_5319 [0xbe4c67] #9 Source "OSS/libs/commons/Common.ml", line 53, in camlCommon.protect_307 [0x240497b] #8 Source "/root/.opam/5.3.0/.opam-switch/build/ocaml-compiler.5.3.0/stdlib/fun.ml", line 34, in camlStdlib__Fun.protect_326 [0x27bf47a] #7 Source "OSS/libs/parallelism/Parmap_.ml", line 169, in camlParmap_.parmap_479 [0x238ccbe] #6 Source "OSS/libs/commons/Common.ml", line 53, in camlCommon.protect_307 [0x240497b] #5 Source "/root/.opam/5.3.0/.opam-switch/build/ocaml-compiler.5.3.0/stdlib/fun.ml", line 34, in camlStdlib__Fun.protect_326 [0x27bf47a] #4 Source "src/parmap.ml", line 401, in camlParmap.mapper_1352 [0x2390ca3] #3 Source "src/parmap.ml", line 115, in camlParmap.unmarshal_860 [0x238f495] #2 Object "/usr/lib/python3.12/site-packages/semgrep/bin/semgrep-core-proprietary", at 0x30a695a, in caml_c_call #1 Source "runtime/intern.c", line 993, in caml_input_value_from_block [0x308b6fb] #0 Source "runtime/intern.c", line 762, in caml_parse_header [0x308a109] ``` </details> synced from Pro a5dc2cd7fd0d8736642572760d2ff6a05adbed4e
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Hey! back again with some more support. This works for me on m1 macs. got the info from here: https://github.com/llvm/llvm-project/blob/368c02e3ec44e5418626f46abebcc22a69c7f66d/libunwind/src/Registers.hpp and /Library/Developer/CommandLineTools/SDKs/MacOSX14.4.sdk/usr/include/mach/arm/_structs.h