|
|
@@ -343,12 +343,15 @@ static int build_int_epilogue(struct jit_ctx *ctx, int dest_reg)
|
|
|
const struct bpf_prog *prog = ctx->skf;
|
|
|
int stack_adjust = ctx->stack_size;
|
|
|
int store_offset = stack_adjust - 8;
|
|
|
+ enum reg_val_type td;
|
|
|
int r0 = MIPS_R_V0;
|
|
|
|
|
|
- if (dest_reg == MIPS_R_RA &&
|
|
|
- get_reg_val_type(ctx, prog->len, BPF_REG_0) == REG_32BIT_ZERO_EX)
|
|
|
+ if (dest_reg == MIPS_R_RA) {
|
|
|
/* Don't let zero extended value escape. */
|
|
|
- emit_instr(ctx, sll, r0, r0, 0);
|
|
|
+ td = get_reg_val_type(ctx, prog->len, BPF_REG_0);
|
|
|
+ if (td == REG_64BIT || td == REG_32BIT_ZERO_EX)
|
|
|
+ emit_instr(ctx, sll, r0, r0, 0);
|
|
|
+ }
|
|
|
|
|
|
if (ctx->flags & EBPF_SAVE_RA) {
|
|
|
emit_instr(ctx, ld, MIPS_R_RA, store_offset, MIPS_R_SP);
|