summaryrefslogtreecommitdiff
path: root/testsuite/tests/backtrace/backtrace_dynlink.ml
blob: 3252f53f67ecf6c134dc0aa3264fe6674a789426 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
(* TEST

include dynlink

readonly_files = "backtrace_dynlink_plugin.ml"

libraries = ""

* shared-libraries
** native-dynlink
*** setup-ocamlopt.byte-build-env
**** ocamlopt.byte
module = "backtrace_dynlink.ml"
flags = "-g"
**** ocamlopt.byte
program = "backtrace_dynlink_plugin.cmxs"
flags = "-shared -g"
all_modules = "backtrace_dynlink_plugin.ml"
**** ocamlopt.byte
program = "${test_build_directory}/main.exe"
libraries = "dynlink"
all_modules = "backtrace_dynlink.cmx"
***** run
ocamlrunparam += ",b=1"
****** no-flambda
******* check-program-output
****** flambda
reference = "${test_source_directory}/backtrace_dynlink.flambda.reference"
******* check-program-output
*)

(* test for backtrace and stack unwinding with dynlink. *)
(* https://github.com/ocaml-multicore/ocaml-multicore/issues/440 *)
(* https://github.com/ocaml-multicore/ocaml-multicore/pull/499 *)

let ()  =
  Dynlink.allow_unsafe_modules true;
  try
    Dynlink.loadfile "backtrace_dynlink_plugin.cmxs"
  with
  | Dynlink.Error err ->
     print_endline @@ Dynlink.error_message err;
     Printexc.print_backtrace stdout;
  | exn ->
     Printexc.to_string exn |> print_endline;
     print_endline "ERROR"