From: Iain Buclaw <ibuclaw@gdcproject.org>
To: gdb-patches@sourceware.org
Cc: Iain Buclaw <ibuclaw@gdcproject.org>
Subject: [PATCH] gdb, d: Fix PR 33200 - Segfault in d_lookup_symbol
Date: Wed, 30 Jul 2025 13:42:29 +0200 [thread overview]
Message-ID: <20250730114229.1385610-1-ibuclaw@gdcproject.org> (raw)
If d_lookup_symbol tries to locate a member variable within a class or
struct type with no a name, type->name() is NULL, so the assignment to
std::string classname crashes gdb.
This can happen in some older versions of gdc, where debug info was
generated too eagerly in complex cases involving types referencing each
other recursively.
This patch adds a guard against this case, allowing the caller of
d_lookup_symbol to search other blocks for the right symbol.
The asm test was generated by namelessclass.d, with the name of the
class removed to synthesize the failure.
---
gdb/d-namespace.c | 4 +
gdb/testsuite/gdb.dlang/namelessclass.d | 33 ++
gdb/testsuite/gdb.dlang/namelessclass.exp | 44 ++
gdb/testsuite/gdb.dlang/namelessclass.s | 654 ++++++++++++++++++++++
4 files changed, 735 insertions(+)
create mode 100644 gdb/testsuite/gdb.dlang/namelessclass.d
create mode 100644 gdb/testsuite/gdb.dlang/namelessclass.exp
create mode 100644 gdb/testsuite/gdb.dlang/namelessclass.s
diff --git a/gdb/d-namespace.c b/gdb/d-namespace.c
index b5e046efaa7..84872ad9f11 100644
--- a/gdb/d-namespace.c
+++ b/gdb/d-namespace.c
@@ -131,6 +131,10 @@ d_lookup_symbol (const struct language_defn *langdef,
return {};
type = check_typedef (lang_this.symbol->type ()->target_type ());
+ /* If type name is NULL, abandon trying to find this symbol. */
+ if (type->name () == NULL)
+ return {};
+
classname = type->name ();
nested = name;
}
diff --git a/gdb/testsuite/gdb.dlang/namelessclass.d b/gdb/testsuite/gdb.dlang/namelessclass.d
new file mode 100644
index 00000000000..797ff5d50b7
--- /dev/null
+++ b/gdb/testsuite/gdb.dlang/namelessclass.d
@@ -0,0 +1,33 @@
+/* Copyright 2025 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+/* This is the original source for namelessclass.s. This file is never
+ compiled by the test suite, since the assembler output of gdc,
+ namelessclass.s, is used instead. */
+
+module object;
+
+void _d_newclassT(T)() {}
+extern(C) void _d_callfinalizer(void*) {}
+
+extern(C) void main()
+{
+ scope c = new class {
+ void doit() {
+ return; // set breakpoint here
+ }
+ };
+ c.doit();
+}
diff --git a/gdb/testsuite/gdb.dlang/namelessclass.exp b/gdb/testsuite/gdb.dlang/namelessclass.exp
new file mode 100644
index 00000000000..8d59ec60d38
--- /dev/null
+++ b/gdb/testsuite/gdb.dlang/namelessclass.exp
@@ -0,0 +1,44 @@
+# Copyright 2014-2025 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# Test nameless classes that may be output by the compiler.
+# PR gdb/33200
+
+load_lib dwarf.exp
+
+# Do not run in environments which do not support D.
+# This test can only be run on x86-like targets which support DWARF.
+require dwarf2_support allow_d_tests
+
+require is_x86_64_m64_target
+
+standard_testfile .s
+set dsrcfile "${testfile}.d"
+
+if {[prepare_for_testing "failed to prepare" $testfile $srcfile {nodebug}]} {
+ return -1
+}
+
+if {![runto_main]} {
+ return -1
+}
+
+# Set a breakpoint in the anonymous class::doit (). */
+set line [gdb_get_line_number "set breakpoint here" $dsrcfile]
+gdb_breakpoint $line
+gdb_continue_to_breakpoint "continue to breakpoint at line $line"
+
+# Any output is accepted as valid as long as gdb does not segfault.
+gdb_test "print do_not_segfault" ".*"
diff --git a/gdb/testsuite/gdb.dlang/namelessclass.s b/gdb/testsuite/gdb.dlang/namelessclass.s
new file mode 100644
index 00000000000..c6193834b29
--- /dev/null
+++ b/gdb/testsuite/gdb.dlang/namelessclass.s
@@ -0,0 +1,654 @@
+/* Copyright 2025 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+/* This file was generated using:
+
+ $ gdc namelessclass.d -g -S -dA -fno-weak-templates
+
+ with
+
+ $ gdc -v
+ Target: x86_64-pc-linux-gnu
+ Thread model: posix
+ gcc version 14.2.0 (GCC)
+
+ This is a test for d/33200. */
+
+ .file "namelessclass.d"
+ .text
+.Ltext0:
+ .globl _d_callfinalizer
+ .type _d_callfinalizer, @function
+_d_callfinalizer:
+.LFB0:
+ .file 1 "namelessclass.d"
+ # namelessclass.d:23:16
+ .loc 1 23 16
+ .cfi_startproc
+# BLOCK 2 seq:0
+# PRED: ENTRY (FALLTHRU)
+ pushq %rbp
+ .cfi_def_cfa_offset 16
+ .cfi_offset 6, -16
+ movq %rsp, %rbp
+ .cfi_def_cfa_register 6
+ movq %rdi, -8(%rbp)
+ # namelessclass.d:23:16
+ .loc 1 23 16
+ nop
+ # namelessclass.d:23:41
+ .loc 1 23 41
+ popq %rbp
+ .cfi_def_cfa 7, 8
+# SUCC: EXIT [always] namelessclass.d:23:16
+ ret
+ .cfi_endproc
+.LFE0:
+ .size _d_callfinalizer, .-_d_callfinalizer
+ .globl main
+ .type main, @function
+main:
+.LFB1:
+ # namelessclass.d:25:16
+ .loc 1 25 16
+ .cfi_startproc
+# BLOCK 2 seq:0
+# PRED: ENTRY (FALLTHRU)
+ pushq %rbp
+ .cfi_def_cfa_offset 16
+ .cfi_offset 6, -16
+ movq %rsp, %rbp
+ .cfi_def_cfa_register 6
+ subq $32, %rsp
+ # namelessclass.d:27:15
+ .loc 1 27 15
+ pxor %xmm0, %xmm0
+ movaps %xmm0, -32(%rbp)
+ movq %xmm0, -16(%rbp)
+ leaq _D6object4mainUZ12__anonclass16__vtblZ(%rip), %rax
+ movq %rax, -32(%rbp)
+ movq $0, -16(%rbp)
+ # namelessclass.d:27:11
+ .loc 1 27 11
+ leaq -32(%rbp), %rax
+ movq %rax, -8(%rbp)
+ # namelessclass.d:32:11
+ .loc 1 32 11
+ movq -8(%rbp), %rax
+ movq (%rax), %rax
+ movq 8(%rax), %rdx
+ movq -8(%rbp), %rax
+ movq %rax, %rdi
+ call *%rdx
+.LVL0:
+ # namelessclass.d:27:11
+ .loc 1 27 11
+ movq -8(%rbp), %rax
+ movq %rax, %rdi
+ call _d_callfinalizer@PLT
+ # namelessclass.d:25:16
+ .loc 1 25 16
+ movl $0, %eax
+ # namelessclass.d:33:1
+ .loc 1 33 1
+ leave
+ .cfi_def_cfa 7, 8
+# SUCC: EXIT [always]
+ ret
+ .cfi_endproc
+.LFE1:
+ .size main, .-main
+ .align 2
+ .globl _D6object4mainUZ12__anonclass14doitMFZv
+ .type _D6object4mainUZ12__anonclass14doitMFZv, @function
+_D6object4mainUZ12__anonclass14doitMFZv:
+.LFB2:
+ # namelessclass.d:28:14
+ .loc 1 28 14
+ .cfi_startproc
+# BLOCK 2 seq:0
+# PRED: ENTRY (FALLTHRU)
+ pushq %rbp
+ .cfi_def_cfa_offset 16
+ .cfi_offset 6, -16
+ movq %rsp, %rbp
+ .cfi_def_cfa_register 6
+ movq %rdi, -8(%rbp)
+ # namelessclass.d:29:13
+ .loc 1 29 13
+ nop
+ # namelessclass.d:30:9
+ .loc 1 30 9
+ popq %rbp
+ .cfi_def_cfa 7, 8
+# SUCC: EXIT [always] namelessclass.d:29:13
+ ret
+ .cfi_endproc
+.LFE2:
+ .size _D6object4mainUZ12__anonclass14doitMFZv, .-_D6object4mainUZ12__anonclass14doitMFZv
+ .weak _D6object4mainUZ12__anonclass17__ClassZ
+ .section .data.rel.local._D6object4mainUZ12__anonclass17__ClassZ,"awG",@progbits,_D6object4mainUZ12__anonclass17__ClassZ,comdat
+ .align 32
+ .type _D6object4mainUZ12__anonclass17__ClassZ, @gnu_unique_object
+ .size _D6object4mainUZ12__anonclass17__ClassZ, 168
+_D6object4mainUZ12__anonclass17__ClassZ:
+ .quad 0
+ .quad 0
+ .quad 24
+ .quad _D6object4mainUZ12__anonclass16__initZ
+ .quad 24
+ .quad _D6object4mainUZ12__anonclass17__ClassZ.1827
+ .quad 2
+ .quad _D6object4mainUZ12__anonclass16__vtblZ
+ .quad 0
+ .quad 0
+ .quad 0
+ .quad 0
+ .quad 0
+ .long 52
+ .zero 4
+ .quad 0
+ .quad 0
+ .quad 0
+ .quad 0
+ .quad 1
+ .long 0
+ .long 0
+ .long 0
+ .long 0
+ .weak _D6object4mainUZ12__anonclass16__vtblZ
+ .section .data.rel.ro.local._D6object4mainUZ12__anonclass16__vtblZ,"awG",@progbits,_D6object4mainUZ12__anonclass16__vtblZ,comdat
+ .align 8
+ .type _D6object4mainUZ12__anonclass16__vtblZ, @object
+ .size _D6object4mainUZ12__anonclass16__vtblZ, 16
+_D6object4mainUZ12__anonclass16__vtblZ:
+ .quad _D6object4mainUZ12__anonclass17__ClassZ
+ .quad _D6object4mainUZ12__anonclass14doitMFZv
+ .weak _D6object4mainUZ12__anonclass16__initZ
+ .section .data.rel.ro.local._D6object4mainUZ12__anonclass16__initZ,"awG",@progbits,_D6object4mainUZ12__anonclass16__initZ,comdat
+ .align 16
+ .type _D6object4mainUZ12__anonclass16__initZ, @object
+ .size _D6object4mainUZ12__anonclass16__initZ, 24
+_D6object4mainUZ12__anonclass16__initZ:
+ .quad _D6object4mainUZ12__anonclass16__vtblZ
+ .zero 8
+ .quad 0
+ .internal _D6object4mainUZ12__anonclass17__ClassZ.1827
+ .weak _D6object4mainUZ12__anonclass17__ClassZ.1827
+ .section .rodata._D6object4mainUZ12__anonclass17__ClassZ.1827,"aG",@progbits,_D6object4mainUZ12__anonclass17__ClassZ.1827,comdat
+ .align 16
+ .type _D6object4mainUZ12__anonclass17__ClassZ.1827, @object
+ .size _D6object4mainUZ12__anonclass17__ClassZ.1827, 24
+_D6object4mainUZ12__anonclass17__ClassZ.1827:
+ .ascii "object.main.__anonclass1"
+ .text
+.Letext0:
+ .file 2 "<no_file>"
+ .section .debug_info,"",@progbits
+.Ldebug_info0:
+ .long 0x12b # Length of Compilation Unit Info
+ .value 0x5 # DWARF version number
+ .byte 0x1 # DW_UT_compile
+ .byte 0x8 # Pointer Size (in bytes)
+ .long .Ldebug_abbrev0 # Offset Into Abbrev. Section
+ .uleb128 0x5 # (DIE (0xc) DW_TAG_compile_unit)
+ .long .LASF6 # DW_AT_producer: "GNU D 14.2.0"
+ .byte 0x13 # DW_AT_language
+ .long .LASF0 # DW_AT_name: "namelessclass.d"
+ .long .LASF1 # DW_AT_comp_dir: "/binutils-gdb/gdb/testsuite/gdb.dlang"
+ .quad .Ltext0 # DW_AT_low_pc
+ .quad .Letext0-.Ltext0 # DW_AT_high_pc
+ .long .Ldebug_line0 # DW_AT_stmt_list
+ .uleb128 0x6 # (DIE (0x2e) DW_TAG_module)
+ .long .LASF7 # DW_AT_name: "object"
+ .byte 0x1 # DW_AT_decl_file (namelessclass.d)
+ .byte 0x14 # DW_AT_decl_line
+ .byte 0x1 # DW_AT_decl_column
+ .long 0x42 # DW_AT_sibling
+ .uleb128 0x7 # (DIE (0x3a) DW_TAG_imported_module)
+ .byte 0x2 # DW_AT_decl_file (<no_file>)
+ .byte 0x1 # DW_AT_decl_line
+ .long 0x2e # DW_AT_import
+ .byte 0 # end of children of DIE 0x2e
+ .uleb128 0x8 # (DIE (0x42) DW_TAG_subprogram)
+ # DW_AT_external
+ .long .LASF8 # DW_AT_name: "main"
+ .byte 0x1 # DW_AT_decl_file (namelessclass.d)
+ .byte 0x19 # DW_AT_decl_line
+ .byte 0x10 # DW_AT_decl_column
+ .long 0xe4 # DW_AT_type
+ .quad .LFB1 # DW_AT_low_pc
+ .quad .LFE1-.LFB1 # DW_AT_high_pc
+ .uleb128 0x1 # DW_AT_frame_base
+ .byte 0x9c # DW_OP_call_frame_cfa
+ # DW_AT_call_all_tail_calls
+ .long 0xe4 # DW_AT_sibling
+ .uleb128 0x9 # (DIE (0x64) DW_TAG_class_type)
+ .long .LASF9 # DW_AT_name: ""
+ .byte 0x18 # DW_AT_byte_size
+ .byte 0x1 # DW_AT_decl_file (namelessclass.d)
+ .byte 0x1b # DW_AT_decl_line
+ .byte 0xf # DW_AT_decl_column
+ .long 0x64 # DW_AT_containing_type
+ .long 0xd6 # DW_AT_sibling
+ .uleb128 0x2 # (DIE (0x75) DW_TAG_member)
+ .long .LASF2 # DW_AT_name: "__vptr"
+ .long 0xf6 # DW_AT_type
+ .byte 0 # DW_AT_data_member_location
+ # DW_AT_artificial
+ # DW_AT_accessibility (0x1)
+ .uleb128 0x2 # (DIE (0x7f) DW_TAG_member)
+ .long .LASF3 # DW_AT_name: "__monitor"
+ .long 0x100 # DW_AT_type
+ .byte 0x8 # DW_AT_data_member_location
+ # DW_AT_artificial
+ # DW_AT_accessibility (0x1)
+ .uleb128 0xa # (DIE (0x89) DW_TAG_member)
+ .long .LASF4 # DW_AT_name: "this"
+ .byte 0x1 # DW_AT_decl_file (namelessclass.d)
+ .byte 0x1b # DW_AT_decl_line
+ .byte 0xb # DW_AT_decl_column
+ .long 0x102 # DW_AT_type
+ .byte 0x10 # DW_AT_data_member_location
+ .byte 0x1 # DW_AT_accessibility
+ .uleb128 0xb # (DIE (0x97) DW_TAG_subprogram)
+ # DW_AT_external
+ .long .LASF10 # DW_AT_name: "doit"
+ .byte 0x1 # DW_AT_decl_file (namelessclass.d)
+ .byte 0x1c # DW_AT_decl_line
+ .byte 0xe # DW_AT_decl_column
+ .long .LASF11 # DW_AT_linkage_name: "_D6object4mainUZ12__anonclass14doitMFZv"
+ .byte 0x1 # DW_AT_virtuality
+ .uleb128 0x2 # DW_AT_vtable_elem_location
+ .byte 0x10 # DW_OP_constu
+ .uleb128 0x1
+ .long 0x64 # DW_AT_containing_type
+ .byte 0x1 # DW_AT_accessibility
+ .quad .LFB2 # DW_AT_low_pc
+ .quad .LFE2-.LFB2 # DW_AT_high_pc
+ .uleb128 0x1 # DW_AT_frame_base
+ .byte 0x9c # DW_OP_call_frame_cfa
+ # DW_AT_call_all_calls
+ .uleb128 0x1 # (DIE (0xbe) DW_TAG_pointer_type)
+ # DW_AT_byte_size (0x8)
+ .long 0x64 # DW_AT_type
+ .uleb128 0x3 # (DIE (0xc3) DW_TAG_const_type)
+ .long 0xbe # DW_AT_type
+ .uleb128 0x4 # (DIE (0xc8) DW_TAG_formal_parameter)
+ .long .LASF4 # DW_AT_name: "this"
+ .long 0xc3 # DW_AT_type
+ # DW_AT_artificial
+ .uleb128 0x2 # DW_AT_location
+ .byte 0x91 # DW_OP_fbreg
+ .sleb128 -24
+ .byte 0 # end of children of DIE 0x97
+ .byte 0 # end of children of DIE 0x64
+ .uleb128 0xc # (DIE (0xd6) DW_TAG_variable)
+ .ascii "c\0" # DW_AT_name
+ .byte 0x1 # DW_AT_decl_file (namelessclass.d)
+ .byte 0x1b # DW_AT_decl_line
+ .byte 0xb # DW_AT_decl_column
+ .long 0xbe # DW_AT_type
+ .uleb128 0x2 # DW_AT_location
+ .byte 0x91 # DW_OP_fbreg
+ .sleb128 -24
+ .byte 0 # end of children of DIE 0x42
+ .uleb128 0xd # (DIE (0xe4) DW_TAG_base_type)
+ .byte 0x4 # DW_AT_byte_size
+ .byte 0x5 # DW_AT_encoding
+ .ascii "int\0" # DW_AT_name
+ .uleb128 0xe # (DIE (0xeb) DW_TAG_subroutine_type)
+ .long 0xe4 # DW_AT_type
+ .long 0xf6 # DW_AT_sibling
+ .uleb128 0xf # (DIE (0xf4) DW_TAG_unspecified_parameters)
+ .byte 0 # end of children of DIE 0xeb
+ .uleb128 0x1 # (DIE (0xf6) DW_TAG_pointer_type)
+ # DW_AT_byte_size (0x8)
+ .long 0xfb # DW_AT_type
+ .uleb128 0x1 # (DIE (0xfb) DW_TAG_pointer_type)
+ # DW_AT_byte_size (0x8)
+ .long 0xeb # DW_AT_type
+ .uleb128 0x10 # (DIE (0x100) DW_TAG_pointer_type)
+ .byte 0x8 # DW_AT_byte_size
+ .uleb128 0x3 # (DIE (0x102) DW_TAG_const_type)
+ .long 0x100 # DW_AT_type
+ .uleb128 0x11 # (DIE (0x107) DW_TAG_subprogram)
+ # DW_AT_external
+ .long .LASF12 # DW_AT_name: "_d_callfinalizer"
+ .byte 0x1 # DW_AT_decl_file (namelessclass.d)
+ .byte 0x17 # DW_AT_decl_line
+ .byte 0x10 # DW_AT_decl_column
+ .quad .LFB0 # DW_AT_low_pc
+ .quad .LFE0-.LFB0 # DW_AT_high_pc
+ .uleb128 0x1 # DW_AT_frame_base
+ .byte 0x9c # DW_OP_call_frame_cfa
+ # DW_AT_call_all_calls
+ .uleb128 0x4 # (DIE (0x121) DW_TAG_formal_parameter)
+ .long .LASF5 # DW_AT_name: "__param_0"
+ .long 0x100 # DW_AT_type
+ # DW_AT_artificial
+ .uleb128 0x2 # DW_AT_location
+ .byte 0x91 # DW_OP_fbreg
+ .sleb128 -24
+ .byte 0 # end of children of DIE 0x107
+ .byte 0 # end of children of DIE 0xc
+ .section .debug_abbrev,"",@progbits
+.Ldebug_abbrev0:
+ .uleb128 0x1 # (abbrev code)
+ .uleb128 0xf # (TAG: DW_TAG_pointer_type)
+ .byte 0 # DW_children_no
+ .uleb128 0xb # (DW_AT_byte_size)
+ .uleb128 0x21 # (DW_FORM_implicit_const)
+ .sleb128 8
+ .uleb128 0x49 # (DW_AT_type)
+ .uleb128 0x13 # (DW_FORM_ref4)
+ .byte 0
+ .byte 0
+ .uleb128 0x2 # (abbrev code)
+ .uleb128 0xd # (TAG: DW_TAG_member)
+ .byte 0 # DW_children_no
+ .uleb128 0x3 # (DW_AT_name)
+ .uleb128 0xe # (DW_FORM_strp)
+ .uleb128 0x49 # (DW_AT_type)
+ .uleb128 0x13 # (DW_FORM_ref4)
+ .uleb128 0x38 # (DW_AT_data_member_location)
+ .uleb128 0xb # (DW_FORM_data1)
+ .uleb128 0x34 # (DW_AT_artificial)
+ .uleb128 0x19 # (DW_FORM_flag_present)
+ .uleb128 0x32 # (DW_AT_accessibility)
+ .uleb128 0x21 # (DW_FORM_implicit_const)
+ .sleb128 1
+ .byte 0
+ .byte 0
+ .uleb128 0x3 # (abbrev code)
+ .uleb128 0x26 # (TAG: DW_TAG_const_type)
+ .byte 0 # DW_children_no
+ .uleb128 0x49 # (DW_AT_type)
+ .uleb128 0x13 # (DW_FORM_ref4)
+ .byte 0
+ .byte 0
+ .uleb128 0x4 # (abbrev code)
+ .uleb128 0x5 # (TAG: DW_TAG_formal_parameter)
+ .byte 0 # DW_children_no
+ .uleb128 0x3 # (DW_AT_name)
+ .uleb128 0xe # (DW_FORM_strp)
+ .uleb128 0x49 # (DW_AT_type)
+ .uleb128 0x13 # (DW_FORM_ref4)
+ .uleb128 0x34 # (DW_AT_artificial)
+ .uleb128 0x19 # (DW_FORM_flag_present)
+ .uleb128 0x2 # (DW_AT_location)
+ .uleb128 0x18 # (DW_FORM_exprloc)
+ .byte 0
+ .byte 0
+ .uleb128 0x5 # (abbrev code)
+ .uleb128 0x11 # (TAG: DW_TAG_compile_unit)
+ .byte 0x1 # DW_children_yes
+ .uleb128 0x25 # (DW_AT_producer)
+ .uleb128 0xe # (DW_FORM_strp)
+ .uleb128 0x13 # (DW_AT_language)
+ .uleb128 0xb # (DW_FORM_data1)
+ .uleb128 0x3 # (DW_AT_name)
+ .uleb128 0x1f # (DW_FORM_line_strp)
+ .uleb128 0x1b # (DW_AT_comp_dir)
+ .uleb128 0x1f # (DW_FORM_line_strp)
+ .uleb128 0x11 # (DW_AT_low_pc)
+ .uleb128 0x1 # (DW_FORM_addr)
+ .uleb128 0x12 # (DW_AT_high_pc)
+ .uleb128 0x7 # (DW_FORM_data8)
+ .uleb128 0x10 # (DW_AT_stmt_list)
+ .uleb128 0x17 # (DW_FORM_sec_offset)
+ .byte 0
+ .byte 0
+ .uleb128 0x6 # (abbrev code)
+ .uleb128 0x1e # (TAG: DW_TAG_module)
+ .byte 0x1 # DW_children_yes
+ .uleb128 0x3 # (DW_AT_name)
+ .uleb128 0xe # (DW_FORM_strp)
+ .uleb128 0x3a # (DW_AT_decl_file)
+ .uleb128 0xb # (DW_FORM_data1)
+ .uleb128 0x3b # (DW_AT_decl_line)
+ .uleb128 0xb # (DW_FORM_data1)
+ .uleb128 0x39 # (DW_AT_decl_column)
+ .uleb128 0xb # (DW_FORM_data1)
+ .uleb128 0x1 # (DW_AT_sibling)
+ .uleb128 0x13 # (DW_FORM_ref4)
+ .byte 0
+ .byte 0
+ .uleb128 0x7 # (abbrev code)
+ .uleb128 0x3a # (TAG: DW_TAG_imported_module)
+ .byte 0 # DW_children_no
+ .uleb128 0x3a # (DW_AT_decl_file)
+ .uleb128 0xb # (DW_FORM_data1)
+ .uleb128 0x3b # (DW_AT_decl_line)
+ .uleb128 0xb # (DW_FORM_data1)
+ .uleb128 0x18 # (DW_AT_import)
+ .uleb128 0x13 # (DW_FORM_ref4)
+ .byte 0
+ .byte 0
+ .uleb128 0x8 # (abbrev code)
+ .uleb128 0x2e # (TAG: DW_TAG_subprogram)
+ .byte 0x1 # DW_children_yes
+ .uleb128 0x3f # (DW_AT_external)
+ .uleb128 0x19 # (DW_FORM_flag_present)
+ .uleb128 0x3 # (DW_AT_name)
+ .uleb128 0xe # (DW_FORM_strp)
+ .uleb128 0x3a # (DW_AT_decl_file)
+ .uleb128 0xb # (DW_FORM_data1)
+ .uleb128 0x3b # (DW_AT_decl_line)
+ .uleb128 0xb # (DW_FORM_data1)
+ .uleb128 0x39 # (DW_AT_decl_column)
+ .uleb128 0xb # (DW_FORM_data1)
+ .uleb128 0x49 # (DW_AT_type)
+ .uleb128 0x13 # (DW_FORM_ref4)
+ .uleb128 0x11 # (DW_AT_low_pc)
+ .uleb128 0x1 # (DW_FORM_addr)
+ .uleb128 0x12 # (DW_AT_high_pc)
+ .uleb128 0x7 # (DW_FORM_data8)
+ .uleb128 0x40 # (DW_AT_frame_base)
+ .uleb128 0x18 # (DW_FORM_exprloc)
+ .uleb128 0x7c # (DW_AT_call_all_tail_calls)
+ .uleb128 0x19 # (DW_FORM_flag_present)
+ .uleb128 0x1 # (DW_AT_sibling)
+ .uleb128 0x13 # (DW_FORM_ref4)
+ .byte 0
+ .byte 0
+ .uleb128 0x9 # (abbrev code)
+ .uleb128 0x2 # (TAG: DW_TAG_class_type)
+ .byte 0x1 # DW_children_yes
+ .uleb128 0x3 # (DW_AT_name)
+ .uleb128 0xe # (DW_FORM_strp)
+ .uleb128 0xb # (DW_AT_byte_size)
+ .uleb128 0xb # (DW_FORM_data1)
+ .uleb128 0x3a # (DW_AT_decl_file)
+ .uleb128 0xb # (DW_FORM_data1)
+ .uleb128 0x3b # (DW_AT_decl_line)
+ .uleb128 0xb # (DW_FORM_data1)
+ .uleb128 0x39 # (DW_AT_decl_column)
+ .uleb128 0xb # (DW_FORM_data1)
+ .uleb128 0x1d # (DW_AT_containing_type)
+ .uleb128 0x13 # (DW_FORM_ref4)
+ .uleb128 0x1 # (DW_AT_sibling)
+ .uleb128 0x13 # (DW_FORM_ref4)
+ .byte 0
+ .byte 0
+ .uleb128 0xa # (abbrev code)
+ .uleb128 0xd # (TAG: DW_TAG_member)
+ .byte 0 # DW_children_no
+ .uleb128 0x3 # (DW_AT_name)
+ .uleb128 0xe # (DW_FORM_strp)
+ .uleb128 0x3a # (DW_AT_decl_file)
+ .uleb128 0xb # (DW_FORM_data1)
+ .uleb128 0x3b # (DW_AT_decl_line)
+ .uleb128 0xb # (DW_FORM_data1)
+ .uleb128 0x39 # (DW_AT_decl_column)
+ .uleb128 0xb # (DW_FORM_data1)
+ .uleb128 0x49 # (DW_AT_type)
+ .uleb128 0x13 # (DW_FORM_ref4)
+ .uleb128 0x38 # (DW_AT_data_member_location)
+ .uleb128 0xb # (DW_FORM_data1)
+ .uleb128 0x32 # (DW_AT_accessibility)
+ .uleb128 0xb # (DW_FORM_data1)
+ .byte 0
+ .byte 0
+ .uleb128 0xb # (abbrev code)
+ .uleb128 0x2e # (TAG: DW_TAG_subprogram)
+ .byte 0x1 # DW_children_yes
+ .uleb128 0x3f # (DW_AT_external)
+ .uleb128 0x19 # (DW_FORM_flag_present)
+ .uleb128 0x3 # (DW_AT_name)
+ .uleb128 0xe # (DW_FORM_strp)
+ .uleb128 0x3a # (DW_AT_decl_file)
+ .uleb128 0xb # (DW_FORM_data1)
+ .uleb128 0x3b # (DW_AT_decl_line)
+ .uleb128 0xb # (DW_FORM_data1)
+ .uleb128 0x39 # (DW_AT_decl_column)
+ .uleb128 0xb # (DW_FORM_data1)
+ .uleb128 0x6e # (DW_AT_linkage_name)
+ .uleb128 0xe # (DW_FORM_strp)
+ .uleb128 0x4c # (DW_AT_virtuality)
+ .uleb128 0xb # (DW_FORM_data1)
+ .uleb128 0x4d # (DW_AT_vtable_elem_location)
+ .uleb128 0x18 # (DW_FORM_exprloc)
+ .uleb128 0x1d # (DW_AT_containing_type)
+ .uleb128 0x13 # (DW_FORM_ref4)
+ .uleb128 0x32 # (DW_AT_accessibility)
+ .uleb128 0xb # (DW_FORM_data1)
+ .uleb128 0x11 # (DW_AT_low_pc)
+ .uleb128 0x1 # (DW_FORM_addr)
+ .uleb128 0x12 # (DW_AT_high_pc)
+ .uleb128 0x7 # (DW_FORM_data8)
+ .uleb128 0x40 # (DW_AT_frame_base)
+ .uleb128 0x18 # (DW_FORM_exprloc)
+ .uleb128 0x7a # (DW_AT_call_all_calls)
+ .uleb128 0x19 # (DW_FORM_flag_present)
+ .byte 0
+ .byte 0
+ .uleb128 0xc # (abbrev code)
+ .uleb128 0x34 # (TAG: DW_TAG_variable)
+ .byte 0 # DW_children_no
+ .uleb128 0x3 # (DW_AT_name)
+ .uleb128 0x8 # (DW_FORM_string)
+ .uleb128 0x3a # (DW_AT_decl_file)
+ .uleb128 0xb # (DW_FORM_data1)
+ .uleb128 0x3b # (DW_AT_decl_line)
+ .uleb128 0xb # (DW_FORM_data1)
+ .uleb128 0x39 # (DW_AT_decl_column)
+ .uleb128 0xb # (DW_FORM_data1)
+ .uleb128 0x49 # (DW_AT_type)
+ .uleb128 0x13 # (DW_FORM_ref4)
+ .uleb128 0x2 # (DW_AT_location)
+ .uleb128 0x18 # (DW_FORM_exprloc)
+ .byte 0
+ .byte 0
+ .uleb128 0xd # (abbrev code)
+ .uleb128 0x24 # (TAG: DW_TAG_base_type)
+ .byte 0 # DW_children_no
+ .uleb128 0xb # (DW_AT_byte_size)
+ .uleb128 0xb # (DW_FORM_data1)
+ .uleb128 0x3e # (DW_AT_encoding)
+ .uleb128 0xb # (DW_FORM_data1)
+ .uleb128 0x3 # (DW_AT_name)
+ .uleb128 0x8 # (DW_FORM_string)
+ .byte 0
+ .byte 0
+ .uleb128 0xe # (abbrev code)
+ .uleb128 0x15 # (TAG: DW_TAG_subroutine_type)
+ .byte 0x1 # DW_children_yes
+ .uleb128 0x49 # (DW_AT_type)
+ .uleb128 0x13 # (DW_FORM_ref4)
+ .uleb128 0x1 # (DW_AT_sibling)
+ .uleb128 0x13 # (DW_FORM_ref4)
+ .byte 0
+ .byte 0
+ .uleb128 0xf # (abbrev code)
+ .uleb128 0x18 # (TAG: DW_TAG_unspecified_parameters)
+ .byte 0 # DW_children_no
+ .byte 0
+ .byte 0
+ .uleb128 0x10 # (abbrev code)
+ .uleb128 0xf # (TAG: DW_TAG_pointer_type)
+ .byte 0 # DW_children_no
+ .uleb128 0xb # (DW_AT_byte_size)
+ .uleb128 0xb # (DW_FORM_data1)
+ .byte 0
+ .byte 0
+ .uleb128 0x11 # (abbrev code)
+ .uleb128 0x2e # (TAG: DW_TAG_subprogram)
+ .byte 0x1 # DW_children_yes
+ .uleb128 0x3f # (DW_AT_external)
+ .uleb128 0x19 # (DW_FORM_flag_present)
+ .uleb128 0x3 # (DW_AT_name)
+ .uleb128 0xe # (DW_FORM_strp)
+ .uleb128 0x3a # (DW_AT_decl_file)
+ .uleb128 0xb # (DW_FORM_data1)
+ .uleb128 0x3b # (DW_AT_decl_line)
+ .uleb128 0xb # (DW_FORM_data1)
+ .uleb128 0x39 # (DW_AT_decl_column)
+ .uleb128 0xb # (DW_FORM_data1)
+ .uleb128 0x11 # (DW_AT_low_pc)
+ .uleb128 0x1 # (DW_FORM_addr)
+ .uleb128 0x12 # (DW_AT_high_pc)
+ .uleb128 0x7 # (DW_FORM_data8)
+ .uleb128 0x40 # (DW_AT_frame_base)
+ .uleb128 0x18 # (DW_FORM_exprloc)
+ .uleb128 0x7a # (DW_AT_call_all_calls)
+ .uleb128 0x19 # (DW_FORM_flag_present)
+ .byte 0
+ .byte 0
+ .byte 0
+ .section .debug_aranges,"",@progbits
+ .long 0x2c # Length of Address Ranges Info
+ .value 0x2 # DWARF aranges version
+ .long .Ldebug_info0 # Offset of Compilation Unit Info
+ .byte 0x8 # Size of Address
+ .byte 0 # Size of Segment Descriptor
+ .value 0 # Pad to 16 byte boundary
+ .value 0
+ .quad .Ltext0 # Address
+ .quad .Letext0-.Ltext0 # Length
+ .quad 0
+ .quad 0
+ .section .debug_line,"",@progbits
+.Ldebug_line0:
+ .section .debug_str,"MS",@progbits,1
+.LASF7:
+ .string "object"
+.LASF3:
+ .string "__monitor"
+.LASF9:
+ .string ""
+.LASF2:
+ .string "__vptr"
+.LASF5:
+ .string "__param_0"
+.LASF12:
+ .string "_d_callfinalizer"
+.LASF11:
+ .string "_D6object4mainUZ12__anonclass14doitMFZv"
+.LASF4:
+ .string "this"
+.LASF8:
+ .string "main"
+.LASF6:
+ .string "GNU D 14.2.0"
+.LASF10:
+ .string "doit"
+ .section .debug_line_str,"MS",@progbits,1
+.LASF0:
+ .string "namelessclass.d"
+.LASF1:
+ .string "/binutils-gdb/gdb/testsuite/gdb.dlang"
+ .ident "GCC: (GNU) 14.2.0"
+ .section .note.GNU-stack,"",@progbits
--
2.43.0
next reply other threads:[~2025-07-30 11:44 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-07-30 11:42 Iain Buclaw [this message]
2025-07-31 16:52 ` Tom Tromey
2025-07-31 18:25 ` Iain Buclaw
2025-07-31 23:09 ` [PATCH v2] " Iain Buclaw
2025-08-04 17:22 ` Tom Tromey
2025-08-04 17:43 ` Tom Tromey
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20250730114229.1385610-1-ibuclaw@gdcproject.org \
--to=ibuclaw@gdcproject.org \
--cc=gdb-patches@sourceware.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox