Path: utzoo!utgpu!news-server.csri.toronto.edu!bonnie.concordia.ca!uunet!world!bzs From: bzs@world.std.com (Barry Shein) Newsgroups: comp.unix.wizards Subject: Re: Loading and Executing Object Code at Runtime Message-ID: Date: 14 Feb 91 09:43:21 GMT References: <1991Feb13.212704.7016@cec1.wustl.edu> Sender: bzs@world.std.com (Barry Shein) Organization: The World Lines: 38 In-Reply-To: flan@cics.Berkeley.EDU's message of 13 Feb 91 21:27:04 GMT >I'm wondering how to load an object file (my_functions.o) at execution >time and execute a function contained therein. I know this is possible >since many flavors of LISP allow you to compile your functions and then >load the compiled versions later. > >If it's in TFM, could someone point me in the right direction, or, if it's >trivially simple, could someone please explain how to go about it? It's not trivially simple by any means and can be quite subtle to get right (e.g. loading multiple functions which reference each other and external functions.) It also is heavily dependent on the particular version of Unix, this is not portable, although one solution might work on several different unixes. BSD-based systems will use "ld -A" for starters. Encore had a routine to do this which made it relatively easy (dynaload(), which I think originated at AT&T but was never made part of the regular distribution? Or do I say this every two years when it comes up and someone corrects me that it's original to Encore? Anyhow.) In theory you should be able to do this on any Unix system, barring hideous ideosyncractic restrictions, it's mostly a matter of how much of a link-editor you might have to implement yourself. For starters, if you had a trivial routine that had no external references you can usually just read it into a malloc'd array of bytes from the .o and jump to it. It's the external references that make this harder than that, you have to resolve the externals against any which are already in the running image (e.g. printf) and load in any externals from the libraries (e.g. libc.a) which aren't. Your best bet is to find a piece of code which does this and read it. KCL does this and is available in source from various FTP sources. -- -Barry Shein Software Tool & Die | bzs@world.std.com | uunet!world!bzs Purveyors to the Trade | Voice: 617-739-0202 | Login: 617-739-WRLD