I did more debugging on this last night, and found an if statement that made no sense at all to me. It is checking to see if an old section needs to be moved because it came after the point where the new section was inserted, and the if test is first rounding up the old section file offset. Huh? The old section either started after the new section or it didn't. What on earth does rounding the offset up accomplish other than failing to move a section that should have been moved? (which is what happened to me :-). Even if rounding makes sense for some reason I can't understand, it is using the alignment requirement from the old bss section to round this completely different section which may have a completely different alignment requirement. Again, Huh?. Anyway, the only reason the old code worked was because it was a different size so the file layout happened to be one that worked despite the silly logic. I'm attaching (because outlook persistently screws up line wrapping :-) a text file with all the analysis showing what happened and the patch I applied to unexelf.c which made it work for me.