4 ms·
A Whirlwind Tutorial on Creating Teensy ELF Executables for Linux
- LandStander 4y agoI thought this was going to be about the Teensy boards. https://www.pjrc.com/teensy/ https://www.pjrc.com/teensy/
- JLCarveth 4y agoThat was my thought when I read the title. This was my first experience with an MCU
- LargoLasskhyfv 4y agoAnything cortexy would profit from teensy binaries.
- lxe 4y agoLove this every time it gets posted. Similar vibes to the Justine Tunney's cosmopolitan / αcτµαlly pδrταblε εxεcµταblε world.
- mistrial9 4y agothis use of greek letters for marketing memorability seems "tone-deaf" to me, in other words, lacking any respect for modern greek
- cestith 4y agoI can't imagine screen readers do a great job of seeing Greclish and giving visually impaired users a sensible pronunciation, either.
- deleted 4y ago[deleted]
- nousermane 4y agoI guess this was written a fair while ago. On my laptop, even in 32-bit (i686) mode, with gcc-12 and libc-2.34: - very first, unoptimized program compiles to 15440 bytes (vs 3998 on OP's system); - super-optimized hand-rolled assembly (tiny.s) compiles to 12780 bytes (vs 368 on OP's system).
- Alupis 4y agoI'm wondering if our binaries have really bloated this much, or if there was something the old GCC's did that we no longer get "for free". On my Rocky Linux 8.5 machine with kernel 4.18.x, gcc 8.5.x, and glibc 2.28.x, the sample C program compiles to 17,800 bytes - after stripping, it's down to 6,768 bytes. 16,292 bytes in 32 bit mode, 6,148 after stripping. To put things in perspective, the AVR ATTiny85 only has 8KB of program memory, meaning this simple "return 42" program wouldn't even fit as-is. Seems glibc does add a considerable amount of "bloat" to the binary. I wonder what a properly "golfed" ELF binary file size would be today?
- nousermane 4y agoI think large chunk of it is from dynamic linker, rather than glibc. At least that appear to be the case according to "file a.out". Adding "-static" option seems to prevent that: $ gcc -Wall -s -nostdlib tiny.o; wc -c a.out 12780 a.out $ gcc -Wall -s -nostdlib tiny.o -static $ wc -c a.out 4304 a.out Bulk of what remains is page-size alignment. Linux works with 4KB pages: $ getconf PAGESIZE 4096 ...so it makes sense that gcc (ld, really) aligns to that. But we can dial it down: $ gcc -Wall -s -nostdlib tiny.o -static \ -Wl,-zmax-page-size=64; wc -c a.out 400 a.out ...and a bit more could be shaven by dropping Build ID: $ strip -R .note.gnu.build-id a.out; wc -c a.out 344 a.out This wonderful piece of software: https://github.com/aunali1/super-strip https://github.com/aunali1/super-strip seem to find more things to remove, although not sure what would be that: $ sstrip a.out; wc -c a.out 220 a.out Of course, this is not quite "golfed", and I too, would love to see OP's article updated to x86_64 and current crop of gcc/binutils.
- Alupis 4y ago