[roland/arm-aeabi] ARM: Move more aeabi routine magic out of Linux-specific directories
Commit Message
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.
Comments
On Thu, 26 Jun 2014, Roland McGrath wrote:
> 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))
You appear to be copying this tests change, and the libpthread-*
additions, from sysdeps/unix/sysv/linux/arm/Makefile but without removing
it from that file, so leaving duplicate copies. OK with the duplicates
removed (of course the libc-do-syscall additions to libpthread-* need to
remain behind in sysdeps/unix/sysv/linux/arm/Makefile), presuming that
works.
(The unwind info issue described shouldn't apply with binutils postdating
2009-05-05 Paul Brook <paul@codesourcery.com>
* bfd-in.h (elf32_arm_fix_exidx_coverage): Add prototype.
* bfd-in2.h: Regenerate.
* elf32-arm.c (arm_unwind_edit_type, arm_unwind_table_edit): Define.
(_arm_elf_section_data): Add text and exidx fields.
(add_unwind_table_edit, get_arm_elf_section_data, adjust_exidx_size,
insert_cantunwind_after, elf32_arm_fix_exidx_coverage, offset_prel31,
copy_exidx_entry): New functions.
(elf32_arm_write_section): Fixup .ARM.exidx contents.
which includes all supported binutils versions - but that's a separate
matter, and it may be that the explicit cantunwind markers on intermediate
frames aren't sufficient for the test to work, just for it not to use
other functions' unwind info accidentally.)
> You appear to be copying this tests change, and the libpthread-*
> additions, from sysdeps/unix/sysv/linux/arm/Makefile but without removing
> it from that file, so leaving duplicate copies. OK with the duplicates
> removed (of course the libc-do-syscall additions to libpthread-* need to
> remain behind in sysdeps/unix/sysv/linux/arm/Makefile), presuming that
> works.
Oops. Removed those and committed.
> (The unwind info issue described shouldn't apply with binutils postdating
>
> 2009-05-05 Paul Brook <paul@codesourcery.com>
>
> * bfd-in.h (elf32_arm_fix_exidx_coverage): Add prototype.
> * bfd-in2.h: Regenerate.
> * elf32-arm.c (arm_unwind_edit_type, arm_unwind_table_edit): Define.
> (_arm_elf_section_data): Add text and exidx fields.
> (add_unwind_table_edit, get_arm_elf_section_data, adjust_exidx_size,
> insert_cantunwind_after, elf32_arm_fix_exidx_coverage, offset_prel31,
> copy_exidx_entry): New functions.
> (elf32_arm_write_section): Fixup .ARM.exidx contents.
>
> which includes all supported binutils versions - but that's a separate
> matter, and it may be that the explicit cantunwind markers on intermediate
> frames aren't sufficient for the test to work, just for it not to use
> other functions' unwind info accidentally.)
OK. That is indeed orthogonal. If it's unnecessary and can be removed,
then please do that later.
Thanks,
Roland
@@ -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
similarity index 100%
rename from sysdeps/unix/sysv/linux/arm/libc-aeabi_read_tp.S
rename to sysdeps/arm/libc-aeabi_read_tp.S
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
@@ -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
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
@@ -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)