This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
[PATCH roland/arm-aeabi] ARM: Move more aeabi routine magic out of Linux-specific directories
- From: Roland McGrath <roland at hack dot frob dot com>
- To: "GNU C. Library" <libc-alpha at sourceware dot org>
- Date: Thu, 26 Jun 2014 14:44:43 -0700 (PDT)
- Subject: [PATCH roland/arm-aeabi] ARM: Move more aeabi routine magic out of Linux-specific directories
- Authentication-results: sourceware.org; auth=none
The AEABI magic is not really Linux-specific. With this, a non-linux ARM
configuration is obliged to supply an aeabi_read_tp.S file, but the rest of
the related stuff is OS-independent.
Verified on arm-linux-gnueabihf that no code changes.
OK?
Thanks,
Roland
* sysdeps/unix/sysv/linux/arm/libc-aeabi_read_tp.S: Moved ...
* sysdeps/arm/libc-aeabi_read_tp.S: ... here.
* sysdeps/arm/Makefile [$(subdir) = csu]
(aeabi_routines): Add aeabi_read_tp and libc-aeabi_read_tp here.
(static-only-routines): Add aeabi_read_tp here.
(shared-only-routines): Add libc-aeabi_read_tp here.
(CFLAGS-libc-start.c): Add -fexceptions here.
* sysdeps/unix/sysv/linux/arm/Makefile [$(subdir) = csu]
(sysdep_routines, static-only-routines, shared-only-routines):
Don't add to these here.
(CFLAGS-libc-start.c): Likewise.
* sysdeps/unix/sysv/linux/arm/nptl-aeabi_unwind_cpp_pr1.c: Moved ...
* sysdeps/arm/nptl-aeabi_unwind_cpp_pr1.c: ... here.
* sysdeps/unix/sysv/linux/arm/rt-aeabi_unwind_cpp_pr1.c: Moved ...
* sysdeps/arm/rt-aeabi_unwind_cpp_pr1.c: ... here.
* sysdeps/arm/Makefile [$(subdir) = rt]
(librt-sysdep_routines, librt-shared-only-routines):
Append rt-aeabi_unwind_cpp_pr1 here.
* sysdeps/unix/sysv/linux/arm/Makefile [$(subdir) = rt]
(librt-sysdep_routines, librt-shared-only-routines): Don't do it here.
* sysdeps/arm/nptl/Makefile [$(subdir) = nptl]
(libpthread-sysdep_routines, libpthread-shared-only-routines):
Append nptl-aeabi_unwind_cpp_pr1 here.
(tests): Filter out tst-cleanupx4 here.
* sysdeps/unix/sysv/linux/arm/Makefile [$(subdir) = nptl]
(libpthread-sysdep_routines, libpthread-shared-only-routines, tests):
Don't do those here.
diff --git a/sysdeps/arm/Makefile b/sysdeps/arm/Makefile
index a138048..db60a17 100644
--- a/sysdeps/arm/Makefile
+++ b/sysdeps/arm/Makefile
@@ -38,11 +38,18 @@ ifeq ($(subdir),csu)
gen-as-const-headers += rtld-global-offsets.sym tlsdesc.sym
aeabi_constants = aeabi_lcsts aeabi_sighandlers aeabi_math
aeabi_routines = aeabi_assert aeabi_localeconv aeabi_errno_addr \
- aeabi_mb_cur_max aeabi_atexit aeabi_memclr aeabi_memcpy \
- aeabi_memmove aeabi_memset
+ aeabi_mb_cur_max aeabi_atexit aeabi_memclr aeabi_memcpy \
+ aeabi_memmove aeabi_memset \
+ aeabi_read_tp libc-aeabi_read_tp
sysdep_routines += $(aeabi_constants) $(aeabi_routines)
-static-only-routines += $(aeabi_constants)
+static-only-routines += $(aeabi_constants) aeabi_read_tp
+shared-only-routines += libc-aeabi_read_tp
+
+# In order for unwinding to fail when it falls out of main, we need a
+# cantunwind marker. There's one in start.S. To make sure we reach it, add
+# unwind tables for __libc_start_main.
+CFLAGS-libc-start.c += -fexceptions
endif
ifeq ($(subdir),gmon)
@@ -52,3 +59,8 @@ endif
ifeq ($(subdir),debug)
CFLAGS-backtrace.c += -funwind-tables
endif
+
+ifeq ($(subdir),rt)
+librt-sysdep_routines += rt-aeabi_unwind_cpp_pr1
+librt-shared-only-routines += rt-aeabi_unwind_cpp_pr1
+endif
diff --git a/sysdeps/unix/sysv/linux/arm/libc-aeabi_read_tp.S b/sysdeps/arm/libc-aeabi_read_tp.S
similarity index 100%
rename from sysdeps/unix/sysv/linux/arm/libc-aeabi_read_tp.S
rename to sysdeps/arm/libc-aeabi_read_tp.S
diff --git a/sysdeps/unix/sysv/linux/arm/nptl-aeabi_unwind_cpp_pr1.c b/sysdeps/arm/nptl-aeabi_unwind_cpp_pr1.c
similarity index 100%
rename from sysdeps/unix/sysv/linux/arm/nptl-aeabi_unwind_cpp_pr1.c
rename to sysdeps/arm/nptl-aeabi_unwind_cpp_pr1.c
diff --git a/sysdeps/arm/nptl/Makefile b/sysdeps/arm/nptl/Makefile
index 143850e..2c31e76 100644
--- a/sysdeps/arm/nptl/Makefile
+++ b/sysdeps/arm/nptl/Makefile
@@ -18,3 +18,16 @@
ifeq ($(subdir),csu)
gen-as-const-headers += tcb-offsets.sym
endif
+
+ifeq ($(subdir),nptl)
+libpthread-sysdep_routines += nptl-aeabi_unwind_cpp_pr1
+libpthread-shared-only-routines += nptl-aeabi_unwind_cpp_pr1
+
+# This test relies on compiling part of the binary with EH information,
+# part without, and unwinding through. The .ARM.exidx tables have
+# start addresses for EH regions, but no end addresses. Every
+# region an exception needs to propogate through must have unwind
+# information, or a previous function's unwind table may be used
+# by mistake.
+tests := $(filter-out tst-cleanupx4,$(tests))
+endif
diff --git a/sysdeps/unix/sysv/linux/arm/rt-aeabi_unwind_cpp_pr1.c b/sysdeps/arm/rt-aeabi_unwind_cpp_pr1.c
similarity index 100%
rename from sysdeps/unix/sysv/linux/arm/rt-aeabi_unwind_cpp_pr1.c
rename to sysdeps/arm/rt-aeabi_unwind_cpp_pr1.c
diff --git a/sysdeps/unix/sysv/linux/arm/Makefile b/sysdeps/unix/sysv/linux/arm/Makefile
index 38275cd..142bca3 100644
--- a/sysdeps/unix/sysv/linux/arm/Makefile
+++ b/sysdeps/unix/sysv/linux/arm/Makefile
@@ -1,14 +1,3 @@
-ifeq ($(subdir),csu)
-# In order for unwinding to fail when it falls out of main, we need a
-# cantunwind marker. There's one in start.S. To make sure we reach it, add
-# unwind tables for __libc_start_main.
-CFLAGS-libc-start.c += -fexceptions
-
-sysdep_routines += aeabi_read_tp libc-aeabi_read_tp
-static-only-routines += aeabi_read_tp
-shared-only-routines += libc-aeabi_read_tp
-endif
-
ifeq ($(subdir),elf)
sysdep-rtld-routines += aeabi_read_tp libc-do-syscall
endif
@@ -37,8 +26,8 @@ libcrypt-sysdep_routines += libc-do-syscall
endif
ifeq ($(subdir),rt)
-librt-sysdep_routines += libc-do-syscall rt-aeabi_unwind_cpp_pr1
-librt-shared-only-routines += libc-do-syscall rt-aeabi_unwind_cpp_pr1
+librt-sysdep_routines += libc-do-syscall
+librt-shared-only-routines += libc-do-syscall
endif
ifeq ($(subdir),nptl)