|
@@ -384,13 +384,16 @@ static void bpf_jit_prologue(struct bpf_jit *jit)
|
|
}
|
|
}
|
|
/* Setup stack and backchain */
|
|
/* Setup stack and backchain */
|
|
if (jit->seen & SEEN_STACK) {
|
|
if (jit->seen & SEEN_STACK) {
|
|
- /* lgr %bfp,%r15 (BPF frame pointer) */
|
|
|
|
- EMIT4(0xb9040000, BPF_REG_FP, REG_15);
|
|
|
|
|
|
+ if (jit->seen & SEEN_FUNC)
|
|
|
|
+ /* lgr %w1,%r15 (backchain) */
|
|
|
|
+ EMIT4(0xb9040000, REG_W1, REG_15);
|
|
|
|
+ /* la %bfp,STK_160_UNUSED(%r15) (BPF frame pointer) */
|
|
|
|
+ EMIT4_DISP(0x41000000, BPF_REG_FP, REG_15, STK_160_UNUSED);
|
|
/* aghi %r15,-STK_OFF */
|
|
/* aghi %r15,-STK_OFF */
|
|
EMIT4_IMM(0xa70b0000, REG_15, -STK_OFF);
|
|
EMIT4_IMM(0xa70b0000, REG_15, -STK_OFF);
|
|
if (jit->seen & SEEN_FUNC)
|
|
if (jit->seen & SEEN_FUNC)
|
|
- /* stg %bfp,152(%r15) (backchain) */
|
|
|
|
- EMIT6_DISP_LH(0xe3000000, 0x0024, BPF_REG_FP, REG_0,
|
|
|
|
|
|
+ /* stg %w1,152(%r15) (backchain) */
|
|
|
|
+ EMIT6_DISP_LH(0xe3000000, 0x0024, REG_W1, REG_0,
|
|
REG_15, 152);
|
|
REG_15, 152);
|
|
}
|
|
}
|
|
/*
|
|
/*
|