Commit 79b106ec authored by Rob Pike's avatar Rob Pike

cmd/ld: generate correct upper bound value for array types.

LGTM=rsc
R=rsc
CC=golang-codereviews
https://golang.org/cl/115820043
parent fd7b82b4
...@@ -104,7 +104,7 @@ decodetype_arrayelem(LSym *s) ...@@ -104,7 +104,7 @@ decodetype_arrayelem(LSym *s)
vlong vlong
decodetype_arraylen(LSym *s) decodetype_arraylen(LSym *s)
{ {
return decode_inuxi(s->p + commonsize()+PtrSize, PtrSize); return decode_inuxi(s->p + commonsize()+2*PtrSize, PtrSize);
} }
// Type.PtrType.elem // Type.PtrType.elem
...@@ -120,6 +120,7 @@ decodetype_mapkey(LSym *s) ...@@ -120,6 +120,7 @@ decodetype_mapkey(LSym *s)
{ {
return decode_reloc_sym(s, commonsize()); // 0x1c / 0x30 return decode_reloc_sym(s, commonsize()); // 0x1c / 0x30
} }
LSym* LSym*
decodetype_mapvalue(LSym *s) decodetype_mapvalue(LSym *s)
{ {
......
...@@ -992,7 +992,7 @@ defgotype(LSym *gotype) ...@@ -992,7 +992,7 @@ defgotype(LSym *gotype)
s = decodetype_arrayelem(gotype); s = decodetype_arrayelem(gotype);
newrefattr(die, DW_AT_type, defgotype(s)); newrefattr(die, DW_AT_type, defgotype(s));
fld = newdie(die, DW_ABRV_ARRAYRANGE, "range"); fld = newdie(die, DW_ABRV_ARRAYRANGE, "range");
newattr(fld, DW_AT_upper_bound, DW_CLS_CONSTANT, decodetype_arraylen(gotype), 0); newattr(fld, DW_AT_upper_bound, DW_CLS_CONSTANT, decodetype_arraylen(gotype)-1, 0); // -1: want upper bound, not count.
newrefattr(fld, DW_AT_type, find_or_diag(&dwtypes, "uintptr")); newrefattr(fld, DW_AT_type, find_or_diag(&dwtypes, "uintptr"));
break; break;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment