I just noticed the discussion from earlier this year about patching gcc to shrink the interupt jump table. - http://avr.2057.n7.nabble.com/Patch-avr-Shrink-interrupt-vector-table-down-to-last-used-entry-td19487.html
My analysis of the discussion is that they decided that a complex project build process is not very complex, but that understanding the machine level behaviour of your process is complex: that rebuilding your library is not complex, but hardware interrupts are complex.
That is an inversion of the actual situation here. Most code here is written in assembler: one of the effects of that is that knowledge of the internals of building C library start code is close to zero.
Nobody here would have any trouble identifing which interrupts are used, or debugging code with stray interrupt errors. On the other hand, the suggested alternatives ("Just -nostartfiles, add gcrt1.S to the project and define _VECTORS_SIZE") are complete unknowns.
To my sorrow, they seem to have decided not to go ahead with the suggestion.