To my
surprise, I found that the compiler instead[2] produced the deprecated
R_ARM_PLT32 relocation. Considering the deprecated state of this
relocation type, should this be considered a bug?

Yes...

Being a linker
implementer, I for one would greatly appreciate it if GCC tried to only
use non-deprecated relocation types.

And so you will need to repost this bug report to the gcc bug mailing
list, since it is gcc's fault...

What is happening is that GCC is producing this assembler output for the
call to hi():

bl hi(PLT)

The presence of the "(PLT)" instructs GAS to produce the deprecated
ARM_PLT32 reloc. (See the ARM specific portion of the GAS documentation
for a mention of this).

GCC is adding this suffix because the -fPIC flag enables NEED_PLT_RELOC
(see gcc/config/arm/elf.h). Why elf.h is doing this I am not sure -
backwards compatibility maybe ? Anyway it is GCC that needs fixing, not
GAS.