[Ltrace-devel] [PATCH 4/6] Split type definitions from the bundled configs into their own files
Роман Донченко
dpb at corrigendum.ru
Mon Apr 20 00:39:25 UTC 2015
---
etc/libc.so-types.conf | 71 ++++++++++++++++++++++++++++++++++++++++++++
etc/libc.so.conf | 46 +---------------------------
etc/libm.so.conf | 11 +------
etc/libpthread.so-types.conf | 23 ++++++++++++++
etc/libpthread.so.conf | 34 ++-------------------
5 files changed, 98 insertions(+), 87 deletions(-)
create mode 100644 etc/libc.so-types.conf
create mode 100644 etc/libpthread.so-types.conf
diff --git a/etc/libc.so-types.conf b/etc/libc.so-types.conf
new file mode 100644
index 0000000..ef99565
--- /dev/null
+++ b/etc/libc.so-types.conf
@@ -0,0 +1,71 @@
+# XXX ltrace misses long double and long long support
+typedef ldouble = double;
+typedef llong = long;
+typedef ullong = ulong;
+
+# This should generally work, I'm not aware of any arch, where the
+# parameter passing of complex arguments differs from that for
+# structure of two floats.
+typedef double_complex = struct(double, double);
+typedef float_complex = struct(float, float);
+typedef ldouble_complex = struct(ldouble, ldouble);
+
+# arpa/inet.h
+typedef in_addr = struct(hex(uint));
+
+# dirent.h
+
+# We can't portably rely on DIR internals at all. Ideally this would
+# be implemented in a per-OS config file, but even on Linux, we don't
+# know whether there's a lock in the structure or not. Luckily the
+# one interesting datum, file descriptor, we can access reliably.
+# Having the structure half-defined like this is potentially
+# problematic as structure size influences parameter passing. But
+# POSIX always uses pointer to the structure, so it's fine.
+
+typedef DIR = struct(int);
+typedef FILE = addr;
+
+# XXX We can't represent the following portably without having either
+# uulong, or directly uint64_t.'
+typedef ino_t = ulong;
+typedef ino_t64 = ulong;
+typedef off_t = ulong;
+typedef off_t64 = ulong;
+typedef size_t = ulong;
+typedef ssize_t = long;
+
+typedef dirent = struct(ino_t, hide(off_t), hide(ushort), hide(char), string(array(char, zero(256))));
+typedef dirent64 = struct(ino_t64, hide(off_t64), hide(ushort), hide(char), string(array(char, zero(256))));
+
+# mntent.h
+typedef mntent = struct(string, string, string, string, int, int);
+
+# sched.h
+typedef sched_param = struct(int);
+typedef sched_policy_e = enum[int](SCHED_FIFO=1, SCHED_RR=2, SCHED_OTHER=0);
+
+# signal.h
+typedef signum = enum(SIGHUP=1, SIGINT=2, SIGQUIT=3, SIGILL=4, SIGTRAP=5, SIGABRT=6, SIGBUS=7, SIGFPE=8, SIGKILL=9, SIGUSR1=10, SIGSEGV=11, SIGUSR2=12, SIGPIPE=13, SIGALRM=14, SIGTERM=15, SIGSTKFLT=16, SIGCHLD=17, SIGCONT=18, SIGSTOP=19, SIGTSTP=20, SIGTTIN=21, SIGTTOU=22, SIGURG=23, SIGXCPU=24, SIGXFSZ=25, SIGVTALRM=26, SIGPROF=27, SIGWINCH=28, SIGIO=29, SIGPWR=30, SIGSYS=31, SIGRTMIN_0=32, SIGRTMIN_1=33, SIGRTMIN_2=34, SIGRTMIN_3=35, SIGRTMIN_4=36, SIGRTMIN_5=37, SIGRTMIN_6=38, SIGRTMIN_7=39, SIGRTMIN_8=40, SIGRTMIN_9=41, SIGRTMIN_10=42, SIGRTMIN_11=43, SIGRTMIN_12=44, SIGRTMIN_13=45, SIGRTMIN_14=46, SIGRTMIN_15=47, SIGRTMIN_16=48, SIGRTMIN_17=49, SIGRTMIN_18=50, SIGRTMIN_19=51, SIGRTMIN_20=52, SIGRTMIN_21=53, SIGRTMIN_22=54, SIGRTMIN_23=55, SIGRTMIN_24=56, SIGRTMIN_25=57, SIGRTMIN_26=58, SIGRTMIN_27=59, SIGRTMIN_28=60, SIGRTMIN_29=61, SIGRTMIN_30=62, SIGRTMIN_31=63);
+typedef sigset_t = bitvec(ulong);
+# elm3 should be flags
+typedef sigaction = struct(addr, sigset_t, hex(int), addr);
+
+# sys/mman.h
+typedef mmap_flags_t = enum(MAP_SHARED=1, MAP_PRIVATE=2);
+
+# time.h
+typedef clockid_t = int;
+# XXX in fact (time_t, long), which may be (llong, long) on 32-bit
+# arches. We don't have llong as of this writing.
+typedef timespec = struct(long, long);
+
+# wchar.h
+typedef wchar_t = string(uint);
+typedef wint_t = string(int);
+typedef wstring_t = string(array(uint, zero)*);
+typedef wstring2_t = string(array(uint, zero(arg2))*);
+typedef wstring3_t = string(array(uint, zero(arg3))*);
+
+# xlocale.h
+typedef locale_t = void*;
diff --git a/etc/libc.so.conf b/etc/libc.so.conf
index 8a209b4..4e9db60 100644
--- a/etc/libc.so.conf
+++ b/etc/libc.so.conf
@@ -1,14 +1,10 @@
# See ltrace.conf(5) for description of syntax of this file.
-# XXX ltrace misses long double and long long support
-typedef ldouble = double;
-typedef llong = long;
-typedef ullong = ulong;
+import "libc.so-types";
void __libc_start_main(hide(void*), hide(int), array(string, arg2));
# arpa/inet.h
-typedef in_addr = struct(hex(uint));
int inet_aton(string, +in_addr*);
hex(uint) inet_addr(string);
hex(uint) inet_network(string);
@@ -40,30 +36,6 @@ int waddnstr(addr, string, int);
string tgoto(string, int, int);
# dirent.h
-
-# We can't portably rely on DIR internals at all. Ideally this would
-# be implemented in a per-OS config file, but even on Linux, we don't
-# know whether there's a lock in the structure or not. Luckily the
-# one interesting datum, file descriptor, we can access reliably.
-# Having the structure half-defined like this is potentially
-# problematic as structure size influences parameter passing. But
-# POSIX always uses pointer to the structure, so it's fine.
-
-typedef DIR = struct(int);
-typedef FILE = addr;
-
-# XXX We can't represent the following portably without having either
-# uulong, or directly uint64_t.'
-typedef ino_t = ulong;
-typedef ino_t64 = ulong;
-typedef off_t = ulong;
-typedef off_t64 = ulong;
-typedef size_t = ulong;
-typedef ssize_t = long;
-
-typedef dirent = struct(ino_t, hide(off_t), hide(ushort), hide(char), string(array(char, zero(256))));
-typedef dirent64 = struct(ino_t64, hide(off_t64), hide(ushort), hide(char), string(array(char, zero(256))));
-
dirent *readdir(DIR *);
dirent64 *readdir64(DIR *);
int closedir(DIR *);
@@ -187,10 +159,6 @@ void setpwent();
string readline(string);
# signal.h
-typedef signum = enum(SIGHUP=1, SIGINT=2, SIGQUIT=3, SIGILL=4, SIGTRAP=5, SIGABRT=6, SIGBUS=7, SIGFPE=8, SIGKILL=9, SIGUSR1=10, SIGSEGV=11, SIGUSR2=12, SIGPIPE=13, SIGALRM=14, SIGTERM=15, SIGSTKFLT=16, SIGCHLD=17, SIGCONT=18, SIGSTOP=19, SIGTSTP=20, SIGTTIN=21, SIGTTOU=22, SIGURG=23, SIGXCPU=24, SIGXFSZ=25, SIGVTALRM=26, SIGPROF=27, SIGWINCH=28, SIGIO=29, SIGPWR=30, SIGSYS=31, SIGRTMIN_0=32, SIGRTMIN_1=33, SIGRTMIN_2=34, SIGRTMIN_3=35, SIGRTMIN_4=36, SIGRTMIN_5=37, SIGRTMIN_6=38, SIGRTMIN_7=39, SIGRTMIN_8=40, SIGRTMIN_9=41, SIGRTMIN_10=42, SIGRTMIN_11=43, SIGRTMIN_12=44, SIGRTMIN_13=45, SIGRTMIN_14=46, SIGRTMIN_15=47, SIGRTMIN_16=48, SIGRTMIN_17=49, SIGRTMIN_18=50, SIGRTMIN_19=51, SIGRTMIN_20=52, SIGRTMIN_21=53, SIGRTMIN_22=54, SIGRTMIN_23=55, SIGRTMIN_24=56, SIGRTMIN_25=57, SIGRTMIN_26=58, SIGRTMIN_27=59, SIGRTMIN_28=60, SIGRTMIN_29=61, SIGRTMIN_30=62, SIGRTMIN_31=63);
-typedef sigset_t = bitvec(ulong);
-# elm3 should be flags
-typedef sigaction = struct(addr, sigset_t, hex(int), addr);
int kill(int, signum);
int sigemptyset(+sigset_t*);
int sigaddset(+sigset_t*, signum);
@@ -242,7 +210,6 @@ void setlinebuf(file);
int rename(string,string);
# xlocale.h
-typedef locale_t = void*;
locale_t newlocale(hex(int), string, locale_t);
# stdlib.h
@@ -364,9 +331,6 @@ addr gmtime(addr);
addr localtime(addr);
ulong strftime(+string2,ulong,string,addr);
long time(addr);
-# XXX in fact (time_t, long), which may be (llong, long) on 32-bit
-# arches. We don't have llong as of this writing.
-typedef timespec = struct(long, long);
int nanosleep(timespec*, timespec*);
# unistd.h
@@ -427,12 +391,6 @@ addr getutent();
void setutent();
# wchar.h
-typedef wchar_t = string(uint);
-typedef wint_t = string(int);
-typedef wstring_t = string(array(uint, zero)*);
-typedef wstring2_t = string(array(uint, zero(arg2))*);
-typedef wstring3_t = string(array(uint, zero(arg3))*);
-
int fwide(FILE*, int);
wint_t btowc(int);
@@ -536,7 +494,6 @@ void abort();
int abs(int);
long labs(long);
-typedef mntent = struct(string, string, string, string, int, int);
int addmntent(file, mntent*);
int endmntent(file);
int __endmntent(file);
@@ -548,7 +505,6 @@ mntent *__getmntent_r(file, +mntent*, string, int);
string hasmntopt(mntent*, string);
# XXX the third argument is a bitfield
-typedef mmap_flags_t = enum(MAP_SHARED=1, MAP_PRIVATE=2);
addr mmap(addr, size_t, hex(int), mmap_flags_t, int, off_t);
addr mmap64(addr, size_t, hex(int), mmap_flags_t, int, off_t64);
void munmap(addr, size_t);
diff --git a/etc/libm.so.conf b/etc/libm.so.conf
index 8159221..ba2db07 100644
--- a/etc/libm.so.conf
+++ b/etc/libm.so.conf
@@ -1,13 +1,4 @@
-# XXX ltrace misses long double and long long support
-typedef ldouble = double;
-typedef llong = long;
-
-# This should generally work, I'm not aware of any arch, where the
-# parameter passing of complex arguments differs from that for
-# structure of two floats.
-typedef double_complex = struct(double, double);
-typedef float_complex = struct(float, float);
-typedef ldouble_complex = struct(ldouble, ldouble);
+#include "libc.so-types.conf";
double sin(double);
float sinf(float);
diff --git a/etc/libpthread.so-types.conf b/etc/libpthread.so-types.conf
new file mode 100644
index 0000000..341abc3
--- /dev/null
+++ b/etc/libpthread.so-types.conf
@@ -0,0 +1,23 @@
+typedef pthread_t = ulong;
+typedef pthread_attr_t = void;
+typedef pthread_barrier_t = void;
+typedef pthread_barrierattr_t = void;
+typedef pthread_cond_t = void;
+typedef pthread_condattr_t = void;
+typedef pthread_key_t = uint;
+typedef pthread_mutex_t = void;
+typedef pthread_mutexattr_t = void;
+typedef pthread_once_t = void;
+typedef pthread_rwlock_t = void;
+typedef pthread_rwlockattr_t = void;
+typedef pthread_spinlock_t = void;
+
+typedef pthread_cancel_state_e = enum[int](PTHREAD_CANCEL_DISABLE=1, PTHREAD_CANCEL_ENABLE=0);
+typedef pthread_cancel_type_e = enum[int](PTHREAD_CANCEL_ASYNCHRONOUS=1, PTHREAD_CANCEL_DEFERRED=0);
+typedef pthread_detach_state_e = enum[int](PTHREAD_CREATE_DETACHED=1, PTHREAD_CREATE_JOINABLE=0);
+typedef pthread_inherit_sched_e = enum[int](PTHREAD_EXPLICIT_SCHED=1, PTHREAD_INHERIT_SCHED=0);
+typedef pthread_mutex_protocol_e = enum[int](PTHREAD_PRIO_INHERIT=1, PTHREAD_PRIO_NONE=0, PTHREAD_PRIO_PROTECT=2);
+typedef pthread_mutex_robust_e = enum[int](PTHREAD_MUTEX_ROBUST=1, PTHREAD_MUTEX_STALLED=0);
+typedef pthread_mutex_type_e = enum[int](PTHREAD_MUTEX_ERRORCHECK=2, PTHREAD_MUTEX_NORMAL=0, PTHREAD_MUTEX_RECURSIVE=1);
+typedef pthread_pshared_e = enum[int](PTHREAD_PROCESS_SHARED=1, PTHREAD_PROCESS_PRIVATE=0);
+typedef pthread_scope_e = enum[int](PTHREAD_SCOPE_PROCESS=1, PTHREAD_SCOPE_SYSTEM=0);
diff --git a/etc/libpthread.so.conf b/etc/libpthread.so.conf
index 1cd8876..7cb8f45 100644
--- a/etc/libpthread.so.conf
+++ b/etc/libpthread.so.conf
@@ -1,35 +1,5 @@
-typedef clockid_t = int;
-typedef size_t = ulong;
-
-typedef sched_param = struct(int);
-typedef sigset_t = bitvec(ulong);
-typedef timespec = struct(long, long);
-
-typedef sched_policy_e = enum[int](SCHED_FIFO=1, SCHED_RR=2, SCHED_OTHER=0);
-
-typedef pthread_t = ulong;
-typedef pthread_attr_t = void;
-typedef pthread_barrier_t = void;
-typedef pthread_barrierattr_t = void;
-typedef pthread_cond_t = void;
-typedef pthread_condattr_t = void;
-typedef pthread_key_t = uint;
-typedef pthread_mutex_t = void;
-typedef pthread_mutexattr_t = void;
-typedef pthread_once_t = void;
-typedef pthread_rwlock_t = void;
-typedef pthread_rwlockattr_t = void;
-typedef pthread_spinlock_t = void;
-
-typedef pthread_cancel_state_e = enum[int](PTHREAD_CANCEL_DISABLE=1, PTHREAD_CANCEL_ENABLE=0);
-typedef pthread_cancel_type_e = enum[int](PTHREAD_CANCEL_ASYNCHRONOUS=1, PTHREAD_CANCEL_DEFERRED=0);
-typedef pthread_detach_state_e = enum[int](PTHREAD_CREATE_DETACHED=1, PTHREAD_CREATE_JOINABLE=0);
-typedef pthread_inherit_sched_e = enum[int](PTHREAD_EXPLICIT_SCHED=1, PTHREAD_INHERIT_SCHED=0);
-typedef pthread_mutex_protocol_e = enum[int](PTHREAD_PRIO_INHERIT=1, PTHREAD_PRIO_NONE=0, PTHREAD_PRIO_PROTECT=2);
-typedef pthread_mutex_robust_e = enum[int](PTHREAD_MUTEX_ROBUST=1, PTHREAD_MUTEX_STALLED=0);
-typedef pthread_mutex_type_e = enum[int](PTHREAD_MUTEX_ERRORCHECK=2, PTHREAD_MUTEX_NORMAL=0, PTHREAD_MUTEX_RECURSIVE=1);
-typedef pthread_pshared_e = enum[int](PTHREAD_PROCESS_SHARED=1, PTHREAD_PROCESS_PRIVATE=0);
-typedef pthread_scope_e = enum[int](PTHREAD_SCOPE_PROCESS=1, PTHREAD_SCOPE_SYSTEM=0);
+import "libc.so-types";
+import "libpthread.so-types";
# <pthread.h>
--
1.8.5.6
More information about the Ltrace-devel
mailing list