From: Dmitriy Vyukov Date: Tue, 29 Jul 2014 07:22:57 +0000 (+0400) Subject: cmd/ld: better diagnostics on unaligned symbols X-Git-Tag: go1.4beta1~1000 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=9333fe8e92971654d0f96d137d46a019cde836e3;p=gostls13.git cmd/ld: better diagnostics on unaligned symbols Want to see why builders are failing. Then decide whether to rollback or fix. TBR=khr R=khr CC=golang-codereviews https://golang.org/cl/114510043 --- diff --git a/src/cmd/ld/data.c b/src/cmd/ld/data.c index e8e697f15e..96eadd479a 100644 --- a/src/cmd/ld/data.c +++ b/src/cmd/ld/data.c @@ -815,7 +815,8 @@ proggenaddsym(ProgGen *g, LSym *s) if(s->gotype == nil && s->size >= PtrSize) { // conservative scan if((s->size%PtrSize) || (g->pos%PtrSize)) - diag("proggenaddsym: unaligned symbol"); + diag("proggenaddsym: unaligned conservative symbol %s: size=%lld pos=%lld", + s->name, s->size, g->pos); size = (s->size+PtrSize-1)/PtrSize*PtrSize; if(size < 32*PtrSize) { // Emit small symbols as data. @@ -840,7 +841,8 @@ proggenaddsym(ProgGen *g, LSym *s) } else { // Emit large symbols as array. if((s->size%PtrSize) || (g->pos%PtrSize)) - diag("proggenaddsym: unaligned symbol"); + diag("proggenaddsym: unaligned noscan symbol %s: size=%lld pos=%lld", + s->name, s->size, g->pos); proggenarray(g, s->size/PtrSize); proggendata(g, BitsScalar); proggenarrayend(g); @@ -852,7 +854,8 @@ proggenaddsym(ProgGen *g, LSym *s) gcprog = decodetype_gcprog(s->gotype); size = decodetype_size(s->gotype); if((size%PtrSize) || (g->pos%PtrSize)) - diag("proggenaddsym: unaligned symbol"); + diag("proggenaddsym: unaligned gcprog symbol %s: size=%lld pos=%lld", + s->name, s->size, g->pos); for(i = 0; i < gcprog->np-1; i++) proggenemit(g, gcprog->p[i]); g->pos = s->value + size; @@ -861,7 +864,8 @@ proggenaddsym(ProgGen *g, LSym *s) mask = decodetype_gcmask(s->gotype); size = decodetype_size(s->gotype); if((size%PtrSize) || (g->pos%PtrSize)) - diag("proggenaddsym: unaligned symbol"); + diag("proggenaddsym: unaligned gcmask symbol %s: size=%lld pos=%lld", + s->name, s->size, g->pos); for(i = 0; i < size; i += PtrSize) proggendata(g, (mask[i/PtrSize/2]>>((i/PtrSize%2)*4+2))&BitsMask); g->pos = s->value + size;