632 lines · plain
1(*===-- llvm_debuginfo.ml - LLVM OCaml Interface --------------*- OCaml -*-===*2 *3 * Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4 * See https://llvm.org/LICENSE.txt for license information.5 * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6 *7 *===----------------------------------------------------------------------===*)8 9type lldibuilder10 11(** Source languages known by DWARF. *)12module DWARFSourceLanguageKind = struct13 type t =14 | C8915 | C16 | Ada8317 | C_plus_plus18 | Cobol7419 | Cobol8520 | Fortran7721 | Fortran9022 | Pascal8323 | Modula224 (* New in DWARF v3: *)25 | LLVMJava26 | C9927 | Ada9528 | Fortran9529 | PLI30 | ObjC31 | ObjC_plus_plus32 | UPC33 | D34 (* New in DWARF v4: *)35 | LLVMPython36 (* New in DWARF v5: *)37 | LLVMOpenCL38 | Go39 | Modula340 | Haskell41 | C_plus_plus_0342 | C_plus_plus_1143 | OCaml44 | Rust45 | C1146 | Swift47 | Julia48 | Dylan49 | C_plus_plus_1450 | Fortran0351 | Fortran0852 | RenderScript53 | BLISS54 (* Vendor extensions: *)55 | LLVMMips_Assembler56 | GOOGLE_RenderScript57 | BORLAND_Delphi58end59 60module DIFlag = struct61 type t =62 | Zero63 | Private64 | Protected65 | Public66 | FwdDecl67 | AppleBlock68 | ReservedBit469 | Virtual70 | Artificial71 | Explicit72 | Prototyped73 | ObjcClassComplete74 | ObjectPointer75 | Vector76 | StaticMember77 | LValueReference78 | RValueReference79 | Reserved80 | SingleInheritance81 | MultipleInheritance82 | VirtualInheritance83 | IntroducedVirtual84 | BitField85 | NoReturn86 | TypePassByValue87 | TypePassByReference88 | EnumClass89 | FixedEnum90 | Thunk91 | NonTrivial92 | BigEndian93 | LittleEndian94 | IndirectVirtualBase95 | Accessibility96 | PtrToMemberRep97end98 99type lldiflags100 101external diflags_get : DIFlag.t -> lldiflags = "llvm_diflags_get"102 103external diflags_set : lldiflags -> DIFlag.t -> lldiflags = "llvm_diflags_set"104 105external diflags_test : lldiflags -> DIFlag.t -> bool = "llvm_diflags_test"106 107(** The kind of metadata nodes. *)108module MetadataKind = struct109 type t =110 | MDStringMetadataKind111 | ConstantAsMetadataMetadataKind112 | LocalAsMetadataMetadataKind113 | DistinctMDOperandPlaceholderMetadataKind114 | MDTupleMetadataKind115 | DILocationMetadataKind116 | DIExpressionMetadataKind117 | DIGlobalVariableExpressionMetadataKind118 | GenericDINodeMetadataKind119 | DISubrangeMetadataKind120 | DIEnumeratorMetadataKind121 | DIBasicTypeMetadataKind122 | DIDerivedTypeMetadataKind123 | DICompositeTypeMetadataKind124 | DISubroutineTypeMetadataKind125 | DIFileMetadataKind126 | DICompileUnitMetadataKind127 | DISubprogramMetadataKind128 | DILexicalBlockMetadataKind129 | DILexicalBlockFileMetadataKind130 | DINamespaceMetadataKind131 | DIModuleMetadataKind132 | DITemplateTypeParameterMetadataKind133 | DITemplateValueParameterMetadataKind134 | DIGlobalVariableMetadataKind135 | DILocalVariableMetadataKind136 | DILabelMetadataKind137 | DIObjCPropertyMetadataKind138 | DIImportedEntityMetadataKind139 | DIMacroMetadataKind140 | DIMacroFileMetadataKind141 | DICommonBlockMetadataKind142 | DIStringTypeMetadataKind143 | DIGenericSubrangeMetadataKind144 | DIArgListMetadataKind145 | DIAssignIDMetadataKind146 | DISubrangeTypeMetadataKind147 | DIFixedPointTypeMetadataKind148end149 150(** The amount of debug information to emit. *)151module DWARFEmissionKind = struct152 type t = None | Full | LineTablesOnly153end154 155external debug_metadata_version : unit -> int = "llvm_debug_metadata_version"156 157external get_module_debug_metadata_version : Llvm.llmodule -> int158 = "llvm_get_module_debug_metadata_version"159 160external dibuilder : Llvm.llmodule -> lldibuilder = "llvm_dibuilder"161 162external dibuild_finalize : lldibuilder -> unit = "llvm_dibuild_finalize"163 164(* See LLVMDIBuilderCreateCompileUnit for argument details. *)165external dibuild_create_compile_unit :166 lldibuilder ->167 DWARFSourceLanguageKind.t ->168 file_ref:Llvm.llmetadata ->169 producer:string ->170 is_optimized:bool ->171 flags:string ->172 runtime_ver:int ->173 split_name:string ->174 DWARFEmissionKind.t ->175 dwoid:int ->176 di_inlining:bool ->177 di_profiling:bool ->178 sys_root:string ->179 sdk:string ->180 Llvm.llmetadata181 = "llvm_dibuild_create_compile_unit_bytecode" "llvm_dibuild_create_compile_unit_native"182 183external dibuild_create_file :184 lldibuilder -> filename:string -> directory:string -> Llvm.llmetadata185 = "llvm_dibuild_create_file"186 187external dibuild_create_module :188 lldibuilder ->189 parent_ref:Llvm.llmetadata ->190 name:string ->191 config_macros:string ->192 include_path:string ->193 sys_root:string ->194 Llvm.llmetadata195 = "llvm_dibuild_create_module_bytecode" "llvm_dibuild_create_module_native"196 197external dibuild_create_namespace :198 lldibuilder ->199 parent_ref:Llvm.llmetadata ->200 name:string ->201 export_symbols:bool ->202 Llvm.llmetadata = "llvm_dibuild_create_namespace"203 204external dibuild_create_function :205 lldibuilder ->206 scope:Llvm.llmetadata ->207 name:string ->208 linkage_name:string ->209 file:Llvm.llmetadata ->210 line_no:int ->211 ty:Llvm.llmetadata ->212 is_local_to_unit:bool ->213 is_definition:bool ->214 scope_line:int ->215 flags:lldiflags ->216 is_optimized:bool ->217 Llvm.llmetadata218 = "llvm_dibuild_create_function_bytecode" "llvm_dibuild_create_function_native"219 220external dibuild_create_lexical_block :221 lldibuilder ->222 scope:Llvm.llmetadata ->223 file:Llvm.llmetadata ->224 line:int ->225 column:int ->226 Llvm.llmetadata = "llvm_dibuild_create_lexical_block"227 228external dibuild_create_debug_location_helper :229 Llvm.llcontext ->230 line:int ->231 column:int ->232 scope:Llvm.llmetadata ->233 inlined_at:Llvm.llmetadata ->234 Llvm.llmetadata = "llvm_dibuild_create_debug_location"235 236external llmetadata_null : unit -> Llvm.llmetadata = "llvm_metadata_null"237 238let dibuild_create_debug_location ?(inlined_at = llmetadata_null ()) llctx ~line239 ~column ~scope =240 dibuild_create_debug_location_helper llctx ~line ~column ~scope ~inlined_at241 242external di_location_get_line : location:Llvm.llmetadata -> int243 = "llvm_di_location_get_line"244 245external di_location_get_column : location:Llvm.llmetadata -> int246 = "llvm_di_location_get_column"247 248external di_location_get_scope : location:Llvm.llmetadata -> Llvm.llmetadata249 = "llvm_di_location_get_scope"250 251external di_location_get_inlined_at :252 location:Llvm.llmetadata -> Llvm.llmetadata option253 = "llvm_di_location_get_inlined_at"254 255external di_scope_get_file : scope:Llvm.llmetadata -> Llvm.llmetadata option256 = "llvm_di_scope_get_file"257 258external di_file_get_directory : file:Llvm.llmetadata -> string259 = "llvm_di_file_get_directory"260 261external di_file_get_filename : file:Llvm.llmetadata -> string262 = "llvm_di_file_get_filename"263 264external di_file_get_source : file:Llvm.llmetadata -> string265 = "llvm_di_file_get_source"266 267external dibuild_get_or_create_type_array :268 lldibuilder -> data:Llvm.llmetadata array -> Llvm.llmetadata269 = "llvm_dibuild_get_or_create_type_array"270 271external dibuild_get_or_create_array :272 lldibuilder -> data:Llvm.llmetadata array -> Llvm.llmetadata273 = "llvm_dibuild_get_or_create_array"274 275external dibuild_create_subroutine_type :276 lldibuilder ->277 file:Llvm.llmetadata ->278 param_types:Llvm.llmetadata array ->279 lldiflags ->280 Llvm.llmetadata = "llvm_dibuild_create_subroutine_type"281 282external dibuild_create_enumerator :283 lldibuilder -> name:string -> value:int -> is_unsigned:bool -> Llvm.llmetadata284 = "llvm_dibuild_create_enumerator"285 286external dibuild_create_enumeration_type :287 lldibuilder ->288 scope:Llvm.llmetadata ->289 name:string ->290 file:Llvm.llmetadata ->291 line_number:int ->292 size_in_bits:int ->293 align_in_bits:int ->294 elements:Llvm.llmetadata array ->295 class_ty:Llvm.llmetadata ->296 Llvm.llmetadata297 = "llvm_dibuild_create_enumeration_type_bytecode" "llvm_dibuild_create_enumeration_type_native"298 299external dibuild_create_union_type :300 lldibuilder ->301 scope:Llvm.llmetadata ->302 name:string ->303 file:Llvm.llmetadata ->304 line_number:int ->305 size_in_bits:int ->306 align_in_bits:int ->307 lldiflags ->308 elements:Llvm.llmetadata array ->309 run_time_language:int ->310 unique_id:string ->311 Llvm.llmetadata312 = "llvm_dibuild_create_union_type_bytecode" "llvm_dibuild_create_union_type_native"313 314external dibuild_create_array_type :315 lldibuilder ->316 size:int ->317 align_in_bits:int ->318 ty:Llvm.llmetadata ->319 subscripts:Llvm.llmetadata array ->320 Llvm.llmetadata = "llvm_dibuild_create_array_type"321 322external dibuild_create_vector_type :323 lldibuilder ->324 size:int ->325 align_in_bits:int ->326 ty:Llvm.llmetadata ->327 subscripts:Llvm.llmetadata array ->328 Llvm.llmetadata = "llvm_dibuild_create_array_type"329 330external dibuild_create_unspecified_type :331 lldibuilder -> name:string -> Llvm.llmetadata332 = "llvm_dibuild_create_unspecified_type"333 334external dibuild_create_basic_type :335 lldibuilder ->336 name:string ->337 size_in_bits:int ->338 encoding:int ->339 lldiflags ->340 Llvm.llmetadata = "llvm_dibuild_create_basic_type"341 342external dibuild_create_pointer_type :343 lldibuilder ->344 pointee_ty:Llvm.llmetadata ->345 size_in_bits:int ->346 align_in_bits:int ->347 address_space:int ->348 name:string ->349 Llvm.llmetadata350 = "llvm_dibuild_create_pointer_type_bytecode" "llvm_dibuild_create_pointer_type_native"351 352external dibuild_create_struct_type :353 lldibuilder ->354 scope:Llvm.llmetadata ->355 name:string ->356 file:Llvm.llmetadata ->357 line_number:int ->358 size_in_bits:int ->359 align_in_bits:int ->360 lldiflags ->361 derived_from:Llvm.llmetadata ->362 elements:Llvm.llmetadata array ->363 DWARFSourceLanguageKind.t ->364 vtable_holder:Llvm.llmetadata ->365 unique_id:string ->366 Llvm.llmetadata367 = "llvm_dibuild_create_struct_type_bytecode" "llvm_dibuild_create_struct_type_native"368 369external dibuild_create_member_type :370 lldibuilder ->371 scope:Llvm.llmetadata ->372 name:string ->373 file:Llvm.llmetadata ->374 line_number:int ->375 size_in_bits:int ->376 align_in_bits:int ->377 offset_in_bits:int ->378 lldiflags ->379 ty:Llvm.llmetadata ->380 Llvm.llmetadata381 = "llvm_dibuild_create_member_type_bytecode" "llvm_dibuild_create_member_type_native"382 383external dibuild_create_static_member_type :384 lldibuilder ->385 scope:Llvm.llmetadata ->386 name:string ->387 file:Llvm.llmetadata ->388 line_number:int ->389 ty:Llvm.llmetadata ->390 lldiflags ->391 const_val:Llvm.llvalue ->392 align_in_bits:int ->393 Llvm.llmetadata394 = "llvm_dibuild_create_static_member_type_bytecode" "llvm_dibuild_create_static_member_type_native"395 396external dibuild_create_member_pointer_type :397 lldibuilder ->398 pointee_type:Llvm.llmetadata ->399 class_type:Llvm.llmetadata ->400 size_in_bits:int ->401 align_in_bits:int ->402 lldiflags ->403 Llvm.llmetadata404 = "llvm_dibuild_create_member_pointer_type_bytecode" "llvm_dibuild_create_member_pointer_type_native"405 406external dibuild_create_object_pointer_type :407 lldibuilder -> Llvm.llmetadata -> implicit:bool -> Llvm.llmetadata408 = "llvm_dibuild_create_object_pointer_type"409 410external dibuild_create_qualified_type :411 lldibuilder -> tag:int -> Llvm.llmetadata -> Llvm.llmetadata412 = "llvm_dibuild_create_qualified_type"413 414external dibuild_create_reference_type :415 lldibuilder -> tag:int -> Llvm.llmetadata -> Llvm.llmetadata416 = "llvm_dibuild_create_reference_type"417 418external dibuild_create_null_ptr_type : lldibuilder -> Llvm.llmetadata419 = "llvm_dibuild_create_null_ptr_type"420 421external dibuild_create_typedef :422 lldibuilder ->423 ty:Llvm.llmetadata ->424 name:string ->425 file:Llvm.llmetadata ->426 line_no:int ->427 scope:Llvm.llmetadata ->428 align_in_bits:int ->429 Llvm.llmetadata430 = "llvm_dibuild_create_typedef_bytecode" "llvm_dibuild_create_typedef_native"431 432external dibuild_create_inheritance :433 lldibuilder ->434 ty:Llvm.llmetadata ->435 base_ty:Llvm.llmetadata ->436 base_offset:int ->437 vb_ptr_offset:int ->438 lldiflags ->439 Llvm.llmetadata440 = "llvm_dibuild_create_inheritance_bytecode" "llvm_dibuild_create_inheritance_native"441 442external dibuild_create_forward_decl :443 lldibuilder ->444 tag:int ->445 name:string ->446 scope:Llvm.llmetadata ->447 file:Llvm.llmetadata ->448 line:int ->449 runtime_lang:int ->450 size_in_bits:int ->451 align_in_bits:int ->452 unique_identifier:string ->453 Llvm.llmetadata454 = "llvm_dibuild_create_forward_decl_bytecode" "llvm_dibuild_create_forward_decl_native"455 456external dibuild_create_replaceable_composite_type :457 lldibuilder ->458 tag:int ->459 name:string ->460 scope:Llvm.llmetadata ->461 file:Llvm.llmetadata ->462 line:int ->463 runtime_lang:int ->464 size_in_bits:int ->465 align_in_bits:int ->466 lldiflags ->467 unique_identifier:string ->468 Llvm.llmetadata469 = "llvm_dibuild_create_replaceable_composite_type_bytecode" "llvm_dibuild_create_replaceable_composite_type_native"470 471external dibuild_create_bit_field_member_type :472 lldibuilder ->473 scope:Llvm.llmetadata ->474 name:string ->475 file:Llvm.llmetadata ->476 line_num:int ->477 size_in_bits:int ->478 offset_in_bits:int ->479 storage_offset_in_bits:int ->480 lldiflags ->481 ty:Llvm.llmetadata ->482 Llvm.llmetadata483 = "llvm_dibuild_create_bit_field_member_type_bytecode" "llvm_dibuild_create_bit_field_member_type_native"484 485external dibuild_create_class_type :486 lldibuilder ->487 scope:Llvm.llmetadata ->488 name:string ->489 file:Llvm.llmetadata ->490 line_number:int ->491 size_in_bits:int ->492 align_in_bits:int ->493 offset_in_bits:int ->494 lldiflags ->495 derived_from:Llvm.llmetadata ->496 elements:Llvm.llmetadata array ->497 vtable_holder:Llvm.llmetadata ->498 template_params_node:Llvm.llmetadata ->499 unique_identifier:string ->500 Llvm.llmetadata501 = "llvm_dibuild_create_class_type_bytecode" "llvm_dibuild_create_class_type_native"502 503external dibuild_create_artificial_type :504 lldibuilder -> ty:Llvm.llmetadata -> Llvm.llmetadata505 = "llvm_dibuild_create_artificial_type"506 507external di_type_get_name : Llvm.llmetadata -> string = "llvm_di_type_get_name"508 509external di_type_get_size_in_bits : Llvm.llmetadata -> int510 = "llvm_di_type_get_size_in_bits"511 512external di_type_get_offset_in_bits : Llvm.llmetadata -> int513 = "llvm_di_type_get_offset_in_bits"514 515external di_type_get_align_in_bits : Llvm.llmetadata -> int516 = "llvm_di_type_get_align_in_bits"517 518external di_type_get_line : Llvm.llmetadata -> int = "llvm_di_type_get_line"519 520external di_type_get_flags : Llvm.llmetadata -> lldiflags521 = "llvm_di_type_get_flags"522 523external get_subprogram : Llvm.llvalue -> Llvm.llmetadata option524 = "llvm_get_subprogram"525 526external set_subprogram : Llvm.llvalue -> Llvm.llmetadata -> unit527 = "llvm_set_subprogram"528 529external di_subprogram_get_line : Llvm.llmetadata -> int530 = "llvm_di_subprogram_get_line"531 532external instr_get_debug_loc : Llvm.llvalue -> Llvm.llmetadata option533 = "llvm_instr_get_debug_loc"534 535external instr_set_debug_loc_helper : Llvm.llvalue -> Llvm.llmetadata -> unit536 = "llvm_instr_set_debug_loc"537 538let instr_set_debug_loc i mopt =539 match mopt with540 | None -> instr_set_debug_loc_helper i (llmetadata_null ())541 | Some m -> instr_set_debug_loc_helper i m542 543external dibuild_create_constant_value_expression :544 lldibuilder -> int -> Llvm.llmetadata545 = "llvm_dibuild_create_constant_value_expression"546 547external dibuild_create_global_variable_expression :548 lldibuilder ->549 scope:Llvm.llmetadata ->550 name:string ->551 linkage:string ->552 file:Llvm.llmetadata ->553 line:int ->554 ty:Llvm.llmetadata ->555 is_local_to_unit:bool ->556 expr:Llvm.llmetadata ->557 decl:Llvm.llmetadata ->558 align_in_bits:int ->559 Llvm.llmetadata560 = "llvm_dibuild_create_global_variable_expression_bytecode" "llvm_dibuild_create_global_variable_expression_native"561 562external di_global_variable_expression_get_variable :563 Llvm.llmetadata -> Llvm.llmetadata option564 = "llvm_di_global_variable_expression_get_variable"565 566external di_variable_get_line : Llvm.llmetadata -> int567 = "llvm_di_variable_get_line"568 569external di_variable_get_file : Llvm.llmetadata -> Llvm.llmetadata option570 = "llvm_di_variable_get_file"571 572external get_metadata_kind : Llvm.llmetadata -> MetadataKind.t573 = "llvm_get_metadata_kind"574 575external dibuild_create_auto_variable :576 lldibuilder ->577 scope:Llvm.llmetadata ->578 name:string ->579 file:Llvm.llmetadata ->580 line:int ->581 ty:Llvm.llmetadata ->582 always_preserve:bool ->583 lldiflags ->584 align_in_bits:int ->585 Llvm.llmetadata586 = "llvm_dibuild_create_auto_variable_bytecode" "llvm_dibuild_create_auto_variable_native"587 588external dibuild_create_parameter_variable :589 lldibuilder ->590 scope:Llvm.llmetadata ->591 name:string ->592 argno:int ->593 file:Llvm.llmetadata ->594 line:int ->595 ty:Llvm.llmetadata ->596 always_preserve:bool ->597 lldiflags ->598 Llvm.llmetadata599 = "llvm_dibuild_create_parameter_variable_bytecode" "llvm_dibuild_create_parameter_variable_native"600 601external dibuild_insert_declare_before :602 lldibuilder ->603 storage:Llvm.llvalue ->604 var_info:Llvm.llmetadata ->605 expr:Llvm.llmetadata ->606 location:Llvm.llmetadata ->607 instr:Llvm.llvalue ->608 Llvm.lldbgrecord609 = "llvm_dibuild_insert_declare_before_bytecode" "llvm_dibuild_insert_declare_before_native"610 611external dibuild_insert_declare_at_end :612 lldibuilder ->613 storage:Llvm.llvalue ->614 var_info:Llvm.llmetadata ->615 expr:Llvm.llmetadata ->616 location:Llvm.llmetadata ->617 block:Llvm.llbasicblock ->618 Llvm.lldbgrecord619 = "llvm_dibuild_insert_declare_at_end_bytecode" "llvm_dibuild_insert_declare_at_end_native"620 621external dibuild_expression :622 lldibuilder ->623 Int64.t array ->624 Llvm.llmetadata625 = "llvm_dibuild_expression"626 627external is_new_dbg_info_format : Llvm.llmodule -> bool628 = "llvm_is_new_dbg_info_format"629 630external set_is_new_dbg_info_format : Llvm.llmodule -> bool -> unit631 = "llvm_set_is_new_dbg_info_format"632