Deleted Added
sdiff udiff text old ( 2665:a124942bacb8 ) new ( 2680:246e7104f744 )
full compact
1/*
2 * Copyright (c) 2001-2005 The Regents of The University of Michigan
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are
7 * met: redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer;

--- 33 unchanged lines hidden (view full) ---

42#if !FULL_SYSTEM
43
44#include <vector>
45
46#include "base/statistics.hh"
47#include "sim/sim_object.hh"
48
49class CPUExecContext;
50class ThreadContext;
51class SyscallDesc;
52class PageTable;
53class TranslatingPort;
54class System;
55
56void
57copyStringArray(std::vector<std::string> &strings, Addr array_ptr,
58 Addr data_ptr, TranslatingPort* memPort);
59
60class Process : public SimObject
61{
62 public:
63
64 /// Pointer to object representing the system this process is
65 /// running on.
66 System *system;
67
68 // have we initialized a thread context from this process? If
69 // yes, subsequent contexts are assumed to be for dynamically
70 // created threads and are not initialized.
71 bool initialContextLoaded;
72
73 // thread contexts associated with this process
74 std::vector<ThreadContext *> threadContexts;
75
76 // number of CPUs (esxec contexts, really) assigned to this process.
77 unsigned int numCpus() { return threadContexts.size(); }
78
79 // record of blocked context
80 struct WaitRec
81 {
82 Addr waitChan;
83 ThreadContext *waitingContext;
84
85 WaitRec(Addr chan, ThreadContext *ctx)
86 : waitChan(chan), waitingContext(ctx)
87 { }
88 };
89
90 // list of all blocked contexts
91 std::list<WaitRec> waitList;
92
93 Addr brk_point; // top of the data segment

--- 44 unchanged lines hidden (view full) ---

138 public:
139 // static helper functions to generate file descriptors for constructor
140 static int openInputFile(const std::string &filename);
141 static int openOutputFile(const std::string &filename);
142
143 // override of virtual SimObject method: register statistics
144 virtual void regStats();
145
146 // register a thread context for this process.
147 // returns tc's cpu number (index into threadContexts[])
148 int registerThreadContext(ThreadContext *tc);
149
150
151 void replaceThreadContext(ThreadContext *tc, int tcIndex);
152
153 // map simulator fd sim_fd to target fd tgt_fd
154 void dup_fd(int sim_fd, int tgt_fd);
155
156 // generate new target fd for sim_fd
157 int alloc_fd(int sim_fd);
158
159 // free target fd (e.g., after close)
160 void free_fd(int tgt_fd);
161
162 // look up simulator fd for given target fd
163 int sim_fd(int tgt_fd);
164
165 virtual void syscall(int64_t callnum, ThreadContext *tc) = 0;
166};
167
168//
169// "Live" process with system calls redirected to host system
170//
171class ObjectFile;
172class LiveProcess : public Process
173{

--- 5 unchanged lines hidden (view full) ---

179 LiveProcess(const std::string &nm, ObjectFile *objFile,
180 System *_system, int stdin_fd, int stdout_fd, int stderr_fd,
181 std::vector<std::string> &argv,
182 std::vector<std::string> &envp);
183
184 virtual void argsInit(int intSize, int pageSize);
185
186 public:
187 virtual void syscall(int64_t callnum, ThreadContext *tc);
188
189 virtual SyscallDesc* getDesc(int callnum) = 0;
190};
191
192
193#endif // !FULL_SYSTEM
194
195#endif // __PROCESS_HH__