Skip to content

LTO causes undefined references to core::panicking::panic #79

Closed
@FenrirWolf

Description

@FenrirWolf

Update

After #80, this only occurs with profile.dev (+debug-assertions) + LTO. To fix this we'll have to create newtypes over primitives types that intrinsics::abort() on bad inputs (division by zero) and overflow.


Getting a funky error when attempting to use rustc-builtins for nintendo 3DS shenanigans instead the prebuilt copy of libcompiler-rt that we've been using up to this point:

   Compiling ctru-rs v0.4.0 (https://github.com/FenrirWolf/ctru-rs?branch=builtins#27eb3caf)
   Compiling rustc_builtins v0.1.0 (https://github.com/japaric/rustc-builtins.git#69e93de9)
   Compiling alloc_system3ds v0.1.0 (https://github.com/rust3ds/alloc_system3ds?rev=da38c94#da38c941)
   Compiling ctru-sys v0.2.0 (https://github.com/FenrirWolf/ctru-rs?branch=builtins#27eb3caf)
   Compiling rust3ds-template v0.1.0 (file:///home/fenrir/projects/rust3ds-template)
error: linking with `arm-none-eabi-gcc` failed: exit code: 1
  |
  = note: "arm-none-eabi-gcc" "-specs=3dsx.specs" "-march=armv6k" "-mtune=mpcore" "-mfloat-abi=hard" "-mtp=soft" "-L" "/home/fenrir/.xargo/lib/rustlib/3ds/lib" "/home/fenrir/projects/rust3ds-template/target/3ds/release/rust3ds_template.0.o" "-o" "/home/fenrir/projects/rust3ds-template/target/3ds/release/rust3ds_template.elf" "-Wl,--gc-sections" "-nodefaultlibs" "-L" "/home/fenrir/projects/rust3ds-template/target/3ds/release/deps" "-L" "/opt/devkitPro/libctru/lib" "-L" "/home/fenrir/.xargo/lib/rustlib/3ds/lib" "-Wl,-Bstatic" "-Wl,-Bdynamic" "/tmp/rustc.n3iL9DJW0uUT/libctru-56422efc011c55b9.rlib" "/tmp/rustc.n3iL9DJW0uUT/librustc_builtins-5c8a87f356eb958c.rlib" "-lc" "-lm" "-lsysbase" "-lc" "-lsysbase" "-lc"
  = note: /tmp/rustc.n3iL9DJW0uUT/librustc_builtins-5c8a87f356eb958c.rlib(rustc_builtins-5c8a87f356eb958c.0.o): In function `__udivmodsi4':
rustc_builtins.cgu-0.rs:(.text.__udivmodsi4+0xb4): undefined reference to `core::panicking::panic::h6d47421a09de1633'
/tmp/rustc.n3iL9DJW0uUT/librustc_builtins-5c8a87f356eb958c.rlib(rustc_builtins-5c8a87f356eb958c.0.o): In function `__udivmoddi4':
rustc_builtins.cgu-0.rs:(.text.__udivmoddi4+0x304): undefined reference to `core::panicking::panic::h6d47421a09de1633'
rustc_builtins.cgu-0.rs:(.text.__udivmoddi4+0x30c): undefined reference to `core::panicking::panic::h6d47421a09de1633'
rustc_builtins.cgu-0.rs:(.text.__udivmoddi4+0x314): undefined reference to `core::panicking::panic::h6d47421a09de1633'
/tmp/rustc.n3iL9DJW0uUT/librustc_builtins-5c8a87f356eb958c.rlib(rustc_builtins-5c8a87f356eb958c.0.o): In function `__aeabi_uidiv':
rustc_builtins.cgu-0.rs:(.text.__aeabi_uidiv+0xa0): undefined reference to `core::panicking::panic::h6d47421a09de1633'
/tmp/rustc.n3iL9DJW0uUT/librustc_builtins-5c8a87f356eb958c.rlib(rustc_builtins-5c8a87f356eb958c.0.o):rustc_builtins.cgu-0.rs:(.text.__divsi3+0x40): more undefined references to `core::panicking::panic::h6d47421a09de1633' follow
collect2: error: ld returned 1 exit status

error: aborting due to previous error

However, the error only occurs if lto = true is set in Cargo.toml. If LTO is disabled, the result is a successful build.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions