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