abi.cc -> abi_type.cc
[musl-tables] / abi_func.sh
1 #!/bin/sh
2
3 #set -xeu
4
5 export LC_ALL=C
6 #MUSL=${MUSL:-../musl}
7
8 awk -F'\t' '$3 ~ /^p$/ {
9         print $1
10 }' data/musl.tags >/tmp/m.funcs
11 awk -F'\t' '$3 ~ /^p$/ {
12         print $2
13 }' data/musl.tags >/tmp/m.header
14
15 echo '#define _GNU_SOURCE 1' >abi_func.cc
16 echo '#define _FILE_OFFSET_BITS 64' >>abi_func.cc
17 echo '#define SYSLOG_NAMES 1' >>abi_func.cc
18 #echo '#include <stddef.h>' >>abi_func.cc
19 #echo '#include <sys/types.h>' >>abi_func.cc
20 echo '' >>abi_func.cc
21
22 sort /tmp/m.header |uniq |awk '
23 #       /^sys\/(auxv|cachectl|fantotify|errno|fcntl|poll|signal|soundcard|termios)\.h$/ { printf "//" }
24 #       /^(stdalign|stdnoreturn|threads|wait)\.h$/ { printf "//" }
25 #       /^sys\/(cachectl)\.h$/ { printf "//" }
26 #       /^(threads)\.h$/ { printf "//" }
27         { print "#include <" $0 ">" }' >>abi_func.cc
28 #echo 'typedef long long long_long; typedef long double long_double;' >>abi.cc
29 #echo 'struct size{int i;}; struct align{int i;};' >>abi.cc
30 #echo '#define p(s,t) void x_##t(s t x, s t* ptr, size(*y)[sizeof(s t)], align(*z)[__alignof__(s t)]){}' >>abi.cc
31 #echo '#define pp(s,t) void x_##t(s t* ptr, size(*y)[sizeof(s t*)], align(*z)[__alignof__(s t*)]){}' >>abi.cc
32
33 echo '#define T(x) void t_##x(__typeof(x)*p){}' >>abi_func.cc
34 echo '
35 #ifdef __GLIBC__
36 #define M(x)
37 #undef sigsetjmp
38 #define sigsetjmp __sigsetjmp
39 #else
40 #define M(x) x
41 #endif
42 ' >>abi_func.cc
43
44 sort /tmp/m.funcs |uniq |awk '
45         /^(__flt_rounds|__freadahead|__freadptr|__freadptrinc|__fseterr|_flush_cache|_pthread_cleanup_pop|_pthread_cleanup_push|cachectl|cacheflush|call_once|cnd_broadcast|cnd_destroy|cnd_init|cnd_signal|cnd_timedwait|cnd_wait|fgetln|getdents|gets|index|issetugid|memchr|memrchr|mtx_destroy|mtx_init|mtx_lock|mtx_timedlock|mtx_trylock|mtx_unlock|posix_close|rindex|strcasestr|strchr|strchrnul|strlcat|strlcpy|strpbrk|strrchr|strstr|thrd_create|thrd_current|thrd_detach|thrd_equal|thrd_exit|thrd_join|thrd_sleep|thrd_yield|tss_create|tss_delete|tss_get|tss_set|wcschr|wcspbrk|wcsrchr|wcsstr|wcswcs|wmemchr)$/ {
46                 print "M(T(" $0 "))"; next
47         }
48         /^(ElfW)$/ { printf "// " }
49         { print "T(" $0 ")" }' >>abi_func.cc
50
51 #$CXX -S -o - abi_func.cc |sed -n 's/^\(_Z.*\):/\1/p' |$CXXFILT |sed '
52 #s/(\*)/@/;s/^t_\([^(]*\)(\(.*\)@\(.*\))/\2\1\3/
53 #s/floatcomplex /float _Complex/g
54 #s/doublecomplex /double _Complex/g
55 #' >data/musl.abi_func