[docs]classR_AARCH64_PREL32(GenericPCRelativeAddendReloc):""" Relocation Type: 261 Calculation: (S + A - P) """
[docs]classR_AARCH64_JUMP26(ELFReloc):""" Relocation Type: 282 Calculation: (S + A - P) """@propertydefvalue(self):A=self.addendS=self.resolvedby.rebased_addrP=self.rebased_addrreturnS+A-P
[docs]defrelocate(self):ifnotself.resolved:returnFalseifnot((-(2**27))<=self.valueandself.value<(2**27)):log.warning("relocation out of range")instr=self.owner.memory.unpack_word(self.relative_addr,size=4)&0b11111100000000000000000000000000imm=self.value>>2&0b0000_0011_1111_1111_1111_1111_1111_1111# [27:2] of the valueself.owner.memory.pack_word(self.relative_addr,instr|imm,size=4)returnTrue
[docs]classR_AARCH64_CALL26(ELFReloc):""" Relocation Type: 283 Calculation: (S + A - P) """@propertydefvalue(self):A=self.addendS=self.resolvedby.rebased_addrP=self.rebased_addrreturnS+A-P
[docs]defrelocate(self):ifnotself.resolved:returnFalseifnot((-(2**27))<=self.valueandself.value<(2**27)):log.warning("relocation out of range")instr=self.owner.memory.unpack_word(self.relative_addr,size=4)&0b11111100000000000000000000000000imm=self.value>>2&0b0000_0011_1111_1111_1111_1111_1111_1111# [27:2] of the valueself.owner.memory.pack_word(self.relative_addr,instr|imm,size=4)returnTrue
[docs]defrelocate(self):ifnotself.resolved:returnFalseifnot((-(2**32))<=self.valueandself.value<(2**32)):log.warning("relocation out of range")instr=self.owner.memory.unpack_word(self.relative_addr,size=4)&0b10011111000000000000000000011111imm=self.value>>12&0x1FFFFFimmlo=imm&0b11immhi=imm>>2self.owner.memory.pack_word(self.relative_addr,instr|(immhi<<5)|(immlo<<29),size=4)returnTrue
[docs]classR_AARCH64_ADD_ABS_LO12_NC(ELFReloc):""" Relocation Type: 275 Calculation: (S + A) """@propertydefvalue(self):A=self.addendS=self.resolvedby.rebased_addrreturnS+A