Message ID | 20140626214443.B9EC92C39BC@topped-with-meat.com |
---|---|
State | New |
Headers | show |
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
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)