http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57260
--- Comment #7 from Lee Duhem <lee.duhem at gmail dot com> --- (In reply to Andrew Pinski from comment #6) > > I think the following testcase is closer to my case: > > int shouldbecall16(void); > > int g(void) { shouldbecall16(); return 0; } > > No it is not; mine is the one which shows the issue: > static void > __glXDRIenterServer(GLboolean rendering) > { > .... > DRIWakeupHandler(((void *)0), 0, ((void *)0)); > } There are two symbols that have the R_MIPS_GOT_DISP relocation, DRIBlockHandler and DRIWakeupHandler. The DRIBlockHandler case is static void __glXDRIleaveServer(GLboolean rendering) { ... DRIBlockHandler(NULL, NULL, NULL); for (i = 0; rendering && i < screenInfo.numScreens; i++) { ... } And the DRIWakeupHandler case is static void __glXDRIenterServer(GLboolean rendering) { ... DRIWakeupHandler(NULL, 0, NULL); } Would you like to check again about the first case? I think these two case are different. Thank you for your time.