diff options
author | Gabriel Scherer <gabriel.scherer@gmail.com> | 2019-07-23 16:43:59 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-07-23 16:43:59 +0200 |
commit | 101383a4cfeddfca6fedfc45740f24dbc961b72a (patch) | |
tree | 5f8132ee5f02d485cdb3d3b03c54d646cf57a3ab | |
parent | f445f5df344c20ce1d0e986788d4205741ef9252 (diff) | |
parent | 1c606bf7c5b97e2a00af95c020d0fb8cc7aa4f01 (diff) | |
download | ocaml-101383a4cfeddfca6fedfc45740f24dbc961b72a.tar.gz |
Merge pull request #8822 from gasche/backport-bytecode-dynlink-fix-in-4.08
Backport #8818 (Dynlink/packing issue in bytecode) for 4.08+rc2
-rw-r--r-- | Changes | 4 | ||||
-rw-r--r-- | otherlibs/dynlink/dynlink.ml | 6 | ||||
-rw-r--r-- | testsuite/tests/lib-dynlink-packed/a.ml | 1 | ||||
-rw-r--r-- | testsuite/tests/lib-dynlink-packed/b.ml | 1 | ||||
-rw-r--r-- | testsuite/tests/lib-dynlink-packed/byte.reference | 5 | ||||
-rw-r--r-- | testsuite/tests/lib-dynlink-packed/loader.ml | 64 | ||||
-rw-r--r-- | testsuite/tests/lib-dynlink-packed/native.reference | 5 | ||||
-rw-r--r-- | testsuite/tests/lib-dynlink-packed/ocamltests | 1 |
8 files changed, 86 insertions, 1 deletions
@@ -14,6 +14,10 @@ OCaml 4.08 maintenance branch: - #8769, #8770: Fix assertion failure with -pack (Leo White, review by Gabriel Scherer, report by Fabian @copy) +- #8816, #8818: fix loading of packed modules with Dynlink (regression in + #2176). + (Leo White, report by Andre Maroneze, review by Gabriel Scherer) + OCaml 4.08.0 (13 June 2019) --------------------------- diff --git a/otherlibs/dynlink/dynlink.ml b/otherlibs/dynlink/dynlink.ml index 09289db541..35bd88e2e2 100644 --- a/otherlibs/dynlink/dynlink.ml +++ b/otherlibs/dynlink/dynlink.ml @@ -39,7 +39,11 @@ module Bytecode = struct @ Symtable.required_globals t.cu_reloc in let required = - List.filter (fun id -> not (Ident.is_predef id)) required + List.filter + (fun id -> + not (Ident.is_predef id) + && not (String.contains (Ident.name id) '.')) + required in List.map (fun ident -> Ident.name ident, None) diff --git a/testsuite/tests/lib-dynlink-packed/a.ml b/testsuite/tests/lib-dynlink-packed/a.ml new file mode 100644 index 0000000000..c8572c99d3 --- /dev/null +++ b/testsuite/tests/lib-dynlink-packed/a.ml @@ -0,0 +1 @@ +let nums = Sys.opaque_identity [1; 2; 3; 4; 5] diff --git a/testsuite/tests/lib-dynlink-packed/b.ml b/testsuite/tests/lib-dynlink-packed/b.ml new file mode 100644 index 0000000000..5044f57be9 --- /dev/null +++ b/testsuite/tests/lib-dynlink-packed/b.ml @@ -0,0 +1 @@ +let () = List.iter (fun i -> print_endline (string_of_int i)) A.nums diff --git a/testsuite/tests/lib-dynlink-packed/byte.reference b/testsuite/tests/lib-dynlink-packed/byte.reference new file mode 100644 index 0000000000..8a1218a102 --- /dev/null +++ b/testsuite/tests/lib-dynlink-packed/byte.reference @@ -0,0 +1,5 @@ +1 +2 +3 +4 +5 diff --git a/testsuite/tests/lib-dynlink-packed/loader.ml b/testsuite/tests/lib-dynlink-packed/loader.ml new file mode 100644 index 0000000000..25b078de07 --- /dev/null +++ b/testsuite/tests/lib-dynlink-packed/loader.ml @@ -0,0 +1,64 @@ +(* TEST + +include dynlink +libraries = "" +files = "a.ml b.ml loader.ml" + +* shared-libraries +** setup-ocamlc.byte-build-env +*** ocamlc.byte +flags = "-for-pack Packed" +module = "a.ml" +*** ocamlc.byte +flags = "-for-pack Packed" +module = "b.ml" +*** ocamlc.byte +program = "packed.cmo" +flags = "-pack" +all_modules = "a.cmo b.cmo" +*** ocamlc.byte +program = "${test_build_directory}/loader.byte" +flags = "-linkall" +include ocamlcommon +libraries += "dynlink" +all_modules = "loader.ml" +**** run +arguments = "packed.cmo" +exit_status = "0" +***** check-program-output +reference = "${test_source_directory}/byte.reference" + +** native-dynlink +*** setup-ocamlopt.byte-build-env +**** ocamlopt.byte +flags = "-for-pack Packed" +module = "a.ml" +**** ocamlopt.byte +flags = "-for-pack Packed" +module = "b.ml" +**** ocamlopt.byte +program = "packed.cmx" +flags = "-pack" +all_modules = "a.cmx b.cmx" +**** ocamlopt.byte +program = "plugin.cmxs" +flags = "-shared" +all_modules = "packed.cmx" +**** ocamlopt.byte +program = "${test_build_directory}/loader.exe" +flags = "-linkall" +include ocamlcommon +libraries += "dynlink" +all_modules = "loader.ml" +***** run +arguments = "plugin.cmxs" +exit_status = "0" +****** check-program-output +reference = "${test_source_directory}/native.reference" +*) +let () = + try + Dynlink.loadfile Sys.argv.(1) + with + | Dynlink.Error error -> + prerr_endline (Dynlink.error_message error) diff --git a/testsuite/tests/lib-dynlink-packed/native.reference b/testsuite/tests/lib-dynlink-packed/native.reference new file mode 100644 index 0000000000..8a1218a102 --- /dev/null +++ b/testsuite/tests/lib-dynlink-packed/native.reference @@ -0,0 +1,5 @@ +1 +2 +3 +4 +5 diff --git a/testsuite/tests/lib-dynlink-packed/ocamltests b/testsuite/tests/lib-dynlink-packed/ocamltests new file mode 100644 index 0000000000..0fe19df0e6 --- /dev/null +++ b/testsuite/tests/lib-dynlink-packed/ocamltests @@ -0,0 +1 @@ +loader.ml |