summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGabriel Scherer <gabriel.scherer@gmail.com>2019-07-23 16:43:59 +0200
committerGitHub <noreply@github.com>2019-07-23 16:43:59 +0200
commit101383a4cfeddfca6fedfc45740f24dbc961b72a (patch)
tree5f8132ee5f02d485cdb3d3b03c54d646cf57a3ab
parentf445f5df344c20ce1d0e986788d4205741ef9252 (diff)
parent1c606bf7c5b97e2a00af95c020d0fb8cc7aa4f01 (diff)
downloadocaml-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--Changes4
-rw-r--r--otherlibs/dynlink/dynlink.ml6
-rw-r--r--testsuite/tests/lib-dynlink-packed/a.ml1
-rw-r--r--testsuite/tests/lib-dynlink-packed/b.ml1
-rw-r--r--testsuite/tests/lib-dynlink-packed/byte.reference5
-rw-r--r--testsuite/tests/lib-dynlink-packed/loader.ml64
-rw-r--r--testsuite/tests/lib-dynlink-packed/native.reference5
-rw-r--r--testsuite/tests/lib-dynlink-packed/ocamltests1
8 files changed, 86 insertions, 1 deletions
diff --git a/Changes b/Changes
index 9e848a8179..926feff11f 100644
--- a/Changes
+++ b/Changes
@@ -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