annotate dynodump/README @ 1306:371cff0ccdd7

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