annotate src/unexhp9k800.c @ 5781:0853e1ec8529

Use alloca_{rawbytes,ibytes} in #'copy-file, #'insert-file-contents-internal src/ChangeLog addition: 2014-01-20 Aidan Kehoe <kehoea@parhasard.net> * fileio.c (Fcopy_file, Finsert_file_contents_internal): Use alloca_{rawbytes,ibytes} here instead of the implicit alloca on the stack; doesn't change where the buffers are allocated for these two functions, but does mean that decisions about alloca vs. malloc based on buffer size are made in the same place (ultimately, the ALLOCA() macro).
author Aidan Kehoe <kehoea@parhasard.net>
date Mon, 20 Jan 2014 17:53:07 +0000
parents 90dcf2376909
children
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.
5477
90dcf2376909 Last minute notice fixups.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 5402
diff changeset
2
90dcf2376909 Last minute notice fixups.
Stephen J. Turnbull <stephen@xemacs.org>
parents: 5402
diff changeset
3 Copyright 1996 Bob Desinger <hpsemc!bd@hplabs.hp.com>
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5 This file is part of XEmacs.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6
5402
308d34e9f07d Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents: 3025
diff changeset
7 XEmacs is free software: you can redistribute it and/or modify it
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
8 under the terms of the GNU General Public License as published by the
5402
308d34e9f07d Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents: 3025
diff changeset
9 Free Software Foundation, either version 3 of the License, or (at your
308d34e9f07d Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents: 3025
diff changeset
10 option) any later version.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
11
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
12 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
13 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
15 for more details.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
16
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
17 You should have received a copy of the GNU General Public License
5402
308d34e9f07d Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents: 3025
diff changeset
18 along with XEmacs. If not, see <http://www.gnu.org/licenses/>. */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
19
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
20 /* Synched up with: Not synched with FSF. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
21
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 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
25 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
26 process will see the same data structures and data values that the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
27 original process had when unexec was called.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
28
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
29 Unlike other versions of unexec, this one copies symbol table and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
30 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
31 may be debugged with symbolic debuggers.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
32
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
33 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
34 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
35
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
36 CAVEATS:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
37 This routine saves the current value of all static and external
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
38 variables. This means that any data structure that needs to be
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
39 initialized must be explicitly reset. Variables will not have their
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
40 expected default values.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
41
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
42 Unfortunately, the HP-UX signal handler has internal initialization
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
43 flags which are not explicitly reset. Thus, for signals to work in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
44 conjunction with this routine, the following code must executed when
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
45 the new process starts up.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
46
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
47 void _sigreturn();
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
48 ...
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
49 sigsetreturn(_sigreturn);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
50 */
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 #include <config.h>
430
a5df635868b2 Import from CVS: tag r21-2-23
cvs
parents: 428
diff changeset
54 #include <stdlib.h>
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
55 #include <stdio.h>
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
56 #include <fcntl.h>
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
57 #include <errno.h>
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
58
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
59 #include <a.out.h>
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 430
diff changeset
60 #include "lisp.h"
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
61
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 * Minor modification to enable dumping with shared libraries added by
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
64 * Dipankar Gupta (dg@hplb.hpl.hp.com). I studied Oliver Laumann's
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
65 * more elaborate dynamic loading scheme in ELK while implementing
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
66 * this, but don't use any of his machinery.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
67 *
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
68 * 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
69 * 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
70 *
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
71 * CAVEATS (addenda):
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
72 * 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
73 * replaced between the time of dump and execution, all bets are off.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
74 *
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
75 * 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
76 * current VM implementation.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
77 *
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
78 * 3. Any setup that defines HPUX_USE_SHLIBS *must* also define
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
79 * RUN_TIME_REMAP.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
80 */
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 #ifdef HPUX_USE_SHLIBS
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
83 #include <dl.h> /* User-space dynamic loader entry points */
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 430
diff changeset
84 static void Save_Shared_Data (void);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 430
diff changeset
85 static void Restore_Shared_Data (void);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
86 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
87
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
88 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
89 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
90 void save_data_space (int file, struct header *hdr,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
91 struct som_exec_auxhdr *auxhdr, int size);
3025
facf3239ba30 [xemacs-hg @ 2005-10-25 11:16:19 by ben]
ben
parents: 2286
diff changeset
92 void copy_rest (int old, int new_);
facf3239ba30 [xemacs-hg @ 2005-10-25 11:16:19 by ben]
ben
parents: 2286
diff changeset
93 void copy_file (int old, int new_, int size);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
94 void update_file_ptrs(int file, struct header *hdr,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
95 struct som_exec_auxhdr *auxhdr,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
96 unsigned int location, int offset);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
97 int calculate_checksum(struct header *hdr);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
98
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
99 /* 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
100 int
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 430
diff changeset
101 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
102 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
103 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
104 uintptr_t UNUSED (dummy1), /* not used by emacs */
04bc9d2f42c7 [xemacs-hg @ 2004-09-20 19:18:55 by james]
james
parents: 442
diff changeset
105 uintptr_t UNUSED (dummy2))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
106 {
3025
facf3239ba30 [xemacs-hg @ 2005-10-25 11:16:19 by ben]
ben
parents: 2286
diff changeset
107 int old, new_;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
108 int old_size, new_size;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
109 struct header hdr;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
110 struct som_exec_auxhdr auxhdr;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
111 long i;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
112
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
113 /* For the greatest flexibility, should create a temporary file in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
114 the same directory as the new file. When everything is complete,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
115 rename the temp file to the new name.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
116 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
117 it is still executing. If problems occur, everything is still
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
118 intact. NOT implemented. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
119
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
120 /* Open the input and output a.out files */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
121 old = open (old_name, O_RDONLY);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
122 if (old < 0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
123 { perror(old_name); exit(1); }
3025
facf3239ba30 [xemacs-hg @ 2005-10-25 11:16:19 by ben]
ben
parents: 2286
diff changeset
124 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
125 if (new_ < 0)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
126 { perror(new_name); exit(1); }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
127
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
128 /* Read the old headers */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
129 read_header(old, &hdr, &auxhdr);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
130
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
131 #ifdef HPUX_USE_SHLIBS
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
132 Save_Shared_Data(); /* Save break value (added: dg@hplb.hpl.hp.com) */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
133 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
134 /* Decide how large the new and old data areas are */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
135 old_size = auxhdr.exec_dsize;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
136 /* I suspect these two statements are separate
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
137 to avoid a compiler bug in hpux version 8. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
138 i = (long) sbrk (0);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
139 new_size = i - auxhdr.exec_dmem;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
140
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
141 /* Copy the old file to the new, up to the data space */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
142 lseek(old, 0, 0);
3025
facf3239ba30 [xemacs-hg @ 2005-10-25 11:16:19 by ben]
ben
parents: 2286
diff changeset
143 copy_file(old, new_, auxhdr.exec_dfile);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
144
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
145 /* Skip the old data segment and write a new one */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
146 lseek(old, old_size, 1);
3025
facf3239ba30 [xemacs-hg @ 2005-10-25 11:16:19 by ben]
ben
parents: 2286
diff changeset
147 save_data_space(new_, &hdr, &auxhdr, new_size);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
148
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
149 /* Copy the rest of the file */
3025
facf3239ba30 [xemacs-hg @ 2005-10-25 11:16:19 by ben]
ben
parents: 2286
diff changeset
150 copy_rest(old, new_);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
151
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
152 /* 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
153 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
154
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
155 /* Save the modified header */
3025
facf3239ba30 [xemacs-hg @ 2005-10-25 11:16:19 by ben]
ben
parents: 2286
diff changeset
156 write_header(new_, &hdr, &auxhdr);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
157
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
158 /* Close the binary file */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
159 close (old);
3025
facf3239ba30 [xemacs-hg @ 2005-10-25 11:16:19 by ben]
ben
parents: 2286
diff changeset
160 close (new_);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
161 return 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
162 }
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 /* Save current data space in the file, update header. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
165
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
166 void
2286
04bc9d2f42c7 [xemacs-hg @ 2004-09-20 19:18:55 by james]
james
parents: 442
diff changeset
167 save_data_space (int file, struct header *UNUSED (hdr),
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
168 struct som_exec_auxhdr *auxhdr, int size)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
169 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
170 /* Write the entire data space out to the file */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
171 if (write(file, (void *)auxhdr->exec_dmem, size) != size)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
172 { perror("Can't save new data space"); exit(1); }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
173
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
174 /* Update the header to reflect the new data size */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
175 auxhdr->exec_dsize = size;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
176 auxhdr->exec_bsize = 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
177 }
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 /* Update the values of file pointers when something is inserted. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
180
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
181 void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
182 update_file_ptrs(int file, struct header *hdr,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
183 struct som_exec_auxhdr *auxhdr,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
184 unsigned int location, int offset)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
185 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
186 struct subspace_dictionary_record subspace;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
187 int i;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
188
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
189 /* Increase the overall size of the module */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
190 hdr->som_length += offset;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
191
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
192 /* Update the various file pointers in the header */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
193 #define update(ptr) if (ptr > location) ptr = ptr + offset
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
194 update(hdr->aux_header_location);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
195 update(hdr->space_strings_location);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
196 update(hdr->init_array_location);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
197 update(hdr->compiler_location);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
198 update(hdr->symbol_location);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
199 update(hdr->fixup_request_location);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
200 update(hdr->symbol_strings_location);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
201 update(hdr->unloadable_sp_location);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
202 update(auxhdr->exec_tfile);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
203 update(auxhdr->exec_dfile);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
204
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
205 /* Do for each subspace dictionary entry */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
206 lseek(file, hdr->subspace_location, 0);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
207 for (i = 0; i < hdr->subspace_total; i++)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
208 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
209 if (read(file, &subspace, sizeof(subspace)) != sizeof(subspace))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
210 { perror("Can't read subspace record"); exit(1); }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
211
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
212 /* If subspace has a file location, update it */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
213 if (subspace.initialization_length > 0
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
214 && subspace.file_loc_init_value > location)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
215 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
216 subspace.file_loc_init_value += offset;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
217 lseek(file, -sizeof(subspace), 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
218 if (write(file, &subspace, sizeof(subspace)) != sizeof(subspace))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
219 { perror("Can't update subspace record"); exit(1); }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
220 }
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 /* Do for each initialization pointer record */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
224 /* (I don't think it applies to executable files, only relocatables) */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
225 #undef update
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
226 }
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 /* Read in the header records from an a.out file. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
229
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
230 void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
231 read_header(int file, struct header *hdr, struct som_exec_auxhdr *auxhdr)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
232 {
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 /* Read the header in */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
235 lseek(file, 0, 0);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
236 if (read(file, hdr, sizeof(*hdr)) != sizeof(*hdr))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
237 { perror("Couldn't read header from a.out file"); exit(1); }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
238
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
239 if (hdr->a_magic != EXEC_MAGIC && hdr->a_magic != SHARE_MAGIC
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
240 && hdr->a_magic != DEMAND_MAGIC)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
241 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
242 fprintf(stderr, "a.out file doesn't have legal magic number\n");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
243 exit(1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
244 }
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 lseek(file, hdr->aux_header_location, 0);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
247 if (read(file, auxhdr, sizeof(*auxhdr)) != sizeof(*auxhdr))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
248 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
249 perror("Couldn't read auxiliary header from a.out file");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
250 exit(1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
251 }
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 /* Write out the header records into an a.out file. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
255 void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
256 write_header(int file, struct header *hdr, struct som_exec_auxhdr *auxhdr)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
257 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
258 /* Update the checksum */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
259 hdr->checksum = calculate_checksum(hdr);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
260
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
261 /* Write the header back into the a.out file */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
262 lseek(file, 0, 0);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
263 if (write(file, hdr, sizeof(*hdr)) != sizeof(*hdr))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
264 { perror("Couldn't write header to a.out file"); exit(1); }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
265 lseek(file, hdr->aux_header_location, 0);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
266 if (write(file, auxhdr, sizeof(*auxhdr)) != sizeof(*auxhdr))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
267 { perror("Couldn't write auxiliary header to a.out file"); exit(1); }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
268 }
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 /* Calculate the checksum of a SOM header record. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
271 int
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
272 calculate_checksum(struct header *hdr)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
273 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
274 int checksum, i, *ptr;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
275
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
276 checksum = 0; ptr = (int *) hdr;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
277
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
278 for (i=0; i<sizeof(*hdr)/sizeof(int)-1; i++)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
279 checksum ^= ptr[i];
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
280
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
281 return(checksum);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
282 }
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 /* Copy size bytes from the old file to the new one. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
285 void
3025
facf3239ba30 [xemacs-hg @ 2005-10-25 11:16:19 by ben]
ben
parents: 2286
diff changeset
286 copy_file (int old, int new_, int size)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
287 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
288 int len;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
289 int buffer[8192]; /* word aligned will be faster */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
290
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
291 for (; size > 0; size -= len)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
292 {
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 430
diff changeset
293 len = size < sizeof (buffer) ? size : sizeof (buffer);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 430
diff changeset
294 if (read (old, buffer, len) != len)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 430
diff changeset
295 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 430
diff changeset
296 perror ("Read failure on a.out file");
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 430
diff changeset
297 exit (1);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 430
diff changeset
298 }
3025
facf3239ba30 [xemacs-hg @ 2005-10-25 11:16:19 by ben]
ben
parents: 2286
diff changeset
299 if (write (new_, buffer, len) != len)
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 430
diff changeset
300 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 430
diff changeset
301 perror ("Write failure in a.out file");
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 430
diff changeset
302 exit (1);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 430
diff changeset
303 }
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
304 }
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 /* Copy the rest of the file, up to EOF. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
308 void
3025
facf3239ba30 [xemacs-hg @ 2005-10-25 11:16:19 by ben]
ben
parents: 2286
diff changeset
309 copy_rest (int old, int new_)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
310 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
311 int buffer[4096];
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
312 int len;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
313
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
314 /* Copy bytes until end of file or error */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
315 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
316 if (write(new_, buffer, len) != len) break;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
317
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
318 if (len != 0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
319 { perror("Unable to copy the rest of the file"); exit(1); }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
320 }
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 #ifdef DEBUG
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
323 display_header(struct header *hdr, struct som_exec_auxhdr *auxhdr)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
324 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
325 /* Display the header information (debug) */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
326 printf("\n\nFILE HEADER\n");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
327 printf("magic number %d \n", hdr->a_magic);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
328 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
329 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
330 printf("entry %x \n", auxhdr->exec_entry);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
331 printf("Bss segment size %u\n", auxhdr->exec_bsize);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
332 printf("\n");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
333 printf("data file loc %d size %d\n",
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
334 auxhdr->exec_dfile, auxhdr->exec_dsize);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
335 printf("som_length %d\n", hdr->som_length);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
336 printf("unloadable sploc %d size %d\n",
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
337 hdr->unloadable_sp_location, hdr->unloadable_sp_size);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
338 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
339 #endif /* DEBUG */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
340
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
341 #ifdef HPUX_USE_SHLIBS
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
342 /* 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
343
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
344 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
345
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 430
diff changeset
346 static void
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 430
diff changeset
347 Save_Shared_Data (void)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 430
diff changeset
348 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 430
diff changeset
349 Brk_On_Dump = sbrk (0);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
350 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
351
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 430
diff changeset
352 static void
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 430
diff changeset
353 Restore_Shared_Data (void)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 430
diff changeset
354 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 430
diff changeset
355 brk (Brk_On_Dump);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
356 }
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 /* 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
359 if RUN_TIME_REMAP is set. */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 430
diff changeset
360 int
2286
04bc9d2f42c7 [xemacs-hg @ 2004-09-20 19:18:55 by james]
james
parents: 442
diff changeset
361 run_time_remap (char *UNUSED (dummy))
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 430
diff changeset
362 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 430
diff changeset
363 Restore_Shared_Data ();
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 430
diff changeset
364 return 0;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 430
diff changeset
365 }
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
366 #endif /* HPUX_USE_SHLIBS */