Browse Source
Merge pull request #2268 from lioncash/codeset
Merge pull request #2268 from lioncash/codeset
core/kernel: Migrate CodeSet to its own source filesnce_cpp
committed by
GitHub
8 changed files with 111 additions and 45 deletions
-
2src/core/CMakeLists.txt
-
12src/core/hle/kernel/code_set.cpp
-
90src/core/hle/kernel/code_set.h
-
6src/core/hle/kernel/process.cpp
-
43src/core/hle/kernel/process.h
-
1src/core/loader/elf.cpp
-
1src/core/loader/nro.cpp
-
1src/core/loader/nso.cpp
@ -0,0 +1,12 @@ |
|||||
|
// Copyright 2019 yuzu emulator team
|
||||
|
// Licensed under GPLv2 or any later version
|
||||
|
// Refer to the license.txt file included.
|
||||
|
|
||||
|
#include "core/hle/kernel/code_set.h"
|
||||
|
|
||||
|
namespace Kernel { |
||||
|
|
||||
|
CodeSet::CodeSet() = default; |
||||
|
CodeSet::~CodeSet() = default; |
||||
|
|
||||
|
} // namespace Kernel
|
||||
@ -0,0 +1,90 @@ |
|||||
|
// Copyright 2019 yuzu emulator team |
||||
|
// Licensed under GPLv2 or any later version |
||||
|
// Refer to the license.txt file included. |
||||
|
|
||||
|
#pragma once |
||||
|
|
||||
|
#include <cstddef> |
||||
|
#include <memory> |
||||
|
#include <vector> |
||||
|
|
||||
|
#include "common/common_types.h" |
||||
|
|
||||
|
namespace Kernel { |
||||
|
|
||||
|
/** |
||||
|
* Represents executable data that may be loaded into a kernel process. |
||||
|
* |
||||
|
* A code set consists of three basic segments: |
||||
|
* - A code (AKA text) segment, |
||||
|
* - A read-only data segment (rodata) |
||||
|
* - A data segment |
||||
|
* |
||||
|
* The code segment is the portion of the object file that contains |
||||
|
* executable instructions. |
||||
|
* |
||||
|
* The read-only data segment in the portion of the object file that |
||||
|
* contains (as one would expect) read-only data, such as fixed constant |
||||
|
* values and data structures. |
||||
|
* |
||||
|
* The data segment is similar to the read-only data segment -- it contains |
||||
|
* variables and data structures that have predefined values, however, |
||||
|
* entities within this segment can be modified. |
||||
|
*/ |
||||
|
struct CodeSet final { |
||||
|
/// A single segment within a code set. |
||||
|
struct Segment final { |
||||
|
/// The byte offset that this segment is located at. |
||||
|
std::size_t offset = 0; |
||||
|
|
||||
|
/// The address to map this segment to. |
||||
|
VAddr addr = 0; |
||||
|
|
||||
|
/// The size of this segment in bytes. |
||||
|
u32 size = 0; |
||||
|
}; |
||||
|
|
||||
|
explicit CodeSet(); |
||||
|
~CodeSet(); |
||||
|
|
||||
|
CodeSet(const CodeSet&) = delete; |
||||
|
CodeSet& operator=(const CodeSet&) = delete; |
||||
|
|
||||
|
CodeSet(CodeSet&&) = default; |
||||
|
CodeSet& operator=(CodeSet&&) = default; |
||||
|
|
||||
|
Segment& CodeSegment() { |
||||
|
return segments[0]; |
||||
|
} |
||||
|
|
||||
|
const Segment& CodeSegment() const { |
||||
|
return segments[0]; |
||||
|
} |
||||
|
|
||||
|
Segment& RODataSegment() { |
||||
|
return segments[1]; |
||||
|
} |
||||
|
|
||||
|
const Segment& RODataSegment() const { |
||||
|
return segments[1]; |
||||
|
} |
||||
|
|
||||
|
Segment& DataSegment() { |
||||
|
return segments[2]; |
||||
|
} |
||||
|
|
||||
|
const Segment& DataSegment() const { |
||||
|
return segments[2]; |
||||
|
} |
||||
|
|
||||
|
/// The overall data that backs this code set. |
||||
|
std::shared_ptr<std::vector<u8>> memory; |
||||
|
|
||||
|
/// The segments that comprise this code set. |
||||
|
std::array<Segment, 3> segments; |
||||
|
|
||||
|
/// The entry point address for this code set. |
||||
|
VAddr entrypoint = 0; |
||||
|
}; |
||||
|
|
||||
|
} // namespace Kernel |
||||
Write
Preview
Loading…
Cancel
Save
Reference in new issue