@ubuntu-sru and @ubuntu-sponsors: would you mind doing a new upload of this package to bionic using the same source as in the last build? This bug will be solved by rebuilding from the same source using the gcc-arm- none-eabi package currently in bionic.
Best regards. ** Description changed: + [Impact] + + This bug prevents users to produce binaries for some of the targets + supported by the compiler. In some case, binaries can get produced but + will fail to execute properly. + + To fix this issue the package needs to be rebuilt from the same source. + Risk of regressions are thus limited to an issue in the arm-none-eabi + toolchain used for the rebuild. + + The bug stems from newlib having libraries for various targets (called + multilib) in a different location than where the compiler expects them + to be, thus making the wrong libraries get selected. The location of the + newlib libraries is decided at build time by asking the compiler + (provided in gcc-arm-none-eabi) where it will be looking for these. + Unfortunately, the version of newlib in Ubuntu bionic was built using a + different version of gcc-arm-none-eabi than the one currently in bionic + and GCC changed where to look for library between those 2 versions. This + is why rebuilding against the current gcc-arm-none-eabi will solve the + issue. + + [Test Case] + + Compile the following hello world testcase (in hello.c) with arm-none- + eabi-gcc -o hello.axf hello.c -mthumb -Wl,--gc-sections -ffast-math + -march=armv7e-m -specs=rdimon.specs + + #include <stdio.h> + + int + main (void) + { + puts ("Hello, World!"); + return 0; + } + + [Regression Potential] + + As explained in the impact, no source change is necessary so any + regression would be due to bugs in the compiler which would be good to + catch anyway. + + + Original bug report below: + The multilib setup is not working in the bionic version of gcc-arm-none- eabi (gcc v6.3.1). For example, if I build a project with "-mcpu=cortex-m4" or "-march=armv7e-m" and link with: arm-none-eabi-gcc -o someoutput.elf object1.o object2.o -mthumb -Wl ,--gc-sections -ffast-math -march=armv7-m -Tlinker_script.ld I get as output: /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 /usr/lib/gcc/arm-none-eabi/6.3.1/../../../arm-none-eabi/bin/ld: failed to merge target specific data of file /usr/lib/gcc/arm-none-eabi/6.3.1/../../../arm-none-eabi/lib/crt0.o arm-none-eabi-readelf -A on any of my object files produces: Attribute Section: aeabi File Attributes - Tag_CPU_name: "Cortex-M4" - Tag_CPU_arch: v7E-M - Tag_CPU_arch_profile: Microcontroller - Tag_THUMB_ISA_use: Thumb-2 - Tag_ABI_PCS_wchar_t: 4 - Tag_ABI_FP_number_model: Finite - Tag_ABI_align_needed: 8-byte - Tag_ABI_align_preserved: 8-byte, except leaf SP - Tag_ABI_enum_size: small - Tag_ABI_optimization_goals: Prefer Speed - Tag_CPU_unaligned_access: v6 + Tag_CPU_name: "Cortex-M4" + Tag_CPU_arch: v7E-M + Tag_CPU_arch_profile: Microcontroller + Tag_THUMB_ISA_use: Thumb-2 + Tag_ABI_PCS_wchar_t: 4 + Tag_ABI_FP_number_model: Finite + Tag_ABI_align_needed: 8-byte + Tag_ABI_align_preserved: 8-byte, except leaf SP + Tag_ABI_enum_size: small + Tag_ABI_optimization_goals: Prefer Speed + Tag_CPU_unaligned_access: v6 But "arm-none-eabi-readelf -A /usr/lib/gcc/arm-none-eabi/6.3.1 /../../../arm-none-eabi/lib/crt0.o" gives Attribute Section: aeabi File Attributes - Tag_CPU_arch: v4 - Tag_ARM_ISA_use: Yes + Tag_CPU_arch: v4 + Tag_ARM_ISA_use: Yes If I define "void _init(void){}" and use -nostartfiles, compilation finishes but the resulting binary does not work. I have not examined the output file but it appears that it has somehow linked to code containing ARM as well as thumb code: # readelf -A someoutput.elf Attribute Section: aeabi File Attributes - Tag_CPU_name: "Cortex-M4" - Tag_CPU_arch: v7E-M - Tag_CPU_arch_profile: Microcontroller - Tag_ARM_ISA_use: Yes - Tag_THUMB_ISA_use: Thumb-2 - Tag_ABI_PCS_wchar_t: 4 - Tag_ABI_FP_denormal: Needed - Tag_ABI_FP_exceptions: Needed - Tag_ABI_FP_number_model: IEEE 754 - Tag_ABI_align_needed: 8-byte - Tag_ABI_align_preserved: 8-byte, except leaf SP - Tag_ABI_enum_size: small - Tag_ABI_optimization_goals: Prefer Speed - Tag_CPU_unaligned_access: v6 + Tag_CPU_name: "Cortex-M4" + Tag_CPU_arch: v7E-M + Tag_CPU_arch_profile: Microcontroller + Tag_ARM_ISA_use: Yes + Tag_THUMB_ISA_use: Thumb-2 + Tag_ABI_PCS_wchar_t: 4 + Tag_ABI_FP_denormal: Needed + Tag_ABI_FP_exceptions: Needed + Tag_ABI_FP_number_model: IEEE 754 + Tag_ABI_align_needed: 8-byte + Tag_ABI_align_preserved: 8-byte, except leaf SP + Tag_ABI_enum_size: small + Tag_ABI_optimization_goals: Prefer Speed + Tag_CPU_unaligned_access: v6 I can work around the problem by manually specifying compatible versions of libc and libgcc with -nostdlib: -nostdlib /usr/lib/arm-none-eabi/newlib/thumb/libc.a /usr/lib/gcc/arm- none-eabi/6.3.1/thumb/v7e-m/libgcc.a This produces a working binary. However, there is still something wrong because readelf -A still includes "Tag_ARM_ISA_use: Yes": Attribute Section: aeabi File Attributes - Tag_CPU_name: "Cortex-M4" - Tag_CPU_arch: v7E-M - Tag_CPU_arch_profile: Microcontroller - Tag_ARM_ISA_use: Yes - Tag_THUMB_ISA_use: Thumb-2 - Tag_ABI_PCS_wchar_t: 4 - Tag_ABI_FP_denormal: Needed - Tag_ABI_FP_exceptions: Needed - Tag_ABI_FP_number_model: IEEE 754 - Tag_ABI_align_needed: 8-byte - Tag_ABI_align_preserved: 8-byte, except leaf SP - Tag_ABI_enum_size: small - Tag_ABI_optimization_goals: Prefer Speed - Tag_CPU_unaligned_access: v6 + Tag_CPU_name: "Cortex-M4" + Tag_CPU_arch: v7E-M + Tag_CPU_arch_profile: Microcontroller + Tag_ARM_ISA_use: Yes + Tag_THUMB_ISA_use: Thumb-2 + Tag_ABI_PCS_wchar_t: 4 + Tag_ABI_FP_denormal: Needed + Tag_ABI_FP_exceptions: Needed + Tag_ABI_FP_number_model: IEEE 754 + Tag_ABI_align_needed: 8-byte + Tag_ABI_align_preserved: 8-byte, except leaf SP + Tag_ABI_enum_size: small + Tag_ABI_optimization_goals: Prefer Speed + Tag_CPU_unaligned_access: v6 Previously, using xenial and gcc v4, readelf gives the following output on the output binary: Attribute Section: aeabi File Attributes - Tag_CPU_name: "7E-M" - Tag_CPU_arch: v7E-M - Tag_CPU_arch_profile: Microcontroller - Tag_THUMB_ISA_use: Thumb-2 - Tag_ABI_PCS_wchar_t: 4 - Tag_ABI_FP_denormal: Needed - Tag_ABI_FP_exceptions: Needed - Tag_ABI_FP_number_model: IEEE 754 - Tag_ABI_align_needed: 8-byte - Tag_ABI_enum_size: small - Tag_ABI_optimization_goals: Prefer Speed - Tag_CPU_unaligned_access: v6 + Tag_CPU_name: "7E-M" + Tag_CPU_arch: v7E-M + Tag_CPU_arch_profile: Microcontroller + Tag_THUMB_ISA_use: Thumb-2 + Tag_ABI_PCS_wchar_t: 4 + Tag_ABI_FP_denormal: Needed + Tag_ABI_FP_exceptions: Needed + Tag_ABI_FP_number_model: IEEE 754 + Tag_ABI_align_needed: 8-byte + Tag_ABI_enum_size: small + Tag_ABI_optimization_goals: Prefer Speed + Tag_CPU_unaligned_access: v6 (Also, what happened to gdb-arm-none-eabi?) -- You received this bug notification because you are a member of Ubuntu Bugs, which is subscribed to Ubuntu. https://bugs.launchpad.net/bugs/1767223 Title: multilib selects wrong start files To manage notifications about this bug go to: https://bugs.launchpad.net/ubuntu/+source/newlib/+bug/1767223/+subscriptions -- ubuntu-bugs mailing list ubuntu-bugs@lists.ubuntu.com https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs