If a non-pic compiled binary uses sys_errlist directly, the dynamic linker
is copying it into .bss of the program from libc.so and the sizes need
to match, otherwise you get:
%s: Symbol `%s' has different size in shared object, consider re-linking
warning and as sys_nerrlist will contain the size of libc.so's errlist
while the copied one would be smaller, if the program does say
iterate over all values < sys_nerrlist, it will walk
into uninitialized area.
You are over-emphasizing the problem. No reasonable program uses
sys_errlist. No program we ever care about (with exceptions like rpm,
prelink, ...) uses static linking. I something things s/he has to builg
a static application s/he must be aware of the consequences which
include the inability to adjust to changing system environments.