1
0
mirror of https://github.com/golang/go synced 2024-11-11 20:01:37 -07:00

liblink, sync/atomic: fix arm build

The liblink code to insert the FUNCDATA for a stack map
from the Go prototype was not correct for ARM
(different data structure layout).

Also, sync/atomic was missing some Go prototypes
for ARM-specific functions.

TBR=r
CC=golang-codereviews
https://golang.org/cl/143160045
This commit is contained in:
Russ Cox 2014-09-16 20:53:38 -04:00
parent da8cf5438a
commit cbf97d9103
4 changed files with 14 additions and 1 deletions

View File

@ -471,6 +471,7 @@ struct LinkArch
int D_PARAM;
int D_SCONST;
int D_STATIC;
int D_OREG;
int ACALL;
int ADATA;

View File

@ -1061,6 +1061,7 @@ LinkArch linkarm = {
.D_PARAM = D_PARAM,
.D_SCONST = D_SCONST,
.D_STATIC = D_STATIC,
.D_OREG = D_OREG,
.ACALL = ABL,
.ADATA = ADATA,

View File

@ -268,7 +268,12 @@ writeobj(Link *ctxt, Biobuf *b)
p->as = ctxt->arch->AFUNCDATA;
p->from.type = ctxt->arch->D_CONST;
p->from.offset = FUNCDATA_ArgsPointerMaps;
p->to.type = ctxt->arch->D_EXTERN;
if(ctxt->arch->thechar == '6' || ctxt->arch->thechar == '8')
p->to.type = ctxt->arch->D_EXTERN;
else {
p->to.type = ctxt->arch->D_OREG;
p->to.name = ctxt->arch->D_EXTERN;
}
p->to.sym = linklookup(ctxt, smprint("%s.args_stackmap", s->name), s->version);
}
}

View File

@ -44,3 +44,9 @@ func swapUint64(addr *uint64, new uint64) (old uint64) {
}
return
}
// Additional ARM-specific assembly routines.
// Declaration here to give assembly routines correct stack maps for arguments.
func armCompareAndSwapUint32(addr *uint32, old, new uint32) (swapped bool)
func armCompareAndSwapUint64(addr *uint64, old, new uint64) (swapped bool)
func generalCAS64(addr *uint64, old, new uint64) (swapped bool)