- 
                Notifications
    You must be signed in to change notification settings 
- Fork 525
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