Mercurial > emacs
annotate src/unexmacosx.c @ 112371:1a3d4c7ba327
* unexmacosx.c: Include config.h before unistd.h.
author | Jan D. <jan.h.d@swipnet.se> |
---|---|
date | Wed, 19 Jan 2011 23:13:54 +0100 |
parents | ef719132ddfa |
children | 5bc690b4522f |
rev | line source |
---|---|
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1 /* Dump Emacs in Mach-O format for use on Mac OS X. |
68651
3bd95f4f2941
Update years in copyright notice; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
66764
diff
changeset
|
2 Copyright (C) 2001, 2002, 2003, 2004, 2005, |
112218
376148b31b5e
Add 2011 to FSF/AIST copyright years.
Glenn Morris <rgm@gnu.org>
parents:
106815
diff
changeset
|
3 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc. |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
4 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
5 This file is part of GNU Emacs. |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
6 |
94963
8971ddf55736
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
79759
diff
changeset
|
7 GNU Emacs is free software: you can redistribute it and/or modify |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
8 it under the terms of the GNU General Public License as published by |
94963
8971ddf55736
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
79759
diff
changeset
|
9 the Free Software Foundation, either version 3 of the License, or |
8971ddf55736
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
79759
diff
changeset
|
10 (at your option) any later version. |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
11 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
12 GNU Emacs is distributed in the hope that it will be useful, |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
13 but WITHOUT ANY WARRANTY; without even the implied warranty of |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
15 GNU General Public License for more details. |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
16 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
17 You should have received a copy of the GNU General Public License |
94963
8971ddf55736
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
79759
diff
changeset
|
18 along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */ |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
19 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
20 /* Contributed by Andrew Choi (akochoi@mac.com). */ |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
21 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
22 /* Documentation note. |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
23 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
24 Consult the following documents/files for a description of the |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
25 Mach-O format: the file loader.h, man pages for Mach-O and ld, old |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
26 NEXTSTEP documents of the Mach-O format. The tool otool dumps the |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
27 mach header (-h option) and the load commands (-l option) in a |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
28 Mach-O file. The tool nm on Mac OS X displays the symbol table in |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
29 a Mach-O file. For examples of unexec for the Mach-O format, see |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
30 the file unexnext.c in the GNU Emacs distribution, the file |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
31 unexdyld.c in the Darwin port of GNU Emacs 20.7, and unexdyld.c in |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
32 the Darwin port of XEmacs 21.1. Also the Darwin Libc source |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
33 contains the source code for malloc_freezedry and malloc_jumpstart. |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
34 Read that to see what they do. This file was written completely |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
35 from scratch, making use of information from the above sources. */ |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
36 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
37 /* The Mac OS X implementation of unexec makes use of Darwin's `zone' |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
38 memory allocator. All calls to malloc, realloc, and free in Emacs |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
39 are redirected to unexec_malloc, unexec_realloc, and unexec_free in |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
40 this file. When temacs is run, all memory requests are handled in |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
41 the zone EmacsZone. The Darwin memory allocator library calls |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
42 maintain the data structures to manage this zone. Dumping writes |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
43 its contents to data segments of the executable file. When emacs |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
44 is run, the loader recreates the contents of the zone in memory. |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
45 However since the initialization routine of the zone memory |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
46 allocator is run again, this `zone' can no longer be used as a |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
47 heap. That is why emacs uses the ordinary malloc system call to |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
48 allocate memory. Also, when a block of memory needs to be |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
49 reallocated and the new size is larger than the old one, a new |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
50 block must be obtained by malloc and the old contents copied to |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
51 it. */ |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
52 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
53 /* Peculiarity of the Mach-O files generated by ld in Mac OS X |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
54 (possible causes of future bugs if changed). |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
55 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
56 The file offset of the start of the __TEXT segment is zero. Since |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
57 the Mach header and load commands are located at the beginning of a |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
58 Mach-O file, copying the contents of the __TEXT segment from the |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
59 input file overwrites them in the output file. Despite this, |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
60 unexec works fine as written below because the segment load command |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
61 for __TEXT appears, and is therefore processed, before all other |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
62 load commands except the segment load command for __PAGEZERO, which |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
63 remains unchanged. |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
64 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
65 Although the file offset of the start of the __TEXT segment is |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
66 zero, none of the sections it contains actually start there. In |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
67 fact, the earliest one starts a few hundred bytes beyond the end of |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
68 the last load command. The linker option -headerpad controls the |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
69 minimum size of this padding. Its setting can be changed in |
73690
04b7851d50f8
(malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
73613
diff
changeset
|
70 s/darwin.h. A value of 0x690, e.g., leaves room for 30 additional |
04b7851d50f8
(malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
73613
diff
changeset
|
71 load commands for the newly created __DATA segments (at 56 bytes |
04b7851d50f8
(malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
73613
diff
changeset
|
72 each). Unexec fails if there is not enough room for these new |
04b7851d50f8
(malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
73613
diff
changeset
|
73 segments. |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
74 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
75 The __TEXT segment contains the sections __text, __cstring, |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
76 __picsymbol_stub, and __const and the __DATA segment contains the |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
77 sections __data, __la_symbol_ptr, __nl_symbol_ptr, __dyld, __bss, |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
78 and __common. The other segments do not contain any sections. |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
79 These sections are copied from the input file to the output file, |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
80 except for __data, __bss, and __common, which are dumped from |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
81 memory. The types of the sections __bss and __common are changed |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
82 from S_ZEROFILL to S_REGULAR. Note that the number of sections and |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
83 their relative order in the input and output files remain |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
84 unchanged. Otherwise all n_sect fields in the nlist records in the |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
85 symbol table (specified by the LC_SYMTAB load command) will have to |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
86 be changed accordingly. |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
87 */ |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
88 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
89 #include <stdio.h> |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
90 #include <stdlib.h> |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
91 #include <fcntl.h> |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
92 #include <stdarg.h> |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
93 #include <sys/types.h> |
112371
1a3d4c7ba327
* unexmacosx.c: Include config.h before unistd.h.
Jan D. <jan.h.d@swipnet.se>
parents:
112278
diff
changeset
|
94 #include <config.h> |
1a3d4c7ba327
* unexmacosx.c: Include config.h before unistd.h.
Jan D. <jan.h.d@swipnet.se>
parents:
112278
diff
changeset
|
95 #undef malloc |
1a3d4c7ba327
* unexmacosx.c: Include config.h before unistd.h.
Jan D. <jan.h.d@swipnet.se>
parents:
112278
diff
changeset
|
96 #undef realloc |
1a3d4c7ba327
* unexmacosx.c: Include config.h before unistd.h.
Jan D. <jan.h.d@swipnet.se>
parents:
112278
diff
changeset
|
97 #undef free |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
98 #include <unistd.h> |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
99 #include <mach/mach.h> |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
100 #include <mach-o/loader.h> |
52961
d9dc58d31ffb
These are Nozomu Ando's changes to build Emacs to run under X Window
Andrew Choi <akochoi@shaw.ca>
parents:
52401
diff
changeset
|
101 #include <mach-o/reloc.h> |
d9dc58d31ffb
These are Nozomu Ando's changes to build Emacs to run under X Window
Andrew Choi <akochoi@shaw.ca>
parents:
52401
diff
changeset
|
102 #if defined (__ppc__) |
d9dc58d31ffb
These are Nozomu Ando's changes to build Emacs to run under X Window
Andrew Choi <akochoi@shaw.ca>
parents:
52401
diff
changeset
|
103 #include <mach-o/ppc/reloc.h> |
d9dc58d31ffb
These are Nozomu Ando's changes to build Emacs to run under X Window
Andrew Choi <akochoi@shaw.ca>
parents:
52401
diff
changeset
|
104 #endif |
69966
de28ca2dd3c3
Include config.h before using HAVE_MALLOC_MALLOC_H.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
68651
diff
changeset
|
105 #ifdef HAVE_MALLOC_MALLOC_H |
57397
8434603cae5b
config.in (HAVE_MALLOC_MALLOC_H): Regenerate
Steven Tamm <steventamm@mac.com>
parents:
53737
diff
changeset
|
106 #include <malloc/malloc.h> |
8434603cae5b
config.in (HAVE_MALLOC_MALLOC_H): Regenerate
Steven Tamm <steventamm@mac.com>
parents:
53737
diff
changeset
|
107 #else |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
108 #include <objc/malloc.h> |
57397
8434603cae5b
config.in (HAVE_MALLOC_MALLOC_H): Regenerate
Steven Tamm <steventamm@mac.com>
parents:
53737
diff
changeset
|
109 #endif |
8434603cae5b
config.in (HAVE_MALLOC_MALLOC_H): Regenerate
Steven Tamm <steventamm@mac.com>
parents:
53737
diff
changeset
|
110 |
62280
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
111 #include <assert.h> |
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
112 |
73613
fd7f97a75198
2006-11-02 Nozomu Ando <nand@mac.com>
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
70306
diff
changeset
|
113 #ifdef _LP64 |
fd7f97a75198
2006-11-02 Nozomu Ando <nand@mac.com>
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
70306
diff
changeset
|
114 #define mach_header mach_header_64 |
fd7f97a75198
2006-11-02 Nozomu Ando <nand@mac.com>
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
70306
diff
changeset
|
115 #define segment_command segment_command_64 |
fd7f97a75198
2006-11-02 Nozomu Ando <nand@mac.com>
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
70306
diff
changeset
|
116 #undef VM_REGION_BASIC_INFO_COUNT |
fd7f97a75198
2006-11-02 Nozomu Ando <nand@mac.com>
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
70306
diff
changeset
|
117 #define VM_REGION_BASIC_INFO_COUNT VM_REGION_BASIC_INFO_COUNT_64 |
fd7f97a75198
2006-11-02 Nozomu Ando <nand@mac.com>
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
70306
diff
changeset
|
118 #undef VM_REGION_BASIC_INFO |
fd7f97a75198
2006-11-02 Nozomu Ando <nand@mac.com>
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
70306
diff
changeset
|
119 #define VM_REGION_BASIC_INFO VM_REGION_BASIC_INFO_64 |
fd7f97a75198
2006-11-02 Nozomu Ando <nand@mac.com>
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
70306
diff
changeset
|
120 #undef LC_SEGMENT |
fd7f97a75198
2006-11-02 Nozomu Ando <nand@mac.com>
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
70306
diff
changeset
|
121 #define LC_SEGMENT LC_SEGMENT_64 |
fd7f97a75198
2006-11-02 Nozomu Ando <nand@mac.com>
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
70306
diff
changeset
|
122 #define vm_region vm_region_64 |
fd7f97a75198
2006-11-02 Nozomu Ando <nand@mac.com>
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
70306
diff
changeset
|
123 #define section section_64 |
fd7f97a75198
2006-11-02 Nozomu Ando <nand@mac.com>
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
70306
diff
changeset
|
124 #undef MH_MAGIC |
fd7f97a75198
2006-11-02 Nozomu Ando <nand@mac.com>
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
70306
diff
changeset
|
125 #define MH_MAGIC MH_MAGIC_64 |
fd7f97a75198
2006-11-02 Nozomu Ando <nand@mac.com>
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
70306
diff
changeset
|
126 #endif |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
127 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
128 #define VERBOSE 1 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
129 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
130 /* Size of buffer used to copy data from the input file to the output |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
131 file in function unexec_copy. */ |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
132 #define UNEXEC_COPY_BUFSZ 1024 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
133 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
134 /* Regions with memory addresses above this value are assumed to be |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
135 mapped to dynamically loaded libraries and will not be dumped. */ |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
136 #define VM_DATA_TOP (20 * 1024 * 1024) |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
137 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
138 /* Type of an element on the list of regions to be dumped. */ |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
139 struct region_t { |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
140 vm_address_t address; |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
141 vm_size_t size; |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
142 vm_prot_t protection; |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
143 vm_prot_t max_protection; |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
144 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
145 struct region_t *next; |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
146 }; |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
147 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
148 /* Head and tail of the list of regions to be dumped. */ |
73690
04b7851d50f8
(malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
73613
diff
changeset
|
149 static struct region_t *region_list_head = 0; |
04b7851d50f8
(malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
73613
diff
changeset
|
150 static struct region_t *region_list_tail = 0; |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
151 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
152 /* Pointer to array of load commands. */ |
73690
04b7851d50f8
(malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
73613
diff
changeset
|
153 static struct load_command **lca; |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
154 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
155 /* Number of load commands. */ |
73690
04b7851d50f8
(malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
73613
diff
changeset
|
156 static int nlc; |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
157 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
158 /* The highest VM address of segments loaded by the input file. |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
159 Regions with addresses beyond this are assumed to be allocated |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
160 dynamically and thus require dumping. */ |
73690
04b7851d50f8
(malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
73613
diff
changeset
|
161 static vm_address_t infile_lc_highest_addr = 0; |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
162 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
163 /* The lowest file offset used by the all sections in the __TEXT |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
164 segments. This leaves room at the beginning of the file to store |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
165 the Mach-O header. Check this value against header size to ensure |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
166 the added load commands for the new __DATA segments did not |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
167 overwrite any of the sections in the __TEXT segment. */ |
73690
04b7851d50f8
(malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
73613
diff
changeset
|
168 static unsigned long text_seg_lowest_offset = 0x10000000; |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
169 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
170 /* Mach header. */ |
73690
04b7851d50f8
(malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
73613
diff
changeset
|
171 static struct mach_header mh; |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
172 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
173 /* Offset at which the next load command should be written. */ |
73690
04b7851d50f8
(malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
73613
diff
changeset
|
174 static unsigned long curr_header_offset = sizeof (struct mach_header); |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
175 |
73613
fd7f97a75198
2006-11-02 Nozomu Ando <nand@mac.com>
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
70306
diff
changeset
|
176 /* Offset at which the next segment should be written. */ |
fd7f97a75198
2006-11-02 Nozomu Ando <nand@mac.com>
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
70306
diff
changeset
|
177 static unsigned long curr_file_offset = 0; |
fd7f97a75198
2006-11-02 Nozomu Ando <nand@mac.com>
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
70306
diff
changeset
|
178 |
fd7f97a75198
2006-11-02 Nozomu Ando <nand@mac.com>
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
70306
diff
changeset
|
179 static unsigned long pagesize; |
fd7f97a75198
2006-11-02 Nozomu Ando <nand@mac.com>
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
70306
diff
changeset
|
180 #define ROUNDUP_TO_PAGE_BOUNDARY(x) (((x) + pagesize - 1) & ~(pagesize - 1)) |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
181 |
73690
04b7851d50f8
(malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
73613
diff
changeset
|
182 static int infd, outfd; |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
183 |
73690
04b7851d50f8
(malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
73613
diff
changeset
|
184 static int in_dumped_exec = 0; |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
185 |
73690
04b7851d50f8
(malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
73613
diff
changeset
|
186 static malloc_zone_t *emacs_zone; |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
187 |
52961
d9dc58d31ffb
These are Nozomu Ando's changes to build Emacs to run under X Window
Andrew Choi <akochoi@shaw.ca>
parents:
52401
diff
changeset
|
188 /* file offset of input file's data segment */ |
73690
04b7851d50f8
(malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
73613
diff
changeset
|
189 static off_t data_segment_old_fileoff = 0; |
52961
d9dc58d31ffb
These are Nozomu Ando's changes to build Emacs to run under X Window
Andrew Choi <akochoi@shaw.ca>
parents:
52401
diff
changeset
|
190 |
73690
04b7851d50f8
(malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
73613
diff
changeset
|
191 static struct segment_command *data_segment_scp; |
52961
d9dc58d31ffb
These are Nozomu Ando's changes to build Emacs to run under X Window
Andrew Choi <akochoi@shaw.ca>
parents:
52401
diff
changeset
|
192 |
110729
99084f50aa8e
Remove unused arguments for unexec.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109745
diff
changeset
|
193 static void unexec_error (const char *format, ...) NO_RETURN; |
99084f50aa8e
Remove unused arguments for unexec.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109745
diff
changeset
|
194 |
66764
1f4cf9d552f9
(unexec_write_zero): New function.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
64770
diff
changeset
|
195 /* Read N bytes from infd into memory starting at address DEST. |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
196 Return true if successful, false otherwise. */ |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
197 static int |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
198 unexec_read (void *dest, size_t n) |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
199 { |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
200 return n == read (infd, dest, n); |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
201 } |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
202 |
66764
1f4cf9d552f9
(unexec_write_zero): New function.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
64770
diff
changeset
|
203 /* Write COUNT bytes from memory starting at address SRC to outfd |
1f4cf9d552f9
(unexec_write_zero): New function.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
64770
diff
changeset
|
204 starting at offset DEST. Return true if successful, false |
1f4cf9d552f9
(unexec_write_zero): New function.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
64770
diff
changeset
|
205 otherwise. */ |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
206 static int |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
207 unexec_write (off_t dest, const void *src, size_t count) |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
208 { |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
209 if (lseek (outfd, dest, SEEK_SET) != dest) |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
210 return 0; |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
211 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
212 return write (outfd, src, count) == count; |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
213 } |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
214 |
66764
1f4cf9d552f9
(unexec_write_zero): New function.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
64770
diff
changeset
|
215 /* Write COUNT bytes of zeros to outfd starting at offset DEST. |
1f4cf9d552f9
(unexec_write_zero): New function.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
64770
diff
changeset
|
216 Return true if successful, false otherwise. */ |
1f4cf9d552f9
(unexec_write_zero): New function.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
64770
diff
changeset
|
217 static int |
1f4cf9d552f9
(unexec_write_zero): New function.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
64770
diff
changeset
|
218 unexec_write_zero (off_t dest, size_t count) |
1f4cf9d552f9
(unexec_write_zero): New function.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
64770
diff
changeset
|
219 { |
1f4cf9d552f9
(unexec_write_zero): New function.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
64770
diff
changeset
|
220 char buf[UNEXEC_COPY_BUFSZ]; |
1f4cf9d552f9
(unexec_write_zero): New function.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
64770
diff
changeset
|
221 ssize_t bytes; |
1f4cf9d552f9
(unexec_write_zero): New function.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
64770
diff
changeset
|
222 |
109165
750db9f3e6d8
Replace bcopy, bzero, bcmp by memcpy, memmove, memset, memcmp
Andreas Schwab <schwab@linux-m68k.org>
parents:
106815
diff
changeset
|
223 memset (buf, 0, UNEXEC_COPY_BUFSZ); |
66764
1f4cf9d552f9
(unexec_write_zero): New function.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
64770
diff
changeset
|
224 if (lseek (outfd, dest, SEEK_SET) != dest) |
1f4cf9d552f9
(unexec_write_zero): New function.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
64770
diff
changeset
|
225 return 0; |
1f4cf9d552f9
(unexec_write_zero): New function.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
64770
diff
changeset
|
226 |
1f4cf9d552f9
(unexec_write_zero): New function.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
64770
diff
changeset
|
227 while (count > 0) |
1f4cf9d552f9
(unexec_write_zero): New function.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
64770
diff
changeset
|
228 { |
1f4cf9d552f9
(unexec_write_zero): New function.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
64770
diff
changeset
|
229 bytes = count > UNEXEC_COPY_BUFSZ ? UNEXEC_COPY_BUFSZ : count; |
1f4cf9d552f9
(unexec_write_zero): New function.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
64770
diff
changeset
|
230 if (write (outfd, buf, bytes) != bytes) |
1f4cf9d552f9
(unexec_write_zero): New function.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
64770
diff
changeset
|
231 return 0; |
1f4cf9d552f9
(unexec_write_zero): New function.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
64770
diff
changeset
|
232 count -= bytes; |
1f4cf9d552f9
(unexec_write_zero): New function.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
64770
diff
changeset
|
233 } |
1f4cf9d552f9
(unexec_write_zero): New function.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
64770
diff
changeset
|
234 |
1f4cf9d552f9
(unexec_write_zero): New function.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
64770
diff
changeset
|
235 return 1; |
1f4cf9d552f9
(unexec_write_zero): New function.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
64770
diff
changeset
|
236 } |
1f4cf9d552f9
(unexec_write_zero): New function.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
64770
diff
changeset
|
237 |
1f4cf9d552f9
(unexec_write_zero): New function.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
64770
diff
changeset
|
238 /* Copy COUNT bytes from starting offset SRC in infd to starting |
1f4cf9d552f9
(unexec_write_zero): New function.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
64770
diff
changeset
|
239 offset DEST in outfd. Return true if successful, false |
1f4cf9d552f9
(unexec_write_zero): New function.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
64770
diff
changeset
|
240 otherwise. */ |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
241 static int |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
242 unexec_copy (off_t dest, off_t src, ssize_t count) |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
243 { |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
244 ssize_t bytes_read; |
53737
349eb7d143cf
unexecmacos.x (unexec_copy): Do not copy more than was requested (count)
Steven Tamm <steventamm@mac.com>
parents:
52961
diff
changeset
|
245 ssize_t bytes_to_read; |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
246 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
247 char buf[UNEXEC_COPY_BUFSZ]; |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
248 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
249 if (lseek (infd, src, SEEK_SET) != src) |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
250 return 0; |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
251 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
252 if (lseek (outfd, dest, SEEK_SET) != dest) |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
253 return 0; |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
254 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
255 while (count > 0) |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
256 { |
53737
349eb7d143cf
unexecmacos.x (unexec_copy): Do not copy more than was requested (count)
Steven Tamm <steventamm@mac.com>
parents:
52961
diff
changeset
|
257 bytes_to_read = count > UNEXEC_COPY_BUFSZ ? UNEXEC_COPY_BUFSZ : count; |
349eb7d143cf
unexecmacos.x (unexec_copy): Do not copy more than was requested (count)
Steven Tamm <steventamm@mac.com>
parents:
52961
diff
changeset
|
258 bytes_read = read (infd, buf, bytes_to_read); |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
259 if (bytes_read <= 0) |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
260 return 0; |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
261 if (write (outfd, buf, bytes_read) != bytes_read) |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
262 return 0; |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
263 count -= bytes_read; |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
264 } |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
265 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
266 return 1; |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
267 } |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
268 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
269 /* Debugging and informational messages routines. */ |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
270 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
271 static void |
109745
b9025d71747a
* unexmacosx.c (unexec_error): Use const char *.
Jan D <jan.h.d@swipnet.se>
parents:
109653
diff
changeset
|
272 unexec_error (const char *format, ...) |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
273 { |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
274 va_list ap; |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
275 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
276 va_start (ap, format); |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
277 fprintf (stderr, "unexec: "); |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
278 vfprintf (stderr, format, ap); |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
279 fprintf (stderr, "\n"); |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
280 va_end (ap); |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
281 exit (1); |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
282 } |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
283 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
284 static void |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
285 print_prot (vm_prot_t prot) |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
286 { |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
287 if (prot == VM_PROT_NONE) |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
288 printf ("none"); |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
289 else |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
290 { |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
291 putchar (prot & VM_PROT_READ ? 'r' : ' '); |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
292 putchar (prot & VM_PROT_WRITE ? 'w' : ' '); |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
293 putchar (prot & VM_PROT_EXECUTE ? 'x' : ' '); |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
294 putchar (' '); |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
295 } |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
296 } |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
297 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
298 static void |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
299 print_region (vm_address_t address, vm_size_t size, vm_prot_t prot, |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
300 vm_prot_t max_prot) |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
301 { |
73613
fd7f97a75198
2006-11-02 Nozomu Ando <nand@mac.com>
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
70306
diff
changeset
|
302 printf ("%#10lx %#8lx ", (long) address, (long) size); |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
303 print_prot (prot); |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
304 putchar (' '); |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
305 print_prot (max_prot); |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
306 putchar ('\n'); |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
307 } |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
308 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
309 static void |
109653
9cfca8c9fb07
Fix missing prototypes for HAVE_NS (caused crash) and vrious warnings.
Jan D <jan.h.d@swipnet.se>
parents:
109165
diff
changeset
|
310 print_region_list (void) |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
311 { |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
312 struct region_t *r; |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
313 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
314 printf (" address size prot maxp\n"); |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
315 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
316 for (r = region_list_head; r; r = r->next) |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
317 print_region (r->address, r->size, r->protection, r->max_protection); |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
318 } |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
319 |
73690
04b7851d50f8
(malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
73613
diff
changeset
|
320 static void |
109653
9cfca8c9fb07
Fix missing prototypes for HAVE_NS (caused crash) and vrious warnings.
Jan D <jan.h.d@swipnet.se>
parents:
109165
diff
changeset
|
321 print_regions (void) |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
322 { |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
323 task_t target_task = mach_task_self (); |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
324 vm_address_t address = (vm_address_t) 0; |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
325 vm_size_t size; |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
326 struct vm_region_basic_info info; |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
327 mach_msg_type_number_t info_count = VM_REGION_BASIC_INFO_COUNT; |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
328 mach_port_t object_name; |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
329 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
330 printf (" address size prot maxp\n"); |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
331 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
332 while (vm_region (target_task, &address, &size, VM_REGION_BASIC_INFO, |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
333 (vm_region_info_t) &info, &info_count, &object_name) |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
334 == KERN_SUCCESS && info_count == VM_REGION_BASIC_INFO_COUNT) |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
335 { |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
336 print_region (address, size, info.protection, info.max_protection); |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
337 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
338 if (object_name != MACH_PORT_NULL) |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
339 mach_port_deallocate (target_task, object_name); |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48606
diff
changeset
|
340 |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
341 address += size; |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
342 } |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
343 } |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
344 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
345 /* Build the list of regions that need to be dumped. Regions with |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
346 addresses above VM_DATA_TOP are omitted. Adjacent regions with |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
347 identical protection are merged. Note that non-writable regions |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
348 cannot be omitted because they some regions created at run time are |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
349 read-only. */ |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
350 static void |
109653
9cfca8c9fb07
Fix missing prototypes for HAVE_NS (caused crash) and vrious warnings.
Jan D <jan.h.d@swipnet.se>
parents:
109165
diff
changeset
|
351 build_region_list (void) |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
352 { |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
353 task_t target_task = mach_task_self (); |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
354 vm_address_t address = (vm_address_t) 0; |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
355 vm_size_t size; |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
356 struct vm_region_basic_info info; |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
357 mach_msg_type_number_t info_count = VM_REGION_BASIC_INFO_COUNT; |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
358 mach_port_t object_name; |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
359 struct region_t *r; |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
360 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
361 #if VERBOSE |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
362 printf ("--- List of All Regions ---\n"); |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
363 printf (" address size prot maxp\n"); |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
364 #endif |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
365 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
366 while (vm_region (target_task, &address, &size, VM_REGION_BASIC_INFO, |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
367 (vm_region_info_t) &info, &info_count, &object_name) |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
368 == KERN_SUCCESS && info_count == VM_REGION_BASIC_INFO_COUNT) |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
369 { |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
370 /* Done when we reach addresses of shared libraries, which are |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
371 loaded in high memory. */ |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
372 if (address >= VM_DATA_TOP) |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
373 break; |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
374 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
375 #if VERBOSE |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
376 print_region (address, size, info.protection, info.max_protection); |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
377 #endif |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
378 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
379 /* If a region immediately follows the previous one (the one |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
380 most recently added to the list) and has identical |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
381 protection, merge it with the latter. Otherwise create a |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
382 new list element for it. */ |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
383 if (region_list_tail |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
384 && info.protection == region_list_tail->protection |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
385 && info.max_protection == region_list_tail->max_protection |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
386 && region_list_tail->address + region_list_tail->size == address) |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
387 { |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
388 region_list_tail->size += size; |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
389 } |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
390 else |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
391 { |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
392 r = (struct region_t *) malloc (sizeof (struct region_t)); |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48606
diff
changeset
|
393 |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
394 if (!r) |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
395 unexec_error ("cannot allocate region structure"); |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48606
diff
changeset
|
396 |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
397 r->address = address; |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
398 r->size = size; |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
399 r->protection = info.protection; |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
400 r->max_protection = info.max_protection; |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48606
diff
changeset
|
401 |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
402 r->next = 0; |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
403 if (region_list_head == 0) |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
404 { |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
405 region_list_head = r; |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
406 region_list_tail = r; |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
407 } |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
408 else |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
409 { |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
410 region_list_tail->next = r; |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
411 region_list_tail = r; |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
412 } |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48606
diff
changeset
|
413 |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
414 /* Deallocate (unused) object name returned by |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
415 vm_region. */ |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
416 if (object_name != MACH_PORT_NULL) |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
417 mach_port_deallocate (target_task, object_name); |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
418 } |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48606
diff
changeset
|
419 |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
420 address += size; |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
421 } |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
422 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
423 printf ("--- List of Regions to be Dumped ---\n"); |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
424 print_region_list (); |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
425 } |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
426 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
427 |
73613
fd7f97a75198
2006-11-02 Nozomu Ando <nand@mac.com>
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
70306
diff
changeset
|
428 #define MAX_UNEXEC_REGIONS 400 |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
429 |
73690
04b7851d50f8
(malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
73613
diff
changeset
|
430 static int num_unexec_regions; |
04b7851d50f8
(malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
73613
diff
changeset
|
431 typedef struct { |
04b7851d50f8
(malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
73613
diff
changeset
|
432 vm_range_t range; |
04b7851d50f8
(malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
73613
diff
changeset
|
433 vm_size_t filesize; |
04b7851d50f8
(malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
73613
diff
changeset
|
434 } unexec_region_info; |
04b7851d50f8
(malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
73613
diff
changeset
|
435 static unexec_region_info unexec_regions[MAX_UNEXEC_REGIONS]; |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
436 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
437 static void |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
438 unexec_regions_recorder (task_t task, void *rr, unsigned type, |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
439 vm_range_t *ranges, unsigned num) |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
440 { |
73690
04b7851d50f8
(malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
73613
diff
changeset
|
441 vm_address_t p; |
04b7851d50f8
(malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
73613
diff
changeset
|
442 vm_size_t filesize; |
04b7851d50f8
(malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
73613
diff
changeset
|
443 |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
444 while (num && num_unexec_regions < MAX_UNEXEC_REGIONS) |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
445 { |
79268
09c8be76a560
(unexec_regions_recorder, unexec_regions_merge):
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
78260
diff
changeset
|
446 /* Subtract the size of trailing null bytes from filesize. It |
73690
04b7851d50f8
(malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
73613
diff
changeset
|
447 can be smaller than vmsize in segment commands. In such a |
79268
09c8be76a560
(unexec_regions_recorder, unexec_regions_merge):
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
78260
diff
changeset
|
448 case, trailing bytes are initialized with zeros. */ |
09c8be76a560
(unexec_regions_recorder, unexec_regions_merge):
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
78260
diff
changeset
|
449 for (p = ranges->address + ranges->size; p > ranges->address; p--) |
09c8be76a560
(unexec_regions_recorder, unexec_regions_merge):
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
78260
diff
changeset
|
450 if (*(((char *) p)-1)) |
09c8be76a560
(unexec_regions_recorder, unexec_regions_merge):
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
78260
diff
changeset
|
451 break; |
09c8be76a560
(unexec_regions_recorder, unexec_regions_merge):
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
78260
diff
changeset
|
452 filesize = p - ranges->address; |
73690
04b7851d50f8
(malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
73613
diff
changeset
|
453 |
04b7851d50f8
(malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
73613
diff
changeset
|
454 unexec_regions[num_unexec_regions].filesize = filesize; |
04b7851d50f8
(malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
73613
diff
changeset
|
455 unexec_regions[num_unexec_regions++].range = *ranges; |
04b7851d50f8
(malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
73613
diff
changeset
|
456 printf ("%#10lx (sz: %#8lx/%#8lx)\n", (long) (ranges->address), |
04b7851d50f8
(malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
73613
diff
changeset
|
457 (long) filesize, (long) (ranges->size)); |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
458 ranges++; num--; |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
459 } |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
460 } |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
461 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
462 static kern_return_t |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
463 unexec_reader (task_t task, vm_address_t address, vm_size_t size, void **ptr) |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
464 { |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
465 *ptr = (void *) address; |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
466 return KERN_SUCCESS; |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
467 } |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
468 |
73690
04b7851d50f8
(malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
73613
diff
changeset
|
469 static void |
109653
9cfca8c9fb07
Fix missing prototypes for HAVE_NS (caused crash) and vrious warnings.
Jan D <jan.h.d@swipnet.se>
parents:
109165
diff
changeset
|
470 find_emacs_zone_regions (void) |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
471 { |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
472 num_unexec_regions = 0; |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
473 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
474 emacs_zone->introspect->enumerator (mach_task_self(), 0, |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
475 MALLOC_PTR_REGION_RANGE_TYPE |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
476 | MALLOC_ADMIN_REGION_RANGE_TYPE, |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
477 (vm_address_t) emacs_zone, |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
478 unexec_reader, |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
479 unexec_regions_recorder); |
73613
fd7f97a75198
2006-11-02 Nozomu Ando <nand@mac.com>
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
70306
diff
changeset
|
480 |
fd7f97a75198
2006-11-02 Nozomu Ando <nand@mac.com>
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
70306
diff
changeset
|
481 if (num_unexec_regions == MAX_UNEXEC_REGIONS) |
fd7f97a75198
2006-11-02 Nozomu Ando <nand@mac.com>
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
70306
diff
changeset
|
482 unexec_error ("find_emacs_zone_regions: too many regions"); |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
483 } |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
484 |
52011
8bbd4454be32
unexmacosx.c: Sort and merge unexec regions before dumping them.
Andrew Choi <akochoi@shaw.ca>
parents:
49854
diff
changeset
|
485 static int |
8bbd4454be32
unexmacosx.c: Sort and merge unexec regions before dumping them.
Andrew Choi <akochoi@shaw.ca>
parents:
49854
diff
changeset
|
486 unexec_regions_sort_compare (const void *a, const void *b) |
8bbd4454be32
unexmacosx.c: Sort and merge unexec regions before dumping them.
Andrew Choi <akochoi@shaw.ca>
parents:
49854
diff
changeset
|
487 { |
73690
04b7851d50f8
(malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
73613
diff
changeset
|
488 vm_address_t aa = ((unexec_region_info *) a)->range.address; |
04b7851d50f8
(malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
73613
diff
changeset
|
489 vm_address_t bb = ((unexec_region_info *) b)->range.address; |
52011
8bbd4454be32
unexmacosx.c: Sort and merge unexec regions before dumping them.
Andrew Choi <akochoi@shaw.ca>
parents:
49854
diff
changeset
|
490 |
8bbd4454be32
unexmacosx.c: Sort and merge unexec regions before dumping them.
Andrew Choi <akochoi@shaw.ca>
parents:
49854
diff
changeset
|
491 if (aa < bb) |
8bbd4454be32
unexmacosx.c: Sort and merge unexec regions before dumping them.
Andrew Choi <akochoi@shaw.ca>
parents:
49854
diff
changeset
|
492 return -1; |
8bbd4454be32
unexmacosx.c: Sort and merge unexec regions before dumping them.
Andrew Choi <akochoi@shaw.ca>
parents:
49854
diff
changeset
|
493 else if (aa > bb) |
8bbd4454be32
unexmacosx.c: Sort and merge unexec regions before dumping them.
Andrew Choi <akochoi@shaw.ca>
parents:
49854
diff
changeset
|
494 return 1; |
8bbd4454be32
unexmacosx.c: Sort and merge unexec regions before dumping them.
Andrew Choi <akochoi@shaw.ca>
parents:
49854
diff
changeset
|
495 else |
8bbd4454be32
unexmacosx.c: Sort and merge unexec regions before dumping them.
Andrew Choi <akochoi@shaw.ca>
parents:
49854
diff
changeset
|
496 return 0; |
8bbd4454be32
unexmacosx.c: Sort and merge unexec regions before dumping them.
Andrew Choi <akochoi@shaw.ca>
parents:
49854
diff
changeset
|
497 } |
8bbd4454be32
unexmacosx.c: Sort and merge unexec regions before dumping them.
Andrew Choi <akochoi@shaw.ca>
parents:
49854
diff
changeset
|
498 |
8bbd4454be32
unexmacosx.c: Sort and merge unexec regions before dumping them.
Andrew Choi <akochoi@shaw.ca>
parents:
49854
diff
changeset
|
499 static void |
109653
9cfca8c9fb07
Fix missing prototypes for HAVE_NS (caused crash) and vrious warnings.
Jan D <jan.h.d@swipnet.se>
parents:
109165
diff
changeset
|
500 unexec_regions_merge (void) |
52011
8bbd4454be32
unexmacosx.c: Sort and merge unexec regions before dumping them.
Andrew Choi <akochoi@shaw.ca>
parents:
49854
diff
changeset
|
501 { |
8bbd4454be32
unexmacosx.c: Sort and merge unexec regions before dumping them.
Andrew Choi <akochoi@shaw.ca>
parents:
49854
diff
changeset
|
502 int i, n; |
73690
04b7851d50f8
(malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
73613
diff
changeset
|
503 unexec_region_info r; |
79268
09c8be76a560
(unexec_regions_recorder, unexec_regions_merge):
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
78260
diff
changeset
|
504 vm_size_t padsize; |
52011
8bbd4454be32
unexmacosx.c: Sort and merge unexec regions before dumping them.
Andrew Choi <akochoi@shaw.ca>
parents:
49854
diff
changeset
|
505 |
8bbd4454be32
unexmacosx.c: Sort and merge unexec regions before dumping them.
Andrew Choi <akochoi@shaw.ca>
parents:
49854
diff
changeset
|
506 qsort (unexec_regions, num_unexec_regions, sizeof (unexec_regions[0]), |
8bbd4454be32
unexmacosx.c: Sort and merge unexec regions before dumping them.
Andrew Choi <akochoi@shaw.ca>
parents:
49854
diff
changeset
|
507 &unexec_regions_sort_compare); |
8bbd4454be32
unexmacosx.c: Sort and merge unexec regions before dumping them.
Andrew Choi <akochoi@shaw.ca>
parents:
49854
diff
changeset
|
508 n = 0; |
8bbd4454be32
unexmacosx.c: Sort and merge unexec regions before dumping them.
Andrew Choi <akochoi@shaw.ca>
parents:
49854
diff
changeset
|
509 r = unexec_regions[0]; |
79268
09c8be76a560
(unexec_regions_recorder, unexec_regions_merge):
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
78260
diff
changeset
|
510 padsize = r.range.address & (pagesize - 1); |
09c8be76a560
(unexec_regions_recorder, unexec_regions_merge):
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
78260
diff
changeset
|
511 if (padsize) |
09c8be76a560
(unexec_regions_recorder, unexec_regions_merge):
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
78260
diff
changeset
|
512 { |
09c8be76a560
(unexec_regions_recorder, unexec_regions_merge):
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
78260
diff
changeset
|
513 r.range.address -= padsize; |
09c8be76a560
(unexec_regions_recorder, unexec_regions_merge):
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
78260
diff
changeset
|
514 r.range.size += padsize; |
09c8be76a560
(unexec_regions_recorder, unexec_regions_merge):
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
78260
diff
changeset
|
515 r.filesize += padsize; |
09c8be76a560
(unexec_regions_recorder, unexec_regions_merge):
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
78260
diff
changeset
|
516 } |
52011
8bbd4454be32
unexmacosx.c: Sort and merge unexec regions before dumping them.
Andrew Choi <akochoi@shaw.ca>
parents:
49854
diff
changeset
|
517 for (i = 1; i < num_unexec_regions; i++) |
8bbd4454be32
unexmacosx.c: Sort and merge unexec regions before dumping them.
Andrew Choi <akochoi@shaw.ca>
parents:
49854
diff
changeset
|
518 { |
73690
04b7851d50f8
(malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
73613
diff
changeset
|
519 if (r.range.address + r.range.size == unexec_regions[i].range.address |
04b7851d50f8
(malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
73613
diff
changeset
|
520 && r.range.size - r.filesize < 2 * pagesize) |
52011
8bbd4454be32
unexmacosx.c: Sort and merge unexec regions before dumping them.
Andrew Choi <akochoi@shaw.ca>
parents:
49854
diff
changeset
|
521 { |
73690
04b7851d50f8
(malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
73613
diff
changeset
|
522 r.filesize = r.range.size + unexec_regions[i].filesize; |
04b7851d50f8
(malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
73613
diff
changeset
|
523 r.range.size += unexec_regions[i].range.size; |
52011
8bbd4454be32
unexmacosx.c: Sort and merge unexec regions before dumping them.
Andrew Choi <akochoi@shaw.ca>
parents:
49854
diff
changeset
|
524 } |
8bbd4454be32
unexmacosx.c: Sort and merge unexec regions before dumping them.
Andrew Choi <akochoi@shaw.ca>
parents:
49854
diff
changeset
|
525 else |
8bbd4454be32
unexmacosx.c: Sort and merge unexec regions before dumping them.
Andrew Choi <akochoi@shaw.ca>
parents:
49854
diff
changeset
|
526 { |
8bbd4454be32
unexmacosx.c: Sort and merge unexec regions before dumping them.
Andrew Choi <akochoi@shaw.ca>
parents:
49854
diff
changeset
|
527 unexec_regions[n++] = r; |
8bbd4454be32
unexmacosx.c: Sort and merge unexec regions before dumping them.
Andrew Choi <akochoi@shaw.ca>
parents:
49854
diff
changeset
|
528 r = unexec_regions[i]; |
79268
09c8be76a560
(unexec_regions_recorder, unexec_regions_merge):
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
78260
diff
changeset
|
529 padsize = r.range.address & (pagesize - 1); |
09c8be76a560
(unexec_regions_recorder, unexec_regions_merge):
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
78260
diff
changeset
|
530 if (padsize) |
09c8be76a560
(unexec_regions_recorder, unexec_regions_merge):
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
78260
diff
changeset
|
531 { |
09c8be76a560
(unexec_regions_recorder, unexec_regions_merge):
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
78260
diff
changeset
|
532 if ((unexec_regions[n-1].range.address |
09c8be76a560
(unexec_regions_recorder, unexec_regions_merge):
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
78260
diff
changeset
|
533 + unexec_regions[n-1].range.size) == r.range.address) |
09c8be76a560
(unexec_regions_recorder, unexec_regions_merge):
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
78260
diff
changeset
|
534 unexec_regions[n-1].range.size -= padsize; |
09c8be76a560
(unexec_regions_recorder, unexec_regions_merge):
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
78260
diff
changeset
|
535 |
09c8be76a560
(unexec_regions_recorder, unexec_regions_merge):
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
78260
diff
changeset
|
536 r.range.address -= padsize; |
09c8be76a560
(unexec_regions_recorder, unexec_regions_merge):
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
78260
diff
changeset
|
537 r.range.size += padsize; |
09c8be76a560
(unexec_regions_recorder, unexec_regions_merge):
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
78260
diff
changeset
|
538 r.filesize += padsize; |
09c8be76a560
(unexec_regions_recorder, unexec_regions_merge):
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
78260
diff
changeset
|
539 } |
52011
8bbd4454be32
unexmacosx.c: Sort and merge unexec regions before dumping them.
Andrew Choi <akochoi@shaw.ca>
parents:
49854
diff
changeset
|
540 } |
8bbd4454be32
unexmacosx.c: Sort and merge unexec regions before dumping them.
Andrew Choi <akochoi@shaw.ca>
parents:
49854
diff
changeset
|
541 } |
8bbd4454be32
unexmacosx.c: Sort and merge unexec regions before dumping them.
Andrew Choi <akochoi@shaw.ca>
parents:
49854
diff
changeset
|
542 unexec_regions[n++] = r; |
8bbd4454be32
unexmacosx.c: Sort and merge unexec regions before dumping them.
Andrew Choi <akochoi@shaw.ca>
parents:
49854
diff
changeset
|
543 num_unexec_regions = n; |
8bbd4454be32
unexmacosx.c: Sort and merge unexec regions before dumping them.
Andrew Choi <akochoi@shaw.ca>
parents:
49854
diff
changeset
|
544 } |
8bbd4454be32
unexmacosx.c: Sort and merge unexec regions before dumping them.
Andrew Choi <akochoi@shaw.ca>
parents:
49854
diff
changeset
|
545 |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
546 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
547 /* More informational messages routines. */ |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
548 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
549 static void |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
550 print_load_command_name (int lc) |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
551 { |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
552 switch (lc) |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
553 { |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
554 case LC_SEGMENT: |
73613
fd7f97a75198
2006-11-02 Nozomu Ando <nand@mac.com>
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
70306
diff
changeset
|
555 #ifndef _LP64 |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
556 printf ("LC_SEGMENT "); |
73613
fd7f97a75198
2006-11-02 Nozomu Ando <nand@mac.com>
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
70306
diff
changeset
|
557 #else |
fd7f97a75198
2006-11-02 Nozomu Ando <nand@mac.com>
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
70306
diff
changeset
|
558 printf ("LC_SEGMENT_64 "); |
fd7f97a75198
2006-11-02 Nozomu Ando <nand@mac.com>
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
70306
diff
changeset
|
559 #endif |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
560 break; |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
561 case LC_LOAD_DYLINKER: |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
562 printf ("LC_LOAD_DYLINKER "); |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
563 break; |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
564 case LC_LOAD_DYLIB: |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
565 printf ("LC_LOAD_DYLIB "); |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
566 break; |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
567 case LC_SYMTAB: |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
568 printf ("LC_SYMTAB "); |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
569 break; |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
570 case LC_DYSYMTAB: |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
571 printf ("LC_DYSYMTAB "); |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
572 break; |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
573 case LC_UNIXTHREAD: |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
574 printf ("LC_UNIXTHREAD "); |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
575 break; |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
576 case LC_PREBOUND_DYLIB: |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
577 printf ("LC_PREBOUND_DYLIB"); |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
578 break; |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
579 case LC_TWOLEVEL_HINTS: |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
580 printf ("LC_TWOLEVEL_HINTS"); |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
581 break; |
79268
09c8be76a560
(unexec_regions_recorder, unexec_regions_merge):
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
78260
diff
changeset
|
582 #ifdef LC_UUID |
09c8be76a560
(unexec_regions_recorder, unexec_regions_merge):
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
78260
diff
changeset
|
583 case LC_UUID: |
09c8be76a560
(unexec_regions_recorder, unexec_regions_merge):
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
78260
diff
changeset
|
584 printf ("LC_UUID "); |
09c8be76a560
(unexec_regions_recorder, unexec_regions_merge):
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
78260
diff
changeset
|
585 break; |
09c8be76a560
(unexec_regions_recorder, unexec_regions_merge):
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
78260
diff
changeset
|
586 #endif |
104686
7ac0a5c9da70
(print_load_command_name) [LC_DYLD_INFO]: Add cases
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
100951
diff
changeset
|
587 #ifdef LC_DYLD_INFO |
7ac0a5c9da70
(print_load_command_name) [LC_DYLD_INFO]: Add cases
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
100951
diff
changeset
|
588 case LC_DYLD_INFO: |
7ac0a5c9da70
(print_load_command_name) [LC_DYLD_INFO]: Add cases
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
100951
diff
changeset
|
589 printf ("LC_DYLD_INFO "); |
7ac0a5c9da70
(print_load_command_name) [LC_DYLD_INFO]: Add cases
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
100951
diff
changeset
|
590 break; |
7ac0a5c9da70
(print_load_command_name) [LC_DYLD_INFO]: Add cases
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
100951
diff
changeset
|
591 case LC_DYLD_INFO_ONLY: |
7ac0a5c9da70
(print_load_command_name) [LC_DYLD_INFO]: Add cases
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
100951
diff
changeset
|
592 printf ("LC_DYLD_INFO_ONLY"); |
7ac0a5c9da70
(print_load_command_name) [LC_DYLD_INFO]: Add cases
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
100951
diff
changeset
|
593 break; |
7ac0a5c9da70
(print_load_command_name) [LC_DYLD_INFO]: Add cases
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
100951
diff
changeset
|
594 #endif |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
595 default: |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
596 printf ("unknown "); |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
597 } |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
598 } |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
599 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
600 static void |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
601 print_load_command (struct load_command *lc) |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
602 { |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
603 print_load_command_name (lc->cmd); |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
604 printf ("%8d", lc->cmdsize); |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
605 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
606 if (lc->cmd == LC_SEGMENT) |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
607 { |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
608 struct segment_command *scp; |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
609 struct section *sectp; |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
610 int j; |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
611 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
612 scp = (struct segment_command *) lc; |
73613
fd7f97a75198
2006-11-02 Nozomu Ando <nand@mac.com>
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
70306
diff
changeset
|
613 printf (" %-16.16s %#10lx %#8lx\n", |
fd7f97a75198
2006-11-02 Nozomu Ando <nand@mac.com>
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
70306
diff
changeset
|
614 scp->segname, (long) (scp->vmaddr), (long) (scp->vmsize)); |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
615 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
616 sectp = (struct section *) (scp + 1); |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
617 for (j = 0; j < scp->nsects; j++) |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
618 { |
73613
fd7f97a75198
2006-11-02 Nozomu Ando <nand@mac.com>
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
70306
diff
changeset
|
619 printf (" %-16.16s %#10lx %#8lx\n", |
fd7f97a75198
2006-11-02 Nozomu Ando <nand@mac.com>
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
70306
diff
changeset
|
620 sectp->sectname, (long) (sectp->addr), (long) (sectp->size)); |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
621 sectp++; |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
622 } |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
623 } |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
624 else |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
625 printf ("\n"); |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
626 } |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
627 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
628 /* Read header and load commands from input file. Store the latter in |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
629 the global array lca. Store the total number of load commands in |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
630 global variable nlc. */ |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
631 static void |
109653
9cfca8c9fb07
Fix missing prototypes for HAVE_NS (caused crash) and vrious warnings.
Jan D <jan.h.d@swipnet.se>
parents:
109165
diff
changeset
|
632 read_load_commands (void) |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
633 { |
69966
de28ca2dd3c3
Include config.h before using HAVE_MALLOC_MALLOC_H.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
68651
diff
changeset
|
634 int i; |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
635 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
636 if (!unexec_read (&mh, sizeof (struct mach_header))) |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
637 unexec_error ("cannot read mach-o header"); |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
638 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
639 if (mh.magic != MH_MAGIC) |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
640 unexec_error ("input file not in Mach-O format"); |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
641 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
642 if (mh.filetype != MH_EXECUTE) |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
643 unexec_error ("input Mach-O file is not an executable object file"); |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
644 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
645 #if VERBOSE |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
646 printf ("--- Header Information ---\n"); |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
647 printf ("Magic = 0x%08x\n", mh.magic); |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
648 printf ("CPUType = %d\n", mh.cputype); |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
649 printf ("CPUSubType = %d\n", mh.cpusubtype); |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
650 printf ("FileType = 0x%x\n", mh.filetype); |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
651 printf ("NCmds = %d\n", mh.ncmds); |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
652 printf ("SizeOfCmds = %d\n", mh.sizeofcmds); |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
653 printf ("Flags = 0x%08x\n", mh.flags); |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
654 #endif |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
655 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
656 nlc = mh.ncmds; |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
657 lca = (struct load_command **) malloc (nlc * sizeof (struct load_command *)); |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48606
diff
changeset
|
658 |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
659 for (i = 0; i < nlc; i++) |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
660 { |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
661 struct load_command lc; |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
662 /* Load commands are variable-size: so read the command type and |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
663 size first and then read the rest. */ |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
664 if (!unexec_read (&lc, sizeof (struct load_command))) |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
665 unexec_error ("cannot read load command"); |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
666 lca[i] = (struct load_command *) malloc (lc.cmdsize); |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
667 memcpy (lca[i], &lc, sizeof (struct load_command)); |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
668 if (!unexec_read (lca[i] + 1, lc.cmdsize - sizeof (struct load_command))) |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
669 unexec_error ("cannot read content of load command"); |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
670 if (lc.cmd == LC_SEGMENT) |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
671 { |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
672 struct segment_command *scp = (struct segment_command *) lca[i]; |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48606
diff
changeset
|
673 |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
674 if (scp->vmaddr + scp->vmsize > infile_lc_highest_addr) |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
675 infile_lc_highest_addr = scp->vmaddr + scp->vmsize; |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
676 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
677 if (strncmp (scp->segname, SEG_TEXT, 16) == 0) |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
678 { |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
679 struct section *sectp = (struct section *) (scp + 1); |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
680 int j; |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
681 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
682 for (j = 0; j < scp->nsects; j++) |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
683 if (sectp->offset < text_seg_lowest_offset) |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
684 text_seg_lowest_offset = sectp->offset; |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
685 } |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
686 } |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
687 } |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
688 |
109653
9cfca8c9fb07
Fix missing prototypes for HAVE_NS (caused crash) and vrious warnings.
Jan D <jan.h.d@swipnet.se>
parents:
109165
diff
changeset
|
689 printf ("Highest address of load commands in input file: %#8lx\n", |
9cfca8c9fb07
Fix missing prototypes for HAVE_NS (caused crash) and vrious warnings.
Jan D <jan.h.d@swipnet.se>
parents:
109165
diff
changeset
|
690 (unsigned long)infile_lc_highest_addr); |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
691 |
73690
04b7851d50f8
(malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
73613
diff
changeset
|
692 printf ("Lowest offset of all sections in __TEXT segment: %#8lx\n", |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
693 text_seg_lowest_offset); |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
694 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
695 printf ("--- List of Load Commands in Input File ---\n"); |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
696 printf ("# cmd cmdsize name address size\n"); |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
697 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
698 for (i = 0; i < nlc; i++) |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
699 { |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
700 printf ("%1d ", i); |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
701 print_load_command (lca[i]); |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
702 } |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
703 } |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
704 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
705 /* Copy a LC_SEGMENT load command other than the __DATA segment from |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
706 the input file to the output file, adjusting the file offset of the |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
707 segment and the file offsets of sections contained in it. */ |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
708 static void |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
709 copy_segment (struct load_command *lc) |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
710 { |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
711 struct segment_command *scp = (struct segment_command *) lc; |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
712 unsigned long old_fileoff = scp->fileoff; |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
713 struct section *sectp; |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
714 int j; |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
715 |
73613
fd7f97a75198
2006-11-02 Nozomu Ando <nand@mac.com>
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
70306
diff
changeset
|
716 scp->fileoff = curr_file_offset; |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
717 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
718 sectp = (struct section *) (scp + 1); |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
719 for (j = 0; j < scp->nsects; j++) |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
720 { |
73613
fd7f97a75198
2006-11-02 Nozomu Ando <nand@mac.com>
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
70306
diff
changeset
|
721 sectp->offset += curr_file_offset - old_fileoff; |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
722 sectp++; |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
723 } |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
724 |
73690
04b7851d50f8
(malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
73613
diff
changeset
|
725 printf ("Writing segment %-16.16s @ %#8lx (%#8lx/%#8lx @ %#10lx)\n", |
04b7851d50f8
(malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
73613
diff
changeset
|
726 scp->segname, (long) (scp->fileoff), (long) (scp->filesize), |
04b7851d50f8
(malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
73613
diff
changeset
|
727 (long) (scp->vmsize), (long) (scp->vmaddr)); |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
728 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
729 if (!unexec_copy (scp->fileoff, old_fileoff, scp->filesize)) |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
730 unexec_error ("cannot copy segment from input to output file"); |
73613
fd7f97a75198
2006-11-02 Nozomu Ando <nand@mac.com>
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
70306
diff
changeset
|
731 curr_file_offset += ROUNDUP_TO_PAGE_BOUNDARY (scp->filesize); |
fd7f97a75198
2006-11-02 Nozomu Ando <nand@mac.com>
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
70306
diff
changeset
|
732 |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
733 if (!unexec_write (curr_header_offset, lc, lc->cmdsize)) |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
734 unexec_error ("cannot write load command to header"); |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
735 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
736 curr_header_offset += lc->cmdsize; |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
737 } |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
738 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
739 /* Copy a LC_SEGMENT load command for the __DATA segment in the input |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
740 file to the output file. We assume that only one such segment load |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
741 command exists in the input file and it contains the sections |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
742 __data, __bss, __common, __la_symbol_ptr, __nl_symbol_ptr, and |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
743 __dyld. The first three of these should be dumped from memory and |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
744 the rest should be copied from the input file. Note that the |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
745 sections __bss and __common contain no data in the input file |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
746 because their flag fields have the value S_ZEROFILL. Dumping these |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
747 from memory makes it necessary to adjust file offset fields in |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
748 subsequently dumped load commands. Then, create new __DATA segment |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
749 load commands for regions on the region list other than the one |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
750 corresponding to the __DATA segment in the input file. */ |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
751 static void |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
752 copy_data_segment (struct load_command *lc) |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
753 { |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
754 struct segment_command *scp = (struct segment_command *) lc; |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
755 struct section *sectp; |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
756 int j; |
73690
04b7851d50f8
(malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
73613
diff
changeset
|
757 unsigned long header_offset, old_file_offset; |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
758 |
73690
04b7851d50f8
(malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
73613
diff
changeset
|
759 /* The new filesize of the segment is set to its vmsize because data |
04b7851d50f8
(malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
73613
diff
changeset
|
760 blocks for segments must start at region boundaries. Note that |
04b7851d50f8
(malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
73613
diff
changeset
|
761 this may leave unused locations at the end of the segment data |
04b7851d50f8
(malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
73613
diff
changeset
|
762 block because the total of the sizes of all sections in the |
04b7851d50f8
(malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
73613
diff
changeset
|
763 segment is generally smaller than vmsize. */ |
04b7851d50f8
(malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
73613
diff
changeset
|
764 scp->filesize = scp->vmsize; |
04b7851d50f8
(malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
73613
diff
changeset
|
765 |
04b7851d50f8
(malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
73613
diff
changeset
|
766 printf ("Writing segment %-16.16s @ %#8lx (%#8lx/%#8lx @ %#10lx)\n", |
04b7851d50f8
(malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
73613
diff
changeset
|
767 scp->segname, curr_file_offset, (long)(scp->filesize), |
04b7851d50f8
(malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
73613
diff
changeset
|
768 (long)(scp->vmsize), (long) (scp->vmaddr)); |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
769 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
770 /* Offsets in the output file for writing the next section structure |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
771 and segment data block, respectively. */ |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
772 header_offset = curr_header_offset + sizeof (struct segment_command); |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
773 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
774 sectp = (struct section *) (scp + 1); |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
775 for (j = 0; j < scp->nsects; j++) |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
776 { |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
777 old_file_offset = sectp->offset; |
73613
fd7f97a75198
2006-11-02 Nozomu Ando <nand@mac.com>
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
70306
diff
changeset
|
778 sectp->offset = sectp->addr - scp->vmaddr + curr_file_offset; |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
779 /* The __data section is dumped from memory. The __bss and |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
780 __common sections are also dumped from memory but their flag |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
781 fields require changing (from S_ZEROFILL to S_REGULAR). The |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
782 other three kinds of sections are just copied from the input |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
783 file. */ |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
784 if (strncmp (sectp->sectname, SECT_DATA, 16) == 0) |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
785 { |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
786 if (!unexec_write (sectp->offset, (void *) sectp->addr, sectp->size)) |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
787 unexec_error ("cannot write section %s", SECT_DATA); |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
788 if (!unexec_write (header_offset, sectp, sizeof (struct section))) |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
789 unexec_error ("cannot write section %s's header", SECT_DATA); |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
790 } |
66764
1f4cf9d552f9
(unexec_write_zero): New function.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
64770
diff
changeset
|
791 else if (strncmp (sectp->sectname, SECT_COMMON, 16) == 0) |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
792 { |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
793 sectp->flags = S_REGULAR; |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
794 if (!unexec_write (sectp->offset, (void *) sectp->addr, sectp->size)) |
66764
1f4cf9d552f9
(unexec_write_zero): New function.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
64770
diff
changeset
|
795 unexec_error ("cannot write section %s", sectp->sectname); |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
796 if (!unexec_write (header_offset, sectp, sizeof (struct section))) |
66764
1f4cf9d552f9
(unexec_write_zero): New function.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
64770
diff
changeset
|
797 unexec_error ("cannot write section %s's header", sectp->sectname); |
1f4cf9d552f9
(unexec_write_zero): New function.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
64770
diff
changeset
|
798 } |
1f4cf9d552f9
(unexec_write_zero): New function.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
64770
diff
changeset
|
799 else if (strncmp (sectp->sectname, SECT_BSS, 16) == 0) |
1f4cf9d552f9
(unexec_write_zero): New function.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
64770
diff
changeset
|
800 { |
1f4cf9d552f9
(unexec_write_zero): New function.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
64770
diff
changeset
|
801 extern char *my_endbss_static; |
1f4cf9d552f9
(unexec_write_zero): New function.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
64770
diff
changeset
|
802 unsigned long my_size; |
1f4cf9d552f9
(unexec_write_zero): New function.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
64770
diff
changeset
|
803 |
1f4cf9d552f9
(unexec_write_zero): New function.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
64770
diff
changeset
|
804 sectp->flags = S_REGULAR; |
1f4cf9d552f9
(unexec_write_zero): New function.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
64770
diff
changeset
|
805 |
1f4cf9d552f9
(unexec_write_zero): New function.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
64770
diff
changeset
|
806 /* Clear uninitialized local variables in statically linked |
1f4cf9d552f9
(unexec_write_zero): New function.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
64770
diff
changeset
|
807 libraries. In particular, function pointers stored by |
1f4cf9d552f9
(unexec_write_zero): New function.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
64770
diff
changeset
|
808 libSystemStub.a, which is introduced in Mac OS X 10.4 for |
1f4cf9d552f9
(unexec_write_zero): New function.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
64770
diff
changeset
|
809 binary compatibility with respect to long double, are |
1f4cf9d552f9
(unexec_write_zero): New function.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
64770
diff
changeset
|
810 cleared so that they will be reinitialized when the |
1f4cf9d552f9
(unexec_write_zero): New function.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
64770
diff
changeset
|
811 dumped binary is executed on other versions of OS. */ |
1f4cf9d552f9
(unexec_write_zero): New function.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
64770
diff
changeset
|
812 my_size = (unsigned long)my_endbss_static - sectp->addr; |
1f4cf9d552f9
(unexec_write_zero): New function.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
64770
diff
changeset
|
813 if (!(sectp->addr <= (unsigned long)my_endbss_static |
1f4cf9d552f9
(unexec_write_zero): New function.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
64770
diff
changeset
|
814 && my_size <= sectp->size)) |
1f4cf9d552f9
(unexec_write_zero): New function.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
64770
diff
changeset
|
815 unexec_error ("my_endbss_static is not in section %s", |
1f4cf9d552f9
(unexec_write_zero): New function.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
64770
diff
changeset
|
816 sectp->sectname); |
1f4cf9d552f9
(unexec_write_zero): New function.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
64770
diff
changeset
|
817 if (!unexec_write (sectp->offset, (void *) sectp->addr, my_size)) |
1f4cf9d552f9
(unexec_write_zero): New function.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
64770
diff
changeset
|
818 unexec_error ("cannot write section %s", sectp->sectname); |
1f4cf9d552f9
(unexec_write_zero): New function.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
64770
diff
changeset
|
819 if (!unexec_write_zero (sectp->offset + my_size, |
1f4cf9d552f9
(unexec_write_zero): New function.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
64770
diff
changeset
|
820 sectp->size - my_size)) |
1f4cf9d552f9
(unexec_write_zero): New function.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
64770
diff
changeset
|
821 unexec_error ("cannot write section %s", sectp->sectname); |
1f4cf9d552f9
(unexec_write_zero): New function.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
64770
diff
changeset
|
822 if (!unexec_write (header_offset, sectp, sizeof (struct section))) |
1f4cf9d552f9
(unexec_write_zero): New function.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
64770
diff
changeset
|
823 unexec_error ("cannot write section %s's header", sectp->sectname); |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
824 } |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
825 else if (strncmp (sectp->sectname, "__la_symbol_ptr", 16) == 0 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
826 || strncmp (sectp->sectname, "__nl_symbol_ptr", 16) == 0 |
63159
8bc48f52ea6b
unexmacosx.c (copy_data_segment): Copy __la_sym_ptr2 section
Steven Tamm <steventamm@mac.com>
parents:
62406
diff
changeset
|
827 || strncmp (sectp->sectname, "__la_sym_ptr2", 16) == 0 |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
828 || strncmp (sectp->sectname, "__dyld", 16) == 0 |
49854
10764ce8e077
unexmacosx.c (copy_data_segment): Also copy __cfstring section.
Andrew Choi <akochoi@shaw.ca>
parents:
49600
diff
changeset
|
829 || strncmp (sectp->sectname, "__const", 16) == 0 |
79481
4a1ec8345637
(copy_data_segment): Also copy __gcc_except_tab and __objc_* sections.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
79268
diff
changeset
|
830 || strncmp (sectp->sectname, "__cfstring", 16) == 0 |
4a1ec8345637
(copy_data_segment): Also copy __gcc_except_tab and __objc_* sections.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
79268
diff
changeset
|
831 || strncmp (sectp->sectname, "__gcc_except_tab", 16) == 0 |
104686
7ac0a5c9da70
(print_load_command_name) [LC_DYLD_INFO]: Add cases
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
100951
diff
changeset
|
832 || strncmp (sectp->sectname, "__program_vars", 16) == 0 |
79481
4a1ec8345637
(copy_data_segment): Also copy __gcc_except_tab and __objc_* sections.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
79268
diff
changeset
|
833 || strncmp (sectp->sectname, "__objc_", 7) == 0) |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
834 { |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
835 if (!unexec_copy (sectp->offset, old_file_offset, sectp->size)) |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
836 unexec_error ("cannot copy section %s", sectp->sectname); |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
837 if (!unexec_write (header_offset, sectp, sizeof (struct section))) |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
838 unexec_error ("cannot write section %s's header", sectp->sectname); |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
839 } |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
840 else |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
841 unexec_error ("unrecognized section name in __DATA segment"); |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48606
diff
changeset
|
842 |
73613
fd7f97a75198
2006-11-02 Nozomu Ando <nand@mac.com>
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
70306
diff
changeset
|
843 printf (" section %-16.16s at %#8lx - %#8lx (sz: %#8lx)\n", |
fd7f97a75198
2006-11-02 Nozomu Ando <nand@mac.com>
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
70306
diff
changeset
|
844 sectp->sectname, (long) (sectp->offset), |
fd7f97a75198
2006-11-02 Nozomu Ando <nand@mac.com>
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
70306
diff
changeset
|
845 (long) (sectp->offset + sectp->size), (long) (sectp->size)); |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
846 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
847 header_offset += sizeof (struct section); |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
848 sectp++; |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
849 } |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
850 |
73690
04b7851d50f8
(malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
73613
diff
changeset
|
851 curr_file_offset += ROUNDUP_TO_PAGE_BOUNDARY (scp->filesize); |
04b7851d50f8
(malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
73613
diff
changeset
|
852 |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
853 if (!unexec_write (curr_header_offset, scp, sizeof (struct segment_command))) |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
854 unexec_error ("cannot write header of __DATA segment"); |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
855 curr_header_offset += lc->cmdsize; |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
856 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
857 /* Create new __DATA segment load commands for regions on the region |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
858 list that do not corresponding to any segment load commands in |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
859 the input file. |
73613
fd7f97a75198
2006-11-02 Nozomu Ando <nand@mac.com>
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
70306
diff
changeset
|
860 */ |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
861 for (j = 0; j < num_unexec_regions; j++) |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
862 { |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
863 struct segment_command sc; |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48606
diff
changeset
|
864 |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
865 sc.cmd = LC_SEGMENT; |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
866 sc.cmdsize = sizeof (struct segment_command); |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
867 strncpy (sc.segname, SEG_DATA, 16); |
73690
04b7851d50f8
(malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
73613
diff
changeset
|
868 sc.vmaddr = unexec_regions[j].range.address; |
04b7851d50f8
(malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
73613
diff
changeset
|
869 sc.vmsize = unexec_regions[j].range.size; |
73613
fd7f97a75198
2006-11-02 Nozomu Ando <nand@mac.com>
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
70306
diff
changeset
|
870 sc.fileoff = curr_file_offset; |
73690
04b7851d50f8
(malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
73613
diff
changeset
|
871 sc.filesize = unexec_regions[j].filesize; |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
872 sc.maxprot = VM_PROT_READ | VM_PROT_WRITE; |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
873 sc.initprot = VM_PROT_READ | VM_PROT_WRITE; |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
874 sc.nsects = 0; |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
875 sc.flags = 0; |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48606
diff
changeset
|
876 |
73690
04b7851d50f8
(malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
73613
diff
changeset
|
877 printf ("Writing segment %-16.16s @ %#8lx (%#8lx/%#8lx @ %#10lx)\n", |
04b7851d50f8
(malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
73613
diff
changeset
|
878 sc.segname, (long) (sc.fileoff), (long) (sc.filesize), |
04b7851d50f8
(malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
73613
diff
changeset
|
879 (long) (sc.vmsize), (long) (sc.vmaddr)); |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
880 |
73690
04b7851d50f8
(malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
73613
diff
changeset
|
881 if (!unexec_write (sc.fileoff, (void *) sc.vmaddr, sc.filesize)) |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
882 unexec_error ("cannot write new __DATA segment"); |
73613
fd7f97a75198
2006-11-02 Nozomu Ando <nand@mac.com>
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
70306
diff
changeset
|
883 curr_file_offset += ROUNDUP_TO_PAGE_BOUNDARY (sc.filesize); |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48606
diff
changeset
|
884 |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
885 if (!unexec_write (curr_header_offset, &sc, sc.cmdsize)) |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
886 unexec_error ("cannot write new __DATA segment's header"); |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
887 curr_header_offset += sc.cmdsize; |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
888 mh.ncmds++; |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
889 } |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
890 } |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
891 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
892 /* Copy a LC_SYMTAB load command from the input file to the output |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
893 file, adjusting the file offset fields. */ |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
894 static void |
73613
fd7f97a75198
2006-11-02 Nozomu Ando <nand@mac.com>
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
70306
diff
changeset
|
895 copy_symtab (struct load_command *lc, long delta) |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
896 { |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
897 struct symtab_command *stp = (struct symtab_command *) lc; |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
898 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
899 stp->symoff += delta; |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
900 stp->stroff += delta; |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
901 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
902 printf ("Writing LC_SYMTAB command\n"); |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
903 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
904 if (!unexec_write (curr_header_offset, lc, lc->cmdsize)) |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
905 unexec_error ("cannot write symtab command to header"); |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
906 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
907 curr_header_offset += lc->cmdsize; |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
908 } |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
909 |
52961
d9dc58d31ffb
These are Nozomu Ando's changes to build Emacs to run under X Window
Andrew Choi <akochoi@shaw.ca>
parents:
52401
diff
changeset
|
910 /* Fix up relocation entries. */ |
d9dc58d31ffb
These are Nozomu Ando's changes to build Emacs to run under X Window
Andrew Choi <akochoi@shaw.ca>
parents:
52401
diff
changeset
|
911 static void |
79492
5ef8658dc79e
(unrelocate): New argument BASE. Use it instead of
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
79481
diff
changeset
|
912 unrelocate (const char *name, off_t reloff, int nrel, vm_address_t base) |
52961
d9dc58d31ffb
These are Nozomu Ando's changes to build Emacs to run under X Window
Andrew Choi <akochoi@shaw.ca>
parents:
52401
diff
changeset
|
913 { |
d9dc58d31ffb
These are Nozomu Ando's changes to build Emacs to run under X Window
Andrew Choi <akochoi@shaw.ca>
parents:
52401
diff
changeset
|
914 int i, unreloc_count; |
d9dc58d31ffb
These are Nozomu Ando's changes to build Emacs to run under X Window
Andrew Choi <akochoi@shaw.ca>
parents:
52401
diff
changeset
|
915 struct relocation_info reloc_info; |
d9dc58d31ffb
These are Nozomu Ando's changes to build Emacs to run under X Window
Andrew Choi <akochoi@shaw.ca>
parents:
52401
diff
changeset
|
916 struct scattered_relocation_info *sc_reloc_info |
d9dc58d31ffb
These are Nozomu Ando's changes to build Emacs to run under X Window
Andrew Choi <akochoi@shaw.ca>
parents:
52401
diff
changeset
|
917 = (struct scattered_relocation_info *) &reloc_info; |
79492
5ef8658dc79e
(unrelocate): New argument BASE. Use it instead of
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
79481
diff
changeset
|
918 vm_address_t location; |
52961
d9dc58d31ffb
These are Nozomu Ando's changes to build Emacs to run under X Window
Andrew Choi <akochoi@shaw.ca>
parents:
52401
diff
changeset
|
919 |
d9dc58d31ffb
These are Nozomu Ando's changes to build Emacs to run under X Window
Andrew Choi <akochoi@shaw.ca>
parents:
52401
diff
changeset
|
920 for (unreloc_count = 0, i = 0; i < nrel; i++) |
d9dc58d31ffb
These are Nozomu Ando's changes to build Emacs to run under X Window
Andrew Choi <akochoi@shaw.ca>
parents:
52401
diff
changeset
|
921 { |
d9dc58d31ffb
These are Nozomu Ando's changes to build Emacs to run under X Window
Andrew Choi <akochoi@shaw.ca>
parents:
52401
diff
changeset
|
922 if (lseek (infd, reloff, L_SET) != reloff) |
d9dc58d31ffb
These are Nozomu Ando's changes to build Emacs to run under X Window
Andrew Choi <akochoi@shaw.ca>
parents:
52401
diff
changeset
|
923 unexec_error ("unrelocate: %s:%d cannot seek to reloc_info", name, i); |
d9dc58d31ffb
These are Nozomu Ando's changes to build Emacs to run under X Window
Andrew Choi <akochoi@shaw.ca>
parents:
52401
diff
changeset
|
924 if (!unexec_read (&reloc_info, sizeof (reloc_info))) |
d9dc58d31ffb
These are Nozomu Ando's changes to build Emacs to run under X Window
Andrew Choi <akochoi@shaw.ca>
parents:
52401
diff
changeset
|
925 unexec_error ("unrelocate: %s:%d cannot read reloc_info", name, i); |
d9dc58d31ffb
These are Nozomu Ando's changes to build Emacs to run under X Window
Andrew Choi <akochoi@shaw.ca>
parents:
52401
diff
changeset
|
926 reloff += sizeof (reloc_info); |
d9dc58d31ffb
These are Nozomu Ando's changes to build Emacs to run under X Window
Andrew Choi <akochoi@shaw.ca>
parents:
52401
diff
changeset
|
927 |
d9dc58d31ffb
These are Nozomu Ando's changes to build Emacs to run under X Window
Andrew Choi <akochoi@shaw.ca>
parents:
52401
diff
changeset
|
928 if (sc_reloc_info->r_scattered == 0) |
d9dc58d31ffb
These are Nozomu Ando's changes to build Emacs to run under X Window
Andrew Choi <akochoi@shaw.ca>
parents:
52401
diff
changeset
|
929 switch (reloc_info.r_type) |
d9dc58d31ffb
These are Nozomu Ando's changes to build Emacs to run under X Window
Andrew Choi <akochoi@shaw.ca>
parents:
52401
diff
changeset
|
930 { |
d9dc58d31ffb
These are Nozomu Ando's changes to build Emacs to run under X Window
Andrew Choi <akochoi@shaw.ca>
parents:
52401
diff
changeset
|
931 case GENERIC_RELOC_VANILLA: |
79492
5ef8658dc79e
(unrelocate): New argument BASE. Use it instead of
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
79481
diff
changeset
|
932 location = base + reloc_info.r_address; |
79481
4a1ec8345637
(copy_data_segment): Also copy __gcc_except_tab and __objc_* sections.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
79268
diff
changeset
|
933 if (location >= data_segment_scp->vmaddr |
4a1ec8345637
(copy_data_segment): Also copy __gcc_except_tab and __objc_* sections.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
79268
diff
changeset
|
934 && location < (data_segment_scp->vmaddr |
4a1ec8345637
(copy_data_segment): Also copy __gcc_except_tab and __objc_* sections.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
79268
diff
changeset
|
935 + data_segment_scp->vmsize)) |
52961
d9dc58d31ffb
These are Nozomu Ando's changes to build Emacs to run under X Window
Andrew Choi <akochoi@shaw.ca>
parents:
52401
diff
changeset
|
936 { |
d9dc58d31ffb
These are Nozomu Ando's changes to build Emacs to run under X Window
Andrew Choi <akochoi@shaw.ca>
parents:
52401
diff
changeset
|
937 off_t src_off = data_segment_old_fileoff |
79481
4a1ec8345637
(copy_data_segment): Also copy __gcc_except_tab and __objc_* sections.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
79268
diff
changeset
|
938 + (location - data_segment_scp->vmaddr); |
52961
d9dc58d31ffb
These are Nozomu Ando's changes to build Emacs to run under X Window
Andrew Choi <akochoi@shaw.ca>
parents:
52401
diff
changeset
|
939 off_t dst_off = data_segment_scp->fileoff |
79481
4a1ec8345637
(copy_data_segment): Also copy __gcc_except_tab and __objc_* sections.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
79268
diff
changeset
|
940 + (location - data_segment_scp->vmaddr); |
52961
d9dc58d31ffb
These are Nozomu Ando's changes to build Emacs to run under X Window
Andrew Choi <akochoi@shaw.ca>
parents:
52401
diff
changeset
|
941 |
d9dc58d31ffb
These are Nozomu Ando's changes to build Emacs to run under X Window
Andrew Choi <akochoi@shaw.ca>
parents:
52401
diff
changeset
|
942 if (!unexec_copy (dst_off, src_off, 1 << reloc_info.r_length)) |
d9dc58d31ffb
These are Nozomu Ando's changes to build Emacs to run under X Window
Andrew Choi <akochoi@shaw.ca>
parents:
52401
diff
changeset
|
943 unexec_error ("unrelocate: %s:%d cannot copy original value", |
d9dc58d31ffb
These are Nozomu Ando's changes to build Emacs to run under X Window
Andrew Choi <akochoi@shaw.ca>
parents:
52401
diff
changeset
|
944 name, i); |
d9dc58d31ffb
These are Nozomu Ando's changes to build Emacs to run under X Window
Andrew Choi <akochoi@shaw.ca>
parents:
52401
diff
changeset
|
945 unreloc_count++; |
d9dc58d31ffb
These are Nozomu Ando's changes to build Emacs to run under X Window
Andrew Choi <akochoi@shaw.ca>
parents:
52401
diff
changeset
|
946 } |
d9dc58d31ffb
These are Nozomu Ando's changes to build Emacs to run under X Window
Andrew Choi <akochoi@shaw.ca>
parents:
52401
diff
changeset
|
947 break; |
d9dc58d31ffb
These are Nozomu Ando's changes to build Emacs to run under X Window
Andrew Choi <akochoi@shaw.ca>
parents:
52401
diff
changeset
|
948 default: |
d9dc58d31ffb
These are Nozomu Ando's changes to build Emacs to run under X Window
Andrew Choi <akochoi@shaw.ca>
parents:
52401
diff
changeset
|
949 unexec_error ("unrelocate: %s:%d cannot handle type = %d", |
d9dc58d31ffb
These are Nozomu Ando's changes to build Emacs to run under X Window
Andrew Choi <akochoi@shaw.ca>
parents:
52401
diff
changeset
|
950 name, i, reloc_info.r_type); |
d9dc58d31ffb
These are Nozomu Ando's changes to build Emacs to run under X Window
Andrew Choi <akochoi@shaw.ca>
parents:
52401
diff
changeset
|
951 } |
d9dc58d31ffb
These are Nozomu Ando's changes to build Emacs to run under X Window
Andrew Choi <akochoi@shaw.ca>
parents:
52401
diff
changeset
|
952 else |
d9dc58d31ffb
These are Nozomu Ando's changes to build Emacs to run under X Window
Andrew Choi <akochoi@shaw.ca>
parents:
52401
diff
changeset
|
953 switch (sc_reloc_info->r_type) |
d9dc58d31ffb
These are Nozomu Ando's changes to build Emacs to run under X Window
Andrew Choi <akochoi@shaw.ca>
parents:
52401
diff
changeset
|
954 { |
d9dc58d31ffb
These are Nozomu Ando's changes to build Emacs to run under X Window
Andrew Choi <akochoi@shaw.ca>
parents:
52401
diff
changeset
|
955 #if defined (__ppc__) |
d9dc58d31ffb
These are Nozomu Ando's changes to build Emacs to run under X Window
Andrew Choi <akochoi@shaw.ca>
parents:
52401
diff
changeset
|
956 case PPC_RELOC_PB_LA_PTR: |
d9dc58d31ffb
These are Nozomu Ando's changes to build Emacs to run under X Window
Andrew Choi <akochoi@shaw.ca>
parents:
52401
diff
changeset
|
957 /* nothing to do for prebound lazy pointer */ |
d9dc58d31ffb
These are Nozomu Ando's changes to build Emacs to run under X Window
Andrew Choi <akochoi@shaw.ca>
parents:
52401
diff
changeset
|
958 break; |
d9dc58d31ffb
These are Nozomu Ando's changes to build Emacs to run under X Window
Andrew Choi <akochoi@shaw.ca>
parents:
52401
diff
changeset
|
959 #endif |
d9dc58d31ffb
These are Nozomu Ando's changes to build Emacs to run under X Window
Andrew Choi <akochoi@shaw.ca>
parents:
52401
diff
changeset
|
960 default: |
d9dc58d31ffb
These are Nozomu Ando's changes to build Emacs to run under X Window
Andrew Choi <akochoi@shaw.ca>
parents:
52401
diff
changeset
|
961 unexec_error ("unrelocate: %s:%d cannot handle scattered type = %d", |
d9dc58d31ffb
These are Nozomu Ando's changes to build Emacs to run under X Window
Andrew Choi <akochoi@shaw.ca>
parents:
52401
diff
changeset
|
962 name, i, sc_reloc_info->r_type); |
d9dc58d31ffb
These are Nozomu Ando's changes to build Emacs to run under X Window
Andrew Choi <akochoi@shaw.ca>
parents:
52401
diff
changeset
|
963 } |
d9dc58d31ffb
These are Nozomu Ando's changes to build Emacs to run under X Window
Andrew Choi <akochoi@shaw.ca>
parents:
52401
diff
changeset
|
964 } |
d9dc58d31ffb
These are Nozomu Ando's changes to build Emacs to run under X Window
Andrew Choi <akochoi@shaw.ca>
parents:
52401
diff
changeset
|
965 |
d9dc58d31ffb
These are Nozomu Ando's changes to build Emacs to run under X Window
Andrew Choi <akochoi@shaw.ca>
parents:
52401
diff
changeset
|
966 if (nrel > 0) |
d9dc58d31ffb
These are Nozomu Ando's changes to build Emacs to run under X Window
Andrew Choi <akochoi@shaw.ca>
parents:
52401
diff
changeset
|
967 printf ("Fixed up %d/%d %s relocation entries in data segment.\n", |
d9dc58d31ffb
These are Nozomu Ando's changes to build Emacs to run under X Window
Andrew Choi <akochoi@shaw.ca>
parents:
52401
diff
changeset
|
968 unreloc_count, nrel, name); |
d9dc58d31ffb
These are Nozomu Ando's changes to build Emacs to run under X Window
Andrew Choi <akochoi@shaw.ca>
parents:
52401
diff
changeset
|
969 } |
d9dc58d31ffb
These are Nozomu Ando's changes to build Emacs to run under X Window
Andrew Choi <akochoi@shaw.ca>
parents:
52401
diff
changeset
|
970 |
79492
5ef8658dc79e
(unrelocate): New argument BASE. Use it instead of
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
79481
diff
changeset
|
971 #if __ppc64__ |
5ef8658dc79e
(unrelocate): New argument BASE. Use it instead of
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
79481
diff
changeset
|
972 /* Rebase r_address in the relocation table. */ |
5ef8658dc79e
(unrelocate): New argument BASE. Use it instead of
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
79481
diff
changeset
|
973 static void |
5ef8658dc79e
(unrelocate): New argument BASE. Use it instead of
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
79481
diff
changeset
|
974 rebase_reloc_address (off_t reloff, int nrel, long linkedit_delta, long diff) |
5ef8658dc79e
(unrelocate): New argument BASE. Use it instead of
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
79481
diff
changeset
|
975 { |
5ef8658dc79e
(unrelocate): New argument BASE. Use it instead of
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
79481
diff
changeset
|
976 int i; |
5ef8658dc79e
(unrelocate): New argument BASE. Use it instead of
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
79481
diff
changeset
|
977 struct relocation_info reloc_info; |
5ef8658dc79e
(unrelocate): New argument BASE. Use it instead of
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
79481
diff
changeset
|
978 struct scattered_relocation_info *sc_reloc_info |
5ef8658dc79e
(unrelocate): New argument BASE. Use it instead of
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
79481
diff
changeset
|
979 = (struct scattered_relocation_info *) &reloc_info; |
5ef8658dc79e
(unrelocate): New argument BASE. Use it instead of
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
79481
diff
changeset
|
980 |
5ef8658dc79e
(unrelocate): New argument BASE. Use it instead of
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
79481
diff
changeset
|
981 for (i = 0; i < nrel; i++, reloff += sizeof (reloc_info)) |
5ef8658dc79e
(unrelocate): New argument BASE. Use it instead of
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
79481
diff
changeset
|
982 { |
5ef8658dc79e
(unrelocate): New argument BASE. Use it instead of
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
79481
diff
changeset
|
983 if (lseek (infd, reloff - linkedit_delta, L_SET) |
5ef8658dc79e
(unrelocate): New argument BASE. Use it instead of
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
79481
diff
changeset
|
984 != reloff - linkedit_delta) |
5ef8658dc79e
(unrelocate): New argument BASE. Use it instead of
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
79481
diff
changeset
|
985 unexec_error ("rebase_reloc_table: cannot seek to reloc_info"); |
5ef8658dc79e
(unrelocate): New argument BASE. Use it instead of
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
79481
diff
changeset
|
986 if (!unexec_read (&reloc_info, sizeof (reloc_info))) |
5ef8658dc79e
(unrelocate): New argument BASE. Use it instead of
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
79481
diff
changeset
|
987 unexec_error ("rebase_reloc_table: cannot read reloc_info"); |
5ef8658dc79e
(unrelocate): New argument BASE. Use it instead of
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
79481
diff
changeset
|
988 |
5ef8658dc79e
(unrelocate): New argument BASE. Use it instead of
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
79481
diff
changeset
|
989 if (sc_reloc_info->r_scattered == 0 |
5ef8658dc79e
(unrelocate): New argument BASE. Use it instead of
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
79481
diff
changeset
|
990 && reloc_info.r_type == GENERIC_RELOC_VANILLA) |
5ef8658dc79e
(unrelocate): New argument BASE. Use it instead of
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
79481
diff
changeset
|
991 { |
5ef8658dc79e
(unrelocate): New argument BASE. Use it instead of
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
79481
diff
changeset
|
992 reloc_info.r_address -= diff; |
5ef8658dc79e
(unrelocate): New argument BASE. Use it instead of
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
79481
diff
changeset
|
993 if (!unexec_write (reloff, &reloc_info, sizeof (reloc_info))) |
5ef8658dc79e
(unrelocate): New argument BASE. Use it instead of
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
79481
diff
changeset
|
994 unexec_error ("rebase_reloc_table: cannot write reloc_info"); |
5ef8658dc79e
(unrelocate): New argument BASE. Use it instead of
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
79481
diff
changeset
|
995 } |
5ef8658dc79e
(unrelocate): New argument BASE. Use it instead of
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
79481
diff
changeset
|
996 } |
5ef8658dc79e
(unrelocate): New argument BASE. Use it instead of
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
79481
diff
changeset
|
997 } |
5ef8658dc79e
(unrelocate): New argument BASE. Use it instead of
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
79481
diff
changeset
|
998 #endif |
5ef8658dc79e
(unrelocate): New argument BASE. Use it instead of
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
79481
diff
changeset
|
999 |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1000 /* Copy a LC_DYSYMTAB load command from the input file to the output |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1001 file, adjusting the file offset fields. */ |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1002 static void |
73613
fd7f97a75198
2006-11-02 Nozomu Ando <nand@mac.com>
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
70306
diff
changeset
|
1003 copy_dysymtab (struct load_command *lc, long delta) |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1004 { |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1005 struct dysymtab_command *dstp = (struct dysymtab_command *) lc; |
79492
5ef8658dc79e
(unrelocate): New argument BASE. Use it instead of
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
79481
diff
changeset
|
1006 vm_address_t base; |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1007 |
79492
5ef8658dc79e
(unrelocate): New argument BASE. Use it instead of
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
79481
diff
changeset
|
1008 #ifdef _LP64 |
5ef8658dc79e
(unrelocate): New argument BASE. Use it instead of
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
79481
diff
changeset
|
1009 #if __ppc64__ |
5ef8658dc79e
(unrelocate): New argument BASE. Use it instead of
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
79481
diff
changeset
|
1010 { |
5ef8658dc79e
(unrelocate): New argument BASE. Use it instead of
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
79481
diff
changeset
|
1011 int i; |
5ef8658dc79e
(unrelocate): New argument BASE. Use it instead of
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
79481
diff
changeset
|
1012 |
5ef8658dc79e
(unrelocate): New argument BASE. Use it instead of
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
79481
diff
changeset
|
1013 base = 0; |
5ef8658dc79e
(unrelocate): New argument BASE. Use it instead of
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
79481
diff
changeset
|
1014 for (i = 0; i < nlc; i++) |
5ef8658dc79e
(unrelocate): New argument BASE. Use it instead of
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
79481
diff
changeset
|
1015 if (lca[i]->cmd == LC_SEGMENT) |
5ef8658dc79e
(unrelocate): New argument BASE. Use it instead of
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
79481
diff
changeset
|
1016 { |
5ef8658dc79e
(unrelocate): New argument BASE. Use it instead of
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
79481
diff
changeset
|
1017 struct segment_command *scp = (struct segment_command *) lca[i]; |
5ef8658dc79e
(unrelocate): New argument BASE. Use it instead of
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
79481
diff
changeset
|
1018 |
5ef8658dc79e
(unrelocate): New argument BASE. Use it instead of
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
79481
diff
changeset
|
1019 if (scp->vmaddr + scp->vmsize > 0x100000000 |
5ef8658dc79e
(unrelocate): New argument BASE. Use it instead of
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
79481
diff
changeset
|
1020 && (scp->initprot & VM_PROT_WRITE) != 0) |
5ef8658dc79e
(unrelocate): New argument BASE. Use it instead of
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
79481
diff
changeset
|
1021 { |
5ef8658dc79e
(unrelocate): New argument BASE. Use it instead of
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
79481
diff
changeset
|
1022 base = data_segment_scp->vmaddr; |
5ef8658dc79e
(unrelocate): New argument BASE. Use it instead of
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
79481
diff
changeset
|
1023 break; |
5ef8658dc79e
(unrelocate): New argument BASE. Use it instead of
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
79481
diff
changeset
|
1024 } |
5ef8658dc79e
(unrelocate): New argument BASE. Use it instead of
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
79481
diff
changeset
|
1025 } |
5ef8658dc79e
(unrelocate): New argument BASE. Use it instead of
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
79481
diff
changeset
|
1026 } |
5ef8658dc79e
(unrelocate): New argument BASE. Use it instead of
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
79481
diff
changeset
|
1027 #else |
5ef8658dc79e
(unrelocate): New argument BASE. Use it instead of
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
79481
diff
changeset
|
1028 /* First writable segment address. */ |
5ef8658dc79e
(unrelocate): New argument BASE. Use it instead of
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
79481
diff
changeset
|
1029 base = data_segment_scp->vmaddr; |
5ef8658dc79e
(unrelocate): New argument BASE. Use it instead of
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
79481
diff
changeset
|
1030 #endif |
5ef8658dc79e
(unrelocate): New argument BASE. Use it instead of
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
79481
diff
changeset
|
1031 #else |
5ef8658dc79e
(unrelocate): New argument BASE. Use it instead of
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
79481
diff
changeset
|
1032 /* First segment address in the file (unless MH_SPLIT_SEGS set). */ |
5ef8658dc79e
(unrelocate): New argument BASE. Use it instead of
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
79481
diff
changeset
|
1033 base = 0; |
5ef8658dc79e
(unrelocate): New argument BASE. Use it instead of
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
79481
diff
changeset
|
1034 #endif |
5ef8658dc79e
(unrelocate): New argument BASE. Use it instead of
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
79481
diff
changeset
|
1035 |
5ef8658dc79e
(unrelocate): New argument BASE. Use it instead of
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
79481
diff
changeset
|
1036 unrelocate ("local", dstp->locreloff, dstp->nlocrel, base); |
5ef8658dc79e
(unrelocate): New argument BASE. Use it instead of
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
79481
diff
changeset
|
1037 unrelocate ("external", dstp->extreloff, dstp->nextrel, base); |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1038 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1039 if (dstp->nextrel > 0) { |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1040 dstp->extreloff += delta; |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1041 } |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1042 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1043 if (dstp->nlocrel > 0) { |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1044 dstp->locreloff += delta; |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1045 } |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1046 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1047 if (dstp->nindirectsyms > 0) |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1048 dstp->indirectsymoff += delta; |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1049 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1050 printf ("Writing LC_DYSYMTAB command\n"); |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1051 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1052 if (!unexec_write (curr_header_offset, lc, lc->cmdsize)) |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1053 unexec_error ("cannot write symtab command to header"); |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1054 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1055 curr_header_offset += lc->cmdsize; |
79492
5ef8658dc79e
(unrelocate): New argument BASE. Use it instead of
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
79481
diff
changeset
|
1056 |
5ef8658dc79e
(unrelocate): New argument BASE. Use it instead of
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
79481
diff
changeset
|
1057 #if __ppc64__ |
5ef8658dc79e
(unrelocate): New argument BASE. Use it instead of
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
79481
diff
changeset
|
1058 /* Check if the relocation base needs to be changed. */ |
5ef8658dc79e
(unrelocate): New argument BASE. Use it instead of
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
79481
diff
changeset
|
1059 if (base == 0) |
5ef8658dc79e
(unrelocate): New argument BASE. Use it instead of
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
79481
diff
changeset
|
1060 { |
5ef8658dc79e
(unrelocate): New argument BASE. Use it instead of
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
79481
diff
changeset
|
1061 vm_address_t newbase = 0; |
5ef8658dc79e
(unrelocate): New argument BASE. Use it instead of
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
79481
diff
changeset
|
1062 int i; |
5ef8658dc79e
(unrelocate): New argument BASE. Use it instead of
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
79481
diff
changeset
|
1063 |
5ef8658dc79e
(unrelocate): New argument BASE. Use it instead of
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
79481
diff
changeset
|
1064 for (i = 0; i < num_unexec_regions; i++) |
5ef8658dc79e
(unrelocate): New argument BASE. Use it instead of
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
79481
diff
changeset
|
1065 if (unexec_regions[i].range.address + unexec_regions[i].range.size |
5ef8658dc79e
(unrelocate): New argument BASE. Use it instead of
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
79481
diff
changeset
|
1066 > 0x100000000) |
5ef8658dc79e
(unrelocate): New argument BASE. Use it instead of
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
79481
diff
changeset
|
1067 { |
5ef8658dc79e
(unrelocate): New argument BASE. Use it instead of
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
79481
diff
changeset
|
1068 newbase = data_segment_scp->vmaddr; |
5ef8658dc79e
(unrelocate): New argument BASE. Use it instead of
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
79481
diff
changeset
|
1069 break; |
5ef8658dc79e
(unrelocate): New argument BASE. Use it instead of
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
79481
diff
changeset
|
1070 } |
5ef8658dc79e
(unrelocate): New argument BASE. Use it instead of
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
79481
diff
changeset
|
1071 |
5ef8658dc79e
(unrelocate): New argument BASE. Use it instead of
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
79481
diff
changeset
|
1072 if (newbase) |
5ef8658dc79e
(unrelocate): New argument BASE. Use it instead of
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
79481
diff
changeset
|
1073 { |
5ef8658dc79e
(unrelocate): New argument BASE. Use it instead of
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
79481
diff
changeset
|
1074 rebase_reloc_address (dstp->locreloff, dstp->nlocrel, delta, newbase); |
5ef8658dc79e
(unrelocate): New argument BASE. Use it instead of
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
79481
diff
changeset
|
1075 rebase_reloc_address (dstp->extreloff, dstp->nextrel, delta, newbase); |
5ef8658dc79e
(unrelocate): New argument BASE. Use it instead of
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
79481
diff
changeset
|
1076 } |
5ef8658dc79e
(unrelocate): New argument BASE. Use it instead of
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
79481
diff
changeset
|
1077 } |
5ef8658dc79e
(unrelocate): New argument BASE. Use it instead of
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
79481
diff
changeset
|
1078 #endif |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1079 } |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1080 |
48606
87aa7494d1da
unexmacosx.c: Now corrects the offset in two hints table to allow prebinding
Steven Tamm <steventamm@mac.com>
parents:
48535
diff
changeset
|
1081 /* Copy a LC_TWOLEVEL_HINTS load command from the input file to the output |
87aa7494d1da
unexmacosx.c: Now corrects the offset in two hints table to allow prebinding
Steven Tamm <steventamm@mac.com>
parents:
48535
diff
changeset
|
1082 file, adjusting the file offset fields. */ |
87aa7494d1da
unexmacosx.c: Now corrects the offset in two hints table to allow prebinding
Steven Tamm <steventamm@mac.com>
parents:
48535
diff
changeset
|
1083 static void |
73613
fd7f97a75198
2006-11-02 Nozomu Ando <nand@mac.com>
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
70306
diff
changeset
|
1084 copy_twolevelhints (struct load_command *lc, long delta) |
48606
87aa7494d1da
unexmacosx.c: Now corrects the offset in two hints table to allow prebinding
Steven Tamm <steventamm@mac.com>
parents:
48535
diff
changeset
|
1085 { |
87aa7494d1da
unexmacosx.c: Now corrects the offset in two hints table to allow prebinding
Steven Tamm <steventamm@mac.com>
parents:
48535
diff
changeset
|
1086 struct twolevel_hints_command *tlhp = (struct twolevel_hints_command *) lc; |
87aa7494d1da
unexmacosx.c: Now corrects the offset in two hints table to allow prebinding
Steven Tamm <steventamm@mac.com>
parents:
48535
diff
changeset
|
1087 |
87aa7494d1da
unexmacosx.c: Now corrects the offset in two hints table to allow prebinding
Steven Tamm <steventamm@mac.com>
parents:
48535
diff
changeset
|
1088 if (tlhp->nhints > 0) { |
87aa7494d1da
unexmacosx.c: Now corrects the offset in two hints table to allow prebinding
Steven Tamm <steventamm@mac.com>
parents:
48535
diff
changeset
|
1089 tlhp->offset += delta; |
87aa7494d1da
unexmacosx.c: Now corrects the offset in two hints table to allow prebinding
Steven Tamm <steventamm@mac.com>
parents:
48535
diff
changeset
|
1090 } |
87aa7494d1da
unexmacosx.c: Now corrects the offset in two hints table to allow prebinding
Steven Tamm <steventamm@mac.com>
parents:
48535
diff
changeset
|
1091 |
87aa7494d1da
unexmacosx.c: Now corrects the offset in two hints table to allow prebinding
Steven Tamm <steventamm@mac.com>
parents:
48535
diff
changeset
|
1092 printf ("Writing LC_TWOLEVEL_HINTS command\n"); |
87aa7494d1da
unexmacosx.c: Now corrects the offset in two hints table to allow prebinding
Steven Tamm <steventamm@mac.com>
parents:
48535
diff
changeset
|
1093 |
87aa7494d1da
unexmacosx.c: Now corrects the offset in two hints table to allow prebinding
Steven Tamm <steventamm@mac.com>
parents:
48535
diff
changeset
|
1094 if (!unexec_write (curr_header_offset, lc, lc->cmdsize)) |
87aa7494d1da
unexmacosx.c: Now corrects the offset in two hints table to allow prebinding
Steven Tamm <steventamm@mac.com>
parents:
48535
diff
changeset
|
1095 unexec_error ("cannot write two level hint command to header"); |
87aa7494d1da
unexmacosx.c: Now corrects the offset in two hints table to allow prebinding
Steven Tamm <steventamm@mac.com>
parents:
48535
diff
changeset
|
1096 |
87aa7494d1da
unexmacosx.c: Now corrects the offset in two hints table to allow prebinding
Steven Tamm <steventamm@mac.com>
parents:
48535
diff
changeset
|
1097 curr_header_offset += lc->cmdsize; |
87aa7494d1da
unexmacosx.c: Now corrects the offset in two hints table to allow prebinding
Steven Tamm <steventamm@mac.com>
parents:
48535
diff
changeset
|
1098 } |
87aa7494d1da
unexmacosx.c: Now corrects the offset in two hints table to allow prebinding
Steven Tamm <steventamm@mac.com>
parents:
48535
diff
changeset
|
1099 |
104686
7ac0a5c9da70
(print_load_command_name) [LC_DYLD_INFO]: Add cases
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
100951
diff
changeset
|
1100 #ifdef LC_DYLD_INFO |
7ac0a5c9da70
(print_load_command_name) [LC_DYLD_INFO]: Add cases
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
100951
diff
changeset
|
1101 /* Copy a LC_DYLD_INFO(_ONLY) load command from the input file to the output |
7ac0a5c9da70
(print_load_command_name) [LC_DYLD_INFO]: Add cases
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
100951
diff
changeset
|
1102 file, adjusting the file offset fields. */ |
7ac0a5c9da70
(print_load_command_name) [LC_DYLD_INFO]: Add cases
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
100951
diff
changeset
|
1103 static void |
7ac0a5c9da70
(print_load_command_name) [LC_DYLD_INFO]: Add cases
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
100951
diff
changeset
|
1104 copy_dyld_info (struct load_command *lc, long delta) |
7ac0a5c9da70
(print_load_command_name) [LC_DYLD_INFO]: Add cases
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
100951
diff
changeset
|
1105 { |
7ac0a5c9da70
(print_load_command_name) [LC_DYLD_INFO]: Add cases
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
100951
diff
changeset
|
1106 struct dyld_info_command *dip = (struct dyld_info_command *) lc; |
7ac0a5c9da70
(print_load_command_name) [LC_DYLD_INFO]: Add cases
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
100951
diff
changeset
|
1107 |
7ac0a5c9da70
(print_load_command_name) [LC_DYLD_INFO]: Add cases
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
100951
diff
changeset
|
1108 if (dip->rebase_off > 0) |
7ac0a5c9da70
(print_load_command_name) [LC_DYLD_INFO]: Add cases
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
100951
diff
changeset
|
1109 dip->rebase_off += delta; |
7ac0a5c9da70
(print_load_command_name) [LC_DYLD_INFO]: Add cases
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
100951
diff
changeset
|
1110 if (dip->bind_off > 0) |
7ac0a5c9da70
(print_load_command_name) [LC_DYLD_INFO]: Add cases
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
100951
diff
changeset
|
1111 dip->bind_off += delta; |
7ac0a5c9da70
(print_load_command_name) [LC_DYLD_INFO]: Add cases
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
100951
diff
changeset
|
1112 if (dip->weak_bind_off > 0) |
7ac0a5c9da70
(print_load_command_name) [LC_DYLD_INFO]: Add cases
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
100951
diff
changeset
|
1113 dip->weak_bind_off += delta; |
7ac0a5c9da70
(print_load_command_name) [LC_DYLD_INFO]: Add cases
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
100951
diff
changeset
|
1114 if (dip->lazy_bind_off > 0) |
7ac0a5c9da70
(print_load_command_name) [LC_DYLD_INFO]: Add cases
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
100951
diff
changeset
|
1115 dip->lazy_bind_off += delta; |
7ac0a5c9da70
(print_load_command_name) [LC_DYLD_INFO]: Add cases
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
100951
diff
changeset
|
1116 if (dip->export_off > 0) |
7ac0a5c9da70
(print_load_command_name) [LC_DYLD_INFO]: Add cases
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
100951
diff
changeset
|
1117 dip->export_off += delta; |
7ac0a5c9da70
(print_load_command_name) [LC_DYLD_INFO]: Add cases
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
100951
diff
changeset
|
1118 |
7ac0a5c9da70
(print_load_command_name) [LC_DYLD_INFO]: Add cases
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
100951
diff
changeset
|
1119 printf ("Writing "); |
7ac0a5c9da70
(print_load_command_name) [LC_DYLD_INFO]: Add cases
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
100951
diff
changeset
|
1120 print_load_command_name (lc->cmd); |
7ac0a5c9da70
(print_load_command_name) [LC_DYLD_INFO]: Add cases
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
100951
diff
changeset
|
1121 printf (" command\n"); |
7ac0a5c9da70
(print_load_command_name) [LC_DYLD_INFO]: Add cases
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
100951
diff
changeset
|
1122 |
7ac0a5c9da70
(print_load_command_name) [LC_DYLD_INFO]: Add cases
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
100951
diff
changeset
|
1123 if (!unexec_write (curr_header_offset, lc, lc->cmdsize)) |
7ac0a5c9da70
(print_load_command_name) [LC_DYLD_INFO]: Add cases
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
100951
diff
changeset
|
1124 unexec_error ("cannot write dyld info command to header"); |
7ac0a5c9da70
(print_load_command_name) [LC_DYLD_INFO]: Add cases
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
100951
diff
changeset
|
1125 |
7ac0a5c9da70
(print_load_command_name) [LC_DYLD_INFO]: Add cases
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
100951
diff
changeset
|
1126 curr_header_offset += lc->cmdsize; |
7ac0a5c9da70
(print_load_command_name) [LC_DYLD_INFO]: Add cases
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
100951
diff
changeset
|
1127 } |
7ac0a5c9da70
(print_load_command_name) [LC_DYLD_INFO]: Add cases
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
100951
diff
changeset
|
1128 #endif |
7ac0a5c9da70
(print_load_command_name) [LC_DYLD_INFO]: Add cases
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
100951
diff
changeset
|
1129 |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1130 /* Copy other kinds of load commands from the input file to the output |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1131 file, ones that do not require adjustments of file offsets. */ |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1132 static void |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1133 copy_other (struct load_command *lc) |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1134 { |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1135 printf ("Writing "); |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1136 print_load_command_name (lc->cmd); |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1137 printf (" command\n"); |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1138 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1139 if (!unexec_write (curr_header_offset, lc, lc->cmdsize)) |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1140 unexec_error ("cannot write symtab command to header"); |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1141 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1142 curr_header_offset += lc->cmdsize; |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1143 } |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1144 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1145 /* Loop through all load commands and dump them. Then write the Mach |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1146 header. */ |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1147 static void |
109653
9cfca8c9fb07
Fix missing prototypes for HAVE_NS (caused crash) and vrious warnings.
Jan D <jan.h.d@swipnet.se>
parents:
109165
diff
changeset
|
1148 dump_it (void) |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1149 { |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1150 int i; |
73613
fd7f97a75198
2006-11-02 Nozomu Ando <nand@mac.com>
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
70306
diff
changeset
|
1151 long linkedit_delta = 0; |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1152 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1153 printf ("--- Load Commands written to Output File ---\n"); |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1154 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1155 for (i = 0; i < nlc; i++) |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1156 switch (lca[i]->cmd) |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1157 { |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1158 case LC_SEGMENT: |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1159 { |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1160 struct segment_command *scp = (struct segment_command *) lca[i]; |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1161 if (strncmp (scp->segname, SEG_DATA, 16) == 0) |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1162 { |
52961
d9dc58d31ffb
These are Nozomu Ando's changes to build Emacs to run under X Window
Andrew Choi <akochoi@shaw.ca>
parents:
52401
diff
changeset
|
1163 /* save data segment file offset and segment_command for |
d9dc58d31ffb
These are Nozomu Ando's changes to build Emacs to run under X Window
Andrew Choi <akochoi@shaw.ca>
parents:
52401
diff
changeset
|
1164 unrelocate */ |
73613
fd7f97a75198
2006-11-02 Nozomu Ando <nand@mac.com>
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
70306
diff
changeset
|
1165 if (data_segment_old_fileoff) |
fd7f97a75198
2006-11-02 Nozomu Ando <nand@mac.com>
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
70306
diff
changeset
|
1166 unexec_error ("cannot handle multiple DATA segments" |
fd7f97a75198
2006-11-02 Nozomu Ando <nand@mac.com>
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
70306
diff
changeset
|
1167 " in input file"); |
52961
d9dc58d31ffb
These are Nozomu Ando's changes to build Emacs to run under X Window
Andrew Choi <akochoi@shaw.ca>
parents:
52401
diff
changeset
|
1168 data_segment_old_fileoff = scp->fileoff; |
d9dc58d31ffb
These are Nozomu Ando's changes to build Emacs to run under X Window
Andrew Choi <akochoi@shaw.ca>
parents:
52401
diff
changeset
|
1169 data_segment_scp = scp; |
d9dc58d31ffb
These are Nozomu Ando's changes to build Emacs to run under X Window
Andrew Choi <akochoi@shaw.ca>
parents:
52401
diff
changeset
|
1170 |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1171 copy_data_segment (lca[i]); |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1172 } |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1173 else |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1174 { |
73613
fd7f97a75198
2006-11-02 Nozomu Ando <nand@mac.com>
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
70306
diff
changeset
|
1175 if (strncmp (scp->segname, SEG_LINKEDIT, 16) == 0) |
fd7f97a75198
2006-11-02 Nozomu Ando <nand@mac.com>
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
70306
diff
changeset
|
1176 { |
fd7f97a75198
2006-11-02 Nozomu Ando <nand@mac.com>
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
70306
diff
changeset
|
1177 if (linkedit_delta) |
fd7f97a75198
2006-11-02 Nozomu Ando <nand@mac.com>
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
70306
diff
changeset
|
1178 unexec_error ("cannot handle multiple LINKEDIT segments" |
fd7f97a75198
2006-11-02 Nozomu Ando <nand@mac.com>
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
70306
diff
changeset
|
1179 " in input file"); |
fd7f97a75198
2006-11-02 Nozomu Ando <nand@mac.com>
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
70306
diff
changeset
|
1180 linkedit_delta = curr_file_offset - scp->fileoff; |
fd7f97a75198
2006-11-02 Nozomu Ando <nand@mac.com>
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
70306
diff
changeset
|
1181 } |
fd7f97a75198
2006-11-02 Nozomu Ando <nand@mac.com>
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
70306
diff
changeset
|
1182 |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1183 copy_segment (lca[i]); |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1184 } |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1185 } |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1186 break; |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1187 case LC_SYMTAB: |
73613
fd7f97a75198
2006-11-02 Nozomu Ando <nand@mac.com>
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
70306
diff
changeset
|
1188 copy_symtab (lca[i], linkedit_delta); |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1189 break; |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1190 case LC_DYSYMTAB: |
73613
fd7f97a75198
2006-11-02 Nozomu Ando <nand@mac.com>
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
70306
diff
changeset
|
1191 copy_dysymtab (lca[i], linkedit_delta); |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1192 break; |
48606
87aa7494d1da
unexmacosx.c: Now corrects the offset in two hints table to allow prebinding
Steven Tamm <steventamm@mac.com>
parents:
48535
diff
changeset
|
1193 case LC_TWOLEVEL_HINTS: |
73613
fd7f97a75198
2006-11-02 Nozomu Ando <nand@mac.com>
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
70306
diff
changeset
|
1194 copy_twolevelhints (lca[i], linkedit_delta); |
48606
87aa7494d1da
unexmacosx.c: Now corrects the offset in two hints table to allow prebinding
Steven Tamm <steventamm@mac.com>
parents:
48535
diff
changeset
|
1195 break; |
104686
7ac0a5c9da70
(print_load_command_name) [LC_DYLD_INFO]: Add cases
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
100951
diff
changeset
|
1196 #ifdef LC_DYLD_INFO |
7ac0a5c9da70
(print_load_command_name) [LC_DYLD_INFO]: Add cases
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
100951
diff
changeset
|
1197 case LC_DYLD_INFO: |
7ac0a5c9da70
(print_load_command_name) [LC_DYLD_INFO]: Add cases
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
100951
diff
changeset
|
1198 case LC_DYLD_INFO_ONLY: |
7ac0a5c9da70
(print_load_command_name) [LC_DYLD_INFO]: Add cases
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
100951
diff
changeset
|
1199 copy_dyld_info (lca[i], linkedit_delta); |
7ac0a5c9da70
(print_load_command_name) [LC_DYLD_INFO]: Add cases
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
100951
diff
changeset
|
1200 break; |
7ac0a5c9da70
(print_load_command_name) [LC_DYLD_INFO]: Add cases
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
100951
diff
changeset
|
1201 #endif |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1202 default: |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1203 copy_other (lca[i]); |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1204 break; |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1205 } |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1206 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1207 if (curr_header_offset > text_seg_lowest_offset) |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1208 unexec_error ("not enough room for load commands for new __DATA segments"); |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1209 |
73690
04b7851d50f8
(malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
73613
diff
changeset
|
1210 printf ("%ld unused bytes follow Mach-O header\n", |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1211 text_seg_lowest_offset - curr_header_offset); |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1212 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1213 mh.sizeofcmds = curr_header_offset - sizeof (struct mach_header); |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1214 if (!unexec_write (0, &mh, sizeof (struct mach_header))) |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1215 unexec_error ("cannot write final header contents"); |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1216 } |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1217 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1218 /* Take a snapshot of Emacs and make a Mach-O format executable file |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1219 from it. The file names of the output and input files are outfile |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1220 and infile, respectively. The three other parameters are |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1221 ignored. */ |
110729
99084f50aa8e
Remove unused arguments for unexec.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109745
diff
changeset
|
1222 int |
99084f50aa8e
Remove unused arguments for unexec.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109745
diff
changeset
|
1223 unexec (const char *outfile, const char *infile) |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1224 { |
70306
470ac698d6f7
(unexec): Error if trying unexec from dumped executable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
69966
diff
changeset
|
1225 if (in_dumped_exec) |
470ac698d6f7
(unexec): Error if trying unexec from dumped executable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
69966
diff
changeset
|
1226 unexec_error ("Unexec from a dumped executable is not supported."); |
470ac698d6f7
(unexec): Error if trying unexec from dumped executable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
69966
diff
changeset
|
1227 |
73613
fd7f97a75198
2006-11-02 Nozomu Ando <nand@mac.com>
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
70306
diff
changeset
|
1228 pagesize = getpagesize (); |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1229 infd = open (infile, O_RDONLY, 0); |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1230 if (infd < 0) |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1231 { |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1232 unexec_error ("cannot open input file `%s'", infile); |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1233 } |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48606
diff
changeset
|
1234 |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1235 outfd = open (outfile, O_WRONLY | O_TRUNC | O_CREAT, 0755); |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1236 if (outfd < 0) |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1237 { |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1238 close (infd); |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1239 unexec_error ("cannot open output file `%s'", outfile); |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1240 } |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1241 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1242 build_region_list (); |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1243 read_load_commands (); |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1244 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1245 find_emacs_zone_regions (); |
52011
8bbd4454be32
unexmacosx.c: Sort and merge unexec regions before dumping them.
Andrew Choi <akochoi@shaw.ca>
parents:
49854
diff
changeset
|
1246 unexec_regions_merge (); |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1247 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1248 in_dumped_exec = 1; |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1249 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1250 dump_it (); |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1251 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1252 close (outfd); |
110729
99084f50aa8e
Remove unused arguments for unexec.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109745
diff
changeset
|
1253 return 0; |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1254 } |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1255 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1256 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1257 void |
109653
9cfca8c9fb07
Fix missing prototypes for HAVE_NS (caused crash) and vrious warnings.
Jan D <jan.h.d@swipnet.se>
parents:
109165
diff
changeset
|
1258 unexec_init_emacs_zone (void) |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1259 { |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1260 emacs_zone = malloc_create_zone (0, 0); |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1261 malloc_set_zone_name (emacs_zone, "EmacsZone"); |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1262 } |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1263 |
62280
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1264 #ifndef MACOSX_MALLOC_MULT16 |
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1265 #define MACOSX_MALLOC_MULT16 1 |
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1266 #endif |
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1267 |
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1268 typedef struct unexec_malloc_header { |
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1269 union { |
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1270 char c[8]; |
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1271 size_t size; |
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1272 } u; |
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1273 } unexec_malloc_header_t; |
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1274 |
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1275 #if MACOSX_MALLOC_MULT16 |
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1276 |
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1277 #define ptr_in_unexec_regions(p) ((((vm_address_t) (p)) & 8) != 0) |
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1278 |
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1279 #else |
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1280 |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1281 int |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1282 ptr_in_unexec_regions (void *ptr) |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1283 { |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1284 int i; |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1285 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1286 for (i = 0; i < num_unexec_regions; i++) |
73690
04b7851d50f8
(malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
73613
diff
changeset
|
1287 if ((vm_address_t) ptr - unexec_regions[i].range.address |
04b7851d50f8
(malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
73613
diff
changeset
|
1288 < unexec_regions[i].range.size) |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1289 return 1; |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1290 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1291 return 0; |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1292 } |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1293 |
62280
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1294 #endif |
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1295 |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1296 void * |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1297 unexec_malloc (size_t size) |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1298 { |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1299 if (in_dumped_exec) |
62280
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1300 { |
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1301 void *p; |
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1302 |
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1303 p = malloc (size); |
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1304 #if MACOSX_MALLOC_MULT16 |
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1305 assert (((vm_address_t) p % 16) == 0); |
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1306 #endif |
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1307 return p; |
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1308 } |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1309 else |
62280
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1310 { |
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1311 unexec_malloc_header_t *ptr; |
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1312 |
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1313 ptr = (unexec_malloc_header_t *) |
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1314 malloc_zone_malloc (emacs_zone, size + sizeof (unexec_malloc_header_t)); |
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1315 ptr->u.size = size; |
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1316 ptr++; |
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1317 #if MACOSX_MALLOC_MULT16 |
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1318 assert (((vm_address_t) ptr % 16) == 8); |
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1319 #endif |
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1320 return (void *) ptr; |
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1321 } |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1322 } |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1323 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1324 void * |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1325 unexec_realloc (void *old_ptr, size_t new_size) |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1326 { |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1327 if (in_dumped_exec) |
62280
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1328 { |
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1329 void *p; |
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1330 |
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1331 if (ptr_in_unexec_regions (old_ptr)) |
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1332 { |
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1333 size_t old_size = ((unexec_malloc_header_t *) old_ptr)[-1].u.size; |
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1334 size_t size = new_size > old_size ? old_size : new_size; |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1335 |
62406
788686743e76
(unexec_realloc): Move declarations before statements.
Andreas Schwab <schwab@suse.de>
parents:
62280
diff
changeset
|
1336 p = (size_t *) malloc (new_size); |
62280
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1337 if (size) |
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1338 memcpy (p, old_ptr, size); |
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1339 } |
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1340 else |
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1341 { |
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1342 p = realloc (old_ptr, new_size); |
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1343 } |
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1344 #if MACOSX_MALLOC_MULT16 |
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1345 assert (((vm_address_t) p % 16) == 0); |
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1346 #endif |
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1347 return p; |
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1348 } |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1349 else |
62280
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1350 { |
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1351 unexec_malloc_header_t *ptr; |
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1352 |
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1353 ptr = (unexec_malloc_header_t *) |
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1354 malloc_zone_realloc (emacs_zone, (unexec_malloc_header_t *) old_ptr - 1, |
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1355 new_size + sizeof (unexec_malloc_header_t)); |
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1356 ptr->u.size = new_size; |
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1357 ptr++; |
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1358 #if MACOSX_MALLOC_MULT16 |
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1359 assert (((vm_address_t) ptr % 16) == 8); |
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1360 #endif |
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1361 return (void *) ptr; |
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1362 } |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1363 } |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1364 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1365 void |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1366 unexec_free (void *ptr) |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1367 { |
95859
9ae1040f70e5
make unexec_free handle NULL the same way free does
Jim Meyering <jim@meyering.net>
parents:
94963
diff
changeset
|
1368 if (ptr == NULL) |
9ae1040f70e5
make unexec_free handle NULL the same way free does
Jim Meyering <jim@meyering.net>
parents:
94963
diff
changeset
|
1369 return; |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1370 if (in_dumped_exec) |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1371 { |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1372 if (!ptr_in_unexec_regions (ptr)) |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1373 free (ptr); |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1374 } |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1375 else |
62280
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1376 malloc_zone_free (emacs_zone, (unexec_malloc_header_t *) ptr - 1); |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1377 } |
52401 | 1378 |