[Bug 1772332] Re: 18.04 breaks firmware builds
Thomas Preud'homme
thomas.preudhomme at arm.com
Wed Nov 28 11:30:43 UTC 2018
** Also affects: newlib (Ubuntu)
Importance: Undecided
Status: New
--
You received this bug notification because you are a member of Ubuntu
Foundations Bugs, which is subscribed to newlib in Ubuntu.
https://bugs.launchpad.net/bugs/1772332
Title:
18.04 breaks firmware builds
Status in GNU Arm Embedded Toolchain:
Invalid
Status in newlib package in Ubuntu:
New
Status in newlib package in Debian:
Fix Released
Bug description:
Specifically, the combination of gcc-arm-none-eabi 6.3.1 and
libnewlib-arm-none-eabi 2.4.0 breaks firmware builds.
Symptoms:
Trying to link, I get one error of the form:
/usr/lib/gcc/arm-none-eabi/6.3.1/../../../arm-none-eabi/bin/ld:
error: /usr/lib/gcc/arm-none-eabi/6.3.1/../../../arm-none-
eabi/lib/crt0.o: Conflicting CPU architectures 13/1
and 82 errors of the form:
/usr/lib/gcc/arm-none-eabi/6.3.1/../../../arm-none-eabi/bin/ld: error: hsm.elf uses VFP register arguments, /usr/lib/gcc/arm-none-eabi/6.3.1/../../../arm-none-eabi/lib/libg.a(lib_a-assert.o)
does not
(one for every object linked from libg.a).
Translation: My code is built to use the hardware Floating-Point Unit,
but libg.a is built to use software floating-point, which you might
think would be okay, but isn't. Also, crt0.o is built for a different
CPU architecture, which is never okay.
Root cause analysis:
gcc-arm-none-eabi and libnewlib-arm-none-eabi each have a pile of
arch-specific directories for libraries and crt*.o files. gcc intuits
the proper directory (combination of ARM version and floating-point
support) from arch-specific cflags (in my case: -mcpu=cortex-m4
-mthumb -mlittle-endian -mthumb-interwork -mfloat-abi=hard
-mfpu=fpv4-sp-d16).
For reasons that are still unclear, gcc-arm-none-eabi 6.3.1 changed its lib directory structure, e.g. 5.4.1/armv7e-m/fpu -> 6.3.1/thumb/v7e-m/fpv4-sp/hard. And it seems to expect that newlib will
use the same directory structure. But newlib wasn't revved in this release (it went from version 2.4.0.20160527-2 to 2.4.0.20160527-3), so it has the old directory structure.
Finally, for reasons that are super unclear, if ld doesn't find the
library or object file it's looking for, it doesn't complain, but
defaults to the same file in its top-level directory. e.g. If it can't
find /usr/lib/arm-none-eabi/lib/armv7e-m/fpu/crt0.o, it uses /usr/lib
/arm-none-eabi/lib/crt0.o.
Workarounds:
1. Manually downgrade gcc-arm-none-eabi to 5.4.1.
2. Or manually symlink the affected files:
cd /usr/lib/arm-none-eabi/newlib/thumb/v7e-m/fpv4-sp/hard
sudo ln -s ../../../../armv7e-m/fpu/crt0.o crt0.o
sudo ln -s ../../../../armv7e-m/fpu/libg.a libg.a
To manage notifications about this bug go to:
https://bugs.launchpad.net/gcc-arm-embedded/+bug/1772332/+subscriptions
More information about the foundations-bugs
mailing list