From 3ef727da5af2f7e81539a5ab4a80832fcca254a2 Mon Sep 17 00:00:00 2001 From: 173210 Date: Wed, 16 Dec 2015 15:34:40 +0900 Subject: [PATCH 1/5] Load modules and resolve functions in crt0 --- examples/camera/Makefile | 2 +- examples/camera/source/main.c | 8 -- examples/canvas/Makefile | 2 +- examples/canvas/source/main.c | 6 -- examples/filesystem/directories/Makefile | 2 +- examples/filesystem/directories/source/main.c | 7 -- examples/filesystem/files/Makefile | 2 +- examples/filesystem/files/source/main.c | 7 -- examples/hello/Makefile | 2 +- examples/hello/source/main.c | 6 -- examples/modules/Makefile | 2 +- examples/modules/source/main.c | 7 -- examples/pad/Makefile | 2 +- examples/pad/source/main.c | 17 +--- examples/sockets/Makefile | 2 +- examples/sockets/source/main.c | 7 -- examples/threads/Makefile | 2 +- examples/threads/source/main.c | 6 -- examples/usb/list_devices/Makefile | 2 +- examples/usb/list_devices/source/main.c | 7 -- examples/usb/storage/Makefile | 2 +- examples/usb/storage/source/main.c | 7 -- examples/usb/usbfatfs/Makefile | 2 +- examples/usb/usbfatfs/source/main.c | 5 - libPS4/Makefile | 9 +- libPS4/crt0.c | 40 ++++++++ libPS4/crt0.s | 6 -- libPS4/import.mk | 28 ++++++ libPS4/import/camera.mk | 4 + libPS4/import/kernel.mk | 10 ++ libPS4/import/libc.mk | 6 ++ libPS4/import/module.S | 12 +++ libPS4/import/module.mk | 3 + libPS4/import/network.mk | 6 ++ libPS4/import/pad.mk | 2 + libPS4/import/stub.S | 13 +++ libPS4/import/usb.mk | 8 ++ libPS4/include/camera.h | 2 - libPS4/include/kernel.h | 2 - libPS4/include/libc.h | 2 - libPS4/include/module.h | 2 - libPS4/include/network.h | 2 - libPS4/include/pad.h | 2 - libPS4/include/pthread.h | 2 - libPS4/include/usb.h | 2 - libPS4/linker.x | 11 ++- libPS4/source/camera.c | 30 ------ libPS4/source/kernel.c | 30 ------ libPS4/source/libc.c | 93 ------------------- libPS4/source/module.c | 9 -- libPS4/source/network.c | 57 ------------ libPS4/source/pad.c | 22 ----- libPS4/source/pthread.c | 39 -------- libPS4/source/usb.c | 60 ------------ 54 files changed, 163 insertions(+), 465 deletions(-) create mode 100644 libPS4/crt0.c delete mode 100644 libPS4/crt0.s create mode 100644 libPS4/import.mk create mode 100644 libPS4/import/camera.mk create mode 100644 libPS4/import/kernel.mk create mode 100644 libPS4/import/libc.mk create mode 100644 libPS4/import/module.S create mode 100644 libPS4/import/module.mk create mode 100644 libPS4/import/network.mk create mode 100644 libPS4/import/pad.mk create mode 100644 libPS4/import/stub.S create mode 100644 libPS4/import/usb.mk delete mode 100644 libPS4/source/camera.c delete mode 100644 libPS4/source/libc.c delete mode 100644 libPS4/source/network.c delete mode 100644 libPS4/source/pad.c delete mode 100644 libPS4/source/pthread.c delete mode 100644 libPS4/source/usb.c diff --git a/examples/camera/Makefile b/examples/camera/Makefile index b030e4c..dc2fbcd 100644 --- a/examples/camera/Makefile +++ b/examples/camera/Makefile @@ -22,7 +22,7 @@ LIBS := -lPS4 TARGET = $(shell basename $(CURDIR)).bin $(TARGET): $(ODIR) $(OBJS) - $(CC) $(LIBPS4)/crt0.s $(ODIR)/*.o -o temp.t $(CFLAGS) $(LFLAGS) $(LIBS) + $(CC) $(LIBPS4)/crt0.c $(ODIR)/*.o -o temp.t $(CFLAGS) $(LFLAGS) $(LIBS) $(OBJCOPY) -O binary temp.t $(TARGET) rm -f temp.t diff --git a/examples/camera/source/main.c b/examples/camera/source/main.c index 0cd5468..20385c6 100644 --- a/examples/camera/source/main.c +++ b/examples/camera/source/main.c @@ -30,14 +30,6 @@ } while(0) int _main(void) { - // Init and resolve libraries - initKernel(); - - initLibc(); - initNetwork(); - initCamera(); - - // Connect to server and send message char socketName[] = "debug"; diff --git a/examples/canvas/Makefile b/examples/canvas/Makefile index b030e4c..dc2fbcd 100644 --- a/examples/canvas/Makefile +++ b/examples/canvas/Makefile @@ -22,7 +22,7 @@ LIBS := -lPS4 TARGET = $(shell basename $(CURDIR)).bin $(TARGET): $(ODIR) $(OBJS) - $(CC) $(LIBPS4)/crt0.s $(ODIR)/*.o -o temp.t $(CFLAGS) $(LFLAGS) $(LIBS) + $(CC) $(LIBPS4)/crt0.c $(ODIR)/*.o -o temp.t $(CFLAGS) $(LFLAGS) $(LIBS) $(OBJCOPY) -O binary temp.t $(TARGET) rm -f temp.t diff --git a/examples/canvas/source/main.c b/examples/canvas/source/main.c index 7df0902..ada5261 100644 --- a/examples/canvas/source/main.c +++ b/examples/canvas/source/main.c @@ -55,12 +55,6 @@ void *canvasRenderer(void *arg) { } int _main(void) { - // Init and resolve libraries - initKernel(); - - initPthread(); - - // Create our canvas rendering thread ScePthread thread; scePthreadCreate(&thread, NULL, canvasRenderer, NULL, "canvasRenderer"); diff --git a/examples/filesystem/directories/Makefile b/examples/filesystem/directories/Makefile index b030e4c..dc2fbcd 100644 --- a/examples/filesystem/directories/Makefile +++ b/examples/filesystem/directories/Makefile @@ -22,7 +22,7 @@ LIBS := -lPS4 TARGET = $(shell basename $(CURDIR)).bin $(TARGET): $(ODIR) $(OBJS) - $(CC) $(LIBPS4)/crt0.s $(ODIR)/*.o -o temp.t $(CFLAGS) $(LFLAGS) $(LIBS) + $(CC) $(LIBPS4)/crt0.c $(ODIR)/*.o -o temp.t $(CFLAGS) $(LFLAGS) $(LIBS) $(OBJCOPY) -O binary temp.t $(TARGET) rm -f temp.t diff --git a/examples/filesystem/directories/source/main.c b/examples/filesystem/directories/source/main.c index 5e2da0e..bb57d1d 100644 --- a/examples/filesystem/directories/source/main.c +++ b/examples/filesystem/directories/source/main.c @@ -16,13 +16,6 @@ char *entryName(int entryType) { } int _main(void) { - // Init and resolve libraries - initKernel(); - - initLibc(); - initNetwork(); - - // Connect to server char socketName[] = "debug"; diff --git a/examples/filesystem/files/Makefile b/examples/filesystem/files/Makefile index b030e4c..dc2fbcd 100644 --- a/examples/filesystem/files/Makefile +++ b/examples/filesystem/files/Makefile @@ -22,7 +22,7 @@ LIBS := -lPS4 TARGET = $(shell basename $(CURDIR)).bin $(TARGET): $(ODIR) $(OBJS) - $(CC) $(LIBPS4)/crt0.s $(ODIR)/*.o -o temp.t $(CFLAGS) $(LFLAGS) $(LIBS) + $(CC) $(LIBPS4)/crt0.c $(ODIR)/*.o -o temp.t $(CFLAGS) $(LFLAGS) $(LIBS) $(OBJCOPY) -O binary temp.t $(TARGET) rm -f temp.t diff --git a/examples/filesystem/files/source/main.c b/examples/filesystem/files/source/main.c index bf24c7c..625456c 100644 --- a/examples/filesystem/files/source/main.c +++ b/examples/filesystem/files/source/main.c @@ -8,13 +8,6 @@ } while(0) int _main(void) { - // Init and resolve libraries - initKernel(); - - initLibc(); - initNetwork(); - - // Connect to server char socketName[] = "debug"; diff --git a/examples/hello/Makefile b/examples/hello/Makefile index b030e4c..dc2fbcd 100644 --- a/examples/hello/Makefile +++ b/examples/hello/Makefile @@ -22,7 +22,7 @@ LIBS := -lPS4 TARGET = $(shell basename $(CURDIR)).bin $(TARGET): $(ODIR) $(OBJS) - $(CC) $(LIBPS4)/crt0.s $(ODIR)/*.o -o temp.t $(CFLAGS) $(LFLAGS) $(LIBS) + $(CC) $(LIBPS4)/crt0.c $(ODIR)/*.o -o temp.t $(CFLAGS) $(LFLAGS) $(LIBS) $(OBJCOPY) -O binary temp.t $(TARGET) rm -f temp.t diff --git a/examples/hello/source/main.c b/examples/hello/source/main.c index 1d2628a..e452208 100644 --- a/examples/hello/source/main.c +++ b/examples/hello/source/main.c @@ -1,12 +1,6 @@ #include "ps4.h" int _main(void) { - // Init and resolve libraries - initKernel(); - - initLibc(); - - // Use getpid system call int pid = syscall(20); diff --git a/examples/modules/Makefile b/examples/modules/Makefile index b030e4c..dc2fbcd 100644 --- a/examples/modules/Makefile +++ b/examples/modules/Makefile @@ -22,7 +22,7 @@ LIBS := -lPS4 TARGET = $(shell basename $(CURDIR)).bin $(TARGET): $(ODIR) $(OBJS) - $(CC) $(LIBPS4)/crt0.s $(ODIR)/*.o -o temp.t $(CFLAGS) $(LFLAGS) $(LIBS) + $(CC) $(LIBPS4)/crt0.c $(ODIR)/*.o -o temp.t $(CFLAGS) $(LFLAGS) $(LIBS) $(OBJCOPY) -O binary temp.t $(TARGET) rm -f temp.t diff --git a/examples/modules/source/main.c b/examples/modules/source/main.c index 8e79b58..e6e90c9 100644 --- a/examples/modules/source/main.c +++ b/examples/modules/source/main.c @@ -1,13 +1,6 @@ #include "ps4.h" int _main(void) { - // Init and resolve libraries - initKernel(); - - initLibc(); - initNetwork(); - - // Connect to debug server char socketName[] = "debug"; diff --git a/examples/pad/Makefile b/examples/pad/Makefile index b030e4c..dc2fbcd 100644 --- a/examples/pad/Makefile +++ b/examples/pad/Makefile @@ -22,7 +22,7 @@ LIBS := -lPS4 TARGET = $(shell basename $(CURDIR)).bin $(TARGET): $(ODIR) $(OBJS) - $(CC) $(LIBPS4)/crt0.s $(ODIR)/*.o -o temp.t $(CFLAGS) $(LFLAGS) $(LIBS) + $(CC) $(LIBPS4)/crt0.c $(ODIR)/*.o -o temp.t $(CFLAGS) $(LFLAGS) $(LIBS) $(OBJCOPY) -O binary temp.t $(TARGET) rm -f temp.t diff --git a/examples/pad/source/main.c b/examples/pad/source/main.c index b2fa341..980a9db 100644 --- a/examples/pad/source/main.c +++ b/examples/pad/source/main.c @@ -12,22 +12,7 @@ unsigned char data[512]; int _main(void) { - // Init and resolve libraries - initKernel(); - - initLibc(); - initNetwork(); - - - // Get id of already loaded pad module - int padModule; - loadModule("libScePad.sprx", &padModule); - - // Unload it - unloadModule(padModule); - - // Start fresh - initPad(); + scePadInit(); // Connect to debug server diff --git a/examples/sockets/Makefile b/examples/sockets/Makefile index b030e4c..dc2fbcd 100644 --- a/examples/sockets/Makefile +++ b/examples/sockets/Makefile @@ -22,7 +22,7 @@ LIBS := -lPS4 TARGET = $(shell basename $(CURDIR)).bin $(TARGET): $(ODIR) $(OBJS) - $(CC) $(LIBPS4)/crt0.s $(ODIR)/*.o -o temp.t $(CFLAGS) $(LFLAGS) $(LIBS) + $(CC) $(LIBPS4)/crt0.c $(ODIR)/*.o -o temp.t $(CFLAGS) $(LFLAGS) $(LIBS) $(OBJCOPY) -O binary temp.t $(TARGET) rm -f temp.t diff --git a/examples/sockets/source/main.c b/examples/sockets/source/main.c index 8f6b1c3..5118ed2 100644 --- a/examples/sockets/source/main.c +++ b/examples/sockets/source/main.c @@ -8,13 +8,6 @@ } while(0) int _main(void) { - // Init and resolve libraries - initKernel(); - - initLibc(); - initNetwork(); - - // Connect to server and send message char socketName[] = "debug"; diff --git a/examples/threads/Makefile b/examples/threads/Makefile index b030e4c..dc2fbcd 100644 --- a/examples/threads/Makefile +++ b/examples/threads/Makefile @@ -22,7 +22,7 @@ LIBS := -lPS4 TARGET = $(shell basename $(CURDIR)).bin $(TARGET): $(ODIR) $(OBJS) - $(CC) $(LIBPS4)/crt0.s $(ODIR)/*.o -o temp.t $(CFLAGS) $(LFLAGS) $(LIBS) + $(CC) $(LIBPS4)/crt0.c $(ODIR)/*.o -o temp.t $(CFLAGS) $(LFLAGS) $(LIBS) $(OBJCOPY) -O binary temp.t $(TARGET) rm -f temp.t diff --git a/examples/threads/source/main.c b/examples/threads/source/main.c index 883f822..4c718c3 100644 --- a/examples/threads/source/main.c +++ b/examples/threads/source/main.c @@ -9,12 +9,6 @@ void *thread_func(void *arg) { } int _main(void) { - // Init and resolve libraries - initKernel(); - - initLibc(); - initPthread(); - int foo = 0; ScePthread thread; diff --git a/examples/usb/list_devices/Makefile b/examples/usb/list_devices/Makefile index b030e4c..dc2fbcd 100644 --- a/examples/usb/list_devices/Makefile +++ b/examples/usb/list_devices/Makefile @@ -22,7 +22,7 @@ LIBS := -lPS4 TARGET = $(shell basename $(CURDIR)).bin $(TARGET): $(ODIR) $(OBJS) - $(CC) $(LIBPS4)/crt0.s $(ODIR)/*.o -o temp.t $(CFLAGS) $(LFLAGS) $(LIBS) + $(CC) $(LIBPS4)/crt0.c $(ODIR)/*.o -o temp.t $(CFLAGS) $(LFLAGS) $(LIBS) $(OBJCOPY) -O binary temp.t $(TARGET) rm -f temp.t diff --git a/examples/usb/list_devices/source/main.c b/examples/usb/list_devices/source/main.c index b087cf6..8322358 100644 --- a/examples/usb/list_devices/source/main.c +++ b/examples/usb/list_devices/source/main.c @@ -42,13 +42,6 @@ Device 0 } while(0) int _main(void) { - // Load modules - initKernel(); - - initLibc(); - initNetwork(); - initUsb(); - // Init netdebug struct sockaddr_in server; server.sin_len = sizeof(server); diff --git a/examples/usb/storage/Makefile b/examples/usb/storage/Makefile index b030e4c..dc2fbcd 100644 --- a/examples/usb/storage/Makefile +++ b/examples/usb/storage/Makefile @@ -22,7 +22,7 @@ LIBS := -lPS4 TARGET = $(shell basename $(CURDIR)).bin $(TARGET): $(ODIR) $(OBJS) - $(CC) $(LIBPS4)/crt0.s $(ODIR)/*.o -o temp.t $(CFLAGS) $(LFLAGS) $(LIBS) + $(CC) $(LIBPS4)/crt0.c $(ODIR)/*.o -o temp.t $(CFLAGS) $(LFLAGS) $(LIBS) $(OBJCOPY) -O binary temp.t $(TARGET) rm -f temp.t diff --git a/examples/usb/storage/source/main.c b/examples/usb/storage/source/main.c index dcbe560..c0ee60e 100644 --- a/examples/usb/storage/source/main.c +++ b/examples/usb/storage/source/main.c @@ -326,13 +326,6 @@ static int test_mass_storage(libusb_device_handle *handle, uint8_t endpoint_in, } int _main(void) { - // Load modules - initKernel(); - - initLibc(); - initNetwork(); - initUsb(); - // Init netdebug struct sockaddr_in server; server.sin_len = sizeof(server); diff --git a/examples/usb/usbfatfs/Makefile b/examples/usb/usbfatfs/Makefile index 9d08f45..6678f96 100644 --- a/examples/usb/usbfatfs/Makefile +++ b/examples/usb/usbfatfs/Makefile @@ -23,7 +23,7 @@ LIBS := -lPS4 -lusbfatfs TARGET = $(shell basename $(CURDIR)).bin $(TARGET): $(ODIR) $(OBJS) - $(CC) $(LIBPS4)/crt0.s $(ODIR)/*.o -o temp.t $(CFLAGS) $(LFLAGS) $(LIBS) + $(CC) $(LIBPS4)/crt0.c $(ODIR)/*.o -o temp.t $(CFLAGS) $(LFLAGS) $(LIBS) $(OBJCOPY) -O binary temp.t $(TARGET) rm -f temp.t diff --git a/examples/usb/usbfatfs/source/main.c b/examples/usb/usbfatfs/source/main.c index 9f2768d..1bf74c1 100644 --- a/examples/usb/usbfatfs/source/main.c +++ b/examples/usb/usbfatfs/source/main.c @@ -22,11 +22,6 @@ int _netdebug_sock; int _main(void) { - // Init and resolve libraries - initKernel(); - initLibc(); - initNetwork(); - struct sockaddr_in server; server.sin_len = sizeof(server); diff --git a/libPS4/Makefile b/libPS4/Makefile index 4400c46..63b50a1 100644 --- a/libPS4/Makefile +++ b/libPS4/Makefile @@ -9,8 +9,10 @@ LDIR := lib CFLAGS := -I$(IDIR) -O2 -std=c11 -fno-builtin -nostartfiles -nostdlib -Wall -masm=intel -march=btver2 -mtune=btver2 -m64 -mabi=sysv -mcmodel=large SFLAGS := -nostartfiles -nostdlib -march=btver2 -mtune=btver2 CFILES := $(wildcard $(SDIR)/*.c) +CPPASFILES := $(wildcard $(SDIR)/*.S) SFILES := $(wildcard $(SDIR)/*.s) -OBJS := $(patsubst $(SDIR)/%.c, build/%.o, $(CFILES)) $(patsubst $(SDIR)/%.s, build/%.o, $(SFILES)) +OBJS := $(patsubst $(SDIR)/%.c, build/%.o, $(CFILES)) \ + $(patsubst $(SDIR)/%.s, build/%.o, $(SFILES)) TARGET = $(shell basename $(CURDIR)).a @@ -20,6 +22,9 @@ $(TARGET): $(ODIR) $(OBJS) $(ODIR)/%.o: $(SDIR)/%.c $(CC) -c -o $@ $< $(CFLAGS) +$(ODIR)/%.o: $(SDIR)/%.S + $(CC) -c -o $@ $< $(CFLAGS) + $(ODIR)/%.o: $(SDIR)/%.s $(AS) -c -o $@ $< $(SFLAGS) @@ -30,3 +35,5 @@ $(ODIR): clean: rm -f $(TARGET) $(ODIR)/*.o + +include import.mk diff --git a/libPS4/crt0.c b/libPS4/crt0.c new file mode 100644 index 0000000..d3d3dec --- /dev/null +++ b/libPS4/crt0.c @@ -0,0 +1,40 @@ +#include + +union module { + const char *s; + int id; +}; + +extern union module __moduleTop[]; +extern union module __moduleBtm[]; +extern void *__stubTop[]; +extern void *__stubBtm[]; + +int _main(int argc, char *argv[]); + +static void loadModules() +{ + union module *p; + int id; + + for (p = __moduleTop; p != __moduleBtm; p++) { + loadModule(p->s, &id); + unloadModule(id); + loadModule(p->s, &p->id); + } +} + +static void resolveStubs() +{ + void **p; + + for (p = __stubTop; p != __stubBtm; p += 2) + getFunctionAddressByName(*(int *)(p[0]), p[1], p); +} + +int _start(int argc, char *argv[]) +{ + loadModules(); + resolveStubs(); + return _main(argc, argv); +} diff --git a/libPS4/crt0.s b/libPS4/crt0.s deleted file mode 100644 index d422e2a..0000000 --- a/libPS4/crt0.s +++ /dev/null @@ -1,6 +0,0 @@ -.intel_syntax noprefix -.text - -.global _start -_start: - jmp _main diff --git a/libPS4/import.mk b/libPS4/import.mk new file mode 100644 index 0000000..34e31ca --- /dev/null +++ b/libPS4/import.mk @@ -0,0 +1,28 @@ +$(ODIR)/import: + mkdir -p $@ + +define MODULE_TARGET +$(ODIR)/import/import_$(1).o: import/module.S $(ODIR)/import + $(COMPILE.c) -DMODULE_SYMBOL=$(2) -DMODULE_PATH=$(3) $$< -o $$@ +endef + +define STUB_TARGET +$(ODIR)/import/import_$(1).o: import/stub.S $(ODIR)/import + $(COMPILE.c) -DMODULE_SYMBOL=$(2) -DFUNCTION=$(3) $$< -o $$@ + +endef + +define IMPORT +OBJS += $(addsuffix .o,$(addprefix $(ODIR)/import/import_,$(1) $(addprefix $(1)_,$(4)))) + +$(call MODULE_TARGET,$(1),$(2),$(3)) +$(foreach function,$(4),$(call STUB_TARGET,$(1)_$(function),$(2),$(function))) +endef + +include import/camera.mk +include import/kernel.mk +include import/libc.mk +include import/module.mk +include import/network.mk +include import/pad.mk +include import/usb.mk diff --git a/libPS4/import/camera.mk b/libPS4/import/camera.mk new file mode 100644 index 0000000..691ac95 --- /dev/null +++ b/libPS4/import/camera.mk @@ -0,0 +1,4 @@ +$(eval $(call IMPORT,camera,__libSceCamera,\"libSceCamera.sprx\", \ + sceCameraOpen sceCameraClose sceCameraIsAttached sceCameraGetFrameData \ + sceCameraStart sceCameraStop sceCameraGetDeviceInfo sceCameraGetDeviceConfig \ + sceCameraGetConfig sceCameraSetConfig)) diff --git a/libPS4/import/kernel.mk b/libPS4/import/kernel.mk new file mode 100644 index 0000000..7866602 --- /dev/null +++ b/libPS4/import/kernel.mk @@ -0,0 +1,10 @@ +$(eval $(call IMPORT,kernel,__libkernel,\"libkernel.sprx\", \ + sceKernelLoadStartModule sceKernelAllocateDirectMemory \ + sceKernelMapDirectMemory sceKernelSleep \ + sceKernelUsleep sceKernelGettimeofday \ + sceKernelGetProcessTime sceKernelGetCurrentCpu \ + \ + scePthreadCreate scePthreadExit scePthreadDetach scePthreadJoin \ + scePthreadYield scePthreadSelf scePthreadCancel scePthreadMutexInit \ + scePthreadMutexDestroy scePthreadMutexLock scePthreadMutexTrylock \ + scePthreadMutexTimedlock scePthreadMutexUnlock)) diff --git a/libPS4/import/libc.mk b/libPS4/import/libc.mk new file mode 100644 index 0000000..c50b024 --- /dev/null +++ b/libPS4/import/libc.mk @@ -0,0 +1,6 @@ +$(eval $(call IMPORT,libc,__libSceLibcInternal,\"libSceLibcInternal.sprx\", \ + malloc free calloc realloc memset memcpy memcmp strcpy strncpy \ + strcat strncat strlen strcmp strncmp sprintf snprintf sscanf \ + strchr strrchr srand rand asctime asctime_r ctime ctime_r \ + gmtime gmtime_r localtime localtime_r mktime opendir readdir readdir_r \ + telldir seekdir rewinddir closedir dirfd)) diff --git a/libPS4/import/module.S b/libPS4/import/module.S new file mode 100644 index 0000000..dabc67f --- /dev/null +++ b/libPS4/import/module.S @@ -0,0 +1,12 @@ + .section .data.module, "aw" + .align 8 + .global MODULE_SYMBOL + .type MODULE_SYMBOL, @common +MODULE_SYMBOL: + .quad MODULE_SYMBOL_path + + .size MODULE_SYMBOL, . - MODULE_SYMBOL + + .section .rodata +MODULE_SYMBOL_path: + .asciz MODULE_PATH diff --git a/libPS4/import/module.mk b/libPS4/import/module.mk new file mode 100644 index 0000000..9206cb4 --- /dev/null +++ b/libPS4/import/module.mk @@ -0,0 +1,3 @@ +# Just use sceKernelLoadStartModule instead +$(eval $(call IMPORT,module,__libSceSysmodule,\"libSceSysmodule.sprx\", \ + sceSysmoduleLoadModule)) diff --git a/libPS4/import/network.mk b/libPS4/import/network.mk new file mode 100644 index 0000000..e16f2c3 --- /dev/null +++ b/libPS4/import/network.mk @@ -0,0 +1,6 @@ +$(eval $(call IMPORT,network,__libSceNet,\"libSceNet.sprx\", \ + sceNetSocket sceNetSocketClose sceNetConnect sceNetSend sceNetBind \ + sceNetListen sceNetAccept sceNetRecv sceNetSocketAbort \ + sceNetGetsockname sceNetGetsockopt sceNetSetsockopt sceNetInetNtop \ + sceNetInetPton sceNetHtonll sceNetHtonl sceNetHtons sceNetNtohll \ + sceNetNtohl sceNetNtohs)) diff --git a/libPS4/import/pad.mk b/libPS4/import/pad.mk new file mode 100644 index 0000000..b1dbe6a --- /dev/null +++ b/libPS4/import/pad.mk @@ -0,0 +1,2 @@ +$(eval $(call IMPORT,pad,__libScePad,\"libScePad.sprx\", \ + scePadInit scePadOpen scePadClose scePadRead scePadReadState)) diff --git a/libPS4/import/stub.S b/libPS4/import/stub.S new file mode 100644 index 0000000..b3ae8af --- /dev/null +++ b/libPS4/import/stub.S @@ -0,0 +1,13 @@ + .section .data.stub, "aw" + .align 8 + .global FUNCTION + .type FUNCTION, @common +FUNCTION: + .quad MODULE_SYMBOL + .quad FUNCTION_str + + .size FUNCTION, . - FUNCTION + + .section .rodata +FUNCTION_str: + .asciz "FUNCTION" diff --git a/libPS4/import/usb.mk b/libPS4/import/usb.mk new file mode 100644 index 0000000..3cf3c70 --- /dev/null +++ b/libPS4/import/usb.mk @@ -0,0 +1,8 @@ +$(eval $(call IMPORT,usb,__libSceUsbd,\"libSceUsbd.sprx\", \ + sceUsbdInit sceUsbdExit sceUsbdGetDeviceList sceUsbdFreeDeviceList \ + sceUsbdGetDeviceDescriptor sceUsbdOpen sceUsbdOpenDeviceWithVidPid \ + sceUsbdClose sceUsbdSetInterfaceAltSetting sceUsbdClearHalt \ + sceUsbdResetDevice sceUsbdCheckConnected sceUsbdControlTransfer \ + sceUsbdBulkTransfer sceUsbdInterruptTransfer \ + sceUsbdGetActiveConfigDescriptor sceUsbdGetConfigDescriptor \ + sceUsbdGetConfigDescriptorByValue sceUsbdFreeConfigDescriptor)) diff --git a/libPS4/include/camera.h b/libPS4/include/camera.h index 5a806d5..a9f9d89 100644 --- a/libPS4/include/camera.h +++ b/libPS4/include/camera.h @@ -45,5 +45,3 @@ extern int (*sceCameraGetDeviceInfo)(int handle, SceCameraDeviceInfo *info); extern int (*sceCameraGetDeviceConfig)(int handle, SceCameraConfig *config); extern int (*sceCameraGetConfig)(int handle, SceCameraConfig *config); extern int (*sceCameraSetConfig)(int handle, SceCameraConfig *config); - -void initCamera(void); diff --git a/libPS4/include/kernel.h b/libPS4/include/kernel.h index 37cdf53..8a80a2c 100644 --- a/libPS4/include/kernel.h +++ b/libPS4/include/kernel.h @@ -16,5 +16,3 @@ extern uint64_t (*sceKernelGetProcessTime)(void); extern int (*sceKernelGetCurrentCpu)(void); int kill(int pid, int signum); - -void initKernel(void); diff --git a/libPS4/include/libc.h b/libPS4/include/libc.h index b0bd164..c26a8c5 100644 --- a/libPS4/include/libc.h +++ b/libPS4/include/libc.h @@ -46,5 +46,3 @@ extern void (*seekdir)(DIR *dirp, long loc); extern void (*rewinddir)(DIR *dirp); extern int (*closedir)(DIR *dirp); extern int (*dirfd)(DIR *dirp); - -void initLibc(void); diff --git a/libPS4/include/module.h b/libPS4/include/module.h index 23434f5..ea23b23 100644 --- a/libPS4/include/module.h +++ b/libPS4/include/module.h @@ -22,5 +22,3 @@ int getLoadedModules(int *destination, int max, int *count); int getModuleInfo(int loadedModuleID, struct moduleInfo *destination); int loadModule(const char *name, int *idDestination); int unloadModule(int id); - -void initModule(void); diff --git a/libPS4/include/network.h b/libPS4/include/network.h index 82330fe..1df7d00 100644 --- a/libPS4/include/network.h +++ b/libPS4/include/network.h @@ -65,5 +65,3 @@ extern uint16_t (*sceNetHtons)(uint16_t host16); extern uint64_t (*sceNetNtohll)(uint64_t net64); extern uint32_t (*sceNetNtohl)(uint32_t net32); extern uint16_t (*sceNetNtohs)(uint16_t net16); - -void initNetwork(void); diff --git a/libPS4/include/pad.h b/libPS4/include/pad.h index fc6ac44..dc7d369 100644 --- a/libPS4/include/pad.h +++ b/libPS4/include/pad.h @@ -5,5 +5,3 @@ extern int (*scePadOpen)(int userID, int, int, void *); extern int (*scePadClose)(int handle); extern int (*scePadRead)(int handle, void *data, int count); extern int (*scePadReadState)(int handle, void *data); - -void initPad(void); diff --git a/libPS4/include/pthread.h b/libPS4/include/pthread.h index d6b5211..701800f 100644 --- a/libPS4/include/pthread.h +++ b/libPS4/include/pthread.h @@ -20,5 +20,3 @@ extern int (*scePthreadMutexLock)(ScePthreadMutex *mutex); extern int (*scePthreadMutexTrylock)(ScePthreadMutex *mutex); extern int (*scePthreadMutexTimedlock)(ScePthreadMutex *mutex, SceKernelUseconds usec); extern int (*scePthreadMutexUnlock)(ScePthreadMutex *mutex); - -void initPthread(void); diff --git a/libPS4/include/usb.h b/libPS4/include/usb.h index b9204d9..f821573 100644 --- a/libPS4/include/usb.h +++ b/libPS4/include/usb.h @@ -201,5 +201,3 @@ extern int (*sceUsbdGetActiveConfigDescriptor)(libusb_device *dev, struct libusb extern int (*sceUsbdGetConfigDescriptor)(libusb_device *dev, uint8_t config_index, struct libusb_config_descriptor **config); extern int (*sceUsbdGetConfigDescriptorByValue)(libusb_device *dev, uint8_t bConfigurationValue, struct libusb_config_descriptor **config); extern void (*sceUsbdFreeConfigDescriptor)(struct libusb_config_descriptor *config); - -void initUsb(void); diff --git a/libPS4/linker.x b/libPS4/linker.x index dfc9c3b..1d7763f 100644 --- a/libPS4/linker.x +++ b/libPS4/linker.x @@ -21,6 +21,15 @@ SECTIONS /* Data segment */ . = 0x926300000; - .data : { *(.data) } : data_seg + .data : { + __moduleTop = .; + KEEP(*(.data.module)) + __moduleBtm = .; + __stubTop = .; + KEEP(*(.data.stub)) + __stubBtm = .; + + *(.data) + } : data_seg .bss : { *(.bss) } : data_seg } diff --git a/libPS4/source/camera.c b/libPS4/source/camera.c deleted file mode 100644 index 9d863fe..0000000 --- a/libPS4/source/camera.c +++ /dev/null @@ -1,30 +0,0 @@ -#include "kernel.h" -#include "module.h" - -#include "camera.h" - -int (*sceCameraOpen)(int userid, int type, int index, void *); -int (*sceCameraClose)(int handle); -int (*sceCameraIsAttached)(int index); -int (*sceCameraGetFrameData)(int handle, SceCameraFrameData *frame); -int (*sceCameraStart)(int handle, SceCameraStartParameter *param); -int (*sceCameraStop)(int handle); -int (*sceCameraGetDeviceInfo)(int handle, SceCameraDeviceInfo *info); -int (*sceCameraGetDeviceConfig)(int handle, SceCameraConfig *config); -int (*sceCameraGetConfig)(int handle, SceCameraConfig *config); -int (*sceCameraSetConfig)(int handle, SceCameraConfig *config); - -void initCamera(void) { - int libCamera = sceKernelLoadStartModule("libSceCamera.sprx", 0, NULL, 0, 0, 0); - - RESOLVE(libCamera, sceCameraOpen); - RESOLVE(libCamera, sceCameraClose); - RESOLVE(libCamera, sceCameraIsAttached); - RESOLVE(libCamera, sceCameraGetFrameData); - RESOLVE(libCamera, sceCameraStart); - RESOLVE(libCamera, sceCameraStop); - RESOLVE(libCamera, sceCameraGetDeviceInfo); - RESOLVE(libCamera, sceCameraGetDeviceConfig); - RESOLVE(libCamera, sceCameraGetConfig); - RESOLVE(libCamera, sceCameraSetConfig); -} diff --git a/libPS4/source/kernel.c b/libPS4/source/kernel.c index 5bf98e4..db149b4 100644 --- a/libPS4/source/kernel.c +++ b/libPS4/source/kernel.c @@ -1,33 +1,3 @@ -#include "module.h" #include "syscall.h" -#include "kernel.h" - -int (*sceKernelLoadStartModule)(const char *name, size_t argc, const void *argv, unsigned int flags, int, int); - -int (*sceKernelAllocateDirectMemory)(off_t searchStart, off_t searchEnd, size_t length, size_t alignment, int type, off_t *physicalAddressDestination); -int (*sceKernelMapDirectMemory)(void **addr, size_t length, int protection, int flags, off_t start, size_t alignment); - -unsigned int (*sceKernelSleep)(unsigned int seconds); -int (*sceKernelUsleep)(unsigned int microseconds); -int (*sceKernelGettimeofday)(SceKernelTimeval *tp); -uint64_t (*sceKernelGetProcessTime)(void); -int (*sceKernelGetCurrentCpu)(void); - SYSCALL(kill, 37); - -void initKernel(void) { - int libkernel; - loadModule("libkernel.sprx", &libkernel); - - RESOLVE(libkernel, sceKernelLoadStartModule); - - RESOLVE(libkernel, sceKernelAllocateDirectMemory); - RESOLVE(libkernel, sceKernelMapDirectMemory); - - RESOLVE(libkernel, sceKernelSleep); - RESOLVE(libkernel, sceKernelUsleep); - RESOLVE(libkernel, sceKernelGettimeofday); - RESOLVE(libkernel, sceKernelGetProcessTime); - RESOLVE(libkernel, sceKernelGetCurrentCpu); -} diff --git a/libPS4/source/libc.c b/libPS4/source/libc.c deleted file mode 100644 index a973bb3..0000000 --- a/libPS4/source/libc.c +++ /dev/null @@ -1,93 +0,0 @@ -#include "kernel.h" -#include "module.h" - -#include "libc.h" - -void *(*malloc)(size_t size); -void (*free)(void *ptr); -void *(*calloc)(size_t num, size_t size); -void *(*realloc)(void* ptr, size_t size); -void *(*memset)(void *destination, int value, size_t num); -void *(*memcpy)(void *destination, const void *source, size_t num); -int (*memcmp)(const void *s1, const void *s2, size_t n); -char *(*strcpy)(char *destination, const char *source); -char *(*strncpy)(char *destination, const char *source, size_t num); -char *(*strcat)(char *dest, const char *src); -char *(*strncat)(char *dest, const char *src, size_t n); -size_t (*strlen)(const char *s); -int (*strcmp)(const char *s1, const char *s2); -int (*strncmp)(const char *s1, const char *s2, size_t n); -int (*sprintf)(char *str, const char *format, ...); -int (*snprintf)(char *str, size_t size, const char *format, ...); -int (*sscanf)(const char *str, const char *format, ...); -char *(*strchr)(const char *s, int c); -char *(*strrchr)(const char *s, int c); - -void (*srand)(unsigned int seed); -int (*rand)(void); - -char *(*asctime)(const struct tm *tm); -char *(*asctime_r)(const struct tm *tm, char *buf); -char *(*ctime)(const time_t *timep); -char *(*ctime_r)(const time_t *timep, char *buf); -struct tm *(*gmtime)(const time_t *timep); -struct tm *(*gmtime_r)(const time_t *timep, struct tm *result); -struct tm *(*localtime)(const time_t *timep); -struct tm *(*localtime_r)(const time_t *timep, struct tm *result); -time_t (*mktime)(struct tm *tm); - -DIR *(*opendir)(const char *filename); -struct dirent *(*readdir)(DIR *dirp); -int (*readdir_r)(DIR *dirp, struct dirent *entry, struct dirent **result); -long (*telldir)(const DIR *dirp); -void (*seekdir)(DIR *dirp, long loc); -void (*rewinddir)(DIR *dirp); -int (*closedir)(DIR *dirp); -int (*dirfd)(DIR *dirp); - - -void initLibc(void) { - int libc = sceKernelLoadStartModule("libSceLibcInternal.sprx", 0, NULL, 0, 0, 0); - - RESOLVE(libc, malloc); - RESOLVE(libc, free); - RESOLVE(libc, calloc); - RESOLVE(libc, realloc); - RESOLVE(libc, memset); - RESOLVE(libc, memcpy); - RESOLVE(libc, memcmp); - RESOLVE(libc, strcpy); - RESOLVE(libc, strncpy); - RESOLVE(libc, strcat); - RESOLVE(libc, strncat); - RESOLVE(libc, strlen); - RESOLVE(libc, strcmp); - RESOLVE(libc, strncmp); - RESOLVE(libc, sprintf); - RESOLVE(libc, snprintf); - RESOLVE(libc, sscanf); - RESOLVE(libc, strchr); - RESOLVE(libc, strrchr); - - RESOLVE(libc, srand); - RESOLVE(libc, rand); - - RESOLVE(libc, asctime); - RESOLVE(libc, asctime_r); - RESOLVE(libc, ctime); - RESOLVE(libc, ctime_r); - RESOLVE(libc, gmtime); - RESOLVE(libc, gmtime_r); - RESOLVE(libc, localtime); - RESOLVE(libc, localtime_r); - RESOLVE(libc, mktime); - - RESOLVE(libc, opendir); - RESOLVE(libc, readdir); - RESOLVE(libc, readdir_r); - RESOLVE(libc, telldir); - RESOLVE(libc, seekdir); - RESOLVE(libc, rewinddir); - RESOLVE(libc, closedir); - RESOLVE(libc, dirfd); -} diff --git a/libPS4/source/module.c b/libPS4/source/module.c index 0ef85fb..d6e0106 100644 --- a/libPS4/source/module.c +++ b/libPS4/source/module.c @@ -3,8 +3,6 @@ #include "module.h" -int (*sceSysmoduleLoadModule)(int id); - SYSCALL(getFunctionAddressByName, 591); SYSCALL(getLoadedModules, 592); @@ -20,10 +18,3 @@ int loadModule(const char *name, int *idDestination) { int unloadModule(int id) { return syscall(595, id, 0, 0); } - -void initModule(void) { - int libModule = sceKernelLoadStartModule("libSceSysmodule.sprx", 0, NULL, 0, 0, 0); - - // Just use sceKernelLoadStartModule instead - RESOLVE(libModule, sceSysmoduleLoadModule); -} diff --git a/libPS4/source/network.c b/libPS4/source/network.c deleted file mode 100644 index 0f4506b..0000000 --- a/libPS4/source/network.c +++ /dev/null @@ -1,57 +0,0 @@ -#include "kernel.h" -#include "module.h" - -#include "network.h" - -int (*sceNetSocket)(const char *, int, int, int); -int (*sceNetSocketClose)(int); -int (*sceNetConnect)(int, struct sockaddr *, int); -int (*sceNetSend)(int, const void *, size_t, int); -int (*sceNetBind)(int, struct sockaddr *, int); -int (*sceNetListen)(int, int); -int (*sceNetAccept)(int, struct sockaddr *, unsigned int *); -int (*sceNetRecv)(int, void *, size_t, int); -int (*sceNetSocketAbort)(int , int ); - -int (*sceNetGetsockname)(int, struct sockaddr *, unsigned int *); -int (*sceNetGetsockopt)(int s, int level, int optname, void *restrict optval, socklen_t *restrict optlen); -int (*sceNetSetsockopt)(int s, int level, int optname, const void *optval, socklen_t optlen); - -const char (*sceNetInetNtop)(int af, const void *src, char *dst, int size); -int (*sceNetInetPton)(int af, const char *src, void *dst); - -uint64_t (*sceNetHtonll)(uint64_t host64); -uint32_t (*sceNetHtonl)(uint32_t host32); -uint16_t (*sceNetHtons)(uint16_t host16); -uint64_t (*sceNetNtohll)(uint64_t net64); -uint32_t (*sceNetNtohl)(uint32_t net32); -uint16_t (*sceNetNtohs)(uint16_t net16); - -void initNetwork(void) { - int libNet = sceKernelLoadStartModule("libSceNet.sprx", 0, NULL, 0, 0, 0); - - RESOLVE(libNet, sceNetSocket); - RESOLVE(libNet, sceNetSocketClose); - RESOLVE(libNet, sceNetConnect); - RESOLVE(libNet, sceNetSend); - RESOLVE(libNet, sceNetBind); - RESOLVE(libNet, sceNetListen); - RESOLVE(libNet, sceNetAccept); - RESOLVE(libNet, sceNetRecv); - RESOLVE(libNet, sceNetSocketAbort); - - - RESOLVE(libNet, sceNetGetsockname); - RESOLVE(libNet, sceNetGetsockopt); - RESOLVE(libNet, sceNetSetsockopt); - - RESOLVE(libNet, sceNetInetNtop); - RESOLVE(libNet, sceNetInetPton); - - RESOLVE(libNet, sceNetHtonll); - RESOLVE(libNet, sceNetHtonl); - RESOLVE(libNet, sceNetHtons); - RESOLVE(libNet, sceNetNtohll); - RESOLVE(libNet, sceNetNtohl); - RESOLVE(libNet, sceNetNtohs); -} diff --git a/libPS4/source/pad.c b/libPS4/source/pad.c deleted file mode 100644 index c4cda30..0000000 --- a/libPS4/source/pad.c +++ /dev/null @@ -1,22 +0,0 @@ -#include "kernel.h" -#include "module.h" - -#include "pad.h" - -int (*scePadInit)(void); -int (*scePadOpen)(int userID, int, int, void *); -int (*scePadClose)(int handle); -int (*scePadRead)(int handle, void *data, int count); -int (*scePadReadState)(int handle, void *data); - -void initPad(void) { - int libPad = sceKernelLoadStartModule("libScePad.sprx", 0, NULL, 0, 0, 0); - - RESOLVE(libPad, scePadInit); - RESOLVE(libPad, scePadOpen); - RESOLVE(libPad, scePadClose); - RESOLVE(libPad, scePadRead); - RESOLVE(libPad, scePadReadState); - - scePadInit(); -} diff --git a/libPS4/source/pthread.c b/libPS4/source/pthread.c deleted file mode 100644 index c525dcf..0000000 --- a/libPS4/source/pthread.c +++ /dev/null @@ -1,39 +0,0 @@ -#include "kernel.h" -#include "module.h" - -#include "pthread.h" - -int (*scePthreadCreate)(ScePthread *thread, const ScePthreadAttr *attr, void *(*entry) (void *), void *arg, const char *name); -void (*scePthreadExit)(void *value); -int (*scePthreadDetach)(ScePthread thread); -int (*scePthreadJoin)(ScePthread thread, void **value_ptr); -void (*scePthreadYield)(void); -ScePthread (*scePthreadSelf)(void); -int (*scePthreadCancel)(ScePthread thread); - -int (*scePthreadMutexInit)(ScePthreadMutex *mutex, const ScePthreadMutexattr *attr, const char *name); -int (*scePthreadMutexDestroy)(ScePthreadMutex *mutex); -int (*scePthreadMutexLock)(ScePthreadMutex *mutex); -int (*scePthreadMutexTrylock)(ScePthreadMutex *mutex); -int (*scePthreadMutexTimedlock)(ScePthreadMutex *mutex, SceKernelUseconds usec); -int (*scePthreadMutexUnlock)(ScePthreadMutex *mutex); - -void initPthread(void) { - int libkernel; - loadModule("libkernel.sprx", &libkernel); - - RESOLVE(libkernel, scePthreadCreate); - RESOLVE(libkernel, scePthreadExit); - RESOLVE(libkernel, scePthreadDetach); - RESOLVE(libkernel, scePthreadJoin); - RESOLVE(libkernel, scePthreadYield); - RESOLVE(libkernel, scePthreadSelf); - RESOLVE(libkernel, scePthreadCancel); - - RESOLVE(libkernel, scePthreadMutexInit); - RESOLVE(libkernel, scePthreadMutexDestroy); - RESOLVE(libkernel, scePthreadMutexLock); - RESOLVE(libkernel, scePthreadMutexTrylock); - RESOLVE(libkernel, scePthreadMutexTimedlock); - RESOLVE(libkernel, scePthreadMutexUnlock); -} diff --git a/libPS4/source/usb.c b/libPS4/source/usb.c deleted file mode 100644 index 3c35f42..0000000 --- a/libPS4/source/usb.c +++ /dev/null @@ -1,60 +0,0 @@ -#include "kernel.h" -#include "module.h" - -#include "usb.h" - -int (*sceUsbdInit)(void); -void (*sceUsbdExit)(void); - -ssize_t (*sceUsbdGetDeviceList)(libusb_device ***list); -void (*sceUsbdFreeDeviceList)(libusb_device **list, int unrefDevices); - -int (*sceUsbdGetDeviceDescriptor)(libusb_device *device, libusb_device_descriptor *desc); - -int (*sceUsbdOpen)(libusb_device *dev, libusb_device_handle **devh); -libusb_device_handle *(*sceUsbdOpenDeviceWithVidPid)(unsigned short vendorId, unsigned short productId); -void (*sceUsbdClose)(libusb_device_handle *devh); - -int (*sceUsbdSetInterfaceAltSetting)(libusb_device_handle *dev, int interface_number, int alternate_setting); -int (*sceUsbdClearHalt)(libusb_device_handle *devh, unsigned char endpoint); -int (*sceUsbdResetDevice)(libusb_device_handle *devh); -int (*sceUsbdCheckConnected)(libusb_device_handle *devh); - -int (*sceUsbdControlTransfer)(libusb_device_handle *devh, uint8_t bmRequestType, uint8_t bRequest, uint16_t wValue, uint16_t wIndex, unsigned char *data, uint16_t wLength, unsigned int timeout); -int (*sceUsbdBulkTransfer)(struct libusb_device_handle *devh, unsigned char endpoint, unsigned char *data, int length, int *transferred, unsigned int timeout); -int (*sceUsbdInterruptTransfer)(struct libusb_device_handle *devh, unsigned char endpoint, unsigned char *data, int length, int *transferred, unsigned int timeout); - -int (*sceUsbdGetActiveConfigDescriptor)(libusb_device *dev, struct libusb_config_descriptor **config); -int (*sceUsbdGetConfigDescriptor)(libusb_device *dev, uint8_t config_index, struct libusb_config_descriptor **config); -int (*sceUsbdGetConfigDescriptorByValue)(libusb_device *dev, uint8_t bConfigurationValue, struct libusb_config_descriptor **config); -void (*sceUsbdFreeConfigDescriptor)(struct libusb_config_descriptor *config); - -void initUsb(void) { - int libUsb = sceKernelLoadStartModule("libSceUsbd.sprx", 0, NULL, 0, 0, 0); - - RESOLVE(libUsb, sceUsbdInit); - RESOLVE(libUsb, sceUsbdExit); - - RESOLVE(libUsb, sceUsbdGetDeviceList); - RESOLVE(libUsb, sceUsbdFreeDeviceList); - - RESOLVE(libUsb, sceUsbdGetDeviceDescriptor); - - RESOLVE(libUsb, sceUsbdOpen); - RESOLVE(libUsb, sceUsbdOpenDeviceWithVidPid); - RESOLVE(libUsb, sceUsbdClose); - - RESOLVE(libUsb, sceUsbdSetInterfaceAltSetting); - RESOLVE(libUsb, sceUsbdClearHalt); - RESOLVE(libUsb, sceUsbdResetDevice); - RESOLVE(libUsb, sceUsbdCheckConnected); - - RESOLVE(libUsb, sceUsbdControlTransfer); - RESOLVE(libUsb, sceUsbdBulkTransfer); - RESOLVE(libUsb, sceUsbdInterruptTransfer); - - RESOLVE(libUsb, sceUsbdGetActiveConfigDescriptor); - RESOLVE(libUsb, sceUsbdGetConfigDescriptor); - RESOLVE(libUsb, sceUsbdGetConfigDescriptorByValue); - RESOLVE(libUsb, sceUsbdFreeConfigDescriptor); -} From 0ed433c8c6ca827fe5f78d402e7d5c2c46c00647 Mon Sep 17 00:00:00 2001 From: 173210 Date: Wed, 16 Dec 2015 16:06:11 +0900 Subject: [PATCH 2/5] Add const qualifiers to function pointers --- libPS4/include/camera.h | 20 +++++------ libPS4/include/kernel.h | 16 ++++----- libPS4/include/libc.h | 76 ++++++++++++++++++++-------------------- libPS4/include/module.h | 2 +- libPS4/include/network.h | 46 ++++++++++++------------ libPS4/include/pad.h | 10 +++--- libPS4/include/pthread.h | 26 +++++++------- libPS4/include/usb.h | 36 +++++++++---------- 8 files changed, 116 insertions(+), 116 deletions(-) diff --git a/libPS4/include/camera.h b/libPS4/include/camera.h index a9f9d89..2c5bb73 100644 --- a/libPS4/include/camera.h +++ b/libPS4/include/camera.h @@ -35,13 +35,13 @@ typedef struct SceCameraConfig { uint32_t unknown[100]; //0x4 } SceCameraConfig; -extern int (*sceCameraOpen)(int userid, int type, int index, void *); -extern int (*sceCameraClose)(int handle); -extern int (*sceCameraIsAttached)(int index); -extern int (*sceCameraGetFrameData)(int handle, SceCameraFrameData *frame); -extern int (*sceCameraStart)(int handle, SceCameraStartParameter *param); -extern int (*sceCameraStop)(int handle); -extern int (*sceCameraGetDeviceInfo)(int handle, SceCameraDeviceInfo *info); -extern int (*sceCameraGetDeviceConfig)(int handle, SceCameraConfig *config); -extern int (*sceCameraGetConfig)(int handle, SceCameraConfig *config); -extern int (*sceCameraSetConfig)(int handle, SceCameraConfig *config); +extern int (* const sceCameraOpen)(int userid, int type, int index, void *); +extern int (* const sceCameraClose)(int handle); +extern int (* const sceCameraIsAttached)(int index); +extern int (* const sceCameraGetFrameData)(int handle, SceCameraFrameData *frame); +extern int (* const sceCameraStart)(int handle, SceCameraStartParameter *param); +extern int (* const sceCameraStop)(int handle); +extern int (* const sceCameraGetDeviceInfo)(int handle, SceCameraDeviceInfo *info); +extern int (* const sceCameraGetDeviceConfig)(int handle, SceCameraConfig *config); +extern int (* const sceCameraGetConfig)(int handle, SceCameraConfig *config); +extern int (* const sceCameraSetConfig)(int handle, SceCameraConfig *config); diff --git a/libPS4/include/kernel.h b/libPS4/include/kernel.h index 8a80a2c..c0f1c1c 100644 --- a/libPS4/include/kernel.h +++ b/libPS4/include/kernel.h @@ -4,15 +4,15 @@ typedef struct timeval SceKernelTimeval; -extern int (*sceKernelLoadStartModule)(const char *name, size_t argc, const void *argv, unsigned int flags, int, int); +extern int (* const sceKernelLoadStartModule)(const char *name, size_t argc, const void *argv, unsigned int flags, int, int); -extern int (*sceKernelAllocateDirectMemory)(off_t searchStart, off_t searchEnd, size_t length, size_t alignment, int type, off_t *physicalAddressDestination); -extern int (*sceKernelMapDirectMemory)(void **addr, size_t length, int protection, int flags, off_t start, size_t alignment); +extern int (* const sceKernelAllocateDirectMemory)(off_t searchStart, off_t searchEnd, size_t length, size_t alignment, int type, off_t *physicalAddressDestination); +extern int (* const sceKernelMapDirectMemory)(void **addr, size_t length, int protection, int flags, off_t start, size_t alignment); -extern unsigned int (*sceKernelSleep)(unsigned int seconds); -extern int (*sceKernelUsleep)(unsigned int microseconds); -extern int (*sceKernelGettimeofday)(SceKernelTimeval *tp); -extern uint64_t (*sceKernelGetProcessTime)(void); -extern int (*sceKernelGetCurrentCpu)(void); +extern unsigned int (* const sceKernelSleep)(unsigned int seconds); +extern int (* const sceKernelUsleep)(unsigned int microseconds); +extern int (* const sceKernelGettimeofday)(SceKernelTimeval *tp); +extern uint64_t (* const ceKernelGetProcessTime)(void); +extern int (* const sceKernelGetCurrentCpu)(void); int kill(int pid, int signum); diff --git a/libPS4/include/libc.h b/libPS4/include/libc.h index c26a8c5..9f2dfc5 100644 --- a/libPS4/include/libc.h +++ b/libPS4/include/libc.h @@ -5,44 +5,44 @@ typedef struct DIR DIR; -extern void *(*malloc)(size_t size); -extern void (*free)(void *ptr); -extern void *(*calloc)(size_t num, size_t size); -extern void *(*realloc)(void* ptr, size_t size); -extern void *(*memset)(void *destination, int value, size_t num); -extern void *(*memcpy)(void *destination, const void *source, size_t num); -extern int (*memcmp)(const void *s1, const void *s2, size_t n); -extern char *(*strcpy)(char *destination, const char *source); -extern char *(*strncpy)(char *destination, const char *source, size_t num); -extern char *(*strcat)(char *dest, const char *src); -extern char *(*strncat)(char *dest, const char *src, size_t n); -extern size_t (*strlen)(const char *s); -extern int (*strcmp)(const char *s1, const char *s2); -extern int (*strncmp)(const char *s1, const char *s2, size_t n); -extern int (*sprintf)(char *str, const char *format, ...); -extern int (*snprintf)(char *str, size_t size, const char *format, ...); -extern int (*sscanf)(const char *str, const char *format, ...); -extern char *(*strchr)(const char *s, int c); -extern char *(*strrchr)(const char *s, int c); +extern void *(* const malloc)(size_t size); +extern void (* const free)(void *ptr); +extern void *(* const calloc)(size_t num, size_t size); +extern void *(* const realloc)(void* ptr, size_t size); +extern void *(* const memset)(void *destination, int value, size_t num); +extern void *(* const memcpy)(void *destination, const void *source, size_t num); +extern int (* const memcmp)(const void *s1, const void *s2, size_t n); +extern char *(* const strcpy)(char *destination, const char *source); +extern char *(* const strncpy)(char *destination, const char *source, size_t num); +extern char *(* const strcat)(char *dest, const char *src); +extern char *(* const strncat)(char *dest, const char *src, size_t n); +extern size_t (* const strlen)(const char *s); +extern int (* const strcmp)(const char *s1, const char *s2); +extern int (* const strncmp)(const char *s1, const char *s2, size_t n); +extern int (* const sprintf)(char *str, const char *format, ...); +extern int (* const snprintf)(char *str, size_t size, const char *format, ...); +extern int (* const sscanf)(const char *str, const char *format, ...); +extern char *(* const strchr)(const char *s, int c); +extern char *(* const strrchr)(const char *s, int c); -extern void (*srand)(unsigned int seed); -extern int (*rand)(void); +extern void (* const srand)(unsigned int seed); +extern int (* const rand)(void); -extern char *(*asctime)(const struct tm *tm); -extern char *(*asctime_r)(const struct tm *tm, char *buf); -extern char *(*ctime)(const time_t *timep); -extern char *(*ctime_r)(const time_t *timep, char *buf); -extern struct tm *(*gmtime)(const time_t *timep); -extern struct tm *(*gmtime_r)(const time_t *timep, struct tm *result); -extern struct tm *(*localtime)(const time_t *timep); -extern struct tm *(*localtime_r)(const time_t *timep, struct tm *result); -extern time_t (*mktime)(struct tm *tm); +extern char *(* const asctime)(const struct tm *tm); +extern char *(* const asctime_r)(const struct tm *tm, char *buf); +extern char *(* const ctime)(const time_t *timep); +extern char *(* const ctime_r)(const time_t *timep, char *buf); +extern struct tm *(* const gmtime)(const time_t *timep); +extern struct tm *(* const gmtime_r)(const time_t *timep, struct tm *result); +extern struct tm *(* const localtime)(const time_t *timep); +extern struct tm *(* const localtime_r)(const time_t *timep, struct tm *result); +extern time_t (* const mktime)(struct tm *tm); -extern DIR *(*opendir)(const char *filename); -extern struct dirent *(*readdir)(DIR *dirp); -extern int (*readdir_r)(DIR *dirp, struct dirent *entry, struct dirent **result); -extern long (*telldir)(const DIR *dirp); -extern void (*seekdir)(DIR *dirp, long loc); -extern void (*rewinddir)(DIR *dirp); -extern int (*closedir)(DIR *dirp); -extern int (*dirfd)(DIR *dirp); +extern DIR *(* const opendir)(const char *filename); +extern struct dirent *(* const readdir)(DIR *dirp); +extern int (* const readdir_r)(DIR *dirp, struct dirent *entry, struct dirent **result); +extern long (* const telldir)(const DIR *dirp); +extern void (* const seekdir)(DIR *dirp, long loc); +extern void (* const rewinddir)(DIR *dirp); +extern int (* const closedir)(DIR *dirp); +extern int (* const dirfd)(DIR *dirp); diff --git a/libPS4/include/module.h b/libPS4/include/module.h index ea23b23..90a7393 100644 --- a/libPS4/include/module.h +++ b/libPS4/include/module.h @@ -15,7 +15,7 @@ struct moduleInfo { char padding2[0x3c]; // 0x124 }; -extern int (*sceSysmoduleLoadModule)(int id); +extern int (* const sceSysmoduleLoadModule)(int id); int getFunctionAddressByName(int loadedModuleID, char *name, void *destination); int getLoadedModules(int *destination, int max, int *count); diff --git a/libPS4/include/network.h b/libPS4/include/network.h index 1df7d00..b170a78 100644 --- a/libPS4/include/network.h +++ b/libPS4/include/network.h @@ -42,26 +42,26 @@ struct sockaddr { typedef unsigned int socklen_t; -extern int (*sceNetSocket)(const char *, int, int, int); -extern int (*sceNetSocketClose)(int); -extern int (*sceNetConnect)(int, struct sockaddr *, int); -extern int (*sceNetSend)(int, const void *, size_t, int); -extern int (*sceNetBind)(int, struct sockaddr *, int); -extern int (*sceNetListen)(int, int); -extern int (*sceNetAccept)(int, struct sockaddr *, unsigned int *); -extern int (*sceNetRecv)(int, void *, size_t, int); -extern int (*sceNetSocketAbort)(int , int ); - -extern int (*sceNetGetsockname)(int, struct sockaddr *, unsigned int *); -extern int (*sceNetGetsockopt)(int s, int level, int optname, void *restrict optval, socklen_t *restrict optlen); -extern int (*sceNetSetsockopt)(int s, int level, int optname, const void *optval, socklen_t optlen); - -extern const char (*sceNetInetNtop)(int af, const void *src, char *dst, int size); -extern int (*sceNetInetPton)(int af, const char *src, void *dst); - -extern uint64_t (*sceNetHtonll)(uint64_t host64); -extern uint32_t (*sceNetHtonl)(uint32_t host32); -extern uint16_t (*sceNetHtons)(uint16_t host16); -extern uint64_t (*sceNetNtohll)(uint64_t net64); -extern uint32_t (*sceNetNtohl)(uint32_t net32); -extern uint16_t (*sceNetNtohs)(uint16_t net16); +extern int (* const sceNetSocket)(const char *, int, int, int); +extern int (* const sceNetSocketClose)(int); +extern int (* const sceNetConnect)(int, struct sockaddr *, int); +extern int (* const sceNetSend)(int, const void *, size_t, int); +extern int (* const sceNetBind)(int, struct sockaddr *, int); +extern int (* const sceNetListen)(int, int); +extern int (* const sceNetAccept)(int, struct sockaddr *, unsigned int *); +extern int (* const sceNetRecv)(int, void *, size_t, int); +extern int (* const sceNetSocketAbort)(int , int ); + +extern int (* const sceNetGetsockname)(int, struct sockaddr *, unsigned int *); +extern int (* const sceNetGetsockopt)(int s, int level, int optname, void *restrict optval, socklen_t *restrict optlen); +extern int (* const sceNetSetsockopt)(int s, int level, int optname, const void *optval, socklen_t optlen); + +extern const char (* const sceNetInetNtop)(int af, const void *src, char *dst, int size); +extern int (* const sceNetInetPton)(int af, const char *src, void *dst); + +extern uint64_t (* const sceNetHtonll)(uint64_t host64); +extern uint32_t (* const sceNetHtonl)(uint32_t host32); +extern uint16_t (* const sceNetHtons)(uint16_t host16); +extern uint64_t (* const sceNetNtohll)(uint64_t net64); +extern uint32_t (* const sceNetNtohl)(uint32_t net32); +extern uint16_t (* const sceNetNtohs)(uint16_t net16); diff --git a/libPS4/include/pad.h b/libPS4/include/pad.h index dc7d369..a9a6cdf 100644 --- a/libPS4/include/pad.h +++ b/libPS4/include/pad.h @@ -1,7 +1,7 @@ #pragma once -extern int (*scePadInit)(void); -extern int (*scePadOpen)(int userID, int, int, void *); -extern int (*scePadClose)(int handle); -extern int (*scePadRead)(int handle, void *data, int count); -extern int (*scePadReadState)(int handle, void *data); +extern int (* const scePadInit)(void); +extern int (* const scePadOpen)(int userID, int, int, void *); +extern int (* const scePadClose)(int handle); +extern int (* const scePadRead)(int handle, void *data, int count); +extern int (* const scePadReadState)(int handle, void *data); diff --git a/libPS4/include/pthread.h b/libPS4/include/pthread.h index 701800f..221e477 100644 --- a/libPS4/include/pthread.h +++ b/libPS4/include/pthread.h @@ -6,17 +6,17 @@ typedef void *ScePthreadAttr; typedef void *ScePthreadMutex; typedef void *ScePthreadMutexattr; -extern int (*scePthreadCreate)(ScePthread *thread, const ScePthreadAttr *attr, void *(*entry)(void *), void *arg, const char *name); -extern void (*scePthreadExit)(void *value); -extern int (*scePthreadDetach)(ScePthread thread); -extern int (*scePthreadJoin)(ScePthread thread, void **value_ptr); -extern void (*scePthreadYield)(void); -extern ScePthread (*scePthreadSelf)(void); -extern int (*scePthreadCancel)(ScePthread thread); +extern int (* const scePthreadCreate)(ScePthread *thread, const ScePthreadAttr *attr, void *(*entry)(void *), void *arg, const char *name); +extern void (* const scePthreadExit)(void *value); +extern int (* const scePthreadDetach)(ScePthread thread); +extern int (* const scePthreadJoin)(ScePthread thread, void **value_ptr); +extern void (* const scePthreadYield)(void); +extern ScePthread (* const scePthreadSelf)(void); +extern int (* const scePthreadCancel)(ScePthread thread); -extern int (*scePthreadMutexInit)(ScePthreadMutex *mutex, const ScePthreadMutexattr *attr, const char *name); -extern int (*scePthreadMutexDestroy)(ScePthreadMutex *mutex); -extern int (*scePthreadMutexLock)(ScePthreadMutex *mutex); -extern int (*scePthreadMutexTrylock)(ScePthreadMutex *mutex); -extern int (*scePthreadMutexTimedlock)(ScePthreadMutex *mutex, SceKernelUseconds usec); -extern int (*scePthreadMutexUnlock)(ScePthreadMutex *mutex); +extern int (* const scePthreadMutexInit)(ScePthreadMutex *mutex, const ScePthreadMutexattr *attr, const char *name); +extern int (* const scePthreadMutexDestroy)(ScePthreadMutex *mutex); +extern int (* const scePthreadMutexLock)(ScePthreadMutex *mutex); +extern int (* const scePthreadMutexTrylock)(ScePthreadMutex *mutex); +extern int (* const scePthreadMutexTimedlock)(ScePthreadMutex *mutex, SceKernelUseconds usec); +extern int (* const scePthreadMutexUnlock)(ScePthreadMutex *mutex); diff --git a/libPS4/include/usb.h b/libPS4/include/usb.h index f821573..603cf33 100644 --- a/libPS4/include/usb.h +++ b/libPS4/include/usb.h @@ -176,28 +176,28 @@ struct libusb_config_descriptor { typedef struct libusb_device libusb_device; typedef struct libusb_device_handle libusb_device_handle; -extern int (*sceUsbdInit)(void); -extern void (*sceUsbdExit)(void); +extern int (* const sceUsbdInit)(void); +extern void (* const sceUsbdExit)(void); -extern ssize_t (*sceUsbdGetDeviceList)(libusb_device ***list); -extern void (*sceUsbdFreeDeviceList)(libusb_device **list, int unrefDevices); +extern ssize_t (* const sceUsbdGetDeviceList)(libusb_device ***list); +extern void (* const sceUsbdFreeDeviceList)(libusb_device **list, int unrefDevices); -extern int (*sceUsbdGetDeviceDescriptor)(libusb_device *device, libusb_device_descriptor *desc); +extern int (* const sceUsbdGetDeviceDescriptor)(libusb_device *device, libusb_device_descriptor *desc); -extern int (*sceUsbdOpen)(libusb_device *dev, libusb_device_handle **devh); +extern int (* const sceUsbdOpen)(libusb_device *dev, libusb_device_handle **devh); extern libusb_device_handle *(*sceUsbdOpenDeviceWithVidPid)(unsigned short vendorId, unsigned short productId); -extern void (*sceUsbdClose)(libusb_device_handle *devh); +extern void (* const sceUsbdClose)(libusb_device_handle *devh); -extern int (*sceUsbdSetInterfaceAltSetting)(libusb_device_handle *dev, int interface_number, int alternate_setting); -extern int (*sceUsbdClearHalt)(libusb_device_handle *devh, unsigned char endpoint); -extern int (*sceUsbdResetDevice)(libusb_device_handle *devh); -extern int (*sceUsbdCheckConnected)(libusb_device_handle *devh); +extern int (* const sceUsbdSetInterfaceAltSetting)(libusb_device_handle *dev, int interface_number, int alternate_setting); +extern int (* const sceUsbdClearHalt)(libusb_device_handle *devh, unsigned char endpoint); +extern int (* const sceUsbdResetDevice)(libusb_device_handle *devh); +extern int (* const sceUsbdCheckConnected)(libusb_device_handle *devh); -extern int (*sceUsbdControlTransfer)(libusb_device_handle *devh, uint8_t bmRequestType, uint8_t bRequest, uint16_t wValue, uint16_t wIndex, unsigned char *data, uint16_t wLength, unsigned int timeout); -extern int (*sceUsbdBulkTransfer)(struct libusb_device_handle *devh, unsigned char endpoint, unsigned char *data, int length, int *transferred, unsigned int timeout); -extern int (*sceUsbdInterruptTransfer)(struct libusb_device_handle *devh, unsigned char endpoint, unsigned char *data, int length, int *transferred, unsigned int timeout); +extern int (* const sceUsbdControlTransfer)(libusb_device_handle *devh, uint8_t bmRequestType, uint8_t bRequest, uint16_t wValue, uint16_t wIndex, unsigned char *data, uint16_t wLength, unsigned int timeout); +extern int (* const sceUsbdBulkTransfer)(struct libusb_device_handle *devh, unsigned char endpoint, unsigned char *data, int length, int *transferred, unsigned int timeout); +extern int (* const sceUsbdInterruptTransfer)(struct libusb_device_handle *devh, unsigned char endpoint, unsigned char *data, int length, int *transferred, unsigned int timeout); -extern int (*sceUsbdGetActiveConfigDescriptor)(libusb_device *dev, struct libusb_config_descriptor **config); -extern int (*sceUsbdGetConfigDescriptor)(libusb_device *dev, uint8_t config_index, struct libusb_config_descriptor **config); -extern int (*sceUsbdGetConfigDescriptorByValue)(libusb_device *dev, uint8_t bConfigurationValue, struct libusb_config_descriptor **config); -extern void (*sceUsbdFreeConfigDescriptor)(struct libusb_config_descriptor *config); +extern int (* const sceUsbdGetActiveConfigDescriptor)(libusb_device *dev, struct libusb_config_descriptor **config); +extern int (* const sceUsbdGetConfigDescriptor)(libusb_device *dev, uint8_t config_index, struct libusb_config_descriptor **config); +extern int (* const sceUsbdGetConfigDescriptorByValue)(libusb_device *dev, uint8_t bConfigurationValue, struct libusb_config_descriptor **config); +extern void (* const sceUsbdFreeConfigDescriptor)(struct libusb_config_descriptor *config); From f572dc7b1fffab75a0cda3c3124bfa83f4125e58 Mon Sep 17 00:00:00 2001 From: 173210 Date: Thu, 17 Dec 2015 09:38:45 +0900 Subject: [PATCH 3/5] Fix imports target definition --- libPS4/Makefile | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/libPS4/Makefile b/libPS4/Makefile index 63b50a1..bb8fa4a 100644 --- a/libPS4/Makefile +++ b/libPS4/Makefile @@ -16,6 +16,10 @@ OBJS := $(patsubst $(SDIR)/%.c, build/%.o, $(CFILES)) \ TARGET = $(shell basename $(CURDIR)).a +all: $(TARGET) + +include import.mk + $(TARGET): $(ODIR) $(OBJS) $(AR) rcs $@ $(OBJS) @@ -35,5 +39,3 @@ $(ODIR): clean: rm -f $(TARGET) $(ODIR)/*.o - -include import.mk From 32df2fcd3e5ac7527368f61d619b19d8b83ce05f Mon Sep 17 00:00:00 2001 From: 173210 Date: Thu, 17 Dec 2015 09:39:06 +0900 Subject: [PATCH 4/5] Remove all files in build directory --- libPS4/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libPS4/Makefile b/libPS4/Makefile index bb8fa4a..443fc68 100644 --- a/libPS4/Makefile +++ b/libPS4/Makefile @@ -38,4 +38,4 @@ $(ODIR): .PHONY: clean clean: - rm -f $(TARGET) $(ODIR)/*.o + rm -Rf $(TARGET) $(ODIR)/* From 24dfd9fae31305458062f9a9fb8f1550a64dd0fa Mon Sep 17 00:00:00 2001 From: 173210 Date: Thu, 17 Dec 2015 09:40:21 +0900 Subject: [PATCH 5/5] Use sceKernelLoadStartModule Use sceKernelLoadStartModule for loading modules except libkernel. --- libPS4/crt0.c | 10 +++++++++- libPS4/import.mk | 10 +++++----- libPS4/import/camera.mk | 2 +- libPS4/import/kernel.mk | 7 +++---- libPS4/import/libc.mk | 2 +- libPS4/import/module.S | 4 ++++ libPS4/import/module.mk | 2 +- libPS4/import/network.mk | 2 +- libPS4/import/pad.mk | 2 +- libPS4/import/usb.mk | 2 +- libPS4/include/kernel.h | 2 +- 11 files changed, 28 insertions(+), 17 deletions(-) diff --git a/libPS4/crt0.c b/libPS4/crt0.c index d3d3dec..e10b780 100644 --- a/libPS4/crt0.c +++ b/libPS4/crt0.c @@ -10,6 +10,10 @@ extern union module __moduleBtm[]; extern void *__stubTop[]; extern void *__stubBtm[]; +extern union module __libkernel; +int (* sceKernelLoadStartModule)(const char *name, + size_t argc, const void *argv, unsigned int flags, int, int); + int _main(int argc, char *argv[]); static void loadModules() @@ -17,10 +21,14 @@ static void loadModules() union module *p; int id; + loadModule(__libkernel.s, &__libkernel.id); + getFunctionAddressByName(__libkernel.id, + "sceKernelLoadStartModule", sceKernelLoadStartModule); + for (p = __moduleTop; p != __moduleBtm; p++) { loadModule(p->s, &id); unloadModule(id); - loadModule(p->s, &p->id); + p->id = sceKernelLoadStartModule(p->s, 0, NULL, 0, 0, 0); } } diff --git a/libPS4/import.mk b/libPS4/import.mk index 34e31ca..0340591 100644 --- a/libPS4/import.mk +++ b/libPS4/import.mk @@ -3,20 +3,20 @@ $(ODIR)/import: define MODULE_TARGET $(ODIR)/import/import_$(1).o: import/module.S $(ODIR)/import - $(COMPILE.c) -DMODULE_SYMBOL=$(2) -DMODULE_PATH=$(3) $$< -o $$@ + $(COMPILE.c) $(2) $$< -o $$@ endef define STUB_TARGET $(ODIR)/import/import_$(1).o: import/stub.S $(ODIR)/import - $(COMPILE.c) -DMODULE_SYMBOL=$(2) -DFUNCTION=$(3) $$< -o $$@ + $(COMPILE.c) $(2) -DFUNCTION=$(3) $$< -o $$@ endef define IMPORT -OBJS += $(addsuffix .o,$(addprefix $(ODIR)/import/import_,$(1) $(addprefix $(1)_,$(4)))) +OBJS += $(addsuffix .o,$(addprefix $(ODIR)/import/import_,$(1) $(addprefix $(1)_,$(3)))) -$(call MODULE_TARGET,$(1),$(2),$(3)) -$(foreach function,$(4),$(call STUB_TARGET,$(1)_$(function),$(2),$(function))) +$(call MODULE_TARGET,$(1),$(2)) +$(foreach function,$(3),$(call STUB_TARGET,$(1)_$(function),$(2),$(function))) endef include import/camera.mk diff --git a/libPS4/import/camera.mk b/libPS4/import/camera.mk index 691ac95..65083f9 100644 --- a/libPS4/import/camera.mk +++ b/libPS4/import/camera.mk @@ -1,4 +1,4 @@ -$(eval $(call IMPORT,camera,__libSceCamera,\"libSceCamera.sprx\", \ +$(eval $(call IMPORT,camera,-DMODULE_SYMBOL=__libSceCamera -DMODULE_PATH=\"libSceCamera.sprx\", \ sceCameraOpen sceCameraClose sceCameraIsAttached sceCameraGetFrameData \ sceCameraStart sceCameraStop sceCameraGetDeviceInfo sceCameraGetDeviceConfig \ sceCameraGetConfig sceCameraSetConfig)) diff --git a/libPS4/import/kernel.mk b/libPS4/import/kernel.mk index 7866602..06dcd49 100644 --- a/libPS4/import/kernel.mk +++ b/libPS4/import/kernel.mk @@ -1,7 +1,6 @@ -$(eval $(call IMPORT,kernel,__libkernel,\"libkernel.sprx\", \ - sceKernelLoadStartModule sceKernelAllocateDirectMemory \ - sceKernelMapDirectMemory sceKernelSleep \ - sceKernelUsleep sceKernelGettimeofday \ +$(eval $(call IMPORT,kernel,-DMODULE_MANUAL -DMODULE_SYMBOL=__libkernel -DMODULE_PATH=\"libkernel.sprx\", \ + sceKernelAllocateDirectMemory sceKernelMapDirectMemory \ + sceKernelSleep sceKernelUsleep sceKernelGettimeofday \ sceKernelGetProcessTime sceKernelGetCurrentCpu \ \ scePthreadCreate scePthreadExit scePthreadDetach scePthreadJoin \ diff --git a/libPS4/import/libc.mk b/libPS4/import/libc.mk index c50b024..ac6a85a 100644 --- a/libPS4/import/libc.mk +++ b/libPS4/import/libc.mk @@ -1,4 +1,4 @@ -$(eval $(call IMPORT,libc,__libSceLibcInternal,\"libSceLibcInternal.sprx\", \ +$(eval $(call IMPORT,libc,-DMODULE_SYMBOL=__libSceLibcInternal -DMODULE_PATH=\"libSceLibcInternal.sprx\", \ malloc free calloc realloc memset memcpy memcmp strcpy strncpy \ strcat strncat strlen strcmp strncmp sprintf snprintf sscanf \ strchr strrchr srand rand asctime asctime_r ctime ctime_r \ diff --git a/libPS4/import/module.S b/libPS4/import/module.S index dabc67f..04fd943 100644 --- a/libPS4/import/module.S +++ b/libPS4/import/module.S @@ -1,4 +1,8 @@ +#ifdef MODULE_ANUAL + .data +#else .section .data.module, "aw" +#endif .align 8 .global MODULE_SYMBOL .type MODULE_SYMBOL, @common diff --git a/libPS4/import/module.mk b/libPS4/import/module.mk index 9206cb4..f9f4462 100644 --- a/libPS4/import/module.mk +++ b/libPS4/import/module.mk @@ -1,3 +1,3 @@ # Just use sceKernelLoadStartModule instead -$(eval $(call IMPORT,module,__libSceSysmodule,\"libSceSysmodule.sprx\", \ +$(eval $(call IMPORT,module,-DMODULE_SYMBOL=__libSceSysmodule -DMODULE_PATH=\"libSceSysmodule.sprx\", \ sceSysmoduleLoadModule)) diff --git a/libPS4/import/network.mk b/libPS4/import/network.mk index e16f2c3..a3ad350 100644 --- a/libPS4/import/network.mk +++ b/libPS4/import/network.mk @@ -1,4 +1,4 @@ -$(eval $(call IMPORT,network,__libSceNet,\"libSceNet.sprx\", \ +$(eval $(call IMPORT,network,-DMODULE_SYMBOL=__libSceNet -DMODULE_PATH=\"libSceNet.sprx\", \ sceNetSocket sceNetSocketClose sceNetConnect sceNetSend sceNetBind \ sceNetListen sceNetAccept sceNetRecv sceNetSocketAbort \ sceNetGetsockname sceNetGetsockopt sceNetSetsockopt sceNetInetNtop \ diff --git a/libPS4/import/pad.mk b/libPS4/import/pad.mk index b1dbe6a..01ff9e2 100644 --- a/libPS4/import/pad.mk +++ b/libPS4/import/pad.mk @@ -1,2 +1,2 @@ -$(eval $(call IMPORT,pad,__libScePad,\"libScePad.sprx\", \ +$(eval $(call IMPORT,pad,-DMODULE_SYMBOL=__libScePad -DMODULE_PATH=\"libScePad.sprx\", \ scePadInit scePadOpen scePadClose scePadRead scePadReadState)) diff --git a/libPS4/import/usb.mk b/libPS4/import/usb.mk index 3cf3c70..283c026 100644 --- a/libPS4/import/usb.mk +++ b/libPS4/import/usb.mk @@ -1,4 +1,4 @@ -$(eval $(call IMPORT,usb,__libSceUsbd,\"libSceUsbd.sprx\", \ +$(eval $(call IMPORT,usb,-DMODULE_SYMBOL=__libSceUsbd -DMODULE_PATH=\"libSceUsbd.sprx\", \ sceUsbdInit sceUsbdExit sceUsbdGetDeviceList sceUsbdFreeDeviceList \ sceUsbdGetDeviceDescriptor sceUsbdOpen sceUsbdOpenDeviceWithVidPid \ sceUsbdClose sceUsbdSetInterfaceAltSetting sceUsbdClearHalt \ diff --git a/libPS4/include/kernel.h b/libPS4/include/kernel.h index c0f1c1c..2514bb1 100644 --- a/libPS4/include/kernel.h +++ b/libPS4/include/kernel.h @@ -4,7 +4,7 @@ typedef struct timeval SceKernelTimeval; -extern int (* const sceKernelLoadStartModule)(const char *name, size_t argc, const void *argv, unsigned int flags, int, int); +extern int (* sceKernelLoadStartModule)(const char *name, size_t argc, const void *argv, unsigned int flags, int, int); extern int (* const sceKernelAllocateDirectMemory)(off_t searchStart, off_t searchEnd, size_t length, size_t alignment, int type, off_t *physicalAddressDestination); extern int (* const sceKernelMapDirectMemory)(void **addr, size_t length, int protection, int flags, off_t start, size_t alignment);