Skip to content

Commit

Permalink
Merge pull request angr#1199 from mephi42/master
Browse files Browse the repository at this point in the history
Add s390x calling conventions
  • Loading branch information
rhelmot authored Sep 13, 2018
2 parents c545bd5 + 99bdbbf commit 934823f
Showing 1 changed file with 32 additions and 1 deletion.
33 changes: 32 additions & 1 deletion angr/calling_conventions.py
Original file line number Diff line number Diff line change
Expand Up @@ -1144,6 +1144,29 @@ def _match(arch, args, sp_delta): # pylint: disable=unused-argument
def __repr__(self):
return "<SimCCUnknown - %s %s sp_delta=%d>" % (self.arch.name, self.args, self.sp_delta)

class SimCCS390X(SimCC):
ARG_REGS = ['r2', 'r3', 'r4', 'r5', 'r6']
FP_ARG_REGS = ['f0', 'f2', 'f4', 'f6']
STACKARG_SP_BUFF = 0xa0
RETURN_ADDR = SimRegArg('r14', 8)
RETURN_VAL = SimRegArg('r2', 8)
ARCH = archinfo.ArchS390X

class SimCCS390XLinuxSyscall(SimCC):
ARG_REGS = ['r2', 'r3', 'r4', 'r5', 'r6', 'r7']
FP_ARG_REGS = []
RETURN_VAL = SimRegArg('r2', 8)
RETURN_ADDR = SimRegArg('ip_at_syscall', 8)
ARCH = archinfo.ArchS390X

@classmethod
def _match(cls, arch, args, sp_delta): # pylint: disable=unused-argument
# never appears anywhere except syscalls
return False

@staticmethod
def syscall_num(state):
return state.regs.r1

CC = {
'AMD64': [
Expand Down Expand Up @@ -1173,6 +1196,9 @@ def __repr__(self):
'AARCH64': [
SimCCAArch64,
],
'S390X': [
SimCCS390X,
],
}


Expand All @@ -1187,7 +1213,8 @@ def __repr__(self):
'PPC64': SimCCPowerPC64,
'AARCH64': SimCCAArch64,
'AVR': SimCCUnknown,
'MSP': SimCCUnknown
'MSP': SimCCUnknown,
'S390X': SimCCS390X,
}


Expand Down Expand Up @@ -1234,6 +1261,10 @@ def register_default_cc(arch, cc):
'default': SimCCPowerPC64LinuxSyscall,
'Linux': SimCCPowerPC64LinuxSyscall,
},
'S390X': {
'default': SimCCS390XLinuxSyscall,
'Linux': SimCCS390XLinuxSyscall,
},
}


Expand Down

0 comments on commit 934823f

Please sign in to comment.