================ @@ -680,11 +682,19 @@ int CompactUnwinder_arm64<A>::stepWithCompactEncodingFrame( savedRegisterLoc -= 8; } - uint64_t fp = registers.getFP(); + Registers_arm64::reg_t fp = registers.getFP(); // fp points to old fp registers.setFP(addressSpace.get64(fp)); - // old sp is fp less saved fp and lr + + // old sp is fp less saved fp and lr. Set this before FP & LR because in + // arm64e it's the discriminator used for those registers. registers.setSP(fp + 16); + + Registers_arm64::reg_t oldfp = addressSpace.get64(fp); + + // fp points to old fp + registers.setFP(oldfp); ---------------- ojhunt wrote:
So this is an area I'm unsure of - I thought the addressSpace abstraction was for cross process. ... something? But I don't know if that was just a hypothetical future concept or is actually used somewhere? It's also possible that this is just left over from a bunch of dead code I excised while preparing this https://github.com/llvm/llvm-project/pull/143230 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits