nolibc pull request for v5.20 (or whatever)
This branch provides nolibc updates, perhaps most notably improved testing via the "cd tools/include/nolibc; make headers" command. This should be considered a smoke test. More thorough testing is in the works. -----BEGIN PGP SIGNATURE----- iQJHBAABCgAxFiEEbK7UrM+RBIrCoViJnr8S83LZ+4wFAmLgM6UTHHBhdWxtY2tA a2VybmVsLm9yZwAKCRCevxLzctn7jOrgD/sFQzRgKVS2v3/rb+9IyIqwuCrniSBe e7SLfteLNg3e02jMX/eVwx/X6D3C6Weg1ucLG/v0liyPV3ODiX/cSJK48q7wBnOR /TNtBEvtBsoY7LNORf53qAm3x//fCTTdw2qlkWM6RXcmeR0NH/PWfcas2hRJYhl8 hwkQaC9j2CcOLxgN75RcbOsmnV6x+CtLJkH/k2DlfHpnwoO953uyeG0wCAWzNzQn yFr3PXjOaJd2qNCPNsdMGpjush9tp+fm2E9gXiDj+vk49MWNgoM/nWQe/p7GB5V9 YWKEMudpVbkxXvT6EFj+ctGS7RVvYYnhjicZvVEkZEtszx3muQLcuSOE+p9KQ7v+ mRGyzvhNu7ZyhMSZWA1Qf5pqiu6L3XTp672RMsYcP4keqN5kC/A5hbNt8qGybEPg PXaQVZQpV15z7gluEM8FhUPbUL3J9PZsTgwPEzjgt3lyDdmE+KszHQCSD/UyN//8 WZJ/gwweQeTtLz/U+i2dGiT5tWjQ8sWg32AobzbylkyX7D1qDqUu0GYai8dPfbWO y7vbn9IB+uL1c2MFiO3jJkYCY7UoGESNd2j0SFdNPWnZee5FeXht3SIHaqMOhnqF Oguigt5SUd3/jh5dzMgQPahAH0tKm1n/+W7jBi2ieV1Lz4dKpS8xjMhmmT+D/SaT M7C8+63JeQwY8A== =sLEE -----END PGP SIGNATURE----- Merge tag 'nolibc.2022.07.27a' of git://git.kernel.org/pub/scm/linux/kernel/git/paulmck/linux-rcu Pull nolibc updates from Paul McKenney: "This provides nolibc updates, perhaps most notably improved testing via the 'cd tools/include/nolibc; make headers' command. This should be considered a smoke test. More thorough testing is in the works" * tag 'nolibc.2022.07.27a' of git://git.kernel.org/pub/scm/linux/kernel/git/paulmck/linux-rcu: tools/nolibc: add a help target to list supported targets tools/nolibc: make the default target build the headers tools/nolibc: fix the makefile to also work as "make -C tools ..." tools/nolibc/stdio: Add format attribute to enable printf warnings tools/nolibc/stdlib: Support overflow checking for older compiler versions
This commit is contained in:
commit
b069122256
|
@ -78,6 +78,9 @@ bpf/%: FORCE
|
|||
libapi: FORCE
|
||||
$(call descend,lib/api)
|
||||
|
||||
nolibc: FORCE
|
||||
$(call descend,include/nolibc)
|
||||
|
||||
nolibc_%: FORCE
|
||||
$(call descend,include/nolibc,$(patsubst nolibc_%,%,$@))
|
||||
|
||||
|
|
|
@ -7,13 +7,46 @@ ifeq ($(srctree),)
|
|||
srctree := $(patsubst %/tools/include/,%,$(dir $(CURDIR)))
|
||||
endif
|
||||
|
||||
# when run as make -C tools/ nolibc_<foo> the arch is not set
|
||||
ifeq ($(ARCH),)
|
||||
include $(srctree)/scripts/subarch.include
|
||||
ARCH = $(SUBARCH)
|
||||
endif
|
||||
|
||||
# OUTPUT is only set when run from the main makefile, otherwise
|
||||
# it defaults to this nolibc directory.
|
||||
OUTPUT ?= $(CURDIR)/
|
||||
|
||||
ifeq ($(V),1)
|
||||
Q=
|
||||
else
|
||||
Q=@
|
||||
endif
|
||||
|
||||
nolibc_arch := $(patsubst arm64,aarch64,$(ARCH))
|
||||
arch_file := arch-$(nolibc_arch).h
|
||||
all_files := ctype.h errno.h nolibc.h signal.h std.h stdio.h stdlib.h string.h \
|
||||
sys.h time.h types.h unistd.h
|
||||
|
||||
# install all headers needed to support a bare-metal compiler
|
||||
all:
|
||||
all: headers
|
||||
|
||||
install: help
|
||||
|
||||
help:
|
||||
@echo "Supported targets under nolibc:"
|
||||
@echo " all call \"headers\""
|
||||
@echo " clean clean the sysroot"
|
||||
@echo " headers prepare a sysroot in tools/include/nolibc/sysroot"
|
||||
@echo " headers_standalone like \"headers\", and also install kernel headers"
|
||||
@echo " help this help"
|
||||
@echo ""
|
||||
@echo "These targets may also be called from tools as \"make nolibc_<target>\"."
|
||||
@echo ""
|
||||
@echo "Currently using the following variables:"
|
||||
@echo " ARCH = $(ARCH)"
|
||||
@echo " OUTPUT = $(OUTPUT)"
|
||||
@echo ""
|
||||
|
||||
# Note: when ARCH is "x86" we concatenate both x86_64 and i386
|
||||
headers:
|
||||
|
@ -36,7 +69,7 @@ headers:
|
|||
|
||||
headers_standalone: headers
|
||||
$(Q)$(MAKE) -C $(srctree) headers
|
||||
$(Q)$(MAKE) -C $(srctree) headers_install INSTALL_HDR_PATH=$(OUTPUT)/sysroot
|
||||
$(Q)$(MAKE) -C $(srctree) headers_install INSTALL_HDR_PATH=$(OUTPUT)sysroot
|
||||
|
||||
clean:
|
||||
$(call QUIET_CLEAN, nolibc) rm -rf "$(OUTPUT)sysroot"
|
||||
|
|
|
@ -273,7 +273,7 @@ int vfprintf(FILE *stream, const char *fmt, va_list args)
|
|||
return written;
|
||||
}
|
||||
|
||||
static __attribute__((unused))
|
||||
static __attribute__((unused, format(printf, 2, 3)))
|
||||
int fprintf(FILE *stream, const char *fmt, ...)
|
||||
{
|
||||
va_list args;
|
||||
|
@ -285,7 +285,7 @@ int fprintf(FILE *stream, const char *fmt, ...)
|
|||
return ret;
|
||||
}
|
||||
|
||||
static __attribute__((unused))
|
||||
static __attribute__((unused, format(printf, 1, 2)))
|
||||
int printf(const char *fmt, ...)
|
||||
{
|
||||
va_list args;
|
||||
|
|
|
@ -128,10 +128,9 @@ void *malloc(size_t len)
|
|||
static __attribute__((unused))
|
||||
void *calloc(size_t size, size_t nmemb)
|
||||
{
|
||||
void *orig;
|
||||
size_t res = 0;
|
||||
size_t x = size * nmemb;
|
||||
|
||||
if (__builtin_expect(__builtin_mul_overflow(nmemb, size, &res), 0)) {
|
||||
if (__builtin_expect(size && ((x / size) != nmemb), 0)) {
|
||||
SET_ERRNO(ENOMEM);
|
||||
return NULL;
|
||||
}
|
||||
|
@ -140,7 +139,7 @@ void *calloc(size_t size, size_t nmemb)
|
|||
* No need to zero the heap, the MAP_ANONYMOUS in malloc()
|
||||
* already does it.
|
||||
*/
|
||||
return malloc(res);
|
||||
return malloc(x);
|
||||
}
|
||||
|
||||
static __attribute__((unused))
|
||||
|
|
Loading…
Reference in New Issue