Minimum.exe Text Size Outliers

Christian Mauderer oss at c-mauderer.de
Tue May 25 18:57:50 UTC 2021


Hello Joel,

missed the attachement. So if we leave out the ones with bsp_fdt_blob 
and the ones that you marked with "FOUND close()" that leaves the 
following ones (if I didn't miss any):

	======= arm-nucleo-h743zi-minimum.exe =====
	======= arm-stm32h7-minimum.exe =====
	======= i386-pc386-minimum.exe =====
	======= i386-pc486-minimum.exe =====
	======= i386-pc586-minimum.exe =====
	======= i386-pc586-sse-minimum.exe =====
	======= i386-pc686-minimum.exe =====
	======= i386-pcp4-minimum.exe =====
	======= mips-malta-minimum.exe =====

Already a quite short list where it's unclear why they are so big.

I assume the ones with close() need some work. But at least it's already 
at least a trace why they are so big.

Best regards

Christian


On 25/05/2021 20:33, Christian Mauderer wrote:
> Hello Joel,
> 
> On 25/05/2021 19:10, Joel Sherrill wrote:
>> Thanks for the feedback. I did save all of the minimum.exe files as 
>> @CPU at -@BSP at -minimum.exe so they could be analysed. For exe, I did a 
>> size, the tail -5,  and also looked for some symbols that are hints of 
>> dependency chains to things not needed. close(), atexit(), and 
>> rtems_libio_post_driver() being the ones I know of now. I also did a 
>> similar check for the bsp_fdt_blob since that does indicate a large 
>> area is being reserved.
>>
>> I agree that bsp_fdt_blob() is in "r" memory and being included in the 
>> text report. Not sure if that's right since you are implying it is 
>> copied into so I would have expected BSS.
> 
> Depends on the BSP: Some have it read only. Some have it read write. For 
> the BSPs that have it read only it can still be correct. Take Beagle or 
> i.MX7 as an example: These BSPs expect the following boot:
> 
> - U-Boot runs
> 
> - U-Boot reads the application from some storage like eMMC and loads it 
> into memory at the right location.
> 
> - U-Boot reads the FDT blob from some storage and loads it into the 
> memory somewhere without knowing where it should be.
> 
> - U-Boot puts the location of the FDT into one register and then starts 
> the RTEMS application.
> 
> - RTEMS does _very_ few basic initialization. Then it reads the register 
> and copies the FDT to wherever it expects it. I think it's even done 
> before other segments (like BSS) would be initialized. It's certainly 
> done before MMU is set up.
> 
> - The FDT is never changed after that.
> 
> So for BSPs that only run from RAM putting FDT into a "read only" 
> section is completely OK. It's not OK for BSPs that might run from real 
> read only storage like flash. If such a BSP would use that method, it 
> would be a bug.
> 
>>
>> I thought Sebastian added a "malloc" for the BSP to use before the 
>> heap was initialized. But I don't remember the name. Am I remembering 
>> correctly?
> 
> I don't really know that malloc. But I doubt that it works that early. 
> Again: Copying the FDT is one of the first things that these BSPs do. If 
> you want to know the exact location: For ARM it's here:
> 
> https://git.rtems.org/rtems/tree/bsps/arm/shared/start/start.S#n325
> 
> So it's really basic setup before that. It's interrupt stack, switching 
> modes, setup stack pointer and then it's already copy FDT.
> 
>>
>> It is promising that 24 of the BSPs do have the FDT blob. Getting that 
>> out of the .text section report would possibly drop about half of the 
>> BSPs' minimum below 64k. Plus I expect some like pc386 and 
>> motorola_powerpc are > 64k for good reasons not worth investigating.
> 
> Which of the BSPs are left on the list if you cross out the ones with 
> the FDT blob?
> 
> Best regards
> 
> Christian
> 
>>
>> --joel
>>
>> On Tue, May 25, 2021 at 10:13 AM Christian MAUDERER 
>> <christian.mauderer at embedded-brains.de 
>> <mailto:christian.mauderer at embedded-brains.de>> wrote:
>>
>>     Hello Joel,
>>
>>     I think we currently have very few BSPs with a linked in device tree
>>     blob. I know only of the new imxrt (which isn't in your list) and I
>>     think one Xilinx something BSP.
>>
>>     For imx: I only have a build for some minimum based on 5 at hand 
>> right
>>     now. I have to re-build an up to date version to double check 
>> that. For
>>     this BSP there is 0x000069bc text size and 0x00040ebc rodata. So the
>>     rodata is the odd part.
>>
>>     nm -S --size-sort
>>     ./build/b-imx7/arm-rtems5/c/imx7/testsuites/samples/minimum.exe |
>>     tail -5
>>
>>     gives a
>>
>>     80205e40 000004e0 T memcpy
>>     80203a00 0000078c T _IO_Vprintf
>>     80300c2c 00000a00 B bsp_interrupt_handler_table
>>     80301ac0 00001000 B _ISR_Stack_area_begin
>>     80207080 00040000 r bsp_fdt_blob
>>
>>     So yes: For some reason there is a big bsp_fdt_blob there even if 
>> none
>>     should be linked in. I had a look at that variable:
>>
>>     https://git.rtems.org/rtems/tree/bsps/shared/start/bsp-fdt.c
>>     <https://git.rtems.org/rtems/tree/bsps/shared/start/bsp-fdt.c>
>>
>>     U-Boot passes a FDT blob and the BSP copies it into that area that is
>>     reserved with a fixed size. Seems reasonable because we can't easily
>>     allocate memory when we copy the FDT. It's done during initialization
>>     and therefore there is no heap yet.
>>
>>     If you still have the binaries: Maybe you can call the nm command 
>> like
>>     above for the other BSPs too so we can see what the biggest 
>> objects are?
>>
>>     Best regards
>>
>>     Christian
>>
>>     Am 24.05.21 um 15:00 schrieb Joel Sherrill:
>>      > Hi
>>      >
>>      > I built all 187 BSPs overnight and saved minimum.exe. Although I
>>     think
>>      > 64K is still too much code, I am using that as an initial cutoff
>>     when
>>      > asking for some help in identifying why minimum.exe is 
>> surprisingly
>>      > large for some BSPs. 146 stayed under 64k which leaves 41 needing
>>     some
>>      > investigation or explanation.  I suspect some might have a device
>>     tree
>>      > blob linked in. The surprising ones are the riscv, stmh7, beagle,
>>     and qoriq.
>>      >
>>      > Here is the list:
>>      >
>>      >   73680     504 34135552        34209736        209ffc8
>>      > minimum-exes/arm-nucleo-h743zi-minimum.exe
>>      >    73680     504 34135552        34209736        209ffc8
>>      > minimum-exes/arm-stm32h7-minimum.exe
>>      >    88509     452 268346424       268435385       fffffb9
>>      > minimum-exes/riscv-frdme310arty-minimum.exe
>>      >    88647     760 67019328        67108735        3ffff7f
>>      > minimum-exes/riscv-rv64imac_medany-minimum.exe
>>      >    88697     760 67019328        67108785        3ffffb1
>>      > minimum-exes/riscv-rv64imac-minimum.exe
>>      >    88947     760 67019072        67108779        3ffffab
>>      > minimum-exes/riscv-rv64imafdc-minimum.exe
>>      >    88955     760 67019072        67108787        3ffffb3
>>      > minimum-exes/riscv-rv64imafdc_medany-minimum.exe
>>      >    89279     452 67019064        67108795        3ffffbb
>>      > minimum-exes/riscv-rv32imac-minimum.exe
>>      >    89561     452 67018808        67108821        3ffffd5
>>      > minimum-exes/riscv-rv32imafc-minimum.exe
>>      >    89577     452 67018744        67108773        3ffffa5
>>      > minimum-exes/riscv-rv32imafdc-minimum.exe
>>      >    90267     452 67018040        67108759        3ffff97
>>      > minimum-exes/riscv-rv32iac-minimum.exe
>>      >    96523     760 67011520        67108803        3ffffc3
>>      > minimum-exes/riscv-rv64imafd_medany-minimum.exe
>>      >    96547     760 67011456        67108763        3ffff9b
>>      > minimum-exes/riscv-rv64imafd-minimum.exe
>>      >    97787     452 67010536        67108775        3ffffa7
>>      > minimum-exes/riscv-rv32im-minimum.exe
>>      >    98071     452 67010296        67108819        3ffffd3
>>      > minimum-exes/riscv-rv32imafd-minimum.exe
>>      >    99587     452 67008744        67108783        3ffffaf
>>      > minimum-exes/riscv-rv32i-minimum.exe
>>      >   100328    9148   24320  133796   20aa4
>>     minimum-exes/i386-pc386-minimum.exe
>>      >   103344    9436   24256  137036   2174c
>>     minimum-exes/i386-pcp4-minimum.exe
>>      >   108836    9148   24320  142304   22be0
>>     minimum-exes/i386-pc486-minimum.exe
>>      >   111956    9148   24320  145424   23810
>>     minimum-exes/i386-pc586-minimum.exe
>>      >   112148    9372   24256  145776   23970
>>      > minimum-exes/i386-pc586-sse-minimum.exe
>>      >   114612    9148   24320  148080   24270
>>     minimum-exes/i386-pc686-minimum.exe
>>      >   121013   19128   93696  233837   3916d
>>      > minimum-exes/powerpc-mvme5500-minimum.exe
>>      >   123765   22980  379760  526505   808a9
>>      > minimum-exes/powerpc-qemuprep-minimum.exe
>>      >   124253   22916  380484  527653   80d25
>>      > minimum-exes/powerpc-mvme2100-minimum.exe
>>      >   126669   23060  379760  529489   81451
>>      > minimum-exes/powerpc-qemuprep-altivec-minimum.exe
>>      >   129820    1024   11872  142716   22d7c
>>     minimum-exes/mips-malta-minimum.exe
>>      >   130673   24324  380496  535493   82bc5
>>      > minimum-exes/powerpc-mtx603e-minimum.exe
>>      >   130977   24380  380496  535853   82d2d
>>      > minimum-exes/powerpc-mcp750-minimum.exe
>>      >   131029   24240  380496  535765   82cd5
>>      > minimum-exes/powerpc-mvme2307-minimum.exe
>>      >   154493   23912   92876  271281   423b1
>>      > minimum-exes/powerpc-beatnik-minimum.exe
>>      >   168173   27216   25081  220470   35d36
>>      > minimum-exes/powerpc-mvme3100-minimum.exe
>>      >   289136     424 535532700       535822260       1fefffb4
>>      >   minimum-exes/arm-imx7-minimum.exe
>>      >   312308    7964 66788536        67108808        3ffffc8
>>      > minimum-exes/powerpc-qoriq_core_1-minimum.exe
>>      >   312340    8036 33277808        33598184        200aae8
>>      > minimum-exes/powerpc-qoriq_core_0-minimum.exe
>>      >   312340    8036 519817056       520137432       1f00aad8
>>      >   minimum-exes/powerpc-qoriq_e500-minimum.exe
>>      >   316944    8060 519816888       520141892       1f00bc44
>>      >   minimum-exes/powerpc-qoriq_e6500_32-minimum.exe
>>      >   331076    1304 519814736       520147116       1f00d0ac
>>      >   minimum-exes/powerpc-qoriq_e6500_64-minimum.exe
>>      >
>>      > Help in reducing and/or explaining is appreciated.
>>      >
>>      > --joel
>>      >
>>      >
>>      >
>>      >
>>      >
>>      > _______________________________________________
>>      > devel mailing list
>>      > devel at rtems.org <mailto:devel at rtems.org>
>>      > http://lists.rtems.org/mailman/listinfo/devel
>>     <http://lists.rtems.org/mailman/listinfo/devel>
>>      >
>>
>>     --     --------------------------------------------
>>     embedded brains GmbH
>>     Herr Christian MAUDERER
>>     Dornierstr. 4
>>     82178 Puchheim
>>     Germany
>>     email: christian.mauderer at embedded-brains.de
>>     <mailto:christian.mauderer at embedded-brains.de>
>>     phone: +49-89-18 94 741 - 18
>>     fax:   +49-89-18 94 741 - 08
>>
>>     Registergericht: Amtsgericht München
>>     Registernummer: HRB 157899
>>     Vertretungsberechtigte Geschäftsführer: Peter Rasmussen, Thomas 
>> Dörfler
>>     Unsere Datenschutzerklärung finden Sie hier:
>>     https://embedded-brains.de/datenschutzerklaerung/
>>     <https://embedded-brains.de/datenschutzerklaerung/>
>>
>>
>> _______________________________________________
>> devel mailing list
>> devel at rtems.org
>> http://lists.rtems.org/mailman/listinfo/devel
>>
> _______________________________________________
> devel mailing list
> devel at rtems.org
> http://lists.rtems.org/mailman/listinfo/devel


More information about the devel mailing list