From e85b9ca2afe8edbb9fa99c6ce2cc4e52dce18c21 Mon Sep 17 00:00:00 2001 From: Andrew Hsieh Date: Fri, 2 Aug 2013 15:27:26 +0800 Subject: [4.6,4.8] Add stack unwinding directives for __aeabi_idiv0 in libgcc.a Same fix to 4.7 in 5ea1e88a7f14a78a01d95f66e388eb15908a5225 Change-Id: I1b2ce4ad72e6b2a327183703d9e49295cf2bad25 --- gcc-4.6/gcc/Makefile.in | 3 ++- gcc-4.6/gcc/config/arm/lib1funcs.asm | 6 ++++++ gcc-4.8/libgcc/Makefile.in | 2 ++ gcc-4.8/libgcc/config/arm/lib1funcs.S | 6 ++++++ 4 files changed, 16 insertions(+), 1 deletion(-) diff --git a/gcc-4.6/gcc/Makefile.in b/gcc-4.6/gcc/Makefile.in index 031db74b2..e8a444c9a 100644 --- a/gcc-4.6/gcc/Makefile.in +++ b/gcc-4.6/gcc/Makefile.in @@ -646,12 +646,13 @@ INHIBIT_LIBC_CFLAGS = -Dinhibit_libc endif # Options to use when compiling libgcc2.a. +# Adding -funwind-tables to debug idiv0 cases for Android # LIBGCC2_DEBUG_CFLAGS = -g LIBGCC2_CFLAGS = -O2 $(LIBGCC2_INCLUDES) $(GCC_CFLAGS) $(TARGET_LIBGCC2_CFLAGS) \ $(LIBGCC2_DEBUG_CFLAGS) $(GTHREAD_FLAGS) \ -DIN_LIBGCC2 -D__GCC_FLOAT_NOT_NEEDED \ - -fno-stack-protector \ + -fno-stack-protector -funwind-tables \ $(INHIBIT_LIBC_CFLAGS) # Additional options to use when compiling libgcc2.a. diff --git a/gcc-4.6/gcc/config/arm/lib1funcs.asm b/gcc-4.6/gcc/config/arm/lib1funcs.asm index 2e76c01df..a921b8fd0 100644 --- a/gcc-4.6/gcc/config/arm/lib1funcs.asm +++ b/gcc-4.6/gcc/config/arm/lib1funcs.asm @@ -1261,10 +1261,16 @@ LSYM(Lover12): ARM_FUNC_START div0 #endif + /* ANDROID LOCAL BEGIN */ + /* Adding stack unwinding directives to debug divide-by-0 errors */ + .fnstart + .save {r1, lr} do_push {r1, lr} mov r0, #SIGFPE bl SYM(raise) __PLT__ RETLDM r1 + .fnend + /* ANDROID LOCAL END */ #ifdef __ARM_EABI__ FUNC_END aeabi_ldiv0 diff --git a/gcc-4.8/libgcc/Makefile.in b/gcc-4.8/libgcc/Makefile.in index ba1a9756c..a824e82fd 100644 --- a/gcc-4.8/libgcc/Makefile.in +++ b/gcc-4.8/libgcc/Makefile.in @@ -221,11 +221,13 @@ DECNUMINC = endif # Options to use when compiling libgcc2.a. +# Adding -funwind-tables to debug idiv0 cases for Android # LIBGCC2_DEBUG_CFLAGS = -g LIBGCC2_CFLAGS = -O2 $(LIBGCC2_INCLUDES) $(GCC_CFLAGS) $(HOST_LIBGCC2_CFLAGS) \ $(LIBGCC2_DEBUG_CFLAGS) -DIN_LIBGCC2 \ -fbuilding-libgcc -fno-stack-protector \ + -funwind-tables \ $(INHIBIT_LIBC_CFLAGS) # Additional options to use when compiling libgcc2.a. diff --git a/gcc-4.8/libgcc/config/arm/lib1funcs.S b/gcc-4.8/libgcc/config/arm/lib1funcs.S index 8b140d9da..685e53299 100644 --- a/gcc-4.8/libgcc/config/arm/lib1funcs.S +++ b/gcc-4.8/libgcc/config/arm/lib1funcs.S @@ -1326,10 +1326,16 @@ LSYM(Lover12): ARM_FUNC_START div0 #endif + /* ANDROID LOCAL BEGIN */ + /* Adding stack unwinding directives to debug divide-by-0 errors */ + .fnstart + .save {r1, lr} do_push {r1, lr} mov r0, #SIGFPE bl SYM(raise) __PLT__ RETLDM r1 + .fnend + /* ANDROID LOCAL END */ #ifdef __ARM_EABI__ FUNC_END aeabi_ldiv0 -- cgit v1.2.3