From b89ad464510e643c23df28bc5c181ad0a16773bf Mon Sep 17 00:00:00 2001 From: Alessandro Arzilli Date: Wed, 24 Jan 2024 18:10:47 +0100 Subject: [PATCH] cmd/link: add DW_AT_go_runtime_type to unsafe.Pointer and fix it for uintptr Adds the DW_AT_go_runtime_type attribute to the debug_info entry for unsafe.Pointer (which is special) and fixes the debug_info entry of uintptr so that its DW_AT_go_runtime_type attribute has the proper class (it was accidentally using DW_CLS_ADDRESS instead of DW_CLS_GO_TYPEREF) Change-Id: I52e18593935fbda9bc425e849f4c7f50e9144ad4 Reviewed-on: https://go-review.googlesource.com/c/go/+/558275 Reviewed-by: Cherry Mui LUCI-TryBot-Result: Go LUCI Reviewed-by: Carlos Amedee --- src/cmd/internal/dwarf/dwarf.go | 1 + src/cmd/link/internal/ld/dwarf.go | 13 +++++++------ 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/cmd/internal/dwarf/dwarf.go b/src/cmd/internal/dwarf/dwarf.go index 3e87e590fb..d10b3731df 100644 --- a/src/cmd/internal/dwarf/dwarf.go +++ b/src/cmd/internal/dwarf/dwarf.go @@ -834,6 +834,7 @@ var abbrevs = [DW_NABRV]dwAbbrev{ DW_CHILDREN_no, []dwAttrForm{ {DW_AT_name, DW_FORM_string}, + {DW_AT_go_runtime_type, DW_FORM_addr}, }, }, diff --git a/src/cmd/link/internal/ld/dwarf.go b/src/cmd/link/internal/ld/dwarf.go index ee7eb266bc..f3296e1728 100644 --- a/src/cmd/link/internal/ld/dwarf.go +++ b/src/cmd/link/internal/ld/dwarf.go @@ -1754,12 +1754,13 @@ func dwarfGenerateDebugInfo(ctxt *Link) { // Some types that must exist to define other ones (uintptr in particular // is needed for array size) - d.mkBuiltinType(ctxt, dwarf.DW_ABRV_BARE_PTRTYPE, "unsafe.Pointer") - die := d.mkBuiltinType(ctxt, dwarf.DW_ABRV_BASETYPE, "uintptr") - newattr(die, dwarf.DW_AT_encoding, dwarf.DW_CLS_CONSTANT, dwarf.DW_ATE_unsigned, 0) - newattr(die, dwarf.DW_AT_byte_size, dwarf.DW_CLS_CONSTANT, int64(d.arch.PtrSize), 0) - newattr(die, dwarf.DW_AT_go_kind, dwarf.DW_CLS_CONSTANT, objabi.KindUintptr, 0) - newattr(die, dwarf.DW_AT_go_runtime_type, dwarf.DW_CLS_ADDRESS, 0, dwSym(d.lookupOrDiag("type:uintptr"))) + unsafeptrDie := d.mkBuiltinType(ctxt, dwarf.DW_ABRV_BARE_PTRTYPE, "unsafe.Pointer") + newattr(unsafeptrDie, dwarf.DW_AT_go_runtime_type, dwarf.DW_CLS_GO_TYPEREF, 0, dwSym(d.lookupOrDiag("type:unsafe.Pointer"))) + uintptrDie := d.mkBuiltinType(ctxt, dwarf.DW_ABRV_BASETYPE, "uintptr") + newattr(uintptrDie, dwarf.DW_AT_encoding, dwarf.DW_CLS_CONSTANT, dwarf.DW_ATE_unsigned, 0) + newattr(uintptrDie, dwarf.DW_AT_byte_size, dwarf.DW_CLS_CONSTANT, int64(d.arch.PtrSize), 0) + newattr(uintptrDie, dwarf.DW_AT_go_kind, dwarf.DW_CLS_CONSTANT, objabi.KindUintptr, 0) + newattr(uintptrDie, dwarf.DW_AT_go_runtime_type, dwarf.DW_CLS_GO_TYPEREF, 0, dwSym(d.lookupOrDiag("type:uintptr"))) d.uintptrInfoSym = d.mustFind("uintptr") -- 2.48.1