クラス Onikiri::PPC64Linux::PPC64LinuxSyscallConv

#include <PPC64LinuxSyscallConv.h>

Onikiri::PPC64Linux::PPC64LinuxSyscallConvに対する継承グラフ

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

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

Public メソッド

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

Protected メソッド

virtual int Get_CLK_TCK ()
virtual int Get_MAP_ANONYMOUS ()
virtual int Get_MREMAP_MAYMOVE ()
virtual u32 OpenFlagTargetToHost (u32 flag)

説明

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


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

PPC64LinuxSyscallConv::PPC64LinuxSyscallConv ( EmulatorUtility::ProcessState processState  ) 

PPC64LinuxSyscallConv.cpp57 行で定義されています。

00057                                                                        : Linux64SyscallConv(processState)
00058 {
00059 }

PPC64LinuxSyscallConv::~PPC64LinuxSyscallConv (  )  [virtual]

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

00062 {
00063 }


関数

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

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

PPC64LinuxSyscallConv.cpp151 行で定義されています。

参照先 argcntargtemplOnikiri::EmulatorUtility::SyscallConvIF::ErrorFlagIndexOnikiri::EmulatorUtility::Linux64SyscallConv::GetArg()Onikiri::EmulatorUtility::Linux64SyscallConv::GetMemorySystem()Onikiri::EmulatorUtility::OpEmulationState::GetPC()Onikiri::EmulatorUtility::Linux64SyscallConv::GetResult()nameOnikiri::EmulatorUtility::SyscallConvIF::RetValueIndexOnikiri::EmulatorUtility::Linux64SyscallConv::SetResult()Onikiri::EmulatorUtility::OpEmulationState::SetTaken()Onikiri::EmulatorUtility::OpEmulationState::SetTakenPC()Onikiri::EmulatorUtility::StrCpyToHost()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_getgid()Onikiri::EmulatorUtility::Linux64SyscallConv::syscall_getpid()Onikiri::EmulatorUtility::Linux64SyscallConv::syscall_gettimeofday()Onikiri::EmulatorUtility::Linux64SyscallConv::syscall_getuid()Onikiri::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_ftruncateOnikiri::AlphaLinux::SyscallID::syscall_id_getcwdOnikiri::PPC64Linux::SyscallID::syscall_id_getegidOnikiri::PPC64Linux::SyscallID::syscall_id_geteuidOnikiri::PPC64Linux::SyscallID::syscall_id_getgidOnikiri::PPC64Linux::SyscallID::syscall_id_getpidOnikiri::AlphaLinux::SyscallID::syscall_id_getrlimitOnikiri::AlphaLinux::SyscallID::syscall_id_getrusageOnikiri::AlphaLinux::SyscallID::syscall_id_gettidOnikiri::AlphaLinux::SyscallID::syscall_id_gettimeofdayOnikiri::PPC64Linux::SyscallID::syscall_id_getuidOnikiri::AlphaLinux::SyscallID::syscall_id_ioctlOnikiri::AlphaLinux::SyscallID::syscall_id_killOnikiri::AlphaLinux::SyscallID::syscall_id_lseekOnikiri::AlphaLinux::SyscallID::syscall_id_lstatOnikiri::AlphaLinux::SyscallID::syscall_id_mmapOnikiri::AlphaLinux::SyscallID::syscall_id_mremapOnikiri::AlphaLinux::SyscallID::syscall_id_munmapOnikiri::AlphaLinux::SyscallID::syscall_id_openOnikiri::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_rt_sigprocmaskOnikiri::AlphaLinux::SyscallID::syscall_id_setrlimitOnikiri::AlphaLinux::SyscallID::syscall_id_statOnikiri::AlphaLinux::SyscallID::syscall_id_tgkillOnikiri::PPC64Linux::SyscallID::syscall_id_timeOnikiri::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_mmap()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_time()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.

00152 {
00153 #ifdef SYSCALL_DEBUG 
00154     static std::ofstream log("syscall.log", std::ios_base::out | std::ios_base::trunc);
00155 
00156     log << dec << GetArg(0) << " ";
00157     for (size_t i = 0; i < sizeof(syscallTable)/sizeof(syscallTable[0]); i ++) {
00158         if (syscallTable[i].syscallNo == GetArg(0)) {
00159             log << syscallTable[i].name << "(";
00160             int argcnt = syscallTable[i].argcnt;
00161             const char *argtempl = syscallTable[i].argtempl;
00162             for (int j = 1; j <= argcnt; j ++) {
00163                 switch (argtempl[j-1]) {
00164                 case 's':
00165                     {
00166                         std::string s = StrCpyToHost( GetMemorySystem(), GetArg(j) );
00167                         log << "0x" << hex << GetArg(j) << dec;
00168                         log << "=\"" << s << "\"";
00169                     }
00170                     break;
00171                 case 'n':
00172                     log << dec << (s64)GetArg(j);
00173                     break;
00174                 case 'p':
00175                 case 'x':
00176                 default:
00177                     log << "0x" << hex << GetArg(j) << dec;
00178                     break;
00179                 }
00180                 if (j != argcnt)
00181                     log << ", ";
00182             }
00183             log << ")";
00184         }
00185     }
00186     log << flush;
00187 #endif // #ifdef SYSCALL_DEBUG
00188 
00189     opState->SetTakenPC( opState->GetPC()+4 );
00190     opState->SetTaken(true);
00191 
00192     SetResult(false, 0);
00193     switch (GetArg(0)) {
00194     case syscall_id_exit:
00195     case syscall_id_exit_group:
00196         syscall_exit(opState);
00197         break;
00198     case syscall_id_read:
00199         syscall_read(opState);
00200         break;
00201     case syscall_id_write:
00202         syscall_write(opState);
00203         break;
00204     case syscall_id_readv:
00205         syscall_readv(opState);
00206         break;
00207     case syscall_id_writev:
00208         syscall_writev(opState);
00209         break;
00210     case syscall_id_open:
00211         syscall_open(opState);
00212         break;
00213     case syscall_id_close:
00214         syscall_close(opState);
00215         break;
00216 
00217     case syscall_id_lseek:
00218         syscall_lseek(opState);
00219         break;
00220     case syscall_id_unlink:
00221         syscall_unlink(opState);
00222         break;
00223     case syscall_id_rename:
00224         syscall_rename(opState);
00225         break;
00226 
00227 
00228     case syscall_id_mmap:
00229         syscall_mmap(opState);
00230         break;
00231     case syscall_id_mremap:
00232         syscall_mremap(opState);
00233         break;
00234     case syscall_id_munmap:
00235         syscall_munmap(opState);
00236         break;
00237     //case syscall_id_mprotect:
00238     //  syscall_mprotect(opState);
00239     //  break;
00240     case syscall_id_uname:
00241         syscall_uname(opState);
00242         break;
00243     case syscall_id_fcntl:
00244         syscall_fcntl(opState);
00245         break;
00246     case syscall_id_brk:
00247         syscall_brk(opState);
00248         break;
00249     case syscall_id_getpid:
00250     case syscall_id_gettid:
00251         syscall_getpid(opState);
00252         break;
00253     ////case syscall_id_setuid:
00254     ////    syscall_setuid(opState);
00255     ////    break;
00256     case syscall_id_getuid:
00257         syscall_getuid(opState);
00258         break;
00259     case syscall_id_geteuid:
00260         syscall_geteuid(opState);
00261         break;
00262     case syscall_id_getgid:
00263         syscall_getgid(opState);
00264         break;
00265     case syscall_id_getegid:
00266         syscall_getegid(opState);
00267         break;
00268     //case syscall_id_setgid:
00269     //  syscall_setgid(opState);
00270     //  break;
00271     //case syscall_id_seteuid:
00272     //  syscall_seteuid(opState);
00273     //  break;
00274     //case syscall_id_setegid:
00275     //  syscall_setegid(opState);
00276     //  break;
00277     //case syscall_id_setregid:
00278     //  syscall_setregid(opState);
00279     //  break;
00280     //case syscall_id_setreuid:
00281     //  syscall_setreuid(opState);
00282     //  break;
00283     //case syscall_id_access:
00284     //  syscall_access(opState);
00285     //  break;
00286     case syscall_id_stat:
00287 //  case syscall_id_stat64:
00288         syscall_stat64(opState);
00289         break;
00290     case syscall_id_lstat:
00291 //  case syscall_id_lstat64:
00292         syscall_lstat64(opState);
00293         break;
00294     case syscall_id_fstat:
00295 //  case syscall_id_fstat64:
00296         syscall_fstat64(opState);
00297         break;
00298     case syscall_id_ioctl:
00299         syscall_ioctl(opState);
00300         break;
00301     //case syscall_id_readlink:
00302     //  syscall_readlink(opState);
00303     //  break;
00304     case syscall_id_time:
00305         syscall_time(opState);
00306         break;
00307     case syscall_id_times:
00308         syscall_times(opState);
00309         break;
00310     case syscall_id_gettimeofday:
00311         syscall_gettimeofday(opState);
00312         break;
00313 
00314     case syscall_id_dup:
00315         syscall_dup(opState);
00316         break;
00317     case syscall_id_truncate:
00318         syscall_truncate(opState);
00319         break;
00320     case syscall_id_ftruncate:
00321         syscall_ftruncate(opState);
00322         break;
00323 
00324     case syscall_id_kill:
00325         syscall_kill(opState);
00326         break;
00327     case syscall_id_tgkill:
00328         syscall_tgkill(opState);
00329         break;
00330 
00331 
00332     // signal functions
00333     case syscall_id_rt_sigaction:
00334     case syscall_id_rt_sigprocmask:
00335         syscall_ignore(opState);
00336         break;
00337 
00338     // gcc  stack ggp
00339     case syscall_id_getrlimit:
00340         syscall_ignore(opState);
00341         break;
00342     case syscall_id_setrlimit:
00343         syscall_ignore(opState);
00344         break;
00345 
00346     //case syscall_id_mkdir:
00347     //  syscall_mkdir(opState);
00348     //  break;
00349 
00350     // gcc タsgp
00351     case syscall_id_getrusage:
00352         syscall_ignore(opState);
00353         break;
00354 
00355     case syscall_id_getcwd:
00356         syscall_getcwd(opState);
00357         break;
00358     default:
00359         {
00360             stringstream ss;
00361             ss << "unknown syscall " << GetArg(0) << " called";
00362             THROW_RUNTIME_ERROR(ss.str().c_str());
00363         }
00364     }
00365 #ifdef SYSCALL_DEBUG
00366     if (GetResult(ErrorFlagIndex))
00367         log << " = error " << hex << GetResult(RetValueIndex) << std::endl;
00368     else
00369         log << " = " << hex << GetResult(RetValueIndex) << std::endl;
00370 #endif // #ifdef DEBUG
00371 }

関数の呼び出しグラフ:

int PPC64LinuxSyscallConv::Get_CLK_TCK (  )  [protected, virtual]

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

PPC64LinuxSyscallConv.cpp391 行で定義されています。

00392 {
00393     return PPC64_CLK_TCK;
00394 }

int PPC64LinuxSyscallConv::Get_MAP_ANONYMOUS (  )  [protected, virtual]

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

PPC64LinuxSyscallConv.cpp381 行で定義されています。

00382 {
00383     return PPC64_MAP_ANONYMOUS;
00384 }

int PPC64LinuxSyscallConv::Get_MREMAP_MAYMOVE (  )  [protected, virtual]

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

PPC64LinuxSyscallConv.cpp386 行で定義されています。

00387 {
00388     return PPC64_MREMAP_MAYMOVE;
00389 }

u32 PPC64LinuxSyscallConv::OpenFlagTargetToHost ( u32  flag  )  [protected, virtual]

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

PPC64LinuxSyscallConv.cpp396 行で定義されています。

参照先 Onikiri::EmulatorUtility::SyscallConstConvBitwise::TargetToHost().

00397 {
00398     static u32 host_open_flags[] =
00399     {
00400         POSIX_O_RDONLY, POSIX_O_WRONLY, POSIX_O_RDWR,
00401         POSIX_O_APPEND,
00402         POSIX_O_CREAT,
00403         POSIX_O_EXCL,
00404         //O_NOCTTY,
00405         //O_NONBLOCK,
00406         //O_SYNC,
00407         POSIX_O_TRUNC,
00408     };
00409     // see bits/fcntl.h
00410     static u32 ppc64_open_flags[] =
00411     {
00412         00, 01, 02, // O_RDONLY, O_WRONLY, O_RDWR,
00413         02000,  // O_APPEND
00414         00100,  // O_CREAT
00415         00200,  // O_EXCL
00416         //00400,    // O_NOCTTY
00417         //04000,    // O_NONBLOCK
00418         //010000,   // O_SYNC
00419         01000,  // O_TRUNC
00420     };
00421     static int open_flags_size = sizeof(host_open_flags)/sizeof(host_open_flags[0]);
00422 
00423     SyscallConstConvBitwise conv(
00424         host_open_flags,
00425         ppc64_open_flags, 
00426         open_flags_size);
00427 
00428     return conv.TargetToHost(flag);
00429 }

関数の呼び出しグラフ:


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