mirror of
https://github.com/skyline-emu/skyline.git
synced 2024-12-28 23:05:29 +03:00
Use .clang-tidy and remove madvise DO_FORK/DONT_FORK calls
This commit causes Android Studio to use the .clang-tidy file for configuration and removes madvise DO_FORK/DONT_FORK calls as they cause problems on many devices and are mostly unnecessary.
This commit is contained in:
parent
81dba3da4b
commit
493a1a93ec
3
.idea/inspectionProfiles/Project_Default.xml
generated
3
.idea/inspectionProfiles/Project_Default.xml
generated
@ -129,6 +129,9 @@
|
||||
<option name="m_limit" value="64" />
|
||||
</inspection_tool>
|
||||
<inspection_tool class="CheckedExceptionClass" enabled="true" level="WARNING" enabled_by_default="true" />
|
||||
<inspection_tool class="ClangTidyInspection" enabled="true" level="WARNING" enabled_by_default="true">
|
||||
<option name="useCustomListOfClangTidyChecks" value="false" />
|
||||
</inspection_tool>
|
||||
<inspection_tool class="ClassComplexity" enabled="true" level="WARNING" enabled_by_default="true">
|
||||
<option name="m_limit" value="80" />
|
||||
</inspection_tool>
|
||||
|
@ -90,30 +90,30 @@ namespace skyline::kernel::type {
|
||||
}
|
||||
|
||||
void KProcess::ReadMemory(void *destination, u64 offset, size_t size) const {
|
||||
struct iovec local[1];
|
||||
struct iovec remote[1];
|
||||
struct iovec local {
|
||||
.iov_base = destination,
|
||||
.iov_len = size
|
||||
};
|
||||
struct iovec remote {
|
||||
.iov_base = reinterpret_cast<void*>(offset),
|
||||
.iov_len = size
|
||||
};
|
||||
|
||||
remote[0].iov_base = reinterpret_cast<void*>(offset);
|
||||
remote[0].iov_len = size;
|
||||
|
||||
local[0].iov_base = destination;
|
||||
local[0].iov_len = size;
|
||||
|
||||
if (process_vm_readv(pid, local, 1, remote, 1, 0) < 0)
|
||||
if (process_vm_readv(pid, &local, 1, &remote, 1, 0) < 0)
|
||||
pread64(memFd, destination, size, offset);
|
||||
}
|
||||
|
||||
void KProcess::WriteMemory(void *source, u64 offset, size_t size) const {
|
||||
struct iovec local[1];
|
||||
struct iovec remote[1];
|
||||
struct iovec local {
|
||||
.iov_base = source,
|
||||
.iov_len = size
|
||||
};
|
||||
struct iovec remote {
|
||||
.iov_base = reinterpret_cast<void*>(offset),
|
||||
.iov_len = size
|
||||
};
|
||||
|
||||
remote[0].iov_base = reinterpret_cast<void*>(offset);
|
||||
remote[0].iov_len = size;
|
||||
|
||||
local[0].iov_base = source;
|
||||
local[0].iov_len = size;
|
||||
|
||||
if (process_vm_writev(pid, local, 1, remote, 1, 0) < 0)
|
||||
if (process_vm_writev(pid, &local, 1, &remote, 1, 0) < 0)
|
||||
pwrite64(memFd, source, size, offset);
|
||||
}
|
||||
|
||||
|
@ -18,9 +18,7 @@ namespace skyline::kernel {
|
||||
}
|
||||
|
||||
std::shared_ptr<type::KProcess> OS::CreateProcess(u64 entry, u64 argument, size_t stackSize) {
|
||||
madvise(reinterpret_cast<void *>(constant::BaseAddr), constant::BaseEnd, MADV_DONTFORK);
|
||||
auto *stack = static_cast<u8 *>(mmap(nullptr, stackSize, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_NORESERVE | MAP_ANONYMOUS | MAP_STACK, -1, 0));
|
||||
madvise(stack, reinterpret_cast<size_t>(stack) + stackSize, MADV_DOFORK);
|
||||
if (stack == MAP_FAILED)
|
||||
throw exception("Failed to allocate stack memory");
|
||||
if (mprotect(stack, PAGE_SIZE, PROT_NONE)) {
|
||||
@ -29,7 +27,6 @@ namespace skyline::kernel {
|
||||
}
|
||||
auto tlsMem = std::make_shared<type::KSharedMemory>(state, 0, (sizeof(ThreadContext) + (PAGE_SIZE - 1)) & ~(PAGE_SIZE - 1), memory::Permission(true, true, false), memory::Type::Reserved);
|
||||
tlsMem->guest = tlsMem->kernel;
|
||||
madvise(reinterpret_cast<void *>(tlsMem->guest.address), tlsMem->guest.size, MADV_DOFORK);
|
||||
pid_t pid = clone(reinterpret_cast<int (*)(void *)>(&guest::entry), stack + stackSize, CLONE_FILES | CLONE_FS | CLONE_SETTLS | SIGCHLD, reinterpret_cast<void *>(entry), nullptr, reinterpret_cast<void *>(tlsMem->guest.address));
|
||||
if (pid == -1)
|
||||
throw exception("Call to clone() has failed: {}", strerror(errno));
|
||||
|
@ -49,11 +49,5 @@ namespace skyline::kernel {
|
||||
* @param pid The PID of the thread
|
||||
*/
|
||||
void KillThread(pid_t pid);
|
||||
|
||||
/**
|
||||
* @brief Handles a particular SuperVisor Call
|
||||
* @param svc The ID of the SVC to be called
|
||||
*/
|
||||
void SvcHandler(const u16 svc);
|
||||
};
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user