diff options
Diffstat (limited to 'libc/include')
-rw-r--r-- | libc/include/android/api-level.h | 52 | ||||
-rw-r--r-- | libc/include/android/fdsan.h | 3 | ||||
-rw-r--r-- | libc/include/android/legacy_unistd_inlines.h | 38 | ||||
-rw-r--r-- | libc/include/bits/glibc-syscalls.h | 3 | ||||
-rw-r--r-- | libc/include/bits/swab.h | 53 | ||||
-rw-r--r-- | libc/include/math.h | 8 | ||||
-rw-r--r-- | libc/include/pty.h | 7 | ||||
-rw-r--r-- | libc/include/sys/procfs.h | 16 | ||||
-rw-r--r-- | libc/include/sys/thread_properties.h | 97 | ||||
-rw-r--r-- | libc/include/unistd.h | 4 | ||||
-rw-r--r-- | libc/include/utmp.h | 80 |
11 files changed, 312 insertions, 49 deletions
diff --git a/libc/include/android/api-level.h b/libc/include/android/api-level.h index 50cb61a6b..bcddddd59 100644 --- a/libc/include/android/api-level.h +++ b/libc/include/android/api-level.h @@ -29,6 +29,13 @@ #pragma once /** + * @defgroup apilevels API Levels + * + * Defines functions and constants for working with Android API levels. + * @{ + */ + +/** * @file android/api-level.h * @brief Functions and constants for dealing with multiple API levels. * @@ -50,9 +57,40 @@ __BEGIN_DECLS /* This #ifndef should never be true except when doxygen is generating docs. */ #ifndef __ANDROID_API__ /** - * `__ANDROID_API__` is the API level being targeted. For the OS, - * this is `__ANDROID_API_FUTURE__`. For the NDK, this is set by the - * compiler system based on the API level you claimed to target. See + * `__ANDROID_API__` is the [API + * level](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels) + * this code is being built for. The resulting binaries are only guaranteed to + * be compatible with devices which have an API level greater than or equal to + * `__ANDROID_API__`. + * + * For NDK and APEX builds, this macro will always be defined. It is set + * automatically by Clang using the version suffix that is a part of the target + * name. For example, `__ANDROID_API__` will be 24 when Clang is given the + * argument `-target aarch64-linux-android24`. + * + * For non-APEX OS code, this defaults to __ANDROID_API_FUTURE__. + * + * The value of `__ANDROID_API__` can be compared to the named constants in + * `<android/api-level.h>`. + * + * The interpretation of `__ANDROID_API__` is similar to the AndroidManifest.xml + * `minSdkVersion`. In most cases `__ANDROID_API__` will be identical to + * `minSdkVersion`, but as it is a build time constant it is possible for + * library code to use a different value than the app it will be included in. + * When libraries and applications build for different API levels, the + * `minSdkVersion` of the application must be at least as high as the highest + * API level used by any of its libraries which are loaded unconditionally. + * + * Note that in some cases the resulting binaries may load successfully on + * devices with an older API level. That behavior should not be relied upon, + * even if you are careful to avoid using new APIs, as the toolchain may make + * use of new features by default. For example, additional FORTIFY features may + * implicitly make use of new APIs, SysV hashes may be omitted in favor of GNU + * hashes to improve library load times, or relocation packing may be enabled to + * reduce binary size. + * + * See android_get_device_api_level(), + * android_get_application_target_sdk_version() and * https://android.googlesource.com/platform/bionic/+/master/docs/defines.md. */ #define __ANDROID_API__ __ANDROID_API_FUTURE__ @@ -114,9 +152,9 @@ __BEGIN_DECLS #define __ANDROID_API_S__ 31 /** - * Returns the `targetSdkVersion` of the caller, or `__ANDROID_API_FUTURE__` - * if there is no known target SDK version (for code not running in the - * context of an app). + * Returns the `targetSdkVersion` of the caller, or `__ANDROID_API_FUTURE__` if + * there is no known target SDK version (for code not running in the context of + * an app). * * The returned values correspond to the named constants in `<android/api-level.h>`, * and is equivalent to the AndroidManifest.xml `targetSdkVersion`. @@ -148,3 +186,5 @@ int android_get_device_api_level() __INTRODUCED_IN(29); #endif __END_DECLS + +/** @} */ diff --git a/libc/include/android/fdsan.h b/libc/include/android/fdsan.h index 83b9318ba..e23de85d3 100644 --- a/libc/include/android/fdsan.h +++ b/libc/include/android/fdsan.h @@ -186,7 +186,8 @@ enum android_fdsan_error_level android_fdsan_get_error_level() __INTRODUCED_IN(2 * Set the error level and return the previous state. * * Error checking is automatically disabled in the child of a fork, to maintain - * compatibility with code that forks, blindly closes FDs, and then execs. + * compatibility with code that forks, closes all file descriptors, and then + * execs. * * In cases such as the zygote, where the child has no intention of calling * exec, call this function to reenable fdsan checks. diff --git a/libc/include/android/legacy_unistd_inlines.h b/libc/include/android/legacy_unistd_inlines.h new file mode 100644 index 000000000..4a5206b88 --- /dev/null +++ b/libc/include/android/legacy_unistd_inlines.h @@ -0,0 +1,38 @@ +/* + * Copyright (C) 2019 The Android Open Source Project + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#pragma once + +#include <sys/cdefs.h> + +#if __ANDROID_API__ < 28 + +#define __BIONIC_SWAB_INLINE static __inline +#include <bits/swab.h> + +#endif diff --git a/libc/include/bits/glibc-syscalls.h b/libc/include/bits/glibc-syscalls.h index 0e3014de6..71e67a395 100644 --- a/libc/include/bits/glibc-syscalls.h +++ b/libc/include/bits/glibc-syscalls.h @@ -186,6 +186,9 @@ #if defined(__NR_faccessat) #define SYS_faccessat __NR_faccessat #endif +#if defined(__NR_faccessat2) + #define SYS_faccessat2 __NR_faccessat2 +#endif #if defined(__NR_fadvise64) #define SYS_fadvise64 __NR_fadvise64 #endif diff --git a/libc/include/bits/swab.h b/libc/include/bits/swab.h new file mode 100644 index 000000000..63281b6e0 --- /dev/null +++ b/libc/include/bits/swab.h @@ -0,0 +1,53 @@ +/* + * Copyright (C) 2019 The Android Open Source Project + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#pragma once + +#include <stdint.h> +#include <sys/cdefs.h> +#include <sys/types.h> + +#if !defined(__BIONIC_SWAB_INLINE) +#define __BIONIC_SWAB_INLINE static __inline +#endif + +__BEGIN_DECLS + +__BIONIC_SWAB_INLINE void swab(const void* __void_src, void* __void_dst, ssize_t __byte_count) { + const uint8_t* __src = __BIONIC_CAST(static_cast, const uint8_t*, __void_src); + uint8_t* __dst = __BIONIC_CAST(static_cast, uint8_t*, __void_dst); + while (__byte_count > 1) { + uint8_t x = *__src++; + uint8_t y = *__src++; + *__dst++ = y; + *__dst++ = x; + __byte_count -= 2; + } +} + +__END_DECLS diff --git a/libc/include/math.h b/libc/include/math.h index 7efc83a31..8c084b2d1 100644 --- a/libc/include/math.h +++ b/libc/include/math.h @@ -10,12 +10,10 @@ */ /* - * from: @(#)fdlibm.h 5.1 93/09/24 - * $FreeBSD$ + * Originally based on fdlibm.h 5.1 via FreeBSD. */ -#ifndef _MATH_H_ -#define _MATH_H_ +#pragma once #include <sys/cdefs.h> #include <limits.h> @@ -408,5 +406,3 @@ void sincosl(long double __x, long double* __sin, long double* __cos); #endif __END_DECLS - -#endif diff --git a/libc/include/pty.h b/libc/include/pty.h index 90d6686c1..be447d6f8 100644 --- a/libc/include/pty.h +++ b/libc/include/pty.h @@ -49,16 +49,17 @@ __BEGIN_DECLS * * Available since API level 23. */ -int openpty(int* _Nonnull __master_fd, int* _Nonnull __slave_fd, char* _Nullable __slave_name, const struct termios* _Nullable __termios_ptr, const struct winsize* _Nullable __winsize_ptr) __INTRODUCED_IN(23); +int openpty(int* _Nonnull __pty_fd, int* _Nonnull __tty_fd, char* _Nullable __tty_name, const struct termios* _Nullable __termios_ptr, const struct winsize* _Nullable __winsize_ptr) __INTRODUCED_IN(23); /** * [forkpty(3)](http://man7.org/linux/man-pages/man3/forkpty.3.html) creates * a new process connected to a pseudoterminal from openpty(). * - * Returns 0 on success and returns -1 and sets `errno` on failure. + * Returns 0 in the child/the pid of the child in the parent on success, + * and returns -1 and sets `errno` on failure. * * Available since API level 23. */ -int forkpty(int* _Nonnull __master_fd, char* _Nullable __slave_name, const struct termios* _Nullable __termios_ptr, const struct winsize* _Nullable __winsize_ptr) __INTRODUCED_IN(23); +int forkpty(int* _Nonnull __parent_pty_fd, char* _Nullable __child_tty_name, const struct termios* _Nullable __termios_ptr, const struct winsize* _Nullable __winsize_ptr) __INTRODUCED_IN(23); __END_DECLS diff --git a/libc/include/sys/procfs.h b/libc/include/sys/procfs.h index 75a1e986e..a082e97e0 100644 --- a/libc/include/sys/procfs.h +++ b/libc/include/sys/procfs.h @@ -26,16 +26,24 @@ * SUCH DAMAGE. */ -#ifndef _SYS_PROCFS_H_ -#define _SYS_PROCFS_H_ +#pragma once #include <sys/cdefs.h> +#include <sys/ptrace.h> #include <sys/ucontext.h> __BEGIN_DECLS +#if defined(__arm__) +#define ELF_NGREG (sizeof(struct user_regs) / sizeof(elf_greg_t)) +#elif defined(__aarch64__) +#define ELF_NGREG (sizeof(struct user_pt_regs) / sizeof(elf_greg_t)) +#else +#define ELF_NGREG (sizeof(struct user_regs_struct) / sizeof(elf_greg_t)) +#endif + typedef unsigned long elf_greg_t; -typedef elf_greg_t elf_gregset_t[NGREG]; +typedef elf_greg_t elf_gregset_t[ELF_NGREG]; typedef fpregset_t elf_fpregset_t; @@ -58,5 +66,3 @@ struct elf_siginfo { #define ELF_PRARGSZ 80 __END_DECLS - -#endif diff --git a/libc/include/sys/thread_properties.h b/libc/include/sys/thread_properties.h new file mode 100644 index 000000000..b5d30c77e --- /dev/null +++ b/libc/include/sys/thread_properties.h @@ -0,0 +1,97 @@ +/* + * Copyright (C) 2020 The Android Open Source Project + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#pragma once + +/** + * @file thread_properties.h + * @brief Thread properties API. + * + * https://sourceware.org/glibc/wiki/ThreadPropertiesAPI + * API for querying various properties of the current thread, used mostly by + * the sanitizers. + * + * Available since API level 31. + * + */ + +#include <sys/cdefs.h> +#include <unistd.h> + +__BEGIN_DECLS + +/** + * Gets the bounds of static TLS for the current thread. + * + * Available since API level 31. + */ +void __libc_get_static_tls_bounds(void** __static_tls_begin, + void** __static_tls_end) __INTRODUCED_IN(31); + + +/** + * Registers callback to be called right before the thread is dead. + * The callbacks are chained, they are called in the order opposite to the order + * they were registered. + * + * The callbacks must be registered only before any threads were created. + * No signals may arrive during the calls to these callbacks. + * The callbacks may not access the thread's dynamic TLS because they will have + * been freed by the time these callbacks are invoked. + * + * Available since API level 31. + */ +void __libc_register_thread_exit_callback(void (*__cb)(void)) __INTRODUCED_IN(31); + +/** + * Iterates over all dynamic TLS chunks for the given thread. + * The thread should have been suspended. It is undefined-behaviour if there is concurrent + * modification of the target thread's dynamic TLS. + * + * Available since API level 31. + */ +void __libc_iterate_dynamic_tls(pid_t __tid, + void (*__cb)(void* __dynamic_tls_begin, + void* __dynamic_tls_end, + size_t __dso_id, + void* __arg), + void* __arg) __INTRODUCED_IN(31); + +/** + * Register on_creation and on_destruction callbacks, which will be called after a dynamic + * TLS creation and before a dynamic TLS destruction, respectively. + * + * Available since API level 31. + */ +void __libc_register_dynamic_tls_listeners( + void (*__on_creation)(void* __dynamic_tls_begin, + void* __dynamic_tls_end), + void (*__on_destruction)(void* __dynamic_tls_begin, + void* __dynamic_tls_end)) __INTRODUCED_IN(31); + +__END_DECLS diff --git a/libc/include/unistd.h b/libc/include/unistd.h index aaa8f221a..e36042187 100644 --- a/libc/include/unistd.h +++ b/libc/include/unistd.h @@ -313,7 +313,9 @@ int tcsetpgrp(int __fd, pid_t __pid); int getdomainname(char* __buf, size_t __buf_size) __INTRODUCED_IN(26); int setdomainname(const char* __name, size_t __n) __INTRODUCED_IN(26); +#if __ANDROID_API__ >= 28 void swab(const void* __src, void* __dst, ssize_t __byte_count) __INTRODUCED_IN(28); +#endif #if defined(__BIONIC_INCLUDE_FORTIFY_HEADERS) #define _UNISTD_H_ @@ -322,3 +324,5 @@ void swab(const void* __src, void* __dst, ssize_t __byte_count) __INTRODUCED_IN( #endif __END_DECLS + +#include <android/legacy_unistd_inlines.h> diff --git a/libc/include/utmp.h b/libc/include/utmp.h index 6a5251153..cb72ce235 100644 --- a/libc/include/utmp.h +++ b/libc/include/utmp.h @@ -25,8 +25,13 @@ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ -#ifndef _UTMP_H_ -#define _UTMP_H_ + +#pragma once + +/** + * @file utmp.h + * @brief POSIX login records. + */ #include <sys/cdefs.h> #include <sys/types.h> @@ -57,52 +62,71 @@ #define DEAD_PROCESS 8 #define ACCOUNTING 9 -struct lastlog -{ - time_t ll_time; - char ll_line[UT_LINESIZE]; - char ll_host[UT_HOSTSIZE]; +struct lastlog { + time_t ll_time; + char ll_line[UT_LINESIZE]; + char ll_host[UT_HOSTSIZE]; }; -struct exit_status -{ - short int e_termination; - short int e_exit; +struct exit_status { + short int e_termination; + short int e_exit; }; +struct utmp { + short int ut_type; + pid_t ut_pid; + char ut_line[UT_LINESIZE]; + char ut_id[4]; + char ut_user[UT_NAMESIZE]; + char ut_host[UT_HOSTSIZE]; -struct utmp -{ - short int ut_type; - pid_t ut_pid; - char ut_line[UT_LINESIZE]; - char ut_id[4]; - char ut_user[UT_NAMESIZE]; - char ut_host[UT_HOSTSIZE]; - - struct exit_status ut_exit; + struct exit_status ut_exit; - long int ut_session; - struct timeval ut_tv; + long int ut_session; + struct timeval ut_tv; - int32_t ut_addr_v6[4]; - char unsed[20]; + int32_t ut_addr_v6[4]; + char unused[20]; }; - #define ut_name ut_user #define ut_time ut_tv.tv_sec #define ut_addr ut_addr_v6[0] __BEGIN_DECLS +/** + * Does nothing. + */ int utmpname(const char* __path); +/** + * Does nothing. + */ void setutent(void); +/** + * Does nothing. + */ struct utmp* getutent(void); +/** + * Does nothing. + */ +struct utmp* pututline(const struct utmp* __entry); +/** + * Does nothing. + */ void endutent(void); +/** + * [login_tty(3)](https://www.man7.org/linux/man-pages/man3/login_tty.3.html) + * prepares for login on the given file descriptor. + * + * See also forkpty() which combines openpty(), fork(), and login_tty(). + * + * Returns 0 on success and returns -1 and sets `errno` on failure. + * + * Available since API level 23. + */ int login_tty(int __fd) __INTRODUCED_IN(23); __END_DECLS - -#endif /* _UTMP_H_ */ |