annotate src/unexhp9k800.c @ 5258:1ed4cefddd12

Add a couple of extra docstring backslashes, #'format-time-string 2010-09-05 Aidan Kehoe <kehoea@parhasard.net> * editfns.c (Fformat_time_string): Use two backslashes so that there is at least one present in the output of describe function, when describing the Roman month number syntax in this function's docstring. Thanks for provoking me to look at this, Stephen Turnbull.
author Aidan Kehoe <kehoea@parhasard.net>
date Sun, 05 Sep 2010 19:22:37 +0100
parents facf3239ba30
children 308d34e9f07d
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1 /* Unexec for HP 9000 Series 800 machines.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2 Bob Desinger <hpsemc!bd@hplabs.hp.com>
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4 This file is part of XEmacs.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6 XEmacs is free software; you can redistribute it and/or modify it
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
7 under the terms of the GNU General Public License as published by the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
8 Free Software Foundation; either version 2, or (at your option) any
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
9 later version.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
10
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
11 XEmacs is distributed in the hope that it will be useful, but WITHOUT
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
12 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
13 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
14 for more details.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
15
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
16 You should have received a copy of the GNU General Public License
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
17 along with XEmacs; see the file COPYING. If not, write to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
18 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
19 Boston, MA 02111-1307, USA. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
20
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
21 /* Synched up with: Not synched with FSF. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
22
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
23 /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
24
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
25 Unexec creates a copy of the old a.out file, and replaces the old data
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
26 area with the current data area. When the new file is executed, the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
27 process will see the same data structures and data values that the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
28 original process had when unexec was called.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
29
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
30 Unlike other versions of unexec, this one copies symbol table and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
31 debug information to the new a.out file. Thus, the new a.out file
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
32 may be debugged with symbolic debuggers.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
33
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
34 If you fix any bugs in this, I'd like to incorporate your fixes.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
35 Send them to uunet!hpda!hpsemc!jmorris or jmorris%hpsemc@hplabs.HP.COM.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
36
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
37 CAVEATS:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
38 This routine saves the current value of all static and external
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
39 variables. This means that any data structure that needs to be
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
40 initialized must be explicitly reset. Variables will not have their
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
41 expected default values.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
42
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
43 Unfortunately, the HP-UX signal handler has internal initialization
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
44 flags which are not explicitly reset. Thus, for signals to work in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
45 conjunction with this routine, the following code must executed when
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
46 the new process starts up.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
47
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
48 void _sigreturn();
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
49 ...
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
50 sigsetreturn(_sigreturn);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
51 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
52
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
53
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
54 #include <config.h>
430
a5df635868b2 Import from CVS: tag r21-2-23
cvs
parents: 428
diff changeset
55 #include <stdlib.h>
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
56 #include <stdio.h>
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
57 #include <fcntl.h>
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
58 #include <errno.h>
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
59
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
60 #include <a.out.h>
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 430
diff changeset
61 #include "lisp.h"
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
62
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
63 /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
64 * Minor modification to enable dumping with shared libraries added by
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
65 * Dipankar Gupta (dg@hplb.hpl.hp.com). I studied Oliver Laumann's
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
66 * more elaborate dynamic loading scheme in ELK while implementing
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
67 * this, but don't use any of his machinery.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
68 *
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
69 * Stores the BRK value at dump time, and uses the RUN_TIME_REMAP hook
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
70 * to break back to the stored value when the dumped executable is restarted.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
71 *
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
72 * CAVEATS (addenda):
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
73 * 1. Text area of the shlibs are not stored. Thus, if a shared library is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
74 * replaced between the time of dump and execution, all bets are off.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
75 *
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
76 * 2. Assumes that the data and bss area are adjacent, which is true of the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
77 * current VM implementation.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
78 *
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
79 * 3. Any setup that defines HPUX_USE_SHLIBS *must* also define
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
80 * RUN_TIME_REMAP.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
81 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
82
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
83 #ifdef HPUX_USE_SHLIBS
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
84 #include <dl.h> /* User-space dynamic loader entry points */
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 430
diff changeset
85 static void Save_Shared_Data (void);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 430
diff changeset
86 static void Restore_Shared_Data (void);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
87 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
88
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
89 void write_header(int file, struct header *hdr, struct som_exec_auxhdr *auxhdr);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
90 void read_header (int file, struct header *hdr, struct som_exec_auxhdr *auxhdr);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
91 void save_data_space (int file, struct header *hdr,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
92 struct som_exec_auxhdr *auxhdr, int size);
3025
facf3239ba30 [xemacs-hg @ 2005-10-25 11:16:19 by ben]
ben
parents: 2286
diff changeset
93 void copy_rest (int old, int new_);
facf3239ba30 [xemacs-hg @ 2005-10-25 11:16:19 by ben]
ben
parents: 2286
diff changeset
94 void copy_file (int old, int new_, int size);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
95 void update_file_ptrs(int file, struct header *hdr,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
96 struct som_exec_auxhdr *auxhdr,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
97 unsigned int location, int offset);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
98 int calculate_checksum(struct header *hdr);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
99
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
100 /* Create a new a.out file, same as old but with current data space */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
101 int
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 430
diff changeset
102 unexec (char *new_name, /* name of the new a.out file to be created */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 430
diff changeset
103 char *old_name, /* name of the old a.out file */
2286
04bc9d2f42c7 [xemacs-hg @ 2004-09-20 19:18:55 by james]
james
parents: 442
diff changeset
104 uintptr_t UNUSED (new_end_of_text), /* ptr to new edata/etext */
04bc9d2f42c7 [xemacs-hg @ 2004-09-20 19:18:55 by james]
james
parents: 442
diff changeset
105 uintptr_t UNUSED (dummy1), /* not used by emacs */
04bc9d2f42c7 [xemacs-hg @ 2004-09-20 19:18:55 by james]
james
parents: 442
diff changeset
106 uintptr_t UNUSED (dummy2))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
107 {
3025
facf3239ba30 [xemacs-hg @ 2005-10-25 11:16:19 by ben]
ben
parents: 2286
diff changeset
108 int old, new_;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
109 int old_size, new_size;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
110 struct header hdr;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
111 struct som_exec_auxhdr auxhdr;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
112 long i;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
113
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
114 /* For the greatest flexibility, should create a temporary file in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
115 the same directory as the new file. When everything is complete,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
116 rename the temp file to the new name.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
117 This way, a program could update its own a.out file even while
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
118 it is still executing. If problems occur, everything is still
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
119 intact. NOT implemented. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
120
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
121 /* Open the input and output a.out files */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
122 old = open (old_name, O_RDONLY);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
123 if (old < 0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
124 { perror(old_name); exit(1); }
3025
facf3239ba30 [xemacs-hg @ 2005-10-25 11:16:19 by ben]
ben
parents: 2286
diff changeset
125 new_ = open (new_name, O_CREAT|O_RDWR|O_TRUNC, 0777);
facf3239ba30 [xemacs-hg @ 2005-10-25 11:16:19 by ben]
ben
parents: 2286
diff changeset
126 if (new_ < 0)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
127 { perror(new_name); exit(1); }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
128
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
129 /* Read the old headers */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
130 read_header(old, &hdr, &auxhdr);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
131
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
132 #ifdef HPUX_USE_SHLIBS
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
133 Save_Shared_Data(); /* Save break value (added: dg@hplb.hpl.hp.com) */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
134 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
135 /* Decide how large the new and old data areas are */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
136 old_size = auxhdr.exec_dsize;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
137 /* I suspect these two statements are separate
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
138 to avoid a compiler bug in hpux version 8. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
139 i = (long) sbrk (0);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
140 new_size = i - auxhdr.exec_dmem;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
141
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
142 /* Copy the old file to the new, up to the data space */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
143 lseek(old, 0, 0);
3025
facf3239ba30 [xemacs-hg @ 2005-10-25 11:16:19 by ben]
ben
parents: 2286
diff changeset
144 copy_file(old, new_, auxhdr.exec_dfile);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
145
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
146 /* Skip the old data segment and write a new one */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
147 lseek(old, old_size, 1);
3025
facf3239ba30 [xemacs-hg @ 2005-10-25 11:16:19 by ben]
ben
parents: 2286
diff changeset
148 save_data_space(new_, &hdr, &auxhdr, new_size);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
149
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
150 /* Copy the rest of the file */
3025
facf3239ba30 [xemacs-hg @ 2005-10-25 11:16:19 by ben]
ben
parents: 2286
diff changeset
151 copy_rest(old, new_);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
152
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
153 /* Update file pointers since we probably changed size of data area */
3025
facf3239ba30 [xemacs-hg @ 2005-10-25 11:16:19 by ben]
ben
parents: 2286
diff changeset
154 update_file_ptrs(new_, &hdr, &auxhdr, auxhdr.exec_dfile, new_size-old_size);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
155
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
156 /* Save the modified header */
3025
facf3239ba30 [xemacs-hg @ 2005-10-25 11:16:19 by ben]
ben
parents: 2286
diff changeset
157 write_header(new_, &hdr, &auxhdr);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
158
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
159 /* Close the binary file */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
160 close (old);
3025
facf3239ba30 [xemacs-hg @ 2005-10-25 11:16:19 by ben]
ben
parents: 2286
diff changeset
161 close (new_);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
162 return 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
163 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
164
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
165 /* Save current data space in the file, update header. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
166
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
167 void
2286
04bc9d2f42c7 [xemacs-hg @ 2004-09-20 19:18:55 by james]
james
parents: 442
diff changeset
168 save_data_space (int file, struct header *UNUSED (hdr),
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
169 struct som_exec_auxhdr *auxhdr, int size)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
170 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
171 /* Write the entire data space out to the file */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
172 if (write(file, (void *)auxhdr->exec_dmem, size) != size)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
173 { perror("Can't save new data space"); exit(1); }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
174
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
175 /* Update the header to reflect the new data size */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
176 auxhdr->exec_dsize = size;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
177 auxhdr->exec_bsize = 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
178 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
179
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
180 /* Update the values of file pointers when something is inserted. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
181
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
182 void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
183 update_file_ptrs(int file, struct header *hdr,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
184 struct som_exec_auxhdr *auxhdr,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
185 unsigned int location, int offset)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
186 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
187 struct subspace_dictionary_record subspace;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
188 int i;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
189
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
190 /* Increase the overall size of the module */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
191 hdr->som_length += offset;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
192
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
193 /* Update the various file pointers in the header */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
194 #define update(ptr) if (ptr > location) ptr = ptr + offset
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
195 update(hdr->aux_header_location);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
196 update(hdr->space_strings_location);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
197 update(hdr->init_array_location);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
198 update(hdr->compiler_location);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
199 update(hdr->symbol_location);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
200 update(hdr->fixup_request_location);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
201 update(hdr->symbol_strings_location);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
202 update(hdr->unloadable_sp_location);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
203 update(auxhdr->exec_tfile);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
204 update(auxhdr->exec_dfile);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
205
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
206 /* Do for each subspace dictionary entry */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
207 lseek(file, hdr->subspace_location, 0);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
208 for (i = 0; i < hdr->subspace_total; i++)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
209 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
210 if (read(file, &subspace, sizeof(subspace)) != sizeof(subspace))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
211 { perror("Can't read subspace record"); exit(1); }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
212
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
213 /* If subspace has a file location, update it */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
214 if (subspace.initialization_length > 0
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
215 && subspace.file_loc_init_value > location)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
216 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
217 subspace.file_loc_init_value += offset;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
218 lseek(file, -sizeof(subspace), 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
219 if (write(file, &subspace, sizeof(subspace)) != sizeof(subspace))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
220 { perror("Can't update subspace record"); exit(1); }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
221 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
222 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
223
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
224 /* Do for each initialization pointer record */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
225 /* (I don't think it applies to executable files, only relocatables) */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
226 #undef update
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
227 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
228
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
229 /* Read in the header records from an a.out file. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
230
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
231 void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
232 read_header(int file, struct header *hdr, struct som_exec_auxhdr *auxhdr)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
233 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
234
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
235 /* Read the header in */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
236 lseek(file, 0, 0);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
237 if (read(file, hdr, sizeof(*hdr)) != sizeof(*hdr))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
238 { perror("Couldn't read header from a.out file"); exit(1); }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
239
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
240 if (hdr->a_magic != EXEC_MAGIC && hdr->a_magic != SHARE_MAGIC
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
241 && hdr->a_magic != DEMAND_MAGIC)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
242 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
243 fprintf(stderr, "a.out file doesn't have legal magic number\n");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
244 exit(1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
245 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
246
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
247 lseek(file, hdr->aux_header_location, 0);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
248 if (read(file, auxhdr, sizeof(*auxhdr)) != sizeof(*auxhdr))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
249 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
250 perror("Couldn't read auxiliary header from a.out file");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
251 exit(1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
252 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
253 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
254
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
255 /* Write out the header records into an a.out file. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
256 void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
257 write_header(int file, struct header *hdr, struct som_exec_auxhdr *auxhdr)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
258 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
259 /* Update the checksum */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
260 hdr->checksum = calculate_checksum(hdr);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
261
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
262 /* Write the header back into the a.out file */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
263 lseek(file, 0, 0);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
264 if (write(file, hdr, sizeof(*hdr)) != sizeof(*hdr))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
265 { perror("Couldn't write header to a.out file"); exit(1); }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
266 lseek(file, hdr->aux_header_location, 0);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
267 if (write(file, auxhdr, sizeof(*auxhdr)) != sizeof(*auxhdr))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
268 { perror("Couldn't write auxiliary header to a.out file"); exit(1); }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
269 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
270
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
271 /* Calculate the checksum of a SOM header record. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
272 int
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
273 calculate_checksum(struct header *hdr)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
274 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
275 int checksum, i, *ptr;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
276
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
277 checksum = 0; ptr = (int *) hdr;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
278
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
279 for (i=0; i<sizeof(*hdr)/sizeof(int)-1; i++)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
280 checksum ^= ptr[i];
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
281
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
282 return(checksum);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
283 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
284
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
285 /* Copy size bytes from the old file to the new one. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
286 void
3025
facf3239ba30 [xemacs-hg @ 2005-10-25 11:16:19 by ben]
ben
parents: 2286
diff changeset
287 copy_file (int old, int new_, int size)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
288 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
289 int len;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
290 int buffer[8192]; /* word aligned will be faster */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
291
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
292 for (; size > 0; size -= len)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
293 {
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 430
diff changeset
294 len = size < sizeof (buffer) ? size : sizeof (buffer);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 430
diff changeset
295 if (read (old, buffer, len) != len)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 430
diff changeset
296 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 430
diff changeset
297 perror ("Read failure on a.out file");
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 430
diff changeset
298 exit (1);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 430
diff changeset
299 }
3025
facf3239ba30 [xemacs-hg @ 2005-10-25 11:16:19 by ben]
ben
parents: 2286
diff changeset
300 if (write (new_, buffer, len) != len)
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 430
diff changeset
301 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 430
diff changeset
302 perror ("Write failure in a.out file");
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 430
diff changeset
303 exit (1);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 430
diff changeset
304 }
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
305 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
306 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
307
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
308 /* Copy the rest of the file, up to EOF. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
309 void
3025
facf3239ba30 [xemacs-hg @ 2005-10-25 11:16:19 by ben]
ben
parents: 2286
diff changeset
310 copy_rest (int old, int new_)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
311 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
312 int buffer[4096];
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
313 int len;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
314
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
315 /* Copy bytes until end of file or error */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
316 while ( (len = read(old, buffer, sizeof(buffer))) > 0)
3025
facf3239ba30 [xemacs-hg @ 2005-10-25 11:16:19 by ben]
ben
parents: 2286
diff changeset
317 if (write(new_, buffer, len) != len) break;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
318
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
319 if (len != 0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
320 { perror("Unable to copy the rest of the file"); exit(1); }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
321 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
322
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
323 #ifdef DEBUG
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
324 display_header(struct header *hdr, struct som_exec_auxhdr *auxhdr)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
325 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
326 /* Display the header information (debug) */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
327 printf("\n\nFILE HEADER\n");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
328 printf("magic number %d \n", hdr->a_magic);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
329 printf("text loc %.8x size %d \n", auxhdr->exec_tmem, auxhdr->exec_tsize);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
330 printf("data loc %.8x size %d \n", auxhdr->exec_dmem, auxhdr->exec_dsize);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
331 printf("entry %x \n", auxhdr->exec_entry);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
332 printf("Bss segment size %u\n", auxhdr->exec_bsize);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
333 printf("\n");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
334 printf("data file loc %d size %d\n",
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
335 auxhdr->exec_dfile, auxhdr->exec_dsize);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
336 printf("som_length %d\n", hdr->som_length);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
337 printf("unloadable sploc %d size %d\n",
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
338 hdr->unloadable_sp_location, hdr->unloadable_sp_size);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
339 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
340 #endif /* DEBUG */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
341
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
342 #ifdef HPUX_USE_SHLIBS
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
343 /* Added machinery for shared libs... see comments at the beginning of this file. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
344
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
345 void *Brk_On_Dump = 0; /* Brk value to restore... stored as a global */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
346
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 430
diff changeset
347 static void
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 430
diff changeset
348 Save_Shared_Data (void)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 430
diff changeset
349 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 430
diff changeset
350 Brk_On_Dump = sbrk (0);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
351 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
352
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 430
diff changeset
353 static void
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 430
diff changeset
354 Restore_Shared_Data (void)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 430
diff changeset
355 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 430
diff changeset
356 brk (Brk_On_Dump);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
357 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
358
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
359 /* run_time_remap is the magic called by startup code in the dumped executable
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 430
diff changeset
360 if RUN_TIME_REMAP is set. */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 430
diff changeset
361 int
2286
04bc9d2f42c7 [xemacs-hg @ 2004-09-20 19:18:55 by james]
james
parents: 442
diff changeset
362 run_time_remap (char *UNUSED (dummy))
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 430
diff changeset
363 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 430
diff changeset
364 Restore_Shared_Data ();
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 430
diff changeset
365 return 0;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 430
diff changeset
366 }
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
367 #endif /* HPUX_USE_SHLIBS */