mirror of
https://github.com/ps5-payload-dev/sdk.git
synced 2026-10-19 01:51:19 -05:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f5d40f0277 | ||
|
|
1a04f75407 | ||
|
|
10b539de8f | ||
|
|
f7fd02e6e1 | ||
|
|
b4fcb924d6 | ||
|
|
3b6ea8044e | ||
|
|
d9c9519116 | ||
|
|
66daf51afe | ||
|
|
4b86c73ab7 | ||
|
|
f89a100c89 | ||
|
|
8e125899b1 | ||
|
|
4eb701204f | ||
|
|
9d267a83fa | ||
|
|
a9e742489a | ||
|
|
a0d2bc60bd | ||
|
|
558d2f5669 | ||
|
|
4460639b2d | ||
|
|
4e88ed694c | ||
|
|
6d0cc823be | ||
|
|
45fca06f9a | ||
|
|
5184bcdfb4 | ||
|
|
c68b1b56ae | ||
|
|
2e6fab5042 | ||
|
|
92320fbaef | ||
|
|
cf547b191d | ||
|
|
3f219cd64b | ||
|
|
4eee7ac558 | ||
|
|
d2e2e58574 | ||
|
|
9478d2baaa | ||
|
|
d77b34f88a | ||
|
|
7f30ee52cd | ||
|
|
3bede94ff9 | ||
|
|
cfbc7307ac | ||
|
|
5b73e745cb | ||
|
|
091540e1b8 | ||
|
|
1aa6d5603e | ||
|
|
9fe9f78db6 | ||
|
|
551f796331 | ||
|
|
f2e8f65dae | ||
|
|
c1e0b74f25 | ||
|
|
12433ce900 | ||
|
|
10d9163fe4 | ||
|
|
8ae0a9babf | ||
|
|
9e4b1ad764 | ||
|
|
6ab211b319 | ||
|
|
7b5caa9449 | ||
|
|
28720cfb33 | ||
|
|
13ccc2d5bf | ||
|
|
5f68a946af | ||
|
|
ed69baef16 | ||
|
|
acfd93595e | ||
|
|
6bd9c1b64f | ||
|
|
84ccd42dda | ||
|
|
b710649800 | ||
|
|
df0508f622 | ||
|
|
64e25e8359 | ||
|
|
8154f82118 | ||
|
|
9e7b5f8cca | ||
|
|
8ba558e844 | ||
|
|
d74499b738 | ||
|
|
1bd0d7bac0 | ||
|
|
5b6683374a | ||
|
|
6ae1470fd5 | ||
|
|
7dabc1bb17 | ||
|
|
1c617cac43 | ||
|
|
cca4ba3605 | ||
|
|
1da036ae2a | ||
|
|
e103138794 | ||
|
|
b58c5d94a9 |
No files matched your search
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
@@ -41,7 +41,8 @@ MAKE_SAMPLES=("arbitrary_syscall"
|
||||
"mntinfo"
|
||||
"notify"
|
||||
"notify_debug"
|
||||
"ps")
|
||||
"ps"
|
||||
"relocatable_linking")
|
||||
|
||||
CMAKE_SAMPLES=("hello_cmake"
|
||||
)
|
||||
|
||||
+6
-19
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
@@ -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
@@ -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
@@ -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]);
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
@@ -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);
|
||||
@@ -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
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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
@@ -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 \
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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 "$@"
|
||||
@@ -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()
|
||||
@@ -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'
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
@@ -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
|
||||
@@ -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
@@ -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
@@ -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
|
||||
@@ -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
@@ -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;
|
||||
}
|
||||
@@ -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
@@ -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);
|
||||
}
|
||||
@@ -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
@@ -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
@@ -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 *)█
|
||||
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
@@ -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
@@ -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
@@ -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
@@ -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);
|
||||
}
|
||||
@@ -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
|
||||
)
|
||||
@@ -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) $^
|
||||
@@ -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 ");
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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!");
|
||||
}
|
||||
@@ -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
@@ -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
|
||||
|
||||
|
||||
@@ -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");
|
||||
@@ -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");
|
||||
@@ -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");
|
||||
@@ -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");
|
||||
@@ -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
@@ -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");
|
||||
Reference in new issue
Block a user