ld(1) -zignore can erroneously discard init and fini arrays as unreferenced
.init_array and .fini_array are referenced via the entries in .dynamic, and not by the program text otherwise.
ld(1)'s ignore processing needs to know that these sections are special and cannot be discarded in that fashion.
When these sections are ignored, the DT_ entries are still created, with 0 address and size. The linker is smart enough not to call NULL in these cases, but applications dependent on their initialization having occurred will fail.