summaryrefslogtreecommitdiff
path: root/src/core/file_sys
diff options
context:
space:
mode:
authorGravatar bunnei2018-12-27 11:15:34 -0500
committerGravatar GitHub2018-12-27 11:15:34 -0500
commit795335af0f37ce25da3c3ca8eeab62c50f87d366 (patch)
tree48bde2f34a4e9c87dc96f83bfbeeeee96b72b9e6 /src/core/file_sys
parentMerge pull request #1892 from Tinob/master (diff)
parentkernel/process: Hook up the process capability parser to the process itself (diff)
downloadyuzu-795335af0f37ce25da3c3ca8eeab62c50f87d366.tar.gz
yuzu-795335af0f37ce25da3c3ca8eeab62c50f87d366.tar.xz
yuzu-795335af0f37ce25da3c3ca8eeab62c50f87d366.zip
Merge pull request #1928 from lioncash/caps
kernel: Handle kernel capability descriptors
Diffstat (limited to 'src/core/file_sys')
-rw-r--r--src/core/file_sys/program_metadata.cpp11
-rw-r--r--src/core/file_sys/program_metadata.h6
2 files changed, 17 insertions, 0 deletions
diff --git a/src/core/file_sys/program_metadata.cpp b/src/core/file_sys/program_metadata.cpp
index 8903ed1d3..e90c8c2de 100644
--- a/src/core/file_sys/program_metadata.cpp
+++ b/src/core/file_sys/program_metadata.cpp
@@ -40,6 +40,13 @@ Loader::ResultStatus ProgramMetadata::Load(VirtualFile file) {
40 if (sizeof(FileAccessHeader) != file->ReadObject(&aci_file_access, aci_header.fah_offset)) 40 if (sizeof(FileAccessHeader) != file->ReadObject(&aci_file_access, aci_header.fah_offset))
41 return Loader::ResultStatus::ErrorBadFileAccessHeader; 41 return Loader::ResultStatus::ErrorBadFileAccessHeader;
42 42
43 aci_kernel_capabilities.resize(aci_header.kac_size / sizeof(u32));
44 const u64 read_size = aci_header.kac_size;
45 const u64 read_offset = npdm_header.aci_offset + aci_header.kac_offset;
46 if (file->ReadBytes(aci_kernel_capabilities.data(), read_size, read_offset) != read_size) {
47 return Loader::ResultStatus::ErrorBadKernelCapabilityDescriptors;
48 }
49
43 return Loader::ResultStatus::Success; 50 return Loader::ResultStatus::Success;
44} 51}
45 52
@@ -71,6 +78,10 @@ u64 ProgramMetadata::GetFilesystemPermissions() const {
71 return aci_file_access.permissions; 78 return aci_file_access.permissions;
72} 79}
73 80
81const ProgramMetadata::KernelCapabilityDescriptors& ProgramMetadata::GetKernelCapabilities() const {
82 return aci_kernel_capabilities;
83}
84
74void ProgramMetadata::Print() const { 85void ProgramMetadata::Print() const {
75 LOG_DEBUG(Service_FS, "Magic: {:.4}", npdm_header.magic.data()); 86 LOG_DEBUG(Service_FS, "Magic: {:.4}", npdm_header.magic.data());
76 LOG_DEBUG(Service_FS, "Main thread priority: 0x{:02X}", npdm_header.main_thread_priority); 87 LOG_DEBUG(Service_FS, "Main thread priority: 0x{:02X}", npdm_header.main_thread_priority);
diff --git a/src/core/file_sys/program_metadata.h b/src/core/file_sys/program_metadata.h
index e4470d6f0..0033ba347 100644
--- a/src/core/file_sys/program_metadata.h
+++ b/src/core/file_sys/program_metadata.h
@@ -5,6 +5,7 @@
5#pragma once 5#pragma once
6 6
7#include <array> 7#include <array>
8#include <vector>
8#include "common/bit_field.h" 9#include "common/bit_field.h"
9#include "common/common_types.h" 10#include "common/common_types.h"
10#include "common/swap.h" 11#include "common/swap.h"
@@ -38,6 +39,8 @@ enum class ProgramFilePermission : u64 {
38 */ 39 */
39class ProgramMetadata { 40class ProgramMetadata {
40public: 41public:
42 using KernelCapabilityDescriptors = std::vector<u32>;
43
41 ProgramMetadata(); 44 ProgramMetadata();
42 ~ProgramMetadata(); 45 ~ProgramMetadata();
43 46
@@ -50,6 +53,7 @@ public:
50 u32 GetMainThreadStackSize() const; 53 u32 GetMainThreadStackSize() const;
51 u64 GetTitleID() const; 54 u64 GetTitleID() const;
52 u64 GetFilesystemPermissions() const; 55 u64 GetFilesystemPermissions() const;
56 const KernelCapabilityDescriptors& GetKernelCapabilities() const;
53 57
54 void Print() const; 58 void Print() const;
55 59
@@ -154,6 +158,8 @@ private:
154 158
155 FileAccessControl acid_file_access; 159 FileAccessControl acid_file_access;
156 FileAccessHeader aci_file_access; 160 FileAccessHeader aci_file_access;
161
162 KernelCapabilityDescriptors aci_kernel_capabilities;
157}; 163};
158 164
159} // namespace FileSys 165} // namespace FileSys