On 26/10/2013 1:28 am, Joel Sherrill wrote: > > I would love to do this across all BSPs but it can also > break a BSP. The first SPARC executables I got were 0x80 > bytes because I was missing some KEEP() and ENTRY() directives > in the linker script. > > In addition, this isn't a big deal on many BSPs. I would > love to see it used on low memory BSPs. IMO it should be > universal on the ARM given that many of them are low memory > and we already have shared linker scripts. >
Do you have any metrics on the link time on large code bases ? I assume this approach places extra pressure on linker because the number of sections it needs to manage increases. The RSB has an option --targetcflags which lets you supply flags like the ones you have added so I decided to see what it did. I am surprised by the results. This is the size output for the samples using the current git master with your patch built with gcc-4.8.2 and newlib-18-Oct-2013 [1]: ../source-builder/sb-set-builder --log=log_sparc --prefix=/Users/chris/development/rtems/4.11 \ --trace 4.11/rtems-sparc chris@huia sis $ arm-rtems4.11-size $(find . -name \*.exe) text data bss dec hex filename 93344 1648 4336 99328 18400 ./sparc-rtems4.11/c/sis/testsuites/samples/base_sp/base_sp.exe 196480 2112 6160 204752 31fd0 ./sparc-rtems4.11/c/sis/testsuites/samples/capture/capture.exe 193504 2176 20896 216576 34e00 ./sparc-rtems4.11/c/sis/testsuites/samples/cdtest/cdtest.exe 466848 5184 15280 487312 76f90 ./sparc-rtems4.11/c/sis/testsuites/samples/fileio/fileio.exe 69632 1440 4000 75072 12540 ./sparc-rtems4.11/c/sis/testsuites/samples/hello/hello.exe 396944 6336 26576 429856 68f20 ./sparc-rtems4.11/c/sis/testsuites/samples/iostream/cxx_iostream.exe 260752 6080 8752 275584 43480 ./sparc-rtems4.11/c/sis/testsuites/samples/loopback/loopback.exe 36544 1056 3552 41152 a0c0 ./sparc-rtems4.11/c/sis/testsuites/samples/minimum/minimum.exe 103120 1712 4368 109200 1aa90 ./sparc-rtems4.11/c/sis/testsuites/samples/nsecs/nsecs.exe 161264 1984 4992 168240 29130 ./sparc-rtems4.11/c/sis/testsuites/samples/paranoia/paranoia.exe 420160 12112 36112 468384 725a0 ./sparc-rtems4.11/c/sis/testsuites/samples/pppd/pppd.exe 98368 1712 4368 104448 19800 ./sparc-rtems4.11/c/sis/testsuites/samples/ticker/ticker.exe 94864 1584 7840 104288 19760 ./sparc-rtems4.11/c/sis/testsuites/samples/unlimited/unlimited.exe And here are the results with the gcc runtime and newlib built with the extra flags. The executables are larger. ../source-builder/sb-set-builder --log=log_sparc --prefix=/Users/chris/development/rtems/4.11 \ --targetcflags="-ffunction-sections -fdata-sections" --trace 4.11/rtems-sparc chris@huia sis $ arm-rtems4.11-size $(find . -name \*.exe) text data bss dec hex filename 99472 1616 4336 105424 19bd0 ./sparc-rtems4.11/c/sis/testsuites/samples/base_sp/base_sp.exe 210400 2080 6160 218640 35610 ./sparc-rtems4.11/c/sis/testsuites/samples/capture/capture.exe 217280 2144 20896 240320 3aac0 ./sparc-rtems4.11/c/sis/testsuites/samples/cdtest/cdtest.exe 522176 5136 15248 542560 84760 ./sparc-rtems4.11/c/sis/testsuites/samples/fileio/fileio.exe 72992 1456 4000 78448 13270 ./sparc-rtems4.11/c/sis/testsuites/samples/hello/hello.exe 455184 6304 26560 488048 77270 ./sparc-rtems4.11/c/sis/testsuites/samples/iostream/cxx_iostream.exe 270368 6048 8752 285168 459f0 ./sparc-rtems4.11/c/sis/testsuites/samples/loopback/loopback.exe 37152 1056 3552 41760 a320 ./sparc-rtems4.11/c/sis/testsuites/samples/minimum/minimum.exe 113952 1680 4368 120000 1d4c0 ./sparc-rtems4.11/c/sis/testsuites/samples/nsecs/nsecs.exe 176752 1952 4992 183696 2cd90 ./sparc-rtems4.11/c/sis/testsuites/samples/paranoia/paranoia.exe 445696 12080 36096 493872 78930 ./sparc-rtems4.11/c/sis/testsuites/samples/pppd/pppd.exe 106608 1680 4368 112656 1b810 ./sparc-rtems4.11/c/sis/testsuites/samples/ticker/ticker.exe 100800 1552 7840 110192 1ae70 ./sparc-rtems4.11/c/sis/testsuites/samples/unlimited/unlimited.exe I have not looked into why and do not have the time. I feel extending this to other BSPs will require more investigation. Note, the sparc stdc++ libraries are built with these flags by default. Chris [1] All tools built on MacOS 10.9 (Maverick) using clang (linked gcc). _______________________________________________ rtems-devel mailing list rtems-devel@rtems.org http://www.rtems.org/mailman/listinfo/rtems-devel