* C11 api coverage
@ 2012-09-04 20:38 Szabolcs Nagy
2012-09-05 6:22 ` Rich Felker
0 siblings, 1 reply; 5+ messages in thread
From: Szabolcs Nagy @ 2012-09-04 20:38 UTC (permalink / raw)
To: musl
[-- Attachment #1: Type: text/plain, Size: 263 bytes --]
based on annex B (library summary) i created a diff
between the symbols of c99 and c11 to help the c11
implementation effort once we get there
(format is [+-]symbol,prototype,header separated by tabs)
the c11 api coverage table is linked from
wiki.musl-libc.org
[-- Attachment #2: c11.diff --]
[-- Type: text/x-diff, Size: 15175 bytes --]
+static_assert assert.h
+CMPLX double complex CMPLX(double x, double y); complex.h
+CMPLXF float complex CMPLXF(float x, float y); complex.h
+CMPLXL long double complex CMPLXL(long double x, long double y); complex.h
+errno_t errno.h
+DBL_DECIMAL_DIG float.h
+DBL_HAS_SUBNORM float.h
+DBL_TRUE_MIN float.h
+FLT_DECIMAL_DIG float.h
+FLT_HAS_SUBNORM float.h
+FLT_TRUE_MIN float.h
+LDBL_DECIMAL_DIG float.h
+LDBL_HAS_SUBNORM float.h
+LDBL_TRUE_MIN float.h
-longjmp void longjmp(jmp_buf env, int val); setjmp.h
+longjmp _Noreturn void longjmp(jmp_buf env, int val); setjmp.h
+__alignas_is_defined stdalign.h
+alignas stdalign.h
+ATOMIC_BOOL_LOCK_FREE stdatomic.h
+ATOMIC_CHAR16_T_LOCK_FREE stdatomic.h
+ATOMIC_CHAR32_T_LOCK_FREE stdatomic.h
+ATOMIC_CHAR_LOCK_FREE stdatomic.h
+ATOMIC_FLAG_INIT stdatomic.h
+ATOMIC_INT_LOCK_FREE stdatomic.h
+ATOMIC_LLONG_LOCK_FREE stdatomic.h
+ATOMIC_LONG_LOCK_FREE stdatomic.h
+ATOMIC_POINTER_LOCK_FREE stdatomic.h
+ATOMIC_SHORT_LOCK_FREE stdatomic.h
+ATOMIC_VAR_INIT ATOMIC_VAR_INIT(C value) stdatomic.h
+ATOMIC_WCHAR_T_LOCK_FREE stdatomic.h
+atomic_bool stdatomic.h
+atomic_char stdatomic.h
+atomic_char16_t stdatomic.h
+atomic_char32_t stdatomic.h
+atomic_compare_exchange_strong _Bool atomic_compare_exchange_strong(volatile A *object, C *expected, C desired); stdatomic.h
+atomic_compare_exchange_strong_explicit _Bool atomic_compare_exchange_strong_explicit(volatile A *object, C *expected, C desired, memory_order success, memory_order failure); stdatomic.h
+atomic_compare_exchange_weak _Bool atomic_compare_exchange_weak(volatile A *object, C *expected, C desired); stdatomic.h
+atomic_compare_exchange_weak_explicit _Bool atomic_compare_exchange_weak_explicit(volatile A *object, C *expected, C desired, memory_order success, memory_order failure); stdatomic.h
+atomic_exchange C atomic_exchange(volatile A *object, C desired); stdatomic.h
+atomic_exchange_explicit C atomic_exchange_explicit(volatile A *object, C desired, memory_order order); stdatomic.h
+atomic_fetch_key C atomic_fetch_key(volatile A *object, M operand); stdatomic.h
+atomic_fetch_key_explicit C atomic_fetch_key_explicit(volatile A *object, M operand, memory_order order); stdatomic.h
+atomic_flag stdatomic.h
+atomic_flag_clear void atomic_flag_clear(volatile atomic_flag *object); stdatomic.h
+atomic_flag_clear_explicit void atomic_flag_clear_explicit(volatile atomic_flag *object, memory_order order); stdatomic.h
+atomic_flag_test_and_set _Bool atomic_flag_test_and_set(volatile atomic_flag *object); stdatomic.h
+atomic_flag_test_and_set_explicit _Bool atomic_flag_test_and_set_explicit(volatile atomic_flag *object, memory_order order); stdatomic.h
+atomic_init void atomic_init(volatile A *obj, C value); stdatomic.h
+atomic_int stdatomic.h
+atomic_int_fast16_t stdatomic.h
+atomic_int_fast32_t stdatomic.h
+atomic_int_fast64_t stdatomic.h
+atomic_int_fast8_t stdatomic.h
+atomic_int_least16_t stdatomic.h
+atomic_int_least32_t stdatomic.h
+atomic_int_least64_t stdatomic.h
+atomic_int_least8_t stdatomic.h
+atomic_intmax_t stdatomic.h
+atomic_intptr_t stdatomic.h
+atomic_is_lock_free _Bool atomic_is_lock_free(const volatile A *obj); stdatomic.h
+atomic_llong stdatomic.h
+atomic_load C atomic_load(volatile A *object); stdatomic.h
+atomic_load_explicit C atomic_load_explicit(volatile A *object, memory_order order); stdatomic.h
+atomic_long stdatomic.h
+atomic_ptrdiff_t stdatomic.h
+atomic_schar stdatomic.h
+atomic_short stdatomic.h
+atomic_signal_fence void atomic_signal_fence(memory_order order); stdatomic.h
+atomic_size_t stdatomic.h
+atomic_store void atomic_store(volatile A *object, C desired); stdatomic.h
+atomic_store_explicit void atomic_store_explicit(volatile A *object, C desired, memory_order order); stdatomic.h
+atomic_thread_fence void atomic_thread_fence(memory_order order); stdatomic.h
+atomic_uchar stdatomic.h
+atomic_uint stdatomic.h
+atomic_uint_fast16_t stdatomic.h
+atomic_uint_fast32_t stdatomic.h
+atomic_uint_fast64_t stdatomic.h
+atomic_uint_fast8_t stdatomic.h
+atomic_uint_least16_t stdatomic.h
+atomic_uint_least32_t stdatomic.h
+atomic_uint_least64_t stdatomic.h
+atomic_uint_least8_t stdatomic.h
+atomic_uintmax_t stdatomic.h
+atomic_uintptr_t stdatomic.h
+atomic_ullong stdatomic.h
+atomic_ulong stdatomic.h
+atomic_ushort stdatomic.h
+atomic_wchar_t stdatomic.h
+kill_dependency type kill_dependency(type y); stdatomic.h
+memory_order stdatomic.h
+memory_order_acq_rel stdatomic.h
+memory_order_acquire stdatomic.h
+memory_order_consume stdatomic.h
+memory_order_relaxed stdatomic.h
+memory_order_release stdatomic.h
+memory_order_seq_cst stdatomic.h
+max_align_t stddef.h
+rsize_t stddef.h
+RSIZE_MAX stdint.h
+L_tmpnam_s stdio.h
+TMP_MAX_S stdio.h
+errno_t stdio.h
+fopen_s errno_t fopen_s(FILE * restrict * restrict streamptr, const char * restrict filename, const char * restrict mode); stdio.h
+fprintf_s int fprintf_s(FILE * restrict stream, const char * restrict format, ...); stdio.h
+freopen_s errno_t freopen_s(FILE * restrict * restrict newstreamptr, const char * restrict filename, const char * restrict mode, FILE * restrict stream); stdio.h
+fscanf_s int fscanf_s(FILE * restrict stream, const char * restrict format, ...); stdio.h
-gets char *gets(char *s); stdio.h
+gets_s char *gets_s(char *s, rsize_t n); stdio.h
+printf_s int printf_s(const char * restrict format, ...); stdio.h
+rsize_t stdio.h
+scanf_s int scanf_s(const char * restrict format, ...); stdio.h
+snprintf_s int snprintf_s(char * restrict s, rsize_t n, const char * restrict format, ...); stdio.h
+sprintf_s int sprintf_s(char * restrict s, rsize_t n, const char * restrict format, ...); stdio.h
+sscanf_s int sscanf_s(const char * restrict s, const char * restrict format, ...); stdio.h
+tmpfile_s errno_t tmpfile_s(FILE * restrict * restrict streamptr); stdio.h
+tmpnam_s errno_t tmpnam_s(char *s, rsize_t maxsize); stdio.h
+vfprintf_s int vfprintf_s(FILE * restrict stream, const char * restrict format, va_list arg); stdio.h
+vfscanf_s int vfscanf_s(FILE * restrict stream, const char * restrict format, va_list arg); stdio.h
+vprintf_s int vprintf_s(const char * restrict format, va_list arg); stdio.h
+vscanf_s int vscanf_s(const char * restrict format, va_list arg); stdio.h
+vsnprintf_s int vsnprintf_s(char * restrict s, rsize_t n, const char * restrict format, va_list arg); stdio.h
+vsprintf_s int vsprintf_s(char * restrict s, rsize_t n, const char * restrict format, va_list arg); stdio.h
+vsscanf_s int vsscanf_s(const char * restrict s, const char * restrict format, va_list arg); stdio.h
-_Exit void _Exit(int status); stdlib.h
-abort void abort(void); stdlib.h
+_Exit _Noreturn void _Exit(int status); stdlib.h
+abort _Noreturn void abort(void); stdlib.h
+abort_handler_s void abort_handler_s(const char * restrict msg, void * restrict ptr, errno_t error); stdlib.h
+aligned_alloc void *aligned_alloc(size_t alignment, size_t size); stdlib.h
+at_quick_exit int at_quick_exit(void (*func)(void)); stdlib.h
+bsearch_s void *bsearch_s(const void *key, const void *base, rsize_t nmemb, rsize_t size, int (*compar)(const void *k, const void *y, void *context), void *context); stdlib.h
+constraint_handler_t stdlib.h
-exit void exit(int status); stdlib.h
+errno_t stdlib.h
+exit _Noreturn void exit(int status); stdlib.h
+getenv_s errno_t getenv_s(size_t * restrict len, char * restrict value, rsize_t maxsize, const char * restrict name); stdlib.h
+ignore_handler_s void ignore_handler_s(const char * restrict msg, void * restrict ptr, errno_t error); stdlib.h
+mbstowcs_s errno_t mbstowcs_s(size_t * restrict retval, wchar_t * restrict dst, rsize_t dstmax, const char * restrict src, rsize_t len); stdlib.h
+qsort_s errno_t qsort_s(void *base, rsize_t nmemb, rsize_t size, int (*compar)(const void *x, const void *y, void *context), void *context); stdlib.h
+quick_exit _Noreturn void quick_exit(int status); stdlib.h
+rsize_t stdlib.h
+set_constraint_handler_s constraint_handler_t set_constraint_handler_s(constraint_handler_t handler); stdlib.h
+wcstombs_s errno_t wcstombs_s(size_t * restrict retval, char * restrict dst, rsize_t dstmax, const wchar_t * restrict src, rsize_t len); stdlib.h
+wctomb_s errno_t wctomb_s(int * restrict status, char * restrict s, rsize_t smax, wchar_t wc); stdlib.h
+noreturn stdnoreturn.h
+errno_t string.h
+memcpy_s errno_t memcpy_s(void * restrict s1, rsize_t s1max, const void * restrict s2, rsize_t n); string.h
+memmove_s errno_t memmove_s(void *s1, rsize_t s1max, const void *s2, rsize_t n); string.h
+memset_s errno_t memset_s(void *s, rsize_t smax, int c, rsize_t n) string.h
+rsize_t string.h
+strcat_s errno_t strcat_s(char * restrict s1, rsize_t s1max, const char * restrict s2); string.h
+strcpy_s errno_t strcpy_s(char * restrict s1, rsize_t s1max, const char * restrict s2); string.h
+strerror_s errno_t strerror_s(char *s, rsize_t maxsize, errno_t errnum); string.h
+strerrorlen_s size_t strerrorlen_s(errno_t errnum); string.h
+strncat_s errno_t strncat_s(char * restrict s1, rsize_t s1max, const char * restrict s2, rsize_t n); string.h
+strncpy_s errno_t strncpy_s(char * restrict s1, rsize_t s1max, const char * restrict s2, rsize_t n); string.h
+strnlen_s size_t strnlen_s(const char *s, size_t maxsize); string.h
+strtok_s char *strtok_s(char * restrict s1, rsize_t * restrict s1max, const char * restrict s2, char ** restrict ptr); string.h
+ONCE_FLAG_INIT threads.h
+TSS_DTOR_ITERATIONS threads.h
+call_once void call_once(once_flag *flag, void (*func)(void)); threads.h
+cnd_broadcast int cnd_broadcast(cnd_t *cond); threads.h
+cnd_destroy void cnd_destroy(cnd_t *cond); threads.h
+cnd_init int cnd_init(cnd_t *cond); threads.h
+cnd_signal int cnd_signal(cnd_t *cond); threads.h
+cnd_t threads.h
+cnd_timedwait int cnd_timedwait(cnd_t *restrict cond, mtx_t *restrict mtx, const struct timespec *restrict ts); threads.h
+cnd_wait int cnd_wait(cnd_t *cond, mtx_t *mtx); threads.h
+mtx_destroy void mtx_destroy(mtx_t *mtx); threads.h
+mtx_init int mtx_init(mtx_t *mtx, int type); threads.h
+mtx_lock int mtx_lock(mtx_t *mtx); threads.h
+mtx_plain threads.h
+mtx_recursive threads.h
+mtx_t threads.h
+mtx_timed threads.h
+mtx_timedlock int mtx_timedlock(mtx_t *restrict mtx, const struct timespec *restrict ts); threads.h
+mtx_trylock int mtx_trylock(mtx_t *mtx); threads.h
+mtx_unlock int mtx_unlock(mtx_t *mtx); threads.h
+once_flag threads.h
+thrd_busy threads.h
+thrd_create int thrd_create(thrd_t *thr, thrd_start_t func, void *arg); threads.h
+thrd_current thrd_t thrd_current(void); threads.h
+thrd_detach int thrd_detach(thrd_t thr); threads.h
+thrd_equal int thrd_equal(thrd_t thr0, thrd_t thr1); threads.h
+thrd_error threads.h
+thrd_exit _Noreturn void thrd_exit(int res); threads.h
+thrd_join int thrd_join(thrd_t thr, int *res); threads.h
+thrd_nomem threads.h
+thrd_sleep int thrd_sleep(const struct timespec *duration, struct timespec *remaining); threads.h
+thrd_start_t threads.h
+thrd_success threads.h
+thrd_t threads.h
+thrd_timedout threads.h
+thrd_yield void thrd_yield(void); threads.h
+thread_local threads.h
+tss_create int tss_create(tss_t *key, tss_dtor_t dtor); threads.h
+tss_delete void tss_delete(tss_t key); threads.h
+tss_dtor_t threads.h
+tss_get void *tss_get(tss_t key); threads.h
+tss_set int tss_set(tss_t key, void *val); threads.h
+tss_t threads.h
+TIME_UTC time.h
+asctime_s errno_t asctime_s(char *s, rsize_t maxsize, const struct tm *timeptr); time.h
+ctime_s errno_t ctime_s(char *s, rsize_t maxsize, const time_t *timer); time.h
+errno_t time.h
+gmtime_s struct tm *gmtime_s(const time_t * restrict timer, struct tm * restrict result); time.h
+localtime_s struct tm *localtime_s(const time_t * restrict timer, struct tm * restrict result); time.h
+rsize_t time.h
+struct timespec time.h
+timespec_get int timespec_get(timespec *ts, int base); time.h
+c16rtomb size_t c16rtomb(char * restrict s, char16_t c16, mbstate_t * restrict ps); uchar.h
+c32rtomb size_t c32rtomb(char * restrict s, char32_t c32, mbstate_t * restrict ps); uchar.h
+char16_t uchar.h
+char32_t uchar.h
+mbrtoc16 size_t mbrtoc16(char16_t * restrict pc16, const char * restrict s, size_t n, mbstate_t * restrict ps); uchar.h
+mbrtoc32 size_t mbrtoc32(char32_t * restrict pc32, const char * restrict s, size_t n, mbstate_t * restrict ps); uchar.h
+mbstate_t uchar.h
+size_t uchar.h
+errno_t wchar.h
+fwprintf_s int fwprintf_s(FILE * restrict stream, const wchar_t * restrict format, ...); wchar.h
+fwscanf_s int fwscanf_s(FILE * restrict stream, const wchar_t * restrict format, ...); wchar.h
+mbsrtowcs_s errno_t mbsrtowcs_s(size_t * restrict retval, wchar_t * restrict dst, rsize_t dstmax, const char ** restrict src, rsize_t len, mbstate_t * restrict ps); wchar.h
+rsize_t wchar.h
+snwprintf_s int snwprintf_s(wchar_t * restrict s, rsize_t n, const wchar_t * restrict format, ...); wchar.h
+swprintf_s int swprintf_s(wchar_t * restrict s, rsize_t n, const wchar_t * restrict format, ...); wchar.h
+swscanf_s int swscanf_s(const wchar_t * restrict s, const wchar_t * restrict format, ...); wchar.h
+vfwprintf_s int vfwprintf_s(FILE * restrict stream, const wchar_t * restrict format, va_list arg); wchar.h
+vfwscanf_s int vfwscanf_s(FILE * restrict stream, const wchar_t * restrict format, va_list arg); wchar.h
+vsnwprintf_s int vsnwprintf_s(wchar_t * restrict s, rsize_t n, const wchar_t * restrict format, va_list arg); wchar.h
+vswprintf_s int vswprintf_s(wchar_t * restrict s, rsize_t n, const wchar_t * restrict format, va_list arg); wchar.h
+vswscanf_s int vswscanf_s(const wchar_t * restrict s, const wchar_t * restrict format, va_list arg); wchar.h
+vwprintf_s int vwprintf_s(const wchar_t * restrict format, va_list arg); wchar.h
+vwscanf_s int vwscanf_s(const wchar_t * restrict format, va_list arg); wchar.h
+wcrtomb_s errno_t wcrtomb_s(size_t * restrict retval, char * restrict s, rsize_t smax, wchar_t wc, mbstate_t * restrict ps); wchar.h
+wcscat_s errno_t wcscat_s(wchar_t * restrict s1, rsize_t s1max, const wchar_t * restrict s2); wchar.h
+wcscpy_s errno_t wcscpy_s(wchar_t * restrict s1, rsize_t s1max, const wchar_t * restrict s2); wchar.h
+wcsncat_s errno_t wcsncat_s(wchar_t * restrict s1, rsize_t s1max, const wchar_t * restrict s2, rsize_t n); wchar.h
+wcsncpy_s errno_t wcsncpy_s(wchar_t * restrict s1, rsize_t s1max, const wchar_t * restrict s2, rsize_t n); wchar.h
+wcsnlen_s size_t wcsnlen_s(const wchar_t *s, size_t maxsize); wchar.h
+wcsrtombs_s errno_t wcsrtombs_s(size_t * restrict retval, char * restrict dst, rsize_t dstmax, const wchar_t ** restrict src, rsize_t len, mbstate_t * restrict ps); wchar.h
+wcstok_s wchar_t *wcstok_s(wchar_t * restrict s1, rsize_t * restrict s1max, const wchar_t * restrict s2, wchar_t ** restrict ptr); wchar.h
+wmemcpy_s errno_t wmemcpy_s(wchar_t * restrict s1, rsize_t s1max, const wchar_t * restrict s2, rsize_t n); wchar.h
+wmemmove_s errno_t wmemmove_s(wchar_t *s1, rsize_t s1max, const wchar_t *s2, rsize_t n); wchar.h
+wprintf_s int wprintf_s(const wchar_t * restrict format, ...); wchar.h
+wscanf_s int wscanf_s(const wchar_t * restrict format, ...); wchar.h
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: C11 api coverage
2012-09-04 20:38 C11 api coverage Szabolcs Nagy
@ 2012-09-05 6:22 ` Rich Felker
2012-09-05 6:40 ` Szabolcs Nagy
0 siblings, 1 reply; 5+ messages in thread
From: Rich Felker @ 2012-09-05 6:22 UTC (permalink / raw)
To: musl
On Tue, Sep 04, 2012 at 10:38:37PM +0200, Szabolcs Nagy wrote:
> based on annex B (library summary) i created a diff
> between the symbols of c99 and c11 to help the c11
> implementation effort once we get there
> (format is [+-]symbol,prototype,header separated by tabs)
>
> the c11 api coverage table is linked from
> wiki.musl-libc.org
As I mentioned on IRC, the attached list includes symbols from Annex
K, Redmond Troll Interfaces. At this time I'm really not interested in
including/supporting them, and even if there did turn out to be a need
for them at some point in the future, I think adding them would be a
very different goal from adding regular C11 support.
Rich
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: C11 api coverage
2012-09-05 6:22 ` Rich Felker
@ 2012-09-05 6:40 ` Szabolcs Nagy
2012-09-07 18:47 ` Isaac Dunham
0 siblings, 1 reply; 5+ messages in thread
From: Szabolcs Nagy @ 2012-09-05 6:40 UTC (permalink / raw)
To: musl
[-- Attachment #1: Type: text/plain, Size: 528 bytes --]
* Rich Felker <dalias@aerifal.cx> [2012-09-05 02:22:08 -0400]:
> On Tue, Sep 04, 2012 at 10:38:37PM +0200, Szabolcs Nagy wrote:
> > based on annex B (library summary) i created a diff
> > between the symbols of c99 and c11 to help the c11
>
> As I mentioned on IRC, the attached list includes symbols from Annex
> K, Redmond Troll Interfaces. At this time I'm really not interested in
> including/supporting them, and even if there did turn out to be a need
ok i removed annex k symbols
(and updated the c11 coverage table)
[-- Attachment #2: c11.diff --]
[-- Type: text/x-diff, Size: 7775 bytes --]
+static_assert assert.h
+CMPLX double complex CMPLX(double x, double y); complex.h
+CMPLXF float complex CMPLXF(float x, float y); complex.h
+CMPLXL long double complex CMPLXL(long double x, long double y); complex.h
+DBL_DECIMAL_DIG float.h
+DBL_HAS_SUBNORM float.h
+DBL_TRUE_MIN float.h
+FLT_DECIMAL_DIG float.h
+FLT_HAS_SUBNORM float.h
+FLT_TRUE_MIN float.h
+LDBL_DECIMAL_DIG float.h
+LDBL_HAS_SUBNORM float.h
+LDBL_TRUE_MIN float.h
-longjmp void longjmp(jmp_buf env, int val); setjmp.h
+longjmp _Noreturn void longjmp(jmp_buf env, int val); setjmp.h
+__alignas_is_defined stdalign.h
+alignas stdalign.h
+ATOMIC_BOOL_LOCK_FREE stdatomic.h
+ATOMIC_CHAR16_T_LOCK_FREE stdatomic.h
+ATOMIC_CHAR32_T_LOCK_FREE stdatomic.h
+ATOMIC_CHAR_LOCK_FREE stdatomic.h
+ATOMIC_FLAG_INIT stdatomic.h
+ATOMIC_INT_LOCK_FREE stdatomic.h
+ATOMIC_LLONG_LOCK_FREE stdatomic.h
+ATOMIC_LONG_LOCK_FREE stdatomic.h
+ATOMIC_POINTER_LOCK_FREE stdatomic.h
+ATOMIC_SHORT_LOCK_FREE stdatomic.h
+ATOMIC_VAR_INIT ATOMIC_VAR_INIT(C value) stdatomic.h
+ATOMIC_WCHAR_T_LOCK_FREE stdatomic.h
+atomic_bool stdatomic.h
+atomic_char stdatomic.h
+atomic_char16_t stdatomic.h
+atomic_char32_t stdatomic.h
+atomic_compare_exchange_strong _Bool atomic_compare_exchange_strong(volatile A *object, C *expected, C desired); stdatomic.h
+atomic_compare_exchange_strong_explicit _Bool atomic_compare_exchange_strong_explicit(volatile A *object, C *expected, C desired, memory_order success, memory_order failure); stdatomic.h
+atomic_compare_exchange_weak _Bool atomic_compare_exchange_weak(volatile A *object, C *expected, C desired); stdatomic.h
+atomic_compare_exchange_weak_explicit _Bool atomic_compare_exchange_weak_explicit(volatile A *object, C *expected, C desired, memory_order success, memory_order failure); stdatomic.h
+atomic_exchange C atomic_exchange(volatile A *object, C desired); stdatomic.h
+atomic_exchange_explicit C atomic_exchange_explicit(volatile A *object, C desired, memory_order order); stdatomic.h
+atomic_fetch_key C atomic_fetch_key(volatile A *object, M operand); stdatomic.h
+atomic_fetch_key_explicit C atomic_fetch_key_explicit(volatile A *object, M operand, memory_order order); stdatomic.h
+atomic_flag stdatomic.h
+atomic_flag_clear void atomic_flag_clear(volatile atomic_flag *object); stdatomic.h
+atomic_flag_clear_explicit void atomic_flag_clear_explicit(volatile atomic_flag *object, memory_order order); stdatomic.h
+atomic_flag_test_and_set _Bool atomic_flag_test_and_set(volatile atomic_flag *object); stdatomic.h
+atomic_flag_test_and_set_explicit _Bool atomic_flag_test_and_set_explicit(volatile atomic_flag *object, memory_order order); stdatomic.h
+atomic_init void atomic_init(volatile A *obj, C value); stdatomic.h
+atomic_int stdatomic.h
+atomic_int_fast16_t stdatomic.h
+atomic_int_fast32_t stdatomic.h
+atomic_int_fast64_t stdatomic.h
+atomic_int_fast8_t stdatomic.h
+atomic_int_least16_t stdatomic.h
+atomic_int_least32_t stdatomic.h
+atomic_int_least64_t stdatomic.h
+atomic_int_least8_t stdatomic.h
+atomic_intmax_t stdatomic.h
+atomic_intptr_t stdatomic.h
+atomic_is_lock_free _Bool atomic_is_lock_free(const volatile A *obj); stdatomic.h
+atomic_llong stdatomic.h
+atomic_load C atomic_load(volatile A *object); stdatomic.h
+atomic_load_explicit C atomic_load_explicit(volatile A *object, memory_order order); stdatomic.h
+atomic_long stdatomic.h
+atomic_ptrdiff_t stdatomic.h
+atomic_schar stdatomic.h
+atomic_short stdatomic.h
+atomic_signal_fence void atomic_signal_fence(memory_order order); stdatomic.h
+atomic_size_t stdatomic.h
+atomic_store void atomic_store(volatile A *object, C desired); stdatomic.h
+atomic_store_explicit void atomic_store_explicit(volatile A *object, C desired, memory_order order); stdatomic.h
+atomic_thread_fence void atomic_thread_fence(memory_order order); stdatomic.h
+atomic_uchar stdatomic.h
+atomic_uint stdatomic.h
+atomic_uint_fast16_t stdatomic.h
+atomic_uint_fast32_t stdatomic.h
+atomic_uint_fast64_t stdatomic.h
+atomic_uint_fast8_t stdatomic.h
+atomic_uint_least16_t stdatomic.h
+atomic_uint_least32_t stdatomic.h
+atomic_uint_least64_t stdatomic.h
+atomic_uint_least8_t stdatomic.h
+atomic_uintmax_t stdatomic.h
+atomic_uintptr_t stdatomic.h
+atomic_ullong stdatomic.h
+atomic_ulong stdatomic.h
+atomic_ushort stdatomic.h
+atomic_wchar_t stdatomic.h
+kill_dependency type kill_dependency(type y); stdatomic.h
+memory_order stdatomic.h
+memory_order_acq_rel stdatomic.h
+memory_order_acquire stdatomic.h
+memory_order_consume stdatomic.h
+memory_order_relaxed stdatomic.h
+memory_order_release stdatomic.h
+memory_order_seq_cst stdatomic.h
+max_align_t stddef.h
-gets char *gets(char *s); stdio.h
-_Exit void _Exit(int status); stdlib.h
-abort void abort(void); stdlib.h
+_Exit _Noreturn void _Exit(int status); stdlib.h
+abort _Noreturn void abort(void); stdlib.h
+aligned_alloc void *aligned_alloc(size_t alignment, size_t size); stdlib.h
+at_quick_exit int at_quick_exit(void (*func)(void)); stdlib.h
-exit void exit(int status); stdlib.h
+exit _Noreturn void exit(int status); stdlib.h
+quick_exit _Noreturn void quick_exit(int status); stdlib.h
+noreturn stdnoreturn.h
+ONCE_FLAG_INIT threads.h
+TSS_DTOR_ITERATIONS threads.h
+call_once void call_once(once_flag *flag, void (*func)(void)); threads.h
+cnd_broadcast int cnd_broadcast(cnd_t *cond); threads.h
+cnd_destroy void cnd_destroy(cnd_t *cond); threads.h
+cnd_init int cnd_init(cnd_t *cond); threads.h
+cnd_signal int cnd_signal(cnd_t *cond); threads.h
+cnd_t threads.h
+cnd_timedwait int cnd_timedwait(cnd_t *restrict cond, mtx_t *restrict mtx, const struct timespec *restrict ts); threads.h
+cnd_wait int cnd_wait(cnd_t *cond, mtx_t *mtx); threads.h
+mtx_destroy void mtx_destroy(mtx_t *mtx); threads.h
+mtx_init int mtx_init(mtx_t *mtx, int type); threads.h
+mtx_lock int mtx_lock(mtx_t *mtx); threads.h
+mtx_plain threads.h
+mtx_recursive threads.h
+mtx_t threads.h
+mtx_timed threads.h
+mtx_timedlock int mtx_timedlock(mtx_t *restrict mtx, const struct timespec *restrict ts); threads.h
+mtx_trylock int mtx_trylock(mtx_t *mtx); threads.h
+mtx_unlock int mtx_unlock(mtx_t *mtx); threads.h
+once_flag threads.h
+thrd_busy threads.h
+thrd_create int thrd_create(thrd_t *thr, thrd_start_t func, void *arg); threads.h
+thrd_current thrd_t thrd_current(void); threads.h
+thrd_detach int thrd_detach(thrd_t thr); threads.h
+thrd_equal int thrd_equal(thrd_t thr0, thrd_t thr1); threads.h
+thrd_error threads.h
+thrd_exit _Noreturn void thrd_exit(int res); threads.h
+thrd_join int thrd_join(thrd_t thr, int *res); threads.h
+thrd_nomem threads.h
+thrd_sleep int thrd_sleep(const struct timespec *duration, struct timespec *remaining); threads.h
+thrd_start_t threads.h
+thrd_success threads.h
+thrd_t threads.h
+thrd_timedout threads.h
+thrd_yield void thrd_yield(void); threads.h
+thread_local threads.h
+tss_create int tss_create(tss_t *key, tss_dtor_t dtor); threads.h
+tss_delete void tss_delete(tss_t key); threads.h
+tss_dtor_t threads.h
+tss_get void *tss_get(tss_t key); threads.h
+tss_set int tss_set(tss_t key, void *val); threads.h
+tss_t threads.h
+TIME_UTC time.h
+struct timespec time.h
+timespec_get int timespec_get(timespec *ts, int base); time.h
+c16rtomb size_t c16rtomb(char * restrict s, char16_t c16, mbstate_t * restrict ps); uchar.h
+c32rtomb size_t c32rtomb(char * restrict s, char32_t c32, mbstate_t * restrict ps); uchar.h
+char16_t uchar.h
+char32_t uchar.h
+mbrtoc16 size_t mbrtoc16(char16_t * restrict pc16, const char * restrict s, size_t n, mbstate_t * restrict ps); uchar.h
+mbrtoc32 size_t mbrtoc32(char32_t * restrict pc32, const char * restrict s, size_t n, mbstate_t * restrict ps); uchar.h
+mbstate_t uchar.h
+size_t uchar.h
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: C11 api coverage
2012-09-05 6:40 ` Szabolcs Nagy
@ 2012-09-07 18:47 ` Isaac Dunham
2012-09-07 21:17 ` Rich Felker
0 siblings, 1 reply; 5+ messages in thread
From: Isaac Dunham @ 2012-09-07 18:47 UTC (permalink / raw)
To: musl
On Wed, 5 Sep 2012 08:40:10 +0200
Szabolcs Nagy <nsz@port70.net> wrote:
> ok i removed annex k symbols
>
> (and updated the c11 coverage table)
Basically, CMPLX*, noreturn, a few types in uchar.h/time.h, and several
optional features.
Setting __STDC_NO_{ATOMICS,THREADS}__ should make musl almost fully
conformant...
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: C11 api coverage
2012-09-07 18:47 ` Isaac Dunham
@ 2012-09-07 21:17 ` Rich Felker
0 siblings, 0 replies; 5+ messages in thread
From: Rich Felker @ 2012-09-07 21:17 UTC (permalink / raw)
To: musl
On Fri, Sep 07, 2012 at 11:47:44AM -0700, Isaac Dunham wrote:
> On Wed, 5 Sep 2012 08:40:10 +0200
> Szabolcs Nagy <nsz@port70.net> wrote:
>
>
> > ok i removed annex k symbols
> >
> > (and updated the c11 coverage table)
> Basically, CMPLX*, noreturn, a few types in uchar.h/time.h, and several
> optional features.
Aside from stdnoreturn.h, noreturn stuff is done.
uchar.h and time.h have some nontrivial functions we need to add, I
think...
> Setting __STDC_NO_{ATOMICS,THREADS}__ should make musl almost fully
> conformant...
It's impossible for musl to set these; that's up to the compiler, and
it would have to be done in the gcc specfile or builtin gcc specs.
Of course we can just publish that the command to invoke the C11
compiler is:
gcc -std=c11 -D__STDC_NO_ATOMICS__ -D__STDC_NO_THREADS__
However, I'd actually like to get atomics supported soon, at least on
GNUC compilers that have the right __builtin or __sync builtins. (Or
adapting atomic.h to be a public header, but I think the stuff in
stdatomic.h has to be somewhat type-generic, which makes it hard...)
Rich
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2012-09-07 21:17 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-09-04 20:38 C11 api coverage Szabolcs Nagy
2012-09-05 6:22 ` Rich Felker
2012-09-05 6:40 ` Szabolcs Nagy
2012-09-07 18:47 ` Isaac Dunham
2012-09-07 21:17 ` Rich Felker
Code repositories for project(s) associated with this public inbox
https://git.vuxu.org/mirror/musl/
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).