diff --git a/config/libc/glibc.in b/config/libc/glibc.in index fcd449df..a297bb15 100644 --- a/config/libc/glibc.in +++ b/config/libc/glibc.in @@ -26,9 +26,14 @@ config GLIBC_DEP_KERNEL_HEADERS_VERSION def_bool y select LINUX_REQUIRE_3_2_or_later if GLIBC_2_24_or_later +# Glibc 2.26 requires at least binutils 2.25. +# Also, binutils 2.30 fail while compiling aarch64 glibc; fixed in 2.27 +# and backported to 2.26. For other versions, require binutils older than +# 2.30 (if the patch is backported, binutils 2.23 will break). config GLIBC_DEP_BINUTILS def_bool y select BINUTILS_REQUIRE_2_25_or_later if GLIBC_2_26_or_later + select BINUTILS_REQUIRE_older_than_2_30 if GLIBC_older_than_2_26 && ARCH_ARM && ARCH_64 config GLIBC_DEP_GCC def_bool y diff --git a/packages/binutils/package.desc b/packages/binutils/package.desc index 4014b324..cf38889b 100644 --- a/packages/binutils/package.desc +++ b/packages/binutils/package.desc @@ -1,6 +1,6 @@ repository='git git://sourceware.org/git/binutils-gdb.git' mirrors='$(CT_Mirrors GNU binutils) $(CT_Mirrors sourceware binutils/releases)' origin='GNU' -milestones='2.23 2.25' +milestones='2.23 2.25 2.30' archive_formats='.tar.xz .tar.bz2 .tar.gz' signature_format='packed/.sig' diff --git a/packages/gcc/7.3.0/0002-gcc-plugin-Win-Dont-need-undefined-extern-var-refs-nor-fpic.patch b/packages/gcc/7.3.0/0002-gcc-plugin-Win-Dont-need-undefined-extern-var-refs-nor-fpic.patch index a5f37216..44874a79 100644 --- a/packages/gcc/7.3.0/0002-gcc-plugin-Win-Dont-need-undefined-extern-var-refs-nor-fpic.patch +++ b/packages/gcc/7.3.0/0002-gcc-plugin-Win-Dont-need-undefined-extern-var-refs-nor-fpic.patch @@ -53,7 +53,7 @@ if test x"$have_pic_shared" != x"yes" -o x"$ac_cv_search_dlopen" = x"no"; then --- a/gcc/configure +++ b/gcc/configure -@@ -29478,6 +29478,9 @@ +@@ -29510,6 +29510,9 @@ pluginlibs= @@ -63,7 +63,7 @@ case "${host}" in *-*-darwin*) if test x$build = x$host; then -@@ -29488,6 +29491,11 @@ +@@ -29520,6 +29523,11 @@ export_sym_check= fi ;; @@ -75,7 +75,7 @@ *) if test x$build = x$host; then export_sym_check="objdump${exeext} -T" -@@ -29600,23 +29608,23 @@ +@@ -29632,23 +29640,23 @@ case "${host}" in *-*-darwin*) CFLAGS=`echo $CFLAGS | sed s/-mdynamic-no-pic//g` diff --git a/packages/gcc/7.3.0/0007-fix-m68k-uclinux.patch b/packages/gcc/7.3.0/0006-fix-m68k-uclinux.patch similarity index 96% rename from packages/gcc/7.3.0/0007-fix-m68k-uclinux.patch rename to packages/gcc/7.3.0/0006-fix-m68k-uclinux.patch index 9edd7daf..28b0f3dc 100644 --- a/packages/gcc/7.3.0/0007-fix-m68k-uclinux.patch +++ b/packages/gcc/7.3.0/0006-fix-m68k-uclinux.patch @@ -10,7 +10,7 @@ Signed-off-by: Waldemar Brodkorb --- a/libgcc/config.host +++ b/libgcc/config.host -@@ -820,7 +820,7 @@ +@@ -821,7 +821,7 @@ m68k*-*-openbsd*) ;; m68k-*-uclinux*) # Motorola m68k/ColdFire running uClinux with uClibc diff --git a/packages/gcc/7.3.0/0008-libgfortran-missing-include.patch b/packages/gcc/7.3.0/0007-libgfortran-missing-include.patch similarity index 100% rename from packages/gcc/7.3.0/0008-libgfortran-missing-include.patch rename to packages/gcc/7.3.0/0007-libgfortran-missing-include.patch diff --git a/packages/gcc/7.3.0/0009-nios2-bad-multilib-default.patch b/packages/gcc/7.3.0/0008-nios2-bad-multilib-default.patch similarity index 100% rename from packages/gcc/7.3.0/0009-nios2-bad-multilib-default.patch rename to packages/gcc/7.3.0/0008-nios2-bad-multilib-default.patch diff --git a/packages/gcc/7.3.0/0010-libgcc-disable-split-stack-nothreads.patch b/packages/gcc/7.3.0/0009-libgcc-disable-split-stack-nothreads.patch similarity index 100% rename from packages/gcc/7.3.0/0010-libgcc-disable-split-stack-nothreads.patch rename to packages/gcc/7.3.0/0009-libgcc-disable-split-stack-nothreads.patch diff --git a/packages/gcc/7.3.0/0011-bionic-ndk.patch b/packages/gcc/7.3.0/0010-bionic-ndk.patch similarity index 100% rename from packages/gcc/7.3.0/0011-bionic-ndk.patch rename to packages/gcc/7.3.0/0010-bionic-ndk.patch diff --git a/packages/gcc/7.3.0/0012-bionic-errno.patch b/packages/gcc/7.3.0/0011-bionic-errno.patch similarity index 100% rename from packages/gcc/7.3.0/0012-bionic-errno.patch rename to packages/gcc/7.3.0/0011-bionic-errno.patch diff --git a/packages/gcc/7.3.0/0012-crystax.patch b/packages/gcc/7.3.0/0012-crystax.patch new file mode 100644 index 00000000..3015e7c6 --- /dev/null +++ b/packages/gcc/7.3.0/0012-crystax.patch @@ -0,0 +1,529 @@ +commit 080803512c8f6f87c2f1f711170d54033144d628 +Author: Dmitry Moskalchuk +Date: Wed Jul 29 11:28:29 2015 +0300 + + [android] Apply Android-related modifications + + Signed-off-by: Dmitry Moskalchuk + +[Edited: keep libstdc++, drop libcrystax-related modifications] +--- + gcc/config.gcc | 17 +++++++- + gcc/config/aarch64/aarch64-linux-android.h | 59 +++++++++++++++++++++++++++++ + gcc/config/aarch64/aarch64-linux.h | 9 +++- + gcc/config/arm/arm.h | 3 - + gcc/config/arm/arm.md | 2 + gcc/config/arm/arm.opt | 4 + + gcc/config/arm/elf.h | 9 ++-- + gcc/config/arm/linux-eabi.h | 7 ++- + gcc/config/i386/gnu-user.h | 7 ++- + gcc/config/i386/gnu-user64.h | 5 ++ + gcc/config/i386/linux-common.h | 8 +++ + gcc/config/linux-android.h | 13 +++--- + gcc/config/mips/android.h | 49 ++++++++++++++++++++++++ + gcc/config/mips/gnu-user.h | 6 +- + gcc/config/mips/linux-common.h | 2 + gcc/config/mips/t-linux-android | 3 + + gcc/config/mips/t-linux-android64 | 4 + + libgcc/gthr-posix.h | 13 ++++++ + libstdc++-v3/configure | 12 +++++ + libstdc++-v3/include/bits/locale_facets.h | 18 +++++++- + libstdc++-v3/libsupc++/guard.cc | 5 ++ + 21 files changed, 235 insertions(+), 20 deletions(-) + +--- a/gcc/config.gcc ++++ b/gcc/config.gcc +@@ -963,13 +963,17 @@ + tmake_file="${tmake_file} aarch64/t-aarch64 aarch64/t-aarch64-freebsd" + ;; + aarch64*-*-linux*) +- tm_file="${tm_file} dbxelf.h elfos.h gnu-user.h linux.h glibc-stdint.h" ++ tm_file="${tm_file} dbxelf.h elfos.h gnu-user.h linux.h linux-android.h glibc-stdint.h" + tm_file="${tm_file} aarch64/aarch64-elf.h aarch64/aarch64-linux.h" ++ extra_options="${extra_options} linux-android.opt" + tmake_file="${tmake_file} aarch64/t-aarch64 aarch64/t-aarch64-linux" + case $target in + aarch64_be-*) + tm_defines="${tm_defines} TARGET_BIG_ENDIAN_DEFAULT=1" + ;; ++ aarch64*-*-linux-android*) ++ tm_file="${tm_file} aarch64/aarch64-linux-android.h" ++ ;; + esac + aarch64_multilibs="${with_multilib_list}" + if test "$aarch64_multilibs" = "default"; then +@@ -2092,6 +2096,17 @@ + tm_file="dbxelf.h elfos.h gnu-user.h linux.h linux-android.h glibc-stdint.h ${tm_file} mips/gnu-user.h mips/linux.h mips/linux-common.h" + extra_options="${extra_options} linux-android.opt" + case ${target} in ++ mips64*android*) ++ default_mips_arch=mips64r6 ++ default_mips_abi=64 ++ tm_file="${tm_file} mips/android.h" ++ tmake_file="${tmake_file} mips/t-linux-android64" ++ ;; ++ mips*android*) ++ default_mips_arch=mips32 ++ tm_file="${tm_file} mips/android.h" ++ tmake_file="$tmake_file mips/t-linux-android" ++ ;; + mipsisa32r6*) + default_mips_arch=mips32r6 + ;; +--- /dev/null ++++ b/gcc/config/aarch64/aarch64-linux-android.h +@@ -0,0 +1,59 @@ ++/* Machine description for AArch64 architecture. ++ Copyright (C) 2014 Free Software Foundation, Inc. ++ ++ This file is part of GCC. ++ ++ GCC is free software; you can redistribute it and/or modify it ++ under the terms of the GNU General Public License as published by ++ the Free Software Foundation; either version 3, or (at your option) ++ any later version. ++ ++ GCC is distributed in the hope that it will be useful, but ++ WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License ++ along with GCC; see the file COPYING3. If not see ++ . */ ++ ++#ifndef GCC_AARCH64_LINUX_ANDROID_H ++#define GCC_AARCH64_LINUX_ANDROID_H ++ ++ ++#undef TARGET_OS_CPP_BUILTINS ++#define TARGET_OS_CPP_BUILTINS() \ ++ do \ ++ { \ ++ GNU_USER_TARGET_OS_CPP_BUILTINS(); \ ++ ANDROID_TARGET_OS_CPP_BUILTINS(); \ ++ } \ ++ while (0) ++ ++#undef LINK_SPEC ++#define LINK_SPEC \ ++ LINUX_OR_ANDROID_LD (LINUX_TARGET_LINK_SPEC, \ ++ LINUX_TARGET_LINK_SPEC " " ANDROID_LINK_SPEC) ++ ++#undef CC1_SPEC ++#define CC1_SPEC \ ++ LINUX_OR_ANDROID_CC (GNU_USER_TARGET_CC1_SPEC, \ ++ GNU_USER_TARGET_CC1_SPEC " " ANDROID_CC1_SPEC("-fpic")) ++ ++#define CC1PLUS_SPEC \ ++ LINUX_OR_ANDROID_CC ("", ANDROID_CC1PLUS_SPEC) ++ ++#undef LIB_SPEC ++#define LIB_SPEC \ ++ LINUX_OR_ANDROID_LD (GNU_USER_TARGET_LIB_SPEC, \ ++ GNU_USER_TARGET_NO_PTHREADS_LIB_SPEC " " ANDROID_LIB_SPEC) ++ ++#undef STARTFILE_SPEC ++#define STARTFILE_SPEC \ ++ LINUX_OR_ANDROID_LD (GNU_USER_TARGET_STARTFILE_SPEC, ANDROID_STARTFILE_SPEC) ++ ++#undef ENDFILE_SPEC ++#define ENDFILE_SPEC \ ++ LINUX_OR_ANDROID_LD (GNU_USER_TARGET_ENDFILE_SPEC, ANDROID_ENDFILE_SPEC) ++ ++#endif /* GCC_AARCH64_LINUX_ANDROID_H */ +--- a/gcc/config/aarch64/aarch64-linux.h ++++ b/gcc/config/aarch64/aarch64-linux.h +@@ -21,7 +21,14 @@ + #ifndef GCC_AARCH64_LINUX_H + #define GCC_AARCH64_LINUX_H + +-#define GLIBC_DYNAMIC_LINKER "/lib/ld-linux-aarch64%{mbig-endian:_be}%{mabi=ilp32:_ilp32}.so.1" ++#ifndef RUNTIME_ROOT_PREFIX ++#define RUNTIME_ROOT_PREFIX "" ++#endif ++#define GLIBC_DYNAMIC_LINKER RUNTIME_ROOT_PREFIX "/lib/ld-linux-aarch64%{mbig-endian:_be}%{mabi=ilp32:_ilp32}.so.1" ++#ifdef BIONIC_DYNAMIC_LINKER ++#undef BIONIC_DYNAMIC_LINKER ++#endif ++#define BIONIC_DYNAMIC_LINKER RUNTIME_ROOT_PREFIX "/system/bin/linker64" + + #undef MUSL_DYNAMIC_LINKER + #define MUSL_DYNAMIC_LINKER "/lib/ld-musl-aarch64%{mbig-endian:_be}%{mabi=ilp32:_ilp32}.so.1" +--- a/gcc/config/arm/arm.h ++++ b/gcc/config/arm/arm.h +@@ -1876,10 +1876,11 @@ + + #define CASE_VECTOR_PC_RELATIVE (TARGET_THUMB2 \ + || (TARGET_THUMB1 \ ++ && !inline_thumb1_jump_table \ + && (optimize_size || flag_pic))) + + #define CASE_VECTOR_SHORTEN_MODE(min, max, body) \ +- (TARGET_THUMB1 \ ++ (TARGET_THUMB1 && !inline_thumb1_jump_table \ + ? (min >= 0 && max < 512 \ + ? (ADDR_DIFF_VEC_FLAGS (body).offset_unsigned = 1, QImode) \ + : min >= -256 && max < 256 \ +--- a/gcc/config/arm/arm.md ++++ b/gcc/config/arm/arm.md +@@ -8668,7 +8668,7 @@ + (match_operand:SI 2 "const_int_operand" "") ; total range + (match_operand:SI 3 "" "") ; table label + (match_operand:SI 4 "" "")] ; Out of range label +- "(TARGET_32BIT || optimize_size || flag_pic) && !target_pure_code" ++ "(TARGET_32BIT || ((optimize_size || flag_pic) && !inline_thumb1_jump_table)) && !target_pure_code" + " + { + enum insn_code code; +--- a/gcc/config/arm/arm.opt ++++ b/gcc/config/arm/arm.opt +@@ -193,6 +193,10 @@ + Target Report Mask(INTERWORK) + Support calls between Thumb and ARM instruction sets. + ++minline-thumb1-jumptable ++Target Report Var(inline_thumb1_jump_table) ++Inline Thumb1 Jump table code ++ + mtls-dialect= + Target RejectNegative Joined Enum(tls_type) Var(target_tls_dialect) Init(TLS_GNU) + Specify thread local storage scheme. +--- a/gcc/config/arm/elf.h ++++ b/gcc/config/arm/elf.h +@@ -56,8 +56,7 @@ + #undef SUBSUBTARGET_EXTRA_SPECS + #define SUBSUBTARGET_EXTRA_SPECS + +-#ifndef ASM_SPEC +-#define ASM_SPEC "\ ++#define DEFAULT_ASM_SPEC "\ + %{mbig-endian:-EB} \ + %{mlittle-endian:-EL} \ + %(asm_cpu_spec) \ +@@ -66,6 +65,9 @@ + %{mthumb-interwork:-mthumb-interwork} \ + %{mfloat-abi=*} %{mfpu=*} \ + %(subtarget_extra_asm_spec)" ++ ++#ifndef ASM_SPEC ++#define ASM_SPEC DEFAULT_ASM_SPEC + #endif + + /* The ARM uses @ are a comment character so we need to redefine +@@ -95,7 +97,8 @@ + the code more efficient, but for Thumb-1 it's better to put them out of + band unless we are generating compressed tables. */ + #define JUMP_TABLES_IN_TEXT_SECTION \ +- ((TARGET_32BIT || (TARGET_THUMB && (optimize_size || flag_pic))) \ ++ ((TARGET_32BIT || (TARGET_THUMB && !inline_thumb1_jump_table \ ++ && (optimize_size || flag_pic))) \ + && !target_pure_code) + + #ifndef LINK_SPEC +--- a/gcc/config/arm/linux-eabi.h ++++ b/gcc/config/arm/linux-eabi.h +@@ -102,11 +102,16 @@ + #define CC1_SPEC \ + LINUX_OR_ANDROID_CC (GNU_USER_TARGET_CC1_SPEC " " ASAN_CC1_SPEC, \ + GNU_USER_TARGET_CC1_SPEC " " ASAN_CC1_SPEC " " \ +- ANDROID_CC1_SPEC) ++ ANDROID_CC1_SPEC("-fpic")) + + #define CC1PLUS_SPEC \ + LINUX_OR_ANDROID_CC ("", ANDROID_CC1PLUS_SPEC) + ++#undef ASM_SPEC ++#define ASM_SPEC \ ++ LINUX_OR_ANDROID_CC (DEFAULT_ASM_SPEC, \ ++ DEFAULT_ASM_SPEC " " ANDROID_ASM_SPEC) ++ + #undef LIB_SPEC + #define LIB_SPEC \ + LINUX_OR_ANDROID_LD (GNU_USER_TARGET_LIB_SPEC, \ +--- a/gcc/config/i386/gnu-user.h ++++ b/gcc/config/i386/gnu-user.h +@@ -65,9 +65,14 @@ + When the -shared link option is used a final link is not being + done. */ + ++#undef ANDROID_TARGET_CC1_SPEC ++#define ANDROID_TARGET_CC1_SPEC \ ++ " -mssse3 -fno-short-enums " \ ++ + #undef ASM_SPEC + #define ASM_SPEC \ +- "--32 %{!mno-sse2avx:%{mavx:-msse2avx}} %{msse2avx:%{!mavx:-msse2avx}}" ++ "--32 %{!mno-sse2avx:%{mavx:-msse2avx}} %{msse2avx:%{!mavx:-msse2avx}} " \ ++ LINUX_OR_ANDROID_CC ("", ANDROID_ASM_SPEC) + + #undef SUBTARGET_EXTRA_SPECS + #define SUBTARGET_EXTRA_SPECS \ +--- a/gcc/config/i386/gnu-user64.h ++++ b/gcc/config/i386/gnu-user64.h +@@ -46,6 +46,11 @@ + #define SPEC_X32 "mx32" + #endif + ++#undef ANDROID_TARGET_CC1_SPEC ++#define ANDROID_TARGET_CC1_SPEC \ ++ "%{m32:-mssse3 -fno-short-enums}" \ ++ "%{!m32:-msse4.2 -mpopcnt}" ++ + #undef ASM_SPEC + #define ASM_SPEC "%{" SPEC_32 ":--32} \ + %{" SPEC_64 ":--64} \ +--- a/gcc/config/i386/linux-common.h ++++ b/gcc/config/i386/linux-common.h +@@ -30,7 +30,13 @@ + #undef CC1_SPEC + #define CC1_SPEC \ + LINUX_OR_ANDROID_CC (GNU_USER_TARGET_CC1_SPEC, \ +- GNU_USER_TARGET_CC1_SPEC " " ANDROID_CC1_SPEC) ++ GNU_USER_TARGET_CC1_SPEC \ ++ ANDROID_TARGET_CC1_SPEC \ ++ " " \ ++ ANDROID_CC1_SPEC("-fPIC")) ++ ++#define CC1PLUS_SPEC \ ++ LINUX_OR_ANDROID_CC ("", ANDROID_CC1PLUS_SPEC) + + #undef LINK_SPEC + #define LINK_SPEC \ +--- a/gcc/config/linux-android.h ++++ b/gcc/config/linux-android.h +@@ -38,15 +38,18 @@ + "%{" NOANDROID "|tno-android-ld:" LINUX_SPEC ";:" ANDROID_SPEC "}" + + #define ANDROID_LINK_SPEC \ +- "%{shared: -Bsymbolic}" ++ "%{shared: -Bsymbolic} -z noexecstack -z relro -z now" + +-#define ANDROID_CC1_SPEC \ ++#define ANDROID_CC1_SPEC(ANDROID_PIC_DEFAULT) \ + "%{!mglibc:%{!muclibc:%{!mbionic: -mbionic}}} " \ +- "%{!fno-pic:%{!fno-PIC:%{!fpic:%{!fPIC: -fPIC}}}}" ++ "%{!fno-pic:%{!fno-PIC:%{!fpic:%{!fPIC: " ANDROID_PIC_DEFAULT "}}}}" + + #define ANDROID_CC1PLUS_SPEC \ +- "%{!fexceptions:%{!fno-exceptions: -fno-exceptions}} " \ +- "%{!frtti:%{!fno-rtti: -fno-rtti}}" ++ "%{!fexceptions:%{!fno-exceptions: -fexceptions}} " \ ++ "%{!frtti:%{!fno-rtti: -frtti}}" ++ ++#define ANDROID_ASM_SPEC \ ++ "--noexecstack" + + #define ANDROID_LIB_SPEC \ + "%{!static: -ldl}" +--- /dev/null ++++ b/gcc/config/mips/android.h +@@ -0,0 +1,49 @@ ++/* Target macros for mips*-*android* targets. ++ Copyright (C) 2014 Free Software Foundation, Inc. ++ ++This file is part of GCC. ++ ++GCC is free software; you can redistribute it and/or modify ++it under the terms of the GNU General Public License as published by ++the Free Software Foundation; either version 3, or (at your option) ++any later version. ++ ++GCC is distributed in the hope that it will be useful, ++but WITHOUT ANY WARRANTY; without even the implied warranty of ++MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++GNU General Public License for more details. ++ ++You should have received a copy of the GNU General Public License ++along with GCC; see the file COPYING3. If not see ++. */ ++ ++#undef DRIVER_SELF_SPECS ++#define DRIVER_SELF_SPECS \ ++ /* Make sure a -mips option is present. This helps us to pick \ ++ the right multilib, and also makes the later specs easier \ ++ to write. */ \ ++ MIPS_ISA_LEVEL_SPEC, \ ++ \ ++ /* Infer the default float setting from -march. */ \ ++ MIPS_ARCH_FLOAT_SPEC, \ ++ \ ++ /* Infer the -msynci setting from -march if not explicitly set. */ \ ++ MIPS_ISA_SYNCI_SPEC, \ ++ \ ++ /* If no ABI option is specified, infer one from the ISA level \ ++ or -mgp setting. */ \ ++ "%{!mabi=*: %{" MIPS_32BIT_OPTION_SPEC ": -mabi=32;: -mabi=64}}", \ ++ \ ++ /* If no FP ABI option is specified, infer one from the \ ++ ABI/ISA level unless there is a conflicting option. */ \ ++ "%{!msoft-float: %{!msingle-float: %{!mfp*: %{!mmsa: %{mabi=32: %{" \ ++ MIPS_FPXX_OPTION_SPEC ": -mfpxx}}}}}}", \ ++ \ ++ /* If no odd-spreg option is specified, infer one from the ISA. */ \ ++ "%{!modd-spreg: %{mabi=32: %{mips32r6: -mno-odd-spreg}}}", \ ++ \ ++ /* Base SPECs. */ \ ++ BASE_DRIVER_SELF_SPECS, \ ++ \ ++ /* Use the standard linux specs for everything else. */ \ ++ LINUX_DRIVER_SELF_SPECS +--- a/gcc/config/mips/gnu-user.h ++++ b/gcc/config/mips/gnu-user.h +@@ -36,6 +36,7 @@ + /* The GNU C++ standard library requires this. */ \ + if (c_dialect_cxx ()) \ + builtin_define ("_GNU_SOURCE"); \ ++ ANDROID_TARGET_OS_CPP_BUILTINS(); \ + } while (0) + + #undef SUBTARGET_CPP_SPEC +@@ -71,7 +72,8 @@ + + #undef SUBTARGET_ASM_SPEC + #define SUBTARGET_ASM_SPEC \ +- "%{!mno-abicalls:%{mplt:-call_nonpic;:-KPIC}}" ++ "%{!mno-abicalls:%{mplt:-call_nonpic;:-KPIC}} " \ ++ LINUX_OR_ANDROID_CC ("", ANDROID_ASM_SPEC) + + /* The MIPS assembler has different syntax for .set. We set it to + .dummy to trap any errors. */ +@@ -120,7 +122,7 @@ + #endif + + #define LINUX_DRIVER_SELF_SPECS \ +- NO_SHARED_SPECS \ ++ LINUX_OR_ANDROID_CC(NO_SHARED_SPECS, "") \ + MARCH_MTUNE_NATIVE_SPECS, \ + /* -mplt has no effect without -mno-shared. Simplify later \ + specs handling by removing a redundant option. */ \ +--- a/gcc/config/mips/linux-common.h ++++ b/gcc/config/mips/linux-common.h +@@ -35,7 +35,7 @@ + #undef SUBTARGET_CC1_SPEC + #define SUBTARGET_CC1_SPEC \ + LINUX_OR_ANDROID_CC (GNU_USER_TARGET_CC1_SPEC, \ +- GNU_USER_TARGET_CC1_SPEC " " ANDROID_CC1_SPEC) ++ GNU_USER_TARGET_CC1_SPEC " " ANDROID_CC1_SPEC("-fpic")) + + #undef CC1PLUS_SPEC + #define CC1PLUS_SPEC \ +--- /dev/null ++++ b/gcc/config/mips/t-linux-android +@@ -0,0 +1,3 @@ ++MULTILIB_OPTIONS = mips32r2/mips32r6 ++MULTILIB_DIRNAMES = mips-r2 mips-r6 ++MULTILIB_OSDIRNAMES = ../libr2 ../libr6 +--- /dev/null ++++ b/gcc/config/mips/t-linux-android64 +@@ -0,0 +1,4 @@ ++MULTILIB_OPTIONS = mabi=32 mips32/mips32r2/mips32r6/mips64r2/mips64r6 ++MULTILIB_DIRNAMES = 32 mips-r1 mips-r2 mips-r6 mips64-r2 mips64-r6 ++MULTILIB_OSDIRNAMES = ../lib ../lib ../libr2 ../libr6 ../lib64r2 ../lib64 ++MULTILIB_REQUIRED = mabi=32/mips32 mabi=32/mips32r2 mabi=32/mips32r6 mips64r2 mips64r6 +--- a/libgcc/gthr-posix.h ++++ b/libgcc/gthr-posix.h +@@ -32,6 +32,19 @@ + #define __GTHREADS 1 + #define __GTHREADS_CXX0X 1 + ++/* The following should normally be in a different header file, ++ * but I couldn't find the right location. The point of the macro ++ * definition below is to prevent libsupc++ and libstdc++ to reference ++ * weak symbols in their static C++ constructors. Such code crashes ++ * when a shared object linked statically to these libraries is ++ * loaded on Android 2.1 (Eclair) and older platform releases, due ++ * to a dynamic linker bug. ++ */ ++#ifdef __ANDROID__ ++#undef GTHREAD_USE_WEAK ++#define GTHREAD_USE_WEAK 0 ++#endif ++ + #include + + #if ((defined(_LIBOBJC) || defined(_LIBOBJC_WEAK)) \ +--- a/libstdc++-v3/configure ++++ b/libstdc++-v3/configure +@@ -78536,6 +78536,12 @@ + /* end confdefs.h. */ + #include + int lk; ++#if !defined(SYS_gettid) ++#define SYS_gettid __NR_gettid ++#endif ++#if !defined(SYS_futex) ++#define SYS_futex __NR_futex ++#endif + int + main () + { +@@ -78594,6 +78600,12 @@ + /* end confdefs.h. */ + #include + int lk; ++#if !defined(SYS_gettid) ++#define SYS_gettid __NR_gettid ++#endif ++#if !defined(SYS_futex) ++#define SYS_futex __NR_futex ++#endif + int + main () + { +--- a/libstdc++-v3/include/bits/locale_facets.h ++++ b/libstdc++-v3/include/bits/locale_facets.h +@@ -47,6 +47,20 @@ + #include + #include + ++#if !__clang__ && __GNUC__ == 4 && __GNUC_MINOR__ == 9 && __i386__ ++// CrystaX: for some reason, x86 gcc-4.9 makes ctype::do_widen() and ++// ctype::_M_widen_init() methods working wrong if optimization enabled. ++// For ctype::do_widen(), values of passed arguments (__lo, __hi and __to) ++// are completely messed up and don't correspond to passed values. In case if ++// we disable optimization for those methods, things become correct so we apply ++// this workaround here for a time. ++// TODO: figure out what exactly wrong here - is it bug in GCC optimization ++// algorithm or smth else? ++#define __CRYSTAX_X86_DONT_OPTIMIZE __attribute__((optimize(0))) ++#else ++#define __CRYSTAX_X86_DONT_OPTIMIZE ++#endif ++ + namespace std _GLIBCXX_VISIBILITY(default) + { + _GLIBCXX_BEGIN_NAMESPACE_VERSION +@@ -1102,7 +1116,7 @@ + * @return @a __hi. + */ + virtual const char* +- do_widen(const char* __lo, const char* __hi, char_type* __to) const ++ do_widen(const char* __lo, const char* __hi, char_type* __to) const __CRYSTAX_X86_DONT_OPTIMIZE + { + __builtin_memcpy(__to, __lo, __hi - __lo); + return __hi; +@@ -1163,7 +1177,7 @@ + + private: + void _M_narrow_init() const; +- void _M_widen_init() const; ++ void _M_widen_init() const __CRYSTAX_X86_DONT_OPTIMIZE; + }; + + #ifdef _GLIBCXX_USE_WCHAR_T +--- a/libstdc++-v3/libsupc++/guard.cc ++++ b/libstdc++-v3/libsupc++/guard.cc +@@ -34,7 +34,12 @@ + #if defined(__GTHREADS) && defined(__GTHREAD_HAS_COND) \ + && (ATOMIC_INT_LOCK_FREE > 1) && defined(_GLIBCXX_HAVE_LINUX_FUTEX) + # include ++#if defined(__ANDROID__) ++# include ++# define SYS_futex __NR_futex ++#else + # include ++#endif + # include + # define _GLIBCXX_USE_FUTEX + # define _GLIBCXX_FUTEX_WAIT 0 diff --git a/packages/gcc/7.3.0/0013-crystax.patch b/packages/gcc/7.3.0/0013-crystax.patch index 8c87ba3d..f1f9eb12 100644 --- a/packages/gcc/7.3.0/0013-crystax.patch +++ b/packages/gcc/7.3.0/0013-crystax.patch @@ -1,529 +1,27 @@ -commit 080803512c8f6f87c2f1f711170d54033144d628 +commit 9f057b62caafe08c968103d39b5df82486a175c2 Author: Dmitry Moskalchuk -Date: Wed Jul 29 11:28:29 2015 +0300 +Date: Thu Aug 13 16:11:54 2015 +0300 - [android] Apply Android-related modifications + [android] Add additional multilib option: mfloat-abi=hard Signed-off-by: Dmitry Moskalchuk -[Edited: keep libstdc++, drop libcrystax-related modifications] --- - gcc/config.gcc | 17 +++++++- - gcc/config/aarch64/aarch64-linux-android.h | 59 +++++++++++++++++++++++++++++ - gcc/config/aarch64/aarch64-linux.h | 9 +++- - gcc/config/arm/arm.h | 3 - - gcc/config/arm/arm.md | 2 - gcc/config/arm/arm.opt | 4 + - gcc/config/arm/elf.h | 9 ++-- - gcc/config/arm/linux-eabi.h | 7 ++- - gcc/config/i386/gnu-user.h | 7 ++- - gcc/config/i386/gnu-user64.h | 5 ++ - gcc/config/i386/linux-common.h | 8 +++ - gcc/config/linux-android.h | 13 +++--- - gcc/config/mips/android.h | 49 ++++++++++++++++++++++++ - gcc/config/mips/gnu-user.h | 6 +- - gcc/config/mips/linux-common.h | 2 - gcc/config/mips/t-linux-android | 3 + - gcc/config/mips/t-linux-android64 | 4 + - libgcc/gthr-posix.h | 13 ++++++ - libstdc++-v3/configure | 12 +++++ - libstdc++-v3/include/bits/locale_facets.h | 18 +++++++- - libstdc++-v3/libsupc++/guard.cc | 5 ++ - 21 files changed, 235 insertions(+), 20 deletions(-) + gcc/config/arm/t-linux-androideabi | 7 ++++--- + 1 file changed, 4 insertions(+), 3 deletions(-) ---- a/gcc/config.gcc -+++ b/gcc/config.gcc -@@ -961,13 +961,17 @@ - tmake_file="${tmake_file} aarch64/t-aarch64 aarch64/t-aarch64-freebsd" - ;; - aarch64*-*-linux*) -- tm_file="${tm_file} dbxelf.h elfos.h gnu-user.h linux.h glibc-stdint.h" -+ tm_file="${tm_file} dbxelf.h elfos.h gnu-user.h linux.h linux-android.h glibc-stdint.h" - tm_file="${tm_file} aarch64/aarch64-elf.h aarch64/aarch64-linux.h" -+ extra_options="${extra_options} linux-android.opt" - tmake_file="${tmake_file} aarch64/t-aarch64 aarch64/t-aarch64-linux" - case $target in - aarch64_be-*) - tm_defines="${tm_defines} TARGET_BIG_ENDIAN_DEFAULT=1" - ;; -+ aarch64*-*-linux-android*) -+ tm_file="${tm_file} aarch64/aarch64-linux-android.h" -+ ;; - esac - aarch64_multilibs="${with_multilib_list}" - if test "$aarch64_multilibs" = "default"; then -@@ -2079,6 +2083,17 @@ - tm_file="dbxelf.h elfos.h gnu-user.h linux.h linux-android.h glibc-stdint.h ${tm_file} mips/gnu-user.h mips/linux.h mips/linux-common.h" - extra_options="${extra_options} linux-android.opt" - case ${target} in -+ mips64*android*) -+ default_mips_arch=mips64r6 -+ default_mips_abi=64 -+ tm_file="${tm_file} mips/android.h" -+ tmake_file="${tmake_file} mips/t-linux-android64" -+ ;; -+ mips*android*) -+ default_mips_arch=mips32 -+ tm_file="${tm_file} mips/android.h" -+ tmake_file="$tmake_file mips/t-linux-android" -+ ;; - mipsisa32r6*) - default_mips_arch=mips32r6 - ;; ---- /dev/null -+++ b/gcc/config/aarch64/aarch64-linux-android.h -@@ -0,0 +1,59 @@ -+/* Machine description for AArch64 architecture. -+ Copyright (C) 2014 Free Software Foundation, Inc. -+ -+ This file is part of GCC. -+ -+ GCC is free software; you can redistribute it and/or modify it -+ under the terms of the GNU General Public License as published by -+ the Free Software Foundation; either version 3, or (at your option) -+ any later version. -+ -+ GCC is distributed in the hope that it will be useful, but -+ WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ General Public License for more details. -+ -+ You should have received a copy of the GNU General Public License -+ along with GCC; see the file COPYING3. If not see -+ . */ -+ -+#ifndef GCC_AARCH64_LINUX_ANDROID_H -+#define GCC_AARCH64_LINUX_ANDROID_H -+ -+ -+#undef TARGET_OS_CPP_BUILTINS -+#define TARGET_OS_CPP_BUILTINS() \ -+ do \ -+ { \ -+ GNU_USER_TARGET_OS_CPP_BUILTINS(); \ -+ ANDROID_TARGET_OS_CPP_BUILTINS(); \ -+ } \ -+ while (0) -+ -+#undef LINK_SPEC -+#define LINK_SPEC \ -+ LINUX_OR_ANDROID_LD (LINUX_TARGET_LINK_SPEC, \ -+ LINUX_TARGET_LINK_SPEC " " ANDROID_LINK_SPEC) -+ -+#undef CC1_SPEC -+#define CC1_SPEC \ -+ LINUX_OR_ANDROID_CC (GNU_USER_TARGET_CC1_SPEC, \ -+ GNU_USER_TARGET_CC1_SPEC " " ANDROID_CC1_SPEC("-fpic")) -+ -+#define CC1PLUS_SPEC \ -+ LINUX_OR_ANDROID_CC ("", ANDROID_CC1PLUS_SPEC) -+ -+#undef LIB_SPEC -+#define LIB_SPEC \ -+ LINUX_OR_ANDROID_LD (GNU_USER_TARGET_LIB_SPEC, \ -+ GNU_USER_TARGET_NO_PTHREADS_LIB_SPEC " " ANDROID_LIB_SPEC) -+ -+#undef STARTFILE_SPEC -+#define STARTFILE_SPEC \ -+ LINUX_OR_ANDROID_LD (GNU_USER_TARGET_STARTFILE_SPEC, ANDROID_STARTFILE_SPEC) -+ -+#undef ENDFILE_SPEC -+#define ENDFILE_SPEC \ -+ LINUX_OR_ANDROID_LD (GNU_USER_TARGET_ENDFILE_SPEC, ANDROID_ENDFILE_SPEC) -+ -+#endif /* GCC_AARCH64_LINUX_ANDROID_H */ ---- a/gcc/config/aarch64/aarch64-linux.h -+++ b/gcc/config/aarch64/aarch64-linux.h -@@ -21,7 +21,14 @@ - #ifndef GCC_AARCH64_LINUX_H - #define GCC_AARCH64_LINUX_H +--- a/gcc/config/arm/t-linux-androideabi ++++ b/gcc/config/arm/t-linux-androideabi +@@ -1,8 +1,9 @@ +-MULTILIB_OPTIONS = march=armv7-a mthumb +-MULTILIB_DIRNAMES = armv7-a thumb +-MULTILIB_EXCEPTIONS = ++MULTILIB_OPTIONS = march=armv7-a mthumb mfloat-abi=hard ++MULTILIB_DIRNAMES = armv7-a thumb hard ++MULTILIB_EXCEPTIONS = mfloat-abi=hard* mthumb/mfloat-abi=hard* + MULTILIB_MATCHES = + MULTILIB_OSDIRNAMES = ++MULTILIB_EXTRA_OPTS = Wl,--no-warn-mismatch --#define GLIBC_DYNAMIC_LINKER "/lib/ld-linux-aarch64%{mbig-endian:_be}%{mabi=ilp32:_ilp32}.so.1" -+#ifndef RUNTIME_ROOT_PREFIX -+#define RUNTIME_ROOT_PREFIX "" -+#endif -+#define GLIBC_DYNAMIC_LINKER RUNTIME_ROOT_PREFIX "/lib/ld-linux-aarch64%{mbig-endian:_be}%{mabi=ilp32:_ilp32}.so.1" -+#ifdef BIONIC_DYNAMIC_LINKER -+#undef BIONIC_DYNAMIC_LINKER -+#endif -+#define BIONIC_DYNAMIC_LINKER RUNTIME_ROOT_PREFIX "/system/bin/linker64" - - #undef MUSL_DYNAMIC_LINKER - #define MUSL_DYNAMIC_LINKER "/lib/ld-musl-aarch64%{mbig-endian:_be}%{mabi=ilp32:_ilp32}.so.1" ---- a/gcc/config/arm/arm.h -+++ b/gcc/config/arm/arm.h -@@ -1878,10 +1878,11 @@ - - #define CASE_VECTOR_PC_RELATIVE (TARGET_THUMB2 \ - || (TARGET_THUMB1 \ -+ && !inline_thumb1_jump_table \ - && (optimize_size || flag_pic))) - - #define CASE_VECTOR_SHORTEN_MODE(min, max, body) \ -- (TARGET_THUMB1 \ -+ (TARGET_THUMB1 && !inline_thumb1_jump_table \ - ? (min >= 0 && max < 512 \ - ? (ADDR_DIFF_VEC_FLAGS (body).offset_unsigned = 1, QImode) \ - : min >= -256 && max < 256 \ ---- a/gcc/config/arm/arm.md -+++ b/gcc/config/arm/arm.md -@@ -8668,7 +8668,7 @@ - (match_operand:SI 2 "const_int_operand" "") ; total range - (match_operand:SI 3 "" "") ; table label - (match_operand:SI 4 "" "")] ; Out of range label -- "(TARGET_32BIT || optimize_size || flag_pic) && !target_pure_code" -+ "(TARGET_32BIT || ((optimize_size || flag_pic) && !inline_thumb1_jump_table)) && !target_pure_code" - " - { - enum insn_code code; ---- a/gcc/config/arm/arm.opt -+++ b/gcc/config/arm/arm.opt -@@ -193,6 +193,10 @@ - Target Report Mask(INTERWORK) - Support calls between Thumb and ARM instruction sets. - -+minline-thumb1-jumptable -+Target Report Var(inline_thumb1_jump_table) -+Inline Thumb1 Jump table code -+ - mtls-dialect= - Target RejectNegative Joined Enum(tls_type) Var(target_tls_dialect) Init(TLS_GNU) - Specify thread local storage scheme. ---- a/gcc/config/arm/elf.h -+++ b/gcc/config/arm/elf.h -@@ -56,8 +56,7 @@ - #undef SUBSUBTARGET_EXTRA_SPECS - #define SUBSUBTARGET_EXTRA_SPECS - --#ifndef ASM_SPEC --#define ASM_SPEC "\ -+#define DEFAULT_ASM_SPEC "\ - %{mbig-endian:-EB} \ - %{mlittle-endian:-EL} \ - %(asm_cpu_spec) \ -@@ -66,6 +65,9 @@ - %{mthumb-interwork:-mthumb-interwork} \ - %{mfloat-abi=*} %{mfpu=*} \ - %(subtarget_extra_asm_spec)" -+ -+#ifndef ASM_SPEC -+#define ASM_SPEC DEFAULT_ASM_SPEC - #endif - - /* The ARM uses @ are a comment character so we need to redefine -@@ -95,7 +97,8 @@ - the code more efficient, but for Thumb-1 it's better to put them out of - band unless we are generating compressed tables. */ - #define JUMP_TABLES_IN_TEXT_SECTION \ -- ((TARGET_32BIT || (TARGET_THUMB && (optimize_size || flag_pic))) \ -+ ((TARGET_32BIT || (TARGET_THUMB && !inline_thumb1_jump_table \ -+ && (optimize_size || flag_pic))) \ - && !target_pure_code) - - #ifndef LINK_SPEC ---- a/gcc/config/arm/linux-eabi.h -+++ b/gcc/config/arm/linux-eabi.h -@@ -102,11 +102,16 @@ - #define CC1_SPEC \ - LINUX_OR_ANDROID_CC (GNU_USER_TARGET_CC1_SPEC " " ASAN_CC1_SPEC, \ - GNU_USER_TARGET_CC1_SPEC " " ASAN_CC1_SPEC " " \ -- ANDROID_CC1_SPEC) -+ ANDROID_CC1_SPEC("-fpic")) - - #define CC1PLUS_SPEC \ - LINUX_OR_ANDROID_CC ("", ANDROID_CC1PLUS_SPEC) - -+#undef ASM_SPEC -+#define ASM_SPEC \ -+ LINUX_OR_ANDROID_CC (DEFAULT_ASM_SPEC, \ -+ DEFAULT_ASM_SPEC " " ANDROID_ASM_SPEC) -+ - #undef LIB_SPEC - #define LIB_SPEC \ - LINUX_OR_ANDROID_LD (GNU_USER_TARGET_LIB_SPEC, \ ---- a/gcc/config/i386/gnu-user.h -+++ b/gcc/config/i386/gnu-user.h -@@ -65,9 +65,14 @@ - When the -shared link option is used a final link is not being - done. */ - -+#undef ANDROID_TARGET_CC1_SPEC -+#define ANDROID_TARGET_CC1_SPEC \ -+ " -mssse3 -fno-short-enums " \ -+ - #undef ASM_SPEC - #define ASM_SPEC \ -- "--32 %{!mno-sse2avx:%{mavx:-msse2avx}} %{msse2avx:%{!mavx:-msse2avx}}" -+ "--32 %{!mno-sse2avx:%{mavx:-msse2avx}} %{msse2avx:%{!mavx:-msse2avx}} " \ -+ LINUX_OR_ANDROID_CC ("", ANDROID_ASM_SPEC) - - #undef SUBTARGET_EXTRA_SPECS - #define SUBTARGET_EXTRA_SPECS \ ---- a/gcc/config/i386/gnu-user64.h -+++ b/gcc/config/i386/gnu-user64.h -@@ -46,6 +46,11 @@ - #define SPEC_X32 "mx32" - #endif - -+#undef ANDROID_TARGET_CC1_SPEC -+#define ANDROID_TARGET_CC1_SPEC \ -+ "%{m32:-mssse3 -fno-short-enums}" \ -+ "%{!m32:-msse4.2 -mpopcnt}" -+ - #undef ASM_SPEC - #define ASM_SPEC "%{" SPEC_32 ":--32} \ - %{" SPEC_64 ":--64} \ ---- a/gcc/config/i386/linux-common.h -+++ b/gcc/config/i386/linux-common.h -@@ -30,7 +30,13 @@ - #undef CC1_SPEC - #define CC1_SPEC \ - LINUX_OR_ANDROID_CC (GNU_USER_TARGET_CC1_SPEC, \ -- GNU_USER_TARGET_CC1_SPEC " " ANDROID_CC1_SPEC) -+ GNU_USER_TARGET_CC1_SPEC \ -+ ANDROID_TARGET_CC1_SPEC \ -+ " " \ -+ ANDROID_CC1_SPEC("-fPIC")) -+ -+#define CC1PLUS_SPEC \ -+ LINUX_OR_ANDROID_CC ("", ANDROID_CC1PLUS_SPEC) - - #undef LINK_SPEC - #define LINK_SPEC \ ---- a/gcc/config/linux-android.h -+++ b/gcc/config/linux-android.h -@@ -38,15 +38,18 @@ - "%{" NOANDROID "|tno-android-ld:" LINUX_SPEC ";:" ANDROID_SPEC "}" - - #define ANDROID_LINK_SPEC \ -- "%{shared: -Bsymbolic}" -+ "%{shared: -Bsymbolic} -z noexecstack -z relro -z now" - --#define ANDROID_CC1_SPEC \ -+#define ANDROID_CC1_SPEC(ANDROID_PIC_DEFAULT) \ - "%{!mglibc:%{!muclibc:%{!mbionic: -mbionic}}} " \ -- "%{!fno-pic:%{!fno-PIC:%{!fpic:%{!fPIC: -fPIC}}}}" -+ "%{!fno-pic:%{!fno-PIC:%{!fpic:%{!fPIC: " ANDROID_PIC_DEFAULT "}}}}" - - #define ANDROID_CC1PLUS_SPEC \ -- "%{!fexceptions:%{!fno-exceptions: -fno-exceptions}} " \ -- "%{!frtti:%{!fno-rtti: -fno-rtti}}" -+ "%{!fexceptions:%{!fno-exceptions: -fexceptions}} " \ -+ "%{!frtti:%{!fno-rtti: -frtti}}" -+ -+#define ANDROID_ASM_SPEC \ -+ "--noexecstack" - - #define ANDROID_LIB_SPEC \ - "%{!static: -ldl}" ---- /dev/null -+++ b/gcc/config/mips/android.h -@@ -0,0 +1,49 @@ -+/* Target macros for mips*-*android* targets. -+ Copyright (C) 2014 Free Software Foundation, Inc. -+ -+This file is part of GCC. -+ -+GCC is free software; you can redistribute it and/or modify -+it under the terms of the GNU General Public License as published by -+the Free Software Foundation; either version 3, or (at your option) -+any later version. -+ -+GCC is distributed in the hope that it will be useful, -+but WITHOUT ANY WARRANTY; without even the implied warranty of -+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+GNU General Public License for more details. -+ -+You should have received a copy of the GNU General Public License -+along with GCC; see the file COPYING3. If not see -+. */ -+ -+#undef DRIVER_SELF_SPECS -+#define DRIVER_SELF_SPECS \ -+ /* Make sure a -mips option is present. This helps us to pick \ -+ the right multilib, and also makes the later specs easier \ -+ to write. */ \ -+ MIPS_ISA_LEVEL_SPEC, \ -+ \ -+ /* Infer the default float setting from -march. */ \ -+ MIPS_ARCH_FLOAT_SPEC, \ -+ \ -+ /* Infer the -msynci setting from -march if not explicitly set. */ \ -+ MIPS_ISA_SYNCI_SPEC, \ -+ \ -+ /* If no ABI option is specified, infer one from the ISA level \ -+ or -mgp setting. */ \ -+ "%{!mabi=*: %{" MIPS_32BIT_OPTION_SPEC ": -mabi=32;: -mabi=64}}", \ -+ \ -+ /* If no FP ABI option is specified, infer one from the \ -+ ABI/ISA level unless there is a conflicting option. */ \ -+ "%{!msoft-float: %{!msingle-float: %{!mfp*: %{!mmsa: %{mabi=32: %{" \ -+ MIPS_FPXX_OPTION_SPEC ": -mfpxx}}}}}}", \ -+ \ -+ /* If no odd-spreg option is specified, infer one from the ISA. */ \ -+ "%{!modd-spreg: %{mabi=32: %{mips32r6: -mno-odd-spreg}}}", \ -+ \ -+ /* Base SPECs. */ \ -+ BASE_DRIVER_SELF_SPECS, \ -+ \ -+ /* Use the standard linux specs for everything else. */ \ -+ LINUX_DRIVER_SELF_SPECS ---- a/gcc/config/mips/gnu-user.h -+++ b/gcc/config/mips/gnu-user.h -@@ -36,6 +36,7 @@ - /* The GNU C++ standard library requires this. */ \ - if (c_dialect_cxx ()) \ - builtin_define ("_GNU_SOURCE"); \ -+ ANDROID_TARGET_OS_CPP_BUILTINS(); \ - } while (0) - - #undef SUBTARGET_CPP_SPEC -@@ -71,7 +72,8 @@ - - #undef SUBTARGET_ASM_SPEC - #define SUBTARGET_ASM_SPEC \ -- "%{!mno-abicalls:%{mplt:-call_nonpic;:-KPIC}}" -+ "%{!mno-abicalls:%{mplt:-call_nonpic;:-KPIC}} " \ -+ LINUX_OR_ANDROID_CC ("", ANDROID_ASM_SPEC) - - /* The MIPS assembler has different syntax for .set. We set it to - .dummy to trap any errors. */ -@@ -120,7 +122,7 @@ - #endif - - #define LINUX_DRIVER_SELF_SPECS \ -- NO_SHARED_SPECS \ -+ LINUX_OR_ANDROID_CC(NO_SHARED_SPECS, "") \ - MARCH_MTUNE_NATIVE_SPECS, \ - /* -mplt has no effect without -mno-shared. Simplify later \ - specs handling by removing a redundant option. */ \ ---- a/gcc/config/mips/linux-common.h -+++ b/gcc/config/mips/linux-common.h -@@ -35,7 +35,7 @@ - #undef SUBTARGET_CC1_SPEC - #define SUBTARGET_CC1_SPEC \ - LINUX_OR_ANDROID_CC (GNU_USER_TARGET_CC1_SPEC, \ -- GNU_USER_TARGET_CC1_SPEC " " ANDROID_CC1_SPEC) -+ GNU_USER_TARGET_CC1_SPEC " " ANDROID_CC1_SPEC("-fpic")) - - #undef CC1PLUS_SPEC - #define CC1PLUS_SPEC \ ---- /dev/null -+++ b/gcc/config/mips/t-linux-android -@@ -0,0 +1,3 @@ -+MULTILIB_OPTIONS = mips32r2/mips32r6 -+MULTILIB_DIRNAMES = mips-r2 mips-r6 -+MULTILIB_OSDIRNAMES = ../libr2 ../libr6 ---- /dev/null -+++ b/gcc/config/mips/t-linux-android64 -@@ -0,0 +1,4 @@ -+MULTILIB_OPTIONS = mabi=32 mips32/mips32r2/mips32r6/mips64r2/mips64r6 -+MULTILIB_DIRNAMES = 32 mips-r1 mips-r2 mips-r6 mips64-r2 mips64-r6 -+MULTILIB_OSDIRNAMES = ../lib ../lib ../libr2 ../libr6 ../lib64r2 ../lib64 -+MULTILIB_REQUIRED = mabi=32/mips32 mabi=32/mips32r2 mabi=32/mips32r6 mips64r2 mips64r6 ---- a/libgcc/gthr-posix.h -+++ b/libgcc/gthr-posix.h -@@ -32,6 +32,19 @@ - #define __GTHREADS 1 - #define __GTHREADS_CXX0X 1 - -+/* The following should normally be in a different header file, -+ * but I couldn't find the right location. The point of the macro -+ * definition below is to prevent libsupc++ and libstdc++ to reference -+ * weak symbols in their static C++ constructors. Such code crashes -+ * when a shared object linked statically to these libraries is -+ * loaded on Android 2.1 (Eclair) and older platform releases, due -+ * to a dynamic linker bug. -+ */ -+#ifdef __ANDROID__ -+#undef GTHREAD_USE_WEAK -+#define GTHREAD_USE_WEAK 0 -+#endif -+ - #include - - #if ((defined(_LIBOBJC) || defined(_LIBOBJC_WEAK)) \ ---- a/libstdc++-v3/configure -+++ b/libstdc++-v3/configure -@@ -78536,6 +78536,12 @@ - /* end confdefs.h. */ - #include - int lk; -+#if !defined(SYS_gettid) -+#define SYS_gettid __NR_gettid -+#endif -+#if !defined(SYS_futex) -+#define SYS_futex __NR_futex -+#endif - int - main () - { -@@ -78594,6 +78600,12 @@ - /* end confdefs.h. */ - #include - int lk; -+#if !defined(SYS_gettid) -+#define SYS_gettid __NR_gettid -+#endif -+#if !defined(SYS_futex) -+#define SYS_futex __NR_futex -+#endif - int - main () - { ---- a/libstdc++-v3/include/bits/locale_facets.h -+++ b/libstdc++-v3/include/bits/locale_facets.h -@@ -47,6 +47,20 @@ - #include - #include - -+#if !__clang__ && __GNUC__ == 4 && __GNUC_MINOR__ == 9 && __i386__ -+// CrystaX: for some reason, x86 gcc-4.9 makes ctype::do_widen() and -+// ctype::_M_widen_init() methods working wrong if optimization enabled. -+// For ctype::do_widen(), values of passed arguments (__lo, __hi and __to) -+// are completely messed up and don't correspond to passed values. In case if -+// we disable optimization for those methods, things become correct so we apply -+// this workaround here for a time. -+// TODO: figure out what exactly wrong here - is it bug in GCC optimization -+// algorithm or smth else? -+#define __CRYSTAX_X86_DONT_OPTIMIZE __attribute__((optimize(0))) -+#else -+#define __CRYSTAX_X86_DONT_OPTIMIZE -+#endif -+ - namespace std _GLIBCXX_VISIBILITY(default) - { - _GLIBCXX_BEGIN_NAMESPACE_VERSION -@@ -1102,7 +1116,7 @@ - * @return @a __hi. - */ - virtual const char* -- do_widen(const char* __lo, const char* __hi, char_type* __to) const -+ do_widen(const char* __lo, const char* __hi, char_type* __to) const __CRYSTAX_X86_DONT_OPTIMIZE - { - __builtin_memcpy(__to, __lo, __hi - __lo); - return __hi; -@@ -1163,7 +1177,7 @@ - - private: - void _M_narrow_init() const; -- void _M_widen_init() const; -+ void _M_widen_init() const __CRYSTAX_X86_DONT_OPTIMIZE; - }; - - #ifdef _GLIBCXX_USE_WCHAR_T ---- a/libstdc++-v3/libsupc++/guard.cc -+++ b/libstdc++-v3/libsupc++/guard.cc -@@ -34,7 +34,12 @@ - #if defined(__GTHREADS) && defined(__GTHREAD_HAS_COND) \ - && (ATOMIC_INT_LOCK_FREE > 1) && defined(_GLIBCXX_HAVE_LINUX_FUTEX) - # include -+#if defined(__ANDROID__) -+# include -+# define SYS_futex __NR_futex -+#else - # include -+#endif - # include - # define _GLIBCXX_USE_FUTEX - # define _GLIBCXX_FUTEX_WAIT 0 + # The "special" multilib can be used to build native applications for Android, + # as opposed to native shared libraries that are then called via JNI. diff --git a/packages/gcc/7.3.0/0014-crystax.patch b/packages/gcc/7.3.0/0014-crystax.patch index f1f9eb12..923487d5 100644 --- a/packages/gcc/7.3.0/0014-crystax.patch +++ b/packages/gcc/7.3.0/0014-crystax.patch @@ -1,27 +1,293 @@ -commit 9f057b62caafe08c968103d39b5df82486a175c2 -Author: Dmitry Moskalchuk -Date: Thu Aug 13 16:11:54 2015 +0300 +commit 44a81ebb7698dac41ffa7acd5e0cc1578e5ab1fd +Author: H.J. Lu +Date: Mon Apr 14 15:59:47 2014 -0700 - [android] Add additional multilib option: mfloat-abi=hard + [android] Always enable --eh-frame-hdr for static executable + See 5e6cdf76af295c9a39b695ca228cff675e8ff4ae and + 23e3137ee2897464b051599b85a09f130d3ad05d + + Change-Id: Ibda473188e5a10f2a0592f2494ad00ad1f91e04b Signed-off-by: Dmitry Moskalchuk --- - gcc/config/arm/t-linux-androideabi | 7 ++++--- - 1 file changed, 4 insertions(+), 3 deletions(-) + gcc/config.in | 6 +++++ + gcc/config/alpha/elf.h | 4 +++ + gcc/config/freebsd.h | 4 +++ + gcc/config/gnu-user.h | 4 +++ + gcc/config/openbsd.h | 4 +++ + gcc/config/rs6000/sysv4.h | 6 ++++- + gcc/config/sol2.h | 4 +++ + gcc/configure | 36 +++++++++++++++++++++++++++++++++ + gcc/configure.ac | 29 ++++++++++++++++++++++++++ + gcc/testsuite/g++.dg/eh/spec3-static.C | 25 ++++++++++++++++++++++ + libgcc/crtstuff.c | 11 ++++++---- + 11 files changed, 128 insertions(+), 5 deletions(-) ---- a/gcc/config/arm/t-linux-androideabi -+++ b/gcc/config/arm/t-linux-androideabi -@@ -1,8 +1,9 @@ --MULTILIB_OPTIONS = march=armv7-a mthumb --MULTILIB_DIRNAMES = armv7-a thumb --MULTILIB_EXCEPTIONS = -+MULTILIB_OPTIONS = march=armv7-a mthumb mfloat-abi=hard -+MULTILIB_DIRNAMES = armv7-a thumb hard -+MULTILIB_EXCEPTIONS = mfloat-abi=hard* mthumb/mfloat-abi=hard* - MULTILIB_MATCHES = - MULTILIB_OSDIRNAMES = -+MULTILIB_EXTRA_OPTS = Wl,--no-warn-mismatch +--- a/gcc/config.in ++++ b/gcc/config.in +@@ -2186,6 +2186,12 @@ + #endif - # The "special" multilib can be used to build native applications for Android, - # as opposed to native shared libraries that are then called via JNI. + ++/* Define if your system supports PT_GNU_EH_FRAME for static executable. */ ++#ifndef USED_FOR_TARGET ++#undef USE_EH_FRAME_HDR_FOR_STATIC ++#endif ++ ++ + /* Define to 1 if the 'long long' type is wider than 'long' but still + efficiently supported by the host hardware. */ + #ifndef USED_FOR_TARGET +--- a/gcc/config/alpha/elf.h ++++ b/gcc/config/alpha/elf.h +@@ -168,5 +168,9 @@ + I imagine that other systems will catch up. In the meantime, it + doesn't harm to make sure that the data exists to be used later. */ + #if defined(HAVE_LD_EH_FRAME_HDR) ++#ifdef USE_EH_FRAME_HDR_FOR_STATIC ++#define LINK_EH_SPEC "--eh-frame-hdr " ++#else + #define LINK_EH_SPEC "%{!static:--eh-frame-hdr} " + #endif ++#endif +--- a/gcc/config/freebsd.h ++++ b/gcc/config/freebsd.h +@@ -45,8 +45,12 @@ + #define LIB_SPEC FBSD_LIB_SPEC + + #if defined(HAVE_LD_EH_FRAME_HDR) ++#ifdef USE_EH_FRAME_HDR_FOR_STATIC ++#define LINK_EH_SPEC "--eh-frame-hdr " ++#else + #define LINK_EH_SPEC "%{!static:--eh-frame-hdr} " + #endif ++#endif + + #ifdef TARGET_LIBC_PROVIDES_SSP + #define LINK_SSP_SPEC "%{fstack-protector|fstack-protector-all" \ +--- a/gcc/config/gnu-user.h ++++ b/gcc/config/gnu-user.h +@@ -132,8 +132,12 @@ + #define LIB_SPEC GNU_USER_TARGET_LIB_SPEC + + #if defined(HAVE_LD_EH_FRAME_HDR) ++#ifdef USE_EH_FRAME_HDR_FOR_STATIC ++#define LINK_EH_SPEC "--eh-frame-hdr " ++#else + #define LINK_EH_SPEC "%{!static:--eh-frame-hdr} " + #endif ++#endif + + #undef LINK_GCC_C_SEQUENCE_SPEC + #define LINK_GCC_C_SEQUENCE_SPEC \ +--- a/gcc/config/openbsd.h ++++ b/gcc/config/openbsd.h +@@ -136,8 +136,12 @@ + #define LIB_SPEC OBSD_LIB_SPEC + + #if defined(HAVE_LD_EH_FRAME_HDR) ++#ifdef USE_EH_FRAME_HDR_FOR_STATIC ++#define LINK_EH_SPEC "--eh-frame-hdr " ++#else + #define LINK_EH_SPEC "%{!static:--eh-frame-hdr} " + #endif ++#endif + + #undef LIB_SPEC + #define LIB_SPEC OBSD_LIB_SPEC +--- a/gcc/config/rs6000/sysv4.h ++++ b/gcc/config/rs6000/sysv4.h +@@ -815,7 +815,11 @@ + -dynamic-linker " GNU_USER_DYNAMIC_LINKER "}}" + + #if defined(HAVE_LD_EH_FRAME_HDR) +-# define LINK_EH_SPEC "%{!static:--eh-frame-hdr} " ++# ifdef USE_EH_FRAME_HDR_FOR_STATIC ++# define LINK_EH_SPEC "--eh-frame-hdr " ++# else ++# define LINK_EH_SPEC "%{!static:--eh-frame-hdr} " ++# endif + #endif + + #define CPP_OS_LINUX_SPEC "-D__unix__ -D__gnu_linux__ -D__linux__ \ +--- a/gcc/config/sol2.h ++++ b/gcc/config/sol2.h +@@ -367,7 +367,11 @@ + /* Solaris 11 build 135+ implements dl_iterate_phdr. GNU ld needs + --eh-frame-hdr to create the required .eh_frame_hdr sections. */ + #if defined(HAVE_LD_EH_FRAME_HDR) && defined(TARGET_DL_ITERATE_PHDR) ++#ifdef USE_EH_FRAME_HDR_FOR_STATIC ++#define LINK_EH_SPEC "--eh-frame-hdr " ++#else + #define LINK_EH_SPEC "%{!static:--eh-frame-hdr} " ++#endif + #endif /* HAVE_LD_EH_FRAME && TARGET_DL_ITERATE_PHDR */ + #endif + +--- a/gcc/configure ++++ b/gcc/configure +@@ -939,6 +939,7 @@ + enable_fix_cortex_a53_843419 + with_glibc_version + enable_gnu_unique_object ++enable_eh_frame_hdr_for_static + enable_linker_build_id + enable_default_ssp + with_long_double_128 +@@ -1676,6 +1677,9 @@ + --enable-gnu-unique-object + enable the use of the @gnu_unique_object ELF + extension on glibc systems ++ --enable-eh-frame-hdr-for-static ++ enable linker PT_GNU_EH_FRAME support for static ++ executable + --enable-linker-build-id + compiler will always pass --build-id to linker + --enable-default-ssp enable Stack Smashing Protection as default +@@ -28082,6 +28086,38 @@ + + $as_echo "#define HAVE_LD_EH_FRAME_HDR 1" >>confdefs.h + ++ # Check whether --enable-eh-frame-hdr-for-static was given. ++if test "${enable_eh_frame_hdr_for_static+set}" = set; then : ++ enableval=$enable_eh_frame_hdr_for_static; case $enable_eh_frame_hdr_for_static in ++ yes | no) ;; ++ *) as_fn_error "'$enable_eh_frame_hdr_for_static' is an invalid ++value for --enable-eh-frame-hdr-for-static. ++Valid choices are 'yes' and 'no'." "$LINENO" 5 ;; ++ esac ++else ++ # Only support for glibc 2.3.0 or higher with AT_PHDR/AT_PHNUM from ++# Linux kernel. ++ if test x$host = x$build -a x$host = x$target && ++ ldd --version 2>&1 >/dev/null && ++ glibcver=`ldd --version 2>/dev/null | sed 's/.* //;q'`; then ++ glibcmajor=`expr "$glibcver" : "\([0-9]*\)"` ++ glibcminor=`expr "$glibcver" : "[2-9]*\.\([0-9]*\)"` ++ glibcnum=`expr $glibcmajor \* 1000 + $glibcminor` ++ if test "$glibcnum" -ge 2003 ; then ++ auvx=`LD_SHOW_AUXV=1 ldd 2>/dev/null` ++ if echo "$auvx" | grep AT_PHDR > /dev/null && ++ echo "$auvx" | grep AT_PHNUM > /dev/null; then ++ enable_eh_frame_hdr_for_static=yes ++ fi ++ fi ++ fi ++fi ++ ++ if test x$enable_eh_frame_hdr_for_static = xyes; then ++ ++$as_echo "#define USE_EH_FRAME_HDR_FOR_STATIC 1" >>confdefs.h ++ ++ fi + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_ld_eh_frame_hdr" >&5 + $as_echo "$gcc_cv_ld_eh_frame_hdr" >&6; } +--- a/gcc/configure.ac ++++ b/gcc/configure.ac +@@ -4986,6 +4986,35 @@ + if test x"$gcc_cv_ld_eh_frame_hdr" = xyes; then + AC_DEFINE(HAVE_LD_EH_FRAME_HDR, 1, + [Define if your linker supports .eh_frame_hdr.]) ++ AC_ARG_ENABLE(eh-frame-hdr-for-static, ++ [AS_HELP_STRING([--enable-eh-frame-hdr-for-static], ++ [enable linker PT_GNU_EH_FRAME support for static executable])], ++ [case $enable_eh_frame_hdr_for_static in ++ yes | no) ;; ++ *) AC_MSG_ERROR(['$enable_eh_frame_hdr_for_static' is an invalid ++value for --enable-eh-frame-hdr-for-static. ++Valid choices are 'yes' and 'no'.]) ;; ++ esac], ++# Only support for glibc 2.3.0 or higher with AT_PHDR/AT_PHNUM from ++# Linux kernel. ++ [[if test x$host = x$build -a x$host = x$target && ++ ldd --version 2>&1 >/dev/null && ++ glibcver=`ldd --version 2>/dev/null | sed 's/.* //;q'`; then ++ glibcmajor=`expr "$glibcver" : "\([0-9]*\)"` ++ glibcminor=`expr "$glibcver" : "[2-9]*\.\([0-9]*\)"` ++ glibcnum=`expr $glibcmajor \* 1000 + $glibcminor` ++ if test "$glibcnum" -ge 2003 ; then ++ auvx=`LD_SHOW_AUXV=1 ldd 2>/dev/null` ++ if echo "$auvx" | grep AT_PHDR > /dev/null && ++ echo "$auvx" | grep AT_PHNUM > /dev/null; then ++ enable_eh_frame_hdr_for_static=yes ++ fi ++ fi ++ fi]]) ++ if test x$enable_eh_frame_hdr_for_static = xyes; then ++ AC_DEFINE(USE_EH_FRAME_HDR_FOR_STATIC, 1, ++[Define if your system supports PT_GNU_EH_FRAME for static executable.]) ++ fi + fi + AC_MSG_RESULT($gcc_cv_ld_eh_frame_hdr) + +--- /dev/null ++++ b/gcc/testsuite/g++.dg/eh/spec3-static.C +@@ -0,0 +1,25 @@ ++// PR c++/4381 ++// Test that exception-specs work properly for classes with virtual bases. ++ ++// { dg-do run } ++// { dg-options "-static" } ++ ++class Base {}; ++ ++struct A : virtual public Base ++{ ++ A() {} ++}; ++ ++struct B {}; ++ ++void func() throw (B,A) ++{ ++ throw A(); ++} ++ ++int main(void) ++{ ++ try { func(); } ++ catch (A& a) { } ++} +--- a/libgcc/crtstuff.c ++++ b/libgcc/crtstuff.c +@@ -88,7 +88,8 @@ + #if defined(OBJECT_FORMAT_ELF) \ + && !defined(OBJECT_FORMAT_FLAT) \ + && defined(HAVE_LD_EH_FRAME_HDR) \ +- && !defined(inhibit_libc) && !defined(CRTSTUFFT_O) \ ++ && !defined(inhibit_libc) \ ++ && (defined(USE_EH_FRAME_HDR_FOR_STATIC) || !defined(CRTSTUFFT_O)) \ + && defined(BSD_DL_ITERATE_PHDR_AVAILABLE) + #include + # define USE_PT_GNU_EH_FRAME +@@ -97,7 +98,8 @@ + #if defined(OBJECT_FORMAT_ELF) \ + && !defined(OBJECT_FORMAT_FLAT) \ + && defined(HAVE_LD_EH_FRAME_HDR) && defined(TARGET_DL_ITERATE_PHDR) \ +- && !defined(inhibit_libc) && !defined(CRTSTUFFT_O) \ ++ && !defined(inhibit_libc) \ ++ && (defined(USE_EH_FRAME_HDR_FOR_STATIC) || !defined(CRTSTUFFT_O)) \ + && defined(__sun__) && defined(__svr4__) + #include + # define USE_PT_GNU_EH_FRAME +@@ -106,7 +108,8 @@ + #if defined(OBJECT_FORMAT_ELF) \ + && !defined(OBJECT_FORMAT_FLAT) \ + && defined(HAVE_LD_EH_FRAME_HDR) \ +- && !defined(inhibit_libc) && !defined(CRTSTUFFT_O) \ ++ && !defined(inhibit_libc) \ ++ && (defined(USE_EH_FRAME_HDR_FOR_STATIC) || !defined(CRTSTUFFT_O)) \ + && defined(__GLIBC__) && __GLIBC__ >= 2 + #include + /* uClibc pretends to be glibc 2.2 and DT_CONFIG is defined in its link.h. +@@ -121,7 +124,7 @@ + #if defined(OBJECT_FORMAT_ELF) \ + && !defined(OBJECT_FORMAT_FLAT) \ + && defined(HAVE_LD_EH_FRAME_HDR) \ +- && !defined(CRTSTUFFT_O) \ ++ && (defined(USE_EH_FRAME_HDR_FOR_STATIC) || !defined(CRTSTUFFT_O)) \ + && defined(inhibit_libc) \ + && (defined(__GLIBC__) || defined(__gnu_linux__) || defined(__GNU__)) + /* On systems using glibc, an inhibit_libc build of libgcc is only diff --git a/packages/gcc/7.3.0/0015-crystax.patch b/packages/gcc/7.3.0/0015-crystax.patch index 5fd76d79..bf0e037d 100644 --- a/packages/gcc/7.3.0/0015-crystax.patch +++ b/packages/gcc/7.3.0/0015-crystax.patch @@ -1,293 +1,22 @@ -commit 44a81ebb7698dac41ffa7acd5e0cc1578e5ab1fd -Author: H.J. Lu -Date: Mon Apr 14 15:59:47 2014 -0700 +commit 778a9ef107f51544d583f110e92b75f4d9d79117 +Author: Dmitry Moskalchuk +Date: Thu Aug 20 19:11:07 2015 +0300 - [android] Always enable --eh-frame-hdr for static executable + [android] Don't use PIE copyrelocs for x86/x86_64 - See 5e6cdf76af295c9a39b695ca228cff675e8ff4ae and - 23e3137ee2897464b051599b85a09f130d3ad05d - - Change-Id: Ibda473188e5a10f2a0592f2494ad00ad1f91e04b Signed-off-by: Dmitry Moskalchuk --- - gcc/config.in | 6 +++++ - gcc/config/alpha/elf.h | 4 +++ - gcc/config/freebsd.h | 4 +++ - gcc/config/gnu-user.h | 4 +++ - gcc/config/openbsd.h | 4 +++ - gcc/config/rs6000/sysv4.h | 6 ++++- - gcc/config/sol2.h | 4 +++ - gcc/configure | 36 +++++++++++++++++++++++++++++++++ - gcc/configure.ac | 29 ++++++++++++++++++++++++++ - gcc/testsuite/g++.dg/eh/spec3-static.C | 25 ++++++++++++++++++++++ - libgcc/crtstuff.c | 11 ++++++---- - 11 files changed, 128 insertions(+), 5 deletions(-) + gcc/config/i386/i386.c | 1 + + 1 file changed, 1 insertion(+) ---- a/gcc/config.in -+++ b/gcc/config.in -@@ -2180,6 +2180,12 @@ - #endif - - -+/* Define if your system supports PT_GNU_EH_FRAME for static executable. */ -+#ifndef USED_FOR_TARGET -+#undef USE_EH_FRAME_HDR_FOR_STATIC -+#endif -+ -+ - /* Define to 1 if the 'long long' type is wider than 'long' but still - efficiently supported by the host hardware. */ - #ifndef USED_FOR_TARGET ---- a/gcc/config/alpha/elf.h -+++ b/gcc/config/alpha/elf.h -@@ -168,5 +168,9 @@ - I imagine that other systems will catch up. In the meantime, it - doesn't harm to make sure that the data exists to be used later. */ - #if defined(HAVE_LD_EH_FRAME_HDR) -+#ifdef USE_EH_FRAME_HDR_FOR_STATIC -+#define LINK_EH_SPEC "--eh-frame-hdr " -+#else - #define LINK_EH_SPEC "%{!static:--eh-frame-hdr} " - #endif -+#endif ---- a/gcc/config/freebsd.h -+++ b/gcc/config/freebsd.h -@@ -45,8 +45,12 @@ - #define LIB_SPEC FBSD_LIB_SPEC - - #if defined(HAVE_LD_EH_FRAME_HDR) -+#ifdef USE_EH_FRAME_HDR_FOR_STATIC -+#define LINK_EH_SPEC "--eh-frame-hdr " -+#else - #define LINK_EH_SPEC "%{!static:--eh-frame-hdr} " - #endif -+#endif - - #ifdef TARGET_LIBC_PROVIDES_SSP - #define LINK_SSP_SPEC "%{fstack-protector|fstack-protector-all" \ ---- a/gcc/config/gnu-user.h -+++ b/gcc/config/gnu-user.h -@@ -118,8 +118,12 @@ - #define LIB_SPEC GNU_USER_TARGET_LIB_SPEC - - #if defined(HAVE_LD_EH_FRAME_HDR) -+#ifdef USE_EH_FRAME_HDR_FOR_STATIC -+#define LINK_EH_SPEC "--eh-frame-hdr " -+#else - #define LINK_EH_SPEC "%{!static:--eh-frame-hdr} " - #endif -+#endif - - #undef LINK_GCC_C_SEQUENCE_SPEC - #define LINK_GCC_C_SEQUENCE_SPEC \ ---- a/gcc/config/openbsd.h -+++ b/gcc/config/openbsd.h -@@ -136,8 +136,12 @@ - #define LIB_SPEC OBSD_LIB_SPEC - - #if defined(HAVE_LD_EH_FRAME_HDR) -+#ifdef USE_EH_FRAME_HDR_FOR_STATIC -+#define LINK_EH_SPEC "--eh-frame-hdr " -+#else - #define LINK_EH_SPEC "%{!static:--eh-frame-hdr} " - #endif -+#endif - - #undef LIB_SPEC - #define LIB_SPEC OBSD_LIB_SPEC ---- a/gcc/config/rs6000/sysv4.h -+++ b/gcc/config/rs6000/sysv4.h -@@ -805,7 +805,11 @@ - -dynamic-linker " GNU_USER_DYNAMIC_LINKER "}}" - - #if defined(HAVE_LD_EH_FRAME_HDR) --# define LINK_EH_SPEC "%{!static:--eh-frame-hdr} " -+# ifdef USE_EH_FRAME_HDR_FOR_STATIC -+# define LINK_EH_SPEC "--eh-frame-hdr " -+# else -+# define LINK_EH_SPEC "%{!static:--eh-frame-hdr} " -+# endif - #endif - - #define CPP_OS_LINUX_SPEC "-D__unix__ -D__gnu_linux__ -D__linux__ \ ---- a/gcc/config/sol2.h -+++ b/gcc/config/sol2.h -@@ -367,7 +367,11 @@ - /* Solaris 11 build 135+ implements dl_iterate_phdr. GNU ld needs - --eh-frame-hdr to create the required .eh_frame_hdr sections. */ - #if defined(HAVE_LD_EH_FRAME_HDR) && defined(TARGET_DL_ITERATE_PHDR) -+#ifdef USE_EH_FRAME_HDR_FOR_STATIC -+#define LINK_EH_SPEC "--eh-frame-hdr " -+#else - #define LINK_EH_SPEC "%{!static:--eh-frame-hdr} " -+#endif - #endif /* HAVE_LD_EH_FRAME && TARGET_DL_ITERATE_PHDR */ - #endif - ---- a/gcc/configure -+++ b/gcc/configure -@@ -939,6 +939,7 @@ - enable_fix_cortex_a53_843419 - with_glibc_version - enable_gnu_unique_object -+enable_eh_frame_hdr_for_static - enable_linker_build_id - enable_default_ssp - with_long_double_128 -@@ -1676,6 +1677,9 @@ - --enable-gnu-unique-object - enable the use of the @gnu_unique_object ELF - extension on glibc systems -+ --enable-eh-frame-hdr-for-static -+ enable linker PT_GNU_EH_FRAME support for static -+ executable - --enable-linker-build-id - compiler will always pass --build-id to linker - --enable-default-ssp enable Stack Smashing Protection as default -@@ -28050,6 +28054,38 @@ - - $as_echo "#define HAVE_LD_EH_FRAME_HDR 1" >>confdefs.h - -+ # Check whether --enable-eh-frame-hdr-for-static was given. -+if test "${enable_eh_frame_hdr_for_static+set}" = set; then : -+ enableval=$enable_eh_frame_hdr_for_static; case $enable_eh_frame_hdr_for_static in -+ yes | no) ;; -+ *) as_fn_error "'$enable_eh_frame_hdr_for_static' is an invalid -+value for --enable-eh-frame-hdr-for-static. -+Valid choices are 'yes' and 'no'." "$LINENO" 5 ;; -+ esac -+else -+ # Only support for glibc 2.3.0 or higher with AT_PHDR/AT_PHNUM from -+# Linux kernel. -+ if test x$host = x$build -a x$host = x$target && -+ ldd --version 2>&1 >/dev/null && -+ glibcver=`ldd --version 2>/dev/null | sed 's/.* //;q'`; then -+ glibcmajor=`expr "$glibcver" : "\([0-9]*\)"` -+ glibcminor=`expr "$glibcver" : "[2-9]*\.\([0-9]*\)"` -+ glibcnum=`expr $glibcmajor \* 1000 + $glibcminor` -+ if test "$glibcnum" -ge 2003 ; then -+ auvx=`LD_SHOW_AUXV=1 ldd 2>/dev/null` -+ if echo "$auvx" | grep AT_PHDR > /dev/null && -+ echo "$auvx" | grep AT_PHNUM > /dev/null; then -+ enable_eh_frame_hdr_for_static=yes -+ fi -+ fi -+ fi -+fi -+ -+ if test x$enable_eh_frame_hdr_for_static = xyes; then -+ -+$as_echo "#define USE_EH_FRAME_HDR_FOR_STATIC 1" >>confdefs.h -+ -+ fi - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_ld_eh_frame_hdr" >&5 - $as_echo "$gcc_cv_ld_eh_frame_hdr" >&6; } ---- a/gcc/configure.ac -+++ b/gcc/configure.ac -@@ -4981,6 +4981,35 @@ - if test x"$gcc_cv_ld_eh_frame_hdr" = xyes; then - AC_DEFINE(HAVE_LD_EH_FRAME_HDR, 1, - [Define if your linker supports .eh_frame_hdr.]) -+ AC_ARG_ENABLE(eh-frame-hdr-for-static, -+ [AS_HELP_STRING([--enable-eh-frame-hdr-for-static], -+ [enable linker PT_GNU_EH_FRAME support for static executable])], -+ [case $enable_eh_frame_hdr_for_static in -+ yes | no) ;; -+ *) AC_MSG_ERROR(['$enable_eh_frame_hdr_for_static' is an invalid -+value for --enable-eh-frame-hdr-for-static. -+Valid choices are 'yes' and 'no'.]) ;; -+ esac], -+# Only support for glibc 2.3.0 or higher with AT_PHDR/AT_PHNUM from -+# Linux kernel. -+ [[if test x$host = x$build -a x$host = x$target && -+ ldd --version 2>&1 >/dev/null && -+ glibcver=`ldd --version 2>/dev/null | sed 's/.* //;q'`; then -+ glibcmajor=`expr "$glibcver" : "\([0-9]*\)"` -+ glibcminor=`expr "$glibcver" : "[2-9]*\.\([0-9]*\)"` -+ glibcnum=`expr $glibcmajor \* 1000 + $glibcminor` -+ if test "$glibcnum" -ge 2003 ; then -+ auvx=`LD_SHOW_AUXV=1 ldd 2>/dev/null` -+ if echo "$auvx" | grep AT_PHDR > /dev/null && -+ echo "$auvx" | grep AT_PHNUM > /dev/null; then -+ enable_eh_frame_hdr_for_static=yes -+ fi -+ fi -+ fi]]) -+ if test x$enable_eh_frame_hdr_for_static = xyes; then -+ AC_DEFINE(USE_EH_FRAME_HDR_FOR_STATIC, 1, -+[Define if your system supports PT_GNU_EH_FRAME for static executable.]) -+ fi - fi - AC_MSG_RESULT($gcc_cv_ld_eh_frame_hdr) - ---- /dev/null -+++ b/gcc/testsuite/g++.dg/eh/spec3-static.C -@@ -0,0 +1,25 @@ -+// PR c++/4381 -+// Test that exception-specs work properly for classes with virtual bases. -+ -+// { dg-do run } -+// { dg-options "-static" } -+ -+class Base {}; -+ -+struct A : virtual public Base -+{ -+ A() {} -+}; -+ -+struct B {}; -+ -+void func() throw (B,A) -+{ -+ throw A(); -+} -+ -+int main(void) -+{ -+ try { func(); } -+ catch (A& a) { } -+} ---- a/libgcc/crtstuff.c -+++ b/libgcc/crtstuff.c -@@ -88,7 +88,8 @@ - #if defined(OBJECT_FORMAT_ELF) \ - && !defined(OBJECT_FORMAT_FLAT) \ - && defined(HAVE_LD_EH_FRAME_HDR) \ -- && !defined(inhibit_libc) && !defined(CRTSTUFFT_O) \ -+ && !defined(inhibit_libc) \ -+ && (defined(USE_EH_FRAME_HDR_FOR_STATIC) || !defined(CRTSTUFFT_O)) \ - && defined(BSD_DL_ITERATE_PHDR_AVAILABLE) - #include - # define USE_PT_GNU_EH_FRAME -@@ -97,7 +98,8 @@ - #if defined(OBJECT_FORMAT_ELF) \ - && !defined(OBJECT_FORMAT_FLAT) \ - && defined(HAVE_LD_EH_FRAME_HDR) && defined(TARGET_DL_ITERATE_PHDR) \ -- && !defined(inhibit_libc) && !defined(CRTSTUFFT_O) \ -+ && !defined(inhibit_libc) \ -+ && (defined(USE_EH_FRAME_HDR_FOR_STATIC) || !defined(CRTSTUFFT_O)) \ - && defined(__sun__) && defined(__svr4__) - #include - # define USE_PT_GNU_EH_FRAME -@@ -106,7 +108,8 @@ - #if defined(OBJECT_FORMAT_ELF) \ - && !defined(OBJECT_FORMAT_FLAT) \ - && defined(HAVE_LD_EH_FRAME_HDR) \ -- && !defined(inhibit_libc) && !defined(CRTSTUFFT_O) \ -+ && !defined(inhibit_libc) \ -+ && (defined(USE_EH_FRAME_HDR_FOR_STATIC) || !defined(CRTSTUFFT_O)) \ - && defined(__GLIBC__) && __GLIBC__ >= 2 - #include - /* uClibc pretends to be glibc 2.2 and DT_CONFIG is defined in its link.h. -@@ -121,7 +124,7 @@ - #if defined(OBJECT_FORMAT_ELF) \ - && !defined(OBJECT_FORMAT_FLAT) \ - && defined(HAVE_LD_EH_FRAME_HDR) \ -- && !defined(CRTSTUFFT_O) \ -+ && (defined(USE_EH_FRAME_HDR_FOR_STATIC) || !defined(CRTSTUFFT_O)) \ - && defined(inhibit_libc) \ - && (defined(__GLIBC__) || defined(__gnu_linux__) || defined(__GNU__)) - /* On systems using glibc, an inhibit_libc build of libgcc is only +--- a/gcc/config/i386/i386.c ++++ b/gcc/config/i386/i386.c +@@ -16113,6 +16113,7 @@ + else if (!SYMBOL_REF_FAR_ADDR_P (op0) + && (SYMBOL_REF_LOCAL_P (op0) + || (HAVE_LD_PIE_COPYRELOC ++ && !TARGET_HAS_BIONIC + && flag_pie + && !SYMBOL_REF_WEAK (op0) + && !SYMBOL_REF_FUNCTION_P (op0))) diff --git a/packages/gcc/7.3.0/0016-crystax.patch b/packages/gcc/7.3.0/0016-crystax.patch index cd56a564..8f2eb438 100644 --- a/packages/gcc/7.3.0/0016-crystax.patch +++ b/packages/gcc/7.3.0/0016-crystax.patch @@ -1,22 +1,26 @@ -commit 778a9ef107f51544d583f110e92b75f4d9d79117 +commit dbeae1190cabad83999f2540523f045acc1bb4ec Author: Dmitry Moskalchuk -Date: Thu Aug 20 19:11:07 2015 +0300 +Date: Fri Aug 21 17:41:59 2015 +0300 - [android] Don't use PIE copyrelocs for x86/x86_64 + [android] Always use gthr-posix.h instead of gthr-default.h Signed-off-by: Dmitry Moskalchuk --- - gcc/config/i386/i386.c | 1 + - 1 file changed, 1 insertion(+) + libgcc/gthr.h | 4 ++++ + 1 file changed, 4 insertions(+) ---- a/gcc/config/i386/i386.c -+++ b/gcc/config/i386/i386.c -@@ -15753,6 +15753,7 @@ - else if (!SYMBOL_REF_FAR_ADDR_P (op0) - && (SYMBOL_REF_LOCAL_P (op0) - || (HAVE_LD_PIE_COPYRELOC -+ && !TARGET_HAS_BIONIC - && flag_pie - && !SYMBOL_REF_WEAK (op0) - && !SYMBOL_REF_FUNCTION_P (op0))) +--- a/libgcc/gthr.h ++++ b/libgcc/gthr.h +@@ -145,7 +145,11 @@ + #define GTHREAD_USE_WEAK 1 + #endif + #endif ++#if __ANDROID__ ++#include "gthr-posix.h" ++#else + #include "gthr-default.h" ++#endif + + #ifndef HIDE_EXPORTS + #pragma GCC visibility pop diff --git a/packages/gcc/7.3.0/0017-crystax.patch b/packages/gcc/7.3.0/0017-crystax.patch index 8f2eb438..51fad853 100644 --- a/packages/gcc/7.3.0/0017-crystax.patch +++ b/packages/gcc/7.3.0/0017-crystax.patch @@ -1,26 +1,33 @@ -commit dbeae1190cabad83999f2540523f045acc1bb4ec -Author: Dmitry Moskalchuk -Date: Fri Aug 21 17:41:59 2015 +0300 +commit 8a66d422721ae5999737d7825701ff22097d287b +Author: Andrew Hsieh +Date: Mon Apr 14 21:05:51 2014 -0700 - [android] Always use gthr-posix.h instead of gthr-default.h + [android] Fix ARM generates insufficient alignment for NEON vst/vld + See d909af3e2469aad87d5c3e79b93c778fd26c03a9 + + Change-Id: Ie1de9f946f397196bb6f1623f5add86933739484 Signed-off-by: Dmitry Moskalchuk --- - libgcc/gthr.h | 4 ++++ - 1 file changed, 4 insertions(+) + gcc/config/arm/arm.c | 8 ++++++-- + 1 file changed, 6 insertions(+), 2 deletions(-) ---- a/libgcc/gthr.h -+++ b/libgcc/gthr.h -@@ -145,7 +145,11 @@ - #define GTHREAD_USE_WEAK 1 - #endif - #endif -+#if __ANDROID__ -+#include "gthr-posix.h" -+#else - #include "gthr-default.h" -+#endif +--- a/gcc/config/arm/arm.c ++++ b/gcc/config/arm/arm.c +@@ -22292,9 +22292,13 @@ + memsize = MEM_SIZE (x); - #ifndef HIDE_EXPORTS - #pragma GCC visibility pop + /* Only certain alignment specifiers are supported by the hardware. */ +- if (memsize == 32 && (align % 32) == 0) ++ /* Note that ARM EABI only guarentees 8-byte stack alignment. While GCC ++ honors stricter alignment of composite type in user code, it doesn't ++ observe the alignment of memory passed as an extra argument for function ++ returning large composite type. See http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57271 */ ++ if (memsize == 32 && (align % 32) == 0 && !TARGET_AAPCS_BASED) + align_bits = 256; +- else if ((memsize == 16 || memsize == 32) && (align % 16) == 0) ++ else if ((memsize == 16 || memsize == 32) && (align % 16) == 0 && !TARGET_AAPCS_BASED) + align_bits = 128; + else if (memsize >= 8 && (align % 8) == 0) + align_bits = 64; diff --git a/packages/gcc/7.3.0/0018-crystax.patch b/packages/gcc/7.3.0/0018-crystax.patch index bbfcd14c..8c21a1cc 100644 --- a/packages/gcc/7.3.0/0018-crystax.patch +++ b/packages/gcc/7.3.0/0018-crystax.patch @@ -1,33 +1,23 @@ -commit 8a66d422721ae5999737d7825701ff22097d287b -Author: Andrew Hsieh -Date: Mon Apr 14 21:05:51 2014 -0700 +commit 89d27bc45ee7325dcfff6748da0f8b9c1dc1f234 +Author: Dmitry Moskalchuk +Date: Sat Aug 22 09:55:55 2015 +0300 - [android] Fix ARM generates insufficient alignment for NEON vst/vld + [android][i386] Remove throw() declaration from posix_memalign() proto - See d909af3e2469aad87d5c3e79b93c778fd26c03a9 - - Change-Id: Ie1de9f946f397196bb6f1623f5add86933739484 Signed-off-by: Dmitry Moskalchuk --- - gcc/config/arm/arm.c | 8 ++++++-- - 1 file changed, 6 insertions(+), 2 deletions(-) + gcc/config/i386/pmm_malloc.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) ---- a/gcc/config/arm/arm.c -+++ b/gcc/config/arm/arm.c -@@ -22270,9 +22270,13 @@ - memsize = MEM_SIZE (x); +--- a/gcc/config/i386/pmm_malloc.h ++++ b/gcc/config/i386/pmm_malloc.h +@@ -31,7 +31,7 @@ + #ifndef __cplusplus + extern int posix_memalign (void **, size_t, size_t); + #else +-extern "C" int posix_memalign (void **, size_t, size_t) throw (); ++extern "C" int posix_memalign (void **, size_t, size_t); + #endif - /* Only certain alignment specifiers are supported by the hardware. */ -- if (memsize == 32 && (align % 32) == 0) -+ /* Note that ARM EABI only guarentees 8-byte stack alignment. While GCC -+ honors stricter alignment of composite type in user code, it doesn't -+ observe the alignment of memory passed as an extra argument for function -+ returning large composite type. See http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57271 */ -+ if (memsize == 32 && (align % 32) == 0 && !TARGET_AAPCS_BASED) - align_bits = 256; -- else if ((memsize == 16 || memsize == 32) && (align % 16) == 0) -+ else if ((memsize == 16 || memsize == 32) && (align % 16) == 0 && !TARGET_AAPCS_BASED) - align_bits = 128; - else if (memsize >= 8 && (align % 8) == 0) - align_bits = 64; + static __inline void * diff --git a/packages/gcc/7.3.0/0019-crystax.patch b/packages/gcc/7.3.0/0019-crystax.patch index 8c21a1cc..ccb81fd6 100644 --- a/packages/gcc/7.3.0/0019-crystax.patch +++ b/packages/gcc/7.3.0/0019-crystax.patch @@ -1,23 +1,34 @@ -commit 89d27bc45ee7325dcfff6748da0f8b9c1dc1f234 +commit 9ae82f7cfc1073820092dd9f957559667e77db0d Author: Dmitry Moskalchuk -Date: Sat Aug 22 09:55:55 2015 +0300 +Date: Tue Aug 25 09:36:42 2015 +0300 - [android][i386] Remove throw() declaration from posix_memalign() proto + [android] Explicitly make _Unwind_Resume visible for arm64/mips64 Signed-off-by: Dmitry Moskalchuk --- - gcc/config/i386/pmm_malloc.h | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) + gcc/config/aarch64/aarch64-linux-android.h | 4 ++++ + gcc/config/mips/linux-common.h | 4 ++++ + 2 files changed, 8 insertions(+) ---- a/gcc/config/i386/pmm_malloc.h -+++ b/gcc/config/i386/pmm_malloc.h -@@ -31,7 +31,7 @@ - #ifndef __cplusplus - extern int posix_memalign (void **, size_t, size_t); - #else --extern "C" int posix_memalign (void **, size_t, size_t) throw (); -+extern "C" int posix_memalign (void **, size_t, size_t); - #endif +--- a/gcc/config/aarch64/aarch64-linux-android.h ++++ b/gcc/config/aarch64/aarch64-linux-android.h +@@ -56,4 +56,8 @@ + #define ENDFILE_SPEC \ + LINUX_OR_ANDROID_LD (GNU_USER_TARGET_ENDFILE_SPEC, ANDROID_ENDFILE_SPEC) - static __inline void * ++#ifdef IN_LIBGCC2 ++#define LIBGCC2_UNWIND_ATTRIBUTE __attribute__((visibility("default"))) ++#endif ++ + #endif /* GCC_AARCH64_LINUX_ANDROID_H */ +--- a/gcc/config/mips/linux-common.h ++++ b/gcc/config/mips/linux-common.h +@@ -62,3 +62,7 @@ + + /* The default value isn't sufficient in 64-bit mode. */ + #define STACK_CHECK_PROTECT (TARGET_64BIT ? 16 * 1024 : 12 * 1024) ++ ++#ifdef IN_LIBGCC2 ++#define LIBGCC2_UNWIND_ATTRIBUTE __attribute__((visibility("default"))) ++#endif diff --git a/packages/gcc/7.3.0/0020-crystax.patch b/packages/gcc/7.3.0/0020-crystax.patch deleted file mode 100644 index ccb81fd6..00000000 --- a/packages/gcc/7.3.0/0020-crystax.patch +++ /dev/null @@ -1,34 +0,0 @@ -commit 9ae82f7cfc1073820092dd9f957559667e77db0d -Author: Dmitry Moskalchuk -Date: Tue Aug 25 09:36:42 2015 +0300 - - [android] Explicitly make _Unwind_Resume visible for arm64/mips64 - - Signed-off-by: Dmitry Moskalchuk - ---- - gcc/config/aarch64/aarch64-linux-android.h | 4 ++++ - gcc/config/mips/linux-common.h | 4 ++++ - 2 files changed, 8 insertions(+) - ---- a/gcc/config/aarch64/aarch64-linux-android.h -+++ b/gcc/config/aarch64/aarch64-linux-android.h -@@ -56,4 +56,8 @@ - #define ENDFILE_SPEC \ - LINUX_OR_ANDROID_LD (GNU_USER_TARGET_ENDFILE_SPEC, ANDROID_ENDFILE_SPEC) - -+#ifdef IN_LIBGCC2 -+#define LIBGCC2_UNWIND_ATTRIBUTE __attribute__((visibility("default"))) -+#endif -+ - #endif /* GCC_AARCH64_LINUX_ANDROID_H */ ---- a/gcc/config/mips/linux-common.h -+++ b/gcc/config/mips/linux-common.h -@@ -62,3 +62,7 @@ - - /* The default value isn't sufficient in 64-bit mode. */ - #define STACK_CHECK_PROTECT (TARGET_64BIT ? 16 * 1024 : 12 * 1024) -+ -+#ifdef IN_LIBGCC2 -+#define LIBGCC2_UNWIND_ATTRIBUTE __attribute__((visibility("default"))) -+#endif diff --git a/packages/gcc/7.3.0/0020-xtensa-libgcc-literal_position.patch b/packages/gcc/7.3.0/0020-xtensa-libgcc-literal_position.patch new file mode 100644 index 00000000..fc7f0824 --- /dev/null +++ b/packages/gcc/7.3.0/0020-xtensa-libgcc-literal_position.patch @@ -0,0 +1,28 @@ +libgcc: xtensa: fix build with -mtext-section-literals + +Signed-off-by: Max Filippov +--- + libgcc/config/xtensa/ieee754-df.S | 1 + + libgcc/config/xtensa/ieee754-sf.S | 1 + + 2 files changed, 2 insertions(+) + +--- a/libgcc/config/xtensa/ieee754-sf.S ++++ b/libgcc/config/xtensa/ieee754-sf.S +@@ -55,6 +55,7 @@ + + #ifdef L_addsubsf3 + ++ .literal_position + /* Addition */ + __addsf3_aux: + +--- a/libgcc/config/xtensa/ieee754-df.S ++++ b/libgcc/config/xtensa/ieee754-df.S +@@ -55,6 +55,7 @@ + + #ifdef L_addsubdf3 + ++ .literal_position + /* Addition */ + __adddf3_aux: + diff --git a/packages/glibc/2.26/0001-aarch64-rewrite-elf_machine_load_address.patch b/packages/glibc/2.26/0001-aarch64-rewrite-elf_machine_load_address.patch new file mode 100644 index 00000000..14c0780b --- /dev/null +++ b/packages/glibc/2.26/0001-aarch64-rewrite-elf_machine_load_address.patch @@ -0,0 +1,75 @@ +commit a68ba2f3cd3cbe32c1f31e13c20ed13487727b32 +Author: Szabolcs Nagy +Date: Wed Oct 18 17:26:23 2017 +0100 + + [AARCH64] Rewrite elf_machine_load_address using _DYNAMIC symbol + + This patch rewrites aarch64 elf_machine_load_address to use special _DYNAMIC + symbol instead of _dl_start. + + The static address of _DYNAMIC symbol is stored in the first GOT entry. + Here is the change which makes this solution work (part of binutils 2.24): + https://sourceware.org/ml/binutils/2013-06/msg00248.html + + i386, x86_64 targets use the same method to do this as well. + + The original implementation relies on a trick that R_AARCH64_ABS32 relocation + being resolved at link time and the static address fits in the 32bits. + However, in LP64, normally, the address is defined to be 64 bit. + + Here is the C version one which should be portable in all cases. + + * sysdeps/aarch64/dl-machine.h (elf_machine_load_address): Use + _DYNAMIC symbol to calculate load address. + +--- + sysdeps/aarch64/dl-machine.h | 37 ++++--------------------------------- + 1 file changed, 4 insertions(+), 33 deletions(-) + +--- a/sysdeps/aarch64/dl-machine.h ++++ b/sysdeps/aarch64/dl-machine.h +@@ -51,40 +51,11 @@ + /* To figure out the load address we use the definition that for any symbol: + dynamic_addr(symbol) = static_addr(symbol) + load_addr + +- The choice of symbol is arbitrary. The static address we obtain +- by constructing a non GOT reference to the symbol, the dynamic +- address of the symbol we compute using adrp/add to compute the +- symbol's address relative to the PC. +- This depends on 32/16bit relocations being resolved at link time +- and that the static address fits in the 32/16 bits. */ ++ _DYNAMIC sysmbol is used here as its link-time address stored in ++ the special unrelocated first GOT entry. */ + +- ElfW(Addr) static_addr; +- ElfW(Addr) dynamic_addr; +- +- asm (" \n" +-" adrp %1, _dl_start; \n" +-#ifdef __LP64__ +-" add %1, %1, #:lo12:_dl_start \n" +-#else +-" add %w1, %w1, #:lo12:_dl_start \n" +-#endif +-" ldr %w0, 1f \n" +-" b 2f \n" +-"1: \n" +-#ifdef __LP64__ +-" .word _dl_start \n" +-#else +-# ifdef __AARCH64EB__ +-" .short 0 \n" +-# endif +-" .short _dl_start \n" +-# ifndef __AARCH64EB__ +-" .short 0 \n" +-# endif +-#endif +-"2: \n" +- : "=r" (static_addr), "=r" (dynamic_addr)); +- return dynamic_addr - static_addr; ++ extern ElfW(Dyn) _DYNAMIC[] attribute_hidden; ++ return (ElfW(Addr)) &_DYNAMIC - elf_machine_dynamic (); + } + + /* Set up the loaded object described by L so its unrelocated PLT diff --git a/packages/newlib/3.0.0/0003-revert-bad-va_list-use.patch b/packages/newlib/3.0.0/0003-revert-bad-va_list-use.patch index 3168d389..82a8fb6c 100644 --- a/packages/newlib/3.0.0/0003-revert-bad-va_list-use.patch +++ b/packages/newlib/3.0.0/0003-revert-bad-va_list-use.patch @@ -1,3 +1,5 @@ +Revert the commit below. A better solution is being discussed on newlib's mailing list. + commit fcd33916ac03086b9090c68e88036afa4b25d913 Author: Alexander Fedotov Date: Mon Dec 25 16:28:22 2017 +0300