Caml1999I037 (̠'Dynlink)is_nativeX$boolE@@@@=otherlibs/dynlink/dynlink.mliTT@@@@@(loadfileY@&stringQ@@@$unitF@@@@@@ZZ@@(A@@0loadfile_privateZ@@@@@@@@@@+o  ,o  @@;B@@.adapt_filename[@*@@@.@@@@@@>E  ?E E@@NC@@1set_allowed_units\@$listKC@@@@@@B@@@@@@XKYK@@hD@@*allow_only]@[@@@@@@Z@@@@@@pXWWqXWz@@E@@(prohibit^@2s@@@@@@r@@@@@@]HH]Hj@@F@@2main_program_units_@@@@N@@@@@@@@@cc@@G@@?public_dynamically_loaded_units`@@@@f@@@@@@@@@g""g"[@@H@@)all_unitsa@@@@~@@@@@@@@@l((l(K@@I@@4allow_unsafe_modulesb@@@@@@@@@@qq*@@J@@-linking_errorc;@@0Undefined_global@@@@@||@@L@5Unavailable_primitive@@@@@}};@@M@4Uninitialized_global @@@@@~<>~<^@@#N@@@@@@@@@{@@@@&K@A@%errord;@@3Not_a_bytecode_file"@@@@@*uw+u@@:P@3Inconsistent_import#(@@@@@89@@HQ@0Unavailable_unit$6@@@@@FG@@VR@+Unsafe_file%@@OP@@_S@-Linking_error&M@@@x@@@@@bc@@rT@3Corrupted_interface'`@@@@@pq5@@U@;Cannot_open_dynamic_library(#exnG@@@@@686\@@V@ $Library's_module_initializers_failed)@@@@@]_]@@W@;Inconsistent_implementation*@@@@@@@X@5Module_already_loaded+@@@@@@@Y@ *Private_library_cannot_implement_interface,@@@@@@@Z@@@@@@@@@``@@@@O@A@ %Errore#H@@@@@@A&_none_@@A@[@B@-error_messagef@@@@@@@@@@YYY|@@\@@7unsafe_get_global_valueg6bytecode_or_asm_symbol@@@&optionL&Stdlib#Obj!t@@@@@@@@@@@]@@@]K'Dynlink0kV6Fp9!d+Stdlib__Obj0]'kZ<栠-Stdlib__Int320 u&&Stdlib0Lku]8_٠8CamlinternalFormatBasics0%FU(Q/Tu@@@Caml1999T037cG i1S*C'Dynlink*ocaml.text&_none_@@A 0 Dynamic loading of .cmo, .cma and .cmxs files. =otherlibs/dynlink/dynlink.mliRR@@@@@@3@@@@@@#intA;@@@A@@@@@:@A@$charB;@@A@@@@@>@A@&stringQ;@@ A@@@@@B@@@%bytesC;@@ A@@@@@F@@@%floatD;@@A@@@@@J@@@$boolE;@@%falsec@@T@$trued@@Z@@@A@@@@@[@A@$unitF;@@"()e@@e@@@A@@@@@f@A@ #exnG;@@@A@@@@@j@@@#effH;@@O@A@A@@@@@@s@@@,continuationI;@@Q@@P@B@A@nY@@@@@@@@@%arrayJ;@@R@A@A@@@@@@@@@ $listK;@@S@A"[]f@@@"::g@@@T@@@ @@A@Y@@@@@@@@&optionL;@@V@A$Noneh@@@$Somei@@@@@A@Y@@@@@@@@)nativeintM;@@A@@@@@@@@%int32N;@@A@@@@@@@@%int64O;@@A@@@@@@@@&lazy_tP;@@X@AJA@Y@@@@@@@@5extension_constructorR;@@A@@@@@@@@*floatarrayS;@@A@@@@@@@@&iarrayT;@@Y@A[A@Y@@@@@@@@*atomic_locU;@@Z@AdA@@@@@@@@@.Assert_failure`#@@@@@J@@@@@@@@[@@A=ocaml.warn_on_literal_pattern @ @0Division_by_zero]#@@@A  @+End_of_file\#$@@@A@'FailureY#,@'@@A!$$@0Invalid_argumentX#5@0@@A*$-#-@-Match_failureV#>@@=@9@;@@a@@A;5>4>@)Not_foundZ#O@@@AC=F<F@-Out_of_memoryW#W@@@AKENDN@.Stack_overflow^#_@@@ASMVLV@.Sys_blocked_io_#g@@@A[U^T^@)Sys_error[#o@j@@Ad^g]g@:Undefined_recursive_modulea#x@@w@s@u@@h@@Auoxnx@:Continuation_already_takenb#@@@A}wv@&Stdlib@Ax)is_nativeT T@гF$boolTT@@ @@@@@@T@)ocaml.doc J [true] if the program is native, [false] if the program is bytecode. UVBl@@@@@@@@@@@@@@@@@ ' {1 Dynamic loading of compiled files} XnnXn@@@@@@3@F3@A(loadfileZZ@б@г&stringZZ@@ @@@@@г$unitZZ@@ @@@'@@@@@*@@@Z @\  In bytecode: load the given bytecode object file ([.cmo] file) or bytecode library file ([.cma] file), and link it with the running program. In native code: load the given OCaml plugin file (usually [.cmxs]), and link it with the running program. All toplevel expressions in the loaded compilation units are evaluated. No facilities are provided to access value names defined by the unit. Therefore, the unit must itself register its entry points with the main program (or a previously-loaded library) e.g. by modifying tables of functions. An exception will be raised if the given library defines toplevel modules whose names clash with modules existing either in the main program or a shared library previously loaded with [loadfile]. Modules from shared libraries previously loaded with [loadfile_private] are not included in this restriction. The compilation units loaded by this function are added to the "allowed units" list (see {!set_allowed_units}). [m  @@@@@@@A@@@l @@@@@@I0loadfile_privateo  o  @б@г堐&stringo  o  @@ @@@3@b]8@A@@гנ$unit*o  +o  @@ @@@@@@@@@@@5o   @ 3 Same as [loadfile], except that the compilation units just loaded are hidden (cannot be referenced) from other modules dynamically loaded afterwards. An exception will be raised if the given library defines toplevel modules whose names clash with modules existing in either the main program or a shared library previously loaded with [loadfile]. Modules from shared libraries previously loaded with [loadfile_private] are not included in this restriction. An exception will also be raised if the given library defines toplevel modules whose name matches that of an interface depended on by a module existing in either the main program or a shared library previously loaded with [loadfile]. This applies even if such dependency is only a "module alias" dependency (i.e. just on the name rather than the contents of the interface). The compilation units loaded by this function are not added to the "allowed units" list (see {!set_allowed_units}) since they cannot be referenced from other compilation units. Bp  CC @@@@@@@[B@@@V@@@@@@1.adapt_filenameYE $ZE 2@б@г.&stringdE 5eE ;@@ @@@3feefffff@J_8@A@@г=&stringsE ?tE E@@ @@@@@@@@@@@~E   @ b In bytecode, the identity function. In native code, replace the last extension with [.cmxs]. FFFG@@@@@@@C@@@@@@@@@14 {1 Access control} II@@@@@@3@CX1@A1set_allowed_unitsKK@б@г<$listKK@г&stringKK@@ @@@$@@@@@@) @@г$unitKK@@ @@@6@@@@@9@@@K @W Z Set the list of compilation units that may be referenced from units that are dynamically loaded in the future to be exactly the given value. Initially all compilation units composing the program currently running are available for reference from dynamically-linked units. [set_allowed_units] can be used to restrict access to a subset of these units, e.g. to the units that compose the API for dynamically-linked code, and prevent access to all other units, e.g. private, internal modules of the running program. Note that {!loadfile} changes the allowed-units list. LVU@@@@@@@ D@@@g@@@@@@X*allow_only XW[ XWe@б@г$listXWnXWr@гꠐ&string XWg!XWm@@ @@@3"!!"""""@{vB@A@@@ @@@ @@г᠐$unit4XWv5XWz@@ @@@@@@@@@@@?XWW @ [allow_only units] sets the list of allowed units to be the intersection of the existing allowed units and the given list of units. As such it can never increase the set of allowed units. LY{{M[F@@@@@@@eE@@@`@@@@@@6(prohibitc]HLd]HT@б@гꠐ$listn]H^o]Hb@гB&stringx]HWy]H]@@ @@@3zyyzzzzz@YxB@A@@@ @@@ @@г9$unit]Hf]Hj@@ @@@@@@@@@@@]HH @  [prohibit units] prohibits dynamically-linked units from referencing the units named in list [units] by removing such units from the allowed units list. This can be used to prevent access to selected units, e.g. private, internal modules of the running program. ^kkaG@@@@@@@F@@@@@@@@@62main_program_unitscc@б@гs$unitcc@@ @@@3@On8@A@@гQ$listcc@г&stringcc@@ @@@@@@@@@ @@@$@@!'@@@c@_ h Return the list of compilation units that form the main program (i.e. are not dynamically linked). de @@@@@@@G@@*@o@@@@@@@?public_dynamically_loaded_unitsg"&g"E@б@гˠ$unitg"Hg"L@@ @@@3      @Yn8@A@@г$list-g"W.g"[@г&string7g"P8g"V@@ @@@@@@@@@ @@@$@@!'@@@Gg""@ Return the list of compilation units that have been dynamically loaded via [loadfile] (and not via [loadfile_private]). Note that compilation units loaded dynamically cannot be unloaded. Th\\Uj&@@@@@@@mH@@*@h@@@@@@@)all_unitskl(,ll(5@б@г#$unitvl(8wl(<@@ @@@3xwwxxxxx@Yn8@A@@г$listl(Gl(K@гY&stringl(@l(F@@ @@@@@@@@@ @@@$@@!'@@@l((@ Return the list of compilation units that form the main program together with those that have been dynamically loaded via [loadfile] (and not via [loadfile_private]). mLLo@@@@@@@I@@*@@@@@@@@4allow_unsafe_modulesqq@б@г$boolqq"@@ @@@3@Yn8@A@@г$unitq&q*@@ @@@@@@@@@@@q @X  Govern whether unsafe object files are allowed to be dynamically linked. A compilation unit is 'unsafe' if it contains declarations of external functions, which can break type safety. By default, dynamic linking of unsafe object files is not allowed. In native code, this function does nothing; object files with external functions are always allowed to be dynamically linked. r++ws@@@@@@@J@@@h @@@@@@15 {1 Error reporting} yy@@@@@@3@CX1@AA+-linking_errorA {!{@@;@@0Undefined_global@@@@@/|0|@@HL@5Unavailable_primitive @@@@@=}>};@@VM@4Uninitialized_global @@@@@K~<>L~<^@@dN@@@@@@@@@O{@@@@gK@@#..V|W| @'@г0&string`|1@@73^]]^^^^^@MG;@@@@@@@@@@@@@A6@@@@8@#44j}k}1@-@г6&stringt}57@@=8@@@@:@#66z~<@{~<T@/@г8&string~<X9@@?$:@@@@<@@@@8@@q8;@A+%error!B`e`j@@;@@3Not_a_bytecode_file"k@@@@@uwu@@P@3Inconsistent_import#y@@@@@@@Q@0Unavailable_unit$@@@@@@@R@+Unsafe_file%@@@@S@-Linking_error&@@@۠@@@@@@@T@3Corrupted_interface'@@@@@5@@U@;Cannot_open_dynamic_library(@@@@@686\@@ V@ $Library's_module_initializers_failed)@@@@@]_]@@W@;Inconsistent_implementation*@@@@@@@(X@5Module_already_loaded+@@@@@@@6Y@ *Private_library_cannot_implement_interface,@@@@@+,@@DZ@@@@@@@@@/``@@@@GO@@#6uy7u@@г&string@u@@3>==>>>>>@.(";@@@@@@@@@@@@@A@@@@@#KL@@г&stringU@@@@@@@#[\@@г&stringe@@%@@@@@#k@@@@@#qr@@г&string{|@@<@@г-linking_error@@E@@@@@#+@@г&string/@@U@@@@@#6:6U@@г#exn6Y@@e@@@@@#]a]@@г#exn]@@u@@@@@#@@г&string@@@@@@@#@@г&string@@@@@@@# @@г&string @@@@@@@@@@@@3@@A@%Error-C$@#@n@@@@@A-@m $ Errors in dynamic linking are reported by raising the [Error] exception with a description of the error. A common case is the dynamic library not being found on the system: this is reported via [Cannot_open_dynamic_library] (the enclosed exception may be platform-specific).  .. :W@@@@@@@#[@@г%error(@@ 3@@A@@@@*@@@@@@*@*)@-error_message..Y]/Yj@б@г%error9Ym:Yr@@ @@@3;::;;;;;@(RL@A@@г&stringHYvIY|@@ @@@@@@@@@@@SYY @Ð 6 Convert an error description to a printable message. `}}a}@@@@@@@y\@@@t@@@@@@1"/*~@@@@@@3}||}}}}}@CX1@A7unsafe_get_global_valueW@б6bytecode_or_asm_symbolгa&string@@ @@@@@г&option@г7#Obj!t@ @@@@@@< @@@ @@@A@@6+@@D!@@@$@8 8 Obtain the globally-visible value whose address is that of the given symbol. The symbol name must be the mangled form as would occur in bytecode or a native object file. [None] is returned if the value is inaccessible. The accessible values are those in the main program and those provided by previous calls to [loadfile]. This function is deemed "unsafe" as there is no type safety provided. When executing in bytecode, this function uses [Symtable]. As a cautionary note for programs such as the debugger: even though the linking of a packed (subset of) compilerlibs into [Dynlink] hides the copy of [Symtable] that [Dynlink] uses from its clients, there is still only one table of global values in the bytecode VM. Changes to this table are NOT synchronized between [Dynlink] and the functions that change the global value table ([update_global_table] and [assign_global_value], accessed through a client's version of [Symtable]). This is why we can't use [Dynlink] from the toplevel interactive loop, in particular.  J L@@@@@@@]@@4@H鐠@@@@@@d@kX@#@@p@= @@]@=@@[@;@A@rlA@ B@@~>@@3@@@A@ H************************************************************************ A@@ A@L@ H BMMBM@ H OCaml CC@ H DD3@ H Xavier Leroy, projet Cristal, INRIA Rocquencourt "E44#E4@ H Mark Shinwell and Leo White, Jane Street Europe (F)F@ H .G/G@ H Copyright 1996 Institut National de Recherche en Informatique et 4H5Hg@ H en Automatique. :Ihh;Ih@ H Copyright 2017--2018 Jane Street Group LLC @JAJ@ H FKGKN@ H All rights reserved. This file is distributed under the terms of LLOOMLO@ H the GNU Lesser General Public License version 2.1, with the RMSM@ H special exception on linking described in the file LICENSE. XNYN5@ H ^O66_O6@ H************************************************************************dPeP@ 1* Dynamic loading of .cmo, .cma and .cmxs files. j K* [true] if the program is native, [false] if the program is bytecode. Π (* {1 Dynamic loading of compiled files}  * In bytecode: load the given bytecode object file ([.cmo] file) or bytecode library file ([.cma] file), and link it with the running program. In native code: load the given OCaml plugin file (usually [.cmxs]), and link it with the running program. All toplevel expressions in the loaded compilation units are evaluated. No facilities are provided to access value names defined by the unit. Therefore, the unit must itself register its entry points with the main program (or a previously-loaded library) e.g. by modifying tables of functions. An exception will be raised if the given library defines toplevel modules whose names clash with modules existing either in the main program or a shared library previously loaded with [loadfile]. Modules from shared libraries previously loaded with [loadfile_private] are not included in this restriction. The compilation units loaded by this function are added to the "allowed units" list (see {!set_allowed_units}). z 4* Same as [loadfile], except that the compilation units just loaded are hidden (cannot be referenced) from other modules dynamically loaded afterwards. An exception will be raised if the given library defines toplevel modules whose names clash with modules existing in either the main program or a shared library previously loaded with [loadfile]. Modules from shared libraries previously loaded with [loadfile_private] are not included in this restriction. An exception will also be raised if the given library defines toplevel modules whose name matches that of an interface depended on by a module existing in either the main program or a shared library previously loaded with [loadfile]. This applies even if such dependency is only a "module alias" dependency (i.e. just on the name rather than the contents of the interface). The compilation units loaded by this function are not added to the "allowed units" list (see {!set_allowed_units}) since they cannot be referenced from other compilation units. 4 c* In bytecode, the identity function. In native code, replace the last extension with [.cmxs]. 5* {1 Access control} Ӡ [* Set the list of compilation units that may be referenced from units that are dynamically loaded in the future to be exactly the given value. Initially all compilation units composing the program currently running are available for reference from dynamically-linked units. [set_allowed_units] can be used to restrict access to a subset of these units, e.g. to the units that compose the API for dynamically-linked code, and prevent access to all other units, e.g. private, internal modules of the running program. Note that {!loadfile} changes the allowed-units list.  * [allow_only units] sets the list of allowed units to be the intersection of the existing allowed units and the given list of units. As such it can never increase the set of allowed units. 6 * [prohibit units] prohibits dynamically-linked units from referencing the units named in list [units] by removing such units from the allowed units list. This can be used to prevent access to selected units, e.g. private, internal modules of the running program. ᠠ i* Return the list of compilation units that form the main program (i.e. are not dynamically linked).  * Return the list of compilation units that have been dynamically loaded via [loadfile] (and not via [loadfile_private]). Note that compilation units loaded dynamically cannot be unloaded. 7 * Return the list of compilation units that form the main program together with those that have been dynamically loaded via [loadfile] (and not via [loadfile_private]). ⠠ * Govern whether unsafe object files are allowed to be dynamically linked. A compilation unit is 'unsafe' if it contains declarations of external functions, which can break type safety. By default, dynamic linking of unsafe object files is not allowed. In native code, this function does nothing; object files with external functions are always allowed to be dynamically linked. 6* {1 Error reporting}  %* Errors in dynamic linking are reported by raising the [Error] exception with a description of the error. A common case is the dynamic library not being found on the system: this is reported via [Cannot_open_dynamic_library] (the enclosed exception may be platform-specific).  7* Convert an error description to a printable message. :#*/* 9* Obtain the globally-visible value whose address is that of the given symbol. The symbol name must be the mangled form as would occur in bytecode or a native object file. [None] is returned if the value is inaccessible. The accessible values are those in the main program and those provided by previous calls to [loadfile]. This function is deemed "unsafe" as there is no type safety provided. When executing in bytecode, this function uses [Symtable]. As a cautionary note for programs such as the debugger: even though the linking of a packed (subset of) compilerlibs into [Dynlink] hides the copy of [Symtable] that [Dynlink] uses from its clients, there is still only one table of global values in the bytecode VM. Changes to this table are NOT synchronized between [Dynlink] and the functions that change the global value table ([update_global_table] and [assign_global_value], accessed through a client's version of [Symtable]). This is why we can't use [Dynlink] from the toplevel interactive loop, in particular. @(./ocamlc)-nostdlib"-I(./stdlib"-g0-strict-sequence*-principal(-absname"-w8+a-4-9-40-41-42-44-45-48+-warn-error"+a*-bin-annot/-strict-formats"-I1otherlibs/dynlink"-I%utils"-I'parsing"-I&typing"-I(bytecomp"-I,file_formats"-I&lambda"-I*middle_end"-I2middle_end/closure"-I2middle_end/flambda"-I=middle_end/flambda/base_types"-I'asmcomp"-I&driver"-I(toplevel"-I%tools"-I'runtime"-I1otherlibs/dynlink"-I-otherlibs/str"-I4otherlibs/systhreads"-I.otherlibs/unix"-I8otherlibs/runtime_events"-I6otherlibs/dynlink/byte"-cڐ =/builds/workspace/precheck/flambda/false/label/ocaml-linux-32 >3210/.-,+*)('&%$#"! @@0i?9SN3@@@8CamlinternalFormatBasics0%FU(Q/Tu 0kV6Fp9!d&Stdlib0Lku]8_٠-Stdlib__Int320 u&+Stdlib__Obj0]'kZ<@0kV6Fp9!dA^C`ǰא|@8*d@ϐ@P@=n@Tߒ@6n@@^Ұ4@8G@yذ@@@(T@Q@@@P@@