diff --git a/.depend b/.depend index 10e18ba87973..4d83b78b093f 100644 --- a/.depend +++ b/.depend @@ -58,6 +58,11 @@ utils/identifiable.cmx : \ utils/misc.cmx \ utils/identifiable.cmi utils/identifiable.cmi : +utils/int_replace_polymorphic_compare.cmo : \ + utils/int_replace_polymorphic_compare.cmi +utils/int_replace_polymorphic_compare.cmx : \ + utils/int_replace_polymorphic_compare.cmi +utils/int_replace_polymorphic_compare.cmi : utils/load_path.cmo : \ utils/misc.cmi \ utils/load_path.cmi @@ -431,54 +436,6 @@ typing/btype.cmi : \ typing/types.cmi \ typing/path.cmi \ parsing/asttypes.cmi -typing/cmi_format.cmo : \ - typing/types.cmi \ - utils/misc.cmi \ - parsing/location.cmi \ - utils/config.cmi \ - typing/cmi_format.cmi -typing/cmi_format.cmx : \ - typing/types.cmx \ - utils/misc.cmx \ - parsing/location.cmx \ - utils/config.cmx \ - typing/cmi_format.cmi -typing/cmi_format.cmi : \ - typing/types.cmi \ - utils/misc.cmi -typing/cmt_format.cmo : \ - typing/types.cmi \ - typing/typedtree.cmi \ - typing/tast_mapper.cmi \ - utils/misc.cmi \ - parsing/location.cmi \ - utils/load_path.cmi \ - parsing/lexer.cmi \ - typing/env.cmi \ - utils/config.cmi \ - typing/cmi_format.cmi \ - utils/clflags.cmi \ - typing/cmt_format.cmi -typing/cmt_format.cmx : \ - typing/types.cmx \ - typing/typedtree.cmx \ - typing/tast_mapper.cmx \ - utils/misc.cmx \ - parsing/location.cmx \ - utils/load_path.cmx \ - parsing/lexer.cmx \ - typing/env.cmx \ - utils/config.cmx \ - typing/cmi_format.cmx \ - utils/clflags.cmx \ - typing/cmt_format.cmi -typing/cmt_format.cmi : \ - typing/types.cmi \ - typing/typedtree.cmi \ - utils/misc.cmi \ - parsing/location.cmi \ - typing/env.cmi \ - typing/cmi_format.cmi typing/ctype.cmo : \ typing/types.cmi \ typing/subst.cmi \ @@ -547,7 +504,7 @@ typing/env.cmo : \ utils/load_path.cmi \ typing/ident.cmi \ typing/datarepr.cmi \ - typing/cmi_format.cmi \ + file_formats/cmi_format.cmi \ utils/clflags.cmi \ parsing/builtin_attributes.cmi \ typing/btype.cmi \ @@ -566,7 +523,7 @@ typing/env.cmx : \ utils/load_path.cmx \ typing/ident.cmx \ typing/datarepr.cmx \ - typing/cmi_format.cmx \ + file_formats/cmi_format.cmx \ utils/clflags.cmx \ parsing/builtin_attributes.cmx \ typing/btype.cmx \ @@ -582,7 +539,7 @@ typing/env.cmi : \ parsing/location.cmi \ utils/load_path.cmi \ typing/ident.cmi \ - typing/cmi_format.cmi \ + file_formats/cmi_format.cmi \ parsing/asttypes.cmi typing/envaux.cmo : \ typing/subst.cmi \ @@ -679,7 +636,7 @@ typing/includemod.cmo : \ typing/ident.cmi \ typing/env.cmi \ typing/ctype.cmi \ - typing/cmt_format.cmi \ + file_formats/cmt_format.cmi \ utils/clflags.cmi \ parsing/builtin_attributes.cmi \ typing/btype.cmi \ @@ -700,7 +657,7 @@ typing/includemod.cmx : \ typing/ident.cmx \ typing/env.cmx \ typing/ctype.cmx \ - typing/cmt_format.cmx \ + file_formats/cmt_format.cmx \ utils/clflags.cmx \ parsing/builtin_attributes.cmx \ typing/btype.cmx \ @@ -825,7 +782,7 @@ typing/persistent_env.cmo : \ utils/load_path.cmi \ utils/consistbl.cmi \ utils/config.cmi \ - typing/cmi_format.cmi \ + file_formats/cmi_format.cmi \ utils/clflags.cmi \ typing/persistent_env.cmi typing/persistent_env.cmx : \ @@ -835,14 +792,15 @@ typing/persistent_env.cmx : \ utils/load_path.cmx \ utils/consistbl.cmx \ utils/config.cmx \ - typing/cmi_format.cmx \ + file_formats/cmi_format.cmx \ utils/clflags.cmx \ typing/persistent_env.cmi typing/persistent_env.cmi : \ typing/types.cmi \ utils/misc.cmi \ parsing/location.cmi \ - typing/cmi_format.cmi + utils/consistbl.cmi \ + file_formats/cmi_format.cmi typing/predef.cmo : \ typing/types.cmi \ typing/path.cmi \ @@ -1081,7 +1039,7 @@ typing/typeclass.cmo : \ typing/ident.cmi \ typing/env.cmi \ typing/ctype.cmi \ - typing/cmt_format.cmi \ + file_formats/cmt_format.cmi \ utils/clflags.cmi \ parsing/builtin_attributes.cmi \ typing/btype.cmi \ @@ -1110,7 +1068,7 @@ typing/typeclass.cmx : \ typing/ident.cmx \ typing/env.cmx \ typing/ctype.cmx \ - typing/cmt_format.cmx \ + file_formats/cmt_format.cmx \ utils/clflags.cmx \ parsing/builtin_attributes.cmx \ typing/btype.cmx \ @@ -1152,7 +1110,7 @@ typing/typecore.cmo : \ typing/ident.cmi \ typing/env.cmi \ typing/ctype.cmi \ - typing/cmt_format.cmi \ + file_formats/cmt_format.cmi \ utils/clflags.cmi \ parsing/builtin_attributes.cmi \ typing/btype.cmi \ @@ -1185,7 +1143,7 @@ typing/typecore.cmx : \ typing/ident.cmx \ typing/env.cmx \ typing/ctype.cmx \ - typing/cmt_format.cmx \ + file_formats/cmt_format.cmx \ utils/clflags.cmx \ parsing/builtin_attributes.cmx \ typing/btype.cmx \ @@ -1439,8 +1397,8 @@ typing/typemod.cmo : \ typing/env.cmi \ typing/ctype.cmi \ utils/config.cmi \ - typing/cmt_format.cmi \ - typing/cmi_format.cmi \ + file_formats/cmt_format.cmi \ + file_formats/cmi_format.cmi \ utils/clflags.cmi \ parsing/builtin_attributes.cmi \ typing/btype.cmi \ @@ -1471,8 +1429,8 @@ typing/typemod.cmx : \ typing/env.cmx \ typing/ctype.cmx \ utils/config.cmx \ - typing/cmt_format.cmx \ - typing/cmi_format.cmx \ + file_formats/cmt_format.cmx \ + file_formats/cmi_format.cmx \ utils/clflags.cmx \ parsing/builtin_attributes.cmx \ typing/btype.cmx \ @@ -1492,7 +1450,7 @@ typing/typemod.cmi : \ typing/includemod.cmi \ typing/ident.cmi \ typing/env.cmi \ - typing/cmi_format.cmi + file_formats/cmi_format.cmi typing/typeopt.cmo : \ typing/types.cmi \ typing/typedtree.cmi \ @@ -1674,7 +1632,7 @@ bytecomp/bytelibrarian.cmo : \ utils/load_path.cmi \ bytecomp/emitcode.cmi \ utils/config.cmi \ - bytecomp/cmo_format.cmi \ + file_formats/cmo_format.cmi \ utils/clflags.cmi \ bytecomp/bytelink.cmi \ bytecomp/bytelibrarian.cmi @@ -1684,7 +1642,7 @@ bytecomp/bytelibrarian.cmx : \ utils/load_path.cmx \ bytecomp/emitcode.cmx \ utils/config.cmx \ - bytecomp/cmo_format.cmi \ + file_formats/cmo_format.cmi \ utils/clflags.cmx \ bytecomp/bytelink.cmx \ bytecomp/bytelibrarian.cmi @@ -1702,7 +1660,7 @@ bytecomp/bytelink.cmo : \ bytecomp/dll.cmi \ utils/consistbl.cmi \ utils/config.cmi \ - bytecomp/cmo_format.cmi \ + file_formats/cmo_format.cmi \ utils/clflags.cmi \ utils/ccomp.cmi \ bytecomp/bytesections.cmi \ @@ -1720,7 +1678,7 @@ bytecomp/bytelink.cmx : \ bytecomp/dll.cmx \ utils/consistbl.cmx \ utils/config.cmx \ - bytecomp/cmo_format.cmi \ + file_formats/cmo_format.cmi \ utils/clflags.cmx \ utils/ccomp.cmx \ bytecomp/bytesections.cmx \ @@ -1728,7 +1686,7 @@ bytecomp/bytelink.cmx : \ bytecomp/bytelink.cmi : \ bytecomp/symtable.cmi \ utils/misc.cmi \ - bytecomp/cmo_format.cmi + file_formats/cmo_format.cmi bytecomp/bytepackager.cmo : \ typing/typemod.cmi \ bytecomp/translmod.cmi \ @@ -1743,7 +1701,7 @@ bytecomp/bytepackager.cmo : \ typing/env.cmi \ bytecomp/emitcode.cmi \ utils/config.cmi \ - bytecomp/cmo_format.cmi \ + file_formats/cmo_format.cmi \ utils/clflags.cmi \ bytecomp/bytelink.cmi \ bytecomp/bytegen.cmi \ @@ -1762,7 +1720,7 @@ bytecomp/bytepackager.cmx : \ typing/env.cmx \ bytecomp/emitcode.cmx \ utils/config.cmx \ - bytecomp/cmo_format.cmi \ + file_formats/cmo_format.cmi \ utils/clflags.cmx \ bytecomp/bytelink.cmx \ bytecomp/bytegen.cmx \ @@ -1777,10 +1735,16 @@ bytecomp/bytesections.cmx : \ utils/config.cmx \ bytecomp/bytesections.cmi bytecomp/bytesections.cmi : -bytecomp/cmo_format.cmi : \ - utils/misc.cmi \ - bytecomp/lambda.cmi \ - typing/ident.cmi +bytecomp/debuginfo.cmo : \ + parsing/location.cmi \ + utils/int_replace_polymorphic_compare.cmi \ + bytecomp/debuginfo.cmi +bytecomp/debuginfo.cmx : \ + parsing/location.cmx \ + utils/int_replace_polymorphic_compare.cmx \ + bytecomp/debuginfo.cmi +bytecomp/debuginfo.cmi : \ + parsing/location.cmi bytecomp/dll.cmo : \ utils/misc.cmi \ utils/config.cmi \ @@ -1801,7 +1765,7 @@ bytecomp/emitcode.cmo : \ typing/ident.cmi \ typing/env.cmi \ utils/config.cmi \ - bytecomp/cmo_format.cmi \ + file_formats/cmo_format.cmi \ utils/clflags.cmi \ bytecomp/bytegen.cmi \ typing/btype.cmi \ @@ -1818,7 +1782,7 @@ bytecomp/emitcode.cmx : \ typing/ident.cmx \ typing/env.cmx \ utils/config.cmx \ - bytecomp/cmo_format.cmi \ + file_formats/cmo_format.cmi \ utils/clflags.cmx \ bytecomp/bytegen.cmx \ typing/btype.cmx \ @@ -1828,7 +1792,7 @@ bytecomp/emitcode.cmi : \ utils/misc.cmi \ bytecomp/instruct.cmi \ typing/ident.cmi \ - bytecomp/cmo_format.cmi + file_formats/cmo_format.cmi bytecomp/instruct.cmo : \ typing/types.cmi \ typing/subst.cmi \ @@ -2029,7 +1993,7 @@ bytecomp/symtable.cmo : \ typing/ident.cmi \ bytecomp/dll.cmi \ utils/config.cmi \ - bytecomp/cmo_format.cmi \ + file_formats/cmo_format.cmi \ utils/clflags.cmi \ bytecomp/bytesections.cmi \ parsing/asttypes.cmi \ @@ -2044,7 +2008,7 @@ bytecomp/symtable.cmx : \ typing/ident.cmx \ bytecomp/dll.cmx \ utils/config.cmx \ - bytecomp/cmo_format.cmi \ + file_formats/cmo_format.cmi \ utils/clflags.cmx \ bytecomp/bytesections.cmx \ parsing/asttypes.cmi \ @@ -2053,7 +2017,7 @@ bytecomp/symtable.cmi : \ utils/misc.cmi \ bytecomp/lambda.cmi \ typing/ident.cmi \ - bytecomp/cmo_format.cmi + file_formats/cmo_format.cmi bytecomp/translattribute.cmo : \ utils/warnings.cmi \ typing/typedtree.cmi \ @@ -2320,32 +2284,34 @@ asmcomp/CSEgen.cmi : \ asmcomp/mach.cmi asmcomp/afl_instrument.cmo : \ bytecomp/lambda.cmi \ - middle_end/debuginfo.cmi \ + bytecomp/debuginfo.cmi \ asmcomp/cmm.cmi \ utils/clflags.cmi \ - asmcomp/backend_var.cmi \ + middle_end/backend_var.cmi \ + asmcomp/backend_sym.cmi \ parsing/asttypes.cmi \ asmcomp/afl_instrument.cmi asmcomp/afl_instrument.cmx : \ bytecomp/lambda.cmx \ - middle_end/debuginfo.cmx \ + bytecomp/debuginfo.cmx \ asmcomp/cmm.cmx \ utils/clflags.cmx \ - asmcomp/backend_var.cmx \ + middle_end/backend_var.cmx \ + asmcomp/backend_sym.cmx \ parsing/asttypes.cmi \ asmcomp/afl_instrument.cmi asmcomp/afl_instrument.cmi : \ asmcomp/cmm.cmi asmcomp/arch.cmo : \ utils/config.cmi \ - utils/clflags.cmi + utils/clflags.cmi \ + asmcomp/backend_sym.cmi asmcomp/arch.cmx : \ utils/config.cmx \ - utils/clflags.cmx + utils/clflags.cmx \ + asmcomp/backend_sym.cmx asmcomp/asmgen.cmo : \ - asmcomp/un_anf.cmi \ bytecomp/translmod.cmi \ - middle_end/base_types/symbol.cmi \ asmcomp/split.cmi \ asmcomp/spill.cmi \ asmcomp/selection.cmi \ @@ -2357,42 +2323,39 @@ asmcomp/asmgen.cmo : \ asmcomp/printmach.cmi \ asmcomp/printlinear.cmi \ asmcomp/printcmm.cmi \ - asmcomp/printclambda.cmi \ typing/primitive.cmi \ - typing/path.cmi \ utils/misc.cmi \ asmcomp/mach.cmi \ parsing/location.cmi \ asmcomp/liveness.cmi \ asmcomp/linscan.cmi \ - middle_end/base_types/linkage_name.cmi \ + asmcomp/linking_state.cmi \ asmcomp/linearize.cmi \ bytecomp/lambda.cmi \ asmcomp/interval.cmi \ asmcomp/interf.cmi \ typing/ident.cmi \ - asmcomp/flambda_to_clambda.cmi \ - middle_end/flambda.cmi \ asmcomp/emitaux.cmi \ asmcomp/emit.cmi \ asmcomp/deadcode.cmi \ utils/config.cmi \ - asmcomp/compilenv.cmi \ + middle_end/compilation_unit.cmi \ + middle_end/compilation_state.cmi \ asmcomp/comballoc.cmi \ asmcomp/coloring.cmi \ + file_formats/cmx_format.cmi \ asmcomp/cmmgen.cmi \ asmcomp/cmm.cmi \ - asmcomp/closure.cmi \ utils/clflags.cmi \ - asmcomp/clambda.cmi \ + middle_end/clambda.cmi \ asmcomp/CSE.cmo \ - asmcomp/build_export_info.cmi \ + asmcomp/backend_sym.cmi \ + middle_end/backend_intf.cmi \ + asmcomp/backend_compilation_unit.cmi \ asmcomp/debug/available_regs.cmi \ asmcomp/asmgen.cmi asmcomp/asmgen.cmx : \ - asmcomp/un_anf.cmx \ bytecomp/translmod.cmx \ - middle_end/base_types/symbol.cmx \ asmcomp/split.cmx \ asmcomp/spill.cmx \ asmcomp/selection.cmx \ @@ -2404,54 +2367,53 @@ asmcomp/asmgen.cmx : \ asmcomp/printmach.cmx \ asmcomp/printlinear.cmx \ asmcomp/printcmm.cmx \ - asmcomp/printclambda.cmx \ typing/primitive.cmx \ - typing/path.cmx \ utils/misc.cmx \ asmcomp/mach.cmx \ parsing/location.cmx \ asmcomp/liveness.cmx \ asmcomp/linscan.cmx \ - middle_end/base_types/linkage_name.cmx \ + asmcomp/linking_state.cmx \ asmcomp/linearize.cmx \ bytecomp/lambda.cmx \ asmcomp/interval.cmx \ asmcomp/interf.cmx \ typing/ident.cmx \ - asmcomp/flambda_to_clambda.cmx \ - middle_end/flambda.cmx \ asmcomp/emitaux.cmx \ asmcomp/emit.cmx \ asmcomp/deadcode.cmx \ utils/config.cmx \ - asmcomp/compilenv.cmx \ + middle_end/compilation_unit.cmx \ + middle_end/compilation_state.cmx \ asmcomp/comballoc.cmx \ asmcomp/coloring.cmx \ + file_formats/cmx_format.cmx \ asmcomp/cmmgen.cmx \ asmcomp/cmm.cmx \ - asmcomp/closure.cmx \ utils/clflags.cmx \ - asmcomp/clambda.cmx \ + middle_end/clambda.cmx \ asmcomp/CSE.cmx \ - asmcomp/build_export_info.cmx \ + asmcomp/backend_sym.cmx \ + middle_end/backend_intf.cmi \ + asmcomp/backend_compilation_unit.cmx \ asmcomp/debug/available_regs.cmx \ asmcomp/asmgen.cmi asmcomp/asmgen.cmi : \ bytecomp/lambda.cmi \ - typing/ident.cmi \ - middle_end/flambda.cmi \ asmcomp/cmm.cmi \ + middle_end/clambda.cmi \ + asmcomp/backend_sym.cmi \ middle_end/backend_intf.cmi asmcomp/asmlibrarian.cmo : \ utils/misc.cmi \ parsing/location.cmi \ utils/load_path.cmi \ - asmcomp/export_info.cmi \ + middle_end/flambda/export_info.cmi \ utils/config.cmi \ - asmcomp/compilenv.cmi \ - asmcomp/cmx_format.cmi \ + file_formats/cmxa_format.cmi \ + file_formats/cmx_format.cmi \ utils/clflags.cmi \ - asmcomp/clambda.cmi \ + middle_end/clambda.cmi \ utils/ccomp.cmi \ asmcomp/asmlink.cmi \ asmcomp/asmlibrarian.cmi @@ -2459,12 +2421,12 @@ asmcomp/asmlibrarian.cmx : \ utils/misc.cmx \ parsing/location.cmx \ utils/load_path.cmx \ - asmcomp/export_info.cmx \ + middle_end/flambda/export_info.cmx \ utils/config.cmx \ - asmcomp/compilenv.cmx \ - asmcomp/cmx_format.cmi \ + file_formats/cmxa_format.cmx \ + file_formats/cmx_format.cmx \ utils/clflags.cmx \ - asmcomp/clambda.cmx \ + middle_end/clambda.cmx \ utils/ccomp.cmx \ asmcomp/asmlink.cmx \ asmcomp/asmlibrarian.cmi @@ -2475,16 +2437,20 @@ asmcomp/asmlink.cmo : \ utils/misc.cmi \ parsing/location.cmi \ utils/load_path.cmi \ + asmcomp/linking_state.cmi \ asmcomp/emitaux.cmi \ asmcomp/emit.cmi \ utils/consistbl.cmi \ utils/config.cmi \ - asmcomp/compilenv.cmi \ - asmcomp/cmx_format.cmi \ + middle_end/compilation_unit.cmi \ + file_formats/cmxa_format.cmi \ + file_formats/cmx_format.cmi \ asmcomp/cmmgen.cmi \ asmcomp/cmm.cmi \ utils/clflags.cmi \ utils/ccomp.cmi \ + asmcomp/backend_sym.cmi \ + asmcomp/backend_compilation_unit.cmi \ asmcomp/asmgen.cmi \ asmcomp/asmlink.cmi asmcomp/asmlink.cmx : \ @@ -2493,82 +2459,111 @@ asmcomp/asmlink.cmx : \ utils/misc.cmx \ parsing/location.cmx \ utils/load_path.cmx \ + asmcomp/linking_state.cmx \ asmcomp/emitaux.cmx \ asmcomp/emit.cmx \ utils/consistbl.cmx \ utils/config.cmx \ - asmcomp/compilenv.cmx \ - asmcomp/cmx_format.cmi \ + middle_end/compilation_unit.cmx \ + file_formats/cmxa_format.cmx \ + file_formats/cmx_format.cmx \ asmcomp/cmmgen.cmx \ asmcomp/cmm.cmx \ utils/clflags.cmx \ utils/ccomp.cmx \ + asmcomp/backend_sym.cmx \ + asmcomp/backend_compilation_unit.cmx \ asmcomp/asmgen.cmx \ asmcomp/asmlink.cmi asmcomp/asmlink.cmi : \ utils/misc.cmi \ - asmcomp/cmx_format.cmi + middle_end/compilation_unit.cmi \ + file_formats/cmx_format.cmi asmcomp/asmpackager.cmo : \ typing/typemod.cmi \ bytecomp/translmod.cmi \ + middle_end/symbol.cmi \ utils/profile.cmi \ utils/misc.cmi \ - middle_end/middle_end.cmi \ parsing/location.cmi \ utils/load_path.cmi \ bytecomp/lambda.cmi \ typing/ident.cmi \ - asmcomp/export_info_for_pack.cmi \ - asmcomp/export_info.cmi \ + middle_end/flambda/flambda_middle_end.cmi \ + middle_end/flambda/export_info.cmi \ typing/env.cmi \ utils/config.cmi \ - asmcomp/compilenv.cmi \ - middle_end/base_types/compilation_unit.cmi \ - asmcomp/cmx_format.cmi \ + middle_end/compilation_unit.cmi \ + middle_end/compilation_state.cmi \ + file_formats/cmx_format.cmi \ + middle_end/closure/closure_middle_end.cmi \ utils/clflags.cmi \ utils/ccomp.cmi \ + asmcomp/backend_sym.cmi \ asmcomp/asmlink.cmi \ asmcomp/asmgen.cmi \ asmcomp/asmpackager.cmi asmcomp/asmpackager.cmx : \ typing/typemod.cmx \ bytecomp/translmod.cmx \ + middle_end/symbol.cmx \ utils/profile.cmx \ utils/misc.cmx \ - middle_end/middle_end.cmx \ parsing/location.cmx \ utils/load_path.cmx \ bytecomp/lambda.cmx \ typing/ident.cmx \ - asmcomp/export_info_for_pack.cmx \ - asmcomp/export_info.cmx \ + middle_end/flambda/flambda_middle_end.cmx \ + middle_end/flambda/export_info.cmx \ typing/env.cmx \ utils/config.cmx \ - asmcomp/compilenv.cmx \ - middle_end/base_types/compilation_unit.cmx \ - asmcomp/cmx_format.cmi \ + middle_end/compilation_unit.cmx \ + middle_end/compilation_state.cmx \ + file_formats/cmx_format.cmx \ + middle_end/closure/closure_middle_end.cmx \ utils/clflags.cmx \ utils/ccomp.cmx \ + asmcomp/backend_sym.cmx \ asmcomp/asmlink.cmx \ asmcomp/asmgen.cmx \ asmcomp/asmpackager.cmi asmcomp/asmpackager.cmi : \ typing/env.cmi \ + middle_end/compilation_unit.cmi \ middle_end/backend_intf.cmi -asmcomp/backend_var.cmo : \ - typing/path.cmi \ - typing/ident.cmi \ - middle_end/debuginfo.cmi \ - asmcomp/backend_var.cmi -asmcomp/backend_var.cmx : \ - typing/path.cmx \ - typing/ident.cmx \ - middle_end/debuginfo.cmx \ - asmcomp/backend_var.cmi -asmcomp/backend_var.cmi : \ - typing/path.cmi \ - typing/ident.cmi \ - middle_end/debuginfo.cmi +asmcomp/backend_compilation_unit.cmo : \ + utils/identifiable.cmi \ + middle_end/compilation_unit.cmi \ + asmcomp/backend_compilation_unit.cmi +asmcomp/backend_compilation_unit.cmx : \ + utils/identifiable.cmx \ + middle_end/compilation_unit.cmx \ + asmcomp/backend_compilation_unit.cmi +asmcomp/backend_compilation_unit.cmi : \ + utils/identifiable.cmi \ + middle_end/compilation_unit.cmi +asmcomp/backend_sym.cmo : \ + middle_end/symbol.cmi \ + typing/primitive.cmi \ + asmcomp/object_file.cmi \ + utils/identifiable.cmi \ + middle_end/compilation_unit.cmi \ + asmcomp/backend_compilation_unit.cmi \ + asmcomp/backend_sym.cmi +asmcomp/backend_sym.cmx : \ + middle_end/symbol.cmx \ + typing/primitive.cmx \ + asmcomp/object_file.cmx \ + utils/identifiable.cmx \ + middle_end/compilation_unit.cmx \ + asmcomp/backend_compilation_unit.cmx \ + asmcomp/backend_sym.cmi +asmcomp/backend_sym.cmi : \ + middle_end/symbol.cmi \ + typing/primitive.cmi \ + asmcomp/object_file.cmi \ + utils/identifiable.cmi \ + asmcomp/backend_compilation_unit.cmi asmcomp/branch_relaxation.cmo : \ utils/misc.cmi \ asmcomp/mach.cmi \ @@ -2594,248 +2589,112 @@ asmcomp/branch_relaxation_intf.cmx : \ asmcomp/linearize.cmx \ asmcomp/cmm.cmx \ asmcomp/arch.cmx -asmcomp/build_export_info.cmo : \ - middle_end/base_types/variable.cmi \ - middle_end/base_types/var_within_closure.cmi \ - asmcomp/traverse_for_exported_symbols.cmi \ - middle_end/base_types/tag.cmi \ - middle_end/base_types/symbol.cmi \ - middle_end/simple_value_approx.cmi \ - middle_end/base_types/set_of_closures_id.cmi \ - utils/misc.cmi \ - middle_end/invariant_params.cmi \ - middle_end/inline_and_simplify_aux.cmi \ - middle_end/flambda_utils.cmi \ - middle_end/flambda.cmi \ - middle_end/find_recursive_functions.cmi \ - asmcomp/export_info.cmi \ - middle_end/base_types/export_id.cmi \ - asmcomp/compilenv.cmi \ - middle_end/base_types/compilation_unit.cmi \ - middle_end/base_types/closure_id.cmi \ - utils/clflags.cmi \ - middle_end/backend_intf.cmi \ - middle_end/allocated_const.cmi \ - asmcomp/build_export_info.cmi -asmcomp/build_export_info.cmx : \ - middle_end/base_types/variable.cmx \ - middle_end/base_types/var_within_closure.cmx \ - asmcomp/traverse_for_exported_symbols.cmx \ - middle_end/base_types/tag.cmx \ - middle_end/base_types/symbol.cmx \ - middle_end/simple_value_approx.cmx \ - middle_end/base_types/set_of_closures_id.cmx \ - utils/misc.cmx \ - middle_end/invariant_params.cmx \ - middle_end/inline_and_simplify_aux.cmx \ - middle_end/flambda_utils.cmx \ - middle_end/flambda.cmx \ - middle_end/find_recursive_functions.cmx \ - asmcomp/export_info.cmx \ - middle_end/base_types/export_id.cmx \ - asmcomp/compilenv.cmx \ - middle_end/base_types/compilation_unit.cmx \ - middle_end/base_types/closure_id.cmx \ - utils/clflags.cmx \ - middle_end/backend_intf.cmi \ - middle_end/allocated_const.cmx \ - asmcomp/build_export_info.cmi -asmcomp/build_export_info.cmi : \ - middle_end/flambda.cmi \ - asmcomp/export_info.cmi \ - middle_end/backend_intf.cmi -asmcomp/clambda.cmo : \ - typing/path.cmi \ - bytecomp/lambda.cmi \ - typing/ident.cmi \ - middle_end/debuginfo.cmi \ - asmcomp/clambda_primitives.cmi \ - asmcomp/backend_var.cmi \ - parsing/asttypes.cmi \ - asmcomp/clambda.cmi -asmcomp/clambda.cmx : \ - typing/path.cmx \ - bytecomp/lambda.cmx \ - typing/ident.cmx \ - middle_end/debuginfo.cmx \ - asmcomp/clambda_primitives.cmx \ - asmcomp/backend_var.cmx \ - parsing/asttypes.cmi \ - asmcomp/clambda.cmi -asmcomp/clambda.cmi : \ - typing/path.cmi \ - bytecomp/lambda.cmi \ - typing/ident.cmi \ - middle_end/debuginfo.cmi \ - asmcomp/clambda_primitives.cmi \ - asmcomp/backend_var.cmi \ - parsing/asttypes.cmi -asmcomp/clambda_primitives.cmo : \ - typing/types.cmi \ - typing/primitive.cmi \ - bytecomp/lambda.cmi \ - parsing/asttypes.cmi \ - asmcomp/clambda_primitives.cmi -asmcomp/clambda_primitives.cmx : \ - typing/types.cmx \ - typing/primitive.cmx \ - bytecomp/lambda.cmx \ - parsing/asttypes.cmi \ - asmcomp/clambda_primitives.cmi -asmcomp/clambda_primitives.cmi : \ - typing/types.cmi \ - typing/primitive.cmi \ - bytecomp/lambda.cmi \ - parsing/asttypes.cmi -asmcomp/closure.cmo : \ - utils/warnings.cmi \ - bytecomp/switch.cmi \ - bytecomp/simplif.cmi \ - asmcomp/semantics_of_primitives.cmi \ - typing/primitive.cmi \ - utils/numbers.cmi \ - utils/misc.cmi \ - parsing/location.cmi \ - bytecomp/lambda.cmi \ - typing/ident.cmi \ - typing/env.cmi \ - middle_end/debuginfo.cmi \ - asmcomp/convert_primitives.cmi \ - utils/config.cmi \ - asmcomp/compilenv.cmi \ - utils/clflags.cmi \ - asmcomp/clambda_primitives.cmi \ - asmcomp/clambda.cmi \ - asmcomp/backend_var.cmi \ - parsing/asttypes.cmi \ - asmcomp/arch.cmo \ - asmcomp/closure.cmi -asmcomp/closure.cmx : \ - utils/warnings.cmx \ - bytecomp/switch.cmx \ - bytecomp/simplif.cmx \ - asmcomp/semantics_of_primitives.cmx \ - typing/primitive.cmx \ - utils/numbers.cmx \ - utils/misc.cmx \ - parsing/location.cmx \ - bytecomp/lambda.cmx \ - typing/ident.cmx \ - typing/env.cmx \ - middle_end/debuginfo.cmx \ - asmcomp/convert_primitives.cmx \ - utils/config.cmx \ - asmcomp/compilenv.cmx \ - utils/clflags.cmx \ - asmcomp/clambda_primitives.cmx \ - asmcomp/clambda.cmx \ - asmcomp/backend_var.cmx \ - parsing/asttypes.cmi \ - asmcomp/arch.cmx \ - asmcomp/closure.cmi -asmcomp/closure.cmi : \ - bytecomp/lambda.cmi \ - asmcomp/clambda.cmi -asmcomp/closure_offsets.cmo : \ - middle_end/base_types/variable.cmi \ - middle_end/base_types/var_within_closure.cmi \ - utils/misc.cmi \ - middle_end/flambda_utils.cmi \ - middle_end/flambda.cmi \ - middle_end/base_types/closure_id.cmi \ - asmcomp/closure_offsets.cmi -asmcomp/closure_offsets.cmx : \ - middle_end/base_types/variable.cmx \ - middle_end/base_types/var_within_closure.cmx \ - utils/misc.cmx \ - middle_end/flambda_utils.cmx \ - middle_end/flambda.cmx \ - middle_end/base_types/closure_id.cmx \ - asmcomp/closure_offsets.cmi -asmcomp/closure_offsets.cmi : \ - middle_end/base_types/var_within_closure.cmi \ - middle_end/flambda.cmi \ - middle_end/base_types/closure_id.cmi asmcomp/cmm.cmo : \ utils/targetint.cmi \ bytecomp/lambda.cmi \ - middle_end/debuginfo.cmi \ - asmcomp/backend_var.cmi \ + bytecomp/debuginfo.cmi \ + middle_end/backend_var.cmi \ + asmcomp/backend_sym.cmi \ parsing/asttypes.cmi \ asmcomp/arch.cmo \ asmcomp/cmm.cmi asmcomp/cmm.cmx : \ utils/targetint.cmx \ bytecomp/lambda.cmx \ - middle_end/debuginfo.cmx \ - asmcomp/backend_var.cmx \ + bytecomp/debuginfo.cmx \ + middle_end/backend_var.cmx \ + asmcomp/backend_sym.cmx \ parsing/asttypes.cmi \ asmcomp/arch.cmx \ asmcomp/cmm.cmi asmcomp/cmm.cmi : \ utils/targetint.cmi \ bytecomp/lambda.cmi \ - middle_end/debuginfo.cmi \ - asmcomp/backend_var.cmi \ + bytecomp/debuginfo.cmi \ + middle_end/backend_var.cmi \ + asmcomp/backend_sym.cmi \ parsing/asttypes.cmi asmcomp/cmmgen.cmo : \ - asmcomp/un_anf.cmi \ typing/types.cmi \ utils/targetint.cmi \ + middle_end/symbol.cmi \ bytecomp/switch.cmi \ asmcomp/strmatch.cmi \ asmcomp/proc.cmi \ - asmcomp/printclambda_primitives.cmi \ + middle_end/printclambda_primitives.cmi \ typing/primitive.cmi \ + typing/predef.cmi \ utils/numbers.cmi \ utils/misc.cmi \ + asmcomp/linking_state.cmi \ bytecomp/lambda.cmi \ - middle_end/debuginfo.cmi \ + bytecomp/debuginfo.cmi \ utils/config.cmi \ - asmcomp/compilenv.cmi \ - asmcomp/cmx_format.cmi \ + file_formats/cmxs_format.cmi \ + file_formats/cmx_format.cmi \ + asmcomp/cmmgen_state.cmi \ asmcomp/cmm.cmi \ utils/clflags.cmi \ - asmcomp/clambda_primitives.cmi \ - asmcomp/clambda.cmi \ - asmcomp/backend_var.cmi \ + middle_end/clambda_primitives.cmi \ + middle_end/clambda.cmi \ + middle_end/backend_var.cmi \ + asmcomp/backend_sym.cmi \ + asmcomp/backend_compilation_unit.cmi \ parsing/asttypes.cmi \ asmcomp/arch.cmo \ asmcomp/afl_instrument.cmi \ asmcomp/cmmgen.cmi asmcomp/cmmgen.cmx : \ - asmcomp/un_anf.cmx \ typing/types.cmx \ utils/targetint.cmx \ + middle_end/symbol.cmx \ bytecomp/switch.cmx \ asmcomp/strmatch.cmx \ asmcomp/proc.cmx \ - asmcomp/printclambda_primitives.cmx \ + middle_end/printclambda_primitives.cmx \ typing/primitive.cmx \ + typing/predef.cmx \ utils/numbers.cmx \ utils/misc.cmx \ + asmcomp/linking_state.cmx \ bytecomp/lambda.cmx \ - middle_end/debuginfo.cmx \ + bytecomp/debuginfo.cmx \ utils/config.cmx \ - asmcomp/compilenv.cmx \ - asmcomp/cmx_format.cmi \ + file_formats/cmxs_format.cmx \ + file_formats/cmx_format.cmx \ + asmcomp/cmmgen_state.cmx \ asmcomp/cmm.cmx \ utils/clflags.cmx \ - asmcomp/clambda_primitives.cmx \ - asmcomp/clambda.cmx \ - asmcomp/backend_var.cmx \ + middle_end/clambda_primitives.cmx \ + middle_end/clambda.cmx \ + middle_end/backend_var.cmx \ + asmcomp/backend_sym.cmx \ + asmcomp/backend_compilation_unit.cmx \ parsing/asttypes.cmi \ asmcomp/arch.cmx \ asmcomp/afl_instrument.cmx \ asmcomp/cmmgen.cmi asmcomp/cmmgen.cmi : \ - asmcomp/cmx_format.cmi \ + middle_end/compilation_unit.cmi \ + file_formats/cmx_format.cmi \ asmcomp/cmm.cmi \ - asmcomp/clambda.cmi -asmcomp/cmx_format.cmi : \ - utils/misc.cmi \ - asmcomp/export_info.cmi \ - asmcomp/clambda.cmi + middle_end/clambda.cmi \ + asmcomp/backend_sym.cmi \ + asmcomp/backend_compilation_unit.cmi +asmcomp/cmmgen_state.cmo : \ + asmcomp/cmm.cmi \ + middle_end/clambda.cmi \ + asmcomp/backend_sym.cmi \ + asmcomp/cmmgen_state.cmi +asmcomp/cmmgen_state.cmx : \ + asmcomp/cmm.cmx \ + middle_end/clambda.cmx \ + asmcomp/backend_sym.cmx \ + asmcomp/cmmgen_state.cmi +asmcomp/cmmgen_state.cmi : \ + asmcomp/cmm.cmi \ + middle_end/clambda.cmi \ + asmcomp/backend_sym.cmi asmcomp/coloring.cmo : \ asmcomp/reg.cmi \ asmcomp/proc.cmi \ @@ -2859,72 +2718,6 @@ asmcomp/comballoc.cmx : \ asmcomp/comballoc.cmi asmcomp/comballoc.cmi : \ asmcomp/mach.cmi -asmcomp/compilenv.cmo : \ - utils/warnings.cmi \ - middle_end/base_types/symbol.cmi \ - middle_end/simple_value_approx.cmi \ - middle_end/base_types/set_of_closures_id.cmi \ - typing/path.cmi \ - utils/misc.cmi \ - parsing/location.cmi \ - utils/load_path.cmi \ - middle_end/base_types/linkage_name.cmi \ - typing/ident.cmi \ - asmcomp/export_info.cmi \ - typing/env.cmi \ - utils/config.cmi \ - middle_end/base_types/compilation_unit.cmi \ - asmcomp/cmx_format.cmi \ - middle_end/base_types/closure_id.cmi \ - utils/clflags.cmi \ - asmcomp/clambda.cmi \ - asmcomp/compilenv.cmi -asmcomp/compilenv.cmx : \ - utils/warnings.cmx \ - middle_end/base_types/symbol.cmx \ - middle_end/simple_value_approx.cmx \ - middle_end/base_types/set_of_closures_id.cmx \ - typing/path.cmx \ - utils/misc.cmx \ - parsing/location.cmx \ - utils/load_path.cmx \ - middle_end/base_types/linkage_name.cmx \ - typing/ident.cmx \ - asmcomp/export_info.cmx \ - typing/env.cmx \ - utils/config.cmx \ - middle_end/base_types/compilation_unit.cmx \ - asmcomp/cmx_format.cmi \ - middle_end/base_types/closure_id.cmx \ - utils/clflags.cmx \ - asmcomp/clambda.cmx \ - asmcomp/compilenv.cmi -asmcomp/compilenv.cmi : \ - middle_end/base_types/symbol.cmi \ - middle_end/simple_value_approx.cmi \ - middle_end/base_types/set_of_closures_id.cmi \ - middle_end/base_types/linkage_name.cmi \ - typing/ident.cmi \ - asmcomp/export_info.cmi \ - middle_end/base_types/compilation_unit.cmi \ - asmcomp/cmx_format.cmi \ - middle_end/base_types/closure_id.cmi \ - asmcomp/clambda.cmi -asmcomp/convert_primitives.cmo : \ - bytecomp/printlambda.cmi \ - utils/misc.cmi \ - bytecomp/lambda.cmi \ - asmcomp/clambda_primitives.cmi \ - asmcomp/convert_primitives.cmi -asmcomp/convert_primitives.cmx : \ - bytecomp/printlambda.cmx \ - utils/misc.cmx \ - bytecomp/lambda.cmx \ - asmcomp/clambda_primitives.cmx \ - asmcomp/convert_primitives.cmi -asmcomp/convert_primitives.cmi : \ - bytecomp/lambda.cmi \ - asmcomp/clambda_primitives.cmi asmcomp/deadcode.cmo : \ asmcomp/reg.cmi \ asmcomp/proc.cmi \ @@ -2947,16 +2740,19 @@ asmcomp/emit.cmo : \ asmcomp/x86_ast.cmi \ asmcomp/reg.cmi \ asmcomp/proc.cmi \ + asmcomp/object_file.cmi \ utils/misc.cmi \ asmcomp/mach.cmi \ asmcomp/linearize.cmi \ asmcomp/emitaux.cmi \ - middle_end/debuginfo.cmi \ + bytecomp/debuginfo.cmi \ utils/config.cmi \ - asmcomp/compilenv.cmi \ asmcomp/cmm.cmi \ utils/clflags.cmi \ asmcomp/branch_relaxation.cmi \ + asmcomp/backend_sym.cmi \ + asmcomp/asm_target/asm_symbol.cmi \ + asmcomp/asm_target/asm_section.cmi \ asmcomp/arch.cmo \ asmcomp/emit.cmi asmcomp/emit.cmx : \ @@ -2967,201 +2763,41 @@ asmcomp/emit.cmx : \ asmcomp/x86_ast.cmi \ asmcomp/reg.cmx \ asmcomp/proc.cmx \ + asmcomp/object_file.cmx \ utils/misc.cmx \ asmcomp/mach.cmx \ asmcomp/linearize.cmx \ asmcomp/emitaux.cmx \ - middle_end/debuginfo.cmx \ + bytecomp/debuginfo.cmx \ utils/config.cmx \ - asmcomp/compilenv.cmx \ asmcomp/cmm.cmx \ utils/clflags.cmx \ asmcomp/branch_relaxation.cmx \ + asmcomp/backend_sym.cmx \ + asmcomp/asm_target/asm_symbol.cmx \ + asmcomp/asm_target/asm_section.cmx \ asmcomp/arch.cmx \ asmcomp/emit.cmi asmcomp/emit.cmi : \ asmcomp/linearize.cmi \ - asmcomp/cmm.cmi + asmcomp/cmm.cmi \ + asmcomp/backend_compilation_unit.cmi asmcomp/emitaux.cmo : \ - middle_end/debuginfo.cmi \ + bytecomp/debuginfo.cmi \ utils/config.cmi \ asmcomp/cmm.cmi \ utils/clflags.cmi \ asmcomp/arch.cmo \ asmcomp/emitaux.cmi asmcomp/emitaux.cmx : \ - middle_end/debuginfo.cmx \ + bytecomp/debuginfo.cmx \ utils/config.cmx \ asmcomp/cmm.cmx \ utils/clflags.cmx \ asmcomp/arch.cmx \ asmcomp/emitaux.cmi asmcomp/emitaux.cmi : \ - middle_end/debuginfo.cmi -asmcomp/export_info.cmo : \ - middle_end/base_types/variable.cmi \ - middle_end/base_types/var_within_closure.cmi \ - middle_end/base_types/tag.cmi \ - middle_end/base_types/symbol.cmi \ - middle_end/simple_value_approx.cmi \ - middle_end/base_types/set_of_closures_id.cmi \ - middle_end/flambda.cmi \ - middle_end/base_types/export_id.cmi \ - middle_end/base_types/compilation_unit.cmi \ - middle_end/base_types/closure_id.cmi \ - asmcomp/export_info.cmi -asmcomp/export_info.cmx : \ - middle_end/base_types/variable.cmx \ - middle_end/base_types/var_within_closure.cmx \ - middle_end/base_types/tag.cmx \ - middle_end/base_types/symbol.cmx \ - middle_end/simple_value_approx.cmx \ - middle_end/base_types/set_of_closures_id.cmx \ - middle_end/flambda.cmx \ - middle_end/base_types/export_id.cmx \ - middle_end/base_types/compilation_unit.cmx \ - middle_end/base_types/closure_id.cmx \ - asmcomp/export_info.cmi -asmcomp/export_info.cmi : \ - middle_end/base_types/variable.cmi \ - middle_end/base_types/var_within_closure.cmi \ - middle_end/base_types/tag.cmi \ - middle_end/base_types/symbol.cmi \ - middle_end/simple_value_approx.cmi \ - middle_end/base_types/set_of_closures_id.cmi \ - middle_end/flambda.cmi \ - middle_end/base_types/export_id.cmi \ - middle_end/base_types/compilation_unit.cmi \ - middle_end/base_types/closure_id.cmi -asmcomp/export_info_for_pack.cmo : \ - middle_end/base_types/variable.cmi \ - middle_end/base_types/var_within_closure.cmi \ - middle_end/base_types/symbol.cmi \ - middle_end/simple_value_approx.cmi \ - middle_end/base_types/set_of_closures_origin.cmi \ - middle_end/base_types/set_of_closures_id.cmi \ - utils/misc.cmi \ - middle_end/flambda_iterators.cmi \ - middle_end/flambda.cmi \ - asmcomp/export_info.cmi \ - middle_end/base_types/export_id.cmi \ - middle_end/base_types/compilation_unit.cmi \ - middle_end/base_types/closure_id.cmi \ - asmcomp/export_info_for_pack.cmi -asmcomp/export_info_for_pack.cmx : \ - middle_end/base_types/variable.cmx \ - middle_end/base_types/var_within_closure.cmx \ - middle_end/base_types/symbol.cmx \ - middle_end/simple_value_approx.cmx \ - middle_end/base_types/set_of_closures_origin.cmx \ - middle_end/base_types/set_of_closures_id.cmx \ - utils/misc.cmx \ - middle_end/flambda_iterators.cmx \ - middle_end/flambda.cmx \ - asmcomp/export_info.cmx \ - middle_end/base_types/export_id.cmx \ - middle_end/base_types/compilation_unit.cmx \ - middle_end/base_types/closure_id.cmx \ - asmcomp/export_info_for_pack.cmi -asmcomp/export_info_for_pack.cmi : \ - asmcomp/export_info.cmi \ - middle_end/base_types/compilation_unit.cmi -asmcomp/flambda_to_clambda.cmo : \ - middle_end/base_types/variable.cmi \ - middle_end/base_types/var_within_closure.cmi \ - middle_end/base_types/tag.cmi \ - middle_end/base_types/symbol.cmi \ - middle_end/base_types/static_exception.cmi \ - middle_end/simple_value_approx.cmi \ - middle_end/base_types/set_of_closures_id.cmi \ - typing/primitive.cmi \ - middle_end/parameter.cmi \ - utils/numbers.cmi \ - middle_end/base_types/mutable_variable.cmi \ - utils/misc.cmi \ - middle_end/base_types/linkage_name.cmi \ - bytecomp/lambda.cmi \ - middle_end/initialize_symbol_to_let_symbol.cmi \ - middle_end/flambda_utils.cmi \ - middle_end/flambda.cmi \ - asmcomp/export_info.cmi \ - middle_end/debuginfo.cmi \ - asmcomp/compilenv.cmi \ - asmcomp/closure_offsets.cmi \ - middle_end/base_types/closure_id.cmi \ - utils/clflags.cmi \ - asmcomp/clambda.cmi \ - asmcomp/backend_var.cmi \ - middle_end/allocated_const.cmi \ - asmcomp/flambda_to_clambda.cmi -asmcomp/flambda_to_clambda.cmx : \ - middle_end/base_types/variable.cmx \ - middle_end/base_types/var_within_closure.cmx \ - middle_end/base_types/tag.cmx \ - middle_end/base_types/symbol.cmx \ - middle_end/base_types/static_exception.cmx \ - middle_end/simple_value_approx.cmx \ - middle_end/base_types/set_of_closures_id.cmx \ - typing/primitive.cmx \ - middle_end/parameter.cmx \ - utils/numbers.cmx \ - middle_end/base_types/mutable_variable.cmx \ - utils/misc.cmx \ - middle_end/base_types/linkage_name.cmx \ - bytecomp/lambda.cmx \ - middle_end/initialize_symbol_to_let_symbol.cmx \ - middle_end/flambda_utils.cmx \ - middle_end/flambda.cmx \ - asmcomp/export_info.cmx \ - middle_end/debuginfo.cmx \ - asmcomp/compilenv.cmx \ - asmcomp/closure_offsets.cmx \ - middle_end/base_types/closure_id.cmx \ - utils/clflags.cmx \ - asmcomp/clambda.cmx \ - asmcomp/backend_var.cmx \ - middle_end/allocated_const.cmx \ - asmcomp/flambda_to_clambda.cmi -asmcomp/flambda_to_clambda.cmi : \ - middle_end/base_types/symbol.cmi \ - middle_end/flambda.cmi \ - asmcomp/export_info.cmi \ - asmcomp/clambda.cmi -asmcomp/import_approx.cmo : \ - middle_end/base_types/variable.cmi \ - middle_end/base_types/var_within_closure.cmi \ - middle_end/base_types/symbol.cmi \ - middle_end/simple_value_approx.cmi \ - middle_end/base_types/set_of_closures_id.cmi \ - utils/misc.cmi \ - middle_end/freshening.cmi \ - middle_end/flambda_iterators.cmi \ - middle_end/flambda.cmi \ - asmcomp/export_info.cmi \ - middle_end/base_types/export_id.cmi \ - asmcomp/compilenv.cmi \ - middle_end/base_types/compilation_unit.cmi \ - middle_end/base_types/closure_id.cmi \ - asmcomp/import_approx.cmi -asmcomp/import_approx.cmx : \ - middle_end/base_types/variable.cmx \ - middle_end/base_types/var_within_closure.cmx \ - middle_end/base_types/symbol.cmx \ - middle_end/simple_value_approx.cmx \ - middle_end/base_types/set_of_closures_id.cmx \ - utils/misc.cmx \ - middle_end/freshening.cmx \ - middle_end/flambda_iterators.cmx \ - middle_end/flambda.cmx \ - asmcomp/export_info.cmx \ - middle_end/base_types/export_id.cmx \ - asmcomp/compilenv.cmx \ - middle_end/base_types/compilation_unit.cmx \ - middle_end/base_types/closure_id.cmx \ - asmcomp/import_approx.cmi -asmcomp/import_approx.cmi : \ - middle_end/base_types/symbol.cmi \ - middle_end/simple_value_approx.cmi + bytecomp/debuginfo.cmi asmcomp/interf.cmo : \ asmcomp/reg.cmi \ asmcomp/proc.cmi \ @@ -3194,24 +2830,37 @@ asmcomp/linearize.cmo : \ asmcomp/proc.cmi \ utils/misc.cmi \ asmcomp/mach.cmi \ - middle_end/debuginfo.cmi \ + bytecomp/debuginfo.cmi \ utils/config.cmi \ asmcomp/cmm.cmi \ + asmcomp/backend_sym.cmi \ asmcomp/linearize.cmi asmcomp/linearize.cmx : \ asmcomp/reg.cmx \ asmcomp/proc.cmx \ utils/misc.cmx \ asmcomp/mach.cmx \ - middle_end/debuginfo.cmx \ + bytecomp/debuginfo.cmx \ utils/config.cmx \ asmcomp/cmm.cmx \ + asmcomp/backend_sym.cmx \ asmcomp/linearize.cmi asmcomp/linearize.cmi : \ asmcomp/reg.cmi \ asmcomp/mach.cmi \ - middle_end/debuginfo.cmi \ - asmcomp/cmm.cmi + bytecomp/debuginfo.cmi \ + asmcomp/cmm.cmi \ + asmcomp/backend_sym.cmi +asmcomp/linking_state.cmo : \ + utils/numbers.cmi \ + utils/misc.cmi \ + asmcomp/linking_state.cmi +asmcomp/linking_state.cmx : \ + utils/numbers.cmx \ + utils/misc.cmx \ + asmcomp/linking_state.cmi +asmcomp/linking_state.cmi : \ + utils/numbers.cmi asmcomp/linscan.cmo : \ asmcomp/reg.cmi \ asmcomp/proc.cmi \ @@ -3247,95 +2896,74 @@ asmcomp/mach.cmo : \ asmcomp/debug/reg_with_debug_info.cmi \ asmcomp/debug/reg_availability_set.cmi \ asmcomp/reg.cmi \ - middle_end/debuginfo.cmi \ + bytecomp/debuginfo.cmi \ asmcomp/cmm.cmi \ - asmcomp/backend_var.cmi \ + middle_end/backend_var.cmi \ + asmcomp/backend_sym.cmi \ asmcomp/arch.cmo \ asmcomp/mach.cmi asmcomp/mach.cmx : \ asmcomp/debug/reg_with_debug_info.cmx \ asmcomp/debug/reg_availability_set.cmx \ asmcomp/reg.cmx \ - middle_end/debuginfo.cmx \ + bytecomp/debuginfo.cmx \ asmcomp/cmm.cmx \ - asmcomp/backend_var.cmx \ + middle_end/backend_var.cmx \ + asmcomp/backend_sym.cmx \ asmcomp/arch.cmx \ asmcomp/mach.cmi asmcomp/mach.cmi : \ asmcomp/debug/reg_availability_set.cmi \ asmcomp/reg.cmi \ - middle_end/debuginfo.cmi \ + bytecomp/debuginfo.cmi \ asmcomp/cmm.cmi \ - asmcomp/backend_var.cmi \ + middle_end/backend_var.cmi \ + asmcomp/backend_sym.cmi \ asmcomp/arch.cmo -asmcomp/printclambda.cmo : \ - bytecomp/printlambda.cmi \ - asmcomp/printclambda_primitives.cmi \ - bytecomp/lambda.cmi \ - typing/ident.cmi \ - asmcomp/clambda.cmi \ - asmcomp/backend_var.cmi \ - parsing/asttypes.cmi \ - asmcomp/printclambda.cmi -asmcomp/printclambda.cmx : \ - bytecomp/printlambda.cmx \ - asmcomp/printclambda_primitives.cmx \ - bytecomp/lambda.cmx \ - typing/ident.cmx \ - asmcomp/clambda.cmx \ - asmcomp/backend_var.cmx \ - parsing/asttypes.cmi \ - asmcomp/printclambda.cmi -asmcomp/printclambda.cmi : \ - asmcomp/clambda.cmi -asmcomp/printclambda_primitives.cmo : \ - bytecomp/printlambda.cmi \ - typing/primitive.cmi \ - bytecomp/lambda.cmi \ - asmcomp/clambda_primitives.cmi \ - parsing/asttypes.cmi \ - asmcomp/printclambda_primitives.cmi -asmcomp/printclambda_primitives.cmx : \ - bytecomp/printlambda.cmx \ - typing/primitive.cmx \ - bytecomp/lambda.cmx \ - asmcomp/clambda_primitives.cmx \ - parsing/asttypes.cmi \ - asmcomp/printclambda_primitives.cmi -asmcomp/printclambda_primitives.cmi : \ - asmcomp/clambda_primitives.cmi +asmcomp/object_file.cmo : \ + utils/identifiable.cmi \ + asmcomp/object_file.cmi +asmcomp/object_file.cmx : \ + utils/identifiable.cmx \ + asmcomp/object_file.cmi +asmcomp/object_file.cmi : \ + utils/identifiable.cmi asmcomp/printcmm.cmo : \ utils/targetint.cmi \ bytecomp/lambda.cmi \ - middle_end/debuginfo.cmi \ + bytecomp/debuginfo.cmi \ asmcomp/cmm.cmi \ - asmcomp/backend_var.cmi \ + middle_end/backend_var.cmi \ + asmcomp/backend_sym.cmi \ parsing/asttypes.cmi \ asmcomp/printcmm.cmi asmcomp/printcmm.cmx : \ utils/targetint.cmx \ bytecomp/lambda.cmx \ - middle_end/debuginfo.cmx \ + bytecomp/debuginfo.cmx \ asmcomp/cmm.cmx \ - asmcomp/backend_var.cmx \ + middle_end/backend_var.cmx \ + asmcomp/backend_sym.cmx \ parsing/asttypes.cmi \ asmcomp/printcmm.cmi asmcomp/printcmm.cmi : \ - middle_end/debuginfo.cmi \ + bytecomp/debuginfo.cmi \ asmcomp/cmm.cmi asmcomp/printlinear.cmo : \ asmcomp/printmach.cmi \ asmcomp/printcmm.cmi \ asmcomp/mach.cmi \ asmcomp/linearize.cmi \ - middle_end/debuginfo.cmi \ + bytecomp/debuginfo.cmi \ + asmcomp/backend_sym.cmi \ asmcomp/printlinear.cmi asmcomp/printlinear.cmx : \ asmcomp/printmach.cmx \ asmcomp/printcmm.cmx \ asmcomp/mach.cmx \ asmcomp/linearize.cmx \ - middle_end/debuginfo.cmx \ + bytecomp/debuginfo.cmx \ + asmcomp/backend_sym.cmx \ asmcomp/printlinear.cmi asmcomp/printlinear.cmi : \ asmcomp/linearize.cmi @@ -3346,11 +2974,12 @@ asmcomp/printmach.cmo : \ asmcomp/printcmm.cmi \ asmcomp/mach.cmi \ asmcomp/interval.cmi \ - middle_end/debuginfo.cmi \ + bytecomp/debuginfo.cmi \ utils/config.cmi \ asmcomp/cmm.cmi \ utils/clflags.cmi \ - asmcomp/backend_var.cmi \ + middle_end/backend_var.cmi \ + asmcomp/backend_sym.cmi \ asmcomp/arch.cmo \ asmcomp/printmach.cmi asmcomp/printmach.cmx : \ @@ -3360,11 +2989,12 @@ asmcomp/printmach.cmx : \ asmcomp/printcmm.cmx \ asmcomp/mach.cmx \ asmcomp/interval.cmx \ - middle_end/debuginfo.cmx \ + bytecomp/debuginfo.cmx \ utils/config.cmx \ asmcomp/cmm.cmx \ utils/clflags.cmx \ - asmcomp/backend_var.cmx \ + middle_end/backend_var.cmx \ + asmcomp/backend_sym.cmx \ asmcomp/arch.cmx \ asmcomp/printmach.cmi asmcomp/printmach.cmi : \ @@ -3393,15 +3023,15 @@ asmcomp/proc.cmi : \ asmcomp/mach.cmi asmcomp/reg.cmo : \ asmcomp/cmm.cmi \ - asmcomp/backend_var.cmi \ + middle_end/backend_var.cmi \ asmcomp/reg.cmi asmcomp/reg.cmx : \ asmcomp/cmm.cmx \ - asmcomp/backend_var.cmx \ + middle_end/backend_var.cmx \ asmcomp/reg.cmi asmcomp/reg.cmi : \ asmcomp/cmm.cmi \ - asmcomp/backend_var.cmi + middle_end/backend_var.cmi asmcomp/reload.cmo : \ asmcomp/reloadgen.cmi \ asmcomp/reg.cmi \ @@ -3468,10 +3098,11 @@ asmcomp/selectgen.cmo : \ utils/misc.cmi \ asmcomp/mach.cmi \ bytecomp/lambda.cmi \ - middle_end/debuginfo.cmi \ + bytecomp/debuginfo.cmi \ utils/config.cmi \ asmcomp/cmm.cmi \ - asmcomp/backend_var.cmi \ + middle_end/backend_var.cmi \ + asmcomp/backend_sym.cmi \ parsing/asttypes.cmi \ asmcomp/arch.cmo \ asmcomp/selectgen.cmi @@ -3483,19 +3114,20 @@ asmcomp/selectgen.cmx : \ utils/misc.cmx \ asmcomp/mach.cmx \ bytecomp/lambda.cmx \ - middle_end/debuginfo.cmx \ + bytecomp/debuginfo.cmx \ utils/config.cmx \ asmcomp/cmm.cmx \ - asmcomp/backend_var.cmx \ + middle_end/backend_var.cmx \ + asmcomp/backend_sym.cmx \ parsing/asttypes.cmi \ asmcomp/arch.cmx \ asmcomp/selectgen.cmi asmcomp/selectgen.cmi : \ asmcomp/reg.cmi \ asmcomp/mach.cmi \ - middle_end/debuginfo.cmi \ + bytecomp/debuginfo.cmi \ asmcomp/cmm.cmi \ - asmcomp/backend_var.cmi \ + middle_end/backend_var.cmi \ asmcomp/arch.cmo asmcomp/selection.cmo : \ asmcomp/spacetime_profiling.cmi \ @@ -3505,6 +3137,7 @@ asmcomp/selection.cmo : \ utils/config.cmi \ asmcomp/cmm.cmi \ utils/clflags.cmi \ + asmcomp/backend_sym.cmi \ asmcomp/arch.cmo \ asmcomp/selection.cmi asmcomp/selection.cmx : \ @@ -3515,29 +3148,23 @@ asmcomp/selection.cmx : \ utils/config.cmx \ asmcomp/cmm.cmx \ utils/clflags.cmx \ + asmcomp/backend_sym.cmx \ asmcomp/arch.cmx \ asmcomp/selection.cmi asmcomp/selection.cmi : \ asmcomp/mach.cmi \ asmcomp/cmm.cmi -asmcomp/semantics_of_primitives.cmo : \ - asmcomp/clambda_primitives.cmi \ - asmcomp/semantics_of_primitives.cmi -asmcomp/semantics_of_primitives.cmx : \ - asmcomp/clambda_primitives.cmx \ - asmcomp/semantics_of_primitives.cmi -asmcomp/semantics_of_primitives.cmi : \ - asmcomp/clambda_primitives.cmi asmcomp/spacetime_profiling.cmo : \ asmcomp/selectgen.cmi \ asmcomp/proc.cmi \ utils/misc.cmi \ asmcomp/mach.cmi \ bytecomp/lambda.cmi \ - middle_end/debuginfo.cmi \ + bytecomp/debuginfo.cmi \ utils/config.cmi \ asmcomp/cmm.cmi \ - asmcomp/backend_var.cmi \ + middle_end/backend_var.cmi \ + asmcomp/backend_sym.cmi \ parsing/asttypes.cmi \ asmcomp/arch.cmo \ asmcomp/spacetime_profiling.cmi @@ -3547,10 +3174,11 @@ asmcomp/spacetime_profiling.cmx : \ utils/misc.cmx \ asmcomp/mach.cmx \ bytecomp/lambda.cmx \ - middle_end/debuginfo.cmx \ + bytecomp/debuginfo.cmx \ utils/config.cmx \ asmcomp/cmm.cmx \ - asmcomp/backend_var.cmx \ + middle_end/backend_var.cmx \ + asmcomp/backend_sym.cmx \ parsing/asttypes.cmi \ asmcomp/arch.cmx \ asmcomp/spacetime_profiling.cmi @@ -3589,88 +3217,36 @@ asmcomp/split.cmi : \ asmcomp/strmatch.cmo : \ parsing/location.cmi \ bytecomp/lambda.cmi \ - middle_end/debuginfo.cmi \ + bytecomp/debuginfo.cmi \ asmcomp/cmm.cmi \ - asmcomp/backend_var.cmi \ + middle_end/backend_var.cmi \ parsing/asttypes.cmi \ asmcomp/arch.cmo \ asmcomp/strmatch.cmi asmcomp/strmatch.cmx : \ parsing/location.cmx \ bytecomp/lambda.cmx \ - middle_end/debuginfo.cmx \ + bytecomp/debuginfo.cmx \ asmcomp/cmm.cmx \ - asmcomp/backend_var.cmx \ + middle_end/backend_var.cmx \ parsing/asttypes.cmi \ asmcomp/arch.cmx \ asmcomp/strmatch.cmi asmcomp/strmatch.cmi : \ parsing/location.cmi \ - middle_end/debuginfo.cmi \ + bytecomp/debuginfo.cmi \ asmcomp/cmm.cmi -asmcomp/traverse_for_exported_symbols.cmo : \ - middle_end/base_types/variable.cmi \ - middle_end/base_types/var_within_closure.cmi \ - middle_end/base_types/symbol.cmi \ - middle_end/simple_value_approx.cmi \ - middle_end/base_types/set_of_closures_id.cmi \ - utils/misc.cmi \ - middle_end/flambda_iterators.cmi \ - middle_end/flambda.cmi \ - asmcomp/export_info.cmi \ - middle_end/base_types/export_id.cmi \ - middle_end/base_types/compilation_unit.cmi \ - middle_end/base_types/closure_id.cmi \ - asmcomp/traverse_for_exported_symbols.cmi -asmcomp/traverse_for_exported_symbols.cmx : \ - middle_end/base_types/variable.cmx \ - middle_end/base_types/var_within_closure.cmx \ - middle_end/base_types/symbol.cmx \ - middle_end/simple_value_approx.cmx \ - middle_end/base_types/set_of_closures_id.cmx \ - utils/misc.cmx \ - middle_end/flambda_iterators.cmx \ - middle_end/flambda.cmx \ - asmcomp/export_info.cmx \ - middle_end/base_types/export_id.cmx \ - middle_end/base_types/compilation_unit.cmx \ - middle_end/base_types/closure_id.cmx \ - asmcomp/traverse_for_exported_symbols.cmi -asmcomp/traverse_for_exported_symbols.cmi : \ - middle_end/base_types/var_within_closure.cmi \ - middle_end/base_types/symbol.cmi \ - middle_end/simple_value_approx.cmi \ - middle_end/base_types/set_of_closures_id.cmi \ - middle_end/flambda.cmi \ - asmcomp/export_info.cmi \ - middle_end/base_types/export_id.cmi \ - middle_end/base_types/closure_id.cmi -asmcomp/un_anf.cmo : \ - asmcomp/semantics_of_primitives.cmi \ - asmcomp/printclambda.cmi \ +asmcomp/target_system.cmo : \ + utils/targetint.cmi \ utils/misc.cmi \ - bytecomp/lambda.cmi \ - middle_end/debuginfo.cmi \ - utils/clflags.cmi \ - asmcomp/clambda_primitives.cmi \ - asmcomp/clambda.cmi \ - asmcomp/backend_var.cmi \ - parsing/asttypes.cmi \ - asmcomp/un_anf.cmi -asmcomp/un_anf.cmx : \ - asmcomp/semantics_of_primitives.cmx \ - asmcomp/printclambda.cmx \ + utils/config.cmi \ + asmcomp/target_system.cmi +asmcomp/target_system.cmx : \ + utils/targetint.cmx \ utils/misc.cmx \ - bytecomp/lambda.cmx \ - middle_end/debuginfo.cmx \ - utils/clflags.cmx \ - asmcomp/clambda_primitives.cmx \ - asmcomp/clambda.cmx \ - asmcomp/backend_var.cmx \ - parsing/asttypes.cmi \ - asmcomp/un_anf.cmi -asmcomp/un_anf.cmi : \ - asmcomp/clambda.cmi + utils/config.cmx \ + asmcomp/target_system.cmi +asmcomp/target_system.cmi : asmcomp/x86_ast.cmi : asmcomp/x86_dsl.cmo : \ asmcomp/x86_proc.cmi \ @@ -3720,1669 +3296,2278 @@ asmcomp/x86_proc.cmx : \ asmcomp/x86_proc.cmi asmcomp/x86_proc.cmi : \ asmcomp/x86_ast.cmi -middle_end/alias_analysis.cmo : \ - middle_end/base_types/variable.cmi \ - middle_end/base_types/var_within_closure.cmi \ - middle_end/base_types/tag.cmi \ - middle_end/base_types/symbol.cmi \ - utils/misc.cmi \ - bytecomp/lambda.cmi \ - middle_end/int_replace_polymorphic_compare.cmi \ - middle_end/flambda.cmi \ - parsing/asttypes.cmi \ - middle_end/allocated_const.cmi \ - middle_end/alias_analysis.cmi -middle_end/alias_analysis.cmx : \ - middle_end/base_types/variable.cmx \ - middle_end/base_types/var_within_closure.cmx \ - middle_end/base_types/tag.cmx \ - middle_end/base_types/symbol.cmx \ - utils/misc.cmx \ - bytecomp/lambda.cmx \ - middle_end/int_replace_polymorphic_compare.cmx \ - middle_end/flambda.cmx \ - parsing/asttypes.cmi \ - middle_end/allocated_const.cmx \ - middle_end/alias_analysis.cmi -middle_end/alias_analysis.cmi : \ - middle_end/base_types/variable.cmi \ - middle_end/base_types/tag.cmi \ - middle_end/base_types/symbol.cmi \ - bytecomp/lambda.cmi \ - middle_end/flambda.cmi \ - parsing/asttypes.cmi \ - middle_end/allocated_const.cmi -middle_end/allocated_const.cmo : \ - middle_end/int_replace_polymorphic_compare.cmi \ - middle_end/allocated_const.cmi -middle_end/allocated_const.cmx : \ - middle_end/int_replace_polymorphic_compare.cmx \ - middle_end/allocated_const.cmi -middle_end/allocated_const.cmi : -middle_end/augment_specialised_args.cmo : \ - middle_end/base_types/variable.cmi \ - middle_end/projection.cmi \ - middle_end/pass_wrapper.cmi \ - middle_end/parameter.cmi \ - utils/misc.cmi \ - middle_end/internal_variable_names.cmi \ - middle_end/int_replace_polymorphic_compare.cmi \ - middle_end/inlining_cost.cmi \ - middle_end/inline_and_simplify_aux.cmi \ - utils/identifiable.cmi \ - middle_end/flambda_utils.cmi \ - middle_end/flambda.cmi \ - middle_end/debuginfo.cmi \ - middle_end/base_types/closure_origin.cmi \ - middle_end/base_types/closure_id.cmi \ - utils/clflags.cmi \ - middle_end/backend_intf.cmi \ - middle_end/augment_specialised_args.cmi -middle_end/augment_specialised_args.cmx : \ - middle_end/base_types/variable.cmx \ - middle_end/projection.cmx \ - middle_end/pass_wrapper.cmx \ - middle_end/parameter.cmx \ - utils/misc.cmx \ - middle_end/internal_variable_names.cmx \ - middle_end/int_replace_polymorphic_compare.cmx \ - middle_end/inlining_cost.cmx \ - middle_end/inline_and_simplify_aux.cmx \ - utils/identifiable.cmx \ - middle_end/flambda_utils.cmx \ - middle_end/flambda.cmx \ - middle_end/debuginfo.cmx \ - middle_end/base_types/closure_origin.cmx \ - middle_end/base_types/closure_id.cmx \ - utils/clflags.cmx \ - middle_end/backend_intf.cmi \ - middle_end/augment_specialised_args.cmi -middle_end/augment_specialised_args.cmi : \ - middle_end/base_types/variable.cmi \ - middle_end/projection.cmi \ - middle_end/inlining_cost.cmi \ - middle_end/inline_and_simplify_aux.cmi \ - middle_end/flambda.cmi -middle_end/backend_intf.cmi : \ - middle_end/base_types/symbol.cmi \ - middle_end/simple_value_approx.cmi \ - typing/ident.cmi \ - middle_end/base_types/closure_id.cmi -middle_end/closure_conversion.cmo : \ - middle_end/base_types/variable.cmi \ - middle_end/base_types/tag.cmi \ - middle_end/base_types/symbol.cmi \ - middle_end/base_types/static_exception.cmi \ - bytecomp/simplif.cmi \ - typing/predef.cmi \ - middle_end/parameter.cmi \ - utils/numbers.cmi \ - middle_end/base_types/mutable_variable.cmi \ - utils/misc.cmi \ - middle_end/lift_code.cmi \ - bytecomp/lambda.cmi \ - middle_end/internal_variable_names.cmi \ - middle_end/int_replace_polymorphic_compare.cmi \ +middle_end/backend_intf.cmi : +middle_end/backend_var.cmo : \ + typing/path.cmi \ typing/ident.cmi \ - middle_end/flambda_utils.cmi \ - middle_end/flambda.cmi \ - middle_end/debuginfo.cmi \ - asmcomp/convert_primitives.cmi \ - utils/config.cmi \ - middle_end/base_types/compilation_unit.cmi \ - middle_end/base_types/closure_origin.cmi \ - middle_end/base_types/closure_id.cmi \ - middle_end/closure_conversion_aux.cmi \ - utils/clflags.cmi \ - asmcomp/clambda_primitives.cmi \ - middle_end/backend_intf.cmi \ - middle_end/closure_conversion.cmi -middle_end/closure_conversion.cmx : \ - middle_end/base_types/variable.cmx \ - middle_end/base_types/tag.cmx \ - middle_end/base_types/symbol.cmx \ - middle_end/base_types/static_exception.cmx \ - bytecomp/simplif.cmx \ - typing/predef.cmx \ - middle_end/parameter.cmx \ - utils/numbers.cmx \ - middle_end/base_types/mutable_variable.cmx \ - utils/misc.cmx \ - middle_end/lift_code.cmx \ - bytecomp/lambda.cmx \ - middle_end/internal_variable_names.cmx \ - middle_end/int_replace_polymorphic_compare.cmx \ + bytecomp/debuginfo.cmi \ + middle_end/backend_var.cmi +middle_end/backend_var.cmx : \ + typing/path.cmx \ typing/ident.cmx \ - middle_end/flambda_utils.cmx \ - middle_end/flambda.cmx \ - middle_end/debuginfo.cmx \ - asmcomp/convert_primitives.cmx \ - utils/config.cmx \ - middle_end/base_types/compilation_unit.cmx \ - middle_end/base_types/closure_origin.cmx \ - middle_end/base_types/closure_id.cmx \ - middle_end/closure_conversion_aux.cmx \ - utils/clflags.cmx \ - asmcomp/clambda_primitives.cmx \ - middle_end/backend_intf.cmi \ - middle_end/closure_conversion.cmi -middle_end/closure_conversion.cmi : \ - bytecomp/lambda.cmi \ + bytecomp/debuginfo.cmx \ + middle_end/backend_var.cmi +middle_end/backend_var.cmi : \ + typing/path.cmi \ typing/ident.cmi \ - middle_end/flambda.cmi \ - middle_end/backend_intf.cmi -middle_end/closure_conversion_aux.cmo : \ - middle_end/base_types/variable.cmi \ - middle_end/base_types/symbol.cmi \ - middle_end/base_types/static_exception.cmi \ - utils/numbers.cmi \ - middle_end/base_types/mutable_variable.cmi \ - utils/misc.cmi \ - parsing/location.cmi \ + bytecomp/debuginfo.cmi +middle_end/clambda.cmo : \ + middle_end/symbol.cmi \ + typing/path.cmi \ bytecomp/lambda.cmi \ - middle_end/int_replace_polymorphic_compare.cmi \ typing/ident.cmi \ - middle_end/closure_conversion_aux.cmi -middle_end/closure_conversion_aux.cmx : \ - middle_end/base_types/variable.cmx \ - middle_end/base_types/symbol.cmx \ - middle_end/base_types/static_exception.cmx \ - utils/numbers.cmx \ - middle_end/base_types/mutable_variable.cmx \ - utils/misc.cmx \ - parsing/location.cmx \ + bytecomp/debuginfo.cmi \ + middle_end/clambda_primitives.cmi \ + middle_end/backend_var.cmi \ + parsing/asttypes.cmi \ + middle_end/clambda.cmi +middle_end/clambda.cmx : \ + middle_end/symbol.cmx \ + typing/path.cmx \ bytecomp/lambda.cmx \ - middle_end/int_replace_polymorphic_compare.cmx \ typing/ident.cmx \ - middle_end/closure_conversion_aux.cmi -middle_end/closure_conversion_aux.cmi : \ - middle_end/base_types/variable.cmi \ - middle_end/base_types/symbol.cmi \ - middle_end/base_types/static_exception.cmi \ - middle_end/base_types/mutable_variable.cmi \ - parsing/location.cmi \ + bytecomp/debuginfo.cmx \ + middle_end/clambda_primitives.cmx \ + middle_end/backend_var.cmx \ + parsing/asttypes.cmi \ + middle_end/clambda.cmi +middle_end/clambda.cmi : \ + middle_end/symbol.cmi \ + typing/path.cmi \ bytecomp/lambda.cmi \ - typing/ident.cmi -middle_end/debuginfo.cmo : \ + typing/ident.cmi \ + bytecomp/debuginfo.cmi \ + middle_end/clambda_primitives.cmi \ + middle_end/backend_var.cmi \ + parsing/asttypes.cmi +middle_end/clambda_primitives.cmo : \ + typing/types.cmi \ + middle_end/symbol.cmi \ + typing/primitive.cmi \ + bytecomp/lambda.cmi \ + parsing/asttypes.cmi \ + middle_end/clambda_primitives.cmi +middle_end/clambda_primitives.cmx : \ + typing/types.cmx \ + middle_end/symbol.cmx \ + typing/primitive.cmx \ + bytecomp/lambda.cmx \ + parsing/asttypes.cmi \ + middle_end/clambda_primitives.cmi +middle_end/clambda_primitives.cmi : \ + typing/types.cmi \ + middle_end/symbol.cmi \ + typing/primitive.cmi \ + bytecomp/lambda.cmi \ + parsing/asttypes.cmi +middle_end/compilation_state.cmo : \ + utils/warnings.cmi \ + middle_end/symbol.cmi \ + middle_end/flambda/base_types/set_of_closures_id.cmi \ + typing/path.cmi \ + utils/misc.cmi \ parsing/location.cmi \ - middle_end/int_replace_polymorphic_compare.cmi \ - middle_end/debuginfo.cmi -middle_end/debuginfo.cmx : \ + utils/load_path.cmi \ + typing/ident.cmi \ + middle_end/flambda/export_info.cmi \ + typing/env.cmi \ + utils/config.cmi \ + middle_end/compilation_unit.cmi \ + file_formats/cmx_format.cmi \ + middle_end/clambda.cmi \ + middle_end/compilation_state.cmi +middle_end/compilation_state.cmx : \ + utils/warnings.cmx \ + middle_end/symbol.cmx \ + middle_end/flambda/base_types/set_of_closures_id.cmx \ + typing/path.cmx \ + utils/misc.cmx \ parsing/location.cmx \ - middle_end/int_replace_polymorphic_compare.cmx \ - middle_end/debuginfo.cmi -middle_end/debuginfo.cmi : \ - parsing/location.cmi -middle_end/effect_analysis.cmo : \ - asmcomp/semantics_of_primitives.cmi \ - utils/misc.cmi \ - middle_end/int_replace_polymorphic_compare.cmi \ - middle_end/flambda.cmi \ - asmcomp/clambda_primitives.cmi \ - middle_end/effect_analysis.cmi -middle_end/effect_analysis.cmx : \ - asmcomp/semantics_of_primitives.cmx \ - utils/misc.cmx \ - middle_end/int_replace_polymorphic_compare.cmx \ - middle_end/flambda.cmx \ - asmcomp/clambda_primitives.cmx \ - middle_end/effect_analysis.cmi -middle_end/effect_analysis.cmi : \ - middle_end/flambda.cmi -middle_end/extract_projections.cmo : \ - middle_end/base_types/variable.cmi \ - middle_end/base_types/var_within_closure.cmi \ - middle_end/simple_value_approx.cmi \ - middle_end/projection.cmi \ - middle_end/int_replace_polymorphic_compare.cmi \ - middle_end/inline_and_simplify_aux.cmi \ - middle_end/freshening.cmi \ - middle_end/flambda_iterators.cmi \ - middle_end/flambda.cmi \ - middle_end/base_types/closure_id.cmi \ - middle_end/extract_projections.cmi -middle_end/extract_projections.cmx : \ - middle_end/base_types/variable.cmx \ - middle_end/base_types/var_within_closure.cmx \ - middle_end/simple_value_approx.cmx \ - middle_end/projection.cmx \ - middle_end/int_replace_polymorphic_compare.cmx \ - middle_end/inline_and_simplify_aux.cmx \ - middle_end/freshening.cmx \ - middle_end/flambda_iterators.cmx \ - middle_end/flambda.cmx \ - middle_end/base_types/closure_id.cmx \ - middle_end/extract_projections.cmi -middle_end/extract_projections.cmi : \ - middle_end/base_types/variable.cmi \ - middle_end/projection.cmi \ - middle_end/inline_and_simplify_aux.cmi \ - middle_end/flambda.cmi -middle_end/find_recursive_functions.cmo : \ - middle_end/base_types/variable.cmi \ + utils/load_path.cmx \ + typing/ident.cmx \ + middle_end/flambda/export_info.cmx \ + typing/env.cmx \ + utils/config.cmx \ + middle_end/compilation_unit.cmx \ + file_formats/cmx_format.cmx \ + middle_end/clambda.cmx \ + middle_end/compilation_state.cmi +middle_end/compilation_state.cmi : \ + middle_end/symbol.cmi \ + middle_end/flambda/simple_value_approx.cmi \ + middle_end/flambda/base_types/set_of_closures_id.cmi \ + typing/ident.cmi \ + middle_end/flambda/export_info.cmi \ + middle_end/compilation_unit.cmi \ + file_formats/cmx_format.cmi \ + middle_end/clambda.cmi +middle_end/compilation_unit.cmo : \ + typing/path.cmi \ + utils/misc.cmi \ + utils/int_replace_polymorphic_compare.cmi \ + utils/identifiable.cmi \ + typing/ident.cmi \ + middle_end/compilation_unit.cmi +middle_end/compilation_unit.cmx : \ + typing/path.cmx \ + utils/misc.cmx \ + utils/int_replace_polymorphic_compare.cmx \ + utils/identifiable.cmx \ + typing/ident.cmx \ + middle_end/compilation_unit.cmi +middle_end/compilation_unit.cmi : \ + typing/path.cmi \ + utils/identifiable.cmi \ + typing/ident.cmi +middle_end/convert_primitives.cmo : \ + bytecomp/printlambda.cmi \ + utils/misc.cmi \ + bytecomp/lambda.cmi \ + middle_end/clambda_primitives.cmi \ + middle_end/convert_primitives.cmi +middle_end/convert_primitives.cmx : \ + bytecomp/printlambda.cmx \ + utils/misc.cmx \ + bytecomp/lambda.cmx \ + middle_end/clambda_primitives.cmx \ + middle_end/convert_primitives.cmi +middle_end/convert_primitives.cmi : \ + bytecomp/lambda.cmi \ + middle_end/clambda_primitives.cmi +middle_end/internal_variable_names.cmo : \ + parsing/location.cmi \ + bytecomp/lambda.cmi \ + utils/int_replace_polymorphic_compare.cmi \ + middle_end/internal_variable_names.cmi +middle_end/internal_variable_names.cmx : \ + parsing/location.cmx \ + bytecomp/lambda.cmx \ + utils/int_replace_polymorphic_compare.cmx \ + middle_end/internal_variable_names.cmi +middle_end/internal_variable_names.cmi : \ + parsing/location.cmi \ + bytecomp/lambda.cmi +middle_end/printclambda.cmo : \ + middle_end/symbol.cmi \ + bytecomp/printlambda.cmi \ + middle_end/printclambda_primitives.cmi \ + bytecomp/lambda.cmi \ + typing/ident.cmi \ + middle_end/clambda.cmi \ + middle_end/backend_var.cmi \ + parsing/asttypes.cmi \ + middle_end/printclambda.cmi +middle_end/printclambda.cmx : \ + middle_end/symbol.cmx \ + bytecomp/printlambda.cmx \ + middle_end/printclambda_primitives.cmx \ + bytecomp/lambda.cmx \ + typing/ident.cmx \ + middle_end/clambda.cmx \ + middle_end/backend_var.cmx \ + parsing/asttypes.cmi \ + middle_end/printclambda.cmi +middle_end/printclambda.cmi : \ + middle_end/clambda.cmi +middle_end/printclambda_primitives.cmo : \ + middle_end/symbol.cmi \ + bytecomp/printlambda.cmi \ + typing/primitive.cmi \ + bytecomp/lambda.cmi \ + middle_end/clambda_primitives.cmi \ + parsing/asttypes.cmi \ + middle_end/printclambda_primitives.cmi +middle_end/printclambda_primitives.cmx : \ + middle_end/symbol.cmx \ + bytecomp/printlambda.cmx \ + typing/primitive.cmx \ + bytecomp/lambda.cmx \ + middle_end/clambda_primitives.cmx \ + parsing/asttypes.cmi \ + middle_end/printclambda_primitives.cmi +middle_end/printclambda_primitives.cmi : \ + middle_end/clambda_primitives.cmi +middle_end/semantics_of_primitives.cmo : \ + middle_end/clambda_primitives.cmi \ + middle_end/semantics_of_primitives.cmi +middle_end/semantics_of_primitives.cmx : \ + middle_end/clambda_primitives.cmx \ + middle_end/semantics_of_primitives.cmi +middle_end/semantics_of_primitives.cmi : \ + middle_end/clambda_primitives.cmi +middle_end/symbol.cmo : \ + middle_end/variable.cmi \ + utils/misc.cmi \ + utils/identifiable.cmi \ + typing/ident.cmi \ + middle_end/compilation_unit.cmi \ + middle_end/flambda/base_types/closure_id.cmi \ + middle_end/symbol.cmi +middle_end/symbol.cmx : \ + middle_end/variable.cmx \ + utils/misc.cmx \ + utils/identifiable.cmx \ + typing/ident.cmx \ + middle_end/compilation_unit.cmx \ + middle_end/flambda/base_types/closure_id.cmx \ + middle_end/symbol.cmi +middle_end/symbol.cmi : \ + middle_end/variable.cmi \ + utils/identifiable.cmi \ + typing/ident.cmi \ + middle_end/compilation_unit.cmi \ + middle_end/flambda/base_types/closure_id.cmi +middle_end/variable.cmo : \ + utils/misc.cmi \ + middle_end/internal_variable_names.cmi \ + utils/int_replace_polymorphic_compare.cmi \ + utils/identifiable.cmi \ + typing/ident.cmi \ + middle_end/compilation_unit.cmi \ + middle_end/variable.cmi +middle_end/variable.cmx : \ + utils/misc.cmx \ + middle_end/internal_variable_names.cmx \ + utils/int_replace_polymorphic_compare.cmx \ + utils/identifiable.cmx \ + typing/ident.cmx \ + middle_end/compilation_unit.cmx \ + middle_end/variable.cmi +middle_end/variable.cmi : \ + middle_end/internal_variable_names.cmi \ + utils/identifiable.cmi \ + typing/ident.cmi \ + middle_end/compilation_unit.cmi +file_formats/cmi_format.cmo : \ + typing/types.cmi \ + utils/misc.cmi \ + parsing/location.cmi \ + utils/config.cmi \ + file_formats/cmi_format.cmi +file_formats/cmi_format.cmx : \ + typing/types.cmx \ + utils/misc.cmx \ + parsing/location.cmx \ + utils/config.cmx \ + file_formats/cmi_format.cmi +file_formats/cmi_format.cmi : \ + typing/types.cmi \ + utils/misc.cmi +file_formats/cmo_format.cmi : \ + utils/misc.cmi \ + bytecomp/lambda.cmi \ + typing/ident.cmi +file_formats/cmt_format.cmo : \ + typing/types.cmi \ + typing/typedtree.cmi \ + typing/tast_mapper.cmi \ + utils/misc.cmi \ + parsing/location.cmi \ + utils/load_path.cmi \ + parsing/lexer.cmi \ + typing/env.cmi \ + utils/config.cmi \ + file_formats/cmi_format.cmi \ + utils/clflags.cmi \ + file_formats/cmt_format.cmi +file_formats/cmt_format.cmx : \ + typing/types.cmx \ + typing/typedtree.cmx \ + typing/tast_mapper.cmx \ + utils/misc.cmx \ + parsing/location.cmx \ + utils/load_path.cmx \ + parsing/lexer.cmx \ + typing/env.cmx \ + utils/config.cmx \ + file_formats/cmi_format.cmx \ + utils/clflags.cmx \ + file_formats/cmt_format.cmi +file_formats/cmt_format.cmi : \ + typing/types.cmi \ + typing/typedtree.cmi \ + utils/misc.cmi \ + parsing/location.cmi \ + typing/env.cmi \ + file_formats/cmi_format.cmi +file_formats/cmx_format.cmo : \ + utils/numbers.cmi \ + utils/misc.cmi \ + parsing/location.cmi \ + middle_end/flambda/export_info.cmi \ + utils/config.cmi \ + middle_end/compilation_unit.cmi \ + middle_end/clambda.cmi \ + file_formats/cmx_format.cmi +file_formats/cmx_format.cmx : \ + utils/numbers.cmx \ + utils/misc.cmx \ + parsing/location.cmx \ + middle_end/flambda/export_info.cmx \ + utils/config.cmx \ + middle_end/compilation_unit.cmx \ + middle_end/clambda.cmx \ + file_formats/cmx_format.cmi +file_formats/cmx_format.cmi : \ + utils/numbers.cmi \ + middle_end/flambda/export_info.cmi \ + middle_end/compilation_unit.cmi \ + middle_end/clambda.cmi +file_formats/cmxa_format.cmo : \ + utils/misc.cmi \ + parsing/location.cmi \ + utils/config.cmi \ + file_formats/cmx_format.cmi \ + file_formats/cmxa_format.cmi +file_formats/cmxa_format.cmx : \ + utils/misc.cmx \ + parsing/location.cmx \ + utils/config.cmx \ + file_formats/cmx_format.cmx \ + file_formats/cmxa_format.cmi +file_formats/cmxa_format.cmi : \ + file_formats/cmx_format.cmi +file_formats/cmxs_format.cmo : \ + utils/config.cmi \ + middle_end/compilation_unit.cmi \ + file_formats/cmxs_format.cmi +file_formats/cmxs_format.cmx : \ + utils/config.cmx \ + middle_end/compilation_unit.cmx \ + file_formats/cmxs_format.cmi +file_formats/cmxs_format.cmi : \ + middle_end/compilation_unit.cmi +middle_end/closure/closure.cmo : \ + utils/warnings.cmi \ + middle_end/variable.cmi \ + middle_end/symbol.cmi \ + bytecomp/switch.cmi \ + bytecomp/simplif.cmi \ + middle_end/semantics_of_primitives.cmi \ + typing/primitive.cmi \ + utils/numbers.cmi \ + utils/misc.cmi \ + parsing/location.cmi \ + bytecomp/lambda.cmi \ + typing/ident.cmi \ + typing/env.cmi \ + bytecomp/debuginfo.cmi \ + middle_end/convert_primitives.cmi \ + utils/config.cmi \ + middle_end/compilation_unit.cmi \ + middle_end/compilation_state.cmi \ + utils/clflags.cmi \ + middle_end/clambda_primitives.cmi \ + middle_end/clambda.cmi \ + middle_end/backend_var.cmi \ + middle_end/backend_intf.cmi \ + parsing/asttypes.cmi \ + middle_end/closure/closure.cmi +middle_end/closure/closure.cmx : \ + utils/warnings.cmx \ + middle_end/variable.cmx \ + middle_end/symbol.cmx \ + bytecomp/switch.cmx \ + bytecomp/simplif.cmx \ + middle_end/semantics_of_primitives.cmx \ + typing/primitive.cmx \ + utils/numbers.cmx \ + utils/misc.cmx \ + parsing/location.cmx \ + bytecomp/lambda.cmx \ + typing/ident.cmx \ + typing/env.cmx \ + bytecomp/debuginfo.cmx \ + middle_end/convert_primitives.cmx \ + utils/config.cmx \ + middle_end/compilation_unit.cmx \ + middle_end/compilation_state.cmx \ + utils/clflags.cmx \ + middle_end/clambda_primitives.cmx \ + middle_end/clambda.cmx \ + middle_end/backend_var.cmx \ + middle_end/backend_intf.cmi \ + parsing/asttypes.cmi \ + middle_end/closure/closure.cmi +middle_end/closure/closure.cmi : \ + bytecomp/lambda.cmi \ + middle_end/clambda.cmi \ + middle_end/backend_intf.cmi +middle_end/closure/closure_middle_end.cmo : \ + middle_end/symbol.cmi \ + middle_end/printclambda.cmi \ + bytecomp/lambda.cmi \ + middle_end/compilation_unit.cmi \ + middle_end/compilation_state.cmi \ + middle_end/closure/closure.cmi \ + utils/clflags.cmi \ + middle_end/clambda.cmi \ + middle_end/closure/closure_middle_end.cmi +middle_end/closure/closure_middle_end.cmx : \ + middle_end/symbol.cmx \ + middle_end/printclambda.cmx \ + bytecomp/lambda.cmx \ + middle_end/compilation_unit.cmx \ + middle_end/compilation_state.cmx \ + middle_end/closure/closure.cmx \ + utils/clflags.cmx \ + middle_end/clambda.cmx \ + middle_end/closure/closure_middle_end.cmi +middle_end/closure/closure_middle_end.cmi : \ + bytecomp/lambda.cmi \ + middle_end/clambda.cmi \ + middle_end/backend_intf.cmi +middle_end/flambda/alias_analysis.cmo : \ + middle_end/variable.cmi \ + middle_end/flambda/base_types/var_within_closure.cmi \ + middle_end/flambda/base_types/tag.cmi \ + middle_end/symbol.cmi \ + utils/misc.cmi \ + bytecomp/lambda.cmi \ + utils/int_replace_polymorphic_compare.cmi \ + middle_end/flambda/flambda.cmi \ + parsing/asttypes.cmi \ + middle_end/flambda/allocated_const.cmi \ + middle_end/flambda/alias_analysis.cmi +middle_end/flambda/alias_analysis.cmx : \ + middle_end/variable.cmx \ + middle_end/flambda/base_types/var_within_closure.cmx \ + middle_end/flambda/base_types/tag.cmx \ + middle_end/symbol.cmx \ + utils/misc.cmx \ + bytecomp/lambda.cmx \ + utils/int_replace_polymorphic_compare.cmx \ + middle_end/flambda/flambda.cmx \ + parsing/asttypes.cmi \ + middle_end/flambda/allocated_const.cmx \ + middle_end/flambda/alias_analysis.cmi +middle_end/flambda/alias_analysis.cmi : \ + middle_end/variable.cmi \ + middle_end/flambda/base_types/tag.cmi \ + middle_end/symbol.cmi \ + bytecomp/lambda.cmi \ + middle_end/flambda/flambda.cmi \ + parsing/asttypes.cmi \ + middle_end/flambda/allocated_const.cmi +middle_end/flambda/allocated_const.cmo : \ + utils/int_replace_polymorphic_compare.cmi \ + middle_end/flambda/allocated_const.cmi +middle_end/flambda/allocated_const.cmx : \ + utils/int_replace_polymorphic_compare.cmx \ + middle_end/flambda/allocated_const.cmi +middle_end/flambda/allocated_const.cmi : +middle_end/flambda/augment_specialised_args.cmo : \ + middle_end/variable.cmi \ + middle_end/flambda/projection.cmi \ + middle_end/flambda/pass_wrapper.cmi \ + middle_end/flambda/parameter.cmi \ + utils/misc.cmi \ + middle_end/internal_variable_names.cmi \ + utils/int_replace_polymorphic_compare.cmi \ + middle_end/flambda/inlining_cost.cmi \ + middle_end/flambda/inline_and_simplify_aux.cmi \ + utils/identifiable.cmi \ + middle_end/flambda/flambda_utils.cmi \ + middle_end/flambda/flambda.cmi \ + bytecomp/debuginfo.cmi \ + middle_end/flambda/base_types/closure_origin.cmi \ + middle_end/flambda/base_types/closure_id.cmi \ + utils/clflags.cmi \ + middle_end/backend_intf.cmi \ + middle_end/flambda/augment_specialised_args.cmi +middle_end/flambda/augment_specialised_args.cmx : \ + middle_end/variable.cmx \ + middle_end/flambda/projection.cmx \ + middle_end/flambda/pass_wrapper.cmx \ + middle_end/flambda/parameter.cmx \ + utils/misc.cmx \ + middle_end/internal_variable_names.cmx \ + utils/int_replace_polymorphic_compare.cmx \ + middle_end/flambda/inlining_cost.cmx \ + middle_end/flambda/inline_and_simplify_aux.cmx \ + utils/identifiable.cmx \ + middle_end/flambda/flambda_utils.cmx \ + middle_end/flambda/flambda.cmx \ + bytecomp/debuginfo.cmx \ + middle_end/flambda/base_types/closure_origin.cmx \ + middle_end/flambda/base_types/closure_id.cmx \ + utils/clflags.cmx \ + middle_end/backend_intf.cmi \ + middle_end/flambda/augment_specialised_args.cmi +middle_end/flambda/augment_specialised_args.cmi : \ + middle_end/variable.cmi \ + middle_end/flambda/projection.cmi \ + middle_end/flambda/inlining_cost.cmi \ + middle_end/flambda/inline_and_simplify_aux.cmi \ + middle_end/flambda/flambda.cmi +middle_end/flambda/build_export_info.cmo : \ + middle_end/variable.cmi \ + middle_end/flambda/base_types/var_within_closure.cmi \ + middle_end/flambda/traverse_for_exported_symbols.cmi \ + middle_end/flambda/base_types/tag.cmi \ + middle_end/symbol.cmi \ + middle_end/flambda/simple_value_approx.cmi \ + middle_end/flambda/base_types/set_of_closures_id.cmi \ + utils/misc.cmi \ + middle_end/flambda/invariant_params.cmi \ + middle_end/flambda/inline_and_simplify_aux.cmi \ + middle_end/flambda/flambda_utils.cmi \ + middle_end/flambda/flambda.cmi \ + middle_end/flambda/find_recursive_functions.cmi \ + middle_end/flambda/export_info.cmi \ + middle_end/flambda/base_types/export_id.cmi \ + middle_end/compilation_unit.cmi \ + middle_end/compilation_state.cmi \ + middle_end/flambda/base_types/closure_id.cmi \ + utils/clflags.cmi \ + middle_end/backend_intf.cmi \ + middle_end/flambda/allocated_const.cmi \ + middle_end/flambda/build_export_info.cmi +middle_end/flambda/build_export_info.cmx : \ + middle_end/variable.cmx \ + middle_end/flambda/base_types/var_within_closure.cmx \ + middle_end/flambda/traverse_for_exported_symbols.cmx \ + middle_end/flambda/base_types/tag.cmx \ + middle_end/symbol.cmx \ + middle_end/flambda/simple_value_approx.cmx \ + middle_end/flambda/base_types/set_of_closures_id.cmx \ + utils/misc.cmx \ + middle_end/flambda/invariant_params.cmx \ + middle_end/flambda/inline_and_simplify_aux.cmx \ + middle_end/flambda/flambda_utils.cmx \ + middle_end/flambda/flambda.cmx \ + middle_end/flambda/find_recursive_functions.cmx \ + middle_end/flambda/export_info.cmx \ + middle_end/flambda/base_types/export_id.cmx \ + middle_end/compilation_unit.cmx \ + middle_end/compilation_state.cmx \ + middle_end/flambda/base_types/closure_id.cmx \ + utils/clflags.cmx \ + middle_end/backend_intf.cmi \ + middle_end/flambda/allocated_const.cmx \ + middle_end/flambda/build_export_info.cmi +middle_end/flambda/build_export_info.cmi : \ + middle_end/flambda/flambda.cmi \ + middle_end/flambda/export_info.cmi \ + middle_end/backend_intf.cmi +middle_end/flambda/closure_conversion.cmo : \ + middle_end/variable.cmi \ + middle_end/flambda/base_types/tag.cmi \ + middle_end/symbol.cmi \ + middle_end/flambda/base_types/static_exception.cmi \ + bytecomp/simplif.cmi \ + typing/predef.cmi \ + middle_end/flambda/parameter.cmi \ + utils/numbers.cmi \ + middle_end/flambda/base_types/mutable_variable.cmi \ + utils/misc.cmi \ + middle_end/flambda/lift_code.cmi \ + bytecomp/lambda.cmi \ + middle_end/internal_variable_names.cmi \ + utils/int_replace_polymorphic_compare.cmi \ + typing/ident.cmi \ + middle_end/flambda/flambda_utils.cmi \ + middle_end/flambda/flambda.cmi \ + bytecomp/debuginfo.cmi \ + middle_end/convert_primitives.cmi \ + utils/config.cmi \ + middle_end/compilation_unit.cmi \ + middle_end/compilation_state.cmi \ + middle_end/flambda/base_types/closure_origin.cmi \ + middle_end/flambda/base_types/closure_id.cmi \ + middle_end/flambda/closure_conversion_aux.cmi \ + utils/clflags.cmi \ + middle_end/clambda_primitives.cmi \ + middle_end/backend_intf.cmi \ + middle_end/flambda/closure_conversion.cmi +middle_end/flambda/closure_conversion.cmx : \ + middle_end/variable.cmx \ + middle_end/flambda/base_types/tag.cmx \ + middle_end/symbol.cmx \ + middle_end/flambda/base_types/static_exception.cmx \ + bytecomp/simplif.cmx \ + typing/predef.cmx \ + middle_end/flambda/parameter.cmx \ + utils/numbers.cmx \ + middle_end/flambda/base_types/mutable_variable.cmx \ + utils/misc.cmx \ + middle_end/flambda/lift_code.cmx \ + bytecomp/lambda.cmx \ + middle_end/internal_variable_names.cmx \ + utils/int_replace_polymorphic_compare.cmx \ + typing/ident.cmx \ + middle_end/flambda/flambda_utils.cmx \ + middle_end/flambda/flambda.cmx \ + bytecomp/debuginfo.cmx \ + middle_end/convert_primitives.cmx \ + utils/config.cmx \ + middle_end/compilation_unit.cmx \ + middle_end/compilation_state.cmx \ + middle_end/flambda/base_types/closure_origin.cmx \ + middle_end/flambda/base_types/closure_id.cmx \ + middle_end/flambda/closure_conversion_aux.cmx \ + utils/clflags.cmx \ + middle_end/clambda_primitives.cmx \ + middle_end/backend_intf.cmi \ + middle_end/flambda/closure_conversion.cmi +middle_end/flambda/closure_conversion.cmi : \ + bytecomp/lambda.cmi \ + typing/ident.cmi \ + middle_end/flambda/flambda.cmi \ + middle_end/backend_intf.cmi +middle_end/flambda/closure_conversion_aux.cmo : \ + middle_end/variable.cmi \ + middle_end/symbol.cmi \ + middle_end/flambda/base_types/static_exception.cmi \ + utils/numbers.cmi \ + middle_end/flambda/base_types/mutable_variable.cmi \ + utils/misc.cmi \ + parsing/location.cmi \ + bytecomp/lambda.cmi \ + utils/int_replace_polymorphic_compare.cmi \ + typing/ident.cmi \ + middle_end/flambda/closure_conversion_aux.cmi +middle_end/flambda/closure_conversion_aux.cmx : \ + middle_end/variable.cmx \ + middle_end/symbol.cmx \ + middle_end/flambda/base_types/static_exception.cmx \ + utils/numbers.cmx \ + middle_end/flambda/base_types/mutable_variable.cmx \ + utils/misc.cmx \ + parsing/location.cmx \ + bytecomp/lambda.cmx \ + utils/int_replace_polymorphic_compare.cmx \ + typing/ident.cmx \ + middle_end/flambda/closure_conversion_aux.cmi +middle_end/flambda/closure_conversion_aux.cmi : \ + middle_end/variable.cmi \ + middle_end/symbol.cmi \ + middle_end/flambda/base_types/static_exception.cmi \ + middle_end/flambda/base_types/mutable_variable.cmi \ + parsing/location.cmi \ + bytecomp/lambda.cmi \ + typing/ident.cmi +middle_end/flambda/closure_offsets.cmo : \ + middle_end/variable.cmi \ + middle_end/flambda/base_types/var_within_closure.cmi \ + utils/misc.cmi \ + middle_end/flambda/flambda_utils.cmi \ + middle_end/flambda/flambda.cmi \ + middle_end/flambda/base_types/closure_id.cmi \ + middle_end/flambda/closure_offsets.cmi +middle_end/flambda/closure_offsets.cmx : \ + middle_end/variable.cmx \ + middle_end/flambda/base_types/var_within_closure.cmx \ + utils/misc.cmx \ + middle_end/flambda/flambda_utils.cmx \ + middle_end/flambda/flambda.cmx \ + middle_end/flambda/base_types/closure_id.cmx \ + middle_end/flambda/closure_offsets.cmi +middle_end/flambda/closure_offsets.cmi : \ + middle_end/flambda/base_types/var_within_closure.cmi \ + middle_end/flambda/flambda.cmi \ + middle_end/flambda/base_types/closure_id.cmi +middle_end/flambda/effect_analysis.cmo : \ + middle_end/semantics_of_primitives.cmi \ + utils/misc.cmi \ + utils/int_replace_polymorphic_compare.cmi \ + middle_end/flambda/flambda.cmi \ + middle_end/clambda_primitives.cmi \ + middle_end/flambda/effect_analysis.cmi +middle_end/flambda/effect_analysis.cmx : \ + middle_end/semantics_of_primitives.cmx \ + utils/misc.cmx \ + utils/int_replace_polymorphic_compare.cmx \ + middle_end/flambda/flambda.cmx \ + middle_end/clambda_primitives.cmx \ + middle_end/flambda/effect_analysis.cmi +middle_end/flambda/effect_analysis.cmi : \ + middle_end/flambda/flambda.cmi +middle_end/flambda/export_info.cmo : \ + middle_end/variable.cmi \ + middle_end/flambda/base_types/var_within_closure.cmi \ + middle_end/flambda/base_types/tag.cmi \ + middle_end/symbol.cmi \ + middle_end/flambda/simple_value_approx.cmi \ + middle_end/flambda/base_types/set_of_closures_id.cmi \ + middle_end/flambda/flambda.cmi \ + middle_end/flambda/base_types/export_id.cmi \ + middle_end/compilation_unit.cmi \ + middle_end/flambda/base_types/closure_id.cmi \ + middle_end/flambda/export_info.cmi +middle_end/flambda/export_info.cmx : \ + middle_end/variable.cmx \ + middle_end/flambda/base_types/var_within_closure.cmx \ + middle_end/flambda/base_types/tag.cmx \ + middle_end/symbol.cmx \ + middle_end/flambda/simple_value_approx.cmx \ + middle_end/flambda/base_types/set_of_closures_id.cmx \ + middle_end/flambda/flambda.cmx \ + middle_end/flambda/base_types/export_id.cmx \ + middle_end/compilation_unit.cmx \ + middle_end/flambda/base_types/closure_id.cmx \ + middle_end/flambda/export_info.cmi +middle_end/flambda/export_info.cmi : \ + middle_end/variable.cmi \ + middle_end/flambda/base_types/var_within_closure.cmi \ + middle_end/flambda/base_types/tag.cmi \ + middle_end/symbol.cmi \ + middle_end/flambda/simple_value_approx.cmi \ + middle_end/flambda/base_types/set_of_closures_id.cmi \ + middle_end/flambda/flambda.cmi \ + middle_end/flambda/base_types/export_id.cmi \ + middle_end/compilation_unit.cmi \ + middle_end/flambda/base_types/closure_id.cmi +middle_end/flambda/extract_projections.cmo : \ + middle_end/variable.cmi \ + middle_end/flambda/base_types/var_within_closure.cmi \ + middle_end/flambda/simple_value_approx.cmi \ + middle_end/flambda/projection.cmi \ + utils/int_replace_polymorphic_compare.cmi \ + middle_end/flambda/inline_and_simplify_aux.cmi \ + middle_end/flambda/freshening.cmi \ + middle_end/flambda/flambda_iterators.cmi \ + middle_end/flambda/flambda.cmi \ + middle_end/flambda/base_types/closure_id.cmi \ + middle_end/flambda/extract_projections.cmi +middle_end/flambda/extract_projections.cmx : \ + middle_end/variable.cmx \ + middle_end/flambda/base_types/var_within_closure.cmx \ + middle_end/flambda/simple_value_approx.cmx \ + middle_end/flambda/projection.cmx \ + utils/int_replace_polymorphic_compare.cmx \ + middle_end/flambda/inline_and_simplify_aux.cmx \ + middle_end/flambda/freshening.cmx \ + middle_end/flambda/flambda_iterators.cmx \ + middle_end/flambda/flambda.cmx \ + middle_end/flambda/base_types/closure_id.cmx \ + middle_end/flambda/extract_projections.cmi +middle_end/flambda/extract_projections.cmi : \ + middle_end/variable.cmi \ + middle_end/flambda/projection.cmi \ + middle_end/flambda/inline_and_simplify_aux.cmi \ + middle_end/flambda/flambda.cmi +middle_end/flambda/find_recursive_functions.cmo : \ + middle_end/variable.cmi \ utils/strongly_connected_components.cmi \ - middle_end/int_replace_polymorphic_compare.cmi \ - middle_end/flambda_utils.cmi \ - middle_end/flambda.cmi \ + utils/int_replace_polymorphic_compare.cmi \ + middle_end/flambda/flambda_utils.cmi \ + middle_end/flambda/flambda.cmi \ middle_end/backend_intf.cmi \ - middle_end/find_recursive_functions.cmi -middle_end/find_recursive_functions.cmx : \ - middle_end/base_types/variable.cmx \ + middle_end/flambda/find_recursive_functions.cmi +middle_end/flambda/find_recursive_functions.cmx : \ + middle_end/variable.cmx \ utils/strongly_connected_components.cmx \ - middle_end/int_replace_polymorphic_compare.cmx \ - middle_end/flambda_utils.cmx \ - middle_end/flambda.cmx \ + utils/int_replace_polymorphic_compare.cmx \ + middle_end/flambda/flambda_utils.cmx \ + middle_end/flambda/flambda.cmx \ middle_end/backend_intf.cmi \ - middle_end/find_recursive_functions.cmi -middle_end/find_recursive_functions.cmi : \ - middle_end/base_types/variable.cmi \ - middle_end/flambda.cmi \ + middle_end/flambda/find_recursive_functions.cmi +middle_end/flambda/find_recursive_functions.cmi : \ + middle_end/variable.cmi \ + middle_end/flambda/flambda.cmi \ middle_end/backend_intf.cmi -middle_end/flambda.cmo : \ - middle_end/base_types/variable.cmi \ - middle_end/base_types/tag.cmi \ - middle_end/base_types/symbol.cmi \ - middle_end/base_types/static_exception.cmi \ - middle_end/base_types/set_of_closures_origin.cmi \ - middle_end/base_types/set_of_closures_id.cmi \ - middle_end/projection.cmi \ +middle_end/flambda/flambda.cmo : \ + middle_end/variable.cmi \ + middle_end/flambda/base_types/tag.cmi \ + middle_end/symbol.cmi \ + middle_end/flambda/base_types/static_exception.cmi \ + middle_end/flambda/base_types/set_of_closures_origin.cmi \ + middle_end/flambda/base_types/set_of_closures_id.cmi \ + middle_end/flambda/projection.cmi \ bytecomp/printlambda.cmi \ - asmcomp/printclambda_primitives.cmi \ - middle_end/parameter.cmi \ + middle_end/printclambda_primitives.cmi \ + middle_end/flambda/parameter.cmi \ utils/numbers.cmi \ - middle_end/base_types/mutable_variable.cmi \ + middle_end/flambda/base_types/mutable_variable.cmi \ utils/misc.cmi \ bytecomp/lambda.cmi \ - middle_end/int_replace_polymorphic_compare.cmi \ + utils/int_replace_polymorphic_compare.cmi \ utils/identifiable.cmi \ - middle_end/debuginfo.cmi \ - middle_end/base_types/compilation_unit.cmi \ - middle_end/base_types/closure_origin.cmi \ - middle_end/base_types/closure_id.cmi \ + bytecomp/debuginfo.cmi \ + middle_end/compilation_unit.cmi \ + middle_end/flambda/base_types/closure_origin.cmi \ + middle_end/flambda/base_types/closure_id.cmi \ utils/clflags.cmi \ - asmcomp/clambda_primitives.cmi \ - parsing/asttypes.cmi \ - middle_end/allocated_const.cmi \ - middle_end/flambda.cmi -middle_end/flambda.cmx : \ - middle_end/base_types/variable.cmx \ - middle_end/base_types/tag.cmx \ - middle_end/base_types/symbol.cmx \ - middle_end/base_types/static_exception.cmx \ - middle_end/base_types/set_of_closures_origin.cmx \ - middle_end/base_types/set_of_closures_id.cmx \ - middle_end/projection.cmx \ + middle_end/clambda_primitives.cmi \ + parsing/asttypes.cmi \ + middle_end/flambda/allocated_const.cmi \ + middle_end/flambda/flambda.cmi +middle_end/flambda/flambda.cmx : \ + middle_end/variable.cmx \ + middle_end/flambda/base_types/tag.cmx \ + middle_end/symbol.cmx \ + middle_end/flambda/base_types/static_exception.cmx \ + middle_end/flambda/base_types/set_of_closures_origin.cmx \ + middle_end/flambda/base_types/set_of_closures_id.cmx \ + middle_end/flambda/projection.cmx \ bytecomp/printlambda.cmx \ - asmcomp/printclambda_primitives.cmx \ - middle_end/parameter.cmx \ + middle_end/printclambda_primitives.cmx \ + middle_end/flambda/parameter.cmx \ utils/numbers.cmx \ - middle_end/base_types/mutable_variable.cmx \ + middle_end/flambda/base_types/mutable_variable.cmx \ utils/misc.cmx \ bytecomp/lambda.cmx \ - middle_end/int_replace_polymorphic_compare.cmx \ + utils/int_replace_polymorphic_compare.cmx \ utils/identifiable.cmx \ - middle_end/debuginfo.cmx \ - middle_end/base_types/compilation_unit.cmx \ - middle_end/base_types/closure_origin.cmx \ - middle_end/base_types/closure_id.cmx \ + bytecomp/debuginfo.cmx \ + middle_end/compilation_unit.cmx \ + middle_end/flambda/base_types/closure_origin.cmx \ + middle_end/flambda/base_types/closure_id.cmx \ utils/clflags.cmx \ - asmcomp/clambda_primitives.cmx \ - parsing/asttypes.cmi \ - middle_end/allocated_const.cmx \ - middle_end/flambda.cmi -middle_end/flambda.cmi : \ - middle_end/base_types/variable.cmi \ - middle_end/base_types/tag.cmi \ - middle_end/base_types/symbol.cmi \ - middle_end/base_types/static_exception.cmi \ - middle_end/base_types/set_of_closures_origin.cmi \ - middle_end/base_types/set_of_closures_id.cmi \ - middle_end/projection.cmi \ - middle_end/parameter.cmi \ + middle_end/clambda_primitives.cmx \ + parsing/asttypes.cmi \ + middle_end/flambda/allocated_const.cmx \ + middle_end/flambda/flambda.cmi +middle_end/flambda/flambda.cmi : \ + middle_end/variable.cmi \ + middle_end/flambda/base_types/tag.cmi \ + middle_end/symbol.cmi \ + middle_end/flambda/base_types/static_exception.cmi \ + middle_end/flambda/base_types/set_of_closures_origin.cmi \ + middle_end/flambda/base_types/set_of_closures_id.cmi \ + middle_end/flambda/projection.cmi \ + middle_end/flambda/parameter.cmi \ utils/numbers.cmi \ - middle_end/base_types/mutable_variable.cmi \ + middle_end/flambda/base_types/mutable_variable.cmi \ bytecomp/lambda.cmi \ utils/identifiable.cmi \ - middle_end/debuginfo.cmi \ - middle_end/base_types/closure_origin.cmi \ - middle_end/base_types/closure_id.cmi \ - asmcomp/clambda_primitives.cmi \ - parsing/asttypes.cmi \ - middle_end/allocated_const.cmi -middle_end/flambda_invariants.cmo : \ - middle_end/base_types/variable.cmi \ - middle_end/base_types/var_within_closure.cmi \ - middle_end/base_types/tag.cmi \ - middle_end/base_types/symbol.cmi \ - middle_end/base_types/static_exception.cmi \ - middle_end/base_types/set_of_closures_origin.cmi \ - middle_end/base_types/set_of_closures_id.cmi \ - middle_end/projection.cmi \ - asmcomp/printclambda_primitives.cmi \ - middle_end/parameter.cmi \ + bytecomp/debuginfo.cmi \ + middle_end/flambda/base_types/closure_origin.cmi \ + middle_end/flambda/base_types/closure_id.cmi \ + middle_end/clambda_primitives.cmi \ + parsing/asttypes.cmi \ + middle_end/flambda/allocated_const.cmi +middle_end/flambda/flambda_invariants.cmo : \ + middle_end/variable.cmi \ + middle_end/flambda/base_types/var_within_closure.cmi \ + middle_end/flambda/base_types/tag.cmi \ + middle_end/symbol.cmi \ + middle_end/flambda/base_types/static_exception.cmi \ + middle_end/flambda/base_types/set_of_closures_origin.cmi \ + middle_end/flambda/base_types/set_of_closures_id.cmi \ + middle_end/flambda/projection.cmi \ + middle_end/printclambda_primitives.cmi \ + middle_end/flambda/parameter.cmi \ + utils/numbers.cmi \ + middle_end/flambda/base_types/mutable_variable.cmi \ + utils/misc.cmi \ + bytecomp/lambda.cmi \ + utils/int_replace_polymorphic_compare.cmi \ + middle_end/flambda/flambda_iterators.cmi \ + middle_end/flambda/flambda.cmi \ + bytecomp/debuginfo.cmi \ + middle_end/compilation_unit.cmi \ + middle_end/flambda/base_types/closure_id.cmi \ + middle_end/clambda_primitives.cmi \ + parsing/asttypes.cmi \ + middle_end/flambda/allocated_const.cmi \ + middle_end/flambda/flambda_invariants.cmi +middle_end/flambda/flambda_invariants.cmx : \ + middle_end/variable.cmx \ + middle_end/flambda/base_types/var_within_closure.cmx \ + middle_end/flambda/base_types/tag.cmx \ + middle_end/symbol.cmx \ + middle_end/flambda/base_types/static_exception.cmx \ + middle_end/flambda/base_types/set_of_closures_origin.cmx \ + middle_end/flambda/base_types/set_of_closures_id.cmx \ + middle_end/flambda/projection.cmx \ + middle_end/printclambda_primitives.cmx \ + middle_end/flambda/parameter.cmx \ + utils/numbers.cmx \ + middle_end/flambda/base_types/mutable_variable.cmx \ + utils/misc.cmx \ + bytecomp/lambda.cmx \ + utils/int_replace_polymorphic_compare.cmx \ + middle_end/flambda/flambda_iterators.cmx \ + middle_end/flambda/flambda.cmx \ + bytecomp/debuginfo.cmx \ + middle_end/compilation_unit.cmx \ + middle_end/flambda/base_types/closure_id.cmx \ + middle_end/clambda_primitives.cmx \ + parsing/asttypes.cmi \ + middle_end/flambda/allocated_const.cmx \ + middle_end/flambda/flambda_invariants.cmi +middle_end/flambda/flambda_invariants.cmi : \ + middle_end/flambda/flambda.cmi +middle_end/flambda/flambda_iterators.cmo : \ + middle_end/variable.cmi \ + utils/misc.cmi \ + utils/int_replace_polymorphic_compare.cmi \ + middle_end/flambda/flambda.cmi \ + middle_end/flambda/flambda_iterators.cmi +middle_end/flambda/flambda_iterators.cmx : \ + middle_end/variable.cmx \ + utils/misc.cmx \ + utils/int_replace_polymorphic_compare.cmx \ + middle_end/flambda/flambda.cmx \ + middle_end/flambda/flambda_iterators.cmi +middle_end/flambda/flambda_iterators.cmi : \ + middle_end/variable.cmi \ + middle_end/symbol.cmi \ + middle_end/flambda/flambda.cmi +middle_end/flambda/flambda_middle_end.cmo : \ + utils/warnings.cmi \ + middle_end/variable.cmi \ + middle_end/flambda/un_anf.cmi \ + middle_end/symbol.cmi \ + middle_end/flambda/share_constants.cmi \ + middle_end/flambda/remove_unused_program_constructs.cmi \ + middle_end/flambda/remove_unused_closure_vars.cmi \ + middle_end/flambda/ref_to_variables.cmi \ + utils/profile.cmi \ + middle_end/printclambda.cmi \ + utils/misc.cmi \ + parsing/location.cmi \ + middle_end/flambda/lift_let_to_initialize_symbol.cmi \ + middle_end/flambda/lift_constants.cmi \ + middle_end/flambda/lift_code.cmi \ + bytecomp/lambda.cmi \ + utils/int_replace_polymorphic_compare.cmi \ + middle_end/flambda/inlining_cost.cmi \ + middle_end/flambda/inline_and_simplify.cmi \ + middle_end/flambda/initialize_symbol_to_let_symbol.cmi \ + middle_end/flambda/flambda_to_clambda.cmi \ + middle_end/flambda/flambda_iterators.cmi \ + middle_end/flambda/flambda_invariants.cmi \ + middle_end/flambda/flambda.cmi \ + bytecomp/debuginfo.cmi \ + middle_end/compilation_state.cmi \ + middle_end/flambda/base_types/closure_id.cmi \ + middle_end/flambda/closure_conversion.cmi \ + utils/clflags.cmi \ + middle_end/clambda.cmi \ + middle_end/flambda/build_export_info.cmi \ + middle_end/backend_intf.cmi \ + middle_end/flambda/flambda_middle_end.cmi +middle_end/flambda/flambda_middle_end.cmx : \ + utils/warnings.cmx \ + middle_end/variable.cmx \ + middle_end/flambda/un_anf.cmx \ + middle_end/symbol.cmx \ + middle_end/flambda/share_constants.cmx \ + middle_end/flambda/remove_unused_program_constructs.cmx \ + middle_end/flambda/remove_unused_closure_vars.cmx \ + middle_end/flambda/ref_to_variables.cmx \ + utils/profile.cmx \ + middle_end/printclambda.cmx \ + utils/misc.cmx \ + parsing/location.cmx \ + middle_end/flambda/lift_let_to_initialize_symbol.cmx \ + middle_end/flambda/lift_constants.cmx \ + middle_end/flambda/lift_code.cmx \ + bytecomp/lambda.cmx \ + utils/int_replace_polymorphic_compare.cmx \ + middle_end/flambda/inlining_cost.cmx \ + middle_end/flambda/inline_and_simplify.cmx \ + middle_end/flambda/initialize_symbol_to_let_symbol.cmx \ + middle_end/flambda/flambda_to_clambda.cmx \ + middle_end/flambda/flambda_iterators.cmx \ + middle_end/flambda/flambda_invariants.cmx \ + middle_end/flambda/flambda.cmx \ + bytecomp/debuginfo.cmx \ + middle_end/compilation_state.cmx \ + middle_end/flambda/base_types/closure_id.cmx \ + middle_end/flambda/closure_conversion.cmx \ + utils/clflags.cmx \ + middle_end/clambda.cmx \ + middle_end/flambda/build_export_info.cmx \ + middle_end/backend_intf.cmi \ + middle_end/flambda/flambda_middle_end.cmi +middle_end/flambda/flambda_middle_end.cmi : \ + bytecomp/lambda.cmi \ + middle_end/clambda.cmi \ + middle_end/backend_intf.cmi +middle_end/flambda/flambda_to_clambda.cmo : \ + middle_end/variable.cmi \ + middle_end/flambda/base_types/var_within_closure.cmi \ + middle_end/flambda/un_anf.cmi \ + middle_end/flambda/base_types/tag.cmi \ + middle_end/symbol.cmi \ + middle_end/flambda/base_types/static_exception.cmi \ + middle_end/flambda/simple_value_approx.cmi \ + middle_end/flambda/base_types/set_of_closures_id.cmi \ + typing/primitive.cmi \ + middle_end/flambda/parameter.cmi \ utils/numbers.cmi \ - middle_end/base_types/mutable_variable.cmi \ + middle_end/flambda/base_types/mutable_variable.cmi \ utils/misc.cmi \ bytecomp/lambda.cmi \ - middle_end/int_replace_polymorphic_compare.cmi \ - middle_end/flambda_iterators.cmi \ - middle_end/flambda.cmi \ - middle_end/debuginfo.cmi \ - middle_end/base_types/compilation_unit.cmi \ - middle_end/base_types/closure_id.cmi \ - asmcomp/clambda_primitives.cmi \ - parsing/asttypes.cmi \ - middle_end/allocated_const.cmi \ - middle_end/flambda_invariants.cmi -middle_end/flambda_invariants.cmx : \ - middle_end/base_types/variable.cmx \ - middle_end/base_types/var_within_closure.cmx \ - middle_end/base_types/tag.cmx \ - middle_end/base_types/symbol.cmx \ - middle_end/base_types/static_exception.cmx \ - middle_end/base_types/set_of_closures_origin.cmx \ - middle_end/base_types/set_of_closures_id.cmx \ - middle_end/projection.cmx \ - asmcomp/printclambda_primitives.cmx \ - middle_end/parameter.cmx \ + middle_end/flambda/initialize_symbol_to_let_symbol.cmi \ + middle_end/flambda/flambda_utils.cmi \ + middle_end/flambda/flambda.cmi \ + middle_end/flambda/export_info.cmi \ + bytecomp/debuginfo.cmi \ + middle_end/compilation_unit.cmi \ + middle_end/compilation_state.cmi \ + middle_end/flambda/closure_offsets.cmi \ + middle_end/flambda/base_types/closure_id.cmi \ + utils/clflags.cmi \ + middle_end/clambda.cmi \ + middle_end/backend_var.cmi \ + middle_end/flambda/allocated_const.cmi \ + middle_end/flambda/flambda_to_clambda.cmi +middle_end/flambda/flambda_to_clambda.cmx : \ + middle_end/variable.cmx \ + middle_end/flambda/base_types/var_within_closure.cmx \ + middle_end/flambda/un_anf.cmx \ + middle_end/flambda/base_types/tag.cmx \ + middle_end/symbol.cmx \ + middle_end/flambda/base_types/static_exception.cmx \ + middle_end/flambda/simple_value_approx.cmx \ + middle_end/flambda/base_types/set_of_closures_id.cmx \ + typing/primitive.cmx \ + middle_end/flambda/parameter.cmx \ utils/numbers.cmx \ - middle_end/base_types/mutable_variable.cmx \ + middle_end/flambda/base_types/mutable_variable.cmx \ utils/misc.cmx \ bytecomp/lambda.cmx \ - middle_end/int_replace_polymorphic_compare.cmx \ - middle_end/flambda_iterators.cmx \ - middle_end/flambda.cmx \ - middle_end/debuginfo.cmx \ - middle_end/base_types/compilation_unit.cmx \ - middle_end/base_types/closure_id.cmx \ - asmcomp/clambda_primitives.cmx \ - parsing/asttypes.cmi \ - middle_end/allocated_const.cmx \ - middle_end/flambda_invariants.cmi -middle_end/flambda_invariants.cmi : \ - middle_end/flambda.cmi -middle_end/flambda_iterators.cmo : \ - middle_end/base_types/variable.cmi \ - utils/misc.cmi \ - middle_end/int_replace_polymorphic_compare.cmi \ - middle_end/flambda.cmi \ - middle_end/flambda_iterators.cmi -middle_end/flambda_iterators.cmx : \ - middle_end/base_types/variable.cmx \ - utils/misc.cmx \ - middle_end/int_replace_polymorphic_compare.cmx \ - middle_end/flambda.cmx \ - middle_end/flambda_iterators.cmi -middle_end/flambda_iterators.cmi : \ - middle_end/base_types/variable.cmi \ - middle_end/base_types/symbol.cmi \ - middle_end/flambda.cmi -middle_end/flambda_utils.cmo : \ - middle_end/base_types/variable.cmi \ - middle_end/base_types/var_within_closure.cmi \ - middle_end/base_types/symbol.cmi \ + middle_end/flambda/initialize_symbol_to_let_symbol.cmx \ + middle_end/flambda/flambda_utils.cmx \ + middle_end/flambda/flambda.cmx \ + middle_end/flambda/export_info.cmx \ + bytecomp/debuginfo.cmx \ + middle_end/compilation_unit.cmx \ + middle_end/compilation_state.cmx \ + middle_end/flambda/closure_offsets.cmx \ + middle_end/flambda/base_types/closure_id.cmx \ + utils/clflags.cmx \ + middle_end/clambda.cmx \ + middle_end/backend_var.cmx \ + middle_end/flambda/allocated_const.cmx \ + middle_end/flambda/flambda_to_clambda.cmi +middle_end/flambda/flambda_to_clambda.cmi : \ + middle_end/symbol.cmi \ + middle_end/flambda/flambda.cmi \ + middle_end/flambda/export_info.cmi \ + middle_end/clambda.cmi +middle_end/flambda/flambda_utils.cmo : \ + middle_end/variable.cmi \ + middle_end/flambda/base_types/var_within_closure.cmi \ + middle_end/symbol.cmi \ bytecomp/switch.cmi \ - middle_end/base_types/static_exception.cmi \ - middle_end/base_types/set_of_closures_id.cmi \ - middle_end/projection.cmi \ - middle_end/parameter.cmi \ + middle_end/flambda/base_types/static_exception.cmi \ + middle_end/flambda/base_types/set_of_closures_id.cmi \ + middle_end/flambda/projection.cmi \ + middle_end/flambda/parameter.cmi \ utils/numbers.cmi \ - middle_end/base_types/mutable_variable.cmi \ + middle_end/flambda/base_types/mutable_variable.cmi \ utils/misc.cmi \ bytecomp/lambda.cmi \ middle_end/internal_variable_names.cmi \ - middle_end/int_replace_polymorphic_compare.cmi \ - middle_end/flambda_iterators.cmi \ - middle_end/flambda.cmi \ - middle_end/debuginfo.cmi \ - middle_end/base_types/compilation_unit.cmi \ - middle_end/base_types/closure_origin.cmi \ - middle_end/base_types/closure_id.cmi \ - asmcomp/clambda_primitives.cmi \ - parsing/asttypes.cmi \ - middle_end/allocated_const.cmi \ - middle_end/flambda_utils.cmi -middle_end/flambda_utils.cmx : \ - middle_end/base_types/variable.cmx \ - middle_end/base_types/var_within_closure.cmx \ - middle_end/base_types/symbol.cmx \ + utils/int_replace_polymorphic_compare.cmi \ + middle_end/flambda/flambda_iterators.cmi \ + middle_end/flambda/flambda.cmi \ + bytecomp/debuginfo.cmi \ + middle_end/compilation_unit.cmi \ + middle_end/flambda/base_types/closure_origin.cmi \ + middle_end/flambda/base_types/closure_id.cmi \ + middle_end/clambda_primitives.cmi \ + parsing/asttypes.cmi \ + middle_end/flambda/allocated_const.cmi \ + middle_end/flambda/flambda_utils.cmi +middle_end/flambda/flambda_utils.cmx : \ + middle_end/variable.cmx \ + middle_end/flambda/base_types/var_within_closure.cmx \ + middle_end/symbol.cmx \ bytecomp/switch.cmx \ - middle_end/base_types/static_exception.cmx \ - middle_end/base_types/set_of_closures_id.cmx \ - middle_end/projection.cmx \ - middle_end/parameter.cmx \ + middle_end/flambda/base_types/static_exception.cmx \ + middle_end/flambda/base_types/set_of_closures_id.cmx \ + middle_end/flambda/projection.cmx \ + middle_end/flambda/parameter.cmx \ utils/numbers.cmx \ - middle_end/base_types/mutable_variable.cmx \ + middle_end/flambda/base_types/mutable_variable.cmx \ utils/misc.cmx \ bytecomp/lambda.cmx \ middle_end/internal_variable_names.cmx \ - middle_end/int_replace_polymorphic_compare.cmx \ - middle_end/flambda_iterators.cmx \ - middle_end/flambda.cmx \ - middle_end/debuginfo.cmx \ - middle_end/base_types/compilation_unit.cmx \ - middle_end/base_types/closure_origin.cmx \ - middle_end/base_types/closure_id.cmx \ - asmcomp/clambda_primitives.cmx \ - parsing/asttypes.cmi \ - middle_end/allocated_const.cmx \ - middle_end/flambda_utils.cmi -middle_end/flambda_utils.cmi : \ - middle_end/base_types/variable.cmi \ - middle_end/base_types/var_within_closure.cmi \ - middle_end/base_types/tag.cmi \ - middle_end/base_types/symbol.cmi \ + utils/int_replace_polymorphic_compare.cmx \ + middle_end/flambda/flambda_iterators.cmx \ + middle_end/flambda/flambda.cmx \ + bytecomp/debuginfo.cmx \ + middle_end/compilation_unit.cmx \ + middle_end/flambda/base_types/closure_origin.cmx \ + middle_end/flambda/base_types/closure_id.cmx \ + middle_end/clambda_primitives.cmx \ + parsing/asttypes.cmi \ + middle_end/flambda/allocated_const.cmx \ + middle_end/flambda/flambda_utils.cmi +middle_end/flambda/flambda_utils.cmi : \ + middle_end/variable.cmi \ + middle_end/flambda/base_types/var_within_closure.cmi \ + middle_end/flambda/base_types/tag.cmi \ + middle_end/symbol.cmi \ bytecomp/switch.cmi \ - middle_end/base_types/static_exception.cmi \ - middle_end/base_types/set_of_closures_id.cmi \ - middle_end/projection.cmi \ - middle_end/parameter.cmi \ + middle_end/flambda/base_types/static_exception.cmi \ + middle_end/flambda/base_types/set_of_closures_id.cmi \ + middle_end/flambda/projection.cmi \ + middle_end/flambda/parameter.cmi \ middle_end/internal_variable_names.cmi \ - middle_end/flambda.cmi \ - middle_end/base_types/closure_id.cmi -middle_end/freshening.cmo : \ - middle_end/base_types/variable.cmi \ - middle_end/base_types/var_within_closure.cmi \ - middle_end/base_types/symbol.cmi \ - middle_end/base_types/static_exception.cmi \ - middle_end/projection.cmi \ - middle_end/parameter.cmi \ - middle_end/base_types/mutable_variable.cmi \ - utils/misc.cmi \ - middle_end/int_replace_polymorphic_compare.cmi \ + middle_end/flambda/flambda.cmi \ + middle_end/flambda/base_types/closure_id.cmi +middle_end/flambda/freshening.cmo : \ + middle_end/variable.cmi \ + middle_end/flambda/base_types/var_within_closure.cmi \ + middle_end/symbol.cmi \ + middle_end/flambda/base_types/static_exception.cmi \ + middle_end/flambda/projection.cmi \ + middle_end/flambda/parameter.cmi \ + middle_end/flambda/base_types/mutable_variable.cmi \ + utils/misc.cmi \ + utils/int_replace_polymorphic_compare.cmi \ utils/identifiable.cmi \ - middle_end/flambda_utils.cmi \ - middle_end/flambda_iterators.cmi \ - middle_end/flambda.cmi \ - middle_end/base_types/closure_id.cmi \ - middle_end/freshening.cmi -middle_end/freshening.cmx : \ - middle_end/base_types/variable.cmx \ - middle_end/base_types/var_within_closure.cmx \ - middle_end/base_types/symbol.cmx \ - middle_end/base_types/static_exception.cmx \ - middle_end/projection.cmx \ - middle_end/parameter.cmx \ - middle_end/base_types/mutable_variable.cmx \ - utils/misc.cmx \ - middle_end/int_replace_polymorphic_compare.cmx \ + middle_end/flambda/flambda_utils.cmi \ + middle_end/flambda/flambda_iterators.cmi \ + middle_end/flambda/flambda.cmi \ + middle_end/flambda/base_types/closure_id.cmi \ + middle_end/flambda/freshening.cmi +middle_end/flambda/freshening.cmx : \ + middle_end/variable.cmx \ + middle_end/flambda/base_types/var_within_closure.cmx \ + middle_end/symbol.cmx \ + middle_end/flambda/base_types/static_exception.cmx \ + middle_end/flambda/projection.cmx \ + middle_end/flambda/parameter.cmx \ + middle_end/flambda/base_types/mutable_variable.cmx \ + utils/misc.cmx \ + utils/int_replace_polymorphic_compare.cmx \ utils/identifiable.cmx \ - middle_end/flambda_utils.cmx \ - middle_end/flambda_iterators.cmx \ - middle_end/flambda.cmx \ - middle_end/base_types/closure_id.cmx \ - middle_end/freshening.cmi -middle_end/freshening.cmi : \ - middle_end/base_types/variable.cmi \ - middle_end/base_types/var_within_closure.cmi \ - middle_end/base_types/symbol.cmi \ - middle_end/base_types/static_exception.cmi \ - middle_end/base_types/mutable_variable.cmi \ - middle_end/flambda.cmi \ - middle_end/base_types/closure_id.cmi -middle_end/inconstant_idents.cmo : \ - middle_end/base_types/variable.cmi \ - middle_end/base_types/symbol.cmi \ - middle_end/base_types/set_of_closures_id.cmi \ - middle_end/parameter.cmi \ + middle_end/flambda/flambda_utils.cmx \ + middle_end/flambda/flambda_iterators.cmx \ + middle_end/flambda/flambda.cmx \ + middle_end/flambda/base_types/closure_id.cmx \ + middle_end/flambda/freshening.cmi +middle_end/flambda/freshening.cmi : \ + middle_end/variable.cmi \ + middle_end/flambda/base_types/var_within_closure.cmi \ + middle_end/flambda/base_types/static_exception.cmi \ + middle_end/flambda/base_types/mutable_variable.cmi \ + middle_end/flambda/flambda.cmi \ + middle_end/flambda/base_types/closure_id.cmi +middle_end/flambda/import_approx.cmo : \ + middle_end/variable.cmi \ + middle_end/flambda/base_types/var_within_closure.cmi \ + middle_end/symbol.cmi \ + middle_end/flambda/simple_value_approx.cmi \ + middle_end/flambda/base_types/set_of_closures_id.cmi \ + utils/misc.cmi \ + middle_end/flambda/freshening.cmi \ + middle_end/flambda/flambda_iterators.cmi \ + middle_end/flambda/flambda.cmi \ + middle_end/flambda/export_info.cmi \ + middle_end/flambda/base_types/export_id.cmi \ + middle_end/compilation_unit.cmi \ + middle_end/compilation_state.cmi \ + middle_end/flambda/base_types/closure_id.cmi \ + middle_end/flambda/import_approx.cmi +middle_end/flambda/import_approx.cmx : \ + middle_end/variable.cmx \ + middle_end/flambda/base_types/var_within_closure.cmx \ + middle_end/symbol.cmx \ + middle_end/flambda/simple_value_approx.cmx \ + middle_end/flambda/base_types/set_of_closures_id.cmx \ + utils/misc.cmx \ + middle_end/flambda/freshening.cmx \ + middle_end/flambda/flambda_iterators.cmx \ + middle_end/flambda/flambda.cmx \ + middle_end/flambda/export_info.cmx \ + middle_end/flambda/base_types/export_id.cmx \ + middle_end/compilation_unit.cmx \ + middle_end/compilation_state.cmx \ + middle_end/flambda/base_types/closure_id.cmx \ + middle_end/flambda/import_approx.cmi +middle_end/flambda/import_approx.cmi : \ + middle_end/symbol.cmi \ + middle_end/flambda/simple_value_approx.cmi +middle_end/flambda/inconstant_idents.cmo : \ + middle_end/variable.cmi \ + middle_end/symbol.cmi \ + middle_end/flambda/base_types/set_of_closures_id.cmi \ + middle_end/flambda/parameter.cmi \ utils/numbers.cmi \ utils/misc.cmi \ - middle_end/int_replace_polymorphic_compare.cmi \ + utils/int_replace_polymorphic_compare.cmi \ + middle_end/flambda/import_approx.cmi \ utils/identifiable.cmi \ - middle_end/flambda_utils.cmi \ - middle_end/flambda.cmi \ - middle_end/base_types/compilation_unit.cmi \ - middle_end/base_types/closure_id.cmi \ + middle_end/flambda/flambda_utils.cmi \ + middle_end/flambda/flambda.cmi \ + middle_end/compilation_unit.cmi \ + middle_end/flambda/base_types/closure_id.cmi \ middle_end/backend_intf.cmi \ parsing/asttypes.cmi \ - middle_end/inconstant_idents.cmi -middle_end/inconstant_idents.cmx : \ - middle_end/base_types/variable.cmx \ - middle_end/base_types/symbol.cmx \ - middle_end/base_types/set_of_closures_id.cmx \ - middle_end/parameter.cmx \ + middle_end/flambda/inconstant_idents.cmi +middle_end/flambda/inconstant_idents.cmx : \ + middle_end/variable.cmx \ + middle_end/symbol.cmx \ + middle_end/flambda/base_types/set_of_closures_id.cmx \ + middle_end/flambda/parameter.cmx \ utils/numbers.cmx \ utils/misc.cmx \ - middle_end/int_replace_polymorphic_compare.cmx \ + utils/int_replace_polymorphic_compare.cmx \ + middle_end/flambda/import_approx.cmx \ utils/identifiable.cmx \ - middle_end/flambda_utils.cmx \ - middle_end/flambda.cmx \ - middle_end/base_types/compilation_unit.cmx \ - middle_end/base_types/closure_id.cmx \ + middle_end/flambda/flambda_utils.cmx \ + middle_end/flambda/flambda.cmx \ + middle_end/compilation_unit.cmx \ + middle_end/flambda/base_types/closure_id.cmx \ middle_end/backend_intf.cmi \ parsing/asttypes.cmi \ - middle_end/inconstant_idents.cmi -middle_end/inconstant_idents.cmi : \ - middle_end/base_types/variable.cmi \ - middle_end/base_types/set_of_closures_id.cmi \ - middle_end/flambda.cmi \ - middle_end/base_types/compilation_unit.cmi \ + middle_end/flambda/inconstant_idents.cmi +middle_end/flambda/inconstant_idents.cmi : \ + middle_end/variable.cmi \ + middle_end/flambda/base_types/set_of_closures_id.cmi \ + middle_end/flambda/flambda.cmi \ + middle_end/compilation_unit.cmi \ middle_end/backend_intf.cmi -middle_end/initialize_symbol_to_let_symbol.cmo : \ - middle_end/base_types/variable.cmi \ - utils/misc.cmi \ - middle_end/int_replace_polymorphic_compare.cmi \ - middle_end/flambda.cmi \ - middle_end/initialize_symbol_to_let_symbol.cmi -middle_end/initialize_symbol_to_let_symbol.cmx : \ - middle_end/base_types/variable.cmx \ - utils/misc.cmx \ - middle_end/int_replace_polymorphic_compare.cmx \ - middle_end/flambda.cmx \ - middle_end/initialize_symbol_to_let_symbol.cmi -middle_end/initialize_symbol_to_let_symbol.cmi : \ - middle_end/flambda.cmi -middle_end/inline_and_simplify.cmo : \ +middle_end/flambda/initialize_symbol_to_let_symbol.cmo : \ + middle_end/variable.cmi \ + utils/misc.cmi \ + utils/int_replace_polymorphic_compare.cmi \ + middle_end/flambda/flambda.cmi \ + middle_end/flambda/initialize_symbol_to_let_symbol.cmi +middle_end/flambda/initialize_symbol_to_let_symbol.cmx : \ + middle_end/variable.cmx \ + utils/misc.cmx \ + utils/int_replace_polymorphic_compare.cmx \ + middle_end/flambda/flambda.cmx \ + middle_end/flambda/initialize_symbol_to_let_symbol.cmi +middle_end/flambda/initialize_symbol_to_let_symbol.cmi : \ + middle_end/flambda/flambda.cmi +middle_end/flambda/inline_and_simplify.cmo : \ utils/warnings.cmi \ - middle_end/base_types/variable.cmi \ - middle_end/base_types/var_within_closure.cmi \ - middle_end/unbox_specialised_args.cmi \ - middle_end/unbox_free_vars_of_closures.cmi \ - middle_end/unbox_closures.cmi \ - middle_end/base_types/tag.cmi \ - middle_end/base_types/symbol.cmi \ - middle_end/base_types/static_exception.cmi \ - middle_end/simplify_primitives.cmi \ - middle_end/simple_value_approx.cmi \ - middle_end/remove_unused_arguments.cmi \ - middle_end/remove_free_vars_equal_to_args.cmi \ - middle_end/projection.cmi \ + middle_end/variable.cmi \ + middle_end/flambda/base_types/var_within_closure.cmi \ + middle_end/flambda/unbox_specialised_args.cmi \ + middle_end/flambda/unbox_free_vars_of_closures.cmi \ + middle_end/flambda/unbox_closures.cmi \ + middle_end/flambda/base_types/tag.cmi \ + middle_end/symbol.cmi \ + middle_end/flambda/base_types/static_exception.cmi \ + middle_end/flambda/simplify_primitives.cmi \ + middle_end/flambda/simple_value_approx.cmi \ + middle_end/flambda/remove_unused_arguments.cmi \ + middle_end/flambda/remove_free_vars_equal_to_args.cmi \ + middle_end/flambda/projection.cmi \ typing/predef.cmi \ - middle_end/parameter.cmi \ + middle_end/flambda/parameter.cmi \ utils/misc.cmi \ parsing/location.cmi \ - middle_end/lift_code.cmi \ + middle_end/flambda/lift_code.cmi \ bytecomp/lambda.cmi \ - middle_end/invariant_params.cmi \ + middle_end/flambda/invariant_params.cmi \ middle_end/internal_variable_names.cmi \ - middle_end/int_replace_polymorphic_compare.cmi \ - middle_end/inlining_stats.cmi \ - middle_end/inlining_decision.cmi \ - middle_end/inlining_cost.cmi \ - middle_end/inline_and_simplify_aux.cmi \ + utils/int_replace_polymorphic_compare.cmi \ + middle_end/flambda/inlining_stats.cmi \ + middle_end/flambda/inlining_decision.cmi \ + middle_end/flambda/inlining_cost.cmi \ + middle_end/flambda/inline_and_simplify_aux.cmi \ + middle_end/flambda/import_approx.cmi \ typing/ident.cmi \ - middle_end/freshening.cmi \ - middle_end/flambda_utils.cmi \ - middle_end/flambda.cmi \ - middle_end/find_recursive_functions.cmi \ - middle_end/effect_analysis.cmi \ - middle_end/debuginfo.cmi \ + middle_end/flambda/freshening.cmi \ + middle_end/flambda/flambda_utils.cmi \ + middle_end/flambda/flambda.cmi \ + middle_end/flambda/find_recursive_functions.cmi \ + middle_end/flambda/effect_analysis.cmi \ + bytecomp/debuginfo.cmi \ utils/config.cmi \ - middle_end/base_types/closure_origin.cmi \ - middle_end/base_types/closure_id.cmi \ + middle_end/flambda/base_types/closure_origin.cmi \ + middle_end/flambda/base_types/closure_id.cmi \ utils/clflags.cmi \ - asmcomp/clambda_primitives.cmi \ + middle_end/clambda_primitives.cmi \ middle_end/backend_intf.cmi \ - middle_end/allocated_const.cmi \ - middle_end/inline_and_simplify.cmi -middle_end/inline_and_simplify.cmx : \ + middle_end/flambda/allocated_const.cmi \ + middle_end/flambda/inline_and_simplify.cmi +middle_end/flambda/inline_and_simplify.cmx : \ utils/warnings.cmx \ - middle_end/base_types/variable.cmx \ - middle_end/base_types/var_within_closure.cmx \ - middle_end/unbox_specialised_args.cmx \ - middle_end/unbox_free_vars_of_closures.cmx \ - middle_end/unbox_closures.cmx \ - middle_end/base_types/tag.cmx \ - middle_end/base_types/symbol.cmx \ - middle_end/base_types/static_exception.cmx \ - middle_end/simplify_primitives.cmx \ - middle_end/simple_value_approx.cmx \ - middle_end/remove_unused_arguments.cmx \ - middle_end/remove_free_vars_equal_to_args.cmx \ - middle_end/projection.cmx \ + middle_end/variable.cmx \ + middle_end/flambda/base_types/var_within_closure.cmx \ + middle_end/flambda/unbox_specialised_args.cmx \ + middle_end/flambda/unbox_free_vars_of_closures.cmx \ + middle_end/flambda/unbox_closures.cmx \ + middle_end/flambda/base_types/tag.cmx \ + middle_end/symbol.cmx \ + middle_end/flambda/base_types/static_exception.cmx \ + middle_end/flambda/simplify_primitives.cmx \ + middle_end/flambda/simple_value_approx.cmx \ + middle_end/flambda/remove_unused_arguments.cmx \ + middle_end/flambda/remove_free_vars_equal_to_args.cmx \ + middle_end/flambda/projection.cmx \ typing/predef.cmx \ - middle_end/parameter.cmx \ + middle_end/flambda/parameter.cmx \ utils/misc.cmx \ parsing/location.cmx \ - middle_end/lift_code.cmx \ + middle_end/flambda/lift_code.cmx \ bytecomp/lambda.cmx \ - middle_end/invariant_params.cmx \ + middle_end/flambda/invariant_params.cmx \ middle_end/internal_variable_names.cmx \ - middle_end/int_replace_polymorphic_compare.cmx \ - middle_end/inlining_stats.cmx \ - middle_end/inlining_decision.cmx \ - middle_end/inlining_cost.cmx \ - middle_end/inline_and_simplify_aux.cmx \ + utils/int_replace_polymorphic_compare.cmx \ + middle_end/flambda/inlining_stats.cmx \ + middle_end/flambda/inlining_decision.cmx \ + middle_end/flambda/inlining_cost.cmx \ + middle_end/flambda/inline_and_simplify_aux.cmx \ + middle_end/flambda/import_approx.cmx \ typing/ident.cmx \ - middle_end/freshening.cmx \ - middle_end/flambda_utils.cmx \ - middle_end/flambda.cmx \ - middle_end/find_recursive_functions.cmx \ - middle_end/effect_analysis.cmx \ - middle_end/debuginfo.cmx \ + middle_end/flambda/freshening.cmx \ + middle_end/flambda/flambda_utils.cmx \ + middle_end/flambda/flambda.cmx \ + middle_end/flambda/find_recursive_functions.cmx \ + middle_end/flambda/effect_analysis.cmx \ + bytecomp/debuginfo.cmx \ utils/config.cmx \ - middle_end/base_types/closure_origin.cmx \ - middle_end/base_types/closure_id.cmx \ + middle_end/flambda/base_types/closure_origin.cmx \ + middle_end/flambda/base_types/closure_id.cmx \ utils/clflags.cmx \ - asmcomp/clambda_primitives.cmx \ + middle_end/clambda_primitives.cmx \ middle_end/backend_intf.cmi \ - middle_end/allocated_const.cmx \ - middle_end/inline_and_simplify.cmi -middle_end/inline_and_simplify.cmi : \ - middle_end/base_types/variable.cmi \ - middle_end/inline_and_simplify_aux.cmi \ - middle_end/flambda.cmi \ + middle_end/flambda/allocated_const.cmx \ + middle_end/flambda/inline_and_simplify.cmi +middle_end/flambda/inline_and_simplify.cmi : \ + middle_end/variable.cmi \ + middle_end/flambda/inline_and_simplify_aux.cmi \ + middle_end/flambda/flambda.cmi \ middle_end/backend_intf.cmi -middle_end/inline_and_simplify_aux.cmo : \ - middle_end/base_types/variable.cmi \ - middle_end/base_types/var_within_closure.cmi \ - middle_end/base_types/symbol.cmi \ - middle_end/base_types/static_exception.cmi \ - middle_end/simple_value_approx.cmi \ - middle_end/base_types/set_of_closures_origin.cmi \ - middle_end/projection.cmi \ - middle_end/parameter.cmi \ - middle_end/base_types/mutable_variable.cmi \ - utils/misc.cmi \ - middle_end/int_replace_polymorphic_compare.cmi \ - middle_end/inlining_stats.cmi \ - middle_end/inlining_cost.cmi \ - middle_end/freshening.cmi \ - middle_end/flambda_utils.cmi \ - middle_end/flambda.cmi \ - middle_end/debuginfo.cmi \ - middle_end/base_types/compilation_unit.cmi \ - middle_end/base_types/closure_origin.cmi \ - middle_end/base_types/closure_id.cmi \ +middle_end/flambda/inline_and_simplify_aux.cmo : \ + middle_end/variable.cmi \ + middle_end/flambda/base_types/var_within_closure.cmi \ + middle_end/symbol.cmi \ + middle_end/flambda/base_types/static_exception.cmi \ + middle_end/flambda/simple_value_approx.cmi \ + middle_end/flambda/base_types/set_of_closures_origin.cmi \ + middle_end/flambda/projection.cmi \ + middle_end/flambda/parameter.cmi \ + middle_end/flambda/base_types/mutable_variable.cmi \ + utils/misc.cmi \ + utils/int_replace_polymorphic_compare.cmi \ + middle_end/flambda/inlining_stats.cmi \ + middle_end/flambda/inlining_cost.cmi \ + middle_end/flambda/import_approx.cmi \ + middle_end/flambda/freshening.cmi \ + middle_end/flambda/flambda_utils.cmi \ + middle_end/flambda/flambda.cmi \ + bytecomp/debuginfo.cmi \ + middle_end/compilation_unit.cmi \ + middle_end/flambda/base_types/closure_origin.cmi \ + middle_end/flambda/base_types/closure_id.cmi \ utils/clflags.cmi \ middle_end/backend_intf.cmi \ - middle_end/inline_and_simplify_aux.cmi -middle_end/inline_and_simplify_aux.cmx : \ - middle_end/base_types/variable.cmx \ - middle_end/base_types/var_within_closure.cmx \ - middle_end/base_types/symbol.cmx \ - middle_end/base_types/static_exception.cmx \ - middle_end/simple_value_approx.cmx \ - middle_end/base_types/set_of_closures_origin.cmx \ - middle_end/projection.cmx \ - middle_end/parameter.cmx \ - middle_end/base_types/mutable_variable.cmx \ - utils/misc.cmx \ - middle_end/int_replace_polymorphic_compare.cmx \ - middle_end/inlining_stats.cmx \ - middle_end/inlining_cost.cmx \ - middle_end/freshening.cmx \ - middle_end/flambda_utils.cmx \ - middle_end/flambda.cmx \ - middle_end/debuginfo.cmx \ - middle_end/base_types/compilation_unit.cmx \ - middle_end/base_types/closure_origin.cmx \ - middle_end/base_types/closure_id.cmx \ + middle_end/flambda/inline_and_simplify_aux.cmi +middle_end/flambda/inline_and_simplify_aux.cmx : \ + middle_end/variable.cmx \ + middle_end/flambda/base_types/var_within_closure.cmx \ + middle_end/symbol.cmx \ + middle_end/flambda/base_types/static_exception.cmx \ + middle_end/flambda/simple_value_approx.cmx \ + middle_end/flambda/base_types/set_of_closures_origin.cmx \ + middle_end/flambda/projection.cmx \ + middle_end/flambda/parameter.cmx \ + middle_end/flambda/base_types/mutable_variable.cmx \ + utils/misc.cmx \ + utils/int_replace_polymorphic_compare.cmx \ + middle_end/flambda/inlining_stats.cmx \ + middle_end/flambda/inlining_cost.cmx \ + middle_end/flambda/import_approx.cmx \ + middle_end/flambda/freshening.cmx \ + middle_end/flambda/flambda_utils.cmx \ + middle_end/flambda/flambda.cmx \ + bytecomp/debuginfo.cmx \ + middle_end/compilation_unit.cmx \ + middle_end/flambda/base_types/closure_origin.cmx \ + middle_end/flambda/base_types/closure_id.cmx \ utils/clflags.cmx \ middle_end/backend_intf.cmi \ - middle_end/inline_and_simplify_aux.cmi -middle_end/inline_and_simplify_aux.cmi : \ - middle_end/base_types/variable.cmi \ - middle_end/base_types/symbol.cmi \ - middle_end/base_types/static_exception.cmi \ - middle_end/simple_value_approx.cmi \ - middle_end/base_types/set_of_closures_origin.cmi \ - middle_end/projection.cmi \ - middle_end/base_types/mutable_variable.cmi \ - middle_end/inlining_stats_types.cmi \ - middle_end/inlining_cost.cmi \ - middle_end/freshening.cmi \ - middle_end/flambda.cmi \ - middle_end/debuginfo.cmi \ - middle_end/base_types/closure_origin.cmi \ - middle_end/base_types/closure_id.cmi \ + middle_end/flambda/inline_and_simplify_aux.cmi +middle_end/flambda/inline_and_simplify_aux.cmi : \ + middle_end/variable.cmi \ + middle_end/symbol.cmi \ + middle_end/flambda/base_types/static_exception.cmi \ + middle_end/flambda/simple_value_approx.cmi \ + middle_end/flambda/base_types/set_of_closures_origin.cmi \ + middle_end/flambda/projection.cmi \ + middle_end/flambda/base_types/mutable_variable.cmi \ + middle_end/flambda/inlining_stats_types.cmi \ + middle_end/flambda/inlining_cost.cmi \ + middle_end/flambda/freshening.cmi \ + middle_end/flambda/flambda.cmi \ + bytecomp/debuginfo.cmi \ + middle_end/flambda/base_types/closure_origin.cmi \ + middle_end/flambda/base_types/closure_id.cmi \ middle_end/backend_intf.cmi -middle_end/inlining_cost.cmo : \ - middle_end/base_types/variable.cmi \ - middle_end/projection.cmi \ +middle_end/flambda/inlining_cost.cmo : \ + middle_end/variable.cmi \ + middle_end/flambda/projection.cmi \ typing/primitive.cmi \ utils/misc.cmi \ - middle_end/int_replace_polymorphic_compare.cmi \ - middle_end/flambda_iterators.cmi \ - middle_end/flambda.cmi \ + utils/int_replace_polymorphic_compare.cmi \ + middle_end/flambda/flambda_iterators.cmi \ + middle_end/flambda/flambda.cmi \ utils/clflags.cmi \ - asmcomp/clambda_primitives.cmi \ - middle_end/inlining_cost.cmi -middle_end/inlining_cost.cmx : \ - middle_end/base_types/variable.cmx \ - middle_end/projection.cmx \ + middle_end/clambda_primitives.cmi \ + middle_end/flambda/inlining_cost.cmi +middle_end/flambda/inlining_cost.cmx : \ + middle_end/variable.cmx \ + middle_end/flambda/projection.cmx \ typing/primitive.cmx \ utils/misc.cmx \ - middle_end/int_replace_polymorphic_compare.cmx \ - middle_end/flambda_iterators.cmx \ - middle_end/flambda.cmx \ + utils/int_replace_polymorphic_compare.cmx \ + middle_end/flambda/flambda_iterators.cmx \ + middle_end/flambda/flambda.cmx \ utils/clflags.cmx \ - asmcomp/clambda_primitives.cmx \ - middle_end/inlining_cost.cmi -middle_end/inlining_cost.cmi : \ - middle_end/projection.cmi \ - middle_end/flambda.cmi -middle_end/inlining_decision.cmo : \ - middle_end/base_types/variable.cmi \ - middle_end/base_types/var_within_closure.cmi \ - middle_end/simple_value_approx.cmi \ - middle_end/parameter.cmi \ + middle_end/clambda_primitives.cmx \ + middle_end/flambda/inlining_cost.cmi +middle_end/flambda/inlining_cost.cmi : \ + middle_end/flambda/projection.cmi \ + middle_end/flambda/flambda.cmi +middle_end/flambda/inlining_decision.cmo : \ + middle_end/variable.cmi \ + middle_end/flambda/base_types/var_within_closure.cmi \ + middle_end/flambda/simple_value_approx.cmi \ + middle_end/flambda/parameter.cmi \ utils/misc.cmi \ bytecomp/lambda.cmi \ - middle_end/int_replace_polymorphic_compare.cmi \ - middle_end/inlining_transforms.cmi \ - middle_end/inlining_stats_types.cmi \ - middle_end/inlining_cost.cmi \ - middle_end/inline_and_simplify_aux.cmi \ - middle_end/flambda.cmi \ - middle_end/base_types/closure_id.cmi \ + utils/int_replace_polymorphic_compare.cmi \ + middle_end/flambda/inlining_transforms.cmi \ + middle_end/flambda/inlining_stats_types.cmi \ + middle_end/flambda/inlining_cost.cmi \ + middle_end/flambda/inline_and_simplify_aux.cmi \ + middle_end/flambda/flambda.cmi \ + middle_end/flambda/base_types/closure_id.cmi \ utils/clflags.cmi \ - middle_end/inlining_decision.cmi -middle_end/inlining_decision.cmx : \ - middle_end/base_types/variable.cmx \ - middle_end/base_types/var_within_closure.cmx \ - middle_end/simple_value_approx.cmx \ - middle_end/parameter.cmx \ + middle_end/flambda/inlining_decision.cmi +middle_end/flambda/inlining_decision.cmx : \ + middle_end/variable.cmx \ + middle_end/flambda/base_types/var_within_closure.cmx \ + middle_end/flambda/simple_value_approx.cmx \ + middle_end/flambda/parameter.cmx \ utils/misc.cmx \ bytecomp/lambda.cmx \ - middle_end/int_replace_polymorphic_compare.cmx \ - middle_end/inlining_transforms.cmx \ - middle_end/inlining_stats_types.cmx \ - middle_end/inlining_cost.cmx \ - middle_end/inline_and_simplify_aux.cmx \ - middle_end/flambda.cmx \ - middle_end/base_types/closure_id.cmx \ + utils/int_replace_polymorphic_compare.cmx \ + middle_end/flambda/inlining_transforms.cmx \ + middle_end/flambda/inlining_stats_types.cmx \ + middle_end/flambda/inlining_cost.cmx \ + middle_end/flambda/inline_and_simplify_aux.cmx \ + middle_end/flambda/flambda.cmx \ + middle_end/flambda/base_types/closure_id.cmx \ utils/clflags.cmx \ - middle_end/inlining_decision.cmi -middle_end/inlining_decision.cmi : \ - middle_end/base_types/variable.cmi \ - middle_end/simple_value_approx.cmi \ + middle_end/flambda/inlining_decision.cmi +middle_end/flambda/inlining_decision.cmi : \ + middle_end/variable.cmi \ + middle_end/flambda/simple_value_approx.cmi \ bytecomp/lambda.cmi \ - middle_end/inlining_decision_intf.cmi \ - middle_end/inline_and_simplify_aux.cmi \ - middle_end/flambda.cmi \ - middle_end/debuginfo.cmi \ - middle_end/base_types/closure_id.cmi -middle_end/inlining_decision_intf.cmi : \ - middle_end/base_types/variable.cmi \ - middle_end/simple_value_approx.cmi \ - middle_end/inline_and_simplify_aux.cmi \ - middle_end/flambda.cmi \ - middle_end/debuginfo.cmi \ - middle_end/base_types/closure_id.cmi -middle_end/inlining_stats.cmo : \ - utils/misc.cmi \ - middle_end/int_replace_polymorphic_compare.cmi \ - middle_end/inlining_stats_types.cmi \ - middle_end/debuginfo.cmi \ - middle_end/base_types/closure_id.cmi \ + middle_end/flambda/inlining_decision_intf.cmi \ + middle_end/flambda/inline_and_simplify_aux.cmi \ + middle_end/flambda/flambda.cmi \ + bytecomp/debuginfo.cmi \ + middle_end/flambda/base_types/closure_id.cmi +middle_end/flambda/inlining_decision_intf.cmi : \ + middle_end/variable.cmi \ + middle_end/flambda/simple_value_approx.cmi \ + middle_end/flambda/inline_and_simplify_aux.cmi \ + middle_end/flambda/flambda.cmi \ + bytecomp/debuginfo.cmi \ + middle_end/flambda/base_types/closure_id.cmi +middle_end/flambda/inlining_stats.cmo : \ + utils/misc.cmi \ + utils/int_replace_polymorphic_compare.cmi \ + middle_end/flambda/inlining_stats_types.cmi \ + bytecomp/debuginfo.cmi \ + middle_end/flambda/base_types/closure_id.cmi \ utils/clflags.cmi \ - middle_end/inlining_stats.cmi -middle_end/inlining_stats.cmx : \ + middle_end/flambda/inlining_stats.cmi +middle_end/flambda/inlining_stats.cmx : \ utils/misc.cmx \ - middle_end/int_replace_polymorphic_compare.cmx \ - middle_end/inlining_stats_types.cmx \ - middle_end/debuginfo.cmx \ - middle_end/base_types/closure_id.cmx \ + utils/int_replace_polymorphic_compare.cmx \ + middle_end/flambda/inlining_stats_types.cmx \ + bytecomp/debuginfo.cmx \ + middle_end/flambda/base_types/closure_id.cmx \ utils/clflags.cmx \ - middle_end/inlining_stats.cmi -middle_end/inlining_stats.cmi : \ - middle_end/inlining_stats_types.cmi \ - middle_end/debuginfo.cmi \ - middle_end/base_types/closure_id.cmi -middle_end/inlining_stats_types.cmo : \ - middle_end/int_replace_polymorphic_compare.cmi \ - middle_end/inlining_cost.cmi \ - middle_end/inlining_stats_types.cmi -middle_end/inlining_stats_types.cmx : \ - middle_end/int_replace_polymorphic_compare.cmx \ - middle_end/inlining_cost.cmx \ - middle_end/inlining_stats_types.cmi -middle_end/inlining_stats_types.cmi : \ - middle_end/inlining_cost.cmi -middle_end/inlining_transforms.cmo : \ - middle_end/base_types/variable.cmi \ - middle_end/base_types/var_within_closure.cmi \ - middle_end/simple_value_approx.cmi \ - middle_end/projection.cmi \ - middle_end/parameter.cmi \ + middle_end/flambda/inlining_stats.cmi +middle_end/flambda/inlining_stats.cmi : \ + middle_end/flambda/inlining_stats_types.cmi \ + bytecomp/debuginfo.cmi \ + middle_end/flambda/base_types/closure_id.cmi +middle_end/flambda/inlining_stats_types.cmo : \ + utils/int_replace_polymorphic_compare.cmi \ + middle_end/flambda/inlining_cost.cmi \ + middle_end/flambda/inlining_stats_types.cmi +middle_end/flambda/inlining_stats_types.cmx : \ + utils/int_replace_polymorphic_compare.cmx \ + middle_end/flambda/inlining_cost.cmx \ + middle_end/flambda/inlining_stats_types.cmi +middle_end/flambda/inlining_stats_types.cmi : \ + middle_end/flambda/inlining_cost.cmi +middle_end/flambda/inlining_transforms.cmo : \ + middle_end/variable.cmi \ + middle_end/flambda/base_types/var_within_closure.cmi \ + middle_end/flambda/simple_value_approx.cmi \ + middle_end/flambda/projection.cmi \ + middle_end/flambda/parameter.cmi \ bytecomp/lambda.cmi \ middle_end/internal_variable_names.cmi \ - middle_end/int_replace_polymorphic_compare.cmi \ - middle_end/inlining_decision_intf.cmi \ - middle_end/inlining_cost.cmi \ - middle_end/inline_and_simplify_aux.cmi \ - middle_end/flambda_utils.cmi \ - middle_end/flambda_iterators.cmi \ - middle_end/flambda.cmi \ - middle_end/debuginfo.cmi \ - middle_end/base_types/compilation_unit.cmi \ - middle_end/base_types/closure_origin.cmi \ - middle_end/base_types/closure_id.cmi \ - middle_end/inlining_transforms.cmi -middle_end/inlining_transforms.cmx : \ - middle_end/base_types/variable.cmx \ - middle_end/base_types/var_within_closure.cmx \ - middle_end/simple_value_approx.cmx \ - middle_end/projection.cmx \ - middle_end/parameter.cmx \ + utils/int_replace_polymorphic_compare.cmi \ + middle_end/flambda/inlining_decision_intf.cmi \ + middle_end/flambda/inlining_cost.cmi \ + middle_end/flambda/inline_and_simplify_aux.cmi \ + middle_end/flambda/flambda_utils.cmi \ + middle_end/flambda/flambda_iterators.cmi \ + middle_end/flambda/flambda.cmi \ + bytecomp/debuginfo.cmi \ + middle_end/compilation_unit.cmi \ + middle_end/flambda/base_types/closure_origin.cmi \ + middle_end/flambda/base_types/closure_id.cmi \ + middle_end/flambda/inlining_transforms.cmi +middle_end/flambda/inlining_transforms.cmx : \ + middle_end/variable.cmx \ + middle_end/flambda/base_types/var_within_closure.cmx \ + middle_end/flambda/simple_value_approx.cmx \ + middle_end/flambda/projection.cmx \ + middle_end/flambda/parameter.cmx \ bytecomp/lambda.cmx \ middle_end/internal_variable_names.cmx \ - middle_end/int_replace_polymorphic_compare.cmx \ - middle_end/inlining_decision_intf.cmi \ - middle_end/inlining_cost.cmx \ - middle_end/inline_and_simplify_aux.cmx \ - middle_end/flambda_utils.cmx \ - middle_end/flambda_iterators.cmx \ - middle_end/flambda.cmx \ - middle_end/debuginfo.cmx \ - middle_end/base_types/compilation_unit.cmx \ - middle_end/base_types/closure_origin.cmx \ - middle_end/base_types/closure_id.cmx \ - middle_end/inlining_transforms.cmi -middle_end/inlining_transforms.cmi : \ - middle_end/base_types/variable.cmi \ - middle_end/simple_value_approx.cmi \ - bytecomp/lambda.cmi \ - middle_end/inlining_decision_intf.cmi \ - middle_end/inline_and_simplify_aux.cmi \ - middle_end/flambda.cmi \ - middle_end/debuginfo.cmi \ - middle_end/base_types/closure_id.cmi -middle_end/int_replace_polymorphic_compare.cmo : \ - middle_end/int_replace_polymorphic_compare.cmi -middle_end/int_replace_polymorphic_compare.cmx : \ - middle_end/int_replace_polymorphic_compare.cmi -middle_end/int_replace_polymorphic_compare.cmi : -middle_end/internal_variable_names.cmo : \ - parsing/location.cmi \ + utils/int_replace_polymorphic_compare.cmx \ + middle_end/flambda/inlining_decision_intf.cmi \ + middle_end/flambda/inlining_cost.cmx \ + middle_end/flambda/inline_and_simplify_aux.cmx \ + middle_end/flambda/flambda_utils.cmx \ + middle_end/flambda/flambda_iterators.cmx \ + middle_end/flambda/flambda.cmx \ + bytecomp/debuginfo.cmx \ + middle_end/compilation_unit.cmx \ + middle_end/flambda/base_types/closure_origin.cmx \ + middle_end/flambda/base_types/closure_id.cmx \ + middle_end/flambda/inlining_transforms.cmi +middle_end/flambda/inlining_transforms.cmi : \ + middle_end/variable.cmi \ + middle_end/flambda/simple_value_approx.cmi \ bytecomp/lambda.cmi \ - middle_end/int_replace_polymorphic_compare.cmi \ - middle_end/internal_variable_names.cmi -middle_end/internal_variable_names.cmx : \ - parsing/location.cmx \ - bytecomp/lambda.cmx \ - middle_end/int_replace_polymorphic_compare.cmx \ - middle_end/internal_variable_names.cmi -middle_end/internal_variable_names.cmi : \ - parsing/location.cmi \ - bytecomp/lambda.cmi -middle_end/invariant_params.cmo : \ - middle_end/base_types/variable.cmi \ - middle_end/base_types/symbol.cmi \ - middle_end/parameter.cmi \ - middle_end/int_replace_polymorphic_compare.cmi \ - middle_end/flambda_utils.cmi \ - middle_end/flambda_iterators.cmi \ - middle_end/flambda.cmi \ - middle_end/base_types/closure_id.cmi \ + middle_end/flambda/inlining_decision_intf.cmi \ + middle_end/flambda/inline_and_simplify_aux.cmi \ + middle_end/flambda/flambda.cmi \ + bytecomp/debuginfo.cmi \ + middle_end/flambda/base_types/closure_id.cmi +middle_end/flambda/invariant_params.cmo : \ + middle_end/variable.cmi \ + middle_end/symbol.cmi \ + middle_end/flambda/parameter.cmi \ + utils/int_replace_polymorphic_compare.cmi \ + middle_end/flambda/flambda_utils.cmi \ + middle_end/flambda/flambda_iterators.cmi \ + middle_end/flambda/flambda.cmi \ + middle_end/flambda/base_types/closure_id.cmi \ utils/clflags.cmi \ middle_end/backend_intf.cmi \ - middle_end/invariant_params.cmi -middle_end/invariant_params.cmx : \ - middle_end/base_types/variable.cmx \ - middle_end/base_types/symbol.cmx \ - middle_end/parameter.cmx \ - middle_end/int_replace_polymorphic_compare.cmx \ - middle_end/flambda_utils.cmx \ - middle_end/flambda_iterators.cmx \ - middle_end/flambda.cmx \ - middle_end/base_types/closure_id.cmx \ + middle_end/flambda/invariant_params.cmi +middle_end/flambda/invariant_params.cmx : \ + middle_end/variable.cmx \ + middle_end/symbol.cmx \ + middle_end/flambda/parameter.cmx \ + utils/int_replace_polymorphic_compare.cmx \ + middle_end/flambda/flambda_utils.cmx \ + middle_end/flambda/flambda_iterators.cmx \ + middle_end/flambda/flambda.cmx \ + middle_end/flambda/base_types/closure_id.cmx \ utils/clflags.cmx \ middle_end/backend_intf.cmi \ - middle_end/invariant_params.cmi -middle_end/invariant_params.cmi : \ - middle_end/base_types/variable.cmi \ - middle_end/flambda.cmi \ + middle_end/flambda/invariant_params.cmi +middle_end/flambda/invariant_params.cmi : \ + middle_end/variable.cmi \ + middle_end/flambda/flambda.cmi \ middle_end/backend_intf.cmi -middle_end/lift_code.cmo : \ - middle_end/base_types/variable.cmi \ +middle_end/flambda/lift_code.cmo : \ + middle_end/variable.cmi \ utils/strongly_connected_components.cmi \ - middle_end/int_replace_polymorphic_compare.cmi \ - middle_end/flambda_iterators.cmi \ - middle_end/flambda.cmi \ - middle_end/base_types/compilation_unit.cmi \ - middle_end/lift_code.cmi -middle_end/lift_code.cmx : \ - middle_end/base_types/variable.cmx \ + utils/int_replace_polymorphic_compare.cmi \ + middle_end/flambda/flambda_iterators.cmi \ + middle_end/flambda/flambda.cmi \ + middle_end/compilation_unit.cmi \ + middle_end/flambda/lift_code.cmi +middle_end/flambda/lift_code.cmx : \ + middle_end/variable.cmx \ utils/strongly_connected_components.cmx \ - middle_end/int_replace_polymorphic_compare.cmx \ - middle_end/flambda_iterators.cmx \ - middle_end/flambda.cmx \ - middle_end/base_types/compilation_unit.cmx \ - middle_end/lift_code.cmi -middle_end/lift_code.cmi : \ - middle_end/base_types/variable.cmi \ + utils/int_replace_polymorphic_compare.cmx \ + middle_end/flambda/flambda_iterators.cmx \ + middle_end/flambda/flambda.cmx \ + middle_end/compilation_unit.cmx \ + middle_end/flambda/lift_code.cmi +middle_end/flambda/lift_code.cmi : \ + middle_end/variable.cmi \ middle_end/internal_variable_names.cmi \ - middle_end/flambda.cmi -middle_end/lift_constants.cmo : \ - middle_end/base_types/variable.cmi \ - middle_end/base_types/var_within_closure.cmi \ - middle_end/base_types/tag.cmi \ - middle_end/base_types/symbol.cmi \ + middle_end/flambda/flambda.cmi +middle_end/flambda/lift_constants.cmo : \ + middle_end/variable.cmi \ + middle_end/flambda/base_types/var_within_closure.cmi \ + middle_end/flambda/base_types/tag.cmi \ + middle_end/symbol.cmi \ utils/strongly_connected_components.cmi \ - middle_end/simple_value_approx.cmi \ + middle_end/flambda/simple_value_approx.cmi \ utils/misc.cmi \ middle_end/internal_variable_names.cmi \ - middle_end/int_replace_polymorphic_compare.cmi \ - middle_end/inconstant_idents.cmi \ - middle_end/flambda_utils.cmi \ - middle_end/flambda_iterators.cmi \ - middle_end/flambda.cmi \ - middle_end/base_types/compilation_unit.cmi \ - middle_end/base_types/closure_id.cmi \ + utils/int_replace_polymorphic_compare.cmi \ + middle_end/flambda/inconstant_idents.cmi \ + middle_end/flambda/import_approx.cmi \ + middle_end/flambda/flambda_utils.cmi \ + middle_end/flambda/flambda_iterators.cmi \ + middle_end/flambda/flambda.cmi \ + middle_end/compilation_unit.cmi \ + middle_end/flambda/base_types/closure_id.cmi \ middle_end/backend_intf.cmi \ parsing/asttypes.cmi \ - middle_end/allocated_const.cmi \ - middle_end/alias_analysis.cmi \ - middle_end/lift_constants.cmi -middle_end/lift_constants.cmx : \ - middle_end/base_types/variable.cmx \ - middle_end/base_types/var_within_closure.cmx \ - middle_end/base_types/tag.cmx \ - middle_end/base_types/symbol.cmx \ + middle_end/flambda/allocated_const.cmi \ + middle_end/flambda/alias_analysis.cmi \ + middle_end/flambda/lift_constants.cmi +middle_end/flambda/lift_constants.cmx : \ + middle_end/variable.cmx \ + middle_end/flambda/base_types/var_within_closure.cmx \ + middle_end/flambda/base_types/tag.cmx \ + middle_end/symbol.cmx \ utils/strongly_connected_components.cmx \ - middle_end/simple_value_approx.cmx \ + middle_end/flambda/simple_value_approx.cmx \ utils/misc.cmx \ middle_end/internal_variable_names.cmx \ - middle_end/int_replace_polymorphic_compare.cmx \ - middle_end/inconstant_idents.cmx \ - middle_end/flambda_utils.cmx \ - middle_end/flambda_iterators.cmx \ - middle_end/flambda.cmx \ - middle_end/base_types/compilation_unit.cmx \ - middle_end/base_types/closure_id.cmx \ + utils/int_replace_polymorphic_compare.cmx \ + middle_end/flambda/inconstant_idents.cmx \ + middle_end/flambda/import_approx.cmx \ + middle_end/flambda/flambda_utils.cmx \ + middle_end/flambda/flambda_iterators.cmx \ + middle_end/flambda/flambda.cmx \ + middle_end/compilation_unit.cmx \ + middle_end/flambda/base_types/closure_id.cmx \ middle_end/backend_intf.cmi \ parsing/asttypes.cmi \ - middle_end/allocated_const.cmx \ - middle_end/alias_analysis.cmx \ - middle_end/lift_constants.cmi -middle_end/lift_constants.cmi : \ - middle_end/flambda.cmi \ + middle_end/flambda/allocated_const.cmx \ + middle_end/flambda/alias_analysis.cmx \ + middle_end/flambda/lift_constants.cmi +middle_end/flambda/lift_constants.cmi : \ + middle_end/flambda/flambda.cmi \ middle_end/backend_intf.cmi -middle_end/lift_let_to_initialize_symbol.cmo : \ - middle_end/base_types/variable.cmi \ - middle_end/base_types/tag.cmi \ - middle_end/base_types/symbol.cmi \ +middle_end/flambda/lift_let_to_initialize_symbol.cmo : \ + middle_end/variable.cmi \ + middle_end/flambda/base_types/tag.cmi \ + middle_end/symbol.cmi \ middle_end/internal_variable_names.cmi \ - middle_end/int_replace_polymorphic_compare.cmi \ - middle_end/flambda_utils.cmi \ - middle_end/flambda.cmi \ - middle_end/debuginfo.cmi \ - parsing/asttypes.cmi \ - middle_end/lift_let_to_initialize_symbol.cmi -middle_end/lift_let_to_initialize_symbol.cmx : \ - middle_end/base_types/variable.cmx \ - middle_end/base_types/tag.cmx \ - middle_end/base_types/symbol.cmx \ + utils/int_replace_polymorphic_compare.cmi \ + middle_end/flambda/flambda_utils.cmi \ + middle_end/flambda/flambda.cmi \ + bytecomp/debuginfo.cmi \ + parsing/asttypes.cmi \ + middle_end/flambda/lift_let_to_initialize_symbol.cmi +middle_end/flambda/lift_let_to_initialize_symbol.cmx : \ + middle_end/variable.cmx \ + middle_end/flambda/base_types/tag.cmx \ + middle_end/symbol.cmx \ middle_end/internal_variable_names.cmx \ - middle_end/int_replace_polymorphic_compare.cmx \ - middle_end/flambda_utils.cmx \ - middle_end/flambda.cmx \ - middle_end/debuginfo.cmx \ - parsing/asttypes.cmi \ - middle_end/lift_let_to_initialize_symbol.cmi -middle_end/lift_let_to_initialize_symbol.cmi : \ - middle_end/flambda.cmi \ + utils/int_replace_polymorphic_compare.cmx \ + middle_end/flambda/flambda_utils.cmx \ + middle_end/flambda/flambda.cmx \ + bytecomp/debuginfo.cmx \ + parsing/asttypes.cmi \ + middle_end/flambda/lift_let_to_initialize_symbol.cmi +middle_end/flambda/lift_let_to_initialize_symbol.cmi : \ + middle_end/flambda/flambda.cmi \ middle_end/backend_intf.cmi -middle_end/middle_end.cmo : \ - utils/warnings.cmi \ - middle_end/base_types/variable.cmi \ - middle_end/base_types/symbol.cmi \ - middle_end/share_constants.cmi \ - middle_end/remove_unused_program_constructs.cmi \ - middle_end/remove_unused_closure_vars.cmi \ - middle_end/ref_to_variables.cmi \ - utils/profile.cmi \ - utils/misc.cmi \ - parsing/location.cmi \ - middle_end/lift_let_to_initialize_symbol.cmi \ - middle_end/lift_constants.cmi \ - middle_end/lift_code.cmi \ - middle_end/int_replace_polymorphic_compare.cmi \ - middle_end/inlining_cost.cmi \ - middle_end/inline_and_simplify.cmi \ - middle_end/initialize_symbol_to_let_symbol.cmi \ - middle_end/flambda_iterators.cmi \ - middle_end/flambda_invariants.cmi \ - middle_end/flambda.cmi \ - middle_end/debuginfo.cmi \ - middle_end/base_types/closure_id.cmi \ - middle_end/closure_conversion.cmi \ - utils/clflags.cmi \ - middle_end/backend_intf.cmi \ - middle_end/middle_end.cmi -middle_end/middle_end.cmx : \ - utils/warnings.cmx \ - middle_end/base_types/variable.cmx \ - middle_end/base_types/symbol.cmx \ - middle_end/share_constants.cmx \ - middle_end/remove_unused_program_constructs.cmx \ - middle_end/remove_unused_closure_vars.cmx \ - middle_end/ref_to_variables.cmx \ - utils/profile.cmx \ - utils/misc.cmx \ - parsing/location.cmx \ - middle_end/lift_let_to_initialize_symbol.cmx \ - middle_end/lift_constants.cmx \ - middle_end/lift_code.cmx \ - middle_end/int_replace_polymorphic_compare.cmx \ - middle_end/inlining_cost.cmx \ - middle_end/inline_and_simplify.cmx \ - middle_end/initialize_symbol_to_let_symbol.cmx \ - middle_end/flambda_iterators.cmx \ - middle_end/flambda_invariants.cmx \ - middle_end/flambda.cmx \ - middle_end/debuginfo.cmx \ - middle_end/base_types/closure_id.cmx \ - middle_end/closure_conversion.cmx \ - utils/clflags.cmx \ - middle_end/backend_intf.cmi \ - middle_end/middle_end.cmi -middle_end/middle_end.cmi : \ - bytecomp/lambda.cmi \ - typing/ident.cmi \ - middle_end/flambda.cmi \ - middle_end/backend_intf.cmi -middle_end/parameter.cmo : \ - middle_end/base_types/variable.cmi \ - middle_end/int_replace_polymorphic_compare.cmi \ +middle_end/flambda/parameter.cmo : \ + middle_end/variable.cmi \ + utils/int_replace_polymorphic_compare.cmi \ utils/identifiable.cmi \ - middle_end/parameter.cmi -middle_end/parameter.cmx : \ - middle_end/base_types/variable.cmx \ - middle_end/int_replace_polymorphic_compare.cmx \ + middle_end/flambda/parameter.cmi +middle_end/flambda/parameter.cmx : \ + middle_end/variable.cmx \ + utils/int_replace_polymorphic_compare.cmx \ utils/identifiable.cmx \ - middle_end/parameter.cmi -middle_end/parameter.cmi : \ - middle_end/base_types/variable.cmi \ + middle_end/flambda/parameter.cmi +middle_end/flambda/parameter.cmi : \ + middle_end/variable.cmi \ utils/identifiable.cmi \ - middle_end/base_types/compilation_unit.cmi -middle_end/pass_wrapper.cmo : \ - middle_end/int_replace_polymorphic_compare.cmi \ + middle_end/compilation_unit.cmi +middle_end/flambda/pass_wrapper.cmo : \ + utils/int_replace_polymorphic_compare.cmi \ utils/clflags.cmi \ - middle_end/pass_wrapper.cmi -middle_end/pass_wrapper.cmx : \ - middle_end/int_replace_polymorphic_compare.cmx \ + middle_end/flambda/pass_wrapper.cmi +middle_end/flambda/pass_wrapper.cmx : \ + utils/int_replace_polymorphic_compare.cmx \ utils/clflags.cmx \ - middle_end/pass_wrapper.cmi -middle_end/pass_wrapper.cmi : -middle_end/projection.cmo : \ - middle_end/base_types/variable.cmi \ - middle_end/base_types/var_within_closure.cmi \ - middle_end/int_replace_polymorphic_compare.cmi \ + middle_end/flambda/pass_wrapper.cmi +middle_end/flambda/pass_wrapper.cmi : +middle_end/flambda/projection.cmo : \ + middle_end/variable.cmi \ + middle_end/flambda/base_types/var_within_closure.cmi \ + utils/int_replace_polymorphic_compare.cmi \ utils/identifiable.cmi \ - middle_end/base_types/closure_id.cmi \ - middle_end/projection.cmi -middle_end/projection.cmx : \ - middle_end/base_types/variable.cmx \ - middle_end/base_types/var_within_closure.cmx \ - middle_end/int_replace_polymorphic_compare.cmx \ + middle_end/flambda/base_types/closure_id.cmi \ + middle_end/flambda/projection.cmi +middle_end/flambda/projection.cmx : \ + middle_end/variable.cmx \ + middle_end/flambda/base_types/var_within_closure.cmx \ + utils/int_replace_polymorphic_compare.cmx \ utils/identifiable.cmx \ - middle_end/base_types/closure_id.cmx \ - middle_end/projection.cmi -middle_end/projection.cmi : \ - middle_end/base_types/variable.cmi \ - middle_end/base_types/var_within_closure.cmi \ + middle_end/flambda/base_types/closure_id.cmx \ + middle_end/flambda/projection.cmi +middle_end/flambda/projection.cmi : \ + middle_end/variable.cmi \ + middle_end/flambda/base_types/var_within_closure.cmi \ utils/identifiable.cmi \ - middle_end/base_types/closure_id.cmi -middle_end/ref_to_variables.cmo : \ - middle_end/base_types/variable.cmi \ - middle_end/base_types/mutable_variable.cmi \ + middle_end/flambda/base_types/closure_id.cmi +middle_end/flambda/ref_to_variables.cmo : \ + middle_end/variable.cmi \ + middle_end/flambda/base_types/mutable_variable.cmi \ utils/misc.cmi \ bytecomp/lambda.cmi \ middle_end/internal_variable_names.cmi \ - middle_end/int_replace_polymorphic_compare.cmi \ - middle_end/flambda_iterators.cmi \ - middle_end/flambda.cmi \ + utils/int_replace_polymorphic_compare.cmi \ + middle_end/flambda/flambda_iterators.cmi \ + middle_end/flambda/flambda.cmi \ parsing/asttypes.cmi \ - middle_end/ref_to_variables.cmi -middle_end/ref_to_variables.cmx : \ - middle_end/base_types/variable.cmx \ - middle_end/base_types/mutable_variable.cmx \ + middle_end/flambda/ref_to_variables.cmi +middle_end/flambda/ref_to_variables.cmx : \ + middle_end/variable.cmx \ + middle_end/flambda/base_types/mutable_variable.cmx \ utils/misc.cmx \ bytecomp/lambda.cmx \ middle_end/internal_variable_names.cmx \ - middle_end/int_replace_polymorphic_compare.cmx \ - middle_end/flambda_iterators.cmx \ - middle_end/flambda.cmx \ - parsing/asttypes.cmi \ - middle_end/ref_to_variables.cmi -middle_end/ref_to_variables.cmi : \ - middle_end/flambda.cmi -middle_end/remove_free_vars_equal_to_args.cmo : \ - middle_end/base_types/variable.cmi \ - middle_end/pass_wrapper.cmi \ - middle_end/parameter.cmi \ - middle_end/int_replace_polymorphic_compare.cmi \ - middle_end/flambda_utils.cmi \ - middle_end/flambda.cmi \ - middle_end/remove_free_vars_equal_to_args.cmi -middle_end/remove_free_vars_equal_to_args.cmx : \ - middle_end/base_types/variable.cmx \ - middle_end/pass_wrapper.cmx \ - middle_end/parameter.cmx \ - middle_end/int_replace_polymorphic_compare.cmx \ - middle_end/flambda_utils.cmx \ - middle_end/flambda.cmx \ - middle_end/remove_free_vars_equal_to_args.cmi -middle_end/remove_free_vars_equal_to_args.cmi : \ - middle_end/flambda.cmi -middle_end/remove_unused_arguments.cmo : \ - middle_end/base_types/variable.cmi \ - middle_end/projection.cmi \ - middle_end/parameter.cmi \ - middle_end/invariant_params.cmi \ - middle_end/int_replace_polymorphic_compare.cmi \ - middle_end/flambda_utils.cmi \ - middle_end/flambda_iterators.cmi \ - middle_end/flambda.cmi \ - middle_end/find_recursive_functions.cmi \ - middle_end/base_types/compilation_unit.cmi \ - middle_end/base_types/closure_origin.cmi \ - middle_end/base_types/closure_id.cmi \ + utils/int_replace_polymorphic_compare.cmx \ + middle_end/flambda/flambda_iterators.cmx \ + middle_end/flambda/flambda.cmx \ + parsing/asttypes.cmi \ + middle_end/flambda/ref_to_variables.cmi +middle_end/flambda/ref_to_variables.cmi : \ + middle_end/flambda/flambda.cmi +middle_end/flambda/remove_free_vars_equal_to_args.cmo : \ + middle_end/variable.cmi \ + middle_end/flambda/pass_wrapper.cmi \ + middle_end/flambda/parameter.cmi \ + utils/int_replace_polymorphic_compare.cmi \ + middle_end/flambda/flambda_utils.cmi \ + middle_end/flambda/flambda.cmi \ + middle_end/flambda/remove_free_vars_equal_to_args.cmi +middle_end/flambda/remove_free_vars_equal_to_args.cmx : \ + middle_end/variable.cmx \ + middle_end/flambda/pass_wrapper.cmx \ + middle_end/flambda/parameter.cmx \ + utils/int_replace_polymorphic_compare.cmx \ + middle_end/flambda/flambda_utils.cmx \ + middle_end/flambda/flambda.cmx \ + middle_end/flambda/remove_free_vars_equal_to_args.cmi +middle_end/flambda/remove_free_vars_equal_to_args.cmi : \ + middle_end/flambda/flambda.cmi +middle_end/flambda/remove_unused_arguments.cmo : \ + middle_end/variable.cmi \ + middle_end/flambda/projection.cmi \ + middle_end/flambda/parameter.cmi \ + middle_end/flambda/invariant_params.cmi \ + utils/int_replace_polymorphic_compare.cmi \ + middle_end/flambda/flambda_utils.cmi \ + middle_end/flambda/flambda_iterators.cmi \ + middle_end/flambda/flambda.cmi \ + middle_end/flambda/find_recursive_functions.cmi \ + middle_end/compilation_unit.cmi \ + middle_end/flambda/base_types/closure_origin.cmi \ + middle_end/flambda/base_types/closure_id.cmi \ utils/clflags.cmi \ - middle_end/remove_unused_arguments.cmi -middle_end/remove_unused_arguments.cmx : \ - middle_end/base_types/variable.cmx \ - middle_end/projection.cmx \ - middle_end/parameter.cmx \ - middle_end/invariant_params.cmx \ - middle_end/int_replace_polymorphic_compare.cmx \ - middle_end/flambda_utils.cmx \ - middle_end/flambda_iterators.cmx \ - middle_end/flambda.cmx \ - middle_end/find_recursive_functions.cmx \ - middle_end/base_types/compilation_unit.cmx \ - middle_end/base_types/closure_origin.cmx \ - middle_end/base_types/closure_id.cmx \ + middle_end/flambda/remove_unused_arguments.cmi +middle_end/flambda/remove_unused_arguments.cmx : \ + middle_end/variable.cmx \ + middle_end/flambda/projection.cmx \ + middle_end/flambda/parameter.cmx \ + middle_end/flambda/invariant_params.cmx \ + utils/int_replace_polymorphic_compare.cmx \ + middle_end/flambda/flambda_utils.cmx \ + middle_end/flambda/flambda_iterators.cmx \ + middle_end/flambda/flambda.cmx \ + middle_end/flambda/find_recursive_functions.cmx \ + middle_end/compilation_unit.cmx \ + middle_end/flambda/base_types/closure_origin.cmx \ + middle_end/flambda/base_types/closure_id.cmx \ utils/clflags.cmx \ - middle_end/remove_unused_arguments.cmi -middle_end/remove_unused_arguments.cmi : \ - middle_end/flambda.cmi \ + middle_end/flambda/remove_unused_arguments.cmi +middle_end/flambda/remove_unused_arguments.cmi : \ + middle_end/flambda/flambda.cmi \ middle_end/backend_intf.cmi -middle_end/remove_unused_closure_vars.cmo : \ - middle_end/base_types/variable.cmi \ - middle_end/base_types/var_within_closure.cmi \ - middle_end/parameter.cmi \ - middle_end/int_replace_polymorphic_compare.cmi \ - middle_end/flambda_utils.cmi \ - middle_end/flambda_iterators.cmi \ - middle_end/flambda.cmi \ - middle_end/base_types/closure_id.cmi \ - middle_end/remove_unused_closure_vars.cmi -middle_end/remove_unused_closure_vars.cmx : \ - middle_end/base_types/variable.cmx \ - middle_end/base_types/var_within_closure.cmx \ - middle_end/parameter.cmx \ - middle_end/int_replace_polymorphic_compare.cmx \ - middle_end/flambda_utils.cmx \ - middle_end/flambda_iterators.cmx \ - middle_end/flambda.cmx \ - middle_end/base_types/closure_id.cmx \ - middle_end/remove_unused_closure_vars.cmi -middle_end/remove_unused_closure_vars.cmi : \ - middle_end/flambda.cmi -middle_end/remove_unused_program_constructs.cmo : \ - middle_end/base_types/symbol.cmi \ - middle_end/int_replace_polymorphic_compare.cmi \ - middle_end/flambda.cmi \ - middle_end/effect_analysis.cmi \ - middle_end/remove_unused_program_constructs.cmi -middle_end/remove_unused_program_constructs.cmx : \ - middle_end/base_types/symbol.cmx \ - middle_end/int_replace_polymorphic_compare.cmx \ - middle_end/flambda.cmx \ - middle_end/effect_analysis.cmx \ - middle_end/remove_unused_program_constructs.cmi -middle_end/remove_unused_program_constructs.cmi : \ - middle_end/flambda.cmi -middle_end/share_constants.cmo : \ - middle_end/base_types/symbol.cmi \ - middle_end/int_replace_polymorphic_compare.cmi \ - middle_end/flambda_iterators.cmi \ - middle_end/flambda.cmi \ - middle_end/share_constants.cmi -middle_end/share_constants.cmx : \ - middle_end/base_types/symbol.cmx \ - middle_end/int_replace_polymorphic_compare.cmx \ - middle_end/flambda_iterators.cmx \ - middle_end/flambda.cmx \ - middle_end/share_constants.cmi -middle_end/share_constants.cmi : \ - middle_end/flambda.cmi -middle_end/simple_value_approx.cmo : \ - middle_end/base_types/variable.cmi \ - middle_end/base_types/var_within_closure.cmi \ - middle_end/base_types/tag.cmi \ - middle_end/base_types/symbol.cmi \ - middle_end/base_types/set_of_closures_origin.cmi \ - middle_end/base_types/set_of_closures_id.cmi \ - middle_end/parameter.cmi \ +middle_end/flambda/remove_unused_closure_vars.cmo : \ + middle_end/variable.cmi \ + middle_end/flambda/base_types/var_within_closure.cmi \ + middle_end/flambda/parameter.cmi \ + utils/int_replace_polymorphic_compare.cmi \ + middle_end/flambda/flambda_utils.cmi \ + middle_end/flambda/flambda_iterators.cmi \ + middle_end/flambda/flambda.cmi \ + middle_end/flambda/base_types/closure_id.cmi \ + middle_end/flambda/remove_unused_closure_vars.cmi +middle_end/flambda/remove_unused_closure_vars.cmx : \ + middle_end/variable.cmx \ + middle_end/flambda/base_types/var_within_closure.cmx \ + middle_end/flambda/parameter.cmx \ + utils/int_replace_polymorphic_compare.cmx \ + middle_end/flambda/flambda_utils.cmx \ + middle_end/flambda/flambda_iterators.cmx \ + middle_end/flambda/flambda.cmx \ + middle_end/flambda/base_types/closure_id.cmx \ + middle_end/flambda/remove_unused_closure_vars.cmi +middle_end/flambda/remove_unused_closure_vars.cmi : \ + middle_end/flambda/flambda.cmi +middle_end/flambda/remove_unused_program_constructs.cmo : \ + middle_end/symbol.cmi \ + utils/int_replace_polymorphic_compare.cmi \ + middle_end/flambda/flambda.cmi \ + middle_end/flambda/effect_analysis.cmi \ + middle_end/flambda/remove_unused_program_constructs.cmi +middle_end/flambda/remove_unused_program_constructs.cmx : \ + middle_end/symbol.cmx \ + utils/int_replace_polymorphic_compare.cmx \ + middle_end/flambda/flambda.cmx \ + middle_end/flambda/effect_analysis.cmx \ + middle_end/flambda/remove_unused_program_constructs.cmi +middle_end/flambda/remove_unused_program_constructs.cmi : \ + middle_end/flambda/flambda.cmi +middle_end/flambda/share_constants.cmo : \ + middle_end/symbol.cmi \ + utils/int_replace_polymorphic_compare.cmi \ + middle_end/flambda/flambda_iterators.cmi \ + middle_end/flambda/flambda.cmi \ + middle_end/flambda/share_constants.cmi +middle_end/flambda/share_constants.cmx : \ + middle_end/symbol.cmx \ + utils/int_replace_polymorphic_compare.cmx \ + middle_end/flambda/flambda_iterators.cmx \ + middle_end/flambda/flambda.cmx \ + middle_end/flambda/share_constants.cmi +middle_end/flambda/share_constants.cmi : \ + middle_end/flambda/flambda.cmi +middle_end/flambda/simple_value_approx.cmo : \ + middle_end/variable.cmi \ + middle_end/flambda/base_types/var_within_closure.cmi \ + middle_end/flambda/base_types/tag.cmi \ + middle_end/symbol.cmi \ + middle_end/flambda/base_types/set_of_closures_origin.cmi \ + middle_end/flambda/base_types/set_of_closures_id.cmi \ + middle_end/flambda/parameter.cmi \ utils/misc.cmi \ bytecomp/lambda.cmi \ middle_end/internal_variable_names.cmi \ - middle_end/int_replace_polymorphic_compare.cmi \ - middle_end/inlining_cost.cmi \ - middle_end/freshening.cmi \ - middle_end/flambda_utils.cmi \ - middle_end/flambda.cmi \ - middle_end/base_types/export_id.cmi \ - middle_end/effect_analysis.cmi \ - middle_end/debuginfo.cmi \ - middle_end/base_types/compilation_unit.cmi \ - middle_end/base_types/closure_origin.cmi \ - middle_end/base_types/closure_id.cmi \ - middle_end/allocated_const.cmi \ - middle_end/simple_value_approx.cmi -middle_end/simple_value_approx.cmx : \ - middle_end/base_types/variable.cmx \ - middle_end/base_types/var_within_closure.cmx \ - middle_end/base_types/tag.cmx \ - middle_end/base_types/symbol.cmx \ - middle_end/base_types/set_of_closures_origin.cmx \ - middle_end/base_types/set_of_closures_id.cmx \ - middle_end/parameter.cmx \ + utils/int_replace_polymorphic_compare.cmi \ + middle_end/flambda/inlining_cost.cmi \ + middle_end/flambda/freshening.cmi \ + middle_end/flambda/flambda_utils.cmi \ + middle_end/flambda/flambda.cmi \ + middle_end/flambda/base_types/export_id.cmi \ + middle_end/flambda/effect_analysis.cmi \ + bytecomp/debuginfo.cmi \ + middle_end/compilation_unit.cmi \ + middle_end/flambda/base_types/closure_origin.cmi \ + middle_end/flambda/base_types/closure_id.cmi \ + middle_end/flambda/allocated_const.cmi \ + middle_end/flambda/simple_value_approx.cmi +middle_end/flambda/simple_value_approx.cmx : \ + middle_end/variable.cmx \ + middle_end/flambda/base_types/var_within_closure.cmx \ + middle_end/flambda/base_types/tag.cmx \ + middle_end/symbol.cmx \ + middle_end/flambda/base_types/set_of_closures_origin.cmx \ + middle_end/flambda/base_types/set_of_closures_id.cmx \ + middle_end/flambda/parameter.cmx \ utils/misc.cmx \ bytecomp/lambda.cmx \ middle_end/internal_variable_names.cmx \ - middle_end/int_replace_polymorphic_compare.cmx \ - middle_end/inlining_cost.cmx \ - middle_end/freshening.cmx \ - middle_end/flambda_utils.cmx \ - middle_end/flambda.cmx \ - middle_end/base_types/export_id.cmx \ - middle_end/effect_analysis.cmx \ - middle_end/debuginfo.cmx \ - middle_end/base_types/compilation_unit.cmx \ - middle_end/base_types/closure_origin.cmx \ - middle_end/base_types/closure_id.cmx \ - middle_end/allocated_const.cmx \ - middle_end/simple_value_approx.cmi -middle_end/simple_value_approx.cmi : \ - middle_end/base_types/variable.cmi \ - middle_end/base_types/var_within_closure.cmi \ - middle_end/base_types/tag.cmi \ - middle_end/base_types/symbol.cmi \ - middle_end/base_types/set_of_closures_origin.cmi \ - middle_end/base_types/set_of_closures_id.cmi \ - middle_end/parameter.cmi \ + utils/int_replace_polymorphic_compare.cmx \ + middle_end/flambda/inlining_cost.cmx \ + middle_end/flambda/freshening.cmx \ + middle_end/flambda/flambda_utils.cmx \ + middle_end/flambda/flambda.cmx \ + middle_end/flambda/base_types/export_id.cmx \ + middle_end/flambda/effect_analysis.cmx \ + bytecomp/debuginfo.cmx \ + middle_end/compilation_unit.cmx \ + middle_end/flambda/base_types/closure_origin.cmx \ + middle_end/flambda/base_types/closure_id.cmx \ + middle_end/flambda/allocated_const.cmx \ + middle_end/flambda/simple_value_approx.cmi +middle_end/flambda/simple_value_approx.cmi : \ + middle_end/variable.cmi \ + middle_end/flambda/base_types/var_within_closure.cmi \ + middle_end/flambda/base_types/tag.cmi \ + middle_end/symbol.cmi \ + middle_end/flambda/base_types/set_of_closures_origin.cmi \ + middle_end/flambda/base_types/set_of_closures_id.cmi \ + middle_end/flambda/parameter.cmi \ bytecomp/lambda.cmi \ - middle_end/freshening.cmi \ - middle_end/flambda.cmi \ - middle_end/base_types/export_id.cmi \ - middle_end/debuginfo.cmi \ - middle_end/base_types/closure_origin.cmi \ - middle_end/base_types/closure_id.cmi -middle_end/simplify_boxed_integer_ops.cmo : \ - middle_end/simplify_common.cmi \ - middle_end/simplify_boxed_integer_ops_intf.cmi \ - middle_end/simple_value_approx.cmi \ + middle_end/flambda/freshening.cmi \ + middle_end/flambda/flambda.cmi \ + middle_end/flambda/base_types/export_id.cmi \ + bytecomp/debuginfo.cmi \ + middle_end/flambda/base_types/closure_origin.cmi \ + middle_end/flambda/base_types/closure_id.cmi +middle_end/flambda/simplify_boxed_integer_ops.cmo : \ + middle_end/flambda/simplify_common.cmi \ + middle_end/flambda/simplify_boxed_integer_ops_intf.cmi \ + middle_end/flambda/simple_value_approx.cmi \ bytecomp/lambda.cmi \ - middle_end/int_replace_polymorphic_compare.cmi \ - middle_end/inlining_cost.cmi \ - asmcomp/clambda_primitives.cmi \ - middle_end/simplify_boxed_integer_ops.cmi -middle_end/simplify_boxed_integer_ops.cmx : \ - middle_end/simplify_common.cmx \ - middle_end/simplify_boxed_integer_ops_intf.cmi \ - middle_end/simple_value_approx.cmx \ + utils/int_replace_polymorphic_compare.cmi \ + middle_end/flambda/inlining_cost.cmi \ + middle_end/clambda_primitives.cmi \ + middle_end/flambda/simplify_boxed_integer_ops.cmi +middle_end/flambda/simplify_boxed_integer_ops.cmx : \ + middle_end/flambda/simplify_common.cmx \ + middle_end/flambda/simplify_boxed_integer_ops_intf.cmi \ + middle_end/flambda/simple_value_approx.cmx \ bytecomp/lambda.cmx \ - middle_end/int_replace_polymorphic_compare.cmx \ - middle_end/inlining_cost.cmx \ - asmcomp/clambda_primitives.cmx \ - middle_end/simplify_boxed_integer_ops.cmi -middle_end/simplify_boxed_integer_ops.cmi : \ - middle_end/simplify_boxed_integer_ops_intf.cmi -middle_end/simplify_boxed_integer_ops_intf.cmi : \ - middle_end/simple_value_approx.cmi \ - middle_end/inlining_cost.cmi \ - middle_end/flambda.cmi \ - asmcomp/clambda_primitives.cmi -middle_end/simplify_common.cmo : \ - middle_end/simple_value_approx.cmi \ + utils/int_replace_polymorphic_compare.cmx \ + middle_end/flambda/inlining_cost.cmx \ + middle_end/clambda_primitives.cmx \ + middle_end/flambda/simplify_boxed_integer_ops.cmi +middle_end/flambda/simplify_boxed_integer_ops.cmi : \ + middle_end/flambda/simplify_boxed_integer_ops_intf.cmi +middle_end/flambda/simplify_boxed_integer_ops_intf.cmi : \ + middle_end/flambda/simple_value_approx.cmi \ + middle_end/flambda/inlining_cost.cmi \ + middle_end/flambda/flambda.cmi \ + middle_end/clambda_primitives.cmi +middle_end/flambda/simplify_common.cmo : \ + middle_end/flambda/simple_value_approx.cmi \ bytecomp/lambda.cmi \ - middle_end/int_replace_polymorphic_compare.cmi \ - middle_end/inlining_cost.cmi \ - middle_end/effect_analysis.cmi \ - middle_end/simplify_common.cmi -middle_end/simplify_common.cmx : \ - middle_end/simple_value_approx.cmx \ + utils/int_replace_polymorphic_compare.cmi \ + middle_end/flambda/inlining_cost.cmi \ + middle_end/flambda/effect_analysis.cmi \ + middle_end/flambda/simplify_common.cmi +middle_end/flambda/simplify_common.cmx : \ + middle_end/flambda/simple_value_approx.cmx \ bytecomp/lambda.cmx \ - middle_end/int_replace_polymorphic_compare.cmx \ - middle_end/inlining_cost.cmx \ - middle_end/effect_analysis.cmx \ - middle_end/simplify_common.cmi -middle_end/simplify_common.cmi : \ - middle_end/simple_value_approx.cmi \ + utils/int_replace_polymorphic_compare.cmx \ + middle_end/flambda/inlining_cost.cmx \ + middle_end/flambda/effect_analysis.cmx \ + middle_end/flambda/simplify_common.cmi +middle_end/flambda/simplify_common.cmi : \ + middle_end/flambda/simple_value_approx.cmi \ + bytecomp/lambda.cmi \ + middle_end/flambda/inlining_cost.cmi \ + middle_end/flambda/flambda.cmi +middle_end/flambda/simplify_primitives.cmo : \ + middle_end/flambda/base_types/tag.cmi \ + middle_end/symbol.cmi \ + middle_end/flambda/simplify_common.cmi \ + middle_end/flambda/simplify_boxed_integer_ops.cmi \ + middle_end/flambda/simple_value_approx.cmi \ + middle_end/semantics_of_primitives.cmi \ + utils/misc.cmi \ bytecomp/lambda.cmi \ - middle_end/inlining_cost.cmi \ - middle_end/flambda.cmi -middle_end/simplify_primitives.cmo : \ - middle_end/base_types/tag.cmi \ - middle_end/base_types/symbol.cmi \ - middle_end/simplify_common.cmi \ - middle_end/simplify_boxed_integer_ops.cmi \ - middle_end/simple_value_approx.cmi \ - asmcomp/semantics_of_primitives.cmi \ + utils/int_replace_polymorphic_compare.cmi \ + middle_end/flambda/inlining_cost.cmi \ + middle_end/flambda/flambda.cmi \ + utils/clflags.cmi \ + middle_end/clambda_primitives.cmi \ + parsing/asttypes.cmi \ + middle_end/flambda/simplify_primitives.cmi +middle_end/flambda/simplify_primitives.cmx : \ + middle_end/flambda/base_types/tag.cmx \ + middle_end/symbol.cmx \ + middle_end/flambda/simplify_common.cmx \ + middle_end/flambda/simplify_boxed_integer_ops.cmx \ + middle_end/flambda/simple_value_approx.cmx \ + middle_end/semantics_of_primitives.cmx \ + utils/misc.cmx \ + bytecomp/lambda.cmx \ + utils/int_replace_polymorphic_compare.cmx \ + middle_end/flambda/inlining_cost.cmx \ + middle_end/flambda/flambda.cmx \ + utils/clflags.cmx \ + middle_end/clambda_primitives.cmx \ + parsing/asttypes.cmi \ + middle_end/flambda/simplify_primitives.cmi +middle_end/flambda/simplify_primitives.cmi : \ + middle_end/variable.cmi \ + middle_end/flambda/simple_value_approx.cmi \ + middle_end/flambda/inlining_cost.cmi \ + middle_end/flambda/flambda.cmi \ + bytecomp/debuginfo.cmi \ + middle_end/clambda_primitives.cmi +middle_end/flambda/traverse_for_exported_symbols.cmo : \ + middle_end/variable.cmi \ + middle_end/flambda/base_types/var_within_closure.cmi \ + middle_end/symbol.cmi \ + middle_end/flambda/simple_value_approx.cmi \ + middle_end/flambda/base_types/set_of_closures_id.cmi \ + utils/misc.cmi \ + middle_end/flambda/flambda_iterators.cmi \ + middle_end/flambda/flambda.cmi \ + middle_end/flambda/export_info.cmi \ + middle_end/flambda/base_types/export_id.cmi \ + middle_end/compilation_unit.cmi \ + middle_end/flambda/base_types/closure_id.cmi \ + middle_end/flambda/traverse_for_exported_symbols.cmi +middle_end/flambda/traverse_for_exported_symbols.cmx : \ + middle_end/variable.cmx \ + middle_end/flambda/base_types/var_within_closure.cmx \ + middle_end/symbol.cmx \ + middle_end/flambda/simple_value_approx.cmx \ + middle_end/flambda/base_types/set_of_closures_id.cmx \ + utils/misc.cmx \ + middle_end/flambda/flambda_iterators.cmx \ + middle_end/flambda/flambda.cmx \ + middle_end/flambda/export_info.cmx \ + middle_end/flambda/base_types/export_id.cmx \ + middle_end/compilation_unit.cmx \ + middle_end/flambda/base_types/closure_id.cmx \ + middle_end/flambda/traverse_for_exported_symbols.cmi +middle_end/flambda/traverse_for_exported_symbols.cmi : \ + middle_end/flambda/base_types/var_within_closure.cmi \ + middle_end/symbol.cmi \ + middle_end/flambda/simple_value_approx.cmi \ + middle_end/flambda/base_types/set_of_closures_id.cmi \ + middle_end/flambda/flambda.cmi \ + middle_end/flambda/export_info.cmi \ + middle_end/flambda/base_types/export_id.cmi \ + middle_end/flambda/base_types/closure_id.cmi +middle_end/flambda/un_anf.cmo : \ + middle_end/symbol.cmi \ + middle_end/semantics_of_primitives.cmi \ + middle_end/printclambda.cmi \ utils/misc.cmi \ bytecomp/lambda.cmi \ - middle_end/int_replace_polymorphic_compare.cmi \ - middle_end/inlining_cost.cmi \ - middle_end/flambda.cmi \ + bytecomp/debuginfo.cmi \ utils/clflags.cmi \ - asmcomp/clambda_primitives.cmi \ + middle_end/clambda_primitives.cmi \ + middle_end/clambda.cmi \ + middle_end/backend_var.cmi \ parsing/asttypes.cmi \ - middle_end/simplify_primitives.cmi -middle_end/simplify_primitives.cmx : \ - middle_end/base_types/tag.cmx \ - middle_end/base_types/symbol.cmx \ - middle_end/simplify_common.cmx \ - middle_end/simplify_boxed_integer_ops.cmx \ - middle_end/simple_value_approx.cmx \ - asmcomp/semantics_of_primitives.cmx \ + middle_end/flambda/un_anf.cmi +middle_end/flambda/un_anf.cmx : \ + middle_end/symbol.cmx \ + middle_end/semantics_of_primitives.cmx \ + middle_end/printclambda.cmx \ utils/misc.cmx \ bytecomp/lambda.cmx \ - middle_end/int_replace_polymorphic_compare.cmx \ - middle_end/inlining_cost.cmx \ - middle_end/flambda.cmx \ + bytecomp/debuginfo.cmx \ utils/clflags.cmx \ - asmcomp/clambda_primitives.cmx \ - parsing/asttypes.cmi \ - middle_end/simplify_primitives.cmi -middle_end/simplify_primitives.cmi : \ - middle_end/base_types/variable.cmi \ - middle_end/simple_value_approx.cmi \ - middle_end/inlining_cost.cmi \ - middle_end/flambda.cmi \ - middle_end/debuginfo.cmi \ - asmcomp/clambda_primitives.cmi -middle_end/unbox_closures.cmo : \ - middle_end/base_types/variable.cmi \ - middle_end/int_replace_polymorphic_compare.cmi \ - middle_end/inlining_cost.cmi \ - middle_end/inline_and_simplify_aux.cmi \ - middle_end/flambda_utils.cmi \ - middle_end/flambda_iterators.cmi \ - middle_end/flambda.cmi \ - middle_end/base_types/closure_id.cmi \ + middle_end/clambda_primitives.cmx \ + middle_end/clambda.cmx \ + middle_end/backend_var.cmx \ + parsing/asttypes.cmi \ + middle_end/flambda/un_anf.cmi +middle_end/flambda/un_anf.cmi : \ + middle_end/symbol.cmi \ + middle_end/clambda.cmi +middle_end/flambda/unbox_closures.cmo : \ + middle_end/variable.cmi \ + utils/int_replace_polymorphic_compare.cmi \ + middle_end/flambda/inlining_cost.cmi \ + middle_end/flambda/inline_and_simplify_aux.cmi \ + middle_end/flambda/flambda_utils.cmi \ + middle_end/flambda/flambda_iterators.cmi \ + middle_end/flambda/flambda.cmi \ + middle_end/flambda/base_types/closure_id.cmi \ utils/clflags.cmi \ - middle_end/augment_specialised_args.cmi \ - middle_end/unbox_closures.cmi -middle_end/unbox_closures.cmx : \ - middle_end/base_types/variable.cmx \ - middle_end/int_replace_polymorphic_compare.cmx \ - middle_end/inlining_cost.cmx \ - middle_end/inline_and_simplify_aux.cmx \ - middle_end/flambda_utils.cmx \ - middle_end/flambda_iterators.cmx \ - middle_end/flambda.cmx \ - middle_end/base_types/closure_id.cmx \ + middle_end/flambda/augment_specialised_args.cmi \ + middle_end/flambda/unbox_closures.cmi +middle_end/flambda/unbox_closures.cmx : \ + middle_end/variable.cmx \ + utils/int_replace_polymorphic_compare.cmx \ + middle_end/flambda/inlining_cost.cmx \ + middle_end/flambda/inline_and_simplify_aux.cmx \ + middle_end/flambda/flambda_utils.cmx \ + middle_end/flambda/flambda_iterators.cmx \ + middle_end/flambda/flambda.cmx \ + middle_end/flambda/base_types/closure_id.cmx \ utils/clflags.cmx \ - middle_end/augment_specialised_args.cmx \ - middle_end/unbox_closures.cmi -middle_end/unbox_closures.cmi : \ - middle_end/base_types/variable.cmi \ - middle_end/inlining_cost.cmi \ - middle_end/inline_and_simplify_aux.cmi \ - middle_end/flambda.cmi -middle_end/unbox_free_vars_of_closures.cmo : \ - middle_end/base_types/variable.cmi \ - middle_end/projection.cmi \ - middle_end/pass_wrapper.cmi \ + middle_end/flambda/augment_specialised_args.cmx \ + middle_end/flambda/unbox_closures.cmi +middle_end/flambda/unbox_closures.cmi : \ + middle_end/variable.cmi \ + middle_end/flambda/inlining_cost.cmi \ + middle_end/flambda/inline_and_simplify_aux.cmi \ + middle_end/flambda/flambda.cmi +middle_end/flambda/unbox_free_vars_of_closures.cmo : \ + middle_end/variable.cmi \ + middle_end/flambda/projection.cmi \ + middle_end/flambda/pass_wrapper.cmi \ utils/misc.cmi \ middle_end/internal_variable_names.cmi \ - middle_end/int_replace_polymorphic_compare.cmi \ - middle_end/inlining_cost.cmi \ - middle_end/inline_and_simplify_aux.cmi \ - middle_end/flambda_utils.cmi \ - middle_end/flambda_iterators.cmi \ - middle_end/flambda.cmi \ - middle_end/extract_projections.cmi \ + utils/int_replace_polymorphic_compare.cmi \ + middle_end/flambda/inlining_cost.cmi \ + middle_end/flambda/inline_and_simplify_aux.cmi \ + middle_end/flambda/flambda_utils.cmi \ + middle_end/flambda/flambda_iterators.cmi \ + middle_end/flambda/flambda.cmi \ + middle_end/flambda/extract_projections.cmi \ utils/clflags.cmi \ - middle_end/unbox_free_vars_of_closures.cmi -middle_end/unbox_free_vars_of_closures.cmx : \ - middle_end/base_types/variable.cmx \ - middle_end/projection.cmx \ - middle_end/pass_wrapper.cmx \ + middle_end/flambda/unbox_free_vars_of_closures.cmi +middle_end/flambda/unbox_free_vars_of_closures.cmx : \ + middle_end/variable.cmx \ + middle_end/flambda/projection.cmx \ + middle_end/flambda/pass_wrapper.cmx \ utils/misc.cmx \ middle_end/internal_variable_names.cmx \ - middle_end/int_replace_polymorphic_compare.cmx \ - middle_end/inlining_cost.cmx \ - middle_end/inline_and_simplify_aux.cmx \ - middle_end/flambda_utils.cmx \ - middle_end/flambda_iterators.cmx \ - middle_end/flambda.cmx \ - middle_end/extract_projections.cmx \ + utils/int_replace_polymorphic_compare.cmx \ + middle_end/flambda/inlining_cost.cmx \ + middle_end/flambda/inline_and_simplify_aux.cmx \ + middle_end/flambda/flambda_utils.cmx \ + middle_end/flambda/flambda_iterators.cmx \ + middle_end/flambda/flambda.cmx \ + middle_end/flambda/extract_projections.cmx \ utils/clflags.cmx \ - middle_end/unbox_free_vars_of_closures.cmi -middle_end/unbox_free_vars_of_closures.cmi : \ - middle_end/inlining_cost.cmi \ - middle_end/inline_and_simplify_aux.cmi \ - middle_end/flambda.cmi -middle_end/unbox_specialised_args.cmo : \ - middle_end/base_types/variable.cmi \ - middle_end/projection.cmi \ - middle_end/invariant_params.cmi \ - middle_end/int_replace_polymorphic_compare.cmi \ - middle_end/inline_and_simplify_aux.cmi \ - middle_end/flambda.cmi \ - middle_end/extract_projections.cmi \ + middle_end/flambda/unbox_free_vars_of_closures.cmi +middle_end/flambda/unbox_free_vars_of_closures.cmi : \ + middle_end/flambda/inlining_cost.cmi \ + middle_end/flambda/inline_and_simplify_aux.cmi \ + middle_end/flambda/flambda.cmi +middle_end/flambda/unbox_specialised_args.cmo : \ + middle_end/variable.cmi \ + middle_end/flambda/projection.cmi \ + middle_end/flambda/invariant_params.cmi \ + utils/int_replace_polymorphic_compare.cmi \ + middle_end/flambda/inline_and_simplify_aux.cmi \ + middle_end/flambda/flambda.cmi \ + middle_end/flambda/extract_projections.cmi \ utils/clflags.cmi \ - middle_end/augment_specialised_args.cmi \ - middle_end/unbox_specialised_args.cmi -middle_end/unbox_specialised_args.cmx : \ - middle_end/base_types/variable.cmx \ - middle_end/projection.cmx \ - middle_end/invariant_params.cmx \ - middle_end/int_replace_polymorphic_compare.cmx \ - middle_end/inline_and_simplify_aux.cmx \ - middle_end/flambda.cmx \ - middle_end/extract_projections.cmx \ + middle_end/flambda/augment_specialised_args.cmi \ + middle_end/flambda/unbox_specialised_args.cmi +middle_end/flambda/unbox_specialised_args.cmx : \ + middle_end/variable.cmx \ + middle_end/flambda/projection.cmx \ + middle_end/flambda/invariant_params.cmx \ + utils/int_replace_polymorphic_compare.cmx \ + middle_end/flambda/inline_and_simplify_aux.cmx \ + middle_end/flambda/flambda.cmx \ + middle_end/flambda/extract_projections.cmx \ utils/clflags.cmx \ - middle_end/augment_specialised_args.cmx \ - middle_end/unbox_specialised_args.cmi -middle_end/unbox_specialised_args.cmi : \ - middle_end/base_types/variable.cmi \ - middle_end/inlining_cost.cmi \ - middle_end/inline_and_simplify_aux.cmi \ - middle_end/flambda.cmi -middle_end/base_types/closure_element.cmo : \ - middle_end/base_types/variable.cmi \ - middle_end/int_replace_polymorphic_compare.cmi \ - middle_end/base_types/closure_element.cmi -middle_end/base_types/closure_element.cmx : \ - middle_end/base_types/variable.cmx \ - middle_end/int_replace_polymorphic_compare.cmx \ - middle_end/base_types/closure_element.cmi -middle_end/base_types/closure_element.cmi : \ - middle_end/base_types/variable.cmi \ + middle_end/flambda/augment_specialised_args.cmx \ + middle_end/flambda/unbox_specialised_args.cmi +middle_end/flambda/unbox_specialised_args.cmi : \ + middle_end/variable.cmi \ + middle_end/flambda/inlining_cost.cmi \ + middle_end/flambda/inline_and_simplify_aux.cmi \ + middle_end/flambda/flambda.cmi +middle_end/flambda/base_types/closure_element.cmo : \ + middle_end/variable.cmi \ + utils/int_replace_polymorphic_compare.cmi \ + middle_end/flambda/base_types/closure_element.cmi +middle_end/flambda/base_types/closure_element.cmx : \ + middle_end/variable.cmx \ + utils/int_replace_polymorphic_compare.cmx \ + middle_end/flambda/base_types/closure_element.cmi +middle_end/flambda/base_types/closure_element.cmi : \ + middle_end/variable.cmi \ utils/identifiable.cmi \ - middle_end/base_types/compilation_unit.cmi -middle_end/base_types/closure_id.cmo : \ - middle_end/int_replace_polymorphic_compare.cmi \ - middle_end/base_types/closure_element.cmi \ - middle_end/base_types/closure_id.cmi -middle_end/base_types/closure_id.cmx : \ - middle_end/int_replace_polymorphic_compare.cmx \ - middle_end/base_types/closure_element.cmx \ - middle_end/base_types/closure_id.cmi -middle_end/base_types/closure_id.cmi : \ - middle_end/base_types/closure_element.cmi -middle_end/base_types/closure_origin.cmo : \ - middle_end/int_replace_polymorphic_compare.cmi \ - middle_end/base_types/closure_id.cmi \ - middle_end/base_types/closure_origin.cmi -middle_end/base_types/closure_origin.cmx : \ - middle_end/int_replace_polymorphic_compare.cmx \ - middle_end/base_types/closure_id.cmx \ - middle_end/base_types/closure_origin.cmi -middle_end/base_types/closure_origin.cmi : \ + middle_end/compilation_unit.cmi +middle_end/flambda/base_types/closure_id.cmo : \ + utils/int_replace_polymorphic_compare.cmi \ + middle_end/flambda/base_types/closure_element.cmi \ + middle_end/flambda/base_types/closure_id.cmi +middle_end/flambda/base_types/closure_id.cmx : \ + utils/int_replace_polymorphic_compare.cmx \ + middle_end/flambda/base_types/closure_element.cmx \ + middle_end/flambda/base_types/closure_id.cmi +middle_end/flambda/base_types/closure_id.cmi : \ + middle_end/flambda/base_types/closure_element.cmi +middle_end/flambda/base_types/closure_origin.cmo : \ + utils/int_replace_polymorphic_compare.cmi \ + middle_end/flambda/base_types/closure_id.cmi \ + middle_end/flambda/base_types/closure_origin.cmi +middle_end/flambda/base_types/closure_origin.cmx : \ + utils/int_replace_polymorphic_compare.cmx \ + middle_end/flambda/base_types/closure_id.cmx \ + middle_end/flambda/base_types/closure_origin.cmi +middle_end/flambda/base_types/closure_origin.cmi : \ utils/identifiable.cmi \ - middle_end/base_types/compilation_unit.cmi \ - middle_end/base_types/closure_id.cmi -middle_end/base_types/compilation_unit.cmo : \ - utils/misc.cmi \ - middle_end/base_types/linkage_name.cmi \ - middle_end/int_replace_polymorphic_compare.cmi \ + middle_end/compilation_unit.cmi \ + middle_end/flambda/base_types/closure_id.cmi +middle_end/flambda/base_types/export_id.cmo : \ + utils/int_replace_polymorphic_compare.cmi \ utils/identifiable.cmi \ - typing/ident.cmi \ - middle_end/base_types/compilation_unit.cmi -middle_end/base_types/compilation_unit.cmx : \ - utils/misc.cmx \ - middle_end/base_types/linkage_name.cmx \ - middle_end/int_replace_polymorphic_compare.cmx \ + middle_end/flambda/base_types/id_types.cmi \ + middle_end/compilation_unit.cmi \ + middle_end/flambda/base_types/export_id.cmi +middle_end/flambda/base_types/export_id.cmx : \ + utils/int_replace_polymorphic_compare.cmx \ utils/identifiable.cmx \ - typing/ident.cmx \ - middle_end/base_types/compilation_unit.cmi -middle_end/base_types/compilation_unit.cmi : \ - middle_end/base_types/linkage_name.cmi \ - utils/identifiable.cmi \ - typing/ident.cmi -middle_end/base_types/export_id.cmo : \ - middle_end/int_replace_polymorphic_compare.cmi \ + middle_end/flambda/base_types/id_types.cmx \ + middle_end/compilation_unit.cmx \ + middle_end/flambda/base_types/export_id.cmi +middle_end/flambda/base_types/export_id.cmi : \ utils/identifiable.cmi \ - middle_end/base_types/id_types.cmi \ - middle_end/base_types/compilation_unit.cmi \ - middle_end/base_types/export_id.cmi -middle_end/base_types/export_id.cmx : \ - middle_end/int_replace_polymorphic_compare.cmx \ - utils/identifiable.cmx \ - middle_end/base_types/id_types.cmx \ - middle_end/base_types/compilation_unit.cmx \ - middle_end/base_types/export_id.cmi -middle_end/base_types/export_id.cmi : \ - utils/identifiable.cmi \ - middle_end/base_types/compilation_unit.cmi -middle_end/base_types/id_types.cmo : \ - middle_end/int_replace_polymorphic_compare.cmi \ - utils/identifiable.cmi \ - middle_end/base_types/id_types.cmi -middle_end/base_types/id_types.cmx : \ - middle_end/int_replace_polymorphic_compare.cmx \ - utils/identifiable.cmx \ - middle_end/base_types/id_types.cmi -middle_end/base_types/id_types.cmi : \ - utils/identifiable.cmi -middle_end/base_types/linkage_name.cmo : \ - middle_end/int_replace_polymorphic_compare.cmi \ + middle_end/compilation_unit.cmi +middle_end/flambda/base_types/id_types.cmo : \ + utils/int_replace_polymorphic_compare.cmi \ utils/identifiable.cmi \ - middle_end/base_types/linkage_name.cmi -middle_end/base_types/linkage_name.cmx : \ - middle_end/int_replace_polymorphic_compare.cmx \ + middle_end/flambda/base_types/id_types.cmi +middle_end/flambda/base_types/id_types.cmx : \ + utils/int_replace_polymorphic_compare.cmx \ utils/identifiable.cmx \ - middle_end/base_types/linkage_name.cmi -middle_end/base_types/linkage_name.cmi : \ + middle_end/flambda/base_types/id_types.cmi +middle_end/flambda/base_types/id_types.cmi : \ utils/identifiable.cmi -middle_end/base_types/mutable_variable.cmo : \ - middle_end/base_types/variable.cmi \ - middle_end/int_replace_polymorphic_compare.cmi \ - middle_end/base_types/mutable_variable.cmi -middle_end/base_types/mutable_variable.cmx : \ - middle_end/base_types/variable.cmx \ - middle_end/int_replace_polymorphic_compare.cmx \ - middle_end/base_types/mutable_variable.cmi -middle_end/base_types/mutable_variable.cmi : \ - middle_end/base_types/variable.cmi \ +middle_end/flambda/base_types/mutable_variable.cmo : \ + middle_end/variable.cmi \ + utils/int_replace_polymorphic_compare.cmi \ + middle_end/flambda/base_types/mutable_variable.cmi +middle_end/flambda/base_types/mutable_variable.cmx : \ + middle_end/variable.cmx \ + utils/int_replace_polymorphic_compare.cmx \ + middle_end/flambda/base_types/mutable_variable.cmi +middle_end/flambda/base_types/mutable_variable.cmi : \ + middle_end/variable.cmi \ middle_end/internal_variable_names.cmi \ utils/identifiable.cmi \ typing/ident.cmi \ - middle_end/base_types/compilation_unit.cmi -middle_end/base_types/set_of_closures_id.cmo : \ - middle_end/int_replace_polymorphic_compare.cmi \ + middle_end/compilation_unit.cmi +middle_end/flambda/base_types/set_of_closures_id.cmo : \ + utils/int_replace_polymorphic_compare.cmi \ utils/identifiable.cmi \ - middle_end/base_types/id_types.cmi \ - middle_end/base_types/compilation_unit.cmi \ - middle_end/base_types/set_of_closures_id.cmi -middle_end/base_types/set_of_closures_id.cmx : \ - middle_end/int_replace_polymorphic_compare.cmx \ + middle_end/flambda/base_types/id_types.cmi \ + middle_end/compilation_unit.cmi \ + middle_end/flambda/base_types/set_of_closures_id.cmi +middle_end/flambda/base_types/set_of_closures_id.cmx : \ + utils/int_replace_polymorphic_compare.cmx \ utils/identifiable.cmx \ - middle_end/base_types/id_types.cmx \ - middle_end/base_types/compilation_unit.cmx \ - middle_end/base_types/set_of_closures_id.cmi -middle_end/base_types/set_of_closures_id.cmi : \ + middle_end/flambda/base_types/id_types.cmx \ + middle_end/compilation_unit.cmx \ + middle_end/flambda/base_types/set_of_closures_id.cmi +middle_end/flambda/base_types/set_of_closures_id.cmi : \ utils/identifiable.cmi \ - middle_end/base_types/compilation_unit.cmi -middle_end/base_types/set_of_closures_origin.cmo : \ - middle_end/base_types/set_of_closures_id.cmi \ - middle_end/int_replace_polymorphic_compare.cmi \ - middle_end/base_types/set_of_closures_origin.cmi -middle_end/base_types/set_of_closures_origin.cmx : \ - middle_end/base_types/set_of_closures_id.cmx \ - middle_end/int_replace_polymorphic_compare.cmx \ - middle_end/base_types/set_of_closures_origin.cmi -middle_end/base_types/set_of_closures_origin.cmi : \ - middle_end/base_types/set_of_closures_id.cmi \ + middle_end/compilation_unit.cmi +middle_end/flambda/base_types/set_of_closures_origin.cmo : \ + middle_end/flambda/base_types/set_of_closures_id.cmi \ + utils/int_replace_polymorphic_compare.cmi \ + middle_end/flambda/base_types/set_of_closures_origin.cmi +middle_end/flambda/base_types/set_of_closures_origin.cmx : \ + middle_end/flambda/base_types/set_of_closures_id.cmx \ + utils/int_replace_polymorphic_compare.cmx \ + middle_end/flambda/base_types/set_of_closures_origin.cmi +middle_end/flambda/base_types/set_of_closures_origin.cmi : \ + middle_end/flambda/base_types/set_of_closures_id.cmi \ utils/identifiable.cmi \ - middle_end/base_types/compilation_unit.cmi -middle_end/base_types/static_exception.cmo : \ + middle_end/compilation_unit.cmi +middle_end/flambda/base_types/static_exception.cmo : \ utils/numbers.cmi \ bytecomp/lambda.cmi \ - middle_end/int_replace_polymorphic_compare.cmi \ - middle_end/base_types/static_exception.cmi -middle_end/base_types/static_exception.cmx : \ + utils/int_replace_polymorphic_compare.cmi \ + middle_end/flambda/base_types/static_exception.cmi +middle_end/flambda/base_types/static_exception.cmx : \ utils/numbers.cmx \ bytecomp/lambda.cmx \ - middle_end/int_replace_polymorphic_compare.cmx \ - middle_end/base_types/static_exception.cmi -middle_end/base_types/static_exception.cmi : \ + utils/int_replace_polymorphic_compare.cmx \ + middle_end/flambda/base_types/static_exception.cmi +middle_end/flambda/base_types/static_exception.cmi : \ utils/identifiable.cmi -middle_end/base_types/symbol.cmo : \ - middle_end/base_types/variable.cmi \ - utils/misc.cmi \ - middle_end/base_types/linkage_name.cmi \ - middle_end/int_replace_polymorphic_compare.cmi \ - utils/identifiable.cmi \ - middle_end/base_types/compilation_unit.cmi \ - middle_end/base_types/symbol.cmi -middle_end/base_types/symbol.cmx : \ - middle_end/base_types/variable.cmx \ - utils/misc.cmx \ - middle_end/base_types/linkage_name.cmx \ - middle_end/int_replace_polymorphic_compare.cmx \ - utils/identifiable.cmx \ - middle_end/base_types/compilation_unit.cmx \ - middle_end/base_types/symbol.cmi -middle_end/base_types/symbol.cmi : \ - middle_end/base_types/variable.cmi \ - middle_end/base_types/linkage_name.cmi \ - utils/identifiable.cmi \ - middle_end/base_types/compilation_unit.cmi -middle_end/base_types/tag.cmo : \ +middle_end/flambda/base_types/tag.cmo : \ utils/numbers.cmi \ utils/misc.cmi \ - middle_end/int_replace_polymorphic_compare.cmi \ + utils/int_replace_polymorphic_compare.cmi \ utils/identifiable.cmi \ - middle_end/base_types/tag.cmi -middle_end/base_types/tag.cmx : \ + middle_end/flambda/base_types/tag.cmi +middle_end/flambda/base_types/tag.cmx : \ utils/numbers.cmx \ utils/misc.cmx \ - middle_end/int_replace_polymorphic_compare.cmx \ + utils/int_replace_polymorphic_compare.cmx \ utils/identifiable.cmx \ - middle_end/base_types/tag.cmi -middle_end/base_types/tag.cmi : \ + middle_end/flambda/base_types/tag.cmi +middle_end/flambda/base_types/tag.cmi : \ utils/identifiable.cmi -middle_end/base_types/var_within_closure.cmo : \ - middle_end/int_replace_polymorphic_compare.cmi \ - middle_end/base_types/closure_element.cmi \ - middle_end/base_types/var_within_closure.cmi -middle_end/base_types/var_within_closure.cmx : \ - middle_end/int_replace_polymorphic_compare.cmx \ - middle_end/base_types/closure_element.cmx \ - middle_end/base_types/var_within_closure.cmi -middle_end/base_types/var_within_closure.cmi : \ - middle_end/base_types/closure_element.cmi -middle_end/base_types/variable.cmo : \ - utils/misc.cmi \ - middle_end/internal_variable_names.cmi \ - middle_end/int_replace_polymorphic_compare.cmi \ - utils/identifiable.cmi \ - typing/ident.cmi \ - middle_end/base_types/compilation_unit.cmi \ - middle_end/base_types/variable.cmi -middle_end/base_types/variable.cmx : \ - utils/misc.cmx \ - middle_end/internal_variable_names.cmx \ - middle_end/int_replace_polymorphic_compare.cmx \ - utils/identifiable.cmx \ - typing/ident.cmx \ - middle_end/base_types/compilation_unit.cmx \ - middle_end/base_types/variable.cmi -middle_end/base_types/variable.cmi : \ - middle_end/internal_variable_names.cmi \ - utils/identifiable.cmi \ - typing/ident.cmi \ - middle_end/base_types/compilation_unit.cmi +middle_end/flambda/base_types/var_within_closure.cmo : \ + utils/int_replace_polymorphic_compare.cmi \ + middle_end/flambda/base_types/closure_element.cmi \ + middle_end/flambda/base_types/var_within_closure.cmi +middle_end/flambda/base_types/var_within_closure.cmx : \ + utils/int_replace_polymorphic_compare.cmx \ + middle_end/flambda/base_types/closure_element.cmx \ + middle_end/flambda/base_types/var_within_closure.cmi +middle_end/flambda/base_types/var_within_closure.cmi : \ + middle_end/flambda/base_types/closure_element.cmi asmcomp/debug/available_regs.cmo : \ asmcomp/debug/reg_with_debug_info.cmi \ asmcomp/debug/reg_availability_set.cmi \ @@ -5392,7 +5577,7 @@ asmcomp/debug/available_regs.cmo : \ utils/misc.cmi \ asmcomp/mach.cmi \ utils/clflags.cmi \ - asmcomp/backend_var.cmi \ + middle_end/backend_var.cmi \ asmcomp/debug/available_regs.cmi asmcomp/debug/available_regs.cmx : \ asmcomp/debug/reg_with_debug_info.cmx \ @@ -5403,38 +5588,71 @@ asmcomp/debug/available_regs.cmx : \ utils/misc.cmx \ asmcomp/mach.cmx \ utils/clflags.cmx \ - asmcomp/backend_var.cmx \ + middle_end/backend_var.cmx \ asmcomp/debug/available_regs.cmi asmcomp/debug/available_regs.cmi : \ asmcomp/mach.cmi asmcomp/debug/reg_availability_set.cmo : \ asmcomp/debug/reg_with_debug_info.cmi \ - asmcomp/backend_var.cmi \ + middle_end/backend_var.cmi \ asmcomp/debug/reg_availability_set.cmi asmcomp/debug/reg_availability_set.cmx : \ asmcomp/debug/reg_with_debug_info.cmx \ - asmcomp/backend_var.cmx \ + middle_end/backend_var.cmx \ asmcomp/debug/reg_availability_set.cmi asmcomp/debug/reg_availability_set.cmi : \ asmcomp/debug/reg_with_debug_info.cmi \ asmcomp/reg.cmi asmcomp/debug/reg_with_debug_info.cmo : \ asmcomp/reg.cmi \ - asmcomp/backend_var.cmi \ + middle_end/backend_var.cmi \ asmcomp/debug/reg_with_debug_info.cmi asmcomp/debug/reg_with_debug_info.cmx : \ asmcomp/reg.cmx \ - asmcomp/backend_var.cmx \ + middle_end/backend_var.cmx \ asmcomp/debug/reg_with_debug_info.cmi asmcomp/debug/reg_with_debug_info.cmi : \ asmcomp/reg.cmi \ - asmcomp/backend_var.cmi + middle_end/backend_var.cmi +asmcomp/asm_target/asm_section.cmo : \ + asmcomp/target_system.cmi \ + utils/identifiable.cmi \ + asmcomp/asm_target/asm_section.cmi +asmcomp/asm_target/asm_section.cmx : \ + asmcomp/target_system.cmx \ + utils/identifiable.cmx \ + asmcomp/asm_target/asm_section.cmi +asmcomp/asm_target/asm_section.cmi : \ + utils/identifiable.cmi +asmcomp/asm_target/asm_symbol.cmo : \ + asmcomp/target_system.cmi \ + asmcomp/object_file.cmi \ + utils/misc.cmi \ + utils/identifiable.cmi \ + asmcomp/backend_sym.cmi \ + asmcomp/asm_target/asm_section.cmi \ + asmcomp/asm_target/asm_symbol.cmi +asmcomp/asm_target/asm_symbol.cmx : \ + asmcomp/target_system.cmx \ + asmcomp/object_file.cmx \ + utils/misc.cmx \ + utils/identifiable.cmx \ + asmcomp/backend_sym.cmx \ + asmcomp/asm_target/asm_section.cmx \ + asmcomp/asm_target/asm_symbol.cmi +asmcomp/asm_target/asm_symbol.cmi : \ + asmcomp/object_file.cmi \ + utils/identifiable.cmi \ + asmcomp/backend_sym.cmi \ + asmcomp/asm_target/asm_section.cmi driver/compdynlink.cmi : driver/compdynlink_common.cmo : \ + utils/misc.cmi \ driver/compdynlink_types.cmi \ driver/compdynlink_platform_intf.cmi \ driver/compdynlink_common.cmi driver/compdynlink_common.cmx : \ + utils/misc.cmx \ driver/compdynlink_types.cmx \ driver/compdynlink_platform_intf.cmx \ driver/compdynlink_common.cmi @@ -5685,11 +5903,16 @@ driver/optcompile.cmo : \ utils/profile.cmi \ bytecomp/printlambda.cmi \ utils/misc.cmi \ - middle_end/middle_end.cmi \ + asmcomp/linking_state.cmi \ bytecomp/lambda.cmi \ + middle_end/flambda/flambda_middle_end.cmi \ + typing/env.cmi \ utils/config.cmi \ - asmcomp/compilenv.cmi \ driver/compile_common.cmi \ + middle_end/compilation_unit.cmi \ + middle_end/compilation_state.cmi \ + file_formats/cmx_format.cmi \ + middle_end/closure/closure_middle_end.cmi \ utils/clflags.cmi \ asmcomp/asmgen.cmi \ driver/optcompile.cmi @@ -5699,11 +5922,16 @@ driver/optcompile.cmx : \ utils/profile.cmx \ bytecomp/printlambda.cmx \ utils/misc.cmx \ - middle_end/middle_end.cmx \ + asmcomp/linking_state.cmx \ bytecomp/lambda.cmx \ + middle_end/flambda/flambda_middle_end.cmx \ + typing/env.cmx \ utils/config.cmx \ - asmcomp/compilenv.cmx \ driver/compile_common.cmx \ + middle_end/compilation_unit.cmx \ + middle_end/compilation_state.cmx \ + file_formats/cmx_format.cmx \ + middle_end/closure/closure_middle_end.cmx \ utils/clflags.cmx \ asmcomp/asmgen.cmx \ driver/optcompile.cmi @@ -5728,11 +5956,9 @@ driver/optmain.cmo : \ driver/makedepend.cmi \ driver/main_args.cmi \ parsing/location.cmi \ - asmcomp/import_approx.cmi \ utils/config.cmi \ driver/compplugin.cmi \ driver/compmisc.cmi \ - asmcomp/compilenv.cmi \ driver/compenv.cmi \ utils/clflags.cmi \ middle_end/backend_intf.cmi \ @@ -5751,11 +5977,9 @@ driver/optmain.cmx : \ driver/makedepend.cmx \ driver/main_args.cmx \ parsing/location.cmx \ - asmcomp/import_approx.cmx \ utils/config.cmx \ driver/compplugin.cmx \ driver/compmisc.cmx \ - asmcomp/compilenv.cmx \ driver/compenv.cmx \ utils/clflags.cmx \ middle_end/backend_intf.cmi \ @@ -5882,6 +6106,7 @@ toplevel/opttoploop.cmo : \ typing/typedtree.cmi \ typing/typecore.cmi \ bytecomp/translmod.cmi \ + middle_end/symbol.cmi \ bytecomp/simplif.cmi \ asmcomp/proc.cmi \ typing/printtyped.cmi \ @@ -5897,23 +6122,24 @@ toplevel/opttoploop.cmo : \ typing/outcometree.cmi \ typing/oprint.cmi \ utils/misc.cmi \ - middle_end/middle_end.cmi \ parsing/longident.cmi \ parsing/location.cmi \ utils/load_path.cmi \ + asmcomp/linking_state.cmi \ parsing/lexer.cmi \ bytecomp/lambda.cmi \ typing/includemod.cmi \ - asmcomp/import_approx.cmi \ typing/ident.cmi \ toplevel/genprintval.cmi \ typing/env.cmi \ utils/config.cmi \ driver/compmisc.cmi \ - asmcomp/compilenv.cmi \ + middle_end/compilation_unit.cmi \ + middle_end/compilation_state.cmi \ driver/compenv.cmi \ utils/clflags.cmi \ typing/btype.cmi \ + asmcomp/backend_sym.cmi \ middle_end/backend_intf.cmi \ parsing/asttypes.cmi \ parsing/ast_helper.cmi \ @@ -5928,6 +6154,7 @@ toplevel/opttoploop.cmx : \ typing/typedtree.cmx \ typing/typecore.cmx \ bytecomp/translmod.cmx \ + middle_end/symbol.cmx \ bytecomp/simplif.cmx \ asmcomp/proc.cmx \ typing/printtyped.cmx \ @@ -5943,23 +6170,24 @@ toplevel/opttoploop.cmx : \ typing/outcometree.cmi \ typing/oprint.cmx \ utils/misc.cmx \ - middle_end/middle_end.cmx \ parsing/longident.cmx \ parsing/location.cmx \ utils/load_path.cmx \ + asmcomp/linking_state.cmx \ parsing/lexer.cmx \ bytecomp/lambda.cmx \ typing/includemod.cmx \ - asmcomp/import_approx.cmx \ typing/ident.cmx \ toplevel/genprintval.cmx \ typing/env.cmx \ utils/config.cmx \ driver/compmisc.cmx \ - asmcomp/compilenv.cmx \ + middle_end/compilation_unit.cmx \ + middle_end/compilation_state.cmx \ driver/compenv.cmx \ utils/clflags.cmx \ typing/btype.cmx \ + asmcomp/backend_sym.cmx \ middle_end/backend_intf.cmi \ parsing/asttypes.cmi \ parsing/ast_helper.cmx \ @@ -6026,9 +6254,8 @@ toplevel/topdirs.cmo : \ typing/env.cmi \ bytecomp/dll.cmi \ typing/ctype.cmi \ - utils/consistbl.cmi \ utils/config.cmi \ - bytecomp/cmo_format.cmi \ + file_formats/cmo_format.cmi \ utils/clflags.cmi \ typing/btype.cmi \ parsing/asttypes.cmi \ @@ -6055,9 +6282,8 @@ toplevel/topdirs.cmx : \ typing/env.cmx \ bytecomp/dll.cmx \ typing/ctype.cmx \ - utils/consistbl.cmx \ utils/config.cmx \ - bytecomp/cmo_format.cmi \ + file_formats/cmo_format.cmi \ utils/clflags.cmx \ typing/btype.cmx \ parsing/asttypes.cmi \ @@ -6221,9 +6447,11 @@ toplevel/trace.cmi : \ parsing/longident.cmi \ typing/env.cmi driver/compdynlink.cmx : \ + utils/config.cmx \ + middle_end/compilation_unit.cmx \ driver/compdynlink_types.cmx \ driver/compdynlink_common.cmx \ - asmcomp/cmx_format.cmi \ + file_formats/cmxs_format.cmx \ driver/compdynlink.cmi driver/compdynlink.cmo : \ bytecomp/symtable.cmi \ @@ -6235,5 +6463,5 @@ driver/compdynlink.cmo : \ utils/config.cmi \ driver/compdynlink_types.cmi \ driver/compdynlink_common.cmi \ - bytecomp/cmo_format.cmi \ + file_formats/cmo_format.cmi \ driver/compdynlink.cmi diff --git a/.gitignore b/.gitignore index e5c84de36154..17302650de0e 100644 --- a/.gitignore +++ b/.gitignore @@ -129,6 +129,9 @@ _build /otherlibs/dynlink/extract_crc /otherlibs/dynlink/dynlink_platform_intf.mli +/otherlibs/dynlink/dynlink_compilerlibs/Makefile.copy-sources +/otherlibs/dynlink/dynlink_compilerlibs/*.ml +/otherlibs/dynlink/dynlink_compilerlibs/*.mli /otherlibs/threads/marshal.mli /otherlibs/threads/stdlib.mli /otherlibs/threads/unix.mli diff --git a/Changes b/Changes index b46f44a0febc..d1fafeee2b1c 100644 --- a/Changes +++ b/Changes @@ -3,6 +3,12 @@ Working version (Changes that can break existing programs are marked with a "*") +### Code generation and optimizations: + +- GPR#2278: Remove native code generation support for 32-bit Intel Darwin + targets. + (Mark Shinwell) + ### Internal/compiler-libs changes: - GPR#1579: Add a separate types for clambda primitives @@ -24,6 +30,10 @@ Working version - GPR#2265: Add bytecomp/opcodes.mli (Mark Shinwell, review by Nicolas Ojeda Bar) +- GPR#2268: Improve packing mechanism used for building compilerlibs modules + into the Dynlink libraries + (Mark Shinwell, Stephen Dolan, review by David Allsopp) + ### Runtime system: - GPR#1725: Deprecate Obj.set_tag @@ -717,6 +727,10 @@ OCaml 4.08.0 - GPR#2072: Always associate a scope to a type (Thomas Refis, review by Jacques Garrigue and Leo White) +- GPR#2073: Add [Asm_directives], [Asm_label], [Asm_section], [Asm_symbol], + [Backend_sym] and [Target_system]. + (Mark Shinwell, review by Damien Doligez) + - GPR#2074: Correct naming of record field inside [Ialloc] terms. (Mark Shinwell, review by Jérémie Dimino) diff --git a/Makefile b/Makefile index 7815862374da..f87511ffd8c2 100644 --- a/Makefile +++ b/Makefile @@ -47,9 +47,11 @@ include stdlib/StdlibModules CAMLC=$(CAMLRUN) boot/ocamlc -g -nostdlib -I boot -use-prims runtime/primitives CAMLOPT=$(CAMLRUN) ./ocamlopt -g -nostdlib -I stdlib -I otherlibs/dynlink ARCHES=amd64 i386 arm arm64 power s390x -INCLUDES=-I utils -I parsing -I typing -I bytecomp -I middle_end \ - -I middle_end/base_types -I asmcomp -I asmcomp/debug \ - -I driver -I toplevel +INCLUDES=-I utils -I parsing -I typing -I bytecomp -I file_formats \ + -I middle_end -I middle_end/closure \ + -I middle_end/flambda -I middle_end/flambda/base_types \ + -I asmcomp -I asmcomp/debug \ + -I asmcomp/asm_target -I driver -I toplevel COMPFLAGS=-strict-sequence -principal -absname -w +a-4-9-41-42-44-45-48-66 \ -warn-error A \ @@ -77,7 +79,8 @@ UTILS=utils/config.cmo utils/build_path_prefix_map.cmo utils/misc.cmo \ utils/terminfo.cmo utils/ccomp.cmo utils/warnings.cmo \ utils/consistbl.cmo \ utils/strongly_connected_components.cmo \ - utils/targetint.cmo + utils/targetint.cmo \ + utils/int_replace_polymorphic_compare.cmo PARSING=parsing/location.cmo parsing/longident.cmo \ parsing/docstrings.cmo parsing/syntaxerr.cmo \ @@ -92,14 +95,13 @@ TYPING=typing/ident.cmo typing/path.cmo \ typing/primitive.cmo typing/types.cmo \ typing/btype.cmo typing/oprint.cmo \ typing/subst.cmo typing/predef.cmo \ - typing/datarepr.cmo typing/cmi_format.cmo \ - typing/persistent_env.cmo \ - typing/env.cmo \ + typing/datarepr.cmo file_formats/cmi_format.cmo \ + typing/persistent_env.cmo typing/env.cmo \ typing/typedtree.cmo typing/printtyped.cmo typing/ctype.cmo \ typing/printtyp.cmo typing/includeclass.cmo \ typing/mtype.cmo typing/envaux.cmo typing/includecore.cmo \ typing/typedtreeIter.cmo typing/tast_mapper.cmo \ - typing/cmt_format.cmo typing/untypeast.cmo \ + file_formats/cmt_format.cmo typing/untypeast.cmo \ typing/includemod.cmo typing/typetexp.cmo typing/printpat.cmo \ typing/parmatch.cmo typing/stypes.cmo \ typing/typedecl_properties.cmo typing/typedecl_variance.cmo \ @@ -108,7 +110,11 @@ TYPING=typing/ident.cmo typing/path.cmo \ typing/rec_check.cmo typing/typecore.cmo typing/typeclass.cmo \ typing/typemod.cmo -COMP=bytecomp/lambda.cmo bytecomp/printlambda.cmo \ +# We need [Compilation_unit] and [Cmxs_format] in [COMP] because +# the dynlink code for compiler plugins needs them. + +COMP=bytecomp/debuginfo.cmo \ + bytecomp/lambda.cmo bytecomp/printlambda.cmo \ bytecomp/switch.cmo bytecomp/matching.cmo \ bytecomp/translobj.cmo bytecomp/translattribute.cmo \ bytecomp/translprim.cmo bytecomp/translcore.cmo \ @@ -119,6 +125,8 @@ COMP=bytecomp/lambda.cmo bytecomp/printlambda.cmo \ bytecomp/symtable.cmo \ driver/pparse.cmo driver/main_args.cmo \ driver/compenv.cmo driver/compmisc.cmo \ + middle_end/compilation_unit.cmo \ + file_formats/cmxs_format.cmo \ driver/compdynlink_types.cmo driver/compdynlink_platform_intf.cmo \ driver/compdynlink_common.cmo driver/compdynlink.cmo \ driver/compplugin.cmo driver/makedepend.cmo \ @@ -151,26 +159,23 @@ ARCH_SPECIFIC_ASMCOMP=$(INTEL_ASM) endif ASMCOMP=\ + asmcomp/object_file.cmo \ + asmcomp/backend_compilation_unit.cmo \ + asmcomp/backend_sym.cmo \ + asmcomp/target_system.cmo \ + asmcomp/asm_target/asm_section.cmo \ + asmcomp/asm_target/asm_symbol.cmo \ $(ARCH_SPECIFIC_ASMCOMP) \ asmcomp/arch.cmo \ - asmcomp/backend_var.cmo \ asmcomp/cmm.cmo asmcomp/printcmm.cmo \ asmcomp/reg.cmo asmcomp/debug/reg_with_debug_info.cmo \ asmcomp/debug/reg_availability_set.cmo \ asmcomp/mach.cmo asmcomp/proc.cmo \ - asmcomp/clambda.cmo asmcomp/printclambda.cmo \ - asmcomp/export_info.cmo \ - asmcomp/export_info_for_pack.cmo \ - asmcomp/compilenv.cmo \ - asmcomp/closure.cmo \ - asmcomp/traverse_for_exported_symbols.cmo \ - asmcomp/build_export_info.cmo \ - asmcomp/closure_offsets.cmo \ - asmcomp/flambda_to_clambda.cmo \ - asmcomp/import_approx.cmo \ - asmcomp/un_anf.cmo \ + asmcomp/linking_state.cmo \ asmcomp/afl_instrument.cmo \ - asmcomp/strmatch.cmo asmcomp/cmmgen.cmo \ + asmcomp/strmatch.cmo \ + asmcomp/cmmgen_state.cmo \ + asmcomp/cmmgen.cmo \ asmcomp/interval.cmo \ asmcomp/printmach.cmo asmcomp/selectgen.cmo \ asmcomp/spacetime_profiling.cmo asmcomp/selection.cmo \ @@ -191,72 +196,97 @@ ASMCOMP=\ asmcomp/asmlink.cmo asmcomp/asmlibrarian.cmo asmcomp/asmpackager.cmo \ driver/opterrors.cmo driver/optcompile.cmo +# Files under middle_end/ are not to reference files under asmcomp/. +# This ensures that the middle end can be linked (e.g. for objinfo) even when +# the native code compiler is not present for some particular target. + +MIDDLE_END_CLOSURE=\ + middle_end/closure/closure.cmo \ + middle_end/closure/closure_middle_end.cmo + +# Owing to dependencies through [Compilation_state], which would be +# difficult to remove, some of the lower parts of Flambda (anything that is +# saved in a .cmx file) have to be included in the [MIDDLE_END] stanza, below. +MIDDLE_END_FLAMBDA=\ + middle_end/flambda/import_approx.cmo \ + middle_end/flambda/lift_code.cmo \ + middle_end/flambda/closure_conversion_aux.cmo \ + middle_end/flambda/closure_conversion.cmo \ + middle_end/flambda/initialize_symbol_to_let_symbol.cmo \ + middle_end/flambda/lift_let_to_initialize_symbol.cmo \ + middle_end/flambda/find_recursive_functions.cmo \ + middle_end/flambda/invariant_params.cmo \ + middle_end/flambda/inconstant_idents.cmo \ + middle_end/flambda/alias_analysis.cmo \ + middle_end/flambda/lift_constants.cmo \ + middle_end/flambda/share_constants.cmo \ + middle_end/flambda/simplify_common.cmo \ + middle_end/flambda/remove_unused_arguments.cmo \ + middle_end/flambda/remove_unused_closure_vars.cmo \ + middle_end/flambda/remove_unused_program_constructs.cmo \ + middle_end/flambda/simplify_boxed_integer_ops.cmo \ + middle_end/flambda/simplify_primitives.cmo \ + middle_end/flambda/inlining_stats_types.cmo \ + middle_end/flambda/inlining_stats.cmo \ + middle_end/flambda/inline_and_simplify_aux.cmo \ + middle_end/flambda/remove_free_vars_equal_to_args.cmo \ + middle_end/flambda/extract_projections.cmo \ + middle_end/flambda/augment_specialised_args.cmo \ + middle_end/flambda/unbox_free_vars_of_closures.cmo \ + middle_end/flambda/unbox_specialised_args.cmo \ + middle_end/flambda/unbox_closures.cmo \ + middle_end/flambda/inlining_transforms.cmo \ + middle_end/flambda/inlining_decision.cmo \ + middle_end/flambda/inline_and_simplify.cmo \ + middle_end/flambda/ref_to_variables.cmo \ + middle_end/flambda/flambda_invariants.cmo \ + middle_end/flambda/traverse_for_exported_symbols.cmo \ + middle_end/flambda/build_export_info.cmo \ + middle_end/flambda/closure_offsets.cmo \ + middle_end/flambda/un_anf.cmo \ + middle_end/flambda/flambda_to_clambda.cmo \ + middle_end/flambda/flambda_middle_end.cmo + MIDDLE_END=\ - middle_end/int_replace_polymorphic_compare.cmo \ - middle_end/debuginfo.cmo \ - asmcomp/clambda_primitives.cmo \ - asmcomp/semantics_of_primitives.cmo \ - asmcomp/convert_primitives.cmo \ - asmcomp/printclambda_primitives.cmo \ - middle_end/base_types/tag.cmo \ - middle_end/base_types/linkage_name.cmo \ - middle_end/base_types/compilation_unit.cmo \ + middle_end/provenance.cmo \ middle_end/internal_variable_names.cmo \ - middle_end/base_types/variable.cmo \ - middle_end/base_types/mutable_variable.cmo \ - middle_end/base_types/id_types.cmo \ - middle_end/base_types/set_of_closures_id.cmo \ - middle_end/base_types/set_of_closures_origin.cmo \ - middle_end/base_types/closure_element.cmo \ - middle_end/base_types/closure_id.cmo \ - middle_end/base_types/closure_origin.cmo \ - middle_end/base_types/var_within_closure.cmo \ - middle_end/base_types/static_exception.cmo \ - middle_end/base_types/export_id.cmo \ - middle_end/base_types/symbol.cmo \ - middle_end/pass_wrapper.cmo \ - middle_end/allocated_const.cmo \ - middle_end/parameter.cmo \ - middle_end/projection.cmo \ - middle_end/flambda.cmo \ - middle_end/flambda_iterators.cmo \ - middle_end/flambda_utils.cmo \ - middle_end/inlining_cost.cmo \ - middle_end/effect_analysis.cmo \ - middle_end/freshening.cmo \ - middle_end/simple_value_approx.cmo \ - middle_end/lift_code.cmo \ - middle_end/closure_conversion_aux.cmo \ - middle_end/closure_conversion.cmo \ - middle_end/initialize_symbol_to_let_symbol.cmo \ - middle_end/lift_let_to_initialize_symbol.cmo \ - middle_end/find_recursive_functions.cmo \ - middle_end/invariant_params.cmo \ - middle_end/inconstant_idents.cmo \ - middle_end/alias_analysis.cmo \ - middle_end/lift_constants.cmo \ - middle_end/share_constants.cmo \ - middle_end/simplify_common.cmo \ - middle_end/remove_unused_arguments.cmo \ - middle_end/remove_unused_closure_vars.cmo \ - middle_end/remove_unused_program_constructs.cmo \ - middle_end/simplify_boxed_integer_ops.cmo \ - middle_end/simplify_primitives.cmo \ - middle_end/inlining_stats_types.cmo \ - middle_end/inlining_stats.cmo \ - middle_end/inline_and_simplify_aux.cmo \ - middle_end/remove_free_vars_equal_to_args.cmo \ - middle_end/extract_projections.cmo \ - middle_end/augment_specialised_args.cmo \ - middle_end/unbox_free_vars_of_closures.cmo \ - middle_end/unbox_specialised_args.cmo \ - middle_end/unbox_closures.cmo \ - middle_end/inlining_transforms.cmo \ - middle_end/inlining_decision.cmo \ - middle_end/inline_and_simplify.cmo \ - middle_end/ref_to_variables.cmo \ - middle_end/flambda_invariants.cmo \ - middle_end/middle_end.cmo + middle_end/variable.cmo \ + middle_end/flambda/base_types/closure_element.cmo \ + middle_end/flambda/base_types/closure_id.cmo \ + middle_end/symbol.cmo \ + middle_end/backend_var.cmo \ + middle_end/clambda_primitives.cmo \ + middle_end/printclambda_primitives.cmo \ + middle_end/clambda.cmo \ + middle_end/printclambda.cmo \ + middle_end/semantics_of_primitives.cmo \ + middle_end/convert_primitives.cmo \ + middle_end/flambda/base_types/id_types.cmo \ + middle_end/flambda/base_types/export_id.cmo \ + middle_end/flambda/base_types/tag.cmo \ + middle_end/flambda/base_types/mutable_variable.cmo \ + middle_end/flambda/base_types/set_of_closures_id.cmo \ + middle_end/flambda/base_types/set_of_closures_origin.cmo \ + middle_end/flambda/base_types/closure_origin.cmo \ + middle_end/flambda/base_types/var_within_closure.cmo \ + middle_end/flambda/base_types/static_exception.cmo \ + middle_end/flambda/pass_wrapper.cmo \ + middle_end/flambda/allocated_const.cmo \ + middle_end/flambda/parameter.cmo \ + middle_end/flambda/projection.cmo \ + middle_end/flambda/flambda.cmo \ + middle_end/flambda/flambda_iterators.cmo \ + middle_end/flambda/flambda_utils.cmo \ + middle_end/flambda/freshening.cmo \ + middle_end/flambda/effect_analysis.cmo \ + middle_end/flambda/inlining_cost.cmo \ + middle_end/flambda/simple_value_approx.cmo \ + middle_end/flambda/export_info.cmo \ + file_formats/cmx_format.cmo \ + file_formats/cmxa_format.cmo \ + middle_end/compilation_state.cmo \ + $(MIDDLE_END_CLOSURE) \ + $(MIDDLE_END_FLAMBDA) OPTCOMP=$(MIDDLE_END) $(ASMCOMP) @@ -540,6 +570,7 @@ endif parsing/*.cmi \ typing/*.cmi \ bytecomp/*.cmi \ + file_formats/*.cmi \ driver/*.cmi \ toplevel/*.cmi \ "$(INSTALL_COMPLIBDIR)" @@ -548,6 +579,7 @@ ifeq "$(INSTALL_SOURCE_ARTIFACTS)" "true" utils/*.cmt utils/*.cmti utils/*.mli \ parsing/*.cmt parsing/*.cmti parsing/*.mli \ typing/*.cmt typing/*.cmti typing/*.mli \ + file_formats/*.cmt file_formats/*.cmti file_formats/*.mli \ bytecomp/*.cmt bytecomp/*.cmti bytecomp/*.mli \ driver/*.cmt driver/*.cmti driver/*.mli \ toplevel/*.cmt toplevel/*.cmti toplevel/*.mli \ @@ -613,24 +645,45 @@ endif middle_end/*.cmi \ "$(INSTALL_COMPLIBDIR)" $(INSTALL_DATA) \ - middle_end/base_types/*.cmi \ + middle_end/closure/*.cmi \ + "$(INSTALL_COMPLIBDIR)" + $(INSTALL_DATA) \ + middle_end/flambda/*.cmi \ + "$(INSTALL_COMPLIBDIR)" + $(INSTALL_DATA) \ + middle_end/flambda/base_types/*.cmi \ "$(INSTALL_COMPLIBDIR)" $(INSTALL_DATA) \ asmcomp/*.cmi \ "$(INSTALL_COMPLIBDIR)" + $(INSTALL_DATA) \ + asmcomp/asm_target/*.cmi \ + "$(INSTALL_COMPLIBDIR)" ifeq "$(INSTALL_SOURCE_ARTIFACTS)" "true" $(INSTALL_DATA) \ middle_end/*.cmt middle_end/*.cmti \ middle_end/*.mli \ "$(INSTALL_COMPLIBDIR)" $(INSTALL_DATA) \ - middle_end/base_types/*.cmt middle_end/base_types/*.cmti \ - middle_end/base_types/*.mli \ + middle_end/closure/*.cmt middle_end/closure/*.cmti \ + middle_end/closure/*.mli \ + "$(INSTALL_COMPLIBDIR)" + $(INSTALL_DATA) \ + middle_end/flambda/*.cmt middle_end/flambda/*.cmti \ + middle_end/flambda/*.mli \ + "$(INSTALL_COMPLIBDIR)" + $(INSTALL_DATA) \ + middle_end/flambda/base_types/*.cmt middle_end/flambda/base_types/*.cmti \ + middle_end/flambda/base_types/*.mli \ "$(INSTALL_COMPLIBDIR)" $(INSTALL_DATA) \ asmcomp/*.cmt asmcomp/*.cmti \ asmcomp/*.mli \ "$(INSTALL_COMPLIBDIR)" + $(INSTALL_DATA) \ + asmcomp/asm_target/*.cmt asmcomp/asm_target/*.cmti \ + asmcomp/asm_target/*.mli \ + "$(INSTALL_COMPLIBDIR)" endif $(INSTALL_DATA) \ compilerlibs/ocamloptcomp.cma $(OPTSTART) \ @@ -669,8 +722,10 @@ installoptopt: $(LN) ocamllex.opt$(EXE) ocamllex$(EXE) $(INSTALL_DATA) \ utils/*.cmx parsing/*.cmx typing/*.cmx bytecomp/*.cmx \ - driver/*.cmx asmcomp/*.cmx middle_end/*.cmx \ - middle_end/base_types/*.cmx "$(INSTALL_COMPLIBDIR)" + file_formats/*.cmx \ + driver/*.cmx asmcomp/*.cmx middle_end/*.cmx middle_end/closure/*.cmx \ + middle_end/flambda/*.cmx middle_end/flambda/base_types/*.cmx \ + "$(INSTALL_COMPLIBDIR)" $(INSTALL_DATA) \ compilerlibs/ocamlcommon.cmxa compilerlibs/ocamlcommon.$(A) \ compilerlibs/ocamlbytecomp.cmxa compilerlibs/ocamlbytecomp.$(A) \ @@ -699,7 +754,9 @@ install-compiler-sources: ifeq "$(INSTALL_SOURCE_ARTIFACTS)" "true" $(INSTALL_DATA) \ utils/*.ml parsing/*.ml typing/*.ml bytecomp/*.ml driver/*.ml \ - toplevel/*.ml middle_end/*.ml middle_end/base_types/*.ml \ + file_formats/*.ml \ + toplevel/*.ml middle_end/*.ml middle_end/closure/*.ml \ + middle_end/flambda/*.ml middle_end/flambda/base_types/*.ml \ asmcomp/*.ml \ "$(INSTALL_COMPLIBDIR)" endif @@ -1108,10 +1165,7 @@ lintapidiff: grep -Ev internal\|obj\|spacetime\|stdLabels\|moreLabels |\ tools/lintapidiff.opt $(VERSIONS) -# The middle end (whose .cma library is currently only used for linking -# the "ocamlobjinfo" program, since we cannot depend on the whole native code -# compiler for "make world" and the list of dependencies for -# asmcomp/export_info.cmo is long). +# The middle end. compilerlibs/ocamlmiddleend.cma: $(MIDDLE_END) $(CAMLC) -a -o $@ $^ @@ -1125,9 +1179,7 @@ partialclean:: # Tools .PHONY: ocamltools -ocamltools: ocamlc ocamllex asmcomp/cmx_format.cmi \ - asmcomp/printclambda.cmo compilerlibs/ocamlmiddleend.cma \ - asmcomp/export_info.cmo +ocamltools: ocamlc ocamllex compilerlibs/ocamlmiddleend.cma $(MAKE) -C tools all .PHONY: ocamltoolsopt @@ -1135,9 +1187,7 @@ ocamltoolsopt: ocamlopt $(MAKE) -C tools opt .PHONY: ocamltoolsopt.opt -ocamltoolsopt.opt: ocamlc.opt ocamllex.opt asmcomp/cmx_format.cmi \ - asmcomp/printclambda.cmx compilerlibs/ocamlmiddleend.cmxa \ - asmcomp/export_info.cmx +ocamltoolsopt.opt: ocamlc.opt ocamllex.opt compilerlibs/ocamlmiddleend.cmxa $(MAKE) -C tools opt.opt partialclean:: @@ -1200,15 +1250,13 @@ driver/compdynlink_platform_intf.ml: $(DYNLINK_DIR)/dynlink_platform_intf.ml \ driver/compify_dynlink.sh $< $@ ifeq ($(NATDYNLINK),true) -driver/compdynlink.mlopt: $(DYNLINK_DIR)/natdynlink.ml driver/compdynlink.mli - cat $(DYNLINK_DIR)/natdynlink.ml | \ - sed 's/Dynlink_/Compdynlink_/g' \ - > driver/compdynlink.mlopt +driver/compdynlink.mlopt: $(DYNLINK_DIR)/natdynlink.ml driver/compdynlink.mli \ + driver/compify_dynlink.sh + driver/compify_dynlink.sh $< $@ else -driver/compdynlink.mlopt: $(DYNLINK_DIR)/nodynlink.ml driver/compdynlink.mli - cat $(DYNLINK_DIR)/nodynlink.ml | \ - sed 's/Dynlink_/Compdynlink_/g' \ - > driver/compdynlink.mlopt +driver/compdynlink.mlopt: $(DYNLINK_DIR)/nodynlink.ml driver/compdynlink.mli \ + driver/compify_dynlink.sh + driver/compify_dynlink.sh $< $@ endif driver/compdynlink.mli: $(DYNLINK_DIR)/dynlink.mli \ @@ -1331,8 +1379,10 @@ partialclean:: $(CAMLOPT) $(COMPFLAGS) -c $< partialclean:: - for d in utils parsing typing bytecomp asmcomp middle_end \ - middle_end/base_types asmcomp/debug driver toplevel tools; do \ + for d in utils parsing typing bytecomp asmcomp middle_end file_formats \ + middle_end/closure middle_end/flambda \ + middle_end/flambda/base_types asmcomp/debug asmcomp/asm_target \ + driver toplevel tools; do \ rm -f $$d/*.cm[ioxt] $$d/*.cmti $$d/*.annot $$d/*.$(S) \ $$d/*.$(O) $$d/*.$(SO) $$d/*~; \ done @@ -1340,8 +1390,10 @@ partialclean:: .PHONY: depend depend: beforedepend - (for d in utils parsing typing bytecomp asmcomp middle_end \ - middle_end/base_types asmcomp/debug driver toplevel; \ + (for d in utils parsing typing bytecomp asmcomp middle_end file_formats \ + middle_end/closure middle_end/flambda \ + middle_end/flambda/base_types asmcomp/debug asmcomp/asm_target \ + driver toplevel; \ do $(CAMLDEP) $(DEPFLAGS) $(DEPINCLUDES) $$d/*.mli $$d/*.ml || exit; \ done) > .depend $(CAMLDEP) $(DEPFLAGS) $(DEPINCLUDES) -native \ diff --git a/NOTES b/NOTES new file mode 100644 index 000000000000..1ee9a9103e76 --- /dev/null +++ b/NOTES @@ -0,0 +1,79 @@ +Advantages: + +- Coherent path from Symbol.t -> Backend_sym.t -> Asm_symbol.t + with details such as OCaml-specific mangling and target-specific mangling + kept separate. + +- The new symbol types (and in due course the new label types) will make + amd64/emit.mlp in particular much easier to understand in these areas. + +- Many occurrences of type "string" removed. Various data structures improved + so that they cannot represent cases that should be unrepresentable (e.g. + sets/maps instead of lists) -- although more checks could be done when + adding to such data structures. + +- Various checks are possible on symbols to make sure that we're not + emitting symbol references in forms that we haven't thought about. + +- The new version of Compilenv (Compilation_state / Linking_state) are + more straightforward, with more discoverable interfaces, than previously. + +- Various tangled-up code introduced along with Flambda has been cleaned up. + +- Rewriting upon creating packs in Flambda is now not required. This appears + to open the door, in conjunction with some (hopefully fairly minor) + future changes, to not having to rewrite export info at all when reading + .cmx files. This could give a decent speedup. + +- Cmx_format is now immutable. + +- Many comments written or improved. + +- More Flambda and Closure specific code is in the Flambda and Closure files + rather than e.g. in Asmgen. + +- Many fewer files in asmcomp/. The middle end now is actually in the + middle_end/ directory. + +- Clean separation between ocamlmiddleend.cmxa and the backend. This has + simplified the tools/ makefile and should cause the build to be more robust. + +- All "file format modules" are together in one directory. + +- The distinction between CU.Name.t and CU.t crystallises the fact that we + don't know the -for-pack prefix when building .cmi files or resolving + arbitrary [Ident.t]s. + +- Have as a side-effect removed the strange situation of predefined idents + being in the imports lists in .cmx files. + +- Stronger types help to prevent dubious practices such as going back via + previous intermediate languages when translating some particular + language (e.g. Cmm). They also catch confusion where (e.g. in asmlink.ml) + a filename was being provided as a compilation unit name rather than using + the unit name from UI.t. + +- Clarified subtle things such as the fact that [defines] must be in + initialisation order. + +- Step on the road towards namespace support. + +- Various unusual and/or unsatisfactory formatting has been tidied up along the + way. + +- Catches cases such as in the lib-dynlink-native tests where module paths + were being accepted without the correct pack prefix. + +- Local / global symbol annotations - Fu Yong's patch does the analysis. + +Things this GPR does not do: + +- Update the x86 DSL files to use Asm_symbol. This will be done as part of the + Asm_directives patch. + +- Stop using Backend_var in Clambda and use Variable instead. (It is now + clear that Backend_var should start at Cmm, like Backend_sym.) + +- Replacing [modname] (and other places e.g. dynlink that use [string]) + with a new type, in its own module. This could potentially supercede + [Compilation_unit.Name.t]. \ No newline at end of file diff --git a/asmcomp/afl_instrument.ml b/asmcomp/afl_instrument.ml index 659e0f0dc897..dcd0f6bb12dd 100644 --- a/asmcomp/afl_instrument.ml +++ b/asmcomp/afl_instrument.ml @@ -16,12 +16,13 @@ open Lambda open Cmm +open Backend_sym.Names module V = Backend_var module VP = Backend_var.With_provenance -let afl_area_ptr = Cconst_symbol "caml_afl_area_ptr" -let afl_prev_loc = Cconst_symbol "caml_afl_prev_loc" +let afl_area_ptr = Cconst_symbol caml_afl_area_ptr +let afl_prev_loc = Cconst_symbol caml_afl_prev_loc let afl_map_size = 1 lsl 16 let rec with_afl_logging b = @@ -92,7 +93,7 @@ let instrument_initialiser c = calls *) with_afl_logging (Csequence - (Cop (Cextcall ("caml_setup_afl", typ_int, false, None), + (Cop (Cextcall (caml_setup_afl, typ_int, false, None), [Cconst_int 0], Debuginfo.none), c)) diff --git a/asmcomp/amd64/arch.ml b/asmcomp/amd64/arch.ml index 62ba88089ac9..2d7e5e2d2820 100644 --- a/asmcomp/amd64/arch.ml +++ b/asmcomp/amd64/arch.ml @@ -26,7 +26,7 @@ let command_line_options = open Format type addressing_mode = - Ibased of string * int (* symbol + displ *) + Ibased of Backend_sym.t * int (* symbol + displ *) | Iindexed of int (* reg + displ *) | Iindexed2 of int (* reg + reg + displ *) | Iscaled of int * int (* reg * scale + displ *) @@ -87,9 +87,9 @@ let num_args_addressing = function let print_addressing printreg addr ppf arg = match addr with | Ibased(s, 0) -> - fprintf ppf "\"%s\"" s + fprintf ppf "\"%a\"" Backend_sym.print s | Ibased(s, n) -> - fprintf ppf "\"%s\" + %i" s n + fprintf ppf "\"%a\" + %i" Backend_sym.print s n | Iindexed n -> let idx = if n <> 0 then Printf.sprintf " + %i" n else "" in fprintf ppf "%a%s" printreg arg.(0) idx diff --git a/asmcomp/amd64/emit.mlp b/asmcomp/amd64/emit.mlp index e984ed56d4db..e268f2b55aa8 100644 --- a/asmcomp/amd64/emit.mlp +++ b/asmcomp/amd64/emit.mlp @@ -16,6 +16,8 @@ (* Emission of Intel x86_64 assembly code *) +[@@@ocaml.warning "-40"] + open Cmm open Arch open Proc @@ -27,7 +29,10 @@ open Emitaux open X86_ast open X86_proc open X86_dsl -module String = Misc.Stdlib.String + +module AS = Asm_section +module S = Asm_symbol +open Asm_symbol.Names (* [Branch_relaxation] is not used in this file, but is required by emit.mlp files for certain other targets; the reference here ensures @@ -96,28 +101,30 @@ let slot_offset loc cl = (* Symbols *) -let symbol_prefix = if system = S_macosx then "_" else "" - -let emit_symbol s = string_of_symbol symbol_prefix s +let emit_symbol s = Asm_symbol.encode s (* Record symbols used and defined - at the end generate extern for those used but not defined *) -let symbols_defined = ref String.Set.empty -let symbols_used = ref String.Set.empty +let symbols_defined = ref S.Set.empty +let symbols_used = ref S.Set.empty -let add_def_symbol s = symbols_defined := String.Set.add s !symbols_defined -let add_used_symbol s = symbols_used := String.Set.add s !symbols_used +let add_def_symbol s = symbols_defined := S.Set.add s !symbols_defined +let add_used_symbol s = symbols_used := S.Set.add s !symbols_used -let imp_table = Hashtbl.create 16 +let imp_table = S.Tbl.create 16 -let reset_imp_table () = Hashtbl.clear imp_table +let reset_imp_table () = S.Tbl.clear imp_table let get_imp_symbol s = - match Hashtbl.find imp_table s with + match S.Tbl.find imp_table s with | exception Not_found -> - let imps = "__caml_imp_" ^ s in - Hashtbl.add imp_table s imps; + let imps_name = "__caml_imp_%s" ^ (S.encode s) in + let imps = + S.of_external_name AS.Data Object_file.current_compilation_unit + imps_name + in + S.Tbl.add imp_table s imps; imps | imps -> imps @@ -129,7 +136,7 @@ let emit_imp_table () = D.data(); D.comment "relocation table start"; D.align 8; - Hashtbl.iter f imp_table; + S.Tbl.iter f imp_table; D.comment "relocation table end" let mem__imp s = @@ -218,6 +225,7 @@ let res32 i n = emit_subreg reg_low_32_name DWORD i.res.(n) let addressing addr typ i n = match addr with | Ibased(s, ofs) -> + let s = S.create s in add_used_symbol s; mem64_rip typ (emit_symbol s) ~ofs | Iindexed d -> @@ -292,7 +300,7 @@ let emit_call_gc gc = assert Config.spacetime; spacetime_before_uninstrumented_call ~node_ptr ~index end; - emit_call "caml_call_gc"; + emit_call caml_call_gc; def_label gc.gc_frame; I.jmp (label gc.gc_return_lbl) @@ -331,14 +339,14 @@ let emit_call_bound_error bd = | Some (node_ptr, index) -> spacetime_before_uninstrumented_call ~node_ptr ~index end; - emit_call "caml_ml_array_bound_error"; + emit_call caml_ml_array_bound_error; def_label bd.bd_frame let emit_call_bound_errors () = List.iter emit_call_bound_error !bound_error_sites; if !bound_error_call > 0 then begin def_label !bound_error_call; - emit_call "caml_ml_array_bound_error" + emit_call caml_ml_array_bound_error end (* Names for instructions *) @@ -466,10 +474,11 @@ let emit_float_constant f lbl = _label (emit_label lbl); D.qword (Const f) -let emit_global_label s = - let lbl = Compilenv.make_symbol (Some s) in - add_def_symbol lbl; - let lbl = emit_symbol lbl in +let emit_global_symbol compilation_unit kind base_name = + let backend_sym = Backend_sym.create ~compilation_unit ~base_name kind in + let sym = S.create backend_sym in + add_def_symbol sym; + let lbl = emit_symbol sym in D.global lbl; _label lbl @@ -486,14 +495,14 @@ let emit_profile () = if not fp then I.mov rsp rbp; (* No Spacetime instrumentation needed: [mcount] cannot call anything OCaml-related. *) - emit_call "mcount"; + emit_call mcount; I.pop r10 end (* Output the assembly code for an instruction *) (* Name of current function *) -let function_name = ref "" +let function_name = ref None (* Entry point for tail recursive calls *) let tailrec_entry_point = ref 0 @@ -543,12 +552,14 @@ let emit_instr fallthrough i = I.movsd (mem64_rip NONE (emit_label lbl)) (res i 0) end | Lop(Iconst_symbol s) -> + let s = S.create s in add_used_symbol s; load_symbol_addr s (res i 0) | Lop(Icall_ind { label_after; }) -> I.call (arg i 0); record_frame i.live false i.dbg ~label:label_after | Lop(Icall_imm { func; label_after; }) -> + let func = S.create func in add_used_symbol func; emit_call func; record_frame i.live false i.dbg ~label:label_after @@ -560,10 +571,13 @@ let emit_instr fallthrough i = end end | Lop(Itailcall_imm { func; label_after; }) -> - begin - if func = !function_name then + let func = S.create func in + begin match !function_name with + | None -> Misc.fatal_error "[function_name] not set" + | Some function_name -> + if S.equal func function_name then begin I.jmp (label !tailrec_entry_point) - else begin + end else begin output_epilogue begin fun () -> add_used_symbol func; emit_jump func @@ -574,10 +588,11 @@ let emit_instr fallthrough i = record_frame Reg.Set.empty false i.dbg ~label:label_after end | Lop(Iextcall { func; alloc; label_after; }) -> + let func = S.create func in add_used_symbol func; if alloc then begin load_symbol_addr func rax; - emit_call "caml_c_call"; + emit_call caml_c_call; record_frame i.live false i.dbg ~label:label_after; if system <> S_win64 then begin (* TODO: investigate why such a diff. @@ -587,7 +602,7 @@ let emit_instr fallthrough i = If we do the same for Win64, we probably need to change amd64nt.asm accordingly. *) - load_symbol_addr "caml_young_ptr" r11; + load_symbol_addr caml_young_ptr r11; I.mov (mem64 QWORD 0 R11) r15 end end else begin @@ -658,13 +673,13 @@ let emit_instr fallthrough i = if spacetime_node_hole_ptr_is_in_rax then begin I.push rax end; - load_symbol_addr "caml_young_limit" rax; + load_symbol_addr caml_young_limit rax; I.cmp (mem64 QWORD 0 RAX) r15; if spacetime_node_hole_ptr_is_in_rax then begin I.pop rax (* this does not affect the flags *) end end else - I.cmp (mem64_rip QWORD (emit_symbol "caml_young_limit")) r15; + I.cmp (mem64_rip QWORD (emit_symbol caml_young_limit)) r15; let lbl_call_gc = new_label() in let dbg = if not Config.spacetime then Debuginfo.none @@ -690,12 +705,12 @@ let emit_instr fallthrough i = ~index:spacetime_index; end; begin match n with - | 16 -> emit_call "caml_alloc1" - | 24 -> emit_call "caml_alloc2" - | 32 -> emit_call "caml_alloc3" + | 16 -> emit_call caml_alloc1 + | 24 -> emit_call caml_alloc2 + | 32 -> emit_call caml_alloc3 | _ -> I.mov (int n) rax; - emit_call "caml_allocN" + emit_call caml_allocN end; let label = record_frame_label ?label:label_after_call_gc i.live false @@ -749,9 +764,9 @@ let emit_instr fallthrough i = (* We have i.arg.(0) = i.res.(0) *) instr_for_intop op (int n) (res i 0) | Lop(Inegf) -> - I.xorpd (mem64_rip OWORD (emit_symbol "caml_negf_mask")) (res i 0) + I.xorpd (mem64_rip OWORD (emit_symbol caml_negf_mask)) (res i 0) | Lop(Iabsf) -> - I.andpd (mem64_rip OWORD (emit_symbol "caml_absf_mask")) (res i 0) + I.andpd (mem64_rip OWORD (emit_symbol caml_absf_mask)) (res i 0) | Lop(Iaddf | Isubf | Imulf | Idivf as floatop) -> instr_for_floatop floatop (arg i 1) (res i 0) | Lop(Ifloatofint) -> @@ -885,7 +900,7 @@ let emit_instr fallthrough i = trie is [caml_stash_backtrace], and it does not. *) begin match k with | Cmm.Raise_withtrace -> - emit_call "caml_raise_exn"; + emit_call caml_raise_exn; record_frame Reg.Set.empty true i.dbg | Cmm.Raise_notrace -> I.mov r14 rsp; @@ -905,7 +920,8 @@ let all_functions = ref [] (* Emission of a function declaration *) let fundecl fundecl = - function_name := fundecl.fun_name; + let fun_name = S.create fundecl.fun_name in + function_name := Some fun_name; fastcode_flag := fundecl.fun_fast; tailrec_entry_point := new_label(); stack_offset := 0; @@ -915,15 +931,15 @@ let fundecl fundecl = all_functions := fundecl :: !all_functions; D.text (); D.align 16; - add_def_symbol fundecl.fun_name; + add_def_symbol fun_name; if system = S_macosx && not !Clflags.output_c_object - && is_generic_function fundecl.fun_name + && S.is_generic_function fun_name then (* PR#4690 *) - D.private_extern (emit_symbol fundecl.fun_name) + D.private_extern (emit_symbol fun_name) else - D.global (emit_symbol fundecl.fun_name); - D.label (emit_symbol fundecl.fun_name); + D.global (emit_symbol fun_name); + D.label (emit_symbol fun_name); emit_debug_info fundecl.fun_dbg; cfi_startproc (); emit_all true fundecl.fun_body; @@ -939,26 +955,30 @@ let fundecl fundecl = cfi_endproc (); begin match system with | S_gnu | S_linux -> - D.type_ (emit_symbol fundecl.fun_name) "@function"; - D.size (emit_symbol fundecl.fun_name) + D.type_ (emit_symbol fun_name) "@function"; + D.size (emit_symbol fun_name) (ConstSub ( ConstThis, - ConstLabel (emit_symbol fundecl.fun_name))) + ConstLabel (emit_symbol fun_name))) | _ -> () end (* Emission of data *) let emit_item = function - | Cglobal_symbol s -> D.global (emit_symbol s) - | Cdefine_symbol s -> add_def_symbol s; _label (emit_symbol s) + | Cglobal_symbol s -> D.global (emit_symbol (S.create s)) + | Cdefine_symbol s -> + let s = S.create s in + add_def_symbol s; _label (emit_symbol s) | Cint8 n -> D.byte (const n) | Cint16 n -> D.word (const n) | Cint32 n -> D.long (const_nat n) | Cint n -> D.qword (const_nat n) | Csingle f -> D.long (Const (Int64.of_int32 (Int32.bits_of_float f))) | Cdouble f -> D.qword (Const (Int64.bits_of_float f)) - | Csymbol_address s -> add_used_symbol s; D.qword (ConstLabel (emit_symbol s)) + | Csymbol_address s -> + let s = S.create s in + add_used_symbol s; D.qword (ConstLabel (emit_symbol s)) | Cstring s -> D.bytes s | Cskip n -> if n > 0 then D.space n | Calign n -> D.align n @@ -969,7 +989,7 @@ let data l = (* Beginning / end of an assembly file *) -let begin_assembly() = +let begin_assembly comp_unit = X86_proc.reset_asm_code (); reset_debug_info(); (* PR#5603 *) reset_imp_table(); @@ -999,33 +1019,33 @@ let begin_assembly() = | _ -> D.section [".rodata.cst8"] (Some "a") ["@progbits"] end; D.align 16; - _label (emit_symbol "caml_negf_mask"); + _label (emit_symbol caml_negf_mask); D.qword (Const 0x8000000000000000L); D.qword (Const 0L); D.align 16; - _label (emit_symbol "caml_absf_mask"); + _label (emit_symbol caml_absf_mask); D.qword (Const 0x7FFFFFFFFFFFFFFFL); D.qword (Const 0xFFFFFFFFFFFFFFFFL); end; D.data (); - emit_global_label "data_begin"; + emit_global_symbol comp_unit Data "data_begin"; D.text (); - emit_global_label "code_begin"; + emit_global_symbol comp_unit Text "code_begin"; if system = S_macosx then I.nop (); (* PR#4690 *) () -let emit_spacetime_shapes () = +let emit_spacetime_shapes comp_unit = D.data (); D.align 8; - emit_global_label "spacetime_shapes"; + emit_global_symbol comp_unit Data "spacetime_shapes"; List.iter (fun fundecl -> (* CR-someday mshinwell: some of this should be platform independent *) begin match fundecl.fun_spacetime_shape with | None -> () | Some shape -> - let funsym = emit_symbol fundecl.fun_name in + let funsym = emit_symbol (S.create fundecl.fun_name) in D.comment ("Shape for " ^ funsym ^ ":"); D.qword (ConstLabel funsym); List.iter (fun (part_of_shape, label) -> @@ -1039,6 +1059,7 @@ let emit_spacetime_shapes () = D.qword (ConstLabel (emit_label label)); begin match part_of_shape with | Direct_call_point { callee; } -> + let callee = S.create callee in D.qword (ConstLabel (emit_symbol callee)) | Indirect_call_point -> () | Allocation_point -> () @@ -1050,7 +1071,7 @@ let emit_spacetime_shapes () = D.qword (Const 0L); D.comment "End of Spacetime shapes." -let end_assembly() = +let end_assembly comp_unit = if !float_constants <> [] then begin begin match system with | S_macosx -> D.section ["__TEXT";"__literal8"] None ["8byte_literals"] @@ -1065,17 +1086,17 @@ let end_assembly() = if system = S_macosx then I.nop (); (* suppress "ld warning: atom sorting error" *) - emit_global_label "code_end"; + emit_global_symbol comp_unit Text "code_end"; emit_imp_table(); D.data (); D.qword (const 0); (* PR#6329 *) - emit_global_label "data_end"; + emit_global_symbol comp_unit Data "data_end"; D.qword (const 0); D.align 8; (* PR#7591 *) - emit_global_label "frametable"; + emit_global_symbol comp_unit Data "frametable"; let setcnt = ref 0 in emit_frames @@ -1105,7 +1126,7 @@ let end_assembly() = }; if Config.spacetime then begin - emit_spacetime_shapes () + emit_spacetime_shapes comp_unit end; if system = S_linux then @@ -1114,13 +1135,13 @@ let end_assembly() = if system = S_win64 then begin D.comment "External functions"; - String.Set.iter + S.Set.iter (fun s -> - if not (String.Set.mem s !symbols_defined) then + if not (S.Set.mem s !symbols_defined) then D.extrn (emit_symbol s) NEAR) !symbols_used; - symbols_used := String.Set.empty; - symbols_defined := String.Set.empty; + symbols_used := S.Set.empty; + symbols_defined := S.Set.empty; end; let asm = diff --git a/asmcomp/amd64/selection.ml b/asmcomp/amd64/selection.ml index db7ee0a6c0e8..1e4f074d0d3e 100644 --- a/asmcomp/amd64/selection.ml +++ b/asmcomp/amd64/selection.ml @@ -20,10 +20,12 @@ open Proc open Cmm open Mach +module S = Backend_sym + (* Auxiliary for recognizing addressing modes *) type addressing_expr = - Asymbol of string + Asymbol of S.t | Alinear of expression | Aadd of expression * expression | Ascale of expression * int @@ -118,8 +120,11 @@ let pseudoregs_for_operation op arg res = (* If you update [inline_ops], you may need to update [is_simple_expr] and/or [effects_of], below. *) let inline_ops = - [ "sqrt"; "caml_bswap16_direct"; "caml_int32_direct_bswap"; - "caml_int64_direct_bswap"; "caml_nativeint_direct_bswap" ] + let open S.Names in + S.Set.of_list [ + sqrt; caml_bswap16_direct; caml_direct_bswap Int32; + caml_direct_bswap Int64; caml_direct_bswap Nativeint; + ] (* The selector class *) @@ -136,7 +141,7 @@ method is_immediate_natint n = n <= 0x7FFFFFFFn && n >= -0x80000000n method! is_simple_expr e = match e with | Cop(Cextcall (fn, _, _, _), args, _) - when List.mem fn inline_ops -> + when S.Set.mem fn inline_ops -> (* inlined ops are simple if their arguments are *) List.for_all self#is_simple_expr args | _ -> @@ -145,7 +150,7 @@ method! is_simple_expr e = method! effects_of e = match e with | Cop(Cextcall(fn, _, _, _), args, _) - when List.mem fn inline_ops -> + when S.Set.mem fn inline_ops -> Selectgen.Effect_and_coeffect.join_list_map args self#effects_of | _ -> super#effects_of e @@ -184,6 +189,7 @@ method! select_store is_assign addr exp = super#select_store is_assign addr exp method! select_operation op args dbg = + let open S.Names in match op with (* Recognize the LEA instruction *) Caddi | Caddv | Cadda | Csubi -> @@ -201,7 +207,8 @@ method! select_operation op args dbg = self#select_floatarith true Imulf Ifloatmul args | Cdivf -> self#select_floatarith false Idivf Ifloatdiv args - | Cextcall("sqrt", _, false, _) -> + | Cextcall(callee, _, false, _) + when S.equal callee sqrt -> begin match args with [Cop(Cload ((Double|Double_u as chunk), _), [loc], _dbg)] -> let (addr, arg) = self#select_addressing chunk loc in @@ -221,12 +228,17 @@ method! select_operation op args dbg = | _ -> super#select_operation op args dbg end - | Cextcall("caml_bswap16_direct", _, _, _) -> + | Cextcall(callee, _, _, _) + when S.equal callee caml_bswap16_direct -> (Ispecific (Ibswap 16), args) - | Cextcall("caml_int32_direct_bswap", _, _, _) -> + | Cextcall(callee, _, _, _) + when S.equal callee (caml_direct_bswap Int32) -> (Ispecific (Ibswap 32), args) - | Cextcall("caml_int64_direct_bswap", _, _, _) - | Cextcall("caml_nativeint_direct_bswap", _, _, _) -> + | Cextcall(callee, _, _, _) + when S.equal callee (caml_direct_bswap Int64) -> + (Ispecific (Ibswap 64), args) + | Cextcall(callee, _, _, _) + when S.equal callee (caml_direct_bswap Nativeint) -> (Ispecific (Ibswap 64), args) (* AMD64 does not support immediate operands for multiply high signed *) | Cmulhi -> diff --git a/asmcomp/asm_target/asm_section.ml b/asmcomp/asm_target/asm_section.ml new file mode 100644 index 000000000000..7015b114c945 --- /dev/null +++ b/asmcomp/asm_target/asm_section.ml @@ -0,0 +1,258 @@ +(**************************************************************************) +(* *) +(* OCaml *) +(* *) +(* Mark Shinwell, Jane Street Europe *) +(* *) +(* Copyright 2016--2019 Jane Street Group LLC *) +(* *) +(* All rights reserved. This file is distributed under the terms of *) +(* the GNU Lesser General Public License version 2.1, with the *) +(* special exception on linking described in the file LICENSE. *) +(* *) +(**************************************************************************) + +[@@@ocaml.warning "+a-4-30-40-41-42"] + +type dwarf_section = + | Debug_info + | Debug_abbrev + | Debug_aranges + | Debug_addr + | Debug_loc + | Debug_ranges + | Debug_loclists + | Debug_rnglists + | Debug_str + | Debug_line + +type t = + | Text + | Data + | Read_only_data + | Eight_byte_literals + | Sixteen_byte_literals + | Jump_tables + | DWARF of dwarf_section + | Platform_specific_non_text + +let all_sections_in_order () = + let sections = [ + Text; + Data; + Read_only_data; + Eight_byte_literals; + Sixteen_byte_literals; + Jump_tables; + DWARF Debug_info; + DWARF Debug_abbrev; + DWARF Debug_aranges; + DWARF Debug_str; + DWARF Debug_line; + ] in + let dwarf_version_dependent_sections = + (* This will be populated in a future patch like this: + match !Clflags.gdwarf_version with + | Four -> + [ DWARF Debug_loc; + DWARF Debug_ranges; + ] + | Five -> + [ DWARF Debug_addr; + DWARF Debug_loclists; + DWARF Debug_rnglists; + ] + *) + [] + in + sections @ dwarf_version_dependent_sections + +let section_is_text = function + | Text + | Jump_tables -> true + | Data + | Read_only_data + | Eight_byte_literals + | Sixteen_byte_literals + | DWARF _ + | Platform_specific_non_text -> false + +(* Modified version of [TS.system] for easier matching in [flags], below. *) +type derived_system = + | Linux + | MinGW_32 + | MinGW_64 + | Win32 + | Win64 + | Cygwin + | MacOS_like + | FreeBSD + | NetBSD + | OpenBSD + | Generic_BSD + | Solaris + | Dragonfly + | GNU + | BeOS + | Unknown + +let derived_system () = + match Target_system.system (), Target_system.machine_width () with + | Linux, _ -> Linux + | Windows Cygwin, _ -> Cygwin + | Windows MinGW, Thirty_two -> MinGW_32 + | Windows MinGW, Sixty_four -> MinGW_64 + | Windows Native, Thirty_two -> Win32 + | Windows Native, Sixty_four -> Win64 + | MacOS_like, _ -> MacOS_like + | FreeBSD, _ -> FreeBSD + | NetBSD, _ -> NetBSD + | OpenBSD, _ -> OpenBSD + | Generic_BSD, _ -> Generic_BSD + | Solaris, _ -> Solaris + | Dragonfly, _ -> Dragonfly + | GNU, _ -> GNU + | BeOS, _ -> BeOS + | Unknown, _ -> Unknown + +type flags_for_section = { + names : string list; + flags : string option; + args : string list; +} + +let flags t ~first_occurrence = + let text () = [".text"], None, [] in + let data () = [".data"], None, [] in + let rodata () = [".rodata"], None, [] in + let system = derived_system () in + let names, flags, args = + match t, Target_system.architecture (), system with + | Text, _, _ -> text () + | Data, _, _ -> data () + | DWARF dwarf, _, MacOS_like -> + let name = + match dwarf with + | Debug_info -> "__debug_info" + | Debug_abbrev -> "__debug_abbrev" + | Debug_aranges -> "__debug_aranges" + | Debug_addr -> "__debug_addr" + | Debug_loc -> "__debug_loc" + | Debug_ranges -> "__debug_ranges" + | Debug_loclists -> "__debug_loclists" + | Debug_rnglists -> "__debug_rnglists" + | Debug_str -> "__debug_str" + | Debug_line -> "__debug_line" + in + ["__DWARF"; name], None, ["regular"; "debug"] + | DWARF dwarf, _, _ -> + let name = + match dwarf with + | Debug_info -> ".debug_info" + | Debug_abbrev -> ".debug_abbrev" + | Debug_aranges -> ".debug_aranges" + | Debug_addr -> ".debug_addr" + | Debug_loc -> ".debug_loc" + | Debug_ranges -> ".debug_ranges" + | Debug_loclists -> ".debug_loclists" + | Debug_rnglists -> ".debug_rnglists" + | Debug_str -> ".debug_str" + | Debug_line -> ".debug_line" + in + let flags = + if first_occurrence then + Some "" + else + None + in + let args = + if first_occurrence then + ["%progbits"] + else + [] + in + [name], flags, args + | (Eight_byte_literals | Sixteen_byte_literals), (ARM | AArch64 | Z), _ + | (Eight_byte_literals | Sixteen_byte_literals), _, Solaris -> + rodata () + | Sixteen_byte_literals, _, MacOS_like -> + ["__TEXT"; "__literal16"], None, ["16byte_literals"] + | Sixteen_byte_literals, _, (MinGW_64 | Cygwin) -> + [".rdata"], Some "dr", [] + | Sixteen_byte_literals, _, (MinGW_32 | Win32 | Win64) -> + data () + | Sixteen_byte_literals, _, _ -> + [".rodata.cst8"], Some "a", ["@progbits"] + | Eight_byte_literals, _, MacOS_like -> + ["__TEXT"; "__literal8"], None, ["8byte_literals"] + | Eight_byte_literals, _, (MinGW_64 | Cygwin) -> + [".rdata"], Some "dr", [] + | Eight_byte_literals, _, (MinGW_32 | Win32 | Win64) -> + data () + | Eight_byte_literals, _, _ -> + [".rodata.cst8"], Some "a", ["@progbits"] + | Jump_tables, _, (MinGW_64 | Cygwin) -> + [".rdata"], Some "dr", [] + | Jump_tables, _, (MinGW_32 | Win32) -> + data () + | Jump_tables, _, (MacOS_like | Win64) -> + text () (* with LLVM/OS X and MASM, use the text segment *) + | Jump_tables, _, _ -> + [".rodata"], None, [] + | Read_only_data, _, (MinGW_32 | Win32) -> + data () + | Read_only_data, _, (MinGW_64 | Cygwin) -> + [".rdata"], Some "dr", [] + | Read_only_data, _, _ -> + rodata () + | Platform_specific_non_text, _, _ -> + Misc.fatal_error "Cannot calculate section [flags] for platform-specific \ + section" + in + { names; flags; args; } + +let to_string t = + match t with + | Platform_specific_non_text -> "Platform_specific_non_text" + | _ -> + let { names; flags = _; args = _; } = flags t ~first_occurrence:true in + String.concat " " names + +include Identifiable.Make (struct + type nonrec t = t + + let print ppf t = + let str = + match t with + | Text -> "Text" + | Data -> "Data" + | Read_only_data -> "Read_only_data" + | Eight_byte_literals -> "Eight_byte_literals" + | Sixteen_byte_literals -> "Sixteen_byte_literals" + | Jump_tables -> "Jump_tables" + | DWARF Debug_info -> "(DWARF Debug_info)" + | DWARF Debug_abbrev -> "(DWARF Debug_abbrev)" + | DWARF Debug_aranges -> "(DWARF Debug_aranges)" + | DWARF Debug_addr -> "(DWARF Debug_addr)" + | DWARF Debug_loc -> "(DWARF Debug_loc)" + | DWARF Debug_ranges -> "(DWARF Debug_ranges)" + | DWARF Debug_loclists -> "(DWARF Debug_loclists)" + | DWARF Debug_rnglists -> "(DWARF Debug_rnglists)" + | DWARF Debug_str -> "(DWARF Debug_str)" + | DWARF Debug_line -> "(DWARF Debug_line)" + | Platform_specific_non_text -> "Platform_specific_non_text" + in + Format.pp_print_string ppf str + + let output chan t = + Format.fprintf (Format.formatter_of_out_channel chan) "%a" print t + + let compare t1 t2 = + Stdlib.compare t1 t2 + + let equal t1 t2 = + Stdlib.compare t1 t2 = 0 + + let hash t = + Hashtbl.hash t +end) diff --git a/asmcomp/asm_target/asm_section.mli b/asmcomp/asm_target/asm_section.mli new file mode 100644 index 000000000000..efa8be823e23 --- /dev/null +++ b/asmcomp/asm_target/asm_section.mli @@ -0,0 +1,95 @@ +(**************************************************************************) +(* *) +(* OCaml *) +(* *) +(* Mark Shinwell, Jane Street Europe *) +(* *) +(* Copyright 2016--2019 Jane Street Group LLC *) +(* *) +(* All rights reserved. This file is distributed under the terms of *) +(* the GNU Lesser General Public License version 2.1, with the *) +(* special exception on linking described in the file LICENSE. *) +(* *) +(**************************************************************************) + +(** Representation of object file sections. *) + +[@@@ocaml.warning "+a-4-30-40-41-42"] + +(** Sections that hold DWARF debugging information. See: + http://dwarfstd.org/doc/DWARF4.pdf + http://dwarfstd.org/doc/DWARF5.pdf +*) +type dwarf_section = + | Debug_info + (** The debugging information entries. *) + | Debug_abbrev + (** The abbreviations table. *) + | Debug_aranges + (** The address ranges table. *) + | Debug_addr + (** The address table (DWARF-5 only). *) + | Debug_loc + (** The table of location lists (DWARF-4 and earlier only). *) + | Debug_ranges + (** The table of range lists (DWARF-4 and earlier only). *) + | Debug_loclists + (** The table of location lists (DWARF-5 only). *) + | Debug_rnglists + (** The table of range lists (DWARF-5 only). *) + | Debug_str + (** The string table. *) + | Debug_line + (** The line number table. *) + +(** The linker may share constants in [Eight_byte_literals] and + [Sixteen_byte_literals] sections. *) +type t = + | Text + (** The code section. *) + | Data + (** The read/write data section. *) + | Read_only_data + (** The read-only data section. *) + | Eight_byte_literals + (** A section containing eight-byte constants (for example unboxed floating + point numbers). *) + | Sixteen_byte_literals + (** A section containing sixteen-byte numeric constants. *) + | Jump_tables + (** A section containing the code of jump tables. *) + | DWARF of dwarf_section + (** The sections holding DWARF debugging information. *) + | Platform_specific_non_text + (** A platform-specific section that holds something other than code. + The [flags] function, below, will raise an exception if passed this + value. *) + +(** Printing, comparison, sets, maps, etc. *) +include Identifiable.S with type t := t + +(** Concise description of values of type [t] for error messages, etc. *) +val to_string : t -> string + +(** All sections that this code knows about. *) +val all_sections_in_order : unit -> t list + +(** [section_is_text] returns [true] if the section holds code. *) +val section_is_text : t -> bool + +(** Details about a specific section, used for assembly emission. *) +type flags_for_section = private { + names : string list; + (** The name of the section. Sometimes (e.g. on macOS for DWARF sections) + this has multiple parts. *) + flags : string option; + (** Target-dependent flags for the section. *) + args : string list; + (** Target-dependent arguments for the section. *) +} + +(** The necessary information for an assembler's ".section" directive. + + [first_occurrence] should be [true] iff the corresponding directive will + be the first such in the relevant assembly file for the given section. *) +val flags : t -> first_occurrence:bool -> flags_for_section diff --git a/asmcomp/asm_target/asm_symbol.ml b/asmcomp/asm_target/asm_symbol.ml new file mode 100644 index 000000000000..53cdb2b42347 --- /dev/null +++ b/asmcomp/asm_target/asm_symbol.ml @@ -0,0 +1,231 @@ +(**************************************************************************) +(* *) +(* OCaml *) +(* *) +(* Fabrice Le Fessant, projet Gallium, INRIA Rocquencourt *) +(* Mark Shinwell, Jane Street Europe *) +(* *) +(* Copyright 2014 Institut National de Recherche en Informatique et *) +(* en Automatique. *) +(* Copyright 2016--2019 Jane Street Group LLC *) +(* *) +(* All rights reserved. This file is distributed under the terms of *) +(* the GNU Lesser General Public License version 2.1, with the *) +(* special exception on linking described in the file LICENSE. *) +(* *) +(**************************************************************************) + +(* CR mshinwell: Address Damien's comments on this file from the + Asm_directives GPR *) + +[@@@ocaml.warning "+a-4-30-40-41-42"] + +type t = { + section : Asm_section.t; + object_file : Object_file.t; + name : string; + (* Just like for [Backend_sym], the [name] uniquely determines the + symbol. *) + name_without_prefix : string; + (* Like [name], but without any symbol prefix. This is required for + emission into DWARF information in situations where GDB may look up + a symbol name via the minsyms table, whose entries appear to lack the + prefix. In particular this happens when resolving call site chains. *) +} + +let escape name = + let spec = ref false in + for i = 0 to String.length name - 1 do + match String.unsafe_get name i with + | 'A'..'Z' | 'a'..'z' | '0'..'9' | '_' -> () + | _ -> spec := true; + done; + if not !spec then begin + name + end else begin + let b = Buffer.create (String.length name + 10) in + String.iter + (function + | ('A'..'Z' | 'a'..'z' | '0'..'9' | '_') as c -> Buffer.add_char b c + | c -> Printf.bprintf b "$%02x" (Char.code c) + ) + name; + Buffer.contents b + end + +let symbol_prefix () = (* CR mshinwell: needs checking *) + match Target_system.architecture () with + | IA32 -> + begin match Target_system.system () with + | Linux + | FreeBSD + | NetBSD + | OpenBSD + | Generic_BSD + | Solaris + | BeOS + | GNU + | Dragonfly -> "" + | Windows Cygwin + | Windows MinGW + | Windows Native + | Unknown + | MacOS_like -> "_" + end + | X86_64 -> + begin match Target_system.system () with + | Linux + | Windows Cygwin + | Windows MinGW + | FreeBSD + | NetBSD + | OpenBSD + | Generic_BSD + | Solaris + | BeOS + | GNU + | Dragonfly + | Windows Native + | Unknown -> "" + | MacOS_like -> "_" + end + | ARM + | AArch64 + | POWER + | Z -> "" + +let encode ?without_prefix backend_sym = + let symbol_prefix = + match without_prefix with + | None -> symbol_prefix () + | Some () -> "" + in + Backend_sym.to_escaped_string + ~symbol_prefix + ~escape backend_sym + +let create backend_sym = + let section : Asm_section.t = + match Backend_sym.kind backend_sym with + | Text -> Text + | Data -> Data + in + let object_file = Backend_sym.object_file backend_sym in + { section; + object_file; + name = encode backend_sym; + name_without_prefix = encode ~without_prefix:() backend_sym; + } + +let of_external_name section object_file name = + let name_without_prefix = escape name in + let name = (symbol_prefix ()) ^ name_without_prefix in + { section; + object_file; + name; + name_without_prefix; + } + +let of_external_name_no_prefix section object_file name = + let name_without_prefix = escape name in + { section; + object_file; + name = name_without_prefix; + (* CR mshinwell: [name] might have a prefix... + Let's look through and find where this function is being used, and + see whether we can supply the name without a prefix at all times. *) + name_without_prefix; + } + +let section t = t.section + +let encode ?reloc t = + assert (String.length t.name > 0); + match reloc with + | None -> t.name + | Some reloc -> t.name ^ reloc + +let prefix t section object_file ~prefix = + let prefix = escape prefix in + { section; + object_file; + name = prefix ^ t.name; + name_without_prefix = prefix ^ t.name_without_prefix; + } + +(* Detection of functions that can be duplicated between a DLL and + the main program (PR#4690) *) + +let isprefix s1 s2 = + String.length s1 <= String.length s2 + && String.sub s2 0 (String.length s1) = s1 + +let is_generic_function t = + List.exists + (fun p -> isprefix p t.name) + ["caml_apply"; "caml_curry"; "caml_send"; "caml_tuplify"] + +let object_file t = t.object_file + +include Identifiable.Make (struct + type nonrec t = t + let compare t1 t2 = String.compare t1.name t2.name + let equal t1 t2 = String.equal t1.name t2.name + let hash t = Hashtbl.hash t.name + let output _ _ = Misc.fatal_error "Not yet implemented" + let print ppf t = Format.pp_print_string ppf t.name +end) + +module Names = struct + let runtime = Object_file.runtime_and_external_libs + + let mcount = + of_external_name Text runtime "mcount" + + let _mcount = + of_external_name Text runtime "_mcount" + + let __gnu_mcount_nc = + of_external_name Text runtime "__gnu_mcount_nc" + + let caml_young_ptr = + of_external_name Data runtime "caml_young_ptr" + + let caml_young_limit = + of_external_name Data runtime "caml_young_limit" + + let caml_exception_pointer = + of_external_name Data runtime "caml_exception_pointer" + + let caml_negf_mask = + of_external_name Eight_byte_literals Object_file.current_compilation_unit + "caml_negf_mask" + + let caml_absf_mask = + of_external_name Eight_byte_literals Object_file.current_compilation_unit + "caml_absf_mask" + + let caml_call_gc = + of_external_name Text runtime "caml_call_gc" + + let caml_c_call = + of_external_name Text runtime "caml_c_call" + + let caml_alloc1 = + of_external_name Text runtime "caml_alloc1" + + let caml_alloc2 = + of_external_name Text runtime "caml_alloc2" + + let caml_alloc3 = + of_external_name Text runtime "caml_alloc3" + + let caml_allocN = + of_external_name Text runtime "caml_allocN" + + let caml_ml_array_bound_error = + of_external_name Text runtime "caml_ml_array_bound_error" + + let caml_raise_exn = + of_external_name Text runtime "caml_raise_exn" +end diff --git a/asmcomp/asm_target/asm_symbol.mli b/asmcomp/asm_target/asm_symbol.mli new file mode 100644 index 000000000000..6ef1fa18a485 --- /dev/null +++ b/asmcomp/asm_target/asm_symbol.mli @@ -0,0 +1,95 @@ +(**************************************************************************) +(* *) +(* OCaml *) +(* *) +(* Mark Shinwell, Jane Street Europe *) +(* *) +(* Copyright 2016--2019 Jane Street Group LLC *) +(* *) +(* All rights reserved. This file is distributed under the terms of *) +(* the GNU Lesser General Public License version 2.1, with the *) +(* special exception on linking described in the file LICENSE. *) +(* *) +(**************************************************************************) + +(** Symbols in the assembly stream. Unlike labels, symbols are named entities + that are potentially accessible from outside an object file; they may + also be seen when an object file is examined (e.g. via objdump). + + [Asm_symbol]s are defined within sections and tied to a particular + object file. This enables certain checks to be performed when + constructions involving symbols are built (e.g. in [Asm_directives]). + [Asm_symbol]s may point anywhere, unlike [Backend_sym]s, where those + of [Data] kind must point at correctly-structured OCaml values. +*) + +[@@@ocaml.warning "+a-4-30-40-41-42"] + +(** The type of symbols. *) +type t + +(** Printing, comparison, sets, maps, etc. *) +include Identifiable.S with type t := t + +(** Create an assembly symbol from a backend symbol. *) +val create : Backend_sym.t -> t + +(** Create an assembly symbol given its (unescaped) name, the section within + which it is defined and the object file within which it is defined. The name + will be prefixed with any required symbol prefix for the target system's + assembler. No OCaml-specific conventions (such as prefixing with "caml", or + whatever) will be applied to the name. *) +val of_external_name : Asm_section.t -> Object_file.t -> string -> t + +(** Take an existing symbol and add a prefix to its name. The [object_file] + and section must be specified as they often change during a + prefixing. *) +val prefix : t -> Asm_section.t -> Object_file.t -> prefix:string -> t + +(** Like [of_external_name], but for specialised uses (in particular "direct + assignment" on macOS) where the name must not have a symbol prefix + applied. *) +val of_external_name_no_prefix : Asm_section.t -> Object_file.t -> string -> t + +(** The section enclosing the symbol. *) +val section : t -> Asm_section.t + +(** A description of the object file where the given symbol is defined. *) +val object_file : t -> Object_file.t + +(** Convert a symbol to the corresponding textual form, suitable for direct + emission into an assembly file. This may be useful e.g. when emitting + an instruction referencing a symbol. + + The optional [reloc] parameter will be appended to the encoded symbol (with + no escaping applied to [reloc]) if provided. *) +val encode : ?reloc:string -> t -> string + +(** Detection of functions that can be duplicated between a DLL and the main + program (PR#4690). *) +val is_generic_function : t -> bool + +(** The names of various predefined symbols, for convenience. *) +module Names : sig + (** External variables from the C library. *) + val mcount : t + val _mcount : t + val __gnu_mcount_nc : t + + (** Global variables in the OCaml runtime accessed by OCaml code. *) + val caml_young_ptr : t + val caml_young_limit : t + val caml_exception_pointer : t + val caml_negf_mask : t + val caml_absf_mask : t + + (** Entry points to the OCaml runtime from OCaml code. *) + val caml_call_gc : t + val caml_c_call : t + val caml_allocN : t + val caml_alloc1 : t + val caml_alloc2 : t + val caml_alloc3 : t + val caml_ml_array_bound_error : t + val caml_raise_exn : t +end diff --git a/asmcomp/asmgen.ml b/asmcomp/asmgen.ml index ddbbae8d7099..3ebbd4453de9 100644 --- a/asmcomp/asmgen.ml +++ b/asmcomp/asmgen.ml @@ -13,7 +13,7 @@ (* *) (**************************************************************************) -(* From lambda to assembly code *) +(* From Clambda to assembly code *) [@@@ocaml.warning "+a-4-9-40-41-42"] @@ -39,44 +39,9 @@ let pass_dump_linear_if ppf flag message phrase = if !flag then fprintf ppf "*** %s@.%a@." message Printlinear.fundecl phrase; phrase -let flambda_raw_clambda_dump_if ppf - ({ Flambda_to_clambda. expr = ulambda; preallocated_blocks = _; - structured_constants; exported = _; } as input) = - if !dump_rawclambda then - begin - Format.fprintf ppf "@.clambda (before Un_anf):@."; - Printclambda.clambda ppf ulambda; - Symbol.Map.iter (fun sym cst -> - Format.fprintf ppf "%a:@ %a@." - Symbol.print sym - Printclambda.structured_constant cst) - structured_constants - end; - if !dump_cmm then Format.fprintf ppf "@.cmm:@."; - input - -type clambda_and_constants = - Clambda.ulambda * - Clambda.preallocated_block list * - Clambda.preallocated_constant list - -let raw_clambda_dump_if ppf - ((ulambda, _, structured_constants):clambda_and_constants) = - if !dump_rawclambda || !dump_clambda then - begin - Format.fprintf ppf "@.clambda:@."; - Printclambda.clambda ppf ulambda; - List.iter (fun {Clambda.symbol; definition} -> - Format.fprintf ppf "%s:@ %a@." - symbol - Printclambda.structured_constant definition) - structured_constants - end; - if !dump_cmm then Format.fprintf ppf "@.cmm:@." - let rec regalloc ~ppf_dump round fd = if round > 50 then - fatal_error(fd.Mach.fun_name ^ + fatal_error(Backend_sym.to_string fd.Mach.fun_name ^ ": function too complex, cannot complete register allocation"); dump_if ppf_dump dump_live "Liveness analysis" fd; if !use_linscan then begin @@ -137,15 +102,21 @@ let compile_phrase ~ppf_dump p = (* For the native toplevel: generates generic functions unless they are already available in the process *) let compile_genfuns ~ppf_dump f = + let linking_state = Linking_state.Snapshot.create () in + let link_info = + Cmx_format.Unit_info_link_time.create ~curry_fun:linking_state.curry_fun + ~apply_fun:linking_state.apply_fun + ~send_fun:linking_state.send_fun + ~force_link:linking_state.force_link + in List.iter (function | (Cfunction {fun_name = name}) as ph when f name -> compile_phrase ~ppf_dump ph | _ -> ()) - (Cmmgen.generic_functions true [Compilenv.current_unit_infos ()]) + (Cmmgen.generic_functions true link_info) -let compile_unit _output_prefix asm_filename keep_asm - obj_filename gen = +let compile_unit asm_filename keep_asm obj_filename gen = let create_asm = keep_asm || not !Emitaux.binary_backend_available in Emitaux.create_asm_file := create_asm; Misc.try_finally @@ -166,106 +137,59 @@ let compile_unit _output_prefix asm_filename keep_asm if create_asm && not keep_asm then remove_file asm_filename ) -let set_export_info (ulambda, prealloc, structured_constants, export) = - Compilenv.set_export_info export; - (ulambda, prealloc, structured_constants) - -let end_gen_implementation ?toplevel ~ppf_dump - (clambda:clambda_and_constants) = - Emit.begin_assembly (); +let end_gen_implementation ?toplevel ~ppf_dump comp_unit + (clambda : Clambda.with_constants) = + Emit.begin_assembly comp_unit; + Cmmgen.reset (); clambda ++ Profile.record "cmm" (Cmmgen.compunit ~ppf_dump) ++ Profile.record "compile_phrases" (List.iter (compile_phrase ~ppf_dump)) ++ (fun () -> ()); (match toplevel with None -> () | Some f -> compile_genfuns ~ppf_dump f); - (* We add explicit references to external primitive symbols. This is to ensure that the object files that define these symbols, when part of a C library, won't be discarded by the linker. This is important if a module that uses such a symbol is later dynlinked. *) - - compile_phrase ~ppf_dump - (Cmmgen.reference_symbols - (List.filter (fun s -> s <> "" && s.[0] <> '%') - (List.map Primitive.native_name !Translmod.primitive_declarations)) - ); - Emit.end_assembly () - -let flambda_gen_implementation ?toplevel ~backend ~ppf_dump - (program:Flambda.program) = - let export = Build_export_info.build_transient ~backend program in - let (clambda, preallocated, constants) = - Profile.record_call "backend" (fun () -> - (program, export) - ++ Flambda_to_clambda.convert - ++ flambda_raw_clambda_dump_if ppf_dump - ++ (fun { Flambda_to_clambda. expr; preallocated_blocks; - structured_constants; exported; } -> - (* "init_code" following the name used in - [Cmmgen.compunit_and_constants]. *) - Un_anf.apply ~ppf_dump expr ~what:"init_code", preallocated_blocks, - structured_constants, exported) - ++ set_export_info) + let primitives = + List.fold_left (fun result prim -> + if not (Primitive.native_name_is_external prim) then result + else + let sym = Backend_sym.create_for_external_call prim in + Backend_sym.Set.add sym result) + Backend_sym.Set.empty + !Translmod.primitive_declarations in - let constants = - List.map (fun (symbol, definition) -> - { Clambda.symbol = Linkage_name.to_string (Symbol.label symbol); - exported = true; - definition; - provenance = None; - }) - (Symbol.Map.bindings constants) + compile_phrase ~ppf_dump (Cmmgen.reference_symbols primitives); + Emit.end_assembly comp_unit + +type middle_end = + backend:(module Backend_intf.S) + -> filename:string + -> prefixname:string + -> ppf_dump:Format.formatter + -> Lambda.program + -> Clambda.with_constants + +let compile_implementation ?toplevel ~backend ~filename ~prefixname ~middle_end + ~ppf_dump (program : Lambda.program) = + let comp_unit = + Backend_compilation_unit.compilation_unit ( + Compilation_unit.get_current_exn ()) in - end_gen_implementation ?toplevel ~ppf_dump - (clambda, preallocated, constants) - -let lambda_gen_implementation ?toplevel ~ppf_dump - (lambda:Lambda.program) = - let clambda = Closure.intro lambda.main_module_block_size lambda.code in - let provenance : Clambda.usymbol_provenance = - { original_idents = []; - module_path = - Path.Pident (Ident.create_persistent (Compilenv.current_unit_name ())); - } - in - let preallocated_block = - Clambda.{ - symbol = Compilenv.make_symbol None; - exported = true; - tag = 0; - fields = List.init lambda.main_module_block_size (fun _ -> None); - provenance = Some provenance; - } - in - let clambda_and_constants = - clambda, [preallocated_block], [] - in - raw_clambda_dump_if ppf_dump clambda_and_constants; - end_gen_implementation ?toplevel ~ppf_dump clambda_and_constants - -let compile_implementation_gen ?toplevel prefixname - ~required_globals ~ppf_dump gen_implementation program = let asmfile = if !keep_asm_file || !Emitaux.binary_backend_available then prefixname ^ ext_asm else Filename.temp_file "camlasm" ext_asm in - compile_unit prefixname asmfile !keep_asm_file - (prefixname ^ ext_obj) (fun () -> - Ident.Set.iter Compilenv.require_global required_globals; - gen_implementation ?toplevel ~ppf_dump program) - -let compile_implementation_clambda ?toplevel prefixname - ~ppf_dump (program:Lambda.program) = - compile_implementation_gen ?toplevel prefixname - ~required_globals:program.Lambda.required_globals - ~ppf_dump lambda_gen_implementation program - -let compile_implementation_flambda ?toplevel prefixname - ~required_globals ~backend ~ppf_dump (program:Flambda.program) = - compile_implementation_gen ?toplevel prefixname - ~required_globals ~ppf_dump (flambda_gen_implementation ~backend) program + compile_unit asmfile !keep_asm_file (prefixname ^ ext_obj) + (fun () -> + Ident.Set.iter Compilation_state.require_global program.required_globals; + let clambda_with_constants = + middle_end ~backend ~filename ~prefixname ~ppf_dump program + in + end_gen_implementation ?toplevel ~ppf_dump comp_unit + clambda_with_constants) (* Error report *) diff --git a/asmcomp/asmgen.mli b/asmcomp/asmgen.mli index f2f4ccaef399..ded9fbe64551 100644 --- a/asmcomp/asmgen.mli +++ b/asmcomp/asmgen.mli @@ -13,19 +13,27 @@ (* *) (**************************************************************************) -(* From lambda to assembly code *) +(** From Lambda to assembly code *) -val compile_implementation_flambda : - ?toplevel:(string -> bool) -> - string -> - required_globals:Ident.Set.t -> - backend:(module Backend_intf.S) -> - ppf_dump:Format.formatter -> Flambda.program -> unit +(** The type of converters from Lambda to Clambda. *) +type middle_end = + backend:(module Backend_intf.S) + -> filename:string + -> prefixname:string + -> ppf_dump:Format.formatter + -> Lambda.program + -> Clambda.with_constants -val compile_implementation_clambda : - ?toplevel:(string -> bool) -> - string -> - ppf_dump:Format.formatter -> Lambda.program -> unit +(** Compile an implementation from Lambda using the given middle end. *) +val compile_implementation + : ?toplevel:(Backend_sym.t -> bool) + -> backend:(module Backend_intf.S) + -> filename:string + -> prefixname:string + -> middle_end:middle_end + -> ppf_dump:Format.formatter + -> Lambda.program + -> unit val compile_phrase : ppf_dump:Format.formatter -> Cmm.phrase -> unit @@ -36,6 +44,5 @@ val report_error: Format.formatter -> error -> unit val compile_unit: - string(*prefixname*) -> string(*asm file*) -> bool(*keep asm*) -> string(*obj file*) -> (unit -> unit) -> unit diff --git a/asmcomp/asmlibrarian.ml b/asmcomp/asmlibrarian.ml index ba1d06b2b0fa..9615ebef5727 100644 --- a/asmcomp/asmlibrarian.ml +++ b/asmcomp/asmlibrarian.ml @@ -17,7 +17,6 @@ open Misc open Config -open Cmx_format type error = File_not_found of string @@ -25,49 +24,52 @@ type error = exception Error of error -let default_ui_export_info = +let empty_export_info = if Config.flambda then - Cmx_format.Flambda Export_info.empty + Cmx_format.Unit_info.Flambda Export_info.empty else - Cmx_format.Clambda Clambda.Value_unknown + Cmx_format.Unit_info.Closure Clambda.Value_unknown let read_info name = + let module UI = Cmx_format.Unit_info in + let module UIL = Cmx_format.Unit_info_link_time in let filename = try Load_path.find name with Not_found -> raise(Error(File_not_found name)) in - let (info, crc) = Compilenv.read_unit_info filename in - info.ui_force_link <- info.ui_force_link || !Clflags.link_everything; + let info, link_info, crc = Cmx_format.load ~filename in + let link_info = + UIL.with_force_link link_info + ~force_link:(UIL.force_link link_info || !Clflags.link_everything) + in (* There is no need to keep the approximation in the .cmxa file, since the compiler will go looking directly for .cmx files. The linker, which is the only one that reads .cmxa files, does not need the approximation. *) - info.ui_export_info <- default_ui_export_info; - (Filename.chop_suffix filename ".cmx" ^ ext_obj, (info, crc)) + let info = UI.with_export_info info empty_export_info in + (Filename.chop_suffix filename ".cmx" ^ ext_obj, (info, link_info, crc)) let create_archive file_list lib_name = let archive_name = Filename.remove_extension lib_name ^ ext_lib in - let outchan = open_out_bin lib_name in + let (objfile_list, descr_list) = + List.split (List.map read_info file_list) in + List.iter2 + (fun file_name (info, _link_info, crc) -> + Asmlink.check_consistency file_name info crc) + file_list descr_list; + let infos = + Cmxa_format.Library_info.create ~units:descr_list + ~ccobjs:!Clflags.ccobjs + ~ccopts:!Clflags.all_ccopts + in Misc.try_finally - ~always:(fun () -> close_out outchan) - ~exceptionally:(fun () -> remove_file lib_name; remove_file archive_name) + ~exceptionally:(fun () -> remove_file archive_name) (fun () -> - output_string outchan cmxa_magic_number; - let (objfile_list, descr_list) = - List.split (List.map read_info file_list) in - List.iter2 - (fun file_name (unit, crc) -> - Asmlink.check_consistency file_name unit crc) - file_list descr_list; - let infos = - { lib_units = descr_list; - lib_ccobjs = !Clflags.ccobjs; - lib_ccopts = !Clflags.all_ccopts } in - output_value outchan infos; - if Ccomp.create_archive archive_name objfile_list <> 0 - then raise(Error(Archiver_error archive_name)); - ) + Cmxa_format.save infos ~filename:lib_name; + if Ccomp.create_archive archive_name objfile_list <> 0 then begin + raise (Error (Archiver_error archive_name)) + end) open Format diff --git a/asmcomp/asmlibrarian.mli b/asmcomp/asmlibrarian.mli index 4d66827c0fb5..e7b38cf4503f 100644 --- a/asmcomp/asmlibrarian.mli +++ b/asmcomp/asmlibrarian.mli @@ -13,7 +13,7 @@ (* *) (**************************************************************************) -(* Build libraries of .cmx files *) +(** Build libraries of .cmx files *) open Format diff --git a/asmcomp/asmlink.ml b/asmcomp/asmlink.ml index 89d7365bf625..ef6b524c5234 100644 --- a/asmcomp/asmlink.ml +++ b/asmcomp/asmlink.ml @@ -15,80 +15,93 @@ (* Link a set of .cmx/.o files and produce an executable *) +[@@@ocaml.warning "-40"] + open Misc open Config -open Cmx_format -open Compilenv + +module BCU = Backend_compilation_unit +module CU = Compilation_unit +module UI = Cmx_format.Unit_info module String = Misc.Stdlib.String type error = | File_not_found of filepath | Not_an_object_file of filepath - | Missing_implementations of (modname * string list) list - | Inconsistent_interface of modname * filepath * filepath - | Inconsistent_implementation of modname * filepath * filepath - | Assembler_error of filepath + | Missing_implementations of String.Set.t CU.Map.t + | Inconsistent_interface of CU.Name.t * filepath * filepath + | Inconsistent_implementation of CU.Name.t * filepath * filepath | Linking_error - | Multiple_definition of modname * filepath * filepath - | Missing_cmx of filepath * modname + | Multiple_definition of CU.Name.t * filepath * filepath + | Missing_cmx of filepath * CU.Name.t exception Error of error (* Consistency check between interfaces and implementations *) -let crc_interfaces = Consistbl.create () -let interfaces = ref ([] : string list) -let crc_implementations = Consistbl.create () -let implementations = ref ([] : string list) -let implementations_defined = ref ([] : (string * string) list) -let cmx_required = ref ([] : string list) +module Cmi_consistbl = Consistbl.Make (CU.Name) +let crc_interfaces = Cmi_consistbl.create () +let interfaces = ref CU.Name.Set.empty + +module Cmx_consistbl = Consistbl.Make (CU) +let crc_implementations = Cmx_consistbl.create () +let implementations = ref CU.Set.empty +let implementations_defined = ref CU.Map.empty + +let cmx_required = ref CU.Set.empty -let check_consistency file_name unit crc = +let check_consistency file_name unit_info crc = begin try - List.iter - (fun (name, crco) -> - interfaces := name :: !interfaces; + CU.Name.Map.iter + (fun name crco -> + interfaces := CU.Name.Set.add name !interfaces; match crco with - None -> () + | None -> () | Some crc -> - if name = unit.ui_name - then Consistbl.set crc_interfaces name crc file_name - else Consistbl.check crc_interfaces name crc file_name) - unit.ui_imports_cmi - with Consistbl.Inconsistency(name, user, auth) -> + if CU.Name.equal name (CU.name (UI.unit unit_info)) + then Cmi_consistbl.set crc_interfaces name crc file_name + else Cmi_consistbl.check crc_interfaces name crc file_name) + (UI.imports_cmi unit_info) + with Cmi_consistbl.Inconsistency(name, user, auth) -> raise(Error(Inconsistent_interface(name, user, auth))) end; begin try - List.iter - (fun (name, crco) -> - implementations := name :: !implementations; + CU.Map.iter + (fun imported_unit crco -> + let name = CU.name imported_unit in + implementations := CU.Set.add imported_unit !implementations; match crco with - None -> - if List.mem name !cmx_required then + | None -> + if CU.Set.mem imported_unit !cmx_required then raise(Error(Missing_cmx(file_name, name))) | Some crc -> - Consistbl.check crc_implementations name crc file_name) - unit.ui_imports_cmx - with Consistbl.Inconsistency(name, user, auth) -> - raise(Error(Inconsistent_implementation(name, user, auth))) + Cmx_consistbl.check crc_implementations imported_unit crc + file_name) + (UI.imports_cmx unit_info) + with Cmx_consistbl.Inconsistency(comp_unit, user, auth) -> + raise(Error(Inconsistent_implementation(CU.name comp_unit, user, auth))) end; + let comp_unit = UI.unit unit_info in begin try - let source = List.assoc unit.ui_name !implementations_defined in - raise (Error(Multiple_definition(unit.ui_name, file_name, source))) + let source = CU.Map.find comp_unit !implementations_defined in + raise (Error(Multiple_definition(CU.name comp_unit, file_name, source))) with Not_found -> () end; - implementations := unit.ui_name :: !implementations; - Consistbl.set crc_implementations unit.ui_name crc file_name; + implementations := CU.Set.add comp_unit !implementations; + Cmx_consistbl.set crc_implementations comp_unit crc file_name; implementations_defined := - (unit.ui_name, file_name) :: !implementations_defined; - if unit.ui_symbol <> unit.ui_name then - cmx_required := unit.ui_name :: !cmx_required + CU.Map.add comp_unit file_name !implementations_defined; + (* CR-someday mshinwell: The following check will be able to be removed + once .cmi files have to be compiled with "-for-pack". *) + if CU.is_packed comp_unit then begin + cmx_required := CU.Set.add comp_unit !cmx_required + end let extract_crc_interfaces () = - Consistbl.extract !interfaces crc_interfaces + Cmi_consistbl.extract_map !interfaces crc_interfaces let extract_crc_implementations () = - Consistbl.extract !implementations crc_implementations + Cmx_consistbl.extract_map !implementations crc_implementations (* Add C objects and options and "custom" info from a library descriptor. See bytecomp/bytelink.ml for comments on the order of C objects. *) @@ -98,11 +111,12 @@ let lib_ccopts = ref [] let add_ccobjs origin l = if not !Clflags.no_auto_link then begin - lib_ccobjs := l.lib_ccobjs @ !lib_ccobjs; + lib_ccobjs := Cmxa_format.Library_info.ccobjs l @ !lib_ccobjs; let replace_origin = Misc.replace_substring ~before:"$CAMLORIGIN" ~after:origin in - lib_ccopts := List.map replace_origin l.lib_ccopts @ !lib_ccopts + lib_ccopts := + List.map replace_origin (Cmxa_format.Library_info.ccopts l) @ !lib_ccopts end let runtime_lib () = @@ -131,141 +145,170 @@ let object_file_name name = (* First pass: determine which units are needed *) -let missing_globals = (Hashtbl.create 17 : (string, string list ref) Hashtbl.t) +let missing_globals = (CU.Tbl.create 17 : String.Set.t ref CU.Tbl.t) let is_required name = - try ignore (Hashtbl.find missing_globals name); true + try ignore (CU.Tbl.find missing_globals name); true with Not_found -> false -let add_required by (name, _crc) = +let add_required by name = try - let rq = Hashtbl.find missing_globals name in - rq := by :: !rq + let rq = CU.Tbl.find missing_globals name in + rq := String.Set.add by !rq with Not_found -> - Hashtbl.add missing_globals name (ref [by]) + CU.Tbl.add missing_globals name (ref (String.Set.singleton by)) let remove_required name = - Hashtbl.remove missing_globals name + CU.Tbl.remove missing_globals name let extract_missing_globals () = - let mg = ref [] in - Hashtbl.iter (fun md rq -> mg := (md, !rq) :: !mg) missing_globals; + let mg = ref CU.Map.empty in + CU.Tbl.iter (fun md rq -> mg := CU.Map.add md !rq !mg) + missing_globals; !mg type file = - | Unit of string * unit_infos * Digest.t - | Library of string * library_infos + | Unit of filepath * UI.t * Cmx_format.Unit_info_link_time.t * Digest.t + | Library of filepath * Cmxa_format.Library_info.t let read_file obj_name = - let file_name = + let filename = try Load_path.find obj_name with Not_found -> raise(Error(File_not_found obj_name)) in - if Filename.check_suffix file_name ".cmx" then begin + if Filename.check_suffix filename ".cmx" then begin (* This is a .cmx file. It must be linked in any case. Read the infos to see which modules it requires. *) - let (info, crc) = read_unit_info file_name in - Unit (file_name,info,crc) + let info, link_time_info, crc = Cmx_format.load ~filename in + Unit (filename, info, link_time_info, crc) end - else if Filename.check_suffix file_name ".cmxa" then begin + else if Filename.check_suffix filename ".cmxa" then begin let infos = - try read_library_info file_name - with Compilenv.Error(Not_a_unit_info _) -> - raise(Error(Not_an_object_file file_name)) + try Cmxa_format.load ~filename + with Cmxa_format.Error (Not_a_cmxa_file _) -> + raise(Error(Not_an_object_file filename)) in - Library (file_name,infos) + Library (filename,infos) end - else raise(Error(Not_an_object_file file_name)) + else raise(Error(Not_an_object_file filename)) -let scan_file obj_name tolink = match read_file obj_name with - | Unit (file_name,info,crc) -> +let scan_file obj_name tolink = + match read_file obj_name with + | Unit (file_name, info, link_time_info, crc) -> (* This is a .cmx file. It must be linked in any case. *) - remove_required info.ui_name; - List.iter (add_required file_name) info.ui_imports_cmx; - (info, file_name, crc) :: tolink - | Library (file_name,infos) -> + let comp_unit = UI.unit info in + remove_required comp_unit; + let required_by = CU.Name.to_string (CU.name comp_unit) in + CU.Map.iter (fun imported_unit _crc -> + add_required required_by imported_unit) + (UI.imports_cmx info); + (info, link_time_info, file_name, crc) :: tolink + | Library (file_name, library_info) -> (* This is an archive file. Each unit contained in it will be linked in only if needed. *) - add_ccobjs (Filename.dirname file_name) infos; + add_ccobjs (Filename.dirname file_name) library_info; List.fold_right - (fun (info, crc) reqd -> - if info.ui_force_link + (fun (info, link_time_info, crc) reqd -> + let comp_unit = UI.unit info in + if Cmx_format.Unit_info_link_time.force_link link_time_info || !Clflags.link_everything - || is_required info.ui_name + || is_required comp_unit then begin - remove_required info.ui_name; - List.iter (add_required (Printf.sprintf "%s(%s)" - file_name info.ui_name)) - info.ui_imports_cmx; - (info, file_name, crc) :: reqd + remove_required comp_unit; + let required_by = + Printf.sprintf "%s(%s)" file_name + (CU.Name.to_string (CU.name (UI.unit info))) + in + CU.Map.iter (fun imported_unit _crc -> + add_required required_by imported_unit) + (UI.imports_cmx info); + (info, link_time_info, file_name, crc) :: reqd end else reqd) - infos.lib_units tolink + (Cmxa_format.Library_info.units library_info) + tolink (* Second pass: generate the startup file and link it with everything else *) let force_linking_of_startup ~ppf_dump = Asmgen.compile_phrase ~ppf_dump - (Cmm.Cdata ([Cmm.Csymbol_address "caml_startup"])) + (Cmm.Cdata ([Cmm.Csymbol_address Backend_sym.Names.caml_startup])) let make_globals_map units_list ~crc_interfaces = - let crc_interfaces = String.Tbl.of_seq (List.to_seq crc_interfaces) in + let crc_interfaces = CU.Name.Tbl.of_map crc_interfaces in let defined = - List.map (fun (unit, _, impl_crc) -> - let intf_crc = String.Tbl.find crc_interfaces unit.ui_name in - String.Tbl.remove crc_interfaces unit.ui_name; - (unit.ui_name, intf_crc, Some impl_crc, unit.ui_defines)) + List.map (fun (unit, _, _, impl_crc) -> + let name = CU.name (UI.unit unit) in + let intf_crc = CU.Name.Tbl.find crc_interfaces name in + CU.Name.Tbl.remove crc_interfaces name; + (name, intf_crc, Some impl_crc, UI.defines unit)) units_list in - String.Tbl.fold (fun name intf acc -> + CU.Name.Tbl.fold (fun name intf acc -> (name, intf, None, []) :: acc) crc_interfaces defined let make_startup_file ~ppf_dump units_list ~crc_interfaces = let compile_phrase p = Asmgen.compile_phrase ~ppf_dump p in Location.input_name := "caml_startup"; (* set name of "current" input *) - Compilenv.reset "_startup"; - (* set the name of the "current" compunit *) - Emit.begin_assembly (); - let name_list = - List.flatten (List.map (fun (info,_,_) -> info.ui_defines) units_list) in - compile_phrase (Cmmgen.entry_point name_list); - let units = List.map (fun (info,_,_) -> info) units_list in - List.iter compile_phrase (Cmmgen.generic_functions false units); + Linking_state.reset (); + Emit.begin_assembly BCU.startup; + Cmmgen.reset (); + let defined_units = + List.flatten ( + List.map (fun (info, _, _, _) -> + List.map BCU.compilation_unit (UI.defines info)) + units_list) + in + compile_phrase (Cmmgen.entry_point defined_units); + let link_infos = List.map (fun (_, info, _, _) -> info) units_list in + let joined_link_info = Cmx_format.Unit_info_link_time.join link_infos in + List.iter compile_phrase (Cmmgen.generic_functions false joined_link_info); Array.iteri (fun i name -> compile_phrase (Cmmgen.predef_exception i name)) Runtimedef.builtin_exceptions; - compile_phrase (Cmmgen.global_table name_list); + compile_phrase (Cmmgen.global_table defined_units); let globals_map = make_globals_map units_list ~crc_interfaces in compile_phrase (Cmmgen.globals_map globals_map); - compile_phrase(Cmmgen.data_segment_table ("_startup" :: name_list)); - compile_phrase(Cmmgen.code_segment_table ("_startup" :: name_list)); - let all_names = "_startup" :: "_system" :: name_list in - compile_phrase (Cmmgen.frame_table all_names); + let defined_units = BCU.startup :: defined_units in + compile_phrase (Cmmgen.data_segment_table defined_units); + compile_phrase (Cmmgen.code_segment_table defined_units); + let all_units = BCU.runtime_and_external_libs :: defined_units in + compile_phrase (Cmmgen.frame_table all_units); if Config.spacetime then begin - compile_phrase (Cmmgen.spacetime_shapes all_names); + compile_phrase (Cmmgen.spacetime_shapes all_units); + end; + if !Clflags.output_complete_object then begin + force_linking_of_startup ~ppf_dump end; - if !Clflags.output_complete_object then - force_linking_of_startup ~ppf_dump; - Emit.end_assembly () + Emit.end_assembly BCU.startup -let make_shared_startup_file ~ppf_dump units = +let make_shared_startup_file ~ppf_dump units_list = let compile_phrase p = Asmgen.compile_phrase ~ppf_dump p in Location.input_name := "caml_startup"; - Compilenv.reset "_shared_startup"; - Emit.begin_assembly (); - List.iter compile_phrase - (Cmmgen.generic_functions true (List.map fst units)); - compile_phrase (Cmmgen.plugin_header units); - compile_phrase - (Cmmgen.global_table - (List.map (fun (ui,_) -> ui.ui_symbol) units)); - if !Clflags.output_complete_object then - force_linking_of_startup ~ppf_dump; - (* this is to force a reference to all units, otherwise the linker - might drop some of them (in case of libraries) *) - Emit.end_assembly () + Linking_state.reset (); + Emit.begin_assembly BCU.shared_startup; + Cmmgen.reset (); + let unit_info_with_crc_list = + List.map (fun (info, _, _, crc) -> info, crc) units_list + in + let unit_info_list = List.map (fun (info, _, _, _) -> info) units_list in + let link_info_list = List.map (fun (_, info, _, _) -> info) units_list in + let joined_link_info = Cmx_format.Unit_info_link_time.join link_info_list in + List.iter compile_phrase (Cmmgen.generic_functions true joined_link_info); + compile_phrase (Cmmgen.plugin_header unit_info_with_crc_list); + let all_units = + List.map (fun info -> BCU.compilation_unit (UI.unit info)) + unit_info_list + in + compile_phrase (Cmmgen.global_table all_units); + if !Clflags.output_complete_object then begin + (* this is to force a reference to all units, otherwise the linker + might drop some of them (in case of libraries) *) + force_linking_of_startup ~ppf_dump + end; + Emit.end_assembly BCU.shared_startup let call_linker_shared file_list output_name = if not (Ccomp.call_linker Ccomp.Dll output_name file_list "") @@ -274,8 +317,8 @@ let call_linker_shared file_list output_name = let link_shared ~ppf_dump objfiles output_name = Profile.record_call output_name (fun () -> let units_tolink = List.fold_right scan_file objfiles [] in - List.iter - (fun (info, file_name, crc) -> check_consistency file_name info crc) + List.iter (fun (info, _link_info, file_name, crc) -> + check_consistency file_name info crc) units_tolink; Clflags.ccobjs := !Clflags.ccobjs @ !lib_ccobjs; Clflags.all_ccopts := !lib_ccopts @ !Clflags.all_ccopts; @@ -287,12 +330,8 @@ let link_shared ~ppf_dump objfiles output_name = then output_name ^ ".startup" ^ ext_asm else Filename.temp_file "camlstartup" ext_asm in let startup_obj = output_name ^ ".startup" ^ ext_obj in - Asmgen.compile_unit output_name - startup !Clflags.keep_startup_file startup_obj - (fun () -> - make_shared_startup_file ~ppf_dump - (List.map (fun (ui,_,crc) -> (ui,crc)) units_tolink) - ); + Asmgen.compile_unit startup !Clflags.keep_startup_file startup_obj + (fun () -> make_shared_startup_file ~ppf_dump units_tolink); call_linker_shared (startup_obj :: objfiles) output_name; remove_file startup_obj ) @@ -337,13 +376,12 @@ let link ~ppf_dump objfiles output_name = else if !Clflags.output_c_object then stdlib :: objfiles else stdlib :: (objfiles @ [stdexit]) in let units_tolink = List.fold_right scan_file objfiles [] in - Array.iter remove_required Runtimedef.builtin_exceptions; - begin match extract_missing_globals() with - [] -> () - | mg -> raise(Error(Missing_implementations mg)) + let missing_globals = extract_missing_globals () in + if not (CU.Map.is_empty missing_globals) then begin + raise (Error (Missing_implementations missing_globals)) end; - List.iter - (fun (info, file_name, crc) -> check_consistency file_name info crc) + List.iter (fun (info, _link_info, file_name, crc) -> + check_consistency file_name info crc) units_tolink; let crc_interfaces = extract_crc_interfaces () in Clflags.ccobjs := !Clflags.ccobjs @ !lib_ccobjs; @@ -354,8 +392,7 @@ let link ~ppf_dump objfiles output_name = then output_name ^ ".startup" ^ ext_asm else Filename.temp_file "camlstartup" ext_asm in let startup_obj = Filename.temp_file "camlstartup" ext_obj in - Asmgen.compile_unit output_name - startup !Clflags.keep_startup_file startup_obj + Asmgen.compile_unit startup !Clflags.keep_startup_file startup_obj (fun () -> make_startup_file ~ppf_dump units_tolink ~crc_interfaces); Misc.try_finally (fun () -> @@ -375,53 +412,55 @@ let report_error ppf = function fprintf ppf "The file %a is not a compilation unit description" Location.print_filename name | Missing_implementations l -> - let print_references ppf = function - | [] -> () - | r1 :: rl -> - fprintf ppf "%s" r1; - List.iter (fun r -> fprintf ppf ",@ %s" r) rl in + let print_references ppf = function + | [] -> () + | r1 :: rl -> + fprintf ppf "%s" r1; + List.iter (fun r -> fprintf ppf ",@ %s" r) rl + in let print_modules ppf = - List.iter - (fun (md, rq) -> - fprintf ppf "@ @[%s referenced from %a@]" md - print_references rq) in + CU.Map.iter + (fun md rq -> + fprintf ppf "@ @[%a referenced from %a@]" + CU.Name.print (CU.name md) + print_references (String.Set.elements rq)) + in fprintf ppf - "@[No implementations provided for the following modules:%a@]" - print_modules l + "@[No implementations provided for the following modules:%a@]" + print_modules l | Inconsistent_interface(intf, file1, file2) -> fprintf ppf - "@[Files %a@ and %a@ make inconsistent assumptions \ - over interface %s@]" - Location.print_filename file1 - Location.print_filename file2 - intf - | Inconsistent_implementation(intf, file1, file2) -> + "@[Files %a@ and %a@ make inconsistent assumptions \ + over interface %a@]" + Location.print_filename file1 + Location.print_filename file2 + CU.Name.print intf + | Inconsistent_implementation(impl, file1, file2) -> fprintf ppf - "@[Files %a@ and %a@ make inconsistent assumptions \ - over implementation %s@]" - Location.print_filename file1 - Location.print_filename file2 - intf - | Assembler_error file -> - fprintf ppf "Error while assembling %a" Location.print_filename file + "@[Files %a@ and %a@ make inconsistent assumptions \ + over implementation %a@]" + Location.print_filename file1 + Location.print_filename file2 + CU.Name.print impl | Linking_error -> fprintf ppf "Error during linking" | Multiple_definition(modname, file1, file2) -> fprintf ppf - "@[Files %a@ and %a@ both define a module named %s@]" + "@[Files %a@ and %a@ both define a module named %a@]" Location.print_filename file1 Location.print_filename file2 - modname + CU.Name.print modname | Missing_cmx(filename, name) -> fprintf ppf "@[File %a@ was compiled without access@ \ - to the .cmx file@ for module %s,@ \ + to the .cmx file@ for module %a,@ \ which was produced by `ocamlopt -for-pack'.@ \ Please recompile %a@ with the correct `-I' option@ \ - so that %s.cmx@ is found.@]" - Location.print_filename filename name - Location.print_filename filename - name + so that %a.cmx@ is found.@]" + Location.print_filename filename + CU.Name.print name + Location.print_filename filename + CU.Name.print name let () = Location.register_error_of_exn @@ -431,11 +470,11 @@ let () = ) let reset () = - Consistbl.clear crc_interfaces; - Consistbl.clear crc_implementations; - implementations_defined := []; - cmx_required := []; - interfaces := []; - implementations := []; + Cmi_consistbl.clear crc_interfaces; + Cmx_consistbl.clear crc_implementations; + implementations_defined := CU.Map.empty; + cmx_required := CU.Set.empty; + interfaces := CU.Name.Set.empty; + implementations := CU.Set.empty; lib_ccobjs := []; lib_ccopts := [] diff --git a/asmcomp/asmlink.mli b/asmcomp/asmlink.mli index 1c8322765b86..2dec472404db 100644 --- a/asmcomp/asmlink.mli +++ b/asmcomp/asmlink.mli @@ -25,20 +25,19 @@ val link_shared: ppf_dump:formatter -> string list -> string -> unit val call_linker_shared: string list -> string -> unit val reset : unit -> unit -val check_consistency: filepath -> Cmx_format.unit_infos -> Digest.t -> unit -val extract_crc_interfaces: unit -> crcs -val extract_crc_implementations: unit -> crcs +val check_consistency: filepath -> Cmx_format.Unit_info.t -> Digest.t -> unit +val extract_crc_interfaces: unit -> Digest.t option Compilation_unit.Name.Map.t +val extract_crc_implementations: unit -> Digest.t option Compilation_unit.Map.t -type error = +type error = private | File_not_found of filepath | Not_an_object_file of filepath - | Missing_implementations of (modname * string list) list - | Inconsistent_interface of modname * filepath * filepath - | Inconsistent_implementation of modname * filepath * filepath - | Assembler_error of filepath + | Missing_implementations of Misc.Stdlib.String.Set.t Compilation_unit.Map.t + | Inconsistent_interface of Compilation_unit.Name.t * filepath * filepath + | Inconsistent_implementation of Compilation_unit.Name.t * filepath * filepath | Linking_error - | Multiple_definition of modname * filepath * filepath - | Missing_cmx of filepath * modname + | Multiple_definition of Compilation_unit.Name.t * filepath * filepath + | Missing_cmx of filepath * Compilation_unit.Name.t exception Error of error diff --git a/asmcomp/asmpackager.ml b/asmcomp/asmpackager.ml index cddb34631d1d..f1913a1b7505 100644 --- a/asmcomp/asmpackager.ml +++ b/asmcomp/asmpackager.ml @@ -3,9 +3,11 @@ (* OCaml *) (* *) (* Xavier Leroy, projet Cristal, INRIA Rocquencourt *) +(* Mark Shinwell and Leo White, Jane Street Europe *) (* *) (* Copyright 2002 Institut National de Recherche en Informatique et *) (* en Automatique. *) +(* Copyright 2019 Jane Street Group LLC *) (* *) (* All rights reserved. This file is distributed under the terms of *) (* the GNU Lesser General Public License version 2.1, with the *) @@ -16,48 +18,68 @@ (* "Package" a set of .cmx/.o files into one .cmx/.o file having the original compilation units as sub-modules. *) +[@@@ocaml.warning "+a-4-30-40-41-42"] + open Misc -open Cmx_format + +module CU = Compilation_unit +module UI = Cmx_format.Unit_info type error = - Illegal_renaming of string * string * string - | Forward_reference of string * string + | Illegal_renaming of { + name_in_cmx : CU.Name.t; + file : string; + desired_name : CU.Name.t; + } + | Forward_reference of string * CU.Name.t | Wrong_for_pack of string * string | Linking_error - | Assembler_error of string | File_not_found of string - exception Error of error (* Read the unit information from a .cmx file. *) -type pack_member_kind = PM_intf | PM_impl of unit_infos +type pack_member_kind = + | PM_intf + | PM_impl of UI.t * Cmx_format.Unit_info_link_time.t type pack_member = - { pm_file: string; - pm_name: string; + { pm_file: filepath; + pm_name: CU.Name.t; pm_kind: pack_member_kind } -let read_member_info pack_path file = ( +let read_member_info pack_path file = let name = - String.capitalize_ascii(Filename.basename(chop_extensions file)) in + CU.Name.of_string (String.capitalize_ascii ( + Filename.basename (chop_extensions file))) + in let kind = if Filename.check_suffix file ".cmi" then PM_intf else begin - let (info, crc) = Compilenv.read_unit_info file in - if info.ui_name <> name - then raise(Error(Illegal_renaming(name, file, info.ui_name))); - if info.ui_symbol <> - (Compilenv.current_unit_infos()).ui_symbol ^ "__" ^ info.ui_name - then raise(Error(Wrong_for_pack(file, pack_path))); + let info, link_info, crc = Cmx_format.load ~filename:file in + let name_in_cmx = CU.name (UI.unit info) in + if not (CU.Name.equal name_in_cmx name) then begin + raise (Error (Illegal_renaming { + name_in_cmx; + file; + desired_name = name; + })) + end; + let cmx_file_for_pack_prefix = CU.for_pack_prefix (UI.unit info) in + let full_path_current_unit = CU.full_path (CU.get_current_exn ()) in + if not (Misc.Stdlib.List.equal CU.Name.equal + cmx_file_for_pack_prefix full_path_current_unit) + then begin + raise (Error (Wrong_for_pack (file, pack_path))) + end; Asmlink.check_consistency file info crc; - Compilenv.cache_unit_info info; - PM_impl info - end in + Compilation_state.cache_unit_info info; + PM_impl (info, link_info) + end + in { pm_file = file; pm_name = name; pm_kind = kind } -) (* Check absence of forward references *) @@ -67,15 +89,20 @@ let check_units members = | mb :: tl -> begin match mb.pm_kind with | PM_intf -> () - | PM_impl infos -> - List.iter - (fun (unit, _) -> - if List.mem unit forbidden - then raise(Error(Forward_reference(mb.pm_file, unit)))) - infos.ui_imports_cmx + | PM_impl (info, _link_info) -> + CU.Map.iter + (fun unit _crc -> + let name = CU.name unit in + if CU.Name.Set.mem name forbidden + then raise(Error(Forward_reference(mb.pm_file, name)))) + (UI.imports_cmx info) end; - check (list_remove mb.pm_name forbidden) tl in - check (List.map (fun mb -> mb.pm_name) members) members + check (CU.Name.Set.remove mb.pm_name forbidden) tl + in + let forbidden = + CU.Name.Set.of_list (List.map (fun mb -> mb.pm_name) members) + in + check forbidden members (* Make the .o file for the package *) @@ -89,134 +116,134 @@ let make_package_object ~ppf_dump members targetobj targetname coercion (* Put the full name of the module in the temporary file name to avoid collisions with MSVC's link /lib in case of successive packs *) - Filename.temp_file (Compilenv.make_symbol (Some "")) Config.ext_obj in + let comp_unit = CU.get_current_exn () in + let symbol = Symbol.for_module_block comp_unit in + let backend_sym = Backend_sym.of_symbol symbol in + Filename.temp_file (Backend_sym.to_string backend_sym) Config.ext_obj + in let components = List.map (fun m -> match m.pm_kind with | PM_intf -> None - | PM_impl _ -> Some(Ident.create_persistent m.pm_name)) - members in + | PM_impl _ -> + Some (Ident.create_persistent (CU.Name.to_string m.pm_name))) + members + in let module_ident = Ident.create_persistent targetname in let prefixname = Filename.remove_extension objtemp in + let required_globals = Ident.Set.empty in if Config.flambda then begin - let size, lam = Translmod.transl_package_flambda components coercion in - let flam = - Middle_end.middle_end ~ppf_dump - ~prefixname - ~backend - ~size - ~filename:targetname - ~module_ident - ~module_initializer:lam + let main_module_block_size, code = + Translmod.transl_package_flambda components coercion in - Asmgen.compile_implementation_flambda - prefixname ~backend ~required_globals:Ident.Set.empty ~ppf_dump flam; + let program = + { Lambda. + code; + main_module_block_size; + module_ident; + required_globals; + } + in + Asmgen.compile_implementation ~backend + ~filename:targetname + ~prefixname + ~middle_end:Flambda_middle_end.lambda_to_clambda + ~ppf_dump + program end else begin let main_module_block_size, code = - Translmod.transl_store_package - components (Ident.create_persistent targetname) coercion in - Asmgen.compile_implementation_clambda - prefixname ~ppf_dump { Lambda.code; main_module_block_size; - module_ident; required_globals = Ident.Set.empty } + Translmod.transl_store_package components + (Ident.create_persistent targetname) coercion + in + let program = + { Lambda. + code; + main_module_block_size; + module_ident; + required_globals; + } + in + Asmgen.compile_implementation ~backend + ~filename:targetname + ~prefixname + ~middle_end:Closure_middle_end.lambda_to_clambda + ~ppf_dump + program end; let objfiles = List.map (fun m -> Filename.remove_extension m.pm_file ^ Config.ext_obj) - (List.filter (fun m -> m.pm_kind <> PM_intf) members) in + (List.filter (fun m -> m.pm_kind <> PM_intf) members) + in let ok = Ccomp.call_linker Ccomp.Partial targetobj (objtemp :: objfiles) "" in remove_file objtemp; if not ok then raise(Error Linking_error) ) -(* Make the .cmx file for the package *) -let get_export_info ui = - assert(Config.flambda); - match ui.ui_export_info with - | Clambda _ -> assert false - | Flambda info -> info - -let get_approx ui = - assert(not Config.flambda); - match ui.ui_export_info with - | Flambda _ -> assert false - | Clambda info -> info +(* Make the .cmx file for the package *) let build_package_cmx members cmxfile = - let unit_names = - List.map (fun m -> m.pm_name) members in - let filter lst = - List.filter (fun (name, _crc) -> not (List.mem name unit_names)) lst in - let union lst = - List.fold_left - (List.fold_left - (fun accu n -> if List.mem n accu then accu else n :: accu)) - [] lst in - let units = - List.fold_right - (fun m accu -> - match m.pm_kind with PM_intf -> accu | PM_impl info -> info :: accu) - members [] in - let pack_units = - List.fold_left - (fun set info -> - let unit_id = Compilenv.unit_id_from_name info.ui_name in - Compilation_unit.Set.add - (Compilenv.unit_for_global unit_id) set) - Compilation_unit.Set.empty units in - let units = - if Config.flambda then - List.map (fun info -> - { info with - ui_export_info = - Flambda - (Export_info_for_pack.import_for_pack ~pack_units - ~pack:(Compilenv.current_unit ()) - (get_export_info info)) }) - units - else - units + let module UI = Cmx_format.Unit_info in + let unit_names_in_pack = + CU.Name.Set.of_list (List.map (fun m -> m.pm_name) members) + in + let units, unit_link_infos = + List.split ( + List.fold_right (fun m accu -> + match m.pm_kind with + | PM_intf -> accu + | PM_impl (info, link_info) -> (info, link_info) :: accu) + members []) + in + let compilation_state = Compilation_state.Snapshot.create () in + let current_unit = CU.get_current_exn () in + let current_unit_name = CU.name current_unit in + let current_unit_crc = + Env.crc_of_unit (CU.Name.to_string current_unit_name) in - let ui = Compilenv.current_unit_infos() in - let ui_export_info = - if Config.flambda then - let ui_export_info = + let imports_cmi = + let imports_cmi = + CU.Name.Map.filter (fun name _crc -> + not (CU.Name.Set.mem name unit_names_in_pack)) + (Asmlink.extract_crc_interfaces ()) + in + CU.Name.Map.add current_unit_name (Some current_unit_crc) imports_cmi + in + let imports_cmx = + CU.Map.filter (fun imported_unit _crc -> + let name = CU.name imported_unit in + not (CU.Name.Set.mem name unit_names_in_pack)) + (Asmlink.extract_crc_implementations ()) + in + let defines = + (List.flatten (List.map UI.defines units)) @ [current_unit] + in + let export_info : UI.export_info = + match compilation_state.export_info with + | Closure approx -> Closure approx + | Flambda export_info -> + let export_info = List.fold_left (fun acc info -> - Export_info.merge acc (get_export_info info)) - (Export_info_for_pack.import_for_pack ~pack_units - ~pack:(Compilenv.current_unit ()) - (get_export_info ui)) + match UI.export_info info with + | Flambda export_info -> Export_info.merge acc export_info + | Closure _ -> + Misc.fatal_errorf "%a contains Closure approximations yet \ + Flambda export info was found" + CU.print (UI.unit info)) + export_info units in - Flambda ui_export_info - else - Clambda (get_approx ui) + Flambda export_info in - Export_info_for_pack.clear_import_state (); let pkg_infos = - { ui_name = ui.ui_name; - ui_symbol = ui.ui_symbol; - ui_defines = - List.flatten (List.map (fun info -> info.ui_defines) units) @ - [ui.ui_symbol]; - ui_imports_cmi = - (ui.ui_name, Some (Env.crc_of_unit ui.ui_name)) :: - filter(Asmlink.extract_crc_interfaces()); - ui_imports_cmx = - filter(Asmlink.extract_crc_implementations()); - ui_curry_fun = - union(List.map (fun info -> info.ui_curry_fun) units); - ui_apply_fun = - union(List.map (fun info -> info.ui_apply_fun) units); - ui_send_fun = - union(List.map (fun info -> info.ui_send_fun) units); - ui_force_link = - List.exists (fun info -> info.ui_force_link) units; - ui_export_info; - } in - Compilenv.write_unit_info pkg_infos cmxfile + UI.create ~unit:current_unit ~defines ~imports_cmi ~imports_cmx + ~export_info + in + let pkg_link_infos = Cmx_format.Unit_info_link_time.join unit_link_infos in + Cmx_format.save pkg_infos pkg_link_infos ~filename:cmxfile (* Make the .cmx and the .o for the package *) @@ -247,7 +274,15 @@ let package_files ~ppf_dump initial_env files targetcmx ~backend = (* Set the name of the current "input" *) Location.input_name := targetcmx; (* Set the name of the current compunit *) - Compilenv.reset ?packname:!Clflags.for_package targetname; + let for_pack_prefix = + match !Clflags.for_package with + | None | Some "" -> [] + | Some for_pack_prefix -> + List.map CU.Name.of_string (String.split_on_char '.' for_pack_prefix) + in + let comp_unit = CU.create ~for_pack_prefix (CU.Name.of_string targetname) in + Compilation_unit.set_current comp_unit; + Compilation_state.reset comp_unit; Misc.try_finally (fun () -> let coercion = Typemod.package_units initial_env files targetcmi targetname in @@ -261,20 +296,19 @@ let package_files ~ppf_dump initial_env files targetcmx ~backend = open Format let report_error ppf = function - Illegal_renaming(name, file, id) -> + | Illegal_renaming { name_in_cmx; file; desired_name; } -> fprintf ppf "Wrong file naming: %a@ contains the code for\ - @ %s when %s was expected" - Location.print_filename file name id - | Forward_reference(file, ident) -> - fprintf ppf "Forward reference to %s in file %a" ident + @ %a when %a was expected" + Location.print_filename file CU.Name.print name_in_cmx + CU.Name.print desired_name + | Forward_reference(file, cu_name) -> + fprintf ppf "Forward reference to %a in file %a" CU.Name.print cu_name Location.print_filename file | Wrong_for_pack(file, path) -> fprintf ppf "File %a@ was not compiled with the `-for-pack %s' option" Location.print_filename file path | File_not_found file -> fprintf ppf "File %s not found" file - | Assembler_error file -> - fprintf ppf "Error while assembling %s" file | Linking_error -> fprintf ppf "Error during partial linking" diff --git a/asmcomp/asmpackager.mli b/asmcomp/asmpackager.mli index 3ea2142540dd..fcb0e408d5dd 100644 --- a/asmcomp/asmpackager.mli +++ b/asmcomp/asmpackager.mli @@ -13,8 +13,8 @@ (* *) (**************************************************************************) -(* "Package" a set of .cmx/.o files into one .cmx/.o file having the - original compilation units as sub-modules. *) +(** "Package" a set of .cmx/.o files into one .cmx/.o file having the + original compilation units as sub-modules. *) val package_files : ppf_dump:Format.formatter @@ -25,11 +25,14 @@ val package_files -> unit type error = - Illegal_renaming of string * string * string - | Forward_reference of string * string + | Illegal_renaming of { + name_in_cmx : Compilation_unit.Name.t; + file : string; + desired_name : Compilation_unit.Name.t; + } + | Forward_reference of string * Compilation_unit.Name.t | Wrong_for_pack of string * string | Linking_error - | Assembler_error of string | File_not_found of string exception Error of error diff --git a/asmcomp/backend_compilation_unit.ml b/asmcomp/backend_compilation_unit.ml new file mode 100644 index 000000000000..229693eda2b6 --- /dev/null +++ b/asmcomp/backend_compilation_unit.ml @@ -0,0 +1,81 @@ +(**************************************************************************) +(* *) +(* OCaml *) +(* *) +(* Mark Shinwell, Jane Street Europe *) +(* *) +(* Copyright 2019 Jane Street Group LLC *) +(* *) +(* All rights reserved. This file is distributed under the terms of *) +(* the GNU Lesser General Public License version 2.1, with the *) +(* special exception on linking described in the file LICENSE. *) +(* *) +(**************************************************************************) + +[@@@ocaml.warning "+a-4-30-40-41-42"] + +type t = + | Compilation_unit of Compilation_unit.t + | Startup + | Shared_startup + | Runtime_and_external_libs + +include Identifiable.Make (struct + type nonrec t = t + + let compare t1 t2 = + match t1, t2 with + | Compilation_unit comp_unit1, Compilation_unit comp_unit2 -> + Compilation_unit.compare comp_unit1 comp_unit2 + | Startup, Startup -> 0 + | Shared_startup, Shared_startup -> 0 + | Runtime_and_external_libs, Runtime_and_external_libs -> 0 + | Compilation_unit _, _ -> -1 + | Startup, (Compilation_unit _) -> 1 + | Startup, _ -> -1 + | Shared_startup, (Compilation_unit _ | Startup) -> 1 + | Shared_startup, _ -> -1 + | Runtime_and_external_libs, + (Compilation_unit _ | Startup | Shared_startup) -> 1 + + let equal t1 t2 = + compare t1 t2 = 0 + + let hash t = + match t with + | Compilation_unit comp_unit -> + Hashtbl.hash (0, Compilation_unit.hash comp_unit) + | Startup -> Hashtbl.hash 1 + | Shared_startup -> Hashtbl.hash 2 + | Runtime_and_external_libs -> Hashtbl.hash 3 + + let print ppf t = + match t with + | Compilation_unit comp_unit -> + Format.fprintf ppf "@[(Compilation_unit %a)@]" + Compilation_unit.print comp_unit + | Startup -> Format.pp_print_string ppf "Startup" + | Shared_startup -> Format.pp_print_string ppf "Shared_startup" + | Runtime_and_external_libs -> + Format.pp_print_string ppf "Runtime_and_external_libs" + + let output chan t = + print (Format.formatter_of_out_channel chan) t +end) + +let compilation_unit comp_unit = Compilation_unit comp_unit +let startup = Startup +let shared_startup = Shared_startup +let runtime_and_external_libs = Runtime_and_external_libs + +let name_for_backend_sym ~separator t = + match t with + | Compilation_unit comp_unit -> + let path = + List.map Compilation_unit.Name.to_string + (Compilation_unit.full_path comp_unit) + in + String.concat separator path + | Startup -> "_startup" + | Shared_startup -> "_shared_startup" + | Runtime_and_external_libs -> "_system" diff --git a/asmcomp/backend_compilation_unit.mli b/asmcomp/backend_compilation_unit.mli new file mode 100644 index 000000000000..8f4467b96807 --- /dev/null +++ b/asmcomp/backend_compilation_unit.mli @@ -0,0 +1,47 @@ +(**************************************************************************) +(* *) +(* OCaml *) +(* *) +(* Mark Shinwell, Jane Street Europe *) +(* *) +(* Copyright 2019 Jane Street Group LLC *) +(* *) +(* All rights reserved. This file is distributed under the terms of *) +(* the GNU Lesser General Public License version 2.1, with the *) +(* special exception on linking described in the file LICENSE. *) +(* *) +(**************************************************************************) + +(** Like [Compilation_unit], but also corresponds to units derived entirely + from Cmm code (and not having any OCaml source file), such as the startup + and shared startup files. +*) + +[@@@ocaml.warning "+a-4-30-40-41-42"] + +(** The type of backend compilation units. *) +type t = private + | Compilation_unit of Compilation_unit.t + | Startup + | Shared_startup + | Runtime_and_external_libs + +(** Printing, comparison, sets, maps, etc. *) +include Identifiable.S with type t := t + +(** Create a backend compilation unit from a middle-end compilation unit. *) +val compilation_unit : Compilation_unit.t -> t + +(** The backend compilation unit for an executable's startup file. *) +val startup : t + +(** The backend compilation unit for a shared library's startup file. *) +val shared_startup : t + +(** The backend compilation unit for code external to that produced by the + OCaml compiler, such as the runtime, and the system C library. *) +val runtime_and_external_libs : t + +(** The name for [Backend_sym] to use when creating names for symbols defined + in the given compilation unit. *) +val name_for_backend_sym : separator:string -> t -> string diff --git a/asmcomp/backend_sym.ml b/asmcomp/backend_sym.ml new file mode 100644 index 000000000000..89f725c2ab2c --- /dev/null +++ b/asmcomp/backend_sym.ml @@ -0,0 +1,342 @@ +(**************************************************************************) +(* *) +(* OCaml *) +(* *) +(* Mark Shinwell, Jane Street Europe *) +(* *) +(* Copyright 2018--2019 Jane Street Group LLC *) +(* *) +(* All rights reserved. This file is distributed under the terms of *) +(* the GNU Lesser General Public License version 2.1, with the *) +(* special exception on linking described in the file LICENSE. *) +(* *) +(**************************************************************************) + +[@@@ocaml.warning "+a-4-30-40-41-42"] + +module BCU = Backend_compilation_unit + +type kind = Text | Data + +type t = { + kind : kind; + object_file : Object_file.t; + name : string; + (* The [name] uniquely determines the symbol within a whole program. *) +} + +type backend_sym = t + +let to_string { name; _ } = name + +include Identifiable.Make (struct + type nonrec t = t + + let compare t1 t2 = String.compare (to_string t1) (to_string t2) + + let equal t1 t2 = (compare t1 t2 = 0) + + let hash t = Hashtbl.hash (to_string t) + + let print ppf { name; _ } = Format.pp_print_string ppf name + + let output chn t = output_string chn (to_string t) +end) + +let compute_object_file (compilation_unit : BCU.t) = + match compilation_unit with + | Compilation_unit compilation_unit -> + begin match Compilation_unit.get_current () with + | None -> Object_file.another_compilation_unit + | Some current_unit -> + if Compilation_unit.equal compilation_unit current_unit then + Object_file.current_compilation_unit + else + Object_file.another_compilation_unit + end + | Startup -> Object_file.startup + | Shared_startup -> Object_file.shared_startup + | Runtime_and_external_libs -> Object_file.runtime_and_external_libs + +let first_part = "caml" +let separator = "__" + +let create ?compilation_unit ~base_name kind = + let compilation_unit = + match compilation_unit with + | None -> + BCU.compilation_unit ( + Compilation_unit.get_current_exn ()) + | Some compilation_unit -> compilation_unit + in + let object_file = compute_object_file compilation_unit in + let name = + Printf.sprintf "%s%s%s%s" + first_part + (BCU.name_for_backend_sym ~separator compilation_unit) + separator + base_name + in + { kind; + object_file; + name; + } + +let create_for_external_call (prim : Primitive.description) = + { kind = Text; + object_file = Object_file.runtime_and_external_libs; + name = Primitive.native_name prim; + } + +let unsafe_create ?compilation_unit name kind = + let compilation_unit = + match compilation_unit with + | None -> + BCU.compilation_unit ( + Compilation_unit.get_current_exn ()) + | Some compilation_unit -> compilation_unit + in + let object_file = compute_object_file compilation_unit in + { kind; + object_file; + name; + } + +let compute_name_for_middle_end_symbol sym = + let first_part, separator = + match Symbol.compilation_unit sym with + | Compilation_unit compilation_unit -> + let comp_unit = + BCU.name_for_backend_sym ~separator ( + BCU.compilation_unit compilation_unit) + in + first_part ^ comp_unit, separator + | Predef -> first_part ^ "_exn_", "" + in + match Symbol.name_for_backend sym with + | None -> first_part + | Some name -> first_part ^ separator ^ name + +let of_symbol sym = + let object_file = + match Symbol.compilation_unit sym with + | Compilation_unit sym_unit -> + compute_object_file (BCU.compilation_unit sym_unit) + | Predef -> Object_file.startup + in + let kind : kind = + match Symbol.kind sym with + | Text -> Text + | Data -> Data + in + { kind; + object_file; + name = compute_name_for_middle_end_symbol sym; + } + +let of_external_name object_file name kind = + (* This is deliberately not exposed in the .mli. (Add things to [Names], + below, instead.) *) + { kind; + object_file; + name; + } + +let kind t = t.kind + +let object_file t = t.object_file + +let next_lifted_anonymous_constant_stamp = ref 0 + +(* CR mshinwell: Add [reset] function? *) + +let for_lifted_anonymous_constant ?compilation_unit () = + let stamp = !next_lifted_anonymous_constant_stamp in + incr next_lifted_anonymous_constant_stamp; + let compilation_unit = + match compilation_unit with + | None -> + BCU.compilation_unit ( + Compilation_unit.get_current_exn ()) + | Some compilation_unit -> compilation_unit + in + let name = + (* Care: these must not clash with the names produced in + [Symbol.name_for_backend]. *) + Printf.sprintf "%s%s%sc%d" + first_part + (BCU.name_for_backend_sym ~separator compilation_unit) + separator + stamp + in + { kind = Data; + object_file = compute_object_file compilation_unit; + name; + } + +let add_suffix t new_suffix = + { kind = t.kind; + object_file = t.object_file; + name = t.name ^ new_suffix; + } + +let add_suffixes t new_suffixes = + List.fold_left (fun t new_suffix -> add_suffix t new_suffix) t new_suffixes + +let add_int_suffix t new_suffix = + add_suffix t (string_of_int new_suffix) + +let to_escaped_string ?suffix ~symbol_prefix ~escape t = + let suffix = + match suffix with + | None -> "" + | Some suffix -> suffix + in + symbol_prefix ^ (escape t.name) ^ suffix + +module Names = struct + let runtime = Object_file.runtime_and_external_libs + let startup = Object_file.startup + + let sqrt = + of_external_name runtime "sqrt" Text + + let caml_exception_pointer = + of_external_name runtime "caml_exception_pointer" Data + + let caml_backtrace_pos = + of_external_name runtime "caml_backtrace_pos" Data + + let caml_exn_Division_by_zero = + of_external_name startup "caml_exn_Division_by_zero" Data + + let caml_nativeint_ops = + of_external_name runtime "caml_nativeint_ops" Data + + let caml_int32_ops = + of_external_name runtime "caml_int32_ops" Data + + let caml_int64_ops = + of_external_name runtime "caml_int64_ops" Data + + let caml_send n = + add_int_suffix (of_external_name startup "caml_send" Text) n + + let caml_curry_n n = + add_int_suffix (of_external_name startup "caml_curry" Text) n + + let caml_curry_m_to_n m n = + add_suffixes (of_external_name startup "caml_curry" Text) + [string_of_int m; "_"; string_of_int n] + + let caml_curry_m_to_n_app m n = + add_suffixes (of_external_name startup "caml_curry" Text) + [string_of_int m; "_"; string_of_int n; "_app"] + + let caml_tuplify n = + add_int_suffix (of_external_name startup "caml_tuplify" Text) n + + let caml_apply n = + add_int_suffix (of_external_name startup "caml_apply" Text) n + + let caml_ba_get n = + add_int_suffix (of_external_name runtime "caml_ba_get_" Text) n + + let caml_ba_set n = + add_int_suffix (of_external_name runtime "caml_ba_set_" Text) n + + let caml_call_gc = + of_external_name runtime "caml_call_gc" Text + + let caml_modify = + of_external_name runtime "caml_modify" Text + + let caml_initialize = + of_external_name runtime "caml_initialize" Text + + let caml_get_public_method = + of_external_name runtime "caml_get_public_method" Text + + let caml_alloc = + of_external_name runtime "caml_alloc" Text + + let caml_ml_array_bound_error = + of_external_name runtime "caml_ml_array_bound_error" Text + + let caml_raise_exn = + of_external_name runtime "caml_raise_exn" Text + + let caml_make_array = + of_external_name runtime "caml_make_array" Text + + let caml_bswap16_direct = + of_external_name runtime "caml_bswap16_direct" Text + + type bswap_arg = Int32 | Int64 | Nativeint + + let caml_direct_bswap ty = + let ty = + match ty with + | Int32 -> "int32" + | Int64 -> "int64" + | Nativeint -> "nativeint" + in + of_external_name runtime (Printf.sprintf "caml_%s_direct_bswap" ty) Text + + let caml_alloc_dummy = + of_external_name runtime "caml_alloc_dummy" Text + + let caml_alloc_dummy_float = + of_external_name runtime "caml_alloc_dummy_float" Text + + let caml_update_dummy = + of_external_name runtime "caml_update_dummy" Text + + let caml_program = + of_external_name startup "caml_program" Text + + let caml_startup = + of_external_name runtime "caml_startup" Text + + let caml_globals_inited = + of_external_name runtime "caml_globals_inited" Data + + let caml_globals = + of_external_name startup "caml_globals" Data + + let caml_plugin_header = + of_external_name startup "caml_plugin_header" Data + + let caml_globals_map = + of_external_name startup "caml_globals_map" Data + + let caml_code_segments = + of_external_name startup "caml_code_segments" Data + + let caml_data_segments = + of_external_name startup "caml_data_segments" Data + + let caml_frametable = + of_external_name startup "caml_frametable" Data + + let caml_spacetime_shapes = + of_external_name startup "caml_spacetime_shapes" Data + + let caml_afl_area_ptr = + of_external_name runtime "caml_afl_area_ptr" Data + + let caml_afl_prev_loc = + of_external_name runtime "caml_afl_prev_loc" Data + + let caml_setup_afl = + of_external_name runtime "caml_setup_afl" Text + + let caml_spacetime_allocate_node = + of_external_name runtime "caml_spacetime_allocate_node" Text + + let caml_spacetime_indirect_node_hole_ptr = + of_external_name runtime "caml_spacetime_indirect_node_hole_ptr" Text + + let caml_spacetime_generate_profinfo = + of_external_name runtime "caml_spacetime_generate_profinfo" Text +end diff --git a/asmcomp/backend_sym.mli b/asmcomp/backend_sym.mli new file mode 100644 index 000000000000..a7bcf7cd1fc9 --- /dev/null +++ b/asmcomp/backend_sym.mli @@ -0,0 +1,184 @@ +(**************************************************************************) +(* *) +(* OCaml *) +(* *) +(* Mark Shinwell, Jane Street Europe *) +(* *) +(* Copyright 2018--2019 Jane Street Group LLC *) +(* *) +(* All rights reserved. This file is distributed under the terms of *) +(* the GNU Lesser General Public License version 2.1, with the *) +(* special exception on linking described in the file LICENSE. *) +(* *) +(**************************************************************************) + +(** Names of object file symbols (including OCaml-specific mangling + conventions) together with knowledge about whether such symbols refer + to code or data. + + Since we need to represent symbols that live in the startup files and + external libraries, in addition to those within normal OCaml compilation + units (i.e. those arising from OCaml source files), object file symbols + are tied to [Object_file]s rather than [Compilation_unit]s. + + If you're looking for the place where symbol names are mangled using + OCaml-specific (rather than target-specific) conventions, it's here. +*) + +[@@@ocaml.warning "+a-4-30-40-41-42"] + +(** The type of backend symbols. *) +type t +type backend_sym = t + +(** Sets, maps, total ordering, etc. + + The [print] function sends a non-escaped version of the symbol to a + formatter. This must not be used for assembly emission or similar + (use [Asm_symbol] instead). *) +include Identifiable.S with type t := t + +(** Like [print] but returns a string. The returned name will be unique to + the given symbol, but as for [print], such name is not for assembly + emission or similar. *) +(* CR mshinwell: This is being used for [ndl_loadsym] *) +val to_string : t -> string + +(** Whether a symbol points at executable code ("text") or data. + + Unlike [Asm_symbol]s, [Backend_sym]s of kind [Data] always point at + correctly-structured OCaml values, just like [Symbol]s. +*) +type kind = Text | Data + +(** Create a backend symbol, in the current compilation unit (translated + to a [Backend_compilation_unit]) unless specified otherwise, given a base + name. The base name should not be escaped, prefixed or mangled in any + way; such operations are performed by this module and then [Asm_symbol]. *) +val create + : ?compilation_unit:Backend_compilation_unit.t + -> base_name:string + -> kind + -> t + +(** Create a backend symbol to refer to an external function. *) +val create_for_external_call : Primitive.description -> t + +(** Create a backend symbol given the mangled form. This function should not + currently be used except in the Cmm testsuite. *) +val unsafe_create + : ?compilation_unit:Backend_compilation_unit.t + -> string + -> kind + -> t + +(** Create a backend symbol from a middle end symbol. (The resulting symbol + will always be of kind [Data].) *) +val of_symbol : Symbol.t -> t + +(** Create a symbol to correspond to a lifted constant that does not have a + source-level name associated with it. If [compilation_unit] is not provided + then it is assumed that [Compilation_unit.set_current] has been called + appropriately. *) +val for_lifted_anonymous_constant + : ?compilation_unit:Backend_compilation_unit.t + -> unit + -> t + +(** A description of where the given symbol is defined. *) +val object_file : t -> Object_file.t + +(** The kind of the symbol. *) +val kind : t -> kind + +(** Symbols either defined in the runtime or defined in (shared) startup + files with standard names. *) +module Names : sig + (** External variables from the C library. *) + val sqrt : t + + (** Global variables in the OCaml runtime accessed by OCaml code. *) + val caml_exception_pointer : t + val caml_backtrace_pos : t + val caml_exn_Division_by_zero : t + val caml_nativeint_ops : t + val caml_int32_ops : t + val caml_int64_ops : t + val caml_globals_inited : t + + (** Entry points to the OCaml runtime from OCaml code. *) + val caml_call_gc : t + val caml_modify : t + val caml_initialize : t + val caml_get_public_method : t + val caml_alloc : t + val caml_ml_array_bound_error : t + val caml_raise_exn : t + val caml_make_array : t + val caml_bswap16_direct : t + + type bswap_arg = Int32 | Int64 | Nativeint + val caml_direct_bswap : bswap_arg -> t + + val caml_alloc_dummy : t + val caml_alloc_dummy_float : t + val caml_update_dummy : t + + (** Bigarrays. *) + val caml_ba_get : int -> t + val caml_ba_set : int -> t + + (** AFL instrumentation. *) + val caml_afl_area_ptr : t + val caml_afl_prev_loc : t + val caml_setup_afl : t + + (** Entry points to the Spacetime runtime from OCaml code. *) + val caml_spacetime_allocate_node : t + val caml_spacetime_indirect_node_hole_ptr : t + val caml_spacetime_generate_profinfo : t + + (** Main OCaml entry point related functions. *) + val caml_program : t + val caml_startup : t + + (** Header of a dynamically-loaded library. *) + val caml_plugin_header : t + + (** Various veneers generated in [Cmmgen]. *) + val caml_send : int -> t + val caml_curry_n : int -> t + val caml_curry_m_to_n : int -> int -> t + val caml_curry_m_to_n_app : int -> int -> t + val caml_tuplify : int -> t + val caml_apply : int -> t + + (** Master table of globals. *) + val caml_globals : t + val caml_globals_map : t + + (** Master table of module data and code segments. *) + val caml_code_segments : t + val caml_data_segments : t + + (** Standard OCaml auxiliary data structures. *) + val caml_frametable : t + val caml_spacetime_shapes : t +end + +(** Convert the given symbol to a textual representation intended for assembly + emission. The caller must provide the target-specific escaping function and + symbol prefix. The [symbol_prefix] is not subject to escaping. The + [suffix], which is also not subject to escaping, is appended to the + resulting string if provided. (The [suffix] may be used to specify + relocation information, e.g. "@GOTPLT".) + + Typically, this function is used via [Asm_symbol], and not called + directly. +*) +val to_escaped_string + : ?suffix:string + -> symbol_prefix:string + -> escape:(string -> string) + -> t + -> string diff --git a/asmcomp/cmm.ml b/asmcomp/cmm.ml index 8becd99e29ef..c7883493689d 100644 --- a/asmcomp/cmm.ml +++ b/asmcomp/cmm.ml @@ -118,11 +118,11 @@ type rec_flag = Nonrecursive | Recursive type phantom_defining_expr = | Cphantom_const_int of Targetint.t - | Cphantom_const_symbol of string + | Cphantom_const_symbol of Backend_sym.t | Cphantom_var of Backend_var.t | Cphantom_offset_var of { var : Backend_var.t; offset_in_words : int; } | Cphantom_read_field of { var : Backend_var.t; field : int; } - | Cphantom_read_symbol_field of { sym : string; field : int; } + | Cphantom_read_symbol_field of { sym : Backend_sym.t; field : int; } | Cphantom_block of { tag : int; fields : Backend_var.t list; } type memory_chunk = @@ -140,7 +140,7 @@ type memory_chunk = and operation = Capply of machtype - | Cextcall of string * machtype * bool * label option + | Cextcall of Backend_sym.t * machtype * bool * label option (** If specified, the given label will be placed immediately after the call (at the same place as any frame descriptor would reference). *) | Cload of memory_chunk * Asttypes.mutable_flag @@ -162,7 +162,7 @@ type expression = Cconst_int of int | Cconst_natint of nativeint | Cconst_float of float - | Cconst_symbol of string + | Cconst_symbol of Backend_sym.t | Cconst_pointer of int | Cconst_natpointer of nativeint | Cblockheader of nativeint * Debuginfo.t @@ -189,7 +189,7 @@ type codegen_option = | No_CSE type fundecl = - { fun_name: string; + { fun_name: Backend_sym.t; fun_args: (Backend_var.With_provenance.t * machtype) list; fun_body: expression; fun_codegen_options : codegen_option list; @@ -197,15 +197,15 @@ type fundecl = } type data_item = - Cdefine_symbol of string - | Cglobal_symbol of string + Cdefine_symbol of Backend_sym.t + | Cglobal_symbol of Backend_sym.t | Cint8 of int | Cint16 of int | Cint32 of nativeint | Cint of nativeint | Csingle of float | Cdouble of float - | Csymbol_address of string + | Csymbol_address of Backend_sym.t | Cstring of string | Cskip of int | Calign of int diff --git a/asmcomp/cmm.mli b/asmcomp/cmm.mli index c68cf1b82182..f14d05239fd5 100644 --- a/asmcomp/cmm.mli +++ b/asmcomp/cmm.mli @@ -101,7 +101,7 @@ type phantom_defining_expr = (** The phantom-let-bound variable is a constant integer. The argument must be the tagged representation of an integer within the range of type [int] on the target. (Analogously to [Cconst_int].) *) - | Cphantom_const_symbol of string + | Cphantom_const_symbol of Backend_sym.t (** The phantom-let-bound variable is an alias for a symbol. *) | Cphantom_var of Backend_var.t (** The phantom-let-bound variable is an alias for another variable. The @@ -113,7 +113,7 @@ type phantom_defining_expr = (** The phantom-let-bound-variable's value is found by adding the given number of words to the pointer contained in the given identifier, then dereferencing. *) - | Cphantom_read_symbol_field of { sym : string; field : int; } + | Cphantom_read_symbol_field of { sym : Backend_sym.t; field : int; } (** As for [Uphantom_read_var_field], but with the pointer specified by a symbol. *) | Cphantom_block of { tag : int; fields : Backend_var.t list; } @@ -135,7 +135,7 @@ type memory_chunk = and operation = Capply of machtype - | Cextcall of string * machtype * bool * label option + | Cextcall of Backend_sym.t * machtype * bool * label option | Cload of memory_chunk * Asttypes.mutable_flag | Calloc | Cstore of memory_chunk * Lambda.initialization_or_assignment @@ -160,7 +160,7 @@ and expression = Cconst_int of int | Cconst_natint of nativeint | Cconst_float of float - | Cconst_symbol of string + | Cconst_symbol of Backend_sym.t | Cconst_pointer of int | Cconst_natpointer of nativeint | Cblockheader of nativeint * Debuginfo.t @@ -187,7 +187,7 @@ type codegen_option = | No_CSE type fundecl = - { fun_name: string; + { fun_name: Backend_sym.t; fun_args: (Backend_var.With_provenance.t * machtype) list; fun_body: expression; fun_codegen_options : codegen_option list; @@ -195,15 +195,15 @@ type fundecl = } type data_item = - Cdefine_symbol of string - | Cglobal_symbol of string + Cdefine_symbol of Backend_sym.t + | Cglobal_symbol of Backend_sym.t | Cint8 of int | Cint16 of int | Cint32 of nativeint | Cint of nativeint | Csingle of float | Cdouble of float - | Csymbol_address of string + | Csymbol_address of Backend_sym.t | Cstring of string | Cskip of int | Calign of int diff --git a/asmcomp/cmmgen.ml b/asmcomp/cmmgen.ml index f16977ad3fcd..c3a035984584 100644 --- a/asmcomp/cmmgen.ml +++ b/asmcomp/cmmgen.ml @@ -15,6 +15,8 @@ (* Translation from closed lambda to C-- *) +[@@@ocaml.warning "-40"] + open Misc open Arch open Asttypes @@ -24,12 +26,17 @@ open Lambda open Clambda open Clambda_primitives open Cmm -open Cmx_format module String = Misc.Stdlib.String +module UI = Cmx_format.Unit_info +module Var = Variable +module VarP = Variable.With_provenance module V = Backend_var module VP = Backend_var.With_provenance +module S = Backend_sym +open S.Names + (* Environments used for translation to Cmm. *) type boxed_number = @@ -37,30 +44,54 @@ type boxed_number = | Boxed_integer of boxed_integer * Debuginfo.t type env = { - unboxed_ids : (V.t * boxed_number) V.tbl; + backend_var : V.t Var.Map.t; + unboxed_ids : (Var.t * boxed_number) Var.Map.t; environment_param : V.t option; } let empty_env = { - unboxed_ids =V.empty; + backend_var = Var.Map.empty; + unboxed_ids = Var.Map.empty; environment_param = None; } -let create_env ~environment_param = - { unboxed_ids = V.empty; - environment_param; - } - let is_unboxed_id id env = - try Some (V.find_same id env.unboxed_ids) + try Some (Var.Map.find id env.unboxed_ids) with Not_found -> None let add_unboxed_id id unboxed_id bn env = { env with - unboxed_ids = V.add id (unboxed_id, bn) env.unboxed_ids; + unboxed_ids = Var.Map.add id (unboxed_id, bn) env.unboxed_ids; } +let add_fresh_backend_var env var = + let bv = V.create_local (Var.name var) in + bv, { env with backend_var = Var.Map.add var bv env.backend_var } +let backend_var_for_var_exn env var = + Var.Map.find var env.backend_var + +let create_env ~environment_param = + match environment_param with + | None -> empty_env + | Some var -> + let bv, env = add_fresh_backend_var empty_env var in + { env with environment_param = Some bv } + +let add_fresh_backend_var_with_provenance env varp = + let var = VarP.var varp in + let name = Var.name var in + let provenance = VarP.provenance varp in + let bv = V.create_local name in + let bvp = VP.create ?provenance bv in + bvp, { env with backend_var = Var.Map.add var bv env.backend_var } + +let add_fresh_backend_vars_with_provenance_and_type env vars = + List.fold_right (fun (var, typ) (vars, env) -> + let var, env = add_fresh_backend_var_with_provenance env var in + (var, typ) :: vars, env) + vars ([], env) + (* Local binding of complex expressions *) let bind name arg fn = @@ -68,7 +99,8 @@ let bind name arg fn = Cvar _ | Cconst_int _ | Cconst_natint _ | Cconst_symbol _ | Cconst_pointer _ | Cconst_natpointer _ | Cblockheader _ -> fn arg - | _ -> let id = V.create_local name in Clet(VP.create id, arg, fn (Cvar id)) + | _ -> + let id = V.create_local name in Clet(VP.create id, arg, fn (Cvar id)) let bind_load name arg fn = match arg with @@ -415,7 +447,7 @@ let validate d m p = let raise_regular dbg exc = Csequence( Cop(Cstore (Thirtytwo_signed, Assignment), - [(Cconst_symbol "caml_backtrace_pos"); Cconst_int 0], dbg), + [(Cconst_symbol caml_backtrace_pos); Cconst_int 0], dbg), Cop(Craise Raise_withtrace,[exc], dbg)) let raise_symbol dbg symb = @@ -424,7 +456,7 @@ let raise_symbol dbg symb = let rec div_int c1 c2 is_safe dbg = match (c1, c2) with (c1, Cconst_int 0) -> - Csequence(c1, raise_symbol dbg "caml_exn_Division_by_zero") + Csequence(c1, raise_symbol dbg caml_exn_Division_by_zero) | (c1, Cconst_int 1) -> c1 | (Cconst_int n1, Cconst_int n2) -> @@ -466,12 +498,12 @@ let rec div_int c1 c2 is_safe dbg = bind "dividend" c1 (fun c1 -> Cifthenelse(c2, Cop(Cdivi, [c1; c2], dbg), - raise_symbol dbg "caml_exn_Division_by_zero"))) + raise_symbol dbg caml_exn_Division_by_zero))) let mod_int c1 c2 is_safe dbg = match (c1, c2) with (c1, Cconst_int 0) -> - Csequence(c1, raise_symbol dbg "caml_exn_Division_by_zero") + Csequence(c1, raise_symbol dbg caml_exn_Division_by_zero) | (c1, Cconst_int (1 | (-1))) -> Csequence(c1, Cconst_int 0) | (Cconst_int n1, Cconst_int n2) -> @@ -503,7 +535,7 @@ let mod_int c1 c2 is_safe dbg = bind "dividend" c1 (fun c1 -> Cifthenelse(c2, Cop(Cmodi, [c1; c2], dbg), - raise_symbol dbg "caml_exn_Division_by_zero"))) + raise_symbol dbg caml_exn_Division_by_zero))) (* Division or modulo on boxed integers. The overflow case min_int / -1 can occur, in which case we force x / -1 = -x and x mod -1 = 0. (PR#5513). *) @@ -725,10 +757,10 @@ let float_array_ref dbg arr ofs = box_float dbg (unboxed_float_array_ref arr ofs dbg) let addr_array_set arr ofs newval dbg = - Cop(Cextcall("caml_modify", typ_void, false, None), + Cop(Cextcall(caml_modify, typ_void, false, None), [array_indexing log2_size_addr arr ofs dbg; newval], dbg) let addr_array_initialize arr ofs newval dbg = - Cop(Cextcall("caml_initialize", typ_void, false, None), + Cop(Cextcall(caml_initialize, typ_void, false, None), [array_indexing log2_size_addr arr ofs dbg; newval], dbg) let int_array_set arr ofs newval dbg = Cop(Cstore (Word_int, Assignment), @@ -764,7 +796,7 @@ let bigstring_length ba dbg = let lookup_tag obj tag dbg = bind "tag" tag (fun tag -> - Cop(Cextcall("caml_get_public_method", typ_val, false, None), + Cop(Cextcall(caml_get_public_method, typ_val, false, None), [obj; tag], dbg)) @@ -776,9 +808,9 @@ let lookup_label obj lab dbg = let call_cached_method obj tag cache pos args dbg = let arity = List.length args in let cache = array_indexing log2_size_addr cache pos dbg in - Compilenv.need_send_fun arity; + Linking_state.need_send_fun arity; Cop(Capply typ_val, - Cconst_symbol("caml_send" ^ Int.to_string arity) :: + Cconst_symbol(caml_send arity) :: obj :: tag :: cache :: args, dbg) @@ -794,14 +826,14 @@ let make_alloc_generic set_fn dbg tag wordsize args = | e1::el -> Csequence(set_fn (Cvar id) (Cconst_int idx) e1 dbg, fill_fields (idx + 2) el) in Clet(VP.create id, - Cop(Cextcall("caml_alloc", typ_val, true, None), + Cop(Cextcall(caml_alloc, typ_val, true, None), [Cconst_int wordsize; Cconst_int tag], dbg), fill_fields 1 args) end let make_alloc dbg tag args = let addr_array_init arr ofs newval dbg = - Cop(Cextcall("caml_initialize", typ_void, false, None), + Cop(Cextcall(caml_initialize, typ_void, false, None), [array_indexing log2_size_addr arr ofs dbg; newval], dbg) in make_alloc_generic addr_array_init dbg tag (List.length args) args @@ -845,16 +877,17 @@ type rhs_kind = ;; let rec expr_size env = function | Uvar id -> - begin try V.find_same id env with Not_found -> RHS_nonrec end + begin try Var.Map.find id env with Not_found -> RHS_nonrec end | Uclosure(fundecls, clos_vars) -> RHS_block (fundecls_size fundecls + List.length clos_vars) | Ulet(_str, _kind, id, exp, body) -> - expr_size (V.add (VP.var id) (expr_size env exp) env) body + expr_size (Var.Map.add (VarP.var id) (expr_size env exp) env) body | Uletrec(bindings, body) -> let env = List.fold_right - (fun (id, exp) env -> V.add (VP.var id) (expr_size env exp) env) - bindings env + (fun (id, exp) env -> + Var.Map.add (VarP.var id) (expr_size env exp) env) + bindings env in expr_size env body | Uprim(Pmakeblock _, args, _) -> @@ -886,12 +919,12 @@ let rec expr_size env = function (* Record application and currying functions *) let apply_function n = - Compilenv.need_apply_fun n; "caml_apply" ^ Int.to_string n + Linking_state.need_apply_fun n; caml_apply n let curry_function n = - Compilenv.need_curry_fun n; + Linking_state.need_curry_fun n; if n >= 0 - then "caml_curry" ^ Int.to_string n - else "caml_tuplify" ^ Int.to_string (-n) + then caml_curry_n n + else caml_tuplify (-n) (* Comparisons *) @@ -899,7 +932,7 @@ let transl_int_comparison cmp = cmp let transl_float_comparison cmp = cmp -(* Translate structured constants *) +(* Translate structured constants to Cmm data items *) let transl_constant = function | Uconst_int n -> @@ -909,40 +942,98 @@ let transl_constant = function then Cconst_pointer((n lsl 1) + 1) else Cconst_natpointer (Nativeint.add (Nativeint.shift_left (Nativeint.of_int n) 1) 1n) - | Uconst_ref (label, _) -> - Cconst_symbol label + | Uconst_ref (sym, _) -> + Cconst_symbol (S.of_symbol sym) -let transl_structured_constant cst = - let label = Compilenv.new_structured_constant cst ~shared:true in - Cconst_symbol label +let cdefine_symbol (symb, (global : Cmmgen_state.is_global)) = + match global with + | Global -> [Cglobal_symbol symb; Cdefine_symbol symb] + | Local -> [Cdefine_symbol symb] -(* Translate constant closures *) +let emit_block symb is_global white_header cont = + (* Headers for structured constants must be marked black in case we + are in no-naked-pointers mode. See [caml_darken]. *) + let black_header = Nativeint.logor white_header caml_black in + Cint black_header :: cdefine_symbol (symb, is_global) @ cont -type is_global = Global | Not_global +let rec emit_structured_constant (sym, is_global) cst cont = + match cst with + | Uconst_float s -> + emit_block sym is_global float_header (Cdouble s :: cont) + | Uconst_string s -> + emit_block sym is_global (string_header (String.length s)) + (emit_string_constant s cont) + | Uconst_int32 n -> + emit_block sym is_global boxedint32_header + (emit_boxed_int32_constant n cont) + | Uconst_int64 n -> + emit_block sym is_global boxedint64_header + (emit_boxed_int64_constant n cont) + | Uconst_nativeint n -> + emit_block sym is_global boxedintnat_header + (emit_boxed_nativeint_constant n cont) + | Uconst_block (tag, csts) -> + let cont = List.fold_right emit_constant csts cont in + emit_block sym is_global (block_header tag (List.length csts)) cont + | Uconst_float_array fields -> + emit_block sym is_global (floatarray_header (List.length fields)) + (Misc.map_end (fun f -> Cdouble f) fields cont) + | Uconst_closure(fundecls, lbl, fv) -> + let lbl = S.of_symbol lbl in + assert (Backend_sym.equal lbl sym); + Cmmgen_state.add_constant lbl (Const_closure (is_global, fundecls, fv)); + List.iter (fun f -> Cmmgen_state.add_function f) fundecls; + cont -type symbol_defn = string * is_global +and emit_constant cst cont = + match cst with + | Uconst_int n | Uconst_ptr n -> + cint_const n + :: cont + | Uconst_ref (sym, _) -> + Csymbol_address (S.of_symbol sym) :: cont -type cmm_constant = - | Const_closure of symbol_defn * ufunction list * uconstant list - | Const_table of symbol_defn * data_item list +and emit_string_constant s cont = + let n = size_int - 1 - (String.length s) mod size_int in + Cstring s :: Cskip n :: Cint8 n :: cont -let cmm_constants = - ref ([] : cmm_constant list) +and emit_boxed_int32_constant n cont = + let n = Nativeint.of_int32 n in + if size_int = 8 then + Csymbol_address caml_int32_ops :: Cint32 n :: Cint32 0n :: cont + else + Csymbol_address caml_int32_ops :: Cint n :: cont -let add_cmm_constant c = - cmm_constants := c :: !cmm_constants +and emit_boxed_nativeint_constant n cont = + Csymbol_address caml_nativeint_ops :: Cint n :: cont + +and emit_boxed_int64_constant n cont = + let lo = Int64.to_nativeint n in + if size_int = 8 then + Csymbol_address caml_int64_ops :: Cint lo :: cont + else begin + let hi = Int64.to_nativeint (Int64.shift_right n 32) in + if big_endian then + Csymbol_address caml_int64_ops :: Cint hi :: Cint lo :: cont + else + Csymbol_address caml_int64_ops :: Cint lo :: Cint hi :: cont + end (* Boxed integers *) -let box_int_constant bi n = +let box_int_constant sym bi n = match bi with - Pnativeint -> Uconst_nativeint n - | Pint32 -> Uconst_int32 (Nativeint.to_int32 n) - | Pint64 -> Uconst_int64 (Int64.of_nativeint n) - -let caml_nativeint_ops = "caml_nativeint_ops" -let caml_int32_ops = "caml_int32_ops" -let caml_int64_ops = "caml_int64_ops" + Pnativeint -> + emit_block sym Local boxedintnat_header + (emit_boxed_nativeint_constant n []) + | Pint32 -> + let n = Nativeint.to_int32 n in + emit_block sym Local boxedint32_header + (emit_boxed_int32_constant n []) + | Pint64 -> + let n = Int64.of_nativeint n in + emit_block sym Local boxedint64_header + (emit_boxed_int64_constant n []) let operations_boxed_int bi = match bi with @@ -958,10 +1049,16 @@ let alloc_header_boxed_int bi = let box_int dbg bi arg = match arg with - Cconst_int n -> - transl_structured_constant (box_int_constant bi (Nativeint.of_int n)) + | Cconst_int n -> + let sym = Backend_sym.for_lifted_anonymous_constant () in + let data_items = box_int_constant sym bi (Nativeint.of_int n) in + Cmmgen_state.add_data_items data_items; + Cconst_symbol sym | Cconst_natint n -> - transl_structured_constant (box_int_constant bi n) + let sym = Backend_sym.for_lifted_anonymous_constant () in + let data_items = box_int_constant sym bi n in + Cmmgen_state.add_data_items data_items; + Cconst_symbol sym | _ -> let arg' = if bi = Pint32 && size_int = 8 && big_endian @@ -982,13 +1079,13 @@ let alloc_matches_boxed_int bi ~hdr ~ops = match bi, hdr, ops with | Pnativeint, Cblockheader (hdr, _dbg), Cconst_symbol sym -> Nativeint.equal hdr boxedintnat_header - && String.equal sym caml_nativeint_ops + && S.equal sym caml_nativeint_ops | Pint32, Cblockheader (hdr, _dbg), Cconst_symbol sym -> Nativeint.equal hdr boxedint32_header - && String.equal sym caml_int32_ops + && S.equal sym caml_int32_ops | Pint64, Cblockheader (hdr, _dbg), Cconst_symbol sym -> Nativeint.equal hdr boxedint64_header - && String.equal sym caml_int64_ops + && S.equal sym caml_int64_ops | (Pnativeint | Pint32 | Pint64), _, _ -> false let rec unbox_int bi arg dbg = @@ -1511,8 +1608,8 @@ let make_switch arg cases actions dbg = | Cconst_symbol s -> Csymbol_address s | _ -> assert false in let const_actions = Array.map to_data_item actions in - let table = Compilenv.new_const_symbol () in - add_cmm_constant (Const_table ((table, Not_global), + let table = S.for_lifted_anonymous_constant () in + Cmmgen_state.add_constant table (Const_table (Local, Array.to_list (Array.map (fun act -> const_actions.(act)) cases))); addr_array_ref (Cconst_symbol table) (tag_int arg dbg) dbg @@ -1781,8 +1878,6 @@ let assignment_kind ptr init = (* Translate an expression *) -let functions = (Queue.create() : ufunction Queue.t) - let strmatch_compile = let module S = Strmatch.Make @@ -1796,32 +1891,33 @@ let rec transl env e = match e with Uvar id -> begin match is_unboxed_id id env with - | None -> Cvar id - | Some (unboxed_id, bn) -> box_number bn (Cvar unboxed_id) + | None -> + Cvar (backend_var_for_var_exn env id) + | Some (unboxed_id, bn) -> + box_number bn (Cvar (backend_var_for_var_exn env unboxed_id)) end | Uconst sc -> transl_constant sc | Uclosure(fundecls, []) -> - let lbl = Compilenv.new_const_symbol() in - add_cmm_constant ( - Const_closure ((lbl, Not_global), fundecls, [])); - List.iter (fun f -> Queue.add f functions) fundecls; - Cconst_symbol lbl + let sym = S.for_lifted_anonymous_constant () in + Cmmgen_state.add_constant sym (Const_closure (Local, fundecls, [])); + List.iter (fun f -> Cmmgen_state.add_function f) fundecls; + Cconst_symbol sym | Uclosure(fundecls, clos_vars) -> let rec transl_fundecls pos = function [] -> List.map (transl env) clos_vars | f :: rem -> - Queue.add f functions; + Cmmgen_state.add_function f; let without_header = if f.arity = 1 || f.arity = 0 then - Cconst_symbol f.label :: + Cconst_symbol (S.of_symbol f.label) :: int_const f.arity :: transl_fundecls (pos + 3) rem else Cconst_symbol(curry_function f.arity) :: int_const f.arity :: - Cconst_symbol f.label :: + Cconst_symbol (S.of_symbol f.label) :: transl_fundecls (pos + 4) rem in if pos = 0 then without_header @@ -1840,6 +1936,7 @@ let rec transl env e = then ptr else Cop(Caddv, [ptr; Cconst_int(offset * size_addr)], Debuginfo.none) | Udirect_apply(lbl, args, dbg) -> + let lbl = S.of_symbol lbl in Cop(Capply typ_val, Cconst_symbol lbl :: List.map (transl env) args, dbg) | Ugeneric_apply(clos, [arg], dbg) -> bind "fun" (transl env clos) (fun clos -> @@ -1882,30 +1979,37 @@ let rec transl env e = let defining_expr = match defining_expr with | Uphantom_const (Uconst_ref (sym, _defining_expr)) -> - Cphantom_const_symbol sym + Cphantom_const_symbol (S.of_symbol sym) | Uphantom_read_symbol_field { sym; field; } -> - Cphantom_read_symbol_field { sym; field; } + Cphantom_read_symbol_field { sym = S.of_symbol sym; field; } | Uphantom_const (Uconst_int i) | Uphantom_const (Uconst_ptr i) -> Cphantom_const_int (targetint_const i) - | Uphantom_var var -> Cphantom_var var + | Uphantom_var var -> + Cphantom_var (backend_var_for_var_exn env var) | Uphantom_read_field { var; field; } -> - Cphantom_read_field { var; field; } + Cphantom_read_field + { var = (backend_var_for_var_exn env var); field; } | Uphantom_offset_var { var; offset_in_words; } -> - Cphantom_offset_var { var; offset_in_words; } + Cphantom_offset_var + { var = (backend_var_for_var_exn env var); + offset_in_words; } | Uphantom_block { tag; fields; } -> - Cphantom_block { tag; fields; } + Cphantom_block + { tag; + fields = List.map (backend_var_for_var_exn env) fields; } in Some defining_expr in + let var, env = add_fresh_backend_var_with_provenance env var in Cphantom_let (var, defining_expr, transl env body) | Uletrec(bindings, body) -> - transl_letrec env bindings (transl env body) + transl_letrec env bindings body (* Primitives *) | Uprim(prim, args, dbg) -> begin match (simplif_primitive prim, args) with (Pread_symbol sym, []) -> - Cconst_symbol sym + Cconst_symbol (S.of_symbol sym) | (Pmakeblock _, []) -> assert false | (Pmakeblock(tag, _mut, _kind), args) -> @@ -1931,7 +2035,12 @@ let rec transl env e = in transl_ccall env prim_obj_dup [arg] dbg | (Pmakearray _, []) -> - transl_structured_constant (Uconst_block(0, [])) + let sym = S.for_lifted_anonymous_constant () in + let tag = 0 in + let size = 0 in + let data_items = emit_block sym Local (block_header tag size) [] in + Cmmgen_state.add_data_items data_items; + Cconst_symbol sym | (Pmakearray (kind, _), args) -> transl_make_array dbg env kind args | (Pbigarrayref(unsafe, _num_dims, elt_kind, layout), arg1 :: argl) -> let elt = @@ -2036,13 +2145,17 @@ let rec transl env e = | Ucatch(nfail, [], body, handler) -> make_catch nfail (transl env body) (transl env handler) | Ucatch(nfail, ids, body, handler) -> + let ids, env_handler = + add_fresh_backend_vars_with_provenance_and_type env ids + in (* CR-someday mshinwell: consider how we can do better than [typ_val] when appropriate. *) let ids_with_types = List.map (fun (i, _) -> (i, Cmm.typ_val)) ids in - ccatch(nfail, ids_with_types, transl env body, transl env handler) + ccatch(nfail, ids_with_types, transl env body, transl env_handler handler) | Utrywith(body, exn, handler) -> - Ctrywith(transl env body, exn, transl env handler) + let exn, env_handler = add_fresh_backend_var_with_provenance env exn in + Ctrywith(transl env body, exn, transl env_handler handler) | Uifthenelse(cond, ifso, ifnot) -> let dbg = Debuginfo.none in transl_if env cond dbg Unknown @@ -2064,6 +2177,7 @@ let rec transl env e = let tst = match dir with Upto -> Cgt | Downto -> Clt in let inc = match dir with Upto -> Caddi | Downto -> Csubi in let raise_num = next_raise_count () in + let id, env_body = add_fresh_backend_var_with_provenance env id in let id_prev = VP.rename id in return_unit (Clet @@ -2076,7 +2190,7 @@ let rec transl env e = Cexit (raise_num, []), create_loop (Csequence - (remove_unit(transl env body), + (remove_unit(transl env_body body), Clet(id_prev, Cvar (VP.var id), Csequence (Cassign(VP.var id, @@ -2091,9 +2205,9 @@ let rec transl env e = let dbg = Debuginfo.none in begin match is_unboxed_id id env with | None -> - return_unit (Cassign(id, transl env exp)) + return_unit (Cassign(backend_var_for_var_exn env id, transl env exp)) | Some (unboxed_id, bn) -> - return_unit(Cassign(unboxed_id, + return_unit(Cassign(backend_var_for_var_exn env unboxed_id, transl_unbox_number dbg env bn exp)) end | Uunreachable -> @@ -2103,7 +2217,7 @@ let rec transl env e = and transl_make_array dbg env kind args = match kind with | Pgenarray -> - Cop(Cextcall("caml_make_array", typ_val, true, None), + Cop(Cextcall(caml_make_array, typ_val, true, None), [make_alloc dbg 0 (List.map (transl env) args)], dbg) | Paddrarray | Pintarray -> make_alloc dbg 0 (List.map (transl env) args) @@ -2140,7 +2254,7 @@ and transl_ccall env prim args dbg = in let args = transl_args prim.prim_native_repr_args args in wrap_result - (Cop(Cextcall(Primitive.native_name prim, + (Cop(Cextcall(S.create_for_external_call prim, typ_res, prim.prim_alloc, None), args, dbg)) and transl_prim_1 env p arg dbg = @@ -2237,16 +2351,18 @@ and transl_prim_1 env p arg dbg = box_int dbg bi (Cop(Csubi, [Cconst_int 0; transl_unbox_int dbg env bi arg], dbg)) | Pbbswap bi -> - let prim = match bi with - | Pnativeint -> "nativeint" - | Pint32 -> "int32" - | Pint64 -> "int64" in - box_int dbg bi (Cop(Cextcall(Printf.sprintf "caml_%s_direct_bswap" prim, - typ_int, false, None), + let prim : bswap_arg = + match bi with + | Pnativeint -> Nativeint + | Pint32 -> Int32 + | Pint64 -> Int64 + in + let sym = caml_direct_bswap prim in + box_int dbg bi (Cop(Cextcall(sym, typ_int, false, None), [transl_unbox_int dbg env bi arg], dbg)) | Pbswap16 -> - tag_int (Cop(Cextcall("caml_bswap16_direct", typ_int, false, None), + tag_int (Cop(Cextcall(caml_bswap16_direct, typ_int, false, None), [untag_int (transl env arg) dbg], dbg)) dbg @@ -2278,12 +2394,12 @@ and transl_prim_2 env p arg1 arg2 dbg = | Psetfield(n, ptr, init) -> begin match assignment_kind ptr init with | Caml_modify -> - return_unit(Cop(Cextcall("caml_modify", typ_void, false, None), + return_unit(Cop(Cextcall(caml_modify, typ_void, false, None), [field_address (transl env arg1) n dbg; transl env arg2], dbg)) | Caml_initialize -> - return_unit(Cop(Cextcall("caml_initialize", typ_void, false, None), + return_unit(Cop(Cextcall(caml_initialize, typ_void, false, None), [field_address (transl env arg1) n dbg; transl env arg2], dbg)) @@ -2713,7 +2829,7 @@ and transl_unbox_sized size dbg env exp = | Thirty_two -> transl_unbox_int dbg env Pint32 exp | Sixty_four -> transl_unbox_int dbg env Pint64 exp -and transl_let env str kind id exp body = +and transl_let env str kind (id:VarP.t) exp body = let dbg = Debuginfo.none in let unboxing = (* If [id] is a mutable variable (introduced to eliminate a local @@ -2745,11 +2861,18 @@ and transl_let env str kind id exp body = | No_unboxing | Boxed (_, true) | No_result -> (* N.B. [body] must still be traversed even if [exp] will never return: there may be constant closures inside that need lifting out. *) - Clet(id, transl env exp, transl env body) + let id, env_body = add_fresh_backend_var_with_provenance env id in + Clet(id, transl env exp, transl env_body body) | Boxed (boxed_number, _false) -> - let unboxed_id = V.create_local (VP.name id) in - Clet(VP.create unboxed_id, transl_unbox_number dbg env boxed_number exp, - transl (add_unboxed_id (VP.var id) unboxed_id boxed_number env) body) + let unboxed_id = VarP.rename id in + let bv_unboxed_id, env_body = + add_fresh_backend_var_with_provenance env unboxed_id + in + let env_body = + add_unboxed_id (VarP.var id) (VarP.var unboxed_id) boxed_number env_body + in + Clet(bv_unboxed_id, transl_unbox_number dbg env boxed_number exp, + transl env_body body) and make_catch ncatch body handler = match body with | Cexit (nexit,[]) when nexit=ncatch -> handler @@ -2868,10 +2991,13 @@ and transl_switch loc env arg index cases = match Array.length cases with a (Array.of_list inters) store) -and transl_letrec env bindings cont = +and transl_letrec env bindings body = + let bindings, env = + add_fresh_backend_vars_with_provenance_and_type env bindings + in let dbg = Debuginfo.none in let bsz = - List.map (fun (id, exp) -> (id, exp, expr_size V.empty exp)) + List.map (fun (id, exp) -> (id, exp, expr_size Var.Map.empty exp)) bindings in let op_alloc prim sz = @@ -2879,10 +3005,10 @@ and transl_letrec env bindings cont = let rec init_blocks = function | [] -> fill_nonrec bsz | (id, _exp, RHS_block sz) :: rem -> - Clet(id, op_alloc "caml_alloc_dummy" sz, + Clet(id, op_alloc caml_alloc_dummy sz, init_blocks rem) | (id, _exp, RHS_floatblock sz) :: rem -> - Clet(id, op_alloc "caml_alloc_dummy_float" sz, + Clet(id, op_alloc caml_alloc_dummy_float sz, init_blocks rem) | (id, _exp, RHS_nonrec) :: rem -> Clet (id, Cconst_int 0, init_blocks rem) @@ -2893,10 +3019,10 @@ and transl_letrec env bindings cont = | (id, exp, RHS_nonrec) :: rem -> Clet(id, transl env exp, fill_nonrec rem) and fill_blocks = function - | [] -> cont + | [] -> transl env body | (id, exp, (RHS_block _ | RHS_floatblock _)) :: rem -> let op = - Cop(Cextcall("caml_update_dummy", typ_void, false, None), + Cop(Cextcall(caml_update_dummy, typ_void, false, None), [Cvar (VP.var id); transl env exp], dbg) in Csequence(op, fill_blocks rem) | (_id, _exp, RHS_nonrec) :: rem -> @@ -2905,15 +3031,13 @@ and transl_letrec env bindings cont = (* Translate a function definition *) -let transl_function ~ppf_dump f = - let body = - if Config.flambda then - Un_anf.apply ~ppf_dump f.body ~what:f.label - else - f.body +let transl_function ~ppf_dump:_ f = + let body = f.body in + let env = create_env ~environment_param:f.env in + let fun_args, env = + add_fresh_backend_vars_with_provenance_and_type env f.params in let cmm_body = - let env = create_env ~environment_param:f.env in if !Clflags.afl_instrument then Afl_instrument.instrument_function (transl env body) else @@ -2924,8 +3048,8 @@ let transl_function ~ppf_dump f = else [ Reduce_code_size ] in - Cfunction {fun_name = f.label; - fun_args = List.map (fun (id, _) -> (id, typ_val)) f.params; + Cfunction {fun_name = S.of_symbol f.label; + fun_args = List.map (fun (id, _) -> (id, typ_val)) fun_args; fun_body = cmm_body; fun_codegen_options; fun_dbg = f.dbg} @@ -2933,99 +3057,28 @@ let transl_function ~ppf_dump f = (* Translate all function definitions *) let rec transl_all_functions ~ppf_dump already_translated cont = - try - let f = Queue.take functions in - if String.Set.mem f.label already_translated then + match Cmmgen_state.next_function () with + | None -> cont, already_translated + | Some f -> + let sym = S.of_symbol f.label in + if S.Set.mem sym already_translated then transl_all_functions ~ppf_dump already_translated cont else begin transl_all_functions ~ppf_dump - (String.Set.add f.label already_translated) + (S.Set.add sym already_translated) ((f.dbg, transl_function ~ppf_dump f) :: cont) end - with Queue.Empty -> - cont, already_translated - -let cdefine_symbol (symb, global) = - match global with - | Global -> [Cglobal_symbol symb; Cdefine_symbol symb] - | Not_global -> [Cdefine_symbol symb] - -(* Emit structured constants *) - -let rec emit_structured_constant symb cst cont = - let emit_block white_header symb cont = - (* Headers for structured constants must be marked black in case we - are in no-naked-pointers mode. See [caml_darken]. *) - let black_header = Nativeint.logor white_header caml_black in - Cint black_header :: cdefine_symbol symb @ cont - in - match cst with - | Uconst_float s-> - emit_block float_header symb (Cdouble s :: cont) - | Uconst_string s -> - emit_block (string_header (String.length s)) symb - (emit_string_constant s cont) - | Uconst_int32 n -> - emit_block boxedint32_header symb - (emit_boxed_int32_constant n cont) - | Uconst_int64 n -> - emit_block boxedint64_header symb - (emit_boxed_int64_constant n cont) - | Uconst_nativeint n -> - emit_block boxedintnat_header symb - (emit_boxed_nativeint_constant n cont) - | Uconst_block (tag, csts) -> - let cont = List.fold_right emit_constant csts cont in - emit_block (block_header tag (List.length csts)) symb cont - | Uconst_float_array fields -> - emit_block (floatarray_header (List.length fields)) symb - (Misc.map_end (fun f -> Cdouble f) fields cont) - | Uconst_closure(fundecls, lbl, fv) -> - assert(lbl = fst symb); - add_cmm_constant (Const_closure (symb, fundecls, fv)); - List.iter (fun f -> Queue.add f functions) fundecls; - cont - -and emit_constant cst cont = - match cst with - | Uconst_int n | Uconst_ptr n -> - cint_const n - :: cont - | Uconst_ref (label, _) -> - Csymbol_address label :: cont - -and emit_string_constant s cont = - let n = size_int - 1 - (String.length s) mod size_int in - Cstring s :: Cskip n :: Cint8 n :: cont - -and emit_boxed_int32_constant n cont = - let n = Nativeint.of_int32 n in - if size_int = 8 then - Csymbol_address("caml_int32_ops") :: Cint32 n :: Cint32 0n :: cont - else - Csymbol_address("caml_int32_ops") :: Cint n :: cont - -and emit_boxed_nativeint_constant n cont = - Csymbol_address("caml_nativeint_ops") :: Cint n :: cont - -and emit_boxed_int64_constant n cont = - let lo = Int64.to_nativeint n in - if size_int = 8 then - Csymbol_address("caml_int64_ops") :: Cint lo :: cont - else begin - let hi = Int64.to_nativeint (Int64.shift_right n 32) in - if big_endian then - Csymbol_address("caml_int64_ops") :: Cint hi :: Cint lo :: cont - else - Csymbol_address("caml_int64_ops") :: Cint lo :: Cint hi :: cont - end (* Emit constant closures *) -let emit_constant_closure ((_, global_symb) as symb) fundecls clos_vars cont = +let emit_constant_closure ((_, is_global) as symb) fundecls clos_vars cont = let closure_symbol f = if Config.flambda then - cdefine_symbol (f.label ^ "_closure", global_symb) + let sym = + S.of_symbol ( + Symbol.lifted_closure_symbol_from_code_pointer_symbol f.label) + in + cdefine_symbol (sym, is_global) else [] in @@ -3045,7 +3098,7 @@ let emit_constant_closure ((_, global_symb) as symb) fundecls clos_vars cont = if f2.arity = 1 || f2.arity = 0 then Cint(infix_header pos) :: (closure_symbol f2) @ - Csymbol_address f2.label :: + Csymbol_address (S.of_symbol f2.label) :: cint_const f2.arity :: emit_others (pos + 3) rem else @@ -3053,20 +3106,20 @@ let emit_constant_closure ((_, global_symb) as symb) fundecls clos_vars cont = (closure_symbol f2) @ Csymbol_address(curry_function f2.arity) :: cint_const f2.arity :: - Csymbol_address f2.label :: + Csymbol_address (S.of_symbol f2.label) :: emit_others (pos + 4) rem in Cint(black_closure_header (fundecls_size fundecls + List.length clos_vars)) :: cdefine_symbol symb @ (closure_symbol f1) @ if f1.arity = 1 || f1.arity = 0 then - Csymbol_address f1.label :: + Csymbol_address (S.of_symbol f1.label) :: cint_const f1.arity :: emit_others 3 remainder else Csymbol_address(curry_function f1.arity) :: cint_const f1.arity :: - Csymbol_address f1.label :: + Csymbol_address (S.of_symbol f1.label) :: emit_others 4 remainder (* Emit constant blocks *) @@ -3077,43 +3130,49 @@ let emit_constant_table symb elems = (* Emit all structured constants *) -let emit_constants cont (constants:Clambda.preallocated_constant list) = +let transl_clambda_constants (constants : Clambda.preallocated_constant list) + cont = let c = ref cont in + let emit_clambda_constant symbol global cst = + let cst = emit_structured_constant (symbol, global) cst [] in + c := (Cdata cst) :: !c + in List.iter - (fun { symbol = lbl; exported; definition = cst; provenance = _; } -> - let global = if exported then Global else Not_global in - let cst = emit_structured_constant (lbl, global) cst [] in - c:= Cdata(cst):: !c) + (fun { symbol; exported; definition = cst; provenance = _; } -> + let symbol = S.of_symbol symbol in + let global : Cmmgen_state.is_global = + if exported then Global else Local + in + emit_clambda_constant symbol global cst) constants; - List.iter - (function - | Const_closure (symb, fundecls, clos_vars) -> - c := Cdata(emit_constant_closure symb fundecls clos_vars []) :: !c - | Const_table (symb, elems) -> - c := Cdata(emit_constant_table symb elems) :: !c) - !cmm_constants; - cmm_constants := []; !c -let emit_all_constants cont = - let constants = Compilenv.structured_constants () in - Compilenv.clear_structured_constants (); - emit_constants cont constants +let emit_cmm_data_items_for_constants cont = + let c = ref cont in + S.Map.iter (fun symbol (cst : Cmmgen_state.constant) -> + match cst with + | Const_closure (global, fundecls, clos_vars) -> + let cmm = + emit_constant_closure (symbol, global) fundecls clos_vars [] + in + c := (Cdata cmm) :: !c + | Const_table (global, elems) -> + c := (Cdata (emit_constant_table (symbol, global) elems)) :: !c) + (Cmmgen_state.constants ()); + Cdata (Cmmgen_state.data_items ()) :: !c -let transl_all_functions_and_emit_all_constants ~ppf_dump cont = +let transl_all_functions ~ppf_dump cont = let rec aux already_translated cont translated_functions = - if Compilenv.structured_constants () = [] && - Queue.is_empty functions + if Cmmgen_state.no_more_functions () then cont, translated_functions else let translated_functions, already_translated = transl_all_functions ~ppf_dump already_translated translated_functions in - let cont = emit_all_constants cont in aux already_translated cont translated_functions in let cont, translated_functions = - aux String.Set.empty cont [] + aux S.Set.empty cont [] in let translated_functions = (* Sort functions according to source position *) @@ -3126,10 +3185,10 @@ let transl_all_functions_and_emit_all_constants ~ppf_dump cont = (* Build the NULL terminated array of gc roots *) let emit_gc_roots_table ~symbols cont = - let table_symbol = Compilenv.make_symbol (Some "gc_roots") in + let table_symbol = S.create ~base_name:"gc_roots" Data in Cdata(Cglobal_symbol table_symbol :: Cdefine_symbol table_symbol :: - List.map (fun s -> Csymbol_address s) symbols @ + List.map (fun sym -> Csymbol_address sym) symbols @ [Cint 0n]) :: cont @@ -3148,11 +3207,12 @@ let preallocate_block cont { Clambda.symbol; exported; tag; fields } = Cint (Nativeint.of_int 1 (* Val_unit *)) | Some (Uconst_field_int n) -> cint_const n - | Some (Uconst_field_ref label) -> - Csymbol_address label) + | Some (Uconst_field_ref sym) -> + Csymbol_address (S.of_symbol sym)) fields in let data = + let symbol = S.of_symbol symbol in Cint(black_block_header tag (List.length fields)) :: if exported then Cglobal_symbol symbol :: @@ -3164,7 +3224,8 @@ let preallocate_block cont { Clambda.symbol; exported; tag; fields } = let emit_preallocated_blocks preallocated_blocks cont = let symbols = - List.map (fun ({ Clambda.symbol }:Clambda.preallocated_block) -> symbol) + List.map (fun ({ symbol; _ } : Clambda.preallocated_block) -> + S.of_symbol symbol) preallocated_blocks in let c1 = emit_gc_roots_table ~symbols cont in @@ -3178,7 +3239,8 @@ let compunit ~ppf_dump (ulam, preallocated_blocks, constants) = Afl_instrument.instrument_initialiser (transl empty_env ulam) else transl empty_env ulam in - let c1 = [Cfunction {fun_name = Compilenv.make_symbol (Some "entry"); + let fun_name = S.create ~base_name:"entry" Text in + let c1 = [Cfunction {fun_name; fun_args = []; fun_body = init_code; (* This function is often large and run only once. @@ -3191,9 +3253,10 @@ let compunit ~ppf_dump (ulam, preallocated_blocks, constants) = ] else [ Reduce_code_size ]; fun_dbg = Debuginfo.none }] in - let c2 = emit_constants c1 constants in - let c3 = transl_all_functions_and_emit_all_constants ~ppf_dump c2 in - emit_preallocated_blocks preallocated_blocks c3 + let c2 = transl_clambda_constants constants c1 in + let c3 = transl_all_functions ~ppf_dump c2 in + let c4 = emit_preallocated_blocks preallocated_blocks c3 in + emit_cmm_data_items_for_constants c4 (* CAMLprim value caml_cache_public_method (value meths, value tag, value *cache) @@ -3325,9 +3388,8 @@ let send_function arity = let fun_args = [obj, typ_val; tag, typ_int; cache, typ_val] @ List.map (fun id -> (id, typ_val)) (List.tl args) in - let fun_name = "caml_send" ^ Int.to_string arity in Cfunction - {fun_name; + {fun_name = caml_send arity; fun_args = List.map (fun (arg, ty) -> VP.create arg, ty) fun_args; fun_body = body; fun_codegen_options = []; @@ -3336,9 +3398,8 @@ let send_function arity = let apply_function arity = let (args, clos, body) = apply_function_body arity in let all_args = args @ [clos] in - let fun_name = "caml_apply" ^ Int.to_string arity in Cfunction - {fun_name; + {fun_name = caml_apply arity; fun_args = List.map (fun arg -> (VP.create arg, typ_val)) all_args; fun_body = body; fun_codegen_options = []; @@ -3358,9 +3419,8 @@ let tuplify_function arity = if i >= arity then [] else get_field env (Cvar arg) i dbg :: access_components(i+1) in - let fun_name = "caml_tuplify" ^ Int.to_string arity in Cfunction - {fun_name; + {fun_name = caml_tuplify arity; fun_args = [VP.create arg, typ_val; VP.create clos, typ_val]; fun_body = Cop(Capply typ_val, @@ -3426,8 +3486,7 @@ let final_curry_function arity = newclos (n-1)) end in Cfunction - {fun_name = "caml_curry" ^ Int.to_string arity ^ - "_" ^ Int.to_string (arity-1); + {fun_name = caml_curry_m_to_n arity (arity - 1); fun_args = [VP.create last_arg, typ_val; VP.create last_clos, typ_val]; fun_body = curry_fun [] last_clos (arity-1); fun_codegen_options = []; @@ -3439,25 +3498,27 @@ let rec intermediate_curry_functions arity num = if num = arity - 1 then [final_curry_function arity] else begin - let name1 = "caml_curry" ^ Int.to_string arity in - let name2 = if num = 0 then name1 else name1 ^ "_" ^ Int.to_string num in + let fun_name = + if num = 0 then caml_curry_n arity + else caml_curry_m_to_n arity num + in let arg = V.create_local "arg" and clos = V.create_local "clos" in Cfunction - {fun_name = name2; + {fun_name; fun_args = [VP.create arg, typ_val; VP.create clos, typ_val]; fun_body = if arity - num > 2 && arity <= max_arity_optimized then Cop(Calloc, [alloc_closure_header 5 Debuginfo.none; - Cconst_symbol(name1 ^ "_" ^ Int.to_string (num+1)); + Cconst_symbol(caml_curry_m_to_n arity (num + 1)); int_const (arity - num - 1); - Cconst_symbol(name1 ^ "_" ^ Int.to_string (num+1) ^ "_app"); + Cconst_symbol(caml_curry_m_to_n_app arity (num + 1)); Cvar arg; Cvar clos], dbg) else Cop(Calloc, [alloc_closure_header 4 Debuginfo.none; - Cconst_symbol(name1 ^ "_" ^ Int.to_string (num+1)); + Cconst_symbol(caml_curry_m_to_n arity (num + 1)); int_const 1; Cvar arg; Cvar clos], dbg); fun_codegen_options = []; @@ -3488,7 +3549,7 @@ let rec intermediate_curry_functions arity num = in let cf = Cfunction - {fun_name = name1 ^ "_" ^ Int.to_string (num+1) ^ "_app"; + {fun_name = caml_curry_m_to_n_app arity (num + 1); fun_args; fun_body = iter (num+1) (List.map (fun (arg,_) -> Cvar arg) direct_args) clos; @@ -3513,15 +3574,10 @@ let default_apply = Int.Set.add 2 (Int.Set.add 3 Int.Set.empty) (* These apply funs are always present in the main program because the run-time system needs them (cf. runtime/.S) . *) -let generic_functions shared units = - let (apply,send,curry) = - List.fold_left - (fun (apply,send,curry) ui -> - List.fold_right Int.Set.add ui.ui_apply_fun apply, - List.fold_right Int.Set.add ui.ui_send_fun send, - List.fold_right Int.Set.add ui.ui_curry_fun curry) - (Int.Set.empty,Int.Set.empty,Int.Set.empty) - units in +let generic_functions shared joined_link_info = + let apply = Cmx_format.Unit_info_link_time.apply_fun joined_link_info in + let send = Cmx_format.Unit_info_link_time.send_fun joined_link_info in + let curry = Cmx_format.Unit_info_link_time.curry_fun joined_link_info in let apply = if shared then apply else Int.Set.union apply default_apply in let accu = Int.Set.fold (fun n accu -> apply_function n :: accu) apply [] in let accu = Int.Set.fold (fun n accu -> send_function n :: accu) send accu in @@ -3529,25 +3585,25 @@ let generic_functions shared units = (* Generate the entry point *) -let entry_point namelist = +let entry_point comp_units = (* CR mshinwell: review all of these "None"s. We should be able to at least have filenames for these. *) let dbg = Debuginfo.none in let incr_global_inited = Cop(Cstore (Word_int, Assignment), - [Cconst_symbol "caml_globals_inited"; + [Cconst_symbol caml_globals_inited; Cop(Caddi, [Cop(Cload (Word_int, Mutable), - [Cconst_symbol "caml_globals_inited"], dbg); + [Cconst_symbol caml_globals_inited], dbg); Cconst_int 1], dbg)], dbg) in let body = List.fold_right - (fun name next -> - let entry_sym = Compilenv.make_symbol ~unitname:name (Some "entry") in + (fun compilation_unit next -> + let entry_sym = S.create ~compilation_unit ~base_name:"entry" Text in Csequence(Cop(Capply typ_void, [Cconst_symbol entry_sym], dbg), Csequence(incr_global_inited, next))) - namelist (Cconst_int 1) in - Cfunction {fun_name = "caml_program"; + comp_units (Cconst_int 1) in + Cfunction {fun_name = caml_program; fun_args = []; fun_body = body; fun_codegen_options = [Reduce_code_size]; @@ -3557,89 +3613,105 @@ let entry_point namelist = let cint_zero = Cint 0n -let global_table namelist = - let mksym name = - Csymbol_address (Compilenv.make_symbol ~unitname:name (Some "gc_roots")) +let global_table comp_units = + let mksym compilation_unit = + Csymbol_address (S.create ~compilation_unit ~base_name:"gc_roots" Data) in - Cdata(Cglobal_symbol "caml_globals" :: - Cdefine_symbol "caml_globals" :: - List.map mksym namelist @ + Cdata(Cglobal_symbol caml_globals :: + Cdefine_symbol caml_globals :: + List.map mksym comp_units @ [cint_zero]) -let reference_symbols namelist = - let mksym name = Csymbol_address name in - Cdata(List.map mksym namelist) +let reference_symbols syms = + let syms = S.Set.elements syms in + Cdata (List.map (fun sym -> Csymbol_address sym) syms) let global_data name v = Cdata(emit_structured_constant (name, Global) (Uconst_string (Marshal.to_string v [])) []) -let globals_map v = global_data "caml_globals_map" v +let globals_map v = global_data caml_globals_map v (* Generate the master table of frame descriptors *) -let frame_table namelist = - let mksym name = - Csymbol_address (Compilenv.make_symbol ~unitname:name (Some "frametable")) +let frame_table comp_units = + let mksym compilation_unit = + Csymbol_address (S.create ~compilation_unit ~base_name:"frametable" Data) in - Cdata(Cglobal_symbol "caml_frametable" :: - Cdefine_symbol "caml_frametable" :: - List.map mksym namelist + Cdata(Cglobal_symbol caml_frametable :: + Cdefine_symbol caml_frametable :: + List.map mksym comp_units @ [cint_zero]) (* Generate the master table of Spacetime shapes *) -let spacetime_shapes namelist = - let mksym name = +let spacetime_shapes comp_units = + let mksym compilation_unit = Csymbol_address ( - Compilenv.make_symbol ~unitname:name (Some "spacetime_shapes")) + S.create ~compilation_unit ~base_name:"spacetime_shapes" Data) in - Cdata(Cglobal_symbol "caml_spacetime_shapes" :: - Cdefine_symbol "caml_spacetime_shapes" :: - List.map mksym namelist + Cdata(Cglobal_symbol caml_spacetime_shapes :: + Cdefine_symbol caml_spacetime_shapes :: + List.map mksym comp_units @ [cint_zero]) (* Generate the table of module data and code segments *) -let segment_table namelist symbol begname endname = - let addsyms name lst = - Csymbol_address (Compilenv.make_symbol ~unitname:name (Some begname)) :: - Csymbol_address (Compilenv.make_symbol ~unitname:name (Some endname)) :: - lst +let segment_table comp_units symbol kind begname endname = + let addsyms compilation_unit lst = + Csymbol_address (S.create ~compilation_unit ~base_name:begname kind) :: + Csymbol_address (S.create ~compilation_unit ~base_name:endname kind) :: + lst in Cdata(Cglobal_symbol symbol :: Cdefine_symbol symbol :: - List.fold_right addsyms namelist [cint_zero]) + List.fold_right addsyms comp_units [cint_zero]) -let data_segment_table namelist = - segment_table namelist "caml_data_segments" "data_begin" "data_end" +let data_segment_table comp_units = + segment_table comp_units caml_data_segments S.Data "data_begin" "data_end" -let code_segment_table namelist = - segment_table namelist "caml_code_segments" "code_begin" "code_end" +let code_segment_table comp_units = + segment_table comp_units caml_code_segments S.Text "code_begin" "code_end" (* Initialize a predefined exception *) let predef_exception i name = - let symname = "caml_exn_" ^ name in - let cst = Uconst_string name in - let label = Compilenv.new_const_symbol () in - let cont = emit_structured_constant (label, Not_global) cst [] in - Cdata(emit_structured_constant (symname, Global) - (Uconst_block(Obj.object_tag, - [ - Uconst_ref(label, Some cst); - Uconst_int (-i-1); - ])) cont) + let id = + try List.assoc name Predef.builtin_values + with Not_found -> Misc.fatal_errorf "Cannot find predef exception %s" name + in + let name_sym = + S.for_lifted_anonymous_constant + ~compilation_unit:Backend_compilation_unit.startup + () + in + let data_items = + emit_block name_sym Local (string_header (String.length name)) + (emit_string_constant name []) + in + let exn_sym = S.of_symbol (Symbol.for_predefined_exn id) in + let tag = Obj.object_tag in + let size = 2 in + let fields = + (Csymbol_address name_sym) + :: (cint_const (-i - 1)) + :: data_items + in + let data_items = emit_block exn_sym Global (block_header tag size) fields in + Cdata data_items (* Header for a plugin *) let plugin_header units = - let mk (ui,crc) = - { dynu_name = ui.ui_name; - dynu_crc = crc; - dynu_imports_cmi = ui.ui_imports_cmi; - dynu_imports_cmx = ui.ui_imports_cmx; - dynu_defines = ui.ui_defines - } in - global_data "caml_plugin_header" - { dynu_magic = Config.cmxs_magic_number; dynu_units = List.map mk units } + let mk (ui, crc) = + Cmxs_format.Dynunit_info.create ~unit:(UI.unit ui) + ~crc + ~imports_cmi:(UI.imports_cmi ui) + ~imports_cmx:(UI.imports_cmx ui) + ~defines:(UI.defines ui) + in + let header = Cmxs_format.Dynheader_info.create ~units:(List.map mk units) in + global_data caml_plugin_header header + +let reset () = + Cmmgen_state.reset () diff --git a/asmcomp/cmmgen.mli b/asmcomp/cmmgen.mli index 6c33da9548c9..1accaa6d4a91 100644 --- a/asmcomp/cmmgen.mli +++ b/asmcomp/cmmgen.mli @@ -25,16 +25,22 @@ val compunit: val apply_function: int -> Cmm.phrase val send_function: int -> Cmm.phrase val curry_function: int -> Cmm.phrase list -val generic_functions: bool -> Cmx_format.unit_infos list -> Cmm.phrase list -val entry_point: string list -> Cmm.phrase -val global_table: string list -> Cmm.phrase -val reference_symbols: string list -> Cmm.phrase +val generic_functions + : bool + -> Cmx_format.Unit_info_link_time.t + -> Cmm.phrase list +val entry_point: Backend_compilation_unit.t list -> Cmm.phrase +val global_table: Backend_compilation_unit.t list -> Cmm.phrase +val reference_symbols: Backend_sym.Set.t -> Cmm.phrase val globals_map: - (string * Digest.t option * Digest.t option * string list) list -> Cmm.phrase -val frame_table: string list -> Cmm.phrase -val spacetime_shapes: string list -> Cmm.phrase -val data_segment_table: string list -> Cmm.phrase -val code_segment_table: string list -> Cmm.phrase + (Compilation_unit.Name.t * Digest.t option * Digest.t option + * Compilation_unit.t list) list -> Cmm.phrase +val frame_table: Backend_compilation_unit.t list -> Cmm.phrase +val spacetime_shapes: Backend_compilation_unit.t list -> Cmm.phrase +val data_segment_table: Backend_compilation_unit.t list -> Cmm.phrase +val code_segment_table: Backend_compilation_unit.t list -> Cmm.phrase val predef_exception: int -> string -> Cmm.phrase -val plugin_header: (Cmx_format.unit_infos * Digest.t) list -> Cmm.phrase +val plugin_header: (Cmx_format.Unit_info.t * Digest.t) list -> Cmm.phrase val black_block_header: (*tag:*)int -> (*size:*)int -> nativeint + +val reset : unit -> unit diff --git a/asmcomp/cmmgen_state.ml b/asmcomp/cmmgen_state.ml new file mode 100644 index 000000000000..54d4233a4a05 --- /dev/null +++ b/asmcomp/cmmgen_state.ml @@ -0,0 +1,66 @@ +(**************************************************************************) +(* *) +(* OCaml *) +(* *) +(* Xavier Leroy, projet Cristal, INRIA Rocquencourt *) +(* Mark Shinwell, Jane Street Europe *) +(* *) +(* Copyright 1996 Institut National de Recherche en Informatique et *) +(* en Automatique. *) +(* Copyright 2019 Jane Street Group LLC *) +(* *) +(* All rights reserved. This file is distributed under the terms of *) +(* the GNU Lesser General Public License version 2.1, with the *) +(* special exception on linking described in the file LICENSE. *) +(* *) +(**************************************************************************) + +[@@@ocaml.warning "+a-4-30-40-41-42"] + +module S = Backend_sym + +type is_global = Global | Local + +type constant = + | Const_closure of is_global * Clambda.ufunction list * Clambda.uconstant list + | Const_table of is_global * Cmm.data_item list + +type t = { + mutable constants : constant S.Map.t; + mutable data_items : Cmm.data_item list list; + functions : Clambda.ufunction Queue.t; +} + +let empty = { + constants = S.Map.empty; + data_items = []; + functions = Queue.create (); +} + +let state = empty + +let reset () = + state.constants <- S.Map.empty; + state.data_items <- []; + Queue.clear state.functions + +let add_constant sym cst = + state.constants <- S.Map.add sym cst state.constants + +let add_data_items items = + state.data_items <- items :: state.data_items + +let add_function func = + Queue.add func state.functions + +let constants () = state.constants + +let data_items () = List.concat (List.rev state.data_items) + +let next_function () = + match Queue.take state.functions with + | exception Queue.Empty -> None + | func -> Some func + +let no_more_functions () = + Queue.is_empty state.functions diff --git a/asmcomp/cmmgen_state.mli b/asmcomp/cmmgen_state.mli new file mode 100644 index 000000000000..607e40ec472b --- /dev/null +++ b/asmcomp/cmmgen_state.mli @@ -0,0 +1,42 @@ +(**************************************************************************) +(* *) +(* OCaml *) +(* *) +(* Xavier Leroy, projet Cristal, INRIA Rocquencourt *) +(* Mark Shinwell, Jane Street Europe *) +(* *) +(* Copyright 1996 Institut National de Recherche en Informatique et *) +(* en Automatique. *) +(* Copyright 2019 Jane Street Group LLC *) +(* *) +(* All rights reserved. This file is distributed under the terms of *) +(* the GNU Lesser General Public License version 2.1, with the *) +(* special exception on linking described in the file LICENSE. *) +(* *) +(**************************************************************************) + +(** Mutable state used by [Cmmgen]. *) + +[@@@ocaml.warning "+a-4-30-40-41-42"] + +val reset : unit -> unit + +type is_global = Global | Local + +type constant = + | Const_closure of is_global * Clambda.ufunction list * Clambda.uconstant list + | Const_table of is_global * Cmm.data_item list + +val add_constant : Backend_sym.t -> constant -> unit + +val add_data_items : Cmm.data_item list -> unit + +val add_function : Clambda.ufunction -> unit + +val constants : unit -> constant Backend_sym.Map.t + +val data_items : unit -> Cmm.data_item list + +val next_function : unit -> Clambda.ufunction option + +val no_more_functions : unit -> bool diff --git a/asmcomp/cmx_format.mli b/asmcomp/cmx_format.mli deleted file mode 100644 index 25c3f50c40c8..000000000000 --- a/asmcomp/cmx_format.mli +++ /dev/null @@ -1,73 +0,0 @@ -(**************************************************************************) -(* *) -(* OCaml *) -(* *) -(* Xavier Leroy, projet Gallium, INRIA Rocquencourt *) -(* Pierre Chambart, OCamlPro *) -(* Mark Shinwell and Leo White, Jane Street Europe *) -(* *) -(* Copyright 2010 Institut National de Recherche en Informatique et *) -(* en Automatique *) -(* Copyright 2013--2016 OCamlPro SAS *) -(* Copyright 2014--2016 Jane Street Group LLC *) -(* *) -(* All rights reserved. This file is distributed under the terms of *) -(* the GNU Lesser General Public License version 2.1, with the *) -(* special exception on linking described in the file LICENSE. *) -(* *) -(**************************************************************************) - -(* Format of .cmx, .cmxa and .cmxs files *) - -open Misc - -(* Each .o file has a matching .cmx file that provides the following infos - on the compilation unit: - - list of other units imported, with MD5s of their .cmx files - - approximation of the structure implemented - (includes descriptions of known functions: arity and direct entry - points) - - list of currying functions and application functions needed - The .cmx file contains these infos (as an externed record) plus a MD5 - of these infos *) - -type export_info = - | Clambda of Clambda.value_approximation - | Flambda of Export_info.t - -type unit_infos = - { mutable ui_name: modname; (* Name of unit implemented *) - mutable ui_symbol: string; (* Prefix for symbols *) - mutable ui_defines: string list; (* Unit and sub-units implemented *) - mutable ui_imports_cmi: crcs; (* Interfaces imported *) - mutable ui_imports_cmx: crcs; (* Infos imported *) - mutable ui_curry_fun: int list; (* Currying functions needed *) - mutable ui_apply_fun: int list; (* Apply functions needed *) - mutable ui_send_fun: int list; (* Send functions needed *) - mutable ui_export_info: export_info; - mutable ui_force_link: bool } (* Always linked *) - -(* Each .a library has a matching .cmxa file that provides the following - infos on the library: *) - -type library_infos = - { lib_units: (unit_infos * Digest.t) list; (* List of unit infos w/ MD5s *) - lib_ccobjs: string list; (* C object files needed *) - lib_ccopts: string list } (* Extra opts to C compiler *) - -(* Each .cmxs dynamically-loaded plugin contains a symbol - "caml_plugin_header" containing the following info - (as an externed record) *) - -type dynunit = { - dynu_name: modname; - dynu_crc: Digest.t; - dynu_imports_cmi: crcs; - dynu_imports_cmx: crcs; - dynu_defines: string list; -} - -type dynheader = { - dynu_magic: string; - dynu_units: dynunit list; -} diff --git a/asmcomp/compilenv.ml b/asmcomp/compilenv.ml deleted file mode 100644 index add4e90e5796..000000000000 --- a/asmcomp/compilenv.ml +++ /dev/null @@ -1,452 +0,0 @@ -(**************************************************************************) -(* *) -(* OCaml *) -(* *) -(* Xavier Leroy, projet Gallium, INRIA Rocquencourt *) -(* Pierre Chambart, OCamlPro *) -(* Mark Shinwell and Leo White, Jane Street Europe *) -(* *) -(* Copyright 2010 Institut National de Recherche en Informatique et *) -(* en Automatique *) -(* Copyright 2013--2016 OCamlPro SAS *) -(* Copyright 2014--2016 Jane Street Group LLC *) -(* *) -(* All rights reserved. This file is distributed under the terms of *) -(* the GNU Lesser General Public License version 2.1, with the *) -(* special exception on linking described in the file LICENSE. *) -(* *) -(**************************************************************************) - -(* Compilation environments for compilation units *) - -[@@@ocaml.warning "+a-4-9-40-41-42"] - -open Config -open Cmx_format - -type error = - Not_a_unit_info of string - | Corrupted_unit_info of string - | Illegal_renaming of string * string * string - -exception Error of error - -let global_infos_table = - (Hashtbl.create 17 : (string, unit_infos option) Hashtbl.t) -let export_infos_table = - (Hashtbl.create 10 : (string, Export_info.t) Hashtbl.t) - -let imported_sets_of_closures_table = - (Set_of_closures_id.Tbl.create 10 - : Simple_value_approx.function_declarations option - Set_of_closures_id.Tbl.t) - -module CstMap = - Map.Make(struct - type t = Clambda.ustructured_constant - let compare = Clambda.compare_structured_constants - (* PR#6442: it is incorrect to use Stdlib.compare on values of type t - because it compares "0.0" and "-0.0" equal. *) - end) - -type structured_constants = - { - strcst_shared: string CstMap.t; - strcst_all: (string * Clambda.ustructured_constant) list; - } - -let structured_constants_empty = - { - strcst_shared = CstMap.empty; - strcst_all = []; - } - -let structured_constants = ref structured_constants_empty - - -let exported_constants = Hashtbl.create 17 - -let merged_environment = ref Export_info.empty - -let default_ui_export_info = - if Config.flambda then - Cmx_format.Flambda Export_info.empty - else - Cmx_format.Clambda Value_unknown - -let current_unit = - { ui_name = ""; - ui_symbol = ""; - ui_defines = []; - ui_imports_cmi = []; - ui_imports_cmx = []; - ui_curry_fun = []; - ui_apply_fun = []; - ui_send_fun = []; - ui_force_link = false; - ui_export_info = default_ui_export_info } - -let symbolname_for_pack pack name = - match pack with - | None -> name - | Some p -> - let b = Buffer.create 64 in - for i = 0 to String.length p - 1 do - match p.[i] with - | '.' -> Buffer.add_string b "__" - | c -> Buffer.add_char b c - done; - Buffer.add_string b "__"; - Buffer.add_string b name; - Buffer.contents b - -let unit_id_from_name name = Ident.create_persistent name - -let concat_symbol unitname id = - unitname ^ "__" ^ id - -let make_symbol ?(unitname = current_unit.ui_symbol) idopt = - let prefix = "caml" ^ unitname in - match idopt with - | None -> prefix - | Some id -> concat_symbol prefix id - -let current_unit_linkage_name () = - Linkage_name.create (make_symbol ~unitname:current_unit.ui_symbol None) - -let reset ?packname name = - Hashtbl.clear global_infos_table; - Set_of_closures_id.Tbl.clear imported_sets_of_closures_table; - let symbol = symbolname_for_pack packname name in - current_unit.ui_name <- name; - current_unit.ui_symbol <- symbol; - current_unit.ui_defines <- [symbol]; - current_unit.ui_imports_cmi <- []; - current_unit.ui_imports_cmx <- []; - current_unit.ui_curry_fun <- []; - current_unit.ui_apply_fun <- []; - current_unit.ui_send_fun <- []; - current_unit.ui_force_link <- !Clflags.link_everything; - Hashtbl.clear exported_constants; - structured_constants := structured_constants_empty; - current_unit.ui_export_info <- default_ui_export_info; - merged_environment := Export_info.empty; - Hashtbl.clear export_infos_table; - let compilation_unit = - Compilation_unit.create - (Ident.create_persistent name) - (current_unit_linkage_name ()) - in - Compilation_unit.set_current compilation_unit - -let current_unit_infos () = - current_unit - -let current_unit_name () = - current_unit.ui_name - -let symbol_in_current_unit name = - let prefix = "caml" ^ current_unit.ui_symbol in - name = prefix || - (let lp = String.length prefix in - String.length name >= 2 + lp - && String.sub name 0 lp = prefix - && name.[lp] = '_' - && name.[lp + 1] = '_') - -let read_unit_info filename = - let ic = open_in_bin filename in - try - let buffer = really_input_string ic (String.length cmx_magic_number) in - if buffer <> cmx_magic_number then begin - close_in ic; - raise(Error(Not_a_unit_info filename)) - end; - let ui = (input_value ic : unit_infos) in - let crc = Digest.input ic in - close_in ic; - (ui, crc) - with End_of_file | Failure _ -> - close_in ic; - raise(Error(Corrupted_unit_info(filename))) - -let read_library_info filename = - let ic = open_in_bin filename in - let buffer = really_input_string ic (String.length cmxa_magic_number) in - if buffer <> cmxa_magic_number then - raise(Error(Not_a_unit_info filename)); - let infos = (input_value ic : library_infos) in - close_in ic; - infos - - -(* Read and cache info on global identifiers *) - -let get_global_info global_ident = ( - let modname = Ident.name global_ident in - if modname = current_unit.ui_name then - Some current_unit - else begin - try - Hashtbl.find global_infos_table modname - with Not_found -> - let (infos, crc) = - if Env.is_imported_opaque modname then (None, None) - else begin - try - let filename = - Load_path.find_uncap (modname ^ ".cmx") in - let (ui, crc) = read_unit_info filename in - if ui.ui_name <> modname then - raise(Error(Illegal_renaming(modname, ui.ui_name, filename))); - (Some ui, Some crc) - with Not_found -> - let warn = Warnings.No_cmx_file modname in - Location.prerr_warning Location.none warn; - (None, None) - end - in - current_unit.ui_imports_cmx <- - (modname, crc) :: current_unit.ui_imports_cmx; - Hashtbl.add global_infos_table modname infos; - infos - end -) - -let cache_unit_info ui = - Hashtbl.add global_infos_table ui.ui_name (Some ui) - -(* Return the approximation of a global identifier *) - -let get_clambda_approx ui = - assert(not Config.flambda); - match ui.ui_export_info with - | Flambda _ -> assert false - | Clambda approx -> approx - -let toplevel_approx : - (string, Clambda.value_approximation) Hashtbl.t = Hashtbl.create 16 - -let record_global_approx_toplevel () = - Hashtbl.add toplevel_approx current_unit.ui_name - (get_clambda_approx current_unit) - -let global_approx id = - if Ident.is_predef id then Clambda.Value_unknown - else try Hashtbl.find toplevel_approx (Ident.name id) - with Not_found -> - match get_global_info id with - | None -> Clambda.Value_unknown - | Some ui -> get_clambda_approx ui - -(* Return the symbol used to refer to a global identifier *) - -let symbol_for_global id = - if Ident.is_predef id then - "caml_exn_" ^ Ident.name id - else begin - let unitname = Ident.name id in - match - try ignore (Hashtbl.find toplevel_approx unitname); None - with Not_found -> get_global_info id - with - | None -> make_symbol ~unitname:(Ident.name id) None - | Some ui -> make_symbol ~unitname:ui.ui_symbol None - end - -(* Register the approximation of the module being compiled *) - -let unit_for_global id = - let sym_label = Linkage_name.create (symbol_for_global id) in - Compilation_unit.create id sym_label - -let predefined_exception_compilation_unit = - Compilation_unit.create (Ident.create_persistent "__dummy__") - (Linkage_name.create "__dummy__") - -let is_predefined_exception sym = - Compilation_unit.equal - predefined_exception_compilation_unit - (Symbol.compilation_unit sym) - -let symbol_for_global' id = - let sym_label = Linkage_name.create (symbol_for_global id) in - if Ident.is_predef id then - Symbol.of_global_linkage predefined_exception_compilation_unit sym_label - else - Symbol.of_global_linkage (unit_for_global id) sym_label - -let set_global_approx approx = - assert(not Config.flambda); - current_unit.ui_export_info <- Clambda approx - -(* Exporting and importing cross module information *) - -let get_flambda_export_info ui = - assert(Config.flambda); - match ui.ui_export_info with - | Clambda _ -> assert false - | Flambda ei -> ei - -let set_export_info export_info = - assert(Config.flambda); - current_unit.ui_export_info <- Flambda export_info - -let approx_for_global comp_unit = - let id = Compilation_unit.get_persistent_ident comp_unit in - if (Compilation_unit.equal - predefined_exception_compilation_unit - comp_unit) - || Ident.is_predef id - || not (Ident.global id) - then invalid_arg (Format.asprintf "approx_for_global %a" Ident.print id); - let modname = Ident.name id in - match Hashtbl.find export_infos_table modname with - | otherwise -> Some otherwise - | exception Not_found -> - match get_global_info id with - | None -> None - | Some ui -> - let exported = get_flambda_export_info ui in - Hashtbl.add export_infos_table modname exported; - merged_environment := Export_info.merge !merged_environment exported; - Some exported - -let approx_env () = !merged_environment - -(* Record that a currying function or application function is needed *) - -let need_curry_fun n = - if not (List.mem n current_unit.ui_curry_fun) then - current_unit.ui_curry_fun <- n :: current_unit.ui_curry_fun - -let need_apply_fun n = - assert(n > 0); - if not (List.mem n current_unit.ui_apply_fun) then - current_unit.ui_apply_fun <- n :: current_unit.ui_apply_fun - -let need_send_fun n = - if not (List.mem n current_unit.ui_send_fun) then - current_unit.ui_send_fun <- n :: current_unit.ui_send_fun - -(* Write the description of the current unit *) - -let write_unit_info info filename = - let oc = open_out_bin filename in - output_string oc cmx_magic_number; - output_value oc info; - flush oc; - let crc = Digest.file filename in - Digest.output oc crc; - close_out oc - -let save_unit_info filename = - current_unit.ui_imports_cmi <- Env.imports(); - write_unit_info current_unit filename - -let current_unit () = - match Compilation_unit.get_current () with - | Some current_unit -> current_unit - | None -> Misc.fatal_error "Compilenv.current_unit" - -let current_unit_symbol () = - Symbol.of_global_linkage (current_unit ()) (current_unit_linkage_name ()) - -let const_label = ref 0 - -let new_const_symbol () = - incr const_label; - make_symbol (Some (Int.to_string !const_label)) - -let snapshot () = !structured_constants -let backtrack s = structured_constants := s - -let new_structured_constant cst ~shared = - let {strcst_shared; strcst_all} = !structured_constants in - if shared then - try - CstMap.find cst strcst_shared - with Not_found -> - let lbl = new_const_symbol() in - structured_constants := - { - strcst_shared = CstMap.add cst lbl strcst_shared; - strcst_all = (lbl, cst) :: strcst_all; - }; - lbl - else - let lbl = new_const_symbol() in - structured_constants := - { - strcst_shared; - strcst_all = (lbl, cst) :: strcst_all; - }; - lbl - -let add_exported_constant s = - Hashtbl.replace exported_constants s () - -let clear_structured_constants () = - structured_constants := structured_constants_empty - -let structured_constants () = - let provenance : Clambda.usymbol_provenance = - { original_idents = []; - module_path = - Path.Pident (Ident.create_persistent (current_unit_name ())); - } - in - List.map - (fun (symbol, definition) -> - { - Clambda.symbol; - exported = Hashtbl.mem exported_constants symbol; - definition; - provenance = Some provenance; - }) - (!structured_constants).strcst_all - -let closure_symbol fv = - let compilation_unit = Closure_id.get_compilation_unit fv in - let unitname = - Linkage_name.to_string (Compilation_unit.get_linkage_name compilation_unit) - in - let linkage_name = - concat_symbol unitname ((Closure_id.unique_name fv) ^ "_closure") - in - Symbol.of_global_linkage compilation_unit (Linkage_name.create linkage_name) - -let function_label fv = - let compilation_unit = Closure_id.get_compilation_unit fv in - let unitname = - Linkage_name.to_string - (Compilation_unit.get_linkage_name compilation_unit) - in - (concat_symbol unitname (Closure_id.unique_name fv)) - -let require_global global_ident = - if not (Ident.is_predef global_ident) then - ignore (get_global_info global_ident : Cmx_format.unit_infos option) - -(* Error report *) - -open Format - -let report_error ppf = function - | Not_a_unit_info filename -> - fprintf ppf "%a@ is not a compilation unit description." - Location.print_filename filename - | Corrupted_unit_info filename -> - fprintf ppf "Corrupted compilation unit description@ %a" - Location.print_filename filename - | Illegal_renaming(name, modname, filename) -> - fprintf ppf "%a@ contains the description for unit\ - @ %s when %s was expected" - Location.print_filename filename name modname - -let () = - Location.register_error_of_exn - (function - | Error err -> Some (Location.error_of_printer_file report_error err) - | _ -> None - ) diff --git a/asmcomp/compilenv.mli b/asmcomp/compilenv.mli deleted file mode 100644 index 569d51ea0860..000000000000 --- a/asmcomp/compilenv.mli +++ /dev/null @@ -1,153 +0,0 @@ -(**************************************************************************) -(* *) -(* OCaml *) -(* *) -(* Xavier Leroy, projet Gallium, INRIA Rocquencourt *) -(* Pierre Chambart, OCamlPro *) -(* Mark Shinwell and Leo White, Jane Street Europe *) -(* *) -(* Copyright 2010 Institut National de Recherche en Informatique et *) -(* en Automatique *) -(* Copyright 2013--2016 OCamlPro SAS *) -(* Copyright 2014--2016 Jane Street Group LLC *) -(* *) -(* All rights reserved. This file is distributed under the terms of *) -(* the GNU Lesser General Public License version 2.1, with the *) -(* special exception on linking described in the file LICENSE. *) -(* *) -(**************************************************************************) - -(* Compilation environments for compilation units *) - -open Cmx_format - -(* CR-soon mshinwell: this is a bit ugly - mshinwell: deferred CR, this has been addressed in the export info - improvement feature. -*) -val imported_sets_of_closures_table - : Simple_value_approx.function_declarations option Set_of_closures_id.Tbl.t - (* flambda-only *) - -val reset: ?packname:string -> string -> unit - (* Reset the environment and record the name of the unit being - compiled (arg). Optional argument is [-for-pack] prefix. *) - -val unit_id_from_name: string -> Ident.t - (* flambda-only *) - -val current_unit_infos: unit -> unit_infos - (* Return the infos for the unit being compiled *) - -val current_unit_name: unit -> string - (* Return the name of the unit being compiled - clambda-only *) - -val current_unit_linkage_name: unit -> Linkage_name.t - (* Return the linkage_name of the unit being compiled. - flambda-only *) - -val current_unit: unit -> Compilation_unit.t - (* flambda-only *) - -val current_unit_symbol: unit -> Symbol.t - (* flambda-only *) - -val make_symbol: ?unitname:string -> string option -> string - (* [make_symbol ~unitname:u None] returns the asm symbol that - corresponds to the compilation unit [u] (default: the current unit). - [make_symbol ~unitname:u (Some id)] returns the asm symbol that - corresponds to symbol [id] in the compilation unit [u] - (or the current unit). *) - -val symbol_in_current_unit: string -> bool - (* Return true if the given asm symbol belongs to the - current compilation unit, false otherwise. *) - -val is_predefined_exception: Symbol.t -> bool - (* flambda-only *) - -val unit_for_global: Ident.t -> Compilation_unit.t - (* flambda-only *) - -val symbol_for_global: Ident.t -> string - (* Return the asm symbol that refers to the given global identifier - flambda-only *) -val symbol_for_global': Ident.t -> Symbol.t - (* flambda-only *) -val global_approx: Ident.t -> Clambda.value_approximation - (* Return the approximation for the given global identifier - clambda-only *) -val set_global_approx: Clambda.value_approximation -> unit - (* Record the approximation of the unit being compiled - clambda-only *) -val record_global_approx_toplevel: unit -> unit - (* Record the current approximation for the current toplevel phrase - clambda-only *) - -val set_export_info: Export_info.t -> unit - (* Record the information of the unit being compiled - flambda-only *) -val approx_env: unit -> Export_info.t - (* Returns all the information loaded from external compilation units - flambda-only *) -val approx_for_global: Compilation_unit.t -> Export_info.t option - (* Loads the exported information declaring the compilation_unit - flambda-only *) - -val need_curry_fun: int -> unit -val need_apply_fun: int -> unit -val need_send_fun: int -> unit - (* Record the need of a currying (resp. application, - message sending) function with the given arity *) - -val new_const_symbol : unit -> string -val closure_symbol : Closure_id.t -> Symbol.t - (* Symbol of a function if the function is - closed (statically allocated) - flambda-only *) -val function_label : Closure_id.t -> string - (* linkage name of the code of a function - flambda-only *) - -val new_structured_constant: - Clambda.ustructured_constant -> - shared:bool -> (* can be shared with another structurally equal constant *) - string -val structured_constants: - unit -> Clambda.preallocated_constant list -val clear_structured_constants: unit -> unit -val add_exported_constant: string -> unit - (* clambda-only *) -type structured_constants - (* clambda-only *) -val snapshot: unit -> structured_constants - (* clambda-only *) -val backtrack: structured_constants -> unit - (* clambda-only *) - -val read_unit_info: string -> unit_infos * Digest.t - (* Read infos and MD5 from a [.cmx] file. *) -val write_unit_info: unit_infos -> string -> unit - (* Save the given infos in the given file *) -val save_unit_info: string -> unit - (* Save the infos for the current unit in the given file *) -val cache_unit_info: unit_infos -> unit - (* Enter the given infos in the cache. The infos will be - honored by [symbol_for_global] and [global_approx] - without looking at the corresponding .cmx file. *) - -val require_global: Ident.t -> unit - (* Enforce a link dependency of the current compilation - unit to the required module *) - -val read_library_info: string -> library_infos - -type error = - Not_a_unit_info of string - | Corrupted_unit_info of string - | Illegal_renaming of string * string * string - -exception Error of error - -val report_error: Format.formatter -> error -> unit diff --git a/asmcomp/emit.mli b/asmcomp/emit.mli index cab50833757d..97507feeab87 100644 --- a/asmcomp/emit.mli +++ b/asmcomp/emit.mli @@ -17,5 +17,5 @@ val fundecl: Linearize.fundecl -> unit val data: Cmm.data_item list -> unit -val begin_assembly: unit -> unit -val end_assembly: unit -> unit +val begin_assembly: Backend_compilation_unit.t -> unit +val end_assembly: Backend_compilation_unit.t -> unit diff --git a/asmcomp/emitaux.ml b/asmcomp/emitaux.ml index e0476d171a1c..330343de87b0 100644 --- a/asmcomp/emitaux.ml +++ b/asmcomp/emitaux.ml @@ -219,18 +219,6 @@ let emit_frames a = Hashtbl.iter emit_filename filenames; frame_descriptors := [] -(* Detection of functions that can be duplicated between a DLL and - the main program (PR#4690) *) - -let isprefix s1 s2 = - String.length s1 <= String.length s2 - && String.sub s2 0 (String.length s1) = s1 - -let is_generic_function name = - List.exists - (fun p -> isprefix p name) - ["caml_apply"; "caml_curry"; "caml_send"; "caml_tuplify"] - (* CFI directives *) let is_cfi_enabled () = diff --git a/asmcomp/emitaux.mli b/asmcomp/emitaux.mli index b2b2141c5b6d..a61d2036e308 100644 --- a/asmcomp/emitaux.mli +++ b/asmcomp/emitaux.mli @@ -59,8 +59,6 @@ type emit_frame_actions = val emit_frames: emit_frame_actions -> unit -val is_generic_function: string -> bool - val cfi_startproc : unit -> unit val cfi_endproc : unit -> unit val cfi_adjust_cfa_offset : int -> unit diff --git a/asmcomp/export_info_for_pack.ml b/asmcomp/export_info_for_pack.ml deleted file mode 100644 index 42a815534714..000000000000 --- a/asmcomp/export_info_for_pack.ml +++ /dev/null @@ -1,231 +0,0 @@ -(**************************************************************************) -(* *) -(* OCaml *) -(* *) -(* Pierre Chambart, OCamlPro *) -(* Mark Shinwell and Leo White, Jane Street Europe *) -(* *) -(* Copyright 2013--2016 OCamlPro SAS *) -(* Copyright 2014--2016 Jane Street Group LLC *) -(* *) -(* All rights reserved. This file is distributed under the terms of *) -(* the GNU Lesser General Public License version 2.1, with the *) -(* special exception on linking described in the file LICENSE. *) -(* *) -(**************************************************************************) - -[@@@ocaml.warning "+a-4-9-30-40-41-42"] - -module A = Simple_value_approx - -let rename_id_state = Export_id.Tbl.create 100 -let rename_set_of_closures_id_state = Set_of_closures_id.Tbl.create 10 -let imported_function_declarations_table = - (Set_of_closures_id.Tbl.create 10 - : A.function_declarations Set_of_closures_id.Tbl.t) - -(* Rename export identifiers' compilation units to denote that they now - live within a pack. *) -let import_eid_for_pack units pack id = - try Export_id.Tbl.find rename_id_state id - with Not_found -> - let unit_id = Export_id.get_compilation_unit id in - let id' = - if Compilation_unit.Set.mem unit_id units - then Export_id.create ?name:(Export_id.name id) pack - else id - in - Export_id.Tbl.add rename_id_state id id'; - id' - -(* Similar to [import_eid_for_pack], but for symbols. *) -let import_symbol_for_pack units pack symbol = - let compilation_unit = Symbol.compilation_unit symbol in - if Compilation_unit.Set.mem compilation_unit units - then Symbol.import_for_pack ~pack symbol - else symbol - -let import_approx_for_pack units pack (approx : Export_info.approx) - : Export_info.approx = - match approx with - | Value_symbol sym -> Value_symbol (import_symbol_for_pack units pack sym) - | Value_id eid -> Value_id (import_eid_for_pack units pack eid) - | Value_unknown -> Value_unknown - -let import_set_of_closures_id_for_pack units pack - (set_of_closures_id : Set_of_closures_id.t) - : Set_of_closures_id.t = - let compilation_unit = - Set_of_closures_id.get_compilation_unit set_of_closures_id - in - if Compilation_unit.Set.mem compilation_unit units then - Set_of_closures_id.Tbl.memoize - rename_set_of_closures_id_state - (fun _ -> - Set_of_closures_id.create - ?name:(Set_of_closures_id.name set_of_closures_id) - pack) - set_of_closures_id - else set_of_closures_id - -let import_set_of_closures_origin_for_pack units pack - (set_of_closures_origin : Set_of_closures_origin.t) - : Set_of_closures_origin.t = - Set_of_closures_origin.rename - (import_set_of_closures_id_for_pack units pack) - set_of_closures_origin - -let import_set_of_closures units pack - (set_of_closures : Export_info.value_set_of_closures) - : Export_info.value_set_of_closures = - { set_of_closures_id = - import_set_of_closures_id_for_pack units pack - set_of_closures.set_of_closures_id; - bound_vars = - Var_within_closure.Map.map (import_approx_for_pack units pack) - set_of_closures.bound_vars; - free_vars = set_of_closures.free_vars; - results = - Closure_id.Map.map (import_approx_for_pack units pack) - set_of_closures.results; - aliased_symbol = - Misc.may_map - (import_symbol_for_pack units pack) - set_of_closures.aliased_symbol; - } - -let import_descr_for_pack units pack (descr : Export_info.descr) - : Export_info.descr = - match descr with - | Value_int _ - | Value_char _ - | Value_constptr _ - | Value_string _ - | Value_float _ - | Value_float_array _ - | Export_info.Value_boxed_int _ - | Value_mutable_block _ as desc -> desc - | Value_block (tag, fields) -> - Value_block (tag, Array.map (import_approx_for_pack units pack) fields) - | Value_closure { closure_id; set_of_closures } -> - Value_closure { - closure_id; - set_of_closures = import_set_of_closures units pack set_of_closures; - } - | Value_set_of_closures set_of_closures -> - Value_set_of_closures (import_set_of_closures units pack set_of_closures) - | Value_unknown_descr -> Value_unknown_descr - -let rec import_code_for_pack units pack expr = - Flambda_iterators.map_named (function - | Symbol sym -> Symbol (import_symbol_for_pack units pack sym) - | Read_symbol_field (sym, field) -> - Read_symbol_field (import_symbol_for_pack units pack sym, field) - | Set_of_closures set_of_closures -> - let set_of_closures = - Flambda.create_set_of_closures - ~free_vars:set_of_closures.free_vars - ~specialised_args:set_of_closures.specialised_args - ~direct_call_surrogates:set_of_closures.direct_call_surrogates - ~function_decls: - (import_function_declarations_for_pack_aux units pack - set_of_closures.function_decls) - in - Set_of_closures set_of_closures - | e -> e) - expr - -and import_function_declarations_for_pack_aux units pack - (function_decls : Flambda.function_declarations) = - let funs = - Variable.Map.map - (fun (function_decl : Flambda.function_declaration) -> - Flambda.create_function_declaration ~params:function_decl.params - ~body:(import_code_for_pack units pack function_decl.body) - ~stub:function_decl.stub ~dbg:function_decl.dbg - ~inline:function_decl.inline - ~specialise:function_decl.specialise - ~is_a_functor:function_decl.is_a_functor - ~closure_origin:function_decl.closure_origin) - function_decls.funs - in - Flambda.import_function_declarations_for_pack - (Flambda.update_function_declarations function_decls ~funs) - (import_set_of_closures_id_for_pack units pack) - (import_set_of_closures_origin_for_pack units pack) - -let import_function_declarations_for_pack_aux units pack - (function_decls : A.function_declarations) : A.function_declarations = - let funs = - Variable.Map.map - (fun (function_decl : A.function_declaration) -> - A.update_function_declaration_body function_decl - (fun body -> import_code_for_pack units pack body)) - function_decls.funs - in - A.import_function_declarations_for_pack - (A.update_function_declarations function_decls ~funs) - (import_set_of_closures_id_for_pack units pack) - (import_set_of_closures_origin_for_pack units pack) - -let import_function_declarations_approx_for_pack units pack - (function_decls: A.function_declarations) = - let original_set_of_closures_id = function_decls.set_of_closures_id in - try - Set_of_closures_id.Tbl.find imported_function_declarations_table - original_set_of_closures_id - with Not_found -> - let function_decls = - import_function_declarations_for_pack_aux units pack function_decls - in - Set_of_closures_id.Tbl.add - imported_function_declarations_table - original_set_of_closures_id - function_decls; - function_decls - -let import_eidmap_for_pack units pack f map = - Export_info.nest_eid_map - (Compilation_unit.Map.fold - (fun _ map acc -> Export_id.Map.disjoint_union map acc) - (Compilation_unit.Map.map (fun map -> - Export_id.Map.map_keys (import_eid_for_pack units pack) - (Export_id.Map.map f map)) - map) - Export_id.Map.empty) - -let import_for_pack ~pack_units ~pack (exp : Export_info.t) = - let import_sym = import_symbol_for_pack pack_units pack in - let import_descr = import_descr_for_pack pack_units pack in - let import_eid = import_eid_for_pack pack_units pack in - let import_eidmap f map = import_eidmap_for_pack pack_units pack f map in - let import_set_of_closures_id = - import_set_of_closures_id_for_pack pack_units pack - in - let import_function_declarations = - import_function_declarations_approx_for_pack pack_units pack - in - let sets_of_closures = - Set_of_closures_id.Map.map_keys import_set_of_closures_id - (Set_of_closures_id.Map.map - import_function_declarations - exp.sets_of_closures) - in - Export_info.create ~sets_of_closures - ~offset_fun:exp.offset_fun - ~offset_fv:exp.offset_fv - ~values:(import_eidmap import_descr exp.values) - ~symbol_id:(Symbol.Map.map_keys import_sym - (Symbol.Map.map import_eid exp.symbol_id)) - ~constant_closures:exp.constant_closures - ~invariant_params: - (Set_of_closures_id.Map.map_keys import_set_of_closures_id - exp.invariant_params) - ~recursive: - (Set_of_closures_id.Map.map_keys import_set_of_closures_id - exp.recursive) - -let clear_import_state () = - Set_of_closures_id.Tbl.clear imported_function_declarations_table; - Set_of_closures_id.Tbl.clear rename_set_of_closures_id_state; - Export_id.Tbl.clear rename_id_state diff --git a/asmcomp/export_info_for_pack.mli b/asmcomp/export_info_for_pack.mli deleted file mode 100644 index 2ba3a35d8b20..000000000000 --- a/asmcomp/export_info_for_pack.mli +++ /dev/null @@ -1,34 +0,0 @@ -(**************************************************************************) -(* *) -(* OCaml *) -(* *) -(* Pierre Chambart, OCamlPro *) -(* Mark Shinwell and Leo White, Jane Street Europe *) -(* *) -(* Copyright 2013--2016 OCamlPro SAS *) -(* Copyright 2014--2016 Jane Street Group LLC *) -(* *) -(* All rights reserved. This file is distributed under the terms of *) -(* the GNU Lesser General Public License version 2.1, with the *) -(* special exception on linking described in the file LICENSE. *) -(* *) -(**************************************************************************) - -[@@@ocaml.warning "+a-4-9-30-40-41-42"] - -(** Transformations on export information that are only used for the - building of packs. *) - -(** Transform the information from [exported] to be - suitable to be reexported as the information for a pack named [pack] - containing units [pack_units]. - It mainly changes symbols of units [pack_units] to refer to - [pack] instead. *) -val import_for_pack - : pack_units:Compilation_unit.Set.t - -> pack:Compilation_unit.t - -> Export_info.t - -> Export_info.t - -(** Drops the state after importing several units in the same pack. *) -val clear_import_state : unit -> unit diff --git a/asmcomp/i386/NOTES.md b/asmcomp/i386/NOTES.md index 6f1e183978f7..8c8839b772c0 100644 --- a/asmcomp/i386/NOTES.md +++ b/asmcomp/i386/NOTES.md @@ -7,7 +7,7 @@ The baseline is the 80486, also known as `i486`. Floating-point architecture: x87. (SSE2 not available in Debian's baseline.) -Operating systems: Linux, BSD, MacOS X, MS Windows. +Operating systems: Linux, BSD, MS Windows. Debian architecture name: `i386` @@ -18,5 +18,3 @@ Debian architecture name: `i386` * ELF application binary interface: _System V Application Binary Interface, Intel386 Architecture Processor Supplement_ -* MacOS X application binary interface: - _OS X ABI Function Call Guide: IA-32 Function Calling Conventions_ diff --git a/asmcomp/i386/arch.ml b/asmcomp/i386/arch.ml index 23f54232a44e..ba76a82584da 100644 --- a/asmcomp/i386/arch.ml +++ b/asmcomp/i386/arch.ml @@ -163,5 +163,4 @@ let stack_alignment = match Config.system with | "win32" -> 4 (* MSVC *) | _ -> 16 -(* PR#6038: GCC and Clang seem to require 16-byte alignment nowadays, - even if only MacOS X's ABI formally requires it *) + (* PR#6038: GCC and Clang seem to require 16-byte alignment nowadays *) diff --git a/asmcomp/i386/emit.mlp b/asmcomp/i386/emit.mlp index 654b5629a0b8..b626a5a641ea 100644 --- a/asmcomp/i386/emit.mlp +++ b/asmcomp/i386/emit.mlp @@ -24,7 +24,10 @@ open Reg open Mach open Linearize open Emitaux -module String = Misc.Stdlib.String + +module AS = Asm_section +module S = Asm_symbol +open Asm_symbol.Names open X86_ast open X86_proc @@ -78,26 +81,15 @@ let slot_offset loc cl = (* Record symbols used and defined - at the end generate extern for those used but not defined *) -let symbols_defined = ref String.Set.empty -let symbols_used = ref String.Set.empty +let symbols_defined = ref S.Set.empty +let symbols_used = ref S.Set.empty -let add_def_symbol s = symbols_defined := String.Set.add s !symbols_defined -let add_used_symbol s = symbols_used := String.Set.add s !symbols_used +let add_def_symbol s = symbols_defined := S.Set.add s !symbols_defined +let add_used_symbol s = symbols_used := S.Set.add s !symbols_used let trap_frame_size = Misc.align 8 stack_alignment -(* Prefixing of symbols with "_" *) - -let symbol_prefix = - match system with - | S_linux_elf -> "" - | S_bsd_elf -> "" - | S_solaris -> "" - | S_beos -> "" - | S_gnu -> "" - | _ -> "_" (* win32 & others *) - -let emit_symbol s = string_of_symbol symbol_prefix s +let emit_symbol s = Asm_symbol.encode s let immsym s = sym (emit_symbol s) @@ -467,9 +459,6 @@ let emit_global_label s = let function_name = ref "" (* Entry point for tail recursive calls *) let tailrec_entry_point = ref 0 -(* Record references to external C functions (for MacOSX) *) -let external_symbols_direct = ref String.Set.empty -let external_symbols_indirect = ref String.Set.empty (* Emission of the profiling prelude *) @@ -487,7 +476,6 @@ let emit_profile () = match system with | S_linux_elf | S_gnu -> call_mcount "mcount" | S_bsd_elf -> call_mcount ".mcount" - | S_macosx -> call_mcount "Lmcount$stub" | _ -> () (*unsupported yet*) let emit_instr fallthrough i = @@ -553,35 +541,27 @@ let emit_instr fallthrough i = I.jmp (reg i.arg.(0)) end | Lop(Itailcall_imm { func; label_after = _; }) -> - if func = !function_name then - I.jmp (label !tailrec_entry_point) - else begin - output_epilogue begin fun () -> - add_used_symbol func; - I.jmp (immsym func) + let func = S.create func in + begin match !function_name with + | None -> Misc.fatal_error "[function_name] not set" + | Some function_name -> + if S.equal func function_name then begin + I.jmp (label !tailrec_entry_point) + end else begin + output_epilogue begin fun () -> + add_used_symbol func; + I.jmp (immsym func) + end end - end | Lop(Iextcall { func; alloc; label_after; }) -> + let func = S.create func in add_used_symbol func; if alloc then begin - if system <> S_macosx then - I.mov (immsym func) eax - else begin - external_symbols_indirect := - String.Set.add func !external_symbols_indirect; - I.mov (mem_sym DWORD (Printf.sprintf "L%s$non_lazy_ptr" - (emit_symbol func))) eax - end; + I.mov (immsym func) eax; emit_call "caml_c_call"; record_frame i.live false i.dbg ~label:label_after end else begin - if system <> S_macosx then - emit_call func - else begin - external_symbols_direct := - String.Set.add func !external_symbols_direct; - I.call (sym (Printf.sprintf "L%s$stub" (emit_symbol func))) - end + emit_call func end | Lop(Istackoffset n) -> if n < 0 @@ -916,32 +896,6 @@ let rec emit_all fallthrough i = (system = S_win32 || Linearize.has_fallthrough i.desc) i.next -(* Emission of external symbol references (for MacOSX) *) - -let emit_external_symbol_direct s = - _label (Printf.sprintf "L%s$stub" (emit_symbol s)); - D.indirect_symbol (emit_symbol s); - I.hlt (); I.hlt (); I.hlt (); I.hlt () ; I.hlt () - -let emit_external_symbol_indirect s = - _label (Printf.sprintf "L%s$non_lazy_ptr" (emit_symbol s)); - D.indirect_symbol (emit_symbol s); - D.long (const 0) - -let emit_external_symbols () = - D.section [ "__IMPORT"; "__pointers"] None ["non_lazy_symbol_pointers" ]; - String.Set.iter emit_external_symbol_indirect !external_symbols_indirect; - external_symbols_indirect := String.Set.empty; - D.section [ "__IMPORT"; "__jump_table"] None - [ "symbol_stubs"; "self_modifying_code+pure_instructions"; "5" ]; - String.Set.iter emit_external_symbol_direct !external_symbols_direct; - external_symbols_direct := String.Set.empty; - if !Clflags.gprofile then begin - _label "Lmcount$stub"; - D.indirect_symbol "mcount"; - I.hlt (); I.hlt (); I.hlt () ; I.hlt () ; I.hlt () - end - (* Emission of a function declaration *) let fundecl fundecl = @@ -955,13 +909,7 @@ let fundecl fundecl = D.text (); add_def_symbol fundecl.fun_name; D.align (if system = S_win32 then 4 else 16); - if system = S_macosx - && not !Clflags.output_c_object - && is_generic_function fundecl.fun_name - then (* PR#4690 *) - D.private_extern (emit_symbol fundecl.fun_name) - else - D.global (emit_symbol fundecl.fun_name); + D.global (emit_symbol fundecl.fun_name); D.label (emit_symbol fundecl.fun_name); emit_debug_info fundecl.fun_dbg; cfi_startproc (); @@ -1027,9 +975,7 @@ let begin_assembly() = emit_global_label "data_begin"; D.text (); - emit_global_label "code_begin"; - if system = S_macosx then I.nop (); (* PR#4690 *) - () + emit_global_label "code_begin" let end_assembly() = if !float_constants <> [] then begin @@ -1038,8 +984,6 @@ let end_assembly() = end; D.text (); - if system = S_macosx then I.nop (); - (* suppress "ld warning: atom sorting error" *) emit_global_label "code_end"; @@ -1066,7 +1010,6 @@ let end_assembly() = efa_string = (fun s -> D.bytes (s ^ "\000")) }; - if system = S_macosx then emit_external_symbols (); if system = S_linux_elf then (* Mark stack as non-executable, PR#4564 *) D.section [".note.GNU-stack"] (Some "") ["%progbits"]; diff --git a/asmcomp/linearize.ml b/asmcomp/linearize.ml index 297967a4be75..d1e99f78e027 100644 --- a/asmcomp/linearize.ml +++ b/asmcomp/linearize.ml @@ -50,7 +50,7 @@ let has_fallthrough = function | _ -> true type fundecl = - { fun_name: string; + { fun_name: Backend_sym.t; fun_body: instruction; fun_fast: bool; fun_dbg : Debuginfo.t; diff --git a/asmcomp/linearize.mli b/asmcomp/linearize.mli index e30996fe4161..9682f75e7952 100644 --- a/asmcomp/linearize.mli +++ b/asmcomp/linearize.mli @@ -48,7 +48,7 @@ val instr_cons: val invert_test: Mach.test -> Mach.test type fundecl = - { fun_name: string; + { fun_name: Backend_sym.t; fun_body: instruction; fun_fast: bool; fun_dbg : Debuginfo.t; diff --git a/asmcomp/linking_state.ml b/asmcomp/linking_state.ml new file mode 100644 index 000000000000..a6cbd9eca1e0 --- /dev/null +++ b/asmcomp/linking_state.ml @@ -0,0 +1,75 @@ +(**************************************************************************) +(* *) +(* OCaml *) +(* *) +(* Xavier Leroy, projet Gallium, INRIA Rocquencourt *) +(* Pierre Chambart, OCamlPro *) +(* Mark Shinwell and Leo White, Jane Street Europe *) +(* *) +(* Copyright 2010 Institut National de Recherche en Informatique et *) +(* en Automatique *) +(* Copyright 2013--2016 OCamlPro SAS *) +(* Copyright 2014--2019 Jane Street Group LLC *) +(* *) +(* All rights reserved. This file is distributed under the terms of *) +(* the GNU Lesser General Public License version 2.1, with the *) +(* special exception on linking described in the file LICENSE. *) +(* *) +(**************************************************************************) + +[@@@ocaml.warning "+a-4-30-40-41-42"] + +module Int = Numbers.Int + +type t = { + mutable curry_fun : Int.Set.t; + mutable apply_fun : Int.Set.t; + mutable send_fun : Int.Set.t; + mutable force_link : bool; +} + +let empty = { + curry_fun = Int.Set.empty; + apply_fun = Int.Set.empty; + send_fun = Int.Set.empty; + force_link = false; +} + +let current_unit = empty + +let reset () = + current_unit.curry_fun <- Int.Set.empty; + current_unit.apply_fun <- Int.Set.empty; + current_unit.send_fun <- Int.Set.empty; + current_unit.force_link <- false + +let need_curry_fun n = + current_unit.curry_fun <- Int.Set.add n current_unit.curry_fun + +let need_apply_fun n = + if n <= 0 then begin + Misc.fatal_errorf "Bad argument count for [need_apply_fun]: %d" n + end; + current_unit.apply_fun <- Int.Set.add n current_unit.apply_fun + +let need_send_fun n = + current_unit.send_fun <- Int.Set.add n current_unit.send_fun + +let force_link () = + current_unit.force_link <- true + +module Snapshot = struct + type t = { + curry_fun : Int.Set.t; + apply_fun : Int.Set.t; + send_fun : Int.Set.t; + force_link : bool; + } + + let create () = + { curry_fun = current_unit.curry_fun; + apply_fun = current_unit.apply_fun; + send_fun = current_unit.send_fun; + force_link = current_unit.force_link; + } +end diff --git a/asmcomp/linking_state.mli b/asmcomp/linking_state.mli new file mode 100644 index 000000000000..d10fcac1734b --- /dev/null +++ b/asmcomp/linking_state.mli @@ -0,0 +1,59 @@ +(**************************************************************************) +(* *) +(* OCaml *) +(* *) +(* Xavier Leroy, projet Gallium, INRIA Rocquencourt *) +(* Pierre Chambart, OCamlPro *) +(* Mark Shinwell and Leo White, Jane Street Europe *) +(* *) +(* Copyright 2010 Institut National de Recherche en Informatique et *) +(* en Automatique *) +(* Copyright 2013--2016 OCamlPro SAS *) +(* Copyright 2014--2019 Jane Street Group LLC *) +(* *) +(* All rights reserved. This file is distributed under the terms of *) +(* the GNU Lesser General Public License version 2.1, with the *) +(* special exception on linking described in the file LICENSE. *) +(* *) +(**************************************************************************) + +(** Linking- and startup file-related state that is accumulated prior to + being written into .cmx files. + + This module forms part of the backend of the compiler. It is not + used prior to [Cmmgen]. +*) + +[@@@ocaml.warning "+a-4-30-40-41-42"] + +(** Reset the mutable state in this module, ready for a new "backend + compilation unit" to be compiled. *) +val reset : unit -> unit + +(** Record the need for a currying function with the given arity. *) +val need_curry_fun : int -> unit + +(** Record the need for an application function with the given arity. *) +val need_apply_fun : int -> unit + +(** Record the need for a message-sending function with the given arity. *) +val need_send_fun : int -> unit + +(** Record that the current unit must always be linked. *) +val force_link : unit -> unit + +module Snapshot : sig + type t = private { + curry_fun : Numbers.Int.Set.t; + (** Currying functions needed for the current unit. *) + apply_fun : Numbers.Int.Set.t; + (** Apply functions needed for the current unit. *) + send_fun : Numbers.Int.Set.t; + (** Send functions needed for the current unit. *) + force_link : bool; + (** Whether the current unit must always be linked. *) + } + + (** Take a snapshot of this module's mutable state. *) + val create : unit -> t +end diff --git a/asmcomp/mach.ml b/asmcomp/mach.ml index bfed9f7e6489..4740746bbb34 100644 --- a/asmcomp/mach.ml +++ b/asmcomp/mach.ml @@ -45,12 +45,12 @@ type operation = | Ireload | Iconst_int of nativeint | Iconst_float of int64 - | Iconst_symbol of string + | Iconst_symbol of Backend_sym.t | Icall_ind of { label_after : label; } - | Icall_imm of { func : string; label_after : label; } + | Icall_imm of { func : Backend_sym.t; label_after : label; } | Itailcall_ind of { label_after : label; } - | Itailcall_imm of { func : string; label_after : label; } - | Iextcall of { func : string; alloc : bool; label_after : label; } + | Itailcall_imm of { func : Backend_sym.t; label_after : label; } + | Iextcall of { func : Backend_sym.t; alloc : bool; label_after : label; } | Istackoffset of int | Iload of Cmm.memory_chunk * Arch.addressing_mode | Istore of Cmm.memory_chunk * Arch.addressing_mode * bool @@ -87,14 +87,14 @@ and instruction_desc = | Iraise of Cmm.raise_kind type spacetime_part_of_shape = - | Direct_call_point of { callee : string; } + | Direct_call_point of { callee : Backend_sym.t; } | Indirect_call_point | Allocation_point type spacetime_shape = (spacetime_part_of_shape * Cmm.label) list type fundecl = - { fun_name: string; + { fun_name: Backend_sym.t; fun_args: Reg.t array; fun_body: instruction; fun_codegen_options : Cmm.codegen_option list; diff --git a/asmcomp/mach.mli b/asmcomp/mach.mli index 6ad4cda474ae..fba96b7f29fc 100644 --- a/asmcomp/mach.mli +++ b/asmcomp/mach.mli @@ -52,12 +52,12 @@ type operation = | Ireload | Iconst_int of nativeint | Iconst_float of int64 - | Iconst_symbol of string + | Iconst_symbol of Backend_sym.t | Icall_ind of { label_after : label; } - | Icall_imm of { func : string; label_after : label; } + | Icall_imm of { func : Backend_sym.t; label_after : label; } | Itailcall_ind of { label_after : label; } - | Itailcall_imm of { func : string; label_after : label; } - | Iextcall of { func : string; alloc : bool; label_after : label; } + | Itailcall_imm of { func : Backend_sym.t; label_after : label; } + | Iextcall of { func : Backend_sym.t; alloc : bool; label_after : label; } | Istackoffset of int | Iload of Cmm.memory_chunk * Arch.addressing_mode | Istore of Cmm.memory_chunk * Arch.addressing_mode * bool @@ -103,7 +103,7 @@ and instruction_desc = | Iraise of Cmm.raise_kind type spacetime_part_of_shape = - | Direct_call_point of { callee : string; (* the symbol *) } + | Direct_call_point of { callee : Backend_sym.t; } | Indirect_call_point | Allocation_point @@ -116,7 +116,7 @@ type spacetime_part_of_shape = type spacetime_shape = (spacetime_part_of_shape * Cmm.label) list type fundecl = - { fun_name: string; + { fun_name: Backend_sym.t; fun_args: Reg.t array; fun_body: instruction; fun_codegen_options : Cmm.codegen_option list; diff --git a/asmcomp/object_file.ml b/asmcomp/object_file.ml new file mode 100644 index 000000000000..da56741db987 --- /dev/null +++ b/asmcomp/object_file.ml @@ -0,0 +1,53 @@ +(**************************************************************************) +(* *) +(* OCaml *) +(* *) +(* Mark Shinwell, Jane Street Europe *) +(* *) +(* Copyright 2019 Jane Street Group LLC *) +(* *) +(* All rights reserved. This file is distributed under the terms of *) +(* the GNU Lesser General Public License version 2.1, with the *) +(* special exception on linking described in the file LICENSE. *) +(* *) +(**************************************************************************) + +[@@@ocaml.warning "+a-4-30-40-41-42"] + +type t = + | Current_compilation_unit + | Another_compilation_unit + | Startup + | Shared_startup + | Runtime_and_external_libs + +include Identifiable.Make (struct + type nonrec t = t + + let compare t1 t2 = Stdlib.compare t1 t2 + + let equal t1 t2 = + compare t1 t2 = 0 + + let hash t = Hashtbl.hash t + + let print ppf t = + match t with + | Current_compilation_unit -> + Format.pp_print_string ppf "Current_compilation_unit" + | Another_compilation_unit -> + Format.pp_print_string ppf "Another_compilation_unit" + | Startup -> Format.pp_print_string ppf "Startup" + | Shared_startup -> Format.pp_print_string ppf "Shared_startup" + | Runtime_and_external_libs -> + Format.pp_print_string ppf "Runtime_and_external_libs" + + let output chan t = + print (Format.formatter_of_out_channel chan) t +end) + +let current_compilation_unit = Current_compilation_unit +let another_compilation_unit = Another_compilation_unit +let startup = Startup +let shared_startup = Shared_startup +let runtime_and_external_libs = Runtime_and_external_libs diff --git a/asmcomp/object_file.mli b/asmcomp/object_file.mli new file mode 100644 index 000000000000..cb93ad2b9a8a --- /dev/null +++ b/asmcomp/object_file.mli @@ -0,0 +1,52 @@ +(**************************************************************************) +(* *) +(* OCaml *) +(* *) +(* Mark Shinwell, Jane Street Europe *) +(* *) +(* Copyright 2019 Jane Street Group LLC *) +(* *) +(* All rights reserved. This file is distributed under the terms of *) +(* the GNU Lesser General Public License version 2.1, with the *) +(* special exception on linking described in the file LICENSE. *) +(* *) +(**************************************************************************) + +(** A description as to where, amongst the various (shared) object files + involved in building a particular program, some entity (typically a + symbol) is defined. +*) + +[@@@ocaml.warning "+a-4-30-40-41-42"] + +(** The type of object file descriptions. *) +type t + +(** Printing, comparison, sets, maps, etc. + + When generating code for an object file [(o1 : t)] and emitting a symbol + reference to another object file [(o2 : t)], that symbol reference will + be to an undefined symbol (until such time as relocated by the linker in + the presence of both object files) iff [not (equal o1 o2)]. +*) +include Identifiable.S with type t := t + +(** The object file that holds code and data for the current OCaml compilation + unit. (When packing, there may be more than one object file for a given + compilation unit. However during any one run of the compiler there is + only one; that is the one referred to here.) *) +val current_compilation_unit : t + +(** The group of object files that hold code and data for OCaml compilation + units apart from the current one. *) +val another_compilation_unit : t + +(** The object file holding startup code for an executable. *) +val startup : t + +(** The object file holding startup code for a shared library. *) +val shared_startup : t + +(** The group of object files holding non-OCaml external definitions, for + example code and data in the runtime, or in other libraries. *) +val runtime_and_external_libs : t diff --git a/asmcomp/power/emit.mlp b/asmcomp/power/emit.mlp index f4147c492d0b..44b451b16a90 100644 --- a/asmcomp/power/emit.mlp +++ b/asmcomp/power/emit.mlp @@ -1175,8 +1175,9 @@ let begin_assembly() = sections are in different pages. .opd comes after .data, so aligning .opd is enough. To save space, we do it only for the startup file, not for every OCaml compilation unit. *) - let c = Compilenv.current_unit_name() in - if abi = ELF64v1 && (c = "_startup" || c = "_shared_startup") then begin + let cu = Compilation_unit.get_current_exn () in + if abi = ELF64v1 && Compilation_unit.equal cu Compilation_unit.startup + then begin ` .p2align 12\n` end; declare_global_data lbl_begin; diff --git a/asmcomp/printcmm.ml b/asmcomp/printcmm.ml index fd1cfa37da06..a35404449f79 100644 --- a/asmcomp/printcmm.ml +++ b/asmcomp/printcmm.ml @@ -18,6 +18,7 @@ open Format open Cmm +module S = Backend_sym module V = Backend_var module VP = Backend_var.With_provenance @@ -79,14 +80,14 @@ let raise_kind fmt = function let phantom_defining_expr ppf defining_expr = match defining_expr with | Cphantom_const_int i -> Targetint.print ppf i - | Cphantom_const_symbol sym -> Format.pp_print_string ppf sym + | Cphantom_const_symbol sym -> S.print ppf sym | Cphantom_var var -> V.print ppf var | Cphantom_offset_var { var; offset_in_words; } -> Format.fprintf ppf "%a+(%d)" V.print var offset_in_words | Cphantom_read_field { var; field; } -> Format.fprintf ppf "%a[%d]" V.print var field | Cphantom_read_symbol_field { sym; field; } -> - Format.fprintf ppf "%s[%d]" sym field + Format.fprintf ppf "%a[%d]" S.print sym field | Cphantom_block { tag; fields; } -> Format.fprintf ppf "[%d: " tag; List.iter (fun field -> @@ -102,7 +103,9 @@ let phantom_defining_expr_opt ppf defining_expr = let operation d = function | Capply _ty -> "app" ^ Debuginfo.to_string d | Cextcall(lbl, _ty, _alloc, _) -> - Printf.sprintf "extcall \"%s\"%s" lbl (Debuginfo.to_string d) + Printf.sprintf "extcall \"%s\"%s" + (Backend_sym.to_string lbl) + (Debuginfo.to_string d) | Cload (c, Asttypes.Immutable) -> Printf.sprintf "load %s" (chunk c) | Cload (c, Asttypes.Mutable) -> Printf.sprintf "load_mut %s" (chunk c) | Calloc -> "alloc" ^ Debuginfo.to_string d @@ -150,7 +153,7 @@ let rec expr ppf = function fprintf ppf "block-hdr(%s)%s" (Nativeint.to_string n) (Debuginfo.to_string d) | Cconst_float n -> fprintf ppf "%F" n - | Cconst_symbol s -> fprintf ppf "\"%s\"" s + | Cconst_symbol s -> fprintf ppf "\"%a\"" Backend_sym.print s | Cconst_pointer n -> fprintf ppf "%ia" n | Cconst_natpointer n -> fprintf ppf "%sa" (Nativeint.to_string n) | Cvar id -> V.print ppf id @@ -265,20 +268,20 @@ let fundecl ppf f = if !first then first := false else fprintf ppf "@ "; fprintf ppf "%a: %a" VP.print id machtype ty) cases in - fprintf ppf "@[<1>(function%s %s@;<1 4>@[<1>(%a)@]@ @[%a@])@]@." - (Debuginfo.to_string f.fun_dbg) f.fun_name + fprintf ppf "@[<1>(function%s %a@;<1 4>@[<1>(%a)@]@ @[%a@])@]@." + (Debuginfo.to_string f.fun_dbg) Backend_sym.print f.fun_name print_cases f.fun_args sequence f.fun_body let data_item ppf = function - | Cdefine_symbol s -> fprintf ppf "\"%s\":" s - | Cglobal_symbol s -> fprintf ppf "global \"%s\"" s + | Cdefine_symbol s -> fprintf ppf "\"%a\":" Backend_sym.print s + | Cglobal_symbol s -> fprintf ppf "global \"%a\"" Backend_sym.print s | Cint8 n -> fprintf ppf "byte %i" n | Cint16 n -> fprintf ppf "int16 %i" n | Cint32 n -> fprintf ppf "int32 %s" (Nativeint.to_string n) | Cint n -> fprintf ppf "int %s" (Nativeint.to_string n) | Csingle f -> fprintf ppf "single %F" f | Cdouble f -> fprintf ppf "double %F" f - | Csymbol_address s -> fprintf ppf "addr \"%s\"" s + | Csymbol_address s -> fprintf ppf "addr \"%a\"" Backend_sym.print s | Cstring s -> fprintf ppf "string \"%s\"" s | Cskip n -> fprintf ppf "skip %i" n | Calign n -> fprintf ppf "align %i" n diff --git a/asmcomp/printlinear.ml b/asmcomp/printlinear.ml index 69557687a2cc..dc80ed396910 100644 --- a/asmcomp/printlinear.ml +++ b/asmcomp/printlinear.ml @@ -20,6 +20,8 @@ open Mach open Printmach open Linearize +module S = Backend_sym + let label ppf l = Format.fprintf ppf "L%i" l @@ -82,4 +84,4 @@ let fundecl ppf f = "" else " " ^ Debuginfo.to_string f.fun_dbg in - fprintf ppf "@[%s:%s@,%a@]" f.fun_name dbg all_instr f.fun_body + fprintf ppf "@[%a:%s@,%a@]" S.print f.fun_name dbg all_instr f.fun_body diff --git a/asmcomp/printmach.ml b/asmcomp/printmach.ml index d90e302d5342..1db41ce249b9 100644 --- a/asmcomp/printmach.ml +++ b/asmcomp/printmach.ml @@ -123,13 +123,15 @@ let operation op arg ppf res = | Ireload -> fprintf ppf "%a (reload)" regs arg | Iconst_int n -> fprintf ppf "%s" (Nativeint.to_string n) | Iconst_float f -> fprintf ppf "%F" (Int64.float_of_bits f) - | Iconst_symbol s -> fprintf ppf "\"%s\"" s + | Iconst_symbol s -> fprintf ppf "\"%a\"" Backend_sym.print s | Icall_ind _ -> fprintf ppf "call %a" regs arg - | Icall_imm { func; _ } -> fprintf ppf "call \"%s\" %a" func regs arg + | Icall_imm { func; _ } -> + fprintf ppf "call \"%a\" %a" Backend_sym.print func regs arg | Itailcall_ind _ -> fprintf ppf "tailcall %a" regs arg - | Itailcall_imm { func; } -> fprintf ppf "tailcall \"%s\" %a" func regs arg + | Itailcall_imm { func; } -> + fprintf ppf "tailcall \"%a\" %a" Backend_sym.print func regs arg | Iextcall { func; alloc; _ } -> - fprintf ppf "extcall \"%s\" %a%s" func regs arg + fprintf ppf "extcall \"%a\" %a%s" Backend_sym.print func regs arg (if alloc then "" else " (noalloc)") | Istackoffset n -> fprintf ppf "offset stack %i" n @@ -242,8 +244,8 @@ let fundecl ppf f = "" else " " ^ Debuginfo.to_string f.fun_dbg in - fprintf ppf "@[%s(%a)%s@,%a@]" - f.fun_name regs f.fun_args dbg instr f.fun_body + fprintf ppf "@[%a(%a)%s@,%a@]" + Backend_sym.print f.fun_name regs f.fun_args dbg instr f.fun_body let phase msg ppf f = fprintf ppf "*** %s@.%a@." msg fundecl f diff --git a/asmcomp/selectgen.ml b/asmcomp/selectgen.ml index c4ee9bf7f692..86c5f40d9351 100644 --- a/asmcomp/selectgen.ml +++ b/asmcomp/selectgen.ml @@ -21,11 +21,12 @@ open Reg open Mach module Int = Numbers.Int +module S = Backend_sym module V = Backend_var module VP = Backend_var.With_provenance type environment = - { vars : (Reg.t array * Backend_var.Provenance.t option) V.Map.t; + { vars : (Reg.t array * Provenance.t option) V.Map.t; static_exceptions : Reg.t array list Int.Map.t; (** Which registers must be populated when jumping to the given handler. *) @@ -200,7 +201,12 @@ let join_array rs = Some res (* Name of function being compiled *) -let current_function_name = ref "" +let current_function_name = ref None + +let current_function_is func = + match !current_function_name with + | None -> Misc.fatal_error "[current_function_name] not set" + | Some func' -> S.equal func func' module Effect = struct type t = @@ -1081,7 +1087,7 @@ method emit_tail (env:environment) exp = self#insert_moves r1 loc_arg; self#maybe_emit_spacetime_move ~spacetime_reg; self#insert_debug call dbg loc_arg [||]; - end else if func = !current_function_name then begin + end else if current_function_is func then begin let call = Iop (Itailcall_imm { func; label_after; }) in let loc_arg' = Proc.loc_parameters r1 in let spacetime_reg = @@ -1187,7 +1193,7 @@ method initial_env () = env_empty method emit_fundecl f = Proc.contains_calls := false; - current_function_name := f.Cmm.fun_name; + current_function_name := Some f.Cmm.fun_name; let rargs = List.map (fun (id, ty) -> let r = self#regs_for ty in name_regs id r; r) @@ -1244,4 +1250,4 @@ let _ = Simplif.is_tail_native_heuristic := is_tail_call let reset () = - current_function_name := "" + current_function_name := None diff --git a/asmcomp/spacetime_profiling.ml b/asmcomp/spacetime_profiling.ml index acabf7c04c50..708692fc51d0 100644 --- a/asmcomp/spacetime_profiling.ml +++ b/asmcomp/spacetime_profiling.ml @@ -4,7 +4,7 @@ (* *) (* Mark Shinwell and Leo White, Jane Street Europe *) (* *) -(* Copyright 2015--2017 Jane Street Group LLC *) +(* Copyright 2015--2018 Jane Street Group LLC *) (* *) (* All rights reserved. This file is distributed under the terms of *) (* the GNU Lesser General Public License version 2.1, with the *) @@ -12,6 +12,8 @@ (* *) (**************************************************************************) +open Backend_sym.Names + module V = Backend_var module VP = Backend_var.With_provenance @@ -23,7 +25,7 @@ let index_within_node = ref node_num_header_words arch.ml.) *) let spacetime_node = ref (lazy (Cmm.Cvar (V.create_local "dummy"))) let spacetime_node_ident = ref (lazy (V.create_local "dummy")) -let current_function_label = ref "" +let current_function_label = ref None let direct_tail_call_point_indexes = ref [] let reverse_shape = ref ([] : Mach.spacetime_shape) @@ -54,7 +56,7 @@ let reset ~spacetime_node_ident:ident ~function_label = spacetime_node := lazy (Cmm.Cvar ident); spacetime_node_ident := lazy ident; direct_tail_call_point_indexes := []; - current_function_label := function_label; + current_function_label := Some function_label; reverse_shape := [] let code_for_function_prologue ~function_name ~node_hole = @@ -101,7 +103,7 @@ let code_for_function_prologue ~function_name ~node_hole = Cvar node, Clet (VP.create is_new_node, Clet (VP.create pc, Cconst_symbol function_name, - Cop (Cextcall ("caml_spacetime_allocate_node", + Cop (Cextcall (caml_spacetime_allocate_node, [| Int |], false, None), [Cconst_int (1 (* header *) + !index_within_node); Cvar pc; @@ -138,7 +140,7 @@ let code_for_blockheader ~value's_header ~node ~dbg = the latter table to be used for resolving a program counter at such a point to a location. *) - Cop (Cextcall ("caml_spacetime_generate_profinfo", [| Int |], + Cop (Cextcall (caml_spacetime_generate_profinfo, [| Int |], false, Some label), [Cvar address_of_profinfo; Cconst_int (index_within_node + 1)], @@ -191,7 +193,7 @@ let code_for_blockheader ~value's_header ~node ~dbg = Cop (Cxor, [Cvar profinfo; Cconst_natint value's_header], dbg)))))) type callee = - | Direct of string + | Direct of Backend_sym.t | Indirect of Cmm.expression let code_for_call ~node ~callee ~is_tail ~label = @@ -199,7 +201,11 @@ let code_for_call ~node ~callee ~is_tail ~label = graph. *) let is_self_recursive_call = match callee with - | Direct callee -> callee = !current_function_label + | Direct callee -> + begin match !current_function_label with + | None -> Misc.fatal_error "[current_function_label] not set" + | Some label -> Backend_sym.equal callee label + end | Indirect _ -> false in let is_tail = is_tail || is_self_recursive_call in @@ -252,7 +258,7 @@ let code_for_call ~node ~callee ~is_tail ~label = if is_tail then node else Cconst_int 1 (* [Val_unit] *) in - Cop (Cextcall ("caml_spacetime_indirect_node_hole_ptr", + Cop (Cextcall (caml_spacetime_indirect_node_hole_ptr, [| Int |], false, None), [callee; Cvar place_within_node; caller_node], dbg)) @@ -369,7 +375,7 @@ class virtual instruction_selection = object (self) let label = Cmm.new_label () in let index = next_index_within_node - ~part_of_shape:(Mach.Direct_call_point { callee = "caml_call_gc"; }) + ~part_of_shape:(Mach.Direct_call_point { callee = caml_call_gc; }) ~label in Mach.Ialloc { @@ -398,7 +404,7 @@ class virtual instruction_selection = object (self) let index = next_index_within_node ~part_of_shape:( - Mach.Direct_call_point { callee = "caml_ml_array_bound_error"; }) + Mach.Direct_call_point { callee = caml_ml_array_bound_error; }) ~label in Mach.Icheckbound { diff --git a/asmcomp/target_system.ml b/asmcomp/target_system.ml new file mode 100644 index 000000000000..69ccb5a3d020 --- /dev/null +++ b/asmcomp/target_system.ml @@ -0,0 +1,204 @@ +(**************************************************************************) +(* *) +(* OCaml *) +(* *) +(* Mark Shinwell, Jane Street Europe *) +(* *) +(* Copyright 2017--2018 Jane Street Group LLC *) +(* *) +(* All rights reserved. This file is distributed under the terms of *) +(* the GNU Lesser General Public License version 2.1, with the *) +(* special exception on linking described in the file LICENSE. *) +(* *) +(**************************************************************************) + +[@@@ocaml.warning "+a-4-30-40-41-42"] + +type elf_abi = + | ARM_GNU_EABI + | ARM_GNU_EABI_hard_float + | AArch64 + | IA32 + | POWER_ELF32 + | POWER_ELF64v1 + | POWER_ELF64v2 + | X86_64 + | Z + +type object_file_format_and_abi = + | A_out + | ELF of elf_abi + | Mach_O + | PE + | Unknown + +type windows_system = + | Cygwin + | MinGW + | Native + +type system = + | Linux + | Windows of windows_system + | MacOS_like + | FreeBSD + | NetBSD + | OpenBSD + | Generic_BSD + | Solaris + | Dragonfly + | GNU + | BeOS + | Unknown + +(* Some references remain to Solaris in the configure script, although it + appears that [Config.system] never gets set to "solaris" any more. *) +let (_ : system) = Solaris + +type architecture = + | IA32 + | X86_64 + | ARM + | AArch64 + | POWER + | Z + +type assembler = + | GAS_like + | MacOS + | MASM + +type machine_width = + | Thirty_two + | Sixty_four + +let architecture () = + match Config.architecture with + | "i386" -> IA32 + | "amd64" -> X86_64 + | "arm" -> ARM + | "arm64" -> AArch64 + | "power" -> POWER + | "s390x" -> Z + | arch -> Misc.fatal_errorf "Unknown architecture `%s'" arch + +let system_and_object_file_format_and_abi () + : system * object_file_format_and_abi = + match architecture (), Config.model, Config.system with + | IA32, _, "linux_aout" -> Linux, A_out + | IA32, _, "linux_elf" -> Linux, ELF IA32 + | IA32, _, "bsd_aout" -> Generic_BSD, A_out + | IA32, _, "bsd_elf" -> Generic_BSD, ELF IA32 + | IA32, _, "beos" -> BeOS, ELF IA32 + | IA32, _, "cygwin" -> Windows Cygwin, PE + | (X86_64 | IA32), _, "macosx" -> MacOS_like, Mach_O + | IA32, _, "gnu" -> GNU, ELF IA32 + | IA32, _, "mingw" -> Windows MinGW, PE + | IA32, _, "win32" -> Windows Native, PE + | POWER, "ppc64le", "elf" -> Linux, ELF POWER_ELF64v2 + | POWER, "ppc64", "elf" -> Linux, ELF POWER_ELF64v1 + | POWER, "ppc", "elf" -> Linux, ELF POWER_ELF32 + | POWER, "ppc", "netbsd" -> NetBSD, ELF IA32 + | POWER, "ppc", "bsd_elf" -> OpenBSD, ELF IA32 + | Z, _, "elf" -> Linux, ELF Z + | ARM, _, "linux_eabihf" -> Linux, ELF ARM_GNU_EABI_hard_float + | ARM, _, "linux_eabi" -> Linux, ELF ARM_GNU_EABI + | ARM, _, "bsd" -> OpenBSD, ELF IA32 + | X86_64, _, "linux" -> Linux, ELF X86_64 + | X86_64, _, "gnu" -> GNU, ELF X86_64 + | X86_64, _, "dragonfly" -> Dragonfly, ELF X86_64 + | X86_64, _, "freebsd" -> FreeBSD, ELF X86_64 + | X86_64, _, "netbsd" -> NetBSD, ELF X86_64 + | X86_64, _, "openbsd" -> OpenBSD, ELF X86_64 + | X86_64, _, "darwin" -> MacOS_like, Mach_O + | X86_64, _, "mingw" -> Windows MinGW, PE + | AArch64, _, "linux" -> Linux, ELF AArch64 + | X86_64, _, "cygwin" -> Windows Cygwin, PE + | X86_64, _, "win64" -> Windows Native, PE + | _, _, "unknown" -> Unknown, Unknown + | _, _, _ -> + Misc.fatal_errorf "Cannot determine system type (model %s, system %s): \ + ensure `target_system.ml' matches `configure'" + Config.model Config.system + +let system () = + fst (system_and_object_file_format_and_abi ()) + +let object_file_format_and_abi () = + snd (system_and_object_file_format_and_abi ()) + +let string_of_architecture arch = + match arch with + | IA32 -> "IA32" + | X86_64 -> "X86_64" + | ARM -> "ARM" + | AArch64 -> "AArch64" + | POWER -> "POWER" + | Z -> "Z" + +let linux () = + match system () with + | Linux -> true + | Windows _ + | MacOS_like + | FreeBSD + | NetBSD + | OpenBSD + | Generic_BSD + | Solaris + | GNU + | Dragonfly + | BeOS + | Unknown -> false + +let windows () = + match system () with + | Windows _ -> true + | Linux + | MacOS_like + | FreeBSD + | NetBSD + | OpenBSD + | Generic_BSD + | Solaris + | GNU + | Dragonfly + | BeOS + | Unknown -> false + +let assembler () = + match system () with + | Windows Native -> MASM + | MacOS_like -> MacOS + | Linux + | Windows _ + | FreeBSD + | NetBSD + | OpenBSD + | Generic_BSD + | Solaris + | GNU + | Dragonfly + | BeOS + | Unknown -> GAS_like + +let machine_width () = + match Targetint.size with + | 32 -> Thirty_two + | 64 -> Sixty_four + | bits -> Misc.fatal_errorf "Unknown machine width: %d" bits + +let win32 () = + match system (), machine_width () with + | Windows Native, Thirty_two -> true + | _, _ -> false + +let win64 () = + match system (), machine_width () with + | Windows Native, Sixty_four -> true + | _, _ -> false + +let macos_like () = + match system () with + | MacOS_like -> true + | _ -> false diff --git a/asmcomp/target_system.mli b/asmcomp/target_system.mli new file mode 100644 index 000000000000..47638828bc69 --- /dev/null +++ b/asmcomp/target_system.mli @@ -0,0 +1,107 @@ +(**************************************************************************) +(* *) +(* OCaml *) +(* *) +(* Mark Shinwell, Jane Street Europe *) +(* *) +(* Copyright 2017--2018 Jane Street Group LLC *) +(* *) +(* All rights reserved. This file is distributed under the terms of *) +(* the GNU Lesser General Public License version 2.1, with the *) +(* special exception on linking described in the file LICENSE. *) +(* *) +(**************************************************************************) + +(** Types corresponding to the compiler's target machine. *) + +[@@@ocaml.warning "+a-4-30-40-41-42"] + +type elf_abi = private + | ARM_GNU_EABI + | ARM_GNU_EABI_hard_float + | AArch64 + | IA32 + | POWER_ELF32 + | POWER_ELF64v1 + | POWER_ELF64v2 + | X86_64 + | Z + +type object_file_format_and_abi = private + | A_out + | ELF of elf_abi + | Mach_O + | PE + | Unknown + +type windows_system = private + | Cygwin + | MinGW + | Native + +type system = private + | Linux + | Windows of windows_system + | MacOS_like + | FreeBSD + | NetBSD + | OpenBSD + | Generic_BSD + | Solaris + | Dragonfly + | GNU + | BeOS + | Unknown + +type architecture = private + | IA32 + | X86_64 + | ARM + | AArch64 + | POWER + | Z + +type assembler = private + | GAS_like + | MacOS + | MASM + +type machine_width = + | Thirty_two + | Sixty_four + +(** The target system of the OCaml compiler. *) +val system : unit -> system + +(** The target object file format and ABI of the OCaml compiler. *) +val object_file_format_and_abi : unit -> object_file_format_and_abi + +(** Whether the target system is a Linux platform. *) +val linux : unit -> bool + +(** Whether the target system is a Windows platform. *) +val windows : unit -> bool + +(** Whether the target system is a Windows 32-bit native platform (not + MinGW or Cygwin). *) +val win32 : unit -> bool + +(** Whether the target system is a Windows 64-bit native platform (not + MinGW or Cygwin). *) +val win64 : unit -> bool + +(** Whether the target system is Mac OS X, macOS, or some other system + running a Darwin kernel and associated userland tools. *) +val macos_like : unit -> bool + +(** The architecture of the target system. *) +val architecture : unit -> architecture + +(** Convert an architecture to a string. *) +val string_of_architecture : architecture -> string + +(** The assembler being used. *) +val assembler : unit -> assembler + +(** The natural machine width of the target system. *) +val machine_width : unit -> machine_width diff --git a/bytecomp/bytelink.ml b/bytecomp/bytelink.ml index 17d35d35f79a..5536432f0f4c 100644 --- a/bytecomp/bytelink.ml +++ b/bytecomp/bytelink.ml @@ -159,6 +159,8 @@ let scan_file obj_name tolink = (* Consistency check between interfaces *) +module Consistbl = Consistbl.Make (Misc.Stdlib.String) + let crc_interfaces = Consistbl.create () let interfaces = ref ([] : string list) let implementations_defined = ref ([] : (string * string) list) diff --git a/middle_end/debuginfo.ml b/bytecomp/debuginfo.ml similarity index 100% rename from middle_end/debuginfo.ml rename to bytecomp/debuginfo.ml diff --git a/middle_end/debuginfo.mli b/bytecomp/debuginfo.mli similarity index 100% rename from middle_end/debuginfo.mli rename to bytecomp/debuginfo.mli diff --git a/configure.ac b/configure.ac index 39ec72ffc89a..b5c074ff9e4d 100644 --- a/configure.ac +++ b/configure.ac @@ -751,7 +751,6 @@ AS_IF([test x"$enable_shared" != "xno"], [[i[3456]86-*-linux*]], [natdynlink=true], [[i[3456]86-*-gnu*]], [natdynlink=true], [[x86_64-*-linux*]], [natdynlink=true], - [[i[3456]86-*-darwin*]], [AS_IF([$arch64], [natdynlink=true])], [x86_64-*-darwin*], [natdynlink=true], [s390x*-*-linux*], [natdynlink=true], [powerpc*-*-linux*], [natdynlink=true], @@ -793,8 +792,6 @@ AS_CASE([$host], [arch=i386; system=beos], [[i[3456]86-*-cygwin]], [arch=i386; system=cygwin], - [[i[3456]86-*-darwin*]], - [AS_IF([$arch64], [arch=amd64], [arch=i386]); system=macosx], [[i[3456]86-*-gnu*]], [arch=i386; system=gnu], [[i[3456]86-*-mingw32]], diff --git a/debugger/.depend b/debugger/.depend index 841f8fe275a4..653962e14cc2 100644 --- a/debugger/.depend +++ b/debugger/.depend @@ -295,7 +295,7 @@ main.cmo : \ debugger_config.cmi \ ../utils/config.cmi \ command_line.cmi \ - ../typing/cmi_format.cmi \ + ../file_formats/cmi_format.cmi \ ../utils/clflags.cmi \ checkpoints.cmi main.cmx : \ @@ -317,7 +317,7 @@ main.cmx : \ debugger_config.cmx \ ../utils/config.cmx \ command_line.cmx \ - ../typing/cmi_format.cmx \ + ../file_formats/cmi_format.cmx \ ../utils/clflags.cmx \ checkpoints.cmx parameters.cmo : \ diff --git a/debugger/Makefile b/debugger/Makefile index 793c7b6b68db..e3f10585b7d7 100644 --- a/debugger/Makefile +++ b/debugger/Makefile @@ -33,7 +33,7 @@ DEPFLAGS=-slash DEPINCLUDES=$(INCLUDES) DIRECTORIES=$(UNIXDIR) $(addprefix $(ROOTDIR)/,\ - utils parsing typing bytecomp toplevel driver) + utils parsing typing bytecomp toplevel driver file_formats) INCLUDES=$(addprefix -I ,$(DIRECTORIES)) @@ -45,9 +45,12 @@ parsing_modules := $(addprefix parsing/,\ location longident docstrings syntaxerr ast_helper ast_mapper ast_iterator \ attr_helper builtin_attributes pprintast) +file_formats_modules := $(addprefix file_formats/,\ + cmi_format) + typing_modules := $(addprefix typing/,\ ident path types btype primitive typedtree subst predef datarepr \ - cmi_format persistent_env env oprint ctype printtyp mtype envaux) + persistent_env env oprint ctype printtyp mtype envaux) bytecomp_modules := $(addprefix bytecomp/,\ runtimedef bytesections dll meta symtable opcodes) @@ -57,8 +60,8 @@ other_compiler_modules := driver/compdynlink_types \ driver/compdynlink_common driver/compdynlink toplevel/genprintval compiler_modules := $(addprefix $(ROOTDIR)/,\ - $(utils_modules) $(parsing_modules) $(typing_modules) \ - $(bytecomp_modules) $(other_compiler_modules)) + $(utils_modules) $(parsing_modules) $(file_formats_modules) \ + $(typing_modules) $(bytecomp_modules) $(other_compiler_modules)) debugger_modules := \ int64ops primitives unix_tools debugger_config parameters lexer \ diff --git a/driver/optcompile.ml b/driver/optcompile.ml index 85c655e96d3f..4bcdc7982587 100644 --- a/driver/optcompile.ml +++ b/driver/optcompile.ml @@ -15,9 +15,15 @@ (** The batch compiler *) +[@@@ocaml.warning "-40"] + open Misc open Compile_common +module CU = Compilation_unit +module UI = Cmx_format.Unit_info +module UIL = Cmx_format.Unit_info_link_time + let tool_name = "ocamlopt" let with_info = @@ -31,6 +37,38 @@ let (|>>) (x, y) f = (x, f y) (** Native compilation backend for .ml files. *) +let write_cmx_file filename = + let imports_cmi = + (* CR-someday mshinwell: Replace type "modname" everywhere with a new type, + in its own module, such module to supercede [Compilation_unit.Name]. *) + List.fold_left (fun imports (modname, digest_opt) -> + let modname = CU.Name.of_string modname in + CU.Name.Map.add modname digest_opt imports) + CU.Name.Map.empty + (Env.imports ()) + in + let unit_info = + let compilation_state = Compilation_state.Snapshot.create () in + let unit = compilation_state.unit in + let defines = compilation_state.defines in + let imports_cmx = compilation_state.imports_cmx in + let export_info : UI.export_info = + match compilation_state.export_info with + | Closure approx -> Closure approx + | Flambda export_info -> Flambda export_info + in + UI.create ~unit ~defines ~imports_cmi ~imports_cmx ~export_info + in + let unit_info_link_time = + let linking_state = Linking_state.Snapshot.create () in + let curry_fun = linking_state.curry_fun in + let apply_fun = linking_state.apply_fun in + let send_fun = linking_state.send_fun in + let force_link = linking_state.force_link in + UIL.create ~curry_fun ~apply_fun ~send_fun ~force_link + in + Cmx_format.save unit_info unit_info_link_time ~filename + let flambda i backend typed = if !Clflags.classic_inlining then begin Clflags.default_simplify_rounds := 1; @@ -48,20 +86,24 @@ let flambda i backend typed = |>> print_if i.ppf_dump Clflags.dump_rawlambda Printlambda.lambda |>> Simplif.simplify_lambda i.source_file |>> print_if i.ppf_dump Clflags.dump_lambda Printlambda.lambda - |> (fun ((module_ident, size), lam) -> - Middle_end.middle_end - ~ppf_dump:i.ppf_dump - ~prefixname:i.output_prefix - ~size - ~filename:i.source_file - ~module_ident + |> (fun ((module_ident, main_module_block_size), code) -> + let program : Lambda.program = + { module_ident; + main_module_block_size; + required_globals; + code; + } + in + Asmgen.compile_implementation ~backend - ~module_initializer:lam) - |> Asmgen.compile_implementation_flambda - i.output_prefix ~required_globals ~backend ~ppf_dump:i.ppf_dump; - Compilenv.save_unit_info (cmx i)) + ~filename:i.source_file + ~prefixname:i.output_prefix + ~middle_end:Flambda_middle_end.lambda_to_clambda + ~ppf_dump:i.ppf_dump + program); + write_cmx_file (cmx i)) -let clambda i typed = +let closure i backend typed = Clflags.use_inlining_arguments_set Clflags.classic_arguments; typed |> Profile.(record transl) @@ -72,16 +114,29 @@ let clambda i typed = let code = Simplif.simplify_lambda i.source_file program.Lambda.code in { program with Lambda.code } |> print_if i.ppf_dump Clflags.dump_lambda Printlambda.program - |> Asmgen.compile_implementation_clambda - i.output_prefix ~ppf_dump:i.ppf_dump; - Compilenv.save_unit_info (cmx i)) + |> Asmgen.compile_implementation + ~backend + ~filename:i.source_file + ~prefixname:i.output_prefix + ~middle_end:Closure_middle_end.lambda_to_clambda + ~ppf_dump:i.ppf_dump; + write_cmx_file (cmx i)) let implementation ~backend ~source_file ~output_prefix = let backend info typed = - Compilenv.reset ?packname:!Clflags.for_package info.module_name; - if Config.flambda - then flambda info backend typed - else clambda info typed + let compilation_unit = + let for_pack_prefix = + match !Clflags.for_package with + | None | Some "" -> [] + | Some for_pack_prefix -> + List.map CU.Name.of_string (String.split_on_char '.' for_pack_prefix) + in + CU.create ~for_pack_prefix (CU.Name.of_string info.module_name) + in + CU.set_current compilation_unit; + Compilation_state.reset compilation_unit; + Linking_state.reset (); + (if Config.flambda then flambda else closure) info backend typed in - with_info ~source_file ~output_prefix ~dump_ext:"cmx" @@ fun info -> - Compile_common.implementation info ~backend + with_info ~source_file ~output_prefix ~dump_ext:"cmx" + (fun info -> Compile_common.implementation info ~backend) diff --git a/driver/optcompile.mli b/driver/optcompile.mli index 27cd1e0d6fd0..bdb9647da698 100644 --- a/driver/optcompile.mli +++ b/driver/optcompile.mli @@ -23,10 +23,11 @@ val implementation: (** {2 Internal functions} **) -val clambda : +val closure : Compile_common.info -> + (module Backend_intf.S) -> Typedtree.structure * Typedtree.module_coercion -> unit -(** [clambda info typed] applies the regular compilation pipeline to the +(** [closure info typed] applies the Closure compilation pipeline to the given typechecked implementation and outputs the resulting files. *) diff --git a/driver/optmain.ml b/driver/optmain.ml index b6881571d745..0ef856873db9 100644 --- a/driver/optmain.ml +++ b/driver/optmain.ml @@ -19,12 +19,6 @@ open Compenv module Backend = struct (* See backend_intf.mli. *) - let symbol_for_global' = Compilenv.symbol_for_global' - let closure_symbol = Compilenv.closure_symbol - - let really_import_approx = Import_approx.really_import_approx - let import_symbol = Import_approx.import_symbol - let size_int = Arch.size_int let big_endian = Arch.big_endian diff --git a/typing/cmi_format.ml b/file_formats/cmi_format.ml similarity index 100% rename from typing/cmi_format.ml rename to file_formats/cmi_format.ml diff --git a/typing/cmi_format.mli b/file_formats/cmi_format.mli similarity index 100% rename from typing/cmi_format.mli rename to file_formats/cmi_format.mli diff --git a/bytecomp/cmo_format.mli b/file_formats/cmo_format.mli similarity index 100% rename from bytecomp/cmo_format.mli rename to file_formats/cmo_format.mli diff --git a/typing/cmt_format.ml b/file_formats/cmt_format.ml similarity index 100% rename from typing/cmt_format.ml rename to file_formats/cmt_format.ml diff --git a/typing/cmt_format.mli b/file_formats/cmt_format.mli similarity index 100% rename from typing/cmt_format.mli rename to file_formats/cmt_format.mli diff --git a/file_formats/cmx_format.ml b/file_formats/cmx_format.ml new file mode 100644 index 000000000000..58964c53e929 --- /dev/null +++ b/file_formats/cmx_format.ml @@ -0,0 +1,153 @@ +(**************************************************************************) +(* *) +(* OCaml *) +(* *) +(* Xavier Leroy, projet Gallium, INRIA Rocquencourt *) +(* Pierre Chambart, OCamlPro *) +(* Mark Shinwell and Leo White, Jane Street Europe *) +(* *) +(* Copyright 2010 Institut National de Recherche en Informatique et *) +(* en Automatique *) +(* Copyright 2013--2016 OCamlPro SAS *) +(* Copyright 2014--2019 Jane Street Group LLC *) +(* *) +(* All rights reserved. This file is distributed under the terms of *) +(* the GNU Lesser General Public License version 2.1, with the *) +(* special exception on linking described in the file LICENSE. *) +(* *) +(**************************************************************************) + +[@@@ocaml.warning "+a-4-30-40-41-42"] + +module Int = Numbers.Int + +type error = + | Not_a_cmx_file of { filename : string; } + | Corrupted_cmx_file of { filename : string; } + +exception Error of error + +module Error = struct + type t = error = + | Not_a_cmx_file of { filename : string; } + | Corrupted_cmx_file of { filename : string; } + + let report_error ppf = function + | Not_a_cmx_file { filename; } -> + Format.fprintf ppf "%a@ is not a compilation unit description." + Location.print_filename filename + | Corrupted_cmx_file { filename; } -> + Format.fprintf ppf "Corrupted compilation unit description@ %a" + Location.print_filename filename + + let () = + Location.register_error_of_exn + (function + | Error err -> Some (Location.error_of_printer_file report_error err) + | _ -> None + ) +end + +module Unit_info = struct + type export_info = + | Closure of Clambda.value_approximation + | Flambda of Export_info.t + + type t = { + unit : Compilation_unit.t; + defines : Compilation_unit.t list; + imports_cmi : Digest.t option Compilation_unit.Name.Map.t; + imports_cmx : Digest.t option Compilation_unit.Map.t; + export_info : export_info; + } + + let create ~unit ~defines ~imports_cmi ~imports_cmx ~export_info = + { unit; + defines; + imports_cmi; + imports_cmx; + export_info; + } + + let unit t = t.unit + let defines t = t.defines + let imports_cmi t = t.imports_cmi + let imports_cmx t = t.imports_cmx + let export_info t = t.export_info + + let with_export_info t export_info = + { t with + export_info; + } +end + +module Unit_info_link_time = struct + type t = { + curry_fun : Int.Set.t; + apply_fun : Int.Set.t; + send_fun : Int.Set.t; + force_link : bool; + } + + let create ~curry_fun ~apply_fun ~send_fun ~force_link = + { curry_fun; + apply_fun; + send_fun; + force_link; + } + + let curry_fun t = t.curry_fun + let apply_fun t = t.apply_fun + let send_fun t = t.send_fun + let force_link t = t.force_link + + let with_force_link t ~force_link = + { t with + force_link; + } + + let join ts = + let curry_fun = Int.Set.union_list (List.map curry_fun ts) in + let apply_fun = Int.Set.union_list (List.map apply_fun ts) in + let send_fun = Int.Set.union_list (List.map send_fun ts) in + let force_link = List.exists force_link ts in + { curry_fun; + apply_fun; + send_fun; + force_link; + } +end + +let load ~filename = + let ic = open_in_bin filename in + try + let buffer = + really_input_string ic (String.length Config.cmx_magic_number) + in + if buffer <> Config.cmx_magic_number then begin + close_in ic; + raise (Error (Not_a_cmx_file { filename; })) + end; + let unit_info = (input_value ic : Unit_info.t) in + let unit_info_link_time = (input_value ic : Unit_info_link_time.t) in + let crc = Digest.input ic in + close_in ic; + unit_info, unit_info_link_time, crc + with End_of_file | Failure _ -> + close_in ic; + raise (Error (Corrupted_cmx_file { filename; })) + +(* CR-someday mshinwell: Consider rearranging things so we can load only + the compilation part + CRC. *) +let load_compile_time_info ~filename = + let unit_info, _unit_info_link_time, crc = load ~filename in + unit_info, crc + +let save unit_info unit_info_link_time ~filename = + Misc.protect_writing_to_file ~filename ~f:(fun oc -> + output_string oc Config.cmx_magic_number; + output_value oc unit_info; + output_value oc unit_info_link_time; + flush oc; + let crc = Digest.file filename in + Digest.output oc crc) diff --git a/file_formats/cmx_format.mli b/file_formats/cmx_format.mli new file mode 100644 index 000000000000..403820b1e9c8 --- /dev/null +++ b/file_formats/cmx_format.mli @@ -0,0 +1,134 @@ +(**************************************************************************) +(* *) +(* OCaml *) +(* *) +(* Xavier Leroy, projet Gallium, INRIA Rocquencourt *) +(* Pierre Chambart, OCamlPro *) +(* Mark Shinwell and Leo White, Jane Street Europe *) +(* *) +(* Copyright 2010 Institut National de Recherche en Informatique et *) +(* en Automatique *) +(* Copyright 2013--2016 OCamlPro SAS *) +(* Copyright 2014--2019 Jane Street Group LLC *) +(* *) +(* All rights reserved. This file is distributed under the terms of *) +(* the GNU Lesser General Public License version 2.1, with the *) +(* special exception on linking described in the file LICENSE. *) +(* *) +(**************************************************************************) + +(** The format of .cmx files. *) + +[@@@ocaml.warning "+a-4-30-40-41-42"] + +(* CR mshinwell: update comment *) +(** Each .o file has a matching .cmx file that provides the following info + on the compilation unit: + - list of other units imported, with MD5s of their .cmx files + - for Closure mode, approximation of the structure implemented + (includes descriptions of known functions: arity and direct entry + points) + - for Flambda mode, term language information for inlining etc. + - list of currying functions and application functions needed + The .cmx file contains this info (as an externed record) plus a MD5 + of this info. *) +module Unit_info : sig + type export_info = + | Closure of Clambda.value_approximation + | Flambda of Export_info.t + + type t + + (** Create a description of a compilation unit. The parameters correspond + to the names of the accessor functions below. + + Information that is only needed for linking is separated out into + [Unit_info_link_time], below. *) + val create + : unit:Compilation_unit.t + -> defines:Compilation_unit.t list + (* CR-someday mshinwell: Change [imports_cmi] to use + [Compilation_unit.Map.t] after insisting that .cmi files are produced + with a "-for-pack" option (see CR in compilation_state.ml). *) + -> imports_cmi:Digest.t option Compilation_unit.Name.Map.t + -> imports_cmx:Digest.t option Compilation_unit.Map.t + -> export_info:export_info + -> t + + (** The unit implemented, along with any -for-pack prefix. *) + val unit : t -> Compilation_unit.t + + (** (Sub-)units implemented, in initialisation order, with the first to be + initialised at the head of the list. *) + val defines : t -> Compilation_unit.t list + + (** Interfaces imported. *) + val imports_cmi : t -> Digest.t option Compilation_unit.Name.Map.t + + (** Info imported. *) + val imports_cmx : t -> Digest.t option Compilation_unit.Map.t + + (** Term language information, e.g. for inlining. *) + val export_info : t -> export_info + + (** Return a new unit info structure with the given export info. *) + val with_export_info : t -> export_info -> t +end + +module Unit_info_link_time : sig + type t + + (** Create a description, containing information required at link time + (rather than compile time), of a compilation unit. *) + val create + : curry_fun:Numbers.Int.Set.t + -> apply_fun:Numbers.Int.Set.t + -> send_fun:Numbers.Int.Set.t + -> force_link:bool + -> t + + (** Currying functions needed. *) + val curry_fun : t -> Numbers.Int.Set.t + + (** Apply functions needed. *) + val apply_fun : t -> Numbers.Int.Set.t + + (** Send functions needed. *) + val send_fun : t -> Numbers.Int.Set.t + + (** Whether the unit must always be linked. *) + val force_link : t -> bool + + (** Return a new unit info structure with the given force-link property. *) + val with_force_link : t -> force_link:bool -> t + + (** A description that provides at least as much information as all of the + given descriptions. (Used for example when forming a pack.) *) + val join : t list -> t +end + +module Error : sig + (** Errors raised when using the below functions. *) + type t = private + | Not_a_cmx_file of { filename : string; } + | Corrupted_cmx_file of { filename : string; } + + (** Print the given error message on the given formatter. *) + val report_error : Format.formatter -> t -> unit +end + +(** Exceptions that hold errors raised from the below functions. *) +exception Error of Error.t + +(** Load unit information from a .cmx file. *) +val load : filename:string -> Unit_info.t * Unit_info_link_time.t * Digest.t + +(** Load unit information, except link-time information, from a .cmx file. *) +val load_compile_time_info : filename:string -> Unit_info.t * Digest.t + +(** Save unit information to a .cmx file. *) +val save + : Unit_info.t + -> Unit_info_link_time.t + -> filename:string + -> unit diff --git a/file_formats/cmxa_format.ml b/file_formats/cmxa_format.ml new file mode 100644 index 000000000000..e8476f407a39 --- /dev/null +++ b/file_formats/cmxa_format.ml @@ -0,0 +1,77 @@ +(**************************************************************************) +(* *) +(* OCaml *) +(* *) +(* Xavier Leroy, projet Gallium, INRIA Rocquencourt *) +(* Pierre Chambart, OCamlPro *) +(* Mark Shinwell and Leo White, Jane Street Europe *) +(* *) +(* Copyright 2010 Institut National de Recherche en Informatique et *) +(* en Automatique *) +(* Copyright 2013--2016 OCamlPro SAS *) +(* Copyright 2014--2019 Jane Street Group LLC *) +(* *) +(* All rights reserved. This file is distributed under the terms of *) +(* the GNU Lesser General Public License version 2.1, with the *) +(* special exception on linking described in the file LICENSE. *) +(* *) +(**************************************************************************) + +[@@@ocaml.warning "+a-4-30-40-41-42"] + +type error = + | Not_a_cmxa_file of { filename : string; } + +module Error = struct + type t = error = + | Not_a_cmxa_file of { filename : string; } + + let report_error ppf = function + | Not_a_cmxa_file { filename; } -> + Format.fprintf ppf "%a@ is not a library description (.cmxa file)." + Location.print_filename filename +end + +exception Error of error + +let () = + Location.register_error_of_exn (function + | Error err -> + Some (Location.error_of_printer_file Error.report_error err) + | _ -> None) + +module Library_info = struct + type t = { + units : (Cmx_format.Unit_info.t * Cmx_format.Unit_info_link_time.t + * Digest.t) list; + ccobjs : string list; + ccopts : string list; + } + + let create ~units ~ccobjs ~ccopts = + { units; + ccobjs; + ccopts; + } + + let units t = t.units + let ccobjs t = t.ccobjs + let ccopts t = t.ccopts +end + +let load ~filename = + let ic = open_in_bin filename in + let buffer = + really_input_string ic (String.length Config.cmxa_magic_number) + in + if buffer <> Config.cmxa_magic_number then begin + raise (Error (Not_a_cmxa_file { filename; })) + end; + let t = (input_value ic : Library_info.t) in + close_in ic; + t + +let save t ~filename = + Misc.protect_writing_to_file ~filename ~f:(fun outchan -> + output_string outchan Config.cmxa_magic_number; + output_value outchan t) diff --git a/file_formats/cmxa_format.mli b/file_formats/cmxa_format.mli new file mode 100644 index 000000000000..4dc427a917ba --- /dev/null +++ b/file_formats/cmxa_format.mli @@ -0,0 +1,68 @@ +(**************************************************************************) +(* *) +(* OCaml *) +(* *) +(* Xavier Leroy, projet Gallium, INRIA Rocquencourt *) +(* Pierre Chambart, OCamlPro *) +(* Mark Shinwell and Leo White, Jane Street Europe *) +(* *) +(* Copyright 2010 Institut National de Recherche en Informatique et *) +(* en Automatique *) +(* Copyright 2013--2016 OCamlPro SAS *) +(* Copyright 2014--2019 Jane Street Group LLC *) +(* *) +(* All rights reserved. This file is distributed under the terms of *) +(* the GNU Lesser General Public License version 2.1, with the *) +(* special exception on linking described in the file LICENSE. *) +(* *) +(**************************************************************************) + +(** The format of .cmxa files. *) + +[@@@ocaml.warning "+a-4-30-40-41-42"] + +(** Each .a library has a matching .cmxa file that provides the following info + on the library. *) +module Library_info : sig + type t + + (** Create a library description. The parameter names correspond to those + of the accessors below. *) + val create + : units:(Cmx_format.Unit_info.t * Cmx_format.Unit_info_link_time.t + * Digest.t) list + -> ccobjs:string list + -> ccopts:string list + -> t + + (** List of units' info w/ MD5s. *) + val units + : t + -> (Cmx_format.Unit_info.t + * Cmx_format.Unit_info_link_time.t + * Digest.t) list + + (** C object files needed. *) + val ccobjs : t -> string list + + (** Extra options to pass to the C compiler. *) + val ccopts : t -> string list +end + +module Error : sig + (** Errors raised when using the below functions. *) + type t = private + | Not_a_cmxa_file of { filename : string; } + + (** Print the given error message on the given formatter. *) + val report_error : Format.formatter -> t -> unit +end + +(** Exceptions that hold errors raised from the below functions. *) +exception Error of Error.t + +(** Load library information from a .cmxa file. *) +val load : filename:string -> Library_info.t + +(** Save library information to a channel .cmxa file. *) +val save : Library_info.t -> filename:string -> unit diff --git a/file_formats/cmxs_format.ml b/file_formats/cmxs_format.ml new file mode 100644 index 000000000000..61bf2645ed04 --- /dev/null +++ b/file_formats/cmxs_format.ml @@ -0,0 +1,59 @@ +(**************************************************************************) +(* *) +(* OCaml *) +(* *) +(* Xavier Leroy, projet Gallium, INRIA Rocquencourt *) +(* Pierre Chambart, OCamlPro *) +(* Mark Shinwell and Leo White, Jane Street Europe *) +(* *) +(* Copyright 2010 Institut National de Recherche en Informatique et *) +(* en Automatique *) +(* Copyright 2013--2016 OCamlPro SAS *) +(* Copyright 2014--2019 Jane Street Group LLC *) +(* *) +(* All rights reserved. This file is distributed under the terms of *) +(* the GNU Lesser General Public License version 2.1, with the *) +(* special exception on linking described in the file LICENSE. *) +(* *) +(**************************************************************************) + +[@@@ocaml.warning "+a-4-30-40-41-42"] + +module Dynunit_info = struct + type t = { + unit : Compilation_unit.t; + crc : Digest.t; + imports_cmi : Digest.t option Compilation_unit.Name.Map.t; + imports_cmx : Digest.t option Compilation_unit.Map.t; + defines : Compilation_unit.t list; + } + + let create ~unit ~crc ~imports_cmi ~imports_cmx ~defines = + { unit; + crc; + imports_cmi; + imports_cmx; + defines; + } + + let unit t = t.unit + let crc t = t.crc + let imports_cmi t = t.imports_cmi + let imports_cmx t = t.imports_cmx + let defines t = t.defines +end + +module Dynheader_info = struct + type t = { + magic : string; + units : Dynunit_info.t list; + } + + let create ~units = + { magic = Config.cmxs_magic_number; + units; + } + + let magic t = t.magic + let units t = t.units +end diff --git a/file_formats/cmxs_format.mli b/file_formats/cmxs_format.mli new file mode 100644 index 000000000000..5da0f427ea62 --- /dev/null +++ b/file_formats/cmxs_format.mli @@ -0,0 +1,68 @@ +(**************************************************************************) +(* *) +(* OCaml *) +(* *) +(* Xavier Leroy, projet Gallium, INRIA Rocquencourt *) +(* Pierre Chambart, OCamlPro *) +(* Mark Shinwell and Leo White, Jane Street Europe *) +(* *) +(* Copyright 2010 Institut National de Recherche en Informatique et *) +(* en Automatique *) +(* Copyright 2013--2016 OCamlPro SAS *) +(* Copyright 2014--2019 Jane Street Group LLC *) +(* *) +(* All rights reserved. This file is distributed under the terms of *) +(* the GNU Lesser General Public License version 2.1, with the *) +(* special exception on linking described in the file LICENSE. *) +(* *) +(**************************************************************************) + +(** The format of .cmxs files. *) + +[@@@ocaml.warning "+a-4-30-40-41-42"] + +(** A description of one compilation unit within a dynamically-loaded plugin. *) +module Dynunit_info : sig + type t + + (** Create a compilation unit description. The parameter names correspond + to those of the accessors below. *) + val create + : unit:Compilation_unit.t + -> crc:Digest.t + -> imports_cmi:Digest.t option Compilation_unit.Name.Map.t + -> imports_cmx:Digest.t option Compilation_unit.Map.t + -> defines:Compilation_unit.t list + -> t + + (** The unit implemented, along with any -for-pack prefix. *) + val unit : t -> Compilation_unit.t + + (** Checksum of the implementation. *) + val crc : t -> Digest.t + + (** Interfaces imported. *) + val imports_cmi : t -> Digest.t option Compilation_unit.Name.Map.t + + (** Unit information imported. *) + val imports_cmx : t -> Digest.t option Compilation_unit.Map.t + + (** (Sub-)units implemented, in initialisation order, with the first to be + initialised at the head of the list. *) + val defines : t -> Compilation_unit.t list +end + +(** Each .cmxs dynamically-loaded plugin contains a symbol "caml_plugin_header" + containing the following info (as an externed record). *) +module Dynheader_info : sig + type t + + (** Create a plugin header description given the units in the plugin. *) + val create : units:Dynunit_info.t list -> t + + (** The .cmxs magic number at the time the given plugin was produced. *) + val magic : t -> string + + (** The list of units in the given plugin. *) + val units : t -> Dynunit_info.t list +end diff --git a/manual/manual/cmds/unified-options.etex b/manual/manual/cmds/unified-options.etex index bb543426bbcc..30a1d8cf0206 100644 --- a/manual/manual/cmds/unified-options.etex +++ b/manual/manual/cmds/unified-options.etex @@ -235,9 +235,9 @@ constructed with "-pack". For instance, {\machine\ocamlx\ -for-pack\ P\ -c\ A.ml} will generate {\machine a.\cmo}\nat{ and "a.o" files} that can later be used with {\machine \ocamlx\ -pack\ -o\ P\cmo\ a\cmo}. -Note: you can still pack a module that was compiled without -"-for-pack" but in this case exceptions will be printed with the wrong -names. +Note: for bytecode compilation, you can still pack a module that was +compiled without "-for-pack", but in this case exceptions will be printed +with the wrong names. }%notop \notop{% diff --git a/middle_end/backend_intf.mli b/middle_end/backend_intf.mli index c9e009283cf3..16bff29c2b3f 100644 --- a/middle_end/backend_intf.mli +++ b/middle_end/backend_intf.mli @@ -19,19 +19,6 @@ (** Knowledge that the middle end needs about the backend. *) module type S = sig - (** Compute the symbol for the given identifier. *) - val symbol_for_global' : (Ident.t -> Symbol.t) - - (** If the given approximation is that of a symbol (Value_symbol) or an - external (Value_extern), attempt to find a more informative - approximation from a previously-written compilation artifact. In the - native code backend, for example, this might consult a .cmx file. *) - val really_import_approx : Simple_value_approx.t -> Simple_value_approx.t - - val import_symbol : Symbol.t -> Simple_value_approx.t - - val closure_symbol : Closure_id.t -> Symbol.t - (** The natural size of an integer on the target architecture (cf. [Arch.size_int] in the native code backend). *) val size_int : int diff --git a/asmcomp/backend_var.ml b/middle_end/backend_var.ml similarity index 75% rename from asmcomp/backend_var.ml rename to middle_end/backend_var.ml index 39af7f60620d..34136322e555 100644 --- a/asmcomp/backend_var.ml +++ b/middle_end/backend_var.ml @@ -18,34 +18,6 @@ include Ident type backend_var = t -module Provenance = struct - type t = { - module_path : Path.t; - location : Debuginfo.t; - original_ident : Ident.t; - } - - let print ppf { module_path; location; original_ident; } = - Format.fprintf ppf "@[(\ - @[(module_path@ %a)@]@ \ - @[(location@ %a)@]@ \ - @[(original_ident@ %a)@]\ - )@]" - Path.print module_path - Debuginfo.print_compact location - Ident.print original_ident - - let create ~module_path ~location ~original_ident = - { module_path; - location; - original_ident; - } - - let module_path t = t.module_path - let location t = t.location - let original_ident t = t.original_ident -end - module With_provenance = struct type t = | Without_provenance of backend_var diff --git a/asmcomp/backend_var.mli b/middle_end/backend_var.mli similarity index 84% rename from asmcomp/backend_var.mli rename to middle_end/backend_var.mli index f236be1e47cb..40e267f5d1c9 100644 --- a/asmcomp/backend_var.mli +++ b/middle_end/backend_var.mli @@ -15,28 +15,17 @@ (** Variables used in the backend, optionally equipped with "provenance" information, used for the emission of debugging information. *) +(* CR-soon mshinwell: Move this into the asmcomp/ directory and change + [Clambda] to use [Variable]. This should be done once the Flambda gdb + patches are ready, so we can add the necessary provenance info. to + [Variable]. *) + [@@@ocaml.warning "+a-4-30-40-41-42"] include module type of struct include Ident end type backend_var = t -module Provenance : sig - type t - - val create - : module_path:Path.t - -> location:Debuginfo.t - -> original_ident:Ident.t - -> t - - val module_path : t -> Path.t - val location : t -> Debuginfo.t - val original_ident : t -> Ident.t - - val print : Format.formatter -> t -> unit -end - module With_provenance : sig (** Values of type [t] should be used for variables in binding position. *) type t diff --git a/middle_end/base_types/compilation_unit.ml b/middle_end/base_types/compilation_unit.ml deleted file mode 100644 index 7fb48167bc45..000000000000 --- a/middle_end/base_types/compilation_unit.ml +++ /dev/null @@ -1,78 +0,0 @@ -(**************************************************************************) -(* *) -(* OCaml *) -(* *) -(* Pierre Chambart, OCamlPro *) -(* Mark Shinwell and Leo White, Jane Street Europe *) -(* *) -(* Copyright 2013--2016 OCamlPro SAS *) -(* Copyright 2014--2016 Jane Street Group LLC *) -(* *) -(* All rights reserved. This file is distributed under the terms of *) -(* the GNU Lesser General Public License version 2.1, with the *) -(* special exception on linking described in the file LICENSE. *) -(* *) -(**************************************************************************) - -[@@@ocaml.warning "+a-4-9-30-40-41-42-66"] -open! Int_replace_polymorphic_compare - -type t = { - id : Ident.t; - linkage_name : Linkage_name.t; - hash : int; -} - -let string_for_printing t = Ident.name t.id - -include Identifiable.Make (struct - type nonrec t = t - - (* Multiple units can have the same [id] if they come from different packs. - To distinguish these we also keep the linkage name, which contains the - name of the pack. *) - let compare v1 v2 = - if v1 == v2 then 0 - else - let c = compare v1.hash v2.hash in - if c = 0 then - let v1_id = Ident.name v1.id in - let v2_id = Ident.name v2.id in - let c = String.compare v1_id v2_id in - if c = 0 then - Linkage_name.compare v1.linkage_name v2.linkage_name - else - c - else c - - let equal x y = - if x == y then true - else compare x y = 0 - - let print ppf t = Format.pp_print_string ppf (string_for_printing t) - - let output oc x = output_string oc (Ident.name x.id) - let hash x = x.hash -end) - -let create (id : Ident.t) linkage_name = - if not (Ident.persistent id) then begin - Misc.fatal_error "Compilation_unit.create with non-persistent Ident.t" - end; - { id; linkage_name; hash = Hashtbl.hash (Ident.name id); } - -let get_persistent_ident cu = cu.id -let get_linkage_name cu = cu.linkage_name - -let current = ref None -let is_current arg = - match !current with - | None -> Misc.fatal_error "Current compilation unit is not set!" - | Some cur -> equal cur arg -let set_current t = current := Some t -let get_current () = !current -let get_current_exn () = - match !current with - | Some current -> current - | None -> Misc.fatal_error "Compilation_unit.get_current_exn" -let get_current_id_exn () = get_persistent_ident (get_current_exn ()) diff --git a/middle_end/base_types/symbol.ml b/middle_end/base_types/symbol.ml deleted file mode 100644 index 22a2e0a70e73..000000000000 --- a/middle_end/base_types/symbol.ml +++ /dev/null @@ -1,105 +0,0 @@ -(**************************************************************************) -(* *) -(* OCaml *) -(* *) -(* Pierre Chambart, OCamlPro *) -(* Mark Shinwell and Leo White, Jane Street Europe *) -(* *) -(* Copyright 2013--2016 OCamlPro SAS *) -(* Copyright 2014--2016 Jane Street Group LLC *) -(* *) -(* All rights reserved. This file is distributed under the terms of *) -(* the GNU Lesser General Public License version 2.1, with the *) -(* special exception on linking described in the file LICENSE. *) -(* *) -(**************************************************************************) - -[@@@ocaml.warning "+a-4-9-30-40-41-42-66"] -open! Int_replace_polymorphic_compare - - -type t = - | Linkage of - { compilation_unit : Compilation_unit.t; - label : Linkage_name.t; - hash : int; } - | Variable of - { compilation_unit : Compilation_unit.t; - variable : Variable.t; } - -let label t = - match t with - | Linkage { label; _ } -> label - | Variable { variable; _ } -> - (* Use the variable's compilation unit for the label, since the - symbol's compilation unit might be a pack *) - let compilation_unit = Variable.get_compilation_unit variable in - let unit_linkage_name = - Linkage_name.to_string - (Compilation_unit.get_linkage_name compilation_unit) - in - let label = unit_linkage_name ^ "__" ^ Variable.unique_name variable in - Linkage_name.create label - -include Identifiable.Make (struct - - type nonrec t = t - - let compare t1 t2 = - if t1 == t2 then 0 - else begin - match t1, t2 with - | Linkage _, Variable _ -> 1 - | Variable _, Linkage _ -> -1 - | Linkage l1, Linkage l2 -> - let c = compare l1.hash l2.hash in - if c <> 0 then c else begin - (* Linkage names are unique across a whole project, so just comparing - those is sufficient. *) - Linkage_name.compare l1.label l2.label - end - | Variable v1, Variable v2 -> - Variable.compare v1.variable v2.variable - end - - let equal x y = - if x == y then true - else compare x y = 0 - - let output chan t = - Linkage_name.output chan (label t) - - let hash t = - match t with - | Linkage { hash; _ } -> hash - | Variable { variable } -> Variable.hash variable - - let print ppf t = - Linkage_name.print ppf (label t) - -end) - -let of_global_linkage compilation_unit label = - let hash = Linkage_name.hash label in - Linkage { compilation_unit; hash; label } - -let of_variable variable = - let compilation_unit = Variable.get_compilation_unit variable in - Variable { variable; compilation_unit } - -let import_for_pack ~pack:compilation_unit symbol = - match symbol with - | Linkage l -> Linkage { l with compilation_unit } - | Variable v -> Variable { v with compilation_unit } - -let compilation_unit t = - match t with - | Linkage { compilation_unit; _ } -> compilation_unit - | Variable { compilation_unit; _ } -> compilation_unit - -let print_opt ppf = function - | None -> Format.fprintf ppf "" - | Some t -> print ppf t - -let compare_lists l1 l2 = - Misc.Stdlib.List.compare compare l1 l2 diff --git a/middle_end/base_types/symbol.mli b/middle_end/base_types/symbol.mli deleted file mode 100644 index d2771af24457..000000000000 --- a/middle_end/base_types/symbol.mli +++ /dev/null @@ -1,44 +0,0 @@ -(**************************************************************************) -(* *) -(* OCaml *) -(* *) -(* Pierre Chambart, OCamlPro *) -(* Mark Shinwell and Leo White, Jane Street Europe *) -(* *) -(* Copyright 2013--2016 OCamlPro SAS *) -(* Copyright 2014--2016 Jane Street Group LLC *) -(* *) -(* All rights reserved. This file is distributed under the terms of *) -(* the GNU Lesser General Public License version 2.1, with the *) -(* special exception on linking described in the file LICENSE. *) -(* *) -(**************************************************************************) - -[@@@ocaml.warning "+a-4-9-30-40-41-42"] - -(** A symbol identifies a constant provided by either: - - another compilation unit; or - - a top-level module. - - * [sym_unit] is the compilation unit containing the value. - * [sym_label] is the linkage name of the variable. - - The label must be globally unique: two compilation units linked in the - same program must not share labels. *) - -include Identifiable.S - -val of_variable : Variable.t -> t - -(* Create the symbol without prefixing with the compilation unit. - Used for global symbols like predefined exceptions *) -val of_global_linkage : Compilation_unit.t -> Linkage_name.t -> t - -val import_for_pack : pack:Compilation_unit.t -> t -> t - -val compilation_unit : t -> Compilation_unit.t -val label : t -> Linkage_name.t - -val print_opt : Format.formatter -> t option -> unit - -val compare_lists : t list -> t list -> int diff --git a/asmcomp/clambda.ml b/middle_end/clambda.ml similarity index 81% rename from asmcomp/clambda.ml rename to middle_end/clambda.ml index 406bfbccda7b..1c3ea5024a65 100644 --- a/asmcomp/clambda.ml +++ b/middle_end/clambda.ml @@ -19,7 +19,7 @@ open Asttypes open Lambda -type function_label = string +type function_label = Symbol.t type ustructured_constant = | Uconst_float of float @@ -29,60 +29,60 @@ type ustructured_constant = | Uconst_block of int * uconstant list | Uconst_float_array of float list | Uconst_string of string - | Uconst_closure of ufunction list * string * uconstant list + | Uconst_closure of ufunction list * Symbol.t * uconstant list and uconstant = - | Uconst_ref of string * ustructured_constant option + | Uconst_ref of Symbol.t * ustructured_constant option | Uconst_int of int | Uconst_ptr of int and uphantom_defining_expr = | Uphantom_const of uconstant - | Uphantom_var of Backend_var.t - | Uphantom_offset_var of { var : Backend_var.t; offset_in_words : int; } - | Uphantom_read_field of { var : Backend_var.t; field : int; } - | Uphantom_read_symbol_field of { sym : string; field : int; } - | Uphantom_block of { tag : int; fields : Backend_var.t list; } + | Uphantom_var of Variable.t + | Uphantom_offset_var of { var : Variable.t; offset_in_words : int; } + | Uphantom_read_field of { var : Variable.t; field : int; } + | Uphantom_read_symbol_field of { sym : Symbol.t; field : int; } + | Uphantom_block of { tag : int; fields : Variable.t list; } and ulambda = - Uvar of Backend_var.t + Uvar of Variable.t | Uconst of uconstant | Udirect_apply of function_label * ulambda list * Debuginfo.t | Ugeneric_apply of ulambda * ulambda list * Debuginfo.t | Uclosure of ufunction list * ulambda list | Uoffset of ulambda * int - | Ulet of mutable_flag * value_kind * Backend_var.With_provenance.t + | Ulet of mutable_flag * value_kind * Variable.With_provenance.t * ulambda * ulambda - | Uphantom_let of Backend_var.With_provenance.t + | Uphantom_let of Variable.With_provenance.t * uphantom_defining_expr option * ulambda - | Uletrec of (Backend_var.With_provenance.t * ulambda) list * ulambda + | Uletrec of (Variable.With_provenance.t * ulambda) list * ulambda | Uprim of Clambda_primitives.primitive * ulambda list * Debuginfo.t | Uswitch of ulambda * ulambda_switch * Debuginfo.t | Ustringswitch of ulambda * (string * ulambda) list * ulambda option | Ustaticfail of int * ulambda list | Ucatch of int * - (Backend_var.With_provenance.t * value_kind) list * + (Variable.With_provenance.t * value_kind) list * ulambda * ulambda - | Utrywith of ulambda * Backend_var.With_provenance.t * ulambda + | Utrywith of ulambda * Variable.With_provenance.t * ulambda | Uifthenelse of ulambda * ulambda * ulambda | Usequence of ulambda * ulambda | Uwhile of ulambda * ulambda - | Ufor of Backend_var.With_provenance.t * ulambda * ulambda + | Ufor of Variable.With_provenance.t * ulambda * ulambda * direction_flag * ulambda - | Uassign of Backend_var.t * ulambda + | Uassign of Variable.t * ulambda | Usend of meth_kind * ulambda * ulambda * ulambda list * Debuginfo.t | Uunreachable and ufunction = { label : function_label; arity : int; - params : (Backend_var.With_provenance.t * value_kind) list; + params : (Variable.With_provenance.t * value_kind) list; return : value_kind; body : ulambda; dbg : Debuginfo.t; - env : Backend_var.t option; + env : Variable.t option; } and ulambda_switch = @@ -97,7 +97,7 @@ type function_description = { fun_label: function_label; (* Label of direct entry point *) fun_arity: int; (* Number of arguments *) mutable fun_closed: bool; (* True if environment not used *) - mutable fun_inline: (Backend_var.With_provenance.t list * ulambda) option; + mutable fun_inline: (Variable.With_provenance.t list * ulambda) option; mutable fun_float_const_prop: bool (* Can propagate FP consts *) } @@ -108,7 +108,7 @@ type value_approximation = | Value_tuple of value_approximation array | Value_unknown | Value_const of uconstant - | Value_global_field of string * int + | Value_global_field of Symbol.t * int (* Preallocated globals *) @@ -118,11 +118,11 @@ type usymbol_provenance = { } type uconstant_block_field = - | Uconst_field_ref of string + | Uconst_field_ref of Symbol.t | Uconst_field_int of int type preallocated_block = { - symbol : string; + symbol : Symbol.t; exported : bool; tag : int; fields : uconstant_block_field option list; @@ -130,12 +130,15 @@ type preallocated_block = { } type preallocated_constant = { - symbol : string; + symbol : Symbol.t; exported : bool; definition : ustructured_constant; provenance : usymbol_provenance option; } +type with_constants = + ulambda * preallocated_block list * preallocated_constant list + (* Comparison functions for constants. We must not use Stdlib.compare because it compares "0.0" and "-0.0" equal. (PR#6442) *) @@ -153,7 +156,8 @@ let rec compare_float_lists l1 l2 = let compare_constants c1 c2 = match c1, c2 with - | Uconst_ref(lbl1, _c1), Uconst_ref(lbl2, _c2) -> String.compare lbl1 lbl2 + | Uconst_ref(lbl1, _c1), Uconst_ref(lbl2, _c2) -> + Symbol.compare lbl1 lbl2 (* Same labels -> same constants. Different labels -> different constants, even if the contents match, because of string constants that must not be @@ -197,7 +201,7 @@ let compare_structured_constants c1 c2 = compare_float_lists l1 l2 | Uconst_string s1, Uconst_string s2 -> String.compare s1 s2 | Uconst_closure (_,lbl1,_), Uconst_closure (_,lbl2,_) -> - String.compare lbl1 lbl2 + Symbol.compare lbl1 lbl2 | _, _ -> (* no overflow possible here *) rank_structured_constant c1 - rank_structured_constant c2 diff --git a/asmcomp/clambda.mli b/middle_end/clambda.mli similarity index 78% rename from asmcomp/clambda.mli rename to middle_end/clambda.mli index ddd0956dee8f..9b439d53a224 100644 --- a/asmcomp/clambda.mli +++ b/middle_end/clambda.mli @@ -19,7 +19,7 @@ open Asttypes open Lambda -type function_label = string +type function_label = Symbol.t type ustructured_constant = | Uconst_float of float @@ -29,71 +29,71 @@ type ustructured_constant = | Uconst_block of int * uconstant list | Uconst_float_array of float list | Uconst_string of string - | Uconst_closure of ufunction list * string * uconstant list + | Uconst_closure of ufunction list * Symbol.t * uconstant list and uconstant = - | Uconst_ref of string * ustructured_constant option + | Uconst_ref of Symbol.t * ustructured_constant option | Uconst_int of int | Uconst_ptr of int and uphantom_defining_expr = | Uphantom_const of uconstant (** The phantom-let-bound variable is a constant. *) - | Uphantom_var of Backend_var.t + | Uphantom_var of Variable.t (** The phantom-let-bound variable is an alias for another variable. *) - | Uphantom_offset_var of { var : Backend_var.t; offset_in_words : int; } + | Uphantom_offset_var of { var : Variable.t; offset_in_words : int; } (** The phantom-let-bound-variable's value is defined by adding the given number of words to the pointer contained in the given identifier. *) - | Uphantom_read_field of { var : Backend_var.t; field : int; } + | Uphantom_read_field of { var : Variable.t; field : int; } (** The phantom-let-bound-variable's value is found by adding the given number of words to the pointer contained in the given identifier, then dereferencing. *) - | Uphantom_read_symbol_field of { sym : string; field : int; } + | Uphantom_read_symbol_field of { sym : Symbol.t; field : int; } (** As for [Uphantom_read_var_field], but with the pointer specified by a symbol. *) - | Uphantom_block of { tag : int; fields : Backend_var.t list; } + | Uphantom_block of { tag : int; fields : Variable.t list; } (** The phantom-let-bound variable points at a block with the given structure. *) and ulambda = - Uvar of Backend_var.t + Uvar of Variable.t | Uconst of uconstant | Udirect_apply of function_label * ulambda list * Debuginfo.t | Ugeneric_apply of ulambda * ulambda list * Debuginfo.t | Uclosure of ufunction list * ulambda list | Uoffset of ulambda * int - | Ulet of mutable_flag * value_kind * Backend_var.With_provenance.t + | Ulet of mutable_flag * value_kind * Variable.With_provenance.t * ulambda * ulambda - | Uphantom_let of Backend_var.With_provenance.t + | Uphantom_let of Variable.With_provenance.t * uphantom_defining_expr option * ulambda - | Uletrec of (Backend_var.With_provenance.t * ulambda) list * ulambda + | Uletrec of (Variable.With_provenance.t * ulambda) list * ulambda | Uprim of Clambda_primitives.primitive * ulambda list * Debuginfo.t | Uswitch of ulambda * ulambda_switch * Debuginfo.t | Ustringswitch of ulambda * (string * ulambda) list * ulambda option | Ustaticfail of int * ulambda list | Ucatch of int * - (Backend_var.With_provenance.t * value_kind) list * + (Variable.With_provenance.t * value_kind) list * ulambda * ulambda - | Utrywith of ulambda * Backend_var.With_provenance.t * ulambda + | Utrywith of ulambda * Variable.With_provenance.t * ulambda | Uifthenelse of ulambda * ulambda * ulambda | Usequence of ulambda * ulambda | Uwhile of ulambda * ulambda - | Ufor of Backend_var.With_provenance.t * ulambda * ulambda + | Ufor of Variable.With_provenance.t * ulambda * ulambda * direction_flag * ulambda - | Uassign of Backend_var.t * ulambda + | Uassign of Variable.t * ulambda | Usend of meth_kind * ulambda * ulambda * ulambda list * Debuginfo.t | Uunreachable and ufunction = { label : function_label; arity : int; - params : (Backend_var.With_provenance.t * value_kind) list; + params : (Variable.With_provenance.t * value_kind) list; return : value_kind; body : ulambda; dbg : Debuginfo.t; - env : Backend_var.t option; + env : Variable.t option; } and ulambda_switch = @@ -108,7 +108,7 @@ type function_description = { fun_label: function_label; (* Label of direct entry point *) fun_arity: int; (* Number of arguments *) mutable fun_closed: bool; (* True if environment not used *) - mutable fun_inline: (Backend_var.With_provenance.t list * ulambda) option; + mutable fun_inline: (Variable.With_provenance.t list * ulambda) option; mutable fun_float_const_prop: bool (* Can propagate FP consts *) } @@ -119,7 +119,7 @@ type value_approximation = | Value_tuple of value_approximation array | Value_unknown | Value_const of uconstant - | Value_global_field of string * int + | Value_global_field of Symbol.t * int (* Comparison functions for constants *) @@ -134,11 +134,11 @@ type usymbol_provenance = { } type uconstant_block_field = - | Uconst_field_ref of string + | Uconst_field_ref of Symbol.t | Uconst_field_int of int type preallocated_block = { - symbol : string; + symbol : Symbol.t; exported : bool; tag : int; fields : uconstant_block_field option list; @@ -146,8 +146,11 @@ type preallocated_block = { } type preallocated_constant = { - symbol : string; + symbol : Symbol.t; exported : bool; definition : ustructured_constant; provenance : usymbol_provenance option; } + +type with_constants = + ulambda * preallocated_block list * preallocated_constant list diff --git a/asmcomp/clambda_primitives.ml b/middle_end/clambda_primitives.ml similarity index 99% rename from asmcomp/clambda_primitives.ml rename to middle_end/clambda_primitives.ml index a7c9798f3668..1f22855f2aac 100644 --- a/asmcomp/clambda_primitives.ml +++ b/middle_end/clambda_primitives.ml @@ -31,7 +31,7 @@ type memory_access_size = | Sixty_four type primitive = - | Pread_symbol of string + | Pread_symbol of Symbol.t (* Operations on heap blocks *) | Pmakeblock of int * mutable_flag * block_shape | Pfield of int diff --git a/asmcomp/clambda_primitives.mli b/middle_end/clambda_primitives.mli similarity index 99% rename from asmcomp/clambda_primitives.mli rename to middle_end/clambda_primitives.mli index 4c02023576e3..efd94f2ac01b 100644 --- a/asmcomp/clambda_primitives.mli +++ b/middle_end/clambda_primitives.mli @@ -31,7 +31,7 @@ type memory_access_size = | Sixty_four type primitive = - | Pread_symbol of string + | Pread_symbol of Symbol.t (* Operations on heap blocks *) | Pmakeblock of int * mutable_flag * block_shape | Pfield of int diff --git a/asmcomp/closure.ml b/middle_end/closure/closure.ml similarity index 86% rename from asmcomp/closure.ml rename to middle_end/closure/closure.ml index a019979f2d68..86ac7213b0f9 100644 --- a/asmcomp/closure.ml +++ b/middle_end/closure/closure.ml @@ -33,14 +33,24 @@ module Storer = let compare_key = Stdlib.compare end) -module V = Backend_var -module VP = Backend_var.With_provenance +module I = Internal_variable_names +module V = Variable +module VP = Variable.With_provenance -let no_phantom_lets () = - Misc.fatal_error "Closure does not support phantom let generation" +(* The current backend *) + +let backend = ref None + +let get_backend () = + match !backend with + | None -> Misc.fatal_error "Current backend not set" + | Some backend -> backend (* Auxiliaries for compiling functions *) +let no_phantom_lets () = + Misc.fatal_error "Closure does not support phantom let generation" + let rec split_list n l = if n <= 0 then ([], l) else begin match l with @@ -49,19 +59,24 @@ let rec split_list n l = end let rec build_closure_env env_param pos = function - [] -> V.Map.empty + [] -> Ident.Map.empty | id :: rem -> - V.Map.add id + Ident.Map.add id (Uprim(P.Pfield pos, [Uvar env_param], Debuginfo.none)) (build_closure_env env_param (pos+1) rem) (* Auxiliary for accessing globals. We change the name of the global - to the name of the corresponding asm symbol. This is done here - and no longer in Cmmgen so that approximations stored in .cmx files - contain the right names if the -for-pack option is active. *) + to the name of the corresponding symbol. *) let getglobal dbg id = - Uprim(P.Pread_symbol (Compilenv.symbol_for_global id), [], dbg) + let comp_unit = Compilation_state.compilation_unit_for_global id in + let sym = + match comp_unit with + | Compilation_state.Predef -> Symbol.for_predefined_exn id + | Compilation_state.Compilation_unit comp_unit -> + Symbol.for_module_block comp_unit + in + Uprim (P.Pread_symbol sym, [], dbg) (* Check if a variable occurs in a [clambda] term. *) @@ -232,8 +247,10 @@ let rec is_pure = function let make_const c = (Uconst c, Value_const c) let make_const_ref c = - make_const(Uconst_ref(Compilenv.new_structured_constant ~shared:true c, - Some c)) + let sym = + Compilation_state.Closure_only.new_structured_constant ~shared:true c + in + make_const (Uconst_ref (sym, Some c)) let make_const_int n = make_const (Uconst_int n) let make_const_ptr n = make_const (Uconst_ptr n) let make_const_bool b = make_const_ptr(if b then 1 else 0) @@ -273,6 +290,7 @@ let make_const_int64 n = make_const_ref (Uconst_int64 n) let simplif_arith_prim_pure fpc p (args, approxs) dbg = let open Clambda_primitives in + let module B = (val (get_backend ()) : Backend_intf.S) in let default = (Uprim(p, args, dbg), Value_unknown) in match approxs with (* int (or enumerated type) *) @@ -303,11 +321,11 @@ let simplif_arith_prim_pure fpc p (args, approxs) dbg = | Pandint -> make_const_int (n1 land n2) | Porint -> make_const_int (n1 lor n2) | Pxorint -> make_const_int (n1 lxor n2) - | Plslint when 0 <= n2 && n2 < 8 * Arch.size_int -> + | Plslint when 0 <= n2 && n2 < 8 * B.size_int -> make_const_int (n1 lsl n2) - | Plsrint when 0 <= n2 && n2 < 8 * Arch.size_int -> + | Plsrint when 0 <= n2 && n2 < 8 * B.size_int -> make_const_int (n1 lsr n2) - | Pasrint when 0 <= n2 && n2 < 8 * Arch.size_int -> + | Pasrint when 0 <= n2 && n2 < 8 * B.size_int -> make_const_int (n1 asr n2) | Pintcomp c -> make_integer_comparison c n1 n2 | _ -> default @@ -361,11 +379,11 @@ let simplif_arith_prim_pure fpc p (args, approxs) dbg = | [Value_const(Uconst_ref(_, Some (Uconst_nativeint n1))); Value_const(Uconst_int n2)] -> begin match p with - | Plslbint Pnativeint when 0 <= n2 && n2 < 8 * Arch.size_int -> + | Plslbint Pnativeint when 0 <= n2 && n2 < 8 * B.size_int -> make_const_natint (Nativeint.shift_left n1 n2) - | Plsrbint Pnativeint when 0 <= n2 && n2 < 8 * Arch.size_int -> + | Plsrbint Pnativeint when 0 <= n2 && n2 < 8 * B.size_int -> make_const_natint (Nativeint.shift_right_logical n1 n2) - | Pasrbint Pnativeint when 0 <= n2 && n2 < 8 * Arch.size_int -> + | Pasrbint Pnativeint when 0 <= n2 && n2 < 8 * B.size_int -> make_const_natint (Nativeint.shift_right n1 n2) | _ -> default end @@ -468,10 +486,11 @@ let simplif_prim_pure fpc p (args, approxs) dbg = in begin try let cst = Uconst_block (tag, List.map field approxs) in - let name = - Compilenv.new_structured_constant cst ~shared:true + let sym = + Compilation_state.Closure_only.new_structured_constant cst + ~shared:true in - make_const (Uconst_ref (name, Some cst)) + make_const (Uconst_ref (sym, Some cst)) with Exit -> (Uprim(p, args, dbg), Value_tuple (Array.of_list approxs)) end @@ -783,12 +802,12 @@ let strengthen_approx appl approx = let check_constant_result ulam approx = match approx with Value_const c when is_pure ulam -> make_const c - | Value_global_field (id, i) when is_pure ulam -> + | Value_global_field (sym, i) when is_pure ulam -> begin match ulam with | Uprim(P.Pfield _, [Uprim(P.Pread_symbol _, _, _)], _) -> (ulam, approx) | _ -> let glb = - Uprim(P.Pread_symbol id, [], Debuginfo.none) + Uprim(P.Pread_symbol sym, [], Debuginfo.none) in Uprim(P.Pfield i, [glb], Debuginfo.none), approx end @@ -819,25 +838,31 @@ let excessive_function_nesting_depth = 5 exception NotClosed let close_approx_var fenv cenv id = - let approx = try V.Map.find id fenv with Not_found -> Value_unknown in + let approx = try Ident.Map.find id fenv with Not_found -> Value_unknown in match approx with Value_const c -> make_const c | approx -> - let subst = try V.Map.find id cenv with Not_found -> Uvar id in + let subst = + try Ident.Map.find id cenv with + | Not_found -> + Misc.fatal_errorf "close_approx_var: unbound %a" Ident.print id + in (subst, approx) let close_var fenv cenv id = let (ulam, _app) = close_approx_var fenv cenv id in ulam -let rec close fenv cenv = function - Lvar id -> +let rec close fenv cenv lam = + let module B = (val (get_backend ()) : Backend_intf.S) in + match lam with + | Lvar id -> close_approx_var fenv cenv id | Lconst cst -> let str ?(shared = true) cst = - let name = - Compilenv.new_structured_constant cst ~shared + let sym = + Compilation_state.Closure_only.new_structured_constant cst ~shared in - Uconst_ref (name, Some cst) + Uconst_ref (sym, Some cst) in let rec transl = function | Const_base(Const_int n) -> Uconst_int n @@ -888,23 +913,34 @@ let rec close fenv cenv = function | ((ufunct, (Value_closure(fundesc, _) as fapprox)), uargs) when nargs < fundesc.fun_arity -> let first_args = List.map (fun arg -> - (V.create_local "arg", arg) ) uargs in + let id = Ident.create_local "arg" in + let var = V.create_with_same_name_as_ident id in + (id, var, arg) ) uargs in let final_args = Array.to_list (Array.init (fundesc.fun_arity - nargs) - (fun _ -> V.create_local "arg")) in - let rec iter args body = + (fun _ -> Ident.create_local "arg")) in + let rec bind_vars args body = match args with [] -> body - | (arg1, arg2) :: args -> - iter args - (Ulet (Immutable, Pgenval, VP.create arg1, arg2, body)) + | (_, var, arg2) :: args -> + bind_vars args + (Ulet (Immutable, Pgenval, VP.create var, arg2, body)) in let internal_args = - (List.map (fun (arg1, _arg2) -> Lvar arg1) first_args) + (List.map (fun (arg1, _var, _arg2) -> Lvar arg1) first_args) @ (List.map (fun arg -> Lvar arg ) final_args) in - let funct_var = V.create_local "funct" in - let fenv = V.Map.add funct_var fapprox fenv in + let funct_id = Ident.create_local "funct" in + let funct_var = V.create_with_same_name_as_ident funct_id in + let fenv = Ident.Map.add funct_id fapprox fenv in + let cenv = Ident.Map.add funct_id (Uvar funct_var) cenv in + let cenv = + List.fold_right + (fun (id, var, _arg) cenv -> + assert(Ident.Map.find_opt id cenv = None); + Ident.Map.add id (Uvar var) cenv) + first_args cenv + in let (new_fun, approx) = close fenv cenv (Lfunction{ kind = Curried; @@ -912,7 +948,7 @@ let rec close fenv cenv = function params = List.map (fun v -> v, Pgenval) final_args; body = Lapply{ap_should_be_tailcall=false; ap_loc=loc; - ap_func=(Lvar funct_var); + ap_func=(Lvar funct_id); ap_args=internal_args; ap_inlined=Default_inline; ap_specialised=Default_specialise}; @@ -920,7 +956,7 @@ let rec close fenv cenv = function attr = default_function_attribute}) in let new_fun = - iter first_args + bind_vars first_args (Ulet (Immutable, Pgenval, VP.create funct_var, ufunct, new_fun)) in warning_if_forced_inline ~loc ~attribute "Partial application"; @@ -928,7 +964,7 @@ let rec close fenv cenv = function | ((ufunct, Value_closure(fundesc, _approx_res)), uargs) when fundesc.fun_arity > 0 && nargs > fundesc.fun_arity -> - let args = List.map (fun arg -> V.create_local "arg", arg) uargs in + let args = List.map (fun arg -> V.create I.arg, arg) uargs in let (first_args, rem_args) = split_list fundesc.fun_arity args in let first_args = List.map (fun (id, _) -> Uvar id) first_args in let rem_args = List.map (fun (id, _) -> Uvar id) rem_args in @@ -961,14 +997,18 @@ let rec close fenv cenv = function let (ulam, alam) = close_named fenv cenv id lam in begin match (str, alam) with (Variable, _) -> + let var = V.create_with_same_name_as_ident id in + let cenv = Ident.Map.add id (Uvar var) cenv in let (ubody, abody) = close fenv cenv body in - (Ulet(Mutable, kind, VP.create id, ulam, ubody), abody) + (Ulet(Mutable, kind, VP.create var, ulam, ubody), abody) | (_, Value_const _) when str = Alias || is_pure ulam -> - close (V.Map.add id alam fenv) cenv body + close (Ident.Map.add id alam fenv) cenv body | (_, _) -> - let (ubody, abody) = close (V.Map.add id alam fenv) cenv body in - (Ulet(Immutable, kind, VP.create id, ulam, ubody), abody) + let var = V.create_with_same_name_as_ident id in + let cenv = Ident.Map.add id (Uvar var) cenv in + let (ubody, abody) = close (Ident.Map.add id alam fenv) cenv body in + (Ulet(Immutable, kind, VP.create var, ulam, ubody), abody) end | Lletrec(defs, body) -> if List.for_all @@ -977,28 +1017,46 @@ let rec close fenv cenv = function then begin (* Simple case: only function definitions *) let (clos, infos) = close_functions fenv cenv defs in - let clos_ident = V.create_local "clos" in + let clos_ident = V.create I.closure in let fenv_body = List.fold_right - (fun (id, _pos, approx) fenv -> V.Map.add id approx fenv) + (fun (id, _var, _pos, approx) fenv -> Ident.Map.add id approx fenv) infos fenv in - let (ubody, approx) = close fenv_body cenv body in + let cenv_body = + List.fold_right + (fun (id, var, _pos, _approx) cenv -> + assert(Ident.Map.find_opt id cenv = None); + Ident.Map.add id (Uvar var) cenv) + infos cenv in + let (ubody, approx) = close fenv_body cenv_body body in let sb = List.fold_right - (fun (id, pos, _approx) sb -> - V.Map.add id (Uoffset(Uvar clos_ident, pos)) sb) + (fun (_id, var, pos, _approx) sb -> + V.Map.add var (Uoffset(Uvar clos_ident, pos)) sb) infos V.Map.empty in (Ulet(Immutable, Pgenval, VP.create clos_ident, clos, substitute Location.none !Clflags.float_const_prop sb None ubody), approx) end else begin (* General case: recursive definition of values *) + let defs = + List.map (fun (id, lam) -> + let var = V.create_with_same_name_as_ident id in + id, var, lam) + defs + in + let cenv = + List.fold_left (fun cenv (id, var, _) -> + Ident.Map.add id (Uvar var) cenv) + cenv defs + in let rec clos_defs = function [] -> ([], fenv) - | (id, lam) :: rem -> + | (id, var, lam) :: rem -> let (udefs, fenv_body) = clos_defs rem in let (ulam, approx) = close_named fenv cenv id lam in - ((VP.create id, ulam) :: udefs, V.Map.add id approx fenv_body) in + ((VP.create var, ulam) :: udefs, Ident.Map.add id approx fenv_body) + in let (udefs, fenv_body) = clos_defs defs in let (ubody, approx) = close fenv_body cenv body in (Uletrec(udefs, ubody), approx) @@ -1007,10 +1065,10 @@ let rec close fenv cenv = function | Lprim(Pctconst c, [arg], _loc) -> let cst, approx = match c with - | Big_endian -> make_const_bool Arch.big_endian - | Word_size -> make_const_int (8*Arch.size_int) - | Int_size -> make_const_int (8*Arch.size_int - 1) - | Max_wosize -> make_const_int ((1 lsl ((8*Arch.size_int) - 10)) - 1 ) + | Big_endian -> make_const_bool B.big_endian + | Word_size -> make_const_int (8*B.size_int) + | Int_size -> make_const_int (8*B.size_int - 1) + | Max_wosize -> make_const_int ((1 lsl ((8*B.size_int) - 10)) - 1 ) | Ostype_unix -> make_const_bool (Sys.os_type = "Unix") | Ostype_win32 -> make_const_bool (Sys.os_type = "Win32") | Ostype_cygwin -> make_const_bool (Sys.os_type = "Cygwin") @@ -1019,7 +1077,8 @@ let rec close fenv cenv = function in let arg, _approx = close fenv cenv arg in let id = Ident.create_local "dummy" in - Ulet(Immutable, Pgenval, VP.create id, arg, cst), approx + let var = V.create_with_same_name_as_ident id in + Ulet(Immutable, Pgenval, VP.create var, arg, cst), approx | Lprim(Pignore, [arg], _loc) -> let expr, approx = make_const_ptr 0 in Usequence(fst (close fenv cenv arg), expr), approx @@ -1036,7 +1095,7 @@ let rec close fenv cenv = function | Lprim(Pgetglobal id, [], loc) -> let dbg = Debuginfo.from_location loc in check_constant_result (getglobal dbg id) - (Compilenv.global_approx id) + (Compilation_state.Closure_only.global_approx id) | Lprim(Pfield n, [lam], loc) -> let (ulam, approx) = close fenv cenv lam in let dbg = Debuginfo.from_location loc in @@ -1107,15 +1166,28 @@ let rec close fenv cenv = function Ustringswitch (uarg,usw,ud),Value_unknown | Lstaticraise (i, args) -> (Ustaticfail (i, close_list fenv cenv args), Value_unknown) - | Lstaticcatch(body, (i, vars), handler) -> + | Lstaticcatch(body, (i, ids), handler) -> let (ubody, _) = close fenv cenv body in + let vars = + List.map (fun (id, k) -> + let var = V.create_with_same_name_as_ident id in + id, var, k) + ids + in + let cenv = + List.fold_left (fun cenv (id, var, _k) -> + Ident.Map.add id (Uvar var) cenv) + cenv vars + in let (uhandler, _) = close fenv cenv handler in - let vars = List.map (fun (var, k) -> VP.create var, k) vars in + let vars = List.map (fun (_id, var, k) -> VP.create var, k) vars in (Ucatch(i, vars, ubody, uhandler), Value_unknown) | Ltrywith(body, id, handler) -> let (ubody, _) = close fenv cenv body in + let var = V.create_with_same_name_as_ident id in + let cenv = Ident.Map.add id (Uvar var) cenv in let (uhandler, _) = close fenv cenv handler in - (Utrywith(ubody, VP.create id, uhandler), Value_unknown) + (Utrywith(ubody, VP.create var, uhandler), Value_unknown) | Lifthenelse(arg, ifso, ifnot) -> begin match close fenv cenv arg with (uarg, Value_const (Uconst_ptr n)) -> @@ -1137,11 +1209,18 @@ let rec close fenv cenv = function | Lfor(id, lo, hi, dir, body) -> let (ulo, _) = close fenv cenv lo in let (uhi, _) = close fenv cenv hi in + let var = V.create_with_same_name_as_ident id in + let cenv = Ident.Map.add id (Uvar var) cenv in let (ubody, _) = close fenv cenv body in - (Ufor(VP.create id, ulo, uhi, dir, ubody), Value_unknown) + (Ufor(VP.create var, ulo, uhi, dir, ubody), Value_unknown) | Lassign(id, lam) -> let (ulam, _) = close fenv cenv lam in - (Uassign(id, ulam), Value_unknown) + let var = + match Ident.Map.find id cenv with + | Uvar var -> var + | _ -> assert false (* Yurk ! *) + in + (Uassign(var, ulam), Value_unknown) | Levent(lam, _) -> close fenv cenv lam | Lifused _ -> @@ -1190,7 +1269,7 @@ and close_functions fenv cenv fun_defs = !function_nesting_depth < excessive_function_nesting_depth in (* Determine the free variables of the functions *) let fv = - V.Set.elements (free_variables (Lletrec(fun_defs, lambda_unit))) in + Ident.Set.elements (free_variables (Lletrec(fun_defs, lambda_unit))) in (* Build the function descriptors for the functions. Initially all functions are assumed not to need their environment parameter. *) @@ -1198,7 +1277,8 @@ and close_functions fenv cenv fun_defs = List.map (function (id, Lfunction{kind; params; return; body; loc}) -> - let label = Compilenv.make_symbol (Some (V.unique_name id)) in + let fun_var = V.create_with_same_name_as_ident id in + let label = Symbol.for_lifted_variable fun_var in let arity = List.length params in let fundesc = {fun_label = label; @@ -1207,20 +1287,20 @@ and close_functions fenv cenv fun_defs = fun_inline = None; fun_float_const_prop = !Clflags.float_const_prop } in let dbg = Debuginfo.from_location loc in - (id, params, return, body, fundesc, dbg) + (id, fun_var, params, return, body, fundesc, dbg) | (_, _) -> fatal_error "Closure.close_functions") fun_defs in (* Build an approximate fenv for compiling the functions *) let fenv_rec = List.fold_right - (fun (id, _params, _return, _body, fundesc, _dbg) fenv -> - V.Map.add id (Value_closure(fundesc, Value_unknown)) fenv) + (fun (id, _var, _params, _return, _body, fundesc, _dbg) fenv -> + Ident.Map.add id (Value_closure(fundesc, Value_unknown)) fenv) uncurried_defs fenv in (* Determine the offsets of each function's closure in the shared block *) let env_pos = ref (-1) in let clos_offsets = List.map - (fun (_id, _params, _return, _body, fundesc, _dbg) -> + (fun (_id, _var, _params, _return, _body, fundesc, _dbg) -> let pos = !env_pos + 1 in env_pos := !env_pos + 1 + (if fundesc.fun_arity <> 1 then 3 else 2); pos) @@ -1230,18 +1310,32 @@ and close_functions fenv cenv fun_defs = does not use its environment parameter is invalidated. *) let useless_env = ref initially_closed in (* Translate each function definition *) - let clos_fundef (id, params, return, body, fundesc, dbg) env_pos = - let env_param = V.create_local "env" in + let clos_fundef (id, var, params, return, body, fundesc, dbg) env_pos = + let env_param = V.create I.env in let cenv_fv = build_closure_env env_param (fv_pos - env_pos) fv in let cenv_body = List.fold_right2 - (fun (id, _params, _return, _body, _fundesc, _dbg) pos env -> - V.Map.add id (Uoffset(Uvar env_param, pos - env_pos)) env) + (fun (id, _var, _params, _return, _body, _fundesc, _dbg) pos env -> + Ident.Map.add id (Uoffset(Uvar env_param, pos - env_pos)) env) uncurried_defs clos_offsets cenv_fv in + let params = + List.map (fun (id, k) -> + let var = V.create_with_same_name_as_ident id in + id, var, k) + params + in + let cenv_body = + List.fold_left (fun cenv (id, var, _) -> + Ident.Map.add id (Uvar var) cenv) + cenv_body params + in let (ubody, approx) = close fenv_rec cenv_body body in if !useless_env && occurs_var env_param ubody then raise NotClosed; let fun_params = + let params = + List.map (fun (_id, var, k) -> var, k) params + in if !useless_env then params else params @ [env_param, Pgenval] @@ -1281,19 +1375,19 @@ and close_functions fenv cenv fun_defs = if lambda_smaller ubody threshold then fundesc.fun_inline <- Some(fun_params, ubody); - (f, (id, env_pos, Value_closure(fundesc, approx))) in + (f, (id, var, env_pos, Value_closure(fundesc, approx))) in (* Translate all function definitions. *) let clos_info_list = if initially_closed then begin - let snap = Compilenv.snapshot () in + let snap = Compilation_state.Closure_only.snapshot () in try List.map2 clos_fundef uncurried_defs clos_offsets with NotClosed -> (* If the hypothesis that the environment parameters are useless has been invalidated, then set [fun_closed] to false in all descriptions and recompile *) - Compilenv.backtrack snap; (* PR#6337 *) + Compilation_state.Closure_only.backtrack snap; (* PR#6337 *) List.iter - (fun (_id, _params, _return, _body, fundesc, _dbg) -> + (fun (_id, _var, _params, _return, _body, fundesc, _dbg) -> fundesc.fun_closed <- false; fundesc.fun_inline <- None; ) @@ -1316,7 +1410,7 @@ and close_functions fenv cenv fun_defs = and close_one_function fenv cenv id funct = match close_functions fenv cenv [id, funct] with - | (clos, (i, _, approx) :: _) when id = i -> (clos, approx) + | (clos, (i, _var, _, approx) :: _) when id = i -> (clos, approx) | _ -> fatal_error "Closure.close_one_function" (* Close a switch *) @@ -1385,7 +1479,7 @@ let collect_exported_structured_constants a = | Value_unknown | Value_global_field _ -> () and const = function | Uconst_ref (s, (Some c)) -> - Compilenv.add_exported_constant s; + Compilation_state.Closure_only.add_exported_constant s; structured_constant c | Uconst_ref (_s, None) -> assert false (* Cannot be generated *) | Uconst_int _ | Uconst_ptr _ -> () @@ -1435,18 +1529,23 @@ let reset () = (* The entry point *) -let intro size lam = +let intro ~backend:backend' ~size lam = reset (); - let id = Compilenv.make_symbol None in - global_approx := Array.init size (fun i -> Value_global_field (id, i)); - Compilenv.set_global_approx(Value_tuple !global_approx); - let (ulam, _approx) = close V.Map.empty V.Map.empty lam in + backend := Some backend'; + let current_unit = Compilation_unit.get_current_exn () in + let module_block = Symbol.for_module_block current_unit in + global_approx := + Array.init size (fun i -> Value_global_field (module_block, i)); + Compilation_state.Closure_only.set_global_approx + (Value_tuple !global_approx); + let (ulam, _approx) = close Ident.Map.empty Ident.Map.empty lam in let opaque = !Clflags.opaque - || Env.is_imported_opaque (Compilenv.current_unit_name ()) + || Env.is_imported_opaque (Compilation_unit.Name.to_string ( + Compilation_unit.name current_unit)) in if opaque - then Compilenv.set_global_approx(Value_unknown) + then Compilation_state.Closure_only.set_global_approx Value_unknown else collect_exported_structured_constants (Value_tuple !global_approx); global_approx := [||]; ulam diff --git a/asmcomp/closure.mli b/middle_end/closure/closure.mli similarity index 92% rename from asmcomp/closure.mli rename to middle_end/closure/closure.mli index f930e0fe5254..92c74732b231 100644 --- a/asmcomp/closure.mli +++ b/middle_end/closure/closure.mli @@ -15,5 +15,10 @@ (* Introduction of closures, uncurrying, recognition of direct calls *) -val intro: int -> Lambda.lambda -> Clambda.ulambda +val intro + : backend:(module Backend_intf.S) + -> size:int + -> Lambda.lambda + -> Clambda.ulambda + val reset : unit -> unit diff --git a/middle_end/closure/closure_middle_end.ml b/middle_end/closure/closure_middle_end.ml new file mode 100644 index 000000000000..63fe87cbc1c3 --- /dev/null +++ b/middle_end/closure/closure_middle_end.ml @@ -0,0 +1,58 @@ +(**************************************************************************) +(* *) +(* OCaml *) +(* *) +(* Xavier Leroy, projet Cristal, INRIA Rocquencourt *) +(* *) +(* Copyright 1996 Institut National de Recherche en Informatique et *) +(* en Automatique. *) +(* *) +(* All rights reserved. This file is distributed under the terms of *) +(* the GNU Lesser General Public License version 2.1, with the *) +(* special exception on linking described in the file LICENSE. *) +(* *) +(**************************************************************************) + +[@@@ocaml.warning "+a-4-30-40-41-42"] + +let raw_clambda_dump_if ppf + ((ulambda, _, structured_constants) : Clambda.with_constants) = + if !Clflags.dump_rawclambda || !Clflags.dump_clambda then + begin + Format.fprintf ppf "@.clambda:@."; + Printclambda.clambda ppf ulambda; + List.iter (fun { Clambda. symbol; definition; _ } -> + Format.fprintf ppf "%a:@ %a@." + Symbol.print symbol + Printclambda.structured_constant definition) + structured_constants + end; + if !Clflags.dump_cmm then Format.fprintf ppf "@.cmm:@." + +let lambda_to_clambda ~backend ~filename:_ ~prefixname:_ ~ppf_dump + (lambda : Lambda.program) = + let clambda = + Closure.intro ~backend ~size:lambda.main_module_block_size lambda.code + in + let current_unit = Compilation_unit.get_current_exn () in + let provenance : Clambda.usymbol_provenance = + { original_idents = []; + module_path = Compilation_unit.path current_unit; + } + in + let preallocated_block = + Clambda.{ + symbol = Symbol.for_module_block current_unit; + exported = true; + tag = 0; + fields = List.init lambda.main_module_block_size (fun _ -> None); + provenance = Some provenance; + } + in + let constants = Compilation_state.Closure_only.structured_constants () in + Compilation_state.Closure_only.clear_structured_constants (); + let clambda_and_constants = + clambda, [preallocated_block], constants + in + raw_clambda_dump_if ppf_dump clambda_and_constants; + clambda_and_constants diff --git a/middle_end/base_types/linkage_name.mli b/middle_end/closure/closure_middle_end.mli similarity index 68% rename from middle_end/base_types/linkage_name.mli rename to middle_end/closure/closure_middle_end.mli index 58731917cde1..e0ebb1decf13 100644 --- a/middle_end/base_types/linkage_name.mli +++ b/middle_end/closure/closure_middle_end.mli @@ -2,11 +2,10 @@ (* *) (* OCaml *) (* *) -(* Pierre Chambart, OCamlPro *) -(* Mark Shinwell and Leo White, Jane Street Europe *) +(* Xavier Leroy, projet Cristal, INRIA Rocquencourt *) (* *) -(* Copyright 2013--2016 OCamlPro SAS *) -(* Copyright 2014--2016 Jane Street Group LLC *) +(* Copyright 1996 Institut National de Recherche en Informatique et *) +(* en Automatique. *) (* *) (* All rights reserved. This file is distributed under the terms of *) (* the GNU Lesser General Public License version 2.1, with the *) @@ -14,9 +13,10 @@ (* *) (**************************************************************************) -[@@@ocaml.warning "+a-4-9-30-40-41-42"] - -include Identifiable.S - -val create : string -> t -val to_string : t -> string +val lambda_to_clambda + : backend:(module Backend_intf.S) + -> filename:string + -> prefixname:string + -> ppf_dump:Format.formatter + -> Lambda.program + -> Clambda.with_constants diff --git a/middle_end/compilation_state.ml b/middle_end/compilation_state.ml new file mode 100644 index 000000000000..da530a79f854 --- /dev/null +++ b/middle_end/compilation_state.ml @@ -0,0 +1,497 @@ +(**************************************************************************) +(* *) +(* OCaml *) +(* *) +(* Xavier Leroy, projet Gallium, INRIA Rocquencourt *) +(* Pierre Chambart, OCamlPro *) +(* Mark Shinwell and Leo White, Jane Street Europe *) +(* *) +(* Copyright 2010 Institut National de Recherche en Informatique et *) +(* en Automatique *) +(* Copyright 2013--2016 OCamlPro SAS *) +(* Copyright 2014--2019 Jane Street Group LLC *) +(* *) +(* All rights reserved. This file is distributed under the terms of *) +(* the GNU Lesser General Public License version 2.1, with the *) +(* special exception on linking described in the file LICENSE. *) +(* *) +(**************************************************************************) + +[@@@ocaml.warning "+a-4-30-40-41-42"] + +module CU = Compilation_unit +module UI = Cmx_format.Unit_info + +type error = + | Illegal_renaming of { + contains_unit : CU.t; + (* CR-someday mshinwell: As per CR below, change the type of this from + [CU.Name.t] to [CU.t]. *) + desired_unit_name : CU.Name.t; + filename : string; + } + | Illegal_import_for_pack_prefix of { + found_unit_name : CU.Name.t; + for_pack_prefix_in_cmx : CU.Name.t list; + current_for_pack_prefix : CU.Name.t list; + filename : string; + } + | Wrong_for_pack_prefix of { + expected_prefix : CU.Name.t list; + found_prefix : CU.Name.t list; + filename : string; + } + +exception Error of error + +module Error = struct + (* CR mshinwell: Try to avoid writing these types out here. *) + type t = error = + | Illegal_renaming of { + contains_unit : CU.t; + desired_unit_name : CU.Name.t; + filename : string; + } + | Illegal_import_for_pack_prefix of { + found_unit_name : CU.Name.t; + for_pack_prefix_in_cmx : CU.Name.t list; + current_for_pack_prefix : CU.Name.t list; + filename : string; + } + | Wrong_for_pack_prefix of { + expected_prefix : CU.Name.t list; + found_prefix : CU.Name.t list; + filename : string; + } + + let report_error ppf error = + let print_prefix ppf prefix = + match prefix with + | [] -> Format.pp_print_string ppf "no `-for-pack' prefix" + | _ -> + Format.fprintf ppf "a `-for-pack' prefix of [%a]" + (Format.pp_print_list + ~pp_sep:(fun ppf () -> Format.pp_print_string ppf ".") + CU.Name.print) + prefix + in + match error with + | Illegal_renaming { contains_unit; desired_unit_name; filename; } -> + Format.fprintf ppf "%a contains the description for unit@ \ + [%a] when [%a] was expected" + Location.print_filename filename + CU.print_name contains_unit + CU.Name.print desired_unit_name + | Wrong_for_pack_prefix { expected_prefix; found_prefix; filename; } -> + Format.fprintf ppf "%s contains the description for a unit with@ \ + %a;@ but %a was expected" + filename + print_prefix found_prefix + print_prefix expected_prefix + | Illegal_import_for_pack_prefix { found_unit_name; + for_pack_prefix_in_cmx; current_for_pack_prefix; filename; } -> + Format.fprintf ppf "%s contains the description for a unit [%a] with@ \ + %a; this cannot be used because@ " + filename + CU.Name.print found_unit_name + print_prefix for_pack_prefix_in_cmx; + begin match current_for_pack_prefix with + | [] -> + Format.fprintf ppf "the current unit is being compiled \ + without a `-for-pack' prefix" + | _ -> + Format.fprintf ppf "the current unit has %a" + print_prefix current_for_pack_prefix + end + + let () = + Location.register_error_of_exn (function + | Error err -> Some (Location.error_of_printer_file report_error err) + | _ -> None) +end + +type export_info = + | Closure of Clambda.value_approximation + | Flambda of Export_info.t + +type t = { + mutable defines : CU.t list; + mutable imports_cmx : Digest.t option CU.Map.t; + mutable export_info : export_info; +} + +let empty_export_info = + if Config.flambda then Flambda Export_info.empty + else Closure Value_unknown + +let empty = { + defines = []; + imports_cmx = CU.Map.empty; + export_info = empty_export_info; +} + +let current_unit = empty + +let merged_flambda_export_info = ref Export_info.empty + +type find_cmx_result = + | Current_unit + | Already_loaded of UI.t + | Just_loaded of { info : UI.t; filename : string; } + | No_cmx_file_or_opaque + +(* CR-someday mshinwell: The type of [global_infos_table] should be changed + to [_ CU.Tbl.t] when packing has been improved to provide + "-for-pack" information on .cmi files. Then, the checks against [CU.name] + below will just turn into [CU.equal]. *) +let global_infos_table : find_cmx_result CU.Name.Tbl.t = CU.Name.Tbl.create 17 + +(* This is the equivalent of the old [Compilenv.get_global_info]. *) +let find_or_load_unit_info_from_cmx ?comp_unit desired_unit_name + : find_cmx_result = + let current_unit_name = CU.name (CU.get_current_exn ()) in + if CU.Name.equal desired_unit_name current_unit_name then + Current_unit + else + try CU.Name.Tbl.find global_infos_table desired_unit_name + with Not_found -> + let desired_unit_name_as_string = CU.Name.to_string desired_unit_name in + let info_and_crc = + if Env.is_imported_opaque desired_unit_name_as_string then None + else begin + match Load_path.find_uncap (desired_unit_name_as_string ^ ".cmx") with + | exception Not_found -> + let warn = Warnings.No_cmx_file desired_unit_name_as_string in + Location.prerr_warning Location.none warn; + None + | filename -> + let info, crc = Cmx_format.load_compile_time_info ~filename in + let contains_unit = UI.unit info in + if not (CU.Name.equal (CU.name contains_unit) desired_unit_name) + then begin + raise (Error ( + Illegal_renaming { + contains_unit; + desired_unit_name = desired_unit_name; + filename; + })) + end; + Some (info, crc, filename) + end + in + begin match info_and_crc with + | None -> + (* If the caller could not specify the [Compilation_unit.t], perhaps + because they only had an [Ident.t], then we have to assume that the + .cmx file is not packed. *) + let comp_unit = + match comp_unit with + | None -> Compilation_unit.create desired_unit_name + | Some comp_unit -> comp_unit + in + current_unit.imports_cmx <- + CU.Map.add comp_unit None current_unit.imports_cmx; + CU.Name.Tbl.add global_infos_table desired_unit_name + No_cmx_file_or_opaque; + No_cmx_file_or_opaque + | Some (info, crc, filename) -> + current_unit.imports_cmx <- + CU.Map.add (UI.unit info) (Some crc) current_unit.imports_cmx; + begin match UI.export_info info with + | Closure _ -> () + | Flambda export_info -> + merged_flambda_export_info := + Export_info.merge !merged_flambda_export_info export_info + end; + CU.Name.Tbl.add global_infos_table desired_unit_name + (Already_loaded info); + Just_loaded { info; filename; } + end + +type compilation_unit_or_predef = + | Compilation_unit of Compilation_unit.t + | Predef + +(* CR mshinwell: We may be missing the toplevel_approx check that used + to live in [symbol_for_global]. *) + +let compilation_unit_for_global id : compilation_unit_or_predef = + if not (Ident.persistent id || Ident.is_predef id) then begin + Misc.fatal_errorf "[compilation_unit_for_global] with identifier %a \ + that is neither persistent nor predefined" + Ident.print id + end; + if Ident.is_predef id then begin + Predef + end else begin + let desired_unit_name = CU.Name.of_string (Ident.name id) in + match find_or_load_unit_info_from_cmx desired_unit_name with + | Current_unit -> + Compilation_unit (Compilation_unit.get_current_exn ()) + | No_cmx_file_or_opaque -> + (* Assume that the compilation unit (called [id]), whose .cmx file + is missing, is not packed. *) + Compilation_unit (CU.create (CU.Name.of_string (Ident.name id))) + | Already_loaded info -> Compilation_unit (UI.unit info) + | Just_loaded { info; filename; } -> + let for_pack_prefix_in_cmx = CU.for_pack_prefix (UI.unit info) in + let current_for_pack_prefix = + CU.for_pack_prefix (Compilation_unit.get_current_exn ()) + in + let is_valid_prefix = + Misc.Stdlib.List.is_prefix ~equal:CU.Name.equal + for_pack_prefix_in_cmx ~of_:current_for_pack_prefix + in + if not is_valid_prefix then begin + raise (Error ( + Illegal_import_for_pack_prefix { + found_unit_name = CU.name (UI.unit info); + for_pack_prefix_in_cmx; + current_for_pack_prefix; + filename; + })) + end; + Compilation_unit (UI.unit info) + end + +let cache_unit_info ui = + CU.Name.Tbl.add global_infos_table (CU.name (UI.unit ui)) (Already_loaded ui) + +let check_is_flambda flambda = + if Config.flambda <> flambda then begin + Misc.fatal_errorf "This function can only be used in %s mode" + (if flambda then "Flambda" else "Closure") + end + +module Closure_only = struct + module CstMap = + Map.Make(struct + type t = Clambda.ustructured_constant + let compare = Clambda.compare_structured_constants + (* PR#6442: it is incorrect to use Stdlib.compare on values of type t + because it compares "0.0" and "-0.0" equal. *) + end) + + type structured_constants = + { strcst_shared : Symbol.t CstMap.t; + strcst_all: (Symbol.t * Clambda.ustructured_constant) list; + } + + let structured_constants_empty = + { strcst_shared = CstMap.empty; + strcst_all = []; + } + + let structured_constants = ref structured_constants_empty + let exported_constants = Symbol.Tbl.create 17 + + let reset () = + structured_constants := structured_constants_empty; + Symbol.Tbl.clear exported_constants + + let add_exported_constant s = + check_is_flambda false; + Symbol.Tbl.replace exported_constants s () + + let snapshot () = + check_is_flambda false; + !structured_constants + + let backtrack s = + check_is_flambda false; + structured_constants := s + + let new_structured_constant cst ~shared = + check_is_flambda false; + let {strcst_shared; strcst_all} = !structured_constants in + if shared then + try + CstMap.find cst strcst_shared + with Not_found -> + let sym = Symbol.for_lifted_anonymous_constant () in + structured_constants := + { + strcst_shared = CstMap.add cst sym strcst_shared; + strcst_all = (sym, cst) :: strcst_all; + }; + sym + else + let sym = Symbol.for_lifted_anonymous_constant () in + structured_constants := + { + strcst_shared; + strcst_all = (sym, cst) :: strcst_all; + }; + sym + + let clear_structured_constants () = + check_is_flambda false; + structured_constants := structured_constants_empty + + let structured_constants () = + check_is_flambda false; + let provenance : Clambda.usymbol_provenance = + { original_idents = []; + module_path = + Path.Pident (Ident.create_persistent ( + CU.Name.to_string (CU.name (CU.get_current_exn ())))); + } + in + List.map + (fun (symbol, definition) -> + { Clambda. + symbol; + exported = Symbol.Tbl.mem exported_constants symbol; + definition; + provenance = Some provenance; + }) + (!structured_constants).strcst_all + + let toplevel_approx : + Clambda.value_approximation CU.Name.Tbl.t = CU.Name.Tbl.create 16 + + let record_global_approx_toplevel () = + check_is_flambda false; + let approx = + match current_unit.export_info with + | Closure approx -> approx + | Flambda _ -> + Misc.fatal_error "Expected Closure approximations but found \ + Flambda export info" + in + CU.Name.Tbl.add toplevel_approx (CU.name (CU.get_current_exn ())) approx + + let global_approx id = + if not (Ident.persistent id || Ident.is_predef id) then begin + Misc.fatal_errorf "[global_approx] with identifier %a \ + that is neither persistent nor predefined" + Ident.print id + end; + if Ident.is_predef id then Clambda.Value_unknown + else + let name = CU.Name.of_string (Ident.name id) in + try CU.Name.Tbl.find toplevel_approx name + with Not_found -> + match find_or_load_unit_info_from_cmx name with + | No_cmx_file_or_opaque -> Clambda.Value_unknown + | Current_unit -> + begin match current_unit.export_info with + | Closure approx -> approx + | Flambda _ -> + Misc.fatal_errorf "%a: Expected Closure approximations but found \ + Flambda export info" + CU.Name.print name + end + | Already_loaded info | Just_loaded { info; filename = _; } -> + begin match UI.export_info info with + | Closure approx -> approx + | Flambda _ -> + Misc.fatal_errorf "%a: Expected Closure approximations but \ + found Flambda export info" + CU.Name.print name + end + + let set_global_approx approx = + check_is_flambda false; + current_unit.export_info <- Closure approx +end + +module Flambda_only = struct + let imported_sets_of_closures_table = Set_of_closures_id.Tbl.create 10 + + let reset () = + merged_flambda_export_info := Export_info.empty; + Set_of_closures_id.Tbl.clear imported_sets_of_closures_table + + let set_export_info export_info = + check_is_flambda true; + current_unit.export_info <- Flambda export_info + + let export_info_for_unit comp_unit = + let current_comp_unit = CU.get_current_exn () in + let desired_path = CU.full_path comp_unit in + let current_path = CU.full_path current_comp_unit in + let prefix_result = + Misc.Stdlib.List.longest_common_prefix ~equal:CU.Name.equal + desired_path current_path + in + let for_pack_prefix = prefix_result.longest_common_prefix in + let desired_path_without_for_pack_prefix = prefix_result.first in + let name_of_unit_containing_symbol = + match desired_path_without_for_pack_prefix with + | [] -> CU.name current_comp_unit + | name_of_unit_containing_symbol::_ -> name_of_unit_containing_symbol + in + let extract_flambda_export_info info = + match UI.export_info info with + | Closure _ -> + Misc.fatal_errorf "%a: Expected Flambda export info but \ + found Closure approximations" + CU.print (UI.unit info) + | Flambda export_info -> Some export_info + in + match + find_or_load_unit_info_from_cmx ~comp_unit name_of_unit_containing_symbol + with + | No_cmx_file_or_opaque -> None + | Current_unit -> + begin match current_unit.export_info with + | Closure _ -> + Misc.fatal_errorf "%a (current unit): expected Flambda export info \ + but found Closure approximations" + CU.print (CU.get_current_exn ()) + | Flambda export_info -> Some export_info + end + | Already_loaded info -> extract_flambda_export_info info + | Just_loaded { info; filename; } -> + let for_pack_prefix_in_cmx = CU.for_pack_prefix (UI.unit info) in + if not (Misc.Stdlib.List.equal CU.Name.equal for_pack_prefix + for_pack_prefix_in_cmx) + then begin + raise (Error ( + Wrong_for_pack_prefix { + expected_prefix = for_pack_prefix; + found_prefix = for_pack_prefix_in_cmx; + filename; + })) + end; + extract_flambda_export_info info + + let merged_export_info () = + check_is_flambda true; + !merged_flambda_export_info +end + +let reset comp_unit = + CU.Name.Tbl.clear global_infos_table; + current_unit.defines <- [comp_unit]; + current_unit.imports_cmx <- CU.Map.empty; + current_unit.export_info <- empty_export_info; + Closure_only.reset (); + Flambda_only.reset () + +let require_global global_ident = + if not (Ident.is_predef global_ident) then begin + ignore (compilation_unit_for_global global_ident + : compilation_unit_or_predef) + end + +module Snapshot = struct + type nonrec export_info = export_info = + | Closure of Clambda.value_approximation + | Flambda of Export_info.t + + type t = { + unit : CU.t; + defines : Compilation_unit.t list; + imports_cmx : Digest.t option CU.Map.t; + export_info : export_info; + } + + let create () = + { unit = CU.get_current_exn (); + defines = current_unit.defines; + imports_cmx = current_unit.imports_cmx; + export_info = current_unit.export_info; + } +end diff --git a/middle_end/compilation_state.mli b/middle_end/compilation_state.mli new file mode 100644 index 000000000000..1036016ba864 --- /dev/null +++ b/middle_end/compilation_state.mli @@ -0,0 +1,160 @@ +(**************************************************************************) +(* *) +(* OCaml *) +(* *) +(* Xavier Leroy, projet Gallium, INRIA Rocquencourt *) +(* Pierre Chambart, OCamlPro *) +(* Mark Shinwell and Leo White, Jane Street Europe *) +(* *) +(* Copyright 2010 Institut National de Recherche en Informatique et *) +(* en Automatique *) +(* Copyright 2013--2016 OCamlPro SAS *) +(* Copyright 2014--2019 Jane Street Group LLC *) +(* *) +(* All rights reserved. This file is distributed under the terms of *) +(* the GNU Lesser General Public License version 2.1, with the *) +(* special exception on linking described in the file LICENSE. *) +(* *) +(**************************************************************************) + +(** Compilation-related state that is accumulated prior to being written + into .cmx files. + + This module forms part of the "middle end" of the compiler. It is not + used from [Cmmgen] onwards. +*) + +[@@@ocaml.warning "+a-4-30-40-41-42"] + +(** Functions in [Closure_only] are exclusively for use by the original + "Closure" middle-end. *) +module Closure_only : sig + (** Given a global identifier that occurs somewhere in the program (without + knowing the "-for-pack" prefix of its compilation unit), determine + the approximation for such identifier. *) + val global_approx : Ident.t -> Clambda.value_approximation + + (** Record the approximation of the unit being compiled. *) + val set_global_approx : Clambda.value_approximation -> unit + + (** Record the current approximation for the current toplevel phrase. + This is used by the native toplevel. *) + val record_global_approx_toplevel : unit -> unit + + (** Record that the given symbol is that of a constant which is to be + accessible from other units. *) + val add_exported_constant : Symbol.t -> unit + + type structured_constants + + (** Record the current list of structured constants to be statically + allocated (c.f. [structured_constants], below). *) + val snapshot : unit -> structured_constants + + (** Return the list of structured constants to be statically allocated + to the given earlier state. *) + val backtrack : structured_constants -> unit + + (** Record a constant to be statically allocated, assigning a symbol for it + in the process. If [shared] is [true], the constant can be shared with + another structurally-equal constant. *) + val new_structured_constant + : Clambda.ustructured_constant + -> shared:bool + -> Symbol.t + + (** All structured constants to be statically allocated. *) + val structured_constants : unit -> Clambda.preallocated_constant list + + (** Reset the list of structured constants to be statically allocated. *) + val clear_structured_constants : unit -> unit +end + +(** Functions in [Flambda_only] are exclusively for use by the Flambda + middle-end. *) +module Flambda_only : sig + (** Record the export information for the unit being compiled. *) + val set_export_info : Export_info.t -> unit + + (** Retrieve the export information for the given compilation unit, + if possible. (It may not be possible e.g. because a .cmx file is + missing; in such cases, [None] is returned.) *) + val export_info_for_unit : Compilation_unit.t -> Export_info.t option + + (** Return all the information loaded from external compilation units. *) + val merged_export_info : unit -> Export_info.t + + (** Table recording sets of closures imported from .cmx files. *) + val imported_sets_of_closures_table + : Simple_value_approx.function_declarations option Set_of_closures_id.Tbl.t +end + +type compilation_unit_or_predef = private + | Compilation_unit of Compilation_unit.t + | Predef + +(** Return the [Compilation_unit.t] in which the given [Ident.t] (which must be + persistent or predef) is defined. *) +val compilation_unit_for_global : Ident.t -> compilation_unit_or_predef + +(** Enter the given info in the cache. The info will be returned by + [symbol_for_global] and [global_approx] without looking at the + corresponding .cmx file. *) +val cache_unit_info : Cmx_format.Unit_info.t -> unit + +(** Note that the given global identifier must be linked. *) +val require_global : Ident.t -> unit + +module Snapshot : sig + type export_info = private + | Closure of Clambda.value_approximation + | Flambda of Export_info.t + + type t = private { + unit : Compilation_unit.t; + (** Name of unit implemented, along with any -for-pack prefix *) + defines : Compilation_unit.t list; + (** (Sub-)units implemented, in initialisation order, with the first to be + initialised at the head of the list. *) + imports_cmx : Digest.t option Compilation_unit.Map.t; + (** Unit information imported *) + export_info : export_info; + (** Term language information, e.g. for inlining *) + } + + (** Take a snapshot of this module's mutable state. *) + val create : unit -> t +end + +(** Clear the mutable state of this module and prepare it for use with + the given compilation unit. This function does not set the current + compilation unit (c.f. [Compilation_unit.set_current]). *) +val reset : Compilation_unit.t -> unit + +module Error : sig + (** Errors raised by the above functions. Note that errors may also be + raised from [Cmx_format] when using such functions. *) + type t = private + | Illegal_renaming of { + contains_unit : Compilation_unit.t; + desired_unit_name : Compilation_unit.Name.t; + filename : string; + } + | Illegal_import_for_pack_prefix of { + found_unit_name : Compilation_unit.Name.t; + for_pack_prefix_in_cmx : Compilation_unit.Name.t list; + current_for_pack_prefix : Compilation_unit.Name.t list; + filename : string; + } + | Wrong_for_pack_prefix of { + expected_prefix : Compilation_unit.Name.t list; + found_prefix : Compilation_unit.Name.t list; + filename : string; + } + + (** Print the given error message on the given formatter. *) + val report_error : Format.formatter -> t -> unit +end + +(** Exceptions that hold errors raised from the above functions. *) +exception Error of Error.t diff --git a/middle_end/compilation_unit.ml b/middle_end/compilation_unit.ml new file mode 100644 index 000000000000..66bc47a92147 --- /dev/null +++ b/middle_end/compilation_unit.ml @@ -0,0 +1,155 @@ +(**************************************************************************) +(* *) +(* OCaml *) +(* *) +(* Pierre Chambart, OCamlPro *) +(* Mark Shinwell and Leo White, Jane Street Europe *) +(* *) +(* Copyright 2013--2016 OCamlPro SAS *) +(* Copyright 2014--2019 Jane Street Group LLC *) +(* *) +(* All rights reserved. This file is distributed under the terms of *) +(* the GNU Lesser General Public License version 2.1, with the *) +(* special exception on linking described in the file LICENSE. *) +(* *) +(**************************************************************************) + +[@@@ocaml.warning "+a-4-30-40-41-42"] + +open! Int_replace_polymorphic_compare + +module String = Misc.Stdlib.String + +module Name = struct + type t = string + + include Identifiable.Make (struct + type nonrec t = t + + let compare = String.compare + let equal = String.equal + let hash = Hashtbl.hash + + let print = String.print + let output chan t = print (Format.formatter_of_out_channel chan) t + end) + + let isupper chr = + Stdlib.(=) (Char.uppercase_ascii chr) chr + + let of_string str = + if String.length str < 1 || not (isupper (String.get str 0)) then begin + Misc.fatal_errorf "Bad compilation unit name: %s" str + end; + str + + let to_string t = t +end + +type t = { + for_pack_prefix : Name.t list; + id : Ident.t; + hash : int; +} + +include Identifiable.Make (struct + type nonrec t = t + + let compare + ({ id = id1; for_pack_prefix = for_pack_prefix1; hash = hash1; } as t1) + ({ id = id2; for_pack_prefix = for_pack_prefix2; hash = hash2; } as t2) + = + if t1 == t2 then 0 + else + let c = Stdlib.compare hash1 hash2 in + if c <> 0 then c + else + let c = Ident.compare id1 id2 in + if c <> 0 then c + else + Misc.Stdlib.List.compare Name.compare + for_pack_prefix1 for_pack_prefix2 + + let equal x y = + if x == y then true + else compare x y = 0 + + let print ppf { for_pack_prefix; id; hash = _; } = + match for_pack_prefix with + | [] -> + Format.fprintf ppf "@[(\ + @[(id@ %a)@])@]" + Ident.print id + | for_pack_prefix -> + Format.fprintf ppf "@[(\ + @[(for_pack_prefix@ %a)@]@;\ + @[(id@ %a)@])@]" + (Format.pp_print_list + ~pp_sep:(fun ppf () -> Format.pp_print_string ppf ".") + Name.print) + for_pack_prefix + Ident.print id + + let output oc t = + print (Format.formatter_of_out_channel oc) t + + let hash t = t.hash +end) + +let print_name ppf t = + Format.pp_print_string ppf (Ident.name t.id) + +let create ?(for_pack_prefix = []) name = + let id = Ident.create_persistent name in + if not (Ident.persistent id) then begin + Misc.fatal_error "Compilation_unit.create with non-persistent Ident.t" + end; + { id; + for_pack_prefix; + hash = Hashtbl.hash (Ident.name id, for_pack_prefix); + } + +let none = create (Name.of_string "*none*") + +let name t = Name.of_string (Ident.name t.id) + +let is_packed t = + match t.for_pack_prefix with + | [] -> false + | _::_ -> true + +let for_pack_prefix t = t.for_pack_prefix + +let for_pack_prefix_as_string t = + match for_pack_prefix t with + | [] -> None + | prefix -> Some (String.concat "." (List.map Name.to_string prefix)) + +let full_path t = t.for_pack_prefix @ [name t] + +let full_path_as_string t = + String.concat "." (List.map Name.to_string (full_path t)) + +let current = ref None + +let is_current_exn arg = + match !current with + | None -> Misc.fatal_error "Current compilation unit is not set" + | Some cur -> equal cur arg + +let set_current t = current := Some t + +let get_current () = !current + +let get_current_exn () = + match !current with + | Some current -> current + | None -> Misc.fatal_error "Current compilation unit is not set" + +let get_current_id_exn () = + let id = (get_current_exn ()).id in + assert (Ident.persistent id); (* see [create], above *) + id + +let path t = + Path.Pident (Ident.create_persistent (Name.to_string (name t))) diff --git a/middle_end/compilation_unit.mli b/middle_end/compilation_unit.mli new file mode 100644 index 000000000000..c0fa9369fe4b --- /dev/null +++ b/middle_end/compilation_unit.mli @@ -0,0 +1,108 @@ +(**************************************************************************) +(* *) +(* OCaml *) +(* *) +(* Pierre Chambart, OCamlPro *) +(* Mark Shinwell and Leo White, Jane Street Europe *) +(* *) +(* Copyright 2013--2016 OCamlPro SAS *) +(* Copyright 2014--2019 Jane Street Group LLC *) +(* *) +(* All rights reserved. This file is distributed under the terms of *) +(* the GNU Lesser General Public License version 2.1, with the *) +(* special exception on linking described in the file LICENSE. *) +(* *) +(**************************************************************************) + +[@@@ocaml.warning "+a-4-30-40-41-42"] + +module Name : sig + (** The name of a compilation unit, without any "-for-pack" prefix. *) + + type t + + (** Printing, comparison, sets, maps, etc. *) + include Identifiable.S with type t := t + + (** Create a compilation unit name from a string. *) + val of_string : string -> t + + (** Convert a compilation unit name to a string. *) + val to_string : t -> string +end + +(** The name of a "compilation unit" along with any "-for-pack" prefix that + was specified when the unit was compiled. By "compilation unit" we + mean the code and data associated with the compilation of a single .ml + source file: that is to say, file-level entities having OCaml semantics. + The notion neither includes the special "startup" files nor external + libraries. + + The [for_pack_prefix] is specified with the oldest pack at the tail of + the list. *) +type t + +(** Printing, comparison, sets, maps, etc. *) +include Identifiable.S with type t := t + +(** Print only the name of the given compilation unit. *) +val print_name : Format.formatter -> t -> unit + +(** Create a compilation unit with the given [name] (which is not encoded or + mangled in any way) and an optional "-for-pack" prefix. *) +val create : ?for_pack_prefix:Name.t list -> Name.t -> t + +(** A distinguished compilation unit for initialisation of mutable state. *) +val none : t + +(** Whether the specified compilation unit is that of the current unit + being compiled. An exception will be raised if [set_current] has not + previously been called. *) +val is_current_exn : t -> bool + +(** Record that the given value of type [t] is that of the current unit being + compiled. *) +val set_current : t -> unit + +(** Get the value of type [t] corresponding to the current unit being + compiled. An exception will be raised if [set_current] has not + previously been called. *) +val get_current_exn : unit -> t + +(** Get the persistent identifier corresponding to the given compilation + unit. *) +val get_current_id_exn : unit -> Ident.t + +(** Like [get_current_exn], but returns an option instead of raising an + exception. *) +val get_current : unit -> t option + +(** The name of the compilation unit, excluding any [for_pack_prefix]. *) +val name : t -> Name.t + +(** The [for_pack_prefix] specified to [create] for the given compilation + unit. *) +val for_pack_prefix : t -> Name.t list + +(** If an empty [for_pack_prefix] was specified to [create] for the given + compilation unit, this function returns [None]. Otherwise it returns the + textual version of the [for_pack_prefix] (i.e. the components separated + by dots). *) +val for_pack_prefix_as_string : t -> string option + +(** Returns [true] iff the two given compilation units have ... *) + +(** Like [for_pack_prefix], except with the [name] of the compilation unit + appended. *) +val full_path : t -> Name.t list + +(** Like [full_path], except with the result returned as a string, with + a dot between each pair of components. *) +val full_path_as_string : t -> string + +(** Returns [true] iff the given compilation unit has a non-empty + [for_pack_prefix]. *) +val is_packed : t -> bool + +(** Convert a compilation unit to a path. *) +val path : t -> Path.t diff --git a/asmcomp/convert_primitives.ml b/middle_end/convert_primitives.ml similarity index 100% rename from asmcomp/convert_primitives.ml rename to middle_end/convert_primitives.ml diff --git a/asmcomp/convert_primitives.mli b/middle_end/convert_primitives.mli similarity index 100% rename from asmcomp/convert_primitives.mli rename to middle_end/convert_primitives.mli diff --git a/middle_end/alias_analysis.ml b/middle_end/flambda/alias_analysis.ml similarity index 100% rename from middle_end/alias_analysis.ml rename to middle_end/flambda/alias_analysis.ml diff --git a/middle_end/alias_analysis.mli b/middle_end/flambda/alias_analysis.mli similarity index 100% rename from middle_end/alias_analysis.mli rename to middle_end/flambda/alias_analysis.mli diff --git a/middle_end/allocated_const.ml b/middle_end/flambda/allocated_const.ml similarity index 100% rename from middle_end/allocated_const.ml rename to middle_end/flambda/allocated_const.ml diff --git a/middle_end/allocated_const.mli b/middle_end/flambda/allocated_const.mli similarity index 100% rename from middle_end/allocated_const.mli rename to middle_end/flambda/allocated_const.mli diff --git a/middle_end/augment_specialised_args.ml b/middle_end/flambda/augment_specialised_args.ml similarity index 100% rename from middle_end/augment_specialised_args.ml rename to middle_end/flambda/augment_specialised_args.ml diff --git a/middle_end/augment_specialised_args.mli b/middle_end/flambda/augment_specialised_args.mli similarity index 100% rename from middle_end/augment_specialised_args.mli rename to middle_end/flambda/augment_specialised_args.mli diff --git a/middle_end/base_types/closure_element.ml b/middle_end/flambda/base_types/closure_element.ml similarity index 100% rename from middle_end/base_types/closure_element.ml rename to middle_end/flambda/base_types/closure_element.ml diff --git a/middle_end/base_types/closure_element.mli b/middle_end/flambda/base_types/closure_element.mli similarity index 97% rename from middle_end/base_types/closure_element.mli rename to middle_end/flambda/base_types/closure_element.mli index d78dd9b3696d..98bfdfd6306d 100644 --- a/middle_end/base_types/closure_element.mli +++ b/middle_end/flambda/base_types/closure_element.mli @@ -30,3 +30,6 @@ val get_compilation_unit : t -> Compilation_unit.t val unique_name : t -> string val output_full : out_channel -> t -> unit + +val name : t -> string +val stamp : t -> int diff --git a/middle_end/base_types/closure_id.ml b/middle_end/flambda/base_types/closure_id.ml similarity index 100% rename from middle_end/base_types/closure_id.ml rename to middle_end/flambda/base_types/closure_id.ml diff --git a/middle_end/base_types/closure_id.mli b/middle_end/flambda/base_types/closure_id.mli similarity index 100% rename from middle_end/base_types/closure_id.mli rename to middle_end/flambda/base_types/closure_id.mli diff --git a/middle_end/base_types/closure_origin.ml b/middle_end/flambda/base_types/closure_origin.ml similarity index 100% rename from middle_end/base_types/closure_origin.ml rename to middle_end/flambda/base_types/closure_origin.ml diff --git a/middle_end/base_types/closure_origin.mli b/middle_end/flambda/base_types/closure_origin.mli similarity index 100% rename from middle_end/base_types/closure_origin.mli rename to middle_end/flambda/base_types/closure_origin.mli diff --git a/middle_end/base_types/export_id.ml b/middle_end/flambda/base_types/export_id.ml similarity index 100% rename from middle_end/base_types/export_id.ml rename to middle_end/flambda/base_types/export_id.ml diff --git a/middle_end/base_types/export_id.mli b/middle_end/flambda/base_types/export_id.mli similarity index 100% rename from middle_end/base_types/export_id.mli rename to middle_end/flambda/base_types/export_id.mli diff --git a/middle_end/base_types/id_types.ml b/middle_end/flambda/base_types/id_types.ml similarity index 100% rename from middle_end/base_types/id_types.ml rename to middle_end/flambda/base_types/id_types.ml diff --git a/middle_end/base_types/id_types.mli b/middle_end/flambda/base_types/id_types.mli similarity index 100% rename from middle_end/base_types/id_types.mli rename to middle_end/flambda/base_types/id_types.mli diff --git a/middle_end/base_types/mutable_variable.ml b/middle_end/flambda/base_types/mutable_variable.ml similarity index 97% rename from middle_end/base_types/mutable_variable.ml rename to middle_end/flambda/base_types/mutable_variable.ml index 07fe3152daaf..85b6d279f3e8 100644 --- a/middle_end/base_types/mutable_variable.ml +++ b/middle_end/flambda/base_types/mutable_variable.ml @@ -20,3 +20,4 @@ open! Int_replace_polymorphic_compare include Variable let create_from_variable = rename +let rename_into_variable = rename diff --git a/middle_end/base_types/mutable_variable.mli b/middle_end/flambda/base_types/mutable_variable.mli similarity index 94% rename from middle_end/base_types/mutable_variable.mli rename to middle_end/flambda/base_types/mutable_variable.mli index 17fe208fe07d..04e7523b01ec 100644 --- a/middle_end/base_types/mutable_variable.mli +++ b/middle_end/flambda/base_types/mutable_variable.mli @@ -30,6 +30,11 @@ val create_from_variable -> Variable.t -> t +val rename_into_variable + : ?current_compilation_unit:Compilation_unit.t + -> t + -> Variable.t + val rename : ?current_compilation_unit:Compilation_unit.t -> t diff --git a/middle_end/base_types/set_of_closures_id.ml b/middle_end/flambda/base_types/set_of_closures_id.ml similarity index 100% rename from middle_end/base_types/set_of_closures_id.ml rename to middle_end/flambda/base_types/set_of_closures_id.ml diff --git a/middle_end/base_types/set_of_closures_id.mli b/middle_end/flambda/base_types/set_of_closures_id.mli similarity index 100% rename from middle_end/base_types/set_of_closures_id.mli rename to middle_end/flambda/base_types/set_of_closures_id.mli diff --git a/middle_end/base_types/set_of_closures_origin.ml b/middle_end/flambda/base_types/set_of_closures_origin.ml similarity index 100% rename from middle_end/base_types/set_of_closures_origin.ml rename to middle_end/flambda/base_types/set_of_closures_origin.ml diff --git a/middle_end/base_types/set_of_closures_origin.mli b/middle_end/flambda/base_types/set_of_closures_origin.mli similarity index 100% rename from middle_end/base_types/set_of_closures_origin.mli rename to middle_end/flambda/base_types/set_of_closures_origin.mli diff --git a/middle_end/base_types/static_exception.ml b/middle_end/flambda/base_types/static_exception.ml similarity index 100% rename from middle_end/base_types/static_exception.ml rename to middle_end/flambda/base_types/static_exception.ml diff --git a/middle_end/base_types/static_exception.mli b/middle_end/flambda/base_types/static_exception.mli similarity index 100% rename from middle_end/base_types/static_exception.mli rename to middle_end/flambda/base_types/static_exception.mli diff --git a/middle_end/base_types/tag.ml b/middle_end/flambda/base_types/tag.ml similarity index 100% rename from middle_end/base_types/tag.ml rename to middle_end/flambda/base_types/tag.ml diff --git a/middle_end/base_types/tag.mli b/middle_end/flambda/base_types/tag.mli similarity index 100% rename from middle_end/base_types/tag.mli rename to middle_end/flambda/base_types/tag.mli diff --git a/middle_end/base_types/var_within_closure.ml b/middle_end/flambda/base_types/var_within_closure.ml similarity index 100% rename from middle_end/base_types/var_within_closure.ml rename to middle_end/flambda/base_types/var_within_closure.ml diff --git a/middle_end/base_types/var_within_closure.mli b/middle_end/flambda/base_types/var_within_closure.mli similarity index 100% rename from middle_end/base_types/var_within_closure.mli rename to middle_end/flambda/base_types/var_within_closure.mli diff --git a/asmcomp/build_export_info.ml b/middle_end/flambda/build_export_info.ml similarity index 96% rename from asmcomp/build_export_info.ml rename to middle_end/flambda/build_export_info.ml index c3d811deea91..1fb5d682c16b 100644 --- a/asmcomp/build_export_info.ml +++ b/middle_end/flambda/build_export_info.ml @@ -55,7 +55,7 @@ module Env : sig export descriptions with the given global environment. *) val empty_of_global : Global.t -> t end = struct - let fresh_id () = Export_id.create (Compilenv.current_unit ()) + let fresh_id () = Export_id.create (Compilation_unit.get_current_exn ()) module Global = struct type t = @@ -105,17 +105,15 @@ end = struct } let extern_id_descr export_id = - let export = Compilenv.approx_env () in + let export = Compilation_state.Flambda_only.merged_export_info () in try Some (Export_info.find_description export export_id) with Not_found -> None let extern_symbol_descr sym = - if Compilenv.is_predefined_exception sym - then None - else - match - Compilenv.approx_for_global (Symbol.compilation_unit sym) - with + match Symbol.compilation_unit sym with + | Predef -> None + | Compilation_unit sym_unit -> + match Compilation_state.Flambda_only.export_info_for_unit sym_unit with | None -> None | Some export -> try @@ -516,8 +514,8 @@ let describe_program (env : Env.Global.t) (program : Flambda.program) = let build_transient ~(backend : (module Backend_intf.S)) (program : Flambda.program) : Export_info.transient = if !Clflags.opaque then - let compilation_unit = Compilenv.current_unit () in - let root_symbol = Compilenv.current_unit_symbol () in + let compilation_unit = Compilation_unit.get_current_exn () in + let root_symbol = Symbol.for_module_block compilation_unit in Export_info.opaque_transient ~root_symbol ~compilation_unit else (* CR-soon pchambart: Should probably use that instead of the ident of @@ -562,7 +560,7 @@ let build_transient ~(backend : (module Backend_intf.S)) end) (Flambda_utils.all_sets_of_closures_map program) in - let export = Compilenv.approx_env () in + let export = Compilation_state.Flambda_only.merged_export_info () in Export_id.Map.fold (fun _eid (descr:Export_info.descr) invariant_params -> match (descr : Export_info.descr) with @@ -604,7 +602,7 @@ let build_transient ~(backend : (module Backend_intf.S)) end) (Flambda_utils.all_sets_of_closures_map program) in - let export = Compilenv.approx_env () in + let export = Compilation_state.Flambda_only.merged_export_info () in Export_id.Map.fold (fun _eid (descr:Export_info.descr) recursive -> match (descr : Export_info.descr) with @@ -661,13 +659,19 @@ let build_transient ~(backend : (module Backend_intf.S)) function_declarations_map Closure_id.Map.empty in + let root_symbol = + Symbol.for_module_block (Compilation_unit.get_current_exn ()) + in + let values = + Compilation_unit.Map.find (Compilation_unit.get_current_exn ()) values + in Traverse_for_exported_symbols.traverse ~sets_of_closures_map ~closure_id_to_set_of_closures_id ~function_declarations_map - ~values:(Compilation_unit.Map.find (Compilenv.current_unit ()) values) + ~values ~symbol_id - ~root_symbol:(Compilenv.current_unit_symbol ()) + ~root_symbol in let sets_of_closures = Set_of_closures_id.Map.filter_map diff --git a/asmcomp/build_export_info.mli b/middle_end/flambda/build_export_info.mli similarity index 100% rename from asmcomp/build_export_info.mli rename to middle_end/flambda/build_export_info.mli diff --git a/middle_end/closure_conversion.ml b/middle_end/flambda/closure_conversion.ml similarity index 96% rename from middle_end/closure_conversion.ml rename to middle_end/flambda/closure_conversion.ml index 9bdd30ead960..30ce612c8af3 100644 --- a/middle_end/closure_conversion.ml +++ b/middle_end/flambda/closure_conversion.ml @@ -26,8 +26,6 @@ let name_expr = Flambda_utils.name_expr let name_expr_from_var = Flambda_utils.name_expr_from_var type t = { - current_unit_id : Ident.t; - symbol_for_global' : (Ident.t -> Symbol.t); filename : string; backend : (module Backend_intf.S); mutable imported_symbols : Symbol.Set.t; @@ -106,7 +104,7 @@ let tupled_function_call_stub original_params unboxed_version ~closure_bound_var let register_const t (constant:Flambda.constant_defining_value) name : Flambda.constant_defining_value_block_field * Internal_variable_names.t = let var = Variable.create name in - let symbol = Symbol.of_variable var in + let symbol = Symbol.for_lifted_variable var in t.declared_symbols <- (symbol, constant) :: t.declared_symbols; Symbol symbol, name @@ -333,9 +331,7 @@ let rec close t env (lam : Lambda.lambda) : Flambda.t = let zero = Variable.create Names.zero in let is_zero = Variable.create Names.is_zero in let exn = Variable.create Names.division_by_zero in - let exn_symbol = - t.symbol_for_global' Predef.ident_division_by_zero - in + let exn_symbol = Symbol.for_predefined_exn Predef.ident_division_by_zero in let dbg = Debuginfo.from_location loc in let zero_const : Flambda.named = match prim with @@ -455,21 +451,25 @@ let rec close t env (lam : Lambda.lambda) : Flambda.t = (Lambda.Llet(Strict, Pgenval, Ident.create_local "dummy", arg, Lconst const)) | Lprim (Pfield _, [Lprim (Pgetglobal id, [],_)], _) - when Ident.same id t.current_unit_id -> + when Ident.same id (Compilation_unit.get_current_id_exn ()) -> Misc.fatal_errorf "[Pfield (Pgetglobal ...)] for the current compilation \ unit is forbidden upon entry to the middle end" | Lprim (Psetfield (_, _, _), [Lprim (Pgetglobal _, [], _); _], _) -> Misc.fatal_errorf "[Psetfield (Pgetglobal ...)] is \ forbidden upon entry to the middle end" | Lprim (Pgetglobal id, [], _) when Ident.is_predef id -> - let symbol = t.symbol_for_global' id in + let symbol = Symbol.for_predefined_exn id in t.imported_symbols <- Symbol.Set.add symbol t.imported_symbols; name_expr (Symbol symbol) ~name:Names.predef_exn | Lprim (Pgetglobal id, [], _) -> - assert (not (Ident.same id t.current_unit_id)); - let symbol = t.symbol_for_global' id in - t.imported_symbols <- Symbol.Set.add symbol t.imported_symbols; - name_expr (Symbol symbol) ~name:Names.pgetglobal + assert (not (Ident.same id (Compilation_unit.get_current_id_exn ()))); + begin match Compilation_state.compilation_unit_for_global id with + | Predef -> assert false (* should have hit the case above *) + | Compilation_unit comp_unit -> + let symbol = Symbol.for_module_block comp_unit in + t.imported_symbols <- Symbol.Set.add symbol t.imported_symbols; + name_expr (Symbol symbol) ~name:Names.pgetglobal + end | Lprim (lambda_p, args, loc) -> (* One of the important consequences of the ANF-like representation here is that we obtain names corresponding to the components of @@ -678,24 +678,25 @@ and close_let_bound_expression t ?let_rec_ident let_bound_var env ~var:let_bound_var)) | lam -> Expr (close t env lam) -let lambda_to_flambda ~backend ~module_ident ~size ~filename lam +let lambda_to_flambda ~backend ~module_ident:_ ~size ~filename lam : Flambda.program = let lam = add_default_argument_wrappers lam in let module Backend = (val backend : Backend_intf.S) in - let compilation_unit = Compilation_unit.get_current_exn () in let t = - { current_unit_id = Compilation_unit.get_persistent_ident compilation_unit; - symbol_for_global' = Backend.symbol_for_global'; - filename; + { filename; backend; imported_symbols = Symbol.Set.empty; declared_symbols = []; } in - let module_symbol = Backend.symbol_for_global' module_ident in + (* CR mshinwell: Check that the current [Compilation_unit] matches + [module_ident]. Maybe we can remove [module_ident]? *) + let module_symbol = + Symbol.for_module_block (Compilation_unit.get_current_exn ()) + in let block_symbol = let var = Variable.create Internal_variable_names.module_as_block in - Symbol.of_variable var + Symbol.for_lifted_variable var in (* The global module block is built by accessing the fields of all the introduced symbols. *) diff --git a/middle_end/closure_conversion.mli b/middle_end/flambda/closure_conversion.mli similarity index 100% rename from middle_end/closure_conversion.mli rename to middle_end/flambda/closure_conversion.mli diff --git a/middle_end/closure_conversion_aux.ml b/middle_end/flambda/closure_conversion_aux.ml similarity index 100% rename from middle_end/closure_conversion_aux.ml rename to middle_end/flambda/closure_conversion_aux.ml diff --git a/middle_end/closure_conversion_aux.mli b/middle_end/flambda/closure_conversion_aux.mli similarity index 100% rename from middle_end/closure_conversion_aux.mli rename to middle_end/flambda/closure_conversion_aux.mli diff --git a/asmcomp/closure_offsets.ml b/middle_end/flambda/closure_offsets.ml similarity index 100% rename from asmcomp/closure_offsets.ml rename to middle_end/flambda/closure_offsets.ml diff --git a/asmcomp/closure_offsets.mli b/middle_end/flambda/closure_offsets.mli similarity index 100% rename from asmcomp/closure_offsets.mli rename to middle_end/flambda/closure_offsets.mli diff --git a/middle_end/effect_analysis.ml b/middle_end/flambda/effect_analysis.ml similarity index 100% rename from middle_end/effect_analysis.ml rename to middle_end/flambda/effect_analysis.ml diff --git a/middle_end/effect_analysis.mli b/middle_end/flambda/effect_analysis.mli similarity index 100% rename from middle_end/effect_analysis.mli rename to middle_end/flambda/effect_analysis.mli diff --git a/asmcomp/export_info.ml b/middle_end/flambda/export_info.ml similarity index 100% rename from asmcomp/export_info.ml rename to middle_end/flambda/export_info.ml diff --git a/asmcomp/export_info.mli b/middle_end/flambda/export_info.mli similarity index 100% rename from asmcomp/export_info.mli rename to middle_end/flambda/export_info.mli diff --git a/middle_end/extract_projections.ml b/middle_end/flambda/extract_projections.ml similarity index 100% rename from middle_end/extract_projections.ml rename to middle_end/flambda/extract_projections.ml diff --git a/middle_end/extract_projections.mli b/middle_end/flambda/extract_projections.mli similarity index 100% rename from middle_end/extract_projections.mli rename to middle_end/flambda/extract_projections.mli diff --git a/middle_end/find_recursive_functions.ml b/middle_end/flambda/find_recursive_functions.ml similarity index 97% rename from middle_end/find_recursive_functions.ml rename to middle_end/flambda/find_recursive_functions.ml index e69433039fc9..3ea83de3b7ce 100644 --- a/middle_end/find_recursive_functions.ml +++ b/middle_end/flambda/find_recursive_functions.ml @@ -23,7 +23,6 @@ let in_function_declarations (function_decls : Flambda.function_declarations) let directed_graph = let module B = (val backend : Backend_intf.S) in Flambda_utils.fun_vars_referenced_in_decls function_decls - ~closure_symbol:B.closure_symbol in let connected_components = VCC.connected_components_sorted_from_roots_to_leaf directed_graph diff --git a/middle_end/find_recursive_functions.mli b/middle_end/flambda/find_recursive_functions.mli similarity index 100% rename from middle_end/find_recursive_functions.mli rename to middle_end/flambda/find_recursive_functions.mli diff --git a/middle_end/flambda.ml b/middle_end/flambda/flambda.ml similarity index 100% rename from middle_end/flambda.ml rename to middle_end/flambda/flambda.ml diff --git a/middle_end/flambda.mli b/middle_end/flambda/flambda.mli similarity index 100% rename from middle_end/flambda.mli rename to middle_end/flambda/flambda.mli diff --git a/middle_end/flambda_invariants.ml b/middle_end/flambda/flambda_invariants.ml similarity index 100% rename from middle_end/flambda_invariants.ml rename to middle_end/flambda/flambda_invariants.ml diff --git a/middle_end/flambda_invariants.mli b/middle_end/flambda/flambda_invariants.mli similarity index 100% rename from middle_end/flambda_invariants.mli rename to middle_end/flambda/flambda_invariants.mli diff --git a/middle_end/flambda_iterators.ml b/middle_end/flambda/flambda_iterators.ml similarity index 100% rename from middle_end/flambda_iterators.ml rename to middle_end/flambda/flambda_iterators.ml diff --git a/middle_end/flambda_iterators.mli b/middle_end/flambda/flambda_iterators.mli similarity index 100% rename from middle_end/flambda_iterators.mli rename to middle_end/flambda/flambda_iterators.mli diff --git a/middle_end/middle_end.ml b/middle_end/flambda/flambda_middle_end.ml similarity index 82% rename from middle_end/middle_end.ml rename to middle_end/flambda/flambda_middle_end.ml index e604a3285ba9..f73ff3ec0639 100644 --- a/middle_end/middle_end.ml +++ b/middle_end/flambda/flambda_middle_end.ml @@ -6,7 +6,7 @@ (* Mark Shinwell and Leo White, Jane Street Europe *) (* *) (* Copyright 2013--2016 OCamlPro SAS *) -(* Copyright 2014--2016 Jane Street Group LLC *) +(* Copyright 2014--2019 Jane Street Group LLC *) (* *) (* All rights reserved. This file is distributed under the terms of *) (* the GNU Lesser General Public License version 2.1, with the *) @@ -14,7 +14,7 @@ (* *) (**************************************************************************) -[@@@ocaml.warning "+a-4-9-30-40-41-42-66"] +[@@@ocaml.warning "+a-4-30-40-41-42-66"] open! Int_replace_polymorphic_compare let _dump_function_sizes flam ~backend = @@ -25,17 +25,14 @@ let _dump_function_sizes flam ~backend = Variable.Map.iter (fun fun_var (function_decl : Flambda.function_declaration) -> let closure_id = Closure_id.wrap fun_var in - let symbol = Backend.closure_symbol closure_id in + let symbol = Symbol.for_lifted_closure closure_id in match Inlining_cost.lambda_smaller' function_decl.body ~than with | Some size -> Format.eprintf "%a %d\n" Symbol.print symbol size | None -> assert false) set_of_closures.function_decls.funs) -let middle_end ~ppf_dump ~prefixname ~backend - ~size - ~filename - ~module_ident - ~module_initializer = +let lambda_to_flambda ~ppf_dump ~prefixname ~backend ~size ~filename + ~module_ident ~module_initializer = Profile.record_call "flambda" (fun () -> let previous_warning_reporter = !Location.warning_reporter in let module WarningSet = @@ -198,3 +195,52 @@ let middle_end ~ppf_dump ~prefixname ~backend (* dump_function_sizes flam ~backend; *) flam)) ) + +let flambda_raw_clambda_dump_if ppf + ({ Flambda_to_clambda. expr = ulambda; preallocated_blocks = _; + structured_constants; exported = _; } as input) = + if !Clflags.dump_rawclambda then + begin + Format.fprintf ppf "@.clambda (before Un_anf):@."; + Printclambda.clambda ppf ulambda; + Symbol.Map.iter (fun sym cst -> + Format.fprintf ppf "%a:@ %a@." + Symbol.print sym + Printclambda.structured_constant cst) + structured_constants + end; + if !Clflags.dump_cmm then Format.fprintf ppf "@.cmm:@."; + input + +let lambda_to_clambda ~backend ~filename ~prefixname ~ppf_dump + (program : Lambda.program) = + let program = + lambda_to_flambda ~ppf_dump ~prefixname ~backend + ~size:program.main_module_block_size + ~filename + ~module_ident:program.module_ident + ~module_initializer:program.code + in + let export = Build_export_info.build_transient ~backend program in + let clambda, preallocated_blocks, constants = + Profile.record_call "backend" (fun () -> + (program, export) + |> Flambda_to_clambda.convert ~ppf_dump + |> flambda_raw_clambda_dump_if ppf_dump + |> (fun { Flambda_to_clambda. expr; preallocated_blocks; + structured_constants; exported; } -> + Compilation_state.Flambda_only.set_export_info exported; + let clambda = Un_anf.apply ~ppf_dump expr in + clambda, preallocated_blocks, structured_constants)) + in + let constants = + List.map (fun (symbol, definition) -> + { Clambda. + symbol; + exported = true; + definition; + provenance = None; + }) + (Symbol.Map.bindings constants) + in + clambda, preallocated_blocks, constants diff --git a/middle_end/middle_end.mli b/middle_end/flambda/flambda_middle_end.mli similarity index 83% rename from middle_end/middle_end.mli rename to middle_end/flambda/flambda_middle_end.mli index 584cb45a9891..e7bb7478b53f 100644 --- a/middle_end/middle_end.mli +++ b/middle_end/flambda/flambda_middle_end.mli @@ -16,14 +16,12 @@ [@@@ocaml.warning "+a-4-9-30-40-41-42"] -(* Translate Lambda code to Flambda code and then optimize it. *) +(** Translate Lambda code to Flambda code, optimize it, and produce Clambda. *) -val middle_end - : ppf_dump:Format.formatter - -> prefixname:string - -> backend:(module Backend_intf.S) - -> size:int +val lambda_to_clambda + : backend:(module Backend_intf.S) -> filename:string - -> module_ident:Ident.t - -> module_initializer:Lambda.lambda - -> Flambda.program + -> prefixname:string + -> ppf_dump:Format.formatter + -> Lambda.program + -> Clambda.with_constants diff --git a/asmcomp/flambda_to_clambda.ml b/middle_end/flambda/flambda_to_clambda.ml similarity index 91% rename from asmcomp/flambda_to_clambda.ml rename to middle_end/flambda/flambda_to_clambda.ml index 2f60f9fcfca3..9bc362647d95 100644 --- a/asmcomp/flambda_to_clambda.ml +++ b/middle_end/flambda/flambda_to_clambda.ml @@ -16,8 +16,8 @@ [@@@ocaml.warning "+a-4-9-30-40-41-42"] -module V = Backend_var -module VP = Backend_var.With_provenance +module V = Variable +module VP = Variable.With_provenance type 'a for_one_or_more_units = { fun_offset_table : int Closure_id.Map.t; @@ -31,11 +31,15 @@ type t = { Set_of_closures_id.t for_one_or_more_units; imported_units : Simple_value_approx.function_declarations for_one_or_more_units; + ppf_dump : Format.formatter; + mutable constants_for_instrumentation : + Clambda.ustructured_constant Symbol.Map.t; } let get_fun_offset t closure_id = let fun_offset_table = - if Closure_id.in_compilation_unit closure_id (Compilenv.current_unit ()) + if Closure_id.in_compilation_unit closure_id + (Compilation_unit.get_current_exn ()) then t.current_unit.fun_offset_table else @@ -49,7 +53,7 @@ let get_fun_offset t closure_id = let get_fv_offset t var_within_closure = let fv_offset_table = if Var_within_closure.in_compilation_unit var_within_closure - (Compilenv.current_unit ()) + (Compilation_unit.get_current_exn ()) then t.current_unit.fv_offset_table else t.imported_units.fv_offset_table in @@ -70,7 +74,7 @@ let is_function_constant t closure_id = (* Instrumentation of closure and field accesses to try to catch compiler bugs. *) -let check_closure ulam named : Clambda.ulambda = +let check_closure t ulam named : Clambda.ulambda = if not !Clflags.clambda_checks then ulam else let desc = @@ -78,14 +82,15 @@ let check_closure ulam named : Clambda.ulambda = ~arity:2 ~alloc:false in let str = Format.asprintf "%a" Flambda.print_named named in - let str_const = - Compilenv.new_structured_constant (Uconst_string str) ~shared:true - in + let sym = Symbol.for_lifted_anonymous_constant () in + t.constants_for_instrumentation <- + Symbol.Map.add sym (Clambda.Uconst_string str) + t.constants_for_instrumentation; Uprim (Pccall desc, - [ulam; Clambda.Uconst (Uconst_ref (str_const, None))], + [ulam; Clambda.Uconst (Uconst_ref (sym, None))], Debuginfo.none) -let check_field ulam pos named_opt : Clambda.ulambda = +let check_field t ulam pos named_opt : Clambda.ulambda = if not !Clflags.clambda_checks then ulam else let desc = @@ -97,11 +102,12 @@ let check_field ulam pos named_opt : Clambda.ulambda = | None -> "" | Some named -> Format.asprintf "%a" Flambda.print_named named in - let str_const = - Compilenv.new_structured_constant (Uconst_string str) ~shared:true - in + let sym = Symbol.for_lifted_anonymous_constant () in + t.constants_for_instrumentation <- + Symbol.Map.add sym (Clambda.Uconst_string str) + t.constants_for_instrumentation; Uprim (Pccall desc, [ulam; Clambda.Uconst (Uconst_int pos); - Clambda.Uconst (Uconst_ref (str_const, None))], + Clambda.Uconst (Uconst_ref (sym, None))], Debuginfo.none) module Env : sig @@ -147,14 +153,14 @@ end = struct let ident_for_var_exn t id = Variable.Map.find id t.var let add_fresh_ident t var = - let id = V.create_local (Variable.name var) in + let id = Variable.rename var in id, { t with var = Variable.Map.add var id t.var } let ident_for_mutable_var_exn t mut_var = Mutable_variable.Map.find mut_var t.mutable_var let add_fresh_mutable_ident t mut_var = - let id = V.create_local (Mutable_variable.name mut_var) in + let id = Mutable_variable.rename_into_variable mut_var in let mutable_var = Mutable_variable.Map.add mut_var id t.mutable_var in id, { t with mutable_var; } @@ -207,8 +213,7 @@ let to_uconst_symbol env symbol : Clambda.ustructured_constant option = | Some _ -> None let to_clambda_symbol' env sym : Clambda.uconstant = - let lbl = Linkage_name.to_string (Symbol.label sym) in - Uconst_ref (lbl, to_uconst_symbol env sym) + Uconst_ref (sym, to_uconst_symbol env sym) let to_clambda_symbol env sym : Clambda.ulambda = Uconst (to_clambda_symbol' env sym) @@ -258,7 +263,7 @@ let rec to_clambda t env (flam : Flambda.t) : Clambda.ulambda = to_clambda_direct_apply t func args direct_func dbg env | Apply { func; args; kind = Indirect; dbg = dbg } -> let callee = subst_var env func in - Ugeneric_apply (check_closure callee (Flambda.Expr (Var func)), + Ugeneric_apply (check_closure t callee (Flambda.Expr (Var func)), subst_vars env args, dbg) | Switch (arg, sw) -> let aux () : Clambda.ulambda = @@ -368,15 +373,15 @@ and to_clambda_named t env var (named : Flambda.named) : Clambda.ulambda = a [Uoffset] construction in the event that the offset is zero, otherwise we might break pattern matches in Cmmgen (in particular for the compilation of "let rec"). *) - check_closure ( + check_closure t ( build_uoffset - (check_closure (subst_var env set_of_closures) + (check_closure t (subst_var env set_of_closures) (Flambda.Expr (Var set_of_closures))) (get_fun_offset t closure_id)) named | Move_within_set_of_closures { closure; start_from; move_to } -> - check_closure (build_uoffset - (check_closure (subst_var env closure) + check_closure t (build_uoffset + (check_closure t (subst_var env closure) (Flambda.Expr (Var closure))) ((get_fun_offset t move_to) - (get_fun_offset t start_from))) named @@ -386,13 +391,14 @@ and to_clambda_named t env var (named : Flambda.named) : Clambda.ulambda = let var_offset = get_fv_offset t var in let pos = var_offset - fun_offset in Uprim (Pfield pos, - [check_field (check_closure ulam (Expr (Var closure))) pos (Some named)], + [check_field t (check_closure t ulam (Expr (Var closure))) + pos (Some named)], Debuginfo.none) | Prim (Pfield index, [block], dbg) -> - Uprim (Pfield index, [check_field (subst_var env block) index None], dbg) + Uprim (Pfield index, [check_field t (subst_var env block) index None], dbg) | Prim (Psetfield (index, maybe_ptr, init), [block; new_value], dbg) -> Uprim (Psetfield (index, maybe_ptr, init), [ - check_field (subst_var env block) index None; + check_field t (subst_var env block) index None; subst_var env new_value; ], dbg) | Prim (Popaque, args, dbg) -> @@ -435,7 +441,7 @@ and to_clambda_switch t env cases num_keys default = and to_clambda_direct_apply t func args direct_func dbg env : Clambda.ulambda = let closed = is_function_constant t direct_func in - let label = Compilenv.function_label direct_func in + let sym = Symbol.for_function direct_func in let uargs = let uargs = subst_vars env args in (* Remove the closure argument if the closure is closed. (Note that the @@ -443,7 +449,7 @@ and to_clambda_direct_apply t func args direct_func dbg env : Clambda.ulambda = dropping any side effects.) *) if closed then uargs else uargs @ [subst_var env func] in - Udirect_apply (label, uargs, dbg) + Udirect_apply (sym, uargs, dbg) (* Describe how to build a runtime closure block that corresponds to the given Flambda set of closures. @@ -473,7 +479,7 @@ and to_clambda_set_of_closures t env (({ function_decls; free_vars } : Flambda.set_of_closures) as set_of_closures) : Clambda.ulambda = let all_functions = Variable.Map.bindings function_decls.funs in - let env_var = V.create_local "env" in + let env_var = Variable.create Internal_variable_names.env in let to_clambda_function (closure_id, (function_decl : Flambda.function_declaration)) : Clambda.ufunction = @@ -525,7 +531,7 @@ and to_clambda_set_of_closures t env env, id :: params) function_decl.params (env, []) in - { label = Compilenv.function_label closure_id; + { label = Symbol.for_function closure_id; arity = Flambda_utils.function_arity function_decl; params = List.map @@ -558,7 +564,7 @@ and to_clambda_closed_set_of_closures t env symbol let env = List.fold_left (fun env (var, _) -> let closure_id = Closure_id.wrap var in - let symbol = Compilenv.closure_symbol closure_id in + let symbol = Symbol.for_lifted_closure closure_id in Env.add_subst env var (to_clambda_symbol env symbol)) (Env.keep_only_symbols env) functions @@ -569,18 +575,21 @@ and to_clambda_closed_set_of_closures t env symbol env, id :: params) function_decl.params (env, []) in - { label = Compilenv.function_label (Closure_id.wrap id); + let body = + Un_anf.apply ~ppf_dump:t.ppf_dump ~what:symbol + (to_clambda t env_body function_decl.body) + in + { label = Symbol.for_function (Closure_id.wrap id); arity = Flambda_utils.function_arity function_decl; params = List.map (fun var -> VP.create var, Lambda.Pgenval) params; return = Lambda.Pgenval; - body = to_clambda t env_body function_decl.body; + body; dbg = function_decl.dbg; env = None; } in let ufunct = List.map to_clambda_function functions in - let closure_lbl = Linkage_name.to_string (Symbol.label symbol) in - Uconst_closure (ufunct, closure_lbl, []) + Uconst_closure (ufunct, symbol, []) let to_clambda_initialize_symbol t env symbol fields : Clambda.ulambda = let fields = @@ -667,13 +676,12 @@ let to_clambda_program t env constants (program : Flambda.program) = in Some (Clambda.Uconst_field_int n) | Some (Flambda.Symbol sym) -> - let lbl = Linkage_name.to_string (Symbol.label sym) in - Some (Clambda.Uconst_field_ref lbl)) + Some (Clambda.Uconst_field_ref sym)) fields in let e1 = to_clambda_initialize_symbol t env symbol init_fields in let preallocated_block : Clambda.preallocated_block = - { symbol = Linkage_name.to_string (Symbol.label symbol); + { symbol; exported = true; tag = Tag.to_int tag; fields = constant_fields; @@ -698,7 +706,7 @@ type result = { exported : Export_info.t; } -let convert (program, exported_transient) : result = +let convert ~ppf_dump (program, exported_transient) : result = let current_unit = let closures = Closure_id.Map.keys (Flambda_utils.make_closure_map program) @@ -714,7 +722,7 @@ let convert (program, exported_transient) : result = } in let imported_units = - let imported = Compilenv.approx_env () in + let imported = Compilation_state.Flambda_only.merged_export_info () in let closures = Set_of_closures_id.Map.fold (fun (_ : Set_of_closures_id.t) fun_decls acc -> @@ -733,10 +741,20 @@ let convert (program, exported_transient) : result = closures; } in - let t = { current_unit; imported_units; } in + let t = + { current_unit; + imported_units; + constants_for_instrumentation = Symbol.Map.empty; + ppf_dump; + } + in let expr, structured_constants, preallocated_blocks = to_clambda_program t Env.empty Symbol.Map.empty program in + let structured_constants = + Symbol.Map.disjoint_union structured_constants + t.constants_for_instrumentation + in let exported = Export_info.t_of_transient exported_transient ~program diff --git a/asmcomp/flambda_to_clambda.mli b/middle_end/flambda/flambda_to_clambda.mli similarity index 95% rename from asmcomp/flambda_to_clambda.mli rename to middle_end/flambda/flambda_to_clambda.mli index 8c493d40d630..d08af3e2bad5 100644 --- a/asmcomp/flambda_to_clambda.mli +++ b/middle_end/flambda/flambda_to_clambda.mli @@ -35,4 +35,7 @@ type result = { For direct calls, the hidden closure parameter is added. Switch tables are also built. *) -val convert : Flambda.program * Export_info.transient -> result +val convert + : ppf_dump:Format.formatter + -> Flambda.program * Export_info.transient + -> result diff --git a/middle_end/flambda_utils.ml b/middle_end/flambda/flambda_utils.ml similarity index 99% rename from middle_end/flambda_utils.ml rename to middle_end/flambda/flambda_utils.ml index fa8d052715d4..b5c05a9b2fcf 100644 --- a/middle_end/flambda_utils.ml +++ b/middle_end/flambda/flambda_utils.ml @@ -812,12 +812,12 @@ module Switch_storer = Switch.Store (struct end) let fun_vars_referenced_in_decls - (function_decls : Flambda.function_declarations) ~closure_symbol = + (function_decls : Flambda.function_declarations) = let fun_vars = Variable.Map.keys function_decls.funs in let symbols_to_fun_vars = Variable.Set.fold (fun fun_var symbols_to_fun_vars -> let closure_id = Closure_id.wrap fun_var in - let symbol = closure_symbol closure_id in + let symbol = Symbol.for_lifted_closure closure_id in Symbol.Map.add symbol fun_var symbols_to_fun_vars) fun_vars Symbol.Map.empty @@ -840,9 +840,9 @@ let fun_vars_referenced_in_decls function_decls.funs let closures_required_by_entry_point ~(entry_point : Closure_id.t) - ~closure_symbol (function_decls : Flambda.function_declarations) = + (function_decls : Flambda.function_declarations) = let dependencies = - fun_vars_referenced_in_decls function_decls ~closure_symbol + fun_vars_referenced_in_decls function_decls in let set = ref Variable.Set.empty in let queue = Queue.create () in diff --git a/middle_end/flambda_utils.mli b/middle_end/flambda/flambda_utils.mli similarity index 98% rename from middle_end/flambda_utils.mli rename to middle_end/flambda/flambda_utils.mli index 0f7b31862758..57b5baafb1b5 100644 --- a/middle_end/flambda_utils.mli +++ b/middle_end/flambda/flambda_utils.mli @@ -178,14 +178,12 @@ end *) val fun_vars_referenced_in_decls : Flambda.function_declarations - -> closure_symbol:(Closure_id.t -> Symbol.t) -> Variable.Set.t Variable.Map.t (** Computes the set of closure_id in the set of closures that are required used (transitively) the entry_point *) val closures_required_by_entry_point : entry_point:Closure_id.t - -> closure_symbol:(Closure_id.t -> Symbol.t) -> Flambda.function_declarations -> Variable.Set.t diff --git a/middle_end/freshening.ml b/middle_end/flambda/freshening.ml similarity index 99% rename from middle_end/freshening.ml rename to middle_end/flambda/freshening.ml index 891861a33e22..b04465065643 100644 --- a/middle_end/freshening.ml +++ b/middle_end/flambda/freshening.ml @@ -196,8 +196,7 @@ let apply_mutable_variable t mut_var = | Not_found -> mut_var let rewrite_recursive_calls_with_symbols t - (function_declarations : Flambda.function_declarations) - ~make_closure_symbol = + (function_declarations : Flambda.function_declarations) = match t with | Inactive -> function_declarations | Active _ -> @@ -212,7 +211,7 @@ let rewrite_recursive_calls_with_symbols t let closure_symbols = Variable.Map.fold (fun var _ map -> let closure_id = Closure_id.wrap var in - let sym = make_closure_symbol closure_id in + let sym = Symbol.for_lifted_closure closure_id in if Symbol.Set.mem sym all_free_symbols then begin closure_symbols_used := true; Symbol.Map.add sym var map diff --git a/middle_end/freshening.mli b/middle_end/flambda/freshening.mli similarity index 99% rename from middle_end/freshening.mli rename to middle_end/flambda/freshening.mli index 1550797ac1c5..9ccde4f21202 100644 --- a/middle_end/freshening.mli +++ b/middle_end/flambda/freshening.mli @@ -87,7 +87,6 @@ val apply_static_exception : t -> Static_exception.t -> Static_exception.t val rewrite_recursive_calls_with_symbols : t -> Flambda.function_declarations - -> make_closure_symbol:(Closure_id.t -> Symbol.t) -> Flambda.function_declarations (* CR-soon mshinwell for mshinwell: maybe inaccurate module name, it freshens diff --git a/asmcomp/import_approx.ml b/middle_end/flambda/import_approx.ml similarity index 91% rename from asmcomp/import_approx.ml rename to middle_end/flambda/import_approx.ml index 64fbbb8bff15..eeee8f97c926 100644 --- a/asmcomp/import_approx.ml +++ b/middle_end/flambda/import_approx.ml @@ -16,7 +16,11 @@ [@@@ocaml.warning "+a-4-9-30-40-41-42"] +(* CR-soon mshinwell: Can we remove most of this rewriting? (Includes + dealing with Invariant_params etc.) *) + module A = Simple_value_approx +module CU = Compilation_unit let import_set_of_closures = let import_function_declarations (clos : A.function_declarations) @@ -26,7 +30,7 @@ let import_set_of_closures = let sym_to_fun_var_map (clos : A.function_declarations) = Variable.Map.fold (fun fun_var _ acc -> let closure_id = Closure_id.wrap fun_var in - let sym = Compilenv.closure_symbol closure_id in + let sym = Symbol.for_lifted_closure closure_id in Symbol.Map.add sym fun_var acc) clos.funs Symbol.Map.empty in @@ -49,7 +53,7 @@ let import_set_of_closures = in let aux set_of_closures_id = match - Compilenv.approx_for_global + Compilation_state.Flambda_only.export_info_for_unit (Set_of_closures_id.get_compilation_unit set_of_closures_id) with | None -> None @@ -63,7 +67,9 @@ let import_set_of_closures = with Not_found -> Misc.fatal_error "Cannot find set of closures" in - Set_of_closures_id.Tbl.memoize Compilenv.imported_sets_of_closures_table aux + Set_of_closures_id.Tbl.memoize + Compilation_state.Flambda_only.imported_sets_of_closures_table + aux let rec import_ex ex = let import_value_set_of_closures ~set_of_closures_id ~bound_vars ~free_vars @@ -117,7 +123,9 @@ let rec import_ex ex = ~direct_call_surrogates:Closure_id.Map.empty) in let compilation_unit = Export_id.get_compilation_unit ex in - match Compilenv.approx_for_global compilation_unit with + match + Compilation_state.Flambda_only.export_info_for_unit compilation_unit + with | None -> A.value_unknown Other | Some ex_info -> match Export_info.find_description ex_info ex with @@ -186,21 +194,18 @@ and import_approx (ap : Export_info.approx) = | Value_symbol sym -> A.value_symbol sym let import_symbol sym = - if Compilenv.is_predefined_exception sym then - A.value_unknown Other - else begin - let compilation_unit = Symbol.compilation_unit sym in - match Compilenv.approx_for_global compilation_unit with + match Symbol.compilation_unit sym with + | Predef -> A.value_unknown Other + | Compilation_unit comp_unit -> + match Compilation_state.Flambda_only.export_info_for_unit comp_unit with | None -> A.value_unresolved (Symbol sym) | Some export_info -> match Symbol.Map.find sym export_info.symbol_id with | approx -> A.augment_with_symbol (import_ex approx) sym | exception Not_found -> - Misc.fatal_errorf - "Compilation unit = %a Cannot find symbol %a" - Compilation_unit.print compilation_unit + Misc.fatal_errorf "Compilation unit %a: cannot find symbol %a" + CU.print comp_unit Symbol.print sym - end (* Note for code reviewers: Observe that [really_import] iterates until the approximation description is fully resolved (or a necessary .cmx diff --git a/asmcomp/import_approx.mli b/middle_end/flambda/import_approx.mli similarity index 100% rename from asmcomp/import_approx.mli rename to middle_end/flambda/import_approx.mli diff --git a/middle_end/inconstant_idents.ml b/middle_end/flambda/inconstant_idents.ml similarity index 99% rename from middle_end/inconstant_idents.ml rename to middle_end/flambda/inconstant_idents.ml index 59f8aa8a8c21..cdac0501d7c1 100644 --- a/middle_end/inconstant_idents.ml +++ b/middle_end/flambda/inconstant_idents.ml @@ -308,11 +308,11 @@ module Inconstants (P:Param) (Backend:Backend_intf.S) = struct | Read_mutable _ -> mark_curr curr | Symbol symbol -> begin let current_unit = Compilation_unit.get_current_exn () in - if Compilation_unit.equal current_unit (Symbol.compilation_unit symbol) + if Symbol.in_compilation_unit symbol current_unit then () else - match (Backend.import_symbol symbol).descr with + match (Import_approx.import_symbol symbol).descr with | Value_unresolved _ -> (* Constant when 'for_clambda' means: can be a symbol (which is obviously the case here) with a known approximation. If this diff --git a/middle_end/inconstant_idents.mli b/middle_end/flambda/inconstant_idents.mli similarity index 100% rename from middle_end/inconstant_idents.mli rename to middle_end/flambda/inconstant_idents.mli diff --git a/middle_end/initialize_symbol_to_let_symbol.ml b/middle_end/flambda/initialize_symbol_to_let_symbol.ml similarity index 100% rename from middle_end/initialize_symbol_to_let_symbol.ml rename to middle_end/flambda/initialize_symbol_to_let_symbol.ml diff --git a/middle_end/initialize_symbol_to_let_symbol.mli b/middle_end/flambda/initialize_symbol_to_let_symbol.mli similarity index 100% rename from middle_end/initialize_symbol_to_let_symbol.mli rename to middle_end/flambda/initialize_symbol_to_let_symbol.mli diff --git a/middle_end/inline_and_simplify.ml b/middle_end/flambda/inline_and_simplify.ml similarity index 99% rename from middle_end/inline_and_simplify.ml rename to middle_end/flambda/inline_and_simplify.ml index 7d304cd88ffd..d96d7940e55d 100644 --- a/middle_end/inline_and_simplify.ml +++ b/middle_end/flambda/inline_and_simplify.ml @@ -583,7 +583,6 @@ and simplify_set_of_closures original_env r references to functions via symbols or variables. *) Freshening.rewrite_recursive_calls_with_symbols (E.freshening original_env) set_of_closures.function_decls - ~make_closure_symbol:Backend.closure_symbol in let env = E.increase_closure_depth original_env in let free_vars, specialised_args, function_decls, parameter_approximations, @@ -1649,7 +1648,7 @@ let simplify_program env r (program : Flambda.program) = let module Backend = (val (E.backend env) : Backend_intf.S) in (* CR-someday mshinwell for mshinwell: Is there a reason we cannot use [simplify_named_using_approx_and_env] here? *) - let approx = Backend.import_symbol symbol in + let approx = Import_approx.import_symbol symbol in E.add_symbol env symbol approx, approx | approx -> env, approx in @@ -1665,7 +1664,7 @@ let add_predef_exns_to_environment ~env ~backend = let module Backend = (val backend : Backend_intf.S) in List.fold_left (fun env predef_exn -> assert (Ident.is_predef predef_exn); - let symbol = Backend.symbol_for_global' predef_exn in + let symbol = Symbol.for_predefined_exn predef_exn in let name = Ident.name predef_exn in let approx = A.value_block Tag.object_tag diff --git a/middle_end/inline_and_simplify.mli b/middle_end/flambda/inline_and_simplify.mli similarity index 100% rename from middle_end/inline_and_simplify.mli rename to middle_end/flambda/inline_and_simplify.mli diff --git a/middle_end/inline_and_simplify_aux.ml b/middle_end/flambda/inline_and_simplify_aux.ml similarity index 98% rename from middle_end/inline_and_simplify_aux.ml rename to middle_end/flambda/inline_and_simplify_aux.ml index bb725e8c647c..54eb57525cc1 100644 --- a/middle_end/inline_and_simplify_aux.ml +++ b/middle_end/flambda/inline_and_simplify_aux.ml @@ -119,9 +119,8 @@ module Env = struct Mutable_variable.Map.add mut_var approx t.approx_mutable; } - let really_import_approx t = - let module Backend = (val (t.backend) : Backend_intf.S) in - Backend.really_import_approx + let really_import_approx _t = + Import_approx.really_import_approx let really_import_approx_with_scope t (scope, approx) = scope, really_import_approx t approx @@ -146,15 +145,13 @@ module Env = struct let find_or_load_symbol t symbol = match find_symbol_exn t symbol with | exception Not_found -> - if Compilation_unit.equal - (Compilation_unit.get_current_exn ()) - (Symbol.compilation_unit symbol) + if Symbol.in_compilation_unit symbol (Compilation_unit.get_current_exn ()) then Misc.fatal_errorf "Symbol %a from the current compilation unit is \ unbound. Maybe there is a missing [Let_symbol] or similar?" Symbol.print symbol; let module Backend = (val (t.backend) : Backend_intf.S) in - Backend.import_symbol symbol + Import_approx.import_symbol symbol | approx -> approx let add_projection t ~projection ~bound_to = diff --git a/middle_end/inline_and_simplify_aux.mli b/middle_end/flambda/inline_and_simplify_aux.mli similarity index 100% rename from middle_end/inline_and_simplify_aux.mli rename to middle_end/flambda/inline_and_simplify_aux.mli diff --git a/middle_end/inlining_cost.ml b/middle_end/flambda/inlining_cost.ml similarity index 100% rename from middle_end/inlining_cost.ml rename to middle_end/flambda/inlining_cost.ml diff --git a/middle_end/inlining_cost.mli b/middle_end/flambda/inlining_cost.mli similarity index 100% rename from middle_end/inlining_cost.mli rename to middle_end/flambda/inlining_cost.mli diff --git a/middle_end/inlining_decision.ml b/middle_end/flambda/inlining_decision.ml similarity index 100% rename from middle_end/inlining_decision.ml rename to middle_end/flambda/inlining_decision.ml diff --git a/middle_end/inlining_decision.mli b/middle_end/flambda/inlining_decision.mli similarity index 100% rename from middle_end/inlining_decision.mli rename to middle_end/flambda/inlining_decision.mli diff --git a/middle_end/inlining_decision_intf.mli b/middle_end/flambda/inlining_decision_intf.mli similarity index 100% rename from middle_end/inlining_decision_intf.mli rename to middle_end/flambda/inlining_decision_intf.mli diff --git a/middle_end/inlining_stats.ml b/middle_end/flambda/inlining_stats.ml similarity index 100% rename from middle_end/inlining_stats.ml rename to middle_end/flambda/inlining_stats.ml diff --git a/middle_end/inlining_stats.mli b/middle_end/flambda/inlining_stats.mli similarity index 100% rename from middle_end/inlining_stats.mli rename to middle_end/flambda/inlining_stats.mli diff --git a/middle_end/inlining_stats_types.ml b/middle_end/flambda/inlining_stats_types.ml similarity index 100% rename from middle_end/inlining_stats_types.ml rename to middle_end/flambda/inlining_stats_types.ml diff --git a/middle_end/inlining_stats_types.mli b/middle_end/flambda/inlining_stats_types.mli similarity index 100% rename from middle_end/inlining_stats_types.mli rename to middle_end/flambda/inlining_stats_types.mli diff --git a/middle_end/inlining_transforms.ml b/middle_end/flambda/inlining_transforms.ml similarity index 100% rename from middle_end/inlining_transforms.ml rename to middle_end/flambda/inlining_transforms.ml diff --git a/middle_end/inlining_transforms.mli b/middle_end/flambda/inlining_transforms.mli similarity index 100% rename from middle_end/inlining_transforms.mli rename to middle_end/flambda/inlining_transforms.mli diff --git a/middle_end/invariant_params.ml b/middle_end/flambda/invariant_params.ml similarity index 99% rename from middle_end/invariant_params.ml rename to middle_end/flambda/invariant_params.ml index a43cfdace1e3..9db68ae4c1b4 100644 --- a/middle_end/invariant_params.ml +++ b/middle_end/flambda/invariant_params.ml @@ -131,7 +131,7 @@ let function_variable_alias let module Backend = (val backend : Backend_intf.S) in Variable.Set.fold (fun fun_var symbols_to_fun_vars -> let closure_id = Closure_id.wrap fun_var in - let symbol = Backend.closure_symbol closure_id in + let symbol = Symbol.for_lifted_closure closure_id in Symbol.Map.add symbol fun_var symbols_to_fun_vars) fun_vars Symbol.Map.empty diff --git a/middle_end/invariant_params.mli b/middle_end/flambda/invariant_params.mli similarity index 100% rename from middle_end/invariant_params.mli rename to middle_end/flambda/invariant_params.mli diff --git a/middle_end/lift_code.ml b/middle_end/flambda/lift_code.ml similarity index 100% rename from middle_end/lift_code.ml rename to middle_end/flambda/lift_code.ml diff --git a/middle_end/lift_code.mli b/middle_end/flambda/lift_code.mli similarity index 100% rename from middle_end/lift_code.mli rename to middle_end/flambda/lift_code.mli diff --git a/middle_end/lift_constants.ml b/middle_end/flambda/lift_constants.ml similarity index 97% rename from middle_end/lift_constants.ml rename to middle_end/flambda/lift_constants.ml index dd60de9ce2fc..755b9b0ae528 100644 --- a/middle_end/lift_constants.ml +++ b/middle_end/flambda/lift_constants.ml @@ -25,15 +25,10 @@ let rec tail_variable : Flambda.t -> Variable.t option = function | Let { body = e; _ } -> tail_variable e | _ -> None -let closure_symbol ~(backend : (module Backend_intf.S)) closure_id = - let module Backend = (val backend) in - Backend.closure_symbol closure_id - (** Traverse the given expression assigning symbols to [let]- and [let rec]- bound constant variables. At the same time collect the definitions of such variables. *) let assign_symbols_and_collect_constant_definitions - ~(backend : (module Backend_intf.S)) ~(program : Flambda.program) ~(inconstants : Inconstant_idents.result) = let var_to_symbol_tbl = Variable.Tbl.create 42 in @@ -42,7 +37,7 @@ let assign_symbols_and_collect_constant_definitions let assign_symbol var (named : Flambda.named) = if not (Inconstant_idents.variable var inconstants) then begin let assign_symbol () = - let symbol = Symbol.of_variable (Variable.rename var) in + let symbol = Symbol.for_lifted_variable (Variable.rename var) in Variable.Tbl.add var_to_symbol_tbl var symbol in let assign_existing_symbol = Variable.Tbl.add var_to_symbol_tbl var in @@ -73,7 +68,7 @@ let assign_symbols_and_collect_constant_definitions record_definition (AA.Set_of_closures set); Variable.Map.iter (fun fun_var _ -> let closure_id = Closure_id.wrap fun_var in - let closure_symbol = closure_symbol ~backend closure_id in + let closure_symbol = Symbol.for_lifted_closure closure_id in Variable.Tbl.add var_to_symbol_tbl fun_var closure_symbol; let project_closure = Alias_analysis.Project_closure @@ -84,10 +79,10 @@ let assign_symbols_and_collect_constant_definitions funs | Move_within_set_of_closures ({ closure = _; start_from = _; move_to; } as move) -> - assign_existing_symbol (closure_symbol ~backend move_to); + assign_existing_symbol (Symbol.for_lifted_closure move_to); record_definition (AA.Move_within_set_of_closures move) | Project_closure ({ closure_id } as project_closure) -> - assign_existing_symbol (closure_symbol ~backend closure_id); + assign_existing_symbol (Symbol.for_lifted_closure closure_id); record_definition (AA.Project_closure project_closure) | Prim (Pfield index, [block], _) -> record_definition (AA.Field (block, index)) @@ -156,7 +151,7 @@ let assign_symbols_and_collect_constant_definitions if constant then begin Variable.Map.iter (fun fun_var _ -> let closure_id = Closure_id.wrap fun_var in - let closure_symbol = closure_symbol ~backend closure_id in + let closure_symbol = Symbol.for_lifted_closure closure_id in Variable.Tbl.add var_to_definition_tbl fun_var (AA.Symbol closure_symbol); Variable.Tbl.add var_to_symbol_tbl fun_var closure_symbol) @@ -372,7 +367,7 @@ let translate_definition_and_resolve_alias inconstants Flambda.print_constant_defining_value wrong | exception Not_found -> let module Backend = (val backend) in - match (Backend.import_symbol sym).descr with + match (Import_approx.import_symbol sym).descr with | Value_unresolved _ -> Misc.fatal_errorf "Lift_constants.translate_definition_and_resolve_alias: \ @@ -748,10 +743,10 @@ let var_to_block_field var_to_definition_tbl; var_to_block_field_tbl -let program_symbols ~backend (program : Flambda.program) = +let program_symbols (program : Flambda.program) = let new_fake_symbol () = let var = Variable.create Internal_variable_names.fake_effect_symbol in - Symbol.of_variable var + Symbol.for_lifted_variable var in let initialize_symbol_tbl = Symbol.Tbl.create 42 in let effect_tbl = Symbol.Tbl.create 42 in @@ -762,7 +757,7 @@ let program_symbols ~backend (program : Flambda.program) = | Set_of_closures { function_decls = { funs } } -> Variable.Map.iter (fun fun_var _ -> let closure_id = Closure_id.wrap fun_var in - let closure_symbol = closure_symbol ~backend closure_id in + let closure_symbol = Symbol.for_lifted_closure closure_id in let project_closure = Flambda.Project_closure (def_symbol, closure_id) in @@ -865,7 +860,7 @@ let project_closure_map symbol_definition_map = let lift_constants (program : Flambda.program) ~backend = let the_dead_constant = let var = Variable.create Internal_variable_names.the_dead_constant in - Symbol.of_variable var + Symbol.for_lifted_variable var in let program_body : Flambda.program_body = Let_symbol (the_dead_constant, Allocated_const (Nativeint 0n), @@ -879,12 +874,11 @@ let lift_constants (program : Flambda.program) ~backend = ~compilation_unit:(Compilation_unit.get_current_exn ()) in let initialize_symbol_tbl, symbol_definition_tbl, effect_tbl = - program_symbols ~backend program + program_symbols program in let var_to_symbol_tbl, var_to_definition_tbl, let_symbol_to_definition_tbl, initialize_symbol_to_definition_tbl = - assign_symbols_and_collect_constant_definitions ~backend ~program - ~inconstants + assign_symbols_and_collect_constant_definitions ~program ~inconstants in let aliases = Alias_analysis.run var_to_definition_tbl diff --git a/middle_end/lift_constants.mli b/middle_end/flambda/lift_constants.mli similarity index 100% rename from middle_end/lift_constants.mli rename to middle_end/flambda/lift_constants.mli diff --git a/middle_end/lift_let_to_initialize_symbol.ml b/middle_end/flambda/lift_let_to_initialize_symbol.ml similarity index 99% rename from middle_end/lift_let_to_initialize_symbol.ml rename to middle_end/flambda/lift_let_to_initialize_symbol.ml index ccef0d8a1f36..5831277a52eb 100644 --- a/middle_end/lift_let_to_initialize_symbol.ml +++ b/middle_end/flambda/lift_let_to_initialize_symbol.ml @@ -174,11 +174,11 @@ let rebuild (used_variables:Variable.Set.t) (accumulated:accumulated) = List.map (fun decl -> match decl with | Block (var, _, _) | Expr (var, _) -> - Symbol.of_variable (Variable.rename var), decl + Symbol.for_lifted_variable (Variable.rename var), decl | Exprs _ -> let name = Internal_variable_names.lifted_let_rec_block in let var = Variable.create name in - Symbol.of_variable var, decl) + Symbol.for_lifted_variable var, decl) accumulated.extracted_lets in let extracted_definitions = diff --git a/middle_end/lift_let_to_initialize_symbol.mli b/middle_end/flambda/lift_let_to_initialize_symbol.mli similarity index 100% rename from middle_end/lift_let_to_initialize_symbol.mli rename to middle_end/flambda/lift_let_to_initialize_symbol.mli diff --git a/middle_end/parameter.ml b/middle_end/flambda/parameter.ml similarity index 100% rename from middle_end/parameter.ml rename to middle_end/flambda/parameter.ml diff --git a/middle_end/parameter.mli b/middle_end/flambda/parameter.mli similarity index 100% rename from middle_end/parameter.mli rename to middle_end/flambda/parameter.mli diff --git a/middle_end/pass_wrapper.ml b/middle_end/flambda/pass_wrapper.ml similarity index 100% rename from middle_end/pass_wrapper.ml rename to middle_end/flambda/pass_wrapper.ml diff --git a/middle_end/pass_wrapper.mli b/middle_end/flambda/pass_wrapper.mli similarity index 100% rename from middle_end/pass_wrapper.mli rename to middle_end/flambda/pass_wrapper.mli diff --git a/middle_end/projection.ml b/middle_end/flambda/projection.ml similarity index 100% rename from middle_end/projection.ml rename to middle_end/flambda/projection.ml diff --git a/middle_end/projection.mli b/middle_end/flambda/projection.mli similarity index 100% rename from middle_end/projection.mli rename to middle_end/flambda/projection.mli diff --git a/middle_end/ref_to_variables.ml b/middle_end/flambda/ref_to_variables.ml similarity index 100% rename from middle_end/ref_to_variables.ml rename to middle_end/flambda/ref_to_variables.ml diff --git a/middle_end/ref_to_variables.mli b/middle_end/flambda/ref_to_variables.mli similarity index 100% rename from middle_end/ref_to_variables.mli rename to middle_end/flambda/ref_to_variables.mli diff --git a/middle_end/remove_free_vars_equal_to_args.ml b/middle_end/flambda/remove_free_vars_equal_to_args.ml similarity index 100% rename from middle_end/remove_free_vars_equal_to_args.ml rename to middle_end/flambda/remove_free_vars_equal_to_args.ml diff --git a/middle_end/remove_free_vars_equal_to_args.mli b/middle_end/flambda/remove_free_vars_equal_to_args.mli similarity index 100% rename from middle_end/remove_free_vars_equal_to_args.mli rename to middle_end/flambda/remove_free_vars_equal_to_args.mli diff --git a/middle_end/remove_unused_arguments.ml b/middle_end/flambda/remove_unused_arguments.ml similarity index 100% rename from middle_end/remove_unused_arguments.ml rename to middle_end/flambda/remove_unused_arguments.ml diff --git a/middle_end/remove_unused_arguments.mli b/middle_end/flambda/remove_unused_arguments.mli similarity index 100% rename from middle_end/remove_unused_arguments.mli rename to middle_end/flambda/remove_unused_arguments.mli diff --git a/middle_end/remove_unused_closure_vars.ml b/middle_end/flambda/remove_unused_closure_vars.ml similarity index 100% rename from middle_end/remove_unused_closure_vars.ml rename to middle_end/flambda/remove_unused_closure_vars.ml diff --git a/middle_end/remove_unused_closure_vars.mli b/middle_end/flambda/remove_unused_closure_vars.mli similarity index 100% rename from middle_end/remove_unused_closure_vars.mli rename to middle_end/flambda/remove_unused_closure_vars.mli diff --git a/middle_end/remove_unused_program_constructs.ml b/middle_end/flambda/remove_unused_program_constructs.ml similarity index 100% rename from middle_end/remove_unused_program_constructs.ml rename to middle_end/flambda/remove_unused_program_constructs.ml diff --git a/middle_end/remove_unused_program_constructs.mli b/middle_end/flambda/remove_unused_program_constructs.mli similarity index 100% rename from middle_end/remove_unused_program_constructs.mli rename to middle_end/flambda/remove_unused_program_constructs.mli diff --git a/middle_end/share_constants.ml b/middle_end/flambda/share_constants.ml similarity index 100% rename from middle_end/share_constants.ml rename to middle_end/flambda/share_constants.ml diff --git a/middle_end/share_constants.mli b/middle_end/flambda/share_constants.mli similarity index 100% rename from middle_end/share_constants.mli rename to middle_end/flambda/share_constants.mli diff --git a/middle_end/simple_value_approx.ml b/middle_end/flambda/simple_value_approx.ml similarity index 99% rename from middle_end/simple_value_approx.ml rename to middle_end/flambda/simple_value_approx.ml index 34fc5ce0560b..d524324faede 100644 --- a/middle_end/simple_value_approx.ml +++ b/middle_end/flambda/simple_value_approx.ml @@ -221,7 +221,7 @@ let rec print_descr ppf = function and print ppf { descr; var; symbol; } = let print ppf = function - | None -> Symbol.print_opt ppf None + | None -> Misc.Stdlib.Option.print (fun _ _ -> ()) ppf None | Some (sym, None) -> Symbol.print ppf sym | Some (sym, Some field) -> Format.fprintf ppf "%a.(%i)" Symbol.print sym field diff --git a/middle_end/simple_value_approx.mli b/middle_end/flambda/simple_value_approx.mli similarity index 100% rename from middle_end/simple_value_approx.mli rename to middle_end/flambda/simple_value_approx.mli diff --git a/middle_end/simplify_boxed_integer_ops.ml b/middle_end/flambda/simplify_boxed_integer_ops.ml similarity index 100% rename from middle_end/simplify_boxed_integer_ops.ml rename to middle_end/flambda/simplify_boxed_integer_ops.ml diff --git a/middle_end/simplify_boxed_integer_ops.mli b/middle_end/flambda/simplify_boxed_integer_ops.mli similarity index 100% rename from middle_end/simplify_boxed_integer_ops.mli rename to middle_end/flambda/simplify_boxed_integer_ops.mli diff --git a/middle_end/simplify_boxed_integer_ops_intf.mli b/middle_end/flambda/simplify_boxed_integer_ops_intf.mli similarity index 100% rename from middle_end/simplify_boxed_integer_ops_intf.mli rename to middle_end/flambda/simplify_boxed_integer_ops_intf.mli diff --git a/middle_end/simplify_common.ml b/middle_end/flambda/simplify_common.ml similarity index 100% rename from middle_end/simplify_common.ml rename to middle_end/flambda/simplify_common.ml diff --git a/middle_end/simplify_common.mli b/middle_end/flambda/simplify_common.mli similarity index 100% rename from middle_end/simplify_common.mli rename to middle_end/flambda/simplify_common.mli diff --git a/middle_end/simplify_primitives.ml b/middle_end/flambda/simplify_primitives.ml similarity index 100% rename from middle_end/simplify_primitives.ml rename to middle_end/flambda/simplify_primitives.ml diff --git a/middle_end/simplify_primitives.mli b/middle_end/flambda/simplify_primitives.mli similarity index 100% rename from middle_end/simplify_primitives.mli rename to middle_end/flambda/simplify_primitives.mli diff --git a/asmcomp/traverse_for_exported_symbols.ml b/middle_end/flambda/traverse_for_exported_symbols.ml similarity index 95% rename from asmcomp/traverse_for_exported_symbols.ml rename to middle_end/flambda/traverse_for_exported_symbols.ml index 1b7ce57f54a1..de3e6025ef13 100644 --- a/asmcomp/traverse_for_exported_symbols.ml +++ b/middle_end/flambda/traverse_for_exported_symbols.ml @@ -200,14 +200,19 @@ let traverse | _ -> () end | Q_symbol symbol -> - let compilation_unit = Symbol.compilation_unit symbol in - if Compilation_unit.is_current compilation_unit then begin - match Symbol.Map.find symbol symbol_id with - | exception Not_found -> - Misc.fatal_errorf "cannot find symbol's export id %a\n" - Symbol.print symbol - | export_id -> - conditionally_add_export_id export_id + begin match Symbol.compilation_unit symbol with + | Predef -> () + | Compilation_unit compilation_unit -> + if Compilation_unit.equal compilation_unit + (Compilation_unit.get_current_exn ()) + then begin + match Symbol.Map.find symbol symbol_id with + | exception Not_found -> + Misc.fatal_errorf "cannot find symbol's export id %a\n" + Symbol.print symbol + | export_id -> + conditionally_add_export_id export_id + end end | Q_set_of_closures_id set_of_closures_id -> begin match diff --git a/asmcomp/traverse_for_exported_symbols.mli b/middle_end/flambda/traverse_for_exported_symbols.mli similarity index 100% rename from asmcomp/traverse_for_exported_symbols.mli rename to middle_end/flambda/traverse_for_exported_symbols.mli diff --git a/asmcomp/un_anf.ml b/middle_end/flambda/un_anf.ml similarity index 99% rename from asmcomp/un_anf.ml rename to middle_end/flambda/un_anf.ml index 50f9e7b1e259..cfa6e493bff4 100644 --- a/asmcomp/un_anf.ml +++ b/middle_end/flambda/un_anf.ml @@ -25,8 +25,8 @@ provenance. *) -module V = Backend_var -module VP = Backend_var.With_provenance +module V = Variable +module VP = Variable.With_provenance (* We say that an [V.t] is "linear" iff: (a) it is used exactly once; @@ -241,7 +241,7 @@ let let_bound_vars_that_can_be_moved var_info (clam : Clambda.ulambda) = when V.Set.mem arg !obviously_constant -> loop let_bound_vars args | let_bound_var::let_bound_vars, (Uvar arg)::args - when V.same let_bound_var arg + when V.equal let_bound_var arg && not (V.Set.mem arg var_info.assigned) -> assert (V.Set.mem arg var_info.used); assert (V.Set.mem arg var_info.linear); @@ -653,7 +653,7 @@ let rec un_anf_and_moveable var_info env (clam : Clambda.ulambda) let clam, moveable = un_anf_and_moveable var_info env clam in Uoffset (clam, n), both_moveable Moveable moveable | Ulet (_let_kind, _value_kind, var, def, Uvar var') - when V.same (VP.var var) var' -> + when V.equal (VP.var var) var' -> un_anf_and_moveable var_info env def | Ulet (let_kind, value_kind, var, def, body) -> let def, def_moveable = un_anf_and_moveable var_info env def in @@ -799,7 +799,7 @@ and un_anf_list var_info env clams : Clambda.ulambda list = and un_anf_array var_info env clams : Clambda.ulambda array = Array.map (un_anf var_info env) clams -let apply ~ppf_dump clam ~what = +let apply ?what ~ppf_dump clam = let var_info = make_var_info clam in let let_bound_vars_that_can_be_moved = let_bound_vars_that_can_be_moved var_info clam @@ -812,6 +812,8 @@ let apply ~ppf_dump clam ~what = let clam = un_anf var_info V.Map.empty clam in if !Clflags.dump_clambda then begin Format.fprintf ppf_dump - "@.un-anf (%s):@ %a@." what Printclambda.clambda clam + "@.un-anf (%a):@ %a@." + (Misc.Stdlib.Option.print Symbol.print) what + Printclambda.clambda clam end; clam diff --git a/asmcomp/un_anf.mli b/middle_end/flambda/un_anf.mli similarity index 96% rename from asmcomp/un_anf.mli rename to middle_end/flambda/un_anf.mli index 92ea06cd033e..c5c67174dc4f 100644 --- a/asmcomp/un_anf.mli +++ b/middle_end/flambda/un_anf.mli @@ -17,7 +17,7 @@ (** Expand ANF-like constructs so that pattern matches in [Cmmgen] will work correctly. *) val apply - : ppf_dump:Format.formatter + : ?what:Symbol.t + -> ppf_dump:Format.formatter -> Clambda.ulambda - -> what:string -> Clambda.ulambda diff --git a/middle_end/unbox_closures.ml b/middle_end/flambda/unbox_closures.ml similarity index 100% rename from middle_end/unbox_closures.ml rename to middle_end/flambda/unbox_closures.ml diff --git a/middle_end/unbox_closures.mli b/middle_end/flambda/unbox_closures.mli similarity index 100% rename from middle_end/unbox_closures.mli rename to middle_end/flambda/unbox_closures.mli diff --git a/middle_end/unbox_free_vars_of_closures.ml b/middle_end/flambda/unbox_free_vars_of_closures.ml similarity index 100% rename from middle_end/unbox_free_vars_of_closures.ml rename to middle_end/flambda/unbox_free_vars_of_closures.ml diff --git a/middle_end/unbox_free_vars_of_closures.mli b/middle_end/flambda/unbox_free_vars_of_closures.mli similarity index 100% rename from middle_end/unbox_free_vars_of_closures.mli rename to middle_end/flambda/unbox_free_vars_of_closures.mli diff --git a/middle_end/unbox_specialised_args.ml b/middle_end/flambda/unbox_specialised_args.ml similarity index 100% rename from middle_end/unbox_specialised_args.ml rename to middle_end/flambda/unbox_specialised_args.ml diff --git a/middle_end/unbox_specialised_args.mli b/middle_end/flambda/unbox_specialised_args.mli similarity index 100% rename from middle_end/unbox_specialised_args.mli rename to middle_end/flambda/unbox_specialised_args.mli diff --git a/middle_end/internal_variable_names.ml b/middle_end/internal_variable_names.ml index 8edeb8c194c4..dec35361702a 100644 --- a/middle_end/internal_variable_names.ml +++ b/middle_end/internal_variable_names.ml @@ -17,6 +17,7 @@ open! Int_replace_polymorphic_compare type t = string +let arg = "arg" let apply_arg = "apply_arg" let apply_funct = "apply_funct" let block_symbol = "block_symbol" @@ -46,6 +47,7 @@ let dummy = "dummy" let dup_func = "dup_func" let dup_set_of_closures = "dup_set_of_closures" let const_float_array = "const_float_array" +let env = "env" let fake_effect_symbol = "fake_effect_symbol" let for_from = "for_from" let for_to = "for_to" diff --git a/middle_end/internal_variable_names.mli b/middle_end/internal_variable_names.mli index 11a8231e959d..23d5dffd4fc5 100644 --- a/middle_end/internal_variable_names.mli +++ b/middle_end/internal_variable_names.mli @@ -16,6 +16,7 @@ type t = private string +val arg : t val apply_arg : t val apply_funct : t val block_symbol : t @@ -45,6 +46,7 @@ val dummy : t val dup_func : t val dup_set_of_closures : t val const_float_array : t +val env : t val fake_effect_symbol : t val for_from : t val for_to : t diff --git a/asmcomp/printclambda.ml b/middle_end/printclambda.ml similarity index 90% rename from asmcomp/printclambda.ml rename to middle_end/printclambda.ml index fceb34851de3..a9faeb341a19 100644 --- a/asmcomp/printclambda.ml +++ b/middle_end/printclambda.ml @@ -18,8 +18,8 @@ open Format open Asttypes open Clambda -module V = Backend_var -module VP = Backend_var.With_provenance +module V = Variable +module VP = Variable.With_provenance let mutable_flag = function | Mutable-> "[mut]" @@ -56,7 +56,8 @@ let rec structured_constant ppf = function List.iter (fprintf ppf "@ %a" one_fun) in let sconsts ppf scl = List.iter (fun sc -> fprintf ppf "@ %a" uconstant sc) scl in - fprintf ppf "@[<2>(const_closure%a %s@ %a)@]" funs clos sym sconsts fv + fprintf ppf "@[<2>(const_closure%a %a@ %a)@]" + funs clos Symbol.print sym sconsts fv and one_fun ppf f = let idents ppf = @@ -67,22 +68,23 @@ and one_fun ppf f = Printlambda.value_kind k ) in - fprintf ppf "(fun@ %s%s@ %d@ @[<2>%a@]@ @[<2>%a@])" - f.label (value_kind f.return) f.arity idents f.params lam f.body + fprintf ppf "(fun@ %a%s@ %d@ @[<2>%a@]@ @[<2>%a@])" + Symbol.print f.label (value_kind f.return) f.arity idents f.params + lam f.body and phantom_defining_expr ppf = function | Uphantom_const const -> uconstant ppf const - | Uphantom_var var -> Ident.print ppf var + | Uphantom_var var -> V.print ppf var | Uphantom_offset_var { var; offset_in_words; } -> - Format.fprintf ppf "%a+(%d)" Backend_var.print var offset_in_words + Format.fprintf ppf "%a+(%d)" V.print var offset_in_words | Uphantom_read_field { var; field; } -> - Format.fprintf ppf "%a[%d]" Backend_var.print var field + Format.fprintf ppf "%a[%d]" V.print var field | Uphantom_read_symbol_field { sym; field; } -> - Format.fprintf ppf "%s[%d]" sym field + Format.fprintf ppf "%a[%d]" Symbol.print sym field | Uphantom_block { tag; fields; } -> Format.fprintf ppf "[%d: " tag; List.iter (fun field -> - Format.fprintf ppf "%a; " Backend_var.print field) + Format.fprintf ppf "%a; " V.print field) fields; Format.fprintf ppf "]" @@ -92,8 +94,8 @@ and phantom_defining_expr_opt ppf = function and uconstant ppf = function | Uconst_ref (s, Some c) -> - fprintf ppf "%S=%a" s structured_constant c - | Uconst_ref (s, None) -> fprintf ppf "%S"s + fprintf ppf "%a=%a" Symbol.print s structured_constant c + | Uconst_ref (s, None) -> Symbol.print ppf s | Uconst_int i -> fprintf ppf "%i" i | Uconst_ptr i -> fprintf ppf "%ia" i @@ -104,7 +106,7 @@ and lam ppf = function | Udirect_apply(f, largs, _) -> let lams ppf largs = List.iter (fun l -> fprintf ppf "@ %a" lam l) largs in - fprintf ppf "@[<2>(apply*@ %s %a)@]" f lams largs + fprintf ppf "@[<2>(apply*@ %a %a)@]" Symbol.print f lams largs | Ugeneric_apply(lfun, largs, _) -> let lams ppf largs = List.iter (fun l -> fprintf ppf "@ %a" lam l) largs in @@ -133,12 +135,12 @@ and lam ppf = function let rec letbody ul = match ul with | Uphantom_let (id, defining_expr, body) -> fprintf ppf "@ @[<2>%a@ %a@]" - Backend_var.With_provenance.print id + V.With_provenance.print id phantom_defining_expr_opt defining_expr; letbody body | _ -> ul in fprintf ppf "@[<2>(phantom_let@ @[(@[<2>%a@ %a@]" - Backend_var.With_provenance.print id + V.With_provenance.print id phantom_defining_expr_opt defining_expr; let expr = letbody body in fprintf ppf ")@]@ %a)@]" lam expr @@ -248,8 +250,8 @@ let clambda ppf ulam = let rec approx ppf = function Value_closure(fundesc, a) -> - Format.fprintf ppf "@[<2>function %s@ arity %i" - fundesc.fun_label fundesc.fun_arity; + Format.fprintf ppf "@[<2>function %a@ arity %i" + Symbol.print fundesc.fun_label fundesc.fun_arity; if fundesc.fun_closed then begin Format.fprintf ppf "@ (closed)" end; @@ -269,4 +271,4 @@ let rec approx ppf = function | Value_const c -> fprintf ppf "@[const(%a)@]" uconstant c | Value_global_field (s, i) -> - fprintf ppf "@[global(%s,%i)@]" s i + fprintf ppf "@[global(%a,%i)@]" Symbol.print s i diff --git a/asmcomp/printclambda.mli b/middle_end/printclambda.mli similarity index 100% rename from asmcomp/printclambda.mli rename to middle_end/printclambda.mli diff --git a/asmcomp/printclambda_primitives.ml b/middle_end/printclambda_primitives.ml similarity index 99% rename from asmcomp/printclambda_primitives.ml rename to middle_end/printclambda_primitives.ml index 3f627063d4a0..9e40f43a24fa 100644 --- a/asmcomp/printclambda_primitives.ml +++ b/middle_end/printclambda_primitives.ml @@ -56,7 +56,7 @@ let primitive ppf (prim:Clambda_primitives.primitive) = let open Clambda_primitives in match prim with | Pread_symbol sym -> - fprintf ppf "read_symbol %s" sym + fprintf ppf "read_symbol %a" Symbol.print sym | Pmakeblock(tag, Immutable, shape) -> fprintf ppf "makeblock %i%a" tag Printlambda.block_shape shape | Pmakeblock(tag, Mutable, shape) -> diff --git a/asmcomp/printclambda_primitives.mli b/middle_end/printclambda_primitives.mli similarity index 100% rename from asmcomp/printclambda_primitives.mli rename to middle_end/printclambda_primitives.mli diff --git a/middle_end/base_types/compilation_unit.mli b/middle_end/provenance.ml similarity index 53% rename from middle_end/base_types/compilation_unit.mli rename to middle_end/provenance.ml index fc7d3bfded17..a9761d10960c 100644 --- a/middle_end/base_types/compilation_unit.mli +++ b/middle_end/provenance.ml @@ -2,11 +2,11 @@ (* *) (* OCaml *) (* *) +(* Mark Shinwell, Jane Street Europe *) (* Pierre Chambart, OCamlPro *) -(* Mark Shinwell and Leo White, Jane Street Europe *) (* *) -(* Copyright 2013--2016 OCamlPro SAS *) -(* Copyright 2014--2016 Jane Street Group LLC *) +(* Copyright 2018-2019 Jane Street Group LLC *) +(* Copyright 2019 OCamlPro SAS *) (* *) (* All rights reserved. This file is distributed under the terms of *) (* the GNU Lesser General Public License version 2.1, with the *) @@ -14,21 +14,30 @@ (* *) (**************************************************************************) -[@@@ocaml.warning "+a-4-9-30-40-41-42"] +[@@@ocaml.warning "+a-4-30-40-41-42"] -include Identifiable.S +type t = { + module_path : Path.t; + location : Debuginfo.t; + original_ident : Ident.t; +} -(* The [Ident.t] must be persistent. This function raises an exception - if that is not the case. *) -val create : Ident.t -> Linkage_name.t -> t +let print ppf { module_path; location; original_ident; } = + Format.fprintf ppf "@[(\ + @[(module_path@ %a)@]@ \ + @[(location@ %a)@]@ \ + @[(original_ident@ %a)@]\ + )@]" + Path.print module_path + Debuginfo.print_compact location + Ident.print original_ident -val get_persistent_ident : t -> Ident.t -val get_linkage_name : t -> Linkage_name.t +let create ~module_path ~location ~original_ident = + { module_path; + location; + original_ident; + } -val is_current : t -> bool -val set_current : t -> unit -val get_current : unit -> t option -val get_current_exn : unit -> t -val get_current_id_exn : unit -> Ident.t - -val string_for_printing : t -> string +let module_path t = t.module_path +let location t = t.location +let original_ident t = t.original_ident diff --git a/middle_end/base_types/linkage_name.ml b/middle_end/provenance.mli similarity index 62% rename from middle_end/base_types/linkage_name.ml rename to middle_end/provenance.mli index 46febfba8fad..d9fe31a101d7 100644 --- a/middle_end/base_types/linkage_name.ml +++ b/middle_end/provenance.mli @@ -2,11 +2,11 @@ (* *) (* OCaml *) (* *) +(* Mark Shinwell, Jane Street Europe *) (* Pierre Chambart, OCamlPro *) -(* Mark Shinwell and Leo White, Jane Street Europe *) (* *) -(* Copyright 2013--2016 OCamlPro SAS *) -(* Copyright 2014--2016 Jane Street Group LLC *) +(* Copyright 2018-2019 Jane Street Group LLC *) +(* Copyright 2019 OCamlPro SAS *) (* *) (* All rights reserved. This file is distributed under the terms of *) (* the GNU Lesser General Public License version 2.1, with the *) @@ -14,17 +14,21 @@ (* *) (**************************************************************************) -[@@@ocaml.warning "+a-4-9-30-40-41-42-66"] -open! Int_replace_polymorphic_compare +(** Source level "provenance" to annotate variables and symbols, + used for the emission of debugging information. *) -type t = string +[@@@ocaml.warning "+a-4-30-40-41-42"] -include Identifiable.Make (struct - include String - let hash = Hashtbl.hash - let print ppf t = Format.pp_print_string ppf t - let output chan t = output_string chan t -end) +type t -let create t = t -let to_string t = t +val create + : module_path:Path.t + -> location:Debuginfo.t + -> original_ident:Ident.t + -> t + +val module_path : t -> Path.t +val location : t -> Debuginfo.t +val original_ident : t -> Ident.t + +val print : Format.formatter -> t -> unit diff --git a/asmcomp/semantics_of_primitives.ml b/middle_end/semantics_of_primitives.ml similarity index 100% rename from asmcomp/semantics_of_primitives.ml rename to middle_end/semantics_of_primitives.ml diff --git a/asmcomp/semantics_of_primitives.mli b/middle_end/semantics_of_primitives.mli similarity index 100% rename from asmcomp/semantics_of_primitives.mli rename to middle_end/semantics_of_primitives.mli diff --git a/middle_end/symbol.ml b/middle_end/symbol.ml new file mode 100644 index 000000000000..d607011d1554 --- /dev/null +++ b/middle_end/symbol.ml @@ -0,0 +1,312 @@ +(**************************************************************************) +(* *) +(* OCaml *) +(* *) +(* Pierre Chambart, OCamlPro *) +(* Mark Shinwell and Leo White, Jane Street Europe *) +(* *) +(* Copyright 2013--2016 OCamlPro SAS *) +(* Copyright 2014--2019 Jane Street Group LLC *) +(* *) +(* All rights reserved. This file is distributed under the terms of *) +(* the GNU Lesser General Public License version 2.1, with the *) +(* special exception on linking described in the file LICENSE. *) +(* *) +(**************************************************************************) + +[@@@ocaml.warning "+a-4-30-40-41-42"] + +type t = + | Module_block of { + compilation_unit : Compilation_unit.t; + } + | Lifted_variable of { + compilation_unit : Compilation_unit.t; + name : string; + stamp : int; + } + | Lifted_closure of { + compilation_unit : Compilation_unit.t; + name : string; + stamp : int; + } + | Lifted_anonymous_constant of { + compilation_unit : Compilation_unit.t; + stamp : int; + } + | Code_pointer of { + compilation_unit : Compilation_unit.t; + name : string; + stamp : int; + } + | Predefined_exn of string + +include Identifiable.Make (struct + type nonrec t = t + + let compare t1 t2 = + match t1, t2 with + | Module_block { compilation_unit = compilation_unit1; }, + Module_block { compilation_unit = compilation_unit2; } -> + Compilation_unit.compare compilation_unit1 compilation_unit2 + | Module_block _, _ -> -1 + | Lifted_variable { + compilation_unit = compilation_unit1; + name = name1; + stamp = stamp1; + }, + Lifted_variable { + compilation_unit = compilation_unit2; + name = name2; + stamp = stamp2; + } -> + let c = Compilation_unit.compare compilation_unit1 compilation_unit2 in + if c <> 0 then c + else + let c = String.compare name1 name2 in + if c <> 0 then c + else Stdlib.compare stamp1 stamp2 + | Lifted_variable _, Module_block _ -> 1 + | Lifted_variable _, _ -> -1 + | Lifted_closure { + compilation_unit = compilation_unit1; + name = name1; + stamp = stamp1; + }, + Lifted_closure { + compilation_unit = compilation_unit2; + name = name2; + stamp = stamp2; + } -> + let c = Compilation_unit.compare compilation_unit1 compilation_unit2 in + if c <> 0 then c + else + let c = String.compare name1 name2 in + if c <> 0 then c + else Stdlib.compare stamp1 stamp2 + | Lifted_closure _, (Module_block _ | Lifted_variable _) -> 1 + | Lifted_closure _, _ -> -1 + | Lifted_anonymous_constant { + compilation_unit = compilation_unit1; + stamp = stamp1; + }, + Lifted_anonymous_constant { + compilation_unit = compilation_unit2; + stamp = stamp2; + } -> + let c = Compilation_unit.compare compilation_unit1 compilation_unit2 in + if c <> 0 then c + else Stdlib.compare stamp1 stamp2 + | Lifted_anonymous_constant _, + (Module_block _ | Lifted_variable _ | Lifted_closure _) -> 1 + | Lifted_anonymous_constant _, _ -> -1 + | Code_pointer { + compilation_unit = compilation_unit1; + name = name1; + stamp = stamp1; + }, + Code_pointer { + compilation_unit = compilation_unit2; + name = name2; + stamp = stamp2; + } -> + let c = Compilation_unit.compare compilation_unit1 compilation_unit2 in + if c <> 0 then c + else + let c = String.compare name1 name2 in + if c <> 0 then c + else Stdlib.compare stamp1 stamp2 + | Code_pointer _, + (Module_block _ | Lifted_variable _ | Lifted_closure _ + | Lifted_anonymous_constant _) -> 1 + | Code_pointer _, _ -> -1 + | Predefined_exn name1, Predefined_exn name2 -> + String.compare name1 name2 + | Predefined_exn _, + (Module_block _ | Lifted_variable _ | Lifted_closure _ + | Lifted_anonymous_constant _ | Code_pointer _) -> 1 + + let equal t1 t2 = + compare t1 t2 = 0 + + let hash t = + match t with + | Module_block { compilation_unit; } -> + Hashtbl.hash (0, Compilation_unit.hash compilation_unit) + | Lifted_variable { compilation_unit; name; stamp; } -> + Hashtbl.hash (1, ( + Compilation_unit.hash compilation_unit, Hashtbl.hash name, + Hashtbl.hash stamp)) + | Lifted_closure { compilation_unit; name; stamp; } -> + Hashtbl.hash (2, ( + Compilation_unit.hash compilation_unit, Hashtbl.hash name, + Hashtbl.hash stamp)) + | Lifted_anonymous_constant { compilation_unit; stamp; } -> + Hashtbl.hash (3, ( + Compilation_unit.hash compilation_unit, Hashtbl.hash stamp)) + | Code_pointer { compilation_unit; name; stamp; } -> + Hashtbl.hash (4, ( + Compilation_unit.hash compilation_unit, Hashtbl.hash name, + Hashtbl.hash stamp)) + | Predefined_exn name -> + Hashtbl.hash (5, Hashtbl.hash name) + + let print ppf t = + match t with + | Module_block { compilation_unit; } -> + Format.fprintf ppf "@[(Module_block@ \ + @[(compilation_unit@ %a)@])@]" + Compilation_unit.print compilation_unit + | Lifted_variable { compilation_unit; name; stamp; } -> + Format.fprintf ppf "@[(Lifted_variable@ \ + @[(compilation_unit@ %a)@]@ \ + @[(name@ %s)@]@ \ + @[(stamp@ %d)@])@]" + Compilation_unit.print compilation_unit + name + stamp + | Lifted_closure { compilation_unit; name; stamp; } -> + Format.fprintf ppf "@[(Lifted_closure@ \ + @[(compilation_unit@ %a)@]@ \ + @[(name@ %s)@]@ \ + @[(stamp@ %d)@])@]" + Compilation_unit.print compilation_unit + name + stamp + | Lifted_anonymous_constant { compilation_unit; stamp; } -> + Format.fprintf ppf "@[(Lifted_anonymous_constant@ \ + @[(compilation_unit@ %a)@]@ \ + @[(stamp@ %d)@])@]" + Compilation_unit.print compilation_unit + stamp + | Code_pointer { compilation_unit; name; stamp; } -> + Format.fprintf ppf "@[(Code_pointer@ \ + @[(compilation_unit@ %a)@]@ \ + @[(name@ %s)@]@ \ + @[(stamp@ %d)@])@]" + Compilation_unit.print compilation_unit + name + stamp + | Predefined_exn name -> + Format.fprintf ppf "@[(Predefined_exn %s)@]" name + + let output chan t = + print (Format.formatter_of_out_channel chan) t +end) + +let for_module_block compilation_unit = + Module_block { + compilation_unit; + } + +let for_lifted_variable variable = + let compilation_unit = Variable.get_compilation_unit variable in + let name = Variable.name variable in + let stamp = Variable.stamp variable in + Lifted_variable { + compilation_unit; + name; + stamp; + } + +let for_lifted_closure closure_id = + let compilation_unit = Closure_id.get_compilation_unit closure_id in + let name = Closure_id.name closure_id in + let stamp = Closure_id.stamp closure_id in + Lifted_closure { + compilation_unit; + name; + stamp; + } + +let for_function closure_id = + let compilation_unit = Closure_id.get_compilation_unit closure_id in + let name = Closure_id.name closure_id in + let stamp = Closure_id.stamp closure_id in + Code_pointer { + compilation_unit; + name; + stamp; + } + +let next_anonymous_constant_stamp = ref 0 + +(* CR mshinwell: Add [reset] function? *) + +let for_lifted_anonymous_constant ?compilation_unit () = + let stamp = !next_anonymous_constant_stamp in + incr next_anonymous_constant_stamp; + let compilation_unit = + match compilation_unit with + | None -> Compilation_unit.get_current_exn () + | Some compilation_unit -> compilation_unit + in + Lifted_anonymous_constant { + compilation_unit; + stamp; + } + +let for_predefined_exn id = + if not (Ident.is_predef id) then begin + Misc.fatal_errorf "[Symbol.for_predefined_exn] with non-predefined \ + identifier %a" + Ident.print id + end; + Predefined_exn (Ident.name id) + +let lifted_closure_symbol_from_code_pointer_symbol t = + match t with + | Code_pointer { + compilation_unit; + name; + stamp; + } -> + Lifted_closure { + compilation_unit; + name; + stamp; + } + | _ -> Misc.fatal_errorf "Non-closure symbol %a" print t + +type compilation_unit_or_predef = + | Compilation_unit of Compilation_unit.t + | Predef + +let compilation_unit t = + match t with + | Module_block { compilation_unit; } + | Lifted_variable { compilation_unit; _ } + | Lifted_closure { compilation_unit; _ } + | Lifted_anonymous_constant { compilation_unit; _ } + | Code_pointer { compilation_unit; _ } -> + Compilation_unit compilation_unit + | Predefined_exn _ -> Predef + +type kind = Text | Data + +let kind t : kind = + match t with + | Code_pointer _ -> Text + | Module_block _ + | Lifted_variable _ + | Lifted_closure _ + | Lifted_anonymous_constant _ + | Predefined_exn _ -> Data + +let name_for_backend t = + match t with + | Module_block _ -> None + | Lifted_variable { name; stamp; _ } -> + Some (Printf.sprintf "%s_%d" name stamp) + | Lifted_closure { name; stamp; _ } -> + Some (Printf.sprintf "%s_closure_%d" name stamp) + | Lifted_anonymous_constant { stamp; _ } -> + Some (string_of_int stamp) + | Code_pointer { name; stamp; _ } -> + Some (Printf.sprintf "%s_%d" name stamp) + | Predefined_exn name -> Some name + +let in_compilation_unit t comp_unit = + match compilation_unit t with + | Compilation_unit comp_unit' -> Compilation_unit.equal comp_unit comp_unit' + | Predef -> false diff --git a/middle_end/symbol.mli b/middle_end/symbol.mli new file mode 100644 index 000000000000..0b0e3cd951b4 --- /dev/null +++ b/middle_end/symbol.mli @@ -0,0 +1,86 @@ +(**************************************************************************) +(* *) +(* OCaml *) +(* *) +(* Pierre Chambart, OCamlPro *) +(* Mark Shinwell and Leo White, Jane Street Europe *) +(* *) +(* Copyright 2013--2016 OCamlPro SAS *) +(* Copyright 2014--2019 Jane Street Group LLC *) +(* *) +(* All rights reserved. This file is distributed under the terms of *) +(* the GNU Lesser General Public License version 2.1, with the *) +(* special exception on linking described in the file LICENSE. *) +(* *) +(**************************************************************************) + +[@@@ocaml.warning "+a-4-9-30-40-41-42"] + +(** Middle-end symbols: names of statically-allocated constants. These + symbols are used inside Closure and Flambda. They always point at + well-formed OCaml values in a data section, never at code, with the + exception of those symbols created with [for_function]. + + Middle-end symbols should in general not be created later than the middle + end. The infrastructure for these symbols relies on a current compilation + unit being set, which might not always be the case later on, e.g. when + compiling a startup file. +*) + +(** The type of middle-end symbols. *) +type t + +(** Printing, comparison, sets, maps, etc. *) +include Identifiable.S with type t := t + +(** Create a symbol to reference the module block for the given compilation + unit. *) +val for_module_block : Compilation_unit.t -> t + +(** Create a symbol to correspond to an Flambda variable whose definition + has been lifted. *) +val for_lifted_variable : Variable.t -> t + +(** Create a symbol to correspond to an Flambda closure that has been lifted. *) +val for_lifted_closure : Closure_id.t -> t + +(** Create a symbol to correspond to the code pointer for direct, full + application of the code associated with the given closure ID. *) +val for_function : Closure_id.t -> t + +(** Create a symbol to correspond to a lifted constant, in the current + compilation unit (unless specified otherwise), that does not have a + source-level name associated with it. *) +val for_lifted_anonymous_constant + : ?compilation_unit:Compilation_unit.t + -> unit + -> t + +(** Create a symbol to correspond to the given predefined exception. *) +val for_predefined_exn : Ident.t -> t + +(** Transform a symbol constructed using [for_function], representing the + code pointer of a function, to the symbol to be used for any + corresponding lifted constant closure containing such function. This is + only intended for the use of [Cmmgen]. *) +val lifted_closure_symbol_from_code_pointer_symbol : t -> t + +type compilation_unit_or_predef = private + | Compilation_unit of Compilation_unit.t + | Predef + +(** The compilation unit in which the given symbol's definition lies. *) +val compilation_unit : t -> compilation_unit_or_predef + +type kind = private Text | Data + +(** Whether a symbol points at executable code ("text") or data. *) +val kind : t -> kind + +(** The name of the symbol as to be used for construction of [Backend_sym.t] + values, without any mangling or compilation unit prefix. Symbols + corresponding to compilation units will return [None] here. *) +val name_for_backend : t -> string option + +(** Test whether the given symbol is defined in the given compilation unit. *) +val in_compilation_unit : t -> Compilation_unit.t -> bool diff --git a/middle_end/base_types/variable.ml b/middle_end/variable.ml similarity index 76% rename from middle_end/base_types/variable.ml rename to middle_end/variable.ml index 64099a73b6a7..648477223a8d 100644 --- a/middle_end/base_types/variable.ml +++ b/middle_end/variable.ml @@ -24,6 +24,8 @@ type t = { (** [name_stamp]s are unique within any given compilation unit. *) } +type variable = t + include Identifiable.Make (struct type nonrec t = t @@ -94,6 +96,8 @@ let get_compilation_unit t = t.compilation_unit let name t = t.name +let stamp t = t.name_stamp + let unique_name t = t.name ^ "_" ^ (Int.to_string t.name_stamp) @@ -117,3 +121,45 @@ let output_full chan t = Compilation_unit.output chan t.compilation_unit; output_string chan "."; output chan t + +module With_provenance = struct + type t = + | Without_provenance of variable + | With_provenance of { + var : variable; + provenance : Provenance.t; + } + + let create ?provenance var = + match provenance with + | None -> Without_provenance var + | Some provenance -> With_provenance { var; provenance; } + + let var t = + match t with + | Without_provenance var + | With_provenance { var; provenance = _; } -> var + + let provenance t = + match t with + | Without_provenance _ -> None + | With_provenance { var = _; provenance; } -> Some provenance + + let rename ?current_compilation_unit t = + match t with + | Without_provenance v -> + Without_provenance (rename ?current_compilation_unit v) + | With_provenance { var; provenance; } -> + With_provenance { var = rename ?current_compilation_unit var; + provenance; } + + let name t = name (var t) + + let print ppf t = + match provenance t with + | None -> print ppf (var t) + | Some provenance -> + Format.fprintf ppf "%a[%a]" + print (var t) + Provenance.print provenance +end diff --git a/middle_end/base_types/variable.mli b/middle_end/variable.mli similarity index 85% rename from middle_end/base_types/variable.mli rename to middle_end/variable.mli index b5d3f136ae9e..202dc73e6c90 100644 --- a/middle_end/base_types/variable.mli +++ b/middle_end/variable.mli @@ -28,6 +28,8 @@ include Identifiable.S +type variable = t + val create : ?current_compilation_unit:Compilation_unit.t -> Internal_variable_names.t @@ -43,6 +45,8 @@ val in_compilation_unit : t -> Compilation_unit.t -> bool val name : t -> string +val stamp : t -> int + val unique_name : t -> string val get_compilation_unit : t -> Compilation_unit.t @@ -61,3 +65,22 @@ val compare_lists : t list -> t list -> int val output_full : out_channel -> t -> unit (** Unlike [output], [output_full] includes the compilation unit. *) + +module With_provenance : sig + (** Values of type [t] should be used for variables in binding position. *) + type t + + val print : Format.formatter -> t -> unit + + val create : ?provenance:Provenance.t -> variable -> t + + val var : t -> variable + val provenance : t -> Provenance.t option + + val name : t -> string + + val rename + : ?current_compilation_unit:Compilation_unit.t + -> t + -> t +end diff --git a/ocamldoc/.depend b/ocamldoc/.depend index bf8aa40e6849..3b33fb2629bc 100644 --- a/ocamldoc/.depend +++ b/ocamldoc/.depend @@ -37,7 +37,6 @@ odoc_analyse.cmo : \ odoc_ast.cmi \ ../parsing/location.cmi \ ../parsing/lexer.cmi \ - ../typing/persistent_env.cmi \ ../typing/env.cmi \ ../utils/config.cmi \ ../driver/compmisc.cmi \ @@ -66,7 +65,6 @@ odoc_analyse.cmx : \ odoc_ast.cmx \ ../parsing/location.cmx \ ../parsing/lexer.cmx \ - ../typing/persistent_env.cmx \ ../typing/env.cmx \ ../utils/config.cmx \ ../driver/compmisc.cmx \ diff --git a/ocamldoc/Makefile.docfiles b/ocamldoc/Makefile.docfiles index fdeb7bf14df6..9154a52a431e 100644 --- a/ocamldoc/Makefile.docfiles +++ b/ocamldoc/Makefile.docfiles @@ -35,7 +35,7 @@ DOC_STDLIB_DIRS = stdlib \ otherlibs/$(UNIXLIB) otherlibs/graphics otherlibs/dynlink \ otherlibs/systhreads -DOC_COMPILERLIBS_DIRS= parsing utils typing bytecomp driver +DOC_COMPILERLIBS_DIRS= parsing utils typing bytecomp driver file_formats DOC_ALL_DIRS = $(DOC_COMPILERLIBS) $(DOC_STDLIB_DIRS) diff --git a/ocamltest/.depend b/ocamltest/.depend index 1f5c8c26f405..23023bef974c 100644 --- a/ocamltest/.depend +++ b/ocamltest/.depend @@ -1,21 +1,22 @@ run_unix.$(O): run_unix.c run.h ../runtime/caml/misc.h \ - ../runtime/caml/config.h ../runtime/caml/m.h ../runtime/caml/s.h \ - run_common.h + ../runtime/caml/config.h ../runtime/caml/m.h ../runtime/caml/s.h \ + run_common.h run_stubs.$(O): run_stubs.c run.h ../runtime/caml/misc.h \ - ../runtime/caml/config.h ../runtime/caml/m.h ../runtime/caml/s.h \ - ../runtime/caml/mlvalues.h ../runtime/caml/memory.h \ - ../runtime/caml/gc.h ../runtime/caml/major_gc.h \ - ../runtime/caml/freelist.h ../runtime/caml/minor_gc.h \ - ../runtime/caml/address_class.h ../runtime/caml/io.h \ - ../runtime/caml/osdeps.h + ../runtime/caml/config.h ../runtime/caml/m.h ../runtime/caml/s.h \ + ../runtime/caml/mlvalues.h ../runtime/caml/misc.h \ + ../runtime/caml/memory.h ../runtime/caml/gc.h ../runtime/caml/mlvalues.h \ + ../runtime/caml/major_gc.h ../runtime/caml/freelist.h \ + ../runtime/caml/minor_gc.h ../runtime/caml/address_class.h \ + ../runtime/caml/io.h ../runtime/caml/osdeps.h ../runtime/caml/memory.h ocamltest_stdlib_stubs.$(O): ocamltest_stdlib_stubs.c \ - ../runtime/caml/config.h ../runtime/caml/m.h ../runtime/caml/s.h \ - ../runtime/caml/mlvalues.h ../runtime/caml/misc.h \ - ../runtime/caml/memory.h ../runtime/caml/gc.h \ - ../runtime/caml/major_gc.h ../runtime/caml/freelist.h \ - ../runtime/caml/minor_gc.h ../runtime/caml/address_class.h \ - ../runtime/caml/alloc.h ../runtime/caml/signals.h \ - ../runtime/caml/osdeps.h + ../runtime/caml/config.h ../runtime/caml/m.h ../runtime/caml/s.h \ + ../runtime/caml/mlvalues.h ../runtime/caml/config.h \ + ../runtime/caml/misc.h ../runtime/caml/memory.h ../runtime/caml/gc.h \ + ../runtime/caml/mlvalues.h ../runtime/caml/major_gc.h \ + ../runtime/caml/freelist.h ../runtime/caml/minor_gc.h \ + ../runtime/caml/address_class.h ../runtime/caml/alloc.h \ + ../runtime/caml/signals.h ../runtime/caml/osdeps.h \ + ../runtime/caml/memory.h actions.cmo : \ result.cmi \ environments.cmi \ diff --git a/ocamltest/Makefile b/ocamltest/Makefile index c3b514801724..64e8a3a009e6 100644 --- a/ocamltest/Makefile +++ b/ocamltest/Makefile @@ -168,7 +168,7 @@ bytecode_modules := $(o_files) $(cmo_files) native_modules := $(o_files) $(cmx_files) directories := $(addprefix $(ROOTDIR)/,utils bytecomp parsing stdlib \ - compilerlibs) + compilerlibs file_formats) include_directories := $(addprefix -I , $(directories)) diff --git a/ocamltest/ocaml_modifiers.ml b/ocamltest/ocaml_modifiers.ml index 6bf8ed239c9b..48b9f17f5c71 100644 --- a/ocamltest/ocaml_modifiers.ml +++ b/ocamltest/ocaml_modifiers.ml @@ -97,7 +97,8 @@ let systhreads = let compilerlibs_subdirs = [ - "utils"; "parsing"; "toplevel"; "typing"; "bytecomp"; "compilerlibs"; + "utils"; "parsing"; "toplevel"; "typing"; "file_formats"; "bytecomp"; + "compilerlibs"; ] let add_compiler_subdir subdir = diff --git a/otherlibs/dynlink/Makefile b/otherlibs/dynlink/Makefile index df2b41b297de..00efc122861c 100644 --- a/otherlibs/dynlink/Makefile +++ b/otherlibs/dynlink/Makefile @@ -3,9 +3,11 @@ #* OCaml * #* * #* Xavier Leroy, projet Cristal, INRIA Rocquencourt * +#* Mark Shinwell, Jane Street Europe * #* * #* Copyright 1999 Institut National de Recherche en Informatique et * #* en Automatique. * +#* Copyright 2018--2019 Jane Street Group LLC * #* * #* All rights reserved. This file is distributed under the terms of * #* the GNU Lesser General Public License version 2.1, with the * @@ -27,59 +29,208 @@ CAMLRUN ?= $(ROOTDIR)/boot/ocamlrun OCAMLC = $(CAMLRUN) $(ROOTDIR)/ocamlc -nostdlib -I $(ROOTDIR)/stdlib OCAMLOPT = $(CAMLRUN) $(ROOTDIR)/ocamlopt -nostdlib -I $(ROOTDIR)/stdlib -INCLUDES=$(addprefix -I $(ROOTDIR)/,utils typing bytecomp asmcomp) -COMPFLAGS=$(INCLUDES) -absname -w +a-4-9-41-42-44-45-48 -bin-annot -g \ - -I $(ROOTDIR)/stdlib -warn-error A \ - -safe-string -strict-sequence -strict-formats +# COMPFLAGS should be in sync with the toplevel Makefile's COMPFLAGS. +COMPFLAGS=-strict-sequence -principal -absname -w +a-4-9-41-42-44-45-48-66 \ + -warn-error A \ + -bin-annot -safe-string -strict-formats ifeq "$(FLAMBDA)" "true" OPTCOMPFLAGS=-O3 else OPTCOMPFLAGS= endif -OBJS=dynlink_compilerlibs.cmo dynlink_types.cmo \ - dynlink_platform_intf.cmo dynlink_common.cmo dynlink.cmo -NATOBJS=dynlink_types.cmx dynlink_platform_intf.cmx \ - dynlink_common.cmx dynlink.cmx - -COMPILEROBJS = $(addprefix $(ROOTDIR)/,\ - utils/config.cmo utils/build_path_prefix_map.cmo utils/misc.cmo \ - utils/identifiable.cmo utils/numbers.cmo utils/arg_helper.cmo \ - utils/clflags.cmo utils/consistbl.cmo \ - utils/terminfo.cmo utils/warnings.cmo utils/load_path.cmo \ - parsing/location.cmo parsing/longident.cmo \ - parsing/docstrings.cmo parsing/syntaxerr.cmo \ - parsing/ast_helper.cmo parsing/ast_mapper.cmo parsing/ast_iterator.cmo \ - parsing/attr_helper.cmo parsing/builtin_attributes.cmo \ - typing/ident.cmo typing/path.cmo typing/primitive.cmo typing/types.cmo \ - typing/btype.cmo typing/subst.cmo typing/predef.cmo \ - typing/datarepr.cmo typing/cmi_format.cmo \ - typing/persistent_env.cmo \ - typing/env.cmo \ - bytecomp/lambda.cmo bytecomp/instruct.cmo \ - bytecomp/opcodes.cmo bytecomp/runtimedef.cmo bytecomp/bytesections.cmo \ - bytecomp/dll.cmo bytecomp/meta.cmo bytecomp/symtable.cmo) - -COMPILERINTFS = $(addprefix $(ROOTDIR)/,\ - bytecomp/cmo_format.cmi) +LOCAL_SRC=dynlink_compilerlibs + +OBJS=dynlink_compilerlibs_bytecode/dynlink_compilerlibs.cmo \ + dynlink_types.cmo dynlink_platform_intf.cmo dynlink_common.cmo dynlink.cmo + +NATOBJS=dynlink_compilerlibs_native/dynlink_compilerlibs.cmx \ + dynlink_types.cmx dynlink_platform_intf.cmx dynlink_common.cmx dynlink.cmx + +# We need/desire access to compilerlibs for various reasons: +# - The bytecode dynamic linker is in compilerlibs and has many dependencies +# from there. +# - It stops duplication of code (e.g. magic numbers from [Config]). +# - It allows future improvement by re-using various types. +# We have to pack our own version of compilerlibs (even if compilerlibs +# becomes packed in the future by default) otherwise problems will be caused +# if a user tries to link dynlink.cm{x,}a with code either having modules +# of the same names or code that is already linked against compilerlibs. +# +# The modules needed from compilerlibs have to be recompiled so that the +# -for-pack option can be specified. Packing without such option having been +# specified, as used to be performed in this Makefile, is currently permitted +# for bytecode (but may be disallowed in the future) but not native. + +# .mli files from compilerlibs that don't have a corresponding .ml file. +COMPILERLIBS_INTFS=\ + parsing/asttypes.mli \ + parsing/parsetree.mli \ + typing/outcometree.mli \ + file_formats/cmo_format.mli + +# .ml files from compilerlibs that have corresponding .mli files. +COMPILERLIBS_SOURCES=\ + utils/config.ml \ + utils/build_path_prefix_map.ml \ + utils/int_replace_polymorphic_compare.ml \ + utils/misc.ml \ + utils/identifiable.ml \ + utils/numbers.ml \ + utils/arg_helper.ml \ + utils/clflags.ml \ + utils/profile.ml \ + utils/consistbl.ml \ + utils/terminfo.ml \ + utils/warnings.ml \ + utils/load_path.ml \ + parsing/location.ml \ + parsing/longident.ml \ + parsing/docstrings.ml \ + parsing/syntaxerr.ml \ + parsing/ast_helper.ml \ + parsing/ast_mapper.ml \ + parsing/attr_helper.ml \ + parsing/builtin_attributes.ml \ + parsing/pprintast.ml \ + typing/ident.ml \ + typing/path.ml \ + typing/primitive.ml \ + typing/types.ml \ + typing/btype.ml \ + typing/subst.ml \ + typing/predef.ml \ + typing/datarepr.ml \ + file_formats/cmi_format.ml \ + typing/persistent_env.ml \ + typing/env.ml \ + bytecomp/lambda.ml \ + bytecomp/instruct.ml \ + bytecomp/opcodes.ml \ + bytecomp/runtimedef.ml \ + bytecomp/bytesections.ml \ + bytecomp/dll.ml \ + bytecomp/meta.ml \ + bytecomp/symtable.ml \ + middle_end/compilation_unit.ml \ + file_formats/cmxs_format.ml + +# Rules to make a local copy of the .ml and .mli files required. We also +# provide .ml files for .mli-only modules---without this, such modules do +# not seem to be located by the type checker inside bytecode packs. + +dynlink_compilerlibs/Makefile.copy-sources: + mkdir -p dynlink_compilerlibs + echo > $@ + for ml in $(COMPILERLIBS_SOURCES); do \ + echo "dynlink_compilerlibs/$$(basename $$ml): $(ROOTDIR)/$$ml" \ + >> $@; \ + echo "dynlink_compilerlibs/$$(basename $$ml)i: $(ROOTDIR)/$${ml}i" \ + >> $@; \ + done; + for mli in $(COMPILERLIBS_INTFS); do \ + echo "dynlink_compilerlibs/$$(basename $$mli): $(ROOTDIR)/$$mli" \ + >> $@; \ + echo \ + "dynlink_compilerlibs/$$(basename $$mli .mli).ml: $(ROOTDIR)/$$mli"\ + >> $@; \ + done + +-include dynlink_compilerlibs/Makefile.copy-sources + +dynlink_compilerlibs/%.ml: + cp $< $@ + +dynlink_compilerlibs/%.mli: + cp $< $@ + +# Rules to automatically generate dependencies for the local copy of the +# compilerlibs sources. + +COMPILERLIBS_SOURCES_NO_DIRS=$(notdir $(COMPILERLIBS_SOURCES)) + +COMPILERLIBS_INTFS_NO_DIRS=$(notdir $(COMPILERLIBS_INTFS)) + +COMPILERLIBS_INTFS_BASE_NAMES=$(basename $(COMPILERLIBS_INTFS_NO_DIRS)) + +COMPILERLIBS_INTFS_ML_NO_DIRS=$(addsuffix .ml, $(COMPILERLIBS_INTFS_BASE_NAMES)) + +COMPILERLIBS_COPIED_INTFS=\ + $(addprefix dynlink_compilerlibs/, $(COMPILERLIBS_INTFS_ML_NO_DIRS)) + +COMPILERLIBS_COPIED_SOURCES=\ + $(addprefix dynlink_compilerlibs/, $(COMPILERLIBS_SOURCES_NO_DIRS)) \ + $(COMPILERLIBS_COPIED_INTFS) + +COMPILERLIBS_SOURCES_INTFS=\ + $(addsuffix i, $(COMPILERLIBS_SOURCES)) + +COMPILERLIBS_COPIED_SOURCES_INTFS=\ + $(addsuffix i, $(COMPILERLIBS_COPIED_SOURCES)) + +dynlink_compilerlibs/.depend: $(COMPILERLIBS_COPIED_SOURCES) \ + $(COMPILERLIBS_COPIED_SOURCES_INTFS) + $(CAMLRUN) $(ROOTDIR)/ocamlc -depend -I dynlink_compilerlibs \ + $(COMPILERLIBS_COPIED_SOURCES) \ + $(COMPILERLIBS_COPIED_SOURCES_INTFS) \ + > dynlink_compilerlibs/.depend + +-include dynlink_compilerlibs/.depend + +# Rules to build the local copy of the compilerlibs sources in such a way +# that the resulting .cm{o,x} files can be packed. + +COMPILERLIBS_CMO=$(COMPILERLIBS_COPIED_SOURCES:.ml=.cmo) +COMPILERLIBS_CMX=$(COMPILERLIBS_COPIED_SOURCES:.ml=.cmx) + +dynlink_compilerlibs/%.cmi: dynlink_compilerlibs/%.mli + $(OCAMLC) -c -for-pack Dynlink_compilerlibs $(COMPFLAGS) \ + -I dynlink_compilerlibs -o $@ $< + +dynlink_compilerlibs/%.cmo: dynlink_compilerlibs/%.ml \ + dynlink_compilerlibs/%.cmi + $(OCAMLC) -c -for-pack Dynlink_compilerlibs $(COMPFLAGS) \ + -I dynlink_compilerlibs -o $@ $< + +dynlink_compilerlibs/%.cmx: dynlink_compilerlibs/%.ml \ + dynlink_compilerlibs/%.cmi + $(OCAMLOPT) -c -for-pack Dynlink_compilerlibs $(COMPFLAGS) \ + $(OPTCOMPFLAGS) -I dynlink_compilerlibs -o $@ $< + +# Rules for building the [Dynlink_compilerlibs] bytecode and native packs +# from their components. + +dynlink_compilerlibs_bytecode/dynlink_compilerlibs.cmo: $(COMPILERLIBS_CMO) + $(OCAMLC) $(COMPFLAGS) -pack -o $@ $(COMPILERLIBS_CMO) + +dynlink_compilerlibs_native/dynlink_compilerlibs.cmx: $(COMPILERLIBS_CMX) + $(OCAMLOPT) $(COMPFLAGS) $(OPTCOMPFLAGS) -pack -o $@ $(COMPILERLIBS_CMX) + +# Rules for building the interface of the [Dynlink_compilerlibs] packs. +# To avoid falling foul of the problem described below, the .cmo and .cmx +# files for the dynlink-specific compilerlibs packs generated here---and in +# particular the corresponding .cmi files -- are kept in separate directories. + +dynlink_compilerlibs_bytecode/dynlink_compilerlibs.cmi: \ + dynlink_compilerlibs_bytecode/dynlink_compilerlibs.cmo + +dynlink_compilerlibs.cmi: \ + dynlink_compilerlibs_bytecode/dynlink_compilerlibs.cmi + cp -a $< $@ + +# The main dynlink rules start here. all: dynlink.cma extract_crc allopt: dynlink.cmxa dynlink.cma: $(OBJS) - $(OCAMLC) $(COMPFLAGS) -ccopt "$(NATDYNLINKOPTS)" -a -o $@ $^ + $(OCAMLC) $(COMPFLAGS) -ccopt "$(NATDYNLINKOPTS)" -a \ + -I dynlink_compilerlibs_bytecode -o $@ $^ dynlink.cmxa: $(NATOBJS) - $(OCAMLOPT) $(COMPFLAGS) -ccopt "$(NATDYNLINKOPTS)" -a -o $@ $^ - -dynlink_compilerlibs.cmo: $(COMPILEROBJS) $(COMPILERINTFS) - $(OCAMLC) $(COMPFLAGS) -pack -o $@ $^ - -# This rule is ok since there is no corresponding rule for native code -# compilation (otherwise we would fall foul of the problem in the next -# comment). -dynlink_compilerlibs.cmi: dynlink_compilerlibs.cmo + $(OCAMLOPT) $(COMPFLAGS) -ccopt "$(NATDYNLINKOPTS)" -a \ + -I dynlink_compilerlibs_native -o $@ $^ # Since there is no .mli for [Dynlink_platform_intf], we need to be # careful that compilation of the .cmx file does not write the .cmi file again, @@ -89,7 +240,7 @@ dynlink_platform_intf.mli: dynlink_platform_intf.ml cp $< $@ dynlink_platform_intf.cmi: dynlink_platform_intf.mli \ dynlink_types.cmi - $(OCAMLC) $(COMPFLAGS) -c $< + $(OCAMLC) $(COMPFLAGS) -I dynlink_compilerlibs_bytecode -c $< dynlink_platform_intf.cmo: dynlink_platform_intf.ml \ dynlink_platform_intf.cmi \ @@ -117,32 +268,41 @@ dynlink_common.cmi: dynlink_common.mli \ dynlink_common.cmo: dynlink_common.ml \ dynlink_common.cmi \ + dynlink_compilerlibs.cmi \ dynlink_platform_intf.cmo $(OCAMLC) $(COMPFLAGS) -c dynlink_common.ml dynlink_common.cmx: dynlink_common.ml \ dynlink_common.cmi \ - dynlink_platform_intf.cmx - $(OCAMLOPT) $(COMPFLAGS) -c dynlink_common.ml + dynlink_compilerlibs.cmi \ + dynlink_platform_intf.cmx \ + dynlink_compilerlibs_native/dynlink_compilerlibs.cmx + $(OCAMLOPT) $(COMPFLAGS) -I dynlink_compilerlibs_native/ \ + -c dynlink_common.ml dynlink.cmi: dynlink.mli dynlink_compilerlibs.cmi $(OCAMLC) -c $(COMPFLAGS) dynlink.mli dynlink.cmo: dynlink.cmi dynlink_common.cmi \ dynlink_types.cmo dynlink_common.cmo dynlink.ml \ - dynlink_compilerlibs.cmo - $(OCAMLC) -c $(COMPFLAGS) -impl dynlink.ml + dynlink_compilerlibs.cmi + $(OCAMLC) -c $(COMPFLAGS) dynlink.ml dynlink.cmx: dynlink.cmi dynlink_common.cmi \ - dynlink_types.cmx dynlink_common.cmx natdynlink.ml + dynlink_types.cmx dynlink_common.cmx natdynlink.ml \ + dynlink_compilerlibs.cmi \ + dynlink_compilerlibs_native/dynlink_compilerlibs.cmx cp natdynlink.ml dynlink.mlopt - $(OCAMLOPT) -c $(COMPFLAGS) -impl dynlink.mlopt + $(OCAMLOPT) -c $(COMPFLAGS) -I dynlink_compilerlibs_native/ \ + -impl dynlink.mlopt rm -f dynlink.mlopt -extract_crc.cmo: extract_crc.ml dynlink.cmi - $(OCAMLC) -c $(COMPFLAGS) extract_crc.ml +extract_crc.cmo: extract_crc.ml dynlink.cmi dynlink_compilerlibs.cmi + $(OCAMLC) -c $(COMPFLAGS) -I ../utils extract_crc.ml -extract_crc: $(COMPILEROBJS) dynlink.cma extract_crc.cmo +extract_crc: $(COMPILEROBJS) dynlink.cma \ + dynlink_compilerlibs_bytecode/dynlink_compilerlibs.cmo \ + extract_crc.cmo $(OCAMLC) -o $@ $^ install: diff --git a/otherlibs/dynlink/dynlink.ml b/otherlibs/dynlink/dynlink.ml index 8c7a14241548..685bdba5ebf2 100644 --- a/otherlibs/dynlink/dynlink.ml +++ b/otherlibs/dynlink/dynlink.ml @@ -18,7 +18,7 @@ [@@@ocaml.warning "+a-4-30-40-41-42"] -open! Dynlink_compilerlibs (* REMOVE_ME for ../../debugger/dynlink.ml *) +open! Dynlink_compilerlibs (* REMOVE_ME for use in the compiler etc. *) module DC = Dynlink_common module DT = Dynlink_types diff --git a/otherlibs/dynlink/dynlink_common.ml b/otherlibs/dynlink/dynlink_common.ml index bce1363c3437..a2b0ec31018b 100644 --- a/otherlibs/dynlink/dynlink_common.ml +++ b/otherlibs/dynlink/dynlink_common.ml @@ -8,7 +8,7 @@ (* *) (* Copyright 1996 Institut National de Recherche en Informatique et *) (* en Automatique. *) -(* Copyright 2017--2018 Jane Street Group LLC *) +(* Copyright 2017--2019 Jane Street Group LLC *) (* *) (* All rights reserved. This file is distributed under the terms of *) (* the GNU Lesser General Public License version 2.1, with the *) @@ -18,14 +18,13 @@ [@@@ocaml.warning "+a-4-30-40-41-42"] -(* This compilation unit cannot depend on compilerlibs. *) -module String = struct - include String +open! Dynlink_compilerlibs (* REMOVE_ME for use in the compiler etc. *) - module Set = Set.Make (String) +module String = struct + include Misc.Stdlib.String module Map = struct - include Map.Make (String) + include Map let keys t = fold (fun key _data keys -> Set.add key keys) t Set.empty diff --git a/otherlibs/dynlink/dynlink_compilerlibs/.depend b/otherlibs/dynlink/dynlink_compilerlibs/.depend new file mode 100644 index 000000000000..6fec63f688b9 --- /dev/null +++ b/otherlibs/dynlink/dynlink_compilerlibs/.depend @@ -0,0 +1,683 @@ +dynlink_compilerlibs/arg_helper.cmo : \ + dynlink_compilerlibs/arg_helper.cmi +dynlink_compilerlibs/arg_helper.cmx : \ + dynlink_compilerlibs/arg_helper.cmi +dynlink_compilerlibs/arg_helper.cmi : +dynlink_compilerlibs/ast_helper.cmo : \ + dynlink_compilerlibs/syntaxerr.cmi \ + dynlink_compilerlibs/parsetree.cmi \ + dynlink_compilerlibs/misc.cmi \ + dynlink_compilerlibs/longident.cmi \ + dynlink_compilerlibs/location.cmi \ + dynlink_compilerlibs/docstrings.cmi \ + dynlink_compilerlibs/asttypes.cmi \ + dynlink_compilerlibs/ast_helper.cmi +dynlink_compilerlibs/ast_helper.cmx : \ + dynlink_compilerlibs/syntaxerr.cmx \ + dynlink_compilerlibs/parsetree.cmx \ + dynlink_compilerlibs/misc.cmx \ + dynlink_compilerlibs/longident.cmx \ + dynlink_compilerlibs/location.cmx \ + dynlink_compilerlibs/docstrings.cmx \ + dynlink_compilerlibs/asttypes.cmx \ + dynlink_compilerlibs/ast_helper.cmi +dynlink_compilerlibs/ast_helper.cmi : \ + dynlink_compilerlibs/parsetree.cmi \ + dynlink_compilerlibs/longident.cmi \ + dynlink_compilerlibs/location.cmi \ + dynlink_compilerlibs/docstrings.cmi \ + dynlink_compilerlibs/asttypes.cmi +dynlink_compilerlibs/ast_mapper.cmo : \ + dynlink_compilerlibs/parsetree.cmi \ + dynlink_compilerlibs/misc.cmi \ + dynlink_compilerlibs/longident.cmi \ + dynlink_compilerlibs/location.cmi \ + dynlink_compilerlibs/load_path.cmi \ + dynlink_compilerlibs/config.cmi \ + dynlink_compilerlibs/clflags.cmi \ + dynlink_compilerlibs/asttypes.cmi \ + dynlink_compilerlibs/ast_helper.cmi \ + dynlink_compilerlibs/ast_mapper.cmi +dynlink_compilerlibs/ast_mapper.cmx : \ + dynlink_compilerlibs/parsetree.cmx \ + dynlink_compilerlibs/misc.cmx \ + dynlink_compilerlibs/longident.cmx \ + dynlink_compilerlibs/location.cmx \ + dynlink_compilerlibs/load_path.cmx \ + dynlink_compilerlibs/config.cmx \ + dynlink_compilerlibs/clflags.cmx \ + dynlink_compilerlibs/asttypes.cmx \ + dynlink_compilerlibs/ast_helper.cmx \ + dynlink_compilerlibs/ast_mapper.cmi +dynlink_compilerlibs/ast_mapper.cmi : \ + dynlink_compilerlibs/parsetree.cmi \ + dynlink_compilerlibs/location.cmi +dynlink_compilerlibs/asttypes.cmo : \ + dynlink_compilerlibs/location.cmi \ + dynlink_compilerlibs/asttypes.cmi +dynlink_compilerlibs/asttypes.cmx : \ + dynlink_compilerlibs/location.cmx \ + dynlink_compilerlibs/asttypes.cmi +dynlink_compilerlibs/asttypes.cmi : \ + dynlink_compilerlibs/location.cmi +dynlink_compilerlibs/attr_helper.cmo : \ + dynlink_compilerlibs/parsetree.cmi \ + dynlink_compilerlibs/location.cmi \ + dynlink_compilerlibs/asttypes.cmi \ + dynlink_compilerlibs/attr_helper.cmi +dynlink_compilerlibs/attr_helper.cmx : \ + dynlink_compilerlibs/parsetree.cmx \ + dynlink_compilerlibs/location.cmx \ + dynlink_compilerlibs/asttypes.cmx \ + dynlink_compilerlibs/attr_helper.cmi +dynlink_compilerlibs/attr_helper.cmi : \ + dynlink_compilerlibs/parsetree.cmi \ + dynlink_compilerlibs/location.cmi \ + dynlink_compilerlibs/asttypes.cmi +dynlink_compilerlibs/btype.cmo : \ + dynlink_compilerlibs/types.cmi \ + dynlink_compilerlibs/path.cmi \ + dynlink_compilerlibs/misc.cmi \ + dynlink_compilerlibs/ident.cmi \ + dynlink_compilerlibs/asttypes.cmi \ + dynlink_compilerlibs/btype.cmi +dynlink_compilerlibs/btype.cmx : \ + dynlink_compilerlibs/types.cmx \ + dynlink_compilerlibs/path.cmx \ + dynlink_compilerlibs/misc.cmx \ + dynlink_compilerlibs/ident.cmx \ + dynlink_compilerlibs/asttypes.cmx \ + dynlink_compilerlibs/btype.cmi +dynlink_compilerlibs/btype.cmi : \ + dynlink_compilerlibs/types.cmi \ + dynlink_compilerlibs/path.cmi \ + dynlink_compilerlibs/asttypes.cmi +dynlink_compilerlibs/build_path_prefix_map.cmo : \ + dynlink_compilerlibs/build_path_prefix_map.cmi +dynlink_compilerlibs/build_path_prefix_map.cmx : \ + dynlink_compilerlibs/build_path_prefix_map.cmi +dynlink_compilerlibs/build_path_prefix_map.cmi : +dynlink_compilerlibs/builtin_attributes.cmo : \ + dynlink_compilerlibs/warnings.cmi \ + dynlink_compilerlibs/parsetree.cmi \ + dynlink_compilerlibs/misc.cmi \ + dynlink_compilerlibs/longident.cmi \ + dynlink_compilerlibs/location.cmi \ + dynlink_compilerlibs/asttypes.cmi \ + dynlink_compilerlibs/builtin_attributes.cmi +dynlink_compilerlibs/builtin_attributes.cmx : \ + dynlink_compilerlibs/warnings.cmx \ + dynlink_compilerlibs/parsetree.cmx \ + dynlink_compilerlibs/misc.cmx \ + dynlink_compilerlibs/longident.cmx \ + dynlink_compilerlibs/location.cmx \ + dynlink_compilerlibs/asttypes.cmx \ + dynlink_compilerlibs/builtin_attributes.cmi +dynlink_compilerlibs/builtin_attributes.cmi : \ + dynlink_compilerlibs/parsetree.cmi \ + dynlink_compilerlibs/misc.cmi \ + dynlink_compilerlibs/location.cmi +dynlink_compilerlibs/bytesections.cmo : \ + dynlink_compilerlibs/config.cmi \ + dynlink_compilerlibs/bytesections.cmi +dynlink_compilerlibs/bytesections.cmx : \ + dynlink_compilerlibs/config.cmx \ + dynlink_compilerlibs/bytesections.cmi +dynlink_compilerlibs/bytesections.cmi : +dynlink_compilerlibs/clflags.cmo : \ + dynlink_compilerlibs/profile.cmi \ + dynlink_compilerlibs/numbers.cmi \ + dynlink_compilerlibs/misc.cmi \ + dynlink_compilerlibs/config.cmi \ + dynlink_compilerlibs/arg_helper.cmi \ + dynlink_compilerlibs/clflags.cmi +dynlink_compilerlibs/clflags.cmx : \ + dynlink_compilerlibs/profile.cmx \ + dynlink_compilerlibs/numbers.cmx \ + dynlink_compilerlibs/misc.cmx \ + dynlink_compilerlibs/config.cmx \ + dynlink_compilerlibs/arg_helper.cmx \ + dynlink_compilerlibs/clflags.cmi +dynlink_compilerlibs/clflags.cmi : \ + dynlink_compilerlibs/profile.cmi \ + dynlink_compilerlibs/misc.cmi +dynlink_compilerlibs/cmi_format.cmo : \ + dynlink_compilerlibs/types.cmi \ + dynlink_compilerlibs/misc.cmi \ + dynlink_compilerlibs/location.cmi \ + dynlink_compilerlibs/config.cmi \ + dynlink_compilerlibs/cmi_format.cmi +dynlink_compilerlibs/cmi_format.cmx : \ + dynlink_compilerlibs/types.cmx \ + dynlink_compilerlibs/misc.cmx \ + dynlink_compilerlibs/location.cmx \ + dynlink_compilerlibs/config.cmx \ + dynlink_compilerlibs/cmi_format.cmi +dynlink_compilerlibs/cmi_format.cmi : \ + dynlink_compilerlibs/types.cmi \ + dynlink_compilerlibs/misc.cmi +dynlink_compilerlibs/cmo_format.cmo : \ + dynlink_compilerlibs/misc.cmi \ + dynlink_compilerlibs/lambda.cmi \ + dynlink_compilerlibs/ident.cmi \ + dynlink_compilerlibs/cmo_format.cmi +dynlink_compilerlibs/cmo_format.cmx : \ + dynlink_compilerlibs/misc.cmx \ + dynlink_compilerlibs/lambda.cmx \ + dynlink_compilerlibs/ident.cmx \ + dynlink_compilerlibs/cmo_format.cmi +dynlink_compilerlibs/cmo_format.cmi : \ + dynlink_compilerlibs/misc.cmi \ + dynlink_compilerlibs/lambda.cmi \ + dynlink_compilerlibs/ident.cmi +dynlink_compilerlibs/cmxs_format.cmo : \ + dynlink_compilerlibs/config.cmi \ + dynlink_compilerlibs/compilation_unit.cmi \ + dynlink_compilerlibs/cmxs_format.cmi +dynlink_compilerlibs/cmxs_format.cmx : \ + dynlink_compilerlibs/config.cmx \ + dynlink_compilerlibs/compilation_unit.cmx \ + dynlink_compilerlibs/cmxs_format.cmi +dynlink_compilerlibs/cmxs_format.cmi : \ + dynlink_compilerlibs/compilation_unit.cmi +dynlink_compilerlibs/compilation_unit.cmo : \ + dynlink_compilerlibs/path.cmi \ + dynlink_compilerlibs/misc.cmi \ + dynlink_compilerlibs/int_replace_polymorphic_compare.cmi \ + dynlink_compilerlibs/identifiable.cmi \ + dynlink_compilerlibs/ident.cmi \ + dynlink_compilerlibs/compilation_unit.cmi +dynlink_compilerlibs/compilation_unit.cmx : \ + dynlink_compilerlibs/path.cmx \ + dynlink_compilerlibs/misc.cmx \ + dynlink_compilerlibs/int_replace_polymorphic_compare.cmx \ + dynlink_compilerlibs/identifiable.cmx \ + dynlink_compilerlibs/ident.cmx \ + dynlink_compilerlibs/compilation_unit.cmi +dynlink_compilerlibs/compilation_unit.cmi : \ + dynlink_compilerlibs/path.cmi \ + dynlink_compilerlibs/identifiable.cmi \ + dynlink_compilerlibs/ident.cmi +dynlink_compilerlibs/config.cmo : \ + dynlink_compilerlibs/config.cmi +dynlink_compilerlibs/config.cmx : \ + dynlink_compilerlibs/config.cmi +dynlink_compilerlibs/config.cmi : +dynlink_compilerlibs/consistbl.cmo : \ + dynlink_compilerlibs/misc.cmi \ + dynlink_compilerlibs/consistbl.cmi +dynlink_compilerlibs/consistbl.cmx : \ + dynlink_compilerlibs/misc.cmx \ + dynlink_compilerlibs/consistbl.cmi +dynlink_compilerlibs/consistbl.cmi : \ + dynlink_compilerlibs/misc.cmi +dynlink_compilerlibs/datarepr.cmo : \ + dynlink_compilerlibs/types.cmi \ + dynlink_compilerlibs/path.cmi \ + dynlink_compilerlibs/location.cmi \ + dynlink_compilerlibs/ident.cmi \ + dynlink_compilerlibs/btype.cmi \ + dynlink_compilerlibs/asttypes.cmi \ + dynlink_compilerlibs/datarepr.cmi +dynlink_compilerlibs/datarepr.cmx : \ + dynlink_compilerlibs/types.cmx \ + dynlink_compilerlibs/path.cmx \ + dynlink_compilerlibs/location.cmx \ + dynlink_compilerlibs/ident.cmx \ + dynlink_compilerlibs/btype.cmx \ + dynlink_compilerlibs/asttypes.cmx \ + dynlink_compilerlibs/datarepr.cmi +dynlink_compilerlibs/datarepr.cmi : \ + dynlink_compilerlibs/types.cmi \ + dynlink_compilerlibs/path.cmi \ + dynlink_compilerlibs/ident.cmi +dynlink_compilerlibs/dll.cmo : \ + dynlink_compilerlibs/misc.cmi \ + dynlink_compilerlibs/config.cmi \ + dynlink_compilerlibs/dll.cmi +dynlink_compilerlibs/dll.cmx : \ + dynlink_compilerlibs/misc.cmx \ + dynlink_compilerlibs/config.cmx \ + dynlink_compilerlibs/dll.cmi +dynlink_compilerlibs/dll.cmi : +dynlink_compilerlibs/docstrings.cmo : \ + dynlink_compilerlibs/warnings.cmi \ + dynlink_compilerlibs/parsetree.cmi \ + dynlink_compilerlibs/location.cmi \ + dynlink_compilerlibs/docstrings.cmi +dynlink_compilerlibs/docstrings.cmx : \ + dynlink_compilerlibs/warnings.cmx \ + dynlink_compilerlibs/parsetree.cmx \ + dynlink_compilerlibs/location.cmx \ + dynlink_compilerlibs/docstrings.cmi +dynlink_compilerlibs/docstrings.cmi : \ + dynlink_compilerlibs/parsetree.cmi \ + dynlink_compilerlibs/location.cmi +dynlink_compilerlibs/env.cmo : \ + dynlink_compilerlibs/warnings.cmi \ + dynlink_compilerlibs/types.cmi \ + dynlink_compilerlibs/subst.cmi \ + dynlink_compilerlibs/predef.cmi \ + dynlink_compilerlibs/persistent_env.cmi \ + dynlink_compilerlibs/path.cmi \ + dynlink_compilerlibs/misc.cmi \ + dynlink_compilerlibs/longident.cmi \ + dynlink_compilerlibs/location.cmi \ + dynlink_compilerlibs/load_path.cmi \ + dynlink_compilerlibs/ident.cmi \ + dynlink_compilerlibs/datarepr.cmi \ + dynlink_compilerlibs/cmi_format.cmi \ + dynlink_compilerlibs/clflags.cmi \ + dynlink_compilerlibs/builtin_attributes.cmi \ + dynlink_compilerlibs/btype.cmi \ + dynlink_compilerlibs/asttypes.cmi \ + dynlink_compilerlibs/env.cmi +dynlink_compilerlibs/env.cmx : \ + dynlink_compilerlibs/warnings.cmx \ + dynlink_compilerlibs/types.cmx \ + dynlink_compilerlibs/subst.cmx \ + dynlink_compilerlibs/predef.cmx \ + dynlink_compilerlibs/persistent_env.cmx \ + dynlink_compilerlibs/path.cmx \ + dynlink_compilerlibs/misc.cmx \ + dynlink_compilerlibs/longident.cmx \ + dynlink_compilerlibs/location.cmx \ + dynlink_compilerlibs/load_path.cmx \ + dynlink_compilerlibs/ident.cmx \ + dynlink_compilerlibs/datarepr.cmx \ + dynlink_compilerlibs/cmi_format.cmx \ + dynlink_compilerlibs/clflags.cmx \ + dynlink_compilerlibs/builtin_attributes.cmx \ + dynlink_compilerlibs/btype.cmx \ + dynlink_compilerlibs/asttypes.cmx \ + dynlink_compilerlibs/env.cmi +dynlink_compilerlibs/env.cmi : \ + dynlink_compilerlibs/warnings.cmi \ + dynlink_compilerlibs/types.cmi \ + dynlink_compilerlibs/subst.cmi \ + dynlink_compilerlibs/path.cmi \ + dynlink_compilerlibs/misc.cmi \ + dynlink_compilerlibs/longident.cmi \ + dynlink_compilerlibs/location.cmi \ + dynlink_compilerlibs/load_path.cmi \ + dynlink_compilerlibs/ident.cmi \ + dynlink_compilerlibs/cmi_format.cmi \ + dynlink_compilerlibs/asttypes.cmi +dynlink_compilerlibs/ident.cmo : \ + dynlink_compilerlibs/misc.cmi \ + dynlink_compilerlibs/identifiable.cmi \ + dynlink_compilerlibs/clflags.cmi \ + dynlink_compilerlibs/ident.cmi +dynlink_compilerlibs/ident.cmx : \ + dynlink_compilerlibs/misc.cmx \ + dynlink_compilerlibs/identifiable.cmx \ + dynlink_compilerlibs/clflags.cmx \ + dynlink_compilerlibs/ident.cmi +dynlink_compilerlibs/ident.cmi : \ + dynlink_compilerlibs/identifiable.cmi +dynlink_compilerlibs/identifiable.cmo : \ + dynlink_compilerlibs/misc.cmi \ + dynlink_compilerlibs/identifiable.cmi +dynlink_compilerlibs/identifiable.cmx : \ + dynlink_compilerlibs/misc.cmx \ + dynlink_compilerlibs/identifiable.cmi +dynlink_compilerlibs/identifiable.cmi : +dynlink_compilerlibs/instruct.cmo : \ + dynlink_compilerlibs/types.cmi \ + dynlink_compilerlibs/subst.cmi \ + dynlink_compilerlibs/location.cmi \ + dynlink_compilerlibs/lambda.cmi \ + dynlink_compilerlibs/ident.cmi \ + dynlink_compilerlibs/env.cmi \ + dynlink_compilerlibs/instruct.cmi +dynlink_compilerlibs/instruct.cmx : \ + dynlink_compilerlibs/types.cmx \ + dynlink_compilerlibs/subst.cmx \ + dynlink_compilerlibs/location.cmx \ + dynlink_compilerlibs/lambda.cmx \ + dynlink_compilerlibs/ident.cmx \ + dynlink_compilerlibs/env.cmx \ + dynlink_compilerlibs/instruct.cmi +dynlink_compilerlibs/instruct.cmi : \ + dynlink_compilerlibs/types.cmi \ + dynlink_compilerlibs/subst.cmi \ + dynlink_compilerlibs/location.cmi \ + dynlink_compilerlibs/lambda.cmi \ + dynlink_compilerlibs/ident.cmi \ + dynlink_compilerlibs/env.cmi +dynlink_compilerlibs/int_replace_polymorphic_compare.cmo : \ + dynlink_compilerlibs/int_replace_polymorphic_compare.cmi +dynlink_compilerlibs/int_replace_polymorphic_compare.cmx : \ + dynlink_compilerlibs/int_replace_polymorphic_compare.cmi +dynlink_compilerlibs/int_replace_polymorphic_compare.cmi : +dynlink_compilerlibs/lambda.cmo : \ + dynlink_compilerlibs/types.cmi \ + dynlink_compilerlibs/primitive.cmi \ + dynlink_compilerlibs/path.cmi \ + dynlink_compilerlibs/misc.cmi \ + dynlink_compilerlibs/longident.cmi \ + dynlink_compilerlibs/location.cmi \ + dynlink_compilerlibs/ident.cmi \ + dynlink_compilerlibs/env.cmi \ + dynlink_compilerlibs/asttypes.cmi \ + dynlink_compilerlibs/lambda.cmi +dynlink_compilerlibs/lambda.cmx : \ + dynlink_compilerlibs/types.cmx \ + dynlink_compilerlibs/primitive.cmx \ + dynlink_compilerlibs/path.cmx \ + dynlink_compilerlibs/misc.cmx \ + dynlink_compilerlibs/longident.cmx \ + dynlink_compilerlibs/location.cmx \ + dynlink_compilerlibs/ident.cmx \ + dynlink_compilerlibs/env.cmx \ + dynlink_compilerlibs/asttypes.cmx \ + dynlink_compilerlibs/lambda.cmi +dynlink_compilerlibs/lambda.cmi : \ + dynlink_compilerlibs/types.cmi \ + dynlink_compilerlibs/primitive.cmi \ + dynlink_compilerlibs/path.cmi \ + dynlink_compilerlibs/location.cmi \ + dynlink_compilerlibs/ident.cmi \ + dynlink_compilerlibs/env.cmi \ + dynlink_compilerlibs/asttypes.cmi +dynlink_compilerlibs/load_path.cmo : \ + dynlink_compilerlibs/misc.cmi \ + dynlink_compilerlibs/load_path.cmi +dynlink_compilerlibs/load_path.cmx : \ + dynlink_compilerlibs/misc.cmx \ + dynlink_compilerlibs/load_path.cmi +dynlink_compilerlibs/load_path.cmi : +dynlink_compilerlibs/location.cmo : \ + dynlink_compilerlibs/warnings.cmi \ + dynlink_compilerlibs/terminfo.cmi \ + dynlink_compilerlibs/misc.cmi \ + dynlink_compilerlibs/clflags.cmi \ + dynlink_compilerlibs/build_path_prefix_map.cmi \ + dynlink_compilerlibs/location.cmi +dynlink_compilerlibs/location.cmx : \ + dynlink_compilerlibs/warnings.cmx \ + dynlink_compilerlibs/terminfo.cmx \ + dynlink_compilerlibs/misc.cmx \ + dynlink_compilerlibs/clflags.cmx \ + dynlink_compilerlibs/build_path_prefix_map.cmx \ + dynlink_compilerlibs/location.cmi +dynlink_compilerlibs/location.cmi : \ + dynlink_compilerlibs/warnings.cmi +dynlink_compilerlibs/longident.cmo : \ + dynlink_compilerlibs/misc.cmi \ + dynlink_compilerlibs/longident.cmi +dynlink_compilerlibs/longident.cmx : \ + dynlink_compilerlibs/misc.cmx \ + dynlink_compilerlibs/longident.cmi +dynlink_compilerlibs/longident.cmi : +dynlink_compilerlibs/meta.cmo : \ + dynlink_compilerlibs/instruct.cmi \ + dynlink_compilerlibs/meta.cmi +dynlink_compilerlibs/meta.cmx : \ + dynlink_compilerlibs/instruct.cmx \ + dynlink_compilerlibs/meta.cmi +dynlink_compilerlibs/meta.cmi : \ + dynlink_compilerlibs/instruct.cmi +dynlink_compilerlibs/misc.cmo : \ + dynlink_compilerlibs/config.cmi \ + dynlink_compilerlibs/build_path_prefix_map.cmi \ + dynlink_compilerlibs/misc.cmi +dynlink_compilerlibs/misc.cmx : \ + dynlink_compilerlibs/config.cmx \ + dynlink_compilerlibs/build_path_prefix_map.cmx \ + dynlink_compilerlibs/misc.cmi +dynlink_compilerlibs/misc.cmi : \ + dynlink_compilerlibs/build_path_prefix_map.cmi +dynlink_compilerlibs/numbers.cmo : \ + dynlink_compilerlibs/misc.cmi \ + dynlink_compilerlibs/identifiable.cmi \ + dynlink_compilerlibs/numbers.cmi +dynlink_compilerlibs/numbers.cmx : \ + dynlink_compilerlibs/misc.cmx \ + dynlink_compilerlibs/identifiable.cmx \ + dynlink_compilerlibs/numbers.cmi +dynlink_compilerlibs/numbers.cmi : \ + dynlink_compilerlibs/identifiable.cmi +dynlink_compilerlibs/opcodes.cmo : \ + dynlink_compilerlibs/opcodes.cmi +dynlink_compilerlibs/opcodes.cmx : \ + dynlink_compilerlibs/opcodes.cmi +dynlink_compilerlibs/opcodes.cmi : +dynlink_compilerlibs/outcometree.cmo : \ + dynlink_compilerlibs/asttypes.cmi \ + dynlink_compilerlibs/outcometree.cmi +dynlink_compilerlibs/outcometree.cmx : \ + dynlink_compilerlibs/asttypes.cmx \ + dynlink_compilerlibs/outcometree.cmi +dynlink_compilerlibs/outcometree.cmi : \ + dynlink_compilerlibs/asttypes.cmi +dynlink_compilerlibs/parsetree.cmo : \ + dynlink_compilerlibs/longident.cmi \ + dynlink_compilerlibs/location.cmi \ + dynlink_compilerlibs/asttypes.cmi \ + dynlink_compilerlibs/parsetree.cmi +dynlink_compilerlibs/parsetree.cmx : \ + dynlink_compilerlibs/longident.cmx \ + dynlink_compilerlibs/location.cmx \ + dynlink_compilerlibs/asttypes.cmx \ + dynlink_compilerlibs/parsetree.cmi +dynlink_compilerlibs/parsetree.cmi : \ + dynlink_compilerlibs/longident.cmi \ + dynlink_compilerlibs/location.cmi \ + dynlink_compilerlibs/asttypes.cmi +dynlink_compilerlibs/path.cmo : \ + dynlink_compilerlibs/ident.cmi \ + dynlink_compilerlibs/path.cmi +dynlink_compilerlibs/path.cmx : \ + dynlink_compilerlibs/ident.cmx \ + dynlink_compilerlibs/path.cmi +dynlink_compilerlibs/path.cmi : \ + dynlink_compilerlibs/ident.cmi +dynlink_compilerlibs/persistent_env.cmo : \ + dynlink_compilerlibs/warnings.cmi \ + dynlink_compilerlibs/misc.cmi \ + dynlink_compilerlibs/location.cmi \ + dynlink_compilerlibs/load_path.cmi \ + dynlink_compilerlibs/consistbl.cmi \ + dynlink_compilerlibs/config.cmi \ + dynlink_compilerlibs/cmi_format.cmi \ + dynlink_compilerlibs/clflags.cmi \ + dynlink_compilerlibs/persistent_env.cmi +dynlink_compilerlibs/persistent_env.cmx : \ + dynlink_compilerlibs/warnings.cmx \ + dynlink_compilerlibs/misc.cmx \ + dynlink_compilerlibs/location.cmx \ + dynlink_compilerlibs/load_path.cmx \ + dynlink_compilerlibs/consistbl.cmx \ + dynlink_compilerlibs/config.cmx \ + dynlink_compilerlibs/cmi_format.cmx \ + dynlink_compilerlibs/clflags.cmx \ + dynlink_compilerlibs/persistent_env.cmi +dynlink_compilerlibs/persistent_env.cmi : \ + dynlink_compilerlibs/types.cmi \ + dynlink_compilerlibs/misc.cmi \ + dynlink_compilerlibs/location.cmi \ + dynlink_compilerlibs/consistbl.cmi \ + dynlink_compilerlibs/cmi_format.cmi +dynlink_compilerlibs/pprintast.cmo : \ + dynlink_compilerlibs/parsetree.cmi \ + dynlink_compilerlibs/misc.cmi \ + dynlink_compilerlibs/longident.cmi \ + dynlink_compilerlibs/location.cmi \ + dynlink_compilerlibs/asttypes.cmi \ + dynlink_compilerlibs/ast_helper.cmi \ + dynlink_compilerlibs/pprintast.cmi +dynlink_compilerlibs/pprintast.cmx : \ + dynlink_compilerlibs/parsetree.cmx \ + dynlink_compilerlibs/misc.cmx \ + dynlink_compilerlibs/longident.cmx \ + dynlink_compilerlibs/location.cmx \ + dynlink_compilerlibs/asttypes.cmx \ + dynlink_compilerlibs/ast_helper.cmx \ + dynlink_compilerlibs/pprintast.cmi +dynlink_compilerlibs/pprintast.cmi : \ + dynlink_compilerlibs/parsetree.cmi \ + dynlink_compilerlibs/longident.cmi +dynlink_compilerlibs/predef.cmo : \ + dynlink_compilerlibs/types.cmi \ + dynlink_compilerlibs/path.cmi \ + dynlink_compilerlibs/parsetree.cmi \ + dynlink_compilerlibs/location.cmi \ + dynlink_compilerlibs/ident.cmi \ + dynlink_compilerlibs/btype.cmi \ + dynlink_compilerlibs/asttypes.cmi \ + dynlink_compilerlibs/ast_helper.cmi \ + dynlink_compilerlibs/predef.cmi +dynlink_compilerlibs/predef.cmx : \ + dynlink_compilerlibs/types.cmx \ + dynlink_compilerlibs/path.cmx \ + dynlink_compilerlibs/parsetree.cmx \ + dynlink_compilerlibs/location.cmx \ + dynlink_compilerlibs/ident.cmx \ + dynlink_compilerlibs/btype.cmx \ + dynlink_compilerlibs/asttypes.cmx \ + dynlink_compilerlibs/ast_helper.cmx \ + dynlink_compilerlibs/predef.cmi +dynlink_compilerlibs/predef.cmi : \ + dynlink_compilerlibs/types.cmi \ + dynlink_compilerlibs/path.cmi \ + dynlink_compilerlibs/ident.cmi +dynlink_compilerlibs/primitive.cmo : \ + dynlink_compilerlibs/parsetree.cmi \ + dynlink_compilerlibs/outcometree.cmi \ + dynlink_compilerlibs/misc.cmi \ + dynlink_compilerlibs/location.cmi \ + dynlink_compilerlibs/attr_helper.cmi \ + dynlink_compilerlibs/primitive.cmi +dynlink_compilerlibs/primitive.cmx : \ + dynlink_compilerlibs/parsetree.cmx \ + dynlink_compilerlibs/outcometree.cmx \ + dynlink_compilerlibs/misc.cmx \ + dynlink_compilerlibs/location.cmx \ + dynlink_compilerlibs/attr_helper.cmx \ + dynlink_compilerlibs/primitive.cmi +dynlink_compilerlibs/primitive.cmi : \ + dynlink_compilerlibs/parsetree.cmi \ + dynlink_compilerlibs/outcometree.cmi \ + dynlink_compilerlibs/location.cmi +dynlink_compilerlibs/profile.cmo : \ + dynlink_compilerlibs/misc.cmi \ + dynlink_compilerlibs/profile.cmi +dynlink_compilerlibs/profile.cmx : \ + dynlink_compilerlibs/misc.cmx \ + dynlink_compilerlibs/profile.cmi +dynlink_compilerlibs/profile.cmi : +dynlink_compilerlibs/runtimedef.cmo : \ + dynlink_compilerlibs/runtimedef.cmi +dynlink_compilerlibs/runtimedef.cmx : \ + dynlink_compilerlibs/runtimedef.cmi +dynlink_compilerlibs/runtimedef.cmi : +dynlink_compilerlibs/subst.cmo : \ + dynlink_compilerlibs/types.cmi \ + dynlink_compilerlibs/path.cmi \ + dynlink_compilerlibs/parsetree.cmi \ + dynlink_compilerlibs/misc.cmi \ + dynlink_compilerlibs/location.cmi \ + dynlink_compilerlibs/ident.cmi \ + dynlink_compilerlibs/clflags.cmi \ + dynlink_compilerlibs/btype.cmi \ + dynlink_compilerlibs/ast_mapper.cmi \ + dynlink_compilerlibs/subst.cmi +dynlink_compilerlibs/subst.cmx : \ + dynlink_compilerlibs/types.cmx \ + dynlink_compilerlibs/path.cmx \ + dynlink_compilerlibs/parsetree.cmx \ + dynlink_compilerlibs/misc.cmx \ + dynlink_compilerlibs/location.cmx \ + dynlink_compilerlibs/ident.cmx \ + dynlink_compilerlibs/clflags.cmx \ + dynlink_compilerlibs/btype.cmx \ + dynlink_compilerlibs/ast_mapper.cmx \ + dynlink_compilerlibs/subst.cmi +dynlink_compilerlibs/subst.cmi : \ + dynlink_compilerlibs/types.cmi \ + dynlink_compilerlibs/path.cmi \ + dynlink_compilerlibs/ident.cmi +dynlink_compilerlibs/symtable.cmo : \ + dynlink_compilerlibs/runtimedef.cmi \ + dynlink_compilerlibs/predef.cmi \ + dynlink_compilerlibs/misc.cmi \ + dynlink_compilerlibs/meta.cmi \ + dynlink_compilerlibs/location.cmi \ + dynlink_compilerlibs/lambda.cmi \ + dynlink_compilerlibs/ident.cmi \ + dynlink_compilerlibs/dll.cmi \ + dynlink_compilerlibs/config.cmi \ + dynlink_compilerlibs/cmo_format.cmi \ + dynlink_compilerlibs/clflags.cmi \ + dynlink_compilerlibs/bytesections.cmi \ + dynlink_compilerlibs/asttypes.cmi \ + dynlink_compilerlibs/symtable.cmi +dynlink_compilerlibs/symtable.cmx : \ + dynlink_compilerlibs/runtimedef.cmx \ + dynlink_compilerlibs/predef.cmx \ + dynlink_compilerlibs/misc.cmx \ + dynlink_compilerlibs/meta.cmx \ + dynlink_compilerlibs/location.cmx \ + dynlink_compilerlibs/lambda.cmx \ + dynlink_compilerlibs/ident.cmx \ + dynlink_compilerlibs/dll.cmx \ + dynlink_compilerlibs/config.cmx \ + dynlink_compilerlibs/cmo_format.cmx \ + dynlink_compilerlibs/clflags.cmx \ + dynlink_compilerlibs/bytesections.cmx \ + dynlink_compilerlibs/asttypes.cmx \ + dynlink_compilerlibs/symtable.cmi +dynlink_compilerlibs/symtable.cmi : \ + dynlink_compilerlibs/misc.cmi \ + dynlink_compilerlibs/lambda.cmi \ + dynlink_compilerlibs/ident.cmi \ + dynlink_compilerlibs/cmo_format.cmi +dynlink_compilerlibs/syntaxerr.cmo : \ + dynlink_compilerlibs/location.cmi \ + dynlink_compilerlibs/syntaxerr.cmi +dynlink_compilerlibs/syntaxerr.cmx : \ + dynlink_compilerlibs/location.cmx \ + dynlink_compilerlibs/syntaxerr.cmi +dynlink_compilerlibs/syntaxerr.cmi : \ + dynlink_compilerlibs/location.cmi +dynlink_compilerlibs/terminfo.cmo : \ + dynlink_compilerlibs/terminfo.cmi +dynlink_compilerlibs/terminfo.cmx : \ + dynlink_compilerlibs/terminfo.cmi +dynlink_compilerlibs/terminfo.cmi : +dynlink_compilerlibs/types.cmo : \ + dynlink_compilerlibs/primitive.cmi \ + dynlink_compilerlibs/path.cmi \ + dynlink_compilerlibs/parsetree.cmi \ + dynlink_compilerlibs/misc.cmi \ + dynlink_compilerlibs/longident.cmi \ + dynlink_compilerlibs/location.cmi \ + dynlink_compilerlibs/ident.cmi \ + dynlink_compilerlibs/asttypes.cmi \ + dynlink_compilerlibs/types.cmi +dynlink_compilerlibs/types.cmx : \ + dynlink_compilerlibs/primitive.cmx \ + dynlink_compilerlibs/path.cmx \ + dynlink_compilerlibs/parsetree.cmx \ + dynlink_compilerlibs/misc.cmx \ + dynlink_compilerlibs/longident.cmx \ + dynlink_compilerlibs/location.cmx \ + dynlink_compilerlibs/ident.cmx \ + dynlink_compilerlibs/asttypes.cmx \ + dynlink_compilerlibs/types.cmi +dynlink_compilerlibs/types.cmi : \ + dynlink_compilerlibs/primitive.cmi \ + dynlink_compilerlibs/path.cmi \ + dynlink_compilerlibs/parsetree.cmi \ + dynlink_compilerlibs/longident.cmi \ + dynlink_compilerlibs/location.cmi \ + dynlink_compilerlibs/ident.cmi \ + dynlink_compilerlibs/asttypes.cmi +dynlink_compilerlibs/warnings.cmo : \ + dynlink_compilerlibs/misc.cmi \ + dynlink_compilerlibs/warnings.cmi +dynlink_compilerlibs/warnings.cmx : \ + dynlink_compilerlibs/misc.cmx \ + dynlink_compilerlibs/warnings.cmi +dynlink_compilerlibs/warnings.cmi : diff --git a/otherlibs/dynlink/dynlink_compilerlibs_bytecode/.gitignore b/otherlibs/dynlink/dynlink_compilerlibs_bytecode/.gitignore new file mode 100644 index 000000000000..5fe053f1a759 --- /dev/null +++ b/otherlibs/dynlink/dynlink_compilerlibs_bytecode/.gitignore @@ -0,0 +1,3 @@ +# Hack to allow committing of an empty directory to git. +* +!.gitignore diff --git a/otherlibs/dynlink/dynlink_compilerlibs_native/.gitignore b/otherlibs/dynlink/dynlink_compilerlibs_native/.gitignore new file mode 100644 index 000000000000..5fe053f1a759 --- /dev/null +++ b/otherlibs/dynlink/dynlink_compilerlibs_native/.gitignore @@ -0,0 +1,3 @@ +# Hack to allow committing of an empty directory to git. +* +!.gitignore diff --git a/otherlibs/dynlink/extract_crc.ml b/otherlibs/dynlink/extract_crc.ml index 2ccbda86e678..49c483942f89 100644 --- a/otherlibs/dynlink/extract_crc.ml +++ b/otherlibs/dynlink/extract_crc.ml @@ -15,6 +15,8 @@ (* Print the digests of unit interfaces *) +open! Dynlink_compilerlibs + let load_path = ref [] let first = ref true diff --git a/otherlibs/dynlink/natdynlink.ml b/otherlibs/dynlink/natdynlink.ml index 09874ff10edf..924e494a9304 100644 --- a/otherlibs/dynlink/natdynlink.ml +++ b/otherlibs/dynlink/natdynlink.ml @@ -20,6 +20,8 @@ [@@@ocaml.warning "+a-4-30-40-41-42"] +open! Dynlink_compilerlibs (* REMOVE_ME for use in the compiler etc. *) + module DC = Dynlink_common module DT = Dynlink_types @@ -33,22 +35,42 @@ type global_map = { module Native = struct type handle - external ndl_open : string -> bool -> handle * Cmx_format.dynheader + external ndl_open : string -> bool -> handle * Cmxs_format.Dynheader_info.t = "caml_natdynlink_open" external ndl_run : handle -> string -> unit = "caml_natdynlink_run" external ndl_getmap : unit -> global_map list = "caml_natdynlink_getmap" external ndl_globals_inited : unit -> int = "caml_natdynlink_globals_inited" module Unit_header = struct - type t = Cmx_format.dynunit + module CU = Compilation_unit + module DU = Cmxs_format.Dynunit_info + + type t = DU.t + + (* CR-someday mshinwell: Change the whole dynlink library to use + [CU.Name], or maybe a new type, which could also be used + elsewhere in the compiler (superceding type [modname]). *) + + let name t = + CU.Name.to_string (CU.name (DU.unit t)) - let name (t : t) = t.dynu_name - let crc (t : t) = Some t.dynu_crc + let crc t = Some (DU.crc t) - let interface_imports (t : t) = t.dynu_imports_cmi - let implementation_imports (t : t) = t.dynu_imports_cmx + let interface_imports t = + List.map (fun (name, crc_opt) -> + CU.Name.to_string name, crc_opt) + (CU.Name.Map.bindings (DU.imports_cmi t)) + + let implementation_imports t = + List.map (fun (unit, crc_opt) -> + CU.Name.to_string (CU.name unit), crc_opt) + (CU.Map.bindings (DU.imports_cmx t)) + + let defined_symbols t = + List.map (fun unit -> + CU.Name.to_string (CU.name unit)) + (DU.defines t) - let defined_symbols (t : t) = t.dynu_defines let unsafe_module _t = false end @@ -59,9 +81,6 @@ module Native = struct let num_globals_inited () = ndl_globals_inited () - (* Copied from config.ml -- this file cannot depend on that. *) - let cmxs_magic_number = "Caml1999D025" - let fold_initial_units ~init ~f = let rank = ref 0 in List.fold_left (fun acc { name; crc_intf; crc_impl; syms; } -> @@ -88,10 +107,11 @@ module Native = struct try ndl_open filename (not priv) with exn -> raise (DT.Error (Cannot_open_dynamic_library exn)) in - if header.dynu_magic <> cmxs_magic_number then begin + if Cmxs_format.Dynheader_info.magic header <> Config.cmxs_magic_number + then begin raise (DT.Error (Not_a_bytecode_file filename)) end; - handle, header.dynu_units + handle, Cmxs_format.Dynheader_info.units header let finish _handle = () end diff --git a/runtime/.depend b/runtime/.depend index 2567f4097489..dae5ae878184 100644 --- a/runtime/.depend +++ b/runtime/.depend @@ -1,2178 +1,2592 @@ -afl_b.$(O): afl.c caml/config.h caml/m.h caml/s.h caml/misc.h caml/mlvalues.h \ - caml/osdeps.h caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h \ - caml/minor_gc.h caml/address_class.h +afl_b.$(O): afl.c caml/config.h caml/m.h caml/s.h caml/misc.h caml/config.h \ + caml/mlvalues.h caml/misc.h caml/osdeps.h caml/memory.h caml/gc.h \ + caml/mlvalues.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h alloc_b.$(O): alloc.c caml/alloc.h caml/misc.h caml/config.h caml/m.h caml/s.h \ - caml/mlvalues.h caml/custom.h caml/major_gc.h caml/freelist.h \ - caml/memory.h caml/gc.h caml/minor_gc.h caml/address_class.h \ - caml/stacks.h + caml/mlvalues.h caml/custom.h caml/major_gc.h caml/freelist.h \ + caml/memory.h caml/gc.h caml/major_gc.h caml/minor_gc.h \ + caml/address_class.h caml/mlvalues.h caml/stacks.h caml/memory.h array_b.$(O): array.c caml/alloc.h caml/misc.h caml/config.h caml/m.h caml/s.h \ - caml/mlvalues.h caml/fail.h caml/memory.h caml/gc.h caml/major_gc.h \ - caml/freelist.h caml/minor_gc.h caml/address_class.h caml/signals.h \ - caml/spacetime.h caml/io.h caml/stack.h -backtrace_b.$(O): backtrace.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \ - caml/s.h caml/mlvalues.h caml/memory.h caml/gc.h caml/major_gc.h \ - caml/freelist.h caml/minor_gc.h caml/address_class.h caml/backtrace.h \ - caml/exec.h caml/backtrace_prim.h caml/fail.h + caml/mlvalues.h caml/fail.h caml/memory.h caml/gc.h caml/major_gc.h \ + caml/freelist.h caml/minor_gc.h caml/address_class.h caml/misc.h \ + caml/mlvalues.h caml/signals.h caml/spacetime.h caml/io.h caml/stack.h backtrace_byt_b.$(O): backtrace_byt.c caml/config.h caml/m.h caml/s.h \ - caml/mlvalues.h caml/misc.h caml/alloc.h caml/custom.h caml/io.h \ - caml/instruct.h caml/intext.h caml/exec.h caml/fix_code.h \ - caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h \ - caml/minor_gc.h caml/address_class.h caml/startup.h caml/stacks.h \ - caml/sys.h caml/backtrace.h caml/fail.h caml/backtrace_prim.h + caml/mlvalues.h caml/config.h caml/misc.h caml/alloc.h caml/mlvalues.h \ + caml/custom.h caml/io.h caml/instruct.h caml/intext.h caml/io.h \ + caml/exec.h caml/fix_code.h caml/memory.h caml/gc.h caml/major_gc.h \ + caml/freelist.h caml/minor_gc.h caml/address_class.h caml/startup.h \ + caml/exec.h caml/stacks.h caml/memory.h caml/sys.h caml/backtrace.h \ + caml/fail.h caml/backtrace_prim.h caml/backtrace.h +backtrace_b.$(O): backtrace.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \ + caml/s.h caml/mlvalues.h caml/memory.h caml/gc.h caml/major_gc.h \ + caml/freelist.h caml/minor_gc.h caml/address_class.h caml/backtrace.h \ + caml/exec.h caml/backtrace_prim.h caml/backtrace.h caml/fail.h backtrace_nat_b.$(O): backtrace_nat.c caml/alloc.h caml/misc.h caml/config.h \ - caml/m.h caml/s.h caml/mlvalues.h caml/backtrace.h caml/exec.h \ - caml/backtrace_prim.h caml/memory.h caml/gc.h caml/major_gc.h \ - caml/freelist.h caml/minor_gc.h caml/address_class.h caml/stack.h + caml/m.h caml/s.h caml/mlvalues.h caml/backtrace.h caml/exec.h \ + caml/backtrace_prim.h caml/backtrace.h caml/memory.h caml/gc.h \ + caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ + caml/misc.h caml/mlvalues.h caml/stack.h bigarray_b.$(O): bigarray.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \ - caml/s.h caml/mlvalues.h caml/bigarray.h caml/custom.h caml/fail.h \ - caml/intext.h caml/io.h caml/hash.h caml/memory.h caml/gc.h \ - caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ - caml/signals.h + caml/s.h caml/mlvalues.h caml/bigarray.h caml/custom.h caml/fail.h \ + caml/intext.h caml/io.h caml/hash.h caml/memory.h caml/gc.h \ + caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ + caml/mlvalues.h caml/signals.h callback_b.$(O): callback.c caml/callback.h caml/mlvalues.h caml/config.h \ - caml/m.h caml/s.h caml/misc.h caml/fail.h caml/memory.h caml/gc.h \ - caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ - caml/interp.h caml/instruct.h caml/fix_code.h caml/stacks.h + caml/m.h caml/s.h caml/misc.h caml/fail.h caml/memory.h caml/gc.h \ + caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ + caml/mlvalues.h caml/interp.h caml/instruct.h caml/fix_code.h \ + caml/stacks.h caml/memory.h clambda_checks_b.$(O): clambda_checks.c caml/mlvalues.h caml/config.h caml/m.h \ - caml/s.h caml/misc.h + caml/s.h caml/misc.h compact_b.$(O): compact.c caml/address_class.h caml/config.h caml/m.h caml/s.h \ - caml/misc.h caml/mlvalues.h caml/finalise.h caml/roots.h caml/memory.h \ - caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ - caml/gc_ctrl.h caml/weak.h caml/compact.h + caml/misc.h caml/mlvalues.h caml/config.h caml/finalise.h caml/roots.h \ + caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/freelist.h caml/gc.h caml/gc_ctrl.h \ + caml/major_gc.h caml/memory.h caml/mlvalues.h caml/roots.h caml/weak.h \ + caml/compact.h compare_b.$(O): compare.c caml/custom.h caml/mlvalues.h caml/config.h caml/m.h \ - caml/s.h caml/misc.h caml/fail.h caml/memory.h caml/gc.h \ - caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h + caml/s.h caml/misc.h caml/fail.h caml/memory.h caml/gc.h caml/major_gc.h \ + caml/freelist.h caml/minor_gc.h caml/address_class.h caml/misc.h \ + caml/mlvalues.h custom_b.$(O): custom.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \ - caml/s.h caml/mlvalues.h caml/custom.h caml/fail.h caml/gc_ctrl.h \ - caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h \ - caml/minor_gc.h caml/address_class.h caml/signals.h + caml/s.h caml/mlvalues.h caml/custom.h caml/fail.h caml/gc_ctrl.h \ + caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/mlvalues.h caml/signals.h debugger_b.$(O): debugger.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \ - caml/s.h caml/mlvalues.h caml/debugger.h caml/osdeps.h caml/memory.h \ - caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ - caml/address_class.h caml/fail.h caml/fix_code.h caml/instruct.h \ - caml/intext.h caml/io.h caml/stacks.h caml/sys.h + caml/s.h caml/mlvalues.h caml/config.h caml/debugger.h caml/misc.h \ + caml/osdeps.h caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h \ + caml/minor_gc.h caml/address_class.h caml/fail.h caml/fix_code.h \ + caml/instruct.h caml/intext.h caml/io.h caml/io.h caml/mlvalues.h \ + caml/stacks.h caml/sys.h dynlink_b.$(O): dynlink.c caml/config.h caml/m.h caml/s.h caml/alloc.h \ - caml/misc.h caml/mlvalues.h caml/dynlink.h caml/fail.h caml/memory.h \ - caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ - caml/address_class.h caml/osdeps.h caml/prims.h caml/signals.h + caml/misc.h caml/config.h caml/mlvalues.h caml/dynlink.h caml/fail.h \ + caml/mlvalues.h caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h \ + caml/minor_gc.h caml/address_class.h caml/misc.h caml/osdeps.h \ + caml/memory.h caml/prims.h caml/signals.h dynlink_nat_b.$(O): dynlink_nat.c caml/misc.h caml/config.h caml/m.h caml/s.h \ - caml/mlvalues.h caml/memory.h caml/gc.h caml/major_gc.h \ - caml/freelist.h caml/minor_gc.h caml/address_class.h caml/stack.h \ - caml/callback.h caml/alloc.h caml/intext.h caml/io.h caml/osdeps.h \ - caml/fail.h caml/signals.h caml/hooks.h + caml/mlvalues.h caml/misc.h caml/memory.h caml/gc.h caml/mlvalues.h \ + caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ + caml/stack.h caml/callback.h caml/alloc.h caml/intext.h caml/io.h \ + caml/osdeps.h caml/memory.h caml/fail.h caml/signals.h caml/hooks.h extern_b.$(O): extern.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \ - caml/s.h caml/mlvalues.h caml/custom.h caml/fail.h caml/gc.h \ - caml/intext.h caml/io.h caml/md5.h caml/memory.h caml/major_gc.h \ - caml/freelist.h caml/minor_gc.h caml/address_class.h caml/reverse.h + caml/s.h caml/mlvalues.h caml/config.h caml/custom.h caml/fail.h \ + caml/gc.h caml/intext.h caml/io.h caml/io.h caml/md5.h caml/memory.h \ + caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/misc.h caml/mlvalues.h caml/reverse.h fail_byt_b.$(O): fail_byt.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \ - caml/s.h caml/mlvalues.h caml/fail.h caml/io.h caml/gc.h caml/memory.h \ - caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ - caml/printexc.h caml/signals.h caml/stacks.h + caml/s.h caml/mlvalues.h caml/fail.h caml/io.h caml/gc.h caml/memory.h \ + caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/misc.h caml/mlvalues.h caml/printexc.h \ + caml/signals.h caml/stacks.h caml/memory.h fail_nat_b.$(O): fail_nat.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \ - caml/s.h caml/mlvalues.h caml/fail.h caml/io.h caml/gc.h caml/memory.h \ - caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ - caml/printexc.h caml/signals.h caml/stack.h caml/roots.h \ - caml/callback.h + caml/s.h caml/mlvalues.h caml/fail.h caml/io.h caml/gc.h caml/memory.h \ + caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/mlvalues.h caml/printexc.h caml/signals.h \ + caml/stack.h caml/roots.h caml/memory.h caml/callback.h finalise_b.$(O): finalise.c caml/callback.h caml/mlvalues.h caml/config.h \ - caml/m.h caml/s.h caml/misc.h caml/compact.h caml/fail.h \ - caml/finalise.h caml/roots.h caml/memory.h caml/gc.h caml/major_gc.h \ - caml/freelist.h caml/minor_gc.h caml/address_class.h caml/signals.h + caml/m.h caml/s.h caml/misc.h caml/compact.h caml/fail.h caml/finalise.h \ + caml/roots.h caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h \ + caml/minor_gc.h caml/address_class.h caml/minor_gc.h caml/mlvalues.h \ + caml/roots.h caml/signals.h fix_code_b.$(O): fix_code.c caml/config.h caml/m.h caml/s.h caml/debugger.h \ - caml/misc.h caml/mlvalues.h caml/fix_code.h caml/instruct.h \ - caml/intext.h caml/io.h caml/md5.h caml/memory.h caml/gc.h \ - caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ - caml/reverse.h + caml/misc.h caml/config.h caml/mlvalues.h caml/fix_code.h \ + caml/instruct.h caml/intext.h caml/io.h caml/md5.h caml/memory.h \ + caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/misc.h caml/mlvalues.h caml/reverse.h floats_b.$(O): floats.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \ - caml/s.h caml/mlvalues.h caml/fail.h caml/memory.h caml/gc.h \ - caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ - caml/reverse.h caml/stacks.h + caml/s.h caml/mlvalues.h caml/fail.h caml/memory.h caml/gc.h \ + caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ + caml/mlvalues.h caml/misc.h caml/reverse.h caml/stacks.h caml/memory.h freelist_b.$(O): freelist.c caml/config.h caml/m.h caml/s.h caml/freelist.h \ - caml/misc.h caml/mlvalues.h caml/gc.h caml/gc_ctrl.h caml/memory.h \ - caml/major_gc.h caml/minor_gc.h caml/address_class.h + caml/misc.h caml/config.h caml/mlvalues.h caml/gc.h caml/gc_ctrl.h \ + caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/major_gc.h caml/misc.h caml/mlvalues.h gc_ctrl_b.$(O): gc_ctrl.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \ - caml/s.h caml/mlvalues.h caml/backtrace.h caml/exec.h caml/compact.h \ - caml/custom.h caml/fail.h caml/finalise.h caml/roots.h caml/memory.h \ - caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ - caml/address_class.h caml/gc_ctrl.h caml/signals.h caml/stacks.h \ - caml/startup_aux.h + caml/s.h caml/mlvalues.h caml/backtrace.h caml/exec.h caml/compact.h \ + caml/custom.h caml/fail.h caml/finalise.h caml/roots.h caml/memory.h \ + caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/freelist.h caml/gc.h caml/gc_ctrl.h \ + caml/major_gc.h caml/memory.h caml/minor_gc.h caml/misc.h \ + caml/mlvalues.h caml/signals.h caml/stacks.h caml/startup_aux.h globroots_b.$(O): globroots.c caml/memory.h caml/config.h caml/m.h caml/s.h \ - caml/gc.h caml/mlvalues.h caml/misc.h caml/major_gc.h caml/freelist.h \ - caml/minor_gc.h caml/address_class.h caml/roots.h caml/globroots.h + caml/gc.h caml/mlvalues.h caml/misc.h caml/major_gc.h caml/freelist.h \ + caml/minor_gc.h caml/address_class.h caml/misc.h caml/mlvalues.h \ + caml/roots.h caml/memory.h caml/globroots.h caml/roots.h hash_b.$(O): hash.c caml/mlvalues.h caml/config.h caml/m.h caml/s.h \ - caml/misc.h caml/custom.h caml/memory.h caml/gc.h caml/major_gc.h \ - caml/freelist.h caml/minor_gc.h caml/address_class.h caml/hash.h + caml/misc.h caml/custom.h caml/mlvalues.h caml/memory.h caml/gc.h \ + caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ + caml/hash.h instrtrace_b.$(O): instrtrace.c intern_b.$(O): intern.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \ - caml/s.h caml/mlvalues.h caml/callback.h caml/custom.h caml/fail.h \ - caml/gc.h caml/intext.h caml/io.h caml/md5.h caml/memory.h \ - caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ - caml/reverse.h + caml/s.h caml/mlvalues.h caml/callback.h caml/config.h caml/custom.h \ + caml/fail.h caml/gc.h caml/intext.h caml/io.h caml/io.h caml/md5.h \ + caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/mlvalues.h caml/misc.h caml/reverse.h interp_b.$(O): interp.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \ - caml/s.h caml/mlvalues.h caml/backtrace.h caml/exec.h caml/callback.h \ - caml/debugger.h caml/fail.h caml/fix_code.h caml/instrtrace.h \ - caml/instruct.h caml/interp.h caml/major_gc.h caml/freelist.h \ - caml/memory.h caml/gc.h caml/minor_gc.h caml/address_class.h \ - caml/prims.h caml/signals.h caml/stacks.h caml/startup_aux.h \ - caml/jumptbl.h + caml/s.h caml/mlvalues.h caml/backtrace.h caml/exec.h caml/callback.h \ + caml/debugger.h caml/fail.h caml/fix_code.h caml/instrtrace.h \ + caml/instruct.h caml/interp.h caml/major_gc.h caml/freelist.h \ + caml/memory.h caml/gc.h caml/major_gc.h caml/minor_gc.h \ + caml/address_class.h caml/misc.h caml/mlvalues.h caml/prims.h \ + caml/signals.h caml/stacks.h caml/memory.h caml/startup_aux.h \ + caml/jumptbl.h ints_b.$(O): ints.c caml/alloc.h caml/misc.h caml/config.h caml/m.h caml/s.h \ - caml/mlvalues.h caml/custom.h caml/fail.h caml/intext.h caml/io.h \ - caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h \ - caml/minor_gc.h caml/address_class.h + caml/mlvalues.h caml/custom.h caml/fail.h caml/intext.h caml/io.h \ + caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/misc.h caml/mlvalues.h io_b.$(O): io.c caml/config.h caml/m.h caml/s.h caml/alloc.h caml/misc.h \ - caml/mlvalues.h caml/custom.h caml/fail.h caml/io.h caml/memory.h \ - caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ - caml/address_class.h caml/osdeps.h caml/signals.h caml/sys.h + caml/config.h caml/mlvalues.h caml/custom.h caml/fail.h caml/io.h \ + caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/misc.h caml/mlvalues.h caml/osdeps.h \ + caml/memory.h caml/signals.h caml/sys.h lexing_b.$(O): lexing.c caml/fail.h caml/misc.h caml/config.h caml/m.h \ - caml/s.h caml/mlvalues.h caml/stacks.h caml/memory.h caml/gc.h \ - caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h + caml/s.h caml/mlvalues.h caml/mlvalues.h caml/stacks.h caml/memory.h \ + caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h main_b.$(O): main.c caml/misc.h caml/config.h caml/m.h caml/s.h \ - caml/mlvalues.h caml/sys.h caml/osdeps.h caml/memory.h caml/gc.h \ - caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h + caml/mlvalues.h caml/misc.h caml/sys.h caml/osdeps.h caml/memory.h \ + caml/gc.h caml/mlvalues.h caml/major_gc.h caml/freelist.h \ + caml/minor_gc.h caml/address_class.h major_gc_b.$(O): major_gc.c caml/compact.h caml/config.h caml/m.h caml/s.h \ - caml/misc.h caml/mlvalues.h caml/custom.h caml/fail.h caml/finalise.h \ - caml/roots.h caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h \ - caml/minor_gc.h caml/address_class.h caml/gc_ctrl.h caml/signals.h \ - caml/weak.h + caml/misc.h caml/mlvalues.h caml/custom.h caml/config.h caml/fail.h \ + caml/finalise.h caml/roots.h caml/memory.h caml/gc.h caml/major_gc.h \ + caml/freelist.h caml/minor_gc.h caml/address_class.h caml/freelist.h \ + caml/gc.h caml/gc_ctrl.h caml/major_gc.h caml/misc.h caml/mlvalues.h \ + caml/roots.h caml/signals.h caml/weak.h md5_b.$(O): md5.c caml/alloc.h caml/misc.h caml/config.h caml/m.h caml/s.h \ - caml/mlvalues.h caml/fail.h caml/md5.h caml/io.h caml/memory.h \ - caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ - caml/address_class.h caml/reverse.h + caml/mlvalues.h caml/fail.h caml/md5.h caml/io.h caml/memory.h caml/gc.h \ + caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ + caml/mlvalues.h caml/io.h caml/reverse.h memory_b.$(O): memory.c caml/address_class.h caml/config.h caml/m.h caml/s.h \ - caml/misc.h caml/mlvalues.h caml/fail.h caml/freelist.h caml/gc.h \ - caml/gc_ctrl.h caml/major_gc.h caml/memory.h caml/minor_gc.h \ - caml/signals.h + caml/misc.h caml/mlvalues.h caml/config.h caml/fail.h caml/freelist.h \ + caml/gc.h caml/gc_ctrl.h caml/major_gc.h caml/freelist.h caml/memory.h \ + caml/gc.h caml/major_gc.h caml/minor_gc.h caml/address_class.h \ + caml/minor_gc.h caml/misc.h caml/mlvalues.h caml/signals.h meta_b.$(O): meta.c caml/alloc.h caml/misc.h caml/config.h caml/m.h caml/s.h \ - caml/mlvalues.h caml/fail.h caml/fix_code.h caml/interp.h \ - caml/intext.h caml/io.h caml/major_gc.h caml/freelist.h caml/memory.h \ - caml/gc.h caml/minor_gc.h caml/address_class.h caml/prims.h \ - caml/stacks.h caml/backtrace_prim.h caml/backtrace.h caml/exec.h + caml/mlvalues.h caml/config.h caml/fail.h caml/fix_code.h caml/interp.h \ + caml/intext.h caml/io.h caml/major_gc.h caml/freelist.h caml/memory.h \ + caml/gc.h caml/major_gc.h caml/minor_gc.h caml/address_class.h \ + caml/minor_gc.h caml/misc.h caml/mlvalues.h caml/prims.h caml/stacks.h \ + caml/memory.h caml/backtrace_prim.h caml/backtrace.h caml/exec.h minor_gc_b.$(O): minor_gc.c caml/custom.h caml/mlvalues.h caml/config.h \ - caml/m.h caml/s.h caml/misc.h caml/fail.h caml/finalise.h caml/roots.h \ - caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h \ - caml/minor_gc.h caml/address_class.h caml/gc_ctrl.h caml/signals.h \ - caml/weak.h -misc_b.$(O): misc.c caml/config.h caml/m.h caml/s.h caml/misc.h caml/memory.h \ - caml/gc.h caml/mlvalues.h caml/major_gc.h caml/freelist.h \ - caml/minor_gc.h caml/address_class.h caml/osdeps.h caml/version.h + caml/m.h caml/s.h caml/misc.h caml/config.h caml/fail.h caml/finalise.h \ + caml/roots.h caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h \ + caml/minor_gc.h caml/address_class.h caml/gc.h caml/gc_ctrl.h \ + caml/major_gc.h caml/memory.h caml/minor_gc.h caml/misc.h \ + caml/mlvalues.h caml/roots.h caml/signals.h caml/weak.h +misc_b.$(O): misc.c caml/config.h caml/m.h caml/s.h caml/misc.h caml/config.h \ + caml/memory.h caml/gc.h caml/mlvalues.h caml/misc.h caml/major_gc.h \ + caml/freelist.h caml/minor_gc.h caml/address_class.h caml/osdeps.h \ + caml/memory.h caml/version.h obj_b.$(O): obj.c caml/alloc.h caml/misc.h caml/config.h caml/m.h caml/s.h \ - caml/mlvalues.h caml/fail.h caml/gc.h caml/interp.h caml/major_gc.h \ - caml/freelist.h caml/memory.h caml/minor_gc.h caml/address_class.h \ - caml/prims.h caml/spacetime.h caml/io.h caml/stack.h + caml/mlvalues.h caml/fail.h caml/gc.h caml/interp.h caml/major_gc.h \ + caml/freelist.h caml/memory.h caml/gc.h caml/major_gc.h caml/minor_gc.h \ + caml/address_class.h caml/minor_gc.h caml/misc.h caml/mlvalues.h \ + caml/prims.h caml/spacetime.h caml/io.h caml/stack.h parsing_b.$(O): parsing.c caml/config.h caml/m.h caml/s.h caml/mlvalues.h \ - caml/misc.h caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h \ - caml/minor_gc.h caml/address_class.h caml/alloc.h + caml/config.h caml/misc.h caml/memory.h caml/gc.h caml/mlvalues.h \ + caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ + caml/alloc.h prims_b.$(O): prims.c caml/mlvalues.h caml/config.h caml/m.h caml/s.h \ - caml/misc.h caml/prims.h + caml/misc.h caml/prims.h printexc_b.$(O): printexc.c caml/backtrace.h caml/mlvalues.h caml/config.h \ - caml/m.h caml/s.h caml/misc.h caml/exec.h caml/callback.h \ - caml/debugger.h caml/fail.h caml/printexc.h caml/memory.h caml/gc.h \ - caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h + caml/m.h caml/s.h caml/misc.h caml/exec.h caml/callback.h \ + caml/debugger.h caml/fail.h caml/misc.h caml/mlvalues.h caml/printexc.h \ + caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h roots_byt_b.$(O): roots_byt.c caml/finalise.h caml/roots.h caml/misc.h \ - caml/config.h caml/m.h caml/s.h caml/memory.h caml/gc.h \ - caml/mlvalues.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ - caml/address_class.h caml/globroots.h caml/stacks.h + caml/config.h caml/m.h caml/s.h caml/memory.h caml/gc.h caml/mlvalues.h \ + caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ + caml/globroots.h caml/major_gc.h caml/memory.h caml/minor_gc.h \ + caml/misc.h caml/mlvalues.h caml/roots.h caml/stacks.h roots_nat_b.$(O): roots_nat.c caml/finalise.h caml/roots.h caml/misc.h \ - caml/config.h caml/m.h caml/s.h caml/memory.h caml/gc.h \ - caml/mlvalues.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ - caml/address_class.h caml/globroots.h caml/stack.h -signals_b.$(O): signals.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \ - caml/s.h caml/mlvalues.h caml/callback.h caml/fail.h caml/memory.h \ - caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ - caml/address_class.h caml/roots.h caml/signals.h \ - caml/signals_machdep.h caml/sys.h + caml/config.h caml/m.h caml/s.h caml/memory.h caml/gc.h caml/mlvalues.h \ + caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ + caml/globroots.h caml/memory.h caml/major_gc.h caml/minor_gc.h \ + caml/misc.h caml/mlvalues.h caml/stack.h caml/roots.h signals_byt_b.$(O): signals_byt.c caml/config.h caml/m.h caml/s.h \ - caml/memory.h caml/gc.h caml/mlvalues.h caml/misc.h caml/major_gc.h \ - caml/freelist.h caml/minor_gc.h caml/address_class.h caml/osdeps.h \ - caml/signals.h caml/signals_machdep.h + caml/memory.h caml/config.h caml/gc.h caml/mlvalues.h caml/misc.h \ + caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ + caml/osdeps.h caml/memory.h caml/signals.h caml/signals_machdep.h +signals_b.$(O): signals.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \ + caml/s.h caml/mlvalues.h caml/callback.h caml/config.h caml/fail.h \ + caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/misc.h caml/mlvalues.h caml/roots.h \ + caml/memory.h caml/signals.h caml/signals_machdep.h caml/sys.h signals_nat_b.$(O): signals_nat.c caml/fail.h caml/misc.h caml/config.h \ - caml/m.h caml/s.h caml/mlvalues.h caml/memory.h caml/gc.h \ - caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ - caml/osdeps.h caml/signals.h caml/signals_machdep.h signals_osdep.h \ - caml/stack.h caml/spacetime.h caml/io.h + caml/m.h caml/s.h caml/mlvalues.h caml/memory.h caml/gc.h \ + caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ + caml/osdeps.h caml/memory.h caml/signals.h caml/signals_machdep.h \ + signals_osdep.h caml/stack.h caml/spacetime.h caml/io.h caml/stack.h spacetime_byt_b.$(O): spacetime_byt.c caml/fail.h caml/misc.h caml/config.h \ - caml/m.h caml/s.h caml/mlvalues.h + caml/m.h caml/s.h caml/mlvalues.h caml/mlvalues.h spacetime_nat_b.$(O): spacetime_nat.c caml/config.h caml/m.h caml/s.h \ - caml/alloc.h caml/misc.h caml/mlvalues.h caml/backtrace_prim.h \ - caml/backtrace.h caml/exec.h caml/fail.h caml/gc.h caml/intext.h \ - caml/io.h caml/major_gc.h caml/freelist.h caml/memory.h \ - caml/minor_gc.h caml/address_class.h caml/osdeps.h caml/roots.h \ - caml/signals.h caml/stack.h caml/sys.h caml/spacetime.h + caml/alloc.h caml/misc.h caml/config.h caml/mlvalues.h \ + caml/backtrace_prim.h caml/backtrace.h caml/exec.h caml/fail.h caml/gc.h \ + caml/intext.h caml/io.h caml/major_gc.h caml/freelist.h caml/memory.h \ + caml/gc.h caml/major_gc.h caml/minor_gc.h caml/address_class.h \ + caml/minor_gc.h caml/misc.h caml/mlvalues.h caml/osdeps.h caml/memory.h \ + caml/roots.h caml/signals.h caml/stack.h caml/sys.h caml/spacetime.h \ + caml/stack.h spacetime_snapshot_b.$(O): spacetime_snapshot.c caml/alloc.h caml/misc.h \ - caml/config.h caml/m.h caml/s.h caml/mlvalues.h caml/backtrace_prim.h \ - caml/backtrace.h caml/exec.h caml/custom.h caml/fail.h caml/gc.h \ - caml/gc_ctrl.h caml/intext.h caml/io.h caml/major_gc.h caml/freelist.h \ - caml/memory.h caml/minor_gc.h caml/address_class.h caml/roots.h \ - caml/signals.h caml/stack.h caml/sys.h caml/spacetime.h + caml/config.h caml/m.h caml/s.h caml/mlvalues.h caml/backtrace_prim.h \ + caml/backtrace.h caml/exec.h caml/config.h caml/custom.h caml/fail.h \ + caml/gc.h caml/gc_ctrl.h caml/intext.h caml/io.h caml/major_gc.h \ + caml/freelist.h caml/memory.h caml/gc.h caml/major_gc.h caml/minor_gc.h \ + caml/address_class.h caml/minor_gc.h caml/misc.h caml/mlvalues.h \ + caml/roots.h caml/memory.h caml/signals.h caml/stack.h caml/sys.h \ + caml/spacetime.h caml/stack.h stacks_b.$(O): stacks.c caml/config.h caml/m.h caml/s.h caml/fail.h \ - caml/misc.h caml/mlvalues.h caml/stacks.h caml/memory.h caml/gc.h \ - caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h + caml/misc.h caml/config.h caml/mlvalues.h caml/misc.h caml/mlvalues.h \ + caml/stacks.h caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h \ + caml/minor_gc.h caml/address_class.h startup_aux_b.$(O): startup_aux.c caml/backtrace.h caml/mlvalues.h \ - caml/config.h caml/m.h caml/s.h caml/misc.h caml/exec.h caml/memory.h \ - caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ - caml/address_class.h caml/callback.h caml/dynlink.h caml/osdeps.h \ - caml/startup_aux.h + caml/config.h caml/m.h caml/s.h caml/misc.h caml/exec.h caml/memory.h \ + caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/callback.h caml/major_gc.h caml/dynlink.h \ + caml/osdeps.h caml/memory.h caml/startup_aux.h startup_byt_b.$(O): startup_byt.c caml/config.h caml/m.h caml/s.h caml/alloc.h \ - caml/misc.h caml/mlvalues.h caml/backtrace.h caml/exec.h \ - caml/callback.h caml/custom.h caml/debugger.h caml/dynlink.h \ - caml/fail.h caml/fix_code.h caml/freelist.h caml/gc_ctrl.h \ - caml/instrtrace.h caml/interp.h caml/intext.h caml/io.h caml/memory.h \ - caml/gc.h caml/major_gc.h caml/minor_gc.h caml/address_class.h \ - caml/osdeps.h caml/prims.h caml/printexc.h caml/reverse.h \ - caml/signals.h caml/stacks.h caml/sys.h caml/startup.h \ - caml/startup_aux.h caml/version.h + caml/misc.h caml/config.h caml/mlvalues.h caml/backtrace.h caml/exec.h \ + caml/callback.h caml/custom.h caml/debugger.h caml/dynlink.h caml/exec.h \ + caml/fail.h caml/fix_code.h caml/freelist.h caml/gc_ctrl.h \ + caml/instrtrace.h caml/interp.h caml/intext.h caml/io.h caml/io.h \ + caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/minor_gc.h caml/misc.h caml/mlvalues.h \ + caml/osdeps.h caml/memory.h caml/prims.h caml/printexc.h caml/reverse.h \ + caml/signals.h caml/stacks.h caml/sys.h caml/startup.h \ + caml/startup_aux.h caml/version.h startup_nat_b.$(O): startup_nat.c caml/callback.h caml/mlvalues.h \ - caml/config.h caml/m.h caml/s.h caml/misc.h caml/backtrace.h \ - caml/exec.h caml/custom.h caml/debugger.h caml/fail.h caml/freelist.h \ - caml/gc.h caml/gc_ctrl.h caml/intext.h caml/io.h caml/memory.h \ - caml/major_gc.h caml/minor_gc.h caml/address_class.h caml/osdeps.h \ - caml/printexc.h caml/stack.h caml/startup_aux.h caml/sys.h + caml/config.h caml/m.h caml/s.h caml/misc.h caml/backtrace.h caml/exec.h \ + caml/custom.h caml/debugger.h caml/fail.h caml/freelist.h caml/gc.h \ + caml/gc_ctrl.h caml/intext.h caml/io.h caml/memory.h caml/gc.h \ + caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ + caml/misc.h caml/mlvalues.h caml/osdeps.h caml/memory.h caml/printexc.h \ + caml/stack.h caml/startup_aux.h caml/sys.h str_b.$(O): str.c caml/alloc.h caml/misc.h caml/config.h caml/m.h caml/s.h \ - caml/mlvalues.h caml/fail.h caml/memory.h caml/gc.h caml/major_gc.h \ - caml/freelist.h caml/minor_gc.h caml/address_class.h + caml/mlvalues.h caml/fail.h caml/memory.h caml/gc.h caml/major_gc.h \ + caml/freelist.h caml/minor_gc.h caml/address_class.h caml/mlvalues.h \ + caml/misc.h sys_b.$(O): sys.c caml/config.h caml/m.h caml/s.h caml/alloc.h caml/misc.h \ - caml/mlvalues.h caml/debugger.h caml/fail.h caml/gc_ctrl.h caml/io.h \ - caml/osdeps.h caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h \ - caml/minor_gc.h caml/address_class.h caml/signals.h caml/stacks.h \ - caml/sys.h caml/version.h caml/callback.h caml/startup_aux.h + caml/config.h caml/mlvalues.h caml/debugger.h caml/fail.h caml/gc_ctrl.h \ + caml/io.h caml/misc.h caml/mlvalues.h caml/osdeps.h caml/memory.h \ + caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/signals.h caml/stacks.h caml/sys.h \ + caml/version.h caml/callback.h caml/startup_aux.h unix_b.$(O): unix.c caml/config.h caml/m.h caml/s.h caml/fail.h caml/misc.h \ - caml/mlvalues.h caml/memory.h caml/gc.h caml/major_gc.h \ - caml/freelist.h caml/minor_gc.h caml/address_class.h caml/osdeps.h \ - caml/signals.h caml/sys.h caml/io.h caml/alloc.h + caml/config.h caml/mlvalues.h caml/memory.h caml/gc.h caml/major_gc.h \ + caml/freelist.h caml/minor_gc.h caml/address_class.h caml/misc.h \ + caml/osdeps.h caml/memory.h caml/signals.h caml/sys.h caml/io.h \ + caml/alloc.h weak_b.$(O): weak.c caml/alloc.h caml/misc.h caml/config.h caml/m.h caml/s.h \ - caml/mlvalues.h caml/fail.h caml/major_gc.h caml/freelist.h \ - caml/memory.h caml/gc.h caml/minor_gc.h caml/address_class.h \ - caml/weak.h caml/signals.h -afl_bd.$(O): afl.c caml/config.h caml/m.h caml/s.h caml/misc.h caml/mlvalues.h \ - caml/osdeps.h caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h \ - caml/minor_gc.h caml/address_class.h + caml/mlvalues.h caml/fail.h caml/major_gc.h caml/freelist.h \ + caml/memory.h caml/gc.h caml/major_gc.h caml/minor_gc.h \ + caml/address_class.h caml/mlvalues.h caml/weak.h caml/minor_gc.h \ + caml/signals.h +win32_b.$(O): win32.c caml/alloc.h caml/misc.h caml/config.h caml/m.h caml/s.h \ + caml/mlvalues.h caml/address_class.h caml/fail.h caml/io.h caml/memory.h \ + caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/misc.h caml/osdeps.h caml/memory.h \ + caml/signals.h caml/sys.h caml/config.h +afl_bd.$(O): afl.c caml/config.h caml/m.h caml/s.h caml/misc.h caml/config.h \ + caml/mlvalues.h caml/misc.h caml/osdeps.h caml/memory.h caml/gc.h \ + caml/mlvalues.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h alloc_bd.$(O): alloc.c caml/alloc.h caml/misc.h caml/config.h caml/m.h caml/s.h \ - caml/mlvalues.h caml/custom.h caml/major_gc.h caml/freelist.h \ - caml/memory.h caml/gc.h caml/minor_gc.h caml/address_class.h \ - caml/stacks.h + caml/mlvalues.h caml/custom.h caml/major_gc.h caml/freelist.h \ + caml/memory.h caml/gc.h caml/major_gc.h caml/minor_gc.h \ + caml/address_class.h caml/mlvalues.h caml/stacks.h caml/memory.h array_bd.$(O): array.c caml/alloc.h caml/misc.h caml/config.h caml/m.h caml/s.h \ - caml/mlvalues.h caml/fail.h caml/memory.h caml/gc.h caml/major_gc.h \ - caml/freelist.h caml/minor_gc.h caml/address_class.h caml/signals.h \ - caml/spacetime.h caml/io.h caml/stack.h -backtrace_bd.$(O): backtrace.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \ - caml/s.h caml/mlvalues.h caml/memory.h caml/gc.h caml/major_gc.h \ - caml/freelist.h caml/minor_gc.h caml/address_class.h caml/backtrace.h \ - caml/exec.h caml/backtrace_prim.h caml/fail.h + caml/mlvalues.h caml/fail.h caml/memory.h caml/gc.h caml/major_gc.h \ + caml/freelist.h caml/minor_gc.h caml/address_class.h caml/misc.h \ + caml/mlvalues.h caml/signals.h caml/spacetime.h caml/io.h caml/stack.h backtrace_byt_bd.$(O): backtrace_byt.c caml/config.h caml/m.h caml/s.h \ - caml/mlvalues.h caml/misc.h caml/alloc.h caml/custom.h caml/io.h \ - caml/instruct.h caml/intext.h caml/exec.h caml/fix_code.h \ - caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h \ - caml/minor_gc.h caml/address_class.h caml/startup.h caml/stacks.h \ - caml/sys.h caml/backtrace.h caml/fail.h caml/backtrace_prim.h + caml/mlvalues.h caml/config.h caml/misc.h caml/alloc.h caml/mlvalues.h \ + caml/custom.h caml/io.h caml/instruct.h caml/intext.h caml/io.h \ + caml/exec.h caml/fix_code.h caml/memory.h caml/gc.h caml/major_gc.h \ + caml/freelist.h caml/minor_gc.h caml/address_class.h caml/startup.h \ + caml/exec.h caml/stacks.h caml/memory.h caml/sys.h caml/backtrace.h \ + caml/fail.h caml/backtrace_prim.h caml/backtrace.h +backtrace_bd.$(O): backtrace.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \ + caml/s.h caml/mlvalues.h caml/memory.h caml/gc.h caml/major_gc.h \ + caml/freelist.h caml/minor_gc.h caml/address_class.h caml/backtrace.h \ + caml/exec.h caml/backtrace_prim.h caml/backtrace.h caml/fail.h backtrace_nat_bd.$(O): backtrace_nat.c caml/alloc.h caml/misc.h caml/config.h \ - caml/m.h caml/s.h caml/mlvalues.h caml/backtrace.h caml/exec.h \ - caml/backtrace_prim.h caml/memory.h caml/gc.h caml/major_gc.h \ - caml/freelist.h caml/minor_gc.h caml/address_class.h caml/stack.h + caml/m.h caml/s.h caml/mlvalues.h caml/backtrace.h caml/exec.h \ + caml/backtrace_prim.h caml/backtrace.h caml/memory.h caml/gc.h \ + caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ + caml/misc.h caml/mlvalues.h caml/stack.h bigarray_bd.$(O): bigarray.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \ - caml/s.h caml/mlvalues.h caml/bigarray.h caml/custom.h caml/fail.h \ - caml/intext.h caml/io.h caml/hash.h caml/memory.h caml/gc.h \ - caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ - caml/signals.h + caml/s.h caml/mlvalues.h caml/bigarray.h caml/custom.h caml/fail.h \ + caml/intext.h caml/io.h caml/hash.h caml/memory.h caml/gc.h \ + caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ + caml/mlvalues.h caml/signals.h callback_bd.$(O): callback.c caml/callback.h caml/mlvalues.h caml/config.h \ - caml/m.h caml/s.h caml/misc.h caml/fail.h caml/memory.h caml/gc.h \ - caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ - caml/interp.h caml/instruct.h caml/fix_code.h caml/stacks.h + caml/m.h caml/s.h caml/misc.h caml/fail.h caml/memory.h caml/gc.h \ + caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ + caml/mlvalues.h caml/interp.h caml/instruct.h caml/fix_code.h \ + caml/stacks.h caml/memory.h clambda_checks_bd.$(O): clambda_checks.c caml/mlvalues.h caml/config.h caml/m.h \ - caml/s.h caml/misc.h + caml/s.h caml/misc.h compact_bd.$(O): compact.c caml/address_class.h caml/config.h caml/m.h caml/s.h \ - caml/misc.h caml/mlvalues.h caml/finalise.h caml/roots.h caml/memory.h \ - caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ - caml/gc_ctrl.h caml/weak.h caml/compact.h + caml/misc.h caml/mlvalues.h caml/config.h caml/finalise.h caml/roots.h \ + caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/freelist.h caml/gc.h caml/gc_ctrl.h \ + caml/major_gc.h caml/memory.h caml/mlvalues.h caml/roots.h caml/weak.h \ + caml/compact.h compare_bd.$(O): compare.c caml/custom.h caml/mlvalues.h caml/config.h caml/m.h \ - caml/s.h caml/misc.h caml/fail.h caml/memory.h caml/gc.h \ - caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h + caml/s.h caml/misc.h caml/fail.h caml/memory.h caml/gc.h caml/major_gc.h \ + caml/freelist.h caml/minor_gc.h caml/address_class.h caml/misc.h \ + caml/mlvalues.h custom_bd.$(O): custom.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \ - caml/s.h caml/mlvalues.h caml/custom.h caml/fail.h caml/gc_ctrl.h \ - caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h \ - caml/minor_gc.h caml/address_class.h caml/signals.h + caml/s.h caml/mlvalues.h caml/custom.h caml/fail.h caml/gc_ctrl.h \ + caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/mlvalues.h caml/signals.h debugger_bd.$(O): debugger.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \ - caml/s.h caml/mlvalues.h caml/debugger.h caml/osdeps.h caml/memory.h \ - caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ - caml/address_class.h caml/fail.h caml/fix_code.h caml/instruct.h \ - caml/intext.h caml/io.h caml/stacks.h caml/sys.h + caml/s.h caml/mlvalues.h caml/config.h caml/debugger.h caml/misc.h \ + caml/osdeps.h caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h \ + caml/minor_gc.h caml/address_class.h caml/fail.h caml/fix_code.h \ + caml/instruct.h caml/intext.h caml/io.h caml/io.h caml/mlvalues.h \ + caml/stacks.h caml/sys.h dynlink_bd.$(O): dynlink.c caml/config.h caml/m.h caml/s.h caml/alloc.h \ - caml/misc.h caml/mlvalues.h caml/dynlink.h caml/fail.h caml/memory.h \ - caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ - caml/address_class.h caml/osdeps.h caml/prims.h caml/signals.h + caml/misc.h caml/config.h caml/mlvalues.h caml/dynlink.h caml/fail.h \ + caml/mlvalues.h caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h \ + caml/minor_gc.h caml/address_class.h caml/misc.h caml/osdeps.h \ + caml/memory.h caml/prims.h caml/signals.h dynlink_nat_bd.$(O): dynlink_nat.c caml/misc.h caml/config.h caml/m.h caml/s.h \ - caml/mlvalues.h caml/memory.h caml/gc.h caml/major_gc.h \ - caml/freelist.h caml/minor_gc.h caml/address_class.h caml/stack.h \ - caml/callback.h caml/alloc.h caml/intext.h caml/io.h caml/osdeps.h \ - caml/fail.h caml/signals.h caml/hooks.h + caml/mlvalues.h caml/misc.h caml/memory.h caml/gc.h caml/mlvalues.h \ + caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ + caml/stack.h caml/callback.h caml/alloc.h caml/intext.h caml/io.h \ + caml/osdeps.h caml/memory.h caml/fail.h caml/signals.h caml/hooks.h extern_bd.$(O): extern.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \ - caml/s.h caml/mlvalues.h caml/custom.h caml/fail.h caml/gc.h \ - caml/intext.h caml/io.h caml/md5.h caml/memory.h caml/major_gc.h \ - caml/freelist.h caml/minor_gc.h caml/address_class.h caml/reverse.h + caml/s.h caml/mlvalues.h caml/config.h caml/custom.h caml/fail.h \ + caml/gc.h caml/intext.h caml/io.h caml/io.h caml/md5.h caml/memory.h \ + caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/misc.h caml/mlvalues.h caml/reverse.h fail_byt_bd.$(O): fail_byt.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \ - caml/s.h caml/mlvalues.h caml/fail.h caml/io.h caml/gc.h caml/memory.h \ - caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ - caml/printexc.h caml/signals.h caml/stacks.h + caml/s.h caml/mlvalues.h caml/fail.h caml/io.h caml/gc.h caml/memory.h \ + caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/misc.h caml/mlvalues.h caml/printexc.h \ + caml/signals.h caml/stacks.h caml/memory.h fail_nat_bd.$(O): fail_nat.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \ - caml/s.h caml/mlvalues.h caml/fail.h caml/io.h caml/gc.h caml/memory.h \ - caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ - caml/printexc.h caml/signals.h caml/stack.h caml/roots.h \ - caml/callback.h + caml/s.h caml/mlvalues.h caml/fail.h caml/io.h caml/gc.h caml/memory.h \ + caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/mlvalues.h caml/printexc.h caml/signals.h \ + caml/stack.h caml/roots.h caml/memory.h caml/callback.h finalise_bd.$(O): finalise.c caml/callback.h caml/mlvalues.h caml/config.h \ - caml/m.h caml/s.h caml/misc.h caml/compact.h caml/fail.h \ - caml/finalise.h caml/roots.h caml/memory.h caml/gc.h caml/major_gc.h \ - caml/freelist.h caml/minor_gc.h caml/address_class.h caml/signals.h + caml/m.h caml/s.h caml/misc.h caml/compact.h caml/fail.h caml/finalise.h \ + caml/roots.h caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h \ + caml/minor_gc.h caml/address_class.h caml/minor_gc.h caml/mlvalues.h \ + caml/roots.h caml/signals.h fix_code_bd.$(O): fix_code.c caml/config.h caml/m.h caml/s.h caml/debugger.h \ - caml/misc.h caml/mlvalues.h caml/fix_code.h caml/instruct.h \ - caml/intext.h caml/io.h caml/md5.h caml/memory.h caml/gc.h \ - caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ - caml/reverse.h + caml/misc.h caml/config.h caml/mlvalues.h caml/fix_code.h \ + caml/instruct.h caml/intext.h caml/io.h caml/md5.h caml/memory.h \ + caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/misc.h caml/mlvalues.h caml/reverse.h floats_bd.$(O): floats.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \ - caml/s.h caml/mlvalues.h caml/fail.h caml/memory.h caml/gc.h \ - caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ - caml/reverse.h caml/stacks.h + caml/s.h caml/mlvalues.h caml/fail.h caml/memory.h caml/gc.h \ + caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ + caml/mlvalues.h caml/misc.h caml/reverse.h caml/stacks.h caml/memory.h freelist_bd.$(O): freelist.c caml/config.h caml/m.h caml/s.h caml/freelist.h \ - caml/misc.h caml/mlvalues.h caml/gc.h caml/gc_ctrl.h caml/memory.h \ - caml/major_gc.h caml/minor_gc.h caml/address_class.h + caml/misc.h caml/config.h caml/mlvalues.h caml/gc.h caml/gc_ctrl.h \ + caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/major_gc.h caml/misc.h caml/mlvalues.h gc_ctrl_bd.$(O): gc_ctrl.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \ - caml/s.h caml/mlvalues.h caml/backtrace.h caml/exec.h caml/compact.h \ - caml/custom.h caml/fail.h caml/finalise.h caml/roots.h caml/memory.h \ - caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ - caml/address_class.h caml/gc_ctrl.h caml/signals.h caml/stacks.h \ - caml/startup_aux.h + caml/s.h caml/mlvalues.h caml/backtrace.h caml/exec.h caml/compact.h \ + caml/custom.h caml/fail.h caml/finalise.h caml/roots.h caml/memory.h \ + caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/freelist.h caml/gc.h caml/gc_ctrl.h \ + caml/major_gc.h caml/memory.h caml/minor_gc.h caml/misc.h \ + caml/mlvalues.h caml/signals.h caml/stacks.h caml/startup_aux.h globroots_bd.$(O): globroots.c caml/memory.h caml/config.h caml/m.h caml/s.h \ - caml/gc.h caml/mlvalues.h caml/misc.h caml/major_gc.h caml/freelist.h \ - caml/minor_gc.h caml/address_class.h caml/roots.h caml/globroots.h + caml/gc.h caml/mlvalues.h caml/misc.h caml/major_gc.h caml/freelist.h \ + caml/minor_gc.h caml/address_class.h caml/misc.h caml/mlvalues.h \ + caml/roots.h caml/memory.h caml/globroots.h caml/roots.h hash_bd.$(O): hash.c caml/mlvalues.h caml/config.h caml/m.h caml/s.h \ - caml/misc.h caml/custom.h caml/memory.h caml/gc.h caml/major_gc.h \ - caml/freelist.h caml/minor_gc.h caml/address_class.h caml/hash.h + caml/misc.h caml/custom.h caml/mlvalues.h caml/memory.h caml/gc.h \ + caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ + caml/hash.h instrtrace_bd.$(O): instrtrace.c caml/instrtrace.h caml/mlvalues.h \ - caml/config.h caml/m.h caml/s.h caml/misc.h caml/instruct.h \ - caml/opnames.h caml/prims.h caml/stacks.h caml/memory.h caml/gc.h \ - caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ - caml/startup_aux.h + caml/config.h caml/m.h caml/s.h caml/misc.h caml/instruct.h caml/misc.h \ + caml/mlvalues.h caml/opnames.h caml/prims.h caml/stacks.h caml/memory.h \ + caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/startup_aux.h intern_bd.$(O): intern.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \ - caml/s.h caml/mlvalues.h caml/callback.h caml/custom.h caml/fail.h \ - caml/gc.h caml/intext.h caml/io.h caml/md5.h caml/memory.h \ - caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ - caml/reverse.h + caml/s.h caml/mlvalues.h caml/callback.h caml/config.h caml/custom.h \ + caml/fail.h caml/gc.h caml/intext.h caml/io.h caml/io.h caml/md5.h \ + caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/mlvalues.h caml/misc.h caml/reverse.h interp_bd.$(O): interp.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \ - caml/s.h caml/mlvalues.h caml/backtrace.h caml/exec.h caml/callback.h \ - caml/debugger.h caml/fail.h caml/fix_code.h caml/instrtrace.h \ - caml/instruct.h caml/interp.h caml/major_gc.h caml/freelist.h \ - caml/memory.h caml/gc.h caml/minor_gc.h caml/address_class.h \ - caml/prims.h caml/signals.h caml/stacks.h caml/startup_aux.h + caml/s.h caml/mlvalues.h caml/backtrace.h caml/exec.h caml/callback.h \ + caml/debugger.h caml/fail.h caml/fix_code.h caml/instrtrace.h \ + caml/instruct.h caml/interp.h caml/major_gc.h caml/freelist.h \ + caml/memory.h caml/gc.h caml/major_gc.h caml/minor_gc.h \ + caml/address_class.h caml/misc.h caml/mlvalues.h caml/prims.h \ + caml/signals.h caml/stacks.h caml/memory.h caml/startup_aux.h ints_bd.$(O): ints.c caml/alloc.h caml/misc.h caml/config.h caml/m.h caml/s.h \ - caml/mlvalues.h caml/custom.h caml/fail.h caml/intext.h caml/io.h \ - caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h \ - caml/minor_gc.h caml/address_class.h + caml/mlvalues.h caml/custom.h caml/fail.h caml/intext.h caml/io.h \ + caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/misc.h caml/mlvalues.h io_bd.$(O): io.c caml/config.h caml/m.h caml/s.h caml/alloc.h caml/misc.h \ - caml/mlvalues.h caml/custom.h caml/fail.h caml/io.h caml/memory.h \ - caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ - caml/address_class.h caml/osdeps.h caml/signals.h caml/sys.h + caml/config.h caml/mlvalues.h caml/custom.h caml/fail.h caml/io.h \ + caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/misc.h caml/mlvalues.h caml/osdeps.h \ + caml/memory.h caml/signals.h caml/sys.h lexing_bd.$(O): lexing.c caml/fail.h caml/misc.h caml/config.h caml/m.h \ - caml/s.h caml/mlvalues.h caml/stacks.h caml/memory.h caml/gc.h \ - caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h + caml/s.h caml/mlvalues.h caml/mlvalues.h caml/stacks.h caml/memory.h \ + caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h main_bd.$(O): main.c caml/misc.h caml/config.h caml/m.h caml/s.h \ - caml/mlvalues.h caml/sys.h caml/osdeps.h caml/memory.h caml/gc.h \ - caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h + caml/mlvalues.h caml/misc.h caml/sys.h caml/osdeps.h caml/memory.h \ + caml/gc.h caml/mlvalues.h caml/major_gc.h caml/freelist.h \ + caml/minor_gc.h caml/address_class.h major_gc_bd.$(O): major_gc.c caml/compact.h caml/config.h caml/m.h caml/s.h \ - caml/misc.h caml/mlvalues.h caml/custom.h caml/fail.h caml/finalise.h \ - caml/roots.h caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h \ - caml/minor_gc.h caml/address_class.h caml/gc_ctrl.h caml/signals.h \ - caml/weak.h + caml/misc.h caml/mlvalues.h caml/custom.h caml/config.h caml/fail.h \ + caml/finalise.h caml/roots.h caml/memory.h caml/gc.h caml/major_gc.h \ + caml/freelist.h caml/minor_gc.h caml/address_class.h caml/freelist.h \ + caml/gc.h caml/gc_ctrl.h caml/major_gc.h caml/misc.h caml/mlvalues.h \ + caml/roots.h caml/signals.h caml/weak.h md5_bd.$(O): md5.c caml/alloc.h caml/misc.h caml/config.h caml/m.h caml/s.h \ - caml/mlvalues.h caml/fail.h caml/md5.h caml/io.h caml/memory.h \ - caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ - caml/address_class.h caml/reverse.h + caml/mlvalues.h caml/fail.h caml/md5.h caml/io.h caml/memory.h caml/gc.h \ + caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ + caml/mlvalues.h caml/io.h caml/reverse.h memory_bd.$(O): memory.c caml/address_class.h caml/config.h caml/m.h caml/s.h \ - caml/misc.h caml/mlvalues.h caml/fail.h caml/freelist.h caml/gc.h \ - caml/gc_ctrl.h caml/major_gc.h caml/memory.h caml/minor_gc.h \ - caml/signals.h + caml/misc.h caml/mlvalues.h caml/config.h caml/fail.h caml/freelist.h \ + caml/gc.h caml/gc_ctrl.h caml/major_gc.h caml/freelist.h caml/memory.h \ + caml/gc.h caml/major_gc.h caml/minor_gc.h caml/address_class.h \ + caml/minor_gc.h caml/misc.h caml/mlvalues.h caml/signals.h meta_bd.$(O): meta.c caml/alloc.h caml/misc.h caml/config.h caml/m.h caml/s.h \ - caml/mlvalues.h caml/fail.h caml/fix_code.h caml/interp.h \ - caml/intext.h caml/io.h caml/major_gc.h caml/freelist.h caml/memory.h \ - caml/gc.h caml/minor_gc.h caml/address_class.h caml/prims.h \ - caml/stacks.h caml/backtrace_prim.h caml/backtrace.h caml/exec.h + caml/mlvalues.h caml/config.h caml/fail.h caml/fix_code.h caml/interp.h \ + caml/intext.h caml/io.h caml/major_gc.h caml/freelist.h caml/memory.h \ + caml/gc.h caml/major_gc.h caml/minor_gc.h caml/address_class.h \ + caml/minor_gc.h caml/misc.h caml/mlvalues.h caml/prims.h caml/stacks.h \ + caml/memory.h caml/backtrace_prim.h caml/backtrace.h caml/exec.h minor_gc_bd.$(O): minor_gc.c caml/custom.h caml/mlvalues.h caml/config.h \ - caml/m.h caml/s.h caml/misc.h caml/fail.h caml/finalise.h caml/roots.h \ - caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h \ - caml/minor_gc.h caml/address_class.h caml/gc_ctrl.h caml/signals.h \ - caml/weak.h -misc_bd.$(O): misc.c caml/config.h caml/m.h caml/s.h caml/misc.h caml/memory.h \ - caml/gc.h caml/mlvalues.h caml/major_gc.h caml/freelist.h \ - caml/minor_gc.h caml/address_class.h caml/osdeps.h caml/version.h + caml/m.h caml/s.h caml/misc.h caml/config.h caml/fail.h caml/finalise.h \ + caml/roots.h caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h \ + caml/minor_gc.h caml/address_class.h caml/gc.h caml/gc_ctrl.h \ + caml/major_gc.h caml/memory.h caml/minor_gc.h caml/misc.h \ + caml/mlvalues.h caml/roots.h caml/signals.h caml/weak.h +misc_bd.$(O): misc.c caml/config.h caml/m.h caml/s.h caml/misc.h caml/config.h \ + caml/memory.h caml/gc.h caml/mlvalues.h caml/misc.h caml/major_gc.h \ + caml/freelist.h caml/minor_gc.h caml/address_class.h caml/osdeps.h \ + caml/memory.h caml/version.h obj_bd.$(O): obj.c caml/alloc.h caml/misc.h caml/config.h caml/m.h caml/s.h \ - caml/mlvalues.h caml/fail.h caml/gc.h caml/interp.h caml/major_gc.h \ - caml/freelist.h caml/memory.h caml/minor_gc.h caml/address_class.h \ - caml/prims.h caml/spacetime.h caml/io.h caml/stack.h + caml/mlvalues.h caml/fail.h caml/gc.h caml/interp.h caml/major_gc.h \ + caml/freelist.h caml/memory.h caml/gc.h caml/major_gc.h caml/minor_gc.h \ + caml/address_class.h caml/minor_gc.h caml/misc.h caml/mlvalues.h \ + caml/prims.h caml/spacetime.h caml/io.h caml/stack.h parsing_bd.$(O): parsing.c caml/config.h caml/m.h caml/s.h caml/mlvalues.h \ - caml/misc.h caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h \ - caml/minor_gc.h caml/address_class.h caml/alloc.h + caml/config.h caml/misc.h caml/memory.h caml/gc.h caml/mlvalues.h \ + caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ + caml/alloc.h prims_bd.$(O): prims.c caml/mlvalues.h caml/config.h caml/m.h caml/s.h \ - caml/misc.h caml/prims.h + caml/misc.h caml/prims.h printexc_bd.$(O): printexc.c caml/backtrace.h caml/mlvalues.h caml/config.h \ - caml/m.h caml/s.h caml/misc.h caml/exec.h caml/callback.h \ - caml/debugger.h caml/fail.h caml/printexc.h caml/memory.h caml/gc.h \ - caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h + caml/m.h caml/s.h caml/misc.h caml/exec.h caml/callback.h \ + caml/debugger.h caml/fail.h caml/misc.h caml/mlvalues.h caml/printexc.h \ + caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h roots_byt_bd.$(O): roots_byt.c caml/finalise.h caml/roots.h caml/misc.h \ - caml/config.h caml/m.h caml/s.h caml/memory.h caml/gc.h \ - caml/mlvalues.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ - caml/address_class.h caml/globroots.h caml/stacks.h + caml/config.h caml/m.h caml/s.h caml/memory.h caml/gc.h caml/mlvalues.h \ + caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ + caml/globroots.h caml/major_gc.h caml/memory.h caml/minor_gc.h \ + caml/misc.h caml/mlvalues.h caml/roots.h caml/stacks.h roots_nat_bd.$(O): roots_nat.c caml/finalise.h caml/roots.h caml/misc.h \ - caml/config.h caml/m.h caml/s.h caml/memory.h caml/gc.h \ - caml/mlvalues.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ - caml/address_class.h caml/globroots.h caml/stack.h -signals_bd.$(O): signals.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \ - caml/s.h caml/mlvalues.h caml/callback.h caml/fail.h caml/memory.h \ - caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ - caml/address_class.h caml/roots.h caml/signals.h \ - caml/signals_machdep.h caml/sys.h + caml/config.h caml/m.h caml/s.h caml/memory.h caml/gc.h caml/mlvalues.h \ + caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ + caml/globroots.h caml/memory.h caml/major_gc.h caml/minor_gc.h \ + caml/misc.h caml/mlvalues.h caml/stack.h caml/roots.h signals_byt_bd.$(O): signals_byt.c caml/config.h caml/m.h caml/s.h \ - caml/memory.h caml/gc.h caml/mlvalues.h caml/misc.h caml/major_gc.h \ - caml/freelist.h caml/minor_gc.h caml/address_class.h caml/osdeps.h \ - caml/signals.h caml/signals_machdep.h + caml/memory.h caml/config.h caml/gc.h caml/mlvalues.h caml/misc.h \ + caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ + caml/osdeps.h caml/memory.h caml/signals.h caml/signals_machdep.h +signals_bd.$(O): signals.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \ + caml/s.h caml/mlvalues.h caml/callback.h caml/config.h caml/fail.h \ + caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/misc.h caml/mlvalues.h caml/roots.h \ + caml/memory.h caml/signals.h caml/signals_machdep.h caml/sys.h signals_nat_bd.$(O): signals_nat.c caml/fail.h caml/misc.h caml/config.h \ - caml/m.h caml/s.h caml/mlvalues.h caml/memory.h caml/gc.h \ - caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ - caml/osdeps.h caml/signals.h caml/signals_machdep.h signals_osdep.h \ - caml/stack.h caml/spacetime.h caml/io.h + caml/m.h caml/s.h caml/mlvalues.h caml/memory.h caml/gc.h \ + caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ + caml/osdeps.h caml/memory.h caml/signals.h caml/signals_machdep.h \ + signals_osdep.h caml/stack.h caml/spacetime.h caml/io.h caml/stack.h spacetime_byt_bd.$(O): spacetime_byt.c caml/fail.h caml/misc.h caml/config.h \ - caml/m.h caml/s.h caml/mlvalues.h + caml/m.h caml/s.h caml/mlvalues.h caml/mlvalues.h spacetime_nat_bd.$(O): spacetime_nat.c caml/config.h caml/m.h caml/s.h \ - caml/alloc.h caml/misc.h caml/mlvalues.h caml/backtrace_prim.h \ - caml/backtrace.h caml/exec.h caml/fail.h caml/gc.h caml/intext.h \ - caml/io.h caml/major_gc.h caml/freelist.h caml/memory.h \ - caml/minor_gc.h caml/address_class.h caml/osdeps.h caml/roots.h \ - caml/signals.h caml/stack.h caml/sys.h caml/spacetime.h + caml/alloc.h caml/misc.h caml/config.h caml/mlvalues.h \ + caml/backtrace_prim.h caml/backtrace.h caml/exec.h caml/fail.h caml/gc.h \ + caml/intext.h caml/io.h caml/major_gc.h caml/freelist.h caml/memory.h \ + caml/gc.h caml/major_gc.h caml/minor_gc.h caml/address_class.h \ + caml/minor_gc.h caml/misc.h caml/mlvalues.h caml/osdeps.h caml/memory.h \ + caml/roots.h caml/signals.h caml/stack.h caml/sys.h caml/spacetime.h \ + caml/stack.h spacetime_snapshot_bd.$(O): spacetime_snapshot.c caml/alloc.h caml/misc.h \ - caml/config.h caml/m.h caml/s.h caml/mlvalues.h caml/backtrace_prim.h \ - caml/backtrace.h caml/exec.h caml/custom.h caml/fail.h caml/gc.h \ - caml/gc_ctrl.h caml/intext.h caml/io.h caml/major_gc.h caml/freelist.h \ - caml/memory.h caml/minor_gc.h caml/address_class.h caml/roots.h \ - caml/signals.h caml/stack.h caml/sys.h caml/spacetime.h + caml/config.h caml/m.h caml/s.h caml/mlvalues.h caml/backtrace_prim.h \ + caml/backtrace.h caml/exec.h caml/config.h caml/custom.h caml/fail.h \ + caml/gc.h caml/gc_ctrl.h caml/intext.h caml/io.h caml/major_gc.h \ + caml/freelist.h caml/memory.h caml/gc.h caml/major_gc.h caml/minor_gc.h \ + caml/address_class.h caml/minor_gc.h caml/misc.h caml/mlvalues.h \ + caml/roots.h caml/memory.h caml/signals.h caml/stack.h caml/sys.h \ + caml/spacetime.h caml/stack.h stacks_bd.$(O): stacks.c caml/config.h caml/m.h caml/s.h caml/fail.h \ - caml/misc.h caml/mlvalues.h caml/stacks.h caml/memory.h caml/gc.h \ - caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h + caml/misc.h caml/config.h caml/mlvalues.h caml/misc.h caml/mlvalues.h \ + caml/stacks.h caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h \ + caml/minor_gc.h caml/address_class.h startup_aux_bd.$(O): startup_aux.c caml/backtrace.h caml/mlvalues.h \ - caml/config.h caml/m.h caml/s.h caml/misc.h caml/exec.h caml/memory.h \ - caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ - caml/address_class.h caml/callback.h caml/dynlink.h caml/osdeps.h \ - caml/startup_aux.h + caml/config.h caml/m.h caml/s.h caml/misc.h caml/exec.h caml/memory.h \ + caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/callback.h caml/major_gc.h caml/dynlink.h \ + caml/osdeps.h caml/memory.h caml/startup_aux.h startup_byt_bd.$(O): startup_byt.c caml/config.h caml/m.h caml/s.h caml/alloc.h \ - caml/misc.h caml/mlvalues.h caml/backtrace.h caml/exec.h \ - caml/callback.h caml/custom.h caml/debugger.h caml/dynlink.h \ - caml/fail.h caml/fix_code.h caml/freelist.h caml/gc_ctrl.h \ - caml/instrtrace.h caml/interp.h caml/intext.h caml/io.h caml/memory.h \ - caml/gc.h caml/major_gc.h caml/minor_gc.h caml/address_class.h \ - caml/osdeps.h caml/prims.h caml/printexc.h caml/reverse.h \ - caml/signals.h caml/stacks.h caml/sys.h caml/startup.h \ - caml/startup_aux.h caml/version.h + caml/misc.h caml/config.h caml/mlvalues.h caml/backtrace.h caml/exec.h \ + caml/callback.h caml/custom.h caml/debugger.h caml/dynlink.h caml/exec.h \ + caml/fail.h caml/fix_code.h caml/freelist.h caml/gc_ctrl.h \ + caml/instrtrace.h caml/interp.h caml/intext.h caml/io.h caml/io.h \ + caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/minor_gc.h caml/misc.h caml/mlvalues.h \ + caml/osdeps.h caml/memory.h caml/prims.h caml/printexc.h caml/reverse.h \ + caml/signals.h caml/stacks.h caml/sys.h caml/startup.h \ + caml/startup_aux.h caml/version.h startup_nat_bd.$(O): startup_nat.c caml/callback.h caml/mlvalues.h \ - caml/config.h caml/m.h caml/s.h caml/misc.h caml/backtrace.h \ - caml/exec.h caml/custom.h caml/debugger.h caml/fail.h caml/freelist.h \ - caml/gc.h caml/gc_ctrl.h caml/intext.h caml/io.h caml/memory.h \ - caml/major_gc.h caml/minor_gc.h caml/address_class.h caml/osdeps.h \ - caml/printexc.h caml/stack.h caml/startup_aux.h caml/sys.h + caml/config.h caml/m.h caml/s.h caml/misc.h caml/backtrace.h caml/exec.h \ + caml/custom.h caml/debugger.h caml/fail.h caml/freelist.h caml/gc.h \ + caml/gc_ctrl.h caml/intext.h caml/io.h caml/memory.h caml/gc.h \ + caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ + caml/misc.h caml/mlvalues.h caml/osdeps.h caml/memory.h caml/printexc.h \ + caml/stack.h caml/startup_aux.h caml/sys.h str_bd.$(O): str.c caml/alloc.h caml/misc.h caml/config.h caml/m.h caml/s.h \ - caml/mlvalues.h caml/fail.h caml/memory.h caml/gc.h caml/major_gc.h \ - caml/freelist.h caml/minor_gc.h caml/address_class.h + caml/mlvalues.h caml/fail.h caml/memory.h caml/gc.h caml/major_gc.h \ + caml/freelist.h caml/minor_gc.h caml/address_class.h caml/mlvalues.h \ + caml/misc.h sys_bd.$(O): sys.c caml/config.h caml/m.h caml/s.h caml/alloc.h caml/misc.h \ - caml/mlvalues.h caml/debugger.h caml/fail.h caml/gc_ctrl.h caml/io.h \ - caml/osdeps.h caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h \ - caml/minor_gc.h caml/address_class.h caml/signals.h caml/stacks.h \ - caml/sys.h caml/version.h caml/callback.h caml/startup_aux.h + caml/config.h caml/mlvalues.h caml/debugger.h caml/fail.h caml/gc_ctrl.h \ + caml/io.h caml/misc.h caml/mlvalues.h caml/osdeps.h caml/memory.h \ + caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/signals.h caml/stacks.h caml/sys.h \ + caml/version.h caml/callback.h caml/startup_aux.h unix_bd.$(O): unix.c caml/config.h caml/m.h caml/s.h caml/fail.h caml/misc.h \ - caml/mlvalues.h caml/memory.h caml/gc.h caml/major_gc.h \ - caml/freelist.h caml/minor_gc.h caml/address_class.h caml/osdeps.h \ - caml/signals.h caml/sys.h caml/io.h caml/alloc.h + caml/config.h caml/mlvalues.h caml/memory.h caml/gc.h caml/major_gc.h \ + caml/freelist.h caml/minor_gc.h caml/address_class.h caml/misc.h \ + caml/osdeps.h caml/memory.h caml/signals.h caml/sys.h caml/io.h \ + caml/alloc.h weak_bd.$(O): weak.c caml/alloc.h caml/misc.h caml/config.h caml/m.h caml/s.h \ - caml/mlvalues.h caml/fail.h caml/major_gc.h caml/freelist.h \ - caml/memory.h caml/gc.h caml/minor_gc.h caml/address_class.h \ - caml/weak.h caml/signals.h -afl_bi.$(O): afl.c caml/config.h caml/m.h caml/s.h caml/misc.h caml/mlvalues.h \ - caml/osdeps.h caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h \ - caml/minor_gc.h caml/address_class.h + caml/mlvalues.h caml/fail.h caml/major_gc.h caml/freelist.h \ + caml/memory.h caml/gc.h caml/major_gc.h caml/minor_gc.h \ + caml/address_class.h caml/mlvalues.h caml/weak.h caml/minor_gc.h \ + caml/signals.h +win32_bd.$(O): win32.c caml/alloc.h caml/misc.h caml/config.h caml/m.h caml/s.h \ + caml/mlvalues.h caml/address_class.h caml/fail.h caml/io.h caml/memory.h \ + caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/misc.h caml/osdeps.h caml/memory.h \ + caml/signals.h caml/sys.h caml/config.h +afl_bi.$(O): afl.c caml/config.h caml/m.h caml/s.h caml/misc.h caml/config.h \ + caml/mlvalues.h caml/misc.h caml/osdeps.h caml/memory.h caml/gc.h \ + caml/mlvalues.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h alloc_bi.$(O): alloc.c caml/alloc.h caml/misc.h caml/config.h caml/m.h caml/s.h \ - caml/mlvalues.h caml/custom.h caml/major_gc.h caml/freelist.h \ - caml/memory.h caml/gc.h caml/minor_gc.h caml/address_class.h \ - caml/stacks.h + caml/mlvalues.h caml/custom.h caml/major_gc.h caml/freelist.h \ + caml/memory.h caml/gc.h caml/major_gc.h caml/minor_gc.h \ + caml/address_class.h caml/mlvalues.h caml/stacks.h caml/memory.h array_bi.$(O): array.c caml/alloc.h caml/misc.h caml/config.h caml/m.h caml/s.h \ - caml/mlvalues.h caml/fail.h caml/memory.h caml/gc.h caml/major_gc.h \ - caml/freelist.h caml/minor_gc.h caml/address_class.h caml/signals.h \ - caml/spacetime.h caml/io.h caml/stack.h -backtrace_bi.$(O): backtrace.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \ - caml/s.h caml/mlvalues.h caml/memory.h caml/gc.h caml/major_gc.h \ - caml/freelist.h caml/minor_gc.h caml/address_class.h caml/backtrace.h \ - caml/exec.h caml/backtrace_prim.h caml/fail.h + caml/mlvalues.h caml/fail.h caml/memory.h caml/gc.h caml/major_gc.h \ + caml/freelist.h caml/minor_gc.h caml/address_class.h caml/misc.h \ + caml/mlvalues.h caml/signals.h caml/spacetime.h caml/io.h caml/stack.h backtrace_byt_bi.$(O): backtrace_byt.c caml/config.h caml/m.h caml/s.h \ - caml/mlvalues.h caml/misc.h caml/alloc.h caml/custom.h caml/io.h \ - caml/instruct.h caml/intext.h caml/exec.h caml/fix_code.h \ - caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h \ - caml/minor_gc.h caml/address_class.h caml/startup.h caml/stacks.h \ - caml/sys.h caml/backtrace.h caml/fail.h caml/backtrace_prim.h + caml/mlvalues.h caml/config.h caml/misc.h caml/alloc.h caml/mlvalues.h \ + caml/custom.h caml/io.h caml/instruct.h caml/intext.h caml/io.h \ + caml/exec.h caml/fix_code.h caml/memory.h caml/gc.h caml/major_gc.h \ + caml/freelist.h caml/minor_gc.h caml/address_class.h caml/startup.h \ + caml/exec.h caml/stacks.h caml/memory.h caml/sys.h caml/backtrace.h \ + caml/fail.h caml/backtrace_prim.h caml/backtrace.h +backtrace_bi.$(O): backtrace.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \ + caml/s.h caml/mlvalues.h caml/memory.h caml/gc.h caml/major_gc.h \ + caml/freelist.h caml/minor_gc.h caml/address_class.h caml/backtrace.h \ + caml/exec.h caml/backtrace_prim.h caml/backtrace.h caml/fail.h backtrace_nat_bi.$(O): backtrace_nat.c caml/alloc.h caml/misc.h caml/config.h \ - caml/m.h caml/s.h caml/mlvalues.h caml/backtrace.h caml/exec.h \ - caml/backtrace_prim.h caml/memory.h caml/gc.h caml/major_gc.h \ - caml/freelist.h caml/minor_gc.h caml/address_class.h caml/stack.h + caml/m.h caml/s.h caml/mlvalues.h caml/backtrace.h caml/exec.h \ + caml/backtrace_prim.h caml/backtrace.h caml/memory.h caml/gc.h \ + caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ + caml/misc.h caml/mlvalues.h caml/stack.h bigarray_bi.$(O): bigarray.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \ - caml/s.h caml/mlvalues.h caml/bigarray.h caml/custom.h caml/fail.h \ - caml/intext.h caml/io.h caml/hash.h caml/memory.h caml/gc.h \ - caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ - caml/signals.h + caml/s.h caml/mlvalues.h caml/bigarray.h caml/custom.h caml/fail.h \ + caml/intext.h caml/io.h caml/hash.h caml/memory.h caml/gc.h \ + caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ + caml/mlvalues.h caml/signals.h callback_bi.$(O): callback.c caml/callback.h caml/mlvalues.h caml/config.h \ - caml/m.h caml/s.h caml/misc.h caml/fail.h caml/memory.h caml/gc.h \ - caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ - caml/interp.h caml/instruct.h caml/fix_code.h caml/stacks.h + caml/m.h caml/s.h caml/misc.h caml/fail.h caml/memory.h caml/gc.h \ + caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ + caml/mlvalues.h caml/interp.h caml/instruct.h caml/fix_code.h \ + caml/stacks.h caml/memory.h clambda_checks_bi.$(O): clambda_checks.c caml/mlvalues.h caml/config.h caml/m.h \ - caml/s.h caml/misc.h + caml/s.h caml/misc.h compact_bi.$(O): compact.c caml/address_class.h caml/config.h caml/m.h caml/s.h \ - caml/misc.h caml/mlvalues.h caml/finalise.h caml/roots.h caml/memory.h \ - caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ - caml/gc_ctrl.h caml/weak.h caml/compact.h + caml/misc.h caml/mlvalues.h caml/config.h caml/finalise.h caml/roots.h \ + caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/freelist.h caml/gc.h caml/gc_ctrl.h \ + caml/major_gc.h caml/memory.h caml/mlvalues.h caml/roots.h caml/weak.h \ + caml/compact.h compare_bi.$(O): compare.c caml/custom.h caml/mlvalues.h caml/config.h caml/m.h \ - caml/s.h caml/misc.h caml/fail.h caml/memory.h caml/gc.h \ - caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h + caml/s.h caml/misc.h caml/fail.h caml/memory.h caml/gc.h caml/major_gc.h \ + caml/freelist.h caml/minor_gc.h caml/address_class.h caml/misc.h \ + caml/mlvalues.h custom_bi.$(O): custom.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \ - caml/s.h caml/mlvalues.h caml/custom.h caml/fail.h caml/gc_ctrl.h \ - caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h \ - caml/minor_gc.h caml/address_class.h caml/signals.h + caml/s.h caml/mlvalues.h caml/custom.h caml/fail.h caml/gc_ctrl.h \ + caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/mlvalues.h caml/signals.h debugger_bi.$(O): debugger.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \ - caml/s.h caml/mlvalues.h caml/debugger.h caml/osdeps.h caml/memory.h \ - caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ - caml/address_class.h caml/fail.h caml/fix_code.h caml/instruct.h \ - caml/intext.h caml/io.h caml/stacks.h caml/sys.h + caml/s.h caml/mlvalues.h caml/config.h caml/debugger.h caml/misc.h \ + caml/osdeps.h caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h \ + caml/minor_gc.h caml/address_class.h caml/fail.h caml/fix_code.h \ + caml/instruct.h caml/intext.h caml/io.h caml/io.h caml/mlvalues.h \ + caml/stacks.h caml/sys.h dynlink_bi.$(O): dynlink.c caml/config.h caml/m.h caml/s.h caml/alloc.h \ - caml/misc.h caml/mlvalues.h caml/dynlink.h caml/fail.h caml/memory.h \ - caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ - caml/address_class.h caml/osdeps.h caml/prims.h caml/signals.h + caml/misc.h caml/config.h caml/mlvalues.h caml/dynlink.h caml/fail.h \ + caml/mlvalues.h caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h \ + caml/minor_gc.h caml/address_class.h caml/misc.h caml/osdeps.h \ + caml/memory.h caml/prims.h caml/signals.h dynlink_nat_bi.$(O): dynlink_nat.c caml/misc.h caml/config.h caml/m.h caml/s.h \ - caml/mlvalues.h caml/memory.h caml/gc.h caml/major_gc.h \ - caml/freelist.h caml/minor_gc.h caml/address_class.h caml/stack.h \ - caml/callback.h caml/alloc.h caml/intext.h caml/io.h caml/osdeps.h \ - caml/fail.h caml/signals.h caml/hooks.h + caml/mlvalues.h caml/misc.h caml/memory.h caml/gc.h caml/mlvalues.h \ + caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ + caml/stack.h caml/callback.h caml/alloc.h caml/intext.h caml/io.h \ + caml/osdeps.h caml/memory.h caml/fail.h caml/signals.h caml/hooks.h extern_bi.$(O): extern.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \ - caml/s.h caml/mlvalues.h caml/custom.h caml/fail.h caml/gc.h \ - caml/intext.h caml/io.h caml/md5.h caml/memory.h caml/major_gc.h \ - caml/freelist.h caml/minor_gc.h caml/address_class.h caml/reverse.h + caml/s.h caml/mlvalues.h caml/config.h caml/custom.h caml/fail.h \ + caml/gc.h caml/intext.h caml/io.h caml/io.h caml/md5.h caml/memory.h \ + caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/misc.h caml/mlvalues.h caml/reverse.h fail_byt_bi.$(O): fail_byt.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \ - caml/s.h caml/mlvalues.h caml/fail.h caml/io.h caml/gc.h caml/memory.h \ - caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ - caml/printexc.h caml/signals.h caml/stacks.h + caml/s.h caml/mlvalues.h caml/fail.h caml/io.h caml/gc.h caml/memory.h \ + caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/misc.h caml/mlvalues.h caml/printexc.h \ + caml/signals.h caml/stacks.h caml/memory.h fail_nat_bi.$(O): fail_nat.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \ - caml/s.h caml/mlvalues.h caml/fail.h caml/io.h caml/gc.h caml/memory.h \ - caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ - caml/printexc.h caml/signals.h caml/stack.h caml/roots.h \ - caml/callback.h + caml/s.h caml/mlvalues.h caml/fail.h caml/io.h caml/gc.h caml/memory.h \ + caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/mlvalues.h caml/printexc.h caml/signals.h \ + caml/stack.h caml/roots.h caml/memory.h caml/callback.h finalise_bi.$(O): finalise.c caml/callback.h caml/mlvalues.h caml/config.h \ - caml/m.h caml/s.h caml/misc.h caml/compact.h caml/fail.h \ - caml/finalise.h caml/roots.h caml/memory.h caml/gc.h caml/major_gc.h \ - caml/freelist.h caml/minor_gc.h caml/address_class.h caml/signals.h + caml/m.h caml/s.h caml/misc.h caml/compact.h caml/fail.h caml/finalise.h \ + caml/roots.h caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h \ + caml/minor_gc.h caml/address_class.h caml/minor_gc.h caml/mlvalues.h \ + caml/roots.h caml/signals.h fix_code_bi.$(O): fix_code.c caml/config.h caml/m.h caml/s.h caml/debugger.h \ - caml/misc.h caml/mlvalues.h caml/fix_code.h caml/instruct.h \ - caml/intext.h caml/io.h caml/md5.h caml/memory.h caml/gc.h \ - caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ - caml/reverse.h + caml/misc.h caml/config.h caml/mlvalues.h caml/fix_code.h \ + caml/instruct.h caml/intext.h caml/io.h caml/md5.h caml/memory.h \ + caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/misc.h caml/mlvalues.h caml/reverse.h floats_bi.$(O): floats.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \ - caml/s.h caml/mlvalues.h caml/fail.h caml/memory.h caml/gc.h \ - caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ - caml/reverse.h caml/stacks.h + caml/s.h caml/mlvalues.h caml/fail.h caml/memory.h caml/gc.h \ + caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ + caml/mlvalues.h caml/misc.h caml/reverse.h caml/stacks.h caml/memory.h freelist_bi.$(O): freelist.c caml/config.h caml/m.h caml/s.h caml/freelist.h \ - caml/misc.h caml/mlvalues.h caml/gc.h caml/gc_ctrl.h caml/memory.h \ - caml/major_gc.h caml/minor_gc.h caml/address_class.h + caml/misc.h caml/config.h caml/mlvalues.h caml/gc.h caml/gc_ctrl.h \ + caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/major_gc.h caml/misc.h caml/mlvalues.h gc_ctrl_bi.$(O): gc_ctrl.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \ - caml/s.h caml/mlvalues.h caml/backtrace.h caml/exec.h caml/compact.h \ - caml/custom.h caml/fail.h caml/finalise.h caml/roots.h caml/memory.h \ - caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ - caml/address_class.h caml/gc_ctrl.h caml/signals.h caml/stacks.h \ - caml/startup_aux.h + caml/s.h caml/mlvalues.h caml/backtrace.h caml/exec.h caml/compact.h \ + caml/custom.h caml/fail.h caml/finalise.h caml/roots.h caml/memory.h \ + caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/freelist.h caml/gc.h caml/gc_ctrl.h \ + caml/major_gc.h caml/memory.h caml/minor_gc.h caml/misc.h \ + caml/mlvalues.h caml/signals.h caml/stacks.h caml/startup_aux.h globroots_bi.$(O): globroots.c caml/memory.h caml/config.h caml/m.h caml/s.h \ - caml/gc.h caml/mlvalues.h caml/misc.h caml/major_gc.h caml/freelist.h \ - caml/minor_gc.h caml/address_class.h caml/roots.h caml/globroots.h + caml/gc.h caml/mlvalues.h caml/misc.h caml/major_gc.h caml/freelist.h \ + caml/minor_gc.h caml/address_class.h caml/misc.h caml/mlvalues.h \ + caml/roots.h caml/memory.h caml/globroots.h caml/roots.h hash_bi.$(O): hash.c caml/mlvalues.h caml/config.h caml/m.h caml/s.h \ - caml/misc.h caml/custom.h caml/memory.h caml/gc.h caml/major_gc.h \ - caml/freelist.h caml/minor_gc.h caml/address_class.h caml/hash.h + caml/misc.h caml/custom.h caml/mlvalues.h caml/memory.h caml/gc.h \ + caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ + caml/hash.h instrtrace_bi.$(O): instrtrace.c intern_bi.$(O): intern.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \ - caml/s.h caml/mlvalues.h caml/callback.h caml/custom.h caml/fail.h \ - caml/gc.h caml/intext.h caml/io.h caml/md5.h caml/memory.h \ - caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ - caml/reverse.h + caml/s.h caml/mlvalues.h caml/callback.h caml/config.h caml/custom.h \ + caml/fail.h caml/gc.h caml/intext.h caml/io.h caml/io.h caml/md5.h \ + caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/mlvalues.h caml/misc.h caml/reverse.h interp_bi.$(O): interp.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \ - caml/s.h caml/mlvalues.h caml/backtrace.h caml/exec.h caml/callback.h \ - caml/debugger.h caml/fail.h caml/fix_code.h caml/instrtrace.h \ - caml/instruct.h caml/interp.h caml/major_gc.h caml/freelist.h \ - caml/memory.h caml/gc.h caml/minor_gc.h caml/address_class.h \ - caml/prims.h caml/signals.h caml/stacks.h caml/startup_aux.h \ - caml/jumptbl.h + caml/s.h caml/mlvalues.h caml/backtrace.h caml/exec.h caml/callback.h \ + caml/debugger.h caml/fail.h caml/fix_code.h caml/instrtrace.h \ + caml/instruct.h caml/interp.h caml/major_gc.h caml/freelist.h \ + caml/memory.h caml/gc.h caml/major_gc.h caml/minor_gc.h \ + caml/address_class.h caml/misc.h caml/mlvalues.h caml/prims.h \ + caml/signals.h caml/stacks.h caml/memory.h caml/startup_aux.h \ + caml/jumptbl.h ints_bi.$(O): ints.c caml/alloc.h caml/misc.h caml/config.h caml/m.h caml/s.h \ - caml/mlvalues.h caml/custom.h caml/fail.h caml/intext.h caml/io.h \ - caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h \ - caml/minor_gc.h caml/address_class.h + caml/mlvalues.h caml/custom.h caml/fail.h caml/intext.h caml/io.h \ + caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/misc.h caml/mlvalues.h io_bi.$(O): io.c caml/config.h caml/m.h caml/s.h caml/alloc.h caml/misc.h \ - caml/mlvalues.h caml/custom.h caml/fail.h caml/io.h caml/memory.h \ - caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ - caml/address_class.h caml/osdeps.h caml/signals.h caml/sys.h + caml/config.h caml/mlvalues.h caml/custom.h caml/fail.h caml/io.h \ + caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/misc.h caml/mlvalues.h caml/osdeps.h \ + caml/memory.h caml/signals.h caml/sys.h lexing_bi.$(O): lexing.c caml/fail.h caml/misc.h caml/config.h caml/m.h \ - caml/s.h caml/mlvalues.h caml/stacks.h caml/memory.h caml/gc.h \ - caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h + caml/s.h caml/mlvalues.h caml/mlvalues.h caml/stacks.h caml/memory.h \ + caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h main_bi.$(O): main.c caml/misc.h caml/config.h caml/m.h caml/s.h \ - caml/mlvalues.h caml/sys.h caml/osdeps.h caml/memory.h caml/gc.h \ - caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h + caml/mlvalues.h caml/misc.h caml/sys.h caml/osdeps.h caml/memory.h \ + caml/gc.h caml/mlvalues.h caml/major_gc.h caml/freelist.h \ + caml/minor_gc.h caml/address_class.h major_gc_bi.$(O): major_gc.c caml/compact.h caml/config.h caml/m.h caml/s.h \ - caml/misc.h caml/mlvalues.h caml/custom.h caml/fail.h caml/finalise.h \ - caml/roots.h caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h \ - caml/minor_gc.h caml/address_class.h caml/gc_ctrl.h caml/signals.h \ - caml/weak.h + caml/misc.h caml/mlvalues.h caml/custom.h caml/config.h caml/fail.h \ + caml/finalise.h caml/roots.h caml/memory.h caml/gc.h caml/major_gc.h \ + caml/freelist.h caml/minor_gc.h caml/address_class.h caml/freelist.h \ + caml/gc.h caml/gc_ctrl.h caml/major_gc.h caml/misc.h caml/mlvalues.h \ + caml/roots.h caml/signals.h caml/weak.h md5_bi.$(O): md5.c caml/alloc.h caml/misc.h caml/config.h caml/m.h caml/s.h \ - caml/mlvalues.h caml/fail.h caml/md5.h caml/io.h caml/memory.h \ - caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ - caml/address_class.h caml/reverse.h + caml/mlvalues.h caml/fail.h caml/md5.h caml/io.h caml/memory.h caml/gc.h \ + caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ + caml/mlvalues.h caml/io.h caml/reverse.h memory_bi.$(O): memory.c caml/address_class.h caml/config.h caml/m.h caml/s.h \ - caml/misc.h caml/mlvalues.h caml/fail.h caml/freelist.h caml/gc.h \ - caml/gc_ctrl.h caml/major_gc.h caml/memory.h caml/minor_gc.h \ - caml/signals.h + caml/misc.h caml/mlvalues.h caml/config.h caml/fail.h caml/freelist.h \ + caml/gc.h caml/gc_ctrl.h caml/major_gc.h caml/freelist.h caml/memory.h \ + caml/gc.h caml/major_gc.h caml/minor_gc.h caml/address_class.h \ + caml/minor_gc.h caml/misc.h caml/mlvalues.h caml/signals.h meta_bi.$(O): meta.c caml/alloc.h caml/misc.h caml/config.h caml/m.h caml/s.h \ - caml/mlvalues.h caml/fail.h caml/fix_code.h caml/interp.h \ - caml/intext.h caml/io.h caml/major_gc.h caml/freelist.h caml/memory.h \ - caml/gc.h caml/minor_gc.h caml/address_class.h caml/prims.h \ - caml/stacks.h caml/backtrace_prim.h caml/backtrace.h caml/exec.h + caml/mlvalues.h caml/config.h caml/fail.h caml/fix_code.h caml/interp.h \ + caml/intext.h caml/io.h caml/major_gc.h caml/freelist.h caml/memory.h \ + caml/gc.h caml/major_gc.h caml/minor_gc.h caml/address_class.h \ + caml/minor_gc.h caml/misc.h caml/mlvalues.h caml/prims.h caml/stacks.h \ + caml/memory.h caml/backtrace_prim.h caml/backtrace.h caml/exec.h minor_gc_bi.$(O): minor_gc.c caml/custom.h caml/mlvalues.h caml/config.h \ - caml/m.h caml/s.h caml/misc.h caml/fail.h caml/finalise.h caml/roots.h \ - caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h \ - caml/minor_gc.h caml/address_class.h caml/gc_ctrl.h caml/signals.h \ - caml/weak.h -misc_bi.$(O): misc.c caml/config.h caml/m.h caml/s.h caml/misc.h caml/memory.h \ - caml/gc.h caml/mlvalues.h caml/major_gc.h caml/freelist.h \ - caml/minor_gc.h caml/address_class.h caml/osdeps.h caml/version.h + caml/m.h caml/s.h caml/misc.h caml/config.h caml/fail.h caml/finalise.h \ + caml/roots.h caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h \ + caml/minor_gc.h caml/address_class.h caml/gc.h caml/gc_ctrl.h \ + caml/major_gc.h caml/memory.h caml/minor_gc.h caml/misc.h \ + caml/mlvalues.h caml/roots.h caml/signals.h caml/weak.h +misc_bi.$(O): misc.c caml/config.h caml/m.h caml/s.h caml/misc.h caml/config.h \ + caml/memory.h caml/gc.h caml/mlvalues.h caml/misc.h caml/major_gc.h \ + caml/freelist.h caml/minor_gc.h caml/address_class.h caml/osdeps.h \ + caml/memory.h caml/version.h obj_bi.$(O): obj.c caml/alloc.h caml/misc.h caml/config.h caml/m.h caml/s.h \ - caml/mlvalues.h caml/fail.h caml/gc.h caml/interp.h caml/major_gc.h \ - caml/freelist.h caml/memory.h caml/minor_gc.h caml/address_class.h \ - caml/prims.h caml/spacetime.h caml/io.h caml/stack.h + caml/mlvalues.h caml/fail.h caml/gc.h caml/interp.h caml/major_gc.h \ + caml/freelist.h caml/memory.h caml/gc.h caml/major_gc.h caml/minor_gc.h \ + caml/address_class.h caml/minor_gc.h caml/misc.h caml/mlvalues.h \ + caml/prims.h caml/spacetime.h caml/io.h caml/stack.h parsing_bi.$(O): parsing.c caml/config.h caml/m.h caml/s.h caml/mlvalues.h \ - caml/misc.h caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h \ - caml/minor_gc.h caml/address_class.h caml/alloc.h + caml/config.h caml/misc.h caml/memory.h caml/gc.h caml/mlvalues.h \ + caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ + caml/alloc.h prims_bi.$(O): prims.c caml/mlvalues.h caml/config.h caml/m.h caml/s.h \ - caml/misc.h caml/prims.h + caml/misc.h caml/prims.h printexc_bi.$(O): printexc.c caml/backtrace.h caml/mlvalues.h caml/config.h \ - caml/m.h caml/s.h caml/misc.h caml/exec.h caml/callback.h \ - caml/debugger.h caml/fail.h caml/printexc.h caml/memory.h caml/gc.h \ - caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h + caml/m.h caml/s.h caml/misc.h caml/exec.h caml/callback.h \ + caml/debugger.h caml/fail.h caml/misc.h caml/mlvalues.h caml/printexc.h \ + caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h roots_byt_bi.$(O): roots_byt.c caml/finalise.h caml/roots.h caml/misc.h \ - caml/config.h caml/m.h caml/s.h caml/memory.h caml/gc.h \ - caml/mlvalues.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ - caml/address_class.h caml/globroots.h caml/stacks.h + caml/config.h caml/m.h caml/s.h caml/memory.h caml/gc.h caml/mlvalues.h \ + caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ + caml/globroots.h caml/major_gc.h caml/memory.h caml/minor_gc.h \ + caml/misc.h caml/mlvalues.h caml/roots.h caml/stacks.h roots_nat_bi.$(O): roots_nat.c caml/finalise.h caml/roots.h caml/misc.h \ - caml/config.h caml/m.h caml/s.h caml/memory.h caml/gc.h \ - caml/mlvalues.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ - caml/address_class.h caml/globroots.h caml/stack.h -signals_bi.$(O): signals.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \ - caml/s.h caml/mlvalues.h caml/callback.h caml/fail.h caml/memory.h \ - caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ - caml/address_class.h caml/roots.h caml/signals.h \ - caml/signals_machdep.h caml/sys.h + caml/config.h caml/m.h caml/s.h caml/memory.h caml/gc.h caml/mlvalues.h \ + caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ + caml/globroots.h caml/memory.h caml/major_gc.h caml/minor_gc.h \ + caml/misc.h caml/mlvalues.h caml/stack.h caml/roots.h signals_byt_bi.$(O): signals_byt.c caml/config.h caml/m.h caml/s.h \ - caml/memory.h caml/gc.h caml/mlvalues.h caml/misc.h caml/major_gc.h \ - caml/freelist.h caml/minor_gc.h caml/address_class.h caml/osdeps.h \ - caml/signals.h caml/signals_machdep.h + caml/memory.h caml/config.h caml/gc.h caml/mlvalues.h caml/misc.h \ + caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ + caml/osdeps.h caml/memory.h caml/signals.h caml/signals_machdep.h +signals_bi.$(O): signals.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \ + caml/s.h caml/mlvalues.h caml/callback.h caml/config.h caml/fail.h \ + caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/misc.h caml/mlvalues.h caml/roots.h \ + caml/memory.h caml/signals.h caml/signals_machdep.h caml/sys.h signals_nat_bi.$(O): signals_nat.c caml/fail.h caml/misc.h caml/config.h \ - caml/m.h caml/s.h caml/mlvalues.h caml/memory.h caml/gc.h \ - caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ - caml/osdeps.h caml/signals.h caml/signals_machdep.h signals_osdep.h \ - caml/stack.h caml/spacetime.h caml/io.h + caml/m.h caml/s.h caml/mlvalues.h caml/memory.h caml/gc.h \ + caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ + caml/osdeps.h caml/memory.h caml/signals.h caml/signals_machdep.h \ + signals_osdep.h caml/stack.h caml/spacetime.h caml/io.h caml/stack.h spacetime_byt_bi.$(O): spacetime_byt.c caml/fail.h caml/misc.h caml/config.h \ - caml/m.h caml/s.h caml/mlvalues.h + caml/m.h caml/s.h caml/mlvalues.h caml/mlvalues.h spacetime_nat_bi.$(O): spacetime_nat.c caml/config.h caml/m.h caml/s.h \ - caml/alloc.h caml/misc.h caml/mlvalues.h caml/backtrace_prim.h \ - caml/backtrace.h caml/exec.h caml/fail.h caml/gc.h caml/intext.h \ - caml/io.h caml/major_gc.h caml/freelist.h caml/memory.h \ - caml/minor_gc.h caml/address_class.h caml/osdeps.h caml/roots.h \ - caml/signals.h caml/stack.h caml/sys.h caml/spacetime.h + caml/alloc.h caml/misc.h caml/config.h caml/mlvalues.h \ + caml/backtrace_prim.h caml/backtrace.h caml/exec.h caml/fail.h caml/gc.h \ + caml/intext.h caml/io.h caml/major_gc.h caml/freelist.h caml/memory.h \ + caml/gc.h caml/major_gc.h caml/minor_gc.h caml/address_class.h \ + caml/minor_gc.h caml/misc.h caml/mlvalues.h caml/osdeps.h caml/memory.h \ + caml/roots.h caml/signals.h caml/stack.h caml/sys.h caml/spacetime.h \ + caml/stack.h spacetime_snapshot_bi.$(O): spacetime_snapshot.c caml/alloc.h caml/misc.h \ - caml/config.h caml/m.h caml/s.h caml/mlvalues.h caml/backtrace_prim.h \ - caml/backtrace.h caml/exec.h caml/custom.h caml/fail.h caml/gc.h \ - caml/gc_ctrl.h caml/intext.h caml/io.h caml/major_gc.h caml/freelist.h \ - caml/memory.h caml/minor_gc.h caml/address_class.h caml/roots.h \ - caml/signals.h caml/stack.h caml/sys.h caml/spacetime.h + caml/config.h caml/m.h caml/s.h caml/mlvalues.h caml/backtrace_prim.h \ + caml/backtrace.h caml/exec.h caml/config.h caml/custom.h caml/fail.h \ + caml/gc.h caml/gc_ctrl.h caml/intext.h caml/io.h caml/major_gc.h \ + caml/freelist.h caml/memory.h caml/gc.h caml/major_gc.h caml/minor_gc.h \ + caml/address_class.h caml/minor_gc.h caml/misc.h caml/mlvalues.h \ + caml/roots.h caml/memory.h caml/signals.h caml/stack.h caml/sys.h \ + caml/spacetime.h caml/stack.h stacks_bi.$(O): stacks.c caml/config.h caml/m.h caml/s.h caml/fail.h \ - caml/misc.h caml/mlvalues.h caml/stacks.h caml/memory.h caml/gc.h \ - caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h + caml/misc.h caml/config.h caml/mlvalues.h caml/misc.h caml/mlvalues.h \ + caml/stacks.h caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h \ + caml/minor_gc.h caml/address_class.h startup_aux_bi.$(O): startup_aux.c caml/backtrace.h caml/mlvalues.h \ - caml/config.h caml/m.h caml/s.h caml/misc.h caml/exec.h caml/memory.h \ - caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ - caml/address_class.h caml/callback.h caml/dynlink.h caml/osdeps.h \ - caml/startup_aux.h + caml/config.h caml/m.h caml/s.h caml/misc.h caml/exec.h caml/memory.h \ + caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/callback.h caml/major_gc.h caml/dynlink.h \ + caml/osdeps.h caml/memory.h caml/startup_aux.h startup_byt_bi.$(O): startup_byt.c caml/config.h caml/m.h caml/s.h caml/alloc.h \ - caml/misc.h caml/mlvalues.h caml/backtrace.h caml/exec.h \ - caml/callback.h caml/custom.h caml/debugger.h caml/dynlink.h \ - caml/fail.h caml/fix_code.h caml/freelist.h caml/gc_ctrl.h \ - caml/instrtrace.h caml/interp.h caml/intext.h caml/io.h caml/memory.h \ - caml/gc.h caml/major_gc.h caml/minor_gc.h caml/address_class.h \ - caml/osdeps.h caml/prims.h caml/printexc.h caml/reverse.h \ - caml/signals.h caml/stacks.h caml/sys.h caml/startup.h \ - caml/startup_aux.h caml/version.h + caml/misc.h caml/config.h caml/mlvalues.h caml/backtrace.h caml/exec.h \ + caml/callback.h caml/custom.h caml/debugger.h caml/dynlink.h caml/exec.h \ + caml/fail.h caml/fix_code.h caml/freelist.h caml/gc_ctrl.h \ + caml/instrtrace.h caml/interp.h caml/intext.h caml/io.h caml/io.h \ + caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/minor_gc.h caml/misc.h caml/mlvalues.h \ + caml/osdeps.h caml/memory.h caml/prims.h caml/printexc.h caml/reverse.h \ + caml/signals.h caml/stacks.h caml/sys.h caml/startup.h \ + caml/startup_aux.h caml/version.h startup_nat_bi.$(O): startup_nat.c caml/callback.h caml/mlvalues.h \ - caml/config.h caml/m.h caml/s.h caml/misc.h caml/backtrace.h \ - caml/exec.h caml/custom.h caml/debugger.h caml/fail.h caml/freelist.h \ - caml/gc.h caml/gc_ctrl.h caml/intext.h caml/io.h caml/memory.h \ - caml/major_gc.h caml/minor_gc.h caml/address_class.h caml/osdeps.h \ - caml/printexc.h caml/stack.h caml/startup_aux.h caml/sys.h + caml/config.h caml/m.h caml/s.h caml/misc.h caml/backtrace.h caml/exec.h \ + caml/custom.h caml/debugger.h caml/fail.h caml/freelist.h caml/gc.h \ + caml/gc_ctrl.h caml/intext.h caml/io.h caml/memory.h caml/gc.h \ + caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ + caml/misc.h caml/mlvalues.h caml/osdeps.h caml/memory.h caml/printexc.h \ + caml/stack.h caml/startup_aux.h caml/sys.h str_bi.$(O): str.c caml/alloc.h caml/misc.h caml/config.h caml/m.h caml/s.h \ - caml/mlvalues.h caml/fail.h caml/memory.h caml/gc.h caml/major_gc.h \ - caml/freelist.h caml/minor_gc.h caml/address_class.h + caml/mlvalues.h caml/fail.h caml/memory.h caml/gc.h caml/major_gc.h \ + caml/freelist.h caml/minor_gc.h caml/address_class.h caml/mlvalues.h \ + caml/misc.h sys_bi.$(O): sys.c caml/config.h caml/m.h caml/s.h caml/alloc.h caml/misc.h \ - caml/mlvalues.h caml/debugger.h caml/fail.h caml/gc_ctrl.h caml/io.h \ - caml/osdeps.h caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h \ - caml/minor_gc.h caml/address_class.h caml/signals.h caml/stacks.h \ - caml/sys.h caml/version.h caml/callback.h caml/startup_aux.h + caml/config.h caml/mlvalues.h caml/debugger.h caml/fail.h caml/gc_ctrl.h \ + caml/io.h caml/misc.h caml/mlvalues.h caml/osdeps.h caml/memory.h \ + caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/signals.h caml/stacks.h caml/sys.h \ + caml/version.h caml/callback.h caml/startup_aux.h unix_bi.$(O): unix.c caml/config.h caml/m.h caml/s.h caml/fail.h caml/misc.h \ - caml/mlvalues.h caml/memory.h caml/gc.h caml/major_gc.h \ - caml/freelist.h caml/minor_gc.h caml/address_class.h caml/osdeps.h \ - caml/signals.h caml/sys.h caml/io.h caml/alloc.h + caml/config.h caml/mlvalues.h caml/memory.h caml/gc.h caml/major_gc.h \ + caml/freelist.h caml/minor_gc.h caml/address_class.h caml/misc.h \ + caml/osdeps.h caml/memory.h caml/signals.h caml/sys.h caml/io.h \ + caml/alloc.h weak_bi.$(O): weak.c caml/alloc.h caml/misc.h caml/config.h caml/m.h caml/s.h \ - caml/mlvalues.h caml/fail.h caml/major_gc.h caml/freelist.h \ - caml/memory.h caml/gc.h caml/minor_gc.h caml/address_class.h \ - caml/weak.h caml/signals.h -afl_bpic.$(O): afl.c caml/config.h caml/m.h caml/s.h caml/misc.h caml/mlvalues.h \ - caml/osdeps.h caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h \ - caml/minor_gc.h caml/address_class.h + caml/mlvalues.h caml/fail.h caml/major_gc.h caml/freelist.h \ + caml/memory.h caml/gc.h caml/major_gc.h caml/minor_gc.h \ + caml/address_class.h caml/mlvalues.h caml/weak.h caml/minor_gc.h \ + caml/signals.h +win32_bi.$(O): win32.c caml/alloc.h caml/misc.h caml/config.h caml/m.h caml/s.h \ + caml/mlvalues.h caml/address_class.h caml/fail.h caml/io.h caml/memory.h \ + caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/misc.h caml/osdeps.h caml/memory.h \ + caml/signals.h caml/sys.h caml/config.h +afl_bpic.$(O): afl.c caml/config.h caml/m.h caml/s.h caml/misc.h caml/config.h \ + caml/mlvalues.h caml/misc.h caml/osdeps.h caml/memory.h caml/gc.h \ + caml/mlvalues.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h alloc_bpic.$(O): alloc.c caml/alloc.h caml/misc.h caml/config.h caml/m.h caml/s.h \ - caml/mlvalues.h caml/custom.h caml/major_gc.h caml/freelist.h \ - caml/memory.h caml/gc.h caml/minor_gc.h caml/address_class.h \ - caml/stacks.h + caml/mlvalues.h caml/custom.h caml/major_gc.h caml/freelist.h \ + caml/memory.h caml/gc.h caml/major_gc.h caml/minor_gc.h \ + caml/address_class.h caml/mlvalues.h caml/stacks.h caml/memory.h array_bpic.$(O): array.c caml/alloc.h caml/misc.h caml/config.h caml/m.h caml/s.h \ - caml/mlvalues.h caml/fail.h caml/memory.h caml/gc.h caml/major_gc.h \ - caml/freelist.h caml/minor_gc.h caml/address_class.h caml/signals.h \ - caml/spacetime.h caml/io.h caml/stack.h -backtrace_bpic.$(O): backtrace.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \ - caml/s.h caml/mlvalues.h caml/memory.h caml/gc.h caml/major_gc.h \ - caml/freelist.h caml/minor_gc.h caml/address_class.h caml/backtrace.h \ - caml/exec.h caml/backtrace_prim.h caml/fail.h + caml/mlvalues.h caml/fail.h caml/memory.h caml/gc.h caml/major_gc.h \ + caml/freelist.h caml/minor_gc.h caml/address_class.h caml/misc.h \ + caml/mlvalues.h caml/signals.h caml/spacetime.h caml/io.h caml/stack.h backtrace_byt_bpic.$(O): backtrace_byt.c caml/config.h caml/m.h caml/s.h \ - caml/mlvalues.h caml/misc.h caml/alloc.h caml/custom.h caml/io.h \ - caml/instruct.h caml/intext.h caml/exec.h caml/fix_code.h \ - caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h \ - caml/minor_gc.h caml/address_class.h caml/startup.h caml/stacks.h \ - caml/sys.h caml/backtrace.h caml/fail.h caml/backtrace_prim.h + caml/mlvalues.h caml/config.h caml/misc.h caml/alloc.h caml/mlvalues.h \ + caml/custom.h caml/io.h caml/instruct.h caml/intext.h caml/io.h \ + caml/exec.h caml/fix_code.h caml/memory.h caml/gc.h caml/major_gc.h \ + caml/freelist.h caml/minor_gc.h caml/address_class.h caml/startup.h \ + caml/exec.h caml/stacks.h caml/memory.h caml/sys.h caml/backtrace.h \ + caml/fail.h caml/backtrace_prim.h caml/backtrace.h +backtrace_bpic.$(O): backtrace.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \ + caml/s.h caml/mlvalues.h caml/memory.h caml/gc.h caml/major_gc.h \ + caml/freelist.h caml/minor_gc.h caml/address_class.h caml/backtrace.h \ + caml/exec.h caml/backtrace_prim.h caml/backtrace.h caml/fail.h backtrace_nat_bpic.$(O): backtrace_nat.c caml/alloc.h caml/misc.h caml/config.h \ - caml/m.h caml/s.h caml/mlvalues.h caml/backtrace.h caml/exec.h \ - caml/backtrace_prim.h caml/memory.h caml/gc.h caml/major_gc.h \ - caml/freelist.h caml/minor_gc.h caml/address_class.h caml/stack.h + caml/m.h caml/s.h caml/mlvalues.h caml/backtrace.h caml/exec.h \ + caml/backtrace_prim.h caml/backtrace.h caml/memory.h caml/gc.h \ + caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ + caml/misc.h caml/mlvalues.h caml/stack.h bigarray_bpic.$(O): bigarray.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \ - caml/s.h caml/mlvalues.h caml/bigarray.h caml/custom.h caml/fail.h \ - caml/intext.h caml/io.h caml/hash.h caml/memory.h caml/gc.h \ - caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ - caml/signals.h + caml/s.h caml/mlvalues.h caml/bigarray.h caml/custom.h caml/fail.h \ + caml/intext.h caml/io.h caml/hash.h caml/memory.h caml/gc.h \ + caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ + caml/mlvalues.h caml/signals.h callback_bpic.$(O): callback.c caml/callback.h caml/mlvalues.h caml/config.h \ - caml/m.h caml/s.h caml/misc.h caml/fail.h caml/memory.h caml/gc.h \ - caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ - caml/interp.h caml/instruct.h caml/fix_code.h caml/stacks.h + caml/m.h caml/s.h caml/misc.h caml/fail.h caml/memory.h caml/gc.h \ + caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ + caml/mlvalues.h caml/interp.h caml/instruct.h caml/fix_code.h \ + caml/stacks.h caml/memory.h clambda_checks_bpic.$(O): clambda_checks.c caml/mlvalues.h caml/config.h caml/m.h \ - caml/s.h caml/misc.h + caml/s.h caml/misc.h compact_bpic.$(O): compact.c caml/address_class.h caml/config.h caml/m.h caml/s.h \ - caml/misc.h caml/mlvalues.h caml/finalise.h caml/roots.h caml/memory.h \ - caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ - caml/gc_ctrl.h caml/weak.h caml/compact.h + caml/misc.h caml/mlvalues.h caml/config.h caml/finalise.h caml/roots.h \ + caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/freelist.h caml/gc.h caml/gc_ctrl.h \ + caml/major_gc.h caml/memory.h caml/mlvalues.h caml/roots.h caml/weak.h \ + caml/compact.h compare_bpic.$(O): compare.c caml/custom.h caml/mlvalues.h caml/config.h caml/m.h \ - caml/s.h caml/misc.h caml/fail.h caml/memory.h caml/gc.h \ - caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h + caml/s.h caml/misc.h caml/fail.h caml/memory.h caml/gc.h caml/major_gc.h \ + caml/freelist.h caml/minor_gc.h caml/address_class.h caml/misc.h \ + caml/mlvalues.h custom_bpic.$(O): custom.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \ - caml/s.h caml/mlvalues.h caml/custom.h caml/fail.h caml/gc_ctrl.h \ - caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h \ - caml/minor_gc.h caml/address_class.h caml/signals.h + caml/s.h caml/mlvalues.h caml/custom.h caml/fail.h caml/gc_ctrl.h \ + caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/mlvalues.h caml/signals.h debugger_bpic.$(O): debugger.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \ - caml/s.h caml/mlvalues.h caml/debugger.h caml/osdeps.h caml/memory.h \ - caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ - caml/address_class.h caml/fail.h caml/fix_code.h caml/instruct.h \ - caml/intext.h caml/io.h caml/stacks.h caml/sys.h + caml/s.h caml/mlvalues.h caml/config.h caml/debugger.h caml/misc.h \ + caml/osdeps.h caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h \ + caml/minor_gc.h caml/address_class.h caml/fail.h caml/fix_code.h \ + caml/instruct.h caml/intext.h caml/io.h caml/io.h caml/mlvalues.h \ + caml/stacks.h caml/sys.h dynlink_bpic.$(O): dynlink.c caml/config.h caml/m.h caml/s.h caml/alloc.h \ - caml/misc.h caml/mlvalues.h caml/dynlink.h caml/fail.h caml/memory.h \ - caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ - caml/address_class.h caml/osdeps.h caml/prims.h caml/signals.h + caml/misc.h caml/config.h caml/mlvalues.h caml/dynlink.h caml/fail.h \ + caml/mlvalues.h caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h \ + caml/minor_gc.h caml/address_class.h caml/misc.h caml/osdeps.h \ + caml/memory.h caml/prims.h caml/signals.h dynlink_nat_bpic.$(O): dynlink_nat.c caml/misc.h caml/config.h caml/m.h caml/s.h \ - caml/mlvalues.h caml/memory.h caml/gc.h caml/major_gc.h \ - caml/freelist.h caml/minor_gc.h caml/address_class.h caml/stack.h \ - caml/callback.h caml/alloc.h caml/intext.h caml/io.h caml/osdeps.h \ - caml/fail.h caml/signals.h caml/hooks.h + caml/mlvalues.h caml/misc.h caml/memory.h caml/gc.h caml/mlvalues.h \ + caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ + caml/stack.h caml/callback.h caml/alloc.h caml/intext.h caml/io.h \ + caml/osdeps.h caml/memory.h caml/fail.h caml/signals.h caml/hooks.h extern_bpic.$(O): extern.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \ - caml/s.h caml/mlvalues.h caml/custom.h caml/fail.h caml/gc.h \ - caml/intext.h caml/io.h caml/md5.h caml/memory.h caml/major_gc.h \ - caml/freelist.h caml/minor_gc.h caml/address_class.h caml/reverse.h + caml/s.h caml/mlvalues.h caml/config.h caml/custom.h caml/fail.h \ + caml/gc.h caml/intext.h caml/io.h caml/io.h caml/md5.h caml/memory.h \ + caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/misc.h caml/mlvalues.h caml/reverse.h fail_byt_bpic.$(O): fail_byt.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \ - caml/s.h caml/mlvalues.h caml/fail.h caml/io.h caml/gc.h caml/memory.h \ - caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ - caml/printexc.h caml/signals.h caml/stacks.h + caml/s.h caml/mlvalues.h caml/fail.h caml/io.h caml/gc.h caml/memory.h \ + caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/misc.h caml/mlvalues.h caml/printexc.h \ + caml/signals.h caml/stacks.h caml/memory.h fail_nat_bpic.$(O): fail_nat.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \ - caml/s.h caml/mlvalues.h caml/fail.h caml/io.h caml/gc.h caml/memory.h \ - caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ - caml/printexc.h caml/signals.h caml/stack.h caml/roots.h \ - caml/callback.h + caml/s.h caml/mlvalues.h caml/fail.h caml/io.h caml/gc.h caml/memory.h \ + caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/mlvalues.h caml/printexc.h caml/signals.h \ + caml/stack.h caml/roots.h caml/memory.h caml/callback.h finalise_bpic.$(O): finalise.c caml/callback.h caml/mlvalues.h caml/config.h \ - caml/m.h caml/s.h caml/misc.h caml/compact.h caml/fail.h \ - caml/finalise.h caml/roots.h caml/memory.h caml/gc.h caml/major_gc.h \ - caml/freelist.h caml/minor_gc.h caml/address_class.h caml/signals.h + caml/m.h caml/s.h caml/misc.h caml/compact.h caml/fail.h caml/finalise.h \ + caml/roots.h caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h \ + caml/minor_gc.h caml/address_class.h caml/minor_gc.h caml/mlvalues.h \ + caml/roots.h caml/signals.h fix_code_bpic.$(O): fix_code.c caml/config.h caml/m.h caml/s.h caml/debugger.h \ - caml/misc.h caml/mlvalues.h caml/fix_code.h caml/instruct.h \ - caml/intext.h caml/io.h caml/md5.h caml/memory.h caml/gc.h \ - caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ - caml/reverse.h + caml/misc.h caml/config.h caml/mlvalues.h caml/fix_code.h \ + caml/instruct.h caml/intext.h caml/io.h caml/md5.h caml/memory.h \ + caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/misc.h caml/mlvalues.h caml/reverse.h floats_bpic.$(O): floats.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \ - caml/s.h caml/mlvalues.h caml/fail.h caml/memory.h caml/gc.h \ - caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ - caml/reverse.h caml/stacks.h + caml/s.h caml/mlvalues.h caml/fail.h caml/memory.h caml/gc.h \ + caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ + caml/mlvalues.h caml/misc.h caml/reverse.h caml/stacks.h caml/memory.h freelist_bpic.$(O): freelist.c caml/config.h caml/m.h caml/s.h caml/freelist.h \ - caml/misc.h caml/mlvalues.h caml/gc.h caml/gc_ctrl.h caml/memory.h \ - caml/major_gc.h caml/minor_gc.h caml/address_class.h + caml/misc.h caml/config.h caml/mlvalues.h caml/gc.h caml/gc_ctrl.h \ + caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/major_gc.h caml/misc.h caml/mlvalues.h gc_ctrl_bpic.$(O): gc_ctrl.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \ - caml/s.h caml/mlvalues.h caml/backtrace.h caml/exec.h caml/compact.h \ - caml/custom.h caml/fail.h caml/finalise.h caml/roots.h caml/memory.h \ - caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ - caml/address_class.h caml/gc_ctrl.h caml/signals.h caml/stacks.h \ - caml/startup_aux.h + caml/s.h caml/mlvalues.h caml/backtrace.h caml/exec.h caml/compact.h \ + caml/custom.h caml/fail.h caml/finalise.h caml/roots.h caml/memory.h \ + caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/freelist.h caml/gc.h caml/gc_ctrl.h \ + caml/major_gc.h caml/memory.h caml/minor_gc.h caml/misc.h \ + caml/mlvalues.h caml/signals.h caml/stacks.h caml/startup_aux.h globroots_bpic.$(O): globroots.c caml/memory.h caml/config.h caml/m.h caml/s.h \ - caml/gc.h caml/mlvalues.h caml/misc.h caml/major_gc.h caml/freelist.h \ - caml/minor_gc.h caml/address_class.h caml/roots.h caml/globroots.h + caml/gc.h caml/mlvalues.h caml/misc.h caml/major_gc.h caml/freelist.h \ + caml/minor_gc.h caml/address_class.h caml/misc.h caml/mlvalues.h \ + caml/roots.h caml/memory.h caml/globroots.h caml/roots.h hash_bpic.$(O): hash.c caml/mlvalues.h caml/config.h caml/m.h caml/s.h \ - caml/misc.h caml/custom.h caml/memory.h caml/gc.h caml/major_gc.h \ - caml/freelist.h caml/minor_gc.h caml/address_class.h caml/hash.h + caml/misc.h caml/custom.h caml/mlvalues.h caml/memory.h caml/gc.h \ + caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ + caml/hash.h instrtrace_bpic.$(O): instrtrace.c intern_bpic.$(O): intern.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \ - caml/s.h caml/mlvalues.h caml/callback.h caml/custom.h caml/fail.h \ - caml/gc.h caml/intext.h caml/io.h caml/md5.h caml/memory.h \ - caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ - caml/reverse.h + caml/s.h caml/mlvalues.h caml/callback.h caml/config.h caml/custom.h \ + caml/fail.h caml/gc.h caml/intext.h caml/io.h caml/io.h caml/md5.h \ + caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/mlvalues.h caml/misc.h caml/reverse.h interp_bpic.$(O): interp.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \ - caml/s.h caml/mlvalues.h caml/backtrace.h caml/exec.h caml/callback.h \ - caml/debugger.h caml/fail.h caml/fix_code.h caml/instrtrace.h \ - caml/instruct.h caml/interp.h caml/major_gc.h caml/freelist.h \ - caml/memory.h caml/gc.h caml/minor_gc.h caml/address_class.h \ - caml/prims.h caml/signals.h caml/stacks.h caml/startup_aux.h \ - caml/jumptbl.h + caml/s.h caml/mlvalues.h caml/backtrace.h caml/exec.h caml/callback.h \ + caml/debugger.h caml/fail.h caml/fix_code.h caml/instrtrace.h \ + caml/instruct.h caml/interp.h caml/major_gc.h caml/freelist.h \ + caml/memory.h caml/gc.h caml/major_gc.h caml/minor_gc.h \ + caml/address_class.h caml/misc.h caml/mlvalues.h caml/prims.h \ + caml/signals.h caml/stacks.h caml/memory.h caml/startup_aux.h \ + caml/jumptbl.h ints_bpic.$(O): ints.c caml/alloc.h caml/misc.h caml/config.h caml/m.h caml/s.h \ - caml/mlvalues.h caml/custom.h caml/fail.h caml/intext.h caml/io.h \ - caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h \ - caml/minor_gc.h caml/address_class.h + caml/mlvalues.h caml/custom.h caml/fail.h caml/intext.h caml/io.h \ + caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/misc.h caml/mlvalues.h io_bpic.$(O): io.c caml/config.h caml/m.h caml/s.h caml/alloc.h caml/misc.h \ - caml/mlvalues.h caml/custom.h caml/fail.h caml/io.h caml/memory.h \ - caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ - caml/address_class.h caml/osdeps.h caml/signals.h caml/sys.h + caml/config.h caml/mlvalues.h caml/custom.h caml/fail.h caml/io.h \ + caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/misc.h caml/mlvalues.h caml/osdeps.h \ + caml/memory.h caml/signals.h caml/sys.h lexing_bpic.$(O): lexing.c caml/fail.h caml/misc.h caml/config.h caml/m.h \ - caml/s.h caml/mlvalues.h caml/stacks.h caml/memory.h caml/gc.h \ - caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h + caml/s.h caml/mlvalues.h caml/mlvalues.h caml/stacks.h caml/memory.h \ + caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h main_bpic.$(O): main.c caml/misc.h caml/config.h caml/m.h caml/s.h \ - caml/mlvalues.h caml/sys.h caml/osdeps.h caml/memory.h caml/gc.h \ - caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h + caml/mlvalues.h caml/misc.h caml/sys.h caml/osdeps.h caml/memory.h \ + caml/gc.h caml/mlvalues.h caml/major_gc.h caml/freelist.h \ + caml/minor_gc.h caml/address_class.h major_gc_bpic.$(O): major_gc.c caml/compact.h caml/config.h caml/m.h caml/s.h \ - caml/misc.h caml/mlvalues.h caml/custom.h caml/fail.h caml/finalise.h \ - caml/roots.h caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h \ - caml/minor_gc.h caml/address_class.h caml/gc_ctrl.h caml/signals.h \ - caml/weak.h + caml/misc.h caml/mlvalues.h caml/custom.h caml/config.h caml/fail.h \ + caml/finalise.h caml/roots.h caml/memory.h caml/gc.h caml/major_gc.h \ + caml/freelist.h caml/minor_gc.h caml/address_class.h caml/freelist.h \ + caml/gc.h caml/gc_ctrl.h caml/major_gc.h caml/misc.h caml/mlvalues.h \ + caml/roots.h caml/signals.h caml/weak.h md5_bpic.$(O): md5.c caml/alloc.h caml/misc.h caml/config.h caml/m.h caml/s.h \ - caml/mlvalues.h caml/fail.h caml/md5.h caml/io.h caml/memory.h \ - caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ - caml/address_class.h caml/reverse.h + caml/mlvalues.h caml/fail.h caml/md5.h caml/io.h caml/memory.h caml/gc.h \ + caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ + caml/mlvalues.h caml/io.h caml/reverse.h memory_bpic.$(O): memory.c caml/address_class.h caml/config.h caml/m.h caml/s.h \ - caml/misc.h caml/mlvalues.h caml/fail.h caml/freelist.h caml/gc.h \ - caml/gc_ctrl.h caml/major_gc.h caml/memory.h caml/minor_gc.h \ - caml/signals.h + caml/misc.h caml/mlvalues.h caml/config.h caml/fail.h caml/freelist.h \ + caml/gc.h caml/gc_ctrl.h caml/major_gc.h caml/freelist.h caml/memory.h \ + caml/gc.h caml/major_gc.h caml/minor_gc.h caml/address_class.h \ + caml/minor_gc.h caml/misc.h caml/mlvalues.h caml/signals.h meta_bpic.$(O): meta.c caml/alloc.h caml/misc.h caml/config.h caml/m.h caml/s.h \ - caml/mlvalues.h caml/fail.h caml/fix_code.h caml/interp.h \ - caml/intext.h caml/io.h caml/major_gc.h caml/freelist.h caml/memory.h \ - caml/gc.h caml/minor_gc.h caml/address_class.h caml/prims.h \ - caml/stacks.h caml/backtrace_prim.h caml/backtrace.h caml/exec.h + caml/mlvalues.h caml/config.h caml/fail.h caml/fix_code.h caml/interp.h \ + caml/intext.h caml/io.h caml/major_gc.h caml/freelist.h caml/memory.h \ + caml/gc.h caml/major_gc.h caml/minor_gc.h caml/address_class.h \ + caml/minor_gc.h caml/misc.h caml/mlvalues.h caml/prims.h caml/stacks.h \ + caml/memory.h caml/backtrace_prim.h caml/backtrace.h caml/exec.h minor_gc_bpic.$(O): minor_gc.c caml/custom.h caml/mlvalues.h caml/config.h \ - caml/m.h caml/s.h caml/misc.h caml/fail.h caml/finalise.h caml/roots.h \ - caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h \ - caml/minor_gc.h caml/address_class.h caml/gc_ctrl.h caml/signals.h \ - caml/weak.h -misc_bpic.$(O): misc.c caml/config.h caml/m.h caml/s.h caml/misc.h caml/memory.h \ - caml/gc.h caml/mlvalues.h caml/major_gc.h caml/freelist.h \ - caml/minor_gc.h caml/address_class.h caml/osdeps.h caml/version.h + caml/m.h caml/s.h caml/misc.h caml/config.h caml/fail.h caml/finalise.h \ + caml/roots.h caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h \ + caml/minor_gc.h caml/address_class.h caml/gc.h caml/gc_ctrl.h \ + caml/major_gc.h caml/memory.h caml/minor_gc.h caml/misc.h \ + caml/mlvalues.h caml/roots.h caml/signals.h caml/weak.h +misc_bpic.$(O): misc.c caml/config.h caml/m.h caml/s.h caml/misc.h caml/config.h \ + caml/memory.h caml/gc.h caml/mlvalues.h caml/misc.h caml/major_gc.h \ + caml/freelist.h caml/minor_gc.h caml/address_class.h caml/osdeps.h \ + caml/memory.h caml/version.h obj_bpic.$(O): obj.c caml/alloc.h caml/misc.h caml/config.h caml/m.h caml/s.h \ - caml/mlvalues.h caml/fail.h caml/gc.h caml/interp.h caml/major_gc.h \ - caml/freelist.h caml/memory.h caml/minor_gc.h caml/address_class.h \ - caml/prims.h caml/spacetime.h caml/io.h caml/stack.h + caml/mlvalues.h caml/fail.h caml/gc.h caml/interp.h caml/major_gc.h \ + caml/freelist.h caml/memory.h caml/gc.h caml/major_gc.h caml/minor_gc.h \ + caml/address_class.h caml/minor_gc.h caml/misc.h caml/mlvalues.h \ + caml/prims.h caml/spacetime.h caml/io.h caml/stack.h parsing_bpic.$(O): parsing.c caml/config.h caml/m.h caml/s.h caml/mlvalues.h \ - caml/misc.h caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h \ - caml/minor_gc.h caml/address_class.h caml/alloc.h + caml/config.h caml/misc.h caml/memory.h caml/gc.h caml/mlvalues.h \ + caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ + caml/alloc.h prims_bpic.$(O): prims.c caml/mlvalues.h caml/config.h caml/m.h caml/s.h \ - caml/misc.h caml/prims.h + caml/misc.h caml/prims.h printexc_bpic.$(O): printexc.c caml/backtrace.h caml/mlvalues.h caml/config.h \ - caml/m.h caml/s.h caml/misc.h caml/exec.h caml/callback.h \ - caml/debugger.h caml/fail.h caml/printexc.h caml/memory.h caml/gc.h \ - caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h + caml/m.h caml/s.h caml/misc.h caml/exec.h caml/callback.h \ + caml/debugger.h caml/fail.h caml/misc.h caml/mlvalues.h caml/printexc.h \ + caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h roots_byt_bpic.$(O): roots_byt.c caml/finalise.h caml/roots.h caml/misc.h \ - caml/config.h caml/m.h caml/s.h caml/memory.h caml/gc.h \ - caml/mlvalues.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ - caml/address_class.h caml/globroots.h caml/stacks.h + caml/config.h caml/m.h caml/s.h caml/memory.h caml/gc.h caml/mlvalues.h \ + caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ + caml/globroots.h caml/major_gc.h caml/memory.h caml/minor_gc.h \ + caml/misc.h caml/mlvalues.h caml/roots.h caml/stacks.h roots_nat_bpic.$(O): roots_nat.c caml/finalise.h caml/roots.h caml/misc.h \ - caml/config.h caml/m.h caml/s.h caml/memory.h caml/gc.h \ - caml/mlvalues.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ - caml/address_class.h caml/globroots.h caml/stack.h -signals_bpic.$(O): signals.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \ - caml/s.h caml/mlvalues.h caml/callback.h caml/fail.h caml/memory.h \ - caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ - caml/address_class.h caml/roots.h caml/signals.h \ - caml/signals_machdep.h caml/sys.h + caml/config.h caml/m.h caml/s.h caml/memory.h caml/gc.h caml/mlvalues.h \ + caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ + caml/globroots.h caml/memory.h caml/major_gc.h caml/minor_gc.h \ + caml/misc.h caml/mlvalues.h caml/stack.h caml/roots.h signals_byt_bpic.$(O): signals_byt.c caml/config.h caml/m.h caml/s.h \ - caml/memory.h caml/gc.h caml/mlvalues.h caml/misc.h caml/major_gc.h \ - caml/freelist.h caml/minor_gc.h caml/address_class.h caml/osdeps.h \ - caml/signals.h caml/signals_machdep.h + caml/memory.h caml/config.h caml/gc.h caml/mlvalues.h caml/misc.h \ + caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ + caml/osdeps.h caml/memory.h caml/signals.h caml/signals_machdep.h +signals_bpic.$(O): signals.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \ + caml/s.h caml/mlvalues.h caml/callback.h caml/config.h caml/fail.h \ + caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/misc.h caml/mlvalues.h caml/roots.h \ + caml/memory.h caml/signals.h caml/signals_machdep.h caml/sys.h signals_nat_bpic.$(O): signals_nat.c caml/fail.h caml/misc.h caml/config.h \ - caml/m.h caml/s.h caml/mlvalues.h caml/memory.h caml/gc.h \ - caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ - caml/osdeps.h caml/signals.h caml/signals_machdep.h signals_osdep.h \ - caml/stack.h caml/spacetime.h caml/io.h + caml/m.h caml/s.h caml/mlvalues.h caml/memory.h caml/gc.h \ + caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ + caml/osdeps.h caml/memory.h caml/signals.h caml/signals_machdep.h \ + signals_osdep.h caml/stack.h caml/spacetime.h caml/io.h caml/stack.h spacetime_byt_bpic.$(O): spacetime_byt.c caml/fail.h caml/misc.h caml/config.h \ - caml/m.h caml/s.h caml/mlvalues.h + caml/m.h caml/s.h caml/mlvalues.h caml/mlvalues.h spacetime_nat_bpic.$(O): spacetime_nat.c caml/config.h caml/m.h caml/s.h \ - caml/alloc.h caml/misc.h caml/mlvalues.h caml/backtrace_prim.h \ - caml/backtrace.h caml/exec.h caml/fail.h caml/gc.h caml/intext.h \ - caml/io.h caml/major_gc.h caml/freelist.h caml/memory.h \ - caml/minor_gc.h caml/address_class.h caml/osdeps.h caml/roots.h \ - caml/signals.h caml/stack.h caml/sys.h caml/spacetime.h + caml/alloc.h caml/misc.h caml/config.h caml/mlvalues.h \ + caml/backtrace_prim.h caml/backtrace.h caml/exec.h caml/fail.h caml/gc.h \ + caml/intext.h caml/io.h caml/major_gc.h caml/freelist.h caml/memory.h \ + caml/gc.h caml/major_gc.h caml/minor_gc.h caml/address_class.h \ + caml/minor_gc.h caml/misc.h caml/mlvalues.h caml/osdeps.h caml/memory.h \ + caml/roots.h caml/signals.h caml/stack.h caml/sys.h caml/spacetime.h \ + caml/stack.h spacetime_snapshot_bpic.$(O): spacetime_snapshot.c caml/alloc.h caml/misc.h \ - caml/config.h caml/m.h caml/s.h caml/mlvalues.h caml/backtrace_prim.h \ - caml/backtrace.h caml/exec.h caml/custom.h caml/fail.h caml/gc.h \ - caml/gc_ctrl.h caml/intext.h caml/io.h caml/major_gc.h caml/freelist.h \ - caml/memory.h caml/minor_gc.h caml/address_class.h caml/roots.h \ - caml/signals.h caml/stack.h caml/sys.h caml/spacetime.h + caml/config.h caml/m.h caml/s.h caml/mlvalues.h caml/backtrace_prim.h \ + caml/backtrace.h caml/exec.h caml/config.h caml/custom.h caml/fail.h \ + caml/gc.h caml/gc_ctrl.h caml/intext.h caml/io.h caml/major_gc.h \ + caml/freelist.h caml/memory.h caml/gc.h caml/major_gc.h caml/minor_gc.h \ + caml/address_class.h caml/minor_gc.h caml/misc.h caml/mlvalues.h \ + caml/roots.h caml/memory.h caml/signals.h caml/stack.h caml/sys.h \ + caml/spacetime.h caml/stack.h stacks_bpic.$(O): stacks.c caml/config.h caml/m.h caml/s.h caml/fail.h \ - caml/misc.h caml/mlvalues.h caml/stacks.h caml/memory.h caml/gc.h \ - caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h + caml/misc.h caml/config.h caml/mlvalues.h caml/misc.h caml/mlvalues.h \ + caml/stacks.h caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h \ + caml/minor_gc.h caml/address_class.h startup_aux_bpic.$(O): startup_aux.c caml/backtrace.h caml/mlvalues.h \ - caml/config.h caml/m.h caml/s.h caml/misc.h caml/exec.h caml/memory.h \ - caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ - caml/address_class.h caml/callback.h caml/dynlink.h caml/osdeps.h \ - caml/startup_aux.h + caml/config.h caml/m.h caml/s.h caml/misc.h caml/exec.h caml/memory.h \ + caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/callback.h caml/major_gc.h caml/dynlink.h \ + caml/osdeps.h caml/memory.h caml/startup_aux.h startup_byt_bpic.$(O): startup_byt.c caml/config.h caml/m.h caml/s.h caml/alloc.h \ - caml/misc.h caml/mlvalues.h caml/backtrace.h caml/exec.h \ - caml/callback.h caml/custom.h caml/debugger.h caml/dynlink.h \ - caml/fail.h caml/fix_code.h caml/freelist.h caml/gc_ctrl.h \ - caml/instrtrace.h caml/interp.h caml/intext.h caml/io.h caml/memory.h \ - caml/gc.h caml/major_gc.h caml/minor_gc.h caml/address_class.h \ - caml/osdeps.h caml/prims.h caml/printexc.h caml/reverse.h \ - caml/signals.h caml/stacks.h caml/sys.h caml/startup.h \ - caml/startup_aux.h caml/version.h + caml/misc.h caml/config.h caml/mlvalues.h caml/backtrace.h caml/exec.h \ + caml/callback.h caml/custom.h caml/debugger.h caml/dynlink.h caml/exec.h \ + caml/fail.h caml/fix_code.h caml/freelist.h caml/gc_ctrl.h \ + caml/instrtrace.h caml/interp.h caml/intext.h caml/io.h caml/io.h \ + caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/minor_gc.h caml/misc.h caml/mlvalues.h \ + caml/osdeps.h caml/memory.h caml/prims.h caml/printexc.h caml/reverse.h \ + caml/signals.h caml/stacks.h caml/sys.h caml/startup.h \ + caml/startup_aux.h caml/version.h startup_nat_bpic.$(O): startup_nat.c caml/callback.h caml/mlvalues.h \ - caml/config.h caml/m.h caml/s.h caml/misc.h caml/backtrace.h \ - caml/exec.h caml/custom.h caml/debugger.h caml/fail.h caml/freelist.h \ - caml/gc.h caml/gc_ctrl.h caml/intext.h caml/io.h caml/memory.h \ - caml/major_gc.h caml/minor_gc.h caml/address_class.h caml/osdeps.h \ - caml/printexc.h caml/stack.h caml/startup_aux.h caml/sys.h + caml/config.h caml/m.h caml/s.h caml/misc.h caml/backtrace.h caml/exec.h \ + caml/custom.h caml/debugger.h caml/fail.h caml/freelist.h caml/gc.h \ + caml/gc_ctrl.h caml/intext.h caml/io.h caml/memory.h caml/gc.h \ + caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ + caml/misc.h caml/mlvalues.h caml/osdeps.h caml/memory.h caml/printexc.h \ + caml/stack.h caml/startup_aux.h caml/sys.h str_bpic.$(O): str.c caml/alloc.h caml/misc.h caml/config.h caml/m.h caml/s.h \ - caml/mlvalues.h caml/fail.h caml/memory.h caml/gc.h caml/major_gc.h \ - caml/freelist.h caml/minor_gc.h caml/address_class.h + caml/mlvalues.h caml/fail.h caml/memory.h caml/gc.h caml/major_gc.h \ + caml/freelist.h caml/minor_gc.h caml/address_class.h caml/mlvalues.h \ + caml/misc.h sys_bpic.$(O): sys.c caml/config.h caml/m.h caml/s.h caml/alloc.h caml/misc.h \ - caml/mlvalues.h caml/debugger.h caml/fail.h caml/gc_ctrl.h caml/io.h \ - caml/osdeps.h caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h \ - caml/minor_gc.h caml/address_class.h caml/signals.h caml/stacks.h \ - caml/sys.h caml/version.h caml/callback.h caml/startup_aux.h + caml/config.h caml/mlvalues.h caml/debugger.h caml/fail.h caml/gc_ctrl.h \ + caml/io.h caml/misc.h caml/mlvalues.h caml/osdeps.h caml/memory.h \ + caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/signals.h caml/stacks.h caml/sys.h \ + caml/version.h caml/callback.h caml/startup_aux.h unix_bpic.$(O): unix.c caml/config.h caml/m.h caml/s.h caml/fail.h caml/misc.h \ - caml/mlvalues.h caml/memory.h caml/gc.h caml/major_gc.h \ - caml/freelist.h caml/minor_gc.h caml/address_class.h caml/osdeps.h \ - caml/signals.h caml/sys.h caml/io.h caml/alloc.h + caml/config.h caml/mlvalues.h caml/memory.h caml/gc.h caml/major_gc.h \ + caml/freelist.h caml/minor_gc.h caml/address_class.h caml/misc.h \ + caml/osdeps.h caml/memory.h caml/signals.h caml/sys.h caml/io.h \ + caml/alloc.h weak_bpic.$(O): weak.c caml/alloc.h caml/misc.h caml/config.h caml/m.h caml/s.h \ - caml/mlvalues.h caml/fail.h caml/major_gc.h caml/freelist.h \ - caml/memory.h caml/gc.h caml/minor_gc.h caml/address_class.h \ - caml/weak.h caml/signals.h -afl_n.$(O): afl.c caml/config.h caml/m.h caml/s.h caml/misc.h caml/mlvalues.h \ - caml/osdeps.h caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h \ - caml/minor_gc.h caml/address_class.h + caml/mlvalues.h caml/fail.h caml/major_gc.h caml/freelist.h \ + caml/memory.h caml/gc.h caml/major_gc.h caml/minor_gc.h \ + caml/address_class.h caml/mlvalues.h caml/weak.h caml/minor_gc.h \ + caml/signals.h +win32_bpic.$(O): win32.c caml/alloc.h caml/misc.h caml/config.h caml/m.h caml/s.h \ + caml/mlvalues.h caml/address_class.h caml/fail.h caml/io.h caml/memory.h \ + caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/misc.h caml/osdeps.h caml/memory.h \ + caml/signals.h caml/sys.h caml/config.h +afl_n.$(O): afl.c caml/config.h caml/m.h caml/s.h caml/misc.h caml/config.h \ + caml/mlvalues.h caml/misc.h caml/osdeps.h caml/memory.h caml/gc.h \ + caml/mlvalues.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h alloc_n.$(O): alloc.c caml/alloc.h caml/misc.h caml/config.h caml/m.h caml/s.h \ - caml/mlvalues.h caml/custom.h caml/major_gc.h caml/freelist.h \ - caml/memory.h caml/gc.h caml/minor_gc.h caml/address_class.h \ - caml/stacks.h + caml/mlvalues.h caml/custom.h caml/major_gc.h caml/freelist.h \ + caml/memory.h caml/gc.h caml/major_gc.h caml/minor_gc.h \ + caml/address_class.h caml/mlvalues.h caml/stacks.h caml/memory.h array_n.$(O): array.c caml/alloc.h caml/misc.h caml/config.h caml/m.h caml/s.h \ - caml/mlvalues.h caml/fail.h caml/memory.h caml/gc.h caml/major_gc.h \ - caml/freelist.h caml/minor_gc.h caml/address_class.h caml/signals.h \ - caml/spacetime.h caml/io.h caml/stack.h -backtrace_n.$(O): backtrace.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \ - caml/s.h caml/mlvalues.h caml/memory.h caml/gc.h caml/major_gc.h \ - caml/freelist.h caml/minor_gc.h caml/address_class.h caml/backtrace.h \ - caml/exec.h caml/backtrace_prim.h caml/fail.h + caml/mlvalues.h caml/fail.h caml/memory.h caml/gc.h caml/major_gc.h \ + caml/freelist.h caml/minor_gc.h caml/address_class.h caml/misc.h \ + caml/mlvalues.h caml/signals.h caml/spacetime.h caml/io.h caml/stack.h backtrace_byt_n.$(O): backtrace_byt.c caml/config.h caml/m.h caml/s.h \ - caml/mlvalues.h caml/misc.h caml/alloc.h caml/custom.h caml/io.h \ - caml/instruct.h caml/intext.h caml/exec.h caml/fix_code.h \ - caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h \ - caml/minor_gc.h caml/address_class.h caml/startup.h caml/stacks.h \ - caml/sys.h caml/backtrace.h caml/fail.h caml/backtrace_prim.h + caml/mlvalues.h caml/config.h caml/misc.h caml/alloc.h caml/mlvalues.h \ + caml/custom.h caml/io.h caml/instruct.h caml/intext.h caml/io.h \ + caml/exec.h caml/fix_code.h caml/memory.h caml/gc.h caml/major_gc.h \ + caml/freelist.h caml/minor_gc.h caml/address_class.h caml/startup.h \ + caml/exec.h caml/stacks.h caml/memory.h caml/sys.h caml/backtrace.h \ + caml/fail.h caml/backtrace_prim.h caml/backtrace.h +backtrace_n.$(O): backtrace.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \ + caml/s.h caml/mlvalues.h caml/memory.h caml/gc.h caml/major_gc.h \ + caml/freelist.h caml/minor_gc.h caml/address_class.h caml/backtrace.h \ + caml/exec.h caml/backtrace_prim.h caml/backtrace.h caml/fail.h backtrace_nat_n.$(O): backtrace_nat.c caml/alloc.h caml/misc.h caml/config.h \ - caml/m.h caml/s.h caml/mlvalues.h caml/backtrace.h caml/exec.h \ - caml/backtrace_prim.h caml/memory.h caml/gc.h caml/major_gc.h \ - caml/freelist.h caml/minor_gc.h caml/address_class.h caml/stack.h + caml/m.h caml/s.h caml/mlvalues.h caml/backtrace.h caml/exec.h \ + caml/backtrace_prim.h caml/backtrace.h caml/memory.h caml/gc.h \ + caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ + caml/misc.h caml/mlvalues.h caml/stack.h bigarray_n.$(O): bigarray.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \ - caml/s.h caml/mlvalues.h caml/bigarray.h caml/custom.h caml/fail.h \ - caml/intext.h caml/io.h caml/hash.h caml/memory.h caml/gc.h \ - caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ - caml/signals.h + caml/s.h caml/mlvalues.h caml/bigarray.h caml/custom.h caml/fail.h \ + caml/intext.h caml/io.h caml/hash.h caml/memory.h caml/gc.h \ + caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ + caml/mlvalues.h caml/signals.h callback_n.$(O): callback.c caml/callback.h caml/mlvalues.h caml/config.h \ - caml/m.h caml/s.h caml/misc.h caml/fail.h caml/memory.h caml/gc.h \ - caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h + caml/m.h caml/s.h caml/misc.h caml/fail.h caml/memory.h caml/gc.h \ + caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ + caml/mlvalues.h clambda_checks_n.$(O): clambda_checks.c caml/mlvalues.h caml/config.h caml/m.h \ - caml/s.h caml/misc.h + caml/s.h caml/misc.h compact_n.$(O): compact.c caml/address_class.h caml/config.h caml/m.h caml/s.h \ - caml/misc.h caml/mlvalues.h caml/finalise.h caml/roots.h caml/memory.h \ - caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ - caml/gc_ctrl.h caml/weak.h caml/compact.h + caml/misc.h caml/mlvalues.h caml/config.h caml/finalise.h caml/roots.h \ + caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/freelist.h caml/gc.h caml/gc_ctrl.h \ + caml/major_gc.h caml/memory.h caml/mlvalues.h caml/roots.h caml/weak.h \ + caml/compact.h compare_n.$(O): compare.c caml/custom.h caml/mlvalues.h caml/config.h caml/m.h \ - caml/s.h caml/misc.h caml/fail.h caml/memory.h caml/gc.h \ - caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h + caml/s.h caml/misc.h caml/fail.h caml/memory.h caml/gc.h caml/major_gc.h \ + caml/freelist.h caml/minor_gc.h caml/address_class.h caml/misc.h \ + caml/mlvalues.h custom_n.$(O): custom.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \ - caml/s.h caml/mlvalues.h caml/custom.h caml/fail.h caml/gc_ctrl.h \ - caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h \ - caml/minor_gc.h caml/address_class.h caml/signals.h + caml/s.h caml/mlvalues.h caml/custom.h caml/fail.h caml/gc_ctrl.h \ + caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/mlvalues.h caml/signals.h debugger_n.$(O): debugger.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \ - caml/s.h caml/mlvalues.h caml/debugger.h caml/osdeps.h caml/memory.h \ - caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ - caml/address_class.h + caml/s.h caml/mlvalues.h caml/config.h caml/debugger.h caml/misc.h \ + caml/osdeps.h caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h \ + caml/minor_gc.h caml/address_class.h dynlink_n.$(O): dynlink.c caml/config.h caml/m.h caml/s.h caml/alloc.h \ - caml/misc.h caml/mlvalues.h caml/dynlink.h caml/fail.h caml/memory.h \ - caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ - caml/address_class.h caml/osdeps.h caml/prims.h caml/signals.h + caml/misc.h caml/config.h caml/mlvalues.h caml/dynlink.h caml/fail.h \ + caml/mlvalues.h caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h \ + caml/minor_gc.h caml/address_class.h caml/misc.h caml/osdeps.h \ + caml/memory.h caml/prims.h caml/signals.h dynlink_nat_n.$(O): dynlink_nat.c caml/misc.h caml/config.h caml/m.h caml/s.h \ - caml/mlvalues.h caml/memory.h caml/gc.h caml/major_gc.h \ - caml/freelist.h caml/minor_gc.h caml/address_class.h caml/stack.h \ - caml/callback.h caml/alloc.h caml/intext.h caml/io.h caml/osdeps.h \ - caml/fail.h caml/signals.h caml/hooks.h + caml/mlvalues.h caml/misc.h caml/memory.h caml/gc.h caml/mlvalues.h \ + caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ + caml/stack.h caml/callback.h caml/alloc.h caml/intext.h caml/io.h \ + caml/osdeps.h caml/memory.h caml/fail.h caml/signals.h caml/hooks.h extern_n.$(O): extern.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \ - caml/s.h caml/mlvalues.h caml/custom.h caml/fail.h caml/gc.h \ - caml/intext.h caml/io.h caml/md5.h caml/memory.h caml/major_gc.h \ - caml/freelist.h caml/minor_gc.h caml/address_class.h caml/reverse.h + caml/s.h caml/mlvalues.h caml/config.h caml/custom.h caml/fail.h \ + caml/gc.h caml/intext.h caml/io.h caml/io.h caml/md5.h caml/memory.h \ + caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/misc.h caml/mlvalues.h caml/reverse.h fail_byt_n.$(O): fail_byt.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \ - caml/s.h caml/mlvalues.h caml/fail.h caml/io.h caml/gc.h caml/memory.h \ - caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ - caml/printexc.h caml/signals.h caml/stacks.h + caml/s.h caml/mlvalues.h caml/fail.h caml/io.h caml/gc.h caml/memory.h \ + caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/misc.h caml/mlvalues.h caml/printexc.h \ + caml/signals.h caml/stacks.h caml/memory.h fail_nat_n.$(O): fail_nat.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \ - caml/s.h caml/mlvalues.h caml/fail.h caml/io.h caml/gc.h caml/memory.h \ - caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ - caml/printexc.h caml/signals.h caml/stack.h caml/roots.h \ - caml/callback.h + caml/s.h caml/mlvalues.h caml/fail.h caml/io.h caml/gc.h caml/memory.h \ + caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/mlvalues.h caml/printexc.h caml/signals.h \ + caml/stack.h caml/roots.h caml/memory.h caml/callback.h finalise_n.$(O): finalise.c caml/callback.h caml/mlvalues.h caml/config.h \ - caml/m.h caml/s.h caml/misc.h caml/compact.h caml/fail.h \ - caml/finalise.h caml/roots.h caml/memory.h caml/gc.h caml/major_gc.h \ - caml/freelist.h caml/minor_gc.h caml/address_class.h caml/signals.h + caml/m.h caml/s.h caml/misc.h caml/compact.h caml/fail.h caml/finalise.h \ + caml/roots.h caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h \ + caml/minor_gc.h caml/address_class.h caml/minor_gc.h caml/mlvalues.h \ + caml/roots.h caml/signals.h fix_code_n.$(O): fix_code.c caml/config.h caml/m.h caml/s.h caml/debugger.h \ - caml/misc.h caml/mlvalues.h caml/fix_code.h caml/instruct.h \ - caml/intext.h caml/io.h caml/md5.h caml/memory.h caml/gc.h \ - caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ - caml/reverse.h + caml/misc.h caml/config.h caml/mlvalues.h caml/fix_code.h \ + caml/instruct.h caml/intext.h caml/io.h caml/md5.h caml/memory.h \ + caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/misc.h caml/mlvalues.h caml/reverse.h floats_n.$(O): floats.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \ - caml/s.h caml/mlvalues.h caml/fail.h caml/memory.h caml/gc.h \ - caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ - caml/reverse.h caml/stacks.h + caml/s.h caml/mlvalues.h caml/fail.h caml/memory.h caml/gc.h \ + caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ + caml/mlvalues.h caml/misc.h caml/reverse.h caml/stacks.h caml/memory.h freelist_n.$(O): freelist.c caml/config.h caml/m.h caml/s.h caml/freelist.h \ - caml/misc.h caml/mlvalues.h caml/gc.h caml/gc_ctrl.h caml/memory.h \ - caml/major_gc.h caml/minor_gc.h caml/address_class.h + caml/misc.h caml/config.h caml/mlvalues.h caml/gc.h caml/gc_ctrl.h \ + caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/major_gc.h caml/misc.h caml/mlvalues.h gc_ctrl_n.$(O): gc_ctrl.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \ - caml/s.h caml/mlvalues.h caml/backtrace.h caml/exec.h caml/compact.h \ - caml/custom.h caml/fail.h caml/finalise.h caml/roots.h caml/memory.h \ - caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ - caml/address_class.h caml/gc_ctrl.h caml/signals.h caml/stack.h \ - caml/startup_aux.h + caml/s.h caml/mlvalues.h caml/backtrace.h caml/exec.h caml/compact.h \ + caml/custom.h caml/fail.h caml/finalise.h caml/roots.h caml/memory.h \ + caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/freelist.h caml/gc.h caml/gc_ctrl.h \ + caml/major_gc.h caml/memory.h caml/minor_gc.h caml/misc.h \ + caml/mlvalues.h caml/signals.h caml/stack.h caml/startup_aux.h globroots_n.$(O): globroots.c caml/memory.h caml/config.h caml/m.h caml/s.h \ - caml/gc.h caml/mlvalues.h caml/misc.h caml/major_gc.h caml/freelist.h \ - caml/minor_gc.h caml/address_class.h caml/roots.h caml/globroots.h + caml/gc.h caml/mlvalues.h caml/misc.h caml/major_gc.h caml/freelist.h \ + caml/minor_gc.h caml/address_class.h caml/misc.h caml/mlvalues.h \ + caml/roots.h caml/memory.h caml/globroots.h caml/roots.h hash_n.$(O): hash.c caml/mlvalues.h caml/config.h caml/m.h caml/s.h \ - caml/misc.h caml/custom.h caml/memory.h caml/gc.h caml/major_gc.h \ - caml/freelist.h caml/minor_gc.h caml/address_class.h caml/hash.h + caml/misc.h caml/custom.h caml/mlvalues.h caml/memory.h caml/gc.h \ + caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ + caml/hash.h instrtrace_n.$(O): instrtrace.c intern_n.$(O): intern.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \ - caml/s.h caml/mlvalues.h caml/callback.h caml/custom.h caml/fail.h \ - caml/gc.h caml/intext.h caml/io.h caml/md5.h caml/memory.h \ - caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ - caml/reverse.h + caml/s.h caml/mlvalues.h caml/callback.h caml/config.h caml/custom.h \ + caml/fail.h caml/gc.h caml/intext.h caml/io.h caml/io.h caml/md5.h \ + caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/mlvalues.h caml/misc.h caml/reverse.h interp_n.$(O): interp.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \ - caml/s.h caml/mlvalues.h caml/backtrace.h caml/exec.h caml/callback.h \ - caml/debugger.h caml/fail.h caml/fix_code.h caml/instrtrace.h \ - caml/instruct.h caml/interp.h caml/major_gc.h caml/freelist.h \ - caml/memory.h caml/gc.h caml/minor_gc.h caml/address_class.h \ - caml/prims.h caml/signals.h caml/stacks.h caml/startup_aux.h \ - caml/jumptbl.h + caml/s.h caml/mlvalues.h caml/backtrace.h caml/exec.h caml/callback.h \ + caml/debugger.h caml/fail.h caml/fix_code.h caml/instrtrace.h \ + caml/instruct.h caml/interp.h caml/major_gc.h caml/freelist.h \ + caml/memory.h caml/gc.h caml/major_gc.h caml/minor_gc.h \ + caml/address_class.h caml/misc.h caml/mlvalues.h caml/prims.h \ + caml/signals.h caml/stacks.h caml/memory.h caml/startup_aux.h \ + caml/jumptbl.h ints_n.$(O): ints.c caml/alloc.h caml/misc.h caml/config.h caml/m.h caml/s.h \ - caml/mlvalues.h caml/custom.h caml/fail.h caml/intext.h caml/io.h \ - caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h \ - caml/minor_gc.h caml/address_class.h + caml/mlvalues.h caml/custom.h caml/fail.h caml/intext.h caml/io.h \ + caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/misc.h caml/mlvalues.h io_n.$(O): io.c caml/config.h caml/m.h caml/s.h caml/alloc.h caml/misc.h \ - caml/mlvalues.h caml/custom.h caml/fail.h caml/io.h caml/memory.h \ - caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ - caml/address_class.h caml/osdeps.h caml/signals.h caml/sys.h + caml/config.h caml/mlvalues.h caml/custom.h caml/fail.h caml/io.h \ + caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/misc.h caml/mlvalues.h caml/osdeps.h \ + caml/memory.h caml/signals.h caml/sys.h lexing_n.$(O): lexing.c caml/fail.h caml/misc.h caml/config.h caml/m.h \ - caml/s.h caml/mlvalues.h caml/stacks.h caml/memory.h caml/gc.h \ - caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h + caml/s.h caml/mlvalues.h caml/mlvalues.h caml/stacks.h caml/memory.h \ + caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h main_n.$(O): main.c caml/misc.h caml/config.h caml/m.h caml/s.h \ - caml/mlvalues.h caml/sys.h caml/osdeps.h caml/memory.h caml/gc.h \ - caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h + caml/mlvalues.h caml/misc.h caml/sys.h caml/osdeps.h caml/memory.h \ + caml/gc.h caml/mlvalues.h caml/major_gc.h caml/freelist.h \ + caml/minor_gc.h caml/address_class.h major_gc_n.$(O): major_gc.c caml/compact.h caml/config.h caml/m.h caml/s.h \ - caml/misc.h caml/mlvalues.h caml/custom.h caml/fail.h caml/finalise.h \ - caml/roots.h caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h \ - caml/minor_gc.h caml/address_class.h caml/gc_ctrl.h caml/signals.h \ - caml/weak.h + caml/misc.h caml/mlvalues.h caml/custom.h caml/config.h caml/fail.h \ + caml/finalise.h caml/roots.h caml/memory.h caml/gc.h caml/major_gc.h \ + caml/freelist.h caml/minor_gc.h caml/address_class.h caml/freelist.h \ + caml/gc.h caml/gc_ctrl.h caml/major_gc.h caml/misc.h caml/mlvalues.h \ + caml/roots.h caml/signals.h caml/weak.h md5_n.$(O): md5.c caml/alloc.h caml/misc.h caml/config.h caml/m.h caml/s.h \ - caml/mlvalues.h caml/fail.h caml/md5.h caml/io.h caml/memory.h \ - caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ - caml/address_class.h caml/reverse.h + caml/mlvalues.h caml/fail.h caml/md5.h caml/io.h caml/memory.h caml/gc.h \ + caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ + caml/mlvalues.h caml/io.h caml/reverse.h memory_n.$(O): memory.c caml/address_class.h caml/config.h caml/m.h caml/s.h \ - caml/misc.h caml/mlvalues.h caml/fail.h caml/freelist.h caml/gc.h \ - caml/gc_ctrl.h caml/major_gc.h caml/memory.h caml/minor_gc.h \ - caml/signals.h + caml/misc.h caml/mlvalues.h caml/config.h caml/fail.h caml/freelist.h \ + caml/gc.h caml/gc_ctrl.h caml/major_gc.h caml/freelist.h caml/memory.h \ + caml/gc.h caml/major_gc.h caml/minor_gc.h caml/address_class.h \ + caml/minor_gc.h caml/misc.h caml/mlvalues.h caml/signals.h meta_n.$(O): meta.c caml/alloc.h caml/misc.h caml/config.h caml/m.h caml/s.h \ - caml/mlvalues.h caml/fail.h caml/fix_code.h caml/interp.h \ - caml/intext.h caml/io.h caml/major_gc.h caml/freelist.h caml/memory.h \ - caml/gc.h caml/minor_gc.h caml/address_class.h caml/prims.h \ - caml/stacks.h caml/backtrace_prim.h caml/backtrace.h caml/exec.h + caml/mlvalues.h caml/config.h caml/fail.h caml/fix_code.h caml/interp.h \ + caml/intext.h caml/io.h caml/major_gc.h caml/freelist.h caml/memory.h \ + caml/gc.h caml/major_gc.h caml/minor_gc.h caml/address_class.h \ + caml/minor_gc.h caml/misc.h caml/mlvalues.h caml/prims.h caml/stacks.h \ + caml/memory.h caml/backtrace_prim.h caml/backtrace.h caml/exec.h minor_gc_n.$(O): minor_gc.c caml/custom.h caml/mlvalues.h caml/config.h \ - caml/m.h caml/s.h caml/misc.h caml/fail.h caml/finalise.h caml/roots.h \ - caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h \ - caml/minor_gc.h caml/address_class.h caml/gc_ctrl.h caml/signals.h \ - caml/weak.h -misc_n.$(O): misc.c caml/config.h caml/m.h caml/s.h caml/misc.h caml/memory.h \ - caml/gc.h caml/mlvalues.h caml/major_gc.h caml/freelist.h \ - caml/minor_gc.h caml/address_class.h caml/osdeps.h caml/version.h + caml/m.h caml/s.h caml/misc.h caml/config.h caml/fail.h caml/finalise.h \ + caml/roots.h caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h \ + caml/minor_gc.h caml/address_class.h caml/gc.h caml/gc_ctrl.h \ + caml/major_gc.h caml/memory.h caml/minor_gc.h caml/misc.h \ + caml/mlvalues.h caml/roots.h caml/signals.h caml/weak.h +misc_n.$(O): misc.c caml/config.h caml/m.h caml/s.h caml/misc.h caml/config.h \ + caml/memory.h caml/gc.h caml/mlvalues.h caml/misc.h caml/major_gc.h \ + caml/freelist.h caml/minor_gc.h caml/address_class.h caml/osdeps.h \ + caml/memory.h caml/version.h obj_n.$(O): obj.c caml/alloc.h caml/misc.h caml/config.h caml/m.h caml/s.h \ - caml/mlvalues.h caml/fail.h caml/gc.h caml/interp.h caml/major_gc.h \ - caml/freelist.h caml/memory.h caml/minor_gc.h caml/address_class.h \ - caml/prims.h caml/spacetime.h caml/io.h caml/stack.h + caml/mlvalues.h caml/fail.h caml/gc.h caml/interp.h caml/major_gc.h \ + caml/freelist.h caml/memory.h caml/gc.h caml/major_gc.h caml/minor_gc.h \ + caml/address_class.h caml/minor_gc.h caml/misc.h caml/mlvalues.h \ + caml/prims.h caml/spacetime.h caml/io.h caml/stack.h parsing_n.$(O): parsing.c caml/config.h caml/m.h caml/s.h caml/mlvalues.h \ - caml/misc.h caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h \ - caml/minor_gc.h caml/address_class.h caml/alloc.h + caml/config.h caml/misc.h caml/memory.h caml/gc.h caml/mlvalues.h \ + caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ + caml/alloc.h prims_n.$(O): prims.c caml/mlvalues.h caml/config.h caml/m.h caml/s.h \ - caml/misc.h caml/prims.h + caml/misc.h caml/prims.h printexc_n.$(O): printexc.c caml/backtrace.h caml/mlvalues.h caml/config.h \ - caml/m.h caml/s.h caml/misc.h caml/exec.h caml/callback.h \ - caml/debugger.h caml/fail.h caml/printexc.h caml/memory.h caml/gc.h \ - caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h + caml/m.h caml/s.h caml/misc.h caml/exec.h caml/callback.h \ + caml/debugger.h caml/fail.h caml/misc.h caml/mlvalues.h caml/printexc.h \ + caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h roots_byt_n.$(O): roots_byt.c caml/finalise.h caml/roots.h caml/misc.h \ - caml/config.h caml/m.h caml/s.h caml/memory.h caml/gc.h \ - caml/mlvalues.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ - caml/address_class.h caml/globroots.h caml/stacks.h + caml/config.h caml/m.h caml/s.h caml/memory.h caml/gc.h caml/mlvalues.h \ + caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ + caml/globroots.h caml/major_gc.h caml/memory.h caml/minor_gc.h \ + caml/misc.h caml/mlvalues.h caml/roots.h caml/stacks.h roots_nat_n.$(O): roots_nat.c caml/finalise.h caml/roots.h caml/misc.h \ - caml/config.h caml/m.h caml/s.h caml/memory.h caml/gc.h \ - caml/mlvalues.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ - caml/address_class.h caml/globroots.h caml/stack.h -signals_n.$(O): signals.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \ - caml/s.h caml/mlvalues.h caml/callback.h caml/fail.h caml/memory.h \ - caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ - caml/address_class.h caml/roots.h caml/signals.h \ - caml/signals_machdep.h caml/sys.h + caml/config.h caml/m.h caml/s.h caml/memory.h caml/gc.h caml/mlvalues.h \ + caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ + caml/globroots.h caml/memory.h caml/major_gc.h caml/minor_gc.h \ + caml/misc.h caml/mlvalues.h caml/stack.h caml/roots.h signals_byt_n.$(O): signals_byt.c caml/config.h caml/m.h caml/s.h \ - caml/memory.h caml/gc.h caml/mlvalues.h caml/misc.h caml/major_gc.h \ - caml/freelist.h caml/minor_gc.h caml/address_class.h caml/osdeps.h \ - caml/signals.h caml/signals_machdep.h + caml/memory.h caml/config.h caml/gc.h caml/mlvalues.h caml/misc.h \ + caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ + caml/osdeps.h caml/memory.h caml/signals.h caml/signals_machdep.h +signals_n.$(O): signals.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \ + caml/s.h caml/mlvalues.h caml/callback.h caml/config.h caml/fail.h \ + caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/misc.h caml/mlvalues.h caml/roots.h \ + caml/memory.h caml/signals.h caml/signals_machdep.h caml/sys.h signals_nat_n.$(O): signals_nat.c caml/fail.h caml/misc.h caml/config.h \ - caml/m.h caml/s.h caml/mlvalues.h caml/memory.h caml/gc.h \ - caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ - caml/osdeps.h caml/signals.h caml/signals_machdep.h signals_osdep.h \ - caml/stack.h caml/spacetime.h caml/io.h + caml/m.h caml/s.h caml/mlvalues.h caml/memory.h caml/gc.h \ + caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ + caml/osdeps.h caml/memory.h caml/signals.h caml/signals_machdep.h \ + signals_osdep.h caml/stack.h caml/spacetime.h caml/io.h caml/stack.h spacetime_byt_n.$(O): spacetime_byt.c caml/fail.h caml/misc.h caml/config.h \ - caml/m.h caml/s.h caml/mlvalues.h + caml/m.h caml/s.h caml/mlvalues.h caml/mlvalues.h spacetime_nat_n.$(O): spacetime_nat.c caml/config.h caml/m.h caml/s.h \ - caml/alloc.h caml/misc.h caml/mlvalues.h caml/backtrace_prim.h \ - caml/backtrace.h caml/exec.h caml/fail.h caml/gc.h caml/intext.h \ - caml/io.h caml/major_gc.h caml/freelist.h caml/memory.h \ - caml/minor_gc.h caml/address_class.h caml/osdeps.h caml/roots.h \ - caml/signals.h caml/stack.h caml/sys.h caml/spacetime.h + caml/alloc.h caml/misc.h caml/config.h caml/mlvalues.h \ + caml/backtrace_prim.h caml/backtrace.h caml/exec.h caml/fail.h caml/gc.h \ + caml/intext.h caml/io.h caml/major_gc.h caml/freelist.h caml/memory.h \ + caml/gc.h caml/major_gc.h caml/minor_gc.h caml/address_class.h \ + caml/minor_gc.h caml/misc.h caml/mlvalues.h caml/osdeps.h caml/memory.h \ + caml/roots.h caml/signals.h caml/stack.h caml/sys.h caml/spacetime.h \ + caml/stack.h spacetime_snapshot_n.$(O): spacetime_snapshot.c caml/alloc.h caml/misc.h \ - caml/config.h caml/m.h caml/s.h caml/mlvalues.h caml/backtrace_prim.h \ - caml/backtrace.h caml/exec.h caml/custom.h caml/fail.h caml/gc.h \ - caml/gc_ctrl.h caml/intext.h caml/io.h caml/major_gc.h caml/freelist.h \ - caml/memory.h caml/minor_gc.h caml/address_class.h caml/roots.h \ - caml/signals.h caml/stack.h caml/sys.h caml/spacetime.h + caml/config.h caml/m.h caml/s.h caml/mlvalues.h caml/backtrace_prim.h \ + caml/backtrace.h caml/exec.h caml/config.h caml/custom.h caml/fail.h \ + caml/gc.h caml/gc_ctrl.h caml/intext.h caml/io.h caml/major_gc.h \ + caml/freelist.h caml/memory.h caml/gc.h caml/major_gc.h caml/minor_gc.h \ + caml/address_class.h caml/minor_gc.h caml/misc.h caml/mlvalues.h \ + caml/roots.h caml/memory.h caml/signals.h caml/stack.h caml/sys.h \ + caml/spacetime.h caml/stack.h stacks_n.$(O): stacks.c caml/config.h caml/m.h caml/s.h caml/fail.h \ - caml/misc.h caml/mlvalues.h caml/stacks.h caml/memory.h caml/gc.h \ - caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h + caml/misc.h caml/config.h caml/mlvalues.h caml/misc.h caml/mlvalues.h \ + caml/stacks.h caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h \ + caml/minor_gc.h caml/address_class.h startup_aux_n.$(O): startup_aux.c caml/backtrace.h caml/mlvalues.h \ - caml/config.h caml/m.h caml/s.h caml/misc.h caml/exec.h caml/memory.h \ - caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ - caml/address_class.h caml/callback.h caml/osdeps.h caml/startup_aux.h + caml/config.h caml/m.h caml/s.h caml/misc.h caml/exec.h caml/memory.h \ + caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/callback.h caml/major_gc.h caml/osdeps.h \ + caml/memory.h caml/startup_aux.h startup_byt_n.$(O): startup_byt.c caml/config.h caml/m.h caml/s.h caml/alloc.h \ - caml/misc.h caml/mlvalues.h caml/backtrace.h caml/exec.h \ - caml/callback.h caml/custom.h caml/debugger.h caml/dynlink.h \ - caml/fail.h caml/fix_code.h caml/freelist.h caml/gc_ctrl.h \ - caml/instrtrace.h caml/interp.h caml/intext.h caml/io.h caml/memory.h \ - caml/gc.h caml/major_gc.h caml/minor_gc.h caml/address_class.h \ - caml/osdeps.h caml/prims.h caml/printexc.h caml/reverse.h \ - caml/signals.h caml/stacks.h caml/sys.h caml/startup.h \ - caml/startup_aux.h caml/version.h + caml/misc.h caml/config.h caml/mlvalues.h caml/backtrace.h caml/exec.h \ + caml/callback.h caml/custom.h caml/debugger.h caml/dynlink.h caml/exec.h \ + caml/fail.h caml/fix_code.h caml/freelist.h caml/gc_ctrl.h \ + caml/instrtrace.h caml/interp.h caml/intext.h caml/io.h caml/io.h \ + caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/minor_gc.h caml/misc.h caml/mlvalues.h \ + caml/osdeps.h caml/memory.h caml/prims.h caml/printexc.h caml/reverse.h \ + caml/signals.h caml/stacks.h caml/sys.h caml/startup.h \ + caml/startup_aux.h caml/version.h startup_nat_n.$(O): startup_nat.c caml/callback.h caml/mlvalues.h \ - caml/config.h caml/m.h caml/s.h caml/misc.h caml/backtrace.h \ - caml/exec.h caml/custom.h caml/debugger.h caml/fail.h caml/freelist.h \ - caml/gc.h caml/gc_ctrl.h caml/intext.h caml/io.h caml/memory.h \ - caml/major_gc.h caml/minor_gc.h caml/address_class.h caml/osdeps.h \ - caml/printexc.h caml/stack.h caml/startup_aux.h caml/sys.h + caml/config.h caml/m.h caml/s.h caml/misc.h caml/backtrace.h caml/exec.h \ + caml/custom.h caml/debugger.h caml/fail.h caml/freelist.h caml/gc.h \ + caml/gc_ctrl.h caml/intext.h caml/io.h caml/memory.h caml/gc.h \ + caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ + caml/misc.h caml/mlvalues.h caml/osdeps.h caml/memory.h caml/printexc.h \ + caml/stack.h caml/startup_aux.h caml/sys.h str_n.$(O): str.c caml/alloc.h caml/misc.h caml/config.h caml/m.h caml/s.h \ - caml/mlvalues.h caml/fail.h caml/memory.h caml/gc.h caml/major_gc.h \ - caml/freelist.h caml/minor_gc.h caml/address_class.h + caml/mlvalues.h caml/fail.h caml/memory.h caml/gc.h caml/major_gc.h \ + caml/freelist.h caml/minor_gc.h caml/address_class.h caml/mlvalues.h \ + caml/misc.h sys_n.$(O): sys.c caml/config.h caml/m.h caml/s.h caml/alloc.h caml/misc.h \ - caml/mlvalues.h caml/debugger.h caml/fail.h caml/gc_ctrl.h caml/io.h \ - caml/osdeps.h caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h \ - caml/minor_gc.h caml/address_class.h caml/signals.h caml/stacks.h \ - caml/sys.h caml/version.h caml/callback.h caml/startup_aux.h + caml/config.h caml/mlvalues.h caml/debugger.h caml/fail.h caml/gc_ctrl.h \ + caml/io.h caml/misc.h caml/mlvalues.h caml/osdeps.h caml/memory.h \ + caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/signals.h caml/stacks.h caml/sys.h \ + caml/version.h caml/callback.h caml/startup_aux.h unix_n.$(O): unix.c caml/config.h caml/m.h caml/s.h caml/fail.h caml/misc.h \ - caml/mlvalues.h caml/memory.h caml/gc.h caml/major_gc.h \ - caml/freelist.h caml/minor_gc.h caml/address_class.h caml/osdeps.h \ - caml/signals.h caml/sys.h caml/io.h caml/alloc.h + caml/config.h caml/mlvalues.h caml/memory.h caml/gc.h caml/major_gc.h \ + caml/freelist.h caml/minor_gc.h caml/address_class.h caml/misc.h \ + caml/osdeps.h caml/memory.h caml/signals.h caml/sys.h caml/io.h \ + caml/alloc.h weak_n.$(O): weak.c caml/alloc.h caml/misc.h caml/config.h caml/m.h caml/s.h \ - caml/mlvalues.h caml/fail.h caml/major_gc.h caml/freelist.h \ - caml/memory.h caml/gc.h caml/minor_gc.h caml/address_class.h \ - caml/weak.h caml/signals.h -afl_nd.$(O): afl.c caml/config.h caml/m.h caml/s.h caml/misc.h caml/mlvalues.h \ - caml/osdeps.h caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h \ - caml/minor_gc.h caml/address_class.h + caml/mlvalues.h caml/fail.h caml/major_gc.h caml/freelist.h \ + caml/memory.h caml/gc.h caml/major_gc.h caml/minor_gc.h \ + caml/address_class.h caml/mlvalues.h caml/weak.h caml/minor_gc.h \ + caml/signals.h +win32_n.$(O): win32.c caml/alloc.h caml/misc.h caml/config.h caml/m.h caml/s.h \ + caml/mlvalues.h caml/address_class.h caml/fail.h caml/io.h caml/memory.h \ + caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/misc.h caml/osdeps.h caml/memory.h \ + caml/signals.h caml/sys.h caml/config.h +afl_nd.$(O): afl.c caml/config.h caml/m.h caml/s.h caml/misc.h caml/config.h \ + caml/mlvalues.h caml/misc.h caml/osdeps.h caml/memory.h caml/gc.h \ + caml/mlvalues.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h alloc_nd.$(O): alloc.c caml/alloc.h caml/misc.h caml/config.h caml/m.h caml/s.h \ - caml/mlvalues.h caml/custom.h caml/major_gc.h caml/freelist.h \ - caml/memory.h caml/gc.h caml/minor_gc.h caml/address_class.h \ - caml/stacks.h + caml/mlvalues.h caml/custom.h caml/major_gc.h caml/freelist.h \ + caml/memory.h caml/gc.h caml/major_gc.h caml/minor_gc.h \ + caml/address_class.h caml/mlvalues.h caml/stacks.h caml/memory.h array_nd.$(O): array.c caml/alloc.h caml/misc.h caml/config.h caml/m.h caml/s.h \ - caml/mlvalues.h caml/fail.h caml/memory.h caml/gc.h caml/major_gc.h \ - caml/freelist.h caml/minor_gc.h caml/address_class.h caml/signals.h \ - caml/spacetime.h caml/io.h caml/stack.h -backtrace_nd.$(O): backtrace.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \ - caml/s.h caml/mlvalues.h caml/memory.h caml/gc.h caml/major_gc.h \ - caml/freelist.h caml/minor_gc.h caml/address_class.h caml/backtrace.h \ - caml/exec.h caml/backtrace_prim.h caml/fail.h + caml/mlvalues.h caml/fail.h caml/memory.h caml/gc.h caml/major_gc.h \ + caml/freelist.h caml/minor_gc.h caml/address_class.h caml/misc.h \ + caml/mlvalues.h caml/signals.h caml/spacetime.h caml/io.h caml/stack.h backtrace_byt_nd.$(O): backtrace_byt.c caml/config.h caml/m.h caml/s.h \ - caml/mlvalues.h caml/misc.h caml/alloc.h caml/custom.h caml/io.h \ - caml/instruct.h caml/intext.h caml/exec.h caml/fix_code.h \ - caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h \ - caml/minor_gc.h caml/address_class.h caml/startup.h caml/stacks.h \ - caml/sys.h caml/backtrace.h caml/fail.h caml/backtrace_prim.h + caml/mlvalues.h caml/config.h caml/misc.h caml/alloc.h caml/mlvalues.h \ + caml/custom.h caml/io.h caml/instruct.h caml/intext.h caml/io.h \ + caml/exec.h caml/fix_code.h caml/memory.h caml/gc.h caml/major_gc.h \ + caml/freelist.h caml/minor_gc.h caml/address_class.h caml/startup.h \ + caml/exec.h caml/stacks.h caml/memory.h caml/sys.h caml/backtrace.h \ + caml/fail.h caml/backtrace_prim.h caml/backtrace.h +backtrace_nd.$(O): backtrace.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \ + caml/s.h caml/mlvalues.h caml/memory.h caml/gc.h caml/major_gc.h \ + caml/freelist.h caml/minor_gc.h caml/address_class.h caml/backtrace.h \ + caml/exec.h caml/backtrace_prim.h caml/backtrace.h caml/fail.h backtrace_nat_nd.$(O): backtrace_nat.c caml/alloc.h caml/misc.h caml/config.h \ - caml/m.h caml/s.h caml/mlvalues.h caml/backtrace.h caml/exec.h \ - caml/backtrace_prim.h caml/memory.h caml/gc.h caml/major_gc.h \ - caml/freelist.h caml/minor_gc.h caml/address_class.h caml/stack.h + caml/m.h caml/s.h caml/mlvalues.h caml/backtrace.h caml/exec.h \ + caml/backtrace_prim.h caml/backtrace.h caml/memory.h caml/gc.h \ + caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ + caml/misc.h caml/mlvalues.h caml/stack.h bigarray_nd.$(O): bigarray.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \ - caml/s.h caml/mlvalues.h caml/bigarray.h caml/custom.h caml/fail.h \ - caml/intext.h caml/io.h caml/hash.h caml/memory.h caml/gc.h \ - caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ - caml/signals.h + caml/s.h caml/mlvalues.h caml/bigarray.h caml/custom.h caml/fail.h \ + caml/intext.h caml/io.h caml/hash.h caml/memory.h caml/gc.h \ + caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ + caml/mlvalues.h caml/signals.h callback_nd.$(O): callback.c caml/callback.h caml/mlvalues.h caml/config.h \ - caml/m.h caml/s.h caml/misc.h caml/fail.h caml/memory.h caml/gc.h \ - caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h + caml/m.h caml/s.h caml/misc.h caml/fail.h caml/memory.h caml/gc.h \ + caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ + caml/mlvalues.h clambda_checks_nd.$(O): clambda_checks.c caml/mlvalues.h caml/config.h caml/m.h \ - caml/s.h caml/misc.h + caml/s.h caml/misc.h compact_nd.$(O): compact.c caml/address_class.h caml/config.h caml/m.h caml/s.h \ - caml/misc.h caml/mlvalues.h caml/finalise.h caml/roots.h caml/memory.h \ - caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ - caml/gc_ctrl.h caml/weak.h caml/compact.h + caml/misc.h caml/mlvalues.h caml/config.h caml/finalise.h caml/roots.h \ + caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/freelist.h caml/gc.h caml/gc_ctrl.h \ + caml/major_gc.h caml/memory.h caml/mlvalues.h caml/roots.h caml/weak.h \ + caml/compact.h compare_nd.$(O): compare.c caml/custom.h caml/mlvalues.h caml/config.h caml/m.h \ - caml/s.h caml/misc.h caml/fail.h caml/memory.h caml/gc.h \ - caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h + caml/s.h caml/misc.h caml/fail.h caml/memory.h caml/gc.h caml/major_gc.h \ + caml/freelist.h caml/minor_gc.h caml/address_class.h caml/misc.h \ + caml/mlvalues.h custom_nd.$(O): custom.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \ - caml/s.h caml/mlvalues.h caml/custom.h caml/fail.h caml/gc_ctrl.h \ - caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h \ - caml/minor_gc.h caml/address_class.h caml/signals.h + caml/s.h caml/mlvalues.h caml/custom.h caml/fail.h caml/gc_ctrl.h \ + caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/mlvalues.h caml/signals.h debugger_nd.$(O): debugger.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \ - caml/s.h caml/mlvalues.h caml/debugger.h caml/osdeps.h caml/memory.h \ - caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ - caml/address_class.h + caml/s.h caml/mlvalues.h caml/config.h caml/debugger.h caml/misc.h \ + caml/osdeps.h caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h \ + caml/minor_gc.h caml/address_class.h dynlink_nd.$(O): dynlink.c caml/config.h caml/m.h caml/s.h caml/alloc.h \ - caml/misc.h caml/mlvalues.h caml/dynlink.h caml/fail.h caml/memory.h \ - caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ - caml/address_class.h caml/osdeps.h caml/prims.h caml/signals.h + caml/misc.h caml/config.h caml/mlvalues.h caml/dynlink.h caml/fail.h \ + caml/mlvalues.h caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h \ + caml/minor_gc.h caml/address_class.h caml/misc.h caml/osdeps.h \ + caml/memory.h caml/prims.h caml/signals.h dynlink_nat_nd.$(O): dynlink_nat.c caml/misc.h caml/config.h caml/m.h caml/s.h \ - caml/mlvalues.h caml/memory.h caml/gc.h caml/major_gc.h \ - caml/freelist.h caml/minor_gc.h caml/address_class.h caml/stack.h \ - caml/callback.h caml/alloc.h caml/intext.h caml/io.h caml/osdeps.h \ - caml/fail.h caml/signals.h caml/hooks.h + caml/mlvalues.h caml/misc.h caml/memory.h caml/gc.h caml/mlvalues.h \ + caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ + caml/stack.h caml/callback.h caml/alloc.h caml/intext.h caml/io.h \ + caml/osdeps.h caml/memory.h caml/fail.h caml/signals.h caml/hooks.h extern_nd.$(O): extern.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \ - caml/s.h caml/mlvalues.h caml/custom.h caml/fail.h caml/gc.h \ - caml/intext.h caml/io.h caml/md5.h caml/memory.h caml/major_gc.h \ - caml/freelist.h caml/minor_gc.h caml/address_class.h caml/reverse.h + caml/s.h caml/mlvalues.h caml/config.h caml/custom.h caml/fail.h \ + caml/gc.h caml/intext.h caml/io.h caml/io.h caml/md5.h caml/memory.h \ + caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/misc.h caml/mlvalues.h caml/reverse.h fail_byt_nd.$(O): fail_byt.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \ - caml/s.h caml/mlvalues.h caml/fail.h caml/io.h caml/gc.h caml/memory.h \ - caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ - caml/printexc.h caml/signals.h caml/stacks.h + caml/s.h caml/mlvalues.h caml/fail.h caml/io.h caml/gc.h caml/memory.h \ + caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/misc.h caml/mlvalues.h caml/printexc.h \ + caml/signals.h caml/stacks.h caml/memory.h fail_nat_nd.$(O): fail_nat.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \ - caml/s.h caml/mlvalues.h caml/fail.h caml/io.h caml/gc.h caml/memory.h \ - caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ - caml/printexc.h caml/signals.h caml/stack.h caml/roots.h \ - caml/callback.h + caml/s.h caml/mlvalues.h caml/fail.h caml/io.h caml/gc.h caml/memory.h \ + caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/mlvalues.h caml/printexc.h caml/signals.h \ + caml/stack.h caml/roots.h caml/memory.h caml/callback.h finalise_nd.$(O): finalise.c caml/callback.h caml/mlvalues.h caml/config.h \ - caml/m.h caml/s.h caml/misc.h caml/compact.h caml/fail.h \ - caml/finalise.h caml/roots.h caml/memory.h caml/gc.h caml/major_gc.h \ - caml/freelist.h caml/minor_gc.h caml/address_class.h caml/signals.h + caml/m.h caml/s.h caml/misc.h caml/compact.h caml/fail.h caml/finalise.h \ + caml/roots.h caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h \ + caml/minor_gc.h caml/address_class.h caml/minor_gc.h caml/mlvalues.h \ + caml/roots.h caml/signals.h fix_code_nd.$(O): fix_code.c caml/config.h caml/m.h caml/s.h caml/debugger.h \ - caml/misc.h caml/mlvalues.h caml/fix_code.h caml/instruct.h \ - caml/intext.h caml/io.h caml/md5.h caml/memory.h caml/gc.h \ - caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ - caml/reverse.h + caml/misc.h caml/config.h caml/mlvalues.h caml/fix_code.h \ + caml/instruct.h caml/intext.h caml/io.h caml/md5.h caml/memory.h \ + caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/misc.h caml/mlvalues.h caml/reverse.h floats_nd.$(O): floats.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \ - caml/s.h caml/mlvalues.h caml/fail.h caml/memory.h caml/gc.h \ - caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ - caml/reverse.h caml/stacks.h + caml/s.h caml/mlvalues.h caml/fail.h caml/memory.h caml/gc.h \ + caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ + caml/mlvalues.h caml/misc.h caml/reverse.h caml/stacks.h caml/memory.h freelist_nd.$(O): freelist.c caml/config.h caml/m.h caml/s.h caml/freelist.h \ - caml/misc.h caml/mlvalues.h caml/gc.h caml/gc_ctrl.h caml/memory.h \ - caml/major_gc.h caml/minor_gc.h caml/address_class.h + caml/misc.h caml/config.h caml/mlvalues.h caml/gc.h caml/gc_ctrl.h \ + caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/major_gc.h caml/misc.h caml/mlvalues.h gc_ctrl_nd.$(O): gc_ctrl.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \ - caml/s.h caml/mlvalues.h caml/backtrace.h caml/exec.h caml/compact.h \ - caml/custom.h caml/fail.h caml/finalise.h caml/roots.h caml/memory.h \ - caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ - caml/address_class.h caml/gc_ctrl.h caml/signals.h caml/stack.h \ - caml/startup_aux.h + caml/s.h caml/mlvalues.h caml/backtrace.h caml/exec.h caml/compact.h \ + caml/custom.h caml/fail.h caml/finalise.h caml/roots.h caml/memory.h \ + caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/freelist.h caml/gc.h caml/gc_ctrl.h \ + caml/major_gc.h caml/memory.h caml/minor_gc.h caml/misc.h \ + caml/mlvalues.h caml/signals.h caml/stack.h caml/startup_aux.h globroots_nd.$(O): globroots.c caml/memory.h caml/config.h caml/m.h caml/s.h \ - caml/gc.h caml/mlvalues.h caml/misc.h caml/major_gc.h caml/freelist.h \ - caml/minor_gc.h caml/address_class.h caml/roots.h caml/globroots.h + caml/gc.h caml/mlvalues.h caml/misc.h caml/major_gc.h caml/freelist.h \ + caml/minor_gc.h caml/address_class.h caml/misc.h caml/mlvalues.h \ + caml/roots.h caml/memory.h caml/globroots.h caml/roots.h hash_nd.$(O): hash.c caml/mlvalues.h caml/config.h caml/m.h caml/s.h \ - caml/misc.h caml/custom.h caml/memory.h caml/gc.h caml/major_gc.h \ - caml/freelist.h caml/minor_gc.h caml/address_class.h caml/hash.h + caml/misc.h caml/custom.h caml/mlvalues.h caml/memory.h caml/gc.h \ + caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ + caml/hash.h instrtrace_nd.$(O): instrtrace.c caml/instrtrace.h caml/mlvalues.h \ - caml/config.h caml/m.h caml/s.h caml/misc.h caml/instruct.h \ - caml/opnames.h caml/prims.h caml/stacks.h caml/memory.h caml/gc.h \ - caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ - caml/startup_aux.h + caml/config.h caml/m.h caml/s.h caml/misc.h caml/instruct.h caml/misc.h \ + caml/mlvalues.h caml/opnames.h caml/prims.h caml/stacks.h caml/memory.h \ + caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/startup_aux.h intern_nd.$(O): intern.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \ - caml/s.h caml/mlvalues.h caml/callback.h caml/custom.h caml/fail.h \ - caml/gc.h caml/intext.h caml/io.h caml/md5.h caml/memory.h \ - caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ - caml/reverse.h + caml/s.h caml/mlvalues.h caml/callback.h caml/config.h caml/custom.h \ + caml/fail.h caml/gc.h caml/intext.h caml/io.h caml/io.h caml/md5.h \ + caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/mlvalues.h caml/misc.h caml/reverse.h interp_nd.$(O): interp.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \ - caml/s.h caml/mlvalues.h caml/backtrace.h caml/exec.h caml/callback.h \ - caml/debugger.h caml/fail.h caml/fix_code.h caml/instrtrace.h \ - caml/instruct.h caml/interp.h caml/major_gc.h caml/freelist.h \ - caml/memory.h caml/gc.h caml/minor_gc.h caml/address_class.h \ - caml/prims.h caml/signals.h caml/stacks.h caml/startup_aux.h + caml/s.h caml/mlvalues.h caml/backtrace.h caml/exec.h caml/callback.h \ + caml/debugger.h caml/fail.h caml/fix_code.h caml/instrtrace.h \ + caml/instruct.h caml/interp.h caml/major_gc.h caml/freelist.h \ + caml/memory.h caml/gc.h caml/major_gc.h caml/minor_gc.h \ + caml/address_class.h caml/misc.h caml/mlvalues.h caml/prims.h \ + caml/signals.h caml/stacks.h caml/memory.h caml/startup_aux.h ints_nd.$(O): ints.c caml/alloc.h caml/misc.h caml/config.h caml/m.h caml/s.h \ - caml/mlvalues.h caml/custom.h caml/fail.h caml/intext.h caml/io.h \ - caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h \ - caml/minor_gc.h caml/address_class.h + caml/mlvalues.h caml/custom.h caml/fail.h caml/intext.h caml/io.h \ + caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/misc.h caml/mlvalues.h io_nd.$(O): io.c caml/config.h caml/m.h caml/s.h caml/alloc.h caml/misc.h \ - caml/mlvalues.h caml/custom.h caml/fail.h caml/io.h caml/memory.h \ - caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ - caml/address_class.h caml/osdeps.h caml/signals.h caml/sys.h + caml/config.h caml/mlvalues.h caml/custom.h caml/fail.h caml/io.h \ + caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/misc.h caml/mlvalues.h caml/osdeps.h \ + caml/memory.h caml/signals.h caml/sys.h lexing_nd.$(O): lexing.c caml/fail.h caml/misc.h caml/config.h caml/m.h \ - caml/s.h caml/mlvalues.h caml/stacks.h caml/memory.h caml/gc.h \ - caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h + caml/s.h caml/mlvalues.h caml/mlvalues.h caml/stacks.h caml/memory.h \ + caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h main_nd.$(O): main.c caml/misc.h caml/config.h caml/m.h caml/s.h \ - caml/mlvalues.h caml/sys.h caml/osdeps.h caml/memory.h caml/gc.h \ - caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h + caml/mlvalues.h caml/misc.h caml/sys.h caml/osdeps.h caml/memory.h \ + caml/gc.h caml/mlvalues.h caml/major_gc.h caml/freelist.h \ + caml/minor_gc.h caml/address_class.h major_gc_nd.$(O): major_gc.c caml/compact.h caml/config.h caml/m.h caml/s.h \ - caml/misc.h caml/mlvalues.h caml/custom.h caml/fail.h caml/finalise.h \ - caml/roots.h caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h \ - caml/minor_gc.h caml/address_class.h caml/gc_ctrl.h caml/signals.h \ - caml/weak.h + caml/misc.h caml/mlvalues.h caml/custom.h caml/config.h caml/fail.h \ + caml/finalise.h caml/roots.h caml/memory.h caml/gc.h caml/major_gc.h \ + caml/freelist.h caml/minor_gc.h caml/address_class.h caml/freelist.h \ + caml/gc.h caml/gc_ctrl.h caml/major_gc.h caml/misc.h caml/mlvalues.h \ + caml/roots.h caml/signals.h caml/weak.h md5_nd.$(O): md5.c caml/alloc.h caml/misc.h caml/config.h caml/m.h caml/s.h \ - caml/mlvalues.h caml/fail.h caml/md5.h caml/io.h caml/memory.h \ - caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ - caml/address_class.h caml/reverse.h + caml/mlvalues.h caml/fail.h caml/md5.h caml/io.h caml/memory.h caml/gc.h \ + caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ + caml/mlvalues.h caml/io.h caml/reverse.h memory_nd.$(O): memory.c caml/address_class.h caml/config.h caml/m.h caml/s.h \ - caml/misc.h caml/mlvalues.h caml/fail.h caml/freelist.h caml/gc.h \ - caml/gc_ctrl.h caml/major_gc.h caml/memory.h caml/minor_gc.h \ - caml/signals.h + caml/misc.h caml/mlvalues.h caml/config.h caml/fail.h caml/freelist.h \ + caml/gc.h caml/gc_ctrl.h caml/major_gc.h caml/freelist.h caml/memory.h \ + caml/gc.h caml/major_gc.h caml/minor_gc.h caml/address_class.h \ + caml/minor_gc.h caml/misc.h caml/mlvalues.h caml/signals.h meta_nd.$(O): meta.c caml/alloc.h caml/misc.h caml/config.h caml/m.h caml/s.h \ - caml/mlvalues.h caml/fail.h caml/fix_code.h caml/interp.h \ - caml/intext.h caml/io.h caml/major_gc.h caml/freelist.h caml/memory.h \ - caml/gc.h caml/minor_gc.h caml/address_class.h caml/prims.h \ - caml/stacks.h caml/backtrace_prim.h caml/backtrace.h caml/exec.h + caml/mlvalues.h caml/config.h caml/fail.h caml/fix_code.h caml/interp.h \ + caml/intext.h caml/io.h caml/major_gc.h caml/freelist.h caml/memory.h \ + caml/gc.h caml/major_gc.h caml/minor_gc.h caml/address_class.h \ + caml/minor_gc.h caml/misc.h caml/mlvalues.h caml/prims.h caml/stacks.h \ + caml/memory.h caml/backtrace_prim.h caml/backtrace.h caml/exec.h minor_gc_nd.$(O): minor_gc.c caml/custom.h caml/mlvalues.h caml/config.h \ - caml/m.h caml/s.h caml/misc.h caml/fail.h caml/finalise.h caml/roots.h \ - caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h \ - caml/minor_gc.h caml/address_class.h caml/gc_ctrl.h caml/signals.h \ - caml/weak.h -misc_nd.$(O): misc.c caml/config.h caml/m.h caml/s.h caml/misc.h caml/memory.h \ - caml/gc.h caml/mlvalues.h caml/major_gc.h caml/freelist.h \ - caml/minor_gc.h caml/address_class.h caml/osdeps.h caml/version.h + caml/m.h caml/s.h caml/misc.h caml/config.h caml/fail.h caml/finalise.h \ + caml/roots.h caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h \ + caml/minor_gc.h caml/address_class.h caml/gc.h caml/gc_ctrl.h \ + caml/major_gc.h caml/memory.h caml/minor_gc.h caml/misc.h \ + caml/mlvalues.h caml/roots.h caml/signals.h caml/weak.h +misc_nd.$(O): misc.c caml/config.h caml/m.h caml/s.h caml/misc.h caml/config.h \ + caml/memory.h caml/gc.h caml/mlvalues.h caml/misc.h caml/major_gc.h \ + caml/freelist.h caml/minor_gc.h caml/address_class.h caml/osdeps.h \ + caml/memory.h caml/version.h obj_nd.$(O): obj.c caml/alloc.h caml/misc.h caml/config.h caml/m.h caml/s.h \ - caml/mlvalues.h caml/fail.h caml/gc.h caml/interp.h caml/major_gc.h \ - caml/freelist.h caml/memory.h caml/minor_gc.h caml/address_class.h \ - caml/prims.h caml/spacetime.h caml/io.h caml/stack.h + caml/mlvalues.h caml/fail.h caml/gc.h caml/interp.h caml/major_gc.h \ + caml/freelist.h caml/memory.h caml/gc.h caml/major_gc.h caml/minor_gc.h \ + caml/address_class.h caml/minor_gc.h caml/misc.h caml/mlvalues.h \ + caml/prims.h caml/spacetime.h caml/io.h caml/stack.h parsing_nd.$(O): parsing.c caml/config.h caml/m.h caml/s.h caml/mlvalues.h \ - caml/misc.h caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h \ - caml/minor_gc.h caml/address_class.h caml/alloc.h + caml/config.h caml/misc.h caml/memory.h caml/gc.h caml/mlvalues.h \ + caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ + caml/alloc.h prims_nd.$(O): prims.c caml/mlvalues.h caml/config.h caml/m.h caml/s.h \ - caml/misc.h caml/prims.h + caml/misc.h caml/prims.h printexc_nd.$(O): printexc.c caml/backtrace.h caml/mlvalues.h caml/config.h \ - caml/m.h caml/s.h caml/misc.h caml/exec.h caml/callback.h \ - caml/debugger.h caml/fail.h caml/printexc.h caml/memory.h caml/gc.h \ - caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h + caml/m.h caml/s.h caml/misc.h caml/exec.h caml/callback.h \ + caml/debugger.h caml/fail.h caml/misc.h caml/mlvalues.h caml/printexc.h \ + caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h roots_byt_nd.$(O): roots_byt.c caml/finalise.h caml/roots.h caml/misc.h \ - caml/config.h caml/m.h caml/s.h caml/memory.h caml/gc.h \ - caml/mlvalues.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ - caml/address_class.h caml/globroots.h caml/stacks.h + caml/config.h caml/m.h caml/s.h caml/memory.h caml/gc.h caml/mlvalues.h \ + caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ + caml/globroots.h caml/major_gc.h caml/memory.h caml/minor_gc.h \ + caml/misc.h caml/mlvalues.h caml/roots.h caml/stacks.h roots_nat_nd.$(O): roots_nat.c caml/finalise.h caml/roots.h caml/misc.h \ - caml/config.h caml/m.h caml/s.h caml/memory.h caml/gc.h \ - caml/mlvalues.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ - caml/address_class.h caml/globroots.h caml/stack.h -signals_nd.$(O): signals.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \ - caml/s.h caml/mlvalues.h caml/callback.h caml/fail.h caml/memory.h \ - caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ - caml/address_class.h caml/roots.h caml/signals.h \ - caml/signals_machdep.h caml/sys.h + caml/config.h caml/m.h caml/s.h caml/memory.h caml/gc.h caml/mlvalues.h \ + caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ + caml/globroots.h caml/memory.h caml/major_gc.h caml/minor_gc.h \ + caml/misc.h caml/mlvalues.h caml/stack.h caml/roots.h signals_byt_nd.$(O): signals_byt.c caml/config.h caml/m.h caml/s.h \ - caml/memory.h caml/gc.h caml/mlvalues.h caml/misc.h caml/major_gc.h \ - caml/freelist.h caml/minor_gc.h caml/address_class.h caml/osdeps.h \ - caml/signals.h caml/signals_machdep.h + caml/memory.h caml/config.h caml/gc.h caml/mlvalues.h caml/misc.h \ + caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ + caml/osdeps.h caml/memory.h caml/signals.h caml/signals_machdep.h +signals_nd.$(O): signals.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \ + caml/s.h caml/mlvalues.h caml/callback.h caml/config.h caml/fail.h \ + caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/misc.h caml/mlvalues.h caml/roots.h \ + caml/memory.h caml/signals.h caml/signals_machdep.h caml/sys.h signals_nat_nd.$(O): signals_nat.c caml/fail.h caml/misc.h caml/config.h \ - caml/m.h caml/s.h caml/mlvalues.h caml/memory.h caml/gc.h \ - caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ - caml/osdeps.h caml/signals.h caml/signals_machdep.h signals_osdep.h \ - caml/stack.h caml/spacetime.h caml/io.h + caml/m.h caml/s.h caml/mlvalues.h caml/memory.h caml/gc.h \ + caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ + caml/osdeps.h caml/memory.h caml/signals.h caml/signals_machdep.h \ + signals_osdep.h caml/stack.h caml/spacetime.h caml/io.h caml/stack.h spacetime_byt_nd.$(O): spacetime_byt.c caml/fail.h caml/misc.h caml/config.h \ - caml/m.h caml/s.h caml/mlvalues.h + caml/m.h caml/s.h caml/mlvalues.h caml/mlvalues.h spacetime_nat_nd.$(O): spacetime_nat.c caml/config.h caml/m.h caml/s.h \ - caml/alloc.h caml/misc.h caml/mlvalues.h caml/backtrace_prim.h \ - caml/backtrace.h caml/exec.h caml/fail.h caml/gc.h caml/intext.h \ - caml/io.h caml/major_gc.h caml/freelist.h caml/memory.h \ - caml/minor_gc.h caml/address_class.h caml/osdeps.h caml/roots.h \ - caml/signals.h caml/stack.h caml/sys.h caml/spacetime.h + caml/alloc.h caml/misc.h caml/config.h caml/mlvalues.h \ + caml/backtrace_prim.h caml/backtrace.h caml/exec.h caml/fail.h caml/gc.h \ + caml/intext.h caml/io.h caml/major_gc.h caml/freelist.h caml/memory.h \ + caml/gc.h caml/major_gc.h caml/minor_gc.h caml/address_class.h \ + caml/minor_gc.h caml/misc.h caml/mlvalues.h caml/osdeps.h caml/memory.h \ + caml/roots.h caml/signals.h caml/stack.h caml/sys.h caml/spacetime.h \ + caml/stack.h spacetime_snapshot_nd.$(O): spacetime_snapshot.c caml/alloc.h caml/misc.h \ - caml/config.h caml/m.h caml/s.h caml/mlvalues.h caml/backtrace_prim.h \ - caml/backtrace.h caml/exec.h caml/custom.h caml/fail.h caml/gc.h \ - caml/gc_ctrl.h caml/intext.h caml/io.h caml/major_gc.h caml/freelist.h \ - caml/memory.h caml/minor_gc.h caml/address_class.h caml/roots.h \ - caml/signals.h caml/stack.h caml/sys.h caml/spacetime.h + caml/config.h caml/m.h caml/s.h caml/mlvalues.h caml/backtrace_prim.h \ + caml/backtrace.h caml/exec.h caml/config.h caml/custom.h caml/fail.h \ + caml/gc.h caml/gc_ctrl.h caml/intext.h caml/io.h caml/major_gc.h \ + caml/freelist.h caml/memory.h caml/gc.h caml/major_gc.h caml/minor_gc.h \ + caml/address_class.h caml/minor_gc.h caml/misc.h caml/mlvalues.h \ + caml/roots.h caml/memory.h caml/signals.h caml/stack.h caml/sys.h \ + caml/spacetime.h caml/stack.h stacks_nd.$(O): stacks.c caml/config.h caml/m.h caml/s.h caml/fail.h \ - caml/misc.h caml/mlvalues.h caml/stacks.h caml/memory.h caml/gc.h \ - caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h + caml/misc.h caml/config.h caml/mlvalues.h caml/misc.h caml/mlvalues.h \ + caml/stacks.h caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h \ + caml/minor_gc.h caml/address_class.h startup_aux_nd.$(O): startup_aux.c caml/backtrace.h caml/mlvalues.h \ - caml/config.h caml/m.h caml/s.h caml/misc.h caml/exec.h caml/memory.h \ - caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ - caml/address_class.h caml/callback.h caml/osdeps.h caml/startup_aux.h + caml/config.h caml/m.h caml/s.h caml/misc.h caml/exec.h caml/memory.h \ + caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/callback.h caml/major_gc.h caml/osdeps.h \ + caml/memory.h caml/startup_aux.h startup_byt_nd.$(O): startup_byt.c caml/config.h caml/m.h caml/s.h caml/alloc.h \ - caml/misc.h caml/mlvalues.h caml/backtrace.h caml/exec.h \ - caml/callback.h caml/custom.h caml/debugger.h caml/dynlink.h \ - caml/fail.h caml/fix_code.h caml/freelist.h caml/gc_ctrl.h \ - caml/instrtrace.h caml/interp.h caml/intext.h caml/io.h caml/memory.h \ - caml/gc.h caml/major_gc.h caml/minor_gc.h caml/address_class.h \ - caml/osdeps.h caml/prims.h caml/printexc.h caml/reverse.h \ - caml/signals.h caml/stacks.h caml/sys.h caml/startup.h \ - caml/startup_aux.h caml/version.h + caml/misc.h caml/config.h caml/mlvalues.h caml/backtrace.h caml/exec.h \ + caml/callback.h caml/custom.h caml/debugger.h caml/dynlink.h caml/exec.h \ + caml/fail.h caml/fix_code.h caml/freelist.h caml/gc_ctrl.h \ + caml/instrtrace.h caml/interp.h caml/intext.h caml/io.h caml/io.h \ + caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/minor_gc.h caml/misc.h caml/mlvalues.h \ + caml/osdeps.h caml/memory.h caml/prims.h caml/printexc.h caml/reverse.h \ + caml/signals.h caml/stacks.h caml/sys.h caml/startup.h \ + caml/startup_aux.h caml/version.h startup_nat_nd.$(O): startup_nat.c caml/callback.h caml/mlvalues.h \ - caml/config.h caml/m.h caml/s.h caml/misc.h caml/backtrace.h \ - caml/exec.h caml/custom.h caml/debugger.h caml/fail.h caml/freelist.h \ - caml/gc.h caml/gc_ctrl.h caml/intext.h caml/io.h caml/memory.h \ - caml/major_gc.h caml/minor_gc.h caml/address_class.h caml/osdeps.h \ - caml/printexc.h caml/stack.h caml/startup_aux.h caml/sys.h + caml/config.h caml/m.h caml/s.h caml/misc.h caml/backtrace.h caml/exec.h \ + caml/custom.h caml/debugger.h caml/fail.h caml/freelist.h caml/gc.h \ + caml/gc_ctrl.h caml/intext.h caml/io.h caml/memory.h caml/gc.h \ + caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ + caml/misc.h caml/mlvalues.h caml/osdeps.h caml/memory.h caml/printexc.h \ + caml/stack.h caml/startup_aux.h caml/sys.h str_nd.$(O): str.c caml/alloc.h caml/misc.h caml/config.h caml/m.h caml/s.h \ - caml/mlvalues.h caml/fail.h caml/memory.h caml/gc.h caml/major_gc.h \ - caml/freelist.h caml/minor_gc.h caml/address_class.h + caml/mlvalues.h caml/fail.h caml/memory.h caml/gc.h caml/major_gc.h \ + caml/freelist.h caml/minor_gc.h caml/address_class.h caml/mlvalues.h \ + caml/misc.h sys_nd.$(O): sys.c caml/config.h caml/m.h caml/s.h caml/alloc.h caml/misc.h \ - caml/mlvalues.h caml/debugger.h caml/fail.h caml/gc_ctrl.h caml/io.h \ - caml/osdeps.h caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h \ - caml/minor_gc.h caml/address_class.h caml/signals.h caml/stacks.h \ - caml/sys.h caml/version.h caml/callback.h caml/startup_aux.h + caml/config.h caml/mlvalues.h caml/debugger.h caml/fail.h caml/gc_ctrl.h \ + caml/io.h caml/misc.h caml/mlvalues.h caml/osdeps.h caml/memory.h \ + caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/signals.h caml/stacks.h caml/sys.h \ + caml/version.h caml/callback.h caml/startup_aux.h unix_nd.$(O): unix.c caml/config.h caml/m.h caml/s.h caml/fail.h caml/misc.h \ - caml/mlvalues.h caml/memory.h caml/gc.h caml/major_gc.h \ - caml/freelist.h caml/minor_gc.h caml/address_class.h caml/osdeps.h \ - caml/signals.h caml/sys.h caml/io.h caml/alloc.h + caml/config.h caml/mlvalues.h caml/memory.h caml/gc.h caml/major_gc.h \ + caml/freelist.h caml/minor_gc.h caml/address_class.h caml/misc.h \ + caml/osdeps.h caml/memory.h caml/signals.h caml/sys.h caml/io.h \ + caml/alloc.h weak_nd.$(O): weak.c caml/alloc.h caml/misc.h caml/config.h caml/m.h caml/s.h \ - caml/mlvalues.h caml/fail.h caml/major_gc.h caml/freelist.h \ - caml/memory.h caml/gc.h caml/minor_gc.h caml/address_class.h \ - caml/weak.h caml/signals.h -afl_ni.$(O): afl.c caml/config.h caml/m.h caml/s.h caml/misc.h caml/mlvalues.h \ - caml/osdeps.h caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h \ - caml/minor_gc.h caml/address_class.h + caml/mlvalues.h caml/fail.h caml/major_gc.h caml/freelist.h \ + caml/memory.h caml/gc.h caml/major_gc.h caml/minor_gc.h \ + caml/address_class.h caml/mlvalues.h caml/weak.h caml/minor_gc.h \ + caml/signals.h +win32_nd.$(O): win32.c caml/alloc.h caml/misc.h caml/config.h caml/m.h caml/s.h \ + caml/mlvalues.h caml/address_class.h caml/fail.h caml/io.h caml/memory.h \ + caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/misc.h caml/osdeps.h caml/memory.h \ + caml/signals.h caml/sys.h caml/config.h +afl_ni.$(O): afl.c caml/config.h caml/m.h caml/s.h caml/misc.h caml/config.h \ + caml/mlvalues.h caml/misc.h caml/osdeps.h caml/memory.h caml/gc.h \ + caml/mlvalues.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h alloc_ni.$(O): alloc.c caml/alloc.h caml/misc.h caml/config.h caml/m.h caml/s.h \ - caml/mlvalues.h caml/custom.h caml/major_gc.h caml/freelist.h \ - caml/memory.h caml/gc.h caml/minor_gc.h caml/address_class.h \ - caml/stacks.h + caml/mlvalues.h caml/custom.h caml/major_gc.h caml/freelist.h \ + caml/memory.h caml/gc.h caml/major_gc.h caml/minor_gc.h \ + caml/address_class.h caml/mlvalues.h caml/stacks.h caml/memory.h array_ni.$(O): array.c caml/alloc.h caml/misc.h caml/config.h caml/m.h caml/s.h \ - caml/mlvalues.h caml/fail.h caml/memory.h caml/gc.h caml/major_gc.h \ - caml/freelist.h caml/minor_gc.h caml/address_class.h caml/signals.h \ - caml/spacetime.h caml/io.h caml/stack.h -backtrace_ni.$(O): backtrace.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \ - caml/s.h caml/mlvalues.h caml/memory.h caml/gc.h caml/major_gc.h \ - caml/freelist.h caml/minor_gc.h caml/address_class.h caml/backtrace.h \ - caml/exec.h caml/backtrace_prim.h caml/fail.h + caml/mlvalues.h caml/fail.h caml/memory.h caml/gc.h caml/major_gc.h \ + caml/freelist.h caml/minor_gc.h caml/address_class.h caml/misc.h \ + caml/mlvalues.h caml/signals.h caml/spacetime.h caml/io.h caml/stack.h backtrace_byt_ni.$(O): backtrace_byt.c caml/config.h caml/m.h caml/s.h \ - caml/mlvalues.h caml/misc.h caml/alloc.h caml/custom.h caml/io.h \ - caml/instruct.h caml/intext.h caml/exec.h caml/fix_code.h \ - caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h \ - caml/minor_gc.h caml/address_class.h caml/startup.h caml/stacks.h \ - caml/sys.h caml/backtrace.h caml/fail.h caml/backtrace_prim.h + caml/mlvalues.h caml/config.h caml/misc.h caml/alloc.h caml/mlvalues.h \ + caml/custom.h caml/io.h caml/instruct.h caml/intext.h caml/io.h \ + caml/exec.h caml/fix_code.h caml/memory.h caml/gc.h caml/major_gc.h \ + caml/freelist.h caml/minor_gc.h caml/address_class.h caml/startup.h \ + caml/exec.h caml/stacks.h caml/memory.h caml/sys.h caml/backtrace.h \ + caml/fail.h caml/backtrace_prim.h caml/backtrace.h +backtrace_ni.$(O): backtrace.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \ + caml/s.h caml/mlvalues.h caml/memory.h caml/gc.h caml/major_gc.h \ + caml/freelist.h caml/minor_gc.h caml/address_class.h caml/backtrace.h \ + caml/exec.h caml/backtrace_prim.h caml/backtrace.h caml/fail.h backtrace_nat_ni.$(O): backtrace_nat.c caml/alloc.h caml/misc.h caml/config.h \ - caml/m.h caml/s.h caml/mlvalues.h caml/backtrace.h caml/exec.h \ - caml/backtrace_prim.h caml/memory.h caml/gc.h caml/major_gc.h \ - caml/freelist.h caml/minor_gc.h caml/address_class.h caml/stack.h + caml/m.h caml/s.h caml/mlvalues.h caml/backtrace.h caml/exec.h \ + caml/backtrace_prim.h caml/backtrace.h caml/memory.h caml/gc.h \ + caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ + caml/misc.h caml/mlvalues.h caml/stack.h bigarray_ni.$(O): bigarray.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \ - caml/s.h caml/mlvalues.h caml/bigarray.h caml/custom.h caml/fail.h \ - caml/intext.h caml/io.h caml/hash.h caml/memory.h caml/gc.h \ - caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ - caml/signals.h + caml/s.h caml/mlvalues.h caml/bigarray.h caml/custom.h caml/fail.h \ + caml/intext.h caml/io.h caml/hash.h caml/memory.h caml/gc.h \ + caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ + caml/mlvalues.h caml/signals.h callback_ni.$(O): callback.c caml/callback.h caml/mlvalues.h caml/config.h \ - caml/m.h caml/s.h caml/misc.h caml/fail.h caml/memory.h caml/gc.h \ - caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h + caml/m.h caml/s.h caml/misc.h caml/fail.h caml/memory.h caml/gc.h \ + caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ + caml/mlvalues.h clambda_checks_ni.$(O): clambda_checks.c caml/mlvalues.h caml/config.h caml/m.h \ - caml/s.h caml/misc.h + caml/s.h caml/misc.h compact_ni.$(O): compact.c caml/address_class.h caml/config.h caml/m.h caml/s.h \ - caml/misc.h caml/mlvalues.h caml/finalise.h caml/roots.h caml/memory.h \ - caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ - caml/gc_ctrl.h caml/weak.h caml/compact.h + caml/misc.h caml/mlvalues.h caml/config.h caml/finalise.h caml/roots.h \ + caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/freelist.h caml/gc.h caml/gc_ctrl.h \ + caml/major_gc.h caml/memory.h caml/mlvalues.h caml/roots.h caml/weak.h \ + caml/compact.h compare_ni.$(O): compare.c caml/custom.h caml/mlvalues.h caml/config.h caml/m.h \ - caml/s.h caml/misc.h caml/fail.h caml/memory.h caml/gc.h \ - caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h + caml/s.h caml/misc.h caml/fail.h caml/memory.h caml/gc.h caml/major_gc.h \ + caml/freelist.h caml/minor_gc.h caml/address_class.h caml/misc.h \ + caml/mlvalues.h custom_ni.$(O): custom.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \ - caml/s.h caml/mlvalues.h caml/custom.h caml/fail.h caml/gc_ctrl.h \ - caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h \ - caml/minor_gc.h caml/address_class.h caml/signals.h + caml/s.h caml/mlvalues.h caml/custom.h caml/fail.h caml/gc_ctrl.h \ + caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/mlvalues.h caml/signals.h debugger_ni.$(O): debugger.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \ - caml/s.h caml/mlvalues.h caml/debugger.h caml/osdeps.h caml/memory.h \ - caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ - caml/address_class.h + caml/s.h caml/mlvalues.h caml/config.h caml/debugger.h caml/misc.h \ + caml/osdeps.h caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h \ + caml/minor_gc.h caml/address_class.h dynlink_ni.$(O): dynlink.c caml/config.h caml/m.h caml/s.h caml/alloc.h \ - caml/misc.h caml/mlvalues.h caml/dynlink.h caml/fail.h caml/memory.h \ - caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ - caml/address_class.h caml/osdeps.h caml/prims.h caml/signals.h + caml/misc.h caml/config.h caml/mlvalues.h caml/dynlink.h caml/fail.h \ + caml/mlvalues.h caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h \ + caml/minor_gc.h caml/address_class.h caml/misc.h caml/osdeps.h \ + caml/memory.h caml/prims.h caml/signals.h dynlink_nat_ni.$(O): dynlink_nat.c caml/misc.h caml/config.h caml/m.h caml/s.h \ - caml/mlvalues.h caml/memory.h caml/gc.h caml/major_gc.h \ - caml/freelist.h caml/minor_gc.h caml/address_class.h caml/stack.h \ - caml/callback.h caml/alloc.h caml/intext.h caml/io.h caml/osdeps.h \ - caml/fail.h caml/signals.h caml/hooks.h + caml/mlvalues.h caml/misc.h caml/memory.h caml/gc.h caml/mlvalues.h \ + caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ + caml/stack.h caml/callback.h caml/alloc.h caml/intext.h caml/io.h \ + caml/osdeps.h caml/memory.h caml/fail.h caml/signals.h caml/hooks.h extern_ni.$(O): extern.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \ - caml/s.h caml/mlvalues.h caml/custom.h caml/fail.h caml/gc.h \ - caml/intext.h caml/io.h caml/md5.h caml/memory.h caml/major_gc.h \ - caml/freelist.h caml/minor_gc.h caml/address_class.h caml/reverse.h + caml/s.h caml/mlvalues.h caml/config.h caml/custom.h caml/fail.h \ + caml/gc.h caml/intext.h caml/io.h caml/io.h caml/md5.h caml/memory.h \ + caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/misc.h caml/mlvalues.h caml/reverse.h fail_byt_ni.$(O): fail_byt.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \ - caml/s.h caml/mlvalues.h caml/fail.h caml/io.h caml/gc.h caml/memory.h \ - caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ - caml/printexc.h caml/signals.h caml/stacks.h + caml/s.h caml/mlvalues.h caml/fail.h caml/io.h caml/gc.h caml/memory.h \ + caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/misc.h caml/mlvalues.h caml/printexc.h \ + caml/signals.h caml/stacks.h caml/memory.h fail_nat_ni.$(O): fail_nat.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \ - caml/s.h caml/mlvalues.h caml/fail.h caml/io.h caml/gc.h caml/memory.h \ - caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ - caml/printexc.h caml/signals.h caml/stack.h caml/roots.h \ - caml/callback.h + caml/s.h caml/mlvalues.h caml/fail.h caml/io.h caml/gc.h caml/memory.h \ + caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/mlvalues.h caml/printexc.h caml/signals.h \ + caml/stack.h caml/roots.h caml/memory.h caml/callback.h finalise_ni.$(O): finalise.c caml/callback.h caml/mlvalues.h caml/config.h \ - caml/m.h caml/s.h caml/misc.h caml/compact.h caml/fail.h \ - caml/finalise.h caml/roots.h caml/memory.h caml/gc.h caml/major_gc.h \ - caml/freelist.h caml/minor_gc.h caml/address_class.h caml/signals.h + caml/m.h caml/s.h caml/misc.h caml/compact.h caml/fail.h caml/finalise.h \ + caml/roots.h caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h \ + caml/minor_gc.h caml/address_class.h caml/minor_gc.h caml/mlvalues.h \ + caml/roots.h caml/signals.h fix_code_ni.$(O): fix_code.c caml/config.h caml/m.h caml/s.h caml/debugger.h \ - caml/misc.h caml/mlvalues.h caml/fix_code.h caml/instruct.h \ - caml/intext.h caml/io.h caml/md5.h caml/memory.h caml/gc.h \ - caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ - caml/reverse.h + caml/misc.h caml/config.h caml/mlvalues.h caml/fix_code.h \ + caml/instruct.h caml/intext.h caml/io.h caml/md5.h caml/memory.h \ + caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/misc.h caml/mlvalues.h caml/reverse.h floats_ni.$(O): floats.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \ - caml/s.h caml/mlvalues.h caml/fail.h caml/memory.h caml/gc.h \ - caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ - caml/reverse.h caml/stacks.h + caml/s.h caml/mlvalues.h caml/fail.h caml/memory.h caml/gc.h \ + caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ + caml/mlvalues.h caml/misc.h caml/reverse.h caml/stacks.h caml/memory.h freelist_ni.$(O): freelist.c caml/config.h caml/m.h caml/s.h caml/freelist.h \ - caml/misc.h caml/mlvalues.h caml/gc.h caml/gc_ctrl.h caml/memory.h \ - caml/major_gc.h caml/minor_gc.h caml/address_class.h + caml/misc.h caml/config.h caml/mlvalues.h caml/gc.h caml/gc_ctrl.h \ + caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/major_gc.h caml/misc.h caml/mlvalues.h gc_ctrl_ni.$(O): gc_ctrl.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \ - caml/s.h caml/mlvalues.h caml/backtrace.h caml/exec.h caml/compact.h \ - caml/custom.h caml/fail.h caml/finalise.h caml/roots.h caml/memory.h \ - caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ - caml/address_class.h caml/gc_ctrl.h caml/signals.h caml/stack.h \ - caml/startup_aux.h + caml/s.h caml/mlvalues.h caml/backtrace.h caml/exec.h caml/compact.h \ + caml/custom.h caml/fail.h caml/finalise.h caml/roots.h caml/memory.h \ + caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/freelist.h caml/gc.h caml/gc_ctrl.h \ + caml/major_gc.h caml/memory.h caml/minor_gc.h caml/misc.h \ + caml/mlvalues.h caml/signals.h caml/stack.h caml/startup_aux.h globroots_ni.$(O): globroots.c caml/memory.h caml/config.h caml/m.h caml/s.h \ - caml/gc.h caml/mlvalues.h caml/misc.h caml/major_gc.h caml/freelist.h \ - caml/minor_gc.h caml/address_class.h caml/roots.h caml/globroots.h + caml/gc.h caml/mlvalues.h caml/misc.h caml/major_gc.h caml/freelist.h \ + caml/minor_gc.h caml/address_class.h caml/misc.h caml/mlvalues.h \ + caml/roots.h caml/memory.h caml/globroots.h caml/roots.h hash_ni.$(O): hash.c caml/mlvalues.h caml/config.h caml/m.h caml/s.h \ - caml/misc.h caml/custom.h caml/memory.h caml/gc.h caml/major_gc.h \ - caml/freelist.h caml/minor_gc.h caml/address_class.h caml/hash.h + caml/misc.h caml/custom.h caml/mlvalues.h caml/memory.h caml/gc.h \ + caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ + caml/hash.h instrtrace_ni.$(O): instrtrace.c intern_ni.$(O): intern.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \ - caml/s.h caml/mlvalues.h caml/callback.h caml/custom.h caml/fail.h \ - caml/gc.h caml/intext.h caml/io.h caml/md5.h caml/memory.h \ - caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ - caml/reverse.h + caml/s.h caml/mlvalues.h caml/callback.h caml/config.h caml/custom.h \ + caml/fail.h caml/gc.h caml/intext.h caml/io.h caml/io.h caml/md5.h \ + caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/mlvalues.h caml/misc.h caml/reverse.h interp_ni.$(O): interp.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \ - caml/s.h caml/mlvalues.h caml/backtrace.h caml/exec.h caml/callback.h \ - caml/debugger.h caml/fail.h caml/fix_code.h caml/instrtrace.h \ - caml/instruct.h caml/interp.h caml/major_gc.h caml/freelist.h \ - caml/memory.h caml/gc.h caml/minor_gc.h caml/address_class.h \ - caml/prims.h caml/signals.h caml/stacks.h caml/startup_aux.h \ - caml/jumptbl.h + caml/s.h caml/mlvalues.h caml/backtrace.h caml/exec.h caml/callback.h \ + caml/debugger.h caml/fail.h caml/fix_code.h caml/instrtrace.h \ + caml/instruct.h caml/interp.h caml/major_gc.h caml/freelist.h \ + caml/memory.h caml/gc.h caml/major_gc.h caml/minor_gc.h \ + caml/address_class.h caml/misc.h caml/mlvalues.h caml/prims.h \ + caml/signals.h caml/stacks.h caml/memory.h caml/startup_aux.h \ + caml/jumptbl.h ints_ni.$(O): ints.c caml/alloc.h caml/misc.h caml/config.h caml/m.h caml/s.h \ - caml/mlvalues.h caml/custom.h caml/fail.h caml/intext.h caml/io.h \ - caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h \ - caml/minor_gc.h caml/address_class.h + caml/mlvalues.h caml/custom.h caml/fail.h caml/intext.h caml/io.h \ + caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/misc.h caml/mlvalues.h io_ni.$(O): io.c caml/config.h caml/m.h caml/s.h caml/alloc.h caml/misc.h \ - caml/mlvalues.h caml/custom.h caml/fail.h caml/io.h caml/memory.h \ - caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ - caml/address_class.h caml/osdeps.h caml/signals.h caml/sys.h + caml/config.h caml/mlvalues.h caml/custom.h caml/fail.h caml/io.h \ + caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/misc.h caml/mlvalues.h caml/osdeps.h \ + caml/memory.h caml/signals.h caml/sys.h lexing_ni.$(O): lexing.c caml/fail.h caml/misc.h caml/config.h caml/m.h \ - caml/s.h caml/mlvalues.h caml/stacks.h caml/memory.h caml/gc.h \ - caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h + caml/s.h caml/mlvalues.h caml/mlvalues.h caml/stacks.h caml/memory.h \ + caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h main_ni.$(O): main.c caml/misc.h caml/config.h caml/m.h caml/s.h \ - caml/mlvalues.h caml/sys.h caml/osdeps.h caml/memory.h caml/gc.h \ - caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h + caml/mlvalues.h caml/misc.h caml/sys.h caml/osdeps.h caml/memory.h \ + caml/gc.h caml/mlvalues.h caml/major_gc.h caml/freelist.h \ + caml/minor_gc.h caml/address_class.h major_gc_ni.$(O): major_gc.c caml/compact.h caml/config.h caml/m.h caml/s.h \ - caml/misc.h caml/mlvalues.h caml/custom.h caml/fail.h caml/finalise.h \ - caml/roots.h caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h \ - caml/minor_gc.h caml/address_class.h caml/gc_ctrl.h caml/signals.h \ - caml/weak.h + caml/misc.h caml/mlvalues.h caml/custom.h caml/config.h caml/fail.h \ + caml/finalise.h caml/roots.h caml/memory.h caml/gc.h caml/major_gc.h \ + caml/freelist.h caml/minor_gc.h caml/address_class.h caml/freelist.h \ + caml/gc.h caml/gc_ctrl.h caml/major_gc.h caml/misc.h caml/mlvalues.h \ + caml/roots.h caml/signals.h caml/weak.h md5_ni.$(O): md5.c caml/alloc.h caml/misc.h caml/config.h caml/m.h caml/s.h \ - caml/mlvalues.h caml/fail.h caml/md5.h caml/io.h caml/memory.h \ - caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ - caml/address_class.h caml/reverse.h + caml/mlvalues.h caml/fail.h caml/md5.h caml/io.h caml/memory.h caml/gc.h \ + caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ + caml/mlvalues.h caml/io.h caml/reverse.h memory_ni.$(O): memory.c caml/address_class.h caml/config.h caml/m.h caml/s.h \ - caml/misc.h caml/mlvalues.h caml/fail.h caml/freelist.h caml/gc.h \ - caml/gc_ctrl.h caml/major_gc.h caml/memory.h caml/minor_gc.h \ - caml/signals.h + caml/misc.h caml/mlvalues.h caml/config.h caml/fail.h caml/freelist.h \ + caml/gc.h caml/gc_ctrl.h caml/major_gc.h caml/freelist.h caml/memory.h \ + caml/gc.h caml/major_gc.h caml/minor_gc.h caml/address_class.h \ + caml/minor_gc.h caml/misc.h caml/mlvalues.h caml/signals.h meta_ni.$(O): meta.c caml/alloc.h caml/misc.h caml/config.h caml/m.h caml/s.h \ - caml/mlvalues.h caml/fail.h caml/fix_code.h caml/interp.h \ - caml/intext.h caml/io.h caml/major_gc.h caml/freelist.h caml/memory.h \ - caml/gc.h caml/minor_gc.h caml/address_class.h caml/prims.h \ - caml/stacks.h caml/backtrace_prim.h caml/backtrace.h caml/exec.h + caml/mlvalues.h caml/config.h caml/fail.h caml/fix_code.h caml/interp.h \ + caml/intext.h caml/io.h caml/major_gc.h caml/freelist.h caml/memory.h \ + caml/gc.h caml/major_gc.h caml/minor_gc.h caml/address_class.h \ + caml/minor_gc.h caml/misc.h caml/mlvalues.h caml/prims.h caml/stacks.h \ + caml/memory.h caml/backtrace_prim.h caml/backtrace.h caml/exec.h minor_gc_ni.$(O): minor_gc.c caml/custom.h caml/mlvalues.h caml/config.h \ - caml/m.h caml/s.h caml/misc.h caml/fail.h caml/finalise.h caml/roots.h \ - caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h \ - caml/minor_gc.h caml/address_class.h caml/gc_ctrl.h caml/signals.h \ - caml/weak.h -misc_ni.$(O): misc.c caml/config.h caml/m.h caml/s.h caml/misc.h caml/memory.h \ - caml/gc.h caml/mlvalues.h caml/major_gc.h caml/freelist.h \ - caml/minor_gc.h caml/address_class.h caml/osdeps.h caml/version.h + caml/m.h caml/s.h caml/misc.h caml/config.h caml/fail.h caml/finalise.h \ + caml/roots.h caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h \ + caml/minor_gc.h caml/address_class.h caml/gc.h caml/gc_ctrl.h \ + caml/major_gc.h caml/memory.h caml/minor_gc.h caml/misc.h \ + caml/mlvalues.h caml/roots.h caml/signals.h caml/weak.h +misc_ni.$(O): misc.c caml/config.h caml/m.h caml/s.h caml/misc.h caml/config.h \ + caml/memory.h caml/gc.h caml/mlvalues.h caml/misc.h caml/major_gc.h \ + caml/freelist.h caml/minor_gc.h caml/address_class.h caml/osdeps.h \ + caml/memory.h caml/version.h obj_ni.$(O): obj.c caml/alloc.h caml/misc.h caml/config.h caml/m.h caml/s.h \ - caml/mlvalues.h caml/fail.h caml/gc.h caml/interp.h caml/major_gc.h \ - caml/freelist.h caml/memory.h caml/minor_gc.h caml/address_class.h \ - caml/prims.h caml/spacetime.h caml/io.h caml/stack.h + caml/mlvalues.h caml/fail.h caml/gc.h caml/interp.h caml/major_gc.h \ + caml/freelist.h caml/memory.h caml/gc.h caml/major_gc.h caml/minor_gc.h \ + caml/address_class.h caml/minor_gc.h caml/misc.h caml/mlvalues.h \ + caml/prims.h caml/spacetime.h caml/io.h caml/stack.h parsing_ni.$(O): parsing.c caml/config.h caml/m.h caml/s.h caml/mlvalues.h \ - caml/misc.h caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h \ - caml/minor_gc.h caml/address_class.h caml/alloc.h + caml/config.h caml/misc.h caml/memory.h caml/gc.h caml/mlvalues.h \ + caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ + caml/alloc.h prims_ni.$(O): prims.c caml/mlvalues.h caml/config.h caml/m.h caml/s.h \ - caml/misc.h caml/prims.h + caml/misc.h caml/prims.h printexc_ni.$(O): printexc.c caml/backtrace.h caml/mlvalues.h caml/config.h \ - caml/m.h caml/s.h caml/misc.h caml/exec.h caml/callback.h \ - caml/debugger.h caml/fail.h caml/printexc.h caml/memory.h caml/gc.h \ - caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h + caml/m.h caml/s.h caml/misc.h caml/exec.h caml/callback.h \ + caml/debugger.h caml/fail.h caml/misc.h caml/mlvalues.h caml/printexc.h \ + caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h roots_byt_ni.$(O): roots_byt.c caml/finalise.h caml/roots.h caml/misc.h \ - caml/config.h caml/m.h caml/s.h caml/memory.h caml/gc.h \ - caml/mlvalues.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ - caml/address_class.h caml/globroots.h caml/stacks.h + caml/config.h caml/m.h caml/s.h caml/memory.h caml/gc.h caml/mlvalues.h \ + caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ + caml/globroots.h caml/major_gc.h caml/memory.h caml/minor_gc.h \ + caml/misc.h caml/mlvalues.h caml/roots.h caml/stacks.h roots_nat_ni.$(O): roots_nat.c caml/finalise.h caml/roots.h caml/misc.h \ - caml/config.h caml/m.h caml/s.h caml/memory.h caml/gc.h \ - caml/mlvalues.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ - caml/address_class.h caml/globroots.h caml/stack.h -signals_ni.$(O): signals.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \ - caml/s.h caml/mlvalues.h caml/callback.h caml/fail.h caml/memory.h \ - caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ - caml/address_class.h caml/roots.h caml/signals.h \ - caml/signals_machdep.h caml/sys.h + caml/config.h caml/m.h caml/s.h caml/memory.h caml/gc.h caml/mlvalues.h \ + caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ + caml/globroots.h caml/memory.h caml/major_gc.h caml/minor_gc.h \ + caml/misc.h caml/mlvalues.h caml/stack.h caml/roots.h signals_byt_ni.$(O): signals_byt.c caml/config.h caml/m.h caml/s.h \ - caml/memory.h caml/gc.h caml/mlvalues.h caml/misc.h caml/major_gc.h \ - caml/freelist.h caml/minor_gc.h caml/address_class.h caml/osdeps.h \ - caml/signals.h caml/signals_machdep.h + caml/memory.h caml/config.h caml/gc.h caml/mlvalues.h caml/misc.h \ + caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ + caml/osdeps.h caml/memory.h caml/signals.h caml/signals_machdep.h +signals_ni.$(O): signals.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \ + caml/s.h caml/mlvalues.h caml/callback.h caml/config.h caml/fail.h \ + caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/misc.h caml/mlvalues.h caml/roots.h \ + caml/memory.h caml/signals.h caml/signals_machdep.h caml/sys.h signals_nat_ni.$(O): signals_nat.c caml/fail.h caml/misc.h caml/config.h \ - caml/m.h caml/s.h caml/mlvalues.h caml/memory.h caml/gc.h \ - caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ - caml/osdeps.h caml/signals.h caml/signals_machdep.h signals_osdep.h \ - caml/stack.h caml/spacetime.h caml/io.h + caml/m.h caml/s.h caml/mlvalues.h caml/memory.h caml/gc.h \ + caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ + caml/osdeps.h caml/memory.h caml/signals.h caml/signals_machdep.h \ + signals_osdep.h caml/stack.h caml/spacetime.h caml/io.h caml/stack.h spacetime_byt_ni.$(O): spacetime_byt.c caml/fail.h caml/misc.h caml/config.h \ - caml/m.h caml/s.h caml/mlvalues.h + caml/m.h caml/s.h caml/mlvalues.h caml/mlvalues.h spacetime_nat_ni.$(O): spacetime_nat.c caml/config.h caml/m.h caml/s.h \ - caml/alloc.h caml/misc.h caml/mlvalues.h caml/backtrace_prim.h \ - caml/backtrace.h caml/exec.h caml/fail.h caml/gc.h caml/intext.h \ - caml/io.h caml/major_gc.h caml/freelist.h caml/memory.h \ - caml/minor_gc.h caml/address_class.h caml/osdeps.h caml/roots.h \ - caml/signals.h caml/stack.h caml/sys.h caml/spacetime.h + caml/alloc.h caml/misc.h caml/config.h caml/mlvalues.h \ + caml/backtrace_prim.h caml/backtrace.h caml/exec.h caml/fail.h caml/gc.h \ + caml/intext.h caml/io.h caml/major_gc.h caml/freelist.h caml/memory.h \ + caml/gc.h caml/major_gc.h caml/minor_gc.h caml/address_class.h \ + caml/minor_gc.h caml/misc.h caml/mlvalues.h caml/osdeps.h caml/memory.h \ + caml/roots.h caml/signals.h caml/stack.h caml/sys.h caml/spacetime.h \ + caml/stack.h spacetime_snapshot_ni.$(O): spacetime_snapshot.c caml/alloc.h caml/misc.h \ - caml/config.h caml/m.h caml/s.h caml/mlvalues.h caml/backtrace_prim.h \ - caml/backtrace.h caml/exec.h caml/custom.h caml/fail.h caml/gc.h \ - caml/gc_ctrl.h caml/intext.h caml/io.h caml/major_gc.h caml/freelist.h \ - caml/memory.h caml/minor_gc.h caml/address_class.h caml/roots.h \ - caml/signals.h caml/stack.h caml/sys.h caml/spacetime.h + caml/config.h caml/m.h caml/s.h caml/mlvalues.h caml/backtrace_prim.h \ + caml/backtrace.h caml/exec.h caml/config.h caml/custom.h caml/fail.h \ + caml/gc.h caml/gc_ctrl.h caml/intext.h caml/io.h caml/major_gc.h \ + caml/freelist.h caml/memory.h caml/gc.h caml/major_gc.h caml/minor_gc.h \ + caml/address_class.h caml/minor_gc.h caml/misc.h caml/mlvalues.h \ + caml/roots.h caml/memory.h caml/signals.h caml/stack.h caml/sys.h \ + caml/spacetime.h caml/stack.h stacks_ni.$(O): stacks.c caml/config.h caml/m.h caml/s.h caml/fail.h \ - caml/misc.h caml/mlvalues.h caml/stacks.h caml/memory.h caml/gc.h \ - caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h + caml/misc.h caml/config.h caml/mlvalues.h caml/misc.h caml/mlvalues.h \ + caml/stacks.h caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h \ + caml/minor_gc.h caml/address_class.h startup_aux_ni.$(O): startup_aux.c caml/backtrace.h caml/mlvalues.h \ - caml/config.h caml/m.h caml/s.h caml/misc.h caml/exec.h caml/memory.h \ - caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ - caml/address_class.h caml/callback.h caml/osdeps.h caml/startup_aux.h + caml/config.h caml/m.h caml/s.h caml/misc.h caml/exec.h caml/memory.h \ + caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/callback.h caml/major_gc.h caml/osdeps.h \ + caml/memory.h caml/startup_aux.h startup_byt_ni.$(O): startup_byt.c caml/config.h caml/m.h caml/s.h caml/alloc.h \ - caml/misc.h caml/mlvalues.h caml/backtrace.h caml/exec.h \ - caml/callback.h caml/custom.h caml/debugger.h caml/dynlink.h \ - caml/fail.h caml/fix_code.h caml/freelist.h caml/gc_ctrl.h \ - caml/instrtrace.h caml/interp.h caml/intext.h caml/io.h caml/memory.h \ - caml/gc.h caml/major_gc.h caml/minor_gc.h caml/address_class.h \ - caml/osdeps.h caml/prims.h caml/printexc.h caml/reverse.h \ - caml/signals.h caml/stacks.h caml/sys.h caml/startup.h \ - caml/startup_aux.h caml/version.h + caml/misc.h caml/config.h caml/mlvalues.h caml/backtrace.h caml/exec.h \ + caml/callback.h caml/custom.h caml/debugger.h caml/dynlink.h caml/exec.h \ + caml/fail.h caml/fix_code.h caml/freelist.h caml/gc_ctrl.h \ + caml/instrtrace.h caml/interp.h caml/intext.h caml/io.h caml/io.h \ + caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/minor_gc.h caml/misc.h caml/mlvalues.h \ + caml/osdeps.h caml/memory.h caml/prims.h caml/printexc.h caml/reverse.h \ + caml/signals.h caml/stacks.h caml/sys.h caml/startup.h \ + caml/startup_aux.h caml/version.h startup_nat_ni.$(O): startup_nat.c caml/callback.h caml/mlvalues.h \ - caml/config.h caml/m.h caml/s.h caml/misc.h caml/backtrace.h \ - caml/exec.h caml/custom.h caml/debugger.h caml/fail.h caml/freelist.h \ - caml/gc.h caml/gc_ctrl.h caml/intext.h caml/io.h caml/memory.h \ - caml/major_gc.h caml/minor_gc.h caml/address_class.h caml/osdeps.h \ - caml/printexc.h caml/stack.h caml/startup_aux.h caml/sys.h + caml/config.h caml/m.h caml/s.h caml/misc.h caml/backtrace.h caml/exec.h \ + caml/custom.h caml/debugger.h caml/fail.h caml/freelist.h caml/gc.h \ + caml/gc_ctrl.h caml/intext.h caml/io.h caml/memory.h caml/gc.h \ + caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ + caml/misc.h caml/mlvalues.h caml/osdeps.h caml/memory.h caml/printexc.h \ + caml/stack.h caml/startup_aux.h caml/sys.h str_ni.$(O): str.c caml/alloc.h caml/misc.h caml/config.h caml/m.h caml/s.h \ - caml/mlvalues.h caml/fail.h caml/memory.h caml/gc.h caml/major_gc.h \ - caml/freelist.h caml/minor_gc.h caml/address_class.h + caml/mlvalues.h caml/fail.h caml/memory.h caml/gc.h caml/major_gc.h \ + caml/freelist.h caml/minor_gc.h caml/address_class.h caml/mlvalues.h \ + caml/misc.h sys_ni.$(O): sys.c caml/config.h caml/m.h caml/s.h caml/alloc.h caml/misc.h \ - caml/mlvalues.h caml/debugger.h caml/fail.h caml/gc_ctrl.h caml/io.h \ - caml/osdeps.h caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h \ - caml/minor_gc.h caml/address_class.h caml/signals.h caml/stacks.h \ - caml/sys.h caml/version.h caml/callback.h caml/startup_aux.h + caml/config.h caml/mlvalues.h caml/debugger.h caml/fail.h caml/gc_ctrl.h \ + caml/io.h caml/misc.h caml/mlvalues.h caml/osdeps.h caml/memory.h \ + caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/signals.h caml/stacks.h caml/sys.h \ + caml/version.h caml/callback.h caml/startup_aux.h unix_ni.$(O): unix.c caml/config.h caml/m.h caml/s.h caml/fail.h caml/misc.h \ - caml/mlvalues.h caml/memory.h caml/gc.h caml/major_gc.h \ - caml/freelist.h caml/minor_gc.h caml/address_class.h caml/osdeps.h \ - caml/signals.h caml/sys.h caml/io.h caml/alloc.h + caml/config.h caml/mlvalues.h caml/memory.h caml/gc.h caml/major_gc.h \ + caml/freelist.h caml/minor_gc.h caml/address_class.h caml/misc.h \ + caml/osdeps.h caml/memory.h caml/signals.h caml/sys.h caml/io.h \ + caml/alloc.h weak_ni.$(O): weak.c caml/alloc.h caml/misc.h caml/config.h caml/m.h caml/s.h \ - caml/mlvalues.h caml/fail.h caml/major_gc.h caml/freelist.h \ - caml/memory.h caml/gc.h caml/minor_gc.h caml/address_class.h \ - caml/weak.h caml/signals.h -afl_np.$(O): afl.c caml/config.h caml/m.h caml/s.h caml/misc.h caml/mlvalues.h \ - caml/osdeps.h caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h \ - caml/minor_gc.h caml/address_class.h + caml/mlvalues.h caml/fail.h caml/major_gc.h caml/freelist.h \ + caml/memory.h caml/gc.h caml/major_gc.h caml/minor_gc.h \ + caml/address_class.h caml/mlvalues.h caml/weak.h caml/minor_gc.h \ + caml/signals.h +win32_ni.$(O): win32.c caml/alloc.h caml/misc.h caml/config.h caml/m.h caml/s.h \ + caml/mlvalues.h caml/address_class.h caml/fail.h caml/io.h caml/memory.h \ + caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/misc.h caml/osdeps.h caml/memory.h \ + caml/signals.h caml/sys.h caml/config.h +afl_np.$(O): afl.c caml/config.h caml/m.h caml/s.h caml/misc.h caml/config.h \ + caml/mlvalues.h caml/misc.h caml/osdeps.h caml/memory.h caml/gc.h \ + caml/mlvalues.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h alloc_np.$(O): alloc.c caml/alloc.h caml/misc.h caml/config.h caml/m.h caml/s.h \ - caml/mlvalues.h caml/custom.h caml/major_gc.h caml/freelist.h \ - caml/memory.h caml/gc.h caml/minor_gc.h caml/address_class.h \ - caml/stacks.h + caml/mlvalues.h caml/custom.h caml/major_gc.h caml/freelist.h \ + caml/memory.h caml/gc.h caml/major_gc.h caml/minor_gc.h \ + caml/address_class.h caml/mlvalues.h caml/stacks.h caml/memory.h array_np.$(O): array.c caml/alloc.h caml/misc.h caml/config.h caml/m.h caml/s.h \ - caml/mlvalues.h caml/fail.h caml/memory.h caml/gc.h caml/major_gc.h \ - caml/freelist.h caml/minor_gc.h caml/address_class.h caml/signals.h \ - caml/spacetime.h caml/io.h caml/stack.h -backtrace_np.$(O): backtrace.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \ - caml/s.h caml/mlvalues.h caml/memory.h caml/gc.h caml/major_gc.h \ - caml/freelist.h caml/minor_gc.h caml/address_class.h caml/backtrace.h \ - caml/exec.h caml/backtrace_prim.h caml/fail.h + caml/mlvalues.h caml/fail.h caml/memory.h caml/gc.h caml/major_gc.h \ + caml/freelist.h caml/minor_gc.h caml/address_class.h caml/misc.h \ + caml/mlvalues.h caml/signals.h caml/spacetime.h caml/io.h caml/stack.h backtrace_byt_np.$(O): backtrace_byt.c caml/config.h caml/m.h caml/s.h \ - caml/mlvalues.h caml/misc.h caml/alloc.h caml/custom.h caml/io.h \ - caml/instruct.h caml/intext.h caml/exec.h caml/fix_code.h \ - caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h \ - caml/minor_gc.h caml/address_class.h caml/startup.h caml/stacks.h \ - caml/sys.h caml/backtrace.h caml/fail.h caml/backtrace_prim.h + caml/mlvalues.h caml/config.h caml/misc.h caml/alloc.h caml/mlvalues.h \ + caml/custom.h caml/io.h caml/instruct.h caml/intext.h caml/io.h \ + caml/exec.h caml/fix_code.h caml/memory.h caml/gc.h caml/major_gc.h \ + caml/freelist.h caml/minor_gc.h caml/address_class.h caml/startup.h \ + caml/exec.h caml/stacks.h caml/memory.h caml/sys.h caml/backtrace.h \ + caml/fail.h caml/backtrace_prim.h caml/backtrace.h +backtrace_np.$(O): backtrace.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \ + caml/s.h caml/mlvalues.h caml/memory.h caml/gc.h caml/major_gc.h \ + caml/freelist.h caml/minor_gc.h caml/address_class.h caml/backtrace.h \ + caml/exec.h caml/backtrace_prim.h caml/backtrace.h caml/fail.h backtrace_nat_np.$(O): backtrace_nat.c caml/alloc.h caml/misc.h caml/config.h \ - caml/m.h caml/s.h caml/mlvalues.h caml/backtrace.h caml/exec.h \ - caml/backtrace_prim.h caml/memory.h caml/gc.h caml/major_gc.h \ - caml/freelist.h caml/minor_gc.h caml/address_class.h caml/stack.h + caml/m.h caml/s.h caml/mlvalues.h caml/backtrace.h caml/exec.h \ + caml/backtrace_prim.h caml/backtrace.h caml/memory.h caml/gc.h \ + caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ + caml/misc.h caml/mlvalues.h caml/stack.h bigarray_np.$(O): bigarray.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \ - caml/s.h caml/mlvalues.h caml/bigarray.h caml/custom.h caml/fail.h \ - caml/intext.h caml/io.h caml/hash.h caml/memory.h caml/gc.h \ - caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ - caml/signals.h + caml/s.h caml/mlvalues.h caml/bigarray.h caml/custom.h caml/fail.h \ + caml/intext.h caml/io.h caml/hash.h caml/memory.h caml/gc.h \ + caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ + caml/mlvalues.h caml/signals.h callback_np.$(O): callback.c caml/callback.h caml/mlvalues.h caml/config.h \ - caml/m.h caml/s.h caml/misc.h caml/fail.h caml/memory.h caml/gc.h \ - caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h + caml/m.h caml/s.h caml/misc.h caml/fail.h caml/memory.h caml/gc.h \ + caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ + caml/mlvalues.h clambda_checks_np.$(O): clambda_checks.c caml/mlvalues.h caml/config.h caml/m.h \ - caml/s.h caml/misc.h + caml/s.h caml/misc.h compact_np.$(O): compact.c caml/address_class.h caml/config.h caml/m.h caml/s.h \ - caml/misc.h caml/mlvalues.h caml/finalise.h caml/roots.h caml/memory.h \ - caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ - caml/gc_ctrl.h caml/weak.h caml/compact.h + caml/misc.h caml/mlvalues.h caml/config.h caml/finalise.h caml/roots.h \ + caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/freelist.h caml/gc.h caml/gc_ctrl.h \ + caml/major_gc.h caml/memory.h caml/mlvalues.h caml/roots.h caml/weak.h \ + caml/compact.h compare_np.$(O): compare.c caml/custom.h caml/mlvalues.h caml/config.h caml/m.h \ - caml/s.h caml/misc.h caml/fail.h caml/memory.h caml/gc.h \ - caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h + caml/s.h caml/misc.h caml/fail.h caml/memory.h caml/gc.h caml/major_gc.h \ + caml/freelist.h caml/minor_gc.h caml/address_class.h caml/misc.h \ + caml/mlvalues.h custom_np.$(O): custom.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \ - caml/s.h caml/mlvalues.h caml/custom.h caml/fail.h caml/gc_ctrl.h \ - caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h \ - caml/minor_gc.h caml/address_class.h caml/signals.h + caml/s.h caml/mlvalues.h caml/custom.h caml/fail.h caml/gc_ctrl.h \ + caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/mlvalues.h caml/signals.h debugger_np.$(O): debugger.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \ - caml/s.h caml/mlvalues.h caml/debugger.h caml/osdeps.h caml/memory.h \ - caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ - caml/address_class.h + caml/s.h caml/mlvalues.h caml/config.h caml/debugger.h caml/misc.h \ + caml/osdeps.h caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h \ + caml/minor_gc.h caml/address_class.h dynlink_np.$(O): dynlink.c caml/config.h caml/m.h caml/s.h caml/alloc.h \ - caml/misc.h caml/mlvalues.h caml/dynlink.h caml/fail.h caml/memory.h \ - caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ - caml/address_class.h caml/osdeps.h caml/prims.h caml/signals.h + caml/misc.h caml/config.h caml/mlvalues.h caml/dynlink.h caml/fail.h \ + caml/mlvalues.h caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h \ + caml/minor_gc.h caml/address_class.h caml/misc.h caml/osdeps.h \ + caml/memory.h caml/prims.h caml/signals.h dynlink_nat_np.$(O): dynlink_nat.c caml/misc.h caml/config.h caml/m.h caml/s.h \ - caml/mlvalues.h caml/memory.h caml/gc.h caml/major_gc.h \ - caml/freelist.h caml/minor_gc.h caml/address_class.h caml/stack.h \ - caml/callback.h caml/alloc.h caml/intext.h caml/io.h caml/osdeps.h \ - caml/fail.h caml/signals.h caml/hooks.h + caml/mlvalues.h caml/misc.h caml/memory.h caml/gc.h caml/mlvalues.h \ + caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ + caml/stack.h caml/callback.h caml/alloc.h caml/intext.h caml/io.h \ + caml/osdeps.h caml/memory.h caml/fail.h caml/signals.h caml/hooks.h extern_np.$(O): extern.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \ - caml/s.h caml/mlvalues.h caml/custom.h caml/fail.h caml/gc.h \ - caml/intext.h caml/io.h caml/md5.h caml/memory.h caml/major_gc.h \ - caml/freelist.h caml/minor_gc.h caml/address_class.h caml/reverse.h + caml/s.h caml/mlvalues.h caml/config.h caml/custom.h caml/fail.h \ + caml/gc.h caml/intext.h caml/io.h caml/io.h caml/md5.h caml/memory.h \ + caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/misc.h caml/mlvalues.h caml/reverse.h fail_byt_np.$(O): fail_byt.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \ - caml/s.h caml/mlvalues.h caml/fail.h caml/io.h caml/gc.h caml/memory.h \ - caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ - caml/printexc.h caml/signals.h caml/stacks.h + caml/s.h caml/mlvalues.h caml/fail.h caml/io.h caml/gc.h caml/memory.h \ + caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/misc.h caml/mlvalues.h caml/printexc.h \ + caml/signals.h caml/stacks.h caml/memory.h fail_nat_np.$(O): fail_nat.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \ - caml/s.h caml/mlvalues.h caml/fail.h caml/io.h caml/gc.h caml/memory.h \ - caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ - caml/printexc.h caml/signals.h caml/stack.h caml/roots.h \ - caml/callback.h + caml/s.h caml/mlvalues.h caml/fail.h caml/io.h caml/gc.h caml/memory.h \ + caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/mlvalues.h caml/printexc.h caml/signals.h \ + caml/stack.h caml/roots.h caml/memory.h caml/callback.h finalise_np.$(O): finalise.c caml/callback.h caml/mlvalues.h caml/config.h \ - caml/m.h caml/s.h caml/misc.h caml/compact.h caml/fail.h \ - caml/finalise.h caml/roots.h caml/memory.h caml/gc.h caml/major_gc.h \ - caml/freelist.h caml/minor_gc.h caml/address_class.h caml/signals.h + caml/m.h caml/s.h caml/misc.h caml/compact.h caml/fail.h caml/finalise.h \ + caml/roots.h caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h \ + caml/minor_gc.h caml/address_class.h caml/minor_gc.h caml/mlvalues.h \ + caml/roots.h caml/signals.h fix_code_np.$(O): fix_code.c caml/config.h caml/m.h caml/s.h caml/debugger.h \ - caml/misc.h caml/mlvalues.h caml/fix_code.h caml/instruct.h \ - caml/intext.h caml/io.h caml/md5.h caml/memory.h caml/gc.h \ - caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ - caml/reverse.h + caml/misc.h caml/config.h caml/mlvalues.h caml/fix_code.h \ + caml/instruct.h caml/intext.h caml/io.h caml/md5.h caml/memory.h \ + caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/misc.h caml/mlvalues.h caml/reverse.h floats_np.$(O): floats.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \ - caml/s.h caml/mlvalues.h caml/fail.h caml/memory.h caml/gc.h \ - caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ - caml/reverse.h caml/stacks.h + caml/s.h caml/mlvalues.h caml/fail.h caml/memory.h caml/gc.h \ + caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ + caml/mlvalues.h caml/misc.h caml/reverse.h caml/stacks.h caml/memory.h freelist_np.$(O): freelist.c caml/config.h caml/m.h caml/s.h caml/freelist.h \ - caml/misc.h caml/mlvalues.h caml/gc.h caml/gc_ctrl.h caml/memory.h \ - caml/major_gc.h caml/minor_gc.h caml/address_class.h + caml/misc.h caml/config.h caml/mlvalues.h caml/gc.h caml/gc_ctrl.h \ + caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/major_gc.h caml/misc.h caml/mlvalues.h gc_ctrl_np.$(O): gc_ctrl.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \ - caml/s.h caml/mlvalues.h caml/backtrace.h caml/exec.h caml/compact.h \ - caml/custom.h caml/fail.h caml/finalise.h caml/roots.h caml/memory.h \ - caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ - caml/address_class.h caml/gc_ctrl.h caml/signals.h caml/stack.h \ - caml/startup_aux.h + caml/s.h caml/mlvalues.h caml/backtrace.h caml/exec.h caml/compact.h \ + caml/custom.h caml/fail.h caml/finalise.h caml/roots.h caml/memory.h \ + caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/freelist.h caml/gc.h caml/gc_ctrl.h \ + caml/major_gc.h caml/memory.h caml/minor_gc.h caml/misc.h \ + caml/mlvalues.h caml/signals.h caml/stack.h caml/startup_aux.h globroots_np.$(O): globroots.c caml/memory.h caml/config.h caml/m.h caml/s.h \ - caml/gc.h caml/mlvalues.h caml/misc.h caml/major_gc.h caml/freelist.h \ - caml/minor_gc.h caml/address_class.h caml/roots.h caml/globroots.h + caml/gc.h caml/mlvalues.h caml/misc.h caml/major_gc.h caml/freelist.h \ + caml/minor_gc.h caml/address_class.h caml/misc.h caml/mlvalues.h \ + caml/roots.h caml/memory.h caml/globroots.h caml/roots.h hash_np.$(O): hash.c caml/mlvalues.h caml/config.h caml/m.h caml/s.h \ - caml/misc.h caml/custom.h caml/memory.h caml/gc.h caml/major_gc.h \ - caml/freelist.h caml/minor_gc.h caml/address_class.h caml/hash.h + caml/misc.h caml/custom.h caml/mlvalues.h caml/memory.h caml/gc.h \ + caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ + caml/hash.h instrtrace_np.$(O): instrtrace.c intern_np.$(O): intern.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \ - caml/s.h caml/mlvalues.h caml/callback.h caml/custom.h caml/fail.h \ - caml/gc.h caml/intext.h caml/io.h caml/md5.h caml/memory.h \ - caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ - caml/reverse.h + caml/s.h caml/mlvalues.h caml/callback.h caml/config.h caml/custom.h \ + caml/fail.h caml/gc.h caml/intext.h caml/io.h caml/io.h caml/md5.h \ + caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/mlvalues.h caml/misc.h caml/reverse.h interp_np.$(O): interp.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \ - caml/s.h caml/mlvalues.h caml/backtrace.h caml/exec.h caml/callback.h \ - caml/debugger.h caml/fail.h caml/fix_code.h caml/instrtrace.h \ - caml/instruct.h caml/interp.h caml/major_gc.h caml/freelist.h \ - caml/memory.h caml/gc.h caml/minor_gc.h caml/address_class.h \ - caml/prims.h caml/signals.h caml/stacks.h caml/startup_aux.h \ - caml/jumptbl.h + caml/s.h caml/mlvalues.h caml/backtrace.h caml/exec.h caml/callback.h \ + caml/debugger.h caml/fail.h caml/fix_code.h caml/instrtrace.h \ + caml/instruct.h caml/interp.h caml/major_gc.h caml/freelist.h \ + caml/memory.h caml/gc.h caml/major_gc.h caml/minor_gc.h \ + caml/address_class.h caml/misc.h caml/mlvalues.h caml/prims.h \ + caml/signals.h caml/stacks.h caml/memory.h caml/startup_aux.h \ + caml/jumptbl.h ints_np.$(O): ints.c caml/alloc.h caml/misc.h caml/config.h caml/m.h caml/s.h \ - caml/mlvalues.h caml/custom.h caml/fail.h caml/intext.h caml/io.h \ - caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h \ - caml/minor_gc.h caml/address_class.h + caml/mlvalues.h caml/custom.h caml/fail.h caml/intext.h caml/io.h \ + caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/misc.h caml/mlvalues.h io_np.$(O): io.c caml/config.h caml/m.h caml/s.h caml/alloc.h caml/misc.h \ - caml/mlvalues.h caml/custom.h caml/fail.h caml/io.h caml/memory.h \ - caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ - caml/address_class.h caml/osdeps.h caml/signals.h caml/sys.h + caml/config.h caml/mlvalues.h caml/custom.h caml/fail.h caml/io.h \ + caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/misc.h caml/mlvalues.h caml/osdeps.h \ + caml/memory.h caml/signals.h caml/sys.h lexing_np.$(O): lexing.c caml/fail.h caml/misc.h caml/config.h caml/m.h \ - caml/s.h caml/mlvalues.h caml/stacks.h caml/memory.h caml/gc.h \ - caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h + caml/s.h caml/mlvalues.h caml/mlvalues.h caml/stacks.h caml/memory.h \ + caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h main_np.$(O): main.c caml/misc.h caml/config.h caml/m.h caml/s.h \ - caml/mlvalues.h caml/sys.h caml/osdeps.h caml/memory.h caml/gc.h \ - caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h + caml/mlvalues.h caml/misc.h caml/sys.h caml/osdeps.h caml/memory.h \ + caml/gc.h caml/mlvalues.h caml/major_gc.h caml/freelist.h \ + caml/minor_gc.h caml/address_class.h major_gc_np.$(O): major_gc.c caml/compact.h caml/config.h caml/m.h caml/s.h \ - caml/misc.h caml/mlvalues.h caml/custom.h caml/fail.h caml/finalise.h \ - caml/roots.h caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h \ - caml/minor_gc.h caml/address_class.h caml/gc_ctrl.h caml/signals.h \ - caml/weak.h + caml/misc.h caml/mlvalues.h caml/custom.h caml/config.h caml/fail.h \ + caml/finalise.h caml/roots.h caml/memory.h caml/gc.h caml/major_gc.h \ + caml/freelist.h caml/minor_gc.h caml/address_class.h caml/freelist.h \ + caml/gc.h caml/gc_ctrl.h caml/major_gc.h caml/misc.h caml/mlvalues.h \ + caml/roots.h caml/signals.h caml/weak.h md5_np.$(O): md5.c caml/alloc.h caml/misc.h caml/config.h caml/m.h caml/s.h \ - caml/mlvalues.h caml/fail.h caml/md5.h caml/io.h caml/memory.h \ - caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ - caml/address_class.h caml/reverse.h + caml/mlvalues.h caml/fail.h caml/md5.h caml/io.h caml/memory.h caml/gc.h \ + caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ + caml/mlvalues.h caml/io.h caml/reverse.h memory_np.$(O): memory.c caml/address_class.h caml/config.h caml/m.h caml/s.h \ - caml/misc.h caml/mlvalues.h caml/fail.h caml/freelist.h caml/gc.h \ - caml/gc_ctrl.h caml/major_gc.h caml/memory.h caml/minor_gc.h \ - caml/signals.h + caml/misc.h caml/mlvalues.h caml/config.h caml/fail.h caml/freelist.h \ + caml/gc.h caml/gc_ctrl.h caml/major_gc.h caml/freelist.h caml/memory.h \ + caml/gc.h caml/major_gc.h caml/minor_gc.h caml/address_class.h \ + caml/minor_gc.h caml/misc.h caml/mlvalues.h caml/signals.h meta_np.$(O): meta.c caml/alloc.h caml/misc.h caml/config.h caml/m.h caml/s.h \ - caml/mlvalues.h caml/fail.h caml/fix_code.h caml/interp.h \ - caml/intext.h caml/io.h caml/major_gc.h caml/freelist.h caml/memory.h \ - caml/gc.h caml/minor_gc.h caml/address_class.h caml/prims.h \ - caml/stacks.h caml/backtrace_prim.h caml/backtrace.h caml/exec.h + caml/mlvalues.h caml/config.h caml/fail.h caml/fix_code.h caml/interp.h \ + caml/intext.h caml/io.h caml/major_gc.h caml/freelist.h caml/memory.h \ + caml/gc.h caml/major_gc.h caml/minor_gc.h caml/address_class.h \ + caml/minor_gc.h caml/misc.h caml/mlvalues.h caml/prims.h caml/stacks.h \ + caml/memory.h caml/backtrace_prim.h caml/backtrace.h caml/exec.h minor_gc_np.$(O): minor_gc.c caml/custom.h caml/mlvalues.h caml/config.h \ - caml/m.h caml/s.h caml/misc.h caml/fail.h caml/finalise.h caml/roots.h \ - caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h \ - caml/minor_gc.h caml/address_class.h caml/gc_ctrl.h caml/signals.h \ - caml/weak.h -misc_np.$(O): misc.c caml/config.h caml/m.h caml/s.h caml/misc.h caml/memory.h \ - caml/gc.h caml/mlvalues.h caml/major_gc.h caml/freelist.h \ - caml/minor_gc.h caml/address_class.h caml/osdeps.h caml/version.h + caml/m.h caml/s.h caml/misc.h caml/config.h caml/fail.h caml/finalise.h \ + caml/roots.h caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h \ + caml/minor_gc.h caml/address_class.h caml/gc.h caml/gc_ctrl.h \ + caml/major_gc.h caml/memory.h caml/minor_gc.h caml/misc.h \ + caml/mlvalues.h caml/roots.h caml/signals.h caml/weak.h +misc_np.$(O): misc.c caml/config.h caml/m.h caml/s.h caml/misc.h caml/config.h \ + caml/memory.h caml/gc.h caml/mlvalues.h caml/misc.h caml/major_gc.h \ + caml/freelist.h caml/minor_gc.h caml/address_class.h caml/osdeps.h \ + caml/memory.h caml/version.h obj_np.$(O): obj.c caml/alloc.h caml/misc.h caml/config.h caml/m.h caml/s.h \ - caml/mlvalues.h caml/fail.h caml/gc.h caml/interp.h caml/major_gc.h \ - caml/freelist.h caml/memory.h caml/minor_gc.h caml/address_class.h \ - caml/prims.h caml/spacetime.h caml/io.h caml/stack.h + caml/mlvalues.h caml/fail.h caml/gc.h caml/interp.h caml/major_gc.h \ + caml/freelist.h caml/memory.h caml/gc.h caml/major_gc.h caml/minor_gc.h \ + caml/address_class.h caml/minor_gc.h caml/misc.h caml/mlvalues.h \ + caml/prims.h caml/spacetime.h caml/io.h caml/stack.h parsing_np.$(O): parsing.c caml/config.h caml/m.h caml/s.h caml/mlvalues.h \ - caml/misc.h caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h \ - caml/minor_gc.h caml/address_class.h caml/alloc.h + caml/config.h caml/misc.h caml/memory.h caml/gc.h caml/mlvalues.h \ + caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ + caml/alloc.h prims_np.$(O): prims.c caml/mlvalues.h caml/config.h caml/m.h caml/s.h \ - caml/misc.h caml/prims.h + caml/misc.h caml/prims.h printexc_np.$(O): printexc.c caml/backtrace.h caml/mlvalues.h caml/config.h \ - caml/m.h caml/s.h caml/misc.h caml/exec.h caml/callback.h \ - caml/debugger.h caml/fail.h caml/printexc.h caml/memory.h caml/gc.h \ - caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h + caml/m.h caml/s.h caml/misc.h caml/exec.h caml/callback.h \ + caml/debugger.h caml/fail.h caml/misc.h caml/mlvalues.h caml/printexc.h \ + caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h roots_byt_np.$(O): roots_byt.c caml/finalise.h caml/roots.h caml/misc.h \ - caml/config.h caml/m.h caml/s.h caml/memory.h caml/gc.h \ - caml/mlvalues.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ - caml/address_class.h caml/globroots.h caml/stacks.h + caml/config.h caml/m.h caml/s.h caml/memory.h caml/gc.h caml/mlvalues.h \ + caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ + caml/globroots.h caml/major_gc.h caml/memory.h caml/minor_gc.h \ + caml/misc.h caml/mlvalues.h caml/roots.h caml/stacks.h roots_nat_np.$(O): roots_nat.c caml/finalise.h caml/roots.h caml/misc.h \ - caml/config.h caml/m.h caml/s.h caml/memory.h caml/gc.h \ - caml/mlvalues.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ - caml/address_class.h caml/globroots.h caml/stack.h -signals_np.$(O): signals.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \ - caml/s.h caml/mlvalues.h caml/callback.h caml/fail.h caml/memory.h \ - caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ - caml/address_class.h caml/roots.h caml/signals.h \ - caml/signals_machdep.h caml/sys.h + caml/config.h caml/m.h caml/s.h caml/memory.h caml/gc.h caml/mlvalues.h \ + caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ + caml/globroots.h caml/memory.h caml/major_gc.h caml/minor_gc.h \ + caml/misc.h caml/mlvalues.h caml/stack.h caml/roots.h signals_byt_np.$(O): signals_byt.c caml/config.h caml/m.h caml/s.h \ - caml/memory.h caml/gc.h caml/mlvalues.h caml/misc.h caml/major_gc.h \ - caml/freelist.h caml/minor_gc.h caml/address_class.h caml/osdeps.h \ - caml/signals.h caml/signals_machdep.h + caml/memory.h caml/config.h caml/gc.h caml/mlvalues.h caml/misc.h \ + caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ + caml/osdeps.h caml/memory.h caml/signals.h caml/signals_machdep.h +signals_np.$(O): signals.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \ + caml/s.h caml/mlvalues.h caml/callback.h caml/config.h caml/fail.h \ + caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/misc.h caml/mlvalues.h caml/roots.h \ + caml/memory.h caml/signals.h caml/signals_machdep.h caml/sys.h signals_nat_np.$(O): signals_nat.c caml/fail.h caml/misc.h caml/config.h \ - caml/m.h caml/s.h caml/mlvalues.h caml/memory.h caml/gc.h \ - caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ - caml/osdeps.h caml/signals.h caml/signals_machdep.h signals_osdep.h \ - caml/stack.h caml/spacetime.h caml/io.h + caml/m.h caml/s.h caml/mlvalues.h caml/memory.h caml/gc.h \ + caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ + caml/osdeps.h caml/memory.h caml/signals.h caml/signals_machdep.h \ + signals_osdep.h caml/stack.h caml/spacetime.h caml/io.h caml/stack.h spacetime_byt_np.$(O): spacetime_byt.c caml/fail.h caml/misc.h caml/config.h \ - caml/m.h caml/s.h caml/mlvalues.h + caml/m.h caml/s.h caml/mlvalues.h caml/mlvalues.h spacetime_nat_np.$(O): spacetime_nat.c caml/config.h caml/m.h caml/s.h \ - caml/alloc.h caml/misc.h caml/mlvalues.h caml/backtrace_prim.h \ - caml/backtrace.h caml/exec.h caml/fail.h caml/gc.h caml/intext.h \ - caml/io.h caml/major_gc.h caml/freelist.h caml/memory.h \ - caml/minor_gc.h caml/address_class.h caml/osdeps.h caml/roots.h \ - caml/signals.h caml/stack.h caml/sys.h caml/spacetime.h + caml/alloc.h caml/misc.h caml/config.h caml/mlvalues.h \ + caml/backtrace_prim.h caml/backtrace.h caml/exec.h caml/fail.h caml/gc.h \ + caml/intext.h caml/io.h caml/major_gc.h caml/freelist.h caml/memory.h \ + caml/gc.h caml/major_gc.h caml/minor_gc.h caml/address_class.h \ + caml/minor_gc.h caml/misc.h caml/mlvalues.h caml/osdeps.h caml/memory.h \ + caml/roots.h caml/signals.h caml/stack.h caml/sys.h caml/spacetime.h \ + caml/stack.h spacetime_snapshot_np.$(O): spacetime_snapshot.c caml/alloc.h caml/misc.h \ - caml/config.h caml/m.h caml/s.h caml/mlvalues.h caml/backtrace_prim.h \ - caml/backtrace.h caml/exec.h caml/custom.h caml/fail.h caml/gc.h \ - caml/gc_ctrl.h caml/intext.h caml/io.h caml/major_gc.h caml/freelist.h \ - caml/memory.h caml/minor_gc.h caml/address_class.h caml/roots.h \ - caml/signals.h caml/stack.h caml/sys.h caml/spacetime.h + caml/config.h caml/m.h caml/s.h caml/mlvalues.h caml/backtrace_prim.h \ + caml/backtrace.h caml/exec.h caml/config.h caml/custom.h caml/fail.h \ + caml/gc.h caml/gc_ctrl.h caml/intext.h caml/io.h caml/major_gc.h \ + caml/freelist.h caml/memory.h caml/gc.h caml/major_gc.h caml/minor_gc.h \ + caml/address_class.h caml/minor_gc.h caml/misc.h caml/mlvalues.h \ + caml/roots.h caml/memory.h caml/signals.h caml/stack.h caml/sys.h \ + caml/spacetime.h caml/stack.h stacks_np.$(O): stacks.c caml/config.h caml/m.h caml/s.h caml/fail.h \ - caml/misc.h caml/mlvalues.h caml/stacks.h caml/memory.h caml/gc.h \ - caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h + caml/misc.h caml/config.h caml/mlvalues.h caml/misc.h caml/mlvalues.h \ + caml/stacks.h caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h \ + caml/minor_gc.h caml/address_class.h startup_aux_np.$(O): startup_aux.c caml/backtrace.h caml/mlvalues.h \ - caml/config.h caml/m.h caml/s.h caml/misc.h caml/exec.h caml/memory.h \ - caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ - caml/address_class.h caml/callback.h caml/osdeps.h caml/startup_aux.h + caml/config.h caml/m.h caml/s.h caml/misc.h caml/exec.h caml/memory.h \ + caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/callback.h caml/major_gc.h caml/osdeps.h \ + caml/memory.h caml/startup_aux.h startup_byt_np.$(O): startup_byt.c caml/config.h caml/m.h caml/s.h caml/alloc.h \ - caml/misc.h caml/mlvalues.h caml/backtrace.h caml/exec.h \ - caml/callback.h caml/custom.h caml/debugger.h caml/dynlink.h \ - caml/fail.h caml/fix_code.h caml/freelist.h caml/gc_ctrl.h \ - caml/instrtrace.h caml/interp.h caml/intext.h caml/io.h caml/memory.h \ - caml/gc.h caml/major_gc.h caml/minor_gc.h caml/address_class.h \ - caml/osdeps.h caml/prims.h caml/printexc.h caml/reverse.h \ - caml/signals.h caml/stacks.h caml/sys.h caml/startup.h \ - caml/startup_aux.h caml/version.h + caml/misc.h caml/config.h caml/mlvalues.h caml/backtrace.h caml/exec.h \ + caml/callback.h caml/custom.h caml/debugger.h caml/dynlink.h caml/exec.h \ + caml/fail.h caml/fix_code.h caml/freelist.h caml/gc_ctrl.h \ + caml/instrtrace.h caml/interp.h caml/intext.h caml/io.h caml/io.h \ + caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/minor_gc.h caml/misc.h caml/mlvalues.h \ + caml/osdeps.h caml/memory.h caml/prims.h caml/printexc.h caml/reverse.h \ + caml/signals.h caml/stacks.h caml/sys.h caml/startup.h \ + caml/startup_aux.h caml/version.h startup_nat_np.$(O): startup_nat.c caml/callback.h caml/mlvalues.h \ - caml/config.h caml/m.h caml/s.h caml/misc.h caml/backtrace.h \ - caml/exec.h caml/custom.h caml/debugger.h caml/fail.h caml/freelist.h \ - caml/gc.h caml/gc_ctrl.h caml/intext.h caml/io.h caml/memory.h \ - caml/major_gc.h caml/minor_gc.h caml/address_class.h caml/osdeps.h \ - caml/printexc.h caml/stack.h caml/startup_aux.h caml/sys.h + caml/config.h caml/m.h caml/s.h caml/misc.h caml/backtrace.h caml/exec.h \ + caml/custom.h caml/debugger.h caml/fail.h caml/freelist.h caml/gc.h \ + caml/gc_ctrl.h caml/intext.h caml/io.h caml/memory.h caml/gc.h \ + caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ + caml/misc.h caml/mlvalues.h caml/osdeps.h caml/memory.h caml/printexc.h \ + caml/stack.h caml/startup_aux.h caml/sys.h str_np.$(O): str.c caml/alloc.h caml/misc.h caml/config.h caml/m.h caml/s.h \ - caml/mlvalues.h caml/fail.h caml/memory.h caml/gc.h caml/major_gc.h \ - caml/freelist.h caml/minor_gc.h caml/address_class.h + caml/mlvalues.h caml/fail.h caml/memory.h caml/gc.h caml/major_gc.h \ + caml/freelist.h caml/minor_gc.h caml/address_class.h caml/mlvalues.h \ + caml/misc.h sys_np.$(O): sys.c caml/config.h caml/m.h caml/s.h caml/alloc.h caml/misc.h \ - caml/mlvalues.h caml/debugger.h caml/fail.h caml/gc_ctrl.h caml/io.h \ - caml/osdeps.h caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h \ - caml/minor_gc.h caml/address_class.h caml/signals.h caml/stacks.h \ - caml/sys.h caml/version.h caml/callback.h caml/startup_aux.h + caml/config.h caml/mlvalues.h caml/debugger.h caml/fail.h caml/gc_ctrl.h \ + caml/io.h caml/misc.h caml/mlvalues.h caml/osdeps.h caml/memory.h \ + caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/signals.h caml/stacks.h caml/sys.h \ + caml/version.h caml/callback.h caml/startup_aux.h unix_np.$(O): unix.c caml/config.h caml/m.h caml/s.h caml/fail.h caml/misc.h \ - caml/mlvalues.h caml/memory.h caml/gc.h caml/major_gc.h \ - caml/freelist.h caml/minor_gc.h caml/address_class.h caml/osdeps.h \ - caml/signals.h caml/sys.h caml/io.h caml/alloc.h + caml/config.h caml/mlvalues.h caml/memory.h caml/gc.h caml/major_gc.h \ + caml/freelist.h caml/minor_gc.h caml/address_class.h caml/misc.h \ + caml/osdeps.h caml/memory.h caml/signals.h caml/sys.h caml/io.h \ + caml/alloc.h weak_np.$(O): weak.c caml/alloc.h caml/misc.h caml/config.h caml/m.h caml/s.h \ - caml/mlvalues.h caml/fail.h caml/major_gc.h caml/freelist.h \ - caml/memory.h caml/gc.h caml/minor_gc.h caml/address_class.h \ - caml/weak.h caml/signals.h -afl_npic.$(O): afl.c caml/config.h caml/m.h caml/s.h caml/misc.h caml/mlvalues.h \ - caml/osdeps.h caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h \ - caml/minor_gc.h caml/address_class.h + caml/mlvalues.h caml/fail.h caml/major_gc.h caml/freelist.h \ + caml/memory.h caml/gc.h caml/major_gc.h caml/minor_gc.h \ + caml/address_class.h caml/mlvalues.h caml/weak.h caml/minor_gc.h \ + caml/signals.h +win32_np.$(O): win32.c caml/alloc.h caml/misc.h caml/config.h caml/m.h caml/s.h \ + caml/mlvalues.h caml/address_class.h caml/fail.h caml/io.h caml/memory.h \ + caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/misc.h caml/osdeps.h caml/memory.h \ + caml/signals.h caml/sys.h caml/config.h +afl_npic.$(O): afl.c caml/config.h caml/m.h caml/s.h caml/misc.h caml/config.h \ + caml/mlvalues.h caml/misc.h caml/osdeps.h caml/memory.h caml/gc.h \ + caml/mlvalues.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h alloc_npic.$(O): alloc.c caml/alloc.h caml/misc.h caml/config.h caml/m.h caml/s.h \ - caml/mlvalues.h caml/custom.h caml/major_gc.h caml/freelist.h \ - caml/memory.h caml/gc.h caml/minor_gc.h caml/address_class.h \ - caml/stacks.h + caml/mlvalues.h caml/custom.h caml/major_gc.h caml/freelist.h \ + caml/memory.h caml/gc.h caml/major_gc.h caml/minor_gc.h \ + caml/address_class.h caml/mlvalues.h caml/stacks.h caml/memory.h array_npic.$(O): array.c caml/alloc.h caml/misc.h caml/config.h caml/m.h caml/s.h \ - caml/mlvalues.h caml/fail.h caml/memory.h caml/gc.h caml/major_gc.h \ - caml/freelist.h caml/minor_gc.h caml/address_class.h caml/signals.h \ - caml/spacetime.h caml/io.h caml/stack.h -backtrace_npic.$(O): backtrace.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \ - caml/s.h caml/mlvalues.h caml/memory.h caml/gc.h caml/major_gc.h \ - caml/freelist.h caml/minor_gc.h caml/address_class.h caml/backtrace.h \ - caml/exec.h caml/backtrace_prim.h caml/fail.h + caml/mlvalues.h caml/fail.h caml/memory.h caml/gc.h caml/major_gc.h \ + caml/freelist.h caml/minor_gc.h caml/address_class.h caml/misc.h \ + caml/mlvalues.h caml/signals.h caml/spacetime.h caml/io.h caml/stack.h backtrace_byt_npic.$(O): backtrace_byt.c caml/config.h caml/m.h caml/s.h \ - caml/mlvalues.h caml/misc.h caml/alloc.h caml/custom.h caml/io.h \ - caml/instruct.h caml/intext.h caml/exec.h caml/fix_code.h \ - caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h \ - caml/minor_gc.h caml/address_class.h caml/startup.h caml/stacks.h \ - caml/sys.h caml/backtrace.h caml/fail.h caml/backtrace_prim.h + caml/mlvalues.h caml/config.h caml/misc.h caml/alloc.h caml/mlvalues.h \ + caml/custom.h caml/io.h caml/instruct.h caml/intext.h caml/io.h \ + caml/exec.h caml/fix_code.h caml/memory.h caml/gc.h caml/major_gc.h \ + caml/freelist.h caml/minor_gc.h caml/address_class.h caml/startup.h \ + caml/exec.h caml/stacks.h caml/memory.h caml/sys.h caml/backtrace.h \ + caml/fail.h caml/backtrace_prim.h caml/backtrace.h +backtrace_npic.$(O): backtrace.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \ + caml/s.h caml/mlvalues.h caml/memory.h caml/gc.h caml/major_gc.h \ + caml/freelist.h caml/minor_gc.h caml/address_class.h caml/backtrace.h \ + caml/exec.h caml/backtrace_prim.h caml/backtrace.h caml/fail.h backtrace_nat_npic.$(O): backtrace_nat.c caml/alloc.h caml/misc.h caml/config.h \ - caml/m.h caml/s.h caml/mlvalues.h caml/backtrace.h caml/exec.h \ - caml/backtrace_prim.h caml/memory.h caml/gc.h caml/major_gc.h \ - caml/freelist.h caml/minor_gc.h caml/address_class.h caml/stack.h + caml/m.h caml/s.h caml/mlvalues.h caml/backtrace.h caml/exec.h \ + caml/backtrace_prim.h caml/backtrace.h caml/memory.h caml/gc.h \ + caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ + caml/misc.h caml/mlvalues.h caml/stack.h bigarray_npic.$(O): bigarray.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \ - caml/s.h caml/mlvalues.h caml/bigarray.h caml/custom.h caml/fail.h \ - caml/intext.h caml/io.h caml/hash.h caml/memory.h caml/gc.h \ - caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ - caml/signals.h + caml/s.h caml/mlvalues.h caml/bigarray.h caml/custom.h caml/fail.h \ + caml/intext.h caml/io.h caml/hash.h caml/memory.h caml/gc.h \ + caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ + caml/mlvalues.h caml/signals.h callback_npic.$(O): callback.c caml/callback.h caml/mlvalues.h caml/config.h \ - caml/m.h caml/s.h caml/misc.h caml/fail.h caml/memory.h caml/gc.h \ - caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h + caml/m.h caml/s.h caml/misc.h caml/fail.h caml/memory.h caml/gc.h \ + caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ + caml/mlvalues.h clambda_checks_npic.$(O): clambda_checks.c caml/mlvalues.h caml/config.h caml/m.h \ - caml/s.h caml/misc.h + caml/s.h caml/misc.h compact_npic.$(O): compact.c caml/address_class.h caml/config.h caml/m.h caml/s.h \ - caml/misc.h caml/mlvalues.h caml/finalise.h caml/roots.h caml/memory.h \ - caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ - caml/gc_ctrl.h caml/weak.h caml/compact.h + caml/misc.h caml/mlvalues.h caml/config.h caml/finalise.h caml/roots.h \ + caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/freelist.h caml/gc.h caml/gc_ctrl.h \ + caml/major_gc.h caml/memory.h caml/mlvalues.h caml/roots.h caml/weak.h \ + caml/compact.h compare_npic.$(O): compare.c caml/custom.h caml/mlvalues.h caml/config.h caml/m.h \ - caml/s.h caml/misc.h caml/fail.h caml/memory.h caml/gc.h \ - caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h + caml/s.h caml/misc.h caml/fail.h caml/memory.h caml/gc.h caml/major_gc.h \ + caml/freelist.h caml/minor_gc.h caml/address_class.h caml/misc.h \ + caml/mlvalues.h custom_npic.$(O): custom.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \ - caml/s.h caml/mlvalues.h caml/custom.h caml/fail.h caml/gc_ctrl.h \ - caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h \ - caml/minor_gc.h caml/address_class.h caml/signals.h + caml/s.h caml/mlvalues.h caml/custom.h caml/fail.h caml/gc_ctrl.h \ + caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/mlvalues.h caml/signals.h debugger_npic.$(O): debugger.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \ - caml/s.h caml/mlvalues.h caml/debugger.h caml/osdeps.h caml/memory.h \ - caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ - caml/address_class.h + caml/s.h caml/mlvalues.h caml/config.h caml/debugger.h caml/misc.h \ + caml/osdeps.h caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h \ + caml/minor_gc.h caml/address_class.h dynlink_npic.$(O): dynlink.c caml/config.h caml/m.h caml/s.h caml/alloc.h \ - caml/misc.h caml/mlvalues.h caml/dynlink.h caml/fail.h caml/memory.h \ - caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ - caml/address_class.h caml/osdeps.h caml/prims.h caml/signals.h + caml/misc.h caml/config.h caml/mlvalues.h caml/dynlink.h caml/fail.h \ + caml/mlvalues.h caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h \ + caml/minor_gc.h caml/address_class.h caml/misc.h caml/osdeps.h \ + caml/memory.h caml/prims.h caml/signals.h dynlink_nat_npic.$(O): dynlink_nat.c caml/misc.h caml/config.h caml/m.h caml/s.h \ - caml/mlvalues.h caml/memory.h caml/gc.h caml/major_gc.h \ - caml/freelist.h caml/minor_gc.h caml/address_class.h caml/stack.h \ - caml/callback.h caml/alloc.h caml/intext.h caml/io.h caml/osdeps.h \ - caml/fail.h caml/signals.h caml/hooks.h + caml/mlvalues.h caml/misc.h caml/memory.h caml/gc.h caml/mlvalues.h \ + caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ + caml/stack.h caml/callback.h caml/alloc.h caml/intext.h caml/io.h \ + caml/osdeps.h caml/memory.h caml/fail.h caml/signals.h caml/hooks.h extern_npic.$(O): extern.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \ - caml/s.h caml/mlvalues.h caml/custom.h caml/fail.h caml/gc.h \ - caml/intext.h caml/io.h caml/md5.h caml/memory.h caml/major_gc.h \ - caml/freelist.h caml/minor_gc.h caml/address_class.h caml/reverse.h + caml/s.h caml/mlvalues.h caml/config.h caml/custom.h caml/fail.h \ + caml/gc.h caml/intext.h caml/io.h caml/io.h caml/md5.h caml/memory.h \ + caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/misc.h caml/mlvalues.h caml/reverse.h fail_byt_npic.$(O): fail_byt.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \ - caml/s.h caml/mlvalues.h caml/fail.h caml/io.h caml/gc.h caml/memory.h \ - caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ - caml/printexc.h caml/signals.h caml/stacks.h + caml/s.h caml/mlvalues.h caml/fail.h caml/io.h caml/gc.h caml/memory.h \ + caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/misc.h caml/mlvalues.h caml/printexc.h \ + caml/signals.h caml/stacks.h caml/memory.h fail_nat_npic.$(O): fail_nat.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \ - caml/s.h caml/mlvalues.h caml/fail.h caml/io.h caml/gc.h caml/memory.h \ - caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ - caml/printexc.h caml/signals.h caml/stack.h caml/roots.h \ - caml/callback.h + caml/s.h caml/mlvalues.h caml/fail.h caml/io.h caml/gc.h caml/memory.h \ + caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/mlvalues.h caml/printexc.h caml/signals.h \ + caml/stack.h caml/roots.h caml/memory.h caml/callback.h finalise_npic.$(O): finalise.c caml/callback.h caml/mlvalues.h caml/config.h \ - caml/m.h caml/s.h caml/misc.h caml/compact.h caml/fail.h \ - caml/finalise.h caml/roots.h caml/memory.h caml/gc.h caml/major_gc.h \ - caml/freelist.h caml/minor_gc.h caml/address_class.h caml/signals.h + caml/m.h caml/s.h caml/misc.h caml/compact.h caml/fail.h caml/finalise.h \ + caml/roots.h caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h \ + caml/minor_gc.h caml/address_class.h caml/minor_gc.h caml/mlvalues.h \ + caml/roots.h caml/signals.h fix_code_npic.$(O): fix_code.c caml/config.h caml/m.h caml/s.h caml/debugger.h \ - caml/misc.h caml/mlvalues.h caml/fix_code.h caml/instruct.h \ - caml/intext.h caml/io.h caml/md5.h caml/memory.h caml/gc.h \ - caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ - caml/reverse.h + caml/misc.h caml/config.h caml/mlvalues.h caml/fix_code.h \ + caml/instruct.h caml/intext.h caml/io.h caml/md5.h caml/memory.h \ + caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/misc.h caml/mlvalues.h caml/reverse.h floats_npic.$(O): floats.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \ - caml/s.h caml/mlvalues.h caml/fail.h caml/memory.h caml/gc.h \ - caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ - caml/reverse.h caml/stacks.h + caml/s.h caml/mlvalues.h caml/fail.h caml/memory.h caml/gc.h \ + caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ + caml/mlvalues.h caml/misc.h caml/reverse.h caml/stacks.h caml/memory.h freelist_npic.$(O): freelist.c caml/config.h caml/m.h caml/s.h caml/freelist.h \ - caml/misc.h caml/mlvalues.h caml/gc.h caml/gc_ctrl.h caml/memory.h \ - caml/major_gc.h caml/minor_gc.h caml/address_class.h + caml/misc.h caml/config.h caml/mlvalues.h caml/gc.h caml/gc_ctrl.h \ + caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/major_gc.h caml/misc.h caml/mlvalues.h gc_ctrl_npic.$(O): gc_ctrl.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \ - caml/s.h caml/mlvalues.h caml/backtrace.h caml/exec.h caml/compact.h \ - caml/custom.h caml/fail.h caml/finalise.h caml/roots.h caml/memory.h \ - caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ - caml/address_class.h caml/gc_ctrl.h caml/signals.h caml/stack.h \ - caml/startup_aux.h + caml/s.h caml/mlvalues.h caml/backtrace.h caml/exec.h caml/compact.h \ + caml/custom.h caml/fail.h caml/finalise.h caml/roots.h caml/memory.h \ + caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/freelist.h caml/gc.h caml/gc_ctrl.h \ + caml/major_gc.h caml/memory.h caml/minor_gc.h caml/misc.h \ + caml/mlvalues.h caml/signals.h caml/stack.h caml/startup_aux.h globroots_npic.$(O): globroots.c caml/memory.h caml/config.h caml/m.h caml/s.h \ - caml/gc.h caml/mlvalues.h caml/misc.h caml/major_gc.h caml/freelist.h \ - caml/minor_gc.h caml/address_class.h caml/roots.h caml/globroots.h + caml/gc.h caml/mlvalues.h caml/misc.h caml/major_gc.h caml/freelist.h \ + caml/minor_gc.h caml/address_class.h caml/misc.h caml/mlvalues.h \ + caml/roots.h caml/memory.h caml/globroots.h caml/roots.h hash_npic.$(O): hash.c caml/mlvalues.h caml/config.h caml/m.h caml/s.h \ - caml/misc.h caml/custom.h caml/memory.h caml/gc.h caml/major_gc.h \ - caml/freelist.h caml/minor_gc.h caml/address_class.h caml/hash.h + caml/misc.h caml/custom.h caml/mlvalues.h caml/memory.h caml/gc.h \ + caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ + caml/hash.h instrtrace_npic.$(O): instrtrace.c intern_npic.$(O): intern.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \ - caml/s.h caml/mlvalues.h caml/callback.h caml/custom.h caml/fail.h \ - caml/gc.h caml/intext.h caml/io.h caml/md5.h caml/memory.h \ - caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ - caml/reverse.h + caml/s.h caml/mlvalues.h caml/callback.h caml/config.h caml/custom.h \ + caml/fail.h caml/gc.h caml/intext.h caml/io.h caml/io.h caml/md5.h \ + caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/mlvalues.h caml/misc.h caml/reverse.h interp_npic.$(O): interp.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \ - caml/s.h caml/mlvalues.h caml/backtrace.h caml/exec.h caml/callback.h \ - caml/debugger.h caml/fail.h caml/fix_code.h caml/instrtrace.h \ - caml/instruct.h caml/interp.h caml/major_gc.h caml/freelist.h \ - caml/memory.h caml/gc.h caml/minor_gc.h caml/address_class.h \ - caml/prims.h caml/signals.h caml/stacks.h caml/startup_aux.h \ - caml/jumptbl.h + caml/s.h caml/mlvalues.h caml/backtrace.h caml/exec.h caml/callback.h \ + caml/debugger.h caml/fail.h caml/fix_code.h caml/instrtrace.h \ + caml/instruct.h caml/interp.h caml/major_gc.h caml/freelist.h \ + caml/memory.h caml/gc.h caml/major_gc.h caml/minor_gc.h \ + caml/address_class.h caml/misc.h caml/mlvalues.h caml/prims.h \ + caml/signals.h caml/stacks.h caml/memory.h caml/startup_aux.h \ + caml/jumptbl.h ints_npic.$(O): ints.c caml/alloc.h caml/misc.h caml/config.h caml/m.h caml/s.h \ - caml/mlvalues.h caml/custom.h caml/fail.h caml/intext.h caml/io.h \ - caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h \ - caml/minor_gc.h caml/address_class.h + caml/mlvalues.h caml/custom.h caml/fail.h caml/intext.h caml/io.h \ + caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/misc.h caml/mlvalues.h io_npic.$(O): io.c caml/config.h caml/m.h caml/s.h caml/alloc.h caml/misc.h \ - caml/mlvalues.h caml/custom.h caml/fail.h caml/io.h caml/memory.h \ - caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ - caml/address_class.h caml/osdeps.h caml/signals.h caml/sys.h + caml/config.h caml/mlvalues.h caml/custom.h caml/fail.h caml/io.h \ + caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/misc.h caml/mlvalues.h caml/osdeps.h \ + caml/memory.h caml/signals.h caml/sys.h lexing_npic.$(O): lexing.c caml/fail.h caml/misc.h caml/config.h caml/m.h \ - caml/s.h caml/mlvalues.h caml/stacks.h caml/memory.h caml/gc.h \ - caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h + caml/s.h caml/mlvalues.h caml/mlvalues.h caml/stacks.h caml/memory.h \ + caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h main_npic.$(O): main.c caml/misc.h caml/config.h caml/m.h caml/s.h \ - caml/mlvalues.h caml/sys.h caml/osdeps.h caml/memory.h caml/gc.h \ - caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h + caml/mlvalues.h caml/misc.h caml/sys.h caml/osdeps.h caml/memory.h \ + caml/gc.h caml/mlvalues.h caml/major_gc.h caml/freelist.h \ + caml/minor_gc.h caml/address_class.h major_gc_npic.$(O): major_gc.c caml/compact.h caml/config.h caml/m.h caml/s.h \ - caml/misc.h caml/mlvalues.h caml/custom.h caml/fail.h caml/finalise.h \ - caml/roots.h caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h \ - caml/minor_gc.h caml/address_class.h caml/gc_ctrl.h caml/signals.h \ - caml/weak.h + caml/misc.h caml/mlvalues.h caml/custom.h caml/config.h caml/fail.h \ + caml/finalise.h caml/roots.h caml/memory.h caml/gc.h caml/major_gc.h \ + caml/freelist.h caml/minor_gc.h caml/address_class.h caml/freelist.h \ + caml/gc.h caml/gc_ctrl.h caml/major_gc.h caml/misc.h caml/mlvalues.h \ + caml/roots.h caml/signals.h caml/weak.h md5_npic.$(O): md5.c caml/alloc.h caml/misc.h caml/config.h caml/m.h caml/s.h \ - caml/mlvalues.h caml/fail.h caml/md5.h caml/io.h caml/memory.h \ - caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ - caml/address_class.h caml/reverse.h + caml/mlvalues.h caml/fail.h caml/md5.h caml/io.h caml/memory.h caml/gc.h \ + caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ + caml/mlvalues.h caml/io.h caml/reverse.h memory_npic.$(O): memory.c caml/address_class.h caml/config.h caml/m.h caml/s.h \ - caml/misc.h caml/mlvalues.h caml/fail.h caml/freelist.h caml/gc.h \ - caml/gc_ctrl.h caml/major_gc.h caml/memory.h caml/minor_gc.h \ - caml/signals.h + caml/misc.h caml/mlvalues.h caml/config.h caml/fail.h caml/freelist.h \ + caml/gc.h caml/gc_ctrl.h caml/major_gc.h caml/freelist.h caml/memory.h \ + caml/gc.h caml/major_gc.h caml/minor_gc.h caml/address_class.h \ + caml/minor_gc.h caml/misc.h caml/mlvalues.h caml/signals.h meta_npic.$(O): meta.c caml/alloc.h caml/misc.h caml/config.h caml/m.h caml/s.h \ - caml/mlvalues.h caml/fail.h caml/fix_code.h caml/interp.h \ - caml/intext.h caml/io.h caml/major_gc.h caml/freelist.h caml/memory.h \ - caml/gc.h caml/minor_gc.h caml/address_class.h caml/prims.h \ - caml/stacks.h caml/backtrace_prim.h caml/backtrace.h caml/exec.h + caml/mlvalues.h caml/config.h caml/fail.h caml/fix_code.h caml/interp.h \ + caml/intext.h caml/io.h caml/major_gc.h caml/freelist.h caml/memory.h \ + caml/gc.h caml/major_gc.h caml/minor_gc.h caml/address_class.h \ + caml/minor_gc.h caml/misc.h caml/mlvalues.h caml/prims.h caml/stacks.h \ + caml/memory.h caml/backtrace_prim.h caml/backtrace.h caml/exec.h minor_gc_npic.$(O): minor_gc.c caml/custom.h caml/mlvalues.h caml/config.h \ - caml/m.h caml/s.h caml/misc.h caml/fail.h caml/finalise.h caml/roots.h \ - caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h \ - caml/minor_gc.h caml/address_class.h caml/gc_ctrl.h caml/signals.h \ - caml/weak.h -misc_npic.$(O): misc.c caml/config.h caml/m.h caml/s.h caml/misc.h caml/memory.h \ - caml/gc.h caml/mlvalues.h caml/major_gc.h caml/freelist.h \ - caml/minor_gc.h caml/address_class.h caml/osdeps.h caml/version.h + caml/m.h caml/s.h caml/misc.h caml/config.h caml/fail.h caml/finalise.h \ + caml/roots.h caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h \ + caml/minor_gc.h caml/address_class.h caml/gc.h caml/gc_ctrl.h \ + caml/major_gc.h caml/memory.h caml/minor_gc.h caml/misc.h \ + caml/mlvalues.h caml/roots.h caml/signals.h caml/weak.h +misc_npic.$(O): misc.c caml/config.h caml/m.h caml/s.h caml/misc.h caml/config.h \ + caml/memory.h caml/gc.h caml/mlvalues.h caml/misc.h caml/major_gc.h \ + caml/freelist.h caml/minor_gc.h caml/address_class.h caml/osdeps.h \ + caml/memory.h caml/version.h obj_npic.$(O): obj.c caml/alloc.h caml/misc.h caml/config.h caml/m.h caml/s.h \ - caml/mlvalues.h caml/fail.h caml/gc.h caml/interp.h caml/major_gc.h \ - caml/freelist.h caml/memory.h caml/minor_gc.h caml/address_class.h \ - caml/prims.h caml/spacetime.h caml/io.h caml/stack.h + caml/mlvalues.h caml/fail.h caml/gc.h caml/interp.h caml/major_gc.h \ + caml/freelist.h caml/memory.h caml/gc.h caml/major_gc.h caml/minor_gc.h \ + caml/address_class.h caml/minor_gc.h caml/misc.h caml/mlvalues.h \ + caml/prims.h caml/spacetime.h caml/io.h caml/stack.h parsing_npic.$(O): parsing.c caml/config.h caml/m.h caml/s.h caml/mlvalues.h \ - caml/misc.h caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h \ - caml/minor_gc.h caml/address_class.h caml/alloc.h + caml/config.h caml/misc.h caml/memory.h caml/gc.h caml/mlvalues.h \ + caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ + caml/alloc.h prims_npic.$(O): prims.c caml/mlvalues.h caml/config.h caml/m.h caml/s.h \ - caml/misc.h caml/prims.h + caml/misc.h caml/prims.h printexc_npic.$(O): printexc.c caml/backtrace.h caml/mlvalues.h caml/config.h \ - caml/m.h caml/s.h caml/misc.h caml/exec.h caml/callback.h \ - caml/debugger.h caml/fail.h caml/printexc.h caml/memory.h caml/gc.h \ - caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h + caml/m.h caml/s.h caml/misc.h caml/exec.h caml/callback.h \ + caml/debugger.h caml/fail.h caml/misc.h caml/mlvalues.h caml/printexc.h \ + caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h roots_byt_npic.$(O): roots_byt.c caml/finalise.h caml/roots.h caml/misc.h \ - caml/config.h caml/m.h caml/s.h caml/memory.h caml/gc.h \ - caml/mlvalues.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ - caml/address_class.h caml/globroots.h caml/stacks.h + caml/config.h caml/m.h caml/s.h caml/memory.h caml/gc.h caml/mlvalues.h \ + caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ + caml/globroots.h caml/major_gc.h caml/memory.h caml/minor_gc.h \ + caml/misc.h caml/mlvalues.h caml/roots.h caml/stacks.h roots_nat_npic.$(O): roots_nat.c caml/finalise.h caml/roots.h caml/misc.h \ - caml/config.h caml/m.h caml/s.h caml/memory.h caml/gc.h \ - caml/mlvalues.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ - caml/address_class.h caml/globroots.h caml/stack.h -signals_npic.$(O): signals.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \ - caml/s.h caml/mlvalues.h caml/callback.h caml/fail.h caml/memory.h \ - caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ - caml/address_class.h caml/roots.h caml/signals.h \ - caml/signals_machdep.h caml/sys.h + caml/config.h caml/m.h caml/s.h caml/memory.h caml/gc.h caml/mlvalues.h \ + caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ + caml/globroots.h caml/memory.h caml/major_gc.h caml/minor_gc.h \ + caml/misc.h caml/mlvalues.h caml/stack.h caml/roots.h signals_byt_npic.$(O): signals_byt.c caml/config.h caml/m.h caml/s.h \ - caml/memory.h caml/gc.h caml/mlvalues.h caml/misc.h caml/major_gc.h \ - caml/freelist.h caml/minor_gc.h caml/address_class.h caml/osdeps.h \ - caml/signals.h caml/signals_machdep.h + caml/memory.h caml/config.h caml/gc.h caml/mlvalues.h caml/misc.h \ + caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ + caml/osdeps.h caml/memory.h caml/signals.h caml/signals_machdep.h +signals_npic.$(O): signals.c caml/alloc.h caml/misc.h caml/config.h caml/m.h \ + caml/s.h caml/mlvalues.h caml/callback.h caml/config.h caml/fail.h \ + caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/misc.h caml/mlvalues.h caml/roots.h \ + caml/memory.h caml/signals.h caml/signals_machdep.h caml/sys.h signals_nat_npic.$(O): signals_nat.c caml/fail.h caml/misc.h caml/config.h \ - caml/m.h caml/s.h caml/mlvalues.h caml/memory.h caml/gc.h \ - caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ - caml/osdeps.h caml/signals.h caml/signals_machdep.h signals_osdep.h \ - caml/stack.h caml/spacetime.h caml/io.h + caml/m.h caml/s.h caml/mlvalues.h caml/memory.h caml/gc.h \ + caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ + caml/osdeps.h caml/memory.h caml/signals.h caml/signals_machdep.h \ + signals_osdep.h caml/stack.h caml/spacetime.h caml/io.h caml/stack.h spacetime_byt_npic.$(O): spacetime_byt.c caml/fail.h caml/misc.h caml/config.h \ - caml/m.h caml/s.h caml/mlvalues.h + caml/m.h caml/s.h caml/mlvalues.h caml/mlvalues.h spacetime_nat_npic.$(O): spacetime_nat.c caml/config.h caml/m.h caml/s.h \ - caml/alloc.h caml/misc.h caml/mlvalues.h caml/backtrace_prim.h \ - caml/backtrace.h caml/exec.h caml/fail.h caml/gc.h caml/intext.h \ - caml/io.h caml/major_gc.h caml/freelist.h caml/memory.h \ - caml/minor_gc.h caml/address_class.h caml/osdeps.h caml/roots.h \ - caml/signals.h caml/stack.h caml/sys.h caml/spacetime.h + caml/alloc.h caml/misc.h caml/config.h caml/mlvalues.h \ + caml/backtrace_prim.h caml/backtrace.h caml/exec.h caml/fail.h caml/gc.h \ + caml/intext.h caml/io.h caml/major_gc.h caml/freelist.h caml/memory.h \ + caml/gc.h caml/major_gc.h caml/minor_gc.h caml/address_class.h \ + caml/minor_gc.h caml/misc.h caml/mlvalues.h caml/osdeps.h caml/memory.h \ + caml/roots.h caml/signals.h caml/stack.h caml/sys.h caml/spacetime.h \ + caml/stack.h spacetime_snapshot_npic.$(O): spacetime_snapshot.c caml/alloc.h caml/misc.h \ - caml/config.h caml/m.h caml/s.h caml/mlvalues.h caml/backtrace_prim.h \ - caml/backtrace.h caml/exec.h caml/custom.h caml/fail.h caml/gc.h \ - caml/gc_ctrl.h caml/intext.h caml/io.h caml/major_gc.h caml/freelist.h \ - caml/memory.h caml/minor_gc.h caml/address_class.h caml/roots.h \ - caml/signals.h caml/stack.h caml/sys.h caml/spacetime.h + caml/config.h caml/m.h caml/s.h caml/mlvalues.h caml/backtrace_prim.h \ + caml/backtrace.h caml/exec.h caml/config.h caml/custom.h caml/fail.h \ + caml/gc.h caml/gc_ctrl.h caml/intext.h caml/io.h caml/major_gc.h \ + caml/freelist.h caml/memory.h caml/gc.h caml/major_gc.h caml/minor_gc.h \ + caml/address_class.h caml/minor_gc.h caml/misc.h caml/mlvalues.h \ + caml/roots.h caml/memory.h caml/signals.h caml/stack.h caml/sys.h \ + caml/spacetime.h caml/stack.h stacks_npic.$(O): stacks.c caml/config.h caml/m.h caml/s.h caml/fail.h \ - caml/misc.h caml/mlvalues.h caml/stacks.h caml/memory.h caml/gc.h \ - caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h + caml/misc.h caml/config.h caml/mlvalues.h caml/misc.h caml/mlvalues.h \ + caml/stacks.h caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h \ + caml/minor_gc.h caml/address_class.h startup_aux_npic.$(O): startup_aux.c caml/backtrace.h caml/mlvalues.h \ - caml/config.h caml/m.h caml/s.h caml/misc.h caml/exec.h caml/memory.h \ - caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ - caml/address_class.h caml/callback.h caml/osdeps.h caml/startup_aux.h + caml/config.h caml/m.h caml/s.h caml/misc.h caml/exec.h caml/memory.h \ + caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/callback.h caml/major_gc.h caml/osdeps.h \ + caml/memory.h caml/startup_aux.h startup_byt_npic.$(O): startup_byt.c caml/config.h caml/m.h caml/s.h caml/alloc.h \ - caml/misc.h caml/mlvalues.h caml/backtrace.h caml/exec.h \ - caml/callback.h caml/custom.h caml/debugger.h caml/dynlink.h \ - caml/fail.h caml/fix_code.h caml/freelist.h caml/gc_ctrl.h \ - caml/instrtrace.h caml/interp.h caml/intext.h caml/io.h caml/memory.h \ - caml/gc.h caml/major_gc.h caml/minor_gc.h caml/address_class.h \ - caml/osdeps.h caml/prims.h caml/printexc.h caml/reverse.h \ - caml/signals.h caml/stacks.h caml/sys.h caml/startup.h \ - caml/startup_aux.h caml/version.h + caml/misc.h caml/config.h caml/mlvalues.h caml/backtrace.h caml/exec.h \ + caml/callback.h caml/custom.h caml/debugger.h caml/dynlink.h caml/exec.h \ + caml/fail.h caml/fix_code.h caml/freelist.h caml/gc_ctrl.h \ + caml/instrtrace.h caml/interp.h caml/intext.h caml/io.h caml/io.h \ + caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/minor_gc.h caml/misc.h caml/mlvalues.h \ + caml/osdeps.h caml/memory.h caml/prims.h caml/printexc.h caml/reverse.h \ + caml/signals.h caml/stacks.h caml/sys.h caml/startup.h \ + caml/startup_aux.h caml/version.h startup_nat_npic.$(O): startup_nat.c caml/callback.h caml/mlvalues.h \ - caml/config.h caml/m.h caml/s.h caml/misc.h caml/backtrace.h \ - caml/exec.h caml/custom.h caml/debugger.h caml/fail.h caml/freelist.h \ - caml/gc.h caml/gc_ctrl.h caml/intext.h caml/io.h caml/memory.h \ - caml/major_gc.h caml/minor_gc.h caml/address_class.h caml/osdeps.h \ - caml/printexc.h caml/stack.h caml/startup_aux.h caml/sys.h + caml/config.h caml/m.h caml/s.h caml/misc.h caml/backtrace.h caml/exec.h \ + caml/custom.h caml/debugger.h caml/fail.h caml/freelist.h caml/gc.h \ + caml/gc_ctrl.h caml/intext.h caml/io.h caml/memory.h caml/gc.h \ + caml/major_gc.h caml/freelist.h caml/minor_gc.h caml/address_class.h \ + caml/misc.h caml/mlvalues.h caml/osdeps.h caml/memory.h caml/printexc.h \ + caml/stack.h caml/startup_aux.h caml/sys.h str_npic.$(O): str.c caml/alloc.h caml/misc.h caml/config.h caml/m.h caml/s.h \ - caml/mlvalues.h caml/fail.h caml/memory.h caml/gc.h caml/major_gc.h \ - caml/freelist.h caml/minor_gc.h caml/address_class.h + caml/mlvalues.h caml/fail.h caml/memory.h caml/gc.h caml/major_gc.h \ + caml/freelist.h caml/minor_gc.h caml/address_class.h caml/mlvalues.h \ + caml/misc.h sys_npic.$(O): sys.c caml/config.h caml/m.h caml/s.h caml/alloc.h caml/misc.h \ - caml/mlvalues.h caml/debugger.h caml/fail.h caml/gc_ctrl.h caml/io.h \ - caml/osdeps.h caml/memory.h caml/gc.h caml/major_gc.h caml/freelist.h \ - caml/minor_gc.h caml/address_class.h caml/signals.h caml/stacks.h \ - caml/sys.h caml/version.h caml/callback.h caml/startup_aux.h + caml/config.h caml/mlvalues.h caml/debugger.h caml/fail.h caml/gc_ctrl.h \ + caml/io.h caml/misc.h caml/mlvalues.h caml/osdeps.h caml/memory.h \ + caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/signals.h caml/stacks.h caml/sys.h \ + caml/version.h caml/callback.h caml/startup_aux.h unix_npic.$(O): unix.c caml/config.h caml/m.h caml/s.h caml/fail.h caml/misc.h \ - caml/mlvalues.h caml/memory.h caml/gc.h caml/major_gc.h \ - caml/freelist.h caml/minor_gc.h caml/address_class.h caml/osdeps.h \ - caml/signals.h caml/sys.h caml/io.h caml/alloc.h + caml/config.h caml/mlvalues.h caml/memory.h caml/gc.h caml/major_gc.h \ + caml/freelist.h caml/minor_gc.h caml/address_class.h caml/misc.h \ + caml/osdeps.h caml/memory.h caml/signals.h caml/sys.h caml/io.h \ + caml/alloc.h weak_npic.$(O): weak.c caml/alloc.h caml/misc.h caml/config.h caml/m.h caml/s.h \ - caml/mlvalues.h caml/fail.h caml/major_gc.h caml/freelist.h \ - caml/memory.h caml/gc.h caml/minor_gc.h caml/address_class.h \ - caml/weak.h caml/signals.h + caml/mlvalues.h caml/fail.h caml/major_gc.h caml/freelist.h \ + caml/memory.h caml/gc.h caml/major_gc.h caml/minor_gc.h \ + caml/address_class.h caml/mlvalues.h caml/weak.h caml/minor_gc.h \ + caml/signals.h +win32_npic.$(O): win32.c caml/alloc.h caml/misc.h caml/config.h caml/m.h caml/s.h \ + caml/mlvalues.h caml/address_class.h caml/fail.h caml/io.h caml/memory.h \ + caml/gc.h caml/major_gc.h caml/freelist.h caml/minor_gc.h \ + caml/address_class.h caml/misc.h caml/osdeps.h caml/memory.h \ + caml/signals.h caml/sys.h caml/config.h diff --git a/testsuite/tests/lib-dynlink-native/packed1_client.ml b/testsuite/tests/lib-dynlink-native/packed1_client.ml index c62534fdab6f..2a820a87e6c9 100644 --- a/testsuite/tests/lib-dynlink-native/packed1_client.ml +++ b/testsuite/tests/lib-dynlink-native/packed1_client.ml @@ -1,3 +1,3 @@ let () = Api.reg_mod "Packed1_client"; - print_endline Packed1.mykey + print_endline Mypack.Packed1.mykey diff --git a/testsuite/tests/packing/illegal_import_for_pack_prefix/correct/inside_pack.ml b/testsuite/tests/packing/illegal_import_for_pack_prefix/correct/inside_pack.ml new file mode 100644 index 000000000000..50ebfebf5a7a --- /dev/null +++ b/testsuite/tests/packing/illegal_import_for_pack_prefix/correct/inside_pack.ml @@ -0,0 +1 @@ +let [@inline never] foo () = () diff --git a/testsuite/tests/packing/illegal_import_for_pack_prefix/correct/ocamltests b/testsuite/tests/packing/illegal_import_for_pack_prefix/correct/ocamltests new file mode 100644 index 000000000000..31c13b443146 --- /dev/null +++ b/testsuite/tests/packing/illegal_import_for_pack_prefix/correct/ocamltests @@ -0,0 +1 @@ +test.ml diff --git a/testsuite/tests/packing/illegal_import_for_pack_prefix/correct/test.ml b/testsuite/tests/packing/illegal_import_for_pack_prefix/correct/test.ml new file mode 100644 index 000000000000..2025260e402e --- /dev/null +++ b/testsuite/tests/packing/illegal_import_for_pack_prefix/correct/test.ml @@ -0,0 +1,21 @@ +(* TEST +files="inside_pack.ml use_pack.ml" +* setup-ocamlopt.byte-build-env +** ocamlopt.byte +flags = "-for-pack Pack" +module = "inside_pack.ml" +*** ocamlopt.byte +module = "" +program = "pack.cmx" +flags = "-pack" +all_modules = "inside_pack.cmx" +**** ocamlopt.byte +program = "use_pack.cmx" +flags = "" +all_modules = "pack.cmx use_pack.ml" +**** ocamlopt.byte +program = "use_pack.cmx" +flags = "-for-pack Another_pack" +all_modules = "pack.cmx use_pack.ml" +*) + diff --git a/testsuite/tests/packing/illegal_import_for_pack_prefix/correct/use_pack.ml b/testsuite/tests/packing/illegal_import_for_pack_prefix/correct/use_pack.ml new file mode 100644 index 000000000000..ef66311a3162 --- /dev/null +++ b/testsuite/tests/packing/illegal_import_for_pack_prefix/correct/use_pack.ml @@ -0,0 +1 @@ +let () = Pack.Inside_pack.foo () diff --git a/testsuite/tests/packing/illegal_import_for_pack_prefix/incorrect/inside_pack.ml b/testsuite/tests/packing/illegal_import_for_pack_prefix/incorrect/inside_pack.ml new file mode 100644 index 000000000000..50ebfebf5a7a --- /dev/null +++ b/testsuite/tests/packing/illegal_import_for_pack_prefix/incorrect/inside_pack.ml @@ -0,0 +1 @@ +let [@inline never] foo () = () diff --git a/testsuite/tests/packing/illegal_import_for_pack_prefix/incorrect/ocamltests b/testsuite/tests/packing/illegal_import_for_pack_prefix/incorrect/ocamltests new file mode 100644 index 000000000000..31c13b443146 --- /dev/null +++ b/testsuite/tests/packing/illegal_import_for_pack_prefix/incorrect/ocamltests @@ -0,0 +1 @@ +test.ml diff --git a/testsuite/tests/packing/illegal_import_for_pack_prefix/incorrect/test.ml b/testsuite/tests/packing/illegal_import_for_pack_prefix/incorrect/test.ml new file mode 100644 index 000000000000..c6b615c72cb2 --- /dev/null +++ b/testsuite/tests/packing/illegal_import_for_pack_prefix/incorrect/test.ml @@ -0,0 +1,30 @@ +(* TEST +files="inside_pack.ml use_pack.ml" +* setup-ocamlopt.byte-build-env +** ocamlopt.byte +flags = "-for-pack Pack.Sub_pack" +module = "inside_pack.ml" +*** ocamlopt.byte +module = "" +program = "sub_pack.cmx" +flags = "-pack -for-pack Pack" +all_modules = "inside_pack.cmx" +**** ocamlopt.byte +module = "" +program = "pack.cmx" +flags = "-pack" +all_modules = "sub_pack.cmx" +***** ocamlopt.byte +program = "bad.cmx" +flags = "" +all_modules = "pack.cmx use_pack.ml" +ocamlopt_byte_exit_status = "2" +***** ocamlopt.byte +program = "bad.cmx" +flags = "-for-pack Pack.Another_sub_pack" +all_modules = "pack.cmx use_pack.ml" +compiler_reference = "${test_source_directory}/use_pack.reference" +ocamlopt_byte_exit_status = "2" +****** check-ocamlopt.byte-output +*) + diff --git a/testsuite/tests/packing/illegal_import_for_pack_prefix/incorrect/use_pack.ml b/testsuite/tests/packing/illegal_import_for_pack_prefix/incorrect/use_pack.ml new file mode 100644 index 000000000000..ffa2591fe017 --- /dev/null +++ b/testsuite/tests/packing/illegal_import_for_pack_prefix/incorrect/use_pack.ml @@ -0,0 +1 @@ +let () = Inside_pack.foo () diff --git a/testsuite/tests/packing/illegal_import_for_pack_prefix/incorrect/use_pack.reference b/testsuite/tests/packing/illegal_import_for_pack_prefix/incorrect/use_pack.reference new file mode 100644 index 000000000000..a352cd84ff0d --- /dev/null +++ b/testsuite/tests/packing/illegal_import_for_pack_prefix/incorrect/use_pack.reference @@ -0,0 +1,8 @@ +File "use_pack.ml", line 1: +Error: inside_pack.cmx contains the description for a unit [Inside_pack] with + a `-for-pack' prefix of [Pack.Sub_pack]; this cannot be used because + the current unit is being compiled without a `-for-pack' prefix +File "use_pack.ml", line 1: +Error: inside_pack.cmx contains the description for a unit [Inside_pack] with + a `-for-pack' prefix of [Pack.Sub_pack]; this cannot be used because + the current unit has a `-for-pack' prefix of [Pack.Another_sub_pack] diff --git a/testsuite/tests/packing/wrong_for_pack_prefix/bar.ml b/testsuite/tests/packing/wrong_for_pack_prefix/bar.ml new file mode 100644 index 000000000000..83bb187df8f3 --- /dev/null +++ b/testsuite/tests/packing/wrong_for_pack_prefix/bar.ml @@ -0,0 +1 @@ +let pair = Baz.func, Baz.func diff --git a/testsuite/tests/packing/wrong_for_pack_prefix/baz.ml b/testsuite/tests/packing/wrong_for_pack_prefix/baz.ml new file mode 100644 index 000000000000..10d6853745a4 --- /dev/null +++ b/testsuite/tests/packing/wrong_for_pack_prefix/baz.ml @@ -0,0 +1 @@ +let func () = () diff --git a/testsuite/tests/packing/wrong_for_pack_prefix/baz.mli b/testsuite/tests/packing/wrong_for_pack_prefix/baz.mli new file mode 100644 index 000000000000..e6da7e617582 --- /dev/null +++ b/testsuite/tests/packing/wrong_for_pack_prefix/baz.mli @@ -0,0 +1 @@ +val func : unit -> unit diff --git a/testsuite/tests/packing/wrong_for_pack_prefix/foo.ml b/testsuite/tests/packing/wrong_for_pack_prefix/foo.ml new file mode 100644 index 000000000000..a58487886c17 --- /dev/null +++ b/testsuite/tests/packing/wrong_for_pack_prefix/foo.ml @@ -0,0 +1 @@ +let () = (fst Bar.pair) () diff --git a/testsuite/tests/packing/wrong_for_pack_prefix/foo.reference b/testsuite/tests/packing/wrong_for_pack_prefix/foo.reference new file mode 100644 index 000000000000..5cf49c9b318f --- /dev/null +++ b/testsuite/tests/packing/wrong_for_pack_prefix/foo.reference @@ -0,0 +1,4 @@ +File "foo.ml", line 1: +Error: ./baz_incorrect/baz.cmx contains the description for a unit with + a `-for-pack' prefix of [Another_pack]; + but a `-for-pack' prefix of [Pack] was expected diff --git a/testsuite/tests/packing/wrong_for_pack_prefix/ocamltests b/testsuite/tests/packing/wrong_for_pack_prefix/ocamltests new file mode 100644 index 000000000000..31c13b443146 --- /dev/null +++ b/testsuite/tests/packing/wrong_for_pack_prefix/ocamltests @@ -0,0 +1 @@ +test.ml diff --git a/testsuite/tests/packing/wrong_for_pack_prefix/test.ml b/testsuite/tests/packing/wrong_for_pack_prefix/test.ml new file mode 100644 index 000000000000..0847c798e5af --- /dev/null +++ b/testsuite/tests/packing/wrong_for_pack_prefix/test.ml @@ -0,0 +1,34 @@ +(* TEST + +* flambda +** native +files="baz.ml baz.mli bar.ml foo.ml" +*** setup-ocamlopt.byte-build-env +**** script +script = "mkdir -p ${test_build_directory}/baz_correct" +***** script +script = "cp -a baz.ml ${test_build_directory}/baz_correct" +****** script +script = "mkdir -p ${test_build_directory}/baz_incorrect" +******* script +script = "cp -a baz.ml ${test_build_directory}/baz_incorrect" +******** ocamlopt.byte +flags = "" +module = "baz.mli" +********* ocamlopt.byte +flags = "-for-pack Pack" +module = "baz_correct/baz.ml" +********** ocamlopt.byte +flags = "-for-pack Another_pack" +module = "baz_incorrect/baz.ml" +*********** ocamlopt.byte +flags = "-for-pack Pack -I ./baz_correct" +module = "bar.ml" +************ ocamlopt.byte +flags = "-for-pack Pack.Subpack -I ./baz_incorrect" +module = "foo.ml" +ocamlopt_byte_exit_status = "2" +compiler_reference = "${test_source_directory}/foo.reference" +************* check-ocamlopt.byte-output +*) + diff --git a/testsuite/tests/tool-ocamlobjinfo/question.reference b/testsuite/tests/tool-ocamlobjinfo/question.reference index 513bf9c168d6..362bce1922f3 100644 --- a/testsuite/tests/tool-ocamlobjinfo/question.reference +++ b/testsuite/tests/tool-ocamlobjinfo/question.reference @@ -4,7 +4,7 @@ CRC of implementation: 00000000000000000000000000000000 Globals defined: Question Interfaces imported: - 00000000000000000000000000000000 Stdlib - 00000000000000000000000000000000 Question 00000000000000000000000000000000 CamlinternalFormatBasics + 00000000000000000000000000000000 Question + 00000000000000000000000000000000 Stdlib Implementations imported: diff --git a/testsuite/tools/codegen_main.ml b/testsuite/tools/codegen_main.ml index 52aa0c377ec6..2e69d1104924 100644 --- a/testsuite/tools/codegen_main.ml +++ b/testsuite/tools/codegen_main.ml @@ -21,8 +21,14 @@ let compile_file filename = let out_name = Filename.chop_extension filename ^ ".s" in Emitaux.output_channel := open_out out_name end; (* otherwise, stdout *) - Compilenv.reset "test"; - Emit.begin_assembly(); + let comp_unit = + Compilation_unit.create (Compilation_unit.Name.of_string "Test") + in + Compilation_unit.set_current comp_unit; + Compilation_state.reset comp_unit; + Linking_state.reset (); + let bcu = Backend_compilation_unit.compilation_unit comp_unit in + Emit.begin_assembly bcu; let ic = open_in filename in let lb = Lexing.from_channel ic in lb.Lexing.lex_curr_p <- { lb.Lexing.lex_curr_p with pos_fname = filename }; @@ -33,7 +39,7 @@ let compile_file filename = done with End_of_file -> - close_in ic; Emit.end_assembly(); + close_in ic; Emit.end_assembly bcu; if !write_asm_file then close_out !Emitaux.output_channel | Lexcmm.Error msg -> close_in ic; Lexcmm.report_error lb msg diff --git a/testsuite/tools/parsecmm.mly b/testsuite/tools/parsecmm.mly index ce59457e5af7..749a75983ac1 100644 --- a/testsuite/tools/parsecmm.mly +++ b/testsuite/tools/parsecmm.mly @@ -161,7 +161,10 @@ phrase: fundecl: LPAREN FUNCTION fun_name LPAREN params RPAREN sequence RPAREN { List.iter (fun (id, ty) -> unbind_ident id) $5; - {fun_name = $3; fun_args = $5; fun_body = $7; + let fun_name = + Backend_sym.unsafe_create $3 Backend_sym.Text + in + {fun_name; fun_args = $5; fun_body = $7; fun_codegen_options = if Config.flambda then [ Reduce_code_size; @@ -197,7 +200,8 @@ componentlist: expr: INTCONST { Cconst_int $1 } | FLOATCONST { Cconst_float (float_of_string $1) } - | STRING { Cconst_symbol $1 } + | STRING { Cconst_symbol ( + Backend_sym.unsafe_create $1 Backend_sym.Data) } | POINTER { Cconst_pointer $1 } | IDENT { Cvar(find_ident $1) } | LBRACKET RBRACKET { Ctuple [] } @@ -206,7 +210,9 @@ expr: | LPAREN APPLY location expr exprlist machtype RPAREN { Cop(Capply $6, $4 :: List.rev $5, debuginfo ?loc:$3 ()) } | LPAREN EXTCALL STRING exprlist machtype RPAREN - {Cop(Cextcall($3, $5, false, None), List.rev $4, debuginfo ())} + { Cop(Cextcall(Backend_sym.unsafe_create $3 Backend_sym.Text, + $5, false, None), List.rev $4, debuginfo ()) + } | LPAREN ALLOC exprlist RPAREN { Cop(Calloc, List.rev $3, debuginfo ()) } | LPAREN SUBF expr RPAREN { Cop(Cnegf, [$3], debuginfo ()) } | LPAREN SUBF expr expr RPAREN { Cop(Csubf, [$3; $4], debuginfo ()) } @@ -358,17 +364,25 @@ datalist: | /**/ { [] } ; dataitem: - STRING COLON { Cdefine_symbol $1 } + STRING COLON { Cdefine_symbol ( + Backend_sym.unsafe_create $1 + Backend_sym.Data) } | BYTE INTCONST { Cint8 $2 } | HALF INTCONST { Cint16 $2 } | INT INTCONST { Cint(Nativeint.of_int $2) } | FLOAT FLOATCONST { Cdouble (float_of_string $2) } - | ADDR STRING { Csymbol_address $2 } - | VAL STRING { Csymbol_address $2 } + | ADDR STRING { Csymbol_address ( + Backend_sym.unsafe_create $2 + Backend_sym.Text) } + | VAL STRING { Csymbol_address ( + Backend_sym.unsafe_create $2 + Backend_sym.Data) } | KSTRING STRING { Cstring $2 } | SKIP INTCONST { Cskip $2 } | ALIGN INTCONST { Calign $2 } - | GLOBAL STRING { Cglobal_symbol $2 } + | GLOBAL STRING { Cglobal_symbol ( + Backend_sym.unsafe_create $2 + Backend_sym.Data) } ; catch_handlers: | catch_handler diff --git a/tools/.depend b/tools/.depend index c96026b9e25d..f5fcc776208f 100644 --- a/tools/.depend +++ b/tools/.depend @@ -54,7 +54,7 @@ cmt2annot.cmo : \ ../typing/ident.cmi \ ../typing/envaux.cmi \ ../typing/env.cmi \ - ../typing/cmt_format.cmi \ + ../file_formats/cmt_format.cmi \ ../parsing/asttypes.cmi \ ../typing/annot.cmi cmt2annot.cmx : \ @@ -71,7 +71,7 @@ cmt2annot.cmx : \ ../typing/ident.cmx \ ../typing/envaux.cmx \ ../typing/env.cmx \ - ../typing/cmt_format.cmx \ + ../file_formats/cmt_format.cmx \ ../parsing/asttypes.cmi \ ../typing/annot.cmi cvt_emit.cmo : @@ -79,13 +79,13 @@ cvt_emit.cmx : dumpobj.cmo : \ ../bytecomp/symtable.cmi \ opnames.cmo \ - ../bytecomp/opcodes.cmo \ + ../bytecomp/opcodes.cmi \ ../parsing/location.cmi \ ../bytecomp/lambda.cmi \ ../bytecomp/instruct.cmi \ ../typing/ident.cmi \ ../utils/config.cmi \ - ../bytecomp/cmo_format.cmi \ + ../file_formats/cmo_format.cmi \ ../bytecomp/bytesections.cmi \ ../parsing/asttypes.cmi dumpobj.cmx : \ @@ -97,7 +97,7 @@ dumpobj.cmx : \ ../bytecomp/instruct.cmx \ ../typing/ident.cmx \ ../utils/config.cmx \ - ../bytecomp/cmo_format.cmi \ + ../file_formats/cmo_format.cmi \ ../bytecomp/bytesections.cmx \ ../parsing/asttypes.cmi eqparsetree.cmo : \ @@ -132,33 +132,37 @@ make_opcodes.cmo : make_opcodes.cmx : objinfo.cmo : \ ../bytecomp/symtable.cmi \ - ../middle_end/base_types/symbol.cmi \ - ../asmcomp/printclambda.cmi \ + ../middle_end/symbol.cmi \ + ../middle_end/printclambda.cmi \ + ../utils/numbers.cmi \ ../utils/misc.cmi \ - ../middle_end/base_types/linkage_name.cmi \ ../typing/ident.cmi \ - ../asmcomp/export_info.cmi \ + ../middle_end/flambda/export_info.cmi \ ../utils/config.cmi \ - ../middle_end/base_types/compilation_unit.cmi \ - ../asmcomp/cmx_format.cmi \ - ../typing/cmt_format.cmi \ - ../bytecomp/cmo_format.cmi \ - ../typing/cmi_format.cmi \ + ../middle_end/compilation_unit.cmi \ + ../file_formats/cmxs_format.cmi \ + ../file_formats/cmxa_format.cmi \ + ../file_formats/cmx_format.cmi \ + ../file_formats/cmt_format.cmi \ + ../file_formats/cmo_format.cmi \ + ../file_formats/cmi_format.cmi \ ../bytecomp/bytesections.cmi objinfo.cmx : \ ../bytecomp/symtable.cmx \ - ../middle_end/base_types/symbol.cmx \ - ../asmcomp/printclambda.cmx \ + ../middle_end/symbol.cmx \ + ../middle_end/printclambda.cmx \ + ../utils/numbers.cmx \ ../utils/misc.cmx \ - ../middle_end/base_types/linkage_name.cmx \ ../typing/ident.cmx \ - ../asmcomp/export_info.cmx \ + ../middle_end/flambda/export_info.cmx \ ../utils/config.cmx \ - ../middle_end/base_types/compilation_unit.cmx \ - ../asmcomp/cmx_format.cmi \ - ../typing/cmt_format.cmx \ - ../bytecomp/cmo_format.cmi \ - ../typing/cmi_format.cmx \ + ../middle_end/compilation_unit.cmx \ + ../file_formats/cmxs_format.cmx \ + ../file_formats/cmxa_format.cmx \ + ../file_formats/cmx_format.cmx \ + ../file_formats/cmt_format.cmx \ + ../file_formats/cmo_format.cmi \ + ../file_formats/cmi_format.cmx \ ../bytecomp/bytesections.cmx ocaml299to3.cmo : ocaml299to3.cmx : @@ -203,11 +207,11 @@ opnames.cmx : primreq.cmo : \ ../utils/misc.cmi \ ../utils/config.cmi \ - ../bytecomp/cmo_format.cmi + ../file_formats/cmo_format.cmi primreq.cmx : \ ../utils/misc.cmx \ ../utils/config.cmx \ - ../bytecomp/cmo_format.cmi + ../file_formats/cmo_format.cmi profiling.cmo : \ profiling.cmi profiling.cmx : \ @@ -216,13 +220,13 @@ profiling.cmi : read_cmt.cmo : \ ../parsing/location.cmi \ ../driver/compmisc.cmi \ - ../typing/cmt_format.cmi \ + ../file_formats/cmt_format.cmi \ cmt2annot.cmo \ ../utils/clflags.cmi read_cmt.cmx : \ ../parsing/location.cmx \ ../driver/compmisc.cmx \ - ../typing/cmt_format.cmx \ + ../file_formats/cmt_format.cmx \ cmt2annot.cmx \ ../utils/clflags.cmx scrapelabels.cmo : diff --git a/tools/Makefile b/tools/Makefile index ee0e0be4c9ae..57132acb9111 100644 --- a/tools/Makefile +++ b/tools/Makefile @@ -78,7 +78,9 @@ CAMLC = $(CAMLRUN) $(ROOTDIR)/boot/ocamlc -g -nostdlib -I $(ROOTDIR)/boot \ CAMLOPT = $(CAMLRUN) $(ROOTDIR)/ocamlopt -g -nostdlib -I $(ROOTDIR)/stdlib CAMLLEX = $(CAMLRUN) $(ROOTDIR)/boot/ocamllex INCLUDES = $(addprefix -I $(ROOTDIR)/,utils parsing typing bytecomp asmcomp \ - middle_end middle_end/base_types driver toplevel) + asmcomp/asm_target file_formats \ + middle_end middle_end/closure middle_end/flambda \ + middle_end/flambda/base_types driver toplevel) COMPFLAGS = -absname -w +a-4-9-41-42-44-45-48 -strict-sequence -warn-error A \ -safe-string -strict-formats -bin-annot $(INCLUDES) LINKFLAGS = $(INCLUDES) @@ -328,9 +330,6 @@ objinfo_helper$(EXE): objinfo_helper.c $(ROOTDIR)/runtime/caml/s.h OBJINFO=$(ROOTDIR)/compilerlibs/ocamlcommon.cma \ $(ROOTDIR)/compilerlibs/ocamlbytecomp.cma \ $(ROOTDIR)/compilerlibs/ocamlmiddleend.cma \ - $(ROOTDIR)/asmcomp/backend_var.cmo \ - $(ROOTDIR)/asmcomp/printclambda.cmo \ - $(ROOTDIR)/asmcomp/export_info.cmo \ objinfo.cmo $(call byte_and_opt,ocamlobjinfo,$(OBJINFO),objinfo_helper$(EXE)) @@ -349,10 +348,7 @@ $(call byte_and_opt,primreq,$(primreq),) LINTAPIDIFF=$(ROOTDIR)/compilerlibs/ocamlcommon.cmxa \ $(ROOTDIR)/compilerlibs/ocamlbytecomp.cmxa \ $(ROOTDIR)/compilerlibs/ocamlmiddleend.cmxa \ - $(ROOTDIR)/asmcomp/backend_var.cmx \ - $(ROOTDIR)/asmcomp/printclambda.cmx \ - $(ROOTDIR)/asmcomp/export_info.cmx \ - $(ROOTDIR)/otherlibs/str/str.cmxa \ + $(ROOTDIR)/otherlibs/str/str.cmxa \ lintapidiff.cmx lintapidiff.opt: INCLUDES+= -I $(ROOTDIR)/otherlibs/str diff --git a/tools/objinfo.ml b/tools/objinfo.ml index adb54538421c..7fa40b0b7a79 100644 --- a/tools/objinfo.ml +++ b/tools/objinfo.ml @@ -18,11 +18,22 @@ (* Dump info on .cmi, .cmo, .cmx, .cma, .cmxa, .cmxs files and on bytecode executables. *) +[@@@ocaml.warning "+a-4-30-40-41-42"] + open Printf -open Misc open Config +open Misc open Cmo_format +module CU = Compilation_unit +module LI = Cmxa_format.Library_info +module DH = Cmxs_format.Dynheader_info +module DU = Cmxs_format.Dynunit_info +module UI = Cmx_format.Unit_info +module UIL = Cmx_format.Unit_info_link_time + +module Int = Numbers.Int + (* Command line options to prevent printing approximation, function code and CRC *) @@ -115,15 +126,30 @@ let print_cmt_infos cmt = | None -> "" | Some crc -> string_of_crc crc) +let print_name_crc_native print_name (name, crco) = + let crc = + match crco with + None -> dummy_crc + | Some crc -> string_of_crc crc + in + printf "\t%s\t%s\n" crc (Format.asprintf "%a" print_name name) + let print_general_infos name crc defines cmi cmx = - printf "Name: %s\n" name; + printf "Name: %s\n" (Format.asprintf "%a" CU.Name.print (CU.name name)); printf "CRC of implementation: %s\n" (string_of_crc crc); printf "Globals defined:\n"; + let defines = + List.map (fun comp_unit -> + CU.Name.to_string (CU.name comp_unit)) + defines + in List.iter print_line defines; printf "Interfaces imported:\n"; - List.iter print_name_crc cmi; + let cmi = CU.Name.Map.bindings cmi in + List.iter (print_name_crc_native CU.Name.print) cmi; printf "Implementations imported:\n"; - List.iter print_name_crc cmx + let cmx = CU.Map.bindings cmx in + List.iter (print_name_crc_native CU.print) cmx let print_global_table table = printf "Globals defined:\n"; @@ -131,13 +157,11 @@ let print_global_table table = (fun id _ -> print_line (Ident.name id)) table -open Cmx_format - -let print_cmx_infos (ui, crc) = - print_general_infos - ui.ui_name crc ui.ui_defines ui.ui_imports_cmi ui.ui_imports_cmx; - begin match ui.ui_export_info with - | Clambda approx -> +let print_cmx_infos (ui, ui_link, crc) = + print_general_infos (UI.unit ui) crc (UI.defines ui) + (UI.imports_cmi ui) (UI.imports_cmx ui); + begin match UI.export_info ui with + | Closure approx -> if not !no_approx then begin printf "Clambda approximation:\n"; Format.fprintf Format.std_formatter " %a@." Printclambda.approx approx @@ -149,15 +173,11 @@ let print_cmx_infos (ui, crc) = else printf "Flambda unit\n"; if not !no_approx then begin - let cu = - Compilation_unit.create (Ident.create_persistent ui.ui_name) - (Linkage_name.create "__dummy__") - in - Compilation_unit.set_current cu; + let cu = UI.unit ui in + CU.set_current cu; let root_symbols = - List.map (fun s -> - Symbol.of_global_linkage cu (Linkage_name.create ("caml"^s))) - ui.ui_defines + List.map (fun comp_unit -> Symbol.for_module_block comp_unit) + (UI.defines ui) in Format.printf "approximations@ %a@.@." Export_info.print_approx (export, root_symbols) @@ -168,29 +188,32 @@ let print_cmx_infos (ui, crc) = end; let pr_funs _ fns = List.iter (fun arity -> printf " %d" arity) fns in - printf "Currying functions:%a\n" pr_funs ui.ui_curry_fun; - printf "Apply functions:%a\n" pr_funs ui.ui_apply_fun; - printf "Send functions:%a\n" pr_funs ui.ui_send_fun; - printf "Force link: %s\n" (if ui.ui_force_link then "YES" else "no") + printf "Currying functions:%a\n" pr_funs + (Int.Set.elements (UIL.curry_fun ui_link)); + printf "Apply functions:%a\n" pr_funs + (Int.Set.elements (UIL.apply_fun ui_link)); + printf "Send functions:%a\n" pr_funs + (Int.Set.elements (UIL.send_fun ui_link)); + printf "Force link: %s\n" (if (UIL.force_link ui_link) then "YES" else "no") -let print_cmxa_infos (lib : Cmx_format.library_infos) = +let print_cmxa_infos lib = printf "Extra C object files:"; - List.iter print_spaced_string (List.rev lib.lib_ccobjs); + List.iter print_spaced_string (List.rev (LI.ccobjs lib)); printf "\nExtra C options:"; - List.iter print_spaced_string lib.lib_ccopts; + List.iter print_spaced_string (LI.ccopts lib); printf "\n"; - List.iter print_cmx_infos lib.lib_units + List.iter print_cmx_infos (LI.units lib) let print_cmxs_infos header = List.iter (fun ui -> print_general_infos - ui.dynu_name - ui.dynu_crc - ui.dynu_defines - ui.dynu_imports_cmi - ui.dynu_imports_cmx) - header.dynu_units + (DU.unit ui) + (DU.crc ui) + (DU.defines ui) + (DU.imports_cmi ui) + (DU.imports_cmx ui)) + (DH.units header) let p_title title = printf "%s:\n" title @@ -209,7 +232,7 @@ let p_list title print = function let dump_byte ic = Bytesections.read_toc ic; let toc = Bytesections.toc () in - let toc = List.sort Stdlib.compare toc in + let toc = List.sort compare toc in List.iter (fun (section, _) -> try @@ -259,7 +282,7 @@ let read_dyn_header filename ic = (fun () -> let ofs = Scanf.bscanf tc "%Ld" (fun x -> x) in LargeFile.seek_in ic ofs; - Some(input_value ic : dynheader))) + Some(input_value ic : DH.t))) with Failure _ | Sys_error _ -> None let dump_obj filename = @@ -293,13 +316,12 @@ let dump_obj filename = | Some cmt -> print_cmt_infos cmt end end else if magic_number = cmx_magic_number then begin - let ui = (input_value ic : unit_infos) in - let crc = Digest.input ic in close_in ic; - print_cmx_infos (ui, crc) + let ui, ui_link, crc = Cmx_format.load ~filename in + print_cmx_infos (ui, ui_link, crc) end else if magic_number = cmxa_magic_number then begin - let li = (input_value ic : library_infos) in close_in ic; + let li = Cmxa_format.load ~filename in print_cmxa_infos li end else begin let pos_trailer = in_channel_length ic - len_magic_number in @@ -315,7 +337,7 @@ let dump_obj filename = printf "Unable to read info on file %s\n" filename; exit 2 | Some header -> - if header.dynu_magic = Config.cmxs_magic_number then + if DH.magic header = Config.cmxs_magic_number then print_cmxs_infos header else begin printf "Wrong magic number\n"; exit 2 diff --git a/toplevel/opttoploop.ml b/toplevel/opttoploop.ml index 45918317124d..44dfb9824ab3 100644 --- a/toplevel/opttoploop.ml +++ b/toplevel/opttoploop.ml @@ -34,12 +34,20 @@ external ndl_run_toplevel: string -> string -> res external ndl_loadsym: string -> Obj.t = "caml_natdynlink_loadsym" let global_symbol id = - let sym = Compilenv.symbol_for_global id in - try ndl_loadsym sym + let comp_unit = Compilation_state.compilation_unit_for_global id in + let sym = + match comp_unit with + | Compilation_state.Compilation_unit comp_unit -> + Symbol.for_module_block comp_unit + | Compilation_state.Predef -> + Symbol.for_predefined_exn id + in + let backend_sym = Backend_sym.of_symbol sym in + try ndl_loadsym (Backend_sym.to_string backend_sym) with _ -> fatal_error ("Opttoploop.global_symbol " ^ (Ident.unique_name id)) let need_symbol sym = - try ignore (ndl_loadsym sym); false + try ignore (ndl_loadsym (Backend_sym.to_string sym)); false with _ -> true let dll_run dll entry = @@ -224,12 +232,6 @@ let phrase_name = ref "TOP" module Backend = struct (* See backend_intf.mli. *) - let symbol_for_global' = Compilenv.symbol_for_global' - let closure_symbol = Compilenv.closure_symbol - - let really_import_approx = Import_approx.really_import_approx - let import_symbol = Import_approx.import_symbol - let size_int = Arch.size_int let big_endian = Arch.big_endian @@ -248,19 +250,24 @@ let load_lambda ppf ~module_ident ~required_globals lam size = if !Clflags.keep_asm_file then !phrase_name ^ ext_dll else Filename.temp_file ("caml" ^ !phrase_name) ext_dll in - let fn = Filename.chop_extension dll in - if not Config.flambda then - Asmgen.compile_implementation_clambda - ~toplevel:need_symbol fn ~ppf_dump:ppf - { Lambda.code=slam ; main_module_block_size=size; - module_ident; required_globals } - else - Asmgen.compile_implementation_flambda - ~required_globals ~backend ~toplevel:need_symbol fn ~ppf_dump:ppf - (Middle_end.middle_end ~ppf_dump:ppf ~prefixname:"" ~backend ~size - ~module_ident ~module_initializer:slam ~filename:"toplevel"); - Asmlink.call_linker_shared [fn ^ ext_obj] dll; - Sys.remove (fn ^ ext_obj); + let filename = Filename.chop_extension dll in + let program = + { Lambda. + code = slam; + main_module_block_size = size; + module_ident; + required_globals; + } + in + let middle_end = + if Config.flambda then Flambda_middle_end.lambda_to_clambda + else Closure_middle_end.lambda_to_clambda + in + Asmgen.compile_implementation ~toplevel:need_symbol + ~backend ~filename ~prefixname:"" + ~middle_end ~ppf_dump:ppf program; + Asmlink.call_linker_shared [filename ^ ext_obj] dll; + Sys.remove (filename ^ ext_obj); let dll = if Filename.is_implicit dll @@ -310,7 +317,12 @@ let execute_phrase print_outcome ppf phr = let oldenv = !toplevel_env in incr phrase_seqid; phrase_name := Printf.sprintf "TOP%i" !phrase_seqid; - Compilenv.reset ?packname:None !phrase_name; + let compilation_unit = + Compilation_unit.create (Compilation_unit.Name.of_string !phrase_name) + in + Compilation_unit.set_current compilation_unit; + Compilation_state.reset compilation_unit; + Linking_state.reset (); Typecore.reset_delayed_checks (); let sstr, rewritten = match sstr with @@ -357,7 +369,7 @@ let execute_phrase print_outcome ppf phr = (* CR-someday trefis: *) () else - Compilenv.record_global_approx_toplevel (); + Compilation_state.Closure_only.record_global_approx_toplevel (); if print_outcome then Printtyp.wrap_printing_env ~error:false oldenv (fun () -> match str.str_items with diff --git a/toplevel/topdirs.ml b/toplevel/topdirs.ml index 778bf31080da..8469d84b658f 100644 --- a/toplevel/topdirs.ml +++ b/toplevel/topdirs.ml @@ -119,7 +119,7 @@ exception Load_failed let check_consistency ppf filename cu = try Env.import_crcs ~source:filename cu.cu_imports - with Consistbl.Inconsistency(name, user, auth) -> + with Persistent_env.Consistbl.Inconsistency(name, user, auth) -> fprintf ppf "@[The files %s@ and %s@ \ disagree over interface %s@]@." user auth name; diff --git a/typing/env.mli b/typing/env.mli index 5e49d8aa77c1..cf7490db839b 100644 --- a/typing/env.mli +++ b/typing/env.mli @@ -257,7 +257,7 @@ val crc_of_unit: modname -> Digest.t (* Return the set of compilation units imported, with their CRC *) val imports: unit -> crcs -(* may raise Consistbl.Inconsistency *) +(* may raise Persistent_env.Consistbl.Inconsistency *) val import_crcs: source:string -> crcs -> unit (* [is_imported_opaque md] returns true if [md] is an opaque imported module *) diff --git a/typing/persistent_env.ml b/typing/persistent_env.ml index 5e4443768aee..29807e059c75 100644 --- a/typing/persistent_env.ml +++ b/typing/persistent_env.ml @@ -19,6 +19,8 @@ open Misc open Cmi_format +module Consistbl = Consistbl.Make (Misc.Stdlib.String) + let add_delayed_check_forward = ref (fun _ -> assert false) type error = diff --git a/typing/persistent_env.mli b/typing/persistent_env.mli index b2b64c843e7b..5ec6ab3d1acb 100644 --- a/typing/persistent_env.mli +++ b/typing/persistent_env.mli @@ -16,6 +16,10 @@ open Misc +module Consistbl : module type of struct + include Consistbl.Make (Misc.Stdlib.String) +end + type error = | Illegal_renaming of modname * modname * filepath | Inconsistent_import of modname * filepath * filepath diff --git a/typing/primitive.ml b/typing/primitive.ml index c28bdfbf4bdb..0d88f2908e1f 100644 --- a/typing/primitive.ml +++ b/typing/primitive.ml @@ -200,6 +200,9 @@ let native_name p = let byte_name p = p.prim_name +let native_name_is_external p = + p.prim_native_name <> "" && p.prim_native_name.[0] <> '%' + let report_error ppf err = match err with | Old_style_float_with_native_repr_attribute -> diff --git a/typing/primitive.mli b/typing/primitive.mli index 02ece7d96c8d..ddd397796423 100644 --- a/typing/primitive.mli +++ b/typing/primitive.mli @@ -63,6 +63,11 @@ val print val native_name: description -> string val byte_name: description -> string +(** [native_name_is_externa] returns [true] iff the [native_name] for the + given primitive identifies that the primitive is not implemented in the + compiler itself. *) +val native_name_is_external : description -> bool + type error = | Old_style_float_with_native_repr_attribute | Old_style_noalloc_with_noalloc_attribute diff --git a/utils/consistbl.ml b/utils/consistbl.ml index 758fd755668b..24fde86fe929 100644 --- a/utils/consistbl.ml +++ b/utils/consistbl.ml @@ -17,52 +17,73 @@ open Misc -type t = (modname, Digest.t * filepath) Hashtbl.t +module Make (Module_name : sig + type t + module Set : Set.S with type elt = t + module Map : Map.S with type key = t + module Tbl : Hashtbl.S with type key = t + val compare : t -> t -> int +end) = struct + type t = (Digest.t * filepath) Module_name.Tbl.t -let create () = Hashtbl.create 13 + let create () = Module_name.Tbl.create 13 -let clear = Hashtbl.clear + let clear = Module_name.Tbl.clear -exception Inconsistency of modname * filepath * filepath + exception Inconsistency of Module_name.t * filepath * filepath -exception Not_available of modname + exception Not_available of Module_name.t -let check tbl name crc source = - try - let (old_crc, old_source) = Hashtbl.find tbl name in - if crc <> old_crc then raise(Inconsistency(name, source, old_source)) - with Not_found -> - Hashtbl.add tbl name (crc, source) + let check tbl name crc source = + try + let (old_crc, old_source) = Module_name.Tbl.find tbl name in + if crc <> old_crc then raise(Inconsistency(name, source, old_source)) + with Not_found -> + Module_name.Tbl.add tbl name (crc, source) -let check_noadd tbl name crc source = - try - let (old_crc, old_source) = Hashtbl.find tbl name in - if crc <> old_crc then raise(Inconsistency(name, source, old_source)) - with Not_found -> - raise (Not_available name) + let check_noadd tbl name crc source = + try + let (old_crc, old_source) = Module_name.Tbl.find tbl name in + if crc <> old_crc then raise(Inconsistency(name, source, old_source)) + with Not_found -> + raise (Not_available name) -let set tbl name crc source = Hashtbl.add tbl name (crc, source) + let set tbl name crc source = Module_name.Tbl.add tbl name (crc, source) -let source tbl name = snd (Hashtbl.find tbl name) + let source tbl name = snd (Module_name.Tbl.find tbl name) -let extract l tbl = - let l = List.sort_uniq String.compare l in - List.fold_left - (fun assc name -> - try - let (crc, _) = Hashtbl.find tbl name in - (name, Some crc) :: assc - with Not_found -> - (name, None) :: assc) - [] l + let extract l tbl = + let l = List.sort_uniq Module_name.compare l in + List.fold_left + (fun assc name -> + try + let (crc, _) = Module_name.Tbl.find tbl name in + (name, Some crc) :: assc + with Not_found -> + (name, None) :: assc) + [] l -let filter p tbl = - let to_remove = ref [] in - Hashtbl.iter - (fun name _ -> - if not (p name) then to_remove := name :: !to_remove) - tbl; - List.iter - (fun name -> - while Hashtbl.mem tbl name do Hashtbl.remove tbl name done) - !to_remove + let extract_map mod_names tbl = + Module_name.Set.fold + (fun name result -> + try + let (crc, _) = Module_name.Tbl.find tbl name in + Module_name.Map.add name (Some crc) result + with Not_found -> + Module_name.Map.add name None result) + mod_names + Module_name.Map.empty + + let filter p tbl = + let to_remove = ref [] in + Module_name.Tbl.iter + (fun name _ -> + if not (p name) then to_remove := name :: !to_remove) + tbl; + List.iter + (fun name -> + while Module_name.Tbl.mem tbl name do + Module_name.Tbl.remove tbl name + done) + !to_remove +end diff --git a/utils/consistbl.mli b/utils/consistbl.mli index f629991bfd99..5c8c542809ca 100644 --- a/utils/consistbl.mli +++ b/utils/consistbl.mli @@ -22,48 +22,60 @@ open Misc -type t - -val create: unit -> t - -val clear: t -> unit - -val check: t -> modname -> Digest.t -> filepath -> unit - (* [check tbl name crc source] - checks consistency of ([name], [crc]) with infos previously - stored in [tbl]. If no CRC was previously associated with - [name], record ([name], [crc]) in [tbl]. - [source] is the name of the file from which the information - comes from. This is used for error reporting. *) - -val check_noadd: t -> modname -> Digest.t -> filepath -> unit - (* Same as [check], but raise [Not_available] if no CRC was previously - associated with [name]. *) - -val set: t -> modname -> Digest.t -> filepath -> unit - (* [set tbl name crc source] forcefully associates [name] with - [crc] in [tbl], even if [name] already had a different CRC - associated with [name] in [tbl]. *) - -val source: t -> modname -> filepath - (* [source tbl name] returns the file name associated with [name] - if the latter has an associated CRC in [tbl]. - Raise [Not_found] otherwise. *) - -val extract: modname list -> t -> crcs - (* [extract tbl names] returns an associative list mapping each string - in [names] to the CRC associated with it in [tbl]. If no CRC is - associated with a name then it is mapped to [None]. *) - -val filter: (modname -> bool) -> t -> unit - (* [filter pred tbl] removes from [tbl] table all (name, CRC) pairs - such that [pred name] is [false]. *) - -exception Inconsistency of modname * filepath * filepath - (* Raised by [check] when a CRC mismatch is detected. - First string is the name of the compilation unit. - Second string is the source that caused the inconsistency. - Third string is the source that set the CRC. *) - -exception Not_available of modname - (* Raised by [check_noadd] when a name doesn't have an associated CRC. *) +module Make (Module_name : sig + type t + module Set : Set.S with type elt = t + module Map : Map.S with type key = t + module Tbl : Hashtbl.S with type key = t + val compare : t -> t -> int +end) : sig + type t + + val create: unit -> t + + val clear: t -> unit + + val check: t -> Module_name.t -> Digest.t -> filepath -> unit + (* [check tbl name crc source] + checks consistency of ([name], [crc]) with infos previously + stored in [tbl]. If no CRC was previously associated with + [name], record ([name], [crc]) in [tbl]. + [source] is the name of the file from which the information + comes from. This is used for error reporting. *) + + val check_noadd: t -> Module_name.t -> Digest.t -> filepath -> unit + (* Same as [check], but raise [Not_available] if no CRC was previously + associated with [name]. *) + + val set: t -> Module_name.t -> Digest.t -> filepath -> unit + (* [set tbl name crc source] forcefully associates [name] with + [crc] in [tbl], even if [name] already had a different CRC + associated with [name] in [tbl]. *) + + val source: t -> Module_name.t -> filepath + (* [source tbl name] returns the file name associated with [name] + if the latter has an associated CRC in [tbl]. + Raise [Not_found] otherwise. *) + + val extract: Module_name.t list -> t -> (Module_name.t * Digest.t option) list + (* [extract tbl names] returns an associative list mapping each string + in [names] to the CRC associated with it in [tbl]. If no CRC is + associated with a name then it is mapped to [None]. *) + + val extract_map : Module_name.Set.t -> t -> Digest.t option Module_name.Map.t + (* Like [extract] but with a more sophisticated type. *) + + val filter: (Module_name.t -> bool) -> t -> unit + (* [filter pred tbl] removes from [tbl] table all (name, CRC) pairs + such that [pred name] is [false]. *) + + exception Inconsistency of Module_name.t * filepath * filepath + (* Raised by [check] when a CRC mismatch is detected. + First string is the name of the compilation unit. + Second string is the source that caused the inconsistency. + Third string is the source that set the CRC. *) + + exception Not_available of Module_name.t + (* Raised by [check_noadd] when a name doesn't have an associated + CRC. *) +end diff --git a/utils/identifiable.ml b/utils/identifiable.ml index e82390ad0f65..8a0e72a4f7ac 100644 --- a/utils/identifiable.ml +++ b/utils/identifiable.ml @@ -35,6 +35,7 @@ module type Set = sig val to_string : t -> string val of_list : elt list -> t val map : (elt -> elt) -> t -> t + val union_list : t list -> t end module type Map = sig @@ -202,6 +203,11 @@ module Make_set (T : Thing) = struct | t :: q -> List.fold_left (fun acc e -> add e acc) (singleton t) q let map f s = of_list (List.map f (elements s)) + + let rec union_list ts = + match ts with + | [] -> empty + | t::ts -> union t (union_list ts) end module Make_tbl (T : Thing) = struct diff --git a/utils/identifiable.mli b/utils/identifiable.mli index 4e2607115cf5..20fd22feac7b 100644 --- a/utils/identifiable.mli +++ b/utils/identifiable.mli @@ -44,6 +44,7 @@ module type Set = sig val to_string : t -> string val of_list : elt list -> t val map : (elt -> elt) -> t -> t + val union_list : t list -> t end module type Map = sig diff --git a/middle_end/int_replace_polymorphic_compare.ml b/utils/int_replace_polymorphic_compare.ml similarity index 100% rename from middle_end/int_replace_polymorphic_compare.ml rename to utils/int_replace_polymorphic_compare.ml diff --git a/middle_end/int_replace_polymorphic_compare.mli b/utils/int_replace_polymorphic_compare.mli similarity index 100% rename from middle_end/int_replace_polymorphic_compare.mli rename to utils/int_replace_polymorphic_compare.mli diff --git a/utils/misc.ml b/utils/misc.ml index 5456aac8d317..746c35db9872 100644 --- a/utils/misc.ml +++ b/utils/misc.ml @@ -150,6 +150,57 @@ module Stdlib = struct | t::q -> aux (n-1) (t::acc) q in aux n [] l + + let rec is_prefix ~equal t ~of_ = + match t, of_ with + | [], [] -> true + | _::_, [] -> false + | [], _::_ -> true + | x1::t, x2::of_ -> + if equal x1 x2 then is_prefix ~equal t ~of_ + else false + + type 'a longest_common_prefix_result = { + longest_common_prefix : 'a list; + first : 'a list; + second : 'a list; + } + + let longest_common_prefix ~equal l1 l2 = + let rec find_prefix ~longest_common_prefix_rev l1 l2 = + match l1, l2 with + | [], [] + | [], _::_ + | _::_, [] -> + let longest_common_prefix = List.rev longest_common_prefix_rev in + { longest_common_prefix; + first = l1; + second = l2; + } + | elt1::l1_tail, elt2::l2_tail -> + if equal elt1 elt2 then + let longest_common_prefix_rev = elt1 :: longest_common_prefix_rev in + find_prefix ~longest_common_prefix_rev l1_tail l2_tail + else + let longest_common_prefix = List.rev longest_common_prefix_rev in + { longest_common_prefix; + first = l1; + second = l2; + } + in + find_prefix ~longest_common_prefix_rev:[] l1 l2 +(* + let rec chop_longest_common_prefix ~equal l1 l2 = + match l1, l2 with + | [], [] + | [], _::_ + | _::_, [] -> l1, l2 + | elt1::l1_tail, elt2::l2_tail -> + if equal elt1 elt2 then + chop_longest_common_prefix ~equal l1_tail l2_tail + else + l1, l2 +*) end module Option = struct @@ -163,6 +214,13 @@ module Stdlib = struct | None -> false | Some _ -> true + let compare f t1 t2 = + match t1, t2 with + | None, None -> 0 + | None, Some _ -> -1 + | Some _, None -> 1 + | Some contents1, Some contents2 -> f contents1 contents2 + let equal eq o1 o2 = match o1, o2 with | None, None -> true @@ -186,6 +244,17 @@ module Stdlib = struct match a with | None -> default | Some a -> f a + + let (>>=) t f = + match t with + | None -> None + | Some x -> f x + + let print print_contents ppf t = + match t with + | None -> Format.pp_print_string ppf "None" + | Some contents -> + Format.fprintf ppf "@[(Some@ %a)@]" print_contents contents end module Array = struct @@ -214,6 +283,9 @@ module Stdlib = struct i = len || (f t.[i] && loop (i + 1)) in loop 0 + + let print ppf t = + Format.pp_print_string ppf t end external compare : 'a -> 'a -> int = "%compare" @@ -348,6 +420,12 @@ let output_to_file_via_temporary ?(mode = [Open_text]) filename fn = | exception exn -> close_out oc; remove_file temp_filename; raise exn +let protect_writing_to_file ~filename ~f = + let outchan = open_out_bin filename in + try_finally ~always:(fun () -> close_out outchan) + ~exceptionally:(fun () -> remove_file filename) + (fun () -> f outchan) + (* Integer operations *) let rec log2 n = diff --git a/utils/misc.mli b/utils/misc.mli index 101b34db5469..e333c11a21be 100644 --- a/utils/misc.mli +++ b/utils/misc.mli @@ -116,6 +116,27 @@ module Stdlib : sig (** [split_at n l] returns the pair [before, after] where [before] is the [n] first elements of [l] and [after] the remaining ones. If [l] has less than [n] elements, raises Invalid_argument. *) + + type 'a longest_common_prefix_result = private { + longest_common_prefix : 'a list; + first : 'a list; + second : 'a list; + } + + (** Return the longest list that, with respect to the provided equality + function, is a prefix of both of the given lists. Also return each + of the input lists with such prefix removed. *) + val longest_common_prefix + : equal:('a -> 'a -> bool) + -> 'a list + -> 'a list + -> 'a longest_common_prefix_result + + val is_prefix + : equal:('a -> 'a -> bool) + -> 'a list + -> of_:'a list + -> bool end module Option : sig @@ -124,12 +145,21 @@ module Stdlib : sig val is_none : 'a t -> bool val is_some : 'a t -> bool + val compare : ('a -> 'a -> int) -> 'a t -> 'a t -> int val equal : ('a -> 'a -> bool) -> 'a t -> 'a t -> bool val iter : ('a -> unit) -> 'a t -> unit val map : ('a -> 'b) -> 'a t -> 'b t val fold : ('a -> 'b -> 'b) -> 'a t -> 'b -> 'b val value_default : ('a -> 'b) -> default:'b -> 'a t -> 'b + + val print + : (Format.formatter -> 'a -> unit) + -> Format.formatter + -> 'a t + -> unit + + val (>>=) : 'a t -> ('a -> 'b t) -> 'b t end module Array : sig @@ -145,6 +175,8 @@ module Stdlib : sig module Map : Map.S with type key = string module Tbl : Hashtbl.S with type key = string + val print : Format.formatter -> t -> unit + val for_all : (char -> bool) -> t -> bool end @@ -195,6 +227,14 @@ val output_to_file_via_temporary: the channel is closed and the temporary file is renamed to [filename]. *) +(** Open the given [filename] for writing (in binary mode), pass the + [out_channel] to the given function, then close the channel. If the function + raises an exception then [filename] will be removed. *) +val protect_writing_to_file + : filename:string + -> f:(out_channel -> 'a) + -> 'a + val log2: int -> int (* [log2 n] returns [s] such that [n = 1 lsl s] if [n] is a power of 2*)