Merge pull request #250 from fjtrujy/improveLibCWeakSuport

Add options to disable some `newlib`functionalities
This commit is contained in:
Diamond Rivero
2025-02-06 15:45:00 +08:00
committed by GitHub
8 changed files with 103 additions and 0 deletions

View File

@@ -178,6 +178,7 @@ int __path_absolute(const char *in, char *out, int len)
#ifdef F___init_cwd
/* Set the current working directory (CWD) to the path where the module was launched. */
__attribute__((weak))
void __init_cwd(char *argv_0)
{
if (argv_0 != NULL) {

View File

@@ -92,6 +92,7 @@ int pipe(int fildes[2])
#endif
#ifdef F___pipe_close
__attribute__((weak))
int __pipe_close(int fd)
{
int ret = 0;
@@ -124,6 +125,7 @@ int __pipe_close(int fd)
#endif
#ifdef F___pipe_nonblocking_read
__attribute__((weak))
int __pipe_nonblocking_read(int fd, void *buf, size_t len)
{
int ret;
@@ -180,6 +182,7 @@ int __pipe_nonblocking_read(int fd, void *buf, size_t len)
#endif
#ifdef F___pipe_read
__attribute__((weak))
int __pipe_read(int fd, void *buf, size_t len)
{
int ret;
@@ -241,6 +244,7 @@ int __pipe_read(int fd, void *buf, size_t len)
#endif
#ifdef F___pipe_write
__attribute__((weak))
int __pipe_write(int fd, const void *buf, size_t len)
{
int ret;
@@ -286,6 +290,7 @@ int __pipe_write(int fd, const void *buf, size_t len)
#endif
#ifdef F___pipe_nonblocking_write
__attribute__((weak))
int __pipe_nonblocking_write(int fd, const void *buf, size_t len)
{
int ret;

View File

@@ -53,6 +53,7 @@ int socket(int domain, int type, int protocol)
them in and have expanded socket capability. */
#ifdef F___socket_close
__attribute__((weak))
int __socket_close(int sock)
{
int ret = 0;
@@ -170,6 +171,7 @@ int listen(int s, int backlog)
#endif
#ifdef F_recv
__attribute__((weak))
ssize_t recv(int s, void *buf, size_t len, int flags)
{
int ret;
@@ -212,6 +214,7 @@ ssize_t recvfrom(int s, void *buf, size_t len, int flags, struct sockaddr *from,
#endif
#ifdef F_send
__attribute__((weak))
ssize_t send(int s, const void *buf, size_t len, int flags)
{
int ret;
@@ -275,6 +278,7 @@ int getsockopt(int s, int level, int optname, void *optval, socklen_t *optlen)
#endif
#ifdef F_setsockopt
__attribute__((weak))
int setsockopt(int s, int level, int optname, const void *optval, socklen_t optlen)
{
int ret;

View File

@@ -56,6 +56,7 @@ SAMPLES = \
kernel/regenum \
kernel/systimer \
kernel/sysevent \
libcglue/light_elf \
mp3 \
ms/callback \
nand/dumpipl \

View File

@@ -53,6 +53,7 @@ SAMPLES = \
kernel/regenum \
kernel/systimer \
kernel/sysevent \
libcglue/light_elf \
mp3 \
ms/callback \
nand/dumpipl \

View File

@@ -0,0 +1,16 @@
TARGET = light_size
OBJS = main.o
INCDIR =
CFLAGS = -Os -Wall -fdata-sections -ffunction-sections
CXXFLAGS = $(CFLAGS) -fno-exceptions -fno-rtti
ASFLAGS = $(CFLAGS)
LIBDIR =
LDFLAGS = -s
EXTRA_TARGETS = EBOOT.PBP
PSP_EBOOT_TITLE = Light Hello World
PSPSDK=$(shell psp-config --pspsdk-path)
include $(PSPSDK)/lib/build.mak

View File

@@ -0,0 +1,44 @@
/*
* PSP Software Development Kit - https://github.com/pspdev
* -----------------------------------------------------------------------
* Licensed under the BSD license, see LICENSE in PSPSDK root for details.
*
*
* Sample program to demonstrate a minimalistic Hello World program.
* The main scope here is to show how we can disable newlib features if we don't need them.
*/
#include <stdio.h>
// Specific psp headers
#include <pspkernel.h>
#include <pspdebug.h>
#include <pspdisplay.h>
#include <pspkernel.h>
#include <pspmoduleinfo.h>
#include <sys/socket.h>
#include <errno.h>
// We won't fully disable newlib as we are using printf
// However we can disable timezone, pthreads, pipe and socket support
PSP_DISABLE_NEWLIB_PIPE_SUPPORT()
PSP_DISABLE_NEWLIB_SOCKET_SUPPORT()
PSP_DISABLE_NEWLIB_TIMEZONE_SUPPORT()
PSP_DISABLE_NEWLIB_CWD_SUPPORT()
PSP_DISABLE_AUTOSTART_PTHREAD()
// configure PSP stuff
#define VERS 1
#define REVS 0
PSP_MODULE_INFO("Light Hello World", PSP_MODULE_USER, VERS, REVS);
PSP_MAIN_THREAD_ATTR(PSP_THREAD_ATTR_USER);
int main(int argc, char** argv)
{
while(1) {
printf("Hello World!\n");
}
return 0;
}

View File

@@ -107,6 +107,37 @@ enum PspModuleInfoAttr
void __libcglue_init(int argc, char *argv[]) {} \
void __libcglue_deinit() {}
/* Disable using pipe suuport from POSIX functions. */
#define PSP_DISABLE_NEWLIB_PIPE_SUPPORT() \
static int __pipe_not_supported() { \
errno = ENOSYS; \
return -1; \
} \
int __pipe_close(int fd) { return __pipe_not_supported(); } \
int __pipe_nonblocking_read(int fd, void *buf, size_t len) { return __pipe_not_supported(); } \
int __pipe_read(int fd, void *buf, size_t len) { return __pipe_not_supported(); } \
int __pipe_write(int fd, const void *buf, size_t len) { return __pipe_not_supported(); } \
int __pipe_nonblocking_write(int fd, const void *buf, size_t len) { return __pipe_not_supported(); }
/* Disable using socket suuport from POSIX functions. */
#define PSP_DISABLE_NEWLIB_SOCKET_SUPPORT() \
static int __socket_not_supported() { \
errno = ENOSYS; \
return -1; \
} \
int __socket_close(int sock) { return __socket_not_supported(); } \
ssize_t recv(int s, void *buf, size_t len, int flags) { return __socket_not_supported(); } \
ssize_t send(int s, const void *buf, size_t len, int flags) { return __socket_not_supported(); } \
int setsockopt(int s, int level, int optname, const void *optval, socklen_t optlen) { return __socket_not_supported(); }
/* Disable the timezone support from newlib. */
#define PSP_DISABLE_NEWLIB_TIMEZONE_SUPPORT() \
void __timezone_update() { }
/* Disable the CWD support from newlib. */
#define PSP_DISABLE_NEWLIB_CWD_SUPPORT() \
void __init_cwd(char *argv_0) {}
/* Disable the auto start of pthread on init for reducing binary size if not used. */
#define PSP_DISABLE_AUTOSTART_PTHREAD() \
void __libpthreadglue_init() {}