"Fossies" - the Fresh Open Source Software Archive

Member "xemacs-21.4.22/dynodump/README" (29 May 1997, 2903 Bytes) of archive /linux/misc/xemacs-21.4.22.tar.gz:


As a special service "Fossies" has tried to format the requested text file into HTML format (style: standard) with prefixed line numbers. Alternatively you can here view or download the uninterpreted source code file.

    1 		DYNODUMP
    2 		--------
    3 
    4 Dynodump, not to be confused with DinoTurd (as seen in Jurassic Park),
    5 is a shared object that provides one function:
    6 
    7 	int dynodump(char *new_file);
    8 
    9 dynodump(), called from a running program will write a new executable
   10 in new_file a la unexec() in GNU Emacs.  The difference lies in the
   11 relocations.
   12 
   13 dynodump() will create an image with any relocations (which were
   14 performed by the run-time dynamic linker) undone.  This allows the new
   15 image to be run in a different environment.  There is, however, one
   16 potentially major caveat.  If a symbol reference gets updated during
   17 the running of the calling program, its updated value will be lost.
   18 An example (with additional blank lines for legibility):
   19 
   20 	$ cat lib.c
   21 	char _foo[] = "hello";
   22 	char _bar[] = "world";
   23 
   24 	$ cc -G -o lib.so lib.c
   25 
   26 	$ cat prog.c
   27 	extern char _foo, _bar;
   28  
   29 	int beenhere = 0;
   30 	char * foo = &_foo;
   31 	char * bar = &_bar;
   32  
   33 	int
   34 	main(void)
   35 	{
   36 	    (void) printf("%d: foo = %x\n", beenhere, foo);
   37 	    (void) printf("%d: bar = %x, ", beenhere, bar);
   38  
   39 	    if (!beenhere) {
   40 	        beenhere = 1;
   41 	        bar++;
   42 	        dynodump("newfile");
   43 	    }
   44 	    (void) printf("%x\n", bar);
   45 	}
   46 
   47 	$ cc -o prog prog.c -R. lib.so dynodump.so
   48 
   49 	$ ./prog
   50 	0: foo = ef7503cc
   51 	0: bar = ef7503d2, ef7503d3
   52 
   53 	$ ./newfile
   54 	1: foo = ef7503cc
   55 	1: bar = ef7503d2, ef7503d2
   56 
   57 Notice that in the run of newfile, bar points at "world" instead of
   58 the perhaps expected "orld".
   59 
   60 Dynodump supports sparc, intel, and power pc architectures.
   61 
   62 Dynodump is buildable with GNU make and gcc.  If it works for you
   63 with these tools, let me know.
   64 
   65 unexec()
   66 --------
   67 
   68 Also supplied is an unexsol2.c which belongs in the XEmacs src
   69 directory with the other unex*.c files.  The src/s/sol2.h should be
   70 have the following added to it:
   71 
   72 	#ifdef UNEXEC
   73 	#undef UNEXEC
   74 	#endif
   75 	#define UNEXEC unexsol2.o
   76 
   77 This unexec() will attempt to dlopen() the dynodump.so to find the
   78 dynodump function.  The default is "../dynodump/dynodump.so" which
   79 should be appropriate for the typical XEmacs build (unless you used
   80 configure to set up separate build and source trees).  You may change
   81 it by setting the DYNODUMP environment variable to the full path of
   82 the dynodump shared object.
   83 
   84 Other notes:
   85 
   86 If you're using the 4.0 C compiler from Sun, you should arrange to
   87 shut off the incremental linker.  This is done with the -xildoff
   88 option to the compiler.  The common.mk and testsuite/Makefile files
   89 have commentary and ready made lines for uncommenting for this
   90 purpose.
   91 
   92 If you're interested in playing with the UltraSPARC specific options
   93 to the aforementioned compiler, then the same makefiles have some
   94 commentary and flags settings to point you in that direction.
   95 
   96 Questions:
   97 
   98 dynodump() was developed by Rod.Evans@Eng.Sun.COM and
   99 Georg.Nikodym@Canada.Sun.COM.  If you have questions, feel free to ask
  100 them but be aware that Rod, "don't know jack about emacs."
  101