]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/ld: generate correct upper bound value for array types.
authorRob Pike <r@golang.org>
Tue, 15 Jul 2014 01:38:05 +0000 (01:38 +0000)
committerRob Pike <r@golang.org>
Tue, 15 Jul 2014 01:38:05 +0000 (01:38 +0000)
LGTM=rsc
R=rsc
CC=golang-codereviews
https://golang.org/cl/115820043

src/cmd/ld/decodesym.c
src/cmd/ld/dwarf.c

index da48d3786e2658328411ebe1238543265b337e0d..1773387f540abcd245b5874f3fafde3886ec6261 100644 (file)
@@ -104,7 +104,7 @@ decodetype_arrayelem(LSym *s)
 vlong
 decodetype_arraylen(LSym *s)
 {
-       return decode_inuxi(s->p + commonsize()+PtrSize, PtrSize);
+       return decode_inuxi(s->p + commonsize()+2*PtrSize, PtrSize);
 }
 
 // Type.PtrType.elem
@@ -120,6 +120,7 @@ decodetype_mapkey(LSym *s)
 {
        return decode_reloc_sym(s, commonsize());       // 0x1c / 0x30
 }
+
 LSym*
 decodetype_mapvalue(LSym *s)
 {
index 3c8b33f6b4339fdbcbcc1dec0bb2193c7a55e002..f3e87816417767eec4c20df7650976420a3f5c01 100644 (file)
@@ -992,7 +992,7 @@ defgotype(LSym *gotype)
                s = decodetype_arrayelem(gotype);
                newrefattr(die, DW_AT_type, defgotype(s));
                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"));
                break;