Add missing POSIX 2024 tests.

I'd already done some (such as qsort_r()), but hadn't systematically gone through the additions.

Change-Id: Ia8e848f2554c0096b6e399e13b88bee03cb9eb84
diff --git a/tests/headers/posix/dlfcn_h.c b/tests/headers/posix/dlfcn_h.c
index 4800075..e8dc648 100644
--- a/tests/headers/posix/dlfcn_h.c
+++ b/tests/headers/posix/dlfcn_h.c
@@ -36,6 +36,17 @@
   MACRO(RTLD_GLOBAL);
   MACRO(RTLD_LOCAL);
 
+#if !defined(__GLIBC__)  // Our glibc is too old.
+  TYPE(Dl_info);
+  STRUCT_MEMBER(Dl_info, const char*, dli_fname);
+  STRUCT_MEMBER(Dl_info, void*, dli_fbase);
+  STRUCT_MEMBER(Dl_info, const char*, dli_sname);
+  STRUCT_MEMBER(Dl_info, void*, dli_saddr);
+#endif
+
+#if !defined(__GLIBC__)  // Our glibc is too old.
+  FUNCTION(dladdr, int (*f)(const void*, Dl_info*));
+#endif
   FUNCTION(dlclose, int (*f)(void*));
   FUNCTION(dlerror, char* (*f)(void));
   FUNCTION(dlopen, void* (*f)(const char*, int));
diff --git a/tests/headers/posix/poll_h.c b/tests/headers/posix/poll_h.c
index 4fce5e5..505ba46 100644
--- a/tests/headers/posix/poll_h.c
+++ b/tests/headers/posix/poll_h.c
@@ -36,6 +36,11 @@
   STRUCT_MEMBER(struct pollfd, short, events);
   STRUCT_MEMBER(struct pollfd, short, revents);
 
+#if !defined(__GLIBC__)  // Our glibc is too old.
+  TYPE(sigset_t);
+  TYPE(struct timespec);
+#endif
+
   TYPE(nfds_t);
 
   MACRO(POLLIN);
@@ -50,4 +55,7 @@
   MACRO(POLLNVAL);
 
   FUNCTION(poll, int (*f)(struct pollfd[], nfds_t, int));
+#if !defined(__GLIBC__)  // Our glibc is too old.
+  FUNCTION(ppoll, int (*f)(struct pollfd[], nfds_t, const struct timespec*, const sigset_t*));
+#endif
 }
diff --git a/tests/headers/posix/pthread_h.c b/tests/headers/posix/pthread_h.c
index 4be822c..3713aff 100644
--- a/tests/headers/posix/pthread_h.c
+++ b/tests/headers/posix/pthread_h.c
@@ -116,6 +116,9 @@
   FUNCTION(pthread_cancel, int (*f)(pthread_t));
 #endif
   FUNCTION(pthread_cond_broadcast, int (*f)(pthread_cond_t*));
+#if !defined(__GLIBC__)  // Our glibc is too old.
+  FUNCTION(pthread_cond_clockwait, int (*f)(pthread_cond_t*, pthread_mutex_t*, clockid_t, const struct timespec*));
+#endif
   FUNCTION(pthread_cond_destroy, int (*f)(pthread_cond_t*));
   FUNCTION(pthread_cond_init, int (*f)(pthread_cond_t*, const pthread_condattr_t*));
   FUNCTION(pthread_cond_signal, int (*f)(pthread_cond_t*));
@@ -140,6 +143,9 @@
   FUNCTION(pthread_join, int (*f)(pthread_t, void**));
   FUNCTION(pthread_key_create, int (*f)(pthread_key_t*, void (*)(void*)));
   FUNCTION(pthread_key_delete, int (*f)(pthread_key_t));
+#if !defined(__GLIBC__)  // Our glibc is too old.
+  FUNCTION(pthread_mutex_clocklock, int (*f)(pthread_mutex_t*, clockid_t, const struct timespec*));
+#endif
 #if !defined(__BIONIC__) // No robust mutexes on Android.
   FUNCTION(pthread_mutex_consistent, int (*f)(pthread_mutex_t*));
 #endif
@@ -176,6 +182,10 @@
 #endif
   FUNCTION(pthread_mutexattr_settype, int (*f)(pthread_mutexattr_t*, int));
   FUNCTION(pthread_once, int (*f)(pthread_once_t*, void (*)(void)));
+#if !defined(__GLIBC__)  // Our glibc is too old.
+  FUNCTION(pthread_rwlock_clockrdlock, int (*f)(pthread_rwlock_t*, clockid_t, const struct timespec*));
+  FUNCTION(pthread_rwlock_clockwrlock, int (*f)(pthread_rwlock_t*, clockid_t, const struct timespec*));
+#endif
   FUNCTION(pthread_rwlock_destroy, int (*f)(pthread_rwlock_t*));
   FUNCTION(pthread_rwlock_init, int (*f)(pthread_rwlock_t*, const pthread_rwlockattr_t*));
   FUNCTION(pthread_rwlock_rdlock, int (*f)(pthread_rwlock_t*));
diff --git a/tests/headers/posix/semaphore_h.c b/tests/headers/posix/semaphore_h.c
index 9d5c7e1..d813363 100644
--- a/tests/headers/posix/semaphore_h.c
+++ b/tests/headers/posix/semaphore_h.c
@@ -35,6 +35,9 @@
 
   MACRO(SEM_FAILED);
 
+#if !defined(__GLIBC__)  // Our glibc is too old.
+  FUNCTION(sem_clockwait, int (*f)(sem_t*, clockid_t, const struct timespec*));
+#endif
   FUNCTION(sem_close, int (*f)(sem_t*));
   FUNCTION(sem_destroy, int (*f)(sem_t*));
   FUNCTION(sem_getvalue, int (*f)(sem_t*, int*));
diff --git a/tests/headers/posix/signal_h.c b/tests/headers/posix/signal_h.c
index 82751f4..3b50fb9 100644
--- a/tests/headers/posix/signal_h.c
+++ b/tests/headers/posix/signal_h.c
@@ -75,6 +75,10 @@
   i = SIGRTMIN;
   i = SIGRTMAX;
 
+#if !defined(__GLIBC__)  // Our glibc is too old.
+  MACRO(SIG2STR_MAX);
+#endif
+
   MACRO(SIGABRT);
   MACRO(SIGALRM);
   MACRO(SIGBUS);
diff --git a/tests/headers/posix/stdlib_h.c b/tests/headers/posix/stdlib_h.c
index 95769b4..deedc06 100644
--- a/tests/headers/posix/stdlib_h.c
+++ b/tests/headers/posix/stdlib_h.c
@@ -119,6 +119,9 @@
   FUNCTION(rand_r, int (*f)(unsigned*));
   FUNCTION(random, long (*f)(void));
   FUNCTION(realloc, void* (*f)(void*, size_t));
+#if !defined(__GLIBC__) // Our glibc is too old.
+  FUNCTION(reallocarray, void* (*f)(void*, size_t, size_t));
+#endif
   FUNCTION(realpath, char* (*f)(const char*, char*));
   FUNCTION(seed48, unsigned short* (*f)(unsigned short[3]));
   FUNCTION(setenv, int (*f)(const char*, const char*, int));
diff --git a/tests/headers/posix/string_h.c b/tests/headers/posix/string_h.c
index 2440050..59a541f 100644
--- a/tests/headers/posix/string_h.c
+++ b/tests/headers/posix/string_h.c
@@ -39,6 +39,9 @@
   FUNCTION(memchr, void* (*f)(const void*, int, size_t));
   FUNCTION(memcmp, int (*f)(const void*, const void*, size_t));
   FUNCTION(memcpy, void* (*f)(void*, const void*, size_t));
+#if !defined(__GLIBC__) // Our glibc is too old.
+  FUNCTION(memmem, void* (*f)(const void*, size_t, const void*, size_t));
+#endif
   FUNCTION(memmove, void* (*f)(void*, const void*, size_t));
   FUNCTION(memset, void* (*f)(void*, int, size_t));
   FUNCTION(stpcpy, char* (*f)(char*, const char*));
@@ -54,6 +57,10 @@
   FUNCTION(strerror, char* (*f)(int));
   FUNCTION(strerror_l, char* (*f)(int, locale_t));
   FUNCTION(strerror_r, int (*f)(int, char*, size_t));
+#if !defined(__GLIBC__) // Our glibc is too old.
+  FUNCTION(strlcat, size_t (*f)(char*, const char*, size_t));
+  FUNCTION(strlcpy, size_t (*f)(char*, const char*, size_t));
+#endif
   FUNCTION(strlen, size_t (*f)(const char*));
   FUNCTION(strncat, char* (*f)(char*, const char*, size_t));
   FUNCTION(strncmp, int (*f)(const char*, const char*, size_t));
diff --git a/tests/headers/posix/unistd_h.c b/tests/headers/posix/unistd_h.c
index fdd7bde..e54fbb3 100644
--- a/tests/headers/posix/unistd_h.c
+++ b/tests/headers/posix/unistd_h.c
@@ -342,6 +342,9 @@
   FUNCTION(ftruncate, int (*f)(int, off_t));
   FUNCTION(getcwd, char* (*f)(char*, size_t));
   FUNCTION(getegid, gid_t (*f)(void));
+#if !defined(__GLIBC__) // Our glibc is too old.
+  FUNCTION(getentropy, int (*f)(void*, size_t));
+#endif
   FUNCTION(geteuid, uid_t (*f)(void));
   FUNCTION(getgid, gid_t (*f)(void));
   FUNCTION(getgroups, int (*f)(int, gid_t[]));
diff --git a/tests/headers/posix/wchar_h.c b/tests/headers/posix/wchar_h.c
index 48b3b92..26a3473 100644
--- a/tests/headers/posix/wchar_h.c
+++ b/tests/headers/posix/wchar_h.c
@@ -86,6 +86,10 @@
   FUNCTION(wcscspn, size_t (*f)(const wchar_t*, const wchar_t*));
   FUNCTION(wcsdup, wchar_t* (*f)(const wchar_t*));
   FUNCTION(wcsftime, size_t (*f)(wchar_t*, size_t, const wchar_t*, const struct tm*));
+#if !defined(__GLIBC__) // Our glibc is too old.
+  FUNCTION(wcslcat, size_t (*f)(wchar_t*, const wchar_t*, size_t));
+  FUNCTION(wcslcpy, size_t (*f)(wchar_t*, const wchar_t*, size_t));
+#endif
   FUNCTION(wcslen, size_t (*f)(const wchar_t*));
   FUNCTION(wcsncasecmp, int (*f)(const wchar_t*, const wchar_t*, size_t));
   FUNCTION(wcsncasecmp_l, int (*f)(const wchar_t*, const wchar_t*, size_t, locale_t));