This is an advanced question, but I figured I'd try posting here as there are a couple gurus that read avrfreaks with whom I don't communicate directly.
I've been writing ArduinoShrink, a library which transparently replaces Arduino functions with smaller & faster versions. It's coded mostly in asm, and relies on the linker finding the symbols for standard Arduino functions in my library before it searches the core.a. Instead of using the standard avr-libc ABI, I like to use a custom ABI with inline asm in order to reduce register pressure when my asm functions don't use all 12 registers specified in the avr-libc ABI. However whenever I try to call micros_raw with inline asm (from an inline function in ArduinoShrink.h), I get the error "millis.c.o: plugin needed to handle lto object".
I can work around the error by defining micros() in millis.c instead of in ArduinoShrink.h (and avr-gcc will still inline it due to LTO). I suspect the issue has something to do with trying to make micros() an inline function, and therefore the code "call micros_raw" is built into the sketch .o instead of being built into the millis .o which is archived into ArduinoShrink.a.
Even though I have a way to make it work, I like to have a complete as possible understanding of the build system, so I would like to figure out the reason behind this error.