bfin: fix issues with internal toolchain, re-enable C++ support
authorWaldemar Brodkorb <wbx@openadk.org>
Fri, 19 Aug 2016 20:25:12 +0000 (22:25 +0200)
committerThomas Petazzoni <thomas.petazzoni@free-electrons.com>
Sat, 20 Aug 2016 09:47:46 +0000 (11:47 +0200)
The three patches allow to compile applications using TLS emulation from
libgcc or C++ applications.

The patches 892-libgcc-mkmap-symver-support-skip_underscore.patch and
893-libgcc-config-bfin-use-the-generic-linker-version-in.patch fixes how
libgcc is generated, by making the necessary libgcc symbols declared
"GLOBAL", and therefore visible outside of libgcc. This fixes a large
number of undefined reference issues (for either C++ applications or
applications using TLS emulation). This was reported as gcc PR74748.

The patch 894-libgcc-fix-DWARF-compilation-with-FDPIC-targets.patch
allows to build DWARF in FDPIC mode. This patch replaces the older
892-disable-dwarf-bfin.patch, as instead of disabling DWARF support, it
fixes it. This was reported as gcc PR68468.

In order to get C++ working without unresolved symbols, we also need to
disable symbol versioning (--disable-symvers). This is a remaining issue
in gcc which will be investigated at a later point.

Since this commit fixes C++ support in Blackfin, it re-enables the
selection of C++ support for this architecture.

Fixes:
  (alsa-lib emutls)
  http://autobuild.buildroot.net/results/8544ce58d75820666579db93a25ca5656a8efa8e/
  (cairo emutls)
  http://autobuild.buildroot.net/results/88b02a5dd5408318941ccbfcea0a9cbaa331500a/
  (audiofile c++)
  http://autobuild.buildroot.net/results/394e530c5dcd9ccb590eb151aeaadb37d11e0e39/
  (assimp c++)
  http://autobuild.buildroot.net/results/01f4be126c2d786a5ad7f220c2cf60539888a480/
  (bellagio c++)
  http://autobuild.buildroot.net/results/ada/ada44228bf13ec05382275bd6571396f5ba2b1f7/

Signed-off-by: Waldemar Brodkorb <wbx@openadk.org>
Tested-by: Waldemar Brodkorb <wbx@openadk.org>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
package/gcc/6.1.0/892-disable-dwarf-bfin.patch [deleted file]
package/gcc/6.1.0/892-libgcc-mkmap-symver-support-skip_underscore.patch [new file with mode: 0644]
package/gcc/6.1.0/893-libgcc-config-bfin-use-the-generic-linker-version-in.patch [new file with mode: 0644]
package/gcc/6.1.0/894-libgcc-fix-DWARF-compilation-with-FDPIC-targets.patch [new file with mode: 0644]
package/gcc/Config.in.host
package/gcc/gcc-final/gcc-final.mk

diff --git a/package/gcc/6.1.0/892-disable-dwarf-bfin.patch b/package/gcc/6.1.0/892-disable-dwarf-bfin.patch
deleted file mode 100644 (file)
index ebd31a1..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-Dwarf support does not compile on Blackfin
-
-Reported upstream:
-https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68468
-
-Signed-off-by: Waldemar Brodkorb <wbx@openadk.org>
-
-diff -Nur gcc-6.1.0.orig/libgcc/config.host gcc-6.1.0/libgcc/config.host
---- gcc-6.1.0.orig/libgcc/config.host  2016-02-26 21:02:28.000000000 +0100
-+++ gcc-6.1.0/libgcc/config.host       2016-05-12 19:26:30.973350274 +0200
-@@ -230,6 +230,13 @@
-       ;;
-   esac
-   ;;
-+bfin-*-*linux*)
-+  tmake_file="$tmake_file t-crtstuff-pic t-libgcc-pic t-slibgcc t-slibgcc-gld t-slibgcc-elf-ver t-linux"
-+  extra_parts="crtbegin.o crtbeginS.o crtbeginT.o crtend.o crtendS.o"
-+  if test x$enable_vtable_verify = xyes; then
-+    extra_parts="$extra_parts vtv_start.o vtv_end.o vtv_start_preinit.o vtv_end_preinit.o"
-+  fi
-+  ;;
- *-*-linux* | frv-*-*linux* | *-*-kfreebsd*-gnu | *-*-knetbsd*-gnu | *-*-gnu* | *-*-kopensolaris*-gnu)
-   tmake_file="$tmake_file t-crtstuff-pic t-libgcc-pic t-eh-dw2-dip t-slibgcc t-slibgcc-gld t-slibgcc-elf-ver t-linux"
-   extra_parts="crtbegin.o crtbeginS.o crtbeginT.o crtend.o crtendS.o"
diff --git a/package/gcc/6.1.0/892-libgcc-mkmap-symver-support-skip_underscore.patch b/package/gcc/6.1.0/892-libgcc-mkmap-symver-support-skip_underscore.patch
new file mode 100644 (file)
index 0000000..1f779ed
--- /dev/null
@@ -0,0 +1,74 @@
+From ae9c3e354440c4a0f105a9eabfb2f77be085ebc1 Mon Sep 17 00:00:00 2001
+From: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
+Date: Thu, 18 Aug 2016 17:59:16 +0200
+Subject: [PATCH] libgcc/mkmap-symver: support skip_underscore
+
+Some platforms, such as Blackfin, have a special prefix for assembly
+symbols as opposed to C symbols. For this reason, a function named
+"foo()" in C will in fact be visible as a symbol called "_foo" in the
+ELF binary.
+
+The current linker version script logic in libgcc doesn't take into
+account this situation properly. The Blackfin specific
+libgcc/config/bfin/libgcc-glibc.ver has an additional "_" in front of
+every symbol so that it matches the output of "nm" (which gets parsed to
+produce the final linker version script). But due to this additional
+"_", ld no longer matches with the symbols since "ld" does the matching
+with the original symbol name, not the one prefixed with "_".
+
+Due to this, none of the symbols in libgcc/config/bfin/libgcc-glibc.ver
+are actually matched with symbols in libgcc. This causes all libgcc
+symbols to be left as "LOCAL", which causes lots of "undefined
+reference" whenever some C or C++ code that calls a function of libgcc
+is compiled.
+
+To address this, this commit introduces a "skip_underscore" variable to
+the mkmap-symver script. It tells mkmap-symver to ignore the leading
+underscore from the "nm" output.
+
+Note that this new argument is different from the existing
+"leading_underscore" argument, which *adds* an additional underscore to
+the generated linker version script.
+
+Having this functionality paves the way to using the generic linker
+version information for Blackfin, instead of using a custom one.
+
+Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
+---
+ libgcc/ChangeLog        | 5 +++++
+ libgcc/mkmap-symver.awk | 6 +++++-
+ 2 files changed, 10 insertions(+), 1 deletion(-)
+
+diff --git a/libgcc/ChangeLog b/libgcc/ChangeLog
+index 6559564..129e43f 100644
+--- a/libgcc/ChangeLog
++++ b/libgcc/ChangeLog
+@@ -1,3 +1,8 @@
++2016-08-19  Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
++
++      PR gcc/74748
++      * libgcc/mkmap-symver.awk: add support for skip_underscore
++
+ 2016-04-27  Release Manager
+       * GCC 6.1.0 released.
+diff --git a/libgcc/mkmap-symver.awk b/libgcc/mkmap-symver.awk
+index 266832a..30bb179 100644
+--- a/libgcc/mkmap-symver.awk
++++ b/libgcc/mkmap-symver.awk
+@@ -47,7 +47,11 @@ state == "nm" && ($1 == "U" || $2 == "U") {
+ state == "nm" && NF == 3 {
+   split ($3, s, "@")
+-  def[s[1]] = 1;
++  if (skip_underscore)
++      symname = substr(s[1], 2);
++  else
++      symname = s[1];
++  def[symname] = 1;
+   sawsymbol = 1;
+   next;
+ }
+-- 
+2.7.4
+
diff --git a/package/gcc/6.1.0/893-libgcc-config-bfin-use-the-generic-linker-version-in.patch b/package/gcc/6.1.0/893-libgcc-config-bfin-use-the-generic-linker-version-in.patch
new file mode 100644 (file)
index 0000000..8db50b5
--- /dev/null
@@ -0,0 +1,1962 @@
+From 56d606931716de30a89a40dc69a9282c1b4e2880 Mon Sep 17 00:00:00 2001
+From: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
+Date: Thu, 18 Aug 2016 18:04:06 +0200
+Subject: [PATCH] libgcc/config/bfin: use the generic linker version
+ information
+
+This commit makes the Blackfin platform use the generic linker version
+information, rather than a completely duplicated file, specific for the
+Blackfin architecture.
+
+This is made possible using the newly introduced skip_underscore
+variable of the mkmap-symver script.
+
+This also allows to get a correct linker version file, with symbol names
+matching the ones found in libgcc. Thanks to this, the necessary symbols
+are marked "GLOBAL" instead of "LOCAL", which makes them visible at link
+time, and solves a large number of "undefined reference"
+issues. Indeed, the Blackfin specific linker version script had an extra
+underscore in front of all symbols, which meant none of them matched the
+symbols in libgcc, and therefore all libgcc symbols were marked as
+"LOCAL", making them invisible for linking.
+
+Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
+---
+ libgcc/ChangeLog                    |    6 +
+ libgcc/config/bfin/libgcc-glibc.ver | 1894 +----------------------------------
+ libgcc/config/bfin/t-linux          |    3 +-
+ 3 files changed, 10 insertions(+), 1893 deletions(-)
+
+diff --git a/libgcc/ChangeLog b/libgcc/ChangeLog
+index 129e43f..36c0194 100644
+--- a/libgcc/ChangeLog
++++ b/libgcc/ChangeLog
+@@ -1,6 +1,12 @@
+ 2016-08-19  Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
+       PR gcc/74748
++      * libgcc/config/bfin/libgcc-glibc.ver, libgcc/config/bfin/t-linux:
++      use generic linker version information on Blackfin.
++
++2016-08-19  Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
++
++      PR gcc/74748
+       * libgcc/mkmap-symver.awk: add support for skip_underscore
+ 2016-04-27  Release Manager
+diff --git a/libgcc/config/bfin/libgcc-glibc.ver b/libgcc/config/bfin/libgcc-glibc.ver
+index b1bd2df..2af3df7 100644
+--- a/libgcc/config/bfin/libgcc-glibc.ver
++++ b/libgcc/config/bfin/libgcc-glibc.ver
+@@ -16,1898 +16,8 @@
+ # along with GCC; see the file COPYING3.  If not see
+ # <http://www.gnu.org/licenses/>.
+-GCC_3.0 {
+-  # libgcc1 integer symbols
+-  ___absvsi2
+-  ___addvsi3
+-  ___ashlsi3
+-  ___ashrsi3
+-  ___divsi3
+-  ___lshrsi3
+-  ___modsi3
+-  ___mulsi3
+-  ___mulvsi3
+-  ___negvsi2
+-  ___subvsi3
+-  ___udivsi3
+-  ___umodsi3
+-
+-  # libgcc1 floating point symbols
+-  ___addsf3
+-  ___adddf3
+-  ___addxf3
+-  ___addtf3
+-  ___divsf3
+-  ___divdf3
+-  ___divxf3
+-  ___divtf3
+-  ___eqsf2
+-  ___eqdf2
+-  ___eqxf2
+-  ___eqtf2
+-  ___extenddfxf2
+-  ___extenddftf2
+-  ___extendsfdf2
+-  ___extendsfxf2
+-  ___extendsftf2
+-  ___fixsfsi
+-  ___fixdfsi
+-  ___fixxfsi
+-  ___fixtfsi
+-  ___floatsisf
+-  ___floatsidf
+-  ___floatsixf
+-  ___floatsitf
+-  ___gesf2
+-  ___gedf2
+-  ___gexf2
+-  ___getf2
+-  ___gtsf2
+-  ___gtdf2
+-  ___gtxf2
+-  ___gttf2
+-  ___lesf2
+-  ___ledf2
+-  ___lexf2
+-  ___letf2
+-  ___ltsf2
+-  ___ltdf2
+-  ___ltxf2
+-  ___lttf2
+-  ___mulsf3
+-  ___muldf3
+-  ___mulxf3
+-  ___multf3
+-  ___negsf2
+-  ___negdf2
+-  ___negxf2
+-  ___negtf2
+-  ___nesf2
+-  ___nedf2
+-  ___nexf2
+-  ___netf2
+-  ___subsf3
+-  ___subdf3
+-  ___subxf3
+-  ___subtf3
+-  ___truncdfsf2
+-  ___truncxfsf2
+-  ___trunctfsf2
+-  ___truncxfdf2
+-  ___trunctfdf2
+-
+-  # libgcc2 DImode arithmetic (for 32-bit targets).
+-  ___absvdi2
+-  ___addvdi3
+-  ___ashldi3
+-  ___ashrdi3
+-  ___cmpdi2
+-  ___divdi3
+-  ___ffsdi2
+-  ___fixdfdi
+-  ___fixsfdi
+-  ___fixtfdi
+-  ___fixxfdi
+-  ___fixunsdfdi
+-  ___fixunsdfsi
+-  ___fixunssfsi
+-  ___fixunssfdi
+-  ___fixunstfdi
+-  ___fixunstfsi
+-  ___fixunsxfdi
+-  ___fixunsxfsi
+-  ___floatdidf
+-  ___floatdisf
+-  ___floatdixf
+-  ___floatditf
+-  ___lshrdi3
+-  ___moddi3
+-  ___muldi3
+-  ___mulvdi3
+-  ___negdi2
+-  ___negvdi2
+-  ___subvdi3
+-  ___ucmpdi2
+-  ___udivdi3
+-  ___udivmoddi4
+-  ___umoddi3
+-
+-  # libgcc2 TImode arithmetic (for 64-bit targets).
+-  ___ashlti3
+-  ___ashrti3
+-  ___cmpti2
+-  ___divti3
+-  ___ffsti2
+-  ___fixdfti
+-  ___fixsfti
+-  ___fixtfti
+-  ___fixxfti
+-  ___lshrti3
+-  ___modti3
+-  ___multi3
+-  ___negti2
+-  ___ucmpti2
+-  ___udivmodti4
+-  ___udivti3
+-  ___umodti3
+-  ___fixunsdfti
+-  ___fixunssfti
+-  ___fixunstfti
+-  ___fixunsxfti
+-  ___floattidf
+-  ___floattisf
+-  ___floattixf
+-  ___floattitf
+-
+-  # Used to deal with trampoline initialization on some platforms
+-  ___clear_cache
+-
+-  # EH symbols
+-  __Unwind_DeleteException
+-  __Unwind_Find_FDE
+-  __Unwind_ForcedUnwind
+-  __Unwind_GetGR
+-  __Unwind_GetIP
+-  __Unwind_GetLanguageSpecificData
+-  __Unwind_GetRegionStart
+-  __Unwind_GetTextRelBase
+-  __Unwind_GetDataRelBase
+-  __Unwind_RaiseException
+-  __Unwind_Resume
+-  __Unwind_SetGR
+-  __Unwind_SetIP
+-  ___deregister_frame
+-  ___deregister_frame_info
+-  ___deregister_frame_info_bases
+-  ___register_frame
+-  ___register_frame_info
+-  ___register_frame_info_bases
+-  ___register_frame_info_table
+-  ___register_frame_info_table_bases
+-  ___register_frame_table
+-
+-  # SjLj EH symbols
+-  __Unwind_SjLj_Register
+-  __Unwind_SjLj_Unregister
+-  __Unwind_SjLj_RaiseException
+-  __Unwind_SjLj_ForcedUnwind
+-  __Unwind_SjLj_Resume
+-}
+-
+-%inherit GCC_3.3 GCC_3.0
+-GCC_3.3 {
+-  __Unwind_FindEnclosingFunction
+-  __Unwind_GetCFA
+-  __Unwind_Backtrace
+-  __Unwind_Resume_or_Rethrow
+-  __Unwind_SjLj_Resume_or_Rethrow
+-}
+-
+-%inherit GCC_3.3.1 GCC_3.3
+-GCC_3.3.1 {
+-  ___gcc_personality_sj0
+-  ___gcc_personality_v0
+-}
+-
+-%inherit GCC_3.3.2 GCC_3.3.1
+-GCC_3.3.2 {
+-}
+-%inherit GCC_3.3.4 GCC_3.3.2
+-GCC_3.3.4 {
+-  ___unorddf2
+-  ___unordsf2
+-}
+-
+-%inherit GCC_3.4 GCC_3.3.4
+-GCC_3.4 {
+-  # bit scanning and counting built-ins
+-  ___clzsi2
+-  ___clzdi2
+-  ___clzti2
+-  ___ctzsi2
+-  ___ctzdi2
+-  ___ctzti2
+-  ___popcountsi2
+-  ___popcountdi2
+-  ___popcountti2
+-  ___paritysi2
+-  ___paritydi2
+-  ___parityti2
+-}
+-
+-%inherit GCC_3.4.2 GCC_3.4
+-GCC_3.4.2 {
+-  # Used to deal with trampoline initialization on some platforms
+-  ___enable_execute_stack
+-  ___trampoline_setup
+-}
+-
+-%inherit GCC_3.4.4 GCC_3.4.2
+-GCC_3.4.4 {
+-  # libgcc2 TImode arithmetic (for 64-bit targets).
+-  ___absvti2
+-  ___addvti3
+-  ___mulvti3
+-  ___negvti2
+-  ___subvti3
+-}
+-
+-%inherit GCC_4.0.0 GCC_3.4.4
+-GCC_4.0.0 {
+-  # libgcc2 __builtin_powi helpers.
+-  ___powisf2
+-  ___powidf2
+-  ___powixf2
+-  ___powitf2
+-
+-  # c99 compliant complex arithmetic
+-  ___divsc3
+-  ___divdc3
+-  ___divxc3
+-  ___divtc3
+-  ___mulsc3
+-  ___muldc3
+-  ___mulxc3
+-  ___multc3
+-}
+-
+ %inherit GCC_4.1.0 GCC_4.0.0
+ GCC_4.1.0 {
+-  ___smulsi3_highpart
+-  ___umulsi3_highpart
+-}
+-
+-%inherit GCC_4.2.0 GCC_4.1.0
+-GCC_4.2.0 {
+-  # unsigned-to-floating conversions
+-  ___floatunsisf
+-  ___floatunsidf
+-  ___floatunsixf
+-  ___floatunsitf
+-  ___floatundidf
+-  ___floatundisf
+-  ___floatundixf
+-  ___floatunditf
+-  ___floatuntidf
+-  ___floatuntisf
+-  ___floatuntixf
+-  ___floatuntitf
+-  __Unwind_GetIPInfo
+-}
+-
+-%inherit GCC_4.3.0 GCC_4.2.0
+-GCC_4.3.0 {
+-  # byte swapping routines
+-  ___bswapsi2
+-  ___bswapdi2
+-  ___emutls_get_address
+-  ___emutls_register_common
+-  ___ffssi2
+-  ___extendxftf2
+-  ___trunctfxf2
+-
+-  # fixed-point routines
+-  ___addqq3
+-  ___addhq3
+-  ___addsq3
+-  ___adddq3
+-  ___addtq3
+-  ___adduqq3
+-  ___adduhq3
+-  ___addusq3
+-  ___addudq3
+-  ___addutq3
+-  ___addha3
+-  ___addsa3
+-  ___addda3
+-  ___addta3
+-  ___adduha3
+-  ___addusa3
+-  ___adduda3
+-  ___adduta3
+-  ___ssaddqq3
+-  ___ssaddhq3
+-  ___ssaddsq3
+-  ___ssadddq3
+-  ___ssaddtq3
+-  ___ssaddha3
+-  ___ssaddsa3
+-  ___ssaddda3
+-  ___ssaddta3
+-  ___usadduqq3
+-  ___usadduhq3
+-  ___usaddusq3
+-  ___usaddudq3
+-  ___usaddutq3
+-  ___usadduha3
+-  ___usaddusa3
+-  ___usadduda3
+-  ___usadduta3
+-  ___subqq3
+-  ___subhq3
+-  ___subsq3
+-  ___subdq3
+-  ___subtq3
+-  ___subuqq3
+-  ___subuhq3
+-  ___subusq3
+-  ___subudq3
+-  ___subutq3
+-  ___subha3
+-  ___subsa3
+-  ___subda3
+-  ___subta3
+-  ___subuha3
+-  ___subusa3
+-  ___subuda3
+-  ___subuta3
+-  ___sssubqq3
+-  ___sssubhq3
+-  ___sssubsq3
+-  ___sssubdq3
+-  ___sssubtq3
+-  ___sssubha3
+-  ___sssubsa3
+-  ___sssubda3
+-  ___sssubta3
+-  ___ussubuqq3
+-  ___ussubuhq3
+-  ___ussubusq3
+-  ___ussubudq3
+-  ___ussubutq3
+-  ___ussubuha3
+-  ___ussubusa3
+-  ___ussubuda3
+-  ___ussubuta3
+-  ___mulqq3
+-  ___mulhq3
+-  ___mulsq3
+-  ___muldq3
+-  ___multq3
+-  ___muluqq3
+-  ___muluhq3
+-  ___mulusq3
+-  ___muludq3
+-  ___mulutq3
+-  ___mulha3
+-  ___mulsa3
+-  ___mulda3
+-  ___multa3
+-  ___muluha3
+-  ___mulusa3
+-  ___muluda3
+-  ___muluta3
+-  ___ssmulqq3
+-  ___ssmulhq3
+-  ___ssmulsq3
+-  ___ssmuldq3
+-  ___ssmultq3
+-  ___ssmulha3
+-  ___ssmulsa3
+-  ___ssmulda3
+-  ___ssmulta3
+-  ___usmuluqq3
+-  ___usmuluhq3
+-  ___usmulusq3
+-  ___usmuludq3
+-  ___usmulutq3
+-  ___usmuluha3
+-  ___usmulusa3
+-  ___usmuluda3
+-  ___usmuluta3
+-  ___divqq3
+-  ___divhq3
+-  ___divsq3
+-  ___divdq3
+-  ___divtq3
+-  ___divha3
+-  ___divsa3
+-  ___divda3
+-  ___divta3
+-  ___udivuqq3
+-  ___udivuhq3
+-  ___udivusq3
+-  ___udivudq3
+-  ___udivutq3
+-  ___udivuha3
+-  ___udivusa3
+-  ___udivuda3
+-  ___udivuta3
+-  ___ssdivqq3
+-  ___ssdivhq3
+-  ___ssdivsq3
+-  ___ssdivdq3
+-  ___ssdivtq3
+-  ___ssdivha3
+-  ___ssdivsa3
+-  ___ssdivda3
+-  ___ssdivta3
+-  ___usdivuqq3
+-  ___usdivuhq3
+-  ___usdivusq3
+-  ___usdivudq3
+-  ___usdivutq3
+-  ___usdivuha3
+-  ___usdivusa3
+-  ___usdivuda3
+-  ___usdivuta3
+-  ___negqq2
+-  ___neghq2
+-  ___negsq2
+-  ___negdq2
+-  ___negtq2
+-  ___neguqq2
+-  ___neguhq2
+-  ___negusq2
+-  ___negudq2
+-  ___negutq2
+-  ___negha2
+-  ___negsa2
+-  ___negda2
+-  ___negta2
+-  ___neguha2
+-  ___negusa2
+-  ___neguda2
+-  ___neguta2
+-  ___ssnegqq2
+-  ___ssneghq2
+-  ___ssnegsq2
+-  ___ssnegdq2
+-  ___ssnegtq2
+-  ___ssnegha2
+-  ___ssnegsa2
+-  ___ssnegda2
+-  ___ssnegta2
+-  ___usneguqq2
+-  ___usneguhq2
+-  ___usnegusq2
+-  ___usnegudq2
+-  ___usnegutq2
+-  ___usneguha2
+-  ___usnegusa2
+-  ___usneguda2
+-  ___usneguta2
+-  ___ashlqq3
+-  ___ashlhq3
+-  ___ashlsq3
+-  ___ashldq3
+-  ___ashltq3
+-  ___ashluqq3
+-  ___ashluhq3
+-  ___ashlusq3
+-  ___ashludq3
+-  ___ashlutq3
+-  ___ashlha3
+-  ___ashlsa3
+-  ___ashlda3
+-  ___ashlta3
+-  ___ashluha3
+-  ___ashlusa3
+-  ___ashluda3
+-  ___ashluta3
+-  ___ashrqq3
+-  ___ashrhq3
+-  ___ashrsq3
+-  ___ashrdq3
+-  ___ashrtq3
+-  ___ashrha3
+-  ___ashrsa3
+-  ___ashrda3
+-  ___ashrta3
+-  ___lshruqq3
+-  ___lshruhq3
+-  ___lshrusq3
+-  ___lshrudq3
+-  ___lshrutq3
+-  ___lshruha3
+-  ___lshrusa3
+-  ___lshruda3
+-  ___lshruta3
+-  ___ssashlqq3
+-  ___ssashlhq3
+-  ___ssashlsq3
+-  ___ssashldq3
+-  ___ssashltq3
+-  ___ssashlha3
+-  ___ssashlsa3
+-  ___ssashlda3
+-  ___ssashlta3
+-  ___usashluqq3
+-  ___usashluhq3
+-  ___usashlusq3
+-  ___usashludq3
+-  ___usashlutq3
+-  ___usashluha3
+-  ___usashlusa3
+-  ___usashluda3
+-  ___usashluta3
+-  ___cmpqq2
+-  ___cmphq2
+-  ___cmpsq2
+-  ___cmpdq2
+-  ___cmptq2
+-  ___cmpuqq2
+-  ___cmpuhq2
+-  ___cmpusq2
+-  ___cmpudq2
+-  ___cmputq2
+-  ___cmpha2
+-  ___cmpsa2
+-  ___cmpda2
+-  ___cmpta2
+-  ___cmpuha2
+-  ___cmpusa2
+-  ___cmpuda2
+-  ___cmputa2
+-  ___fractqqhq2
+-  ___fractqqsq2
+-  ___fractqqdq2
+-  ___fractqqtq2
+-  ___fractqqha
+-  ___fractqqsa
+-  ___fractqqda
+-  ___fractqqta
+-  ___fractqquqq
+-  ___fractqquhq
+-  ___fractqqusq
+-  ___fractqqudq
+-  ___fractqqutq
+-  ___fractqquha
+-  ___fractqqusa
+-  ___fractqquda
+-  ___fractqquta
+-  ___fractqqqi
+-  ___fractqqhi
+-  ___fractqqsi
+-  ___fractqqdi
+-  ___fractqqti
+-  ___fractqqsf
+-  ___fractqqdf
+-  ___fracthqqq2
+-  ___fracthqsq2
+-  ___fracthqdq2
+-  ___fracthqtq2
+-  ___fracthqha
+-  ___fracthqsa
+-  ___fracthqda
+-  ___fracthqta
+-  ___fracthquqq
+-  ___fracthquhq
+-  ___fracthqusq
+-  ___fracthqudq
+-  ___fracthqutq
+-  ___fracthquha
+-  ___fracthqusa
+-  ___fracthquda
+-  ___fracthquta
+-  ___fracthqqi
+-  ___fracthqhi
+-  ___fracthqsi
+-  ___fracthqdi
+-  ___fracthqti
+-  ___fracthqsf
+-  ___fracthqdf
+-  ___fractsqqq2
+-  ___fractsqhq2
+-  ___fractsqdq2
+-  ___fractsqtq2
+-  ___fractsqha
+-  ___fractsqsa
+-  ___fractsqda
+-  ___fractsqta
+-  ___fractsquqq
+-  ___fractsquhq
+-  ___fractsqusq
+-  ___fractsqudq
+-  ___fractsqutq
+-  ___fractsquha
+-  ___fractsqusa
+-  ___fractsquda
+-  ___fractsquta
+-  ___fractsqqi
+-  ___fractsqhi
+-  ___fractsqsi
+-  ___fractsqdi
+-  ___fractsqti
+-  ___fractsqsf
+-  ___fractsqdf
+-  ___fractdqqq2
+-  ___fractdqhq2
+-  ___fractdqsq2
+-  ___fractdqtq2
+-  ___fractdqha
+-  ___fractdqsa
+-  ___fractdqda
+-  ___fractdqta
+-  ___fractdquqq
+-  ___fractdquhq
+-  ___fractdqusq
+-  ___fractdqudq
+-  ___fractdqutq
+-  ___fractdquha
+-  ___fractdqusa
+-  ___fractdquda
+-  ___fractdquta
+-  ___fractdqqi
+-  ___fractdqhi
+-  ___fractdqsi
+-  ___fractdqdi
+-  ___fractdqti
+-  ___fractdqsf
+-  ___fractdqdf
+-  ___fracttqqq2
+-  ___fracttqhq2
+-  ___fracttqsq2
+-  ___fracttqdq2
+-  ___fracttqha
+-  ___fracttqsa
+-  ___fracttqda
+-  ___fracttqta
+-  ___fracttquqq
+-  ___fracttquhq
+-  ___fracttqusq
+-  ___fracttqudq
+-  ___fracttqutq
+-  ___fracttquha
+-  ___fracttqusa
+-  ___fracttquda
+-  ___fracttquta
+-  ___fracttqqi
+-  ___fracttqhi
+-  ___fracttqsi
+-  ___fracttqdi
+-  ___fracttqti
+-  ___fracttqsf
+-  ___fracttqdf
+-  ___fracthaqq
+-  ___fracthahq
+-  ___fracthasq
+-  ___fracthadq
+-  ___fracthatq
+-  ___fracthasa2
+-  ___fracthada2
+-  ___fracthata2
+-  ___fracthauqq
+-  ___fracthauhq
+-  ___fracthausq
+-  ___fracthaudq
+-  ___fracthautq
+-  ___fracthauha
+-  ___fracthausa
+-  ___fracthauda
+-  ___fracthauta
+-  ___fracthaqi
+-  ___fracthahi
+-  ___fracthasi
+-  ___fracthadi
+-  ___fracthati
+-  ___fracthasf
+-  ___fracthadf
+-  ___fractsaqq
+-  ___fractsahq
+-  ___fractsasq
+-  ___fractsadq
+-  ___fractsatq
+-  ___fractsaha2
+-  ___fractsada2
+-  ___fractsata2
+-  ___fractsauqq
+-  ___fractsauhq
+-  ___fractsausq
+-  ___fractsaudq
+-  ___fractsautq
+-  ___fractsauha
+-  ___fractsausa
+-  ___fractsauda
+-  ___fractsauta
+-  ___fractsaqi
+-  ___fractsahi
+-  ___fractsasi
+-  ___fractsadi
+-  ___fractsati
+-  ___fractsasf
+-  ___fractsadf
+-  ___fractdaqq
+-  ___fractdahq
+-  ___fractdasq
+-  ___fractdadq
+-  ___fractdatq
+-  ___fractdaha2
+-  ___fractdasa2
+-  ___fractdata2
+-  ___fractdauqq
+-  ___fractdauhq
+-  ___fractdausq
+-  ___fractdaudq
+-  ___fractdautq
+-  ___fractdauha
+-  ___fractdausa
+-  ___fractdauda
+-  ___fractdauta
+-  ___fractdaqi
+-  ___fractdahi
+-  ___fractdasi
+-  ___fractdadi
+-  ___fractdati
+-  ___fractdasf
+-  ___fractdadf
+-  ___fracttaqq
+-  ___fracttahq
+-  ___fracttasq
+-  ___fracttadq
+-  ___fracttatq
+-  ___fracttaha2
+-  ___fracttasa2
+-  ___fracttada2
+-  ___fracttauqq
+-  ___fracttauhq
+-  ___fracttausq
+-  ___fracttaudq
+-  ___fracttautq
+-  ___fracttauha
+-  ___fracttausa
+-  ___fracttauda
+-  ___fracttauta
+-  ___fracttaqi
+-  ___fracttahi
+-  ___fracttasi
+-  ___fracttadi
+-  ___fracttati
+-  ___fracttasf
+-  ___fracttadf
+-  ___fractuqqqq
+-  ___fractuqqhq
+-  ___fractuqqsq
+-  ___fractuqqdq
+-  ___fractuqqtq
+-  ___fractuqqha
+-  ___fractuqqsa
+-  ___fractuqqda
+-  ___fractuqqta
+-  ___fractuqquhq2
+-  ___fractuqqusq2
+-  ___fractuqqudq2
+-  ___fractuqqutq2
+-  ___fractuqquha
+-  ___fractuqqusa
+-  ___fractuqquda
+-  ___fractuqquta
+-  ___fractuqqqi
+-  ___fractuqqhi
+-  ___fractuqqsi
+-  ___fractuqqdi
+-  ___fractuqqti
+-  ___fractuqqsf
+-  ___fractuqqdf
+-  ___fractuhqqq
+-  ___fractuhqhq
+-  ___fractuhqsq
+-  ___fractuhqdq
+-  ___fractuhqtq
+-  ___fractuhqha
+-  ___fractuhqsa
+-  ___fractuhqda
+-  ___fractuhqta
+-  ___fractuhquqq2
+-  ___fractuhqusq2
+-  ___fractuhqudq2
+-  ___fractuhqutq2
+-  ___fractuhquha
+-  ___fractuhqusa
+-  ___fractuhquda
+-  ___fractuhquta
+-  ___fractuhqqi
+-  ___fractuhqhi
+-  ___fractuhqsi
+-  ___fractuhqdi
+-  ___fractuhqti
+-  ___fractuhqsf
+-  ___fractuhqdf
+-  ___fractusqqq
+-  ___fractusqhq
+-  ___fractusqsq
+-  ___fractusqdq
+-  ___fractusqtq
+-  ___fractusqha
+-  ___fractusqsa
+-  ___fractusqda
+-  ___fractusqta
+-  ___fractusquqq2
+-  ___fractusquhq2
+-  ___fractusqudq2
+-  ___fractusqutq2
+-  ___fractusquha
+-  ___fractusqusa
+-  ___fractusquda
+-  ___fractusquta
+-  ___fractusqqi
+-  ___fractusqhi
+-  ___fractusqsi
+-  ___fractusqdi
+-  ___fractusqti
+-  ___fractusqsf
+-  ___fractusqdf
+-  ___fractudqqq
+-  ___fractudqhq
+-  ___fractudqsq
+-  ___fractudqdq
+-  ___fractudqtq
+-  ___fractudqha
+-  ___fractudqsa
+-  ___fractudqda
+-  ___fractudqta
+-  ___fractudquqq2
+-  ___fractudquhq2
+-  ___fractudqusq2
+-  ___fractudqutq2
+-  ___fractudquha
+-  ___fractudqusa
+-  ___fractudquda
+-  ___fractudquta
+-  ___fractudqqi
+-  ___fractudqhi
+-  ___fractudqsi
+-  ___fractudqdi
+-  ___fractudqti
+-  ___fractudqsf
+-  ___fractudqdf
+-  ___fractutqqq
+-  ___fractutqhq
+-  ___fractutqsq
+-  ___fractutqdq
+-  ___fractutqtq
+-  ___fractutqha
+-  ___fractutqsa
+-  ___fractutqda
+-  ___fractutqta
+-  ___fractutquqq2
+-  ___fractutquhq2
+-  ___fractutqusq2
+-  ___fractutqudq2
+-  ___fractutquha
+-  ___fractutqusa
+-  ___fractutquda
+-  ___fractutquta
+-  ___fractutqqi
+-  ___fractutqhi
+-  ___fractutqsi
+-  ___fractutqdi
+-  ___fractutqti
+-  ___fractutqsf
+-  ___fractutqdf
+-  ___fractuhaqq
+-  ___fractuhahq
+-  ___fractuhasq
+-  ___fractuhadq
+-  ___fractuhatq
+-  ___fractuhaha
+-  ___fractuhasa
+-  ___fractuhada
+-  ___fractuhata
+-  ___fractuhauqq
+-  ___fractuhauhq
+-  ___fractuhausq
+-  ___fractuhaudq
+-  ___fractuhautq
+-  ___fractuhausa2
+-  ___fractuhauda2
+-  ___fractuhauta2
+-  ___fractuhaqi
+-  ___fractuhahi
+-  ___fractuhasi
+-  ___fractuhadi
+-  ___fractuhati
+-  ___fractuhasf
+-  ___fractuhadf
+-  ___fractusaqq
+-  ___fractusahq
+-  ___fractusasq
+-  ___fractusadq
+-  ___fractusatq
+-  ___fractusaha
+-  ___fractusasa
+-  ___fractusada
+-  ___fractusata
+-  ___fractusauqq
+-  ___fractusauhq
+-  ___fractusausq
+-  ___fractusaudq
+-  ___fractusautq
+-  ___fractusauha2
+-  ___fractusauda2
+-  ___fractusauta2
+-  ___fractusaqi
+-  ___fractusahi
+-  ___fractusasi
+-  ___fractusadi
+-  ___fractusati
+-  ___fractusasf
+-  ___fractusadf
+-  ___fractudaqq
+-  ___fractudahq
+-  ___fractudasq
+-  ___fractudadq
+-  ___fractudatq
+-  ___fractudaha
+-  ___fractudasa
+-  ___fractudada
+-  ___fractudata
+-  ___fractudauqq
+-  ___fractudauhq
+-  ___fractudausq
+-  ___fractudaudq
+-  ___fractudautq
+-  ___fractudauha2
+-  ___fractudausa2
+-  ___fractudauta2
+-  ___fractudaqi
+-  ___fractudahi
+-  ___fractudasi
+-  ___fractudadi
+-  ___fractudati
+-  ___fractudasf
+-  ___fractudadf
+-  ___fractutaqq
+-  ___fractutahq
+-  ___fractutasq
+-  ___fractutadq
+-  ___fractutatq
+-  ___fractutaha
+-  ___fractutasa
+-  ___fractutada
+-  ___fractutata
+-  ___fractutauqq
+-  ___fractutauhq
+-  ___fractutausq
+-  ___fractutaudq
+-  ___fractutautq
+-  ___fractutauha2
+-  ___fractutausa2
+-  ___fractutauda2
+-  ___fractutaqi
+-  ___fractutahi
+-  ___fractutasi
+-  ___fractutadi
+-  ___fractutati
+-  ___fractutasf
+-  ___fractutadf
+-  ___fractqiqq
+-  ___fractqihq
+-  ___fractqisq
+-  ___fractqidq
+-  ___fractqitq
+-  ___fractqiha
+-  ___fractqisa
+-  ___fractqida
+-  ___fractqita
+-  ___fractqiuqq
+-  ___fractqiuhq
+-  ___fractqiusq
+-  ___fractqiudq
+-  ___fractqiutq
+-  ___fractqiuha
+-  ___fractqiusa
+-  ___fractqiuda
+-  ___fractqiuta
+-  ___fracthiqq
+-  ___fracthihq
+-  ___fracthisq
+-  ___fracthidq
+-  ___fracthitq
+-  ___fracthiha
+-  ___fracthisa
+-  ___fracthida
+-  ___fracthita
+-  ___fracthiuqq
+-  ___fracthiuhq
+-  ___fracthiusq
+-  ___fracthiudq
+-  ___fracthiutq
+-  ___fracthiuha
+-  ___fracthiusa
+-  ___fracthiuda
+-  ___fracthiuta
+-  ___fractsiqq
+-  ___fractsihq
+-  ___fractsisq
+-  ___fractsidq
+-  ___fractsitq
+-  ___fractsiha
+-  ___fractsisa
+-  ___fractsida
+-  ___fractsita
+-  ___fractsiuqq
+-  ___fractsiuhq
+-  ___fractsiusq
+-  ___fractsiudq
+-  ___fractsiutq
+-  ___fractsiuha
+-  ___fractsiusa
+-  ___fractsiuda
+-  ___fractsiuta
+-  ___fractdiqq
+-  ___fractdihq
+-  ___fractdisq
+-  ___fractdidq
+-  ___fractditq
+-  ___fractdiha
+-  ___fractdisa
+-  ___fractdida
+-  ___fractdita
+-  ___fractdiuqq
+-  ___fractdiuhq
+-  ___fractdiusq
+-  ___fractdiudq
+-  ___fractdiutq
+-  ___fractdiuha
+-  ___fractdiusa
+-  ___fractdiuda
+-  ___fractdiuta
+-  ___fracttiqq
+-  ___fracttihq
+-  ___fracttisq
+-  ___fracttidq
+-  ___fracttitq
+-  ___fracttiha
+-  ___fracttisa
+-  ___fracttida
+-  ___fracttita
+-  ___fracttiuqq
+-  ___fracttiuhq
+-  ___fracttiusq
+-  ___fracttiudq
+-  ___fracttiutq
+-  ___fracttiuha
+-  ___fracttiusa
+-  ___fracttiuda
+-  ___fracttiuta
+-  ___fractsfqq
+-  ___fractsfhq
+-  ___fractsfsq
+-  ___fractsfdq
+-  ___fractsftq
+-  ___fractsfha
+-  ___fractsfsa
+-  ___fractsfda
+-  ___fractsfta
+-  ___fractsfuqq
+-  ___fractsfuhq
+-  ___fractsfusq
+-  ___fractsfudq
+-  ___fractsfutq
+-  ___fractsfuha
+-  ___fractsfusa
+-  ___fractsfuda
+-  ___fractsfuta
+-  ___fractdfqq
+-  ___fractdfhq
+-  ___fractdfsq
+-  ___fractdfdq
+-  ___fractdftq
+-  ___fractdfha
+-  ___fractdfsa
+-  ___fractdfda
+-  ___fractdfta
+-  ___fractdfuqq
+-  ___fractdfuhq
+-  ___fractdfusq
+-  ___fractdfudq
+-  ___fractdfutq
+-  ___fractdfuha
+-  ___fractdfusa
+-  ___fractdfuda
+-  ___fractdfuta
+-  ___satfractqqhq2
+-  ___satfractqqsq2
+-  ___satfractqqdq2
+-  ___satfractqqtq2
+-  ___satfractqqha
+-  ___satfractqqsa
+-  ___satfractqqda
+-  ___satfractqqta
+-  ___satfractqquqq
+-  ___satfractqquhq
+-  ___satfractqqusq
+-  ___satfractqqudq
+-  ___satfractqqutq
+-  ___satfractqquha
+-  ___satfractqqusa
+-  ___satfractqquda
+-  ___satfractqquta
+-  ___satfracthqqq2
+-  ___satfracthqsq2
+-  ___satfracthqdq2
+-  ___satfracthqtq2
+-  ___satfracthqha
+-  ___satfracthqsa
+-  ___satfracthqda
+-  ___satfracthqta
+-  ___satfracthquqq
+-  ___satfracthquhq
+-  ___satfracthqusq
+-  ___satfracthqudq
+-  ___satfracthqutq
+-  ___satfracthquha
+-  ___satfracthqusa
+-  ___satfracthquda
+-  ___satfracthquta
+-  ___satfractsqqq2
+-  ___satfractsqhq2
+-  ___satfractsqdq2
+-  ___satfractsqtq2
+-  ___satfractsqha
+-  ___satfractsqsa
+-  ___satfractsqda
+-  ___satfractsqta
+-  ___satfractsquqq
+-  ___satfractsquhq
+-  ___satfractsqusq
+-  ___satfractsqudq
+-  ___satfractsqutq
+-  ___satfractsquha
+-  ___satfractsqusa
+-  ___satfractsquda
+-  ___satfractsquta
+-  ___satfractdqqq2
+-  ___satfractdqhq2
+-  ___satfractdqsq2
+-  ___satfractdqtq2
+-  ___satfractdqha
+-  ___satfractdqsa
+-  ___satfractdqda
+-  ___satfractdqta
+-  ___satfractdquqq
+-  ___satfractdquhq
+-  ___satfractdqusq
+-  ___satfractdqudq
+-  ___satfractdqutq
+-  ___satfractdquha
+-  ___satfractdqusa
+-  ___satfractdquda
+-  ___satfractdquta
+-  ___satfracttqqq2
+-  ___satfracttqhq2
+-  ___satfracttqsq2
+-  ___satfracttqdq2
+-  ___satfracttqha
+-  ___satfracttqsa
+-  ___satfracttqda
+-  ___satfracttqta
+-  ___satfracttquqq
+-  ___satfracttquhq
+-  ___satfracttqusq
+-  ___satfracttqudq
+-  ___satfracttqutq
+-  ___satfracttquha
+-  ___satfracttqusa
+-  ___satfracttquda
+-  ___satfracttquta
+-  ___satfracthaqq
+-  ___satfracthahq
+-  ___satfracthasq
+-  ___satfracthadq
+-  ___satfracthatq
+-  ___satfracthasa2
+-  ___satfracthada2
+-  ___satfracthata2
+-  ___satfracthauqq
+-  ___satfracthauhq
+-  ___satfracthausq
+-  ___satfracthaudq
+-  ___satfracthautq
+-  ___satfracthauha
+-  ___satfracthausa
+-  ___satfracthauda
+-  ___satfracthauta
+-  ___satfractsaqq
+-  ___satfractsahq
+-  ___satfractsasq
+-  ___satfractsadq
+-  ___satfractsatq
+-  ___satfractsaha2
+-  ___satfractsada2
+-  ___satfractsata2
+-  ___satfractsauqq
+-  ___satfractsauhq
+-  ___satfractsausq
+-  ___satfractsaudq
+-  ___satfractsautq
+-  ___satfractsauha
+-  ___satfractsausa
+-  ___satfractsauda
+-  ___satfractsauta
+-  ___satfractdaqq
+-  ___satfractdahq
+-  ___satfractdasq
+-  ___satfractdadq
+-  ___satfractdatq
+-  ___satfractdaha2
+-  ___satfractdasa2
+-  ___satfractdata2
+-  ___satfractdauqq
+-  ___satfractdauhq
+-  ___satfractdausq
+-  ___satfractdaudq
+-  ___satfractdautq
+-  ___satfractdauha
+-  ___satfractdausa
+-  ___satfractdauda
+-  ___satfractdauta
+-  ___satfracttaqq
+-  ___satfracttahq
+-  ___satfracttasq
+-  ___satfracttadq
+-  ___satfracttatq
+-  ___satfracttaha2
+-  ___satfracttasa2
+-  ___satfracttada2
+-  ___satfracttauqq
+-  ___satfracttauhq
+-  ___satfracttausq
+-  ___satfracttaudq
+-  ___satfracttautq
+-  ___satfracttauha
+-  ___satfracttausa
+-  ___satfracttauda
+-  ___satfracttauta
+-  ___satfractuqqqq
+-  ___satfractuqqhq
+-  ___satfractuqqsq
+-  ___satfractuqqdq
+-  ___satfractuqqtq
+-  ___satfractuqqha
+-  ___satfractuqqsa
+-  ___satfractuqqda
+-  ___satfractuqqta
+-  ___satfractuqquhq2
+-  ___satfractuqqusq2
+-  ___satfractuqqudq2
+-  ___satfractuqqutq2
+-  ___satfractuqquha
+-  ___satfractuqqusa
+-  ___satfractuqquda
+-  ___satfractuqquta
+-  ___satfractuhqqq
+-  ___satfractuhqhq
+-  ___satfractuhqsq
+-  ___satfractuhqdq
+-  ___satfractuhqtq
+-  ___satfractuhqha
+-  ___satfractuhqsa
+-  ___satfractuhqda
+-  ___satfractuhqta
+-  ___satfractuhquqq2
+-  ___satfractuhqusq2
+-  ___satfractuhqudq2
+-  ___satfractuhqutq2
+-  ___satfractuhquha
+-  ___satfractuhqusa
+-  ___satfractuhquda
+-  ___satfractuhquta
+-  ___satfractusqqq
+-  ___satfractusqhq
+-  ___satfractusqsq
+-  ___satfractusqdq
+-  ___satfractusqtq
+-  ___satfractusqha
+-  ___satfractusqsa
+-  ___satfractusqda
+-  ___satfractusqta
+-  ___satfractusquqq2
+-  ___satfractusquhq2
+-  ___satfractusqudq2
+-  ___satfractusqutq2
+-  ___satfractusquha
+-  ___satfractusqusa
+-  ___satfractusquda
+-  ___satfractusquta
+-  ___satfractudqqq
+-  ___satfractudqhq
+-  ___satfractudqsq
+-  ___satfractudqdq
+-  ___satfractudqtq
+-  ___satfractudqha
+-  ___satfractudqsa
+-  ___satfractudqda
+-  ___satfractudqta
+-  ___satfractudquqq2
+-  ___satfractudquhq2
+-  ___satfractudqusq2
+-  ___satfractudqutq2
+-  ___satfractudquha
+-  ___satfractudqusa
+-  ___satfractudquda
+-  ___satfractudquta
+-  ___satfractutqqq
+-  ___satfractutqhq
+-  ___satfractutqsq
+-  ___satfractutqdq
+-  ___satfractutqtq
+-  ___satfractutqha
+-  ___satfractutqsa
+-  ___satfractutqda
+-  ___satfractutqta
+-  ___satfractutquqq2
+-  ___satfractutquhq2
+-  ___satfractutqusq2
+-  ___satfractutqudq2
+-  ___satfractutquha
+-  ___satfractutqusa
+-  ___satfractutquda
+-  ___satfractutquta
+-  ___satfractuhaqq
+-  ___satfractuhahq
+-  ___satfractuhasq
+-  ___satfractuhadq
+-  ___satfractuhatq
+-  ___satfractuhaha
+-  ___satfractuhasa
+-  ___satfractuhada
+-  ___satfractuhata
+-  ___satfractuhauqq
+-  ___satfractuhauhq
+-  ___satfractuhausq
+-  ___satfractuhaudq
+-  ___satfractuhautq
+-  ___satfractuhausa2
+-  ___satfractuhauda2
+-  ___satfractuhauta2
+-  ___satfractusaqq
+-  ___satfractusahq
+-  ___satfractusasq
+-  ___satfractusadq
+-  ___satfractusatq
+-  ___satfractusaha
+-  ___satfractusasa
+-  ___satfractusada
+-  ___satfractusata
+-  ___satfractusauqq
+-  ___satfractusauhq
+-  ___satfractusausq
+-  ___satfractusaudq
+-  ___satfractusautq
+-  ___satfractusauha2
+-  ___satfractusauda2
+-  ___satfractusauta2
+-  ___satfractudaqq
+-  ___satfractudahq
+-  ___satfractudasq
+-  ___satfractudadq
+-  ___satfractudatq
+-  ___satfractudaha
+-  ___satfractudasa
+-  ___satfractudada
+-  ___satfractudata
+-  ___satfractudauqq
+-  ___satfractudauhq
+-  ___satfractudausq
+-  ___satfractudaudq
+-  ___satfractudautq
+-  ___satfractudauha2
+-  ___satfractudausa2
+-  ___satfractudauta2
+-  ___satfractutaqq
+-  ___satfractutahq
+-  ___satfractutasq
+-  ___satfractutadq
+-  ___satfractutatq
+-  ___satfractutaha
+-  ___satfractutasa
+-  ___satfractutada
+-  ___satfractutata
+-  ___satfractutauqq
+-  ___satfractutauhq
+-  ___satfractutausq
+-  ___satfractutaudq
+-  ___satfractutautq
+-  ___satfractutauha2
+-  ___satfractutausa2
+-  ___satfractutauda2
+-  ___satfractqiqq
+-  ___satfractqihq
+-  ___satfractqisq
+-  ___satfractqidq
+-  ___satfractqitq
+-  ___satfractqiha
+-  ___satfractqisa
+-  ___satfractqida
+-  ___satfractqita
+-  ___satfractqiuqq
+-  ___satfractqiuhq
+-  ___satfractqiusq
+-  ___satfractqiudq
+-  ___satfractqiutq
+-  ___satfractqiuha
+-  ___satfractqiusa
+-  ___satfractqiuda
+-  ___satfractqiuta
+-  ___satfracthiqq
+-  ___satfracthihq
+-  ___satfracthisq
+-  ___satfracthidq
+-  ___satfracthitq
+-  ___satfracthiha
+-  ___satfracthisa
+-  ___satfracthida
+-  ___satfracthita
+-  ___satfracthiuqq
+-  ___satfracthiuhq
+-  ___satfracthiusq
+-  ___satfracthiudq
+-  ___satfracthiutq
+-  ___satfracthiuha
+-  ___satfracthiusa
+-  ___satfracthiuda
+-  ___satfracthiuta
+-  ___satfractsiqq
+-  ___satfractsihq
+-  ___satfractsisq
+-  ___satfractsidq
+-  ___satfractsitq
+-  ___satfractsiha
+-  ___satfractsisa
+-  ___satfractsida
+-  ___satfractsita
+-  ___satfractsiuqq
+-  ___satfractsiuhq
+-  ___satfractsiusq
+-  ___satfractsiudq
+-  ___satfractsiutq
+-  ___satfractsiuha
+-  ___satfractsiusa
+-  ___satfractsiuda
+-  ___satfractsiuta
+-  ___satfractdiqq
+-  ___satfractdihq
+-  ___satfractdisq
+-  ___satfractdidq
+-  ___satfractditq
+-  ___satfractdiha
+-  ___satfractdisa
+-  ___satfractdida
+-  ___satfractdita
+-  ___satfractdiuqq
+-  ___satfractdiuhq
+-  ___satfractdiusq
+-  ___satfractdiudq
+-  ___satfractdiutq
+-  ___satfractdiuha
+-  ___satfractdiusa
+-  ___satfractdiuda
+-  ___satfractdiuta
+-  ___satfracttiqq
+-  ___satfracttihq
+-  ___satfracttisq
+-  ___satfracttidq
+-  ___satfracttitq
+-  ___satfracttiha
+-  ___satfracttisa
+-  ___satfracttida
+-  ___satfracttita
+-  ___satfracttiuqq
+-  ___satfracttiuhq
+-  ___satfracttiusq
+-  ___satfracttiudq
+-  ___satfracttiutq
+-  ___satfracttiuha
+-  ___satfracttiusa
+-  ___satfracttiuda
+-  ___satfracttiuta
+-  ___satfractsfqq
+-  ___satfractsfhq
+-  ___satfractsfsq
+-  ___satfractsfdq
+-  ___satfractsftq
+-  ___satfractsfha
+-  ___satfractsfsa
+-  ___satfractsfda
+-  ___satfractsfta
+-  ___satfractsfuqq
+-  ___satfractsfuhq
+-  ___satfractsfusq
+-  ___satfractsfudq
+-  ___satfractsfutq
+-  ___satfractsfuha
+-  ___satfractsfusa
+-  ___satfractsfuda
+-  ___satfractsfuta
+-  ___satfractdfqq
+-  ___satfractdfhq
+-  ___satfractdfsq
+-  ___satfractdfdq
+-  ___satfractdftq
+-  ___satfractdfha
+-  ___satfractdfsa
+-  ___satfractdfda
+-  ___satfractdfta
+-  ___satfractdfuqq
+-  ___satfractdfuhq
+-  ___satfractdfusq
+-  ___satfractdfudq
+-  ___satfractdfutq
+-  ___satfractdfuha
+-  ___satfractdfusa
+-  ___satfractdfuda
+-  ___satfractdfuta
+-  ___fractunsqqqi
+-  ___fractunsqqhi
+-  ___fractunsqqsi
+-  ___fractunsqqdi
+-  ___fractunsqqti
+-  ___fractunshqqi
+-  ___fractunshqhi
+-  ___fractunshqsi
+-  ___fractunshqdi
+-  ___fractunshqti
+-  ___fractunssqqi
+-  ___fractunssqhi
+-  ___fractunssqsi
+-  ___fractunssqdi
+-  ___fractunssqti
+-  ___fractunsdqqi
+-  ___fractunsdqhi
+-  ___fractunsdqsi
+-  ___fractunsdqdi
+-  ___fractunsdqti
+-  ___fractunstqqi
+-  ___fractunstqhi
+-  ___fractunstqsi
+-  ___fractunstqdi
+-  ___fractunstqti
+-  ___fractunshaqi
+-  ___fractunshahi
+-  ___fractunshasi
+-  ___fractunshadi
+-  ___fractunshati
+-  ___fractunssaqi
+-  ___fractunssahi
+-  ___fractunssasi
+-  ___fractunssadi
+-  ___fractunssati
+-  ___fractunsdaqi
+-  ___fractunsdahi
+-  ___fractunsdasi
+-  ___fractunsdadi
+-  ___fractunsdati
+-  ___fractunstaqi
+-  ___fractunstahi
+-  ___fractunstasi
+-  ___fractunstadi
+-  ___fractunstati
+-  ___fractunsuqqqi
+-  ___fractunsuqqhi
+-  ___fractunsuqqsi
+-  ___fractunsuqqdi
+-  ___fractunsuqqti
+-  ___fractunsuhqqi
+-  ___fractunsuhqhi
+-  ___fractunsuhqsi
+-  ___fractunsuhqdi
+-  ___fractunsuhqti
+-  ___fractunsusqqi
+-  ___fractunsusqhi
+-  ___fractunsusqsi
+-  ___fractunsusqdi
+-  ___fractunsusqti
+-  ___fractunsudqqi
+-  ___fractunsudqhi
+-  ___fractunsudqsi
+-  ___fractunsudqdi
+-  ___fractunsudqti
+-  ___fractunsutqqi
+-  ___fractunsutqhi
+-  ___fractunsutqsi
+-  ___fractunsutqdi
+-  ___fractunsutqti
+-  ___fractunsuhaqi
+-  ___fractunsuhahi
+-  ___fractunsuhasi
+-  ___fractunsuhadi
+-  ___fractunsuhati
+-  ___fractunsusaqi
+-  ___fractunsusahi
+-  ___fractunsusasi
+-  ___fractunsusadi
+-  ___fractunsusati
+-  ___fractunsudaqi
+-  ___fractunsudahi
+-  ___fractunsudasi
+-  ___fractunsudadi
+-  ___fractunsudati
+-  ___fractunsutaqi
+-  ___fractunsutahi
+-  ___fractunsutasi
+-  ___fractunsutadi
+-  ___fractunsutati
+-  ___fractunsqiqq
+-  ___fractunsqihq
+-  ___fractunsqisq
+-  ___fractunsqidq
+-  ___fractunsqitq
+-  ___fractunsqiha
+-  ___fractunsqisa
+-  ___fractunsqida
+-  ___fractunsqita
+-  ___fractunsqiuqq
+-  ___fractunsqiuhq
+-  ___fractunsqiusq
+-  ___fractunsqiudq
+-  ___fractunsqiutq
+-  ___fractunsqiuha
+-  ___fractunsqiusa
+-  ___fractunsqiuda
+-  ___fractunsqiuta
+-  ___fractunshiqq
+-  ___fractunshihq
+-  ___fractunshisq
+-  ___fractunshidq
+-  ___fractunshitq
+-  ___fractunshiha
+-  ___fractunshisa
+-  ___fractunshida
+-  ___fractunshita
+-  ___fractunshiuqq
+-  ___fractunshiuhq
+-  ___fractunshiusq
+-  ___fractunshiudq
+-  ___fractunshiutq
+-  ___fractunshiuha
+-  ___fractunshiusa
+-  ___fractunshiuda
+-  ___fractunshiuta
+-  ___fractunssiqq
+-  ___fractunssihq
+-  ___fractunssisq
+-  ___fractunssidq
+-  ___fractunssitq
+-  ___fractunssiha
+-  ___fractunssisa
+-  ___fractunssida
+-  ___fractunssita
+-  ___fractunssiuqq
+-  ___fractunssiuhq
+-  ___fractunssiusq
+-  ___fractunssiudq
+-  ___fractunssiutq
+-  ___fractunssiuha
+-  ___fractunssiusa
+-  ___fractunssiuda
+-  ___fractunssiuta
+-  ___fractunsdiqq
+-  ___fractunsdihq
+-  ___fractunsdisq
+-  ___fractunsdidq
+-  ___fractunsditq
+-  ___fractunsdiha
+-  ___fractunsdisa
+-  ___fractunsdida
+-  ___fractunsdita
+-  ___fractunsdiuqq
+-  ___fractunsdiuhq
+-  ___fractunsdiusq
+-  ___fractunsdiudq
+-  ___fractunsdiutq
+-  ___fractunsdiuha
+-  ___fractunsdiusa
+-  ___fractunsdiuda
+-  ___fractunsdiuta
+-  ___fractunstiqq
+-  ___fractunstihq
+-  ___fractunstisq
+-  ___fractunstidq
+-  ___fractunstitq
+-  ___fractunstiha
+-  ___fractunstisa
+-  ___fractunstida
+-  ___fractunstita
+-  ___fractunstiuqq
+-  ___fractunstiuhq
+-  ___fractunstiusq
+-  ___fractunstiudq
+-  ___fractunstiutq
+-  ___fractunstiuha
+-  ___fractunstiusa
+-  ___fractunstiuda
+-  ___fractunstiuta
+-  ___satfractunsqiqq
+-  ___satfractunsqihq
+-  ___satfractunsqisq
+-  ___satfractunsqidq
+-  ___satfractunsqitq
+-  ___satfractunsqiha
+-  ___satfractunsqisa
+-  ___satfractunsqida
+-  ___satfractunsqita
+-  ___satfractunsqiuqq
+-  ___satfractunsqiuhq
+-  ___satfractunsqiusq
+-  ___satfractunsqiudq
+-  ___satfractunsqiutq
+-  ___satfractunsqiuha
+-  ___satfractunsqiusa
+-  ___satfractunsqiuda
+-  ___satfractunsqiuta
+-  ___satfractunshiqq
+-  ___satfractunshihq
+-  ___satfractunshisq
+-  ___satfractunshidq
+-  ___satfractunshitq
+-  ___satfractunshiha
+-  ___satfractunshisa
+-  ___satfractunshida
+-  ___satfractunshita
+-  ___satfractunshiuqq
+-  ___satfractunshiuhq
+-  ___satfractunshiusq
+-  ___satfractunshiudq
+-  ___satfractunshiutq
+-  ___satfractunshiuha
+-  ___satfractunshiusa
+-  ___satfractunshiuda
+-  ___satfractunshiuta
+-  ___satfractunssiqq
+-  ___satfractunssihq
+-  ___satfractunssisq
+-  ___satfractunssidq
+-  ___satfractunssitq
+-  ___satfractunssiha
+-  ___satfractunssisa
+-  ___satfractunssida
+-  ___satfractunssita
+-  ___satfractunssiuqq
+-  ___satfractunssiuhq
+-  ___satfractunssiusq
+-  ___satfractunssiudq
+-  ___satfractunssiutq
+-  ___satfractunssiuha
+-  ___satfractunssiusa
+-  ___satfractunssiuda
+-  ___satfractunssiuta
+-  ___satfractunsdiqq
+-  ___satfractunsdihq
+-  ___satfractunsdisq
+-  ___satfractunsdidq
+-  ___satfractunsditq
+-  ___satfractunsdiha
+-  ___satfractunsdisa
+-  ___satfractunsdida
+-  ___satfractunsdita
+-  ___satfractunsdiuqq
+-  ___satfractunsdiuhq
+-  ___satfractunsdiusq
+-  ___satfractunsdiudq
+-  ___satfractunsdiutq
+-  ___satfractunsdiuha
+-  ___satfractunsdiusa
+-  ___satfractunsdiuda
+-  ___satfractunsdiuta
+-  ___satfractunstiqq
+-  ___satfractunstihq
+-  ___satfractunstisq
+-  ___satfractunstidq
+-  ___satfractunstitq
+-  ___satfractunstiha
+-  ___satfractunstisa
+-  ___satfractunstida
+-  ___satfractunstita
+-  ___satfractunstiuqq
+-  ___satfractunstiuhq
+-  ___satfractunstiusq
+-  ___satfractunstiudq
+-  ___satfractunstiutq
+-  ___satfractunstiuha
+-  ___satfractunstiusa
+-  ___satfractunstiuda
+-  ___satfractunstiuta
+-}
+-
+-%inherit GCC_4.4.0 GCC_4.3.0
+-GCC_4.4.0 {
+-  ___sync_fetch_and_add_1
+-  ___sync_fetch_and_sub_1
+-  ___sync_fetch_and_or_1
+-  ___sync_fetch_and_and_1
+-  ___sync_fetch_and_xor_1
+-  ___sync_fetch_and_nand_1
+-  ___sync_add_and_fetch_1
+-  ___sync_sub_and_fetch_1
+-  ___sync_or_and_fetch_1
+-  ___sync_and_and_fetch_1
+-  ___sync_xor_and_fetch_1
+-  ___sync_nand_and_fetch_1
+-  ___sync_bool_compare_and_swap_1
+-  ___sync_val_compare_and_swap_1
+-  ___sync_lock_test_and_set_1
+-
+-  ___sync_fetch_and_add_2
+-  ___sync_fetch_and_sub_2
+-  ___sync_fetch_and_or_2
+-  ___sync_fetch_and_and_2
+-  ___sync_fetch_and_xor_2
+-  ___sync_fetch_and_nand_2
+-  ___sync_add_and_fetch_2
+-  ___sync_sub_and_fetch_2
+-  ___sync_or_and_fetch_2
+-  ___sync_and_and_fetch_2
+-  ___sync_xor_and_fetch_2
+-  ___sync_nand_and_fetch_2
+-  ___sync_bool_compare_and_swap_2
+-  ___sync_val_compare_and_swap_2
+-  ___sync_lock_test_and_set_2
+-
+-  ___sync_fetch_and_add_4
+-  ___sync_fetch_and_sub_4
+-  ___sync_fetch_and_or_4
+-  ___sync_fetch_and_and_4
+-  ___sync_fetch_and_xor_4
+-  ___sync_fetch_and_nand_4
+-  ___sync_add_and_fetch_4
+-  ___sync_sub_and_fetch_4
+-  ___sync_or_and_fetch_4
+-  ___sync_and_and_fetch_4
+-  ___sync_xor_and_fetch_4
+-  ___sync_nand_and_fetch_4
+-  ___sync_bool_compare_and_swap_4
+-  ___sync_val_compare_and_swap_4
+-  ___sync_lock_test_and_set_4
+-
+-  ___sync_fetch_and_add_8
+-  ___sync_fetch_and_sub_8
+-  ___sync_fetch_and_or_8
+-  ___sync_fetch_and_and_8
+-  ___sync_fetch_and_xor_8
+-  ___sync_fetch_and_nand_8
+-  ___sync_add_and_fetch_8
+-  ___sync_sub_and_fetch_8
+-  ___sync_or_and_fetch_8
+-  ___sync_and_and_fetch_8
+-  ___sync_xor_and_fetch_8
+-  ___sync_nand_and_fetch_8
+-  ___sync_bool_compare_and_swap_8
+-  ___sync_val_compare_and_swap_8
+-  ___sync_lock_test_and_set_8
+-
+-  ___sync_fetch_and_add_16
+-  ___sync_fetch_and_sub_16
+-  ___sync_fetch_and_or_16
+-  ___sync_fetch_and_and_16
+-  ___sync_fetch_and_xor_16
+-  ___sync_fetch_and_nand_16
+-  ___sync_add_and_fetch_16
+-  ___sync_sub_and_fetch_16
+-  ___sync_or_and_fetch_16
+-  ___sync_and_and_fetch_16
+-  ___sync_xor_and_fetch_16
+-  ___sync_nand_and_fetch_16
+-  ___sync_bool_compare_and_swap_16
+-  ___sync_val_compare_and_swap_16
+-  ___sync_lock_test_and_set_16
+-
+-  ___sync_synchronize
+-}
+-
+-%inherit GCC_4.5.0 GCC_4.4.0
+-GCC_4.5.0 {
+-  ___unordxf2
+-  ___unordtf2
++  __smulsi3_highpart
++  __umulsi3_highpart
+ }
+diff --git a/libgcc/config/bfin/t-linux b/libgcc/config/bfin/t-linux
+index 1c42e48..8898157 100644
+--- a/libgcc/config/bfin/t-linux
++++ b/libgcc/config/bfin/t-linux
+@@ -1 +1,2 @@
+-SHLIB_MAPFILES = $(srcdir)/config/bfin/libgcc-glibc.ver
++SHLIB_MAPFILES += $(srcdir)/config/bfin/libgcc-glibc.ver
++SHLIB_MKMAP_OPTS = -v skip_underscore=1
+-- 
+2.7.4
+
diff --git a/package/gcc/6.1.0/894-libgcc-fix-DWARF-compilation-with-FDPIC-targets.patch b/package/gcc/6.1.0/894-libgcc-fix-DWARF-compilation-with-FDPIC-targets.patch
new file mode 100644 (file)
index 0000000..cf3f2b8
--- /dev/null
@@ -0,0 +1,73 @@
+From 9d9f97ca5d1ceba66677bf406c9b31027dc1f22e Mon Sep 17 00:00:00 2001
+From: Waldemar Brodkorb <wbx@openadk.org>
+Date: Fri, 19 Aug 2016 13:54:46 +0200
+Subject: [PATCH] libgcc: fix DWARF compilation with FDPIC targets
+
+The build of unwind-dw2-fde-dip.c currently fails for FDPIC targets with
+the following error:
+
+libgcc/unwind-dw2-fde-dip.c:167:31: error: storage size of 'load_base' isn't known
+   struct elf32_fdpic_loadaddr load_base;
+
+This patch addresses that by defining load_base with the appropriate
+type on FDPIC targets. It has been tested on FRV and Blackfin.
+
+Fixes PR gcc/68468.
+
+Signed-off-by: Waldemar Brodkorb <wbx@openadk.org>
+Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
+---
+ libgcc/ChangeLog            | 5 +++++
+ libgcc/unwind-dw2-fde-dip.c | 8 ++++++--
+ 2 files changed, 11 insertions(+), 2 deletions(-)
+
+diff --git a/libgcc/ChangeLog b/libgcc/ChangeLog
+index 36c0194..2e78d20 100644
+--- a/libgcc/ChangeLog
++++ b/libgcc/ChangeLog
+@@ -1,3 +1,8 @@
++2016-08-19  Waldemar Brodkorb <wbx@openadk.org>
++
++      PR gcc/68468
++      * libgcc/unwind-dw2-fde-dip.c: fix build on FDPIC targets.
++
+ 2016-08-19  Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
+       PR gcc/74748
+diff --git a/libgcc/unwind-dw2-fde-dip.c b/libgcc/unwind-dw2-fde-dip.c
+index f7a1c3f..801bce8 100644
+--- a/libgcc/unwind-dw2-fde-dip.c
++++ b/libgcc/unwind-dw2-fde-dip.c
+@@ -124,7 +124,11 @@ static struct frame_hdr_cache_element
+ {
+   _Unwind_Ptr pc_low;
+   _Unwind_Ptr pc_high;
++#if defined __FRV_FDPIC__ || defined __BFIN_FDPIC__
++  struct elf32_fdpic_loadaddr load_base;
++#else
+   _Unwind_Ptr load_base;
++#endif
+   const ElfW(Phdr) *p_eh_frame_hdr;
+   const ElfW(Phdr) *p_dynamic;
+   struct frame_hdr_cache_element *link;
+@@ -163,7 +167,7 @@ _Unwind_IteratePhdrCallback (struct dl_phdr_info *info, size_t size, void *ptr)
+   struct unw_eh_callback_data *data = (struct unw_eh_callback_data *) ptr;
+   const ElfW(Phdr) *phdr, *p_eh_frame_hdr, *p_dynamic;
+   long n, match;
+-#ifdef __FRV_FDPIC__
++#if defined __FRV_FDPIC__ || defined __BFIN_FDPIC__
+   struct elf32_fdpic_loadaddr load_base;
+ #else
+   _Unwind_Ptr load_base;
+@@ -347,7 +351,7 @@ _Unwind_IteratePhdrCallback (struct dl_phdr_info *info, size_t size, void *ptr)
+           break;
+         }
+     }
+-# elif defined __FRV_FDPIC__ && defined __linux__
++# elif (defined __FRV_FDPIC__ || defined __BFIN_FDPIC__) && defined __linux__
+   data->dbase = load_base.got_value;
+ # else
+ #  error What is DW_EH_PE_datarel base on this platform?
+-- 
+2.7.4
+
index 8b2b00a12b9500d0d3987b79847e70af77f354de..6ab7f00896d4c4ef4426e8e1cb76b51daf2a8f74 100644 (file)
@@ -120,9 +120,6 @@ config BR2_EXTRA_GCC_CONFIG_OPTIONS
 config BR2_TOOLCHAIN_BUILDROOT_CXX
        bool "Enable C++ support"
        select BR2_INSTALL_LIBSTDCPP
-       # C++ support currently broken for Blackfin, under
-       # investigation.
-       depends on !BR2_bfin
        help
          Enable this option if you want your toolchain to support the
          C++ language and you want C++ libraries to be installed on
index 284d34cb1ea5e82f3631ccabbc6818bc4a6fe2e8..eea2f74bd7259b60b7f8afa6a23f2c9d02cf5114 100644 (file)
@@ -74,6 +74,10 @@ HOST_GCC_FINAL_CONF_OPTS += "--with-multilib-list=m4a,m4a-nofpu"
 HOST_GCC_FINAL_GCC_LIB_DIR = $(HOST_DIR)/usr/$(GNU_TARGET_NAME)/lib/!m4*
 endif
 
+ifeq ($(BR2_bfin),y)
+HOST_GCC_FINAL_CONF_OPTS += --disable-symvers
+endif
+
 # Disable shared libs like libstdc++ if we do static since it confuses linking
 ifeq ($(BR2_STATIC_LIBS),y)
 HOST_GCC_FINAL_CONF_OPTS += --disable-shared