Syscall events cleanup
[dyninst.git] / common / h / MachSyscall.h
1 #if !defined(MACH_SYSCALL_H_)
2 #define MACH_SYSCALL_H_
3
4 #include <string>
5 #include "boost/shared_ptr.hpp"
6
7 #include "dyn_regs.h"
8 #include "dyntypes.h"
9
10 namespace Dyninst {
11 class Platform
12 {
13     public: 
14         Platform(Architecture a, OSType o): _arch(a), _os(o) {}
15
16         Architecture arch() const { return _arch; };
17         OSType os() const { return _os; }
18         
19         bool operator==(const Platform &) const;
20
21     private:
22         Architecture _arch; 
23         OSType _os;
24         //std::string _version;
25 };
26 }
27
28 namespace Dyninst  {
29
30 class MachSyscall;
31 namespace ProcControlAPI
32 {
33     class EventSyscall;
34     class Process;
35
36     MachSyscall makeFromEvent(const EventSyscall * ev);
37     MachSyscall makeFromID(boost::shared_ptr<Process> proc, unsigned long id);
38 }
39
40 class PC_EXPORT MachSyscall 
41 {
42     public: 
43         typedef unsigned long SyscallIDPlatform;
44         typedef unsigned long SyscallIDIndependent; // e.g., Dyninst::Syscall::dyn_getpid
45         typedef const char * SyscallName;
46
47         // Factory methods
48         // Allows ProcControlAPI to construct a MachSyscall for an event
49         friend MachSyscall ProcControlAPI::makeFromEvent(const ProcControlAPI::EventSyscall *);
50
51         // Allows users to construct a MachSyscall
52         friend MachSyscall ProcControlAPI::makeFromID(boost::shared_ptr<ProcControlAPI::Process>, SyscallIDIndependent);
53         
54         static MachSyscall makeFromPlatform(Platform, SyscallIDIndependent);     
55
56         // Accessors
57         // Returns the platform-specific number for this system call
58         SyscallIDPlatform num() const;
59
60         // Returns the name for this system call (e.g., "getpid")
61         SyscallName name() const;
62
63         // Strict equality-based matching on Platforms and IDs
64         bool operator==(const MachSyscall &) const;
65
66     private:
67         MachSyscall(Platform p, SyscallIDPlatform i, SyscallName n) : _plat(p), _id(i), _name(n) {}
68         static SyscallName nameLookup(Platform plat, SyscallIDPlatform id);
69
70         Platform _plat;
71         SyscallIDPlatform _id;
72         SyscallName _name;
73 };
74
75 }
76
77 #endif