dwarf

Imports

Imports #

"bytes"
"cmd/internal/src"
"cmp"
"errors"
"fmt"
"internal/buildcfg"
"os/exec"
"slices"
"strconv"
"strings"

Constants & Variables

AbstractFuncSuffix const #

Used to form the symbol name assigned to the DWARF "abstract subprogram" info entry for a function

const AbstractFuncSuffix = "$abstract"

CUInfoPrefix const #

CUInfoPrefix is the prefix for symbols containing information to populate the DWARF compilation unit info entries.

const CUInfoPrefix = "go:cuinfo."

ConstInfoPrefix const #

ConstInfoPrefix is the prefix for all symbols containing DWARF info entries that contain constants.

const ConstInfoPrefix = "go:constinfo."

DW_ABRV_ARRAYRANGE const #

Index into the abbrevs table below.

const DW_ABRV_ARRAYRANGE

DW_ABRV_ARRAYTYPE const #

Index into the abbrevs table below.

const DW_ABRV_ARRAYTYPE

DW_ABRV_BARE_PTRTYPE const #

Index into the abbrevs table below.

const DW_ABRV_BARE_PTRTYPE

DW_ABRV_BASETYPE const #

Index into the abbrevs table below.

const DW_ABRV_BASETYPE

DW_ABRV_CHANTYPE const #

Index into the abbrevs table below.

const DW_ABRV_CHANTYPE

DW_ABRV_COMPUNIT const #

Index into the abbrevs table below.

const DW_ABRV_COMPUNIT

DW_ABRV_COMPUNIT_TEXTLESS const #

Index into the abbrevs table below.

const DW_ABRV_COMPUNIT_TEXTLESS

DW_ABRV_DICT_INDEX const #

Index into the abbrevs table below.

const DW_ABRV_DICT_INDEX

DW_ABRV_DOTDOTDOT const #

Index into the abbrevs table below.

const DW_ABRV_DOTDOTDOT

DW_ABRV_FUNCTION const #

Index into the abbrevs table below.

const DW_ABRV_FUNCTION

DW_ABRV_FUNCTION_ABSTRACT const #

Index into the abbrevs table below.

const DW_ABRV_FUNCTION_ABSTRACT

DW_ABRV_FUNCTION_CONCRETE const #

Index into the abbrevs table below.

const DW_ABRV_FUNCTION_CONCRETE

DW_ABRV_FUNCTYPE const #

Index into the abbrevs table below.

const DW_ABRV_FUNCTYPE

DW_ABRV_FUNCTYPEOUTPARAM const #

Index into the abbrevs table below.

const DW_ABRV_FUNCTYPEOUTPARAM

DW_ABRV_FUNCTYPEPARAM const #

Index into the abbrevs table below.

const DW_ABRV_FUNCTYPEPARAM

DW_ABRV_IFACETYPE const #

Index into the abbrevs table below.

const DW_ABRV_IFACETYPE

DW_ABRV_INLINED_SUBROUTINE const #

Index into the abbrevs table below.

const DW_ABRV_INLINED_SUBROUTINE

DW_ABRV_INLINED_SUBROUTINE_RANGES const #

Index into the abbrevs table below.

const DW_ABRV_INLINED_SUBROUTINE_RANGES

DW_ABRV_INT_CONSTANT const #

Index into the abbrevs table below.

const DW_ABRV_INT_CONSTANT

DW_ABRV_LEXICAL_BLOCK_RANGES const #

Index into the abbrevs table below.

const DW_ABRV_LEXICAL_BLOCK_RANGES

DW_ABRV_LEXICAL_BLOCK_SIMPLE const #

Index into the abbrevs table below.

const DW_ABRV_LEXICAL_BLOCK_SIMPLE

DW_ABRV_MAPTYPE const #

Index into the abbrevs table below.

const DW_ABRV_MAPTYPE

DW_ABRV_NULL const #

Index into the abbrevs table below.

const DW_ABRV_NULL = iota

DW_ABRV_NULLTYPE const #

Index into the abbrevs table below.

const DW_ABRV_NULLTYPE

DW_ABRV_PTRTYPE const #

Index into the abbrevs table below.

const DW_ABRV_PTRTYPE

DW_ABRV_PUTVAR_START const #

Index into the abbrevs table below.

const DW_ABRV_PUTVAR_START

DW_ABRV_SLICETYPE const #

Index into the abbrevs table below.

const DW_ABRV_SLICETYPE

DW_ABRV_STRINGTYPE const #

Index into the abbrevs table below.

const DW_ABRV_STRINGTYPE

DW_ABRV_STRUCTFIELD const #

Index into the abbrevs table below.

const DW_ABRV_STRUCTFIELD

DW_ABRV_STRUCTTYPE const #

Index into the abbrevs table below.

const DW_ABRV_STRUCTTYPE

DW_ABRV_TYPEDECL const #

Index into the abbrevs table below.

const DW_ABRV_TYPEDECL

DW_ABRV_VARIABLE const #

Index into the abbrevs table below.

const DW_ABRV_VARIABLE

DW_ABRV_WRAPPER const #

Index into the abbrevs table below.

const DW_ABRV_WRAPPER

DW_ABRV_WRAPPER_CONCRETE const #

Index into the abbrevs table below.

const DW_ABRV_WRAPPER_CONCRETE

DW_ACCESS_private const #

Table 28

const DW_ACCESS_private = 0x03

DW_ACCESS_protected const #

Table 28

const DW_ACCESS_protected = 0x02

DW_ACCESS_public const #

Table 28

const DW_ACCESS_public = 0x01

DW_ATE_address const #

Table 25

const DW_ATE_address = 0x01

DW_ATE_boolean const #

Table 25

const DW_ATE_boolean = 0x02

DW_ATE_complex_float const #

Table 25

const DW_ATE_complex_float = 0x03

DW_ATE_decimal_float const #

Table 25

const DW_ATE_decimal_float = 0x0f

DW_ATE_edited const #

Table 25

const DW_ATE_edited = 0x0c

DW_ATE_float const #

Table 25

const DW_ATE_float = 0x04

DW_ATE_hi_user const #

Table 25

const DW_ATE_hi_user = 0xff

DW_ATE_imaginary_float const #

Table 25

const DW_ATE_imaginary_float = 0x09

DW_ATE_lo_user const #

Table 25

const DW_ATE_lo_user = 0x80

DW_ATE_numeric_string const #

Table 25

const DW_ATE_numeric_string = 0x0b

DW_ATE_packed_decimal const #

Table 25

const DW_ATE_packed_decimal = 0x0a

DW_ATE_signed const #

Table 25

const DW_ATE_signed = 0x05

DW_ATE_signed_char const #

Table 25

const DW_ATE_signed_char = 0x06

DW_ATE_signed_fixed const #

Table 25

const DW_ATE_signed_fixed = 0x0d

DW_ATE_unsigned const #

Table 25

const DW_ATE_unsigned = 0x07

DW_ATE_unsigned_char const #

Table 25

const DW_ATE_unsigned_char = 0x08

DW_ATE_unsigned_fixed const #

Table 25

const DW_ATE_unsigned_fixed = 0x0e

DW_AT_abstract_origin const #

Table 20

const DW_AT_abstract_origin = 0x31

DW_AT_accessibility const #

Table 20

const DW_AT_accessibility = 0x32

DW_AT_address_class const #

Table 20

const DW_AT_address_class = 0x33

DW_AT_allocated const #

Dwarf3

const DW_AT_allocated = 0x4e

DW_AT_artificial const #

Table 20

const DW_AT_artificial = 0x34

DW_AT_associated const #

Table 20

const DW_AT_associated = 0x4f

DW_AT_base_types const #

Table 20

const DW_AT_base_types = 0x35

DW_AT_binary_scale const #

Table 20

const DW_AT_binary_scale = 0x5b

DW_AT_bit_offset const #

Table 20

const DW_AT_bit_offset = 0x0c

DW_AT_bit_size const #

Table 20

const DW_AT_bit_size = 0x0d

DW_AT_bit_stride const #

Table 20

const DW_AT_bit_stride = 0x2e

DW_AT_byte_size const #

Table 20

const DW_AT_byte_size = 0x0b

DW_AT_byte_stride const #

Table 20

const DW_AT_byte_stride = 0x51

DW_AT_call_column const #

Table 20

const DW_AT_call_column = 0x57

DW_AT_call_file const #

Table 20

const DW_AT_call_file = 0x58

DW_AT_call_line const #

Table 20

const DW_AT_call_line = 0x59

DW_AT_calling_convention const #

Table 20

const DW_AT_calling_convention = 0x36

DW_AT_common_reference const #

Table 20

const DW_AT_common_reference = 0x1a

DW_AT_comp_dir const #

Table 20

const DW_AT_comp_dir = 0x1b

DW_AT_const_value const #

Table 20

const DW_AT_const_value = 0x1c

DW_AT_containing_type const #

Table 20

const DW_AT_containing_type = 0x1d

DW_AT_count const #

Table 20

const DW_AT_count = 0x37

DW_AT_data_location const #

Table 20

const DW_AT_data_location = 0x50

DW_AT_data_member_location const #

Table 20

const DW_AT_data_member_location = 0x38

DW_AT_decimal_scale const #

Table 20

const DW_AT_decimal_scale = 0x5c

DW_AT_decimal_sign const #

Table 20

const DW_AT_decimal_sign = 0x5e

DW_AT_decl_column const #

Table 20

const DW_AT_decl_column = 0x39

DW_AT_decl_file const #

Table 20

const DW_AT_decl_file = 0x3a

DW_AT_decl_line const #

Table 20

const DW_AT_decl_line = 0x3b

DW_AT_declaration const #

Table 20

const DW_AT_declaration = 0x3c

DW_AT_default_value const #

Table 20

const DW_AT_default_value = 0x1e

DW_AT_description const #

Table 20

const DW_AT_description = 0x5a

DW_AT_digit_count const #

Table 20

const DW_AT_digit_count = 0x5f

DW_AT_discr const #

Table 20

const DW_AT_discr = 0x15

DW_AT_discr_list const #

Table 20

const DW_AT_discr_list = 0x3d

DW_AT_discr_value const #

Table 20

const DW_AT_discr_value = 0x16

DW_AT_elemental const #

Table 20

const DW_AT_elemental = 0x66

DW_AT_encoding const #

Table 20

const DW_AT_encoding = 0x3e

DW_AT_endianity const #

Table 20

const DW_AT_endianity = 0x65

DW_AT_entry_pc const #

Table 20

const DW_AT_entry_pc = 0x52

DW_AT_explicit const #

Table 20

const DW_AT_explicit = 0x63

DW_AT_extension const #

Table 20

const DW_AT_extension = 0x54

DW_AT_external const #

Table 20

const DW_AT_external = 0x3f

DW_AT_frame_base const #

Table 20

const DW_AT_frame_base = 0x40

DW_AT_friend const #

Table 20

const DW_AT_friend = 0x41

DW_AT_go_closure_offset const #

Go-specific type attributes.

const DW_AT_go_closure_offset = 0x2907

DW_AT_go_dict_index const #

Go-specific type attributes.

const DW_AT_go_dict_index = 0x2906

DW_AT_go_elem const #

Go-specific type attributes.

const DW_AT_go_elem = 0x2902

DW_AT_go_embedded_field const #

Attribute for DW_TAG_member of a struct type. Nonzero value indicates the struct field is an embedded field.

const DW_AT_go_embedded_field = 0x2903

DW_AT_go_key const #

Go-specific type attributes.

const DW_AT_go_key = 0x2901

DW_AT_go_kind const #

Go-specific type attributes.

const DW_AT_go_kind = 0x2900

DW_AT_go_package_name const #

Go-specific type attributes.

const DW_AT_go_package_name = 0x2905

DW_AT_go_runtime_type const #

Go-specific type attributes.

const DW_AT_go_runtime_type = 0x2904

DW_AT_hi_user const #

Table 20

const DW_AT_hi_user = 0x3fff

DW_AT_high_pc const #

Table 20

const DW_AT_high_pc = 0x12

DW_AT_identifier_case const #

Table 20

const DW_AT_identifier_case = 0x42

DW_AT_import const #

Table 20

const DW_AT_import = 0x18

DW_AT_inline const #

Table 20

const DW_AT_inline = 0x20

DW_AT_internal_location const #

Go-specific type attributes.

const DW_AT_internal_location = 253

DW_AT_is_optional const #

Table 20

const DW_AT_is_optional = 0x21

DW_AT_language const #

Table 20

const DW_AT_language = 0x13

DW_AT_lo_user const #

Table 20

const DW_AT_lo_user = 0x2000

DW_AT_location const #

Table 20

const DW_AT_location = 0x02

DW_AT_low_pc const #

Table 20

const DW_AT_low_pc = 0x11

DW_AT_lower_bound const #

Table 20

const DW_AT_lower_bound = 0x22

DW_AT_macro_info const #

Table 20

const DW_AT_macro_info = 0x43

DW_AT_mutable const #

Table 20

const DW_AT_mutable = 0x61

DW_AT_name const #

Table 20

const DW_AT_name = 0x03

DW_AT_namelist_item const #

Table 20

const DW_AT_namelist_item = 0x44

DW_AT_object_pointer const #

Table 20

const DW_AT_object_pointer = 0x64

DW_AT_ordering const #

Table 20

const DW_AT_ordering = 0x09

DW_AT_picture_string const #

Table 20

const DW_AT_picture_string = 0x60

DW_AT_priority const #

Table 20

const DW_AT_priority = 0x45

DW_AT_producer const #

Table 20

const DW_AT_producer = 0x25

DW_AT_prototyped const #

Table 20

const DW_AT_prototyped = 0x27

DW_AT_pure const #

Table 20

const DW_AT_pure = 0x67

DW_AT_ranges const #

Table 20

const DW_AT_ranges = 0x55

DW_AT_recursive const #

Table 20

const DW_AT_recursive = 0x68

DW_AT_return_addr const #

Table 20

const DW_AT_return_addr = 0x2a

DW_AT_segment const #

Table 20

const DW_AT_segment = 0x46

DW_AT_sibling const #

Table 20

const DW_AT_sibling = 0x01

DW_AT_small const #

Table 20

const DW_AT_small = 0x5d

DW_AT_specification const #

Table 20

const DW_AT_specification = 0x47

DW_AT_start_scope const #

Table 20

const DW_AT_start_scope = 0x2c

DW_AT_stmt_list const #

Table 20

const DW_AT_stmt_list = 0x10

DW_AT_string_length const #

Table 20

const DW_AT_string_length = 0x19

DW_AT_threads_scaled const #

Table 20

const DW_AT_threads_scaled = 0x62

DW_AT_trampoline const #

Table 20

const DW_AT_trampoline = 0x56

DW_AT_type const #

Table 20

const DW_AT_type = 0x49

DW_AT_upper_bound const #

Table 20

const DW_AT_upper_bound = 0x2f

DW_AT_use_UTF8 const #

Table 20

const DW_AT_use_UTF8 = 0x53

DW_AT_use_location const #

Table 20

const DW_AT_use_location = 0x4a

DW_AT_variable_parameter const #

Table 20

const DW_AT_variable_parameter = 0x4b

DW_AT_virtuality const #

Table 20

const DW_AT_virtuality = 0x4c

DW_AT_visibility const #

Table 20

const DW_AT_visibility = 0x17

DW_AT_vtable_elem_location const #

Table 20

const DW_AT_vtable_elem_location = 0x4d

DW_CC_hi_user const #

Table 33

const DW_CC_hi_user = 0xff

DW_CC_lo_user const #

Table 33

const DW_CC_lo_user = 0x40

DW_CC_nocall const #

Table 33

const DW_CC_nocall = 0x03

DW_CC_normal const #

Table 33

const DW_CC_normal = 0x01

DW_CC_program const #

Table 33

const DW_CC_program = 0x02

DW_CFA_advance_loc const #

Opcodes that take an addend operand.

const DW_CFA_advance_loc = *ast.BinaryExpr

DW_CFA_advance_loc1 const #

Table 40.

const DW_CFA_advance_loc1 = 0x02

DW_CFA_advance_loc2 const #

Table 40.

const DW_CFA_advance_loc2 = 0x03

DW_CFA_advance_loc4 const #

Table 40.

const DW_CFA_advance_loc4 = 0x04

DW_CFA_def_cfa const #

Table 40.

const DW_CFA_def_cfa = 0x0c

DW_CFA_def_cfa_expression const #

Table 40.

const DW_CFA_def_cfa_expression = 0x0f

DW_CFA_def_cfa_offset const #

Table 40.

const DW_CFA_def_cfa_offset = 0x0e

DW_CFA_def_cfa_offset_sf const #

Table 40.

const DW_CFA_def_cfa_offset_sf = 0x13

DW_CFA_def_cfa_register const #

Table 40.

const DW_CFA_def_cfa_register = 0x0d

DW_CFA_def_cfa_sf const #

Table 40.

const DW_CFA_def_cfa_sf = 0x12

DW_CFA_expression const #

Table 40.

const DW_CFA_expression = 0x10

DW_CFA_hi_user const #

Table 40.

const DW_CFA_hi_user = 0x3f

DW_CFA_lo_user const #

Table 40.

const DW_CFA_lo_user = 0x1c

DW_CFA_nop const #

operand,...

const DW_CFA_nop = 0x00

DW_CFA_offset const #

Table 40.

const DW_CFA_offset = *ast.BinaryExpr

DW_CFA_offset_extended const #

Table 40.

const DW_CFA_offset_extended = 0x05

DW_CFA_offset_extended_sf const #

Table 40.

const DW_CFA_offset_extended_sf = 0x11

DW_CFA_register const #

Table 40.

const DW_CFA_register = 0x09

DW_CFA_remember_state const #

Table 40.

const DW_CFA_remember_state = 0x0a

DW_CFA_restore const #

Table 40.

const DW_CFA_restore = *ast.BinaryExpr

DW_CFA_restore_extended const #

Table 40.

const DW_CFA_restore_extended = 0x06

DW_CFA_restore_state const #

Table 40.

const DW_CFA_restore_state = 0x0b

DW_CFA_same_value const #

Table 40.

const DW_CFA_same_value = 0x08

DW_CFA_set_loc const #

Table 40.

const DW_CFA_set_loc = 0x01

DW_CFA_undefined const #

Table 40.

const DW_CFA_undefined = 0x07

DW_CFA_val_expression const #

Table 40.

const DW_CFA_val_expression = 0x16

DW_CFA_val_offset const #

Table 40.

const DW_CFA_val_offset = 0x14

DW_CFA_val_offset_sf const #

Table 40.

const DW_CFA_val_offset_sf = 0x15

DW_CHILDREN_no const #

Table 19

const DW_CHILDREN_no = 0x00

DW_CHILDREN_yes const #

Table 19

const DW_CHILDREN_yes = 0x01

DW_CLS_ADDRESS const #

Not from the spec, but logically belongs here

const DW_CLS_ADDRESS = *ast.BinaryExpr

DW_CLS_ADDRLOC const #

Not from the spec, but logically belongs here

const DW_CLS_ADDRLOC

DW_CLS_BLOCK const #

Not from the spec, but logically belongs here

const DW_CLS_BLOCK

DW_CLS_CONSTANT const #

Not from the spec, but logically belongs here

const DW_CLS_CONSTANT

DW_CLS_FLAG const #

Not from the spec, but logically belongs here

const DW_CLS_FLAG

DW_CLS_GO_TYPEREF const #

Go-specific internal hackery.

const DW_CLS_GO_TYPEREF

DW_CLS_PTR const #

Not from the spec, but logically belongs here

const DW_CLS_PTR

DW_CLS_REFERENCE const #

Not from the spec, but logically belongs here

const DW_CLS_REFERENCE

DW_CLS_STRING const #

Not from the spec, but logically belongs here

const DW_CLS_STRING

DW_DSC_label const #

Table 36

const DW_DSC_label = 0x00

DW_DSC_range const #

Table 36

const DW_DSC_range = 0x01

DW_DS_leading_overpunch const #

Table 26

const DW_DS_leading_overpunch = 0x02

DW_DS_leading_separate const #

Table 26

const DW_DS_leading_separate = 0x04

DW_DS_trailing_overpunch const #

Table 26

const DW_DS_trailing_overpunch = 0x03

DW_DS_trailing_separate const #

Table 26

const DW_DS_trailing_separate = 0x05

DW_DS_unsigned const #

Table 26

const DW_DS_unsigned = 0x01

DW_END_big const #

Table 27

const DW_END_big = 0x01

DW_END_default const #

Table 27

const DW_END_default = 0x00

DW_END_hi_user const #

Table 27

const DW_END_hi_user = 0xff

DW_END_little const #

Table 27

const DW_END_little = 0x02

DW_END_lo_user const #

Table 27

const DW_END_lo_user = 0x40

DW_FORM_addr const #

Table 21

const DW_FORM_addr = 0x01

DW_FORM_block const #

Table 21

const DW_FORM_block = 0x09

DW_FORM_block1 const #

Table 21

const DW_FORM_block1 = 0x0a

DW_FORM_block2 const #

Table 21

const DW_FORM_block2 = 0x03

DW_FORM_block4 const #

Table 21

const DW_FORM_block4 = 0x04

DW_FORM_data1 const #

Table 21

const DW_FORM_data1 = 0x0b

DW_FORM_data2 const #

Table 21

const DW_FORM_data2 = 0x05

DW_FORM_data4 const #

Table 21

const DW_FORM_data4 = 0x06

DW_FORM_data8 const #

Table 21

const DW_FORM_data8 = 0x07

DW_FORM_exprloc const #

Table 21

const DW_FORM_exprloc = 0x18

DW_FORM_flag const #

Table 21

const DW_FORM_flag = 0x0c

DW_FORM_flag_present const #

Table 21

const DW_FORM_flag_present = 0x19

DW_FORM_indirect const #

Table 21

const DW_FORM_indirect = 0x16

DW_FORM_ref1 const #

Table 21

const DW_FORM_ref1 = 0x11

DW_FORM_ref2 const #

Table 21

const DW_FORM_ref2 = 0x12

DW_FORM_ref4 const #

Table 21

const DW_FORM_ref4 = 0x13

DW_FORM_ref8 const #

Table 21

const DW_FORM_ref8 = 0x14

DW_FORM_ref_addr const #

Table 21

const DW_FORM_ref_addr = 0x10

DW_FORM_ref_sig8 const #

Table 21

const DW_FORM_ref_sig8 = 0x20

DW_FORM_ref_udata const #

Table 21

const DW_FORM_ref_udata = 0x15

DW_FORM_sdata const #

Table 21

const DW_FORM_sdata = 0x0d

DW_FORM_sec_offset const #

Dwarf4

const DW_FORM_sec_offset = 0x17

DW_FORM_string const #

Table 21

const DW_FORM_string = 0x08

DW_FORM_strp const #

Table 21

const DW_FORM_strp = 0x0e

DW_FORM_udata const #

Table 21

const DW_FORM_udata = 0x0f

DW_FORM_udata_pseudo const #

Pseudo-form: expanded to data4 on IOS, udata elsewhere.

const DW_FORM_udata_pseudo = 0x99

DW_ID_case_insensitive const #

Table 32

const DW_ID_case_insensitive = 0x03

DW_ID_case_sensitive const #

Table 32

const DW_ID_case_sensitive = 0x00

DW_ID_down_case const #

Table 32

const DW_ID_down_case = 0x02

DW_ID_up_case const #

Table 32

const DW_ID_up_case = 0x01

DW_INL_declared_inlined const #

Table 34

const DW_INL_declared_inlined = 0x03

DW_INL_declared_not_inlined const #

Table 34

const DW_INL_declared_not_inlined = 0x02

DW_INL_inlined const #

Table 34

const DW_INL_inlined = 0x01

DW_INL_not_inlined const #

Table 34

const DW_INL_not_inlined = 0x00

DW_LANG_Ada83 const #

Table 31

const DW_LANG_Ada83 = 0x0003

DW_LANG_Ada95 const #

Table 31

const DW_LANG_Ada95 = 0x000d

DW_LANG_C const #

Table 31

const DW_LANG_C = 0x0002

DW_LANG_C89 const #

Table 31

const DW_LANG_C89 = 0x0001

DW_LANG_C99 const #

Table 31

const DW_LANG_C99 = 0x000c

DW_LANG_C_plus_plus const #

Table 31

const DW_LANG_C_plus_plus = 0x0004

DW_LANG_Cobol74 const #

Table 31

const DW_LANG_Cobol74 = 0x0005

DW_LANG_Cobol85 const #

Table 31

const DW_LANG_Cobol85 = 0x0006

DW_LANG_D const #

Table 31

const DW_LANG_D = 0x0013

DW_LANG_Fortran77 const #

Table 31

const DW_LANG_Fortran77 = 0x0007

DW_LANG_Fortran90 const #

Table 31

const DW_LANG_Fortran90 = 0x0008

DW_LANG_Fortran95 const #

Table 31

const DW_LANG_Fortran95 = 0x000e

DW_LANG_Go const #

Dwarf5

const DW_LANG_Go = 0x0016

DW_LANG_Java const #

Dwarf3

const DW_LANG_Java = 0x000b

DW_LANG_Modula2 const #

Table 31

const DW_LANG_Modula2 = 0x000a

DW_LANG_ObjC const #

Table 31

const DW_LANG_ObjC = 0x0010

DW_LANG_ObjC_plus_plus const #

Table 31

const DW_LANG_ObjC_plus_plus = 0x0011

DW_LANG_PLI const #

Table 31

const DW_LANG_PLI = 0x000f

DW_LANG_Pascal83 const #

Table 31

const DW_LANG_Pascal83 = 0x0009

DW_LANG_Python const #

Dwarf4

const DW_LANG_Python = 0x0014

DW_LANG_UPC const #

Table 31

const DW_LANG_UPC = 0x0012

DW_LANG_hi_user const #

Table 31

const DW_LANG_hi_user = 0xffff

DW_LANG_lo_user const #

Table 31

const DW_LANG_lo_user = 0x8000

DW_LNE_define_file const #

Table 38

const DW_LNE_define_file = 0x03

DW_LNE_end_sequence const #

Table 38

const DW_LNE_end_sequence = 0x01

DW_LNE_hi_user const #

Table 38

const DW_LNE_hi_user = 0xff

DW_LNE_lo_user const #

Table 38

const DW_LNE_lo_user = 0x80

DW_LNE_set_address const #

Table 38

const DW_LNE_set_address = 0x02

DW_LNS_advance_line const #

Table 37

const DW_LNS_advance_line = 0x03

DW_LNS_advance_pc const #

Table 37

const DW_LNS_advance_pc = 0x02

DW_LNS_const_add_pc const #

Table 37

const DW_LNS_const_add_pc = 0x08

DW_LNS_copy const #

Table 37

const DW_LNS_copy = 0x01

DW_LNS_fixed_advance_pc const #

Table 37

const DW_LNS_fixed_advance_pc = 0x09

DW_LNS_negate_stmt const #

Table 37

const DW_LNS_negate_stmt = 0x06

DW_LNS_set_basic_block const #

Table 37

const DW_LNS_set_basic_block = 0x07

DW_LNS_set_column const #

Table 37

const DW_LNS_set_column = 0x05

DW_LNS_set_epilogue_begin const #

Table 37

const DW_LNS_set_epilogue_begin = 0x0b

DW_LNS_set_file const #

Table 37

const DW_LNS_set_file = 0x04

DW_LNS_set_isa const #

Table 37

const DW_LNS_set_isa = 0x0c

DW_LNS_set_prologue_end const #

Dwarf3

const DW_LNS_set_prologue_end = 0x0a

DW_MACINFO_define const #

Table 39

const DW_MACINFO_define = 0x01

DW_MACINFO_end_file const #

Table 39

const DW_MACINFO_end_file = 0x04

DW_MACINFO_start_file const #

Table 39

const DW_MACINFO_start_file = 0x03

DW_MACINFO_undef const #

Table 39

const DW_MACINFO_undef = 0x02

DW_MACINFO_vendor_ext const #

Table 39

const DW_MACINFO_vendor_ext = 0xff

DW_OP_abs const #

Table 24 (#operands, notes)

const DW_OP_abs = 0x19

DW_OP_addr const #

Table 24 (#operands, notes)

const DW_OP_addr = 0x03

DW_OP_and const #

Table 24 (#operands, notes)

const DW_OP_and = 0x1a

DW_OP_bit_piece const #

Table 24 (#operands, notes)

const DW_OP_bit_piece = 0x9d

DW_OP_bra const #

Table 24 (#operands, notes)

const DW_OP_bra = 0x28

DW_OP_breg0 const #

Table 24 (#operands, notes)

const DW_OP_breg0 = 0x70

DW_OP_breg31 const #

Table 24 (#operands, notes)

const DW_OP_breg31 = 0x8f

DW_OP_bregx const #

Table 24 (#operands, notes)

const DW_OP_bregx = 0x92

DW_OP_call2 const #

Table 24 (#operands, notes)

const DW_OP_call2 = 0x98

DW_OP_call4 const #

Table 24 (#operands, notes)

const DW_OP_call4 = 0x99

DW_OP_call_frame_cfa const #

Table 24 (#operands, notes)

const DW_OP_call_frame_cfa = 0x9c

DW_OP_call_ref const #

Table 24 (#operands, notes)

const DW_OP_call_ref = 0x9a

DW_OP_const1s const #

Table 24 (#operands, notes)

const DW_OP_const1s = 0x09

DW_OP_const1u const #

Table 24 (#operands, notes)

const DW_OP_const1u = 0x08

DW_OP_const2s const #

Table 24 (#operands, notes)

const DW_OP_const2s = 0x0b

DW_OP_const2u const #

Table 24 (#operands, notes)

const DW_OP_const2u = 0x0a

DW_OP_const4s const #

Table 24 (#operands, notes)

const DW_OP_const4s = 0x0d

DW_OP_const4u const #

Table 24 (#operands, notes)

const DW_OP_const4u = 0x0c

DW_OP_const8s const #

Table 24 (#operands, notes)

const DW_OP_const8s = 0x0f

DW_OP_const8u const #

Table 24 (#operands, notes)

const DW_OP_const8u = 0x0e

DW_OP_consts const #

Table 24 (#operands, notes)

const DW_OP_consts = 0x11

DW_OP_constu const #

Table 24 (#operands, notes)

const DW_OP_constu = 0x10

DW_OP_deref const #

Table 24 (#operands, notes)

const DW_OP_deref = 0x06

DW_OP_deref_size const #

Table 24 (#operands, notes)

const DW_OP_deref_size = 0x94

DW_OP_div const #

Table 24 (#operands, notes)

const DW_OP_div = 0x1b

DW_OP_drop const #

Table 24 (#operands, notes)

const DW_OP_drop = 0x13

DW_OP_dup const #

Table 24 (#operands, notes)

const DW_OP_dup = 0x12

DW_OP_eq const #

Table 24 (#operands, notes)

const DW_OP_eq = 0x29

DW_OP_fbreg const #

Table 24 (#operands, notes)

const DW_OP_fbreg = 0x91

DW_OP_form_tls_address const #

Table 24 (#operands, notes)

const DW_OP_form_tls_address = 0x9b

DW_OP_ge const #

Table 24 (#operands, notes)

const DW_OP_ge = 0x2a

DW_OP_gt const #

Table 24 (#operands, notes)

const DW_OP_gt = 0x2b

DW_OP_hi_user const #

Table 24 (#operands, notes)

const DW_OP_hi_user = 0xff

DW_OP_le const #

Table 24 (#operands, notes)

const DW_OP_le = 0x2c

DW_OP_lit0 const #

Table 24 (#operands, notes)

const DW_OP_lit0 = 0x30

DW_OP_lit31 const #

Table 24 (#operands, notes)

const DW_OP_lit31 = 0x4f

DW_OP_lo_user const #

Table 24 (#operands, notes)

const DW_OP_lo_user = 0xe0

DW_OP_lt const #

Table 24 (#operands, notes)

const DW_OP_lt = 0x2d

DW_OP_minus const #

Table 24 (#operands, notes)

const DW_OP_minus = 0x1c

DW_OP_mod const #

Table 24 (#operands, notes)

const DW_OP_mod = 0x1d

DW_OP_mul const #

Table 24 (#operands, notes)

const DW_OP_mul = 0x1e

DW_OP_ne const #

Table 24 (#operands, notes)

const DW_OP_ne = 0x2e

DW_OP_neg const #

Table 24 (#operands, notes)

const DW_OP_neg = 0x1f

DW_OP_nop const #

Table 24 (#operands, notes)

const DW_OP_nop = 0x96

DW_OP_not const #

Table 24 (#operands, notes)

const DW_OP_not = 0x20

DW_OP_or const #

Table 24 (#operands, notes)

const DW_OP_or = 0x21

DW_OP_over const #

Table 24 (#operands, notes)

const DW_OP_over = 0x14

DW_OP_pick const #

Table 24 (#operands, notes)

const DW_OP_pick = 0x15

DW_OP_piece const #

Table 24 (#operands, notes)

const DW_OP_piece = 0x93

DW_OP_plus const #

Table 24 (#operands, notes)

const DW_OP_plus = 0x22

DW_OP_plus_uconst const #

Table 24 (#operands, notes)

const DW_OP_plus_uconst = 0x23

DW_OP_push_object_address const #

Table 24 (#operands, notes)

const DW_OP_push_object_address = 0x97

DW_OP_reg0 const #

Table 24 (#operands, notes)

const DW_OP_reg0 = 0x50

DW_OP_reg31 const #

Table 24 (#operands, notes)

const DW_OP_reg31 = 0x6f

DW_OP_regx const #

Table 24 (#operands, notes)

const DW_OP_regx = 0x90

DW_OP_rot const #

Table 24 (#operands, notes)

const DW_OP_rot = 0x17

DW_OP_shl const #

Table 24 (#operands, notes)

const DW_OP_shl = 0x24

DW_OP_shr const #

Table 24 (#operands, notes)

const DW_OP_shr = 0x25

DW_OP_shra const #

Table 24 (#operands, notes)

const DW_OP_shra = 0x26

DW_OP_skip const #

Table 24 (#operands, notes)

const DW_OP_skip = 0x2f

DW_OP_swap const #

Table 24 (#operands, notes)

const DW_OP_swap = 0x16

DW_OP_xderef const #

Table 24 (#operands, notes)

const DW_OP_xderef = 0x18

DW_OP_xderef_size const #

Table 24 (#operands, notes)

const DW_OP_xderef_size = 0x95

DW_OP_xor const #

Table 24 (#operands, notes)

const DW_OP_xor = 0x27

DW_ORD_col_major const #

Table 35

const DW_ORD_col_major = 0x01

DW_ORD_row_major const #

Table 35

const DW_ORD_row_major = 0x00

DW_TAG_access_declaration const #

Table 18

const DW_TAG_access_declaration = 0x23

DW_TAG_array_type const #

Table 18

const DW_TAG_array_type = 0x01

DW_TAG_base_type const #

Table 18

const DW_TAG_base_type = 0x24

DW_TAG_catch_block const #

Table 18

const DW_TAG_catch_block = 0x25

DW_TAG_class_type const #

Table 18

const DW_TAG_class_type = 0x02

DW_TAG_common_block const #

Table 18

const DW_TAG_common_block = 0x1a

DW_TAG_common_inclusion const #

Table 18

const DW_TAG_common_inclusion = 0x1b

DW_TAG_compile_unit const #

Table 18

const DW_TAG_compile_unit = 0x11

DW_TAG_condition const #

Table 18

const DW_TAG_condition = 0x3f

DW_TAG_const_type const #

Table 18

const DW_TAG_const_type = 0x26

DW_TAG_constant const #

Table 18

const DW_TAG_constant = 0x27

DW_TAG_dwarf_procedure const #

Dwarf3

const DW_TAG_dwarf_procedure = 0x36

DW_TAG_entry_point const #

Table 18

const DW_TAG_entry_point = 0x03

DW_TAG_enumeration_type const #

Table 18

const DW_TAG_enumeration_type = 0x04

DW_TAG_enumerator const #

Table 18

const DW_TAG_enumerator = 0x28

DW_TAG_file_type const #

Table 18

const DW_TAG_file_type = 0x29

DW_TAG_formal_parameter const #

Table 18

const DW_TAG_formal_parameter = 0x05

DW_TAG_friend const #

Table 18

const DW_TAG_friend = 0x2a

DW_TAG_hi_user const #

Table 18

const DW_TAG_hi_user = 0xffff

DW_TAG_imported_declaration const #

Table 18

const DW_TAG_imported_declaration = 0x08

DW_TAG_imported_module const #

Table 18

const DW_TAG_imported_module = 0x3a

DW_TAG_imported_unit const #

Table 18

const DW_TAG_imported_unit = 0x3d

DW_TAG_inheritance const #

Table 18

const DW_TAG_inheritance = 0x1c

DW_TAG_inlined_subroutine const #

Table 18

const DW_TAG_inlined_subroutine = 0x1d

DW_TAG_interface_type const #

Table 18

const DW_TAG_interface_type = 0x38

DW_TAG_label const #

Table 18

const DW_TAG_label = 0x0a

DW_TAG_lexical_block const #

Table 18

const DW_TAG_lexical_block = 0x0b

DW_TAG_lo_user const #

User defined

const DW_TAG_lo_user = 0x4080

DW_TAG_member const #

Table 18

const DW_TAG_member = 0x0d

DW_TAG_module const #

Table 18

const DW_TAG_module = 0x1e

DW_TAG_namelist const #

Table 18

const DW_TAG_namelist = 0x2b

DW_TAG_namelist_item const #

Table 18

const DW_TAG_namelist_item = 0x2c

DW_TAG_namespace const #

Table 18

const DW_TAG_namespace = 0x39

DW_TAG_packed_type const #

Table 18

const DW_TAG_packed_type = 0x2d

DW_TAG_partial_unit const #

Table 18

const DW_TAG_partial_unit = 0x3c

DW_TAG_pointer_type const #

Table 18

const DW_TAG_pointer_type = 0x0f

DW_TAG_ptr_to_member_type const #

Table 18

const DW_TAG_ptr_to_member_type = 0x1f

DW_TAG_reference_type const #

Table 18

const DW_TAG_reference_type = 0x10

DW_TAG_restrict_type const #

Table 18

const DW_TAG_restrict_type = 0x37

DW_TAG_rvalue_reference_type const #

Table 18

const DW_TAG_rvalue_reference_type = 0x42

DW_TAG_set_type const #

Table 18

const DW_TAG_set_type = 0x20

DW_TAG_shared_type const #

Table 18

const DW_TAG_shared_type = 0x40

DW_TAG_string_type const #

Table 18

const DW_TAG_string_type = 0x12

DW_TAG_structure_type const #

Table 18

const DW_TAG_structure_type = 0x13

DW_TAG_subprogram const #

Table 18

const DW_TAG_subprogram = 0x2e

DW_TAG_subrange_type const #

Table 18

const DW_TAG_subrange_type = 0x21

DW_TAG_subroutine_type const #

Table 18

const DW_TAG_subroutine_type = 0x15

DW_TAG_template_alias const #

Table 18

const DW_TAG_template_alias = 0x43

DW_TAG_template_type_parameter const #

Table 18

const DW_TAG_template_type_parameter = 0x2f

DW_TAG_template_value_parameter const #

Table 18

const DW_TAG_template_value_parameter = 0x30

DW_TAG_thrown_type const #

Table 18

const DW_TAG_thrown_type = 0x31

DW_TAG_try_block const #

Table 18

const DW_TAG_try_block = 0x32

DW_TAG_type_unit const #

Dwarf4

const DW_TAG_type_unit = 0x41

DW_TAG_typedef const #

Table 18

const DW_TAG_typedef = 0x16

DW_TAG_union_type const #

Table 18

const DW_TAG_union_type = 0x17

DW_TAG_unspecified_parameters const #

Table 18

const DW_TAG_unspecified_parameters = 0x18

DW_TAG_unspecified_type const #

Table 18

const DW_TAG_unspecified_type = 0x3b

DW_TAG_variable const #

Table 18

const DW_TAG_variable = 0x34

DW_TAG_variant const #

Table 18

const DW_TAG_variant = 0x19

DW_TAG_variant_part const #

Table 18

const DW_TAG_variant_part = 0x33

DW_TAG_volatile_type const #

Table 18

const DW_TAG_volatile_type = 0x35

DW_TAG_with_stmt const #

Table 18

const DW_TAG_with_stmt = 0x22

DW_VIRTUALITY_none const #

Table 30

const DW_VIRTUALITY_none = 0x00

DW_VIRTUALITY_pure_virtual const #

Table 30

const DW_VIRTUALITY_pure_virtual = 0x02

DW_VIRTUALITY_virtual const #

Table 30

const DW_VIRTUALITY_virtual = 0x01

DW_VIS_exported const #

Table 29

const DW_VIS_exported = 0x02

DW_VIS_local const #

Table 29

const DW_VIS_local = 0x01

DW_VIS_qualified const #

Table 29

const DW_VIS_qualified = 0x03

InfoPrefix const #

InfoPrefix is the prefix for all the symbols containing DWARF info entries.

const InfoPrefix = "go:info."

abbrevs var #

var abbrevs = []dwAbbrev{...}

abbrevsFinalized var #

var abbrevsFinalized bool

logDwarf var #

Controls logging/debugging for selected aspects of DWARF subprogram generation (functions, scopes).

var logDwarf bool

putvarAbbrevs var #

var putvarAbbrevs = []dwAbbrev{...}

sevenbits var #

sevenbits contains all unsigned seven bit numbers, indexed by their value.

var sevenbits = [...]byte{...}

Interfaces

Context interface #

A Context specifies how to add data to a Sym.

type Context interface {
PtrSize() int
Size(s Sym) int64
AddInt(s Sym, size int, i int64)
AddBytes(s Sym, b []byte)
AddAddress(s Sym, t interface{}, ofs int64)
AddCURelativeAddress(s Sym, t interface{}, ofs int64)
AddSectionOffset(s Sym, size int, t interface{}, ofs int64)
AddDWARFAddrSectionOffset(s Sym, t interface{}, ofs int64)
CurrentOffset(s Sym) int64
RecordDclReference(from Sym, to Sym, dclIdx int, inlIndex int)
RecordChildDieOffsets(s Sym, vars []*Var, offsets []int32)
AddString(s Sym, v string)
Logf(format string, args ...interface{})
}

Sym interface #

Sym represents a symbol.

type Sym interface {

}

Structs

DWAttr struct #

DWAttr represents an attribute of a DWDie. For DW_CLS_string and _block, value should contain the length, and data the data, for _reference, value is 0 and data is a DWDie* to the referenced instance, for all others, value is the whole thing and data is null.

type DWAttr struct {
Link *DWAttr
Atr uint16
Cls uint8
Value int64
Data interface{}
}

DWDie struct #

DWDie represents a DWARF debug info entry.

type DWDie struct {
Abbrev int
Link *DWDie
Child *DWDie
Attr *DWAttr
Sym Sym
}

FnState struct #

This container is used by the PutFunc* variants below when creating the DWARF subprogram DIE(s) for a function.

type FnState struct {
Name string
Info Sym
Loc Sym
Ranges Sym
Absfn Sym
StartPC Sym
StartPos src.Pos
Size int64
External bool
Scopes []Scope
InlCalls InlCalls
UseBASEntries bool
dictIndexToOffset []int64
}

InlCall struct #

type InlCall struct {
InlIndex int
CallPos src.Pos
AbsFunSym Sym
Children []int
InlVars []*Var
Ranges []Range
Root bool
}

InlCalls struct #

type InlCalls struct {
Calls []InlCall
}

Range struct #

A Range represents a half-open interval [Start, End).

type Range struct {
Start int64
End int64
}

Scope struct #

A Scope represents a lexical scope. All variables declared within a scope will only be visible to instructions covered by the scope. Lexical scopes are contiguous in source files but can end up being compiled to discontiguous blocks of instructions in the executable. The Ranges field lists all the blocks of instructions that belong in this scope.

type Scope struct {
Parent int32
Ranges []Range
Vars []*Var
}

Var struct #

A Var represents a local variable or a function parameter.

type Var struct {
Name string
Tag int
WithLoclist bool
IsReturnValue bool
IsInlFormal bool
DictIndex uint16
StackOffset int32
PutLocationList func(listSym Sym, startPC Sym)
Scope int32
Type Sym
DeclFile string
DeclLine uint
DeclCol uint
InlIndex int32
ChildIndex int32
IsInAbstract bool
ClosureOffset int64
}

dwAbbrev struct #

type dwAbbrev struct {
tag uint8
children uint8
attr []dwAttrForm
}

dwAttrForm struct #

* Defining Abbrevs. This is hardcoded on a per-platform basis (that is, * each platform will see a fixed abbrev table for all objects); the number * of abbrev entries is fairly small (compared to C++ objects). The DWARF * spec places no restriction on the ordering of attributes in the * Abbrevs and DIEs, and we will always write them out in the order * of declaration in the abbrev.

type dwAttrForm struct {
attr uint16
form uint8
}

Functions

Abbrevs function #

Abbrevs returns the finalized abbrev array for the platform, expanding any DW_FORM pseudo-ops to real values.

func Abbrevs() []dwAbbrev

AppendRange method #

AppendRange adds r to s, if r is non-empty. If possible, it extends the last Range in s.Ranges; if not, it creates a new one.

func (s *Scope) AppendRange(r Range)

AppendSleb128 function #

AppendSleb128 appends v to b using DWARF's signed LEB128 encoding.

func AppendSleb128(b []byte, v int64) []byte

AppendUleb128 function #

AppendUleb128 appends v to b using DWARF's unsigned LEB128 encoding.

func AppendUleb128(b []byte, v uint64) []byte

EnableLogging function #

func EnableLogging(doit bool)

GetAbbrev function #

GetAbbrev returns the contents of the .debug_abbrev section.

func GetAbbrev() []byte

HasChildren function #

HasChildren reports whether 'die' uses an abbrev that supports children.

func HasChildren(die *DWDie) bool

IsDWARFEnabledOnAIXLd function #

IsDWARFEnabledOnAIXLd returns true if DWARF is possible on the current extld. AIX ld doesn't support DWARF with -bnoobjreorder with version prior to 7.2.2.

func IsDWARFEnabledOnAIXLd(extld []string) (bool, error)

MergeRanges function #

MergeRanges creates a new range list by merging the ranges from its two arguments, then returns the new list.

func MergeRanges(in1 []Range, in2 []Range) []Range

PutAbstractFunc function #

Emit DWARF attributes and child DIEs for an 'abstract' subprogram. The abstract subprogram DIE for a function contains its location-independent attributes (name, type, etc). Other instances of the function (any inlined copy of it, or the single out-of-line 'concrete' instance) will contain a pointer back to this abstract DIE (as a space-saving measure, so that name/type etc doesn't have to be repeated for each inlined copy).

func PutAbstractFunc(ctxt Context, s *FnState) error

PutAttrs function #

PutAttrs writes the attributes for a DIE to symbol 's'. Note that we can (and do) add arbitrary attributes to a DIE, but only the ones actually listed in the Abbrev will be written out.

func PutAttrs(ctxt Context, s Sym, abbrev int, attr *DWAttr)

PutBasedRanges function #

PutBasedRanges writes a range table to sym. All addresses in ranges are relative to some base address, which must be arranged by the caller (e.g., with a DW_AT_low_pc attribute, or in a BASE-prefixed range).

func PutBasedRanges(ctxt Context, sym Sym, ranges []Range)

PutConcreteFunc function #

Emit DWARF attributes and child DIEs for a 'concrete' subprogram, meaning the out-of-line copy of a function that was inlined at some point during the compilation of its containing package. The first attribute for a concrete DIE is a reference to the 'abstract' DIE for the function (which holds location-independent attributes such as name, type), then the remainder of the attributes are specific to this instance (location, frame base, etc).

func PutConcreteFunc(ctxt Context, s *FnState, isWrapper bool) error

PutDefaultFunc function #

Emit DWARF attributes and child DIEs for a subprogram. Here 'default' implies that the function in question was not inlined when its containing package was compiled (hence there is no need to emit an abstract version for it to use as a base for inlined routine records).

func PutDefaultFunc(ctxt Context, s *FnState, isWrapper bool) error

PutGlobal function #

PutGlobal writes a DIE for a global variable.

func PutGlobal(ctxt Context, info Sym, typ Sym, gvar Sym, name string)

PutIntConst function #

PutIntConst writes a DIE for an integer constant

func PutIntConst(ctxt Context, info Sym, typ Sym, name string, val int64)

PutRanges method #

PutRanges writes a range table to s.Ranges. All addresses in ranges are relative to s.base.

func (s *FnState) PutRanges(ctxt Context, ranges []Range)

Sleb128put function #

Sleb128put appends v to s using DWARF's signed LEB128 encoding.

func Sleb128put(ctxt Context, s Sym, v int64)

Uleb128put function #

Uleb128put appends v to s using DWARF's unsigned LEB128 encoding.

func Uleb128put(ctxt Context, s Sym, v int64)

UnifyRanges method #

UnifyRanges merges the ranges from 'c' into the list of ranges for 's'.

func (s *Scope) UnifyRanges(c *Scope)

byChildIndexCmp function #

byChildIndexCmp compares two *dwarf.Var by child index.

func byChildIndexCmp(a *Var, b *Var) int

concreteVar function #

func concreteVar(fnabbrev int, v *Var) bool

expandPseudoForm function #

expandPseudoForm takes an input DW_FORM_xxx value and translates it into a platform-appropriate concrete form. Existing concrete/real DW_FORM values are left untouched. For the moment the only pseudo-form is DW_FORM_udata_pseudo, which gets expanded to DW_FORM_data4 on Darwin and DW_FORM_udata everywhere else. See issue #31459 for more context.

func expandPseudoForm(form uint8) uint8

inlChildren function #

Slot -1: return top-level inlines. Slot >= 0: return children of that slot.

func inlChildren(slot int, calls *InlCalls) []int

inlinedVarTable function #

func inlinedVarTable(inlcalls *InlCalls) map[*Var]bool

isEmptyInlinedCall function #

Return TRUE if the inlined call in the specified slot is empty, meaning it has a zero-length range (no instructions), and all of its children are empty.

func isEmptyInlinedCall(slot int, calls *InlCalls) bool

putAbstractVar function #

Emit DWARF attributes for a variable belonging to an 'abstract' subprogram.

func putAbstractVar(ctxt Context, info Sym, v *Var)

putAbstractVarAbbrev function #

func putAbstractVarAbbrev(v *Var) int

putInlinedFunc function #

Emit DWARF attributes and child DIEs for an inlined subroutine. The first attribute of an inlined subroutine DIE is a reference back to its corresponding 'abstract' DIE (containing location-independent attributes such as name, type, etc). Inlined subroutine DIEs can have other inlined subroutine DIEs as children.

func putInlinedFunc(ctxt Context, s *FnState, callIdx int) error

putPrunedScopes function #

The s.Scopes slice contains variables were originally part of the function being emitted, as well as variables that were imported from various callee functions during the inlining process. This function prunes out any variables from the latter category (since they will be emitted as part of DWARF inlined_subroutine DIEs) and then generates scopes for vars in the former category.

func putPrunedScopes(ctxt Context, s *FnState, fnabbrev int) error

putattr function #

func putattr(ctxt Context, s Sym, abbrev int, form int, cls int, value int64, data interface{}) error

putparamtypes function #

putparamtypes writes typedef DIEs for any parametric types that are used by this function.

func putparamtypes(ctxt Context, s *FnState, scopes []Scope, fnabbrev int) []int64

putscope function #

func putscope(ctxt Context, s *FnState, scopes []Scope, curscope int32, fnabbrev int, encbuf []byte) int32

putvar function #

func putvar(ctxt Context, s *FnState, v *Var, absfn Sym, fnabbrev int, inlIndex int, encbuf []byte)

putvarAbbrev function #

func putvarAbbrev(v *Var, concrete bool, withLoclist bool) int

sevenBitS function #

sevenBitS returns the signed LEB128 encoding of v if v is seven bits and nil otherwise. The contents of the returned slice must not be modified.

func sevenBitS(v int64) []byte

sevenBitU function #

sevenBitU returns the unsigned LEB128 encoding of v if v is seven bits and nil otherwise. The contents of the returned slice must not be modified.

func sevenBitU(v int64) []byte

Generated with Arrow