implement the Tcc instruction to call syscall.
arch/sparc/isa/bitfields.isa: the trap field is 7:0 arch/sparc/isa/decoder.isa: add code to in the Tcc instruction to call a syscall arch/sparc/isa_traits.hh: We need the syscall num register --HG-- extra : convert_revision : 0861ec1dd8c7cac57765b22bc408fdffbe63fe2a
This commit is contained in:
parent
97e424982a
commit
7359e2df01
3 changed files with 18 additions and 3 deletions
|
@ -46,5 +46,5 @@ def bitfield SHCNT64 <5:0>;
|
||||||
def bitfield SIMM10 <9:0>;
|
def bitfield SIMM10 <9:0>;
|
||||||
def bitfield SIMM11 <10:0>;
|
def bitfield SIMM11 <10:0>;
|
||||||
def bitfield SIMM13 <12:0>;
|
def bitfield SIMM13 <12:0>;
|
||||||
def bitfield SW_TRAP <6:0>;
|
def bitfield SW_TRAP <7:0>;
|
||||||
def bitfield X <12>;
|
def bitfield X <12>;
|
||||||
|
|
|
@ -532,12 +532,26 @@ decode OP default Trap::unknown({{IllegalInstruction}}) {
|
||||||
case 1: case 3:
|
case 1: case 3:
|
||||||
throw illegal_instruction;
|
throw illegal_instruction;
|
||||||
case 0:
|
case 0:
|
||||||
|
#if FULL_SYSTEM
|
||||||
|
throw trap_instruction;
|
||||||
|
#else
|
||||||
if(passesCondition(xc->regs.MiscRegs.ccrFields.icc, machInst<25:28>))
|
if(passesCondition(xc->regs.MiscRegs.ccrFields.icc, machInst<25:28>))
|
||||||
throw trap_instruction;
|
// At least glibc only uses trap 0,
|
||||||
|
// solaris/sunos may use others
|
||||||
|
assert((I ? Rs1 + Rs2 : Rs1 + SW_TRAP) == 0);
|
||||||
|
xc->syscall();
|
||||||
|
#endif
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
|
#if FULL_SYSTEM
|
||||||
|
throw trap_instruction;
|
||||||
|
#else
|
||||||
if(passesCondition(xc->regs.MiscRegs.ccrFields.xcc, machInst<25:28>))
|
if(passesCondition(xc->regs.MiscRegs.ccrFields.xcc, machInst<25:28>))
|
||||||
throw trap_instruction;
|
// At least glibc only uses trap 0,
|
||||||
|
// solaris/sunos may use others
|
||||||
|
assert((I ? Rs1 + Rs2 : Rs1 + SW_TRAP) == 0);
|
||||||
|
xc->syscall();
|
||||||
|
#endif
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}}); //Tcc
|
}}); //Tcc
|
||||||
|
|
|
@ -106,6 +106,7 @@ namespace SparcISA
|
||||||
const int ArgumentReg3 = 11;
|
const int ArgumentReg3 = 11;
|
||||||
const int ArgumentReg4 = 12;
|
const int ArgumentReg4 = 12;
|
||||||
const int ArgumentReg5 = 13;
|
const int ArgumentReg5 = 13;
|
||||||
|
const int SyscallNumReg = 1;
|
||||||
// Some OS syscall sue a second register (o1) to return a second value
|
// Some OS syscall sue a second register (o1) to return a second value
|
||||||
const int SyscallPseudoReturnReg = ArgumentReg1;
|
const int SyscallPseudoReturnReg = ArgumentReg1;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue