------- Additional Comments From cburgess at qnx dot com 2009-03-26 13:40 ------- For some reason attachments don't work for me, here are the example source files...
a.c: #include <a.h> int main(void) { fptr *fp; /* * Here we call function(), which initially selects a traditional * abicalls stub */ function(); /* We show as this function to give us the address of function(), * however the linker is not aware that the address of function() will * be referenced within the shared object */ set_function_address(&fp); /* when we now as this funtion to invoke our function pointer, it does * so from the GOT context of b.so, and thus if it transfer into an * abicalls stub it will load the incorrect got entry (ie that from * b.so rather a) and havoc will ensue! */ invoke_function(fp); #if 0 /* But if this code is enabled, the reference to the address of function() * causes a PLT to be used, and the address of the PLT becomes * the canonical address of function() */ fp = function; #endif return 0; } a.h: typedef void (fptr)(void); extern void function(void); extern void invoke_function(fptr *f); extern void set_funtion_address(fptr **f); b.c: #include <a.h> void function(void) { } void set_function_address(fptr **fp) { *fp = function; } void invoke_function(fptr *fp) { (fp)(); } Makefile: QCC=env QNX_TARGET=/home/cburgess/qssl/stage qcc -V4.3.3,gcc_ntomipsbe -I . all: a b.so clean: rm -f a b.so *.o a.o: a.c $(QCC) -g -c a.c b.o: b.c $(QCC) -g -shared -c b.c a.s: $(QCC) -S a.c a: a.o b.so $(QCC) -o a a.o b.so b.so: b.o $(QCC) -shared -o b.so -Wl,-soname=b.so b.o -- http://sourceware.org/bugzilla/show_bug.cgi?id=10009 ------- You are receiving this mail because: ------- You are on the CC list for the bug, or are watching someone who is. _______________________________________________ bug-binutils mailing list bug-binutils@gnu.org http://lists.gnu.org/mailman/listinfo/bug-binutils