mirror of
https://github.com/boykopovar/AnyPS5.git
synced 2026-11-05 13:20:11 +00:00
When the instruction after an rsp operand that cannot move in place is a branch, a rip-relative instruction or a freeing add, the operand's stub could stay shorter than a jump and the leaf was skipped. The stub now also takes the contiguous sequential instructions before the operand, moving their own rsp operands by the shift; the branch-target, site and existing-stub checks run on the widened range, and the instructions it covers leave the in-place moves. zlib's inflate_fast, whose only operand left is a 4-byte cmp %rdi,(%rsp) between an add and a jne, frames this way. The backward extension is tibzejoker's, from their comment on boykopovar/AnyPS5#5640: with it, 243 of Grand Theft Auto V's 991 red-zone leaves frame (240 before), inflate_fast among them, and one leaf is left with no room for a stub. red_zone_framer's leaf whose operand at rsp sits before a rip-relative load now frames; the one before an exit stays refused, its forward extension reaching the exit's pops. Co-authored-by: tibzejoker <[email protected]>