mirror of https://github.com/golang/go.git
runtime: record full frame size for arm _sfloat2
With preemption, _sfloat2 can show up in stack traces. Write the function prototype in a way that accurately shows the frame size and the fact that it might contain pointers. R=golang-dev, dvyukov CC=golang-dev https://golang.org/cl/11523043
This commit is contained in:
parent
249f807c39
commit
8166b2da19
|
|
@ -576,23 +576,44 @@ done:
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// The ... here is because there are actually 16 registers
|
typedef struct Sfregs Sfregs;
|
||||||
// being passed (r0, r1, and so on) amd we are too lazy
|
|
||||||
// to list them all.
|
// NOTE: These are all recorded as pointers because they are possibly live registers,
|
||||||
|
// and we don't know what they contain. Recording them as pointers should be
|
||||||
|
// safer than not.
|
||||||
|
struct Sfregs
|
||||||
|
{
|
||||||
|
uint32 *r0;
|
||||||
|
uint32 *r1;
|
||||||
|
uint32 *r2;
|
||||||
|
uint32 *r3;
|
||||||
|
uint32 *r4;
|
||||||
|
uint32 *r5;
|
||||||
|
uint32 *r6;
|
||||||
|
uint32 *r7;
|
||||||
|
uint32 *r8;
|
||||||
|
uint32 *r9;
|
||||||
|
uint32 *r10;
|
||||||
|
uint32 *r11;
|
||||||
|
uint32 *r12;
|
||||||
|
uint32 *r13;
|
||||||
|
uint32 cspr;
|
||||||
|
};
|
||||||
|
|
||||||
#pragma textflag 7
|
#pragma textflag 7
|
||||||
uint32*
|
uint32*
|
||||||
runtime·_sfloat2(uint32 *lr, uint32 r0, ...)
|
runtime·_sfloat2(uint32 *lr, Sfregs regs)
|
||||||
{
|
{
|
||||||
uint32 skip;
|
uint32 skip;
|
||||||
|
|
||||||
skip = stepflt(lr, &r0);
|
skip = stepflt(lr, (uint32*)®s.r0);
|
||||||
if(skip == 0) {
|
if(skip == 0) {
|
||||||
runtime·printf("sfloat2 %p %x\n", lr, *lr);
|
runtime·printf("sfloat2 %p %x\n", lr, *lr);
|
||||||
fabort(); // not ok to fail first instruction
|
fabort(); // not ok to fail first instruction
|
||||||
}
|
}
|
||||||
|
|
||||||
lr += skip;
|
lr += skip;
|
||||||
while(skip = stepflt(lr, &r0))
|
while(skip = stepflt(lr, (uint32*)®s.r0))
|
||||||
lr += skip;
|
lr += skip;
|
||||||
return lr;
|
return lr;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue