1.\" Copyright (c) 2011 Joseph Koshy. All rights reserved. 2.\" 3.\" Redistribution and use in source and binary forms, with or without 4.\" modification, are permitted provided that the following conditions 5.\" are met: 6.\" 1. Redistributions of source code must retain the above copyright 7.\" notice, this list of conditions and the following disclaimer. 8.\" 2. Redistributions in binary form must reproduce the above copyright 9.\" notice, this list of conditions and the following disclaimer in the 10.\" documentation and/or other materials provided with the distribution. 11.\" 12.\" This software is provided by Joseph Koshy ``as is'' and 13.\" any express or implied warranties, including, but not limited to, the 14.\" implied warranties of merchantability and fitness for a particular purpose 15.\" are disclaimed. in no event shall Joseph Koshy be liable 16.\" for any direct, indirect, incidental, special, exemplary, or consequential 17.\" damages (including, but not limited to, procurement of substitute goods 18.\" or services; loss of use, data, or profits; or business interruption) 19.\" however caused and on any theory of liability, whether in contract, strict 20.\" liability, or tort (including negligence or otherwise) arising in any way 21.\" out of the use of this software, even if advised of the possibility of 22.\" such damage. 23.\" 24.\" $Id: dwarf.3 3644 2018-10-15 19:55:01Z jkoshy $ 25.\" 26.Dd December 21, 2014 27.Dt DWARF 3 28.Os 29.Sh NAME 30.Nm dwarf 31.Nd access debugging information in object files 32.Sh LIBRARY 33.Lb libdwarf 34.Sh SYNOPSIS 35.In libdwarf.h 36.Sh DESCRIPTION 37The 38.Lb libdwarf 39provides functions that allow an application to read and write debugging 40information in object files. 41The format of debugging information accessible through this API 42is defined by the DWARF standard, see 43.Xr dwarf 4 . 44.Pp 45The 46.Xr DWARF 3 47API has two parts: 48.Bl -bullet 49.It 50A consumer API set allows applications to read existing debug information 51in a program object. 52The functions that comprise the DWARF consumer API are described in 53the section 54.Sx "DWARF Consumer API" 55below. 56.It 57A producer API set that allows applications to add debug information 58to a program object. 59The functions that comprise the DWARF producer API are described in 60the section 61.Sx "DWARF Producer API" 62below. 63.El 64.Pp 65Each function referenced below is further described in its own manual page. 66.Ss Namespace use 67The DWARF library uses the following prefixes: 68.Pp 69.Bl -tag -width ".Li Dwarf_*" -compact 70.It Li DWARF_* 71Used for error numbers and constants. 72.It Li DW_* 73Used for constants. 74.It Li Dwarf_* 75Used for types. 76.It Li dwarf_* 77Used for functions and macros that make up the API. 78.El 79.Ss Data Types 80The DWARF(3) API uses the following data types: 81.Pp 82.Bl -tag -width ".Vt Dwarf_Unsigned" -compact 83.It Vt Dwarf_Abbrev 84Describes DWARF abbreviations. 85.It Vt Dwarf_Addr 86A program address in the target object. 87.It Vt Dwarf_Arange 88Describes address ranges. 89.It Vt Dwarf_Attribute , Vt Dwarf_P_Attribute 90Describes attributes of debugging information entries. 91.It Vt Dwarf_Bool 92Used for boolean states. 93.It Vt Dwarf_Cie , Vt Dwarf_P_Cie 94Describes call information that is common to several frames. 95.It Vt Dwarf_Debug , Vt Dwarf_P_Debug 96An opaque type describing a debug context. 97.It Vt Dwarf_Die , Vt Dwarf_P_Die 98A debugging information entry. 99.It Vt Dwarf_Fde , Vt Dwarf_P_Fde 100A frame descriptor. 101.It Vt Dwarf_Func 102A descriptor representing a function. 103.It Vt Dwarf_Global 104A descriptor representing a global name. 105.It Vt Dwarf_Half 106A 16-bit wide unsigned numeric type. 107.It Vt Dwarf_Handler 108A pointer to an error handling function. 109.It Vt Dwarf_Line 110A descriptor for a source line. 111.It Vt Dwarf_Off 112An unsigned file offset. 113.It Vt Dwarf_P_Expr 114A descriptor for a location expression. 115.It Vt Dwarf_Ptr 116A virtual address used by an application. 117.It Vt Dwarf_Signed 118A 64-bit wide signed numeric type. 119.It Vt Dwarf_Small 120An 8-bit wide unsigned numeric type. 121.It Vt Dwarf_Type 122A descriptor representing a user-specified type. 123.It Vt Dwarf_Unsigned 124A 64-bit wide unsigned numeric type. 125.It Vt Dwarf_Var 126A descriptor representing a static variable. 127.It Vt Dwarf_Weak 128A descriptor representing a weak name. 129.El 130.Ss Error Handling 131Library functions that encounter an error will return with a value 132other than 133.Dv DW_DLV_OK . 134.Pp 135The 136.Lb libdwarf 137allows applications to specify three levels of error handling: 138.Bl -enum -compact 139.It 140Most library functions take a parameter of type 141.Vt Dwarf_Error 142that specifies a location to store an error descriptor in 143case of an error. 144If an error occurs during the execution on an API, and if this 145parameter is non-NULL, then an error descriptor is written to the 146location specified. 147.It 148Otherwise, if the error parameter was NULL, but if an error handler 149was defined for the debug context in use using 150.Xr dwarf_init 3 151or 152.Xr dwarf_seterrhand 3 , 153then the library will invoke the specified error handler with an error 154descriptor as argument. 155.It 156Otherwise, if a library wide error handler was specified using 157.Xr dwarf_seterrhand 3 , 158it is called. 159.El 160.Pp 161Error descriptors may be used with 162.Xr dwarf_errmsg 3 163or 164.Xr dwarf_errno 3 . 165.Sh The DWARF Consumer API 166The DWARF consumer API permits applications to read DWARF information in 167an object file. 168.Pp 169The major functional groups of functions in the consumer API are listed 170below. 171.Pp 172.Bl -tag -compact -width "CCCC" 173.It Abbreviations 174.Bl -tag -compact -width indent 175.It Fn dwarf_get_abbrev 176Retrieve abbreviation information at a given offset. 177.It Fn dwarf_get_abbrev_children_flag 178Check if an abbreviation has child elements. 179.It Fn dwarf_get_abbrev_code 180Retrieve the abbreviation code for an abbreviation entry descriptor. 181.It Fn dwarf_get_abbrev_entry 182Retrieve abbreviation information for an abbreviation entry 183descriptor. 184.It Fn dwarf_get_abbrev_tag 185Retrieve the tag for an abbreviation entry. 186.El 187.It Addresses 188.Bl -tag -compact -width indent 189.It Fn dwarf_get_address_size 190Return the number of bytes needed to represent an address. 191.It Fn dwarf_get_arange 192Search for an address range descriptor covering an address. 193.It Fn dwarf_get_arange_cu_header_offset 194Retrieve the offsets associated with an address range descriptor. 195.It Fn dwarf_get_arange_info 196Extract address range information from a descriptor. 197.It Fn dwarf_get_aranges 198Retrieve program address space mappings. 199.It Fn dwarf_get_cu_die_offset 200Retrieve the offset associated with a compilation unit for an address 201range descriptor. 202.It Fn dwarf_get_ranges , Fn dwarf_get_ranges_a 203Retrieve information about non-contiguous address ranges for 204a debugging information entry. 205.El 206.It Attributes 207.Bl -tag -compact -width indent 208.It Fn dwarf_arrayorder 209Retrieve the value of a 210.Dv DW_AT_ordering 211attribute. 212.It Fn dwarf_attr 213Retrieve an attribute descriptor. 214.It Fn dwarf_attrlist 215Retrieve attribute descriptors for a debugging information entry. 216.It Fn dwarf_attroffset 217Retrieve the section-relative offset of an attribute descriptor. 218.It Fn dwarf_attrval_flag 219Retrieve a 220.Dv DW_AT_FORM_flag 221value. 222.It Fn dwarf_attrval_signed 223Retrieve an attribute's value as a signed integral quantity. 224.It Fn dwarf_attrval_string 225Retrieve an attribute's value as a NUL-terminated string. 226.It Fn dwarf_attrval_unsigned 227Retrieve an attribute's value as an unsigned integral quantity. 228.It Fn dwarf_bitoffset , 229Retrieve the value of a 230.Dv DW_AT_bit_offset 231attribute. 232.It Fn dwarf_bitsize , 233Retrieve the value of a 234.Dv DW_AT_bit_size 235attribute. 236.It Fn dwarf_bytesize 237Retrieve the value of a 238.Dv DW_AT_byte_size 239attribute. 240.It Fn dwarf_formaddr 241Return the value of an 242.Dv ADDRESS Ns - Ns 243class attribute. 244.It Fn dwarf_formblock 245Return the value of a 246.Dv BLOCK Ns - Ns 247class attribute 248.It Fn dwarf_formexprloc 249Return information about a location expression. 250.It Fn dwarf_formflag 251Retrieve information about a 252.Dv BOOLEAN Ns - Ns 253class attribute. 254.It Fn dwarf_formref , Fn dwarf_global_formref 255Retrieve offsets for 256.Dv REFERENCE Ns - Ns 257class attributes. 258.It Fn dwarf_formsdata , Fn dwarf_formudata 259Retrieve the value of a 260.Dv CONSTANT Ns - Ns 261class attribute. 262.It Fn dwarf_formsig8 263Return the type signature for a DWARF type. 264.It Fn dwarf_formstring 265Retrieve information about a 266.Dv STRING Ns - Ns 267class attribute. 268.It Fn dwarf_get_form_class 269Retrieve the form class for an attribute. 270.It Fn dwarf_hasattr 271Check for the presence of an attribute. 272.It Fn dwarf_hasform 273Check if an attribute has the given form. 274.It Fn dwarf_whatattr 275Retrieve the attribute code for an attribute. 276.It Fn dwarf_whatform , Fn dwarf_whatform_direct 277Retrieve the form of an attribute. 278.El 279.It Call Information Entries and Frame Descriptor Entries 280.Bl -tag -compact -width indent 281.It Fn dwarf_get_cie_index 282Retrieve the index for a CIE descriptor. 283.It Fn dwarf_get_cie_info 284Retrieve information from a CIE descriptor. 285.It Fn dwarf_get_cie_of_fde 286Retrieve a CIE descriptor. 287.It Fn dwarf_get_fde_at_pc 288Retrieve an FDE descriptor for an address. 289.It Fn dwarf_get_fde_info_for_all_regs 290Retrieve register rule row. 291.It Fn dwarf_get_fde_info_for_all_regs3 292Retrieve register rule row (revised API). 293.It Fn dwarf_get_fde_info_for_cfa_reg3 294Retrieve a CFA register rule. 295.It Fn dwarf_get_fde_info_for_reg 296Retrieve a register rule. 297.It Fn dwarf_get_fde_info_for_reg3 298Retrieve a register rule (revised API). 299.It Fn dwarf_get_fde_instr_bytes 300Retrieve instructions from an FDE descriptor. 301.It Fn dwarf_get_fde_list , Fn dwarf_get_fde_list_eh 302Retrieve frame information. 303.It Fn dwarf_get_fde_n 304Retrieve an FDE descriptor. 305.It Fn dwarf_get_fde_range 306Retrieve range information from an FDE descriptor. 307.El 308.It Compilation Units 309.Bl -tag -compact -width indent 310.It Xo 311.Fn dwarf_get_cu_die_offset_given_cu_header_offset , 312.Fn dwarf_get_cu_die_offset_given_cu_header_offset_b 313.Xc 314Retrieve the offset of the debugging information entry for a 315compilation or type unit. 316.It Xo 317.Fn dwarf_next_cu_header , 318.Fn dwarf_next_cu_header_b , 319.Fn dwarf_next_cu_header_c 320.Xc 321Step through compilation units in a debug context. 322.El 323.It Debugging Information Entries 324.Bl -tag -compact -width indent 325.It Fn dwarf_child 326Returns the child of a debugging information entry. 327.It Fn dwarf_die_abbrev_code 328Returns the abbreviation code for a debugging information entry. 329.It Fn dwarf_die_CU_offset , Fn dwarf_die_CU_offset_range 330Retrieve offsets and lengths for a compilation unit. 331.It Fn dwarf_diename 332Returns the 333.Dv DW_AT_name 334attribute for a debugging information entry. 335.It Fn dwarf_dieoffset 336Retrieves the offset for a debugging information entry. 337.It Fn dwarf_get_die_infotypes_flag 338Indicate the originating section for a debugging information entry. 339.It Fn dwarf_highpc , Fn dwarf_highpc_b 340Return the highest PC value for a debugging information entry. 341.It Fn dwarf_lowpc 342Return the lowest PC value for a debugging information entry. 343.It Fn dwarf_offdie , Fn dwarf_offdie_b 344Retrieve a debugging information entry given an offset. 345.It Fn dwarf_siblingof , Fn dwarf_siblingof_b 346Retrieve the sibling descriptor for a debugging information entry. 347.It Fn dwarf_srclang 348Retrieve the source language attribute for a debugging information 349entry. 350.It Fn dwarf_tag 351Retrieve the tag for a debugging information entry. 352.El 353.It Functions 354.Bl -tag -compact -width indent 355.It Fn dwarf_func_cu_offset 356Retrieves the offset for the compilation unit for a function. 357.It Fn dwarf_func_die_offset 358Retrieves the offset for the debugging information entry for a 359function. 360.It Fn dwarf_funcname 361Retrieves the name of a function. 362.It Fn dwarf_func_name_offsets 363Retrieve both the name and offsets for a function. 364.It Fn dwarf_get_funcs 365Retrieve information about static functions. 366.El 367.It Globals 368.Bl -tag -compact -width indent 369.It Fn dwarf_get_globals 370Retrieve a list of globals. 371.It Fn dwarf_global_cu_offset 372Return the offset for compilation unit for a global. 373.It Fn dwarf_global_die_offset 374Return the offset for the debugging information entry for a global. 375.It Fn dwarf_global_name_offsets 376Return the name and offsets for a global. 377.It Fn dwarf_globname 378Return the name for a global. 379.El 380.It Initialization and Finalization 381Functions 382.Fn dwarf_elf_init 383and 384.Fn dwarf_init 385may be used for initialization. 386The function 387.Fn dwarf_finish 388may be used to release resources. 389.Pp 390The functions 391.Fn dwarf_object_init 392and 393.Fn dwarf_object_finish 394allow an application to specify alternate low-level file access 395routines. 396.It Line Numbers 397.Bl -tag -compact -width indent 398.It Fn dwarf_lineaddr 399Retrieve the program address for a source line. 400.It Fn dwarf_linebeginstatement 401Check if a source line corresponds to the beginning of a statement. 402.It Fn dwarf_lineblock 403Check if a source line corresponds to the start of a basic block. 404.It Fn dwarf_lineendsequence 405Check if the source line corresponds to the end of a sequence of 406instructions. 407.It Fn dwarf_lineno 408Retrieve the line number for a line descriptor. 409.It Fn dwarf_lineoff 410Retrieve the column number for a line descriptor. 411.It Fn dwarf_linesrc 412Retrieve the source file for a line descriptor. 413.It Fn dwarf_line_srcfileno 414Retrieve the index of the source file for a line descriptor. 415.It Fn dwarf_srcfiles 416Retrieve source files for a compilation unit. 417.It Fn dwarf_srclines 418Return line number information for a compilation unit. 419.El 420.It Location Lists 421.Bl -tag -compact -width indent 422.It Fn dwarf_get_loclist_entry 423Retrieve a location list entry. 424.It Fn dwarf_loclist , Fn dwarf_loclist_n 425Retrieve location expressions. 426.It Xo 427.Fn dwarf_loclist_from_expr , 428.Fn dwarf_loclist_from_expr_a , 429.Fn dwarf_loclist_from_expr_b 430.Xc 431Translate a location expression into a location descriptor. 432.El 433.It Error Handling 434.Bl -tag -compact -width indent 435.It Fn dwarf_errmsg 436Retrieve a human-readable error message. 437.It Fn dwarf_errno 438Retrieve an error number from an error descriptor. 439.It Fn dwarf_seterrarg 440Set the argument passed to a callback error handler. 441.It Fn dwarf_seterrhand 442Set the callback handler to be called in case of an error. 443.El 444.It Frame Handling 445.Bl -tag -compact -width indent 446.It Fn dwarf_expand_frame_instructions 447Translate frame instruction bytes. 448.It Fn dwarf_set_frame_cfa_value 449Set the CFA parameter for the internal register rule table. 450.It Fn dwarf_set_frame_rule_initial_value 451Set the initial value of the register rules in the internal register 452rule table. 453.It Fn dwarf_set_frame_rule_table_size 454Set the maximum number of columns in the register rule table. 455.It Fn dwarf_set_frame_same_value 456Set the register number representing the 457.Dq "same value" 458rule. 459.It Fn dwarf_set_frame_undefined_value 460Set the register number representing the 461.Dq "undefined" 462rule. 463.El 464.It Macros 465.Bl -tag -compact -width indent 466.It Fn dwarf_find_macro_value_start 467Return the macro value part of a macro string. 468.It Fn dwarf_get_macro_details 469Retrieve macro information. 470.El 471.It Memory Management 472In the DWARF consumer API, the rules for memory management differ 473between functions. 474In some cases, the memory areas returned to the application by the 475library are freed by calling specific API functions. 476In others, the deallocation function 477.Fn dwarf_dealloc 478suffices. 479The individual manual pages for the API's functions document the 480specific memory management rules to be followed. 481.Pp 482The function 483.Fn dwarf_dealloc 484is used to mark memory arenas as unused. 485Additionally, the following functions release specific types of 486DWARF resources: 487.Fn dwarf_fde_cie_list_dealloc , 488.Fn dwarf_funcs_dealloc , 489.Fn dwarf_globals_dealloc , 490.Fn dwarf_pubtypes_dealloc , 491.Fn dwarf_ranges_dealloc , 492.Fn dwarf_srclines_dealloc , 493.Fn dwarf_types_dealloc , 494.Fn dwarf_vars_dealloc , 495and 496.Fn dwarf_weaks_dealloc . 497.It Symbol Constants 498The following functions may be used to return symbolic names 499for DWARF constants: 500.Fn dwarf_get_ACCESS_name , 501.Fn dwarf_get_AT_name , 502.Fn dwarf_get_ATE_name , 503.Fn dwarf_get_CC_name , 504.Fn dwarf_get_CFA_name , 505.Fn dwarf_get_CHILDREN_name , 506.Fn dwarf_get_DS_name , 507.Fn dwarf_get_DSC_name , 508.Fn dwarf_get_EH_name , 509.Fn dwarf_get_END_name , 510.Fn dwarf_get_FORM_name , 511.Fn dwarf_get_ID_name , 512.Fn dwarf_get_INL_name , 513.Fn dwarf_get_LANG_name , 514.Fn dwarf_get_LNE_name , 515.Fn dwarf_get_LNS_name , 516.Fn dwarf_get_MACINFO_name , 517.Fn dwarf_get_OP_name , 518.Fn dwarf_get_ORD_name , 519.Fn dwarf_get_TAG_name , 520.Fn dwarf_get_VIRTUALITY_name , 521and 522.Fn dwarf_get_VIS_name . 523.It Types 524.Bl -tag -compact -width indent 525.It Fn dwarf_get_pubtypes , Fn dwarf_get_types 526Retrieve descriptors for user-defined types. 527.It Fn dwarf_next_types_section 528Step through 529.Dq \&.debug_types 530sections in a debug context. 531.It Fn dwarf_pubtype_cu_offset , Fn dwarf_type_cu_offset 532Return the offset for the compilation unit for a type. 533.It Fn dwarf_pubtype_die_offset , Fn dwarf_type_die_offset 534Return the offset for the debugging information entry for a type. 535.It Fn dwarf_pubtypename , Fn dwarf_typename 536Retrieve the name of a type. 537.It Fn dwarf_pubtype_name_offsets , Fn dwarf_type_name_offsets 538Retrieve the name and offsets for a type. 539.El 540.It Variables 541.Bl -tag -compact -width indent 542.It Fn dwarf_get_vars 543Retrieve descriptors for static variables. 544.It Fn dwarf_var_cu_offset 545Return the offset for the compilation unit for a variable. 546.It Fn dwarf_var_die_offset 547Return the offset for the debugging information entry for a variable. 548.It Fn dwarf_varname 549Retrieve the name of a variable. 550.It Fn dwarf_var_name_offsets 551Retrieve the name and offsets for a variable. 552.El 553.It Weak Symbols 554.Bl -tag -compact -width indent 555.It Fn dwarf_get_weaks 556Retrieve information about weak symbols. 557.It Fn dwarf_weak_cu_offset 558Return the offset for the compilation unit for a weak symbol. 559.It Fn dwarf_weak_die_offset 560Return the offset for the debugging information entry for a weak symbol. 561.It Fn dwarf_weakname 562Retrieve the name of a weak symbol. 563.It Fn dwarf_weak_name_offsets 564Retrieve the name and offsets for a weak symbol. 565.El 566.It Miscellaneous 567.Bl -tag -compact -width indent 568.It Fn dwarf_get_elf 569Retrieve the ELF descriptor for a debug context, see 570.Xr elf 3 . 571.It Fn dwarf_get_str 572Retrieve a NUL-terminated string from the DWARF string section. 573.It Fn dwarf_set_reloc_application 574Control whether relocations are to be handled by 575.Lb libdwarf . 576.El 577.El 578.Sh The DWARF Producer API 579The DWARF producer API permits applications to add DWARF information to 580an object file. 581.Pp 582The major functional groups of functions in the producer API are listed 583below. 584.Bl -tag -width "CCCC" 585.It Attribute Management 586The following functions are used to attach attributes to a debugging 587information entry: 588.Fn dwarf_add_AT_comp_dir , 589.Fn dwarf_add_AT_const_value_signedint , 590.Fn dwarf_add_AT_const_value_string , 591.Fn dwarf_add_AT_const_value_unsignedint , 592.Fn dwarf_add_AT_dataref , 593.Fn dwarf_add_AT_flag , 594.Fn dwarf_add_AT_location_expr , 595.Fn dwarf_add_AT_name , 596.Fn dwarf_add_AT_producer , 597.Fn dwarf_add_AT_ref_address , 598.Fn dwarf_add_AT_reference , 599.Fn dwarf_add_AT_signed_const , 600.Fn dwarf_add_AT_string , 601.Fn dwarf_add_AT_targ_address , 602.Fn dwarf_add_AT_targ_address_b 603and 604.Fn dwarf_add_AT_unsigned_const . 605.It Debugging Information Entry Management 606.Bl -tag -compact -width indent 607.It Fn dwarf_add_die_to_debug 608Set the root debugging information entry for a DWARF producer instance. 609.It Fn dwarf_die_link 610Links debugging information entries. 611.It Fn dwarf_new_die 612Allocate a new debugging information entry. 613.El 614.It Initialization and Finalization 615The functions 616.Fn dwarf_producer_init 617and 618.Fn dwarf_producer_init_b 619are used to initialize a producer instance. 620.Pp 621When done, applications release resources using the function 622.Fn dwarf_producer_finish . 623.It Relocations and Sections 624.Bl -tag -compact -width indent 625.It Fn dwarf_get_relocation_info 626Retrieve a relocation array from a producer instance. 627.It Fn dwarf_get_relocation_info_count 628Return the number of relocation arrays for a producer instance. 629.It Fn dwarf_get_section_bytes 630Retrieve the ELF byte stream for a section. 631.It Fn dwarf_reset_section_bytes 632Reset internal state for a producer instance. 633.It Fn dwarf_transform_to_disk_form 634Prepare byte streams for writing out. 635.El 636.It Macros 637.Bl -tag -compact -width indent 638.It Fn dwarf_def_macro 639Add a macro definition. 640.It Fn dwarf_end_macro_file , Fn dwarf_start_macro_file 641Record macro file related information. 642.It Fn dwarf_undef_macro 643Note the removal of a macro definition. 644.It Fn dwarf_vendor_ext 645Enables storing macro information as specified in the DWARF standard. 646.El 647.It Symbols, Expressions, Addresses and Offsets 648.Bl -tag -compact -width indent 649.It Fn dwarf_add_arange , Fn dwarf_add_arange_b 650Add address range information. 651.It Fn dwarf_add_directory_decl 652Add information about an include directory to a producer instance. 653.It Fn dwarf_add_fde_inst 654Add an operation to a frame descriptor entry. 655.It Fn dwarf_add_file_decl 656Add information about a source file to a producer instance. 657.It Fn dwarf_add_frame_cie 658Add call information to a frame descriptor. 659.It Fn dwarf_add_frame_fde , Fn dwarf_add_frame_fde_b 660Link a frame descriptor to a producer instance. 661.It Fn dwarf_add_funcname 662Add information about a function to a producer instance. 663.It Fn dwarf_add_line_entry 664Record mapping information between machine addresses and a source line. 665.It Fn dwarf_add_expr_addr , Fn dwarf_add_expr_addr_b 666Add a 667.Dv DW_OP_addr 668opcode to a location expression. 669.It Fn dwarf_add_expr_gen 670Add an operator to a location expression. 671.It Fn dwarf_add_pubname 672Add information about a global name to a producer instance. 673.It Fn dwarf_add_typename 674Add information about a type to a producer instance. 675.It Fn dwarf_add_varname 676Add information about a static variable to a producer instance. 677.It Fn dwarf_add_weakname 678Add information about a weak symbol to a producer instance. 679.It Fn dwarf_expr_current_offset 680Retrieve the current size of a location expression. 681.It Fn dwarf_expr_into_block 682Convert a location expression into a byte stream. 683.It Fn dwarf_fde_cfa_offset 684Append a 685.Dv DW_CFA_offset 686operation to a frame descriptor. 687.It Fn dwarf_lne_end_sequence , Fn dwarf_lne_set_address 688Note address ranges for source lines. 689.It Fn dwarf_new_expr 690Allocate a location expression descriptor. 691.It Fn dwarf_new_fde 692Allocate a frame descriptor. 693.El 694.It Miscellaneous 695The function 696.Fn dwarf_producer_set_isa 697sets the instruction set architecture for the producer instance. 698.El 699.Sh COMPATIBILITY 700This implementation is believed to be source compatible with the 701SGI/GNU DWARF(3) library, version 20110113. 702.Pp 703Known differences with the SGI/GNU library include: 704.Bl -bullet -compact 705.It 706The memory management scheme used differs, in a backward-compatible 707way. 708See 709.Sx Memory Management 710above, for coding guidelines for portable applications. 711.It 712There is provision for setting a library-wide error handler in 713addition to the per-debug context handlers supported by the SGI/GNU 714API, see the subsection 715.Sx Error Handling 716above. 717.El 718.Ss Extensions 719The following APIs are extensions specific to this implementation: 720.Bl -bullet -compact 721.It 722.Fn dwarf_attroffset 723.It 724.Fn dwarf_next_types_section 725.It 726.Fn dwarf_producer_set_isa 727.El 728.Sh SEE ALSO 729.Xr elf 3 730.Sh STANDARDS 731The DWARF standard is defined by 732.Rs 733.%T "The DWARF Debugging Information Format" 734.%V "Version 4" 735.%O "http://www.dwarfstd.org/" 736.Re 737.Sh HISTORY 738The DWARF(3) API originated at Silicon Graphics Inc. 739.Pp 740A BSD-licensed implementation of a subset of the API was written by 741.An John Birrell Aq Mt jb@FreeBSD.org 742for the 743.Fx 744project. 745The implementation was subsequently revised and completed by 746.An Kai Wang Aq Mt kaiwang27@users.sourceforge.net . 747.Pp 748Manual pages for this implementation were written by 749.An Joseph Koshy Aq Mt jkoshy@users.sourceforge.net 750and 751.An Kai Wang Aq Mt kaiwang27@users.sourceforge.net . 752