Skip to contentSkip to conversation

package/gcc: disable libitm for sparc <v9

PATCH New Gustavo Zacarias 2 participants 3 messages Jan 15, 2015

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 package/gcc: disable libitm for sparc <v9

libitm (transactional memory) needs SPARC V9+ ISA, otherwise when enabling C++ the toolchain fails to build:

/tmp/cclQ6hrD.s: Assembler messages:
/tmp/cclQ6hrD.s:1261: Error: Architecture mismatch on "rd". /tmp/cclQ6hrD.s:1261: (Requires v9|v9a|v9b; requested architecture is v8.)
Makefile:517: recipe for target 'beginend.lo' failed make[5]: *** [beginend.lo] Error 1

So disable it for our current (v8, leon3) support.

---
 package/gcc/gcc.mk | 5 +++++
 1 file changed, 5 insertions(+)
package/gcc/gcc.mk +5 -0
index cdd71aa..2e8b412 100644
@@ -110,6 +110,11 @@ else
 HOST_GCC_COMMON_CONF_OPTS += --enable-target-optspace
 endif
 
+# libitm needs sparc V9+
+ifeq ($(BR2_sparc_v8)$(BR2_sparc_leon3),y)
+HOST_GCC_COMMON_CONF_OPTS += --disable-libitm
+endif
+
 # gcc 4.6.x quadmath requires wchar
 ifneq ($(BR2_TOOLCHAIN_BUILDROOT_WCHAR),y)
 HOST_GCC_COMMON_CONF_OPTS += --disable-libquadmath
Signature · 1 line
2.0.5
#1 lore raw

PATCH 1/1 package/gcc: disable libitm for sparc <v9

Dear Gustavo Zacarias,

Quoted 10 lines · Gustavo Zacarias

libitm (transactional memory) needs SPARC V9+ ISA, otherwise when enabling C++ the toolchain fails to build:

/tmp/cclQ6hrD.s: Assembler messages:
/tmp/cclQ6hrD.s:1261: Error: Architecture mismatch on "rd". /tmp/cclQ6hrD.s:1261: (Requires v9|v9a|v9b; requested architecture is v8.)
Makefile:517: recipe for target 'beginend.lo' failed make[5]: *** [beginend.lo] Error 1

Quoted 3 lines

So disable it for our current (v8, leon3) support.

Applied, thanks. Is it only SPARCv8 that doesn't have libitm support, or could other architectures be affected? If other architectures are affected, we may want to introduce a BR2_ARCH_HAS_LIBITM or some other similar thing.

Another weird thing: we're not enabling libitm, so why is gcc enabling it by itself, if it knows that the architecture cannot support it?

Thanks,

Thomas

Signature · 3 lines
Thomas Petazzoni, CTO, Free Electrons
Embedded Linux, Kernel and Android engineering
http://free-electrons.com
#2 lore raw

PATCH 1/1 package/gcc: disable libitm for sparc <v9

Quoted 7 lines · Thomas Petazzoni

Applied, thanks. Is it only SPARCv8 that doesn't have libitm support, or could other architectures be affected? If other architectures are affected, we may want to introduce a BR2_ARCH_HAS_LIBITM or some other similar thing.

Another weird thing: we're not enabling libitm, so why is gcc enabling it by itself, if it knows that the architecture cannot support it?

There are other architectures that could be affected, most notably old processors/cores.
I don't think we need to do anything more special about it, most of the time gcc will detect and enable it if the architecture supports it, which basically boils down to your second question, it's failing to realize sparc v8 can't handle it.
It probably has to do with the sparc tuple being used for sparc64 as well (64 bit kernel 32 bit userland) and sparc v8 being terribly old and hardly used outside of LEON (V9 dates from 1993!).
Regards.