summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Frysinger <vapier@gentoo.org>2006-01-19 10:02:23 +0000
committerMike Frysinger <vapier@gentoo.org>2006-01-19 10:02:23 +0000
commit537494b031b3df4d4861fd83c90302d8d2d9d821 (patch)
treeafd78f28cd113e340ecf5268a8db01e4b2da54dc
parentb83bc367b70aec3c94e85183844a465169cbd333 (diff)
move a bunch of arch-specific checks out of common files and into an arch specific header file to make porting/updates a lot easier
-rw-r--r--include/features.h1
-rw-r--r--include/libc-internal.h11
-rw-r--r--ldso/include/dl-syscall.h2
-rw-r--r--ldso/ldso/mips/dl-syscalls.h2
-rw-r--r--ldso/ldso/powerpc/dl-syscalls.h2
-rw-r--r--ldso/ldso/sh/dl-syscalls.h2
-rw-r--r--ldso/ldso/sparc/dl-syscalls.h2
-rw-r--r--ldso/ldso/x86_64/dl-syscalls.h2
-rw-r--r--libc/stdlib/abort.c36
-rw-r--r--libc/sysdeps/linux/alpha/bits/uClibc_arch_features.h33
-rw-r--r--libc/sysdeps/linux/arm/bits/uClibc_arch_features.h33
-rw-r--r--libc/sysdeps/linux/bfin/bits/uClibc_arch_features.h34
-rw-r--r--libc/sysdeps/linux/common/bits/uClibc_arch_features.h36
-rw-r--r--libc/sysdeps/linux/common/create_module.c7
-rw-r--r--libc/sysdeps/linux/common/ftruncate64.c4
-rw-r--r--libc/sysdeps/linux/common/truncate64.c4
-rw-r--r--libc/sysdeps/linux/cris/bits/uClibc_arch_features.h34
-rw-r--r--libc/sysdeps/linux/e1/bits/uClibc_arch_features.h34
-rw-r--r--libc/sysdeps/linux/frv/bits/uClibc_arch_features.h34
-rw-r--r--libc/sysdeps/linux/h8300/bits/uClibc_arch_features.h34
-rw-r--r--libc/sysdeps/linux/hppa/bits/uClibc_arch_features.h33
-rw-r--r--libc/sysdeps/linux/i386/bits/uClibc_arch_features.h33
-rw-r--r--libc/sysdeps/linux/i960/bits/uClibc_arch_features.h34
-rw-r--r--libc/sysdeps/linux/m68k/bits/uClibc_arch_features.h37
-rw-r--r--libc/sysdeps/linux/microblaze/bits/uClibc_arch_features.h34
-rw-r--r--libc/sysdeps/linux/mips/bits/uClibc_arch_features.h33
-rw-r--r--libc/sysdeps/linux/nios/bits/uClibc_arch_features.h34
-rw-r--r--libc/sysdeps/linux/nios2/bits/uClibc_arch_features.h34
-rw-r--r--libc/sysdeps/linux/powerpc/bits/uClibc_arch_features.h33
-rw-r--r--libc/sysdeps/linux/sh/bits/uClibc_arch_features.h39
-rw-r--r--libc/sysdeps/linux/sh64/bits/uClibc_arch_features.h34
-rw-r--r--libc/sysdeps/linux/sparc/bits/uClibc_arch_features.h33
-rw-r--r--libc/sysdeps/linux/v850/bits/uClibc_arch_features.h34
-rw-r--r--libc/sysdeps/linux/x86_64/bits/uClibc_arch_features.h33
34 files changed, 773 insertions, 52 deletions
diff --git a/include/features.h b/include/features.h
index 0f4921b9f..ec807d523 100644
--- a/include/features.h
+++ b/include/features.h
@@ -293,6 +293,7 @@
#define __need_uClibc_config_h
#include <bits/uClibc_config.h>
#undef __need_uClibc_config_h
+#include <bits/uClibc_arch_features.h>
#ifdef __UCLIBC_HAS_WCHAR__
/* wchar_t uses ISO 10646-1 (2nd ed., published 2000-09-15) / Unicode 3.0. */
diff --git a/include/libc-internal.h b/include/libc-internal.h
index 53fc0ae62..265a90023 100644
--- a/include/libc-internal.h
+++ b/include/libc-internal.h
@@ -21,6 +21,17 @@
#include <features.h>
+#ifdef __UCLIBC_NO_UNDERSCORES__
+# define NO_UNDERSCORES
+#else
+# undef NO_UNDERSCORES
+#endif
+#ifdef __UCLIBC_HAVE_ASM_SET_DIRECTIVE__
+# define HAVE_ASM_SET_DIRECTIVE
+#else
+# undef HAVE_ASM_SET_DIRECTIVE
+#endif
+
#undef __SYMBOL_PREFIX
#ifndef __SYMBOL_PREFIX
# ifdef NO_UNDERSCORES
diff --git a/ldso/include/dl-syscall.h b/ldso/include/dl-syscall.h
index bf25c85be..261e5e6f0 100644
--- a/ldso/include/dl-syscall.h
+++ b/ldso/include/dl-syscall.h
@@ -119,7 +119,7 @@ static inline _syscall2(int, _dl_gettimeofday, struct timeval *, tv, struct time
#endif
#ifdef __NR_mmap
-#ifdef MMAP_HAS_6_ARGS
+#ifdef __UCLIBC_MMAP_HAS_6_ARGS__
#define __NR__dl_mmap __NR_mmap
static inline _syscall6(void *, _dl_mmap, void *, start, size_t, length,
int, prot, int, flags, int, fd, off_t, offset);
diff --git a/ldso/ldso/mips/dl-syscalls.h b/ldso/ldso/mips/dl-syscalls.h
index afb1cd630..996bb87c6 100644
--- a/ldso/ldso/mips/dl-syscalls.h
+++ b/ldso/ldso/mips/dl-syscalls.h
@@ -4,5 +4,3 @@
extern int _dl_errno;
#undef __set_errno
#define __set_errno(X) {(_dl_errno) = (X);}
-
-#define MMAP_HAS_6_ARGS
diff --git a/ldso/ldso/powerpc/dl-syscalls.h b/ldso/ldso/powerpc/dl-syscalls.h
index afb1cd630..996bb87c6 100644
--- a/ldso/ldso/powerpc/dl-syscalls.h
+++ b/ldso/ldso/powerpc/dl-syscalls.h
@@ -4,5 +4,3 @@
extern int _dl_errno;
#undef __set_errno
#define __set_errno(X) {(_dl_errno) = (X);}
-
-#define MMAP_HAS_6_ARGS
diff --git a/ldso/ldso/sh/dl-syscalls.h b/ldso/ldso/sh/dl-syscalls.h
index afb1cd630..996bb87c6 100644
--- a/ldso/ldso/sh/dl-syscalls.h
+++ b/ldso/ldso/sh/dl-syscalls.h
@@ -4,5 +4,3 @@
extern int _dl_errno;
#undef __set_errno
#define __set_errno(X) {(_dl_errno) = (X);}
-
-#define MMAP_HAS_6_ARGS
diff --git a/ldso/ldso/sparc/dl-syscalls.h b/ldso/ldso/sparc/dl-syscalls.h
index f29661c4e..79682c701 100644
--- a/ldso/ldso/sparc/dl-syscalls.h
+++ b/ldso/ldso/sparc/dl-syscalls.h
@@ -6,8 +6,6 @@
* sysdeps/linux/sparc/bits/syscalls.h at some point ...
*/
-#define MMAP_HAS_6_ARGS
-
#define _SYSCALL_H
#include <bits/sysnum.h>
diff --git a/ldso/ldso/x86_64/dl-syscalls.h b/ldso/ldso/x86_64/dl-syscalls.h
index afb1cd630..996bb87c6 100644
--- a/ldso/ldso/x86_64/dl-syscalls.h
+++ b/ldso/ldso/x86_64/dl-syscalls.h
@@ -4,5 +4,3 @@
extern int _dl_errno;
#undef __set_errno
#define __set_errno(X) {(_dl_errno) = (X);}
-
-#define MMAP_HAS_6_ARGS
diff --git a/libc/stdlib/abort.c b/libc/stdlib/abort.c
index 70b65a1b4..c9ad78237 100644
--- a/libc/stdlib/abort.c
+++ b/libc/stdlib/abort.c
@@ -37,39 +37,11 @@ libc_hidden_proto(raise)
libc_hidden_proto(_exit)
/* Our last ditch effort to commit suicide */
-#if defined(__alpha__)
-#define ABORT_INSTRUCTION asm ("call_pal 0")
-#elif defined(__arm__)
-#define ABORT_INSTRUCTION asm ("bl abort")
-#elif defined(__hppa__)
-#define ABORT_INSTRUCTION asm ("iitlbp %r0,(%sr0,%r0)")
-#elif defined(__i386__)
-#define ABORT_INSTRUCTION asm ("hlt")
-#elif defined(__ia64__)
-#define ABORT_INSTRUCTION asm ("break 0")
-#elif defined(__m68k__)
-#define ABORT_INSTRUCTION asm ("illegal")
-#elif defined(__mc68000__)
-#define ABORT_INSTRUCTION asm (".long 0xffffffff")
-#elif defined(__mips__)
-#define ABORT_INSTRUCTION asm ("break 255")
-#elif defined(__powerpc__)
-#define ABORT_INSTRUCTION asm (".long 0")
-#elif defined(__s390__)
-#define ABORT_INSTRUCTION asm (".word 0")
-#elif defined(__sparc__)
-#define ABORT_INSTRUCTION asm ("unimp 0xf00")
-#elif defined(__SH5__)
-#define ABORT_INSTRUCTION asm ("movi 0x10, r9; shori 0xff, r9; trapa r9")
-#elif defined(__sh2__)
-#define ABORT_INSTRUCTION asm ("trapa #32")
-#elif defined(__sh__)
-#define ABORT_INSTRUCTION asm ("trapa #0xff")
-#elif defined(__x86_64__)
-#define ABORT_INSTRUCTION asm ("hlt")
+#ifdef __UCLIBC_ABORT_INSTRUCTION__
+# define ABORT_INSTRUCTION asm(__UCLIBC_ABORT_INSTRUCTION__)
#else
-#define ABORT_INSTRUCTION
-#warning no abort instruction defined for your arch
+# define ABORT_INSTRUCTION
+# warning "no abort instruction defined for your arch"
#endif
#ifdef __UCLIBC_HAS_STDIO_SHUTDOWN_ON_ABORT__
diff --git a/libc/sysdeps/linux/alpha/bits/uClibc_arch_features.h b/libc/sysdeps/linux/alpha/bits/uClibc_arch_features.h
new file mode 100644
index 000000000..eafb7f78c
--- /dev/null
+++ b/libc/sysdeps/linux/alpha/bits/uClibc_arch_features.h
@@ -0,0 +1,33 @@
+/*
+ * Track misc arch-specific features that aren't config options
+ */
+
+#ifndef _BITS_UCLIBC_ARCH_FEATURES_H
+#define _BITS_UCLIBC_ARCH_FEATURES_H
+
+/* instruction used when calling abort() to kill yourself */
+#define __UCLIBC_ABORT_INSTRUCTION__ "call_pal 0"
+
+/* can your target use syscall6() for mmap ? */
+#undef __UCLIBC_MMAP_HAS_6_ARGS__
+
+/* does your target use syscall4() for truncate64 ? (32bit arches only) */
+#undef __UCLIBC_TRUNCATE64_HAS_4_ARGS__
+
+/* does your target have a broken create_module() ? */
+#define __UCLIBC_SLIGHTLY_BROKEN_CREATE_MODULE__
+
+/* does your target prefix all symbols with an _ ? */
+#define __UCLIBC_NO_UNDERSCORES__
+
+/* does your target have an asm .set ? */
+#define __UCLIBC_HAVE_ASM_SET_DIRECTIVE__
+
+/* shouldn't need to change these ... */
+#define __UCLIBC_ASM_GLOBAL_DIRECTIVE__
+#define __UCLIBC_ASM_TYPE_DIRECTIVE_PREFIX__
+#define __UCLIBC_HAVE_ASM_WEAK_DIRECTIVE__
+#define __UCLIBC_HAVE_ASM_WEAKEXT_DIRECTIVE__
+#define __UCLIBC_HAVE_ASM_GLOBAL_DOT_NAME__
+
+#endif /* _BITS_UCLIBC_ARCH_FEATURES_H */
diff --git a/libc/sysdeps/linux/arm/bits/uClibc_arch_features.h b/libc/sysdeps/linux/arm/bits/uClibc_arch_features.h
new file mode 100644
index 000000000..333a84966
--- /dev/null
+++ b/libc/sysdeps/linux/arm/bits/uClibc_arch_features.h
@@ -0,0 +1,33 @@
+/*
+ * Track misc arch-specific features that aren't config options
+ */
+
+#ifndef _BITS_UCLIBC_ARCH_FEATURES_H
+#define _BITS_UCLIBC_ARCH_FEATURES_H
+
+/* instruction used when calling abort() to kill yourself */
+#define __UCLIBC_ABORT_INSTRUCTION__ "bl abort"
+
+/* can your target use syscall6() for mmap ? */
+#undef __UCLIBC_MMAP_HAS_6_ARGS__
+
+/* does your target use syscall4() for truncate64 ? (32bit arches only) */
+#undef __UCLIBC_TRUNCATE64_HAS_4_ARGS__
+
+/* does your target have a broken create_module() ? */
+#define __UCLIBC_BROKEN_CREATE_MODULE__
+
+/* does your target prefix all symbols with an _ ? */
+#define __UCLIBC_NO_UNDERSCORES__
+
+/* does your target have an asm .set ? */
+#define __UCLIBC_HAVE_ASM_SET_DIRECTIVE__
+
+/* shouldn't need to change these ... */
+#define __UCLIBC_ASM_GLOBAL_DIRECTIVE__
+#define __UCLIBC_ASM_TYPE_DIRECTIVE_PREFIX__
+#define __UCLIBC_HAVE_ASM_WEAK_DIRECTIVE__
+#define __UCLIBC_HAVE_ASM_WEAKEXT_DIRECTIVE__
+#define __UCLIBC_HAVE_ASM_GLOBAL_DOT_NAME__
+
+#endif /* _BITS_UCLIBC_ARCH_FEATURES_H */
diff --git a/libc/sysdeps/linux/bfin/bits/uClibc_arch_features.h b/libc/sysdeps/linux/bfin/bits/uClibc_arch_features.h
new file mode 100644
index 000000000..003857082
--- /dev/null
+++ b/libc/sysdeps/linux/bfin/bits/uClibc_arch_features.h
@@ -0,0 +1,34 @@
+/*
+ * Track misc arch-specific features that aren't config options
+ */
+
+#ifndef _BITS_UCLIBC_ARCH_FEATURES_H
+#define _BITS_UCLIBC_ARCH_FEATURES_H
+
+/* instruction used when calling abort() to kill yourself */
+/*#define __UCLIBC_ABORT_INSTRUCTION__ "asm instruction"*/
+#undef __UCLIBC_ABORT_INSTRUCTION__
+
+/* can your target use syscall6() for mmap ? */
+#undef __UCLIBC_MMAP_HAS_6_ARGS__
+
+/* does your target use syscall4() for truncate64 ? (32bit arches only) */
+#undef __UCLIBC_TRUNCATE64_HAS_4_ARGS__
+
+/* does your target have a broken create_module() ? */
+#undef __UCLIBC_BROKEN_CREATE_MODULE__
+
+/* does your target prefix all symbols with an _ ? */
+#define __UCLIBC_NO_UNDERSCORES__
+
+/* does your target have an asm .set ? */
+#define __UCLIBC_HAVE_ASM_SET_DIRECTIVE__
+
+/* shouldn't need to change these ... */
+#define __UCLIBC_ASM_GLOBAL_DIRECTIVE__
+#define __UCLIBC_ASM_TYPE_DIRECTIVE_PREFIX__
+#define __UCLIBC_HAVE_ASM_WEAK_DIRECTIVE__
+#define __UCLIBC_HAVE_ASM_WEAKEXT_DIRECTIVE__
+#define __UCLIBC_HAVE_ASM_GLOBAL_DOT_NAME__
+
+#endif /* _BITS_UCLIBC_ARCH_FEATURES_H */
diff --git a/libc/sysdeps/linux/common/bits/uClibc_arch_features.h b/libc/sysdeps/linux/common/bits/uClibc_arch_features.h
new file mode 100644
index 000000000..5e513bff0
--- /dev/null
+++ b/libc/sysdeps/linux/common/bits/uClibc_arch_features.h
@@ -0,0 +1,36 @@
+/*
+ * Track misc arch-specific features that aren't config options
+ */
+
+#ifndef _BITS_UCLIBC_ARCH_FEATURES_H
+#define _BITS_UCLIBC_ARCH_FEATURES_H
+
+#error "You should copy this to your arch/bits/ dir and customize"
+
+/* instruction used when calling abort() to kill yourself */
+/*#define __UCLIBC_ABORT_INSTRUCTION__ "asm instruction"*/
+#undef __UCLIBC_ABORT_INSTRUCTION__
+
+/* can your target use syscall6() for mmap ? */
+#undef __UCLIBC_MMAP_HAS_6_ARGS__
+
+/* does your target use syscall4() for truncate64 ? (32bit arches only) */
+#undef __UCLIBC_TRUNCATE64_HAS_4_ARGS__
+
+/* does your target have a broken create_module() ? */
+#undef __UCLIBC_BROKEN_CREATE_MODULE__
+
+/* does your target prefix all symbols with an _ ? */
+#define __UCLIBC_NO_UNDERSCORES__
+
+/* does your target have an asm .set ? */
+#define __UCLIBC_HAVE_ASM_SET_DIRECTIVE__
+
+/* shouldn't need to change these ... */
+#define __UCLIBC_ASM_GLOBAL_DIRECTIVE__
+#define __UCLIBC_ASM_TYPE_DIRECTIVE_PREFIX__
+#define __UCLIBC_HAVE_ASM_WEAK_DIRECTIVE__
+#define __UCLIBC_HAVE_ASM_WEAKEXT_DIRECTIVE__
+#define __UCLIBC_HAVE_ASM_GLOBAL_DOT_NAME__
+
+#endif /* _BITS_UCLIBC_ARCH_FEATURES_H */
diff --git a/libc/sysdeps/linux/common/create_module.c b/libc/sysdeps/linux/common/create_module.c
index 7bd38a39c..461ba5bc5 100644
--- a/libc/sysdeps/linux/common/create_module.c
+++ b/libc/sysdeps/linux/common/create_module.c
@@ -13,11 +13,8 @@
#ifdef __NR_create_module
-#if defined(__i386__) || defined(__m68k__) || defined(__arm__) || defined(__thumb__) || defined(__cris__) || defined(__i960__)
+#if defined(__UCLIBC_BROKEN_CREATE_MODULE__)
# define __NR___create_module __NR_create_module
-# ifdef __STR_NR_create_module
-# define __STR_NR___create_module __STR_NR_create_module
-# endif
static inline _syscall2(long, __create_module, const char *, name, size_t, size);
/* By checking the value of errno, we know if we have been fooled
* by the syscall2 macro making a very high address look like a
@@ -33,7 +30,7 @@ unsigned long create_module(const char *name, size_t size)
}
return ret;
}
-#elif defined(__alpha__)
+#elif defined(__UCLIBC_SLIGHTLY_BROKEN_CREATE_MODULE__)
# define __NR___create_module __NR_create_module
/* Alpha doesn't have the same problem, exactly, but a bug in older
kernels fails to clear the error flag. Clear it here explicitly. */
diff --git a/libc/sysdeps/linux/common/ftruncate64.c b/libc/sysdeps/linux/common/ftruncate64.c
index ff732d432..cea9bc1bc 100644
--- a/libc/sysdeps/linux/common/ftruncate64.c
+++ b/libc/sysdeps/linux/common/ftruncate64.c
@@ -35,7 +35,7 @@ _syscall2(int, ftruncate64, int, fd, __off64_t, length);
# ifndef INLINE_SYSCALL
# define INLINE_SYSCALL(name, nr, args...) __syscall_ftruncate64 (args)
# define __NR___syscall_ftruncate64 __NR_ftruncate64
-# if defined(__powerpc__) || defined(__mips__)
+# if defined(__UCLIBC_TRUNCATE64_HAS_4_ARGS__)
static inline _syscall4(int, __syscall_ftruncate64, int, fd, uint32_t, pad,
unsigned long, high_length, unsigned long, low_length);
# else
@@ -49,7 +49,7 @@ int ftruncate64 (int fd, __off64_t length)
{
uint32_t low = length & 0xffffffff;
uint32_t high = length >> 32;
-# if defined(__powerpc__) || defined(__mips__)
+# if defined(__UCLIBC_TRUNCATE64_HAS_4_ARGS__)
return INLINE_SYSCALL(ftruncate64,
4, fd, 0, __LONG_LONG_PAIR (high, low));
# else
diff --git a/libc/sysdeps/linux/common/truncate64.c b/libc/sysdeps/linux/common/truncate64.c
index 59324fd3e..e227900c5 100644
--- a/libc/sysdeps/linux/common/truncate64.c
+++ b/libc/sysdeps/linux/common/truncate64.c
@@ -32,7 +32,7 @@ _syscall2(int, truncate64, const char *, path, __off64_t, length);
#ifndef INLINE_SYSCALL
#define INLINE_SYSCALL(name, nr, args...) __syscall_truncate64 (args)
#define __NR___syscall_truncate64 __NR_truncate64
-#if defined(__powerpc__) || defined(__mips__)
+#if defined(__UCLIBC_TRUNCATE64_HAS_4_ARGS__)
static inline _syscall4(int, __syscall_truncate64, const char *, path,
uint32_t, pad, unsigned long, high_length, unsigned long, low_length);
#else
@@ -47,7 +47,7 @@ int truncate64 (const char * path, __off64_t length)
{
uint32_t low = length & 0xffffffff;
uint32_t high = length >> 32;
-#if defined(__powerpc__) || defined(__mips__)
+#if defined(__UCLIBC_TRUNCATE64_HAS_4_ARGS__)
return INLINE_SYSCALL(truncate64, 4, path, 0,
__LONG_LONG_PAIR (high, low));
#else
diff --git a/libc/sysdeps/linux/cris/bits/uClibc_arch_features.h b/libc/sysdeps/linux/cris/bits/uClibc_arch_features.h
new file mode 100644
index 000000000..2da833ee4
--- /dev/null
+++ b/libc/sysdeps/linux/cris/bits/uClibc_arch_features.h
@@ -0,0 +1,34 @@
+/*
+ * Track misc arch-specific features that aren't config options
+ */
+
+#ifndef _BITS_UCLIBC_ARCH_FEATURES_H
+#define _BITS_UCLIBC_ARCH_FEATURES_H
+
+/* instruction used when calling abort() to kill yourself */
+/*#define __UCLIBC_ABORT_INSTRUCTION__ "asm instruction"*/
+#undef __UCLIBC_ABORT_INSTRUCTION__
+
+/* can your target use syscall6() for mmap ? */
+#undef __UCLIBC_MMAP_HAS_6_ARGS__
+
+/* does your target use syscall4() for truncate64 ? (32bit arches only) */
+#undef __UCLIBC_TRUNCATE64_HAS_4_ARGS__
+
+/* does your target have a broken create_module() ? */
+#define __UCLIBC_BROKEN_CREATE_MODULE__
+
+/* does your target prefix all symbols with an _ ? */
+#define __UCLIBC_NO_UNDERSCORES__
+
+/* does your target have an asm .set ? */
+#define __UCLIBC_HAVE_ASM_SET_DIRECTIVE__
+
+/* shouldn't need to change these ... */
+#define __UCLIBC_ASM_GLOBAL_DIRECTIVE__
+#define __UCLIBC_ASM_TYPE_DIRECTIVE_PREFIX__
+#define __UCLIBC_HAVE_ASM_WEAK_DIRECTIVE__
+#define __UCLIBC_HAVE_ASM_WEAKEXT_DIRECTIVE__
+#define __UCLIBC_HAVE_ASM_GLOBAL_DOT_NAME__
+
+#endif /* _BITS_UCLIBC_ARCH_FEATURES_H */
diff --git a/libc/sysdeps/linux/e1/bits/uClibc_arch_features.h b/libc/sysdeps/linux/e1/bits/uClibc_arch_features.h
new file mode 100644
index 000000000..003857082
--- /dev/null
+++ b/libc/sysdeps/linux/e1/bits/uClibc_arch_features.h
@@ -0,0 +1,34 @@
+/*
+ * Track misc arch-specific features that aren't config options
+ */
+
+#ifndef _BITS_UCLIBC_ARCH_FEATURES_H
+#define _BITS_UCLIBC_ARCH_FEATURES_H
+
+/* instruction used when calling abort() to kill yourself */
+/*#define __UCLIBC_ABORT_INSTRUCTION__ "asm instruction"*/
+#undef __UCLIBC_ABORT_INSTRUCTION__
+
+/* can your target use syscall6() for mmap ? */
+#undef __UCLIBC_MMAP_HAS_6_ARGS__
+
+/* does your target use syscall4() for truncate64 ? (32bit arches only) */
+#undef __UCLIBC_TRUNCATE64_HAS_4_ARGS__
+
+/* does your target have a broken create_module() ? */
+#undef __UCLIBC_BROKEN_CREATE_MODULE__
+
+/* does your target prefix all symbols with an _ ? */
+#define __UCLIBC_NO_UNDERSCORES__
+
+/* does your target have an asm .set ? */
+#define __UCLIBC_HAVE_ASM_SET_DIRECTIVE__
+
+/* shouldn't need to change these ... */
+#define __UCLIBC_ASM_GLOBAL_DIRECTIVE__
+#define __UCLIBC_ASM_TYPE_DIRECTIVE_PREFIX__
+#define __UCLIBC_HAVE_ASM_WEAK_DIRECTIVE__
+#define __UCLIBC_HAVE_ASM_WEAKEXT_DIRECTIVE__
+#define __UCLIBC_HAVE_ASM_GLOBAL_DOT_NAME__
+
+#endif /* _BITS_UCLIBC_ARCH_FEATURES_H */
diff --git a/libc/sysdeps/linux/frv/bits/uClibc_arch_features.h b/libc/sysdeps/linux/frv/bits/uClibc_arch_features.h
new file mode 100644
index 000000000..003857082
--- /dev/null
+++ b/libc/sysdeps/linux/frv/bits/uClibc_arch_features.h
@@ -0,0 +1,34 @@
+/*
+ * Track misc arch-specific features that aren't config options
+ */
+
+#ifndef _BITS_UCLIBC_ARCH_FEATURES_H
+#define _BITS_UCLIBC_ARCH_FEATURES_H
+
+/* instruction used when calling abort() to kill yourself */
+/*#define __UCLIBC_ABORT_INSTRUCTION__ "asm instruction"*/
+#undef __UCLIBC_ABORT_INSTRUCTION__
+
+/* can your target use syscall6() for mmap ? */
+#undef __UCLIBC_MMAP_HAS_6_ARGS__
+
+/* does your target use syscall4() for truncate64 ? (32bit arches only) */
+#undef __UCLIBC_TRUNCATE64_HAS_4_ARGS__
+
+/* does your target have a broken create_module() ? */
+#undef __UCLIBC_BROKEN_CREATE_MODULE__
+
+/* does your target prefix all symbols with an _ ? */
+#define __UCLIBC_NO_UNDERSCORES__
+
+/* does your target have an asm .set ? */
+#define __UCLIBC_HAVE_ASM_SET_DIRECTIVE__
+
+/* shouldn't need to change these ... */
+#define __UCLIBC_ASM_GLOBAL_DIRECTIVE__
+#define __UCLIBC_ASM_TYPE_DIRECTIVE_PREFIX__
+#define __UCLIBC_HAVE_ASM_WEAK_DIRECTIVE__
+#define __UCLIBC_HAVE_ASM_WEAKEXT_DIRECTIVE__
+#define __UCLIBC_HAVE_ASM_GLOBAL_DOT_NAME__
+
+#endif /* _BITS_UCLIBC_ARCH_FEATURES_H */
diff --git a/libc/sysdeps/linux/h8300/bits/uClibc_arch_features.h b/libc/sysdeps/linux/h8300/bits/uClibc_arch_features.h
new file mode 100644
index 000000000..fb91b767e
--- /dev/null
+++ b/libc/sysdeps/linux/h8300/bits/uClibc_arch_features.h
@@ -0,0 +1,34 @@
+/*
+ * Track misc arch-specific features that aren't config options
+ */
+
+#ifndef _BITS_UCLIBC_ARCH_FEATURES_H
+#define _BITS_UCLIBC_ARCH_FEATURES_H
+
+/* instruction used when calling abort() to kill yourself */
+/*#define __UCLIBC_ABORT_INSTRUCTION__ "asm instruction"*/
+#undef __UCLIBC_ABORT_INSTRUCTION__
+
+/* can your target use syscall6() for mmap ? */
+#define __UCLIBC_MMAP_HAS_6_ARGS__
+
+/* does your target use syscall4() for truncate64 ? (32bit arches only) */
+#undef __UCLIBC_MMAP_HAS_6_ARGS__
+
+/* does your target have a broken create_module() ? */
+#undef __UCLIBC_BROKEN_CREATE_MODULE__
+
+/* does your target prefix all symbols with an _ ? */
+#define __UCLIBC_NO_UNDERSCORES__
+
+/* does your target have an asm .set ? */
+#define __UCLIBC_HAVE_ASM_SET_DIRECTIVE__
+
+/* shouldn't need to change these ... */
+#define __UCLIBC_ASM_GLOBAL_DIRECTIVE__
+#define __UCLIBC_ASM_TYPE_DIRECTIVE_PREFIX__
+#define __UCLIBC_HAVE_ASM_WEAK_DIRECTIVE__
+#define __UCLIBC_HAVE_ASM_WEAKEXT_DIRECTIVE__
+#define __UCLIBC_HAVE_ASM_GLOBAL_DOT_NAME__
+
+#endif /* _BITS_UCLIBC_ARCH_FEATURES_H */
diff --git a/libc/sysdeps/linux/hppa/bits/uClibc_arch_features.h b/libc/sysdeps/linux/hppa/bits/uClibc_arch_features.h
new file mode 100644
index 000000000..b10bc85b1
--- /dev/null
+++ b/libc/sysdeps/linux/hppa/bits/uClibc_arch_features.h
@@ -0,0 +1,33 @@
+/*
+ * Track misc arch-specific features that aren't config options
+ */
+
+#ifndef _BITS_UCLIBC_ARCH_FEATURES_H
+#define _BITS_UCLIBC_ARCH_FEATURES_H
+
+/* instruction used when calling abort() to kill yourself */
+#define __UCLIBC_ABORT_INSTRUCTION__ "iitlbp %r0,(%sr0,%r0)"
+
+/* can your target use syscall6() for mmap ? */
+#undef __UCLIBC_MMAP_HAS_6_ARGS__
+
+/* does your target use syscall4() for truncate64 ? (32bit arches only) */
+#undef __UCLIBC_TRUNCATE64_HAS_4_ARGS__
+
+/* does your target have a broken create_module() ? */
+#undef __UCLIBC_BROKEN_CREATE_MODULE__
+
+/* does your target prefix all symbols with an _ ? */
+#define __UCLIBC_NO_UNDERSCORES__
+
+/* does your target have an asm .set ? */
+#define __UCLIBC_HAVE_ASM_SET_DIRECTIVE__
+
+/* shouldn't need to change these ... */
+#define __UCLIBC_ASM_GLOBAL_DIRECTIVE__
+#define __UCLIBC_ASM_TYPE_DIRECTIVE_PREFIX__
+#define __UCLIBC_HAVE_ASM_WEAK_DIRECTIVE__
+#define __UCLIBC_HAVE_ASM_WEAKEXT_DIRECTIVE__
+#define __UCLIBC_HAVE_ASM_GLOBAL_DOT_NAME__
+
+#endif /* _BITS_UCLIBC_ARCH_FEATURES_H */
diff --git a/libc/sysdeps/linux/i386/bits/uClibc_arch_features.h b/libc/sysdeps/linux/i386/bits/uClibc_arch_features.h
new file mode 100644
index 000000000..7eb946dee
--- /dev/null
+++ b/libc/sysdeps/linux/i386/bits/uClibc_arch_features.h
@@ -0,0 +1,33 @@
+/*
+ * Track misc arch-specific features that aren't config options
+ */
+
+#ifndef _BITS_UCLIBC_ARCH_FEATURES_H
+#define _BITS_UCLIBC_ARCH_FEATURES_H
+
+/* instruction used when calling abort() to kill yourself */
+#define __UCLIBC_ABORT_INSTRUCTION__ "hlt"
+
+/* can your target use syscall6() for mmap ? */
+#undef __UCLIBC_MMAP_HAS_6_ARGS__
+
+/* does your target use syscall4() for truncate64 ? (32bit arches only) */
+#undef __UCLIBC_TRUNCATE64_HAS_4_ARGS__
+
+/* does your target have a broken create_module() ? */
+#define __UCLIBC_BROKEN_CREATE_MODULE__
+
+/* does your target prefix all symbols with an _ ? */
+#define __UCLIBC_NO_UNDERSCORES__
+
+/* does your target have an asm .set ? */
+#define __UCLIBC_HAVE_ASM_SET_DIRECTIVE__
+
+/* shouldn't need to change these ... */
+#define __UCLIBC_ASM_GLOBAL_DIRECTIVE__
+#define __UCLIBC_ASM_TYPE_DIRECTIVE_PREFIX__
+#define __UCLIBC_HAVE_ASM_WEAK_DIRECTIVE__
+#define __UCLIBC_HAVE_ASM_WEAKEXT_DIRECTIVE__
+#define __UCLIBC_HAVE_ASM_GLOBAL_DOT_NAME__
+
+#endif /* _BITS_UCLIBC_ARCH_FEATURES_H */
diff --git a/libc/sysdeps/linux/i960/bits/uClibc_arch_features.h b/libc/sysdeps/linux/i960/bits/uClibc_arch_features.h
new file mode 100644
index 000000000..2da833ee4
--- /dev/null
+++ b/libc/sysdeps/linux/i960/bits/uClibc_arch_features.h
@@ -0,0 +1,34 @@
+/*
+ * Track misc arch-specific features that aren't config options
+ */
+
+#ifndef _BITS_UCLIBC_ARCH_FEATURES_H
+#define _BITS_UCLIBC_ARCH_FEATURES_H
+
+/* instruction used when calling abort() to kill yourself */
+/*#define __UCLIBC_ABORT_INSTRUCTION__ "asm instruction"*/
+#undef __UCLIBC_ABORT_INSTRUCTION__
+
+/* can your target use syscall6() for mmap ? */
+#undef __UCLIBC_MMAP_HAS_6_ARGS__
+
+/* does your target use syscall4() for truncate64 ? (32bit arches only) */
+#undef __UCLIBC_TRUNCATE64_HAS_4_ARGS__
+
+/* does your target have a broken create_module() ? */
+#define __UCLIBC_BROKEN_CREATE_MODULE__
+
+/* does your target prefix all symbols with an _ ? */
+#define __UCLIBC_NO_UNDERSCORES__
+
+/* does your target have an asm .set ? */
+#define __UCLIBC_HAVE_ASM_SET_DIRECTIVE__
+
+/* shouldn't need to change these ... */
+#define __UCLIBC_ASM_GLOBAL_DIRECTIVE__
+#define __UCLIBC_ASM_TYPE_DIRECTIVE_PREFIX__
+#define __UCLIBC_HAVE_ASM_WEAK_DIRECTIVE__
+#define __UCLIBC_HAVE_ASM_WEAKEXT_DIRECTIVE__
+#define __UCLIBC_HAVE_ASM_GLOBAL_DOT_NAME__
+
+#endif /* _BITS_UCLIBC_ARCH_FEATURES_H */
diff --git a/libc/sysdeps/linux/m68k/bits/uClibc_arch_features.h b/libc/sysdeps/linux/m68k/bits/uClibc_arch_features.h
new file mode 100644
index 000000000..347fe9707
--- /dev/null
+++ b/libc/sysdeps/linux/m68k/bits/uClibc_arch_features.h
@@ -0,0 +1,37 @@
+/*
+ * Track misc arch-specific features that aren't config options
+ */
+
+#ifndef _BITS_UCLIBC_ARCH_FEATURES_H
+#define _BITS_UCLIBC_ARCH_FEATURES_H
+
+/* instruction used when calling abort() to kill yourself */
+#if defined(__mc68000__)
+# define __UCLIBC_ABORT_INSTRUCTION__ ".long 0xffffffff"
+#else /* defined(__m68k__) */
+# define __UCLIBC_ABORT_INSTRUCTION__ "illegal"
+#endif
+
+/* can your target use syscall6() for mmap ? */
+#undef __UCLIBC_MMAP_HAS_6_ARGS__
+
+/* does your target use syscall4() for truncate64 ? (32bit arches only) */
+#undef __UCLIBC_TRUNCATE64_HAS_4_ARGS__
+
+/* does your target have a broken create_module() ? */
+#define __UCLIBC_BROKEN_CREATE_MODULE__
+
+/* does your target prefix all symbols with an _ ? */
+#define __UCLIBC_NO_UNDERSCORES__
+
+/* does your target have an asm .set ? */
+#define __UCLIBC_HAVE_ASM_SET_DIRECTIVE__
+
+/* shouldn't need to change these ... */
+#define __UCLIBC_ASM_GLOBAL_DIRECTIVE__
+#define __UCLIBC_ASM_TYPE_DIRECTIVE_PREFIX__
+#define __UCLIBC_HAVE_ASM_WEAK_DIRECTIVE__
+#define __UCLIBC_HAVE_ASM_WEAKEXT_DIRECTIVE__
+#define __UCLIBC_HAVE_ASM_GLOBAL_DOT_NAME__
+
+#endif /* _BITS_UCLIBC_ARCH_FEATURES_H */
diff --git a/libc/sysdeps/linux/microblaze/bits/uClibc_arch_features.h b/libc/sysdeps/linux/microblaze/bits/uClibc_arch_features.h
new file mode 100644
index 000000000..003857082
--- /dev/null
+++ b/libc/sysdeps/linux/microblaze/bits/uClibc_arch_features.h
@@ -0,0 +1,34 @@
+/*
+ * Track misc arch-specific features that aren't config options
+ */
+
+#ifndef _BITS_UCLIBC_ARCH_FEATURES_H
+#define _BITS_UCLIBC_ARCH_FEATURES_H
+
+/* instruction used when calling abort() to kill yourself */
+/*#define __UCLIBC_ABORT_INSTRUCTION__ "asm instruction"*/
+#undef __UCLIBC_ABORT_INSTRUCTION__
+
+/* can your target use syscall6() for mmap ? */
+#undef __UCLIBC_MMAP_HAS_6_ARGS__
+
+/* does your target use syscall4() for truncate64 ? (32bit arches only) */
+#undef __UCLIBC_TRUNCATE64_HAS_4_ARGS__
+
+/* does your target have a broken create_module() ? */
+#undef __UCLIBC_BROKEN_CREATE_MODULE__
+
+/* does your target prefix all symbols with an _ ? */
+#define __UCLIBC_NO_UNDERSCORES__
+
+/* does your target have an asm .set ? */
+#define __UCLIBC_HAVE_ASM_SET_DIRECTIVE__
+
+/* shouldn't need to change these ... */
+#define __UCLIBC_ASM_GLOBAL_DIRECTIVE__
+#define __UCLIBC_ASM_TYPE_DIRECTIVE_PREFIX__
+#define __UCLIBC_HAVE_ASM_WEAK_DIRECTIVE__
+#define __UCLIBC_HAVE_ASM_WEAKEXT_DIRECTIVE__
+#define __UCLIBC_HAVE_ASM_GLOBAL_DOT_NAME__
+
+#endif /* _BITS_UCLIBC_ARCH_FEATURES_H */
diff --git a/libc/sysdeps/linux/mips/bits/uClibc_arch_features.h b/libc/sysdeps/linux/mips/bits/uClibc_arch_features.h
new file mode 100644
index 000000000..5d73f3f6f
--- /dev/null
+++ b/libc/sysdeps/linux/mips/bits/uClibc_arch_features.h
@@ -0,0 +1,33 @@
+/*
+ * Track misc arch-specific features that aren't config options
+ */
+
+#ifndef _BITS_UCLIBC_ARCH_FEATURES_H
+#define _BITS_UCLIBC_ARCH_FEATURES_H
+
+/* instruction used when calling abort() to kill yourself */
+#define __UCLIBC_ABORT_INSTRUCTION__ "break 255"
+
+/* can your target use syscall6() for mmap ? */
+#define __UCLIBC_MMAP_HAS_6_ARGS__
+
+/* does your target use syscall4() for truncate64 ? (32bit arches only) */
+#define __UCLIBC_TRUNCATE64_HAS_4_ARGS__
+
+/* does your target have a broken create_module() ? */
+#undef __UCLIBC_BROKEN_CREATE_MODULE__
+
+/* does your target prefix all symbols with an _ ? */
+#define __UCLIBC_NO_UNDERSCORES__
+
+/* does your target have an asm .set ? */
+#define __UCLIBC_HAVE_ASM_SET_DIRECTIVE__
+
+/* shouldn't need to change these ... */
+#define __UCLIBC_ASM_GLOBAL_DIRECTIVE__
+#define __UCLIBC_ASM_TYPE_DIRECTIVE_PREFIX__
+#define __UCLIBC_HAVE_ASM_WEAK_DIRECTIVE__
+#define __UCLIBC_HAVE_ASM_WEAKEXT_DIRECTIVE__
+#define __UCLIBC_HAVE_ASM_GLOBAL_DOT_NAME__
+
+#endif /* _BITS_UCLIBC_ARCH_FEATURES_H */
diff --git a/libc/sysdeps/linux/nios/bits/uClibc_arch_features.h b/libc/sysdeps/linux/nios/bits/uClibc_arch_features.h
new file mode 100644
index 000000000..003857082
--- /dev/null
+++ b/libc/sysdeps/linux/nios/bits/uClibc_arch_features.h
@@ -0,0 +1,34 @@
+/*
+ * Track misc arch-specific features that aren't config options
+ */
+
+#ifndef _BITS_UCLIBC_ARCH_FEATURES_H
+#define _BITS_UCLIBC_ARCH_FEATURES_H
+
+/* instruction used when calling abort() to kill yourself */
+/*#define __UCLIBC_ABORT_INSTRUCTION__ "asm instruction"*/
+#undef __UCLIBC_ABORT_INSTRUCTION__
+
+/* can your target use syscall6() for mmap ? */
+#undef __UCLIBC_MMAP_HAS_6_ARGS__
+
+/* does your target use syscall4() for truncate64 ? (32bit arches only) */
+#undef __UCLIBC_TRUNCATE64_HAS_4_ARGS__
+
+/* does your target have a broken create_module() ? */
+#undef __UCLIBC_BROKEN_CREATE_MODULE__
+
+/* does your target prefix all symbols with an _ ? */
+#define __UCLIBC_NO_UNDERSCORES__
+
+/* does your target have an asm .set ? */
+#define __UCLIBC_HAVE_ASM_SET_DIRECTIVE__
+
+/* shouldn't need to change these ... */
+#define __UCLIBC_ASM_GLOBAL_DIRECTIVE__
+#define __UCLIBC_ASM_TYPE_DIRECTIVE_PREFIX__
+#define __UCLIBC_HAVE_ASM_WEAK_DIRECTIVE__
+#define __UCLIBC_HAVE_ASM_WEAKEXT_DIRECTIVE__
+#define __UCLIBC_HAVE_ASM_GLOBAL_DOT_NAME__
+
+#endif /* _BITS_UCLIBC_ARCH_FEATURES_H */
diff --git a/libc/sysdeps/linux/nios2/bits/uClibc_arch_features.h b/libc/sysdeps/linux/nios2/bits/uClibc_arch_features.h
new file mode 100644
index 000000000..003857082
--- /dev/null
+++ b/libc/sysdeps/linux/nios2/bits/uClibc_arch_features.h
@@ -0,0 +1,34 @@
+/*
+ * Track misc arch-specific features that aren't config options
+ */
+
+#ifndef _BITS_UCLIBC_ARCH_FEATURES_H
+#define _BITS_UCLIBC_ARCH_FEATURES_H
+
+/* instruction used when calling abort() to kill yourself */
+/*#define __UCLIBC_ABORT_INSTRUCTION__ "asm instruction"*/
+#undef __UCLIBC_ABORT_INSTRUCTION__
+
+/* can your target use syscall6() for mmap ? */
+#undef __UCLIBC_MMAP_HAS_6_ARGS__
+
+/* does your target use syscall4() for truncate64 ? (32bit arches only) */
+#undef __UCLIBC_TRUNCATE64_HAS_4_ARGS__
+
+/* does your target have a broken create_module() ? */
+#undef __UCLIBC_BROKEN_CREATE_MODULE__
+
+/* does your target prefix all symbols with an _ ? */
+#define __UCLIBC_NO_UNDERSCORES__
+
+/* does your target have an asm .set ? */
+#define __UCLIBC_HAVE_ASM_SET_DIRECTIVE__
+
+/* shouldn't need to change these ... */
+#define __UCLIBC_ASM_GLOBAL_DIRECTIVE__
+#define __UCLIBC_ASM_TYPE_DIRECTIVE_PREFIX__
+#define __UCLIBC_HAVE_ASM_WEAK_DIRECTIVE__
+#define __UCLIBC_HAVE_ASM_WEAKEXT_DIRECTIVE__
+#define __UCLIBC_HAVE_ASM_GLOBAL_DOT_NAME__
+
+#endif /* _BITS_UCLIBC_ARCH_FEATURES_H */
diff --git a/libc/sysdeps/linux/powerpc/bits/uClibc_arch_features.h b/libc/sysdeps/linux/powerpc/bits/uClibc_arch_features.h
new file mode 100644
index 000000000..490109108
--- /dev/null
+++ b/libc/sysdeps/linux/powerpc/bits/uClibc_arch_features.h
@@ -0,0 +1,33 @@
+/*
+ * Track misc arch-specific features that aren't config options
+ */
+
+#ifndef _BITS_UCLIBC_ARCH_FEATURES_H
+#define _BITS_UCLIBC_ARCH_FEATURES_H
+
+/* instruction used when calling abort() to kill yourself */
+#define __UCLIBC_ABORT_INSTRUCTION__ ".long 0"
+
+/* can your target use syscall6() for mmap ? */
+#define __UCLIBC_MMAP_HAS_6_ARGS__
+
+/* does your target use syscall4() for truncate64 ? (32bit arches only) */
+#define __UCLIBC_TRUNCATE64_HAS_4_ARGS__
+
+/* does your target have a broken create_module() ? */
+#undef __UCLIBC_BROKEN_CREATE_MODULE__
+
+/* does your target prefix all symbols with an _ ? */
+#define __UCLIBC_NO_UNDERSCORES__
+
+/* does your target have an asm .set ? */
+#define __UCLIBC_HAVE_ASM_SET_DIRECTIVE__
+
+/* shouldn't need to change these ... */
+#define __UCLIBC_ASM_GLOBAL_DIRECTIVE__
+#define __UCLIBC_ASM_TYPE_DIRECTIVE_PREFIX__
+#define __UCLIBC_HAVE_ASM_WEAK_DIRECTIVE__
+#define __UCLIBC_HAVE_ASM_WEAKEXT_DIRECTIVE__
+#define __UCLIBC_HAVE_ASM_GLOBAL_DOT_NAME__
+
+#endif /* _BITS_UCLIBC_ARCH_FEATURES_H */
diff --git a/libc/sysdeps/linux/sh/bits/uClibc_arch_features.h b/libc/sysdeps/linux/sh/bits/uClibc_arch_features.h
new file mode 100644
index 000000000..2c53ce643
--- /dev/null
+++ b/libc/sysdeps/linux/sh/bits/uClibc_arch_features.h
@@ -0,0 +1,39 @@
+/*
+ * Track misc arch-specific features that aren't config options
+ */
+
+#ifndef _BITS_UCLIBC_ARCH_FEATURES_H
+#define _BITS_UCLIBC_ARCH_FEATURES_H
+
+/* instruction used when calling abort() to kill yourself */
+#if defined(__SH5__)
+# define __UCLIBC_ABORT_INSTRUCTION__ "movi 0x10, r9; shori 0xff, r9; trapa r9"
+#elif defined(__sh2__)
+# define __UCLIBC_ABORT_INSTRUCTION__ "trapa #32"
+#else /* defined(__sh__) */
+# define __UCLIBC_ABORT_INSTRUCTION__ "trapa #0xff"
+#endif
+
+/* can your target use syscall6() for mmap ? */
+#define __UCLIBC_MMAP_HAS_6_ARGS__
+
+/* does your target use syscall4() for truncate64 ? (32bit arches only) */
+#undef __UCLIBC_TRUNCATE64_HAS_4_ARGS__
+
+/* does your target have a broken create_module() ? */
+#undef __UCLIBC_BROKEN_CREATE_MODULE__
+
+/* does your target prefix all symbols with an _ ? */
+#define __UCLIBC_NO_UNDERSCORES__
+
+/* does your target have an asm .set ? */
+#define __UCLIBC_HAVE_ASM_SET_DIRECTIVE__
+
+/* shouldn't need to change these ... */
+#define __UCLIBC_ASM_GLOBAL_DIRECTIVE__
+#define __UCLIBC_ASM_TYPE_DIRECTIVE_PREFIX__
+#define __UCLIBC_HAVE_ASM_WEAK_DIRECTIVE__
+#define __UCLIBC_HAVE_ASM_WEAKEXT_DIRECTIVE__
+#define __UCLIBC_HAVE_ASM_GLOBAL_DOT_NAME__
+
+#endif /* _BITS_UCLIBC_ARCH_FEATURES_H */
diff --git a/libc/sysdeps/linux/sh64/bits/uClibc_arch_features.h b/libc/sysdeps/linux/sh64/bits/uClibc_arch_features.h
new file mode 100644
index 000000000..003857082
--- /dev/null
+++ b/libc/sysdeps/linux/sh64/bits/uClibc_arch_features.h
@@ -0,0 +1,34 @@
+/*
+ * Track misc arch-specific features that aren't config options
+ */
+
+#ifndef _BITS_UCLIBC_ARCH_FEATURES_H
+#define _BITS_UCLIBC_ARCH_FEATURES_H
+
+/* instruction used when calling abort() to kill yourself */
+/*#define __UCLIBC_ABORT_INSTRUCTION__ "asm instruction"*/
+#undef __UCLIBC_ABORT_INSTRUCTION__
+
+/* can your target use syscall6() for mmap ? */
+#undef __UCLIBC_MMAP_HAS_6_ARGS__
+
+/* does your target use syscall4() for truncate64 ? (32bit arches only) */
+#undef __UCLIBC_TRUNCATE64_HAS_4_ARGS__
+
+/* does your target have a broken create_module() ? */
+#undef __UCLIBC_BROKEN_CREATE_MODULE__
+
+/* does your target prefix all symbols with an _ ? */
+#define __UCLIBC_NO_UNDERSCORES__
+
+/* does your target have an asm .set ? */
+#define __UCLIBC_HAVE_ASM_SET_DIRECTIVE__
+
+/* shouldn't need to change these ... */
+#define __UCLIBC_ASM_GLOBAL_DIRECTIVE__
+#define __UCLIBC_ASM_TYPE_DIRECTIVE_PREFIX__
+#define __UCLIBC_HAVE_ASM_WEAK_DIRECTIVE__
+#define __UCLIBC_HAVE_ASM_WEAKEXT_DIRECTIVE__
+#define __UCLIBC_HAVE_ASM_GLOBAL_DOT_NAME__
+
+#endif /* _BITS_UCLIBC_ARCH_FEATURES_H */
diff --git a/libc/sysdeps/linux/sparc/bits/uClibc_arch_features.h b/libc/sysdeps/linux/sparc/bits/uClibc_arch_features.h
new file mode 100644
index 000000000..13ae6a01f
--- /dev/null
+++ b/libc/sysdeps/linux/sparc/bits/uClibc_arch_features.h
@@ -0,0 +1,33 @@
+/*
+ * Track misc arch-specific features that aren't config options
+ */
+
+#ifndef _BITS_UCLIBC_ARCH_FEATURES_H
+#define _BITS_UCLIBC_ARCH_FEATURES_H
+
+/* instruction used when calling abort() to kill yourself */
+#define __UCLIBC_ABORT_INSTRUCTION__ "unimp 0xf00"
+
+/* can your target use syscall6() for mmap ? */
+#define __UCLIBC_MMAP_HAS_6_ARGS__
+
+/* does your target use syscall4() for truncate64 ? (32bit arches only) */
+#undef __UCLIBC_TRUNCATE64_HAS_4_ARGS__
+
+/* does your target have a broken create_module() ? */
+#undef __UCLIBC_BROKEN_CREATE_MODULE__
+
+/* does your target prefix all symbols with an _ ? */
+#define __UCLIBC_NO_UNDERSCORES__
+
+/* does your target have an asm .set ? */
+#define __UCLIBC_HAVE_ASM_SET_DIRECTIVE__
+
+/* shouldn't need to change these ... */
+#define __UCLIBC_ASM_GLOBAL_DIRECTIVE__
+#define __UCLIBC_ASM_TYPE_DIRECTIVE_PREFIX__
+#define __UCLIBC_HAVE_ASM_WEAK_DIRECTIVE__
+#define __UCLIBC_HAVE_ASM_WEAKEXT_DIRECTIVE__
+#define __UCLIBC_HAVE_ASM_GLOBAL_DOT_NAME__
+
+#endif /* _BITS_UCLIBC_ARCH_FEATURES_H */
diff --git a/libc/sysdeps/linux/v850/bits/uClibc_arch_features.h b/libc/sysdeps/linux/v850/bits/uClibc_arch_features.h
new file mode 100644
index 000000000..003857082
--- /dev/null
+++ b/libc/sysdeps/linux/v850/bits/uClibc_arch_features.h
@@ -0,0 +1,34 @@
+/*
+ * Track misc arch-specific features that aren't config options
+ */
+
+#ifndef _BITS_UCLIBC_ARCH_FEATURES_H
+#define _BITS_UCLIBC_ARCH_FEATURES_H
+
+/* instruction used when calling abort() to kill yourself */
+/*#define __UCLIBC_ABORT_INSTRUCTION__ "asm instruction"*/
+#undef __UCLIBC_ABORT_INSTRUCTION__
+
+/* can your target use syscall6() for mmap ? */
+#undef __UCLIBC_MMAP_HAS_6_ARGS__
+
+/* does your target use syscall4() for truncate64 ? (32bit arches only) */
+#undef __UCLIBC_TRUNCATE64_HAS_4_ARGS__
+
+/* does your target have a broken create_module() ? */
+#undef __UCLIBC_BROKEN_CREATE_MODULE__
+
+/* does your target prefix all symbols with an _ ? */
+#define __UCLIBC_NO_UNDERSCORES__
+
+/* does your target have an asm .set ? */
+#define __UCLIBC_HAVE_ASM_SET_DIRECTIVE__
+
+/* shouldn't need to change these ... */
+#define __UCLIBC_ASM_GLOBAL_DIRECTIVE__
+#define __UCLIBC_ASM_TYPE_DIRECTIVE_PREFIX__
+#define __UCLIBC_HAVE_ASM_WEAK_DIRECTIVE__
+#define __UCLIBC_HAVE_ASM_WEAKEXT_DIRECTIVE__
+#define __UCLIBC_HAVE_ASM_GLOBAL_DOT_NAME__
+
+#endif /* _BITS_UCLIBC_ARCH_FEATURES_H */
diff --git a/libc/sysdeps/linux/x86_64/bits/uClibc_arch_features.h b/libc/sysdeps/linux/x86_64/bits/uClibc_arch_features.h
new file mode 100644
index 000000000..1675aba20
--- /dev/null
+++ b/libc/sysdeps/linux/x86_64/bits/uClibc_arch_features.h
@@ -0,0 +1,33 @@
+/*
+ * Track misc arch-specific features that aren't config options
+ */
+
+#ifndef _BITS_UCLIBC_ARCH_FEATURES_H
+#define _BITS_UCLIBC_ARCH_FEATURES_H
+
+/* instruction used when calling abort() to kill yourself */
+#define __UCLIBC_ABORT_INSTRUCTION__ "hlt"
+
+/* can your target use syscall6() for mmap ? */
+#define __UCLIBC_MMAP_HAS_6_ARGS__
+
+/* does your target use syscall4() for truncate64 ? (32bit arches only) */
+#undef __UCLIBC_TRUNCATE64_HAS_4_ARGS__
+
+/* does your target have a broken create_module() ? */
+#undef __UCLIBC_BROKEN_CREATE_MODULE__
+
+/* does your target prefix all symbols with an _ ? */
+#define __UCLIBC_NO_UNDERSCORES__
+
+/* does your target have an asm .set ? */
+#define __UCLIBC_HAVE_ASM_SET_DIRECTIVE__
+
+/* shouldn't need to change these ... */
+#define __UCLIBC_ASM_GLOBAL_DIRECTIVE__
+#define __UCLIBC_ASM_TYPE_DIRECTIVE_PREFIX__
+#define __UCLIBC_HAVE_ASM_WEAK_DIRECTIVE__
+#define __UCLIBC_HAVE_ASM_WEAKEXT_DIRECTIVE__
+#define __UCLIBC_HAVE_ASM_GLOBAL_DOT_NAME__
+
+#endif /* _BITS_UCLIBC_ARCH_FEATURES_H */