Index: kernel/generic/include/debug/constants.h
===================================================================
--- kernel/generic/include/debug/constants.h	(revision 2fbb42fc7cb049341ed2bb0ef644df1429f5fa15)
+++ kernel/generic/include/debug/constants.h	(revision 2fbb42fc7cb049341ed2bb0ef644df1429f5fa15)
@@ -0,0 +1,173 @@
+/*
+ * Copyright (c) 2023 Jiří Zárevúcky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef DWARFS_CONSTANTS_H_
+#define DWARFS_CONSTANTS_H_
+
+enum {
+	DW_SECT_INFO        = 1,  // .debug_info.dwo
+	DW_SECT_ABBREV      = 3,  // .debug_abbrev.dwo
+	DW_SECT_LINE        = 4,  // .debug_line.dwo
+	DW_SECT_LOCLISTS    = 5,  // .debug_loclists.dwo
+	DW_SECT_STR_OFFSETS = 6,  // .debug_str_offsets.dwo
+	DW_SECT_MACRO       = 7,  // .debug_macro.dwo
+	DW_SECT_RNGLISTS    = 8,  // .debug_rnglists.dwo
+};
+
+// ^(DW_[^ ]*) [‡† ]*([^ ]*).*
+
+#define CVAL(name, value) name = value,
+
+enum {
+#include "../debug/constants/dw_ut.h"
+
+	DW_UT_lo_user = 0x80,
+	DW_UT_hi_user = 0xff,
+};
+
+enum {
+#include "../debug/constants/dw_tag.h"
+
+	DW_TAG_lo_user = 0x4080,
+	DW_TAG_hi_user = 0xffff,
+};
+
+enum {
+#include "../debug/constants/dw_at.h"
+
+	DW_AT_lo_user = 0x2000,
+	DW_AT_hi_user = 0x3fff,
+};
+
+enum {
+#include "../debug/constants/dw_form.h"
+};
+
+enum {
+#include "../debug/constants/dw_op.h"
+
+	DW_OP_lo_user = 0xe0,
+	DW_OP_hi_user = 0xff,
+};
+
+enum {
+#include "../debug/constants/dw_lle.h"
+};
+
+enum {
+#include "../debug/constants/dw_ate.h"
+
+	DW_ATE_lo_user = 0x80,
+	DW_ATE_hi_user = 0xff,
+};
+
+enum {
+#include "../debug/constants/dw_ds.h"
+};
+
+enum {
+#include "../debug/constants/dw_end.h"
+
+	DW_END_lo_user = 0x40,
+	DW_END_hi_user = 0xff,
+};
+
+enum {
+#include "../debug/constants/dw_access.h"
+};
+
+enum {
+#include "../debug/constants/dw_vis.h"
+};
+
+enum {
+#include "../debug/constants/dw_virtuality.h"
+};
+
+enum {
+#include "../debug/constants/dw_lang.h"
+
+	DW_LANG_lo_user = 0x8000,
+	DW_LANG_hi_user = 0xffff,
+};
+
+enum {
+	DW_ADDR_none = 0,
+};
+
+enum {
+#include "../debug/constants/dw_id.h"
+};
+
+enum {
+#include "../debug/constants/dw_cc.h"
+
+	DW_CC_lo_user = 0x40,
+	DW_CC_hi_user = 0xff,
+};
+
+enum {
+#include "../debug/constants/dw_lns.h"
+};
+
+enum {
+#include "../debug/constants/dw_lne.h"
+
+	DW_LNE_lo_user = 0x80,
+	DW_LNE_hi_user = 0xff,
+};
+
+enum {
+#include "../debug/constants/dw_lnct.h"
+
+	DW_LNCT_lo_user = 0x2000,
+	DW_LNCT_hi_user = 0x3fff,
+};
+
+#undef CVAL
+
+typedef unsigned dw_ut_t;
+typedef unsigned dw_tag_t;
+typedef unsigned dw_at_t;
+typedef unsigned dw_form_t;
+typedef unsigned dw_op_t;
+typedef unsigned dw_lle_t;
+typedef unsigned dw_ate_t;
+typedef unsigned dw_ds_t;
+typedef unsigned dw_end_t;
+typedef unsigned dw_access_t;
+typedef unsigned dw_vis_t;
+typedef unsigned dw_virtuality_t;
+typedef unsigned dw_lang_t;
+typedef unsigned dw_id_t;
+typedef unsigned dw_cc_t;
+typedef unsigned dw_lns_t;
+typedef unsigned dw_lne_t;
+typedef unsigned dw_lnct_t;
+
+#endif /* DWARFS_CONSTANTS_H_ */
Index: kernel/generic/include/debug/constants/dw_access.h
===================================================================
--- kernel/generic/include/debug/constants/dw_access.h	(revision 2fbb42fc7cb049341ed2bb0ef644df1429f5fa15)
+++ kernel/generic/include/debug/constants/dw_access.h	(revision 2fbb42fc7cb049341ed2bb0ef644df1429f5fa15)
@@ -0,0 +1,3 @@
+CVAL(DW_ACCESS_public, 0x01)
+CVAL(DW_ACCESS_protected, 0x02)
+CVAL(DW_ACCESS_private, 0x03)
Index: kernel/generic/include/debug/constants/dw_at.h
===================================================================
--- kernel/generic/include/debug/constants/dw_at.h	(revision 2fbb42fc7cb049341ed2bb0ef644df1429f5fa15)
+++ kernel/generic/include/debug/constants/dw_at.h	(revision 2fbb42fc7cb049341ed2bb0ef644df1429f5fa15)
@@ -0,0 +1,121 @@
+CVAL(DW_AT_sibling, 0x01)
+CVAL(DW_AT_location, 0x02)
+CVAL(DW_AT_name, 0x03)
+CVAL(DW_AT_ordering, 0x09)
+CVAL(DW_AT_byte_size, 0x0b)
+CVAL(DW_AT_bit_offset, 0x0c)
+CVAL(DW_AT_bit_size, 0x0d)
+CVAL(DW_AT_stmt_list, 0x10)
+CVAL(DW_AT_low_pc, 0x11)
+CVAL(DW_AT_high_pc, 0x12)
+CVAL(DW_AT_language, 0x13)
+CVAL(DW_AT_discr, 0x15)
+CVAL(DW_AT_discr_value, 0x16)
+CVAL(DW_AT_visibility, 0x17)
+CVAL(DW_AT_import, 0x18)
+CVAL(DW_AT_string_length, 0x19)
+CVAL(DW_AT_common_reference, 0x1a)
+CVAL(DW_AT_comp_dir, 0x1b)
+CVAL(DW_AT_const_value, 0x1c)
+CVAL(DW_AT_containing_type, 0x1d)
+CVAL(DW_AT_default_value, 0x1e)
+CVAL(DW_AT_inline, 0x20)
+CVAL(DW_AT_is_optional, 0x21)
+CVAL(DW_AT_lower_bound, 0x22)
+CVAL(DW_AT_producer, 0x25)
+CVAL(DW_AT_prototyped, 0x27)
+CVAL(DW_AT_return_addr, 0x2a)
+CVAL(DW_AT_start_scope, 0x2c)
+CVAL(DW_AT_bit_stride, 0x2e)
+CVAL(DW_AT_upper_bound, 0x2f)
+CVAL(DW_AT_abstract_origin, 0x31)
+CVAL(DW_AT_accessibility, 0x32)
+CVAL(DW_AT_address_class, 0x33)
+CVAL(DW_AT_artificial, 0x34)
+CVAL(DW_AT_base_types, 0x35)
+CVAL(DW_AT_calling_convention, 0x36)
+CVAL(DW_AT_count, 0x37)
+CVAL(DW_AT_data_member_location, 0x38)
+CVAL(DW_AT_decl_column, 0x39)
+CVAL(DW_AT_decl_file, 0x3a)
+CVAL(DW_AT_decl_line, 0x3b)
+CVAL(DW_AT_declaration, 0x3c)
+CVAL(DW_AT_discr_list, 0x3d)
+CVAL(DW_AT_encoding, 0x3e)
+CVAL(DW_AT_external, 0x3f)
+CVAL(DW_AT_frame_base, 0x40)
+CVAL(DW_AT_friend, 0x41)
+CVAL(DW_AT_identifier_case, 0x42)
+CVAL(DW_AT_macro_info, 0x43)
+CVAL(DW_AT_namelist_item, 0x44)
+CVAL(DW_AT_priority, 0x45)
+CVAL(DW_AT_segment, 0x46)
+CVAL(DW_AT_specification, 0x47)
+CVAL(DW_AT_static_link, 0x48)
+CVAL(DW_AT_type, 0x49)
+CVAL(DW_AT_use_location, 0x4a)
+CVAL(DW_AT_variable_parameter, 0x4b)
+CVAL(DW_AT_virtuality, 0x4c)
+CVAL(DW_AT_vtable_elem_location, 0x4d)
+CVAL(DW_AT_allocated, 0x4e)
+CVAL(DW_AT_associated, 0x4f)
+CVAL(DW_AT_data_location, 0x50)
+CVAL(DW_AT_byte_stride, 0x51)
+CVAL(DW_AT_entry_pc, 0x52)
+CVAL(DW_AT_use_UTF8, 0x53)
+CVAL(DW_AT_extension, 0x54)
+CVAL(DW_AT_ranges, 0x55)
+CVAL(DW_AT_trampoline, 0x56)
+CVAL(DW_AT_call_column, 0x57)
+CVAL(DW_AT_call_file, 0x58)
+CVAL(DW_AT_call_line, 0x59)
+CVAL(DW_AT_description, 0x5a)
+CVAL(DW_AT_binary_scale, 0x5b)
+CVAL(DW_AT_decimal_scale, 0x5c)
+CVAL(DW_AT_small, 0x5d)
+CVAL(DW_AT_decimal_sign, 0x5e)
+CVAL(DW_AT_digit_count, 0x5f)
+CVAL(DW_AT_picture_string, 0x60)
+CVAL(DW_AT_mutable, 0x61)
+CVAL(DW_AT_threads_scaled, 0x62)
+CVAL(DW_AT_explicit, 0x63)
+CVAL(DW_AT_object_pointer, 0x64)
+CVAL(DW_AT_endianity, 0x65)
+CVAL(DW_AT_elemental, 0x66)
+CVAL(DW_AT_pure, 0x67)
+CVAL(DW_AT_recursive, 0x68)
+CVAL(DW_AT_signature, 0x69)
+CVAL(DW_AT_main_subprogram, 0x6a)
+CVAL(DW_AT_data_bit_offset, 0x6b)
+CVAL(DW_AT_const_expr, 0x6c)
+CVAL(DW_AT_enum_class, 0x6d)
+CVAL(DW_AT_linkage_name, 0x6e)
+CVAL(DW_AT_string_length_bit_size, 0x6f)
+CVAL(DW_AT_string_length_byte_size, 0x70)
+CVAL(DW_AT_rank, 0x71)
+CVAL(DW_AT_str_offsets_base, 0x72)
+CVAL(DW_AT_addr_base, 0x73)
+CVAL(DW_AT_rnglists_base, 0x74)
+CVAL(DW_AT_dwo_name, 0x76)
+CVAL(DW_AT_reference, 0x77)
+CVAL(DW_AT_rvalue_reference, 0x78)
+CVAL(DW_AT_macros, 0x79)
+CVAL(DW_AT_call_all_calls, 0x7a)
+CVAL(DW_AT_call_all_source_calls, 0x7b)
+CVAL(DW_AT_call_all_tail_calls, 0x7c)
+CVAL(DW_AT_call_return_pc, 0x7d)
+CVAL(DW_AT_call_value, 0x7e)
+CVAL(DW_AT_call_origin, 0x7f)
+CVAL(DW_AT_call_parameter, 0x80)
+CVAL(DW_AT_call_pc, 0x81)
+CVAL(DW_AT_call_tail_call, 0x82)
+CVAL(DW_AT_call_target, 0x83)
+CVAL(DW_AT_call_target_clobbered, 0x84)
+CVAL(DW_AT_call_data_location, 0x85)
+CVAL(DW_AT_call_data_value, 0x86)
+CVAL(DW_AT_noreturn, 0x87)
+CVAL(DW_AT_alignment, 0x88)
+CVAL(DW_AT_export_symbols, 0x89)
+CVAL(DW_AT_deleted, 0x8a)
+CVAL(DW_AT_defaulted, 0x8b)
+CVAL(DW_AT_loclists_base, 0x8c)
Index: kernel/generic/include/debug/constants/dw_ate.h
===================================================================
--- kernel/generic/include/debug/constants/dw_ate.h	(revision 2fbb42fc7cb049341ed2bb0ef644df1429f5fa15)
+++ kernel/generic/include/debug/constants/dw_ate.h	(revision 2fbb42fc7cb049341ed2bb0ef644df1429f5fa15)
@@ -0,0 +1,18 @@
+CVAL(DW_ATE_address, 0x01)
+CVAL(DW_ATE_boolean, 0x02)
+CVAL(DW_ATE_complex_float, 0x03)
+CVAL(DW_ATE_float, 0x04)
+CVAL(DW_ATE_signed, 0x05)
+CVAL(DW_ATE_signed_char, 0x06)
+CVAL(DW_ATE_unsigned, 0x07)
+CVAL(DW_ATE_unsigned_char, 0x08)
+CVAL(DW_ATE_imaginary_float, 0x09)
+CVAL(DW_ATE_packed_decimal, 0x0a)
+CVAL(DW_ATE_numeric_string, 0x0b)
+CVAL(DW_ATE_edited, 0x0c)
+CVAL(DW_ATE_signed_fixed, 0x0d)
+CVAL(DW_ATE_unsigned_fixed, 0x0e)
+CVAL(DW_ATE_decimal_float, 0x0f)
+CVAL(DW_ATE_UTF, 0x10)
+CVAL(DW_ATE_UCS, 0x11)
+CVAL(DW_ATE_ASCII, 0x12)
Index: kernel/generic/include/debug/constants/dw_cc.h
===================================================================
--- kernel/generic/include/debug/constants/dw_cc.h	(revision 2fbb42fc7cb049341ed2bb0ef644df1429f5fa15)
+++ kernel/generic/include/debug/constants/dw_cc.h	(revision 2fbb42fc7cb049341ed2bb0ef644df1429f5fa15)
@@ -0,0 +1,5 @@
+CVAL(DW_CC_normal, 0x01)
+CVAL(DW_CC_program, 0x02)
+CVAL(DW_CC_nocall, 0x03)
+CVAL(DW_CC_pass_by_reference, 0x04)
+CVAL(DW_CC_pass_by_value, 0x05)
Index: kernel/generic/include/debug/constants/dw_ds.h
===================================================================
--- kernel/generic/include/debug/constants/dw_ds.h	(revision 2fbb42fc7cb049341ed2bb0ef644df1429f5fa15)
+++ kernel/generic/include/debug/constants/dw_ds.h	(revision 2fbb42fc7cb049341ed2bb0ef644df1429f5fa15)
@@ -0,0 +1,5 @@
+CVAL(DW_DS_unsigned, 0x01)
+CVAL(DW_DS_leading_overpunch, 0x02)
+CVAL(DW_DS_trailing_overpunch, 0x03)
+CVAL(DW_DS_leading_separate, 0x04)
+CVAL(DW_DS_trailing_separate, 0x05)
Index: kernel/generic/include/debug/constants/dw_end.h
===================================================================
--- kernel/generic/include/debug/constants/dw_end.h	(revision 2fbb42fc7cb049341ed2bb0ef644df1429f5fa15)
+++ kernel/generic/include/debug/constants/dw_end.h	(revision 2fbb42fc7cb049341ed2bb0ef644df1429f5fa15)
@@ -0,0 +1,3 @@
+CVAL(DW_END_default, 0x00)
+CVAL(DW_END_big, 0x01)
+CVAL(DW_END_little, 0x02)
Index: kernel/generic/include/debug/constants/dw_form.h
===================================================================
--- kernel/generic/include/debug/constants/dw_form.h	(revision 2fbb42fc7cb049341ed2bb0ef644df1429f5fa15)
+++ kernel/generic/include/debug/constants/dw_form.h	(revision 2fbb42fc7cb049341ed2bb0ef644df1429f5fa15)
@@ -0,0 +1,43 @@
+CVAL(DW_FORM_addr, 0x01)
+CVAL(DW_FORM_block2, 0x03)
+CVAL(DW_FORM_block4, 0x04)
+CVAL(DW_FORM_data2, 0x05)
+CVAL(DW_FORM_data4, 0x06)
+CVAL(DW_FORM_data8, 0x07)
+CVAL(DW_FORM_string, 0x08)
+CVAL(DW_FORM_block, 0x09)
+CVAL(DW_FORM_block1, 0x0a)
+CVAL(DW_FORM_data1, 0x0b)
+CVAL(DW_FORM_flag, 0x0c)
+CVAL(DW_FORM_sdata, 0x0d)
+CVAL(DW_FORM_strp, 0x0e)
+CVAL(DW_FORM_udata, 0x0f)
+CVAL(DW_FORM_ref_addr, 0x10)
+CVAL(DW_FORM_ref1, 0x11)
+CVAL(DW_FORM_ref2, 0x12)
+CVAL(DW_FORM_ref4, 0x13)
+CVAL(DW_FORM_ref8, 0x14)
+CVAL(DW_FORM_ref_udata, 0x15)
+CVAL(DW_FORM_indirect, 0x16)
+CVAL(DW_FORM_sec_offset, 0x17)
+CVAL(DW_FORM_exprloc, 0x18)
+CVAL(DW_FORM_flag_present, 0x19)
+CVAL(DW_FORM_strx, 0x1a)
+CVAL(DW_FORM_addrx, 0x1b)
+CVAL(DW_FORM_ref_sup4, 0x1c)
+CVAL(DW_FORM_strp_sup, 0x1d)
+CVAL(DW_FORM_data16, 0x1e)
+CVAL(DW_FORM_line_strp, 0x1f)
+CVAL(DW_FORM_ref_sig8, 0x20)
+CVAL(DW_FORM_implicit_const, 0x21)
+CVAL(DW_FORM_loclistx, 0x22)
+CVAL(DW_FORM_rnglistx, 0x23)
+CVAL(DW_FORM_ref_sup8, 0x24)
+CVAL(DW_FORM_strx1, 0x25)
+CVAL(DW_FORM_strx2, 0x26)
+CVAL(DW_FORM_strx3, 0x27)
+CVAL(DW_FORM_strx4, 0x28)
+CVAL(DW_FORM_addrx1, 0x29)
+CVAL(DW_FORM_addrx2, 0x2a)
+CVAL(DW_FORM_addrx3, 0x2b)
+CVAL(DW_FORM_addrx4, 0x2c)
Index: kernel/generic/include/debug/constants/dw_id.h
===================================================================
--- kernel/generic/include/debug/constants/dw_id.h	(revision 2fbb42fc7cb049341ed2bb0ef644df1429f5fa15)
+++ kernel/generic/include/debug/constants/dw_id.h	(revision 2fbb42fc7cb049341ed2bb0ef644df1429f5fa15)
@@ -0,0 +1,4 @@
+CVAL(DW_ID_case_sensitive, 0x00)
+CVAL(DW_ID_up_case, 0x01)
+CVAL(DW_ID_down_case, 0x02)
+CVAL(DW_ID_case_insensitive, 0x03)
Index: kernel/generic/include/debug/constants/dw_lang.h
===================================================================
--- kernel/generic/include/debug/constants/dw_lang.h	(revision 2fbb42fc7cb049341ed2bb0ef644df1429f5fa15)
+++ kernel/generic/include/debug/constants/dw_lang.h	(revision 2fbb42fc7cb049341ed2bb0ef644df1429f5fa15)
@@ -0,0 +1,37 @@
+CVAL(DW_LANG_C89, 0x0001)
+CVAL(DW_LANG_C, 0x0002)
+CVAL(DW_LANG_Ada83, 0x0003)
+CVAL(DW_LANG_C_plus_plus, 0x0004)
+CVAL(DW_LANG_Cobol74, 0x0005)
+CVAL(DW_LANG_Cobol85, 0x0006)
+CVAL(DW_LANG_Fortran77, 0x0007)
+CVAL(DW_LANG_Fortran90, 0x0008)
+CVAL(DW_LANG_Pascal83, 0x0009)
+CVAL(DW_LANG_Modula2, 0x000a)
+CVAL(DW_LANG_Java, 0x000b)
+CVAL(DW_LANG_C99, 0x000c)
+CVAL(DW_LANG_Ada95, 0x000d)
+CVAL(DW_LANG_Fortran95, 0x000e)
+CVAL(DW_LANG_PLI, 0x000f)
+CVAL(DW_LANG_ObjC, 0x0010)
+CVAL(DW_LANG_ObjC_plus_plus, 0x0011)
+CVAL(DW_LANG_UPC, 0x0012)
+CVAL(DW_LANG_D, 0x0013)
+CVAL(DW_LANG_Python, 0x0014)
+CVAL(DW_LANG_OpenCL, 0x0015)
+CVAL(DW_LANG_Go, 0x0016)
+CVAL(DW_LANG_Modula3, 0x0017)
+CVAL(DW_LANG_Haskell, 0x0018)
+CVAL(DW_LANG_C_plus_plus_03, 0x0019)
+CVAL(DW_LANG_C_plus_plus_11, 0x001a)
+CVAL(DW_LANG_OCaml, 0x001b)
+CVAL(DW_LANG_Rust, 0x001c)
+CVAL(DW_LANG_C11, 0x001d)
+CVAL(DW_LANG_Swift, 0x001e)
+CVAL(DW_LANG_Julia, 0x001f)
+CVAL(DW_LANG_Dylan, 0x0020)
+CVAL(DW_LANG_C_plus_plus_14, 0x0021)
+CVAL(DW_LANG_Fortran03, 0x0022)
+CVAL(DW_LANG_Fortran08, 0x0023)
+CVAL(DW_LANG_RenderScript, 0x0024)
+CVAL(DW_LANG_BLISS, 0x0025)
Index: kernel/generic/include/debug/constants/dw_lle.h
===================================================================
--- kernel/generic/include/debug/constants/dw_lle.h	(revision 2fbb42fc7cb049341ed2bb0ef644df1429f5fa15)
+++ kernel/generic/include/debug/constants/dw_lle.h	(revision 2fbb42fc7cb049341ed2bb0ef644df1429f5fa15)
@@ -0,0 +1,9 @@
+CVAL(DW_LLE_end_of_list, 0x00)
+CVAL(DW_LLE_base_addressx, 0x01)
+CVAL(DW_LLE_startx_endx, 0x02)
+CVAL(DW_LLE_startx_length, 0x03)
+CVAL(DW_LLE_offset_pair, 0x04)
+CVAL(DW_LLE_default_location, 0x05)
+CVAL(DW_LLE_base_address, 0x06)
+CVAL(DW_LLE_start_end, 0x07)
+CVAL(DW_LLE_start_length, 0x08)
Index: kernel/generic/include/debug/constants/dw_lnct.h
===================================================================
--- kernel/generic/include/debug/constants/dw_lnct.h	(revision 2fbb42fc7cb049341ed2bb0ef644df1429f5fa15)
+++ kernel/generic/include/debug/constants/dw_lnct.h	(revision 2fbb42fc7cb049341ed2bb0ef644df1429f5fa15)
@@ -0,0 +1,5 @@
+CVAL(DW_LNCT_path, 0x1)
+CVAL(DW_LNCT_directory_index, 0x2)
+CVAL(DW_LNCT_timestamp, 0x3)
+CVAL(DW_LNCT_size, 0x4)
+CVAL(DW_LNCT_MD5, 0x5)
Index: kernel/generic/include/debug/constants/dw_lne.h
===================================================================
--- kernel/generic/include/debug/constants/dw_lne.h	(revision 2fbb42fc7cb049341ed2bb0ef644df1429f5fa15)
+++ kernel/generic/include/debug/constants/dw_lne.h	(revision 2fbb42fc7cb049341ed2bb0ef644df1429f5fa15)
@@ -0,0 +1,3 @@
+CVAL(DW_LNE_end_sequence, 0x01)
+CVAL(DW_LNE_set_address, 0x02)
+CVAL(DW_LNE_set_discriminator, 0x04)
Index: kernel/generic/include/debug/constants/dw_lns.h
===================================================================
--- kernel/generic/include/debug/constants/dw_lns.h	(revision 2fbb42fc7cb049341ed2bb0ef644df1429f5fa15)
+++ kernel/generic/include/debug/constants/dw_lns.h	(revision 2fbb42fc7cb049341ed2bb0ef644df1429f5fa15)
@@ -0,0 +1,12 @@
+CVAL(DW_LNS_copy, 0x01)
+CVAL(DW_LNS_advance_pc, 0x02)
+CVAL(DW_LNS_advance_line, 0x03)
+CVAL(DW_LNS_set_file, 0x04)
+CVAL(DW_LNS_set_column, 0x05)
+CVAL(DW_LNS_negate_stmt, 0x06)
+CVAL(DW_LNS_set_basic_block, 0x07)
+CVAL(DW_LNS_const_add_pc, 0x08)
+CVAL(DW_LNS_fixed_advance_pc, 0x09)
+CVAL(DW_LNS_set_prologue_end, 0x0a)
+CVAL(DW_LNS_set_epilogue_begin, 0x0b)
+CVAL(DW_LNS_set_isa, 0x0c)
Index: kernel/generic/include/debug/constants/dw_op.h
===================================================================
--- kernel/generic/include/debug/constants/dw_op.h	(revision 2fbb42fc7cb049341ed2bb0ef644df1429f5fa15)
+++ kernel/generic/include/debug/constants/dw_op.h	(revision 2fbb42fc7cb049341ed2bb0ef644df1429f5fa15)
@@ -0,0 +1,164 @@
+CVAL(DW_OP_addr, 0x03)
+CVAL(DW_OP_deref, 0x06)
+CVAL(DW_OP_const1u, 0x08)
+CVAL(DW_OP_const1s, 0x09)
+CVAL(DW_OP_const2u, 0x0a)
+CVAL(DW_OP_const2s, 0x0b)
+CVAL(DW_OP_const4u, 0x0c)
+CVAL(DW_OP_const4s, 0x0d)
+CVAL(DW_OP_const8u, 0x0e)
+CVAL(DW_OP_const8s, 0x0f)
+CVAL(DW_OP_constu, 0x10)
+CVAL(DW_OP_consts, 0x11)
+CVAL(DW_OP_dup, 0x12)
+CVAL(DW_OP_drop, 0x13)
+CVAL(DW_OP_over, 0x14)
+CVAL(DW_OP_pick, 0x15)
+CVAL(DW_OP_swap, 0x16)
+CVAL(DW_OP_rot, 0x17)
+CVAL(DW_OP_xderef, 0x18)
+CVAL(DW_OP_abs, 0x19)
+CVAL(DW_OP_and, 0x1a)
+CVAL(DW_OP_div, 0x1b)
+CVAL(DW_OP_minus, 0x1c)
+CVAL(DW_OP_mod, 0x1d)
+CVAL(DW_OP_mul, 0x1e)
+CVAL(DW_OP_neg, 0x1f)
+CVAL(DW_OP_not, 0x20)
+CVAL(DW_OP_or, 0x21)
+CVAL(DW_OP_plus, 0x22)
+CVAL(DW_OP_plus_uconst, 0x23)
+CVAL(DW_OP_shl, 0x24)
+CVAL(DW_OP_shr, 0x25)
+CVAL(DW_OP_shra, 0x26)
+CVAL(DW_OP_xor, 0x27)
+CVAL(DW_OP_bra, 0x28)
+CVAL(DW_OP_eq, 0x29)
+CVAL(DW_OP_ge, 0x2a)
+CVAL(DW_OP_gt, 0x2b)
+CVAL(DW_OP_le, 0x2c)
+CVAL(DW_OP_lt, 0x2d)
+CVAL(DW_OP_ne, 0x2e)
+CVAL(DW_OP_skip, 0x2f)
+CVAL(DW_OP_lit0, 0x30)
+CVAL(DW_OP_lit1, 0x31)
+CVAL(DW_OP_lit2, 0x32)
+CVAL(DW_OP_lit3, 0x33)
+CVAL(DW_OP_lit4, 0x34)
+CVAL(DW_OP_lit5, 0x35)
+CVAL(DW_OP_lit6, 0x36)
+CVAL(DW_OP_lit7, 0x37)
+CVAL(DW_OP_lit8, 0x38)
+CVAL(DW_OP_lit9, 0x39)
+CVAL(DW_OP_lit10, 0x3a)
+CVAL(DW_OP_lit11, 0x3b)
+CVAL(DW_OP_lit12, 0x3c)
+CVAL(DW_OP_lit13, 0x3d)
+CVAL(DW_OP_lit14, 0x3e)
+CVAL(DW_OP_lit15, 0x3f)
+CVAL(DW_OP_lit16, 0x40)
+CVAL(DW_OP_lit17, 0x41)
+CVAL(DW_OP_lit18, 0x42)
+CVAL(DW_OP_lit19, 0x43)
+CVAL(DW_OP_lit20, 0x44)
+CVAL(DW_OP_lit21, 0x45)
+CVAL(DW_OP_lit22, 0x46)
+CVAL(DW_OP_lit23, 0x47)
+CVAL(DW_OP_lit24, 0x48)
+CVAL(DW_OP_lit25, 0x49)
+CVAL(DW_OP_lit26, 0x4a)
+CVAL(DW_OP_lit27, 0x4b)
+CVAL(DW_OP_lit28, 0x4c)
+CVAL(DW_OP_lit29, 0x4d)
+CVAL(DW_OP_lit30, 0x4e)
+CVAL(DW_OP_lit31, 0x4f)
+CVAL(DW_OP_reg0, 0x50)
+CVAL(DW_OP_reg1, 0x51)
+CVAL(DW_OP_reg2, 0x52)
+CVAL(DW_OP_reg3, 0x53)
+CVAL(DW_OP_reg4, 0x54)
+CVAL(DW_OP_reg5, 0x55)
+CVAL(DW_OP_reg6, 0x56)
+CVAL(DW_OP_reg7, 0x57)
+CVAL(DW_OP_reg8, 0x58)
+CVAL(DW_OP_reg9, 0x59)
+CVAL(DW_OP_reg10, 0x5a)
+CVAL(DW_OP_reg11, 0x5b)
+CVAL(DW_OP_reg12, 0x5c)
+CVAL(DW_OP_reg13, 0x5d)
+CVAL(DW_OP_reg14, 0x5e)
+CVAL(DW_OP_reg15, 0x5f)
+CVAL(DW_OP_reg16, 0x60)
+CVAL(DW_OP_reg17, 0x61)
+CVAL(DW_OP_reg18, 0x62)
+CVAL(DW_OP_reg19, 0x63)
+CVAL(DW_OP_reg20, 0x64)
+CVAL(DW_OP_reg21, 0x65)
+CVAL(DW_OP_reg22, 0x66)
+CVAL(DW_OP_reg23, 0x67)
+CVAL(DW_OP_reg24, 0x68)
+CVAL(DW_OP_reg25, 0x69)
+CVAL(DW_OP_reg26, 0x6a)
+CVAL(DW_OP_reg27, 0x6b)
+CVAL(DW_OP_reg28, 0x6c)
+CVAL(DW_OP_reg29, 0x6d)
+CVAL(DW_OP_reg30, 0x6e)
+CVAL(DW_OP_reg31, 0x6f)
+CVAL(DW_OP_breg0, 0x70)
+CVAL(DW_OP_breg1, 0x71)
+CVAL(DW_OP_breg2, 0x72)
+CVAL(DW_OP_breg3, 0x73)
+CVAL(DW_OP_breg4, 0x74)
+CVAL(DW_OP_breg5, 0x75)
+CVAL(DW_OP_breg6, 0x76)
+CVAL(DW_OP_breg7, 0x77)
+CVAL(DW_OP_breg8, 0x78)
+CVAL(DW_OP_breg9, 0x79)
+CVAL(DW_OP_breg10, 0x7a)
+CVAL(DW_OP_breg11, 0x7b)
+CVAL(DW_OP_breg12, 0x7c)
+CVAL(DW_OP_breg13, 0x7d)
+CVAL(DW_OP_breg14, 0x7e)
+CVAL(DW_OP_breg15, 0x7f)
+CVAL(DW_OP_breg16, 0x80)
+CVAL(DW_OP_breg17, 0x81)
+CVAL(DW_OP_breg18, 0x82)
+CVAL(DW_OP_breg19, 0x83)
+CVAL(DW_OP_breg20, 0x84)
+CVAL(DW_OP_breg21, 0x85)
+CVAL(DW_OP_breg22, 0x86)
+CVAL(DW_OP_breg23, 0x87)
+CVAL(DW_OP_breg24, 0x88)
+CVAL(DW_OP_breg25, 0x89)
+CVAL(DW_OP_breg26, 0x8a)
+CVAL(DW_OP_breg27, 0x8b)
+CVAL(DW_OP_breg28, 0x8c)
+CVAL(DW_OP_breg29, 0x8d)
+CVAL(DW_OP_breg30, 0x8e)
+CVAL(DW_OP_breg31, 0x8f)
+CVAL(DW_OP_regx, 0x90)
+CVAL(DW_OP_fbreg, 0x91)
+CVAL(DW_OP_bregx, 0x92)
+CVAL(DW_OP_piece, 0x93)
+CVAL(DW_OP_deref_size, 0x94)
+CVAL(DW_OP_xderef_size, 0x95)
+CVAL(DW_OP_nop, 0x96)
+CVAL(DW_OP_push_object_address, 0x97)
+CVAL(DW_OP_call2, 0x98)
+CVAL(DW_OP_call4, 0x99)
+CVAL(DW_OP_call_ref, 0x9a)
+CVAL(DW_OP_form_tls_address, 0x9b)
+CVAL(DW_OP_call_frame_cfa, 0x9c)
+CVAL(DW_OP_bit_piece, 0x9d)
+CVAL(DW_OP_implicit_value, 0x9e)
+CVAL(DW_OP_stack_value, 0x9f)
+CVAL(DW_OP_implicit_pointer, 0xa0)
+CVAL(DW_OP_addrx, 0xa1)
+CVAL(DW_OP_constx, 0xa2)
+CVAL(DW_OP_entry_value, 0xa3)
+CVAL(DW_OP_const_type, 0xa4)
+CVAL(DW_OP_regval_type, 0xa5)
+CVAL(DW_OP_deref_type, 0xa6)
+CVAL(DW_OP_xderef_type, 0xa7)
+CVAL(DW_OP_convert, 0xa8)
+CVAL(DW_OP_reinterpret, 0xa9)
Index: kernel/generic/include/debug/constants/dw_tag.h
===================================================================
--- kernel/generic/include/debug/constants/dw_tag.h	(revision 2fbb42fc7cb049341ed2bb0ef644df1429f5fa15)
+++ kernel/generic/include/debug/constants/dw_tag.h	(revision 2fbb42fc7cb049341ed2bb0ef644df1429f5fa15)
@@ -0,0 +1,75 @@
+CVAL(DW_TAG_array_type, 0x01)
+CVAL(DW_TAG_class_type, 0x02)
+CVAL(DW_TAG_entry_point, 0x03)
+CVAL(DW_TAG_enumeration_type, 0x04)
+CVAL(DW_TAG_formal_parameter, 0x05)
+CVAL(DW_TAG_global_subroutine, 0x06)
+CVAL(DW_TAG_global_variable, 0x07)
+CVAL(DW_TAG_imported_declaration, 0x08)
+// Reserved 0x09
+CVAL(DW_TAG_label, 0x0a)
+CVAL(DW_TAG_lexical_block, 0x0b)
+CVAL(DW_TAG_local_variable, 0x0c)
+CVAL(DW_TAG_member, 0x0d)
+// Reserved 0x0e
+CVAL(DW_TAG_pointer_type, 0x0f)
+CVAL(DW_TAG_reference_type, 0x10)
+CVAL(DW_TAG_compile_unit, 0x11)
+CVAL(DW_TAG_string_type, 0x12)
+CVAL(DW_TAG_structure_type, 0x13)
+CVAL(DW_TAG_subroutine, 0x14)
+CVAL(DW_TAG_subroutine_type, 0x15)
+CVAL(DW_TAG_typedef, 0x16)
+CVAL(DW_TAG_union_type, 0x17)
+CVAL(DW_TAG_unspecified_parameters, 0x18)
+CVAL(DW_TAG_variant, 0x19)
+CVAL(DW_TAG_common_block, 0x1a)
+CVAL(DW_TAG_common_inclusion, 0x1b)
+CVAL(DW_TAG_inheritance, 0x1c)
+CVAL(DW_TAG_inlined_subroutine, 0x1d)
+CVAL(DW_TAG_module, 0x1e)
+CVAL(DW_TAG_ptr_to_member_type, 0x1f)
+CVAL(DW_TAG_set_type, 0x20)
+CVAL(DW_TAG_subrange_type, 0x21)
+CVAL(DW_TAG_with_stmt, 0x22)
+CVAL(DW_TAG_access_declaration, 0x23)
+CVAL(DW_TAG_base_type, 0x24)
+CVAL(DW_TAG_catch_block, 0x25)
+CVAL(DW_TAG_const_type, 0x26)
+CVAL(DW_TAG_constant, 0x27)
+CVAL(DW_TAG_enumerator, 0x28)
+CVAL(DW_TAG_file_type, 0x29)
+CVAL(DW_TAG_friend, 0x2a)
+CVAL(DW_TAG_namelist, 0x2b)
+CVAL(DW_TAG_namelist_item, 0x2c)
+CVAL(DW_TAG_packed_type, 0x2d)
+CVAL(DW_TAG_subprogram, 0x2e)
+CVAL(DW_TAG_template_type_parameter, 0x2f)
+CVAL(DW_TAG_template_value_parameter, 0x30)
+CVAL(DW_TAG_thrown_type, 0x31)
+CVAL(DW_TAG_try_block, 0x32)
+CVAL(DW_TAG_variant_part, 0x33)
+CVAL(DW_TAG_variable, 0x34)
+CVAL(DW_TAG_volatile_type, 0x35)
+CVAL(DW_TAG_dwarf_procedure, 0x36)
+CVAL(DW_TAG_restrict_type, 0x37)
+CVAL(DW_TAG_interface_type, 0x38)
+CVAL(DW_TAG_namespace, 0x39)
+CVAL(DW_TAG_imported_module, 0x3a)
+CVAL(DW_TAG_unspecified_type, 0x3b)
+CVAL(DW_TAG_partial_unit, 0x3c)
+CVAL(DW_TAG_imported_unit, 0x3d)
+CVAL(DW_TAG_mutable_type, 0x3e)
+CVAL(DW_TAG_condition, 0x3f)
+CVAL(DW_TAG_shared_type, 0x40)
+CVAL(DW_TAG_type_unit, 0x41)
+CVAL(DW_TAG_rvalue_reference_type, 0x42)
+CVAL(DW_TAG_template_alias, 0x43)
+CVAL(DW_TAG_coarray_type, 0x44)
+CVAL(DW_TAG_generic_subrange, 0x45)
+CVAL(DW_TAG_dynamic_type, 0x46)
+CVAL(DW_TAG_atomic_type, 0x47)
+CVAL(DW_TAG_call_site, 0x48)
+CVAL(DW_TAG_call_site_parameter, 0x49)
+CVAL(DW_TAG_skeleton_unit, 0x4a)
+CVAL(DW_TAG_immutable_type, 0x4b)
Index: kernel/generic/include/debug/constants/dw_ut.h
===================================================================
--- kernel/generic/include/debug/constants/dw_ut.h	(revision 2fbb42fc7cb049341ed2bb0ef644df1429f5fa15)
+++ kernel/generic/include/debug/constants/dw_ut.h	(revision 2fbb42fc7cb049341ed2bb0ef644df1429f5fa15)
@@ -0,0 +1,6 @@
+CVAL(DW_UT_compile, 1)
+CVAL(DW_UT_type, 2)
+CVAL(DW_UT_partial, 3)
+CVAL(DW_UT_skeleton, 4)
+CVAL(DW_UT_split_compile, 5)
+CVAL(DW_UT_split_type, 6)
Index: kernel/generic/include/debug/constants/dw_virtuality.h
===================================================================
--- kernel/generic/include/debug/constants/dw_virtuality.h	(revision 2fbb42fc7cb049341ed2bb0ef644df1429f5fa15)
+++ kernel/generic/include/debug/constants/dw_virtuality.h	(revision 2fbb42fc7cb049341ed2bb0ef644df1429f5fa15)
@@ -0,0 +1,3 @@
+CVAL(DW_VIRTUALITY_none, 0x00)
+CVAL(DW_VIRTUALITY_virtual, 0x01)
+CVAL(DW_VIRTUALITY_pure_virtual, 0x02)
Index: kernel/generic/include/debug/constants/dw_vis.h
===================================================================
--- kernel/generic/include/debug/constants/dw_vis.h	(revision 2fbb42fc7cb049341ed2bb0ef644df1429f5fa15)
+++ kernel/generic/include/debug/constants/dw_vis.h	(revision 2fbb42fc7cb049341ed2bb0ef644df1429f5fa15)
@@ -0,0 +1,3 @@
+CVAL(DW_VIS_local, 0x01)
+CVAL(DW_VIS_exported, 0x02)
+CVAL(DW_VIS_qualified, 0x03)
Index: kernel/generic/include/debug/line.h
===================================================================
--- kernel/generic/include/debug/line.h	(revision 2fbb42fc7cb049341ed2bb0ef644df1429f5fa15)
+++ kernel/generic/include/debug/line.h	(revision 2fbb42fc7cb049341ed2bb0ef644df1429f5fa15)
@@ -0,0 +1,107 @@
+/*
+ * Copyright (c) 2023 Jiří Zárevúcky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef DWARFS_LINE_H_
+#define DWARFS_LINE_H_
+
+#include <stdbool.h>
+#include <stddef.h>
+#include <stdint.h>
+
+struct debug_line_program_header {
+	uint64_t unit_length;
+	uint64_t header_length;
+	const uint8_t *unit_end;
+	const uint8_t *header_end;
+	const uint8_t *standard_opcode_lengths;
+	size_t standard_opcode_lengths_size;
+	unsigned width;
+	uint16_t version;
+	uint8_t minimum_instruction_length;
+	bool default_is_stmt;
+	int8_t line_base;
+	uint8_t line_range;
+	uint8_t opcode_base;
+
+	union {
+		struct {
+			const uint8_t *include_directories;
+			const uint8_t *include_directories_end;
+			const uint8_t *file_names;
+		} v3;
+		struct {
+			uint64_t directories_count;
+			uint64_t file_names_count;
+			const uint8_t *directory_entry_format;
+			const uint8_t *directory_entry_format_end;
+			const uint8_t *directories;
+			const uint8_t *directories_end;
+			const uint8_t *file_name_entry_format;
+			const uint8_t *file_name_entry_format_end;
+			const uint8_t *file_names;
+			const uint8_t *file_names_end;
+			uint8_t address_size;
+			uint8_t segment_selector_size;
+			uint8_t directory_entry_format_count;
+			uint8_t file_name_entry_format_count;
+			uint8_t maximum_operations_per_instruction;
+		} v5;
+	};
+};
+
+struct debug_line_program {
+	const struct debug_line_program_header *hdr;
+	const uint8_t *program;
+	const uint8_t *program_end;
+
+	uintptr_t address;
+	int op_advance;
+	int file;
+	int line;
+	int column;
+
+	bool end_sequence;
+	bool truncated;
+};
+
+static inline struct debug_line_program debug_line_program_create(const uint8_t *program,
+    const uint8_t *const program_end,
+	const struct debug_line_program_header *hdr)
+{
+	return (struct debug_line_program) {
+		.hdr = hdr,
+		.program = program,
+		.program_end = program_end,
+		.end_sequence = true,
+		.truncated = false,
+	};
+}
+
+extern bool debug_line_get_address_info(uintptr_t addr, int op_index, const char **file, const char **dir, int *line, int *col);
+
+#endif /* DWARFS_LINE_H_ */
Index: kernel/generic/include/debug/names.h
===================================================================
--- kernel/generic/include/debug/names.h	(revision 2fbb42fc7cb049341ed2bb0ef644df1429f5fa15)
+++ kernel/generic/include/debug/names.h	(revision 2fbb42fc7cb049341ed2bb0ef644df1429f5fa15)
@@ -0,0 +1,57 @@
+/*
+ * Copyright (c) 2023 Jiří Zárevúcky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef DWARFS_NAMES_H_
+#define DWARFS_NAMES_H_
+
+#define D_(infix) \
+	typedef unsigned dw_##infix##_t; \
+	extern const char *dw_##infix##_name(dw_##infix##_t)
+
+D_(ut);
+D_(tag);
+D_(at);
+D_(form);
+D_(op);
+D_(lle);
+D_(ate);
+D_(ds);
+D_(end);
+D_(access);
+D_(vis);
+D_(virtuality);
+D_(lang);
+D_(id);
+D_(cc);
+D_(lns);
+D_(lne);
+D_(lnct);
+
+#undef D_
+
+#endif /* DWARFS_NAMES_H_ */
