To optimize out calls to undefined functions in PBL at compile-time instead of link time, let's define stubs for the functions that are referenced in obj-pbl-y files, but inside function sections that are ultimately unreferenced. We don't use IS_PROPER here as VFS support is always available in barebox proper. Signed-off-by: Ahmad Fatoum <a.fatoum@xxxxxxxxxxxxxx> --- include/fcntl.h | 8 ++++++ include/libfile.h | 7 +++++ include/unistd.h | 72 +++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 87 insertions(+) diff --git a/include/fcntl.h b/include/fcntl.h index a746471411b5..f3694c2bba5f 100644 --- a/include/fcntl.h +++ b/include/fcntl.h @@ -3,6 +3,7 @@ #define __FCNTL_H #include <linux/types.h> +#include <errno.h> #define AT_FDCWD -100 /* Special value used to indicate openat should use the current @@ -38,7 +39,14 @@ #define O_TMPFILE (__O_TMPFILE | O_DIRECTORY) +#if IN_PROPER int openat(int dirfd, const char *pathname, int flags); +#else +static inline int openat(int dirfd, const char *pathname, int flags, ...) +{ + return -ENOSYS; +} +#endif static inline int open(const char *pathname, int flags, ...) { diff --git a/include/libfile.h b/include/libfile.h index f772ff8b6af2..bf775b022dc4 100644 --- a/include/libfile.h +++ b/include/libfile.h @@ -32,7 +32,14 @@ int copy_recursive(const char *src, const char *dst); int compare_file(const char *f1, const char *f2); +#if IN_PROPER int open_and_lseek(const char *filename, int mode, loff_t pos); +#else +static inline int open_and_lseek(const char *filename, int mode, loff_t pos) +{ + return -ENOSYS; +} +#endif /* Create a directory and its parents */ int make_directory(const char *pathname); diff --git a/include/unistd.h b/include/unistd.h index f3d2378687e4..aad67ad30f84 100644 --- a/include/unistd.h +++ b/include/unistd.h @@ -4,11 +4,13 @@ #include <linux/types.h> #include <fcntl.h> +#include <errno.h> #define RW_BUF_SIZE (unsigned)4096 struct stat; +#if IN_PROPER int unlinkat(int dirfd, const char *pathname, int flags); int close(int fd); int lstatat(int dirfd, const char *filename, struct stat *s); @@ -26,6 +28,76 @@ char *pushd(const char *dir); int popd(char *dir); const char *getcwd(void); int ftruncate(int fd, loff_t length); +#else +static inline int unlinkat(int dirfd, const char *pathname, int flags) +{ + return -ENOSYS; +} +static inline int close(int fd) +{ + return -ENOSYS; +} +static inline int lstatat(int dirfd, const char *filename, struct stat *s) +{ + return -ENOSYS; +} +static inline int statat(int dirfd, const char *filename, struct stat *s) +{ + return -ENOSYS; +} +static inline int fstat(int fd, struct stat *s) +{ + return -ENOSYS; +} +static inline ssize_t read(int fd, void *buf, size_t count) +{ + return -ENOSYS; +} +static inline ssize_t pread(int fd, void *buf, size_t count, loff_t offset) +{ + return -ENOSYS; +} +static inline ssize_t write(int fd, const void *buf, size_t count) +{ + return -ENOSYS; +} +static inline ssize_t pwrite(int fd, const void *buf, size_t count, loff_t offset) +{ + return -ENOSYS; +} +static inline loff_t lseek(int fildes, loff_t offset, int whence) +{ + return -ENOSYS; +} +static inline int symlink(const char *pathname, const char *newpath) +{ + return -ENOSYS; +} +static inline int readlinkat(int dirfd, const char *path, char *buf, size_t bufsiz) +{ + return -ENOSYS; +} +static inline int chdir(const char *pathname) +{ + return -ENOSYS; +} +static inline char *pushd(const char *dir) +{ + return NULL; +} +static inline int popd(char *dir) +{ + return -ENOSYS; +} +static inline const char *getcwd(void) +{ + return NULL; +} +static inline int ftruncate(int fd, loff_t length) +{ + return -ENOSYS; +} +#endif static inline int unlink(const char *pathname) { -- 2.39.5