home *** CD-ROM | disk | FTP | other *** search
- #include "dld.h"
-
- /* Example to unlink the "main" module (the current executable) so that
- another "main" can be linked in and executed.
-
- To execute, type "reload reload-test".
- */
-
- main (argc, argv)
- int argc;
- char *argv[];
- {
-
- register void (*func) () ;
- int *new_brk;
-
- (void) dld_init(argv[0]);
-
- /* unlink itself */
- dld_unlink_by_file (argv[0], 1);
-
- dld_link (argv[1]);
- #if defined(sequent)
- func = (void (*)()) dld_get_func ("main");
- (*func) ();
- #else
- if (dld_function_executable_p ("main")) {
- func = (void (*)()) dld_get_func ("main");
-
- /* "curbrk" is a symbol used by sbrk(2) to record the current
- break of the process. It is initialized to the address of
- "_end". Since we are loading in a new copy of sbrk, we must
- set its value to the true current break of the process.
- Otherwise, the first call to the new sbrk will get a seg. fault */
- if (new_brk = (int *) dld_get_bare_symbol ("curbrk")) {
- *new_brk = sbrk(0);
- (*func) ();
- }
- }
- #endif
- }
-