Commit cbf97d91 authored by Russ Cox's avatar Russ Cox

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
parent da8cf543
......@@ -471,6 +471,7 @@ struct LinkArch
int D_PARAM;
int D_SCONST;
int D_STATIC;
int D_OREG;
int ACALL;
int ADATA;
......
......@@ -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,
......
......@@ -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);
}
}
......
......@@ -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)
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