|
@@ -4,6 +4,7 @@
|
|
|
|
|
|
|
|
#pragma once
|
|
#pragma once
|
|
|
|
|
|
|
|
|
|
+#include <array>
|
|
|
#include <bitset>
|
|
#include <bitset>
|
|
|
#include <cstddef>
|
|
#include <cstddef>
|
|
|
#include <memory>
|
|
#include <memory>
|
|
@@ -55,6 +56,12 @@ enum class ProcessStatus { Created, Running, Exited };
|
|
|
class ResourceLimit;
|
|
class ResourceLimit;
|
|
|
|
|
|
|
|
struct CodeSet final : public Object {
|
|
struct CodeSet final : public Object {
|
|
|
|
|
+ struct Segment {
|
|
|
|
|
+ size_t offset = 0;
|
|
|
|
|
+ VAddr addr = 0;
|
|
|
|
|
+ u32 size = 0;
|
|
|
|
|
+ };
|
|
|
|
|
+
|
|
|
static SharedPtr<CodeSet> Create(std::string name);
|
|
static SharedPtr<CodeSet> Create(std::string name);
|
|
|
|
|
|
|
|
std::string GetTypeName() const override {
|
|
std::string GetTypeName() const override {
|
|
@@ -69,24 +76,38 @@ struct CodeSet final : public Object {
|
|
|
return HANDLE_TYPE;
|
|
return HANDLE_TYPE;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- /// Name of the process
|
|
|
|
|
- std::string name;
|
|
|
|
|
|
|
+ Segment& CodeSegment() {
|
|
|
|
|
+ return segments[0];
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
- std::shared_ptr<std::vector<u8>> memory;
|
|
|
|
|
|
|
+ const Segment& CodeSegment() const {
|
|
|
|
|
+ return segments[0];
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
- struct Segment {
|
|
|
|
|
- size_t offset = 0;
|
|
|
|
|
- VAddr addr = 0;
|
|
|
|
|
- u32 size = 0;
|
|
|
|
|
- };
|
|
|
|
|
|
|
+ Segment& RODataSegment() {
|
|
|
|
|
+ return segments[1];
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
- Segment segments[3];
|
|
|
|
|
- Segment& code = segments[0];
|
|
|
|
|
- Segment& rodata = segments[1];
|
|
|
|
|
- Segment& data = segments[2];
|
|
|
|
|
|
|
+ const Segment& RODataSegment() const {
|
|
|
|
|
+ return segments[1];
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
|
|
+ Segment& DataSegment() {
|
|
|
|
|
+ return segments[2];
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ const Segment& DataSegment() const {
|
|
|
|
|
+ return segments[2];
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ std::shared_ptr<std::vector<u8>> memory;
|
|
|
|
|
+
|
|
|
|
|
+ std::array<Segment, 3> segments;
|
|
|
VAddr entrypoint;
|
|
VAddr entrypoint;
|
|
|
|
|
|
|
|
|
|
+ /// Name of the process
|
|
|
|
|
+ std::string name;
|
|
|
|
|
+
|
|
|
private:
|
|
private:
|
|
|
CodeSet();
|
|
CodeSet();
|
|
|
~CodeSet() override;
|
|
~CodeSet() override;
|