Compare commits

...
69 Commits
Author SHA1 Message Date
John Törnblom f5d40f0277 toolchain: set meson host_machine to freebsd (x86_64) 2026-10-10 13:18:44 +02:00
John Törnblom 1a04f75407 sce_stubs: add libSceAgc and libSceAgcDriver 2026-10-10 13:05:44 +02:00
MihawkandClaude Opus 5.5 10b539de8f include: replace the include_common link when installing over an SDK
ln -sf follows an existing link to a directory and creates the new link
inside it; -n replaces the link itself, so installing over a release
leaves the tree as a fresh install would.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 08:27:12 +02:00
John Törnblom f7fd02e6e1 add support for llvm-23 2026-09-23 22:43:31 +02:00
John Törnblom b4fcb924d6 pkg-config: improve compatibility with pkgconf-3 2026-09-23 22:38:40 +02:00
John Törnblom 3b6ea8044e libc: add killpg() 2026-09-03 20:52:10 +02:00
John Törnblom d9c9519116 crt: make payload_args->payloadout optional 2026-08-29 15:42:29 +02:00
John Törnblom 66daf51afe crt: add kernel_iommu_copyin() and some convenience functions for it 2026-08-29 13:35:04 +02:00
John Törnblom 4b86c73ab7 crt: derive iommu softc kernel address 2026-08-29 12:44:29 +02:00
John Törnblom f89a100c89 cosmetics 2026-08-29 11:59:30 +02:00
John Törnblom 8e125899b1 crt: add stubs for writing qa flags via iommu commands 2026-08-28 19:50:31 +02:00
Gezine 4eb701204f add support for firmware 13.60 2026-08-02 18:28:44 +02:00
John Törnblom 9d267a83fa crt: make sure stack is aligned (and restored on exit) 2026-08-02 17:12:35 +02:00
John Törnblom a9e742489a crt: fix potential bug in designated initializers with union members 2026-08-02 16:08:19 +02:00
John Törnblom a0d2bc60bd cosmetics 2026-07-04 00:02:52 +02:00
John Törnblom 558d2f5669 cosmetics 2026-07-03 23:45:06 +02:00
John Törnblom 4460639b2d cosmetics 2026-07-03 23:32:45 +02:00
John Törnblom 4e88ed694c cosmetics 2026-07-03 23:31:26 +02:00
John Törnblom 6d0cc823be cosmetics 2026-07-03 23:18:05 +02:00
illusiony 45fca06f9a add comment for reserved 0 write 2026-07-03 21:38:52 +02:00
illusionyandidlesauce 5184bcdfb4 crt: fix kernel rw opreations
- fixes writing at kernel address ending with `0xff` (see ps5-payload-dev/sdk issue 56)

Co-Authored-By: idlesauce <148508202+idlesauce@users.noreply.github.com>
2026-07-03 21:38:52 +02:00
John Törnblom c68b1b56ae kernel_virt2phys: fix overflow in page table hierarchy traversal 2026-07-02 23:28:02 +02:00
John Törnblom 2e6fab5042 crt: align the internal declaration of KERNEL_OFFSET_PROC_P_VMSPACE 2026-07-01 21:22:39 +02:00
John Törnblom 92320fbaef crt: add kernel procio functions that operate on pmap entries when mdbg is unavailable 2026-07-01 21:14:36 +02:00
Gezine cf547b191d add support for firmware 13.42 2026-07-01 21:14:25 +02:00
John Törnblom 3f219cd64b cosmetics 2026-06-30 22:14:28 +02:00
John Törnblom 4eee7ac558 kernel: add KERNEL_OFFSET_VMSPACE_VM_PMAP 2026-06-30 22:12:58 +02:00
alex-free d2e2e58574 improve deps 2026-06-28 17:33:42 +02:00
John Törnblom 9478d2baaa cosmetics 2026-06-28 17:28:26 +02:00
John Törnblom d77b34f88a libc: add stubs for getgrnam_r and getgrgid_r 2026-06-28 17:28:18 +02:00
John Törnblom 7f30ee52cd cosmetics 2026-06-25 19:29:38 +02:00
John Törnblom 3bede94ff9 cosmetics 2026-06-25 19:28:24 +02:00
John Törnblom cfbc7307ac kernel: change prototype for kernel_<get/set>_ucred_attrs so more attrs are exposed via api 2026-06-25 18:49:49 +02:00
John Törnblom 5b73e745cb cosmetics 2026-06-21 22:13:14 +02:00
John Törnblom 091540e1b8 add support for llvm-22 2026-06-21 22:13:14 +02:00
alex-free 1aa6d5603e update readme to specify which commands require root privileges 2026-06-21 22:09:26 +02:00
John Törnblom 9fe9f78db6 cosmetics 2026-06-21 22:07:17 +02:00
John Törnblom 551f796331 cosmetics 2026-06-21 22:06:19 +02:00
John Törnblom f2e8f65dae cosmetics 2026-06-21 21:51:43 +02:00
Aleksei Kulaev c1e0b74f25 Fix program path issue during lld invocation 2026-06-21 21:31:42 +02:00
Aleksei Kulaev 12433ce900 Fix issue with ld from Homebrew on MacOS 2026-06-21 21:31:42 +02:00
Aleksei Kulaev 10d9163fe4 Deduplicate code in makefiles 2026-06-21 21:31:42 +02:00
John Törnblom 8ae0a9babf sce stubs: add sceFsCreatePprPfsSaveDataImage 2026-06-10 21:24:54 +02:00
John Törnblom 9e4b1ad764 cosmetics 2026-06-05 21:25:45 +02:00
John Törnblom 6ab211b319 cosmetics 2026-06-05 21:05:22 +02:00
illusiony 7b5caa9449 crt: obtain sdk version from libc 2026-06-05 20:56:16 +02:00
Gezine 28720cfb33 add support for firmware 13.40 2026-06-05 20:51:39 +02:00
John Törnblom 13ccc2d5bf cosmetics 2026-05-22 19:47:47 +02:00
John Törnblom 5f68a946af fix linking with libdl and libpthread 2026-05-22 19:35:03 +02:00
John Törnblom ed69baef16 cosmetics 2026-05-22 18:49:56 +02:00
John Törnblom acfd93595e sce_stubs: fixes 2026-05-21 23:42:04 +02:00
John Törnblom 6bd9c1b64f toolchain: improve support for objective-c 2026-05-19 22:28:10 +02:00
John Törnblom 84ccd42dda cosmetics 2026-05-17 14:49:13 +02:00
John Törnblom b710649800 crt: use kernel_get_ucred_prison to resolve KERNEL_ADDRESS_PRISON0 2026-05-13 20:19:41 +02:00
John Törnblom df0508f622 add kernel_get_ucred_prison() and kernel_set_ucred_prison() 2026-05-13 20:19:41 +02:00
illusiony 64e25e8359 CMake: add PAYLOAD_DEPLOY 2026-05-12 18:30:07 +02:00
Echo Stretch 8154f82118 Added Support For 13.00/13.20 2026-05-03 22:50:31 +02:00
John Törnblom 9e7b5f8cca libc: add getloadavg() 2026-04-18 13:22:40 +02:00
John Törnblom 8ba558e844 samples: add example for relocatable linking 2026-04-17 18:53:19 +02:00
rrooij d74499b738 Omit PIE when -r is present
The options are incompatible with each other. Ran into this
when cross compiling some projects.
2026-04-17 18:47:44 +02:00
John Törnblom 1bd0d7bac0 libc: add nftw() 2026-04-09 14:28:17 +02:00
Echo Stretch 5b6683374a Add 11.xx and 12.xx offsets 2026-04-01 05:15:18 +02:00
Echo Stretch 6ae1470fd5 Adjust KERNEL_ADDRESS_TEXT_BASE offsets 2026-03-21 22:11:42 +01:00
Echo Stretch 7dabc1bb17 Added 11.xx and 12.xx Offsets 2026-03-21 22:11:42 +01:00
ItsJokerZz 1c617cac43 Added Mono Stubs
Tested and working- if within the ShellUI obviously.
2026-03-08 14:47:55 +01:00
Echo Stretch cca4ba3605 Fix KERNEL_OFFSET_VMSPACE_P_ROOT value 2026-03-01 23:12:31 +01:00
John Törnblom 1da036ae2a libufs: initial commit 2026-02-23 19:09:52 +01:00
John Törnblom e103138794 stubs: add libSceFsInternalForVsh 2026-02-19 16:27:18 +01:00
John Törnblom b58c5d94a9 stubs: add libSceHttp 2026-02-19 16:26:42 +01:00
50 changed files with 8982 additions and 826 deletions

No files matched your search

+2 -3
View File
@@ -14,11 +14,10 @@
# along with this program; see the file COPYING. If not see
# <http://www.gnu.org/licenses/>.
MAKE ?= make
DESTDIR ?= /opt/ps5-payload-sdk
include Makefile.inc
TOPTARGETS := all clean install
SUBDIRS := crt sce_stubs libc include host
SUBDIRS := crt sce_stubs libc libufs include host
ifdef WIN
SUBDIRS += host/win
+52
View File
@@ -0,0 +1,52 @@
# Copyright (C) 2026 John Törnblom
# Copyright (C) 2026 Aleksei Kulaev
#
# This file is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; see the file COPYING. If not see
# <http://www.gnu.org/licenses/>.
MAKE ?= make
PYTHON ?= python3
DESTDIR ?= /opt/ps5-payload-sdk
LLVM_CONFIG_CANDIDATES := llvm-config-23 llvm-config-22 llvm-config-21 \
llvm-config-20 llvm-config-19 llvm-config-18 \
llvm-config-17 llvm-config-16 llvm-config-15 \
llvm-config
LLVM_CONFIG_CANDIDATES := $(foreach LCC,$(LLVM_CONFIG_CANDIDATES), \
$(if $(shell command -v $(LCC) 2>/dev/null), $(LCC)))
LLVM_CONFIG ?= $(firstword $(LLVM_CONFIG_CANDIDATES))
ifndef LLVM_CONFIG
$(error Unable to find llvm-config)
endif
LLVM_BINDIR := $(shell $(LLVM_CONFIG) --bindir)
CC := $(LLVM_BINDIR)/clang
AR := $(LLVM_BINDIR)/llvm-ar
LD := $(LLVM_BINDIR)/ld.lld
# When using macos with brew, lld-19 and above are not installed in the standard
# llvm bindir directory, compensate for that here.
ifeq ($(shell command -v $(LD) 2>/dev/null),)
OS := $(shell uname -s)
ifeq ($(OS),Darwin)
BREW := $(shell command -v brew 2>/dev/null)
ifneq ($(BREW),)
LD := $(shell $(BREW) --prefix lld 2>/dev/null)/bin/ld.lld
else
$(error Unable to find brew)
endif
endif
endif
+10 -11
View File
@@ -14,21 +14,21 @@ On Debian-flavored operating systems, you can invoke the following commands to
install dependencies used by the SDK.
```console
john@localhost:ps5-payload-dev/sdk$ sudo apt-get update && sudo apt-get upgrade # optional
john@localhost:ps5-payload-dev/sdk$ sudo apt-get install bash clang-18 lld-18 # required
john@localhost:ps5-payload-dev/sdk$ sudo apt-get install socat cmake meson pkg-config # optional
john@localhost:ps5-payload-dev/sdk$ sudo apt-get install bash clang-18 lld-18 wget # required
john@localhost:ps5-payload-dev/sdk$ sudo apt-get install socat cmake meson pkg-config python3 python3-pyelftools # optional
```
If you are using Fedora, you can install dependencies as follows (tested with version 41):
```console
john@localhost:ps5-payload-dev/sdk$ sudo dnf install bash llvm-devel clang lld # required
john@localhost:ps5-payload-dev/sdk$ sudo dnf install socat cmake meson pkg-config # optional
john@localhost:ps5-payload-dev/sdk$ sudo dnf install bash llvm-devel clang lld wget # required
john@localhost:ps5-payload-dev/sdk$ sudo dnf install socat cmake meson pkg-config python3 python3-pyelftools # optional
```
If you are using macOS, you can install them using the [Homebrew Package Manager][macos-brew] (tested with macOS Sequoia):
```console
john@localhost:ps5-payload-dev/sdk$ brew install llvm@18 # required
john@localhost:ps5-payload-dev/sdk$ brew install llvm@18 wget # required
john@localhost:ps5-payload-dev/sdk$ export LLVM_CONFIG=/opt/homebrew/opt/llvm@18/bin/llvm-config # required
john@localhost:ps5-payload-dev/sdk$ brew install socat cmake meson # optional
john@localhost:ps5-payload-dev/sdk$ brew install socat cmake meson python && pip3 install pyelftools # optional
```
## Quick-start
@@ -51,19 +51,18 @@ john@localhost:ps5-payload-dev/sdk$ make -C samples/hello_world test
## Building the SDK
```console
john@localhost:ps5-payload-dev/sdk$ make DESTDIR=/opt/ps5-payload-sdk install
john@localhost:ps5-payload-dev/sdk$ sudo make DESTDIR=/opt/ps5-payload-sdk install
john@localhost:ps5-payload-dev/sdk$ export PS5_PAYLOAD_SDK=/opt/ps5-payload-sdk
john@localhost:ps5-payload-dev/sdk$ ./libcxx.sh # fetch, build, and install libcxx
john@localhost:ps5-payload-dev/sdk$ sudo -E ./libcxx.sh # fetch, build, and install libcxx
```
## Adding new SCE Libs
If you have decrypted sprx files that you would like to interact with, you can
build stubs for them as follows:
build stubs for them as follows (Make sure you have already installed the optional dependencies for your OS):
```console
john@localhost:ps5-payload-dev/sdk$ sudo apt-get install wget python3 python3-pyelftools
john@localhost:ps5-payload-dev/sdk$ ln -s /path/to/sprx/libSceXYZ.sprx sce_stubs/libSceXYZ.sprx
john@localhost:ps5-payload-dev/sdk$ make -C sce_stubs stubs
john@localhost:ps5-payload-dev/sdk$ make DESTDIR=/opt/ps5-payload-sdk install
john@localhost:ps5-payload-dev/sdk$ sudo make DESTDIR=/opt/ps5-payload-sdk install
```
## Reporting Bugs
+2 -1
View File
@@ -41,7 +41,8 @@ MAKE_SAMPLES=("arbitrary_syscall"
"mntinfo"
"notify"
"notify_debug"
"ps")
"ps"
"relocatable_linking")
CMAKE_SAMPLES=("hello_cmake"
)
+6 -19
View File
@@ -14,24 +14,7 @@
# along with this program; see the file COPYING. If not see
# <http://www.gnu.org/licenses/>.
DESTDIR ?= /opt/ps5-payload-sdk
LLVM_CONFIG_CANDIDATES := llvm-config-21 \
llvm-config-20 llvm-config-19 llvm-config-18 \
llvm-config-17 llvm-config-16 llvm-config-15 \
llvm-config
LLVM_CONFIG_CANDIDATES := $(foreach LCC,$(LLVM_CONFIG_CANDIDATES), \
$(if $(shell command -v $(LCC) 2>/dev/null), $(LCC)))
LLVM_CONFIG ?= $(firstword $(LLVM_CONFIG_CANDIDATES))
ifndef LLVM_CONFIG
$(error Unable to find llvm-config)
endif
LLVM_BINDIR := $(shell $(LLVM_CONFIG) --bindir)
CC := $(LLVM_BINDIR)/clang
AR := $(LLVM_BINDIR)/llvm-ar
LD := $(LLVM_BINDIR)/ld.lld
include ../Makefile.inc
CFLAGS += -ffreestanding -fno-builtin -nostdlib -fPIC
CFLAGS += -target x86_64-sie-ps5 -fno-plt -fno-stack-protector
@@ -40,7 +23,8 @@ CFLAGS += -fms-extensions -Wno-microsoft-anon-tag
CFLAGS += -O1
OBJ := crt.o syscall.o klog.o nid.o kernel.o rtld.o rtld_so.o rtld_sprx.o \
rtld_payload.o rtld_dlfcn.o mdbg.o patch.o
rtld_payload.o rtld_dlfcn.o mdbg.o patch.o kernel_procio.o \
kernel_iommu.o _start.o
.PHONY: all clean install
@@ -70,6 +54,9 @@ crt1.o: $(OBJ)
%.o: %.c
$(CC) -c $(CFLAGS) -o $@ $^
%.o: %.S
$(CC) -c $(CFLAGS) -masm=intel -o $@ $^
clean:
rm -f *.o *.a
+37
View File
@@ -0,0 +1,37 @@
/* Copyright (C) 2026 John Törnblom
This program is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the
Free Software Foundation; either version 3, or (at your option) any
later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; see the file COPYING. If not, see
<http://www.gnu.org/licenses/>. */
.intel_syntax noprefix
.data
.local __crt_reg_backup
.type __crt_reg_backup, @object
__crt_reg_backup:
.quad 0
.text
.extern __crt_start
.type __crt_start, @function
.text
.global _start
.type _start, @function
_start:
mov [__crt_reg_backup + rip], rsp
and rsp, -16
call __crt_start
mov rsp, [__crt_reg_backup + rip]
ret
+22 -7
View File
@@ -131,7 +131,10 @@ payload_run(void) {
}
// run the actual payload
*payload_args->payloadout = main(argc, argv, environ);
err = main(argc, argv, environ);
if(payload_args->payloadout) {
*payload_args->payloadout = err;
}
// run .fini destructors
if((err=__rtld_lib_fini(lib))) {
@@ -153,15 +156,20 @@ payload_run(void) {
static int
payload_terminate(void) {
void (*exit)(int) = 0;
int exit_code = 0;
// we are running inside a hijacked process, just return
if(kernel_dynlib_dlsym(-1, 0x2001, "sceKernelDlsym")) {
return 0;
return exit_code;
}
if(payload_args->payloadout) {
exit_code = *payload_args->payloadout;
}
// resolve and run exit
if(KERNEL_DLSYM(0x2, exit)) {
exit(*payload_args->payloadout);
exit(exit_code);
}
// should not happend
@@ -176,7 +184,9 @@ payload_terminate(void) {
**/
void
payload_exit(int exit_code) {
*payload_args->payloadout = exit_code;
if(payload_args->payloadout) {
*payload_args->payloadout = exit_code;
}
__builtin_longjmp(jmpbuf, 1);
}
@@ -194,7 +204,7 @@ payload_get_args(void) {
* Entry-point invoked by the ELF loader.
**/
int
_start(payload_args_t *args) {
__crt_start(payload_args_t *args) {
int err;
// clear .bss section
@@ -205,14 +215,19 @@ _start(payload_args_t *args) {
payload_args = args;
// init payload runtime
if((*args->payloadout=payload_init(args))) {
if((err=payload_init(args))) {
if(args->payloadout) {
*args->payloadout = err;
}
return payload_terminate();
}
// run payload
if(!__builtin_setjmp(jmpbuf)) {
if((err=payload_run())) {
*payload_args->payloadout = err;
if(args->payloadout) {
*args->payloadout = err;
}
}
}
+309 -82
View File
@@ -16,6 +16,7 @@ along with this program; see the file COPYING. If not, see
#include "elf.h"
#include "kernel.h"
#include "kernel_iommu.h"
#include "nid.h"
#include "syscall.h"
@@ -39,16 +40,45 @@ along with this program; see the file COPYING. If not, see
#define PROT_READ 1
#define PROT_WRITE 2
#define IN6_PKTINFOSZ 5
/**
*
**/
typedef union kernel_pipebuf {
unsigned int n[IN6_PKTINFOSZ];
struct __attribute__((packed)) {
unsigned int cnt;
unsigned int in;
unsigned int out;
unsigned long reserved;
} flags;
struct __attribute__((packed)) {
unsigned int size;
unsigned long kaddr;
unsigned long reserved;
} pbuf;
struct __attribute__((packed)) {
unsigned long kaddr;
unsigned int reserved[3];
} vbuf;
} kernel_pipebuf_t;
/**
* public constants.
**/
unsigned long KERNEL_ADDRESS_TEXT_BASE = 0; // optional
unsigned long KERNEL_ADDRESS_DATA_BASE = 0; // provided by payload args
unsigned long KERNEL_ADDRESS_DMAP_BASE = 0; // derived by crt
unsigned long KERNEL_ADDRESS_IOMMU_SOFTC = 0; // derived by crt
unsigned long KERNEL_ADDRESS_ALLPROC = 0; // needed by crt
unsigned long KERNEL_ADDRESS_PRISON0 = 0; // needed by crt
unsigned long KERNEL_ADDRESS_ROOTVNODE = 0; // needed by crt
unsigned long KERNEL_ADDRESS_SECURITY_FLAGS = 0; // needed by crt
unsigned long KERNEL_ADDRESS_PRISON0 = 0; // derived by crt
unsigned long KERNEL_ADDRESS_UTOKEN_FLAGS = 0; // derived by crt
unsigned long KERNEL_ADDRESS_QA_FLAGS = 0; // derived by crt
unsigned long KERNEL_ADDRESS_TARGETID = 0; // derived by crt
@@ -59,7 +89,8 @@ const unsigned long KERNEL_OFFSET_PROC_P_FD = 0x48;
const unsigned long KERNEL_OFFSET_PROC_P_PID = 0xBC;
const unsigned long KERNEL_OFFSET_PROC_P_VMSPACE = 0x200;
unsigned long KERNEL_OFFSET_VMSPACE_P_ROOT = 0; // needed by crt
unsigned long KERNEL_OFFSET_VMSPACE_P_ROOT = 0; // needed by crt
unsigned long KERNEL_OFFSET_VMSPACE_VM_PMAP = 0; // needed by crt
const unsigned long KERNEL_OFFSET_UCRED_CR_UID = 0x04;
const unsigned long KERNEL_OFFSET_UCRED_CR_RUID = 0x08;
@@ -67,9 +98,11 @@ const unsigned long KERNEL_OFFSET_UCRED_CR_SVUID = 0x0C;
const unsigned long KERNEL_OFFSET_UCRED_CR_RGID = 0x14;
const unsigned long KERNEL_OFFSET_UCRED_CR_SVGID = 0x18;
const unsigned long KERNEL_OFFSET_UCRED_CR_PRISON = 0x30;
const unsigned long KERNEL_OFFSET_UCRED_CR_SCEAUTHID = 0x58;
const unsigned long KERNEL_OFFSET_UCRED_CR_SCECAPS = 0x60;
const unsigned long KERNEL_OFFSET_UCRED_CR_SCEATTRS = 0x83;
const unsigned long KERNEL_OFFSET_UCRED_CR_SCEATTRS = 0x80;
const unsigned long KERNEL_OFFSET_FILEDESC_FD_RDIR = 0x10;
const unsigned long KERNEL_OFFSET_FILEDESC_FD_JDIR = 0x18;
@@ -143,17 +176,102 @@ strlen(const char *str) {
}
unsigned int
kernel_get_fw_version(void) {
int mib[2] = {1, 46};
unsigned long size = sizeof(mib);
unsigned int version = 0;
static int
kernel_is_heap_addr(unsigned long kaddr) {
unsigned int hi;
if(__crt_syscall(SYS_sysctl, mib, 2, &version, &size, 0, 0)) {
if(!kaddr || (kaddr & 7)) {
return 0;
}
if((kaddr >> 48) != 0xffff) {
return 0;
}
return version;
hi = (unsigned int)((kaddr >> 32) & 0xffff);
if(hi == 0 || hi == 0xffff) {
return 0;
}
return 1;
}
static unsigned long
kernel_find_dmap_base(void) {
unsigned long vmspace;
unsigned long pml4u;
unsigned long proc;
unsigned long cr3;
if(!(proc=kernel_get_proc(0))) {
return 0;
}
if(kernel_copyout(proc + KERNEL_OFFSET_PROC_P_VMSPACE,
&vmspace, sizeof(vmspace))) {
return 0;
}
if(kernel_copyout(vmspace + KERNEL_OFFSET_VMSPACE_VM_PMAP + 0x20,
&pml4u, sizeof(pml4u))) {
return 0;
}
if(kernel_copyout(vmspace + KERNEL_OFFSET_VMSPACE_VM_PMAP + 0x28,
&cr3, sizeof(cr3))) {
return 0;
}
return pml4u - cr3;
}
static unsigned long
kernel_find_iommu_softc(void) {
unsigned long softc;
unsigned long kaddr;
unsigned long paddr;
for(kaddr=KERNEL_ADDRESS_ALLPROC; kaddr>=KERNEL_ADDRESS_DATA_BASE+8; kaddr-=8) {
if(kernel_copyout(kaddr, &softc, sizeof(softc))) {
return 0;
}
if(!kernel_is_heap_addr(softc)) {
continue;
}
if(kernel_copyout(softc+0x48, &paddr, sizeof(paddr))) {
continue;
}
if(paddr == 0xfdd80000UL) {
return softc;
}
}
return 0;
}
/**
* Read the firmware version from libSceLibcInternal.sprx since some payloads
* modify the version reported by the kernel.
**/
unsigned int
kernel_get_fw_version(void) {
struct Sce_Proc_Param {
unsigned long structsize;
unsigned int magic;
unsigned int ent_count;
unsigned int sdk_ps4_ver;
unsigned int sdk_ps5_ver;
} *sce_proc_param = 0;
unsigned int handle = 0x2;
if(__crt_syscall(SYS_dynlib_get_obj_member, handle, 8, &sce_proc_param)) {
return 0;
}
if(!sce_proc_param) {
return 0;
}
return sce_proc_param->sdk_ps5_ver;
}
@@ -187,10 +305,10 @@ __kernel_init(payload_args_t* args) {
KERNEL_ADDRESS_TEXT_BASE = KERNEL_ADDRESS_DATA_BASE - 0x1B40000;
KERNEL_ADDRESS_ALLPROC = KERNEL_ADDRESS_DATA_BASE + 0x26D1BF8;
KERNEL_ADDRESS_SECURITY_FLAGS = KERNEL_ADDRESS_DATA_BASE + 0x6241074;
KERNEL_ADDRESS_PRISON0 = KERNEL_ADDRESS_DATA_BASE + 0x1911E00;
KERNEL_ADDRESS_ROOTVNODE = KERNEL_ADDRESS_DATA_BASE + 0x6565540;
KERNEL_ADDRESS_BUS_DATA_DEVICES = KERNEL_ADDRESS_DATA_BASE + 0x1D6D478;
KERNEL_OFFSET_VMSPACE_P_ROOT = 0x1c0;
KERNEL_OFFSET_VMSPACE_VM_PMAP = 0x2c0;
break;
case 0x1050000:
@@ -202,20 +320,20 @@ __kernel_init(payload_args_t* args) {
KERNEL_ADDRESS_TEXT_BASE = KERNEL_ADDRESS_DATA_BASE - 0x1B40000;
KERNEL_ADDRESS_ALLPROC = KERNEL_ADDRESS_DATA_BASE + 0x26D1C18;
KERNEL_ADDRESS_SECURITY_FLAGS = KERNEL_ADDRESS_DATA_BASE + 0x6241074;
KERNEL_ADDRESS_PRISON0 = KERNEL_ADDRESS_DATA_BASE + 0x1911E00;
KERNEL_ADDRESS_ROOTVNODE = KERNEL_ADDRESS_DATA_BASE + 0x6565540;
KERNEL_ADDRESS_BUS_DATA_DEVICES = KERNEL_ADDRESS_DATA_BASE + 0x1D6D487;
KERNEL_OFFSET_VMSPACE_P_ROOT = 0x1c0;
KERNEL_OFFSET_VMSPACE_P_ROOT = 0x1c8;
KERNEL_OFFSET_VMSPACE_VM_PMAP = 0x2e0;
break;
case 0x2000000:
KERNEL_ADDRESS_TEXT_BASE = KERNEL_ADDRESS_DATA_BASE - 0x1B80000;
KERNEL_ADDRESS_ALLPROC = KERNEL_ADDRESS_DATA_BASE + 0x2701C28;
KERNEL_ADDRESS_SECURITY_FLAGS = KERNEL_ADDRESS_DATA_BASE + 0x63E1274;
KERNEL_ADDRESS_PRISON0 = KERNEL_ADDRESS_DATA_BASE + 0x194BA60;
KERNEL_ADDRESS_ROOTVNODE = KERNEL_ADDRESS_DATA_BASE + 0x67134C0;
KERNEL_ADDRESS_BUS_DATA_DEVICES = KERNEL_ADDRESS_DATA_BASE + 0x1D91478;
KERNEL_OFFSET_VMSPACE_P_ROOT = 0x1c8;
KERNEL_OFFSET_VMSPACE_VM_PMAP = 0x2e0;
break;
case 0x2200000:
@@ -227,10 +345,10 @@ __kernel_init(payload_args_t* args) {
KERNEL_ADDRESS_TEXT_BASE = KERNEL_ADDRESS_DATA_BASE - 0x1B80000;
KERNEL_ADDRESS_ALLPROC = KERNEL_ADDRESS_DATA_BASE + 0x2701C28;
KERNEL_ADDRESS_SECURITY_FLAGS = KERNEL_ADDRESS_DATA_BASE + 0x63E1274;
KERNEL_ADDRESS_PRISON0 = KERNEL_ADDRESS_DATA_BASE + 0x194BD20;
KERNEL_ADDRESS_ROOTVNODE = KERNEL_ADDRESS_DATA_BASE + 0x67134C0;
KERNEL_ADDRESS_BUS_DATA_DEVICES = KERNEL_ADDRESS_DATA_BASE + 0x1D91478;
KERNEL_OFFSET_VMSPACE_P_ROOT = 0x1c8;
KERNEL_OFFSET_VMSPACE_VM_PMAP = 0x2e0;
break;
case 0x3000000:
@@ -240,20 +358,20 @@ __kernel_init(payload_args_t* args) {
KERNEL_ADDRESS_TEXT_BASE = KERNEL_ADDRESS_DATA_BASE - 0x0BD0000;
KERNEL_ADDRESS_ALLPROC = KERNEL_ADDRESS_DATA_BASE + 0x276DC58;
KERNEL_ADDRESS_SECURITY_FLAGS = KERNEL_ADDRESS_DATA_BASE + 0x6466474;
KERNEL_ADDRESS_PRISON0 = KERNEL_ADDRESS_DATA_BASE + 0x1CC2670;
KERNEL_ADDRESS_ROOTVNODE = KERNEL_ADDRESS_DATA_BASE + 0x67AB4C0;
KERNEL_ADDRESS_BUS_DATA_DEVICES = KERNEL_ADDRESS_DATA_BASE + 0x1DF1678;
KERNEL_OFFSET_VMSPACE_P_ROOT = 0x1c8;
KERNEL_OFFSET_VMSPACE_VM_PMAP = 0x2e0;
break;
case 0x4020000:
KERNEL_ADDRESS_TEXT_BASE = KERNEL_ADDRESS_DATA_BASE - 0x0C00000;
KERNEL_ADDRESS_ALLPROC = KERNEL_ADDRESS_DATA_BASE + 0x27EDCB8;
KERNEL_ADDRESS_SECURITY_FLAGS = KERNEL_ADDRESS_DATA_BASE + 0x6506474;
KERNEL_ADDRESS_PRISON0 = KERNEL_ADDRESS_DATA_BASE + 0x1D34D00;
KERNEL_ADDRESS_ROOTVNODE = KERNEL_ADDRESS_DATA_BASE + 0x66E74C0;
KERNEL_ADDRESS_BUS_DATA_DEVICES = KERNEL_ADDRESS_DATA_BASE + 0x1E69678;
KERNEL_OFFSET_VMSPACE_P_ROOT = 0x1c8;
KERNEL_OFFSET_VMSPACE_VM_PMAP = 0x2e0;
break;
case 0x4000000:
@@ -263,10 +381,10 @@ __kernel_init(payload_args_t* args) {
KERNEL_ADDRESS_TEXT_BASE = KERNEL_ADDRESS_DATA_BASE - 0x0C00000;
KERNEL_ADDRESS_ALLPROC = KERNEL_ADDRESS_DATA_BASE + 0x27EDCB8;
KERNEL_ADDRESS_SECURITY_FLAGS = KERNEL_ADDRESS_DATA_BASE + 0x6506474;
KERNEL_ADDRESS_PRISON0 = KERNEL_ADDRESS_DATA_BASE + 0x1D34D00;
KERNEL_ADDRESS_ROOTVNODE = KERNEL_ADDRESS_DATA_BASE + 0x66E74C0;
KERNEL_ADDRESS_BUS_DATA_DEVICES = KERNEL_ADDRESS_DATA_BASE + 0x1E69678;
KERNEL_OFFSET_VMSPACE_P_ROOT = 0x1c8;
KERNEL_OFFSET_VMSPACE_VM_PMAP = 0x2e0;
break;
case 0x5000000:
@@ -275,20 +393,20 @@ __kernel_init(payload_args_t* args) {
KERNEL_ADDRESS_TEXT_BASE = KERNEL_ADDRESS_DATA_BASE - 0x0C40000;
KERNEL_ADDRESS_ALLPROC = KERNEL_ADDRESS_DATA_BASE + 0x291DD00;
KERNEL_ADDRESS_SECURITY_FLAGS = KERNEL_ADDRESS_DATA_BASE + 0x66466EC;
KERNEL_ADDRESS_PRISON0 = KERNEL_ADDRESS_DATA_BASE + 0x1E23470;
KERNEL_ADDRESS_ROOTVNODE = KERNEL_ADDRESS_DATA_BASE + 0x6853510;
KERNEL_ADDRESS_BUS_DATA_DEVICES = KERNEL_ADDRESS_DATA_BASE + 0x1F996C8;
KERNEL_OFFSET_VMSPACE_P_ROOT = 0x1c8;
KERNEL_OFFSET_VMSPACE_VM_PMAP = 0x2e0;
break;
case 0x5500000:
KERNEL_ADDRESS_TEXT_BASE = KERNEL_ADDRESS_DATA_BASE - 0x0C40000;
KERNEL_ADDRESS_ALLPROC = KERNEL_ADDRESS_DATA_BASE + 0x291DD00;
KERNEL_ADDRESS_SECURITY_FLAGS = KERNEL_ADDRESS_DATA_BASE + 0x66466EC;
KERNEL_ADDRESS_PRISON0 = KERNEL_ADDRESS_DATA_BASE + 0x1E235B0;
KERNEL_ADDRESS_ROOTVNODE = KERNEL_ADDRESS_DATA_BASE + 0x6853510;
KERNEL_ADDRESS_BUS_DATA_DEVICES = KERNEL_ADDRESS_DATA_BASE + 0x1F996C8;
KERNEL_OFFSET_VMSPACE_P_ROOT = 0x1c8;
KERNEL_OFFSET_VMSPACE_VM_PMAP = 0x2e0;
break;
case 0x6000000:
@@ -297,10 +415,10 @@ __kernel_init(payload_args_t* args) {
KERNEL_ADDRESS_TEXT_BASE = KERNEL_ADDRESS_DATA_BASE - 0x0C60000;
KERNEL_ADDRESS_ALLPROC = KERNEL_ADDRESS_DATA_BASE + 0x2869D20;
KERNEL_ADDRESS_SECURITY_FLAGS = KERNEL_ADDRESS_DATA_BASE + 0x65968EC;
KERNEL_ADDRESS_PRISON0 = KERNEL_ADDRESS_DATA_BASE + 0x1E45560;
KERNEL_ADDRESS_ROOTVNODE = KERNEL_ADDRESS_DATA_BASE + 0x679F510;
KERNEL_ADDRESS_BUS_DATA_DEVICES = KERNEL_ADDRESS_DATA_BASE + 0x1FB96C8;
KERNEL_OFFSET_VMSPACE_P_ROOT = 0x1d0;
KERNEL_OFFSET_VMSPACE_VM_PMAP = 0x2e8;
break;
case 0x7000000:
@@ -312,10 +430,10 @@ __kernel_init(payload_args_t* args) {
KERNEL_ADDRESS_TEXT_BASE = KERNEL_ADDRESS_DATA_BASE - 0x0C50000;
KERNEL_ADDRESS_ALLPROC = KERNEL_ADDRESS_DATA_BASE + 0x2859D50;
KERNEL_ADDRESS_SECURITY_FLAGS = KERNEL_ADDRESS_DATA_BASE + 0x0AC8064;
KERNEL_ADDRESS_PRISON0 = KERNEL_ADDRESS_DATA_BASE + 0x1E477F0;
KERNEL_ADDRESS_ROOTVNODE = KERNEL_ADDRESS_DATA_BASE + 0x30C7510;
KERNEL_ADDRESS_BUS_DATA_DEVICES = KERNEL_ADDRESS_DATA_BASE + 0x1FA5718;
KERNEL_OFFSET_VMSPACE_P_ROOT = 0x1d0;
KERNEL_OFFSET_VMSPACE_VM_PMAP = 0x2e8;
break;
case 0x8000000:
@@ -325,20 +443,20 @@ __kernel_init(payload_args_t* args) {
KERNEL_ADDRESS_TEXT_BASE = KERNEL_ADDRESS_DATA_BASE - 0x0C70000;
KERNEL_ADDRESS_ALLPROC = KERNEL_ADDRESS_DATA_BASE + 0x2875D50;
KERNEL_ADDRESS_SECURITY_FLAGS = KERNEL_ADDRESS_DATA_BASE + 0x0AC3064;
KERNEL_ADDRESS_PRISON0 = KERNEL_ADDRESS_DATA_BASE + 0x1E484D0;
KERNEL_ADDRESS_ROOTVNODE = KERNEL_ADDRESS_DATA_BASE + 0x30FB510;
KERNEL_ADDRESS_BUS_DATA_DEVICES = KERNEL_ADDRESS_DATA_BASE + 0x1FA5718;
KERNEL_OFFSET_VMSPACE_P_ROOT = 0x1d0;
KERNEL_OFFSET_VMSPACE_VM_PMAP = 0x2e8;
break;
case 0x9000000:
KERNEL_ADDRESS_TEXT_BASE = KERNEL_ADDRESS_DATA_BASE - 0x0CA0000;
KERNEL_ADDRESS_ALLPROC = KERNEL_ADDRESS_DATA_BASE + 0x2755D50;
KERNEL_ADDRESS_SECURITY_FLAGS = KERNEL_ADDRESS_DATA_BASE + 0x0D72064;
KERNEL_ADDRESS_PRISON0 = KERNEL_ADDRESS_DATA_BASE + 0x1E0ED80;
KERNEL_ADDRESS_ROOTVNODE = KERNEL_ADDRESS_DATA_BASE + 0x2FDB510;
KERNEL_ADDRESS_BUS_DATA_DEVICES = KERNEL_ADDRESS_DATA_BASE + 0x1F65718;
KERNEL_OFFSET_VMSPACE_P_ROOT = 0x1d0;
KERNEL_OFFSET_VMSPACE_VM_PMAP = 0x2e8;
break;
case 0x9050000:
@@ -348,10 +466,10 @@ __kernel_init(payload_args_t* args) {
KERNEL_ADDRESS_TEXT_BASE = KERNEL_ADDRESS_DATA_BASE - 0x0CA0000;
KERNEL_ADDRESS_ALLPROC = KERNEL_ADDRESS_DATA_BASE + 0x2755D50;
KERNEL_ADDRESS_SECURITY_FLAGS = KERNEL_ADDRESS_DATA_BASE + 0x0D73064;
KERNEL_ADDRESS_PRISON0 = KERNEL_ADDRESS_DATA_BASE + 0x1E0ED80;
KERNEL_ADDRESS_ROOTVNODE = KERNEL_ADDRESS_DATA_BASE + 0x2FDB510;
KERNEL_ADDRESS_BUS_DATA_DEVICES = KERNEL_ADDRESS_DATA_BASE + 0x1F65718;
KERNEL_OFFSET_VMSPACE_P_ROOT = 0x1d0;
KERNEL_OFFSET_VMSPACE_VM_PMAP = 0x2e8;
break;
case 0x10000000:
@@ -362,12 +480,90 @@ __kernel_init(payload_args_t* args) {
KERNEL_ADDRESS_TEXT_BASE = KERNEL_ADDRESS_DATA_BASE - 0x0CC0000;
KERNEL_ADDRESS_ALLPROC = KERNEL_ADDRESS_DATA_BASE + 0x2765D70;
KERNEL_ADDRESS_SECURITY_FLAGS = KERNEL_ADDRESS_DATA_BASE + 0x0D79064;
KERNEL_ADDRESS_PRISON0 = KERNEL_ADDRESS_DATA_BASE + 0x1E0F4E0;
KERNEL_ADDRESS_ROOTVNODE = KERNEL_ADDRESS_DATA_BASE + 0x2FA3510;
KERNEL_ADDRESS_BUS_DATA_DEVICES = KERNEL_ADDRESS_DATA_BASE + 0x1F65718;
KERNEL_OFFSET_VMSPACE_P_ROOT = 0x1d0;
KERNEL_OFFSET_VMSPACE_VM_PMAP = 0x2e8;
break;
case 0x11000000:
case 0x11200000:
KERNEL_ADDRESS_TEXT_BASE = KERNEL_ADDRESS_DATA_BASE - 0x0D30000;
KERNEL_ADDRESS_ALLPROC = KERNEL_ADDRESS_DATA_BASE + 0x2875D70;
KERNEL_ADDRESS_SECURITY_FLAGS = KERNEL_ADDRESS_DATA_BASE + 0x0D8C064;
KERNEL_ADDRESS_ROOTVNODE = KERNEL_ADDRESS_DATA_BASE + 0x30B7510;
KERNEL_ADDRESS_BUS_DATA_DEVICES = KERNEL_ADDRESS_DATA_BASE + 0x2075718;
KERNEL_OFFSET_VMSPACE_P_ROOT = 0x1d0;
KERNEL_OFFSET_VMSPACE_VM_PMAP = 0x2e8;
break;
case 0x11400000:
KERNEL_ADDRESS_TEXT_BASE = KERNEL_ADDRESS_DATA_BASE - 0x0D30000;
KERNEL_ADDRESS_ALLPROC = KERNEL_ADDRESS_DATA_BASE + 0x2875D70;
KERNEL_ADDRESS_SECURITY_FLAGS = KERNEL_ADDRESS_DATA_BASE + 0x0D8C064;
KERNEL_ADDRESS_ROOTVNODE = KERNEL_ADDRESS_DATA_BASE + 0x30B7510;
KERNEL_ADDRESS_BUS_DATA_DEVICES = KERNEL_ADDRESS_DATA_BASE + 0x2075718;
KERNEL_OFFSET_VMSPACE_P_ROOT = 0x1d0;
KERNEL_OFFSET_VMSPACE_VM_PMAP = 0x2e8;
break;
case 0x11600000:
KERNEL_ADDRESS_TEXT_BASE = KERNEL_ADDRESS_DATA_BASE - 0x0D30000;
KERNEL_ADDRESS_ALLPROC = KERNEL_ADDRESS_DATA_BASE + 0x2875D70;
KERNEL_ADDRESS_SECURITY_FLAGS = KERNEL_ADDRESS_DATA_BASE + 0x0D8C064;
KERNEL_ADDRESS_ROOTVNODE = KERNEL_ADDRESS_DATA_BASE + 0x30B7510;
KERNEL_ADDRESS_BUS_DATA_DEVICES = KERNEL_ADDRESS_DATA_BASE + 0x2075718;
KERNEL_OFFSET_VMSPACE_P_ROOT = 0x1d0;
KERNEL_OFFSET_VMSPACE_VM_PMAP = 0x2e8;
break;
case 0x12000000:
case 0x12020000:
case 0x12200000:
case 0x12400000:
case 0x12600000:
case 0x12700000:
KERNEL_ADDRESS_TEXT_BASE = KERNEL_ADDRESS_DATA_BASE - 0x0D50000;
KERNEL_ADDRESS_ALLPROC = KERNEL_ADDRESS_DATA_BASE + 0x2885E00;
KERNEL_ADDRESS_SECURITY_FLAGS = KERNEL_ADDRESS_DATA_BASE + 0x0D83064;
KERNEL_ADDRESS_ROOTVNODE = KERNEL_ADDRESS_DATA_BASE + 0x30D7510;
KERNEL_ADDRESS_BUS_DATA_DEVICES = KERNEL_ADDRESS_DATA_BASE + 0x20757E8;
KERNEL_OFFSET_VMSPACE_P_ROOT = 0x1d0;
KERNEL_OFFSET_VMSPACE_VM_PMAP = 0x2e8;
break;
case 0x13000000:
case 0x13200000:
KERNEL_ADDRESS_TEXT_BASE = KERNEL_ADDRESS_DATA_BASE - 0x0CB0000;
KERNEL_ADDRESS_ALLPROC = KERNEL_ADDRESS_DATA_BASE + 0x28C5E00;
KERNEL_ADDRESS_SECURITY_FLAGS = KERNEL_ADDRESS_DATA_BASE + 0x0D99064;
KERNEL_ADDRESS_ROOTVNODE = KERNEL_ADDRESS_DATA_BASE + 0x3133510;
KERNEL_ADDRESS_BUS_DATA_DEVICES = KERNEL_ADDRESS_DATA_BASE + 0x20981E8;
KERNEL_OFFSET_VMSPACE_P_ROOT = 0x1d0;
KERNEL_OFFSET_VMSPACE_VM_PMAP = 0x2e8;
break;
case 0x13400000:
case 0x13420000:
KERNEL_ADDRESS_TEXT_BASE = KERNEL_ADDRESS_DATA_BASE - 0x0CB0000;
KERNEL_ADDRESS_ALLPROC = KERNEL_ADDRESS_DATA_BASE + 0x28C9E80;
KERNEL_ADDRESS_SECURITY_FLAGS = KERNEL_ADDRESS_DATA_BASE + 0x0D99064;
KERNEL_ADDRESS_ROOTVNODE = KERNEL_ADDRESS_DATA_BASE + 0x3137510;
KERNEL_ADDRESS_BUS_DATA_DEVICES = KERNEL_ADDRESS_DATA_BASE + 0x20981E8;
KERNEL_OFFSET_VMSPACE_P_ROOT = 0x1d0;
KERNEL_OFFSET_VMSPACE_VM_PMAP = 0x2e8;
break;
case 0x13600000:
KERNEL_ADDRESS_TEXT_BASE = KERNEL_ADDRESS_DATA_BASE - 0x0CC0000;
KERNEL_ADDRESS_ALLPROC = KERNEL_ADDRESS_DATA_BASE + 0x28C9E80;
KERNEL_ADDRESS_SECURITY_FLAGS = KERNEL_ADDRESS_DATA_BASE + 0x0D9C064;
KERNEL_ADDRESS_ROOTVNODE = KERNEL_ADDRESS_DATA_BASE + 0x314B510;
KERNEL_ADDRESS_BUS_DATA_DEVICES = KERNEL_ADDRESS_DATA_BASE + 0x2098228;
KERNEL_OFFSET_VMSPACE_P_ROOT = 0x1d0;
KERNEL_OFFSET_VMSPACE_VM_PMAP = 0x2e8;
break;
default:
return -ENOSYS;
}
@@ -375,6 +571,14 @@ __kernel_init(payload_args_t* args) {
KERNEL_ADDRESS_TARGETID = KERNEL_ADDRESS_SECURITY_FLAGS + 0x09;
KERNEL_ADDRESS_QA_FLAGS = KERNEL_ADDRESS_SECURITY_FLAGS + 0x24;
KERNEL_ADDRESS_UTOKEN_FLAGS = KERNEL_ADDRESS_SECURITY_FLAGS + 0x8C;
KERNEL_ADDRESS_PRISON0 = kernel_get_ucred_prison(0);
if(!(KERNEL_ADDRESS_DMAP_BASE=kernel_find_dmap_base())) {
return -ENOSYS;
}
if(!(KERNEL_ADDRESS_IOMMU_SOFTC=kernel_find_iommu_softc())) {
return -ENOSYS;
}
if(!KERNEL_DLSYM(0x1, __error)) {
if(!KERNEL_DLSYM(0x2001, __error)) {
@@ -390,26 +594,24 @@ __kernel_init(payload_args_t* args) {
* Write data to an address in kernel space.
**/
static int
kernel_write(unsigned long addr, unsigned long *data) {
unsigned long victim_buf[3];
kernel_write(unsigned long kaddr, void* data, unsigned long len) {
kernel_pipebuf_t buf = {0};
// sanity check for invalid kernel pointers
if(!(addr & 0xffff000000000000)) {
if(!(kaddr & 0xffff000000000000)) {
SET_ERRNO(EFAULT);
return -1;
}
victim_buf[0] = addr;
victim_buf[1] = 0;
victim_buf[2] = 0;
buf.vbuf.kaddr = kaddr;
if(__crt_syscall(SYS_setsockopt, MASTER_SOCK, IPPROTO_IPV6, IPV6_PKTINFO,
victim_buf, 0x14)) {
&buf, sizeof(buf))) {
return -1;
}
if(__crt_syscall(SYS_setsockopt, VICTIM_SOCK, IPPROTO_IPV6, IPV6_PKTINFO,
data, 0x14)) {
data, len)) {
return -1;
}
@@ -419,30 +621,27 @@ kernel_write(unsigned long addr, unsigned long *data) {
int
kernel_copyin(const void *uaddr, unsigned long kaddr, unsigned long len) {
unsigned long write_buf[3];
kernel_pipebuf_t buf = {0};
if(!kaddr || !uaddr || !len) {
SET_ERRNO(EINVAL);
return -1;
}
// Set pipe flags
write_buf[0] = 0;
write_buf[1] = 0x4000000000000000;
write_buf[2] = 0;
if(kernel_write(pipe_addr, (unsigned long *) &write_buf)) {
buf.flags.reserved = 0x40000000;
if(kernel_write(pipe_addr, &buf, sizeof(buf))) {
return -1;
}
// Set pipe data addr
write_buf[0] = kaddr;
write_buf[1] = 0;
write_buf[2] = 0;
if(kernel_write(pipe_addr + 0x10, (unsigned long *) &write_buf)) {
buf.pbuf.size = 0x40000000;
buf.pbuf.kaddr = kaddr;
buf.pbuf.reserved = 0;
if(kernel_write(pipe_addr + 12, &buf, sizeof(buf))) {
return -1;
}
// Perform write across pipe
if(__crt_syscall(SYS_write, rw_pipe[1], uaddr, len) < 0) {
return -1;
}
@@ -453,30 +652,28 @@ kernel_copyin(const void *uaddr, unsigned long kaddr, unsigned long len) {
int
kernel_copyout(unsigned long kaddr, void *uaddr, unsigned long len) {
unsigned long write_buf[3];
kernel_pipebuf_t buf = {0};
if(!kaddr || !uaddr || !len) {
SET_ERRNO(EINVAL);
return -1;
}
// Set pipe flags
write_buf[0] = 0x4000000040000000;
write_buf[1] = 0x4000000000000000;
write_buf[2] = 0;
if(kernel_write(pipe_addr, (unsigned long *) &write_buf)) {
buf.flags.cnt = 0x40000000;
buf.flags.in = 0x40000000;
if(kernel_write(pipe_addr, &buf, sizeof(buf))) {
return -1;
}
// Set pipe data addr
write_buf[0] = kaddr;
write_buf[1] = 0;
write_buf[2] = 0;
if(kernel_write(pipe_addr + 0x10, (unsigned long *) &write_buf)) {
buf.pbuf.size = 0x40000000;
buf.pbuf.kaddr = kaddr;
buf.pbuf.reserved = 0;
if(kernel_write(pipe_addr + 12, &buf, sizeof(buf))) {
return -1;
}
// Perform read across pipe
if(__crt_syscall(SYS_read, rw_pipe[0], uaddr, len) < 0) {
return -1;
}
@@ -559,9 +756,7 @@ kernel_set_qaflags(const unsigned char qaflags[16]) {
if(kernel_get_fw_version() < 0x7000000) {
return kernel_copyin(qaflags, KERNEL_ADDRESS_QA_FLAGS, 16);
} else {
// currently not supported
SET_ERRNO(ENOSYS);
return -1;
return kernel_iommu_copyin(qaflags, KERNEL_ADDRESS_QA_FLAGS, 16);
}
}
@@ -968,6 +1163,41 @@ kernel_get_ucred_authid(int pid) {
}
unsigned long
kernel_get_ucred_prison(int pid) {
unsigned long prison = 0;
unsigned long ucred = 0;
if(!(ucred=kernel_get_proc_ucred(pid))) {
return 0;
}
if(kernel_copyout(ucred + KERNEL_OFFSET_UCRED_CR_PRISON, &prison,
sizeof(prison))) {
return 0;
}
return prison;
}
int
kernel_set_ucred_prison(int pid, unsigned long prison) {
unsigned long ucred = 0;
if(!(ucred=kernel_get_proc_ucred(pid))) {
return -1;
}
if(kernel_copyin(&prison, ucred + KERNEL_OFFSET_UCRED_CR_PRISON,
sizeof(prison))) {
return -1;
}
return 0;
}
int
kernel_set_ucred_authid(int pid, unsigned long authid) {
unsigned long ucred = 0;
@@ -1017,34 +1247,31 @@ kernel_set_ucred_caps(int pid, const unsigned char caps[16]) {
}
unsigned long
kernel_get_ucred_attrs(int pid) {
unsigned long ucred = 0;
unsigned long attrs = 0;
if(!(ucred=kernel_get_proc_ucred(pid))) {
return 0;
}
if(kernel_copyout(ucred + KERNEL_OFFSET_UCRED_CR_SCEATTRS, &attrs,
sizeof(attrs))) {
return 0;
}
return attrs;
}
int
kernel_set_ucred_attrs(int pid, unsigned long attrs) {
kernel_get_ucred_attrs(int pid, unsigned char attrs[32]) {
unsigned long ucred = 0;
if(!(ucred=kernel_get_proc_ucred(pid))) {
return -1;
}
if(kernel_copyin(&attrs, ucred + KERNEL_OFFSET_UCRED_CR_SCEATTRS,
sizeof(attrs))) {
if(kernel_copyout(ucred + KERNEL_OFFSET_UCRED_CR_SCEATTRS, attrs, 32)) {
return -1;
}
return 0;
}
int
kernel_set_ucred_attrs(int pid, const unsigned char attrs[32]) {
unsigned long ucred = 0;
if(!(ucred=kernel_get_proc_ucred(pid))) {
return -1;
}
if(kernel_copyin(attrs, ucred + KERNEL_OFFSET_UCRED_CR_SCEATTRS, 32)) {
return -1;
}
+17 -2
View File
@@ -128,15 +128,30 @@ typedef struct dynlib_obj {
} dynlib_obj_t;
extern const unsigned long KERNEL_OFFSET_PROC_P_VMSPACE;
extern unsigned long KERNEL_OFFSET_VMSPACE_VM_PMAP;
extern unsigned long KERNEL_ADDRESS_DMAP_BASE;
extern unsigned long KERNEL_ADDRESS_IOMMU_SOFTC;
int kernel_copyout(unsigned long kaddr, void *uaddr, unsigned long len);
int kernel_copyin(const void *uaddr, unsigned long kaddr, unsigned long len);
unsigned long kernel_get_proc(int pid);
int kernel_proc_getpaddr(int pid, unsigned long vaddr,
unsigned long *paddr, unsigned long *plen);
unsigned long kernel_get_ucred_authid(int pid);
int kernel_set_ucred_authid(int pid, unsigned long authid);
unsigned long kernel_get_ucred_attrs(int pid);
int kernel_set_ucred_attrs(int pid, unsigned long attrs);
int kernel_get_ucred_attrs(int pid, unsigned char attrs[32]);
int kernel_set_ucred_attrs(int pid, const unsigned char attrs[32]);
unsigned long kernel_get_ucred_prison(int pid);
int kernel_set_ucred_prison(int pid, unsigned long prison);
int kernel_get_ucred_caps(int pid, unsigned char caps[16]);
int kernel_set_ucred_caps(int pid, const unsigned char caps[16]);
+252
View File
@@ -0,0 +1,252 @@
/* Copyright (C) 2026 John Törnblom
This program is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the
Free Software Foundation; either version 3, or (at your option) any
later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; see the file COPYING. If not, see
<http://www.gnu.org/licenses/>. */
#include "kernel.h"
#include "kernel_iommu.h"
/**
* Physical base address of the AMD IOMMU MMIO region.
**/
#define IOMMU_MMIO_BASE 0xfdd80000UL
/**
* MMIO register offsets for the IOMMU command buffer.
**/
#define IOMMU_MMIO_CB3_HEAD 0xe000
#define IOMMU_MMIO_CB3_TAIL 0xe008
/**
* IOMMU command buffer ring constants.
**/
#define IOMMU_CB_SIZE 0x2000
#define IOMMU_CB_MASK (IOMMU_CB_SIZE - 1)
#define IOMMU_CMD_SIZE 0x10
/**
* Field offsets within the IOMMU softc data structure.
**/
#define IOMMU_SC_CB3_PTR 0x80
#define IOMMU_SC_CB3_INDEX 0x88
/**
* Global state that is initialised on first call.
**/
static unsigned long iommu_mmio_kaddr = 0;
static unsigned long iommu_cb_base = 0;
static unsigned long iommu_cb_index = 0;
/**
* Initialize the global state.
**/
static int
iommu_init(void) {
if(iommu_mmio_kaddr) {
return 0;
}
if(!KERNEL_ADDRESS_IOMMU_SOFTC) {
return -1;
}
iommu_mmio_kaddr = KERNEL_ADDRESS_DMAP_BASE + IOMMU_MMIO_BASE;
if(kernel_copyout(KERNEL_ADDRESS_IOMMU_SOFTC + IOMMU_SC_CB3_PTR,
&iommu_cb_base, sizeof(iommu_cb_base))) {
iommu_mmio_kaddr = 0;
return -1;
}
iommu_cb_index = KERNEL_ADDRESS_IOMMU_SOFTC + IOMMU_SC_CB3_INDEX;
if(!iommu_cb_base) {
iommu_mmio_kaddr = 0;
return -1;
}
return 0;
}
/**
* Submit a command to the IOMMU command queue.
**/
static int
iommu_submit_cmd(const void *cmd) {
unsigned long curr_tail;
unsigned long next_tail;
unsigned long head;
unsigned long tail;
if(kernel_copyout(iommu_mmio_kaddr + IOMMU_MMIO_CB3_TAIL,
&curr_tail, sizeof(curr_tail))) {
return -1;
}
next_tail = (curr_tail + IOMMU_CMD_SIZE) & IOMMU_CB_MASK;
if(kernel_copyin(cmd, iommu_cb_base + curr_tail, IOMMU_CMD_SIZE)) {
return -1;
}
if(kernel_copyin(&next_tail, iommu_mmio_kaddr + IOMMU_MMIO_CB3_TAIL,
sizeof(next_tail))) {
return -1;
}
if(kernel_copyin(&next_tail, iommu_cb_index, sizeof(next_tail))) {
return -1;
}
while(1) {
if(kernel_copyout(iommu_mmio_kaddr + IOMMU_MMIO_CB3_HEAD, &head, sizeof(head))) {
return -1;
}
if(kernel_copyout(iommu_mmio_kaddr + IOMMU_MMIO_CB3_TAIL, &tail, sizeof(tail))) {
return -1;
}
if(head == tail) {
return 0;
}
}
}
/**
* Submit a write command to IOMMU command queue.
**/
static int
iommu_write8(unsigned long paddr, unsigned long val) {
unsigned int cmd[4];
cmd[0] = (unsigned int)(paddr & 0xFFFFFFF8) | 0x05;
cmd[1] = (unsigned int)((paddr >> 32) & 0xFFFFF) | 0x10000000;
cmd[2] = (unsigned int)(val);
cmd[3] = (unsigned int)(val >> 32);
return iommu_submit_cmd(cmd);
}
/**
* Copy byte values into a word.
**/
static unsigned long
iommu_patch_word(unsigned long word, const unsigned char *src,
unsigned int off, unsigned int n) {
unsigned char *b = (unsigned char*)&word;
for(unsigned int i=0; i<n; i++) {
b[off+i] = src[i];
}
return word;
}
int
kernel_iommu_copyin(const void *uaddr, unsigned long kaddr, unsigned long len) {
const unsigned char *src = (const unsigned char*)uaddr;
unsigned long paddr;
unsigned long chunk;
unsigned long curr;
unsigned long plen;
unsigned long coff;
unsigned int head;
unsigned long off;
unsigned long val;
if(!uaddr || !kaddr || !len) {
return -1;
}
if(iommu_init()) {
return -1;
}
for(off=0; off<len; off+=chunk) {
if(kernel_proc_getpaddr(0, kaddr+off, &paddr, &plen)) {
return -1;
}
chunk = len - off;
if(chunk > plen) {
chunk = plen;
}
coff = 0;
if(paddr & 7) {
head = (unsigned int)(8 - (paddr & 7));
if(head > (unsigned int)chunk) {
head = (unsigned int)chunk;
}
if(kernel_copyout(KERNEL_ADDRESS_DMAP_BASE + (paddr & ~7UL),
&curr, sizeof(curr))) {
return -1;
}
curr = iommu_patch_word(curr, src+off, (unsigned int)(paddr & 7), head);
if(iommu_write8(paddr & ~7UL, curr)) {
return -1;
}
coff += head;
}
while(coff+8 <= chunk) {
val = 0;
for(int i=0; i<8; i++) {
val |= (unsigned long)src[off+coff+i] << (i*8);
}
iommu_write8(paddr+coff, val);
coff += 8;
}
if(coff < chunk) {
if(kernel_copyout(KERNEL_ADDRESS_DMAP_BASE+paddr+coff, &curr,
sizeof(curr))) {
return -1;
}
curr = iommu_patch_word(curr, src+off+coff, 0, (unsigned int)(chunk-coff));
if(iommu_write8(paddr+coff, curr)) {
return -1;
}
}
}
return 0;
}
int
kernel_iommu_setlong(unsigned long kaddr, unsigned long val) {
return kernel_iommu_copyin(&val, kaddr, sizeof(val));
}
int
kernel_iommu_setint(unsigned long kaddr, unsigned int val) {
return kernel_iommu_copyin(&val, kaddr, sizeof(val));
}
int
kernel_iommu_setshort(unsigned long kaddr, unsigned short val) {
return kernel_iommu_copyin(&val, kaddr, sizeof(val));
}
int
kernel_iommu_setchar(unsigned long kaddr, unsigned char val) {
return kernel_iommu_copyin(&val, kaddr, sizeof(val));
}
+22
View File
@@ -0,0 +1,22 @@
/* Copyright (C) 2026 John Törnblom
This program is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the
Free Software Foundation; either version 3, or (at your option) any
later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; see the file COPYING. If not, see
<http://www.gnu.org/licenses/>. */
#pragma once
int kernel_iommu_copyin(const void *uaddr, unsigned long kaddr,
unsigned long len);
+212
View File
@@ -0,0 +1,212 @@
/* Copyright (C) 2026 John Törnblom, idlesauce, and sleirsgoevy
This program is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the
Free Software Foundation; either version 3, or (at your option) any
later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; see the file COPYING. If not, see
<http://www.gnu.org/licenses/>. */
#include "kernel.h"
#include "mdbg.h"
#define X86_PG_V 0x01
#define X86_PG_PS 0x80
#define PG_FRAME (0xffffffffff000ul)
/**
* Walk the page table hierarchy (9 bit indices in 4 levels) to find the
* entry of the physical address mapped to the vaddr of the given process.
**/
int
kernel_proc_getpaddr(int pid, unsigned long vaddr, unsigned long* paddr,
unsigned long* plen) {
unsigned long table_offset;
unsigned long table_index;
unsigned long vmspace;
unsigned long pml4u;
unsigned long proc;
unsigned long cr3;
unsigned long pte;
if(!KERNEL_OFFSET_VMSPACE_VM_PMAP) {
return -1;
}
if(!(proc=kernel_get_proc(pid))) {
return -1;
}
if(kernel_copyout(proc + KERNEL_OFFSET_PROC_P_VMSPACE,
&vmspace, sizeof(vmspace))) {
return -1;
}
if(kernel_copyout(vmspace + KERNEL_OFFSET_VMSPACE_VM_PMAP + 0x20,
&pml4u, sizeof(pml4u))) {
return -1;
}
if(kernel_copyout(vmspace + KERNEL_OFFSET_VMSPACE_VM_PMAP + 0x28,
&cr3, sizeof(cr3))) {
return -1;
}
pte = cr3;
for(long bitpos=39; bitpos>=12; bitpos-=9) {
table_index = (vaddr >> bitpos) & ((1ull << 9) - 1);
table_offset = table_index * 8;
pte &= PG_FRAME;
if(kernel_copyout(pml4u-cr3 + table_offset + pte, &pte, sizeof(pte))) {
return -1;
}
// check entry validity
if(!(pte & X86_PG_V)) {
return -1;
}
// check if the entry is flagged as large or if we reached the last level
if((pte & X86_PG_PS) || bitpos == 12) {
*paddr = pte;
*paddr &= (1ul << 52) - (1ul << bitpos);
*paddr |= vaddr & ((1ul << bitpos) - 1);
*plen = (*paddr | ((1ul << bitpos) - 1)) + 1 - *paddr;
return 0;
}
}
return -1;
}
int
kernel_proc_copyin(int pid, const void *buf, unsigned long addr,
unsigned long len) {
unsigned long paddr;
unsigned long plen;
// lets see if we can just use mdbg
if(!mdbg_copyin(pid, buf, addr, len)) {
return 0;
}
for(unsigned long i=0; i<len; i+=plen) {
if(kernel_proc_getpaddr(pid, addr + i, &paddr, &plen)) {
return -1;
}
if(plen > len) {
plen = len;
}
if(kernel_copyin(((unsigned char*)buf) + i,
KERNEL_ADDRESS_DMAP_BASE + paddr, plen)) {
return -1;
}
}
return 0;
}
int
kernel_proc_copyout(int pid, unsigned long addr, void *buf,
unsigned long len) {
unsigned long paddr;
unsigned long plen;
// lets see if we can just use mdbg
if(!mdbg_copyout(pid, addr, buf, len)) {
return 0;
}
for(unsigned long i=0; i<len; i+=plen) {
if(kernel_proc_getpaddr(pid, addr + i, &paddr, &plen)) {
return -1;
}
if(plen > len) {
plen = len;
}
if(kernel_copyout(KERNEL_ADDRESS_DMAP_BASE + paddr,
((unsigned char*)buf) + i, plen)) {
return -1;
}
}
return 0;
}
int
kernel_proc_setchar(int pid, unsigned long addr, char val) {
return kernel_proc_copyin(pid, &val, addr, sizeof(val));
}
int
kernel_proc_setshort(int pid, unsigned long addr, short val) {
return kernel_proc_copyin(pid, &val, addr, sizeof(val));
}
int
kernel_proc_setint(int pid, unsigned long addr, int val) {
return kernel_proc_copyin(pid, &val, addr, sizeof(val));
}
int
kernel_proc_setlong(int pid, unsigned long addr, long val) {
return kernel_proc_copyin(pid, &val, addr, sizeof(val));
}
char
kernel_proc_getchar(int pid, unsigned long addr) {
char val = 0;
kernel_proc_copyout(pid, addr, &val, sizeof(val));
return val;
}
short
kernel_proc_getshort(int pid, unsigned long addr) {
short val = 0;
kernel_proc_copyout(pid, addr, &val, sizeof(val));
return val;
}
int
kernel_proc_getint(int pid, unsigned long addr) {
int val = 0;
kernel_proc_copyout(pid, addr, &val, sizeof(val));
return val;
}
long
kernel_proc_getlong(int pid, unsigned long addr) {
long val = 0;
kernel_proc_copyout(pid, addr, &val, sizeof(val));
return val;
}
+3 -7
View File
@@ -60,29 +60,25 @@ patch_syscall_permissions(void) {
static int
patch_kernel_ucred(void) {
int pid = __crt_syscall(SYS_getpid);
unsigned char attrs[32];
unsigned char caps[16];
unsigned long attrs;
if(kernel_get_ucred_caps(pid, caps)) {
klog_puts("kernel_get_ucred_caps failed");
return -1;
}
if(!(attrs=kernel_get_ucred_attrs(pid))) {
klog_puts("kernel_get_ucred_attrs failed");
if(kernel_get_ucred_attrs(pid, attrs)) {
return -1;
}
caps[5] = 0x1c; // ??
caps[7] = 0x40; // jail related?
caps[15] |= 0x40; // jitshm
attrs |= 0x80; // ptrace
attrs[3] |= 0x80; // ptrace
if(kernel_set_ucred_caps(pid, caps)) {
klog_puts("kernel_set_ucred_caps failed");
return -1;
}
if(kernel_set_ucred_attrs(pid, attrs)) {
klog_puts("kernel_set_ucred_attrs failed");
return -1;
}
+1
View File
@@ -41,6 +41,7 @@ along with this program; see the file COPYING. If not, see
#define SYS_sprx_load 594
#define SYS_sprx_unload 595
#define SYS_randomized_path 602
#define SYS_dynlib_get_obj_member 649
/**
+22 -3
View File
@@ -1,5 +1,6 @@
#!/usr/bin/env bash
# Copyright (C) 2024 John Törnblom
# Copyright (C) 2026 Aleksei Kulaev
#
# This file is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by
@@ -26,18 +27,36 @@ LDSCRIPT="-T${PS5_PAYLOAD_SDK}/ldscripts/elf_x86_64.x"
for ARG in "$@"; do
if [[ "$ARG" == "--shared" ]]; then
PIE=""
PIE=""
fi
if [[ "$ARG" == "-r" ]]; then
PIE=""
fi
if [[ "$ARG" == "--static" ]]; then
PIE=""
PIE=""
fi
if [[ "$ARG" == "--script" || "$ARG" == "-T" ]]; then
LDSCRIPT=""
LDSCRIPT=""
fi
done
LLVM_BINDIR=$("${SCRIPT_DIR}/prospero-llvm-config" --bindir)
BIN_PATH="${LLVM_BINDIR}/ld.lld"
# When using macos with brew, lld-19 and above are not installed in the standard
# llvm bindir directory, compensate for that here.
if ! command -v "${BIN_PATH}" >/dev/null 2>&1; then
if [ "$(uname -s)" = "Darwin" ]; then
BREW="$(command -v brew 2>/dev/null)"
if [ -n "${BREW}" ]; then
BIN_PATH="$("${BREW}" --prefix lld 2>/dev/null)/bin/ld.lld"
else
echo "Unable to find brew" >&2
exit 1
fi
fi
fi
exec "${BIN_PATH}" \
-m elf_x86_64 $PIE $LDSCRIPT --eh-frame-hdr \
-z max-page-size=0x4000 -mllvm -emulated-tls \
+3 -1
View File
@@ -25,7 +25,9 @@ if [ -x "$(command -v "${LLVM_CONFIG}")" ]; then
fi
fi
CANDIDATES=("llvm-config-21"
CANDIDATES=("llvm-config-23"
"llvm-config-22"
"llvm-config-21"
"llvm-config-20"
"llvm-config-19"
"llvm-config-18"
+3
View File
@@ -26,4 +26,7 @@ export PKG_CONFIG_SYSROOT_DIR=${PS5_PAYLOAD_SDK}/target
export PKG_CONFIG_LIBDIR=${PKG_CONFIG_SYSROOT_DIR}/user/homebrew/lib/pkgconfig
export PKG_CONFIG_PATH=${PKG_CONFIG_SYSROOT_DIR}/user/homebrew/libdata/pkgconfig
# Needed by pkgconf-3, see https://man.archlinux.org/man/pkgconf.1.en#DESTDIR
unset DESTDIR
exec -a "${SCRIPT_NAME}" pkg-config --static "$@"
+2
View File
@@ -77,4 +77,6 @@ else()
set(PKG_CONFIG_EXECUTABLE ${PS5_PAYLOAD_SDK}/bin/prospero-pkg-config CACHE PATH "")
set(CMAKE_FIND_PACKAGE_PREFER_CONFIG TRUE)
set(PS5_DEPLOY ${PS5_PAYLOAD_SDK}/bin/prospero-deploy CACHE PATH "")
set(PAYLOAD_DEPLOY ${PS5_DEPLOY})
endif()
+3 -1
View File
@@ -1,13 +1,15 @@
[binaries]
c = '@DIRNAME@/../bin/prospero-clang'
cpp = '@DIRNAME@/../bin/prospero-clang++'
objc = '@DIRNAME@/../bin/prospero-clang'
objcpp = '@DIRNAME@/../bin/prospero-clang++'
ld = '@DIRNAME@/../bin/prospero-lld'
ar = '@DIRNAME@/../bin/prospero-ar'
strip = '@DIRNAME@/../bin/prospero-strip'
cmake = '@DIRNAME@/../bin/prospero-cmake'
pkg-config = '@DIRNAME@/../bin/prospero-pkg-config'
[target_machine]
[host_machine]
system = 'freebsd'
cpu_family = 'x86_64'
cpu = 'x86_64'
+2
View File
@@ -26,6 +26,8 @@ PS5_DEPLOY := $(PS5_PAYLOAD_SDK)/bin/prospero-deploy
AS := $(PS5_PAYLOAD_SDK)/bin/prospero-as
CC := $(PS5_PAYLOAD_SDK)/bin/prospero-clang
CXX := $(PS5_PAYLOAD_SDK)/bin/prospero-clang++
OBJC := $(PS5_PAYLOAD_SDK)/bin/prospero-clang
OBJCXX := $(PS5_PAYLOAD_SDK)/bin/prospero-clang++
LD := $(PS5_PAYLOAD_SDK)/bin/prospero-lld
PKG_CONFIG := $(PS5_PAYLOAD_SDK)/bin/prospero-pkg-config
AR := $(PS5_PAYLOAD_SDK)/bin/prospero-ar
+2
View File
@@ -33,6 +33,8 @@ export PS5_CROSS_FIX_ROOT=${PS5_PAYLOAD_SDK}/bin/prospero-cross-fix-root
export AS=${PS5_PAYLOAD_SDK}/bin/prospero-as
export CC=${PS5_PAYLOAD_SDK}/bin/prospero-clang
export CXX=${PS5_PAYLOAD_SDK}/bin/prospero-clang++
export OBJC=${PS5_PAYLOAD_SDK}/bin/prospero-clang
export OBJCXX=${PS5_PAYLOAD_SDK}/bin/prospero-clang++
export LD=${PS5_PAYLOAD_SDK}/bin/prospero-lld
export AR=${PS5_PAYLOAD_SDK}/bin/prospero-ar
+1 -1
View File
@@ -29,4 +29,4 @@ install:
cp -r ps5/. $(DESTDIR)/target/include/ps5
install -d $(DESTDIR)/target/user/homebrew/include
ln -sf user/homebrew/include $(DESTDIR)/target/include_common
ln -sfn user/homebrew/include $(DESTDIR)/target/include_common
+42
View File
@@ -0,0 +1,42 @@
/* Copyright (C) 2026 John Törnblom
This program is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the
Free Software Foundation; either version 3, or (at your option) any
later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; see the file COPYING. If not, see
<http://www.gnu.org/licenses/>. */
#pragma once
#include <sys/cdefs.h>
#include <stdint.h>
__BEGIN_DECLS
/**
* Copy data into the kernel via iommu write commands, thus bypassing some of
* the write permission checks when going via the CPU.
**/
int kernel_iommu_copyin(const void *buf, intptr_t kaddr, size_t len);
/**
* Convenience functions for common uses of kernel_iommu_copyin().
**/
int kernel_iommu_setchar(intptr_t kaddr, char val);
int kernel_iommu_setshort(intptr_t kaddr, short val);
int kernel_iommu_setint(intptr_t kaddr, int val);
int kernel_iommu_setlong(intptr_t kaddr, long val);
__END_DECLS
+25 -6
View File
@@ -21,7 +21,7 @@ along with this program; see the file COPYING. If not, see
__BEGIN_DECLS
// Absolute kernel pointers
// absolute kernel pointers
extern const intptr_t KERNEL_ADDRESS_TEXT_BASE;
extern const intptr_t KERNEL_ADDRESS_DATA_BASE;
extern const intptr_t KERNEL_ADDRESS_ALLPROC;
@@ -33,13 +33,13 @@ extern const intptr_t KERNEL_ADDRESS_QA_FLAGS;
extern const intptr_t KERNEL_ADDRESS_TARGETID;
extern const intptr_t KERNEL_ADDRESS_BUS_DATA_DEVICES;
// Proc field offsets
// struct proc field offsets
extern const off_t KERNEL_OFFSET_PROC_P_UCRED;
extern const off_t KERNEL_OFFSET_PROC_P_FD;
extern const off_t KERNEL_OFFSET_PROC_P_PID;
extern const off_t KERNEL_OFFSET_PROC_P_VMSPACE;
// Ucred field offsets
// struct ucred field offsets
extern const off_t KERNEL_OFFSET_UCRED_CR_UID;
extern const off_t KERNEL_OFFSET_UCRED_CR_RUID;
extern const off_t KERNEL_OFFSET_UCRED_CR_SVUID;
@@ -48,10 +48,13 @@ extern const off_t KERNEL_OFFSET_UCRED_CR_SCEAUTHID;
extern const off_t KERNEL_OFFSET_UCRED_CR_SCECAPS;
extern const off_t KERNEL_OFFSET_UCRED_CR_SCEATTRS;
// Filedesc field offsets
// struct filedesc field offsets
extern const off_t KERNEL_OFFSET_FILEDESC_FD_RDIR;
extern const off_t KERNEL_OFFSET_FILEDESC_FD_JDIR;
// struct vmspace field offsets
extern const off_t KERNEL_OFFSET_VMSPACE_VM_PMAP;
uint32_t kernel_get_fw_version(void);
@@ -74,6 +77,19 @@ intptr_t kernel_get_proc_ucred(pid_t pid);
intptr_t kernel_get_proc_filedesc(pid_t pid);
intptr_t kernel_get_proc_file(pid_t pid, int fd);
int kernel_proc_copyin(pid_t pid, const void *buf, intptr_t addr, size_t len);
int kernel_proc_copyout(pid_t pid, intptr_t addr, void *buf, size_t len);
uint64_t kernel_proc_getlong(pid_t pid, intptr_t addr);
uint32_t kernel_proc_getint(pid_t pid, intptr_t addr);
uint16_t kernel_proc_getshort(pid_t pid, intptr_t addr);
uint8_t kernel_proc_getchar(pid_t pid, intptr_t addr);
int kernel_proc_setchar(pid_t pid, intptr_t addr, char val);
int kernel_proc_setshort(pid_t pid, intptr_t addr, short val);
int kernel_proc_setint(pid_t pid, intptr_t addr, int val);
int kernel_proc_setlong(pid_t pid, intptr_t addr, long val);
int kernel_get_vmem_protection(pid_t pid, intptr_t addr, size_t len);
int kernel_set_vmem_protection(pid_t pid, intptr_t addr, size_t len, int prot);
int kernel_mprotect(pid_t pid, intptr_t addr, size_t size, int prot);
@@ -94,8 +110,8 @@ int32_t kernel_set_ucred_authid(pid_t pid, uint64_t authid);
int32_t kernel_get_ucred_caps(pid_t pid, uint8_t caps[16]);
int32_t kernel_set_ucred_caps(pid_t pid, const uint8_t caps[16]);
uint64_t kernel_get_ucred_attrs(pid_t pid);
int32_t kernel_set_ucred_attrs(pid_t pid, uint64_t attr);
int32_t kernel_get_ucred_attrs(pid_t pid, uint8_t attrs[32]);
int32_t kernel_set_ucred_attrs(pid_t pid, const uint8_t attrs[32]);
int32_t kernel_get_qaflags(uint8_t qaflags[16]);
int32_t kernel_set_qaflags(uint8_t const qaflags[16]);
@@ -123,5 +139,8 @@ int32_t kernel_set_ucred_rgid(pid_t pid, gid_t rgid);
gid_t kernel_get_ucred_svgid(pid_t pid);
int32_t kernel_set_ucred_svgid(pid_t pid, gid_t svgid);
intptr_t kernel_get_ucred_prison(pid_t pid);
int kernel_set_ucred_prison(pid_t pid, intptr_t prison);
__END_DECLS
+13 -23
View File
@@ -14,23 +14,7 @@
# along with this program; see the file COPYING. If not see
# <http://www.gnu.org/licenses/>.
DESTDIR ?= /opt/ps5-payload-sdk
LLVM_CONFIG_CANDIDATES := llvm-config-21 \
llvm-config-20 llvm-config-19 llvm-config-18 \
llvm-config-17 llvm-config-16 llvm-config-15 \
llvm-config
LLVM_CONFIG_CANDIDATES := $(foreach LCC,$(LLVM_CONFIG_CANDIDATES), \
$(if $(shell command -v $(LCC) 2>/dev/null), $(LCC)))
LLVM_CONFIG ?= $(firstword $(LLVM_CONFIG_CANDIDATES))
ifndef LLVM_CONFIG
$(error Unable to find llvm-config)
endif
LLVM_BINDIR := $(shell $(LLVM_CONFIG) --bindir)
CC := $(LLVM_BINDIR)/clang
AR := $(LLVM_BINDIR)/llvm-ar
include ../Makefile.inc
CFLAGS := -target x86_64-sie-ps5 -fPIC -fno-plt -fno-stack-protector
CFLAGS += -nobuiltininc -isystem ../include/freebsd
@@ -42,18 +26,24 @@ ASFLAGS := $(CFLAGS)
SRCS := $(wildcard *.c)
OBJS := $(SRCS:.c=.o) _setjmp.o
ARCHIVE := libc.a
.PHONY: all clean install
all: $(ARCHIVE)
all: libc.a libdl.a libpthread.a
$(ARCHIVE): $(OBJS)
libc.a: $(OBJS)
$(AR) -rsc $@ $^
libdl.a:
$(AR) -rsc $@
libpthread.a:
$(AR) -rsc $@
clean:
rm -f *.a *.o
install: $(ARCHIVE)
install: libc.a libdl.a libpthread.a
install -d $(DESTDIR)/target/lib
install $^ $(DESTDIR)/target/lib
install libc.a $(DESTDIR)/target/lib
install libdl.a $(DESTDIR)/target/lib
install libpthread.a $(DESTDIR)/target/lib
+67
View File
@@ -0,0 +1,67 @@
/*-
* Copyright (c) 1989, 1993
* The Regents of the University of California. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 4. Neither the name of the University nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
#if defined(LIBC_SCCS) && !defined(lint)
static char sccsid[] = "@(#)getloadavg.c 8.1 (Berkeley) 6/4/93";
#endif /* LIBC_SCCS and not lint */
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
#include <sys/param.h>
#include <sys/time.h>
#include <sys/resource.h>
#include <sys/sysctl.h>
#include <vm/vm_param.h>
#include <stdlib.h>
/*
* getloadavg() -- Get system load averages.
*
* Put `nelem' samples into `loadavg' array.
* Return number of samples retrieved, or -1 on error.
*/
int
getloadavg(double loadavg[], int nelem)
{
struct loadavg loadinfo;
int i, mib[2];
size_t size;
mib[0] = CTL_VM;
mib[1] = VM_LOADAVG;
size = sizeof(loadinfo);
if (sysctl(mib, 2, &loadinfo, &size, NULL, 0) < 0)
return (-1);
nelem = MIN(nelem, sizeof(loadinfo.ldavg) / sizeof(fixpt_t));
for (i = 0; i < nelem; i++)
loadavg[i] = (double) loadinfo.ldavg[i] / loadinfo.fscale;
return (nelem);
}
+19 -1
View File
@@ -14,9 +14,10 @@ You should have received a copy of the GNU General Public License
along with this program; see the file COPYING. If not, see
<http://www.gnu.org/licenses/>. */
#include <sys/types.h>
#include <errno.h>
#include <grp.h>
#include <sys/types.h>
struct group*
getgrnam(const char *name) {
@@ -31,3 +32,20 @@ getgrgid(gid_t gid) {
return 0;
}
int
getgrnam_r(const char *name, struct group *grp, char* buf, size_t buflen,
struct group **result) {
#warning "getgrnam_r() not implemented"
*result = 0;
return ENOSYS;
}
int
getgrgid_r(gid_t gid, struct group *grp, char *buf, size_t buflen,
struct group **result) {
#warning "getgrgid_r() not implemented"
*result = 0;
return ENOSYS;
}
+51
View File
@@ -0,0 +1,51 @@
/*
* Copyright (c) 1989, 1993
* The Regents of the University of California. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 4. Neither the name of the University nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
#if defined(LIBC_SCCS) && !defined(lint)
static char sccsid[] = "@(#)killpg.c 8.1 (Berkeley) 6/2/93";
#endif /* LIBC_SCCS and not lint */
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
#include <sys/types.h>
#include <signal.h>
#include <errno.h>
/*
* Backwards-compatible killpg().
*/
int
killpg(pid_t pgid, int sig)
{
if (pgid == 1) {
errno = ESRCH;
return (-1);
}
return (kill(-pgid, sig));
}
+109
View File
@@ -0,0 +1,109 @@
/* $OpenBSD: nftw.c,v 1.7 2006/03/31 19:41:44 millert Exp $ */
/*
* Copyright (c) 2003, 2004 Todd C. Miller <Todd.Miller@courtesan.com>
*
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
* copyright notice and this permission notice appear in all copies.
*
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*
* Sponsored in part by the Defense Advanced Research Projects
* Agency (DARPA) and Air Force Research Laboratory, Air Force
* Materiel Command, USAF, under agreement number F39502-99-1-0512.
*/
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
#include <sys/types.h>
#include <sys/stat.h>
#include <errno.h>
#include <fts.h>
#include <ftw.h>
int
nftw(const char *path, int (*fn)(const char *, const struct stat *, int,
struct FTW *), int nfds, int ftwflags)
{
char * const paths[2] = { (char *)path, NULL };
struct FTW ftw;
FTSENT *cur;
FTS *ftsp;
int error = 0, ftsflags, fnflag, postorder, sverrno;
/* XXX - nfds is currently unused */
if (nfds < 1) {
errno = EINVAL;
return (-1);
}
ftsflags = FTS_COMFOLLOW;
if (!(ftwflags & FTW_CHDIR))
ftsflags |= FTS_NOCHDIR;
if (ftwflags & FTW_MOUNT)
ftsflags |= FTS_XDEV;
if (ftwflags & FTW_PHYS)
ftsflags |= FTS_PHYSICAL;
else
ftsflags |= FTS_LOGICAL;
postorder = (ftwflags & FTW_DEPTH) != 0;
ftsp = fts_open(paths, ftsflags, NULL);
if (ftsp == NULL)
return (-1);
while ((cur = fts_read(ftsp)) != NULL) {
switch (cur->fts_info) {
case FTS_D:
if (postorder)
continue;
fnflag = FTW_D;
break;
case FTS_DC:
continue;
case FTS_DNR:
fnflag = FTW_DNR;
break;
case FTS_DP:
if (!postorder)
continue;
fnflag = FTW_DP;
break;
case FTS_F:
case FTS_DEFAULT:
fnflag = FTW_F;
break;
case FTS_NS:
case FTS_NSOK:
fnflag = FTW_NS;
break;
case FTS_SL:
fnflag = FTW_SL;
break;
case FTS_SLNONE:
fnflag = FTW_SLN;
break;
default:
error = -1;
goto done;
}
ftw.base = cur->fts_pathlen - cur->fts_namelen;
ftw.level = cur->fts_level;
error = fn(cur->fts_path, cur->fts_statp, fnflag, &ftw);
if (error != 0)
break;
}
done:
sverrno = errno;
if (fts_close(ftsp) != 0 && error == 0)
error = -1;
else
errno = sverrno;
return (error);
}
+43
View File
@@ -0,0 +1,43 @@
# Copyright (C) 2026 John Törnblom
#
# This file is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; see the file COPYING. If not see
# <http://www.gnu.org/licenses/>.
include ../Makefile.inc
CFLAGS := -target x86_64-sie-ps5 -fPIC -fno-plt -fno-stack-protector
CFLAGS += -nobuiltininc -isystem ../include/freebsd
CFLAGS += -fvisibility-nodllstorageclass=default
CFLAGS += -O1 -D_LIBUFS
ASFLAGS := $(CFLAGS)
SRCS := $(wildcard *.c)
OBJS := $(SRCS:.c=.o)
ARCHIVE := libufs.a
.PHONY: all clean install
all: $(ARCHIVE)
$(ARCHIVE): $(OBJS)
$(AR) -rsc $@ $^
clean:
rm -f *.a *.o
install: $(ARCHIVE)
install -d $(DESTDIR)/target/lib
install $^ $(DESTDIR)/target/lib
+201
View File
@@ -0,0 +1,201 @@
/*
* Copyright (c) 2002 Juli Mallett. All rights reserved.
*
* This software was written by Juli Mallett <jmallett@FreeBSD.org> for the
* FreeBSD project. Redistribution and use in source and binary forms, with
* or without modification, are permitted provided that the following
* conditions are met:
*
* 1. Redistribution of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* 2. Redistribution in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
#include <sys/param.h>
#include <sys/mount.h>
#include <sys/disk.h>
#include <sys/disklabel.h>
#include <sys/stat.h>
#include <ufs/ufs/ufsmount.h>
#include <ufs/ufs/dinode.h>
#include <ufs/ffs/fs.h>
#include <errno.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <libufs.h>
ssize_t
bread(struct uufsd *disk, ufs2_daddr_t blockno, void *data, size_t size)
{
void *p2;
ssize_t cnt;
ERROR(disk, NULL);
p2 = data;
/*
* XXX: various disk controllers require alignment of our buffer
* XXX: which is stricter than struct alignment.
* XXX: Bounce the buffer if not 64 byte aligned.
* XXX: this can be removed if/when the kernel is fixed
*/
if (((intptr_t)data) & 0x3f) {
p2 = malloc(size);
if (p2 == NULL) {
ERROR(disk, "allocate bounce buffer");
goto fail;
}
}
cnt = pread(disk->d_fd, p2, size, (off_t)(blockno * disk->d_bsize));
if (cnt == -1) {
ERROR(disk, "read error from block device");
goto fail;
}
if (cnt == 0) {
ERROR(disk, "end of file from block device");
goto fail;
}
if ((size_t)cnt != size) {
ERROR(disk, "short read or read error from block device");
goto fail;
}
if (p2 != data) {
memcpy(data, p2, size);
free(p2);
}
return (cnt);
fail: memset(data, 0, size);
if (p2 != data) {
free(p2);
}
return (-1);
}
ssize_t
bwrite(struct uufsd *disk, ufs2_daddr_t blockno, const void *data, size_t size)
{
ssize_t cnt;
int rv;
void *p2 = NULL;
ERROR(disk, NULL);
rv = ufs_disk_write(disk);
if (rv == -1) {
ERROR(disk, "failed to open disk for writing");
return (-1);
}
/*
* XXX: various disk controllers require alignment of our buffer
* XXX: which is stricter than struct alignment.
* XXX: Bounce the buffer if not 64 byte aligned.
* XXX: this can be removed if/when the kernel is fixed
*/
if (((intptr_t)data) & 0x3f) {
p2 = malloc(size);
if (p2 == NULL) {
ERROR(disk, "allocate bounce buffer");
return (-1);
}
memcpy(p2, data, size);
data = p2;
}
cnt = pwrite(disk->d_fd, data, size, (off_t)(blockno * disk->d_bsize));
if (p2 != NULL)
free(p2);
if (cnt == -1) {
ERROR(disk, "write error to block device");
return (-1);
}
if ((size_t)cnt != size) {
ERROR(disk, "short write to block device");
return (-1);
}
return (cnt);
}
#ifdef __FreeBSD_kernel__
static int
berase_helper(struct uufsd *disk, ufs2_daddr_t blockno, ufs2_daddr_t size)
{
off_t ioarg[2];
ioarg[0] = blockno * disk->d_bsize;
ioarg[1] = size;
return (ioctl(disk->d_fd, DIOCGDELETE, ioarg));
}
#else
static int
berase_helper(struct uufsd *disk, ufs2_daddr_t blockno, ufs2_daddr_t size)
{
char *zero_chunk;
off_t offset, zero_chunk_size, pwrite_size;
int rv;
offset = blockno * disk->d_bsize;
zero_chunk_size = 65536 * disk->d_bsize;
zero_chunk = calloc(1, zero_chunk_size);
if (zero_chunk == NULL) {
ERROR(disk, "failed to allocate memory");
return (-1);
}
while (size > 0) {
pwrite_size = size;
if (pwrite_size > zero_chunk_size)
pwrite_size = zero_chunk_size;
rv = pwrite(disk->d_fd, zero_chunk, pwrite_size, offset);
if (rv == -1) {
ERROR(disk, "failed writing to disk");
break;
}
size -= rv;
offset += rv;
rv = 0;
}
free(zero_chunk);
return (rv);
}
#endif
int
berase(struct uufsd *disk, ufs2_daddr_t blockno, ufs2_daddr_t size)
{
int rv;
ERROR(disk, NULL);
rv = ufs_disk_write(disk);
if (rv == -1) {
ERROR(disk, "failed to open disk for writing");
return(rv);
}
return (berase_helper(disk, blockno, size));
}
+223
View File
@@ -0,0 +1,223 @@
/*
* Copyright (c) 2003 Juli Mallett. All rights reserved.
*
* This software was written by Juli Mallett <jmallett@FreeBSD.org> for the
* FreeBSD project. Redistribution and use in source and binary forms, with
* or without modification, are permitted provided that the following
* conditions are met:
*
* 1. Redistribution of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* 2. Redistribution in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
#include <sys/param.h>
#include <sys/mount.h>
#include <sys/disklabel.h>
#include <sys/stat.h>
#include <ufs/ufs/ufsmount.h>
#include <ufs/ufs/dinode.h>
#include <ufs/ffs/fs.h>
#include <errno.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <libufs.h>
ufs2_daddr_t
cgballoc(struct uufsd *disk)
{
u_int8_t *blksfree;
struct cg *cgp;
struct fs *fs;
long bno;
fs = &disk->d_fs;
cgp = &disk->d_cg;
blksfree = cg_blksfree(cgp);
for (bno = 0; bno < fs->fs_fpg / fs->fs_frag; bno++)
if (ffs_isblock(fs, blksfree, bno))
goto gotit;
return (0);
gotit:
fs->fs_cs(fs, cgp->cg_cgx).cs_nbfree--;
ffs_clrblock(fs, blksfree, (long)bno);
ffs_clusteracct(fs, cgp, bno, -1);
cgp->cg_cs.cs_nbfree--;
fs->fs_cstotal.cs_nbfree--;
fs->fs_fmod = 1;
return (cgbase(fs, cgp->cg_cgx) + blkstofrags(fs, bno));
}
int
cgbfree(struct uufsd *disk, ufs2_daddr_t bno, long size)
{
u_int8_t *blksfree;
struct fs *fs;
struct cg *cgp;
ufs1_daddr_t fragno, cgbno;
int i, cg, blk, frags, bbase;
fs = &disk->d_fs;
cg = dtog(fs, bno);
if (cgread1(disk, cg) != 1)
return (-1);
cgp = &disk->d_cg;
cgbno = dtogd(fs, bno);
blksfree = cg_blksfree(cgp);
if (size == fs->fs_bsize) {
fragno = fragstoblks(fs, cgbno);
ffs_setblock(fs, blksfree, fragno);
ffs_clusteracct(fs, cgp, fragno, 1);
cgp->cg_cs.cs_nbfree++;
fs->fs_cstotal.cs_nbfree++;
fs->fs_cs(fs, cg).cs_nbfree++;
} else {
bbase = cgbno - fragnum(fs, cgbno);
/*
* decrement the counts associated with the old frags
*/
blk = blkmap(fs, blksfree, bbase);
ffs_fragacct(fs, blk, cgp->cg_frsum, -1);
/*
* deallocate the fragment
*/
frags = numfrags(fs, size);
for (i = 0; i < frags; i++)
setbit(blksfree, cgbno + i);
cgp->cg_cs.cs_nffree += i;
fs->fs_cstotal.cs_nffree += i;
fs->fs_cs(fs, cg).cs_nffree += i;
/*
* add back in counts associated with the new frags
*/
blk = blkmap(fs, blksfree, bbase);
ffs_fragacct(fs, blk, cgp->cg_frsum, 1);
/*
* if a complete block has been reassembled, account for it
*/
fragno = fragstoblks(fs, bbase);
if (ffs_isblock(fs, blksfree, fragno)) {
cgp->cg_cs.cs_nffree -= fs->fs_frag;
fs->fs_cstotal.cs_nffree -= fs->fs_frag;
fs->fs_cs(fs, cg).cs_nffree -= fs->fs_frag;
ffs_clusteracct(fs, cgp, fragno, 1);
cgp->cg_cs.cs_nbfree++;
fs->fs_cstotal.cs_nbfree++;
fs->fs_cs(fs, cg).cs_nbfree++;
}
}
return cgwrite(disk);
}
ino_t
cgialloc(struct uufsd *disk)
{
struct ufs2_dinode *dp2;
u_int8_t *inosused;
struct cg *cgp;
struct fs *fs;
ino_t ino;
int i;
fs = &disk->d_fs;
cgp = &disk->d_cg;
inosused = cg_inosused(cgp);
for (ino = 0; ino < fs->fs_ipg; ino++)
if (isclr(inosused, ino))
goto gotit;
return (0);
gotit:
if (fs->fs_magic == FS_UFS2_MAGIC &&
ino + INOPB(fs) > cgp->cg_initediblk &&
cgp->cg_initediblk < cgp->cg_niblk) {
char block[MAXBSIZE];
bzero(block, (int)fs->fs_bsize);
dp2 = (struct ufs2_dinode *)&block;
for (i = 0; i < INOPB(fs); i++) {
dp2->di_gen = arc4random();
dp2++;
}
if (bwrite(disk, ino_to_fsba(fs,
cgp->cg_cgx * fs->fs_ipg + cgp->cg_initediblk),
block, fs->fs_bsize))
return (0);
cgp->cg_initediblk += INOPB(fs);
}
setbit(inosused, ino);
cgp->cg_irotor = ino;
cgp->cg_cs.cs_nifree--;
fs->fs_cstotal.cs_nifree--;
fs->fs_cs(fs, cgp->cg_cgx).cs_nifree--;
fs->fs_fmod = 1;
return (ino + (cgp->cg_cgx * fs->fs_ipg));
}
int
cgread(struct uufsd *disk)
{
return (cgread1(disk, disk->d_ccg++));
}
int
cgread1(struct uufsd *disk, int c)
{
struct fs *fs;
fs = &disk->d_fs;
if ((unsigned)c >= fs->fs_ncg) {
return (0);
}
if (bread(disk, fsbtodb(fs, cgtod(fs, c)), disk->d_cgunion.d_buf,
fs->fs_bsize) == -1) {
ERROR(disk, "unable to read cylinder group");
return (-1);
}
disk->d_lcg = c;
return (1);
}
int
cgwrite(struct uufsd *disk)
{
return (cgwrite1(disk, disk->d_lcg));
}
int
cgwrite1(struct uufsd *disk, int c)
{
struct fs *fs;
fs = &disk->d_fs;
if (bwrite(disk, fsbtodb(fs, cgtod(fs, c)),
disk->d_cgunion.d_buf, fs->fs_bsize) == -1) {
ERROR(disk, "unable to write cylinder group");
return (-1);
}
return (0);
}
+119
View File
@@ -0,0 +1,119 @@
/*
* Copyright (c) 2002 Juli Mallett. All rights reserved.
*
* This software was written by Juli Mallett <jmallett@FreeBSD.org> for the
* FreeBSD project. Redistribution and use in source and binary forms, with
* or without modification, are permitted provided that the following
* conditions are met:
*
* 1. Redistribution of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* 2. Redistribution in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
#include <sys/param.h>
#include <sys/mount.h>
#include <sys/disklabel.h>
#include <sys/stat.h>
#include <ufs/ufs/ufsmount.h>
#include <ufs/ufs/dinode.h>
#include <ufs/ffs/fs.h>
#include <errno.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <libufs.h>
int
getino(struct uufsd *disk, void **dino, ino_t inode, int *mode)
{
ino_t min, max;
caddr_t inoblock;
struct ufs1_dinode *dp1;
struct ufs2_dinode *dp2;
struct fs *fs;
ERROR(disk, NULL);
fs = &disk->d_fs;
if (inode >= (ino_t)fs->fs_ipg * fs->fs_ncg) {
ERROR(disk, "inode number out of range");
return (-1);
}
inoblock = disk->d_inoblock;
min = disk->d_inomin;
max = disk->d_inomax;
if (inoblock == NULL) {
inoblock = malloc(fs->fs_bsize);
if (inoblock == NULL) {
ERROR(disk, "unable to allocate inode block");
return (-1);
}
disk->d_inoblock = inoblock;
}
if (inode >= min && inode < max)
goto gotit;
bread(disk, fsbtodb(fs, ino_to_fsba(fs, inode)), inoblock,
fs->fs_bsize);
disk->d_inomin = min = inode - (inode % INOPB(fs));
disk->d_inomax = max = min + INOPB(fs);
gotit: switch (disk->d_ufs) {
case 1:
dp1 = &((struct ufs1_dinode *)inoblock)[inode - min];
if (mode != NULL)
*mode = dp1->di_mode & IFMT;
if (dino != NULL)
*dino = dp1;
return (0);
case 2:
dp2 = &((struct ufs2_dinode *)inoblock)[inode - min];
if (mode != NULL)
*mode = dp2->di_mode & IFMT;
if (dino != NULL)
*dino = dp2;
return (0);
default:
break;
}
ERROR(disk, "unknown UFS filesystem type");
return (-1);
}
int
putino(struct uufsd *disk)
{
struct fs *fs;
fs = &disk->d_fs;
if (disk->d_inoblock == NULL) {
ERROR(disk, "No inode block allocated");
return (-1);
}
if (bwrite(disk, fsbtodb(fs, ino_to_fsba(&disk->d_fs, disk->d_inomin)),
disk->d_inoblock, disk->d_fs.fs_bsize) <= 0)
return (-1);
return (0);
}
+149
View File
@@ -0,0 +1,149 @@
/*
* Copyright (c) 2002 Juli Mallett. All rights reserved.
*
* This software was written by Juli Mallett <jmallett@FreeBSD.org> for the
* FreeBSD project. Redistribution and use in source and binary forms, with
* or without modification, are permitted provided that the following
* conditions are met:
*
* 1. Redistribution of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* 2. Redistribution in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
* $FreeBSD$
*/
#ifndef __LIBUFS_H__
#define __LIBUFS_H__
/*
* libufs structures.
*/
/*
* userland ufs disk.
*/
struct uufsd {
const char *d_name; /* disk name */
int d_ufs; /* decimal UFS version */
int d_fd; /* raw device file descriptor */
long d_bsize; /* device bsize */
ufs2_daddr_t d_sblock; /* superblock location */
struct csum *d_sbcsum; /* Superblock summary info */
caddr_t d_inoblock; /* inode block */
ino_t d_inomin; /* low inode */
ino_t d_inomax; /* high inode */
union {
struct fs d_fs; /* filesystem information */
char d_sb[MAXBSIZE];
/* superblock as buffer */
} d_sbunion;
union {
struct cg d_cg; /* cylinder group */
char d_buf[MAXBSIZE];
/* cylinder group storage */
} d_cgunion;
int d_ccg; /* current cylinder group */
int d_lcg; /* last cylinder group (in d_cg) */
const char *d_error; /* human readable disk error */
int d_mine; /* internal flags */
#define d_fs d_sbunion.d_fs
#define d_sb d_sbunion.d_sb
#define d_cg d_cgunion.d_cg
};
/*
* libufs macros (internal, non-exported).
*/
#ifdef _LIBUFS
/*
* Trace steps through libufs, to be used at entry and erroneous return.
*/
static inline void
ERROR(struct uufsd *u, const char *str)
{
#ifdef _LIBUFS_DEBUGGING
if (str != NULL) {
fprintf(stderr, "libufs: %s", str);
if (errno != 0)
fprintf(stderr, ": %s", strerror(errno));
fprintf(stderr, "\n");
}
#endif
if (u != NULL)
u->d_error = str;
}
#endif /* _LIBUFS */
__BEGIN_DECLS
/*
* libufs prototypes.
*/
/*
* block.c
*/
ssize_t bread(struct uufsd *, ufs2_daddr_t, void *, size_t);
ssize_t bwrite(struct uufsd *, ufs2_daddr_t, const void *, size_t);
int berase(struct uufsd *, ufs2_daddr_t, ufs2_daddr_t);
/*
* cgroup.c
*/
ufs2_daddr_t cgballoc(struct uufsd *);
int cgbfree(struct uufsd *, ufs2_daddr_t, long);
ino_t cgialloc(struct uufsd *);
int cgread(struct uufsd *);
int cgread1(struct uufsd *, int);
int cgwrite(struct uufsd *);
int cgwrite1(struct uufsd *, int);
/*
* inode.c
*/
int getino(struct uufsd *, void **, ino_t, int *);
int putino(struct uufsd *);
/*
* sblock.c
*/
int sbread(struct uufsd *);
int sbwrite(struct uufsd *, int);
/*
* type.c
*/
int ufs_disk_close(struct uufsd *);
int ufs_disk_fillout(struct uufsd *, const char *);
int ufs_disk_fillout_blank(struct uufsd *, const char *);
int ufs_disk_write(struct uufsd *);
/*
* ffs_subr.c
*/
void ffs_clrblock(struct fs *, u_char *, ufs1_daddr_t);
void ffs_clusteracct(struct fs *, struct cg *, ufs1_daddr_t, int);
void ffs_fragacct(struct fs *, int, int32_t [], int);
int ffs_isblock(struct fs *, u_char *, ufs1_daddr_t);
int ffs_isfreeblock(struct fs *, u_char *, ufs1_daddr_t);
void ffs_setblock(struct fs *, u_char *, ufs1_daddr_t);
__END_DECLS
#endif /* __LIBUFS_H__ */
+169
View File
@@ -0,0 +1,169 @@
/*
* Copyright (c) 2002 Juli Mallett. All rights reserved.
*
* This software was written by Juli Mallett <jmallett@FreeBSD.org> for the
* FreeBSD project. Redistribution and use in source and binary forms, with
* or without modification, are permitted provided that the following
* conditions are met:
*
* 1. Redistribution of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* 2. Redistribution in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
#include <sys/param.h>
#include <sys/mount.h>
#include <sys/disklabel.h>
#include <sys/stat.h>
#include <ufs/ufs/ufsmount.h>
#include <ufs/ufs/dinode.h>
#include <ufs/ffs/fs.h>
#include <errno.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <libufs.h>
static int superblocks[] = SBLOCKSEARCH;
int
sbread(struct uufsd *disk)
{
uint8_t block[MAXBSIZE];
struct fs *fs;
int sb, superblock;
int i, size, blks;
uint8_t *space;
ERROR(disk, NULL);
fs = &disk->d_fs;
superblock = superblocks[0];
for (sb = 0; (superblock = superblocks[sb]) != -1; sb++) {
if (bread(disk, superblock, disk->d_sb, SBLOCKSIZE) == -1) {
ERROR(disk, "non-existent or truncated superblock");
return (-1);
}
if (fs->fs_magic == FS_UFS1_MAGIC)
disk->d_ufs = 1;
if (fs->fs_magic == FS_UFS2_MAGIC &&
fs->fs_sblockloc == superblock)
disk->d_ufs = 2;
if (fs->fs_bsize <= MAXBSIZE &&
(size_t)fs->fs_bsize >= sizeof(*fs)) {
if (disk->d_ufs)
break;
}
disk->d_ufs = 0;
}
if (superblock == -1 || disk->d_ufs == 0) {
/*
* Other error cases will result in errno being set, here we
* must set it to indicate no superblock could be found with
* which to associate this disk/filesystem.
*/
ERROR(disk, "no usable known superblock found");
errno = ENOENT;
return (-1);
}
disk->d_bsize = fs->fs_fsize / fsbtodb(fs, 1);
disk->d_sblock = superblock / disk->d_bsize;
/*
* Read in the superblock summary information.
*/
size = fs->fs_cssize;
blks = howmany(size, fs->fs_fsize);
size += fs->fs_ncg * sizeof(int32_t);
space = malloc(size);
if (space == NULL) {
ERROR(disk, "failed to allocate space for summary information");
return (-1);
}
fs->fs_csp = (struct csum *)space;
for (i = 0; i < blks; i += fs->fs_frag) {
size = fs->fs_bsize;
if (i + fs->fs_frag > blks)
size = (blks - i) * fs->fs_fsize;
if (bread(disk, fsbtodb(fs, fs->fs_csaddr + i), block, size)
== -1) {
ERROR(disk, "Failed to read sb summary information");
free(fs->fs_csp);
return (-1);
}
bcopy(block, space, size);
space += size;
}
fs->fs_maxcluster = (uint32_t *)space;
disk->d_sbcsum = fs->fs_csp;
return (0);
}
int
sbwrite(struct uufsd *disk, int all)
{
struct fs *fs;
int blks, size;
uint8_t *space;
unsigned i;
ERROR(disk, NULL);
fs = &disk->d_fs;
if (!disk->d_sblock) {
disk->d_sblock = disk->d_fs.fs_sblockloc / disk->d_bsize;
}
if (bwrite(disk, disk->d_sblock, fs, SBLOCKSIZE) == -1) {
ERROR(disk, "failed to write superblock");
return (-1);
}
/*
* Write superblock summary information.
*/
blks = howmany(fs->fs_cssize, fs->fs_fsize);
space = (uint8_t *)disk->d_sbcsum;
for (i = 0; i < blks; i += fs->fs_frag) {
size = fs->fs_bsize;
if (i + fs->fs_frag > blks)
size = (blks - i) * fs->fs_fsize;
if (bwrite(disk, fsbtodb(fs, fs->fs_csaddr + i), space, size)
== -1) {
ERROR(disk, "Failed to write sb summary information");
return (-1);
}
space += size;
}
if (all) {
for (i = 0; i < fs->fs_ncg; i++)
if (bwrite(disk, fsbtodb(fs, cgsblock(fs, i)),
fs, SBLOCKSIZE) == -1) {
ERROR(disk, "failed to update a superblock");
return (-1);
}
}
return (0);
}
+200
View File
@@ -0,0 +1,200 @@
/*
* Copyright (c) 2002 Juli Mallett. All rights reserved.
*
* This software was written by Juli Mallett <jmallett@FreeBSD.org> for the
* FreeBSD project. Redistribution and use in source and binary forms, with
* or without modification, are permitted provided that the following
* conditions are met:
*
* 1. Redistribution of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* 2. Redistribution in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
#include <sys/param.h>
#include <sys/mount.h>
#include <sys/disklabel.h>
#include <sys/stat.h>
#include <ufs/ufs/ufsmount.h>
#include <ufs/ufs/dinode.h>
#include <ufs/ffs/fs.h>
#include <errno.h>
#include <fcntl.h>
#include <fstab.h>
#include <paths.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <libufs.h>
/* Internally, track the 'name' value, it's ours. */
#define MINE_NAME 0x01
/* Track if its fd points to a writable device. */
#define MINE_WRITE 0x02
int
ufs_disk_close(struct uufsd *disk)
{
ERROR(disk, NULL);
close(disk->d_fd);
disk->d_fd = -1;
if (disk->d_inoblock != NULL) {
free(disk->d_inoblock);
disk->d_inoblock = NULL;
}
if (disk->d_mine & MINE_NAME) {
free((char *)(uintptr_t)disk->d_name);
disk->d_name = NULL;
}
if (disk->d_sbcsum != NULL) {
free(disk->d_sbcsum);
disk->d_sbcsum = NULL;
}
return (0);
}
int
ufs_disk_fillout(struct uufsd *disk, const char *name)
{
if (ufs_disk_fillout_blank(disk, name) == -1) {
return (-1);
}
if (sbread(disk) == -1) {
ERROR(disk, "could not read superblock to fill out disk");
return (-1);
}
return (0);
}
int
ufs_disk_fillout_blank(struct uufsd *disk, const char *name)
{
struct stat st;
struct fstab *fs;
struct statfs sfs;
const char *oname;
char dev[MAXPATHLEN];
int fd, ret;
ERROR(disk, NULL);
oname = name;
again: if ((ret = stat(name, &st)) < 0) {
if (*name != '/') {
snprintf(dev, sizeof(dev), "%s%s", _PATH_DEV, name);
name = dev;
goto again;
}
/*
* The given object doesn't exist, but don't panic just yet -
* it may be still mount point listed in /etc/fstab, but without
* existing corresponding directory.
*/
name = oname;
}
if (ret >= 0 && S_ISREG(st.st_mode)) {
/* Possibly a disk image, give it a try. */
;
} else if (ret >= 0 && S_ISCHR(st.st_mode)) {
/* This is what we need, do nothing. */
;
} else if (0/*(fs = getfsfile(name)) != NULL*/) {
/*
* The given mount point is listed in /etc/fstab.
* It is possible that someone unmounted file system by hand
* and different file system is mounted on this mount point,
* but we still prefer /etc/fstab entry, because on the other
* hand, there could be /etc/fstab entry for this mount
* point, but file system is not mounted yet (eg. noauto) and
* statfs(2) will point us at different file system.
*/
name = fs->fs_spec;
} else if (ret >= 0 && S_ISDIR(st.st_mode)) {
/*
* The mount point is not listed in /etc/fstab, so it may be
* file system mounted by hand.
*/
if (statfs(name, &sfs) < 0) {
ERROR(disk, "could not find special device");
return (-1);
}
strlcpy(dev, sfs.f_mntfromname, sizeof(dev));
name = dev;
} else {
ERROR(disk, "could not find special device");
return (-1);
}
fd = open(name, O_RDONLY);
if (fd == -1) {
ERROR(disk, "could not open special device");
return (-1);
}
disk->d_bsize = 1;
disk->d_ccg = 0;
disk->d_fd = fd;
disk->d_inoblock = NULL;
disk->d_inomin = 0;
disk->d_inomax = 0;
disk->d_lcg = 0;
disk->d_mine = 0;
disk->d_ufs = 0;
disk->d_error = NULL;
disk->d_sbcsum = NULL;
if (oname != name) {
name = strdup(name);
if (name == NULL) {
ERROR(disk, "could not allocate memory for disk name");
return (-1);
}
disk->d_mine |= MINE_NAME;
}
disk->d_name = name;
return (0);
}
int
ufs_disk_write(struct uufsd *disk)
{
int fd;
ERROR(disk, NULL);
if (disk->d_mine & MINE_WRITE)
return (0);
fd = open(disk->d_name, O_RDWR);
if (fd < 0) {
ERROR(disk, "failed to open disk for writing");
return (-1);
}
close(disk->d_fd);
disk->d_fd = fd;
disk->d_mine |= MINE_WRITE;
return (0);
}
+12
View File
@@ -6,3 +6,15 @@ add_executable(hello_cpp main.cpp)
set_target_properties(hello_c PROPERTIES OUTPUT_NAME hello_c.elf)
set_target_properties(hello_cpp PROPERTIES OUTPUT_NAME hello_cpp.elf)
add_custom_target(test_c
USES_TERMINAL
COMMAND ${PS5_DEPLOY} hello_c.elf
DEPENDS hello_c
)
add_custom_target(test_cpp
USES_TERMINAL
COMMAND ${PS5_DEPLOY} hello_cpp.elf
DEPENDS hello_cpp
)
+40
View File
@@ -0,0 +1,40 @@
# Copyright (C) 2026 John Törnblom
#
# This file is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; see the file COPYING. If not see
# <http://www.gnu.org/licenses/>.
PS5_HOST ?= ps5
PS5_PORT ?= 9021
ifdef PS5_PAYLOAD_SDK
include $(PS5_PAYLOAD_SDK)/toolchain/prospero.mk
else
$(error PS5_PAYLOAD_SDK is undefined)
endif
CFLAGS := -Wall -Werror -g
all: hello_world.elf
hello_world.o: hello.o world.o
$(LD) -r $^ -o $@
hello_world.elf: hello_world.o main.c
$(CC) $(CFLAGS) -o $@ $^
clean:
rm -f *.o *.elf
test: hello_world.elf
$(PS5_DEPLOY) -h $(PS5_HOST) -p $(PS5_PORT) $^
+23
View File
@@ -0,0 +1,23 @@
/* Copyright (C) 2026 John Törnblom
This program is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the
Free Software Foundation; either version 3, or (at your option) any
later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; see the file COPYING. If not, see
<http://www.gnu.org/licenses/>. */
#include <stdio.h>
void
hello(void) {
printf("Hello ");
}
+28
View File
@@ -0,0 +1,28 @@
/* Copyright (C) 2026 John Törnblom
This program is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the
Free Software Foundation; either version 3, or (at your option) any
later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; see the file COPYING. If not, see
<http://www.gnu.org/licenses/>. */
void hello(void);
void world(void);
int
main() {
hello();
world();
return 0;
}
+23
View File
@@ -0,0 +1,23 @@
/* Copyright (C) 2026 John Törnblom
This program is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the
Free Software Foundation; either version 3, or (at your option) any
later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; see the file COPYING. If not, see
<http://www.gnu.org/licenses/>. */
#include <stdio.h>
void
world(void) {
puts("World!");
}
+4 -2
View File
@@ -153,11 +153,13 @@ static void
print_info(pid_t pid) {
app_info_t app_info = {0};
uint8_t qaflags[16] = {0};
uint8_t attrs[32] = {0};
uint8_t caps[16] = {0};
char buf[16*3];
char buf[32*3];
kernel_get_qaflags(qaflags);
kernel_get_ucred_caps(pid, caps);
kernel_get_ucred_attrs(pid, attrs);
sceKernelGetAppInfo(pid, &app_info);
PUTS("Console info");
@@ -173,7 +175,7 @@ print_info(pid_t pid) {
PUTS("----------");
PRINTF("SCE titleid: %s\n", app_info.title_id);
PRINTF("SCE authid: 0x%016lx\n", kernel_get_ucred_authid(pid));
PRINTF("SCE attrs: 0x%016lx\n", kernel_get_ucred_attrs(pid));
PRINTF("SCE attrs: %s\n", bin2hex(attrs, buf, sizeof(attrs)));
PRINTF("SCE caps: %s\n", bin2hex(caps, buf, sizeof(caps)));
PRINTF("uid: %d\n", getuid());
PRINTF("euid: %d\n", geteuid());
+1 -24
View File
@@ -14,24 +14,7 @@
# along with this program; see the file COPYING. If not see
# <http://www.gnu.org/licenses/>.
PYTHON ?= python3
DESTDIR ?= /opt/ps5-payload-sdk
LLVM_CONFIG_CANDIDATES := llvm-config-21 \
llvm-config-20 llvm-config-19 llvm-config-18 \
llvm-config-17 llvm-config-16 llvm-config-15 \
llvm-config
LLVM_CONFIG_CANDIDATES := $(foreach LCC,$(LLVM_CONFIG_CANDIDATES), \
$(if $(shell command -v $(LCC) 2>/dev/null), $(LCC)))
LLVM_CONFIG ?= $(firstword $(LLVM_CONFIG_CANDIDATES))
ifndef LLVM_CONFIG
$(error Unable to find llvm-config)
endif
LLVM_BINDIR := $(shell $(LLVM_CONFIG) --bindir)
CC := $(LLVM_BINDIR)/clang
LD := $(LLVM_BINDIR)/ld.lld
include ../Makefile.inc
CFLAGS := -ffreestanding -fno-builtin -nostdlib -fPIC
CFLAGS += -target x86_64-sie-ps5 -fno-plt -fno-stack-protector
@@ -61,12 +44,6 @@ $(NID_DB):
%.o: %.c
$(CC) -c $(CFLAGS) -o $@ $^
libdl.so: libkernel_web.o
$(LD) -m elf_x86_64 -shared -soname libkernel_web.sprx -o $@ $<
libpthread.so: libkernel_web.o
$(LD) -m elf_x86_64 -shared -soname libkernel_web.sprx -o $@ $<
# TODO: fix DT_NEEDED deps
libSceAppInstUtil.so: libSceIpmi.so
+808
View File
@@ -0,0 +1,808 @@
asm(".global sceAgcAcbAcquireMem\n"
".type sceAgcAcbAcquireMem @function\n"
"sceAgcAcbAcquireMem:\n");
asm(".global sceAgcAcbAcquireMemGetSize\n"
".type sceAgcAcbAcquireMemGetSize @function\n"
"sceAgcAcbAcquireMemGetSize:\n");
asm(".global sceAgcAcbAtomicGds\n"
".type sceAgcAcbAtomicGds @function\n"
"sceAgcAcbAtomicGds:\n");
asm(".global sceAgcAcbAtomicGdsGetSize\n"
".type sceAgcAcbAtomicGdsGetSize @function\n"
"sceAgcAcbAtomicGdsGetSize:\n");
asm(".global sceAgcAcbAtomicMem\n"
".type sceAgcAcbAtomicMem @function\n"
"sceAgcAcbAtomicMem:\n");
asm(".global sceAgcAcbAtomicMemGetSize\n"
".type sceAgcAcbAtomicMemGetSize @function\n"
"sceAgcAcbAtomicMemGetSize:\n");
asm(".global sceAgcAcbCondExec\n"
".type sceAgcAcbCondExec @function\n"
"sceAgcAcbCondExec:\n");
asm(".global sceAgcAcbCondExecGetSize\n"
".type sceAgcAcbCondExecGetSize @function\n"
"sceAgcAcbCondExecGetSize:\n");
asm(".global sceAgcAcbCopyData\n"
".type sceAgcAcbCopyData @function\n"
"sceAgcAcbCopyData:\n");
asm(".global sceAgcAcbCopyDataGetSize\n"
".type sceAgcAcbCopyDataGetSize @function\n"
"sceAgcAcbCopyDataGetSize:\n");
asm(".global sceAgcAcbDispatchIndirect\n"
".type sceAgcAcbDispatchIndirect @function\n"
"sceAgcAcbDispatchIndirect:\n");
asm(".global sceAgcAcbDispatchIndirectGetSize\n"
".type sceAgcAcbDispatchIndirectGetSize @function\n"
"sceAgcAcbDispatchIndirectGetSize:\n");
asm(".global sceAgcAcbDmaData\n"
".type sceAgcAcbDmaData @function\n"
"sceAgcAcbDmaData:\n");
asm(".global sceAgcAcbDmaDataGetSize\n"
".type sceAgcAcbDmaDataGetSize @function\n"
"sceAgcAcbDmaDataGetSize:\n");
asm(".global sceAgcAcbEventWrite\n"
".type sceAgcAcbEventWrite @function\n"
"sceAgcAcbEventWrite:\n");
asm(".global sceAgcAcbEventWriteGetSize\n"
".type sceAgcAcbEventWriteGetSize @function\n"
"sceAgcAcbEventWriteGetSize:\n");
asm(".global sceAgcAcbInitializeDefaultHardwareState\n"
".type sceAgcAcbInitializeDefaultHardwareState @function\n"
"sceAgcAcbInitializeDefaultHardwareState:\n");
asm(".global sceAgcAcbJump\n"
".type sceAgcAcbJump @function\n"
"sceAgcAcbJump:\n");
asm(".global sceAgcAcbJumpGetSize\n"
".type sceAgcAcbJumpGetSize @function\n"
"sceAgcAcbJumpGetSize:\n");
asm(".global sceAgcAcbMemSemaphore\n"
".type sceAgcAcbMemSemaphore @function\n"
"sceAgcAcbMemSemaphore:\n");
asm(".global sceAgcAcbPopMarker\n"
".type sceAgcAcbPopMarker @function\n"
"sceAgcAcbPopMarker:\n");
asm(".global sceAgcAcbPrimeUtcl2\n"
".type sceAgcAcbPrimeUtcl2 @function\n"
"sceAgcAcbPrimeUtcl2:\n");
asm(".global sceAgcAcbPrimeUtcl2GetSize\n"
".type sceAgcAcbPrimeUtcl2GetSize @function\n"
"sceAgcAcbPrimeUtcl2GetSize:\n");
asm(".global sceAgcAcbPushMarker\n"
".type sceAgcAcbPushMarker @function\n"
"sceAgcAcbPushMarker:\n");
asm(".global sceAgcAcbQueueEndOfShaderActionGetSize\n"
".type sceAgcAcbQueueEndOfShaderActionGetSize @function\n"
"sceAgcAcbQueueEndOfShaderActionGetSize:\n");
asm(".global sceAgcAcbResetQueue\n"
".type sceAgcAcbResetQueue @function\n"
"sceAgcAcbResetQueue:\n");
asm(".global sceAgcAcbRewind\n"
".type sceAgcAcbRewind @function\n"
"sceAgcAcbRewind:\n");
asm(".global sceAgcAcbRewindGetSize\n"
".type sceAgcAcbRewindGetSize @function\n"
"sceAgcAcbRewindGetSize:\n");
asm(".global sceAgcAcbSetFlip\n"
".type sceAgcAcbSetFlip @function\n"
"sceAgcAcbSetFlip:\n");
asm(".global sceAgcAcbSetMarker\n"
".type sceAgcAcbSetMarker @function\n"
"sceAgcAcbSetMarker:\n");
asm(".global sceAgcAcbSetWorkloadComplete\n"
".type sceAgcAcbSetWorkloadComplete @function\n"
"sceAgcAcbSetWorkloadComplete:\n");
asm(".global sceAgcAcbSetWorkloadStreamInactive\n"
".type sceAgcAcbSetWorkloadStreamInactive @function\n"
"sceAgcAcbSetWorkloadStreamInactive:\n");
asm(".global sceAgcAcbSetWorkloadsActive\n"
".type sceAgcAcbSetWorkloadsActive @function\n"
"sceAgcAcbSetWorkloadsActive:\n");
asm(".global sceAgcAcbWaitOnAddressGetSize\n"
".type sceAgcAcbWaitOnAddressGetSize @function\n"
"sceAgcAcbWaitOnAddressGetSize:\n");
asm(".global sceAgcAcbWaitRegMem\n"
".type sceAgcAcbWaitRegMem @function\n"
"sceAgcAcbWaitRegMem:\n");
asm(".global sceAgcAcbWaitUntilSafeForRendering\n"
".type sceAgcAcbWaitUntilSafeForRendering @function\n"
"sceAgcAcbWaitUntilSafeForRendering:\n");
asm(".global sceAgcAcbWriteData\n"
".type sceAgcAcbWriteData @function\n"
"sceAgcAcbWriteData:\n");
asm(".global sceAgcAsyncCondExecPatchSetCommandAddress\n"
".type sceAgcAsyncCondExecPatchSetCommandAddress @function\n"
"sceAgcAsyncCondExecPatchSetCommandAddress:\n");
asm(".global sceAgcAsyncCondExecPatchSetEnd\n"
".type sceAgcAsyncCondExecPatchSetEnd @function\n"
"sceAgcAsyncCondExecPatchSetEnd:\n");
asm(".global sceAgcAsyncRewindPatchSetRewindState\n"
".type sceAgcAsyncRewindPatchSetRewindState @function\n"
"sceAgcAsyncRewindPatchSetRewindState:\n");
asm(".global sceAgcBranchPatchSetCompareAddress\n"
".type sceAgcBranchPatchSetCompareAddress @function\n"
"sceAgcBranchPatchSetCompareAddress:\n");
asm(".global sceAgcBranchPatchSetElseTarget\n"
".type sceAgcBranchPatchSetElseTarget @function\n"
"sceAgcBranchPatchSetElseTarget:\n");
asm(".global sceAgcBranchPatchSetThenTarget\n"
".type sceAgcBranchPatchSetThenTarget @function\n"
"sceAgcBranchPatchSetThenTarget:\n");
asm(".global sceAgcCbBranch\n"
".type sceAgcCbBranch @function\n"
"sceAgcCbBranch:\n");
asm(".global sceAgcCbBranchGetSize\n"
".type sceAgcCbBranchGetSize @function\n"
"sceAgcCbBranchGetSize:\n");
asm(".global sceAgcCbCondWrite\n"
".type sceAgcCbCondWrite @function\n"
"sceAgcCbCondWrite:\n");
asm(".global sceAgcCbCondWriteGetSize\n"
".type sceAgcCbCondWriteGetSize @function\n"
"sceAgcCbCondWriteGetSize:\n");
asm(".global sceAgcCbDispatch\n"
".type sceAgcCbDispatch @function\n"
"sceAgcCbDispatch:\n");
asm(".global sceAgcCbDispatchGetSize\n"
".type sceAgcCbDispatchGetSize @function\n"
"sceAgcCbDispatchGetSize:\n");
asm(".global sceAgcCbMemSemaphore\n"
".type sceAgcCbMemSemaphore @function\n"
"sceAgcCbMemSemaphore:\n");
asm(".global sceAgcCbNop\n"
".type sceAgcCbNop @function\n"
"sceAgcCbNop:\n");
asm(".global sceAgcCbNopGetSize\n"
".type sceAgcCbNopGetSize @function\n"
"sceAgcCbNopGetSize:\n");
asm(".global sceAgcCbQueueEndOfPipeActionGetSize\n"
".type sceAgcCbQueueEndOfPipeActionGetSize @function\n"
"sceAgcCbQueueEndOfPipeActionGetSize:\n");
asm(".global sceAgcCbReleaseMem\n"
".type sceAgcCbReleaseMem @function\n"
"sceAgcCbReleaseMem:\n");
asm(".global sceAgcCbSetShRegisterRangeDirect\n"
".type sceAgcCbSetShRegisterRangeDirect @function\n"
"sceAgcCbSetShRegisterRangeDirect:\n");
asm(".global sceAgcCbSetShRegisterRangeDirectGetSize\n"
".type sceAgcCbSetShRegisterRangeDirectGetSize @function\n"
"sceAgcCbSetShRegisterRangeDirectGetSize:\n");
asm(".global sceAgcCbSetShRegistersDirect\n"
".type sceAgcCbSetShRegistersDirect @function\n"
"sceAgcCbSetShRegistersDirect:\n");
asm(".global sceAgcCbSetShRegistersDirectGetSize\n"
".type sceAgcCbSetShRegistersDirectGetSize @function\n"
"sceAgcCbSetShRegistersDirectGetSize:\n");
asm(".global sceAgcCbSetUcRegisterRangeDirect\n"
".type sceAgcCbSetUcRegisterRangeDirect @function\n"
"sceAgcCbSetUcRegisterRangeDirect:\n");
asm(".global sceAgcCbSetUcRegisterRangeDirectGetSize\n"
".type sceAgcCbSetUcRegisterRangeDirectGetSize @function\n"
"sceAgcCbSetUcRegisterRangeDirectGetSize:\n");
asm(".global sceAgcCbSetUcRegistersDirect\n"
".type sceAgcCbSetUcRegistersDirect @function\n"
"sceAgcCbSetUcRegistersDirect:\n");
asm(".global sceAgcCbSetUcRegistersDirectGetSize\n"
".type sceAgcCbSetUcRegistersDirectGetSize @function\n"
"sceAgcCbSetUcRegistersDirectGetSize:\n");
asm(".global sceAgcCondExecPatchSetCommandAddress\n"
".type sceAgcCondExecPatchSetCommandAddress @function\n"
"sceAgcCondExecPatchSetCommandAddress:\n");
asm(".global sceAgcCondExecPatchSetEnd\n"
".type sceAgcCondExecPatchSetEnd @function\n"
"sceAgcCondExecPatchSetEnd:\n");
asm(".global sceAgcCreateInterpolantMapping\n"
".type sceAgcCreateInterpolantMapping @function\n"
"sceAgcCreateInterpolantMapping:\n");
asm(".global sceAgcCreatePrimState\n"
".type sceAgcCreatePrimState @function\n"
"sceAgcCreatePrimState:\n");
asm(".global sceAgcCreateShader\n"
".type sceAgcCreateShader @function\n"
"sceAgcCreateShader:\n");
asm(".global sceAgcDcbAcquireMem\n"
".type sceAgcDcbAcquireMem @function\n"
"sceAgcDcbAcquireMem:\n");
asm(".global sceAgcDcbAcquireMemGetSize\n"
".type sceAgcDcbAcquireMemGetSize @function\n"
"sceAgcDcbAcquireMemGetSize:\n");
asm(".global sceAgcDcbAtomicGds\n"
".type sceAgcDcbAtomicGds @function\n"
"sceAgcDcbAtomicGds:\n");
asm(".global sceAgcDcbAtomicGdsGetSize\n"
".type sceAgcDcbAtomicGdsGetSize @function\n"
"sceAgcDcbAtomicGdsGetSize:\n");
asm(".global sceAgcDcbAtomicMem\n"
".type sceAgcDcbAtomicMem @function\n"
"sceAgcDcbAtomicMem:\n");
asm(".global sceAgcDcbAtomicMemGetSize\n"
".type sceAgcDcbAtomicMemGetSize @function\n"
"sceAgcDcbAtomicMemGetSize:\n");
asm(".global sceAgcDcbBeginOcclusionQueryGetSize\n"
".type sceAgcDcbBeginOcclusionQueryGetSize @function\n"
"sceAgcDcbBeginOcclusionQueryGetSize:\n");
asm(".global sceAgcDcbClearState\n"
".type sceAgcDcbClearState @function\n"
"sceAgcDcbClearState:\n");
asm(".global sceAgcDcbCondExec\n"
".type sceAgcDcbCondExec @function\n"
"sceAgcDcbCondExec:\n");
asm(".global sceAgcDcbCondExecGetSize\n"
".type sceAgcDcbCondExecGetSize @function\n"
"sceAgcDcbCondExecGetSize:\n");
asm(".global sceAgcDcbContextStateOp\n"
".type sceAgcDcbContextStateOp @function\n"
"sceAgcDcbContextStateOp:\n");
asm(".global sceAgcDcbContextStateOpGetSize\n"
".type sceAgcDcbContextStateOpGetSize @function\n"
"sceAgcDcbContextStateOpGetSize:\n");
asm(".global sceAgcDcbCopyData\n"
".type sceAgcDcbCopyData @function\n"
"sceAgcDcbCopyData:\n");
asm(".global sceAgcDcbCopyDataGetSize\n"
".type sceAgcDcbCopyDataGetSize @function\n"
"sceAgcDcbCopyDataGetSize:\n");
asm(".global sceAgcDcbDispatchIndirect\n"
".type sceAgcDcbDispatchIndirect @function\n"
"sceAgcDcbDispatchIndirect:\n");
asm(".global sceAgcDcbDispatchIndirectGetSize\n"
".type sceAgcDcbDispatchIndirectGetSize @function\n"
"sceAgcDcbDispatchIndirectGetSize:\n");
asm(".global sceAgcDcbDmaData\n"
".type sceAgcDcbDmaData @function\n"
"sceAgcDcbDmaData:\n");
asm(".global sceAgcDcbDmaDataGetSize\n"
".type sceAgcDcbDmaDataGetSize @function\n"
"sceAgcDcbDmaDataGetSize:\n");
asm(".global sceAgcDcbDrawIndex\n"
".type sceAgcDcbDrawIndex @function\n"
"sceAgcDcbDrawIndex:\n");
asm(".global sceAgcDcbDrawIndexAuto\n"
".type sceAgcDcbDrawIndexAuto @function\n"
"sceAgcDcbDrawIndexAuto:\n");
asm(".global sceAgcDcbDrawIndexAutoGetSize\n"
".type sceAgcDcbDrawIndexAutoGetSize @function\n"
"sceAgcDcbDrawIndexAutoGetSize:\n");
asm(".global sceAgcDcbDrawIndexGetSize\n"
".type sceAgcDcbDrawIndexGetSize @function\n"
"sceAgcDcbDrawIndexGetSize:\n");
asm(".global sceAgcDcbDrawIndexIndirect\n"
".type sceAgcDcbDrawIndexIndirect @function\n"
"sceAgcDcbDrawIndexIndirect:\n");
asm(".global sceAgcDcbDrawIndexIndirectGetSize\n"
".type sceAgcDcbDrawIndexIndirectGetSize @function\n"
"sceAgcDcbDrawIndexIndirectGetSize:\n");
asm(".global sceAgcDcbDrawIndexIndirectMulti\n"
".type sceAgcDcbDrawIndexIndirectMulti @function\n"
"sceAgcDcbDrawIndexIndirectMulti:\n");
asm(".global sceAgcDcbDrawIndexIndirectMultiGetSize\n"
".type sceAgcDcbDrawIndexIndirectMultiGetSize @function\n"
"sceAgcDcbDrawIndexIndirectMultiGetSize:\n");
asm(".global sceAgcDcbDrawIndexMultiInstanced\n"
".type sceAgcDcbDrawIndexMultiInstanced @function\n"
"sceAgcDcbDrawIndexMultiInstanced:\n");
asm(".global sceAgcDcbDrawIndexMultiInstancedGetSize\n"
".type sceAgcDcbDrawIndexMultiInstancedGetSize @function\n"
"sceAgcDcbDrawIndexMultiInstancedGetSize:\n");
asm(".global sceAgcDcbDrawIndexOffset\n"
".type sceAgcDcbDrawIndexOffset @function\n"
"sceAgcDcbDrawIndexOffset:\n");
asm(".global sceAgcDcbDrawIndexOffsetGetSize\n"
".type sceAgcDcbDrawIndexOffsetGetSize @function\n"
"sceAgcDcbDrawIndexOffsetGetSize:\n");
asm(".global sceAgcDcbDrawIndirect\n"
".type sceAgcDcbDrawIndirect @function\n"
"sceAgcDcbDrawIndirect:\n");
asm(".global sceAgcDcbDrawIndirectGetSize\n"
".type sceAgcDcbDrawIndirectGetSize @function\n"
"sceAgcDcbDrawIndirectGetSize:\n");
asm(".global sceAgcDcbDrawIndirectMulti\n"
".type sceAgcDcbDrawIndirectMulti @function\n"
"sceAgcDcbDrawIndirectMulti:\n");
asm(".global sceAgcDcbDrawIndirectMultiGetSize\n"
".type sceAgcDcbDrawIndirectMultiGetSize @function\n"
"sceAgcDcbDrawIndirectMultiGetSize:\n");
asm(".global sceAgcDcbEndOcclusionQueryGetSize\n"
".type sceAgcDcbEndOcclusionQueryGetSize @function\n"
"sceAgcDcbEndOcclusionQueryGetSize:\n");
asm(".global sceAgcDcbEventWrite\n"
".type sceAgcDcbEventWrite @function\n"
"sceAgcDcbEventWrite:\n");
asm(".global sceAgcDcbEventWriteGetSize\n"
".type sceAgcDcbEventWriteGetSize @function\n"
"sceAgcDcbEventWriteGetSize:\n");
asm(".global sceAgcDcbGetLodStats\n"
".type sceAgcDcbGetLodStats @function\n"
"sceAgcDcbGetLodStats:\n");
asm(".global sceAgcDcbGetLodStatsGetSize\n"
".type sceAgcDcbGetLodStatsGetSize @function\n"
"sceAgcDcbGetLodStatsGetSize:\n");
asm(".global sceAgcDcbJump\n"
".type sceAgcDcbJump @function\n"
"sceAgcDcbJump:\n");
asm(".global sceAgcDcbJumpGetSize\n"
".type sceAgcDcbJumpGetSize @function\n"
"sceAgcDcbJumpGetSize:\n");
asm(".global sceAgcDcbMemSemaphore\n"
".type sceAgcDcbMemSemaphore @function\n"
"sceAgcDcbMemSemaphore:\n");
asm(".global sceAgcDcbPopMarker\n"
".type sceAgcDcbPopMarker @function\n"
"sceAgcDcbPopMarker:\n");
asm(".global sceAgcDcbPrimeUtcl2\n"
".type sceAgcDcbPrimeUtcl2 @function\n"
"sceAgcDcbPrimeUtcl2:\n");
asm(".global sceAgcDcbPrimeUtcl2GetSize\n"
".type sceAgcDcbPrimeUtcl2GetSize @function\n"
"sceAgcDcbPrimeUtcl2GetSize:\n");
asm(".global sceAgcDcbPushMarker\n"
".type sceAgcDcbPushMarker @function\n"
"sceAgcDcbPushMarker:\n");
asm(".global sceAgcDcbQueueEndOfShaderActionGetSize\n"
".type sceAgcDcbQueueEndOfShaderActionGetSize @function\n"
"sceAgcDcbQueueEndOfShaderActionGetSize:\n");
asm(".global sceAgcDcbResetQueue\n"
".type sceAgcDcbResetQueue @function\n"
"sceAgcDcbResetQueue:\n");
asm(".global sceAgcDcbRewind\n"
".type sceAgcDcbRewind @function\n"
"sceAgcDcbRewind:\n");
asm(".global sceAgcDcbRewindGetSize\n"
".type sceAgcDcbRewindGetSize @function\n"
"sceAgcDcbRewindGetSize:\n");
asm(".global sceAgcDcbSetBaseDispatchIndirectArgsGetSize\n"
".type sceAgcDcbSetBaseDispatchIndirectArgsGetSize @function\n"
"sceAgcDcbSetBaseDispatchIndirectArgsGetSize:\n");
asm(".global sceAgcDcbSetBaseDrawIndirectArgsGetSize\n"
".type sceAgcDcbSetBaseDrawIndirectArgsGetSize @function\n"
"sceAgcDcbSetBaseDrawIndirectArgsGetSize:\n");
asm(".global sceAgcDcbSetBaseIndirectArgs\n"
".type sceAgcDcbSetBaseIndirectArgs @function\n"
"sceAgcDcbSetBaseIndirectArgs:\n");
asm(".global sceAgcDcbSetBoolPredicationEnableGetSize\n"
".type sceAgcDcbSetBoolPredicationEnableGetSize @function\n"
"sceAgcDcbSetBoolPredicationEnableGetSize:\n");
asm(".global sceAgcDcbSetCfRegisterDirect\n"
".type sceAgcDcbSetCfRegisterDirect @function\n"
"sceAgcDcbSetCfRegisterDirect:\n");
asm(".global sceAgcDcbSetCfRegisterRangeDirect\n"
".type sceAgcDcbSetCfRegisterRangeDirect @function\n"
"sceAgcDcbSetCfRegisterRangeDirect:\n");
asm(".global sceAgcDcbSetCxRegisterDirect\n"
".type sceAgcDcbSetCxRegisterDirect @function\n"
"sceAgcDcbSetCxRegisterDirect:\n");
asm(".global sceAgcDcbSetCxRegisterDirectGetSize\n"
".type sceAgcDcbSetCxRegisterDirectGetSize @function\n"
"sceAgcDcbSetCxRegisterDirectGetSize:\n");
asm(".global sceAgcDcbSetCxRegistersIndirect\n"
".type sceAgcDcbSetCxRegistersIndirect @function\n"
"sceAgcDcbSetCxRegistersIndirect:\n");
asm(".global sceAgcDcbSetCxRegistersIndirectGetSize\n"
".type sceAgcDcbSetCxRegistersIndirectGetSize @function\n"
"sceAgcDcbSetCxRegistersIndirectGetSize:\n");
asm(".global sceAgcDcbSetFlip\n"
".type sceAgcDcbSetFlip @function\n"
"sceAgcDcbSetFlip:\n");
asm(".global sceAgcDcbSetIndexBuffer\n"
".type sceAgcDcbSetIndexBuffer @function\n"
"sceAgcDcbSetIndexBuffer:\n");
asm(".global sceAgcDcbSetIndexBufferGetSize\n"
".type sceAgcDcbSetIndexBufferGetSize @function\n"
"sceAgcDcbSetIndexBufferGetSize:\n");
asm(".global sceAgcDcbSetIndexCount\n"
".type sceAgcDcbSetIndexCount @function\n"
"sceAgcDcbSetIndexCount:\n");
asm(".global sceAgcDcbSetIndexCountGetSize\n"
".type sceAgcDcbSetIndexCountGetSize @function\n"
"sceAgcDcbSetIndexCountGetSize:\n");
asm(".global sceAgcDcbSetIndexIndirectArgs\n"
".type sceAgcDcbSetIndexIndirectArgs @function\n"
"sceAgcDcbSetIndexIndirectArgs:\n");
asm(".global sceAgcDcbSetIndexIndirectArgsGetSize\n"
".type sceAgcDcbSetIndexIndirectArgsGetSize @function\n"
"sceAgcDcbSetIndexIndirectArgsGetSize:\n");
asm(".global sceAgcDcbSetIndexSize\n"
".type sceAgcDcbSetIndexSize @function\n"
"sceAgcDcbSetIndexSize:\n");
asm(".global sceAgcDcbSetIndexSizeGetSize\n"
".type sceAgcDcbSetIndexSizeGetSize @function\n"
"sceAgcDcbSetIndexSizeGetSize:\n");
asm(".global sceAgcDcbSetMarker\n"
".type sceAgcDcbSetMarker @function\n"
"sceAgcDcbSetMarker:\n");
asm(".global sceAgcDcbSetNumInstances\n"
".type sceAgcDcbSetNumInstances @function\n"
"sceAgcDcbSetNumInstances:\n");
asm(".global sceAgcDcbSetNumInstancesGetSize\n"
".type sceAgcDcbSetNumInstancesGetSize @function\n"
"sceAgcDcbSetNumInstancesGetSize:\n");
asm(".global sceAgcDcbSetPredication\n"
".type sceAgcDcbSetPredication @function\n"
"sceAgcDcbSetPredication:\n");
asm(".global sceAgcDcbSetPredicationDisableGetSize\n"
".type sceAgcDcbSetPredicationDisableGetSize @function\n"
"sceAgcDcbSetPredicationDisableGetSize:\n");
asm(".global sceAgcDcbSetShRegisterDirect\n"
".type sceAgcDcbSetShRegisterDirect @function\n"
"sceAgcDcbSetShRegisterDirect:\n");
asm(".global sceAgcDcbSetShRegisterDirectGetSize\n"
".type sceAgcDcbSetShRegisterDirectGetSize @function\n"
"sceAgcDcbSetShRegisterDirectGetSize:\n");
asm(".global sceAgcDcbSetShRegistersIndirect\n"
".type sceAgcDcbSetShRegistersIndirect @function\n"
"sceAgcDcbSetShRegistersIndirect:\n");
asm(".global sceAgcDcbSetShRegistersIndirectGetSize\n"
".type sceAgcDcbSetShRegistersIndirectGetSize @function\n"
"sceAgcDcbSetShRegistersIndirectGetSize:\n");
asm(".global sceAgcDcbSetUcRegisterDirect\n"
".type sceAgcDcbSetUcRegisterDirect @function\n"
"sceAgcDcbSetUcRegisterDirect:\n");
asm(".global sceAgcDcbSetUcRegisterDirectGetSize\n"
".type sceAgcDcbSetUcRegisterDirectGetSize @function\n"
"sceAgcDcbSetUcRegisterDirectGetSize:\n");
asm(".global sceAgcDcbSetUcRegistersIndirect\n"
".type sceAgcDcbSetUcRegistersIndirect @function\n"
"sceAgcDcbSetUcRegistersIndirect:\n");
asm(".global sceAgcDcbSetUcRegistersIndirectGetSize\n"
".type sceAgcDcbSetUcRegistersIndirectGetSize @function\n"
"sceAgcDcbSetUcRegistersIndirectGetSize:\n");
asm(".global sceAgcDcbSetWorkloadComplete\n"
".type sceAgcDcbSetWorkloadComplete @function\n"
"sceAgcDcbSetWorkloadComplete:\n");
asm(".global sceAgcDcbSetWorkloadStreamInactive\n"
".type sceAgcDcbSetWorkloadStreamInactive @function\n"
"sceAgcDcbSetWorkloadStreamInactive:\n");
asm(".global sceAgcDcbSetWorkloadsActive\n"
".type sceAgcDcbSetWorkloadsActive @function\n"
"sceAgcDcbSetWorkloadsActive:\n");
asm(".global sceAgcDcbSetZPassPredicationEnableGetSize\n"
".type sceAgcDcbSetZPassPredicationEnableGetSize @function\n"
"sceAgcDcbSetZPassPredicationEnableGetSize:\n");
asm(".global sceAgcDcbStallCommandBufferParser\n"
".type sceAgcDcbStallCommandBufferParser @function\n"
"sceAgcDcbStallCommandBufferParser:\n");
asm(".global sceAgcDcbStallCommandBufferParserGetSize\n"
".type sceAgcDcbStallCommandBufferParserGetSize @function\n"
"sceAgcDcbStallCommandBufferParserGetSize:\n");
asm(".global sceAgcDcbWaitOnAddressGetSize\n"
".type sceAgcDcbWaitOnAddressGetSize @function\n"
"sceAgcDcbWaitOnAddressGetSize:\n");
asm(".global sceAgcDcbWaitRegMem\n"
".type sceAgcDcbWaitRegMem @function\n"
"sceAgcDcbWaitRegMem:\n");
asm(".global sceAgcDcbWaitUntilSafeForRendering\n"
".type sceAgcDcbWaitUntilSafeForRendering @function\n"
"sceAgcDcbWaitUntilSafeForRendering:\n");
asm(".global sceAgcDcbWriteData\n"
".type sceAgcDcbWriteData @function\n"
"sceAgcDcbWriteData:\n");
asm(".global sceAgcDcbWriteDataGetSize\n"
".type sceAgcDcbWriteDataGetSize @function\n"
"sceAgcDcbWriteDataGetSize:\n");
asm(".global sceAgcDebugRaiseException\n"
".type sceAgcDebugRaiseException @function\n"
"sceAgcDebugRaiseException:\n");
asm(".global sceAgcDmaDataPatchSetDstAddressOrOffset\n"
".type sceAgcDmaDataPatchSetDstAddressOrOffset @function\n"
"sceAgcDmaDataPatchSetDstAddressOrOffset:\n");
asm(".global sceAgcDmaDataPatchSetSrcAddressOrOffsetOrImmediate\n"
".type sceAgcDmaDataPatchSetSrcAddressOrOffsetOrImmediate @function\n"
"sceAgcDmaDataPatchSetSrcAddressOrOffsetOrImmediate:\n");
asm(".global sceAgcFuseShaderHalves\n"
".type sceAgcFuseShaderHalves @function\n"
"sceAgcFuseShaderHalves:\n");
asm(".global sceAgcGetDataPacketPayloadAddress\n"
".type sceAgcGetDataPacketPayloadAddress @function\n"
"sceAgcGetDataPacketPayloadAddress:\n");
asm(".global sceAgcGetDataPacketPayloadRange\n"
".type sceAgcGetDataPacketPayloadRange @function\n"
"sceAgcGetDataPacketPayloadRange:\n");
asm(".global sceAgcGetDefaultCxStateFlat\n"
".type sceAgcGetDefaultCxStateFlat @function\n"
"sceAgcGetDefaultCxStateFlat:\n");
asm(".global sceAgcGetFusedShaderSize\n"
".type sceAgcGetFusedShaderSize @function\n"
"sceAgcGetFusedShaderSize:\n");
asm(".global sceAgcGetPacketSize\n"
".type sceAgcGetPacketSize @function\n"
"sceAgcGetPacketSize:\n");
asm(".global sceAgcGetRegisterDefaults\n"
".type sceAgcGetRegisterDefaults @function\n"
"sceAgcGetRegisterDefaults:\n");
asm(".global sceAgcGetRegisterDefaults2\n"
".type sceAgcGetRegisterDefaults2 @function\n"
"sceAgcGetRegisterDefaults2:\n");
asm(".global sceAgcGetRegisterDefaults2Internal\n"
".type sceAgcGetRegisterDefaults2Internal @function\n"
"sceAgcGetRegisterDefaults2Internal:\n");
asm(".global sceAgcGetRegisterDefaultsInternal\n"
".type sceAgcGetRegisterDefaultsInternal @function\n"
"sceAgcGetRegisterDefaultsInternal:\n");
asm(".global sceAgcInit\n"
".type sceAgcInit @function\n"
"sceAgcInit:\n");
asm(".global sceAgcJumpPatchSetTarget\n"
".type sceAgcJumpPatchSetTarget @function\n"
"sceAgcJumpPatchSetTarget:\n");
asm(".global sceAgcLinkShaders\n"
".type sceAgcLinkShaders @function\n"
"sceAgcLinkShaders:\n");
asm(".global sceAgcQueueEndOfPipeActionPatchAddress\n"
".type sceAgcQueueEndOfPipeActionPatchAddress @function\n"
"sceAgcQueueEndOfPipeActionPatchAddress:\n");
asm(".global sceAgcQueueEndOfPipeActionPatchData\n"
".type sceAgcQueueEndOfPipeActionPatchData @function\n"
"sceAgcQueueEndOfPipeActionPatchData:\n");
asm(".global sceAgcQueueEndOfPipeActionPatchGcrCntl\n"
".type sceAgcQueueEndOfPipeActionPatchGcrCntl @function\n"
"sceAgcQueueEndOfPipeActionPatchGcrCntl:\n");
asm(".global sceAgcQueueEndOfPipeActionPatchType\n"
".type sceAgcQueueEndOfPipeActionPatchType @function\n"
"sceAgcQueueEndOfPipeActionPatchType:\n");
asm(".global sceAgcRewindPatchSetRewindState\n"
".type sceAgcRewindPatchSetRewindState @function\n"
"sceAgcRewindPatchSetRewindState:\n");
asm(".global sceAgcSetCxRegIndirectPatchAddRegisters\n"
".type sceAgcSetCxRegIndirectPatchAddRegisters @function\n"
"sceAgcSetCxRegIndirectPatchAddRegisters:\n");
asm(".global sceAgcSetCxRegIndirectPatchSetAddress\n"
".type sceAgcSetCxRegIndirectPatchSetAddress @function\n"
"sceAgcSetCxRegIndirectPatchSetAddress:\n");
asm(".global sceAgcSetCxRegIndirectPatchSetNumRegisters\n"
".type sceAgcSetCxRegIndirectPatchSetNumRegisters @function\n"
"sceAgcSetCxRegIndirectPatchSetNumRegisters:\n");
asm(".global sceAgcSetNop\n"
".type sceAgcSetNop @function\n"
"sceAgcSetNop:\n");
asm(".global sceAgcSetPacketPredication\n"
".type sceAgcSetPacketPredication @function\n"
"sceAgcSetPacketPredication:\n");
asm(".global sceAgcSetRangePredication\n"
".type sceAgcSetRangePredication @function\n"
"sceAgcSetRangePredication:\n");
asm(".global sceAgcSetShRegIndirectPatchAddRegisters\n"
".type sceAgcSetShRegIndirectPatchAddRegisters @function\n"
"sceAgcSetShRegIndirectPatchAddRegisters:\n");
asm(".global sceAgcSetShRegIndirectPatchSetAddress\n"
".type sceAgcSetShRegIndirectPatchSetAddress @function\n"
"sceAgcSetShRegIndirectPatchSetAddress:\n");
asm(".global sceAgcSetShRegIndirectPatchSetNumRegisters\n"
".type sceAgcSetShRegIndirectPatchSetNumRegisters @function\n"
"sceAgcSetShRegIndirectPatchSetNumRegisters:\n");
asm(".global sceAgcSetSubmitMode\n"
".type sceAgcSetSubmitMode @function\n"
"sceAgcSetSubmitMode:\n");
asm(".global sceAgcSetUcRegIndirectPatchAddRegisters\n"
".type sceAgcSetUcRegIndirectPatchAddRegisters @function\n"
"sceAgcSetUcRegIndirectPatchAddRegisters:\n");
asm(".global sceAgcSetUcRegIndirectPatchSetAddress\n"
".type sceAgcSetUcRegIndirectPatchSetAddress @function\n"
"sceAgcSetUcRegIndirectPatchSetAddress:\n");
asm(".global sceAgcSetUcRegIndirectPatchSetNumRegisters\n"
".type sceAgcSetUcRegIndirectPatchSetNumRegisters @function\n"
"sceAgcSetUcRegIndirectPatchSetNumRegisters:\n");
asm(".global sceAgcSuspendPoint\n"
".type sceAgcSuspendPoint @function\n"
"sceAgcSuspendPoint:\n");
asm(".global sceAgcSuspendPointAndCheckStatus\n"
".type sceAgcSuspendPointAndCheckStatus @function\n"
"sceAgcSuspendPointAndCheckStatus:\n");
asm(".global sceAgcUpdateInterpolantMapping\n"
".type sceAgcUpdateInterpolantMapping @function\n"
"sceAgcUpdateInterpolantMapping:\n");
asm(".global sceAgcUpdatePrimState\n"
".type sceAgcUpdatePrimState @function\n"
"sceAgcUpdatePrimState:\n");
asm(".global sceAgcWaitRegMemPatchAddress\n"
".type sceAgcWaitRegMemPatchAddress @function\n"
"sceAgcWaitRegMemPatchAddress:\n");
asm(".global sceAgcWaitRegMemPatchCompareFunction\n"
".type sceAgcWaitRegMemPatchCompareFunction @function\n"
"sceAgcWaitRegMemPatchCompareFunction:\n");
asm(".global sceAgcWaitRegMemPatchMask\n"
".type sceAgcWaitRegMemPatchMask @function\n"
"sceAgcWaitRegMemPatchMask:\n");
asm(".global sceAgcWaitRegMemPatchReference\n"
".type sceAgcWaitRegMemPatchReference @function\n"
"sceAgcWaitRegMemPatchReference:\n");
+464
View File
@@ -0,0 +1,464 @@
asm(".global sceAgcDriverAcquireHDRScopesACQ\n"
".type sceAgcDriverAcquireHDRScopesACQ @function\n"
"sceAgcDriverAcquireHDRScopesACQ:\n");
asm(".global sceAgcDriverAcquireRazorACQ\n"
".type sceAgcDriverAcquireRazorACQ @function\n"
"sceAgcDriverAcquireRazorACQ:\n");
asm(".global sceAgcDriverAddEqEvent\n"
".type sceAgcDriverAddEqEvent @function\n"
"sceAgcDriverAddEqEvent:\n");
asm(".global sceAgcDriverAgrSubmitDcb\n"
".type sceAgcDriverAgrSubmitDcb @function\n"
"sceAgcDriverAgrSubmitDcb:\n");
asm(".global sceAgcDriverAgrSubmitMultiDcbs\n"
".type sceAgcDriverAgrSubmitMultiDcbs @function\n"
"sceAgcDriverAgrSubmitMultiDcbs:\n");
asm(".global sceAgcDriverCreateQueue\n"
".type sceAgcDriverCreateQueue @function\n"
"sceAgcDriverCreateQueue:\n");
asm(".global sceAgcDriverCwsrResumeAcq\n"
".type sceAgcDriverCwsrResumeAcq @function\n"
"sceAgcDriverCwsrResumeAcq:\n");
asm(".global sceAgcDriverCwsrSuspendAcq\n"
".type sceAgcDriverCwsrSuspendAcq @function\n"
"sceAgcDriverCwsrSuspendAcq:\n");
asm(".global sceAgcDriverDbgReadRegister\n"
".type sceAgcDriverDbgReadRegister @function\n"
"sceAgcDriverDbgReadRegister:\n");
asm(".global sceAgcDriverDbgWriteRegister\n"
".type sceAgcDriverDbgWriteRegister @function\n"
"sceAgcDriverDbgWriteRegister:\n");
asm(".global sceAgcDriverDebugHardwareStatus\n"
".type sceAgcDriverDebugHardwareStatus @function\n"
"sceAgcDriverDebugHardwareStatus:\n");
asm(".global sceAgcDriverDeleteEqEvent\n"
".type sceAgcDriverDeleteEqEvent @function\n"
"sceAgcDriverDeleteEqEvent:\n");
asm(".global sceAgcDriverDeregisterCaptureInterface\n"
".type sceAgcDriverDeregisterCaptureInterface @function\n"
"sceAgcDriverDeregisterCaptureInterface:\n");
asm(".global sceAgcDriverDestroyQueue\n"
".type sceAgcDriverDestroyQueue @function\n"
"sceAgcDriverDestroyQueue:\n");
asm(".global sceAgcDriverFindResourcesPublic\n"
".type sceAgcDriverFindResourcesPublic @function\n"
"sceAgcDriverFindResourcesPublic:\n");
asm(".global sceAgcDriverGetCoredumpAddress\n"
".type sceAgcDriverGetCoredumpAddress @function\n"
"sceAgcDriverGetCoredumpAddress:\n");
asm(".global sceAgcDriverGetCoredumpMode\n"
".type sceAgcDriverGetCoredumpMode @function\n"
"sceAgcDriverGetCoredumpMode:\n");
asm(".global sceAgcDriverGetDefaultOwner\n"
".type sceAgcDriverGetDefaultOwner @function\n"
"sceAgcDriverGetDefaultOwner:\n");
asm(".global sceAgcDriverGetEqContextId\n"
".type sceAgcDriverGetEqContextId @function\n"
"sceAgcDriverGetEqContextId:\n");
asm(".global sceAgcDriverGetEqEventType\n"
".type sceAgcDriverGetEqEventType @function\n"
"sceAgcDriverGetEqEventType:\n");
asm(".global sceAgcDriverGetExceptionStatus\n"
".type sceAgcDriverGetExceptionStatus @function\n"
"sceAgcDriverGetExceptionStatus:\n");
asm(".global sceAgcDriverGetGpuRefClks\n"
".type sceAgcDriverGetGpuRefClks @function\n"
"sceAgcDriverGetGpuRefClks:\n");
asm(".global sceAgcDriverGetHsOffchipParam\n"
".type sceAgcDriverGetHsOffchipParam @function\n"
"sceAgcDriverGetHsOffchipParam:\n");
asm(".global sceAgcDriverGetOwnerName\n"
".type sceAgcDriverGetOwnerName @function\n"
"sceAgcDriverGetOwnerName:\n");
asm(".global sceAgcDriverGetPaDebugInterfaceVersion\n"
".type sceAgcDriverGetPaDebugInterfaceVersion @function\n"
"sceAgcDriverGetPaDebugInterfaceVersion:\n");
asm(".global sceAgcDriverGetRegShadowInfo\n"
".type sceAgcDriverGetRegShadowInfo @function\n"
"sceAgcDriverGetRegShadowInfo:\n");
asm(".global sceAgcDriverGetRegShadowInfoAgr\n"
".type sceAgcDriverGetRegShadowInfoAgr @function\n"
"sceAgcDriverGetRegShadowInfoAgr:\n");
asm(".global sceAgcDriverGetReservedDmemForAgc\n"
".type sceAgcDriverGetReservedDmemForAgc @function\n"
"sceAgcDriverGetReservedDmemForAgc:\n");
asm(".global sceAgcDriverGetResourceBaseAddressAndSizeInBytes\n"
".type sceAgcDriverGetResourceBaseAddressAndSizeInBytes @function\n"
"sceAgcDriverGetResourceBaseAddressAndSizeInBytes:\n");
asm(".global sceAgcDriverGetResourceName\n"
".type sceAgcDriverGetResourceName @function\n"
"sceAgcDriverGetResourceName:\n");
asm(".global sceAgcDriverGetResourceRegistrationMaxNameLength\n"
".type sceAgcDriverGetResourceRegistrationMaxNameLength @function\n"
"sceAgcDriverGetResourceRegistrationMaxNameLength:\n");
asm(".global sceAgcDriverGetResourceShaderGuid\n"
".type sceAgcDriverGetResourceShaderGuid @function\n"
"sceAgcDriverGetResourceShaderGuid:\n");
asm(".global sceAgcDriverGetResourceType\n"
".type sceAgcDriverGetResourceType @function\n"
"sceAgcDriverGetResourceType:\n");
asm(".global sceAgcDriverGetResourceUserData\n"
".type sceAgcDriverGetResourceUserData @function\n"
"sceAgcDriverGetResourceUserData:\n");
asm(".global sceAgcDriverGetSetFlipPacketSizeInDwords\n"
".type sceAgcDriverGetSetFlipPacketSizeInDwords @function\n"
"sceAgcDriverGetSetFlipPacketSizeInDwords:\n");
asm(".global sceAgcDriverGetSetWorkloadCompletePacketSize\n"
".type sceAgcDriverGetSetWorkloadCompletePacketSize @function\n"
"sceAgcDriverGetSetWorkloadCompletePacketSize:\n");
asm(".global sceAgcDriverGetSetWorkloadStreamInactivePacketSize\n"
".type sceAgcDriverGetSetWorkloadStreamInactivePacketSize @function\n"
"sceAgcDriverGetSetWorkloadStreamInactivePacketSize:\n");
asm(".global sceAgcDriverGetSetWorkloadsActivePacketSize\n"
".type sceAgcDriverGetSetWorkloadsActivePacketSize @function\n"
"sceAgcDriverGetSetWorkloadsActivePacketSize:\n");
asm(".global sceAgcDriverGetShaderDebuggingStatus\n"
".type sceAgcDriverGetShaderDebuggingStatus @function\n"
"sceAgcDriverGetShaderDebuggingStatus:\n");
asm(".global sceAgcDriverGetTFRing\n"
".type sceAgcDriverGetTFRing @function\n"
"sceAgcDriverGetTFRing:\n");
asm(".global sceAgcDriverGetTraceInitiator\n"
".type sceAgcDriverGetTraceInitiator @function\n"
"sceAgcDriverGetTraceInitiator:\n");
asm(".global sceAgcDriverGetWaitRenderingPacketSizeInDwords\n"
".type sceAgcDriverGetWaitRenderingPacketSizeInDwords @function\n"
"sceAgcDriverGetWaitRenderingPacketSizeInDwords:\n");
asm(".global sceAgcDriverGetWorkloadStreamInfo\n"
".type sceAgcDriverGetWorkloadStreamInfo @function\n"
"sceAgcDriverGetWorkloadStreamInfo:\n");
asm(".global sceAgcDriverHp3dLockEnd\n"
".type sceAgcDriverHp3dLockEnd @function\n"
"sceAgcDriverHp3dLockEnd:\n");
asm(".global sceAgcDriverHp3dLockStart\n"
".type sceAgcDriverHp3dLockStart @function\n"
"sceAgcDriverHp3dLockStart:\n");
asm(".global sceAgcDriverIDHSSubmit\n"
".type sceAgcDriverIDHSSubmit @function\n"
"sceAgcDriverIDHSSubmit:\n");
asm(".global sceAgcDriverInitResourceRegistration\n"
".type sceAgcDriverInitResourceRegistration @function\n"
"sceAgcDriverInitResourceRegistration:\n");
asm(".global sceAgcDriverInitResourceRegistrationInterface\n"
".type sceAgcDriverInitResourceRegistrationInterface @function\n"
"sceAgcDriverInitResourceRegistrationInterface:\n");
asm(".global sceAgcDriverIsCaptureInProgress\n"
".type sceAgcDriverIsCaptureInProgress @function\n"
"sceAgcDriverIsCaptureInProgress:\n");
asm(".global sceAgcDriverIsCoredumpValid\n"
".type sceAgcDriverIsCoredumpValid @function\n"
"sceAgcDriverIsCoredumpValid:\n");
asm(".global sceAgcDriverIsPaDebug\n"
".type sceAgcDriverIsPaDebug @function\n"
"sceAgcDriverIsPaDebug:\n");
asm(".global sceAgcDriverIsSubmitValidationEnabled\n"
".type sceAgcDriverIsSubmitValidationEnabled @function\n"
"sceAgcDriverIsSubmitValidationEnabled:\n");
asm(".global sceAgcDriverIsSuspendPointInFlight\n"
".type sceAgcDriverIsSuspendPointInFlight @function\n"
"sceAgcDriverIsSuspendPointInFlight:\n");
asm(".global sceAgcDriverIsSuspendPointInFlightDirect\n"
".type sceAgcDriverIsSuspendPointInFlightDirect @function\n"
"sceAgcDriverIsSuspendPointInFlightDirect:\n");
asm(".global sceAgcDriverIsTraceInProgress\n"
".type sceAgcDriverIsTraceInProgress @function\n"
"sceAgcDriverIsTraceInProgress:\n");
asm(".global sceAgcDriverModuleRegistration\n"
".type sceAgcDriverModuleRegistration @function\n"
"sceAgcDriverModuleRegistration:\n");
asm(".global sceAgcDriverNotifyDefaultStates\n"
".type sceAgcDriverNotifyDefaultStates @function\n"
"sceAgcDriverNotifyDefaultStates:\n");
asm(".global sceAgcDriverPassInfoDownward\n"
".type sceAgcDriverPassInfoDownward @function\n"
"sceAgcDriverPassInfoDownward:\n");
asm(".global sceAgcDriverPatchClearState\n"
".type sceAgcDriverPatchClearState @function\n"
"sceAgcDriverPatchClearState:\n");
asm(".global sceAgcDriverQueryResourceRegistrationUserMemoryRequirements\n"
".type sceAgcDriverQueryResourceRegistrationUserMemoryRequirements @function\n"
"sceAgcDriverQueryResourceRegistrationUserMemoryRequirements:\n");
asm(".global sceAgcDriverRegisterCaptureInterface\n"
".type sceAgcDriverRegisterCaptureInterface @function\n"
"sceAgcDriverRegisterCaptureInterface:\n");
asm(".global sceAgcDriverRegisterDefaultOwner\n"
".type sceAgcDriverRegisterDefaultOwner @function\n"
"sceAgcDriverRegisterDefaultOwner:\n");
asm(".global sceAgcDriverRegisterGdsResource\n"
".type sceAgcDriverRegisterGdsResource @function\n"
"sceAgcDriverRegisterGdsResource:\n");
asm(".global sceAgcDriverRegisterOwner\n"
".type sceAgcDriverRegisterOwner @function\n"
"sceAgcDriverRegisterOwner:\n");
asm(".global sceAgcDriverRegisterOwnerForSystem\n"
".type sceAgcDriverRegisterOwnerForSystem @function\n"
"sceAgcDriverRegisterOwnerForSystem:\n");
asm(".global sceAgcDriverRegisterResource\n"
".type sceAgcDriverRegisterResource @function\n"
"sceAgcDriverRegisterResource:\n");
asm(".global sceAgcDriverRegisterWorkloadStream\n"
".type sceAgcDriverRegisterWorkloadStream @function\n"
"sceAgcDriverRegisterWorkloadStream:\n");
asm(".global sceAgcDriverReleaseHDRScopesACQ\n"
".type sceAgcDriverReleaseHDRScopesACQ @function\n"
"sceAgcDriverReleaseHDRScopesACQ:\n");
asm(".global sceAgcDriverReleaseRazorACQ\n"
".type sceAgcDriverReleaseRazorACQ @function\n"
"sceAgcDriverReleaseRazorACQ:\n");
asm(".global sceAgcDriverRequestCaptureStart\n"
".type sceAgcDriverRequestCaptureStart @function\n"
"sceAgcDriverRequestCaptureStart:\n");
asm(".global sceAgcDriverRequestCaptureStop\n"
".type sceAgcDriverRequestCaptureStop @function\n"
"sceAgcDriverRequestCaptureStop:\n");
asm(".global sceAgcDriverResetGc\n"
".type sceAgcDriverResetGc @function\n"
"sceAgcDriverResetGc:\n");
asm(".global sceAgcDriverSdmaCopyLinearBlocking\n"
".type sceAgcDriverSdmaCopyLinearBlocking @function\n"
"sceAgcDriverSdmaCopyLinearBlocking:\n");
asm(".global sceAgcDriverSetFlip\n"
".type sceAgcDriverSetFlip @function\n"
"sceAgcDriverSetFlip:\n");
asm(".global sceAgcDriverSetHsOffchipParam\n"
".type sceAgcDriverSetHsOffchipParam @function\n"
"sceAgcDriverSetHsOffchipParam:\n");
asm(".global sceAgcDriverSetHsOffchipParamDirect\n"
".type sceAgcDriverSetHsOffchipParamDirect @function\n"
"sceAgcDriverSetHsOffchipParamDirect:\n");
asm(".global sceAgcDriverSetResourceRegistrationInfo\n"
".type sceAgcDriverSetResourceRegistrationInfo @function\n"
"sceAgcDriverSetResourceRegistrationInfo:\n");
asm(".global sceAgcDriverSetResourceUserData\n"
".type sceAgcDriverSetResourceUserData @function\n"
"sceAgcDriverSetResourceUserData:\n");
asm(".global sceAgcDriverSetTFRing\n"
".type sceAgcDriverSetTFRing @function\n"
"sceAgcDriverSetTFRing:\n");
asm(".global sceAgcDriverSetTFRingDirect\n"
".type sceAgcDriverSetTFRingDirect @function\n"
"sceAgcDriverSetTFRingDirect:\n");
asm(".global sceAgcDriverSetTargetRingForDiag\n"
".type sceAgcDriverSetTargetRingForDiag @function\n"
"sceAgcDriverSetTargetRingForDiag:\n");
asm(".global sceAgcDriverSetValidationDisabled\n"
".type sceAgcDriverSetValidationDisabled @function\n"
"sceAgcDriverSetValidationDisabled:\n");
asm(".global sceAgcDriverSetWorkloadComplete\n"
".type sceAgcDriverSetWorkloadComplete @function\n"
"sceAgcDriverSetWorkloadComplete:\n");
asm(".global sceAgcDriverSetWorkloadStreamInactive\n"
".type sceAgcDriverSetWorkloadStreamInactive @function\n"
"sceAgcDriverSetWorkloadStreamInactive:\n");
asm(".global sceAgcDriverSetWorkloadsActive\n"
".type sceAgcDriverSetWorkloadsActive @function\n"
"sceAgcDriverSetWorkloadsActive:\n");
asm(".global sceAgcDriverSetupAsyncGraphics\n"
".type sceAgcDriverSetupAsyncGraphics @function\n"
"sceAgcDriverSetupAsyncGraphics:\n");
asm(".global sceAgcDriverSetupRegisterShadow\n"
".type sceAgcDriverSetupRegisterShadow @function\n"
"sceAgcDriverSetupRegisterShadow:\n");
asm(".global sceAgcDriverSubmitAcb\n"
".type sceAgcDriverSubmitAcb @function\n"
"sceAgcDriverSubmitAcb:\n");
asm(".global sceAgcDriverSubmitCommandBuffer\n"
".type sceAgcDriverSubmitCommandBuffer @function\n"
"sceAgcDriverSubmitCommandBuffer:\n");
asm(".global sceAgcDriverSubmitDcb\n"
".type sceAgcDriverSubmitDcb @function\n"
"sceAgcDriverSubmitDcb:\n");
asm(".global sceAgcDriverSubmitMultiAcbs\n"
".type sceAgcDriverSubmitMultiAcbs @function\n"
"sceAgcDriverSubmitMultiAcbs:\n");
asm(".global sceAgcDriverSubmitMultiCommandBuffers\n"
".type sceAgcDriverSubmitMultiCommandBuffers @function\n"
"sceAgcDriverSubmitMultiCommandBuffers:\n");
asm(".global sceAgcDriverSubmitMultiCommandBuffersDirect\n"
".type sceAgcDriverSubmitMultiCommandBuffersDirect @function\n"
"sceAgcDriverSubmitMultiCommandBuffersDirect:\n");
asm(".global sceAgcDriverSubmitMultiDcbs\n"
".type sceAgcDriverSubmitMultiDcbs @function\n"
"sceAgcDriverSubmitMultiDcbs:\n");
asm(".global sceAgcDriverSubmitToHDRScopesACQ\n"
".type sceAgcDriverSubmitToHDRScopesACQ @function\n"
"sceAgcDriverSubmitToHDRScopesACQ:\n");
asm(".global sceAgcDriverSubmitToRazorACQ\n"
".type sceAgcDriverSubmitToRazorACQ @function\n"
"sceAgcDriverSubmitToRazorACQ:\n");
asm(".global sceAgcDriverSuspendPointSubmit\n"
".type sceAgcDriverSuspendPointSubmit @function\n"
"sceAgcDriverSuspendPointSubmit:\n");
asm(".global sceAgcDriverSuspendPointSubmitDirect\n"
".type sceAgcDriverSuspendPointSubmitDirect @function\n"
"sceAgcDriverSuspendPointSubmitDirect:\n");
asm(".global sceAgcDriverSysEnableSubmitDone45Exception\n"
".type sceAgcDriverSysEnableSubmitDone45Exception @function\n"
"sceAgcDriverSysEnableSubmitDone45Exception:\n");
asm(".global sceAgcDriverSysGetClientNumber\n"
".type sceAgcDriverSysGetClientNumber @function\n"
"sceAgcDriverSysGetClientNumber:\n");
asm(".global sceAgcDriverSysIsGameClosed\n"
".type sceAgcDriverSysIsGameClosed @function\n"
"sceAgcDriverSysIsGameClosed:\n");
asm(".global sceAgcDriverSysSubmitFlipHandleProxy\n"
".type sceAgcDriverSysSubmitFlipHandleProxy @function\n"
"sceAgcDriverSysSubmitFlipHandleProxy:\n");
asm(".global sceAgcDriverTmpInitIdhs\n"
".type sceAgcDriverTmpInitIdhs @function\n"
"sceAgcDriverTmpInitIdhs:\n");
asm(".global sceAgcDriverTriggerCapture\n"
".type sceAgcDriverTriggerCapture @function\n"
"sceAgcDriverTriggerCapture:\n");
asm(".global sceAgcDriverUnregisterAllResourcesForOwner\n"
".type sceAgcDriverUnregisterAllResourcesForOwner @function\n"
"sceAgcDriverUnregisterAllResourcesForOwner:\n");
asm(".global sceAgcDriverUnregisterOwnerAndResources\n"
".type sceAgcDriverUnregisterOwnerAndResources @function\n"
"sceAgcDriverUnregisterOwnerAndResources:\n");
asm(".global sceAgcDriverUnregisterResource\n"
".type sceAgcDriverUnregisterResource @function\n"
"sceAgcDriverUnregisterResource:\n");
asm(".global sceAgcDriverUnregisterWorkloadStream\n"
".type sceAgcDriverUnregisterWorkloadStream @function\n"
"sceAgcDriverUnregisterWorkloadStream:\n");
asm(".global sceAgcDriverUserDataGetPacketSize\n"
".type sceAgcDriverUserDataGetPacketSize @function\n"
"sceAgcDriverUserDataGetPacketSize:\n");
asm(".global sceAgcDriverUserDataImmediateWrite\n"
".type sceAgcDriverUserDataImmediateWrite @function\n"
"sceAgcDriverUserDataImmediateWrite:\n");
asm(".global sceAgcDriverUserDataImmediateWritePacket\n"
".type sceAgcDriverUserDataImmediateWritePacket @function\n"
"sceAgcDriverUserDataImmediateWritePacket:\n");
asm(".global sceAgcDriverUserDataWritePacket\n"
".type sceAgcDriverUserDataWritePacket @function\n"
"sceAgcDriverUserDataWritePacket:\n");
asm(".global sceAgcDriverUserDataWritePopMarker\n"
".type sceAgcDriverUserDataWritePopMarker @function\n"
"sceAgcDriverUserDataWritePopMarker:\n");
asm(".global sceAgcDriverUserDataWritePushMarker\n"
".type sceAgcDriverUserDataWritePushMarker @function\n"
"sceAgcDriverUserDataWritePushMarker:\n");
asm(".global sceAgcDriverUserDataWriteSetMarker\n"
".type sceAgcDriverUserDataWriteSetMarker @function\n"
"sceAgcDriverUserDataWriteSetMarker:\n");
asm(".global sceAgcDriverWaitUntilSafeForRendering\n"
".type sceAgcDriverWaitUntilSafeForRendering @function\n"
"sceAgcDriverWaitUntilSafeForRendering:\n");
+980
View File
@@ -0,0 +1,980 @@
asm(".global sceBdSchedCancelBackgroundCopyRequest\n"
".type sceBdSchedCancelBackgroundCopyRequest @function\n"
"sceBdSchedCancelBackgroundCopyRequest:\n");
asm(".global sceBdSchedCancelPrioritizedBackgroundCopyRequest\n"
".type sceBdSchedCancelPrioritizedBackgroundCopyRequest @function\n"
"sceBdSchedCancelPrioritizedBackgroundCopyRequest:\n");
asm(".global sceBdSchedConfigure\n"
".type sceBdSchedConfigure @function\n"
"sceBdSchedConfigure:\n");
asm(".global sceBdSchedConfigure2\n"
".type sceBdSchedConfigure2 @function\n"
"sceBdSchedConfigure2:\n");
asm(".global sceBdSchedDeconfigure\n"
".type sceBdSchedDeconfigure @function\n"
"sceBdSchedDeconfigure:\n");
asm(".global sceBdSchedGetBackgroundCopyRequest\n"
".type sceBdSchedGetBackgroundCopyRequest @function\n"
"sceBdSchedGetBackgroundCopyRequest:\n");
asm(".global sceBdSchedGetExtentMap\n"
".type sceBdSchedGetExtentMap @function\n"
"sceBdSchedGetExtentMap:\n");
asm(".global sceBdSchedGetPrioritizedBackgroundCopyRequest\n"
".type sceBdSchedGetPrioritizedBackgroundCopyRequest @function\n"
"sceBdSchedGetPrioritizedBackgroundCopyRequest:\n");
asm(".global sceBdSchedGetState\n"
".type sceBdSchedGetState @function\n"
"sceBdSchedGetState:\n");
asm(".global sceBdSchedSetBackgroundCopyRequest\n"
".type sceBdSchedSetBackgroundCopyRequest @function\n"
"sceBdSchedSetBackgroundCopyRequest:\n");
asm(".global sceBdSchedSetDiscIdentity\n"
".type sceBdSchedSetDiscIdentity @function\n"
"sceBdSchedSetDiscIdentity:\n");
asm(".global sceBdSchedSetPrioritizedBackgroundCopyRequest\n"
".type sceBdSchedSetPrioritizedBackgroundCopyRequest @function\n"
"sceBdSchedSetPrioritizedBackgroundCopyRequest:\n");
asm(".global sceBdSchedStartGame\n"
".type sceBdSchedStartGame @function\n"
"sceBdSchedStartGame:\n");
asm(".global sceBdSchedStartRipping\n"
".type sceBdSchedStartRipping @function\n"
"sceBdSchedStartRipping:\n");
asm(".global sceBdSchedStopScheduling\n"
".type sceBdSchedStopScheduling @function\n"
"sceBdSchedStopScheduling:\n");
asm(".global sceFsBfsApplyPatch\n"
".type sceFsBfsApplyPatch @function\n"
"sceFsBfsApplyPatch:\n");
asm(".global sceFsBfsCancelPatch\n"
".type sceFsBfsCancelPatch @function\n"
"sceFsBfsCancelPatch:\n");
asm(".global sceFsBfsCheckCleanFlag\n"
".type sceFsBfsCheckCleanFlag @function\n"
"sceFsBfsCheckCleanFlag:\n");
asm(".global sceFsBfsCommitPatch\n"
".type sceFsBfsCommitPatch @function\n"
"sceFsBfsCommitPatch:\n");
asm(".global sceFsBfsContainerBind\n"
".type sceFsBfsContainerBind @function\n"
"sceFsBfsContainerBind:\n");
asm(".global sceFsBfsContainerCreate\n"
".type sceFsBfsContainerCreate @function\n"
"sceFsBfsContainerCreate:\n");
asm(".global sceFsBfsContainerQuery\n"
".type sceFsBfsContainerQuery @function\n"
"sceFsBfsContainerQuery:\n");
asm(".global sceFsBfsContainerUnbind\n"
".type sceFsBfsContainerUnbind @function\n"
"sceFsBfsContainerUnbind:\n");
asm(".global sceFsBfsContainerUpdate\n"
".type sceFsBfsContainerUpdate @function\n"
"sceFsBfsContainerUpdate:\n");
asm(".global sceFsBfsExtendFile\n"
".type sceFsBfsExtendFile @function\n"
"sceFsBfsExtendFile:\n");
asm(".global sceFsBfsFormat\n"
".type sceFsBfsFormat @function\n"
"sceFsBfsFormat:\n");
asm(".global sceFsBfsFsck\n"
".type sceFsBfsFsck @function\n"
"sceFsBfsFsck:\n");
asm(".global sceFsBfsGcGetStatus\n"
".type sceFsBfsGcGetStatus @function\n"
"sceFsBfsGcGetStatus:\n");
asm(".global sceFsBfsGcMove\n"
".type sceFsBfsGcMove @function\n"
"sceFsBfsGcMove:\n");
asm(".global sceFsBfsGetAvailableSize\n"
".type sceFsBfsGetAvailableSize @function\n"
"sceFsBfsGetAvailableSize:\n");
asm(".global sceFsBfsGetBindStatus\n"
".type sceFsBfsGetBindStatus @function\n"
"sceFsBfsGetBindStatus:\n");
asm(".global sceFsBfsGetContainers\n"
".type sceFsBfsGetContainers @function\n"
"sceFsBfsGetContainers:\n");
asm(".global sceFsBfsGetMapping\n"
".type sceFsBfsGetMapping @function\n"
"sceFsBfsGetMapping:\n");
asm(".global sceFsBfsGetSCFStatus\n"
".type sceFsBfsGetSCFStatus @function\n"
"sceFsBfsGetSCFStatus:\n");
asm(".global sceFsBfsGetStatus\n"
".type sceFsBfsGetStatus @function\n"
"sceFsBfsGetStatus:\n");
asm(".global sceFsBfsM2Format\n"
".type sceFsBfsM2Format @function\n"
"sceFsBfsM2Format:\n");
asm(".global sceFsBfsMount\n"
".type sceFsBfsMount @function\n"
"sceFsBfsMount:\n");
asm(".global sceFsBfsTrim\n"
".type sceFsBfsTrim @function\n"
"sceFsBfsTrim:\n");
asm(".global sceFsBfsUnprotect\n"
".type sceFsBfsUnprotect @function\n"
"sceFsBfsUnprotect:\n");
asm(".global sceFsBindApplication\n"
".type sceFsBindApplication @function\n"
"sceFsBindApplication:\n");
asm(".global sceFsBindPackages\n"
".type sceFsBindPackages @function\n"
"sceFsBindPackages:\n");
asm(".global sceFsCheckFormat\n"
".type sceFsCheckFormat @function\n"
"sceFsCheckFormat:\n");
asm(".global sceFsCheckSingleUser\n"
".type sceFsCheckSingleUser @function\n"
"sceFsCheckSingleUser:\n");
asm(".global sceFsCreateExfatPartition\n"
".type sceFsCreateExfatPartition @function\n"
"sceFsCreateExfatPartition:\n");
asm(".global sceFsCreatePfsSaveDataImage\n"
".type sceFsCreatePfsSaveDataImage @function\n"
"sceFsCreatePfsSaveDataImage:\n");
asm(".global sceFsCreatePfsTrophyDataImage\n"
".type sceFsCreatePfsTrophyDataImage @function\n"
"sceFsCreatePfsTrophyDataImage:\n");
asm(".global sceFsCreatePprPfsSaveDataImage\n"
".type sceFsCreatePprPfsSaveDataImage @function\n"
"sceFsCreatePprPfsSaveDataImage:\n");
asm(".global sceFsCreatePprPfsTrophyDataImage\n"
".type sceFsCreatePprPfsTrophyDataImage @function\n"
"sceFsCreatePprPfsTrophyDataImage:\n");
asm(".global sceFsDeviceAlignedPread\n"
".type sceFsDeviceAlignedPread @function\n"
"sceFsDeviceAlignedPread:\n");
asm(".global sceFsDeviceAlignedPwrite\n"
".type sceFsDeviceAlignedPwrite @function\n"
"sceFsDeviceAlignedPwrite:\n");
asm(".global sceFsDevpfsA53IocGetBuildMetadataStatus\n"
".type sceFsDevpfsA53IocGetBuildMetadataStatus @function\n"
"sceFsDevpfsA53IocGetBuildMetadataStatus:\n");
asm(".global sceFsDevpfsAllocateFile\n"
".type sceFsDevpfsAllocateFile @function\n"
"sceFsDevpfsAllocateFile:\n");
asm(".global sceFsDevpfsAllocateSparseFile\n"
".type sceFsDevpfsAllocateSparseFile @function\n"
"sceFsDevpfsAllocateSparseFile:\n");
asm(".global sceFsDevpfsCancelWaitEvent\n"
".type sceFsDevpfsCancelWaitEvent @function\n"
"sceFsDevpfsCancelWaitEvent:\n");
asm(".global sceFsDevpfsCreateForVSH\n"
".type sceFsDevpfsCreateForVSH @function\n"
"sceFsDevpfsCreateForVSH:\n");
asm(".global sceFsDevpfsDeleteForVSH\n"
".type sceFsDevpfsDeleteForVSH @function\n"
"sceFsDevpfsDeleteForVSH:\n");
asm(".global sceFsDevpfsDeregisterEvent\n"
".type sceFsDevpfsDeregisterEvent @function\n"
"sceFsDevpfsDeregisterEvent:\n");
asm(".global sceFsDevpfsEventComplete\n"
".type sceFsDevpfsEventComplete @function\n"
"sceFsDevpfsEventComplete:\n");
asm(".global sceFsDevpfsEventResponseComplete\n"
".type sceFsDevpfsEventResponseComplete @function\n"
"sceFsDevpfsEventResponseComplete:\n");
asm(".global sceFsDevpfsFetchMetaEntry\n"
".type sceFsDevpfsFetchMetaEntry @function\n"
"sceFsDevpfsFetchMetaEntry:\n");
asm(".global sceFsDevpfsFsck\n"
".type sceFsDevpfsFsck @function\n"
"sceFsDevpfsFsck:\n");
asm(".global sceFsDevpfsInitFetchMetaEntryCtx\n"
".type sceFsDevpfsInitFetchMetaEntryCtx @function\n"
"sceFsDevpfsInitFetchMetaEntryCtx:\n");
asm(".global sceFsDevpfsMountForFSMP\n"
".type sceFsDevpfsMountForFSMP @function\n"
"sceFsDevpfsMountForFSMP:\n");
asm(".global sceFsDevpfsMountForVSH\n"
".type sceFsDevpfsMountForVSH @function\n"
"sceFsDevpfsMountForVSH:\n");
asm(".global sceFsDevpfsRegisterEvent\n"
".type sceFsDevpfsRegisterEvent @function\n"
"sceFsDevpfsRegisterEvent:\n");
asm(".global sceFsDevpfsSystemPowerEvent\n"
".type sceFsDevpfsSystemPowerEvent @function\n"
"sceFsDevpfsSystemPowerEvent:\n");
asm(".global sceFsDevpfsTermFetchMetaEntryCtx\n"
".type sceFsDevpfsTermFetchMetaEntryCtx @function\n"
"sceFsDevpfsTermFetchMetaEntryCtx:\n");
asm(".global sceFsDevpfsUmountForFSMP\n"
".type sceFsDevpfsUmountForFSMP @function\n"
"sceFsDevpfsUmountForFSMP:\n");
asm(".global sceFsDevpfsUmountForVSH\n"
".type sceFsDevpfsUmountForVSH @function\n"
"sceFsDevpfsUmountForVSH:\n");
asm(".global sceFsDevpfsWaitEvent\n"
".type sceFsDevpfsWaitEvent @function\n"
"sceFsDevpfsWaitEvent:\n");
asm(".global sceFsDevpfsWriteChunk\n"
".type sceFsDevpfsWriteChunk @function\n"
"sceFsDevpfsWriteChunk:\n");
asm(".global sceFsDrfsDestroyContext\n"
".type sceFsDrfsDestroyContext @function\n"
"sceFsDrfsDestroyContext:\n");
asm(".global sceFsDrfsMount\n"
".type sceFsDrfsMount @function\n"
"sceFsDrfsMount:\n");
asm(".global sceFsDrfsRegisterSocket\n"
".type sceFsDrfsRegisterSocket @function\n"
"sceFsDrfsRegisterSocket:\n");
asm(".global sceFsDrfsResumeSocket\n"
".type sceFsDrfsResumeSocket @function\n"
"sceFsDrfsResumeSocket:\n");
asm(".global sceFsDrfsSuspendSocket\n"
".type sceFsDrfsSuspendSocket @function\n"
"sceFsDrfsSuspendSocket:\n");
asm(".global sceFsDrfsUmount\n"
".type sceFsDrfsUmount @function\n"
"sceFsDrfsUmount:\n");
asm(".global sceFsDrfsUnregisterSocket\n"
".type sceFsDrfsUnregisterSocket @function\n"
"sceFsDrfsUnregisterSocket:\n");
asm(".global sceFsDrfsWaitEvent\n"
".type sceFsDrfsWaitEvent @function\n"
"sceFsDrfsWaitEvent:\n");
asm(".global sceFsErriCtl\n"
".type sceFsErriCtl @function\n"
"sceFsErriCtl:\n");
asm(".global sceFsErriGetState\n"
".type sceFsErriGetState @function\n"
"sceFsErriGetState:\n");
asm(".global sceFsExfatMkfsExternalHdd\n"
".type sceFsExfatMkfsExternalHdd @function\n"
"sceFsExfatMkfsExternalHdd:\n");
asm(".global sceFsExfatfsMkfs\n"
".type sceFsExfatfsMkfs @function\n"
"sceFsExfatfsMkfs:\n");
asm(".global sceFsExtUSBSchedDestroy\n"
".type sceFsExtUSBSchedDestroy @function\n"
"sceFsExtUSBSchedDestroy:\n");
asm(".global sceFsExtUSBSchedInsert\n"
".type sceFsExtUSBSchedInsert @function\n"
"sceFsExtUSBSchedInsert:\n");
asm(".global sceFsExtUSBSchedInsertForHDD\n"
".type sceFsExtUSBSchedInsertForHDD @function\n"
"sceFsExtUSBSchedInsertForHDD:\n");
asm(".global sceFsExternalStorageDeconfigure\n"
".type sceFsExternalStorageDeconfigure @function\n"
"sceFsExternalStorageDeconfigure:\n");
asm(".global sceFsExternalStorageGetRawDevice\n"
".type sceFsExternalStorageGetRawDevice @function\n"
"sceFsExternalStorageGetRawDevice:\n");
asm(".global sceFsExternalStorageInitialize\n"
".type sceFsExternalStorageInitialize @function\n"
"sceFsExternalStorageInitialize:\n");
asm(".global sceFsExternalStorageVerifyMetadata\n"
".type sceFsExternalStorageVerifyMetadata @function\n"
"sceFsExternalStorageVerifyMetadata:\n");
asm(".global sceFsFetchWorkspaceFileMetadata\n"
".type sceFsFetchWorkspaceFileMetadata @function\n"
"sceFsFetchWorkspaceFileMetadata:\n");
asm(".global sceFsGetAttribute\n"
".type sceFsGetAttribute @function\n"
"sceFsGetAttribute:\n");
asm(".global sceFsGetClusterStatistics\n"
".type sceFsGetClusterStatistics @function\n"
"sceFsGetClusterStatistics:\n");
asm(".global sceFsGetDeviceSectorsize\n"
".type sceFsGetDeviceSectorsize @function\n"
"sceFsGetDeviceSectorsize:\n");
asm(".global sceFsGetFsMetadata\n"
".type sceFsGetFsMetadata @function\n"
"sceFsGetFsMetadata:\n");
asm(".global sceFsGetFsMetadataWithProgress\n"
".type sceFsGetFsMetadataWithProgress @function\n"
"sceFsGetFsMetadataWithProgress:\n");
asm(".global sceFsGetSmrInfo\n"
".type sceFsGetSmrInfo @function\n"
"sceFsGetSmrInfo:\n");
asm(".global sceFsGschedCtl\n"
".type sceFsGschedCtl @function\n"
"sceFsGschedCtl:\n");
asm(".global sceFsISSchedConfigCurrentThread\n"
".type sceFsISSchedConfigCurrentThread @function\n"
"sceFsISSchedConfigCurrentThread:\n");
asm(".global sceFsISSchedConfigDescriptor\n"
".type sceFsISSchedConfigDescriptor @function\n"
"sceFsISSchedConfigDescriptor:\n");
asm(".global sceFsISSchedConfigThread\n"
".type sceFsISSchedConfigThread @function\n"
"sceFsISSchedConfigThread:\n");
asm(".global sceFsISSchedMapStat\n"
".type sceFsISSchedMapStat @function\n"
"sceFsISSchedMapStat:\n");
asm(".global sceFsISSchedResultToPriority\n"
".type sceFsISSchedResultToPriority @function\n"
"sceFsISSchedResultToPriority:\n");
asm(".global sceFsISSchedResultToSlot\n"
".type sceFsISSchedResultToSlot @function\n"
"sceFsISSchedResultToSlot:\n");
asm(".global sceFsISSchedStatCurrentThread\n"
".type sceFsISSchedStatCurrentThread @function\n"
"sceFsISSchedStatCurrentThread:\n");
asm(".global sceFsISSchedStatDescriptor\n"
".type sceFsISSchedStatDescriptor @function\n"
"sceFsISSchedStatDescriptor:\n");
asm(".global sceFsISSchedStatThread\n"
".type sceFsISSchedStatThread @function\n"
"sceFsISSchedStatThread:\n");
asm(".global sceFsISSchedUnmapStat\n"
".type sceFsISSchedUnmapStat @function\n"
"sceFsISSchedUnmapStat:\n");
asm(".global sceFsInitCreatePfsSaveDataOpt\n"
".type sceFsInitCreatePfsSaveDataOpt @function\n"
"sceFsInitCreatePfsSaveDataOpt:\n");
asm(".global sceFsInitCreatePfsTrophyDataOpt\n"
".type sceFsInitCreatePfsTrophyDataOpt @function\n"
"sceFsInitCreatePfsTrophyDataOpt:\n");
asm(".global sceFsInitCreatePprPfsSaveDataOpt\n"
".type sceFsInitCreatePprPfsSaveDataOpt @function\n"
"sceFsInitCreatePprPfsSaveDataOpt:\n");
asm(".global sceFsInitMountDownloadDataOpt\n"
".type sceFsInitMountDownloadDataOpt @function\n"
"sceFsInitMountDownloadDataOpt:\n");
asm(".global sceFsInitMountGamePkgOpt\n"
".type sceFsInitMountGamePkgOpt @function\n"
"sceFsInitMountGamePkgOpt:\n");
asm(".global sceFsInitMountLwfsCompatOpt\n"
".type sceFsInitMountLwfsCompatOpt @function\n"
"sceFsInitMountLwfsCompatOpt:\n");
asm(".global sceFsInitMountLwfsOpt\n"
".type sceFsInitMountLwfsOpt @function\n"
"sceFsInitMountLwfsOpt:\n");
asm(".global sceFsInitMountPprPkgOpt\n"
".type sceFsInitMountPprPkgOpt @function\n"
"sceFsInitMountPprPkgOpt:\n");
asm(".global sceFsInitMountSaveDataOpt\n"
".type sceFsInitMountSaveDataOpt @function\n"
"sceFsInitMountSaveDataOpt:\n");
asm(".global sceFsInitMountTrophyDataOpt\n"
".type sceFsInitMountTrophyDataOpt @function\n"
"sceFsInitMountTrophyDataOpt:\n");
asm(".global sceFsInitUmountDownloadDataOpt\n"
".type sceFsInitUmountDownloadDataOpt @function\n"
"sceFsInitUmountDownloadDataOpt:\n");
asm(".global sceFsInitUmountGamePkgOpt\n"
".type sceFsInitUmountGamePkgOpt @function\n"
"sceFsInitUmountGamePkgOpt:\n");
asm(".global sceFsInitUmountLwfsCompatOpt\n"
".type sceFsInitUmountLwfsCompatOpt @function\n"
"sceFsInitUmountLwfsCompatOpt:\n");
asm(".global sceFsInitUmountLwfsOpt\n"
".type sceFsInitUmountLwfsOpt @function\n"
"sceFsInitUmountLwfsOpt:\n");
asm(".global sceFsInitUmountPprPkgOpt\n"
".type sceFsInitUmountPprPkgOpt @function\n"
"sceFsInitUmountPprPkgOpt:\n");
asm(".global sceFsInitUmountSaveDataOpt\n"
".type sceFsInitUmountSaveDataOpt @function\n"
"sceFsInitUmountSaveDataOpt:\n");
asm(".global sceFsInitUmountTrophyDataOpt\n"
".type sceFsInitUmountTrophyDataOpt @function\n"
"sceFsInitUmountTrophyDataOpt:\n");
asm(".global sceFsInitWorkspaceFileMetadataParam\n"
".type sceFsInitWorkspaceFileMetadataParam @function\n"
"sceFsInitWorkspaceFileMetadataParam:\n");
asm(".global sceFsIsActiveBankSystemEx\n"
".type sceFsIsActiveBankSystemEx @function\n"
"sceFsIsActiveBankSystemEx:\n");
asm(".global sceFsLvdAttach\n"
".type sceFsLvdAttach @function\n"
"sceFsLvdAttach:\n");
asm(".global sceFsLvdAttach2\n"
".type sceFsLvdAttach2 @function\n"
"sceFsLvdAttach2:\n");
asm(".global sceFsLvdAttachPartiallyCryptedDownloadData\n"
".type sceFsLvdAttachPartiallyCryptedDownloadData @function\n"
"sceFsLvdAttachPartiallyCryptedDownloadData:\n");
asm(".global sceFsLvdAttachSingleDefaultImage\n"
".type sceFsLvdAttachSingleDefaultImage @function\n"
"sceFsLvdAttachSingleDefaultImage:\n");
asm(".global sceFsLvdAttachSingleImage\n"
".type sceFsLvdAttachSingleImage @function\n"
"sceFsLvdAttachSingleImage:\n");
asm(".global sceFsLvdDetach\n"
".type sceFsLvdDetach @function\n"
"sceFsLvdDetach:\n");
asm(".global sceFsLvdDisableLayer\n"
".type sceFsLvdDisableLayer @function\n"
"sceFsLvdDisableLayer:\n");
asm(".global sceFsLvdEnableLayer\n"
".type sceFsLvdEnableLayer @function\n"
"sceFsLvdEnableLayer:\n");
asm(".global sceFsLvdSetDiscIdentity\n"
".type sceFsLvdSetDiscIdentity @function\n"
"sceFsLvdSetDiscIdentity:\n");
asm(".global sceFsLvdWaitResumed\n"
".type sceFsLvdWaitResumed @function\n"
"sceFsLvdWaitResumed:\n");
asm(".global sceFsM2StorageCheckCleanFlag\n"
".type sceFsM2StorageCheckCleanFlag @function\n"
"sceFsM2StorageCheckCleanFlag:\n");
asm(".global sceFsM2StorageDeconfigure\n"
".type sceFsM2StorageDeconfigure @function\n"
"sceFsM2StorageDeconfigure:\n");
asm(".global sceFsM2StorageFsckWithMM\n"
".type sceFsM2StorageFsckWithMM @function\n"
"sceFsM2StorageFsckWithMM:\n");
asm(".global sceFsM2StorageGetM2UniqueId\n"
".type sceFsM2StorageGetM2UniqueId @function\n"
"sceFsM2StorageGetM2UniqueId:\n");
asm(".global sceFsM2StorageInitialize\n"
".type sceFsM2StorageInitialize @function\n"
"sceFsM2StorageInitialize:\n");
asm(".global sceFsM2StorageMount\n"
".type sceFsM2StorageMount @function\n"
"sceFsM2StorageMount:\n");
asm(".global sceFsM2StorageUnmount\n"
".type sceFsM2StorageUnmount @function\n"
"sceFsM2StorageUnmount:\n");
asm(".global sceFsM2StorageVerifyMetadata\n"
".type sceFsM2StorageVerifyMetadata @function\n"
"sceFsM2StorageVerifyMetadata:\n");
asm(".global sceFsMlfsMount\n"
".type sceFsMlfsMount @function\n"
"sceFsMlfsMount:\n");
asm(".global sceFsMlfsMountWithFlags\n"
".type sceFsMlfsMountWithFlags @function\n"
"sceFsMlfsMountWithFlags:\n");
asm(".global sceFsMlfsUmount\n"
".type sceFsMlfsUmount @function\n"
"sceFsMlfsUmount:\n");
asm(".global sceFsMountDownloadData\n"
".type sceFsMountDownloadData @function\n"
"sceFsMountDownloadData:\n");
asm(".global sceFsMountGamePkg\n"
".type sceFsMountGamePkg @function\n"
"sceFsMountGamePkg:\n");
asm(".global sceFsMountLwfs\n"
".type sceFsMountLwfs @function\n"
"sceFsMountLwfs:\n");
asm(".global sceFsMountLwfsCompat\n"
".type sceFsMountLwfsCompat @function\n"
"sceFsMountLwfsCompat:\n");
asm(".global sceFsMountPartiallyCryptedDownloadData\n"
".type sceFsMountPartiallyCryptedDownloadData @function\n"
"sceFsMountPartiallyCryptedDownloadData:\n");
asm(".global sceFsMountPprPkg\n"
".type sceFsMountPprPkg @function\n"
"sceFsMountPprPkg:\n");
asm(".global sceFsMountSaveData\n"
".type sceFsMountSaveData @function\n"
"sceFsMountSaveData:\n");
asm(".global sceFsMountTrophyData\n"
".type sceFsMountTrophyData @function\n"
"sceFsMountTrophyData:\n");
asm(".global sceFsNewfsDefault\n"
".type sceFsNewfsDefault @function\n"
"sceFsNewfsDefault:\n");
asm(".global sceFsNsfsAddOverlayToNamespace\n"
".type sceFsNsfsAddOverlayToNamespace @function\n"
"sceFsNsfsAddOverlayToNamespace:\n");
asm(".global sceFsNsfsMount\n"
".type sceFsNsfsMount @function\n"
"sceFsNsfsMount:\n");
asm(".global sceFsNsfsMountWithFlags\n"
".type sceFsNsfsMountWithFlags @function\n"
"sceFsNsfsMountWithFlags:\n");
asm(".global sceFsNsfsSetGlobalExclude\n"
".type sceFsNsfsSetGlobalExclude @function\n"
"sceFsNsfsSetGlobalExclude:\n");
asm(".global sceFsNsfsUmount\n"
".type sceFsNsfsUmount @function\n"
"sceFsNsfsUmount:\n");
asm(".global sceFsPartitionSwitchBank\n"
".type sceFsPartitionSwitchBank @function\n"
"sceFsPartitionSwitchBank:\n");
asm(".global sceFsPartitionTrim\n"
".type sceFsPartitionTrim @function\n"
"sceFsPartitionTrim:\n");
asm(".global sceFsPlaygoDisable\n"
".type sceFsPlaygoDisable @function\n"
"sceFsPlaygoDisable:\n");
asm(".global sceFsPlaygoEnable\n"
".type sceFsPlaygoEnable @function\n"
"sceFsPlaygoEnable:\n");
asm(".global sceFsPlaygoInitializeParams\n"
".type sceFsPlaygoInitializeParams @function\n"
"sceFsPlaygoInitializeParams:\n");
asm(".global sceFsPlaygoSetParams\n"
".type sceFsPlaygoSetParams @function\n"
"sceFsPlaygoSetParams:\n");
asm(".global sceFsReserveCluster\n"
".type sceFsReserveCluster @function\n"
"sceFsReserveCluster:\n");
asm(".global sceFsSetAttribute\n"
".type sceFsSetAttribute @function\n"
"sceFsSetAttribute:\n");
asm(".global sceFsSetClusterCacheSize\n"
".type sceFsSetClusterCacheSize @function\n"
"sceFsSetClusterCacheSize:\n");
asm(".global sceFsSetFileReservedTotal\n"
".type sceFsSetFileReservedTotal @function\n"
"sceFsSetFileReservedTotal:\n");
asm(".global sceFsSetSystemReserveSize\n"
".type sceFsSetSystemReserveSize @function\n"
"sceFsSetSystemReserveSize:\n");
asm(".global sceFsSetWorkspaceFileHash\n"
".type sceFsSetWorkspaceFileHash @function\n"
"sceFsSetWorkspaceFileHash:\n");
asm(".global sceFsStatWorkspace\n"
".type sceFsStatWorkspace @function\n"
"sceFsStatWorkspace:\n");
asm(".global sceFsSysStorageGetStatus\n"
".type sceFsSysStorageGetStatus @function\n"
"sceFsSysStorageGetStatus:\n");
asm(".global sceFsTransactionCancel\n"
".type sceFsTransactionCancel @function\n"
"sceFsTransactionCancel:\n");
asm(".global sceFsTransactionPprNoCowSaveDataMount\n"
".type sceFsTransactionPprNoCowSaveDataMount @function\n"
"sceFsTransactionPprNoCowSaveDataMount:\n");
asm(".global sceFsTransactionPprSaveDataMount\n"
".type sceFsTransactionPprSaveDataMount @function\n"
"sceFsTransactionPprSaveDataMount:\n");
asm(".global sceFsTransactionSaveDataInitMountOpt\n"
".type sceFsTransactionSaveDataInitMountOpt @function\n"
"sceFsTransactionSaveDataInitMountOpt:\n");
asm(".global sceFsTransactionSaveDataMount\n"
".type sceFsTransactionSaveDataMount @function\n"
"sceFsTransactionSaveDataMount:\n");
asm(".global sceFsTransactionSaveDataReadParam\n"
".type sceFsTransactionSaveDataReadParam @function\n"
"sceFsTransactionSaveDataReadParam:\n");
asm(".global sceFsTransactionSaveDataUmount\n"
".type sceFsTransactionSaveDataUmount @function\n"
"sceFsTransactionSaveDataUmount:\n");
asm(".global sceFsTransactionSaveDataWriteParam\n"
".type sceFsTransactionSaveDataWriteParam @function\n"
"sceFsTransactionSaveDataWriteParam:\n");
asm(".global sceFsTransactionStart\n"
".type sceFsTransactionStart @function\n"
"sceFsTransactionStart:\n");
asm(".global sceFsTrophyImageError\n"
".type sceFsTrophyImageError @function\n"
"sceFsTrophyImageError:\n");
asm(".global sceFsUfsAllocateAdditionalContents\n"
".type sceFsUfsAllocateAdditionalContents @function\n"
"sceFsUfsAllocateAdditionalContents:\n");
asm(".global sceFsUfsAllocateAligned\n"
".type sceFsUfsAllocateAligned @function\n"
"sceFsUfsAllocateAligned:\n");
asm(".global sceFsUfsAllocateDownloadData\n"
".type sceFsUfsAllocateDownloadData @function\n"
"sceFsUfsAllocateDownloadData:\n");
asm(".global sceFsUfsAllocateGameImage\n"
".type sceFsUfsAllocateGameImage @function\n"
"sceFsUfsAllocateGameImage:\n");
asm(".global sceFsUfsAllocatePatchImage\n"
".type sceFsUfsAllocatePatchImage @function\n"
"sceFsUfsAllocatePatchImage:\n");
asm(".global sceFsUfsAllocateSaveData\n"
".type sceFsUfsAllocateSaveData @function\n"
"sceFsUfsAllocateSaveData:\n");
asm(".global sceFsUfsAllocateTrophyData\n"
".type sceFsUfsAllocateTrophyData @function\n"
"sceFsUfsAllocateTrophyData:\n");
asm(".global sceFsUfsCheckCleanFlag\n"
".type sceFsUfsCheckCleanFlag @function\n"
"sceFsUfsCheckCleanFlag:\n");
asm(".global sceFsUfsCheckFixedCylinderGroupSize\n"
".type sceFsUfsCheckFixedCylinderGroupSize @function\n"
"sceFsUfsCheckFixedCylinderGroupSize:\n");
asm(".global sceFsUfsCoerceCryptMode\n"
".type sceFsUfsCoerceCryptMode @function\n"
"sceFsUfsCoerceCryptMode:\n");
asm(".global sceFsUfsCollectTelemetry\n"
".type sceFsUfsCollectTelemetry @function\n"
"sceFsUfsCollectTelemetry:\n");
asm(".global sceFsUfsCollectTelemetry2\n"
".type sceFsUfsCollectTelemetry2 @function\n"
"sceFsUfsCollectTelemetry2:\n");
asm(".global sceFsUfsDirectWrite\n"
".type sceFsUfsDirectWrite @function\n"
"sceFsUfsDirectWrite:\n");
asm(".global sceFsUfsEstimateZoneCapacityForUser\n"
".type sceFsUfsEstimateZoneCapacityForUser @function\n"
"sceFsUfsEstimateZoneCapacityForUser:\n");
asm(".global sceFsUfsExtendFile\n"
".type sceFsUfsExtendFile @function\n"
"sceFsUfsExtendFile:\n");
asm(".global sceFsUfsFsck\n"
".type sceFsUfsFsck @function\n"
"sceFsUfsFsck:\n");
asm(".global sceFsUfsFsckWithMM\n"
".type sceFsUfsFsckWithMM @function\n"
"sceFsUfsFsckWithMM:\n");
asm(".global sceFsUfsGetExtentMap\n"
".type sceFsUfsGetExtentMap @function\n"
"sceFsUfsGetExtentMap:\n");
asm(".global sceFsUfsGrowLwfs\n"
".type sceFsUfsGrowLwfs @function\n"
"sceFsUfsGrowLwfs:\n");
asm(".global sceFsUfsGrowfs\n"
".type sceFsUfsGrowfs @function\n"
"sceFsUfsGrowfs:\n");
asm(".global sceFsUfsHideBlocksFromUser\n"
".type sceFsUfsHideBlocksFromUser @function\n"
"sceFsUfsHideBlocksFromUser:\n");
asm(".global sceFsUfsInitalizeSparseFile\n"
".type sceFsUfsInitalizeSparseFile @function\n"
"sceFsUfsInitalizeSparseFile:\n");
asm(".global sceFsUfsLargewriteFsck\n"
".type sceFsUfsLargewriteFsck @function\n"
"sceFsUfsLargewriteFsck:\n");
asm(".global sceFsUfsLargewriteFsckWithMM\n"
".type sceFsUfsLargewriteFsckWithMM @function\n"
"sceFsUfsLargewriteFsckWithMM:\n");
asm(".global sceFsUfsMkLwfs\n"
".type sceFsUfsMkLwfs @function\n"
"sceFsUfsMkLwfs:\n");
asm(".global sceFsUfsMkfs\n"
".type sceFsUfsMkfs @function\n"
"sceFsUfsMkfs:\n");
asm(".global sceFsUfsMkfsForExternalHDD\n"
".type sceFsUfsMkfsForExternalHDD @function\n"
"sceFsUfsMkfsForExternalHDD:\n");
asm(".global sceFsUfsMkfsForSystem\n"
".type sceFsUfsMkfsForSystem @function\n"
"sceFsUfsMkfsForSystem:\n");
asm(".global sceFsUfsMkfsProsperoApplicationTemporaryData\n"
".type sceFsUfsMkfsProsperoApplicationTemporaryData @function\n"
"sceFsUfsMkfsProsperoApplicationTemporaryData:\n");
asm(".global sceFsUfsMkfsProsperoDownloadData\n"
".type sceFsUfsMkfsProsperoDownloadData @function\n"
"sceFsUfsMkfsProsperoDownloadData:\n");
asm(".global sceFsUfsMkfsWithFixedCylinderGroupSize\n"
".type sceFsUfsMkfsWithFixedCylinderGroupSize @function\n"
"sceFsUfsMkfsWithFixedCylinderGroupSize:\n");
asm(".global sceFsUfsReallocateSparseFile\n"
".type sceFsUfsReallocateSparseFile @function\n"
"sceFsUfsReallocateSparseFile:\n");
asm(".global sceFsUfsRecryptBlocks\n"
".type sceFsUfsRecryptBlocks @function\n"
"sceFsUfsRecryptBlocks:\n");
asm(".global sceFsUfsRecryptGetState\n"
".type sceFsUfsRecryptGetState @function\n"
"sceFsUfsRecryptGetState:\n");
asm(".global sceFsUfsRecryptIsUnfinished\n"
".type sceFsUfsRecryptIsUnfinished @function\n"
"sceFsUfsRecryptIsUnfinished:\n");
asm(".global sceFsUfsRecryptSyncMetadata\n"
".type sceFsUfsRecryptSyncMetadata @function\n"
"sceFsUfsRecryptSyncMetadata:\n");
asm(".global sceFsUfsSeekHoleInFile\n"
".type sceFsUfsSeekHoleInFile @function\n"
"sceFsUfsSeekHoleInFile:\n");
asm(".global sceFsUfsStopOperation\n"
".type sceFsUfsStopOperation @function\n"
"sceFsUfsStopOperation:\n");
asm(".global sceFsUmountDownloadData\n"
".type sceFsUmountDownloadData @function\n"
"sceFsUmountDownloadData:\n");
asm(".global sceFsUmountGamePkg\n"
".type sceFsUmountGamePkg @function\n"
"sceFsUmountGamePkg:\n");
asm(".global sceFsUmountLwfs\n"
".type sceFsUmountLwfs @function\n"
"sceFsUmountLwfs:\n");
asm(".global sceFsUmountLwfsCompat\n"
".type sceFsUmountLwfsCompat @function\n"
"sceFsUmountLwfsCompat:\n");
asm(".global sceFsUmountPprPkg\n"
".type sceFsUmountPprPkg @function\n"
"sceFsUmountPprPkg:\n");
asm(".global sceFsUmountSaveData\n"
".type sceFsUmountSaveData @function\n"
"sceFsUmountSaveData:\n");
asm(".global sceFsUmountTrophyData\n"
".type sceFsUmountTrophyData @function\n"
"sceFsUmountTrophyData:\n");
asm(".global sceFsUmountWorkspace\n"
".type sceFsUmountWorkspace @function\n"
"sceFsUmountWorkspace:\n");
asm(".global sceFsUnbindApplication\n"
".type sceFsUnbindApplication @function\n"
"sceFsUnbindApplication:\n");
asm(".global sceFsUnbindPackages\n"
".type sceFsUnbindPackages @function\n"
"sceFsUnbindPackages:\n");
asm(".global sceFsUpdatePackageMetadataApp0\n"
".type sceFsUpdatePackageMetadataApp0 @function\n"
"sceFsUpdatePackageMetadataApp0:\n");
asm(".global sceFsWorkspaceCoreDump\n"
".type sceFsWorkspaceCoreDump @function\n"
"sceFsWorkspaceCoreDump:\n");
asm(".global sceFsWsCreate\n"
".type sceFsWsCreate @function\n"
"sceFsWsCreate:\n");
asm(".global sceFsWsDelete\n"
".type sceFsWsDelete @function\n"
"sceFsWsDelete:\n");
asm(".global sceFsWsFetchFileMetadata\n"
".type sceFsWsFetchFileMetadata @function\n"
"sceFsWsFetchFileMetadata:\n");
asm(".global sceFsWsFsck\n"
".type sceFsWsFsck @function\n"
"sceFsWsFsck:\n");
asm(".global sceFsWsGetStatus\n"
".type sceFsWsGetStatus @function\n"
"sceFsWsGetStatus:\n");
asm(".global sceFsWsMount\n"
".type sceFsWsMount @function\n"
"sceFsWsMount:\n");
asm(".global sceFsWsUmount\n"
".type sceFsWsUmount @function\n"
"sceFsWsUmount:\n");
asm(".global sceFsWsWriteFile\n"
".type sceFsWsWriteFile @function\n"
"sceFsWsWriteFile:\n");
asm(".global sceFsWsWriteFileExtdata\n"
".type sceFsWsWriteFileExtdata @function\n"
"sceFsWsWriteFileExtdata:\n");
+460
View File
@@ -0,0 +1,460 @@
asm(".global sceHttpAbortRequest\n"
".type sceHttpAbortRequest @function\n"
"sceHttpAbortRequest:\n");
asm(".global sceHttpAbortRequestForce\n"
".type sceHttpAbortRequestForce @function\n"
"sceHttpAbortRequestForce:\n");
asm(".global sceHttpAbortWaitRequest\n"
".type sceHttpAbortWaitRequest @function\n"
"sceHttpAbortWaitRequest:\n");
asm(".global sceHttpAddCookie\n"
".type sceHttpAddCookie @function\n"
"sceHttpAddCookie:\n");
asm(".global sceHttpAddQuery\n"
".type sceHttpAddQuery @function\n"
"sceHttpAddQuery:\n");
asm(".global sceHttpAddRequestHeader\n"
".type sceHttpAddRequestHeader @function\n"
"sceHttpAddRequestHeader:\n");
asm(".global sceHttpAddRequestHeaderRaw\n"
".type sceHttpAddRequestHeaderRaw @function\n"
"sceHttpAddRequestHeaderRaw:\n");
asm(".global sceHttpAuthCacheExport\n"
".type sceHttpAuthCacheExport @function\n"
"sceHttpAuthCacheExport:\n");
asm(".global sceHttpAuthCacheFlush\n"
".type sceHttpAuthCacheFlush @function\n"
"sceHttpAuthCacheFlush:\n");
asm(".global sceHttpAuthCacheImport\n"
".type sceHttpAuthCacheImport @function\n"
"sceHttpAuthCacheImport:\n");
asm(".global sceHttpCacheRedirectedConnectionEnabled\n"
".type sceHttpCacheRedirectedConnectionEnabled @function\n"
"sceHttpCacheRedirectedConnectionEnabled:\n");
asm(".global sceHttpCookieExport\n"
".type sceHttpCookieExport @function\n"
"sceHttpCookieExport:\n");
asm(".global sceHttpCookieFlush\n"
".type sceHttpCookieFlush @function\n"
"sceHttpCookieFlush:\n");
asm(".global sceHttpCookieImport\n"
".type sceHttpCookieImport @function\n"
"sceHttpCookieImport:\n");
asm(".global sceHttpCreateConnection\n"
".type sceHttpCreateConnection @function\n"
"sceHttpCreateConnection:\n");
asm(".global sceHttpCreateConnectionWithURL\n"
".type sceHttpCreateConnectionWithURL @function\n"
"sceHttpCreateConnectionWithURL:\n");
asm(".global sceHttpCreateEpoll\n"
".type sceHttpCreateEpoll @function\n"
"sceHttpCreateEpoll:\n");
asm(".global sceHttpCreateRequest\n"
".type sceHttpCreateRequest @function\n"
"sceHttpCreateRequest:\n");
asm(".global sceHttpCreateRequest2\n"
".type sceHttpCreateRequest2 @function\n"
"sceHttpCreateRequest2:\n");
asm(".global sceHttpCreateRequestWithURL\n"
".type sceHttpCreateRequestWithURL @function\n"
"sceHttpCreateRequestWithURL:\n");
asm(".global sceHttpCreateRequestWithURL2\n"
".type sceHttpCreateRequestWithURL2 @function\n"
"sceHttpCreateRequestWithURL2:\n");
asm(".global sceHttpCreateTemplate\n"
".type sceHttpCreateTemplate @function\n"
"sceHttpCreateTemplate:\n");
asm(".global sceHttpDbgEnableProfile\n"
".type sceHttpDbgEnableProfile @function\n"
"sceHttpDbgEnableProfile:\n");
asm(".global sceHttpDbgGetConnectionStat\n"
".type sceHttpDbgGetConnectionStat @function\n"
"sceHttpDbgGetConnectionStat:\n");
asm(".global sceHttpDbgGetRequestStat\n"
".type sceHttpDbgGetRequestStat @function\n"
"sceHttpDbgGetRequestStat:\n");
asm(".global sceHttpDbgSetPrintf\n"
".type sceHttpDbgSetPrintf @function\n"
"sceHttpDbgSetPrintf:\n");
asm(".global sceHttpDbgShowConnectionStat\n"
".type sceHttpDbgShowConnectionStat @function\n"
"sceHttpDbgShowConnectionStat:\n");
asm(".global sceHttpDbgShowMemoryPoolStat\n"
".type sceHttpDbgShowMemoryPoolStat @function\n"
"sceHttpDbgShowMemoryPoolStat:\n");
asm(".global sceHttpDbgShowRequestStat\n"
".type sceHttpDbgShowRequestStat @function\n"
"sceHttpDbgShowRequestStat:\n");
asm(".global sceHttpDbgShowStat\n"
".type sceHttpDbgShowStat @function\n"
"sceHttpDbgShowStat:\n");
asm(".global sceHttpDeleteConnection\n"
".type sceHttpDeleteConnection @function\n"
"sceHttpDeleteConnection:\n");
asm(".global sceHttpDeleteRequest\n"
".type sceHttpDeleteRequest @function\n"
"sceHttpDeleteRequest:\n");
asm(".global sceHttpDeleteTemplate\n"
".type sceHttpDeleteTemplate @function\n"
"sceHttpDeleteTemplate:\n");
asm(".global sceHttpDestroyEpoll\n"
".type sceHttpDestroyEpoll @function\n"
"sceHttpDestroyEpoll:\n");
asm(".global sceHttpGetAcceptEncodingGZIPEnabled\n"
".type sceHttpGetAcceptEncodingGZIPEnabled @function\n"
"sceHttpGetAcceptEncodingGZIPEnabled:\n");
asm(".global sceHttpGetAllResponseHeaders\n"
".type sceHttpGetAllResponseHeaders @function\n"
"sceHttpGetAllResponseHeaders:\n");
asm(".global sceHttpGetAuthEnabled\n"
".type sceHttpGetAuthEnabled @function\n"
"sceHttpGetAuthEnabled:\n");
asm(".global sceHttpGetAutoRedirect\n"
".type sceHttpGetAutoRedirect @function\n"
"sceHttpGetAutoRedirect:\n");
asm(".global sceHttpGetConnectionStat\n"
".type sceHttpGetConnectionStat @function\n"
"sceHttpGetConnectionStat:\n");
asm(".global sceHttpGetCookie\n"
".type sceHttpGetCookie @function\n"
"sceHttpGetCookie:\n");
asm(".global sceHttpGetCookieEnabled\n"
".type sceHttpGetCookieEnabled @function\n"
"sceHttpGetCookieEnabled:\n");
asm(".global sceHttpGetCookieStats\n"
".type sceHttpGetCookieStats @function\n"
"sceHttpGetCookieStats:\n");
asm(".global sceHttpGetEpoll\n"
".type sceHttpGetEpoll @function\n"
"sceHttpGetEpoll:\n");
asm(".global sceHttpGetEpollId\n"
".type sceHttpGetEpollId @function\n"
"sceHttpGetEpollId:\n");
asm(".global sceHttpGetLastErrno\n"
".type sceHttpGetLastErrno @function\n"
"sceHttpGetLastErrno:\n");
asm(".global sceHttpGetMemoryPoolStats\n"
".type sceHttpGetMemoryPoolStats @function\n"
"sceHttpGetMemoryPoolStats:\n");
asm(".global sceHttpGetNonblock\n"
".type sceHttpGetNonblock @function\n"
"sceHttpGetNonblock:\n");
asm(".global sceHttpGetRegisteredCtxIds\n"
".type sceHttpGetRegisteredCtxIds @function\n"
"sceHttpGetRegisteredCtxIds:\n");
asm(".global sceHttpGetResponseContentLength\n"
".type sceHttpGetResponseContentLength @function\n"
"sceHttpGetResponseContentLength:\n");
asm(".global sceHttpGetStatusCode\n"
".type sceHttpGetStatusCode @function\n"
"sceHttpGetStatusCode:\n");
asm(".global sceHttpInit\n"
".type sceHttpInit @function\n"
"sceHttpInit:\n");
asm(".global sceHttpParseResponseHeader\n"
".type sceHttpParseResponseHeader @function\n"
"sceHttpParseResponseHeader:\n");
asm(".global sceHttpParseStatusLine\n"
".type sceHttpParseStatusLine @function\n"
"sceHttpParseStatusLine:\n");
asm(".global sceHttpReadData\n"
".type sceHttpReadData @function\n"
"sceHttpReadData:\n");
asm(".global sceHttpRedirectCacheFlush\n"
".type sceHttpRedirectCacheFlush @function\n"
"sceHttpRedirectCacheFlush:\n");
asm(".global sceHttpRemoveRequestHeader\n"
".type sceHttpRemoveRequestHeader @function\n"
"sceHttpRemoveRequestHeader:\n");
asm(".global sceHttpRequestGetAllHeaders\n"
".type sceHttpRequestGetAllHeaders @function\n"
"sceHttpRequestGetAllHeaders:\n");
asm(".global sceHttpSendRequest\n"
".type sceHttpSendRequest @function\n"
"sceHttpSendRequest:\n");
asm(".global sceHttpSetAcceptEncodingGZIPEnabled\n"
".type sceHttpSetAcceptEncodingGZIPEnabled @function\n"
"sceHttpSetAcceptEncodingGZIPEnabled:\n");
asm(".global sceHttpSetAuthEnabled\n"
".type sceHttpSetAuthEnabled @function\n"
"sceHttpSetAuthEnabled:\n");
asm(".global sceHttpSetAuthInfoCallback\n"
".type sceHttpSetAuthInfoCallback @function\n"
"sceHttpSetAuthInfoCallback:\n");
asm(".global sceHttpSetAutoRedirect\n"
".type sceHttpSetAutoRedirect @function\n"
"sceHttpSetAutoRedirect:\n");
asm(".global sceHttpSetChunkedTransferEnabled\n"
".type sceHttpSetChunkedTransferEnabled @function\n"
"sceHttpSetChunkedTransferEnabled:\n");
asm(".global sceHttpSetConnectTimeOut\n"
".type sceHttpSetConnectTimeOut @function\n"
"sceHttpSetConnectTimeOut:\n");
asm(".global sceHttpSetCookieEnabled\n"
".type sceHttpSetCookieEnabled @function\n"
"sceHttpSetCookieEnabled:\n");
asm(".global sceHttpSetCookieMaxNum\n"
".type sceHttpSetCookieMaxNum @function\n"
"sceHttpSetCookieMaxNum:\n");
asm(".global sceHttpSetCookieMaxNumPerDomain\n"
".type sceHttpSetCookieMaxNumPerDomain @function\n"
"sceHttpSetCookieMaxNumPerDomain:\n");
asm(".global sceHttpSetCookieMaxSize\n"
".type sceHttpSetCookieMaxSize @function\n"
"sceHttpSetCookieMaxSize:\n");
asm(".global sceHttpSetCookieRecvCallback\n"
".type sceHttpSetCookieRecvCallback @function\n"
"sceHttpSetCookieRecvCallback:\n");
asm(".global sceHttpSetCookieSendCallback\n"
".type sceHttpSetCookieSendCallback @function\n"
"sceHttpSetCookieSendCallback:\n");
asm(".global sceHttpSetCookieTotalMaxSize\n"
".type sceHttpSetCookieTotalMaxSize @function\n"
"sceHttpSetCookieTotalMaxSize:\n");
asm(".global sceHttpSetDefaultAcceptEncodingGZIPEnabled\n"
".type sceHttpSetDefaultAcceptEncodingGZIPEnabled @function\n"
"sceHttpSetDefaultAcceptEncodingGZIPEnabled:\n");
asm(".global sceHttpSetDelayBuildRequestEnabled\n"
".type sceHttpSetDelayBuildRequestEnabled @function\n"
"sceHttpSetDelayBuildRequestEnabled:\n");
asm(".global sceHttpSetEpoll\n"
".type sceHttpSetEpoll @function\n"
"sceHttpSetEpoll:\n");
asm(".global sceHttpSetEpollId\n"
".type sceHttpSetEpollId @function\n"
"sceHttpSetEpollId:\n");
asm(".global sceHttpSetHttp09Enabled\n"
".type sceHttpSetHttp09Enabled @function\n"
"sceHttpSetHttp09Enabled:\n");
asm(".global sceHttpSetInflateGZIPEnabled\n"
".type sceHttpSetInflateGZIPEnabled @function\n"
"sceHttpSetInflateGZIPEnabled:\n");
asm(".global sceHttpSetNonblock\n"
".type sceHttpSetNonblock @function\n"
"sceHttpSetNonblock:\n");
asm(".global sceHttpSetPolicyOption\n"
".type sceHttpSetPolicyOption @function\n"
"sceHttpSetPolicyOption:\n");
asm(".global sceHttpSetPriorityOption\n"
".type sceHttpSetPriorityOption @function\n"
"sceHttpSetPriorityOption:\n");
asm(".global sceHttpSetProxy\n"
".type sceHttpSetProxy @function\n"
"sceHttpSetProxy:\n");
asm(".global sceHttpSetRecvBlockSize\n"
".type sceHttpSetRecvBlockSize @function\n"
"sceHttpSetRecvBlockSize:\n");
asm(".global sceHttpSetRecvTimeOut\n"
".type sceHttpSetRecvTimeOut @function\n"
"sceHttpSetRecvTimeOut:\n");
asm(".global sceHttpSetRedirectCallback\n"
".type sceHttpSetRedirectCallback @function\n"
"sceHttpSetRedirectCallback:\n");
asm(".global sceHttpSetRequestContentLength\n"
".type sceHttpSetRequestContentLength @function\n"
"sceHttpSetRequestContentLength:\n");
asm(".global sceHttpSetRequestStatusCallback\n"
".type sceHttpSetRequestStatusCallback @function\n"
"sceHttpSetRequestStatusCallback:\n");
asm(".global sceHttpSetResolveRetry\n"
".type sceHttpSetResolveRetry @function\n"
"sceHttpSetResolveRetry:\n");
asm(".global sceHttpSetResolveTimeOut\n"
".type sceHttpSetResolveTimeOut @function\n"
"sceHttpSetResolveTimeOut:\n");
asm(".global sceHttpSetResponseHeaderMaxSize\n"
".type sceHttpSetResponseHeaderMaxSize @function\n"
"sceHttpSetResponseHeaderMaxSize:\n");
asm(".global sceHttpSetSendTimeOut\n"
".type sceHttpSetSendTimeOut @function\n"
"sceHttpSetSendTimeOut:\n");
asm(".global sceHttpSetSocketCreationCallback\n"
".type sceHttpSetSocketCreationCallback @function\n"
"sceHttpSetSocketCreationCallback:\n");
asm(".global sceHttpTerm\n"
".type sceHttpTerm @function\n"
"sceHttpTerm:\n");
asm(".global sceHttpTryGetNonblock\n"
".type sceHttpTryGetNonblock @function\n"
"sceHttpTryGetNonblock:\n");
asm(".global sceHttpTrySetNonblock\n"
".type sceHttpTrySetNonblock @function\n"
"sceHttpTrySetNonblock:\n");
asm(".global sceHttpUnsetEpoll\n"
".type sceHttpUnsetEpoll @function\n"
"sceHttpUnsetEpoll:\n");
asm(".global sceHttpUriBuild\n"
".type sceHttpUriBuild @function\n"
"sceHttpUriBuild:\n");
asm(".global sceHttpUriCopy\n"
".type sceHttpUriCopy @function\n"
"sceHttpUriCopy:\n");
asm(".global sceHttpUriEscape\n"
".type sceHttpUriEscape @function\n"
"sceHttpUriEscape:\n");
asm(".global sceHttpUriMerge\n"
".type sceHttpUriMerge @function\n"
"sceHttpUriMerge:\n");
asm(".global sceHttpUriParse\n"
".type sceHttpUriParse @function\n"
"sceHttpUriParse:\n");
asm(".global sceHttpUriSweepPath\n"
".type sceHttpUriSweepPath @function\n"
"sceHttpUriSweepPath:\n");
asm(".global sceHttpUriUnescape\n"
".type sceHttpUriUnescape @function\n"
"sceHttpUriUnescape:\n");
asm(".global sceHttpWaitRequest\n"
".type sceHttpWaitRequest @function\n"
"sceHttpWaitRequest:\n");
asm(".global sceHttpsDisableOption\n"
".type sceHttpsDisableOption @function\n"
"sceHttpsDisableOption:\n");
asm(".global sceHttpsDisableOptionPrivate\n"
".type sceHttpsDisableOptionPrivate @function\n"
"sceHttpsDisableOptionPrivate:\n");
asm(".global sceHttpsEnableOption\n"
".type sceHttpsEnableOption @function\n"
"sceHttpsEnableOption:\n");
asm(".global sceHttpsEnableOptionPrivate\n"
".type sceHttpsEnableOptionPrivate @function\n"
"sceHttpsEnableOptionPrivate:\n");
asm(".global sceHttpsFreeCaList\n"
".type sceHttpsFreeCaList @function\n"
"sceHttpsFreeCaList:\n");
asm(".global sceHttpsGetCaList\n"
".type sceHttpsGetCaList @function\n"
"sceHttpsGetCaList:\n");
asm(".global sceHttpsGetSslError\n"
".type sceHttpsGetSslError @function\n"
"sceHttpsGetSslError:\n");
asm(".global sceHttpsLoadCert\n"
".type sceHttpsLoadCert @function\n"
"sceHttpsLoadCert:\n");
asm(".global sceHttpsSetMinSslVersion\n"
".type sceHttpsSetMinSslVersion @function\n"
"sceHttpsSetMinSslVersion:\n");
asm(".global sceHttpsSetSslCallback\n"
".type sceHttpsSetSslCallback @function\n"
"sceHttpsSetSslCallback:\n");
asm(".global sceHttpsSetSslVersion\n"
".type sceHttpsSetSslVersion @function\n"
"sceHttpsSetSslVersion:\n");
asm(".global sceHttpsUnloadCert\n"
".type sceHttpsUnloadCert @function\n"
"sceHttpsUnloadCert:\n");
-16
View File
@@ -1,16 +0,0 @@
asm(".weak dlclose\n"
".type dlclose @function\n"
"dlclose:\n");
asm(".weak dlerror\n"
".type dlerror @function\n"
"dlerror:\n");
asm(".weak dlopen\n"
".type dlopen @function\n"
"dlopen:\n");
asm(".weak dlsym\n"
".type dlsym @function\n"
"dlsym:\n");
File diff suppressed because it is too large. Load diff
-616
View File
@@ -1,616 +0,0 @@
asm(".global pthread_atfork\n"
".type pthread_atfork @function\n"
"pthread_atfork:\n");
asm(".global pthread_attr_destroy\n"
".type pthread_attr_destroy @function\n"
"pthread_attr_destroy:\n");
asm(".global pthread_attr_get_np\n"
".type pthread_attr_get_np @function\n"
"pthread_attr_get_np:\n");
asm(".global pthread_attr_getaffinity_np\n"
".type pthread_attr_getaffinity_np @function\n"
"pthread_attr_getaffinity_np:\n");
asm(".global pthread_attr_getdetachstate\n"
".type pthread_attr_getdetachstate @function\n"
"pthread_attr_getdetachstate:\n");
asm(".global pthread_attr_getguardsize\n"
".type pthread_attr_getguardsize @function\n"
"pthread_attr_getguardsize:\n");
asm(".global pthread_attr_getinheritsched\n"
".type pthread_attr_getinheritsched @function\n"
"pthread_attr_getinheritsched:\n");
asm(".global pthread_attr_getschedparam\n"
".type pthread_attr_getschedparam @function\n"
"pthread_attr_getschedparam:\n");
asm(".global pthread_attr_getschedpolicy\n"
".type pthread_attr_getschedpolicy @function\n"
"pthread_attr_getschedpolicy:\n");
asm(".global pthread_attr_getscope\n"
".type pthread_attr_getscope @function\n"
"pthread_attr_getscope:\n");
asm(".global pthread_attr_getsolosched_np\n"
".type pthread_attr_getsolosched_np @function\n"
"pthread_attr_getsolosched_np:\n");
asm(".global pthread_attr_getstack\n"
".type pthread_attr_getstack @function\n"
"pthread_attr_getstack:\n");
asm(".global pthread_attr_getstackaddr\n"
".type pthread_attr_getstackaddr @function\n"
"pthread_attr_getstackaddr:\n");
asm(".global pthread_attr_getstacksize\n"
".type pthread_attr_getstacksize @function\n"
"pthread_attr_getstacksize:\n");
asm(".global pthread_attr_init\n"
".type pthread_attr_init @function\n"
"pthread_attr_init:\n");
asm(".global pthread_attr_setaffinity_np\n"
".type pthread_attr_setaffinity_np @function\n"
"pthread_attr_setaffinity_np:\n");
asm(".global pthread_attr_setcreatesuspend_np\n"
".type pthread_attr_setcreatesuspend_np @function\n"
"pthread_attr_setcreatesuspend_np:\n");
asm(".global pthread_attr_setdetachstate\n"
".type pthread_attr_setdetachstate @function\n"
"pthread_attr_setdetachstate:\n");
asm(".global pthread_attr_setguardsize\n"
".type pthread_attr_setguardsize @function\n"
"pthread_attr_setguardsize:\n");
asm(".global pthread_attr_setinheritsched\n"
".type pthread_attr_setinheritsched @function\n"
"pthread_attr_setinheritsched:\n");
asm(".global pthread_attr_setschedparam\n"
".type pthread_attr_setschedparam @function\n"
"pthread_attr_setschedparam:\n");
asm(".global pthread_attr_setschedpolicy\n"
".type pthread_attr_setschedpolicy @function\n"
"pthread_attr_setschedpolicy:\n");
asm(".global pthread_attr_setscope\n"
".type pthread_attr_setscope @function\n"
"pthread_attr_setscope:\n");
asm(".global pthread_attr_setsolosched_np\n"
".type pthread_attr_setsolosched_np @function\n"
"pthread_attr_setsolosched_np:\n");
asm(".global pthread_attr_setstack\n"
".type pthread_attr_setstack @function\n"
"pthread_attr_setstack:\n");
asm(".global pthread_attr_setstackaddr\n"
".type pthread_attr_setstackaddr @function\n"
"pthread_attr_setstackaddr:\n");
asm(".global pthread_attr_setstacksize\n"
".type pthread_attr_setstacksize @function\n"
"pthread_attr_setstacksize:\n");
asm(".global pthread_barrier_destroy\n"
".type pthread_barrier_destroy @function\n"
"pthread_barrier_destroy:\n");
asm(".global pthread_barrier_init\n"
".type pthread_barrier_init @function\n"
"pthread_barrier_init:\n");
asm(".global pthread_barrier_setname_np\n"
".type pthread_barrier_setname_np @function\n"
"pthread_barrier_setname_np:\n");
asm(".global pthread_barrier_wait\n"
".type pthread_barrier_wait @function\n"
"pthread_barrier_wait:\n");
asm(".global pthread_barrierattr_destroy\n"
".type pthread_barrierattr_destroy @function\n"
"pthread_barrierattr_destroy:\n");
asm(".global pthread_barrierattr_getpshared\n"
".type pthread_barrierattr_getpshared @function\n"
"pthread_barrierattr_getpshared:\n");
asm(".global pthread_barrierattr_init\n"
".type pthread_barrierattr_init @function\n"
"pthread_barrierattr_init:\n");
asm(".global pthread_barrierattr_setpshared\n"
".type pthread_barrierattr_setpshared @function\n"
"pthread_barrierattr_setpshared:\n");
asm(".global pthread_cancel\n"
".type pthread_cancel @function\n"
"pthread_cancel:\n");
asm(".global pthread_cleanup_pop\n"
".type pthread_cleanup_pop @function\n"
"pthread_cleanup_pop:\n");
asm(".global pthread_cleanup_push\n"
".type pthread_cleanup_push @function\n"
"pthread_cleanup_push:\n");
asm(".global pthread_cond_broadcast\n"
".type pthread_cond_broadcast @function\n"
"pthread_cond_broadcast:\n");
asm(".global pthread_cond_destroy\n"
".type pthread_cond_destroy @function\n"
"pthread_cond_destroy:\n");
asm(".global pthread_cond_init\n"
".type pthread_cond_init @function\n"
"pthread_cond_init:\n");
asm(".global pthread_cond_reltimedwait_np\n"
".type pthread_cond_reltimedwait_np @function\n"
"pthread_cond_reltimedwait_np:\n");
asm(".global pthread_cond_setname_np\n"
".type pthread_cond_setname_np @function\n"
"pthread_cond_setname_np:\n");
asm(".global pthread_cond_signal\n"
".type pthread_cond_signal @function\n"
"pthread_cond_signal:\n");
asm(".global pthread_cond_signalto_np\n"
".type pthread_cond_signalto_np @function\n"
"pthread_cond_signalto_np:\n");
asm(".global pthread_cond_timedwait\n"
".type pthread_cond_timedwait @function\n"
"pthread_cond_timedwait:\n");
asm(".global pthread_cond_wait\n"
".type pthread_cond_wait @function\n"
"pthread_cond_wait:\n");
asm(".global pthread_condattr_destroy\n"
".type pthread_condattr_destroy @function\n"
"pthread_condattr_destroy:\n");
asm(".global pthread_condattr_getclock\n"
".type pthread_condattr_getclock @function\n"
"pthread_condattr_getclock:\n");
asm(".global pthread_condattr_getpshared\n"
".type pthread_condattr_getpshared @function\n"
"pthread_condattr_getpshared:\n");
asm(".global pthread_condattr_init\n"
".type pthread_condattr_init @function\n"
"pthread_condattr_init:\n");
asm(".global pthread_condattr_setclock\n"
".type pthread_condattr_setclock @function\n"
"pthread_condattr_setclock:\n");
asm(".global pthread_condattr_setpshared\n"
".type pthread_condattr_setpshared @function\n"
"pthread_condattr_setpshared:\n");
asm(".global pthread_create\n"
".type pthread_create @function\n"
"pthread_create:\n");
asm(".global pthread_create_name_np\n"
".type pthread_create_name_np @function\n"
"pthread_create_name_np:\n");
asm(".global pthread_detach\n"
".type pthread_detach @function\n"
"pthread_detach:\n");
asm(".global pthread_equal\n"
".type pthread_equal @function\n"
"pthread_equal:\n");
asm(".global pthread_exit\n"
".type pthread_exit @function\n"
"pthread_exit:\n");
asm(".global pthread_get_specificarray_np\n"
".type pthread_get_specificarray_np @function\n"
"pthread_get_specificarray_np:\n");
asm(".global pthread_get_user_context_np\n"
".type pthread_get_user_context_np @function\n"
"pthread_get_user_context_np:\n");
asm(".global pthread_getaffinity_np\n"
".type pthread_getaffinity_np @function\n"
"pthread_getaffinity_np:\n");
asm(".global pthread_getconcurrency\n"
".type pthread_getconcurrency @function\n"
"pthread_getconcurrency:\n");
asm(".global pthread_getcpuclockid\n"
".type pthread_getcpuclockid @function\n"
"pthread_getcpuclockid:\n");
asm(".global pthread_getname_np\n"
".type pthread_getname_np @function\n"
"pthread_getname_np:\n");
asm(".global pthread_getprio\n"
".type pthread_getprio @function\n"
"pthread_getprio:\n");
asm(".global pthread_getschedparam\n"
".type pthread_getschedparam @function\n"
"pthread_getschedparam:\n");
asm(".global pthread_getspecific\n"
".type pthread_getspecific @function\n"
"pthread_getspecific:\n");
asm(".global pthread_getstack_np\n"
".type pthread_getstack_np @function\n"
"pthread_getstack_np:\n");
asm(".global pthread_getthreadid_np\n"
".type pthread_getthreadid_np @function\n"
"pthread_getthreadid_np:\n");
asm(".global pthread_join\n"
".type pthread_join @function\n"
"pthread_join:\n");
asm(".global pthread_key_create\n"
".type pthread_key_create @function\n"
"pthread_key_create:\n");
asm(".global pthread_key_delete\n"
".type pthread_key_delete @function\n"
"pthread_key_delete:\n");
asm(".global pthread_kill\n"
".type pthread_kill @function\n"
"pthread_kill:\n");
asm(".global pthread_main_np\n"
".type pthread_main_np @function\n"
"pthread_main_np:\n");
asm(".global pthread_multi_np\n"
".type pthread_multi_np @function\n"
"pthread_multi_np:\n");
asm(".global pthread_mutex_destroy\n"
".type pthread_mutex_destroy @function\n"
"pthread_mutex_destroy:\n");
asm(".global pthread_mutex_getprioceiling\n"
".type pthread_mutex_getprioceiling @function\n"
"pthread_mutex_getprioceiling:\n");
asm(".global pthread_mutex_getspinloops_np\n"
".type pthread_mutex_getspinloops_np @function\n"
"pthread_mutex_getspinloops_np:\n");
asm(".global pthread_mutex_getyieldloops_np\n"
".type pthread_mutex_getyieldloops_np @function\n"
"pthread_mutex_getyieldloops_np:\n");
asm(".global pthread_mutex_init\n"
".type pthread_mutex_init @function\n"
"pthread_mutex_init:\n");
asm(".global pthread_mutex_init_for_mono\n"
".type pthread_mutex_init_for_mono @function\n"
"pthread_mutex_init_for_mono:\n");
asm(".global pthread_mutex_isowned_np\n"
".type pthread_mutex_isowned_np @function\n"
"pthread_mutex_isowned_np:\n");
asm(".global pthread_mutex_lock\n"
".type pthread_mutex_lock @function\n"
"pthread_mutex_lock:\n");
asm(".global pthread_mutex_reltimedlock_np\n"
".type pthread_mutex_reltimedlock_np @function\n"
"pthread_mutex_reltimedlock_np:\n");
asm(".global pthread_mutex_setname_np\n"
".type pthread_mutex_setname_np @function\n"
"pthread_mutex_setname_np:\n");
asm(".global pthread_mutex_setprioceiling\n"
".type pthread_mutex_setprioceiling @function\n"
"pthread_mutex_setprioceiling:\n");
asm(".global pthread_mutex_setspinloops_np\n"
".type pthread_mutex_setspinloops_np @function\n"
"pthread_mutex_setspinloops_np:\n");
asm(".global pthread_mutex_setyieldloops_np\n"
".type pthread_mutex_setyieldloops_np @function\n"
"pthread_mutex_setyieldloops_np:\n");
asm(".global pthread_mutex_timedlock\n"
".type pthread_mutex_timedlock @function\n"
"pthread_mutex_timedlock:\n");
asm(".global pthread_mutex_trylock\n"
".type pthread_mutex_trylock @function\n"
"pthread_mutex_trylock:\n");
asm(".global pthread_mutex_unlock\n"
".type pthread_mutex_unlock @function\n"
"pthread_mutex_unlock:\n");
asm(".global pthread_mutexattr_destroy\n"
".type pthread_mutexattr_destroy @function\n"
"pthread_mutexattr_destroy:\n");
asm(".global pthread_mutexattr_getgen_np\n"
".type pthread_mutexattr_getgen_np @function\n"
"pthread_mutexattr_getgen_np:\n");
asm(".global pthread_mutexattr_getkind_np\n"
".type pthread_mutexattr_getkind_np @function\n"
"pthread_mutexattr_getkind_np:\n");
asm(".global pthread_mutexattr_getprioceiling\n"
".type pthread_mutexattr_getprioceiling @function\n"
"pthread_mutexattr_getprioceiling:\n");
asm(".global pthread_mutexattr_getprotocol\n"
".type pthread_mutexattr_getprotocol @function\n"
"pthread_mutexattr_getprotocol:\n");
asm(".global pthread_mutexattr_getpshared\n"
".type pthread_mutexattr_getpshared @function\n"
"pthread_mutexattr_getpshared:\n");
asm(".global pthread_mutexattr_gettype\n"
".type pthread_mutexattr_gettype @function\n"
"pthread_mutexattr_gettype:\n");
asm(".global pthread_mutexattr_init\n"
".type pthread_mutexattr_init @function\n"
"pthread_mutexattr_init:\n");
asm(".global pthread_mutexattr_setgen_np\n"
".type pthread_mutexattr_setgen_np @function\n"
"pthread_mutexattr_setgen_np:\n");
asm(".global pthread_mutexattr_setkind_np\n"
".type pthread_mutexattr_setkind_np @function\n"
"pthread_mutexattr_setkind_np:\n");
asm(".global pthread_mutexattr_setprioceiling\n"
".type pthread_mutexattr_setprioceiling @function\n"
"pthread_mutexattr_setprioceiling:\n");
asm(".global pthread_mutexattr_setprotocol\n"
".type pthread_mutexattr_setprotocol @function\n"
"pthread_mutexattr_setprotocol:\n");
asm(".global pthread_mutexattr_setpshared\n"
".type pthread_mutexattr_setpshared @function\n"
"pthread_mutexattr_setpshared:\n");
asm(".global pthread_mutexattr_settype\n"
".type pthread_mutexattr_settype @function\n"
"pthread_mutexattr_settype:\n");
asm(".global pthread_once\n"
".type pthread_once @function\n"
"pthread_once:\n");
asm(".global pthread_rename_np\n"
".type pthread_rename_np @function\n"
"pthread_rename_np:\n");
asm(".global pthread_resume_all_np\n"
".type pthread_resume_all_np @function\n"
"pthread_resume_all_np:\n");
asm(".global pthread_resume_np\n"
".type pthread_resume_np @function\n"
"pthread_resume_np:\n");
asm(".global pthread_resume_user_context_np\n"
".type pthread_resume_user_context_np @function\n"
"pthread_resume_user_context_np:\n");
asm(".global pthread_rwlock_destroy\n"
".type pthread_rwlock_destroy @function\n"
"pthread_rwlock_destroy:\n");
asm(".global pthread_rwlock_init\n"
".type pthread_rwlock_init @function\n"
"pthread_rwlock_init:\n");
asm(".global pthread_rwlock_rdlock\n"
".type pthread_rwlock_rdlock @function\n"
"pthread_rwlock_rdlock:\n");
asm(".global pthread_rwlock_reltimedrdlock_np\n"
".type pthread_rwlock_reltimedrdlock_np @function\n"
"pthread_rwlock_reltimedrdlock_np:\n");
asm(".global pthread_rwlock_reltimedwrlock_np\n"
".type pthread_rwlock_reltimedwrlock_np @function\n"
"pthread_rwlock_reltimedwrlock_np:\n");
asm(".global pthread_rwlock_setname_np\n"
".type pthread_rwlock_setname_np @function\n"
"pthread_rwlock_setname_np:\n");
asm(".global pthread_rwlock_timedrdlock\n"
".type pthread_rwlock_timedrdlock @function\n"
"pthread_rwlock_timedrdlock:\n");
asm(".global pthread_rwlock_timedwrlock\n"
".type pthread_rwlock_timedwrlock @function\n"
"pthread_rwlock_timedwrlock:\n");
asm(".global pthread_rwlock_tryrdlock\n"
".type pthread_rwlock_tryrdlock @function\n"
"pthread_rwlock_tryrdlock:\n");
asm(".global pthread_rwlock_trywrlock\n"
".type pthread_rwlock_trywrlock @function\n"
"pthread_rwlock_trywrlock:\n");
asm(".global pthread_rwlock_unlock\n"
".type pthread_rwlock_unlock @function\n"
"pthread_rwlock_unlock:\n");
asm(".global pthread_rwlock_wrlock\n"
".type pthread_rwlock_wrlock @function\n"
"pthread_rwlock_wrlock:\n");
asm(".global pthread_rwlockattr_destroy\n"
".type pthread_rwlockattr_destroy @function\n"
"pthread_rwlockattr_destroy:\n");
asm(".global pthread_rwlockattr_getpshared\n"
".type pthread_rwlockattr_getpshared @function\n"
"pthread_rwlockattr_getpshared:\n");
asm(".global pthread_rwlockattr_gettype_np\n"
".type pthread_rwlockattr_gettype_np @function\n"
"pthread_rwlockattr_gettype_np:\n");
asm(".global pthread_rwlockattr_init\n"
".type pthread_rwlockattr_init @function\n"
"pthread_rwlockattr_init:\n");
asm(".global pthread_rwlockattr_setpshared\n"
".type pthread_rwlockattr_setpshared @function\n"
"pthread_rwlockattr_setpshared:\n");
asm(".global pthread_rwlockattr_settype_np\n"
".type pthread_rwlockattr_settype_np @function\n"
"pthread_rwlockattr_settype_np:\n");
asm(".global pthread_self\n"
".type pthread_self @function\n"
"pthread_self:\n");
asm(".global pthread_set_defaultstacksize_np\n"
".type pthread_set_defaultstacksize_np @function\n"
"pthread_set_defaultstacksize_np:\n");
asm(".global pthread_set_name_np\n"
".type pthread_set_name_np @function\n"
"pthread_set_name_np:\n");
asm(".global pthread_set_user_context_np\n"
".type pthread_set_user_context_np @function\n"
"pthread_set_user_context_np:\n");
asm(".global pthread_setaffinity_np\n"
".type pthread_setaffinity_np @function\n"
"pthread_setaffinity_np:\n");
asm(".global pthread_setcancelstate\n"
".type pthread_setcancelstate @function\n"
"pthread_setcancelstate:\n");
asm(".global pthread_setcanceltype\n"
".type pthread_setcanceltype @function\n"
"pthread_setcanceltype:\n");
asm(".global pthread_setconcurrency\n"
".type pthread_setconcurrency @function\n"
"pthread_setconcurrency:\n");
asm(".global pthread_setprio\n"
".type pthread_setprio @function\n"
"pthread_setprio:\n");
asm(".global pthread_setschedparam\n"
".type pthread_setschedparam @function\n"
"pthread_setschedparam:\n");
asm(".global pthread_setspecific\n"
".type pthread_setspecific @function\n"
"pthread_setspecific:\n");
asm(".global pthread_sigmask\n"
".type pthread_sigmask @function\n"
"pthread_sigmask:\n");
asm(".global pthread_single_np\n"
".type pthread_single_np @function\n"
"pthread_single_np:\n");
asm(".global pthread_spin_destroy\n"
".type pthread_spin_destroy @function\n"
"pthread_spin_destroy:\n");
asm(".global pthread_spin_init\n"
".type pthread_spin_init @function\n"
"pthread_spin_init:\n");
asm(".global pthread_spin_lock\n"
".type pthread_spin_lock @function\n"
"pthread_spin_lock:\n");
asm(".global pthread_spin_trylock\n"
".type pthread_spin_trylock @function\n"
"pthread_spin_trylock:\n");
asm(".global pthread_spin_unlock\n"
".type pthread_spin_unlock @function\n"
"pthread_spin_unlock:\n");
asm(".global pthread_suspend_all_np\n"
".type pthread_suspend_all_np @function\n"
"pthread_suspend_all_np:\n");
asm(".global pthread_suspend_np\n"
".type pthread_suspend_np @function\n"
"pthread_suspend_np:\n");
asm(".global pthread_suspend_user_context_np\n"
".type pthread_suspend_user_context_np @function\n"
"pthread_suspend_user_context_np:\n");
asm(".global pthread_switch_add_np\n"
".type pthread_switch_add_np @function\n"
"pthread_switch_add_np:\n");
asm(".global pthread_switch_delete_np\n"
".type pthread_switch_delete_np @function\n"
"pthread_switch_delete_np:\n");
asm(".global pthread_testcancel\n"
".type pthread_testcancel @function\n"
"pthread_testcancel:\n");
asm(".global pthread_timedjoin_np\n"
".type pthread_timedjoin_np @function\n"
"pthread_timedjoin_np:\n");
asm(".global pthread_yield\n"
".type pthread_yield @function\n"
"pthread_yield:\n");