#include <AlphaLinuxSyscallConv.h>
Onikiri::AlphaLinux::AlphaLinuxSyscallConvに対する継承グラフ
Public メソッド | |
AlphaLinuxSyscallConv (EmulatorUtility::ProcessState *processState) | |
virtual void | Execute (EmulatorUtility::OpEmulationState *opState) |
virtual | ~AlphaLinuxSyscallConv () |
AlphaLinuxSyscallConv.h の 49 行で定義されています。
AlphaLinuxSyscallConv::AlphaLinuxSyscallConv | ( | EmulatorUtility::ProcessState * | processState | ) |
AlphaLinuxSyscallConv::~AlphaLinuxSyscallConv | ( | ) | [virtual] |
void AlphaLinuxSyscallConv::Execute | ( | EmulatorUtility::OpEmulationState * | opState | ) | [virtual] |
Onikiri::EmulatorUtility::Linux64SyscallConvを実装しています。
AlphaLinuxSyscallConv.cpp の 159 行で定義されています。
参照先 argcnt・argtempl・Onikiri::EmulatorUtility::SyscallConvIF::ErrorFlagIndex・Onikiri::EmulatorUtility::Linux64SyscallConv::GetArg()・Onikiri::EmulatorUtility::VirtualSystem::GetInsnTick()・Onikiri::EmulatorUtility::Linux64SyscallConv::GetMemorySystem()・Onikiri::EmulatorUtility::OpEmulationState::GetPC()・Onikiri::EmulatorUtility::Linux64SyscallConv::GetResult()・Onikiri::EmulatorUtility::Linux64SyscallConv::GetVirtualSystem()・name・Onikiri::EmulatorUtility::SyscallConvIF::RetValueIndex・Onikiri::EmulatorUtility::Linux64SyscallConv::SetResult()・Onikiri::EmulatorUtility::OpEmulationState::SetTaken()・Onikiri::EmulatorUtility::OpEmulationState::SetTakenPC()・Onikiri::EmulatorUtility::StrCpyToHost()・Onikiri::EmulatorUtility::Linux64SyscallConv::syscall_access()・Onikiri::EmulatorUtility::Linux64SyscallConv::syscall_brk()・Onikiri::EmulatorUtility::Linux64SyscallConv::syscall_close()・Onikiri::EmulatorUtility::Linux64SyscallConv::syscall_dup()・Onikiri::EmulatorUtility::Linux64SyscallConv::syscall_exit()・Onikiri::EmulatorUtility::Linux64SyscallConv::syscall_fcntl()・Onikiri::EmulatorUtility::Linux64SyscallConv::syscall_fstat64()・Onikiri::EmulatorUtility::Linux64SyscallConv::syscall_ftruncate()・Onikiri::EmulatorUtility::Linux64SyscallConv::syscall_getcwd()・Onikiri::EmulatorUtility::Linux64SyscallConv::syscall_getegid()・Onikiri::EmulatorUtility::Linux64SyscallConv::syscall_geteuid()・Onikiri::EmulatorUtility::Linux64SyscallConv::syscall_getpid()・Onikiri::EmulatorUtility::Linux64SyscallConv::syscall_gettimeofday()・Onikiri::AlphaLinux::SyscallID::syscall_id_access・Onikiri::AlphaLinux::SyscallID::syscall_id_brk・Onikiri::AlphaLinux::SyscallID::syscall_id_close・Onikiri::AlphaLinux::SyscallID::syscall_id_dup・Onikiri::AlphaLinux::SyscallID::syscall_id_exit・Onikiri::AlphaLinux::SyscallID::syscall_id_exit_group・Onikiri::AlphaLinux::SyscallID::syscall_id_fcntl・Onikiri::AlphaLinux::SyscallID::syscall_id_fstat・Onikiri::AlphaLinux::SyscallID::syscall_id_fstat64・Onikiri::AlphaLinux::SyscallID::syscall_id_ftruncate・Onikiri::AlphaLinux::SyscallID::syscall_id_getcwd・Onikiri::AlphaLinux::SyscallID::syscall_id_getrlimit・Onikiri::AlphaLinux::SyscallID::syscall_id_getrusage・Onikiri::AlphaLinux::SyscallID::syscall_id_gettid・Onikiri::AlphaLinux::SyscallID::syscall_id_gettimeofday・Onikiri::AlphaLinux::SyscallID::syscall_id_getxgid・Onikiri::AlphaLinux::SyscallID::syscall_id_getxpid・Onikiri::AlphaLinux::SyscallID::syscall_id_getxuid・Onikiri::AlphaLinux::SyscallID::syscall_id_ioctl・Onikiri::AlphaLinux::SyscallID::syscall_id_kill・Onikiri::AlphaLinux::SyscallID::syscall_id_lseek・Onikiri::AlphaLinux::SyscallID::syscall_id_lstat・Onikiri::AlphaLinux::SyscallID::syscall_id_lstat64・Onikiri::AlphaLinux::SyscallID::syscall_id_mkdir・Onikiri::AlphaLinux::SyscallID::syscall_id_mmap・Onikiri::AlphaLinux::SyscallID::syscall_id_mprotect・Onikiri::AlphaLinux::SyscallID::syscall_id_mremap・Onikiri::AlphaLinux::SyscallID::syscall_id_munmap・Onikiri::AlphaLinux::SyscallID::syscall_id_open・Onikiri::AlphaLinux::SyscallID::syscall_id_osf_getsysinfo・Onikiri::AlphaLinux::SyscallID::syscall_id_osf_setsysinfo・Onikiri::AlphaLinux::SyscallID::syscall_id_osf_sigprocmask・Onikiri::AlphaLinux::SyscallID::syscall_id_read・Onikiri::AlphaLinux::SyscallID::syscall_id_readv・Onikiri::AlphaLinux::SyscallID::syscall_id_rename・Onikiri::AlphaLinux::SyscallID::syscall_id_rt_sigaction・Onikiri::AlphaLinux::SyscallID::syscall_id_setrlimit・Onikiri::AlphaLinux::SyscallID::syscall_id_stat・Onikiri::AlphaLinux::SyscallID::syscall_id_stat64・Onikiri::AlphaLinux::SyscallID::syscall_id_tgkill・Onikiri::AlphaLinux::SyscallID::syscall_id_times・Onikiri::AlphaLinux::SyscallID::syscall_id_truncate・Onikiri::AlphaLinux::SyscallID::syscall_id_uname・Onikiri::AlphaLinux::SyscallID::syscall_id_unlink・Onikiri::AlphaLinux::SyscallID::syscall_id_write・Onikiri::AlphaLinux::SyscallID::syscall_id_writev・Onikiri::EmulatorUtility::Linux64SyscallConv::syscall_ignore()・Onikiri::EmulatorUtility::Linux64SyscallConv::syscall_ioctl()・Onikiri::EmulatorUtility::Linux64SyscallConv::syscall_kill()・Onikiri::EmulatorUtility::Linux64SyscallConv::syscall_lseek()・Onikiri::EmulatorUtility::Linux64SyscallConv::syscall_lstat64()・Onikiri::EmulatorUtility::Linux64SyscallConv::syscall_mkdir()・Onikiri::EmulatorUtility::Linux64SyscallConv::syscall_mmap()・Onikiri::EmulatorUtility::Linux64SyscallConv::syscall_mprotect()・Onikiri::EmulatorUtility::Linux64SyscallConv::syscall_mremap()・Onikiri::EmulatorUtility::Linux64SyscallConv::syscall_munmap()・Onikiri::EmulatorUtility::Linux64SyscallConv::syscall_open()・Onikiri::EmulatorUtility::Linux64SyscallConv::syscall_read()・Onikiri::EmulatorUtility::Linux64SyscallConv::syscall_readv()・Onikiri::EmulatorUtility::Linux64SyscallConv::syscall_rename()・Onikiri::EmulatorUtility::Linux64SyscallConv::syscall_stat64()・Onikiri::EmulatorUtility::Linux64SyscallConv::syscall_tgkill()・Onikiri::EmulatorUtility::Linux64SyscallConv::syscall_times()・Onikiri::EmulatorUtility::Linux64SyscallConv::syscall_truncate()・Onikiri::EmulatorUtility::Linux64SyscallConv::syscall_uname()・Onikiri::EmulatorUtility::Linux64SyscallConv::syscall_unlink()・Onikiri::EmulatorUtility::Linux64SyscallConv::syscall_write()・Onikiri::EmulatorUtility::Linux64SyscallConv::syscall_writev()・syscallNo・THROW_RUNTIME_ERROR.
00160 { 00161 #ifdef SYSCALL_DEBUG 00162 static std::ofstream log("syscall.log", std::ios_base::out); 00163 00164 log << dec << GetVirtualSystem()->GetInsnTick() << "\t"; 00165 log << dec << GetArg(0) << " "; 00166 for (size_t i = 0; i < sizeof(syscallTable)/sizeof(syscallTable[0]); i ++) { 00167 if (syscallTable[i].syscallNo == GetArg(0)) { 00168 log << "\t" << syscallTable[i].name << "("; 00169 int argcnt = syscallTable[i].argcnt; 00170 const char *argtempl = syscallTable[i].argtempl; 00171 for (int j = 1; j <= argcnt; j ++) { 00172 switch (argtempl[j-1]) { 00173 case 's': 00174 { 00175 std::string s = StrCpyToHost( GetMemorySystem(), GetArg(j) ); 00176 log << "0x" << hex << GetArg(j) << dec; 00177 log << "=\"" << s << "\""; 00178 } 00179 break; 00180 case 'n': 00181 log << dec << (s64)GetArg(j); 00182 break; 00183 case 'p': 00184 case 'x': 00185 default: 00186 log << "0x" << hex << GetArg(j) << dec; 00187 break; 00188 } 00189 if (j != argcnt) 00190 log << ", "; 00191 } 00192 log << ")"; 00193 } 00194 } 00195 log << flush; 00196 #endif // #ifdef SYSCALL_DEBUG 00197 00198 opState->SetTakenPC( opState->GetPC()+4 ); 00199 opState->SetTaken(true); 00200 00201 SetResult(false, 0); 00202 switch (GetArg(0)) { 00203 case syscall_id_exit: 00204 case syscall_id_exit_group: 00205 syscall_exit(opState); 00206 break; 00207 case syscall_id_read: 00208 syscall_read(opState); 00209 break; 00210 case syscall_id_write: 00211 syscall_write(opState); 00212 break; 00213 case syscall_id_readv: 00214 syscall_readv(opState); 00215 break; 00216 case syscall_id_writev: 00217 syscall_writev(opState); 00218 break; 00219 case syscall_id_open: 00220 syscall_open(opState); 00221 break; 00222 case syscall_id_close: 00223 syscall_close(opState); 00224 break; 00225 00226 case syscall_id_lseek: 00227 syscall_lseek(opState); 00228 break; 00229 case syscall_id_unlink: 00230 syscall_unlink(opState); 00231 break; 00232 case syscall_id_rename: 00233 syscall_rename(opState); 00234 break; 00235 00236 00237 case syscall_id_mmap: 00238 syscall_mmap(opState); 00239 break; 00240 case syscall_id_mremap: 00241 syscall_mremap(opState); 00242 break; 00243 case syscall_id_munmap: 00244 syscall_munmap(opState); 00245 break; 00246 case syscall_id_mprotect: 00247 syscall_mprotect(opState); 00248 break; 00249 case syscall_id_uname: 00250 syscall_uname(opState); 00251 break; 00252 case syscall_id_fcntl: 00253 syscall_fcntl(opState); 00254 break; 00255 case syscall_id_brk: 00256 syscall_brk(opState); 00257 break; 00258 case syscall_id_osf_getsysinfo: 00259 syscall_getsysinfo(opState); 00260 break; 00261 case syscall_id_osf_setsysinfo: 00262 syscall_setsysinfo(opState); 00263 break; 00264 case syscall_id_getxpid: 00265 case syscall_id_gettid: 00266 syscall_getpid(opState); 00267 break; 00268 //case syscall_id_setuid: 00269 // syscall_setuid(opState); 00270 // break; 00271 //case syscall_id_getuid: 00272 // syscall_getuid(opState); 00273 // break; 00274 //case syscall_id_setgid: 00275 // syscall_setgid(opState); 00276 // break; 00277 case syscall_id_getxgid: // egid -> a4 (!), gid -> a3, error -> v0 タ 00278 syscall_getegid(opState); 00279 // break; 00280 //case syscall_id_seteuid: 00281 // syscall_seteuid(opState); 00282 // break; 00283 case syscall_id_getxuid: // euid -> a4 (!), uid -> a3, error -> v0 タ 00284 syscall_geteuid(opState); 00285 break; 00286 //case syscall_id_setegid: 00287 // syscall_setegid(opState); 00288 // break; 00289 //case syscall_id_getegid: 00290 // syscall_getegid(opState); 00291 // break; 00292 //case syscall_id_setregid: 00293 // syscall_setregid(opState); 00294 // break; 00295 //case syscall_id_setreuid: 00296 // syscall_setreuid(opState); 00297 // break; 00298 case syscall_id_access: 00299 syscall_access(opState); 00300 break; 00301 case syscall_id_stat: 00302 case syscall_id_stat64: 00303 syscall_stat64(opState); 00304 break; 00305 case syscall_id_lstat: 00306 case syscall_id_lstat64: 00307 syscall_lstat64(opState); 00308 break; 00309 case syscall_id_fstat: 00310 case syscall_id_fstat64: 00311 syscall_fstat64(opState); 00312 break; 00313 case syscall_id_ioctl: 00314 syscall_ioctl(opState); 00315 break; 00316 //case syscall_id_readlink: 00317 // syscall_readlink(opState); 00318 // break; 00319 case syscall_id_times: 00320 syscall_times(opState); 00321 break; 00322 case syscall_id_gettimeofday: 00323 syscall_gettimeofday(opState); 00324 break; 00325 00326 case syscall_id_dup: 00327 syscall_dup(opState); 00328 break; 00329 case syscall_id_truncate: 00330 syscall_truncate(opState); 00331 break; 00332 case syscall_id_ftruncate: 00333 syscall_ftruncate(opState); 00334 break; 00335 00336 // signal functions 00337 case syscall_id_rt_sigaction: 00338 case syscall_id_osf_sigprocmask: 00339 syscall_ignore(opState); 00340 break; 00341 case syscall_id_kill: 00342 syscall_kill(opState); 00343 break; 00344 case syscall_id_tgkill: 00345 syscall_tgkill(opState); 00346 break; 00347 00348 // gcc stack ggp 00349 case syscall_id_getrlimit: 00350 syscall_ignore(opState); 00351 break; 00352 case syscall_id_setrlimit: 00353 syscall_ignore(opState); 00354 break; 00355 00356 case syscall_id_mkdir: 00357 syscall_mkdir(opState); 00358 break; 00359 00360 // gcc タsgp 00361 case syscall_id_getrusage: 00362 syscall_ignore(opState); 00363 break; 00364 00365 case syscall_id_getcwd: 00366 syscall_getcwd(opState); 00367 break; 00368 default: 00369 { 00370 stringstream ss; 00371 ss << "unknown syscall " << GetArg(0) << " called"; 00372 THROW_RUNTIME_ERROR(ss.str().c_str()); 00373 } 00374 } 00375 #ifdef SYSCALL_DEBUG 00376 if (GetResult(ErrorFlagIndex)) 00377 log << " = error " << hex << GetResult(RetValueIndex) << std::endl; 00378 else 00379 log << " = " << hex << GetResult(RetValueIndex) << std::endl; 00380 #endif // #ifdef DEBUG 00381 }
関数の呼び出しグラフ: