@@ -286,13 +286,16 @@ func (d *dwctxt) newdie(parent *dwarf.DWDie, abbrev int, name string) *dwarf.DWD
286
286
die .Link = parent .Child
287
287
parent .Child = die
288
288
289
- newattr (die , dwarf .DW_AT_name , dwarf .DW_CLS_STRING , int64 (len (name )), name )
290
-
291
289
// Sanity check: all DIEs created in the linker should be named.
292
290
if name == "" {
293
291
panic ("nameless DWARF DIE" )
294
292
}
295
293
294
+ // for constant string types, we emit the nams later since it didn't use symbol name as DW_AT_name
295
+ if abbrev != dwarf .DW_ABRV_CONSTANT_STRINGTYPE {
296
+ newattr (die , dwarf .DW_AT_name , dwarf .DW_CLS_STRING , int64 (len (name )), name )
297
+ }
298
+
296
299
var st sym.SymKind
297
300
switch abbrev {
298
301
case dwarf .DW_ABRV_FUNCTYPEPARAM , dwarf .DW_ABRV_FUNCTYPEOUTPARAM , dwarf .DW_ABRV_DOTDOTDOT , dwarf .DW_ABRV_STRUCTFIELD , dwarf .DW_ABRV_ARRAYRANGE :
@@ -1196,7 +1199,9 @@ func (d *dwctxt) genConstStringType(name string) {
1196
1199
if err != nil {
1197
1200
log .Fatalf ("error: invalid constant string type name %q: %v" , name , err )
1198
1201
}
1202
+ atname := name [len (dwarf .ConstStringInfoPrefix ):i ]
1199
1203
die := d .newdie (& dwtypes , dwarf .DW_ABRV_CONSTANT_STRINGTYPE , name )
1204
+ newattr (die , dwarf .DW_AT_name , dwarf .DW_CLS_STRING , int64 (len (atname )), atname )
1200
1205
newattr (die , dwarf .DW_AT_byte_size , dwarf .DW_CLS_CONSTANT , size , 0 )
1201
1206
}
1202
1207
0 commit comments