I don't think it's true that strdup is mostly used for error reporting.
Why do you think so?
Because strdup is not used in the hot loop of any application. strdup uses in
GLIBC are related to error reporting and environment processing which is not
performance critical. Like strdupa and explicit use of unaligned accesses, all
this is premature micro optimization. Removing unnecessary string copies
(why is strdup of a constant string a useful idiom that should be optimized?)
or speeding up malloc would be more worthwhile.