http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57260
Bug ID: 57260 Summary: Generated R_MIPS_GOT_MIPS relocation for direct function call while compiling with -O2 on MIPS N64 Product: gcc Version: unknown Status: UNCONFIRMED Severity: major Priority: P3 Component: c Assignee: unassigned at gcc dot gnu.org Reporter: lee.duhem at gmail dot com Created attachment 30101 --> http://gcc.gnu.org/bugzilla/attachment.cgi?id=30101&action=edit includes glxdri.c, glxdri.xgcc.O0.s and glxdri.xgcc.O2.s If glxdri.c, which is part of Xorg source, is compiled by gcc with -O2, R_MIPS_GOT_DISP relocations will be generated for two direct function calls, DRIBlockHandler and DRIWakeupHandler. While Xorg loads the libglx.so that is generated by using glxdri.o and other object files, dlopen will give error message which says 'undefined symbol: DRIBlockHandler'. If glxdri.c is compiled by gcc with -O0, all the relocations for both DRIBlockHandler and DRIWakeupHandler are R_MIPS_CALL16, this time the libglx.so will be loaded correctly by dlopen. In the -O2 case, is the relocation type for DRIBlockHandler and DRIWakeupHandler correct? Just for your information, here is the glxdir.c compiling command (default ABI is MIPS N64): ~/gcc/build0/gcc/xgcc -B ~/gcc/build0/gcc/ -std=gnu99 -DHAVE_CONFIG_H -I. -I../include -I../hw/xfree86/os-support -I../hw/xfree86/os-support/bus -I../hw/xfree86/common -I../hw/xfree86/dri -I../mi -I../hw/xfree86/dri2 -DHAVE_DIX_CONFIG_H -Wall -Wpointer-arith -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations -Wnested-externs -fno-strict-aliasing -Wbad-function-cast -Wformat=2 -Wold-style-definition -Wdeclaration-after-statement -D_BSD_SOURCE -DHAS_FCHOWN -DHAS_STICKY_DIR_BIT -I/usr/include/freetype2 -I/usr/include/pixman-1 -I../include -I../include -I../Xext -I../composite -I../damageext -I../xfixes -I../Xi -I../mi -I../miext/sync -I../miext/shadow -I../miext/damage -I../render -I../randr -I../fb -fvisibility=hidden -I/usr/include/libdrm -I/usr/include/libdrm -I/usr/include/libdrm -I/usr/include/X11/dri -DXFree86Server -DGLX_USE_TLS -DPTHREADS -O2 -g -Wl,-z,relro -fno-strict-aliasing -MT glxdri.lo -MD -MP -MF .deps/glxdri.Tpo -S glxdri.c -fPIC -DPIC -o .libs/glxdri.xgcc.O2.s