From ed48398431afa477fc57fcabb6ae1f7d94df6012 Mon Sep 17 00:00:00 2001 From: Roland McGrath Date: Sat, 15 Feb 2025 16:32:30 -0800 Subject: [PATCH] [libc] Fill out generated malloc.h and related stdlib.h extensions (#127293) This updates the generated stdlib.h and malloc.h headers to include the subsets of extenion functions declared by glibc that are also supported by Scudo and that use only simple types. Scudo's extensions not declared by glibc are omitted. glibc's extensions not implemented by Scudo are omitted. The mallinfo and mallinfo2 functions are omitted (at least for now) since they need struct definitions for their return types. --- libc/include/malloc.yaml | 13 +++++++++++++ libc/include/stdlib-malloc.yaml | 28 ++++++++++++++++++++-------- libc/include/stdlib.yaml | 8 ++++++++ 3 files changed, 41 insertions(+), 8 deletions(-) diff --git a/libc/include/malloc.yaml b/libc/include/malloc.yaml index bf7678797c02..cd84723557bc 100644 --- a/libc/include/malloc.yaml +++ b/libc/include/malloc.yaml @@ -9,6 +9,12 @@ macros: - macro_name: M_PURGE_ALL macro_header: malloc-macros.h functions: + - name: malloc_usable_size + standards: + - gnu + return_type: size_t + arguments: + - type: void * - name: mallopt standards: - gnu @@ -16,3 +22,10 @@ functions: arguments: - type: int - type: int + - name: pvalloc + standards: + - bsd + - gnu + return_type: void * + arguments: + - type: size_t diff --git a/libc/include/stdlib-malloc.yaml b/libc/include/stdlib-malloc.yaml index 648a6e58a90a..51c11f5602e2 100644 --- a/libc/include/stdlib-malloc.yaml +++ b/libc/include/stdlib-malloc.yaml @@ -1,4 +1,10 @@ # This file has declarations that appear both in and in . +# These include the subset of GNU extensions that Scudo supports. +# +# Note: glibc's and both also have `reallocarray`, +# which Scudo does not support and is omitted here. (Each of those glibc +# headers also has related functions the other lacks, but those should be +# covered separately in stdlib.yaml and malloc.yaml instead.) functions: - name: aligned_alloc @@ -27,6 +33,13 @@ functions: return_type: void * arguments: - type: size_t + - name: memalign + standards: + - gnu + return_type: void * + arguments: + - type: size_t + - type: size_t - name: realloc standards: - stdc @@ -34,11 +47,10 @@ functions: arguments: - type: void * - type: size_t - -# Note: glibc's and both have these, which are -# currently missing here: -# - name: reallocarray -# - name: memalign -# - name: valloc -# Each of those glibc headers also has related functions the other lacks. -# Only the common subset is mentioned here for future consideration. + - name: valloc + standards: + - bsd + - gnu + return_type: void * + arguments: + - type: size_t diff --git a/libc/include/stdlib.yaml b/libc/include/stdlib.yaml index 6ada26f02017..8d2b3f357e1a 100644 --- a/libc/include/stdlib.yaml +++ b/libc/include/stdlib.yaml @@ -127,6 +127,14 @@ functions: arguments: - type: long long - type: long long + - name: posix_memalign + standards: + - posix + return_type: int + arguments: + - type: void ** + - type: size_t + - type: size_t - name: qsort standards: - stdc