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
[email protected]
http://www.rtems.org/mailman/listinfo/rtems-devel