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-exception 6 * 7 *===----------------------------------------------------------------------===*) 8 9 type lldibuilder 10 11 (** Source languages known by DWARF. *) 12 module DWARFSourceLanguageKind = struct 13 type t = 14 | C89 15 | C 16 | Ada83 17 | C_plus_plus 18 | Cobol74 19 | Cobol85 20 | Fortran77 21 | Fortran90 22 | Pascal83 23 | Modula2 24 (* New in DWARF v3: *) 25 | LLVMJava 26 | C99 27 | Ada95 28 | Fortran95 29 | PLI 30 | ObjC 31 | ObjC_plus_plus 32 | UPC 33 | D 34 (* New in DWARF v4: *) 35 | LLVMPython 36 (* New in DWARF v5: *) 37 | LLVMOpenCL 38 | Go 39 | Modula3 40 | Haskell 41 | C_plus_plus_03 42 | C_plus_plus_11 43 | OCaml 44 | Rust 45 | C11 46 | Swift 47 | Julia 48 | Dylan 49 | C_plus_plus_14 50 | Fortran03 51 | Fortran08 52 | RenderScript 53 | BLISS 54 (* Vendor extensions: *) 55 | LLVMMips_Assembler 56 | GOOGLE_RenderScript 57 | BORLAND_Delphi 58 end 59 60 module DIFlag = struct 61 type t = 62 | Zero 63 | Private 64 | Protected 65 | Public 66 | FwdDecl 67 | AppleBlock 68 | ReservedBit4 69 | Virtual 70 | Artificial 71 | Explicit 72 | Prototyped 73 | ObjcClassComplete 74 | ObjectPointer 75 | Vector 76 | StaticMember 77 | LValueReference 78 | RValueReference 79 | Reserved 80 | SingleInheritance 81 | MultipleInheritance 82 | VirtualInheritance 83 | IntroducedVirtual 84 | BitField 85 | NoReturn 86 | TypePassByValue 87 | TypePassByReference 88 | EnumClass 89 | FixedEnum 90 | Thunk 91 | NonTrivial 92 | BigEndian 93 | LittleEndian 94 | IndirectVirtualBase 95 | Accessibility 96 | PtrToMemberRep 97 end 98 99 type lldiflags 100 101 external diflags_get : DIFlag.t -> lldiflags = "llvm_diflags_get" 102 103 external diflags_set : lldiflags -> DIFlag.t -> lldiflags = "llvm_diflags_set" 104 105 external diflags_test : lldiflags -> DIFlag.t -> bool = "llvm_diflags_test" 106 107 (** The kind of metadata nodes. *) 108 module MetadataKind = struct 109 type t = 110 | MDStringMetadataKind 111 | ConstantAsMetadataMetadataKind 112 | LocalAsMetadataMetadataKind 113 | DistinctMDOperandPlaceholderMetadataKind 114 | MDTupleMetadataKind 115 | DILocationMetadataKind 116 | DIExpressionMetadataKind 117 | DIGlobalVariableExpressionMetadataKind 118 | GenericDINodeMetadataKind 119 | DISubrangeMetadataKind 120 | DIEnumeratorMetadataKind 121 | DIBasicTypeMetadataKind 122 | DIDerivedTypeMetadataKind 123 | DICompositeTypeMetadataKind 124 | DISubroutineTypeMetadataKind 125 | DIFileMetadataKind 126 | DICompileUnitMetadataKind 127 | DISubprogramMetadataKind 128 | DILexicalBlockMetadataKind 129 | DILexicalBlockFileMetadataKind 130 | DINamespaceMetadataKind 131 | DIModuleMetadataKind 132 | DITemplateTypeParameterMetadataKind 133 | DITemplateValueParameterMetadataKind 134 | DIGlobalVariableMetadataKind 135 | DILocalVariableMetadataKind 136 | DILabelMetadataKind 137 | DIObjCPropertyMetadataKind 138 | DIImportedEntityMetadataKind 139 | DIMacroMetadataKind 140 | DIMacroFileMetadataKind 141 | DICommonBlockMetadataKind 142 end 143 144 (** The amount of debug information to emit. *) 145 module DWARFEmissionKind = struct 146 type t = None | Full | LineTablesOnly 147 end 148 149 external debug_metadata_version : unit -> int = "llvm_debug_metadata_version" 150 151 external get_module_debug_metadata_version : Llvm.llmodule -> int 152 = "llvm_get_module_debug_metadata_version" 153 154 external dibuilder : Llvm.llmodule -> lldibuilder = "llvm_dibuilder" 155 156 external dibuild_finalize : lldibuilder -> unit = "llvm_dibuild_finalize" 157 158 (* See LLVMDIBuilderCreateCompileUnit for argument details. *) 159 external dibuild_create_compile_unit : 160 lldibuilder -> 161 DWARFSourceLanguageKind.t -> 162 file_ref:Llvm.llmetadata -> 163 producer:string -> 164 is_optimized:bool -> 165 flags:string -> 166 runtime_ver:int -> 167 split_name:string -> 168 DWARFEmissionKind.t -> 169 dwoid:int -> 170 di_inlining:bool -> 171 di_profiling:bool -> 172 sys_root:string -> 173 sdk:string -> 174 Llvm.llmetadata 175 = "llvm_dibuild_create_compile_unit_bytecode" "llvm_dibuild_create_compile_unit_native" 176 177 external dibuild_create_file : 178 lldibuilder -> filename:string -> directory:string -> Llvm.llmetadata 179 = "llvm_dibuild_create_file" 180 181 external dibuild_create_module : 182 lldibuilder -> 183 parent_ref:Llvm.llmetadata -> 184 name:string -> 185 config_macros:string -> 186 include_path:string -> 187 sys_root:string -> 188 Llvm.llmetadata 189 = "llvm_dibuild_create_module_bytecode" "llvm_dibuild_create_module_native" 190 191 external dibuild_create_namespace : 192 lldibuilder -> 193 parent_ref:Llvm.llmetadata -> 194 name:string -> 195 export_symbols:bool -> 196 Llvm.llmetadata = "llvm_dibuild_create_namespace" 197 198 external dibuild_create_function : 199 lldibuilder -> 200 scope:Llvm.llmetadata -> 201 name:string -> 202 linkage_name:string -> 203 file:Llvm.llmetadata -> 204 line_no:int -> 205 ty:Llvm.llmetadata -> 206 is_local_to_unit:bool -> 207 is_definition:bool -> 208 scope_line:int -> 209 flags:lldiflags -> 210 is_optimized:bool -> 211 Llvm.llmetadata 212 = "llvm_dibuild_create_function_bytecode" "llvm_dibuild_create_function_native" 213 214 external dibuild_create_lexical_block : 215 lldibuilder -> 216 scope:Llvm.llmetadata -> 217 file:Llvm.llmetadata -> 218 line:int -> 219 column:int -> 220 Llvm.llmetadata = "llvm_dibuild_create_lexical_block" 221 222 external dibuild_create_debug_location_helper : 223 Llvm.llcontext -> 224 line:int -> 225 column:int -> 226 scope:Llvm.llmetadata -> 227 inlined_at:Llvm.llmetadata -> 228 Llvm.llmetadata = "llvm_dibuild_create_debug_location" 229 230 external llmetadata_null : unit -> Llvm.llmetadata = "llvm_metadata_null" 231 232 let dibuild_create_debug_location ?(inlined_at = llmetadata_null ()) llctx ~line 233 ~column ~scope = 234 dibuild_create_debug_location_helper llctx line column scope inlined_at 235 236 external di_location_get_line : location:Llvm.llmetadata -> int 237 = "llvm_di_location_get_line" 238 239 external di_location_get_column : location:Llvm.llmetadata -> int 240 = "llvm_di_location_get_column" 241 242 external di_location_get_scope : location:Llvm.llmetadata -> Llvm.llmetadata 243 = "llvm_di_location_get_scope" 244 245 external di_location_get_inlined_at : 246 location:Llvm.llmetadata -> Llvm.llmetadata option 247 = "llvm_di_location_get_inlined_at" 248 249 external di_scope_get_file : scope:Llvm.llmetadata -> Llvm.llmetadata option 250 = "llvm_di_scope_get_file" 251 252 external di_file_get_directory : file:Llvm.llmetadata -> string 253 = "llvm_di_file_get_directory" 254 255 external di_file_get_filename : file:Llvm.llmetadata -> string 256 = "llvm_di_file_get_filename" 257 258 external di_file_get_source : file:Llvm.llmetadata -> string 259 = "llvm_di_file_get_source" 260 261 external dibuild_get_or_create_type_array : 262 lldibuilder -> data:Llvm.llmetadata array -> Llvm.llmetadata 263 = "llvm_dibuild_get_or_create_type_array" 264 265 external dibuild_get_or_create_array : 266 lldibuilder -> data:Llvm.llmetadata array -> Llvm.llmetadata 267 = "llvm_dibuild_get_or_create_array" 268 269 external dibuild_create_subroutine_type : 270 lldibuilder -> 271 file:Llvm.llmetadata -> 272 param_types:Llvm.llmetadata array -> 273 lldiflags -> 274 Llvm.llmetadata = "llvm_dibuild_create_subroutine_type" 275 276 external dibuild_create_enumerator : 277 lldibuilder -> name:string -> value:int -> is_unsigned:bool -> Llvm.llmetadata 278 = "llvm_dibuild_create_enumerator" 279 280 external dibuild_create_enumeration_type : 281 lldibuilder -> 282 scope:Llvm.llmetadata -> 283 name:string -> 284 file:Llvm.llmetadata -> 285 line_number:int -> 286 size_in_bits:int -> 287 align_in_bits:int -> 288 elements:Llvm.llmetadata array -> 289 class_ty:Llvm.llmetadata -> 290 Llvm.llmetadata 291 = "llvm_dibuild_create_enumeration_type_bytecode" "llvm_dibuild_create_enumeration_type_native" 292 293 external dibuild_create_union_type : 294 lldibuilder -> 295 scope:Llvm.llmetadata -> 296 name:string -> 297 file:Llvm.llmetadata -> 298 line_number:int -> 299 size_in_bits:int -> 300 align_in_bits:int -> 301 lldiflags -> 302 elements:Llvm.llmetadata array -> 303 run_time_language:int -> 304 unique_id:string -> 305 Llvm.llmetadata 306 = "llvm_dibuild_create_union_type_bytecode" "llvm_dibuild_create_union_type_native" 307 308 external dibuild_create_array_type : 309 lldibuilder -> 310 size:int -> 311 align_in_bits:int -> 312 ty:Llvm.llmetadata -> 313 subscripts:Llvm.llmetadata array -> 314 Llvm.llmetadata = "llvm_dibuild_create_array_type" 315 316 external dibuild_create_vector_type : 317 lldibuilder -> 318 size:int -> 319 align_in_bits:int -> 320 ty:Llvm.llmetadata -> 321 subscripts:Llvm.llmetadata array -> 322 Llvm.llmetadata = "llvm_dibuild_create_array_type" 323 324 external dibuild_create_unspecified_type : 325 lldibuilder -> name:string -> Llvm.llmetadata 326 = "llvm_dibuild_create_unspecified_type" 327 328 external dibuild_create_basic_type : 329 lldibuilder -> 330 name:string -> 331 size_in_bits:int -> 332 encoding:int -> 333 lldiflags -> 334 Llvm.llmetadata = "llvm_dibuild_create_basic_type" 335 336 external dibuild_create_pointer_type : 337 lldibuilder -> 338 pointee_ty:Llvm.llmetadata -> 339 size_in_bits:int -> 340 align_in_bits:int -> 341 address_space:int -> 342 name:string -> 343 Llvm.llmetadata 344 = "llvm_dibuild_create_pointer_type_bytecode" "llvm_dibuild_create_pointer_type_native" 345 346 external dibuild_create_struct_type : 347 lldibuilder -> 348 scope:Llvm.llmetadata -> 349 name:string -> 350 file:Llvm.llmetadata -> 351 line_number:int -> 352 size_in_bits:int -> 353 align_in_bits:int -> 354 lldiflags -> 355 derived_from:Llvm.llmetadata -> 356 elements:Llvm.llmetadata array -> 357 DWARFSourceLanguageKind.t -> 358 vtable_holder:Llvm.llmetadata -> 359 unique_id:string -> 360 Llvm.llmetadata 361 = "llvm_dibuild_create_struct_type_bytecode" "llvm_dibuild_create_struct_type_native" 362 363 external dibuild_create_member_type : 364 lldibuilder -> 365 scope:Llvm.llmetadata -> 366 name:string -> 367 file:Llvm.llmetadata -> 368 line_number:int -> 369 size_in_bits:int -> 370 align_in_bits:int -> 371 offset_in_bits:int -> 372 lldiflags -> 373 ty:Llvm.llmetadata -> 374 Llvm.llmetadata 375 = "llvm_dibuild_create_member_type_bytecode" "llvm_dibuild_create_member_type_native" 376 377 external dibuild_create_static_member_type : 378 lldibuilder -> 379 scope:Llvm.llmetadata -> 380 name:string -> 381 file:Llvm.llmetadata -> 382 line_number:int -> 383 ty:Llvm.llmetadata -> 384 lldiflags -> 385 const_val:Llvm.llvalue -> 386 align_in_bits:int -> 387 Llvm.llmetadata 388 = "llvm_dibuild_create_static_member_type_bytecode" "llvm_dibuild_create_static_member_type_native" 389 390 external dibuild_create_member_pointer_type : 391 lldibuilder -> 392 pointee_type:Llvm.llmetadata -> 393 class_type:Llvm.llmetadata -> 394 size_in_bits:int -> 395 align_in_bits:int -> 396 lldiflags -> 397 Llvm.llmetadata 398 = "llvm_dibuild_create_member_pointer_type_bytecode" "llvm_dibuild_create_member_pointer_type_native" 399 400 external dibuild_create_object_pointer_type : 401 lldibuilder -> Llvm.llmetadata -> Llvm.llmetadata 402 = "llvm_dibuild_create_object_pointer_type" 403 404 external dibuild_create_qualified_type : 405 lldibuilder -> tag:int -> Llvm.llmetadata -> Llvm.llmetadata 406 = "llvm_dibuild_create_qualified_type" 407 408 external dibuild_create_reference_type : 409 lldibuilder -> tag:int -> Llvm.llmetadata -> Llvm.llmetadata 410 = "llvm_dibuild_create_reference_type" 411 412 external dibuild_create_null_ptr_type : lldibuilder -> Llvm.llmetadata 413 = "llvm_dibuild_create_null_ptr_type" 414 415 external dibuild_create_typedef : 416 lldibuilder -> 417 ty:Llvm.llmetadata -> 418 name:string -> 419 file:Llvm.llmetadata -> 420 line_no:int -> 421 scope:Llvm.llmetadata -> 422 align_in_bits:int -> 423 Llvm.llmetadata 424 = "llvm_dibuild_create_typedef_bytecode" "llvm_dibuild_create_typedef_native" 425 426 external dibuild_create_inheritance : 427 lldibuilder -> 428 ty:Llvm.llmetadata -> 429 base_ty:Llvm.llmetadata -> 430 base_offset:int -> 431 vb_ptr_offset:int -> 432 lldiflags -> 433 Llvm.llmetadata 434 = "llvm_dibuild_create_inheritance_bytecode" "llvm_dibuild_create_inheritance_native" 435 436 external dibuild_create_forward_decl : 437 lldibuilder -> 438 tag:int -> 439 name:string -> 440 scope:Llvm.llmetadata -> 441 file:Llvm.llmetadata -> 442 line:int -> 443 runtime_lang:int -> 444 size_in_bits:int -> 445 align_in_bits:int -> 446 unique_identifier:string -> 447 Llvm.llmetadata 448 = "llvm_dibuild_create_forward_decl_bytecode" "llvm_dibuild_create_forward_decl_native" 449 450 external dibuild_create_replaceable_composite_type : 451 lldibuilder -> 452 tag:int -> 453 name:string -> 454 scope:Llvm.llmetadata -> 455 file:Llvm.llmetadata -> 456 line:int -> 457 runtime_lang:int -> 458 size_in_bits:int -> 459 align_in_bits:int -> 460 lldiflags -> 461 unique_identifier:string -> 462 Llvm.llmetadata 463 = "llvm_dibuild_create_replaceable_composite_type_bytecode" "llvm_dibuild_create_replaceable_composite_type_native" 464 465 external dibuild_create_bit_field_member_type : 466 lldibuilder -> 467 scope:Llvm.llmetadata -> 468 name:string -> 469 file:Llvm.llmetadata -> 470 line_num:int -> 471 size_in_bits:int -> 472 offset_in_bits:int -> 473 storage_offset_in_bits:int -> 474 lldiflags -> 475 ty:Llvm.llmetadata -> 476 Llvm.llmetadata 477 = "llvm_dibuild_create_bit_field_member_type_bytecode" "llvm_dibuild_create_bit_field_member_type_native" 478 479 external dibuild_create_class_type : 480 lldibuilder -> 481 scope:Llvm.llmetadata -> 482 name:string -> 483 file:Llvm.llmetadata -> 484 line_number:int -> 485 size_in_bits:int -> 486 align_in_bits:int -> 487 offset_in_bits:int -> 488 lldiflags -> 489 derived_from:Llvm.llmetadata -> 490 elements:Llvm.llmetadata array -> 491 vtable_holder:Llvm.llmetadata -> 492 template_params_node:Llvm.llmetadata -> 493 unique_identifier:string -> 494 Llvm.llmetadata 495 = "llvm_dibuild_create_class_type_bytecode" "llvm_dibuild_create_class_type_native" 496 497 external dibuild_create_artificial_type : 498 lldibuilder -> ty:Llvm.llmetadata -> Llvm.llmetadata 499 = "llvm_dibuild_create_artificial_type" 500 501 external di_type_get_name : Llvm.llmetadata -> string = "llvm_di_type_get_name" 502 503 external di_type_get_size_in_bits : Llvm.llmetadata -> int 504 = "llvm_di_type_get_size_in_bits" 505 506 external di_type_get_offset_in_bits : Llvm.llmetadata -> int 507 = "llvm_di_type_get_offset_in_bits" 508 509 external di_type_get_align_in_bits : Llvm.llmetadata -> int 510 = "llvm_di_type_get_align_in_bits" 511 512 external di_type_get_line : Llvm.llmetadata -> int = "llvm_di_type_get_line" 513 514 external di_type_get_flags : Llvm.llmetadata -> lldiflags 515 = "llvm_di_type_get_flags" 516 517 external get_subprogram : Llvm.llvalue -> Llvm.llmetadata option 518 = "llvm_get_subprogram" 519 520 external set_subprogram : Llvm.llvalue -> Llvm.llmetadata -> unit 521 = "llvm_set_subprogram" 522 523 external di_subprogram_get_line : Llvm.llmetadata -> int 524 = "llvm_di_subprogram_get_line" 525 526 external instr_get_debug_loc : Llvm.llvalue -> Llvm.llmetadata option 527 = "llvm_instr_get_debug_loc" 528 529 external instr_set_debug_loc_helper : Llvm.llvalue -> Llvm.llmetadata -> unit 530 = "llvm_instr_set_debug_loc" 531 532 let instr_set_debug_loc i mopt = 533 match mopt with 534 | None -> instr_set_debug_loc_helper i (llmetadata_null ()) 535 | Some m -> instr_set_debug_loc_helper i m 536 537 external dibuild_create_constant_value_expression : 538 lldibuilder -> int -> Llvm.llmetadata 539 = "llvm_dibuild_create_constant_value_expression" 540 541 external dibuild_create_global_variable_expression : 542 lldibuilder -> 543 scope:Llvm.llmetadata -> 544 name:string -> 545 linkage:string -> 546 file:Llvm.llmetadata -> 547 line:int -> 548 ty:Llvm.llmetadata -> 549 is_local_to_unit:bool -> 550 expr:Llvm.llmetadata -> 551 decl:Llvm.llmetadata -> 552 align_in_bits:int -> 553 Llvm.llmetadata 554 = "llvm_dibuild_create_global_variable_expression_bytecode" "llvm_dibuild_create_global_variable_expression_native" 555 556 external di_global_variable_expression_get_variable : 557 Llvm.llmetadata -> Llvm.llmetadata option 558 = "llvm_di_global_variable_expression_get_variable" 559 560 external di_variable_get_line : Llvm.llmetadata -> int 561 = "llvm_di_variable_get_line" 562 563 external di_variable_get_file : Llvm.llmetadata -> Llvm.llmetadata option 564 = "llvm_di_variable_get_file" 565 566 external get_metadata_kind : Llvm.llmetadata -> MetadataKind.t 567 = "llvm_get_metadata_kind" 568