Live data from Hacker News

How statically linked programs run on Linux (2012)

eli.thegreenplace.net

1–9 of 9 posts

Re: How statically linked programs run on Linux (2012)

#6
Eli Bendersky's blog. It gets reposted on HN quite often and with very, very good reason. It's an absolute treasure trove of technicalia. I've spent many hours deep in his articles. On all sorts of cool technical topics, like parsers, debuggers, cool language features, abstract math...

And I'm sure I'm not the only frequenter of HN that loves this stuff.

Re: How statically linked programs run on Linux (2012)

#7
The diagram showing the stack on program entry misses the auxiliary vector[0].

As a sidenote, I find stack diagrams more intuitive (for typical descending stacks) when the low address is drawn at the top. This way it looks like a real-world stack and if you need to represent some data or executable code in the same address space it will appear in natural order, from top to bottom.

[0] http://articles.manugarg.com/aboutelfauxiliaryvectors.html

Re: How statically linked programs run on Linux (2012)

#8
post #7

The diagram showing the stack on program entry misses the auxiliary vector[0]. As a sidenote, I find stack diagrams more intuitive (for typical descending stacks) when the low address is drawn at the top. This way it looks like a real-world stack and if you need to represent some data or executable code in the same address space it will appear in natural order, from top to bottom. [0] http://articles.manugarg.com/abo…

Yep, I omitted it for simplicity in the diagram, though I do mention it later on.

Re: How statically linked programs run on Linux (2012)

#9
post #4

Does Linux just map the executable into memory, and then let it load memory fault by memory fault? Or is the entire executable, or some large portion therof, loaded at startup?

As I commented there: http://garrett.damore.org/2014/09/modernizing-less.html what's worse is that BSS and data pages are faulted in, so just to startup the OS has to page in multiple times, just to read/write those globals that people love so much... It would be much much better to make no use whatsoever of globals (i.e. put everything on the stack in main() )...