File tree Expand file tree Collapse file tree 1 file changed +6
-3
lines changed Expand file tree Collapse file tree 1 file changed +6
-3
lines changed Original file line number Diff line number Diff line change @@ -52,6 +52,8 @@ class MacroAssembler: public Assembler {
52
52
void align (int modulus, int extra_offset = 0 );
53
53
54
54
// Stack frame creation/removal
55
+ // Note that SP must be updated to the right place before saving/restoring RA and FP
56
+ // because signal based thread suspend/resume could happen asynchronously.
55
57
void enter () {
56
58
addi (sp, sp, - 2 * wordSize);
57
59
sd (ra, Address (sp, wordSize));
@@ -60,9 +62,10 @@ class MacroAssembler: public Assembler {
60
62
}
61
63
62
64
void leave () {
63
- mv (sp, fp);
64
- ld (fp, Address (sp, -2 * wordSize));
65
- ld (ra, Address (sp, -wordSize));
65
+ addi (sp, fp, - 2 * wordSize);
66
+ ld (fp, Address (sp));
67
+ ld (ra, Address (sp, wordSize));
68
+ addi (sp, sp, 2 * wordSize);
66
69
}
67
70
68
71
You can’t perform that action at this time.
0 commit comments