[LLVMdev] [3.7.0] Two late issues with cross compilation to mips

Daniel Sanders
Wed, 29 Jul 2015 11:11:40 -0000

#2 has turned out to be user error combined with inconsistent leniency in the
driver. -mnan=2008 strictly conforms to the documentation and is passed on for
MIPS32R3 and ignored for MIPS32R2 (which didn't have IEEE754-2008 support).
However, -mmicromips is (currently) permitted for MIPS32R2 even though it too
was added in MIPS32R3. I've corrected my test configuration and I'll
tighten this up in later releases.

From: llvmdev-bounces at cs.uiuc.edu [mailto:llvmdev-bounces at cs.uiuc.edu] On
Behalf Of Daniel Sanders
Sent: 29 July 2015 11:08
To: Hans Wennborg (hans at chromium.org)
Cc: LLVM Developers Mailing List (llvmdev at cs.uiuc.edu)
Subject: [LLVMdev] [3.7.0] Two late issues with cross compilation to mips

Hi,

Sorry for the late report but I've only just found these issues. Llvm.org
isn't working for me at the moment but I'll file tickets once it is.

The issues are:

1.       Almabench has some significant numerical differences and fails the
reference check for some configs. I'm investigating this one at the moment
but early indications are that it's a similar (but different) problem to the
one we had in LLVM 3.6.2.

2.       Read-only exception tables have broken compatibility with the ~2 year
old gcc toolchains I was using for release testing cross compilation. This
isn't a problem for most test-suite runs since we can just update the
assembler but is causing trouble for microMIPS. More recent toolchains lack the
microMIPS multilib I was using and migrating to the new one is causing link
failures. These failures are related to ELF header bits specifying the SNaN/QNaN
encodings to be IEEE754-1985 or IEEE754-2008 compliant. I suspect the -mnan=2008
isn't reaching the assembler.

3.       Clang is incompatible with changes to the mips-mti-linux-gnu sysroot
from Imagination's mips-mti-linux-gnu toolchain. Libaries are still
multilib'd (albeit with a reduced set) but some of the include paths
aren't anymore. It's also no longer correct to include sysroot/include
(this path is added by common code) since this skips some function definitions.
Instead, we must only include sysroot/usr/include like GCC does. There may be
more details but so far the fix doesn't look simple. As far as I can tell,
clang's multilib expects includes and libraries to have the same layout
(osSuffix() seems to control both). The good news is that it's not a
regression since we can use toolchains from before this layout change.

Daniel Sanders
Leading Software Design Engineer, MIPS Processor IP
Imagination Technologies Limited
www.imgtec.com<https://urldefense.proofpoint.com/v2/url?u=http-3A__www.imgtec.com_&d=AwMFAg&c=8hUWFZcy2Z-Za5rBPlktOQ&r=Mfk2qtn1LTDThVkh6-oGglNfMADXfJdty4_bhmuhMHA&m=K4CUih-MV4ytxP4HxETs-aexQWt_VhGzdtvS7Q4PtfE&s=jNuftM3MAhxKCT54sfMJDt_51K15C6aqrspFaUvRUB8&e=>

-------------- next part --------------
An HTML attachment was scrubbed...
URL:
<http://lists.llvm.org/pipermail/llvm-dev/attachments/20150729/74f74dab/attachment.html>