mirror of
https://github.com/boykopovar/AnyPS5.git
synced 2026-10-23 00:53:02 -05:00
The guest image reader and the module builder already produce a platform-neutral GuestImage; --macos adds a third writer next to the ELF and PE ones. The executable and every bundled module become x86-64 Mach-O files (modules as dylibs in app0/sce_module) that run under Rosetta on Apple silicon. FreeBSD code reaches its thread pointer through %fs, which macOS cannot set, so the writer rewrites each %fs access into a stub that reads the image's thread pointer from a pthread key and allocates the TLS block on a thread's first access. Dynamic TLS goes through the image's descriptor instead of __tls_get_addr. Imports bind by NID to the prx libraries beside the output, exports and TLS imports use the dynamic symbol names, and the image's metadata lives in __APS5DATA,__meta. --macos conflicts with --windows. The macOS runtime that consumes the output (TLS allocation, libraries built for macOS) comes in separate changes.
35 lines
767 B
C++
35 lines
767 B
C++
#ifndef CORE_RELINKER_CLI_INCLUDE_CLI_HPP
|
|
#define CORE_RELINKER_CLI_INCLUDE_CLI_HPP
|
|
|
|
#include <set>
|
|
#include <string>
|
|
#include <cstdint>
|
|
|
|
namespace Cli {
|
|
|
|
struct Args {
|
|
bool skipSyscallCheck = false;
|
|
bool skipSceModule = false;
|
|
bool toIntel = false;
|
|
bool writeRegistry = false;
|
|
bool toWindows = false;
|
|
bool toMacos = false;
|
|
bool lazyBinding = false;
|
|
bool autorun = false;
|
|
bool windowsDiagnostics = false;
|
|
bool windowsGui = false;
|
|
std::uint32_t unusedFilterLevel = 0;
|
|
std::string inputPath;
|
|
std::string outputPath;
|
|
std::string runPath = "$ORIGIN/libs";
|
|
std::set<std::string> excludedSceModules;
|
|
};
|
|
|
|
Args ParseArgs(int argc, char* argv[]);
|
|
|
|
int Autorun(const std::string& absPath, bool toWindows);
|
|
|
|
}
|
|
|
|
#endif
|