It seems that the unsafe functions aren't hard-coded: for every unsafe function in libc, there's a section .gnu.warning.name-of-function with the text of a warning to be displayed. For example:
Code:
$ objdump -s -j.gnu.warning.tmpnam /lib/libc.so.6
/lib/libc.so.6: file format elf32-i386
Contents of section .gnu.warning.tmpnam:
0000 74686520 75736520 6f662060 746d706e the use of `tmpn
0010 616d2720 69732064 616e6765 726f7573 am' is dangerous
0020 2c206265 74746572 20757365 20606d6b , better use `mk
0030 7374656d 702700 stemp'.
which seems at least a *bit* saner than hardcoding a list of functions into the linker (a non-glibc definition of tmpnam won't give the warning, I hope).
I couldn't see a way to stop the warning, though (apart from stripping the .gnu.warning.tmpnam section out of libc).