(*===-- llvm_debuginfo.ml - LLVM OCaml Interface --------------*- OCaml -*-===* * * Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. * See https://llvm.org/LICENSE.txt for license information. * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception * *===----------------------------------------------------------------------===*) type lldibuilder (** Source languages known by DWARF. *) module DWARFSourceLanguageKind = struct type t = | C89 | C | Ada83 | C_plus_plus | Cobol74 | Cobol85 | Fortran77 | Fortran90 | Pascal83 | Modula2 (* New in DWARF v3: *) | LLVMJava | C99 | Ada95 | Fortran95 | PLI | ObjC | ObjC_plus_plus | UPC | D (* New in DWARF v4: *) | LLVMPython (* New in DWARF v5: *) | LLVMOpenCL | Go | Modula3 | Haskell | C_plus_plus_03 | C_plus_plus_11 | OCaml | Rust | C11 | Swift | Julia | Dylan | C_plus_plus_14 | Fortran03 | Fortran08 | RenderScript | BLISS (* Vendor extensions: *) | LLVMMips_Assembler | GOOGLE_RenderScript | BORLAND_Delphi end module DIFlag = struct type t = | Zero | Private | Protected | Public | FwdDecl | AppleBlock | ReservedBit4 | Virtual | Artificial | Explicit | Prototyped | ObjcClassComplete | ObjectPointer | Vector | StaticMember | LValueReference | RValueReference | Reserved | SingleInheritance | MultipleInheritance | VirtualInheritance | IntroducedVirtual | BitField | NoReturn | TypePassByValue | TypePassByReference | EnumClass | FixedEnum | Thunk | NonTrivial | BigEndian | LittleEndian | IndirectVirtualBase | Accessibility | PtrToMemberRep end type lldiflags external diflags_get : DIFlag.t -> lldiflags = "llvm_diflags_get" external diflags_set : lldiflags -> DIFlag.t -> lldiflags = "llvm_diflags_set" external diflags_test : lldiflags -> DIFlag.t -> bool = "llvm_diflags_test" (** The kind of metadata nodes. *) module MetadataKind = struct type t = | MDStringMetadataKind | ConstantAsMetadataMetadataKind | LocalAsMetadataMetadataKind | DistinctMDOperandPlaceholderMetadataKind | MDTupleMetadataKind | DILocationMetadataKind | DIExpressionMetadataKind | DIGlobalVariableExpressionMetadataKind | GenericDINodeMetadataKind | DISubrangeMetadataKind | DIEnumeratorMetadataKind | DIBasicTypeMetadataKind | DIDerivedTypeMetadataKind | DICompositeTypeMetadataKind | DISubroutineTypeMetadataKind | DIFileMetadataKind | DICompileUnitMetadataKind | DISubprogramMetadataKind | DILexicalBlockMetadataKind | DILexicalBlockFileMetadataKind | DINamespaceMetadataKind | DIModuleMetadataKind | DITemplateTypeParameterMetadataKind | DITemplateValueParameterMetadataKind | DIGlobalVariableMetadataKind | DILocalVariableMetadataKind | DILabelMetadataKind | DIObjCPropertyMetadataKind | DIImportedEntityMetadataKind | DIMacroMetadataKind | DIMacroFileMetadataKind | DICommonBlockMetadataKind end (** The amount of debug information to emit. *) module DWARFEmissionKind = struct type t = None | Full | LineTablesOnly end external debug_metadata_version : unit -> int = "llvm_debug_metadata_version" external get_module_debug_metadata_version : Llvm.llmodule -> int = "llvm_get_module_debug_metadata_version" external dibuilder : Llvm.llmodule -> lldibuilder = "llvm_dibuilder" external dibuild_finalize : lldibuilder -> unit = "llvm_dibuild_finalize" (* See LLVMDIBuilderCreateCompileUnit for argument details. *) external dibuild_create_compile_unit : lldibuilder -> DWARFSourceLanguageKind.t -> file_ref:Llvm.llmetadata -> producer:string -> is_optimized:bool -> flags:string -> runtime_ver:int -> split_name:string -> DWARFEmissionKind.t -> dwoid:int -> di_inlining:bool -> di_profiling:bool -> sys_root:string -> sdk:string -> Llvm.llmetadata = "llvm_dibuild_create_compile_unit_bytecode" "llvm_dibuild_create_compile_unit_native" external dibuild_create_file : lldibuilder -> filename:string -> directory:string -> Llvm.llmetadata = "llvm_dibuild_create_file" external dibuild_create_module : lldibuilder -> parent_ref:Llvm.llmetadata -> name:string -> config_macros:string -> include_path:string -> sys_root:string -> Llvm.llmetadata = "llvm_dibuild_create_module_bytecode" "llvm_dibuild_create_module_native" external dibuild_create_namespace : lldibuilder -> parent_ref:Llvm.llmetadata -> name:string -> export_symbols:bool -> Llvm.llmetadata = "llvm_dibuild_create_namespace" external dibuild_create_function : lldibuilder -> scope:Llvm.llmetadata -> name:string -> linkage_name:string -> file:Llvm.llmetadata -> line_no:int -> ty:Llvm.llmetadata -> is_local_to_unit:bool -> is_definition:bool -> scope_line:int -> flags:lldiflags -> is_optimized:bool -> Llvm.llmetadata = "llvm_dibuild_create_function_bytecode" "llvm_dibuild_create_function_native" external dibuild_create_lexical_block : lldibuilder -> scope:Llvm.llmetadata -> file:Llvm.llmetadata -> line:int -> column:int -> Llvm.llmetadata = "llvm_dibuild_create_lexical_block" external dibuild_create_debug_location_helper : Llvm.llcontext -> line:int -> column:int -> scope:Llvm.llmetadata -> inlined_at:Llvm.llmetadata -> Llvm.llmetadata = "llvm_dibuild_create_debug_location" external llmetadata_null : unit -> Llvm.llmetadata = "llvm_metadata_null" let dibuild_create_debug_location ?(inlined_at = llmetadata_null ()) llctx ~line ~column ~scope = dibuild_create_debug_location_helper llctx ~line ~column ~scope ~inlined_at external di_location_get_line : location:Llvm.llmetadata -> int = "llvm_di_location_get_line" external di_location_get_column : location:Llvm.llmetadata -> int = "llvm_di_location_get_column" external di_location_get_scope : location:Llvm.llmetadata -> Llvm.llmetadata = "llvm_di_location_get_scope" external di_location_get_inlined_at : location:Llvm.llmetadata -> Llvm.llmetadata option = "llvm_di_location_get_inlined_at" external di_scope_get_file : scope:Llvm.llmetadata -> Llvm.llmetadata option = "llvm_di_scope_get_file" external di_file_get_directory : file:Llvm.llmetadata -> string = "llvm_di_file_get_directory" external di_file_get_filename : file:Llvm.llmetadata -> string = "llvm_di_file_get_filename" external di_file_get_source : file:Llvm.llmetadata -> string = "llvm_di_file_get_source" external dibuild_get_or_create_type_array : lldibuilder -> data:Llvm.llmetadata array -> Llvm.llmetadata = "llvm_dibuild_get_or_create_type_array" external dibuild_get_or_create_array : lldibuilder -> data:Llvm.llmetadata array -> Llvm.llmetadata = "llvm_dibuild_get_or_create_array" external dibuild_create_subroutine_type : lldibuilder -> file:Llvm.llmetadata -> param_types:Llvm.llmetadata array -> lldiflags -> Llvm.llmetadata = "llvm_dibuild_create_subroutine_type" external dibuild_create_enumerator : lldibuilder -> name:string -> value:int -> is_unsigned:bool -> Llvm.llmetadata = "llvm_dibuild_create_enumerator" external dibuild_create_enumeration_type : lldibuilder -> scope:Llvm.llmetadata -> name:string -> file:Llvm.llmetadata -> line_number:int -> size_in_bits:int -> align_in_bits:int -> elements:Llvm.llmetadata array -> class_ty:Llvm.llmetadata -> Llvm.llmetadata = "llvm_dibuild_create_enumeration_type_bytecode" "llvm_dibuild_create_enumeration_type_native" external dibuild_create_union_type : lldibuilder -> scope:Llvm.llmetadata -> name:string -> file:Llvm.llmetadata -> line_number:int -> size_in_bits:int -> align_in_bits:int -> lldiflags -> elements:Llvm.llmetadata array -> run_time_language:int -> unique_id:string -> Llvm.llmetadata = "llvm_dibuild_create_union_type_bytecode" "llvm_dibuild_create_union_type_native" external dibuild_create_array_type : lldibuilder -> size:int -> align_in_bits:int -> ty:Llvm.llmetadata -> subscripts:Llvm.llmetadata array -> Llvm.llmetadata = "llvm_dibuild_create_array_type" external dibuild_create_vector_type : lldibuilder -> size:int -> align_in_bits:int -> ty:Llvm.llmetadata -> subscripts:Llvm.llmetadata array -> Llvm.llmetadata = "llvm_dibuild_create_array_type" external dibuild_create_unspecified_type : lldibuilder -> name:string -> Llvm.llmetadata = "llvm_dibuild_create_unspecified_type" external dibuild_create_basic_type : lldibuilder -> name:string -> size_in_bits:int -> encoding:int -> lldiflags -> Llvm.llmetadata = "llvm_dibuild_create_basic_type" external dibuild_create_pointer_type : lldibuilder -> pointee_ty:Llvm.llmetadata -> size_in_bits:int -> align_in_bits:int -> address_space:int -> name:string -> Llvm.llmetadata = "llvm_dibuild_create_pointer_type_bytecode" "llvm_dibuild_create_pointer_type_native" external dibuild_create_struct_type : lldibuilder -> scope:Llvm.llmetadata -> name:string -> file:Llvm.llmetadata -> line_number:int -> size_in_bits:int -> align_in_bits:int -> lldiflags -> derived_from:Llvm.llmetadata -> elements:Llvm.llmetadata array -> DWARFSourceLanguageKind.t -> vtable_holder:Llvm.llmetadata -> unique_id:string -> Llvm.llmetadata = "llvm_dibuild_create_struct_type_bytecode" "llvm_dibuild_create_struct_type_native" external dibuild_create_member_type : lldibuilder -> scope:Llvm.llmetadata -> name:string -> file:Llvm.llmetadata -> line_number:int -> size_in_bits:int -> align_in_bits:int -> offset_in_bits:int -> lldiflags -> ty:Llvm.llmetadata -> Llvm.llmetadata = "llvm_dibuild_create_member_type_bytecode" "llvm_dibuild_create_member_type_native" external dibuild_create_static_member_type : lldibuilder -> scope:Llvm.llmetadata -> name:string -> file:Llvm.llmetadata -> line_number:int -> ty:Llvm.llmetadata -> lldiflags -> const_val:Llvm.llvalue -> align_in_bits:int -> Llvm.llmetadata = "llvm_dibuild_create_static_member_type_bytecode" "llvm_dibuild_create_static_member_type_native" external dibuild_create_member_pointer_type : lldibuilder -> pointee_type:Llvm.llmetadata -> class_type:Llvm.llmetadata -> size_in_bits:int -> align_in_bits:int -> lldiflags -> Llvm.llmetadata = "llvm_dibuild_create_member_pointer_type_bytecode" "llvm_dibuild_create_member_pointer_type_native" external dibuild_create_object_pointer_type : lldibuilder -> Llvm.llmetadata -> Llvm.llmetadata = "llvm_dibuild_create_object_pointer_type" external dibuild_create_qualified_type : lldibuilder -> tag:int -> Llvm.llmetadata -> Llvm.llmetadata = "llvm_dibuild_create_qualified_type" external dibuild_create_reference_type : lldibuilder -> tag:int -> Llvm.llmetadata -> Llvm.llmetadata = "llvm_dibuild_create_reference_type" external dibuild_create_null_ptr_type : lldibuilder -> Llvm.llmetadata = "llvm_dibuild_create_null_ptr_type" external dibuild_create_typedef : lldibuilder -> ty:Llvm.llmetadata -> name:string -> file:Llvm.llmetadata -> line_no:int -> scope:Llvm.llmetadata -> align_in_bits:int -> Llvm.llmetadata = "llvm_dibuild_create_typedef_bytecode" "llvm_dibuild_create_typedef_native" external dibuild_create_inheritance : lldibuilder -> ty:Llvm.llmetadata -> base_ty:Llvm.llmetadata -> base_offset:int -> vb_ptr_offset:int -> lldiflags -> Llvm.llmetadata = "llvm_dibuild_create_inheritance_bytecode" "llvm_dibuild_create_inheritance_native" external dibuild_create_forward_decl : lldibuilder -> tag:int -> name:string -> scope:Llvm.llmetadata -> file:Llvm.llmetadata -> line:int -> runtime_lang:int -> size_in_bits:int -> align_in_bits:int -> unique_identifier:string -> Llvm.llmetadata = "llvm_dibuild_create_forward_decl_bytecode" "llvm_dibuild_create_forward_decl_native" external dibuild_create_replaceable_composite_type : lldibuilder -> tag:int -> name:string -> scope:Llvm.llmetadata -> file:Llvm.llmetadata -> line:int -> runtime_lang:int -> size_in_bits:int -> align_in_bits:int -> lldiflags -> unique_identifier:string -> Llvm.llmetadata = "llvm_dibuild_create_replaceable_composite_type_bytecode" "llvm_dibuild_create_replaceable_composite_type_native" external dibuild_create_bit_field_member_type : lldibuilder -> scope:Llvm.llmetadata -> name:string -> file:Llvm.llmetadata -> line_num:int -> size_in_bits:int -> offset_in_bits:int -> storage_offset_in_bits:int -> lldiflags -> ty:Llvm.llmetadata -> Llvm.llmetadata = "llvm_dibuild_create_bit_field_member_type_bytecode" "llvm_dibuild_create_bit_field_member_type_native" external dibuild_create_class_type : lldibuilder -> scope:Llvm.llmetadata -> name:string -> file:Llvm.llmetadata -> line_number:int -> size_in_bits:int -> align_in_bits:int -> offset_in_bits:int -> lldiflags -> derived_from:Llvm.llmetadata -> elements:Llvm.llmetadata array -> vtable_holder:Llvm.llmetadata -> template_params_node:Llvm.llmetadata -> unique_identifier:string -> Llvm.llmetadata = "llvm_dibuild_create_class_type_bytecode" "llvm_dibuild_create_class_type_native" external dibuild_create_artificial_type : lldibuilder -> ty:Llvm.llmetadata -> Llvm.llmetadata = "llvm_dibuild_create_artificial_type" external di_type_get_name : Llvm.llmetadata -> string = "llvm_di_type_get_name" external di_type_get_size_in_bits : Llvm.llmetadata -> int = "llvm_di_type_get_size_in_bits" external di_type_get_offset_in_bits : Llvm.llmetadata -> int = "llvm_di_type_get_offset_in_bits" external di_type_get_align_in_bits : Llvm.llmetadata -> int = "llvm_di_type_get_align_in_bits" external di_type_get_line : Llvm.llmetadata -> int = "llvm_di_type_get_line" external di_type_get_flags : Llvm.llmetadata -> lldiflags = "llvm_di_type_get_flags" external get_subprogram : Llvm.llvalue -> Llvm.llmetadata option = "llvm_get_subprogram" external set_subprogram : Llvm.llvalue -> Llvm.llmetadata -> unit = "llvm_set_subprogram" external di_subprogram_get_line : Llvm.llmetadata -> int = "llvm_di_subprogram_get_line" external instr_get_debug_loc : Llvm.llvalue -> Llvm.llmetadata option = "llvm_instr_get_debug_loc" external instr_set_debug_loc_helper : Llvm.llvalue -> Llvm.llmetadata -> unit = "llvm_instr_set_debug_loc" let instr_set_debug_loc i mopt = match mopt with | None -> instr_set_debug_loc_helper i (llmetadata_null ()) | Some m -> instr_set_debug_loc_helper i m external dibuild_create_constant_value_expression : lldibuilder -> int -> Llvm.llmetadata = "llvm_dibuild_create_constant_value_expression" external dibuild_create_global_variable_expression : lldibuilder -> scope:Llvm.llmetadata -> name:string -> linkage:string -> file:Llvm.llmetadata -> line:int -> ty:Llvm.llmetadata -> is_local_to_unit:bool -> expr:Llvm.llmetadata -> decl:Llvm.llmetadata -> align_in_bits:int -> Llvm.llmetadata = "llvm_dibuild_create_global_variable_expression_bytecode" "llvm_dibuild_create_global_variable_expression_native" external di_global_variable_expression_get_variable : Llvm.llmetadata -> Llvm.llmetadata option = "llvm_di_global_variable_expression_get_variable" external di_variable_get_line : Llvm.llmetadata -> int = "llvm_di_variable_get_line" external di_variable_get_file : Llvm.llmetadata -> Llvm.llmetadata option = "llvm_di_variable_get_file" external get_metadata_kind : Llvm.llmetadata -> MetadataKind.t = "llvm_get_metadata_kind" external dibuild_create_auto_variable : lldibuilder -> scope:Llvm.llmetadata -> name:string -> file:Llvm.llmetadata -> line:int -> ty:Llvm.llmetadata -> always_preserve:bool -> lldiflags -> align_in_bits:int -> Llvm.llmetadata = "llvm_dibuild_create_auto_variable_bytecode" "llvm_dibuild_create_auto_variable_native" external dibuild_create_parameter_variable : lldibuilder -> scope:Llvm.llmetadata -> name:string -> argno:int -> file:Llvm.llmetadata -> line:int -> ty:Llvm.llmetadata -> always_preserve:bool -> lldiflags -> Llvm.llmetadata = "llvm_dibuild_create_parameter_variable_bytecode" "llvm_dibuild_create_parameter_variable_native" external dibuild_insert_declare_before : lldibuilder -> storage:Llvm.llvalue -> var_info:Llvm.llmetadata -> expr:Llvm.llmetadata -> location:Llvm.llmetadata -> instr:Llvm.llvalue -> Llvm.llvalue = "llvm_dibuild_insert_declare_before_bytecode" "llvm_dibuild_insert_declare_before_native" external dibuild_insert_declare_at_end : lldibuilder -> storage:Llvm.llvalue -> var_info:Llvm.llmetadata -> expr:Llvm.llmetadata -> location:Llvm.llmetadata -> block:Llvm.llbasicblock -> Llvm.llvalue = "llvm_dibuild_insert_declare_at_end_bytecode" "llvm_dibuild_insert_declare_at_end_native" external dibuild_expression : lldibuilder -> Int64.t array -> Llvm.llmetadata = "llvm_dibuild_expression"