summaryrefslogtreecommitdiff
path: root/src/cmd/ld/dwarf.c
diff options
context:
space:
mode:
authorTianon Gravi <admwiggin@gmail.com>2015-01-15 22:13:36 -0700
committerTianon Gravi <admwiggin@gmail.com>2015-01-15 22:13:36 -0700
commit90ad8a7e5881be7834909c649f994b6b5244c965 (patch)
treebcaa847451ac35e5ffd9bbf4bff95b0d5859da7f /src/cmd/ld/dwarf.c
parentf154da9e12608589e8d5f0508f908a0c3e88a1bb (diff)
downloadgolang-90ad8a7e5881be7834909c649f994b6b5244c965.tar.gz
Imported Upstream version 1.4.1upstream/1.4.1
Diffstat (limited to 'src/cmd/ld/dwarf.c')
-rw-r--r--src/cmd/ld/dwarf.c15
1 files changed, 11 insertions, 4 deletions
diff --git a/src/cmd/ld/dwarf.c b/src/cmd/ld/dwarf.c
index a3ba52325..dfe515c3c 100644
--- a/src/cmd/ld/dwarf.c
+++ b/src/cmd/ld/dwarf.c
@@ -1281,12 +1281,19 @@ synthesizemaptypes(DWDie *die)
fld = newdie(dwhb, DW_ABRV_STRUCTFIELD, "keys");
newrefattr(fld, DW_AT_type, dwhk);
- newmemberoffsetattr(fld, BucketSize + PtrSize);
+ newmemberoffsetattr(fld, BucketSize);
fld = newdie(dwhb, DW_ABRV_STRUCTFIELD, "values");
newrefattr(fld, DW_AT_type, dwhv);
- newmemberoffsetattr(fld, BucketSize + PtrSize + BucketSize * keysize);
- newattr(dwhb, DW_AT_byte_size, DW_CLS_CONSTANT, BucketSize + PtrSize + BucketSize * keysize + BucketSize * valsize, 0);
- substitutetype(dwhb, "overflow", defptrto(dwhb));
+ newmemberoffsetattr(fld, BucketSize + BucketSize * keysize);
+ fld = newdie(dwhb, DW_ABRV_STRUCTFIELD, "overflow");
+ newrefattr(fld, DW_AT_type, defptrto(dwhb));
+ newmemberoffsetattr(fld, BucketSize + BucketSize * (keysize + valsize));
+ if(RegSize > PtrSize) {
+ fld = newdie(dwhb, DW_ABRV_STRUCTFIELD, "pad");
+ newrefattr(fld, DW_AT_type, find_or_diag(&dwtypes, "uintptr"));
+ newmemberoffsetattr(fld, BucketSize + BucketSize * (keysize + valsize) + PtrSize);
+ }
+ newattr(dwhb, DW_AT_byte_size, DW_CLS_CONSTANT, BucketSize + BucketSize * keysize + BucketSize * valsize + RegSize, 0);
// Construct hash<K,V>
dwh = newdie(&dwtypes, DW_ABRV_STRUCTTYPE,