MIPS code size strangeness

Eugene Grosbein eugen at grosbein.net
Mon Nov 21 11:18:28 UTC 2016


On 21.11.2016 05:18, Warner Losh wrote:
> On Sun, Nov 20, 2016 at 11:14 AM, Eugene Grosbein <eugen at grosbein.net> wrote:
>> Hi!
>>
>> I'm currently struggle trying to fit my FreeBSD 12/mips build into 8M flash available.
>> It used to fit with early 11.0-CURRENT and it has over megabyte overhead with 12.0-CURRENT.
>>
>> Large parts are /usr/bin and /usr/lib and I've found something very strange.
>> For example: /usr/lib/libprivateucl.so.1 has 136064 bytes for amd64
>> and it has 241560 bytes for mips.
>>
>> "nm -C -D --print-size --size-sort libprivateucl.so.1" shows the symbol "ucl_hash_replace"
>> has 330 bytes (0x14a) for amd64 and it has 25000 bytes (sic! 0x61a8) for mips.
>>
>> I understand that amd64 version is built with clang and MIPS code generated with gcc.
>> But why such large difference? In no way such small function ucl_hash_replace()
>> should expand to 25000 machine code bytes.
>>
>> I suspect other parts of code may have this problem too.
> 
> Keep in mind that FreeBSD uses clang for amd64, which is quite good at
> code generation, while we still have to use an ancient version of gcc
> for mips, which is known to produce kinda crappy code for mips. To
> know for sure, you'll need to look at the code.

C code is pretty small and simple. How do I disassemble MIPS machine code?

Is it possible to build FreeBSD12/mips with something more modern like gcc6, perhaps?




More information about the freebsd-mips mailing list