Commit b0691222 authored by Linus Torvalds's avatar Linus Torvalds

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
parents 7d9d077c 4f8126f3
...@@ -78,6 +78,9 @@ bpf/%: FORCE ...@@ -78,6 +78,9 @@ bpf/%: FORCE
libapi: FORCE libapi: FORCE
$(call descend,lib/api) $(call descend,lib/api)
nolibc: FORCE
$(call descend,include/nolibc)
nolibc_%: FORCE nolibc_%: FORCE
$(call descend,include/nolibc,$(patsubst nolibc_%,%,$@)) $(call descend,include/nolibc,$(patsubst nolibc_%,%,$@))
......
...@@ -7,13 +7,46 @@ ifeq ($(srctree),) ...@@ -7,13 +7,46 @@ ifeq ($(srctree),)
srctree := $(patsubst %/tools/include/,%,$(dir $(CURDIR))) srctree := $(patsubst %/tools/include/,%,$(dir $(CURDIR)))
endif 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)) nolibc_arch := $(patsubst arm64,aarch64,$(ARCH))
arch_file := arch-$(nolibc_arch).h arch_file := arch-$(nolibc_arch).h
all_files := ctype.h errno.h nolibc.h signal.h std.h stdio.h stdlib.h string.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 sys.h time.h types.h unistd.h
# install all headers needed to support a bare-metal compiler # 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 # Note: when ARCH is "x86" we concatenate both x86_64 and i386
headers: headers:
...@@ -36,7 +69,7 @@ headers: ...@@ -36,7 +69,7 @@ headers:
headers_standalone: headers headers_standalone: headers
$(Q)$(MAKE) -C $(srctree) 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: clean:
$(call QUIET_CLEAN, nolibc) rm -rf "$(OUTPUT)sysroot" $(call QUIET_CLEAN, nolibc) rm -rf "$(OUTPUT)sysroot"
...@@ -273,7 +273,7 @@ int vfprintf(FILE *stream, const char *fmt, va_list args) ...@@ -273,7 +273,7 @@ int vfprintf(FILE *stream, const char *fmt, va_list args)
return written; return written;
} }
static __attribute__((unused)) static __attribute__((unused, format(printf, 2, 3)))
int fprintf(FILE *stream, const char *fmt, ...) int fprintf(FILE *stream, const char *fmt, ...)
{ {
va_list args; va_list args;
...@@ -285,7 +285,7 @@ int fprintf(FILE *stream, const char *fmt, ...) ...@@ -285,7 +285,7 @@ int fprintf(FILE *stream, const char *fmt, ...)
return ret; return ret;
} }
static __attribute__((unused)) static __attribute__((unused, format(printf, 1, 2)))
int printf(const char *fmt, ...) int printf(const char *fmt, ...)
{ {
va_list args; va_list args;
......
...@@ -128,10 +128,9 @@ void *malloc(size_t len) ...@@ -128,10 +128,9 @@ void *malloc(size_t len)
static __attribute__((unused)) static __attribute__((unused))
void *calloc(size_t size, size_t nmemb) void *calloc(size_t size, size_t nmemb)
{ {
void *orig; size_t x = size * nmemb;
size_t res = 0;
if (__builtin_expect(__builtin_mul_overflow(nmemb, size, &res), 0)) { if (__builtin_expect(size && ((x / size) != nmemb), 0)) {
SET_ERRNO(ENOMEM); SET_ERRNO(ENOMEM);
return NULL; return NULL;
} }
...@@ -140,7 +139,7 @@ void *calloc(size_t size, size_t nmemb) ...@@ -140,7 +139,7 @@ void *calloc(size_t size, size_t nmemb)
* No need to zero the heap, the MAP_ANONYMOUS in malloc() * No need to zero the heap, the MAP_ANONYMOUS in malloc()
* already does it. * already does it.
*/ */
return malloc(res); return malloc(x);
} }
static __attribute__((unused)) static __attribute__((unused))
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment