I have a few questions:
a.out replaced by ELF?
As I recall, one of the original problems with a.out format is that it only supported three sections: text, data, and bss. ELF allows any number (or at least many more). The a.out header format was very simple, something like:
word
word
word
word
The ELF format, in contrast, has section headers, with names, sizes, etc.
Having more sections allows for the standard sections, but also gives us const sections, constructor sections, and even one section per function, if we want it.