クラス Onikiri::AlphaLinux::AlphaLinuxSyscallConv

#include <AlphaLinuxSyscallConv.h>

Onikiri::AlphaLinux::AlphaLinuxSyscallConvに対する継承グラフ

Inheritance graph
[凡例]
Onikiri::AlphaLinux::AlphaLinuxSyscallConvのコラボレーション図

Collaboration graph
[凡例]
すべてのメンバ一覧

Public メソッド

 AlphaLinuxSyscallConv (EmulatorUtility::ProcessState *processState)
virtual void Execute (EmulatorUtility::OpEmulationState *opState)
virtual ~AlphaLinuxSyscallConv ()

説明

AlphaLinuxSyscallConv.h49 行で定義されています。


コンストラクタとデストラクタ

AlphaLinuxSyscallConv::AlphaLinuxSyscallConv ( EmulatorUtility::ProcessState processState  ) 

AlphaLinuxSyscallConv.cpp61 行で定義されています。

00061                                                                        : Linux64SyscallConv(processState)
00062 {
00063 }

AlphaLinuxSyscallConv::~AlphaLinuxSyscallConv (  )  [virtual]

AlphaLinuxSyscallConv.cpp65 行で定義されています。

00066 {
00067 }


関数

void AlphaLinuxSyscallConv::Execute ( EmulatorUtility::OpEmulationState opState  )  [virtual]

Onikiri::EmulatorUtility::Linux64SyscallConvを実装しています。

AlphaLinuxSyscallConv.cpp159 行で定義されています。

参照先 argcntargtemplOnikiri::EmulatorUtility::SyscallConvIF::ErrorFlagIndexOnikiri::EmulatorUtility::Linux64SyscallConv::GetArg()Onikiri::EmulatorUtility::VirtualSystem::GetInsnTick()Onikiri::EmulatorUtility::Linux64SyscallConv::GetMemorySystem()Onikiri::EmulatorUtility::OpEmulationState::GetPC()Onikiri::EmulatorUtility::Linux64SyscallConv::GetResult()Onikiri::EmulatorUtility::Linux64SyscallConv::GetVirtualSystem()nameOnikiri::EmulatorUtility::SyscallConvIF::RetValueIndexOnikiri::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_accessOnikiri::AlphaLinux::SyscallID::syscall_id_brkOnikiri::AlphaLinux::SyscallID::syscall_id_closeOnikiri::AlphaLinux::SyscallID::syscall_id_dupOnikiri::AlphaLinux::SyscallID::syscall_id_exitOnikiri::AlphaLinux::SyscallID::syscall_id_exit_groupOnikiri::AlphaLinux::SyscallID::syscall_id_fcntlOnikiri::AlphaLinux::SyscallID::syscall_id_fstatOnikiri::AlphaLinux::SyscallID::syscall_id_fstat64Onikiri::AlphaLinux::SyscallID::syscall_id_ftruncateOnikiri::AlphaLinux::SyscallID::syscall_id_getcwdOnikiri::AlphaLinux::SyscallID::syscall_id_getrlimitOnikiri::AlphaLinux::SyscallID::syscall_id_getrusageOnikiri::AlphaLinux::SyscallID::syscall_id_gettidOnikiri::AlphaLinux::SyscallID::syscall_id_gettimeofdayOnikiri::AlphaLinux::SyscallID::syscall_id_getxgidOnikiri::AlphaLinux::SyscallID::syscall_id_getxpidOnikiri::AlphaLinux::SyscallID::syscall_id_getxuidOnikiri::AlphaLinux::SyscallID::syscall_id_ioctlOnikiri::AlphaLinux::SyscallID::syscall_id_killOnikiri::AlphaLinux::SyscallID::syscall_id_lseekOnikiri::AlphaLinux::SyscallID::syscall_id_lstatOnikiri::AlphaLinux::SyscallID::syscall_id_lstat64Onikiri::AlphaLinux::SyscallID::syscall_id_mkdirOnikiri::AlphaLinux::SyscallID::syscall_id_mmapOnikiri::AlphaLinux::SyscallID::syscall_id_mprotectOnikiri::AlphaLinux::SyscallID::syscall_id_mremapOnikiri::AlphaLinux::SyscallID::syscall_id_munmapOnikiri::AlphaLinux::SyscallID::syscall_id_openOnikiri::AlphaLinux::SyscallID::syscall_id_osf_getsysinfoOnikiri::AlphaLinux::SyscallID::syscall_id_osf_setsysinfoOnikiri::AlphaLinux::SyscallID::syscall_id_osf_sigprocmaskOnikiri::AlphaLinux::SyscallID::syscall_id_readOnikiri::AlphaLinux::SyscallID::syscall_id_readvOnikiri::AlphaLinux::SyscallID::syscall_id_renameOnikiri::AlphaLinux::SyscallID::syscall_id_rt_sigactionOnikiri::AlphaLinux::SyscallID::syscall_id_setrlimitOnikiri::AlphaLinux::SyscallID::syscall_id_statOnikiri::AlphaLinux::SyscallID::syscall_id_stat64Onikiri::AlphaLinux::SyscallID::syscall_id_tgkillOnikiri::AlphaLinux::SyscallID::syscall_id_timesOnikiri::AlphaLinux::SyscallID::syscall_id_truncateOnikiri::AlphaLinux::SyscallID::syscall_id_unameOnikiri::AlphaLinux::SyscallID::syscall_id_unlinkOnikiri::AlphaLinux::SyscallID::syscall_id_writeOnikiri::AlphaLinux::SyscallID::syscall_id_writevOnikiri::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()syscallNoTHROW_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 }

関数の呼び出しグラフ:


このクラスの説明は次のファイルから生成されました:
Onikiri2に対してTue Jun 18 15:24:30 2013に生成されました。  doxygen 1.4.7