Looking up a hash table for each symbol should be avoided for
performance reasons. In this patch, I assign a unique ID to each
file and use that number to sort symbols.
The other way of doing this would be to use object addresses of files,
but that algorithm fails to make output reproducible. So I had to
add FileId member to InputFile class.
Given regular symbol A and an internal symbol B (file is null), this comparison will return false for A < B and B < A.
I think this has to be
if (!L.Sym->File || !R.Sym->File)