gem5 [DEVELOP-FOR-25.0]
Loading...
Searching...
No Matches
process.hh
Go to the documentation of this file.
1/*
2 * Copyright (c) 2014-2016 Advanced Micro Devices, Inc.
3 * Copyright (c) 2001-2005 The Regents of The University of Michigan
4 * All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions are
8 * met: redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer;
10 * redistributions in binary form must reproduce the above copyright
11 * notice, this list of conditions and the following disclaimer in the
12 * documentation and/or other materials provided with the distribution;
13 * neither the name of the copyright holders nor the names of its
14 * contributors may be used to endorse or promote products derived from
15 * this software without specific prior written permission.
16 *
17 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
18 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
19 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
20 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
21 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
22 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
23 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
27 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28 */
29
30#ifndef __PROCESS_HH__
31#define __PROCESS_HH__
32
33#include <inttypes.h>
34
35#include <map>
36#include <memory>
37#include <string>
38#include <vector>
39
41#include "base/statistics.hh"
42#include "base/types.hh"
44#include "sim/fd_array.hh"
45#include "sim/fd_entry.hh"
46#include "sim/mem_state.hh"
47#include "sim/sim_object.hh"
48
49namespace gem5
50{
51
52namespace loader
53{
54class ObjectFile;
55} // namespace loader
56
57struct ProcessParams;
58
59class EmulatedDriver;
61class SEWorkload;
62class SyscallDesc;
63class SyscallReturn;
64class System;
65class ThreadContext;
66
67class Process : public SimObject
68{
69 public:
70 Process(const ProcessParams &params, EmulationPageTable *pTable,
71 loader::ObjectFile *obj_file);
72
73 void serialize(CheckpointOut &cp) const override;
74 void unserialize(CheckpointIn &cp) override;
75
76 void init() override;
77 void initState() override;
78 DrainState drain() override;
79
80 virtual void syscall(ThreadContext *tc) { numSyscalls++; }
81
82 inline uint64_t uid() { return _uid; }
83 inline uint64_t euid() { return _euid; }
84 inline uint64_t gid() { return _gid; }
85 inline uint64_t egid() { return _egid; }
86 inline uint64_t pid() { return _pid; }
87 inline uint64_t ppid() { return _ppid; }
88 inline uint64_t pgid() { return _pgid; }
89 inline void pgid(uint64_t pgid) { _pgid = pgid; }
90 inline uint64_t tgid() { return _tgid; }
91
92 const char *progName() const { return executable.c_str(); }
93
100 EmulatedDriver *findDriver(std::string filename);
101
102 // This function acts as a callback to update the bias value in
103 // the object file because the parameters needed to calculate the
104 // bias are not available when the object file is created.
105 void updateBias();
106 Addr getBias();
109
110 // This function allocates physical memory as backing store, and then maps
111 // it into the virtual address space of the process. The range of virtual
112 // addresses being configured starts at the address "vaddr" and is of size
113 // "size" bytes. If some part of this range of virtual addresses is already
114 // configured, this function will error out unless "clobber" is set. If
115 // clobber is set, then those existing mappings will be replaced.
116 //
117 // If the beginning or end of the virtual address range does not perfectly
118 // align to page boundaries, it will be expanded in either direction until
119 // it does. This function will therefore set up *at least* the range
120 // requested, and may configure more if necessary.
121 void allocateMem(Addr vaddr, int64_t size, bool clobber=false);
122
127 void deallocateMem(Addr vaddr, int64_t size);
128
131 bool fixupFault(Addr vaddr);
132
133 // After getting registered with system object, tell process which
134 // system-wide context id it is assigned.
135 void
137 {
138 contextIds.push_back(context_id);
139 }
140
145 void revokeThreadContext(int context_id);
146
152 virtual bool mmapGrowsDown() const { return true; }
153
167 bool map(Addr vaddr, Addr paddr, int64_t size, bool cacheable = true);
168
169 void replicatePage(Addr vaddr, Addr new_paddr, ThreadContext *old_tc,
170 ThreadContext *new_tc, bool alloc_page);
171
172 virtual void clone(ThreadContext *old_tc, ThreadContext *new_tc,
173 Process *new_p, RegVal flags);
174
175 // thread contexts associated with this process
177
178 // system object which owns this process
180
182
183 // flag for using architecture specific page table
185 // running KVM requires special initialization
187 // flag for using the process as a thread which shares page tables
189
195
197
198 // Memory proxy for initial image load.
199 std::unique_ptr<SETranslatingPortProxy> initVirtMem;
200
207 class Loader
208 {
209 public:
210 Loader();
211
212 /* Loader instances are singletons. */
213 Loader(const Loader &) = delete;
214 void operator=(const Loader &) = delete;
215
216 virtual ~Loader() {}
217
226 virtual Process *load(const ProcessParams &params,
227 loader::ObjectFile *obj_file) = 0;
228 };
229
230 // Try all the Loader instance's "load" methods one by one until one is
231 // successful. If none are, complain and fail.
232 static Process *tryLoaders(const ProcessParams &params,
233 loader::ObjectFile *obj_file);
234
240 std::string executable;
241
255 std::string absolutePath(const std::string &path, bool host_fs);
256
265 std::string checkPathRedirect(const std::string &filename);
266
277 std::string tgtCwd;
278 std::string hostCwd;
279
280 // Syscall emulation uname release.
281 std::string release;
282
283 // Id of the owner of the process
284 uint64_t _uid;
285 uint64_t _euid;
286 uint64_t _gid;
287 uint64_t _egid;
288
289 // pid of the process and it's parent
290 uint64_t _pid;
291 uint64_t _ppid;
292 uint64_t _pgid;
293 uint64_t _tgid;
294
295 // Emulated drivers available to this process
297
298 std::shared_ptr<FDArray> fds;
299
301 std::shared_ptr<MemState> memState;
302
308
309 // Process was forked with SIGCHLD set.
310 bool *sigchld;
311
312 // Contexts to wake up when this thread exits or calls execve
314
315 // Track how many system calls are executed
317};
318
319} // namespace gem5
320
321#endif // __PROCESS_HH__
Defines global host-dependent types: Counter, Tick, and (indirectly) {int,uint}{8,...
EmulatedDriver is an abstract base class for fake SE-mode device drivers.
virtual Process * load(const ProcessParams &params, loader::ObjectFile *obj_file)=0
Each subclass needs to implement this method.
Loader(const Loader &)=delete
void operator=(const Loader &)=delete
loader::MemoryImage image
Definition process.hh:236
virtual bool mmapGrowsDown() const
Does mmap region grow upward or downward from mmapEnd?
Definition process.hh:152
void allocateMem(Addr vaddr, int64_t size, bool clobber=false)
Definition process.cc:318
void replicatePage(Addr vaddr, Addr new_paddr, ThreadContext *old_tc, ThreadContext *new_tc, bool alloc_page)
Definition process.cc:386
uint64_t egid()
Definition process.hh:85
SEWorkload * seWorkload
Definition process.hh:181
void updateBias()
Definition process.cc:497
std::string absolutePath(const std::string &path, bool host_fs)
Return an absolute path given a relative path paired with the current working directory of the proces...
Definition process.cc:545
uint64_t _euid
Definition process.hh:285
std::unique_ptr< SETranslatingPortProxy > initVirtMem
Definition process.hh:199
virtual void clone(ThreadContext *old_tc, ThreadContext *new_tc, Process *new_p, RegVal flags)
Definition process.cc:168
void init() override
init() is called after all C++ SimObjects have been created and all ports are connected.
Definition process.cc:279
std::shared_ptr< MemState > memState
Definition process.hh:301
bool fixupFault(Addr vaddr)
Attempt to fix up a fault at vaddr by allocating a page on the stack.
Definition process.cc:405
void deallocateMem(Addr vaddr, int64_t size)
Unmap the given virtual address range and deallocate any physical pages that it mapped to.
Definition process.cc:348
uint64_t pid()
Definition process.hh:86
uint64_t _tgid
Definition process.hh:293
uint64_t uid()
Definition process.hh:82
std::vector< std::string > argv
Definition process.hh:238
DrainState drain() override
Draining is the process of clearing out the states of SimObjects.These are the SimObjects that are pa...
Definition process.cc:311
uint64_t pgid()
Definition process.hh:88
uint64_t _egid
Definition process.hh:287
std::shared_ptr< FDArray > fds
Definition process.hh:298
const char * progName() const
Definition process.hh:92
void assignThreadContext(ContextID context_id)
Definition process.hh:136
bool map(Addr vaddr, Addr paddr, int64_t size, bool cacheable=true)
Maps a contiguous range of virtual addresses in this process's address space to a contiguous range of...
Definition process.cc:444
uint64_t _pid
Definition process.hh:290
uint64_t _gid
Definition process.hh:286
bool useForClone
Definition process.hh:188
uint64_t _ppid
Definition process.hh:291
loader::ObjectFile * getInterpreter()
Definition process.cc:523
loader::MemoryImage interpImage
Definition process.hh:237
bool * sigchld
Definition process.hh:310
virtual void syscall(ThreadContext *tc)
Definition process.hh:80
bool zeroPages
Whether to ensure that all newly allocated pages are zero-filled.
Definition process.hh:194
uint64_t ppid()
Definition process.hh:87
std::string executable
Definition process.hh:240
std::vector< ContextID > vforkContexts
Definition process.hh:313
std::string hostCwd
Definition process.hh:278
std::vector< ContextID > contextIds
Definition process.hh:176
std::string checkPathRedirect(const std::string &filename)
Redirect file path if it matches any keys initialized by system object.
Definition process.cc:464
System * system
Definition process.hh:179
uint64_t _pgid
Definition process.hh:292
void initState() override
initState() is called on each SimObject when not restoring from a checkpoint.
Definition process.cc:289
bool * exitGroup
Definition process.hh:300
void pgid(uint64_t pgid)
Definition process.hh:89
void serialize(CheckpointOut &cp) const override
Serialize an object.
Definition process.cc:411
std::vector< std::string > envp
Definition process.hh:239
std::string tgtCwd
The cwd members are used to track changes to the current working directory for the purpose of executi...
Definition process.hh:277
std::string release
Definition process.hh:281
uint64_t gid()
Definition process.hh:84
EmulatedDriver * findDriver(std::string filename)
Find an emulated device driver.
Definition process.cc:453
uint64_t tgid()
Definition process.hh:90
Addr getStartPC()
Definition process.cc:537
void unserialize(CheckpointIn &cp) override
Unserialize an object.
Definition process.cc:426
Process(const ProcessParams &params, EmulationPageTable *pTable, loader::ObjectFile *obj_file)
Definition process.cc:113
void revokeThreadContext(int context_id)
After delegating a thread context to a child process no longer should relate to the ThreadContext.
Definition process.cc:266
uint64_t _uid
Definition process.hh:284
loader::ObjectFile * objFile
Definition process.hh:235
Addr getBias()
Definition process.cc:529
statistics::Scalar numSyscalls
Definition process.hh:316
static Process * tryLoaders(const ProcessParams &params, loader::ObjectFile *obj_file)
Definition process.cc:93
uint64_t euid()
Definition process.hh:83
std::vector< EmulatedDriver * > drivers
Definition process.hh:296
EmulationPageTable * pTable
Definition process.hh:196
uint64_t childClearTID
Calls a futex wakeup at the address specified by this pointer when this process exits.
Definition process.hh:307
static std::stack< std::string > path
Definition serialize.hh:315
This class provides the wrapper interface for the system call implementations which are defined in th...
This class represents the return value from an emulated system call, including any errno setting.
ThreadContext is the external interface to all thread state for anything outside of the CPU.
This is a simple scalar statistic, like a counter.
STL vector class.
Definition stl.hh:37
DrainState
Object drain/handover states.
Definition drain.hh:75
const Params & params() const
SimObject(const Params &p)
Definition sim_object.cc:58
Copyright (c) 2024 Arm Limited All rights reserved.
Definition binary32.hh:36
uint64_t RegVal
Definition types.hh:173
std::ostream CheckpointOut
Definition serialize.hh:66
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
Definition types.hh:147
int ContextID
Globally unique thread context ID.
Definition types.hh:239
Declaration of Statistics objects.

Generated on Mon May 26 2025 09:19:13 for gem5 by doxygen 1.13.2