mirror of
https://github.com/libretro/RetroArch
synced 2024-07-05 09:48:42 +00:00
[ORBIS] Use user_mem_sys library
This commit is contained in:
parent
8f81692b78
commit
05a03164bd
|
@ -16,8 +16,7 @@ PC_DEVELOPMENT_UDP_PORT = 18194
|
|||
|
||||
AUTH_INFO = 000000000000000000000000001C004000FF000000000080000000000000000000000000000000000000008000400040000000000000008000000000000000080040FFFF000000F000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
||||
|
||||
OBJ += memory/ps4/user_mem.o \
|
||||
deps/xxHash/xxhash.c \
|
||||
OBJ += deps/xxHash/xxhash.c \
|
||||
# input/drivers/ps4_input.o \
|
||||
# input/drivers_joypad/ps4_joypad.o \
|
||||
# audio/drivers/psp_audio.o \
|
||||
|
@ -116,8 +115,8 @@ STRIP := $(PREFIX)strip
|
|||
NM := $(PREFIX)nm
|
||||
LD := clang
|
||||
|
||||
LIBDIRS += -L. -Lcores -Lmemory/ps4 -Lbuild -L$(ORBISDEV)/usr/lib
|
||||
INCDIRS += -I. -Idefines -Imemory/ps4 -Ideps -Ideps/7zip -Ideps/libz -Ilibretro-common/include -Ideps/stb \
|
||||
LIBDIRS += -L. -Lcores -Lbuild -L$(ORBISDEV)/usr/lib
|
||||
INCDIRS += -I. -Idefines -Ideps -Ideps/7zip -Ideps/libz -Ilibretro-common/include -Ideps/stb \
|
||||
-Ilibretro-common/include/compat/zlib -Ideps/rcheevos/include -I$(ORBISDEV)/usr/include -I$(ORBISDEV)/usr/include/c++/v1 -I$(ORBISDEV)/usr/include/orbis
|
||||
|
||||
ARCHFLAGS += --target=x86_64-scei-ps4 -DORBIS -D__PS4__ -D_BSD_SOURCE
|
||||
|
@ -152,9 +151,9 @@ ifeq ($(WHOLE_ARCHIVE_LINK), 1)
|
|||
endif
|
||||
|
||||
|
||||
PS4_LIBS += -lkernel_stub -lSceLibcInternal_stub -lSceSysmodule_stub -lSceSystemService_stub -lSceNet_stub -lSceUserService_stub \
|
||||
-lScePigletv2VSH_stub -lSceVideoOut_stub -lSceGnmDriver_stub -lorbisGl2 -lorbis -lScePad_stub -lSceAudioOut_stub \
|
||||
-lSceIme_stub -lSceNetCtl_stub
|
||||
PS4_LIBS += -luser_mem_sys -lkernel_stub -lSceLibcInternal_stub -lSceSysmodule_stub -lSceSystemService_stub -lSceNet_stub \
|
||||
-lSceUserService_stub -lScePigletv2VSH_stub -lSceVideoOut_stub -lSceGnmDriver_stub -lorbisGl2 -lorbis -lScePad_stub \
|
||||
-lSceAudioOut_stub -lSceIme_stub -lSceNetCtl_stub
|
||||
|
||||
ifeq ($(HAVE_STATIC_DUMMY),1)
|
||||
LIBS := $(PS4_LIBS)
|
||||
|
|
|
@ -1,223 +0,0 @@
|
|||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdarg.h>
|
||||
#include <string.h>
|
||||
#include <defines/ps4_defines.h>
|
||||
#include "user_mem.h"
|
||||
|
||||
#include <orbis/libSceLibcInternal.h>
|
||||
#include <orbis/libkernel.h>
|
||||
|
||||
static OrbisMspace s_mspace = 0;
|
||||
static OrbisMallocManagedSize s_mmsize;
|
||||
static void *s_mem_start = 0;
|
||||
static size_t s_mem_size = MEM_SIZE;
|
||||
|
||||
int malloc_init(void)
|
||||
{
|
||||
int res;
|
||||
|
||||
if (s_mspace)
|
||||
return 0;
|
||||
|
||||
res = sceKernelReserveVirtualRange(&s_mem_start, MEM_SIZE, 0, MEM_ALIGN);
|
||||
if (res < 0)
|
||||
return 1;
|
||||
|
||||
res = sceKernelMapNamedSystemFlexibleMemory(&s_mem_start, MEM_SIZE, SCE_KERNEL_PROT_CPU_RW, SCE_KERNEL_MAP_FIXED, "User Mem");
|
||||
if (res < 0)
|
||||
return 1;
|
||||
|
||||
s_mspace = sceLibcMspaceCreate("User Mspace", s_mem_start, s_mem_size, 0);
|
||||
if (!s_mspace)
|
||||
return 1;
|
||||
|
||||
s_mmsize.sz = sizeof(s_mmsize);
|
||||
s_mmsize.ver = 1;
|
||||
res = sceLibcMspaceMallocStatsFast(s_mspace, &s_mmsize);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int malloc_finalize(void)
|
||||
{
|
||||
int res;
|
||||
|
||||
if (s_mspace)
|
||||
{
|
||||
res = sceLibcMspaceDestroy(s_mspace);
|
||||
if (res != 0)
|
||||
return 1;
|
||||
}
|
||||
|
||||
res = sceKernelReleaseFlexibleMemory(s_mem_start, s_mem_size);
|
||||
if (res < 0)
|
||||
return 1;
|
||||
|
||||
res = sceKernelMunmap(s_mem_start, s_mem_size);
|
||||
if (res < 0)
|
||||
return 1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void *malloc(size_t size)
|
||||
{
|
||||
if (!s_mspace)
|
||||
malloc_init();
|
||||
|
||||
return sceLibcMspaceMalloc(s_mspace, size);
|
||||
}
|
||||
|
||||
void free(void *ptr)
|
||||
{
|
||||
|
||||
if (!ptr || !s_mspace)
|
||||
return;
|
||||
|
||||
sceLibcMspaceFree(s_mspace, ptr);
|
||||
}
|
||||
|
||||
void *calloc(size_t nelem, size_t size)
|
||||
{
|
||||
if (!s_mspace)
|
||||
malloc_init();
|
||||
|
||||
return sceLibcMspaceCalloc(s_mspace, nelem, size);
|
||||
}
|
||||
|
||||
void *realloc(void *ptr, size_t size)
|
||||
{
|
||||
if (!s_mspace)
|
||||
malloc_init();
|
||||
|
||||
return sceLibcMspaceRealloc(s_mspace, ptr, size);
|
||||
}
|
||||
|
||||
void *memalign(size_t boundary, size_t size)
|
||||
{
|
||||
if (!s_mspace)
|
||||
malloc_init();
|
||||
|
||||
return sceLibcMspaceMemalign(s_mspace, boundary, size);
|
||||
}
|
||||
|
||||
int posix_memalign(void **ptr, size_t boundary, size_t size)
|
||||
{
|
||||
if (!s_mspace)
|
||||
malloc_init();
|
||||
|
||||
return sceLibcMspacePosixMemalign(s_mspace, ptr, boundary, size);
|
||||
}
|
||||
|
||||
void *reallocalign(void *ptr, size_t size, size_t boundary)
|
||||
{
|
||||
if (!s_mspace)
|
||||
malloc_init();
|
||||
|
||||
return sceLibcMspaceReallocalign(s_mspace, ptr, boundary, size);
|
||||
}
|
||||
|
||||
int malloc_stats(OrbisMallocManagedSize *mmsize)
|
||||
{
|
||||
if (!s_mspace)
|
||||
malloc_init();
|
||||
|
||||
return sceLibcMspaceMallocStats(s_mspace, mmsize);
|
||||
}
|
||||
|
||||
int malloc_stats_fast(OrbisMallocManagedSize *mmsize)
|
||||
{
|
||||
if (!s_mspace)
|
||||
malloc_init();
|
||||
|
||||
return sceLibcMspaceMallocStatsFast(s_mspace, mmsize);
|
||||
}
|
||||
|
||||
size_t malloc_usable_size(void *ptr)
|
||||
{
|
||||
if (!ptr)
|
||||
return 0;
|
||||
|
||||
return sceLibcMspaceMallocUsableSize(ptr);
|
||||
}
|
||||
|
||||
int vasprintf(char **bufp, const char *format, va_list ap)
|
||||
{
|
||||
va_list ap1;
|
||||
int bytes;
|
||||
char *p;
|
||||
|
||||
va_copy(ap1, ap);
|
||||
|
||||
bytes = vsnprintf(NULL, 0, format, ap1) + 1;
|
||||
va_end(ap1);
|
||||
|
||||
*bufp = p = malloc(bytes);
|
||||
if (!p)
|
||||
return -1;
|
||||
|
||||
return vsnprintf(p, bytes, format, ap);
|
||||
}
|
||||
|
||||
int asprintf(char **bufp, const char *format, ...)
|
||||
{
|
||||
va_list ap, ap1;
|
||||
int rv;
|
||||
int bytes;
|
||||
char *p;
|
||||
|
||||
va_start(ap, format);
|
||||
va_copy(ap1, ap);
|
||||
|
||||
bytes = vsnprintf(NULL, 0, format, ap1) + 1;
|
||||
va_end(ap1);
|
||||
|
||||
*bufp = p = malloc(bytes);
|
||||
if (!p)
|
||||
return -1;
|
||||
|
||||
rv = vsnprintf(p, bytes, format, ap);
|
||||
va_end(ap);
|
||||
|
||||
return rv;
|
||||
}
|
||||
|
||||
char *strdup(const char *s)
|
||||
{
|
||||
size_t len = strlen(s) + 1;
|
||||
void *new_s = malloc(sizeof(char) * len);
|
||||
|
||||
if (!new_s)
|
||||
return NULL;
|
||||
|
||||
return (char *)memcpy(new_s, s, len);
|
||||
}
|
||||
|
||||
char *strndup(const char *s, size_t n)
|
||||
{
|
||||
if (!s)
|
||||
return NULL;
|
||||
|
||||
char *result;
|
||||
size_t len = strnlen(s, n);
|
||||
|
||||
result = (char *)malloc(sizeof(char) * (len + 1));
|
||||
if (!result)
|
||||
return 0;
|
||||
|
||||
result[len] = '\0';
|
||||
return (char *)memcpy(result, s, len);
|
||||
}
|
||||
|
||||
void get_user_mem_size(size_t *max_mem, size_t *cur_mem)
|
||||
{
|
||||
int res;
|
||||
size_t size;
|
||||
|
||||
s_mmsize.sz = sizeof(s_mmsize);
|
||||
s_mmsize.ver = 1;
|
||||
res = sceLibcMspaceMallocStatsFast(s_mspace, &s_mmsize);
|
||||
*max_mem += s_mmsize.curSysSz;
|
||||
*cur_mem += s_mmsize.curSysSz - s_mmsize.curUseSz;
|
||||
}
|
||||
|
|
@ -1,37 +0,0 @@
|
|||
#ifndef _USER_MEM_H
|
||||
#define _USER_MEM_H
|
||||
|
||||
#define MEM_SIZE (0xA0000000) /* 2600 MiB */
|
||||
#define MEM_ALIGN (16UL * 1024)
|
||||
|
||||
#if defined(__cplusplus)
|
||||
extern "C" {
|
||||
#endif
|
||||
int malloc_init(void);
|
||||
int malloc_finalize(void);
|
||||
char *strdup(const char *s);
|
||||
char *strndup(const char *s, size_t n);
|
||||
int asprintf(char **bufp, const char *format, ...);
|
||||
int vasprintf(char **bufp, const char *format, va_list ap);
|
||||
void get_user_mem_size(size_t *max_mem, size_t *cur_mem);
|
||||
#if defined(__cplusplus)
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(__cplusplus)
|
||||
void *user_new(std::size_t size) throw(std::bad_alloc);
|
||||
void *user_new(std::size_t size, const std::nothrow_t& x) throw();
|
||||
void *user_new_array(std::size_t size) throw(std::bad_alloc);
|
||||
void *user_new_array(std::size_t size, const std::nothrow_t& x) throw();
|
||||
void user_delete(void *ptr) throw();
|
||||
void user_delete(void *ptr, const std::nothrow_t& x) throw();
|
||||
void user_delete_array(void *ptr) throw();
|
||||
void user_delete_array(void *ptr, const std::nothrow_t& x) throw();
|
||||
#if (__cplusplus >= 201402L) // C++14
|
||||
void user_delete(void *ptr, std::size_t size) throw();
|
||||
void user_delete(void *ptr, std::size_t size, const std::nothrow_t& x) throw();
|
||||
void user_delete_array(void *ptr, std::size_t size) throw();
|
||||
void user_delete_array(void *ptr, std::size_t size, const std::nothrow_t& x) throw();
|
||||
#endif // __cplusplus >= 201402L
|
||||
#endif // __cplusplus
|
||||
#endif // _USER_MEM_H
|
|
@ -1,175 +0,0 @@
|
|||
#include <new>
|
||||
#include <cstdlib>
|
||||
#include <cstdio>
|
||||
#include <cstring>
|
||||
#include <string>
|
||||
#include <memory>
|
||||
#include <algorithm>
|
||||
#include <sstream>
|
||||
#include <defines/ps4_defines.h>
|
||||
#include "user_mem.h"
|
||||
|
||||
void *user_new(std::size_t size) throw(std::bad_alloc)
|
||||
{
|
||||
void *ptr;
|
||||
|
||||
if (size == 0)
|
||||
size = 1;
|
||||
|
||||
while ((ptr = (void *)malloc(size)) == NULL)
|
||||
{
|
||||
std::new_handler handler = std::get_new_handler();
|
||||
|
||||
if (!handler)
|
||||
throw std::bad_alloc();
|
||||
else
|
||||
(*handler)();
|
||||
}
|
||||
return ptr;
|
||||
}
|
||||
|
||||
void *user_new(std::size_t size, const std::nothrow_t& x) throw()
|
||||
{
|
||||
void *ptr;
|
||||
(void)x;
|
||||
|
||||
if (size == 0)
|
||||
size = 1;
|
||||
|
||||
while ((ptr = (void *)malloc(size)) == NULL)
|
||||
{
|
||||
std::new_handler handler = std::get_new_handler();
|
||||
|
||||
if (!handler)
|
||||
return NULL;
|
||||
|
||||
try
|
||||
{
|
||||
(*handler)();
|
||||
}
|
||||
catch (std::bad_alloc)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
return ptr;
|
||||
}
|
||||
|
||||
void *user_new_array(std::size_t size) throw(std::bad_alloc)
|
||||
{
|
||||
return user_new(size);
|
||||
}
|
||||
|
||||
void *user_new_array(std::size_t size, const std::nothrow_t& x) throw()
|
||||
{
|
||||
return user_new(size, x);
|
||||
}
|
||||
|
||||
void user_delete(void *ptr) throw()
|
||||
{
|
||||
if (ptr != NULL)
|
||||
free(ptr);
|
||||
}
|
||||
|
||||
void user_delete(void *ptr, const std::nothrow_t& x) throw()
|
||||
{
|
||||
(void)x;
|
||||
if (ptr != NULL)
|
||||
free(ptr);
|
||||
}
|
||||
|
||||
void user_delete_array(void *ptr) throw()
|
||||
{
|
||||
user_delete(ptr);
|
||||
}
|
||||
|
||||
void user_delete_array(void *ptr, const std::nothrow_t& x) throw()
|
||||
{
|
||||
user_delete(ptr, x);
|
||||
}
|
||||
|
||||
void *operator new(std::size_t size) throw(std::bad_alloc)
|
||||
{
|
||||
return user_new(size);
|
||||
}
|
||||
|
||||
void *operator new(std::size_t size, const std::nothrow_t& x) throw()
|
||||
{
|
||||
return user_new(size, x);
|
||||
}
|
||||
|
||||
void *operator new[](std::size_t size) throw(std::bad_alloc)
|
||||
{
|
||||
return user_new_array(size);
|
||||
}
|
||||
|
||||
void *operator new[](std::size_t size, const std::nothrow_t& x) throw()
|
||||
{
|
||||
return user_new_array(size, x);
|
||||
}
|
||||
|
||||
void operator delete(void *ptr) throw()
|
||||
{
|
||||
user_delete(ptr);
|
||||
}
|
||||
|
||||
void operator delete(void *ptr, const std::nothrow_t& x) throw()
|
||||
{
|
||||
user_delete(ptr, x);
|
||||
}
|
||||
|
||||
void operator delete[](void *ptr) throw()
|
||||
{
|
||||
user_delete_array(ptr);
|
||||
}
|
||||
|
||||
void operator delete[](void *ptr, const std::nothrow_t& x) throw()
|
||||
{
|
||||
user_delete_array(ptr, x);
|
||||
}
|
||||
|
||||
#if (__cplusplus >= 201402L) // C++14
|
||||
void user_delete(void *ptr, std::size_t size) throw()
|
||||
{
|
||||
(void)size;
|
||||
if (ptr != NULL)
|
||||
free(ptr);
|
||||
}
|
||||
|
||||
void user_delete(void *ptr, std::size_t size, const std::nothrow_t& x) throw()
|
||||
{
|
||||
(void)x;
|
||||
if (ptr != NULL)
|
||||
free(ptr);
|
||||
}
|
||||
|
||||
void user_delete_array(void *ptr, std::size_t size) throw()
|
||||
{
|
||||
user_delete(ptr, size);
|
||||
}
|
||||
|
||||
void user_delete_array(void *ptr, std::size_t size, const std::nothrow_t& x) throw()
|
||||
{
|
||||
user_delete(ptr, size, x);
|
||||
}
|
||||
|
||||
void operator delete(void *ptr, std::size_t size) throw()
|
||||
{
|
||||
user_delete(ptr, size);
|
||||
}
|
||||
|
||||
void operator delete(void *ptr, std::size_t size, const std::nothrow_t& x) throw()
|
||||
{
|
||||
user_delete(ptr, size, x);
|
||||
}
|
||||
|
||||
void operator delete[](void *ptr, std::size_t size) throw()
|
||||
{
|
||||
user_delete_array(ptr, size);
|
||||
}
|
||||
|
||||
void operator delete[](void *ptr, std::size_t size, const std::nothrow_t& x) throw()
|
||||
{
|
||||
user_delete_array(ptr, size, x);
|
||||
}
|
||||
#endif // C++14
|
Loading…
Reference in New Issue
Block a user