ld does not check properly for output I or D bigger than 64K. If you
load together three files, each roughly this:
char foo[30000] = {0};
ld will do it without complaining and the a.out will be the appropriate
size, but of course the size numbers in the header will have overflowed
and the result won't be too useful.