path: root/arch/arm/bits/
diff options
authorRich Felker <>2011-09-18 16:44:54 -0400
committerRich Felker <>2011-09-18 16:44:54 -0400
commitd960d4f2cbf18ff3476c7ac03698ec253885dd8e (patch)
treec7570054ccddf4febc86c046a0b90b3021d1a457 /arch/arm/bits/
parent4f4bf0ad2e8c729de92db06318b9614ab2cdcc5c (diff)
initial commit of the arm port
this port assumes eabi calling conventions, eabi linux syscall convention, and presence of the kernel helpers at 0xffff0f?0 needed for threads support. otherwise it makes very few assumptions, and the code should work even on armv4 without thumb support, as well as on systems with thumb interworking. the bits headers declare this a little endian system, but as far as i can tell the code should work equally well on big endian. some small details are probably broken; so far, testing has been limited to qemu/aboriginal linux.
Diffstat (limited to 'arch/arm/bits/')
1 files changed, 121 insertions, 0 deletions
diff --git a/arch/arm/bits/ b/arch/arm/bits/
new file mode 100755
index 00000000..6409a96e
--- /dev/null
+++ b/arch/arm/bits/
@@ -0,0 +1,121 @@
+sed -e << EOF \
+'/^TYPEDEF/s/TYPEDEF \(.*\) \([^ ]*\);$/#if defined(__NEED_\2) \&\& !defined(__DEFINED_\2)\
+typedef \1 \2;\
+#define __DEFINED_\2\
+/^STRUCT/s/STRUCT * \([^ ]*\) \(.*\);$/#if defined(__NEED_struct_\1) \&\& !defined(__DEFINED_struct_\1)\
+struct \1 \2;\
+#define __DEFINED_struct_\1\
+/^UNION/s/UNION * \([^ ]*\) \(.*\);$/#if defined(__NEED_union_\1) \&\& !defined(__DEFINED_union_\1)\
+union \1 \2;\
+#define __DEFINED_union_\1\
+TYPEDEF unsigned size_t;
+TYPEDEF int ssize_t;
+TYPEDEF long ptrdiff_t;
+TYPEDEF __builtin_va_list va_list;
+#ifdef __WCHAR_TYPE__
+TYPEDEF __WCHAR_TYPE__ wchar_t;
+TYPEDEF long wchar_t;
+TYPEDEF long wint_t;
+TYPEDEF long wctrans_t;
+TYPEDEF long wctype_t;
+TYPEDEF char int8_t;
+TYPEDEF short int16_t;
+TYPEDEF int int32_t;
+TYPEDEF long long int64_t;
+TYPEDEF unsigned char uint8_t;
+TYPEDEF unsigned short uint16_t;
+TYPEDEF unsigned int uint32_t;
+TYPEDEF unsigned long long uint64_t;
+TYPEDEF unsigned short __uint16_t;
+TYPEDEF unsigned int __uint32_t;
+TYPEDEF unsigned long long __uint64_t;
+TYPEDEF int8_t int_fast8_t;
+TYPEDEF int int_fast16_t;
+TYPEDEF int int_fast32_t;
+TYPEDEF int64_t int_fast64_t;
+TYPEDEF unsigned char uint_fast8_t;
+TYPEDEF unsigned int uint_fast16_t;
+TYPEDEF unsigned int uint_fast32_t;
+TYPEDEF uint64_t uint_fast64_t;
+TYPEDEF long intptr_t;
+TYPEDEF unsigned long uintptr_t;
+TYPEDEF long time_t;
+TYPEDEF int suseconds_t;
+STRUCT timeval { time_t tv_sec; int tv_usec; };
+STRUCT timespec { time_t tv_sec; long tv_nsec; };
+TYPEDEF int pid_t;
+TYPEDEF int id_t;
+TYPEDEF int uid_t;
+TYPEDEF int gid_t;
+TYPEDEF int key_t;
+TYPEDEF struct __pthread * pthread_t;
+TYPEDEF int pthread_once_t;
+TYPEDEF int pthread_key_t;
+TYPEDEF int pthread_spinlock_t;
+TYPEDEF struct { union { int __i[9]; size_t __s[9]; } __u; } pthread_attr_t;
+TYPEDEF unsigned pthread_mutexattr_t;
+TYPEDEF unsigned pthread_condattr_t;
+TYPEDEF unsigned pthread_barrierattr_t;
+TYPEDEF struct { unsigned __attr[2]; } pthread_rwlockattr_t;
+TYPEDEF struct { union { int __i[6]; void *__p[6]; } __u; } pthread_mutex_t;
+TYPEDEF struct { union { int __i[12]; void *__p[12]; } __u; } pthread_cond_t;
+TYPEDEF struct { union { int __i[8]; void *__p[8]; } __u; } pthread_rwlock_t;
+TYPEDEF struct { union { int __i[5]; void *__p[5]; } __u; } pthread_barrier_t;
+TYPEDEF long long off_t;
+TYPEDEF unsigned int mode_t;
+TYPEDEF unsigned int nlink_t;
+TYPEDEF unsigned long long ino_t;
+TYPEDEF long long dev_t;
+TYPEDEF long blksize_t;
+TYPEDEF long long blkcnt_t;
+TYPEDEF unsigned long long fsblkcnt_t;
+TYPEDEF unsigned long long fsfilcnt_t;
+TYPEDEF void * timer_t;
+TYPEDEF int clockid_t;
+TYPEDEF unsigned long clock_t;
+TYPEDEF struct { unsigned long __bits[128/sizeof(long)]; } sigset_t;
+TYPEDEF struct __siginfo siginfo_t;
+TYPEDEF unsigned int socklen_t;
+TYPEDEF unsigned short sa_family_t;
+TYPEDEF unsigned short in_port_t;
+TYPEDEF unsigned int in_addr_t;
+STRUCT in_addr { in_addr_t s_addr; };
+TYPEDEF struct __FILE_s FILE;
+TYPEDEF int nl_item;
+TYPEDEF struct __locale * locale_t;
+STRUCT iovec { void *iov_base; size_t iov_len; };