rcb@cs.brown.edu (Robert Boyer) (10/31/90)
I'm having some trouble getting the programmable loader interface working on our pmax OSF/1 (snapshot 5) system. No matter what I try, the "load" system call always returns with 0 and EINVAL in errno. As far as I can tell, I am following almost exactly the example in section 3.3.1 of the "OSF/1 Applications Programmer's Guide - SNAPSHOT 5". here is the code fragment that fails: int load_it() { ldr_module_t hdl; ldr_load_flags_t flags=0; void (*p)(); if ( (hdl = load( "./foo",flags)) <= 0 ) { perror("load error"); return -1; } else { p = ldr_lookup(hdl, "foobar" ); (*p)(); return 0; } } "./foo" was compiled with -mpic as follows: cc -mpic -c foo.c as: Flag option -G has already been seen! ld -warn_nopic -o foo foo.o The module foo.c is: foobar() { return 1; } Any help would be greatly appreciated.
lwa@skeptic.osf.org (Larry Allen) (11/06/90)
You're doing the right thing, but all the pieces weren't in the right places in Snapshot 5 for this to work. In particular, the C library "load" routine was a stub (i.e. didn't call the loader). If you're just doing this for testing purposes, you can hack up your Makefiles to compile your program with the loader linked in; see the Makefile for the "tload2" program in <src>/sbin/loader/tests. The loader has been fully integrated, and the C library stub routines replaced by the "real thing", in the final OSF/1 release. -Larry Allen OSF