Mercurial > emacs
annotate src/unexmacosx.c @ 99492:ee792794d888
(isearch-search-fun): Compare the length of the
current search string with the length of the string from the
previous search state to detect the situation when the user
adds or removes characters in the search string.
Use word-search-forward-lax and word-search-backward-lax in this
case, and otherwise word-search-forward and word-search-backward.
author | Juri Linkov <juri@jurta.org> |
---|---|
date | Tue, 11 Nov 2008 19:43:09 +0000 |
parents | 9ae1040f70e5 |
children | e038c1a8307c |
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, |
79759 | 3 2006, 2007, 2008 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> |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
94 #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
|
95 #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
|
96 #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
|
97 #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
|
98 #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
|
99 #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
|
100 #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
|
101 #include <config.h> |
de28ca2dd3c3
Include config.h before using HAVE_MALLOC_MALLOC_H.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
68651
diff
changeset
|
102 #undef malloc |
de28ca2dd3c3
Include config.h before using HAVE_MALLOC_MALLOC_H.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
68651
diff
changeset
|
103 #undef realloc |
de28ca2dd3c3
Include config.h before using HAVE_MALLOC_MALLOC_H.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
68651
diff
changeset
|
104 #undef free |
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 |
66764
1f4cf9d552f9
(unexec_write_zero): New function.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
64770
diff
changeset
|
193 /* 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
|
194 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
|
195 static int |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
196 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
|
197 { |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
198 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
|
199 } |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
200 |
66764
1f4cf9d552f9
(unexec_write_zero): New function.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
64770
diff
changeset
|
201 /* 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
|
202 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
|
203 otherwise. */ |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
204 static int |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
205 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
|
206 { |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
207 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
|
208 return 0; |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
209 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
210 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
|
211 } |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
212 |
66764
1f4cf9d552f9
(unexec_write_zero): New function.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
64770
diff
changeset
|
213 /* 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
|
214 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
|
215 static int |
1f4cf9d552f9
(unexec_write_zero): New function.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
64770
diff
changeset
|
216 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
|
217 { |
1f4cf9d552f9
(unexec_write_zero): New function.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
64770
diff
changeset
|
218 char buf[UNEXEC_COPY_BUFSZ]; |
1f4cf9d552f9
(unexec_write_zero): New function.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
64770
diff
changeset
|
219 ssize_t bytes; |
1f4cf9d552f9
(unexec_write_zero): New function.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
64770
diff
changeset
|
220 |
1f4cf9d552f9
(unexec_write_zero): New function.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
64770
diff
changeset
|
221 bzero (buf, UNEXEC_COPY_BUFSZ); |
1f4cf9d552f9
(unexec_write_zero): New function.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
64770
diff
changeset
|
222 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
|
223 return 0; |
1f4cf9d552f9
(unexec_write_zero): New function.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
64770
diff
changeset
|
224 |
1f4cf9d552f9
(unexec_write_zero): New function.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
64770
diff
changeset
|
225 while (count > 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 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
|
228 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
|
229 return 0; |
1f4cf9d552f9
(unexec_write_zero): New function.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
64770
diff
changeset
|
230 count -= bytes; |
1f4cf9d552f9
(unexec_write_zero): New function.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
64770
diff
changeset
|
231 } |
1f4cf9d552f9
(unexec_write_zero): New function.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
64770
diff
changeset
|
232 |
1f4cf9d552f9
(unexec_write_zero): New function.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
64770
diff
changeset
|
233 return 1; |
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 |
1f4cf9d552f9
(unexec_write_zero): New function.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
64770
diff
changeset
|
236 /* 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
|
237 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
|
238 otherwise. */ |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
239 static int |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
240 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
|
241 { |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
242 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
|
243 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
|
244 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
245 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
|
246 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
247 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
|
248 return 0; |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
249 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
250 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
|
251 return 0; |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
252 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
253 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
|
254 { |
53737
349eb7d143cf
unexecmacos.x (unexec_copy): Do not copy more than was requested (count)
Steven Tamm <steventamm@mac.com>
parents:
52961
diff
changeset
|
255 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
|
256 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
|
257 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
|
258 return 0; |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
259 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
|
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 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
|
262 } |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
263 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
264 return 1; |
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 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
267 /* 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
|
268 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
269 static void |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
270 unexec_error (char *format, ...) |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
271 { |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
272 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
|
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_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
|
275 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
|
276 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
|
277 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
|
278 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
|
279 exit (1); |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
280 } |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
281 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
282 static void |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
283 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
|
284 { |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
285 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
|
286 printf ("none"); |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
287 else |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
288 { |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
289 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
|
290 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
|
291 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
|
292 putchar (' '); |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
293 } |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
294 } |
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 static void |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
297 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
|
298 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
|
299 { |
73613
fd7f97a75198
2006-11-02 Nozomu Ando <nand@mac.com>
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
70306
diff
changeset
|
300 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
|
301 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
|
302 putchar (' '); |
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 (max_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 ('\n'); |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
305 } |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
306 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
307 static void |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
308 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
|
309 { |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
310 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
|
311 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
312 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
|
313 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
314 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
|
315 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
|
316 } |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
317 |
73690
04b7851d50f8
(malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
73613
diff
changeset
|
318 static void |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
319 print_regions () |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
320 { |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
321 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
|
322 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
|
323 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
|
324 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
|
325 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
|
326 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
|
327 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
328 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
|
329 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
330 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
|
331 (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
|
332 == 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
|
333 { |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
334 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
|
335 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
336 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
|
337 mach_port_deallocate (target_task, object_name); |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48606
diff
changeset
|
338 |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
339 address += size; |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
340 } |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
341 } |
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 /* 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
|
344 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
|
345 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
|
346 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
|
347 read-only. */ |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
348 static void |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
349 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
|
350 { |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
351 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
|
352 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
|
353 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
|
354 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
|
355 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
|
356 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
|
357 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
|
358 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
359 #if VERBOSE |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
360 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
|
361 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
|
362 #endif |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
363 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
364 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
|
365 (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
|
366 == 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
|
367 { |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
368 /* 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
|
369 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
|
370 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
|
371 break; |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
372 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
373 #if VERBOSE |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
374 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
|
375 #endif |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
376 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
377 /* 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
|
378 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
|
379 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
|
380 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
|
381 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
|
382 && 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
|
383 && 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
|
384 && 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
|
385 { |
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->size += size; |
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 else |
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 r = (struct region_t *) malloc (sizeof (struct region_t)); |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48606
diff
changeset
|
391 |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
392 if (!r) |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
393 unexec_error ("cannot allocate region structure"); |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48606
diff
changeset
|
394 |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
395 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
|
396 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
|
397 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
|
398 r->max_protection = info.max_protection; |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48606
diff
changeset
|
399 |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
400 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
|
401 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
|
402 { |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
403 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
|
404 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
|
405 } |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
406 else |
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 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
|
409 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
|
410 } |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48606
diff
changeset
|
411 |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
412 /* 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
|
413 vm_region. */ |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
414 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
|
415 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
|
416 } |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48606
diff
changeset
|
417 |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
418 address += size; |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
419 } |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
420 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
421 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
|
422 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
|
423 } |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
424 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
425 |
73613
fd7f97a75198
2006-11-02 Nozomu Ando <nand@mac.com>
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
70306
diff
changeset
|
426 #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
|
427 |
73690
04b7851d50f8
(malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
73613
diff
changeset
|
428 static int num_unexec_regions; |
04b7851d50f8
(malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
73613
diff
changeset
|
429 typedef struct { |
04b7851d50f8
(malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
73613
diff
changeset
|
430 vm_range_t range; |
04b7851d50f8
(malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
73613
diff
changeset
|
431 vm_size_t filesize; |
04b7851d50f8
(malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
73613
diff
changeset
|
432 } unexec_region_info; |
04b7851d50f8
(malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
73613
diff
changeset
|
433 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
|
434 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
435 static void |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
436 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
|
437 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
|
438 { |
73690
04b7851d50f8
(malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
73613
diff
changeset
|
439 vm_address_t p; |
04b7851d50f8
(malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
73613
diff
changeset
|
440 vm_size_t filesize; |
04b7851d50f8
(malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
73613
diff
changeset
|
441 |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
442 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
|
443 { |
79268
09c8be76a560
(unexec_regions_recorder, unexec_regions_merge):
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
78260
diff
changeset
|
444 /* 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
|
445 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
|
446 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
|
447 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
|
448 if (*(((char *) p)-1)) |
09c8be76a560
(unexec_regions_recorder, unexec_regions_merge):
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
78260
diff
changeset
|
449 break; |
09c8be76a560
(unexec_regions_recorder, unexec_regions_merge):
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
78260
diff
changeset
|
450 filesize = p - ranges->address; |
73690
04b7851d50f8
(malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
73613
diff
changeset
|
451 |
04b7851d50f8
(malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
73613
diff
changeset
|
452 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
|
453 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
|
454 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
|
455 (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
|
456 ranges++; num--; |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
457 } |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
458 } |
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 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
|
461 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
|
462 { |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
463 *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
|
464 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
|
465 } |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
466 |
73690
04b7851d50f8
(malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
73613
diff
changeset
|
467 static void |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
468 find_emacs_zone_regions () |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
469 { |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
470 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
|
471 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
472 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
|
473 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
|
474 | 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
|
475 (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
|
476 unexec_reader, |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
477 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
|
478 |
fd7f97a75198
2006-11-02 Nozomu Ando <nand@mac.com>
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
70306
diff
changeset
|
479 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
|
480 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
|
481 } |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
482 |
52011
8bbd4454be32
unexmacosx.c: Sort and merge unexec regions before dumping them.
Andrew Choi <akochoi@shaw.ca>
parents:
49854
diff
changeset
|
483 static int |
8bbd4454be32
unexmacosx.c: Sort and merge unexec regions before dumping them.
Andrew Choi <akochoi@shaw.ca>
parents:
49854
diff
changeset
|
484 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
|
485 { |
73690
04b7851d50f8
(malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
73613
diff
changeset
|
486 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
|
487 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
|
488 |
8bbd4454be32
unexmacosx.c: Sort and merge unexec regions before dumping them.
Andrew Choi <akochoi@shaw.ca>
parents:
49854
diff
changeset
|
489 if (aa < bb) |
8bbd4454be32
unexmacosx.c: Sort and merge unexec regions before dumping them.
Andrew Choi <akochoi@shaw.ca>
parents:
49854
diff
changeset
|
490 return -1; |
8bbd4454be32
unexmacosx.c: Sort and merge unexec regions before dumping them.
Andrew Choi <akochoi@shaw.ca>
parents:
49854
diff
changeset
|
491 else 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 |
8bbd4454be32
unexmacosx.c: Sort and merge unexec regions before dumping them.
Andrew Choi <akochoi@shaw.ca>
parents:
49854
diff
changeset
|
494 return 0; |
8bbd4454be32
unexmacosx.c: Sort and merge unexec regions before dumping them.
Andrew Choi <akochoi@shaw.ca>
parents:
49854
diff
changeset
|
495 } |
8bbd4454be32
unexmacosx.c: Sort and merge unexec regions before dumping them.
Andrew Choi <akochoi@shaw.ca>
parents:
49854
diff
changeset
|
496 |
8bbd4454be32
unexmacosx.c: Sort and merge unexec regions before dumping them.
Andrew Choi <akochoi@shaw.ca>
parents:
49854
diff
changeset
|
497 static void |
8bbd4454be32
unexmacosx.c: Sort and merge unexec regions before dumping them.
Andrew Choi <akochoi@shaw.ca>
parents:
49854
diff
changeset
|
498 unexec_regions_merge () |
8bbd4454be32
unexmacosx.c: Sort and merge unexec regions before dumping them.
Andrew Choi <akochoi@shaw.ca>
parents:
49854
diff
changeset
|
499 { |
8bbd4454be32
unexmacosx.c: Sort and merge unexec regions before dumping them.
Andrew Choi <akochoi@shaw.ca>
parents:
49854
diff
changeset
|
500 int i, n; |
73690
04b7851d50f8
(malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
73613
diff
changeset
|
501 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
|
502 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
|
503 |
8bbd4454be32
unexmacosx.c: Sort and merge unexec regions before dumping them.
Andrew Choi <akochoi@shaw.ca>
parents:
49854
diff
changeset
|
504 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
|
505 &unexec_regions_sort_compare); |
8bbd4454be32
unexmacosx.c: Sort and merge unexec regions before dumping them.
Andrew Choi <akochoi@shaw.ca>
parents:
49854
diff
changeset
|
506 n = 0; |
8bbd4454be32
unexmacosx.c: Sort and merge unexec regions before dumping them.
Andrew Choi <akochoi@shaw.ca>
parents:
49854
diff
changeset
|
507 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
|
508 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
|
509 if (padsize) |
09c8be76a560
(unexec_regions_recorder, unexec_regions_merge):
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
78260
diff
changeset
|
510 { |
09c8be76a560
(unexec_regions_recorder, unexec_regions_merge):
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
78260
diff
changeset
|
511 r.range.address -= padsize; |
09c8be76a560
(unexec_regions_recorder, unexec_regions_merge):
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
78260
diff
changeset
|
512 r.range.size += padsize; |
09c8be76a560
(unexec_regions_recorder, unexec_regions_merge):
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
78260
diff
changeset
|
513 r.filesize += padsize; |
09c8be76a560
(unexec_regions_recorder, unexec_regions_merge):
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
78260
diff
changeset
|
514 } |
52011
8bbd4454be32
unexmacosx.c: Sort and merge unexec regions before dumping them.
Andrew Choi <akochoi@shaw.ca>
parents:
49854
diff
changeset
|
515 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
|
516 { |
73690
04b7851d50f8
(malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
73613
diff
changeset
|
517 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
|
518 && 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
|
519 { |
73690
04b7851d50f8
(malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
73613
diff
changeset
|
520 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
|
521 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
|
522 } |
8bbd4454be32
unexmacosx.c: Sort and merge unexec regions before dumping them.
Andrew Choi <akochoi@shaw.ca>
parents:
49854
diff
changeset
|
523 else |
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 unexec_regions[n++] = r; |
8bbd4454be32
unexmacosx.c: Sort and merge unexec regions before dumping them.
Andrew Choi <akochoi@shaw.ca>
parents:
49854
diff
changeset
|
526 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
|
527 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
|
528 if (padsize) |
09c8be76a560
(unexec_regions_recorder, unexec_regions_merge):
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
78260
diff
changeset
|
529 { |
09c8be76a560
(unexec_regions_recorder, unexec_regions_merge):
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
78260
diff
changeset
|
530 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
|
531 + 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
|
532 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
|
533 |
09c8be76a560
(unexec_regions_recorder, unexec_regions_merge):
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
78260
diff
changeset
|
534 r.range.address -= padsize; |
09c8be76a560
(unexec_regions_recorder, unexec_regions_merge):
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
78260
diff
changeset
|
535 r.range.size += padsize; |
09c8be76a560
(unexec_regions_recorder, unexec_regions_merge):
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
78260
diff
changeset
|
536 r.filesize += padsize; |
09c8be76a560
(unexec_regions_recorder, unexec_regions_merge):
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
78260
diff
changeset
|
537 } |
52011
8bbd4454be32
unexmacosx.c: Sort and merge unexec regions before dumping them.
Andrew Choi <akochoi@shaw.ca>
parents:
49854
diff
changeset
|
538 } |
8bbd4454be32
unexmacosx.c: Sort and merge unexec regions before dumping them.
Andrew Choi <akochoi@shaw.ca>
parents:
49854
diff
changeset
|
539 } |
8bbd4454be32
unexmacosx.c: Sort and merge unexec regions before dumping them.
Andrew Choi <akochoi@shaw.ca>
parents:
49854
diff
changeset
|
540 unexec_regions[n++] = r; |
8bbd4454be32
unexmacosx.c: Sort and merge unexec regions before dumping them.
Andrew Choi <akochoi@shaw.ca>
parents:
49854
diff
changeset
|
541 num_unexec_regions = n; |
8bbd4454be32
unexmacosx.c: Sort and merge unexec regions before dumping them.
Andrew Choi <akochoi@shaw.ca>
parents:
49854
diff
changeset
|
542 } |
8bbd4454be32
unexmacosx.c: Sort and merge unexec regions before dumping them.
Andrew Choi <akochoi@shaw.ca>
parents:
49854
diff
changeset
|
543 |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
544 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
545 /* 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
|
546 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
547 static void |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
548 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
|
549 { |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
550 switch (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 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
|
553 #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
|
554 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
|
555 #else |
fd7f97a75198
2006-11-02 Nozomu Ando <nand@mac.com>
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
70306
diff
changeset
|
556 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
|
557 #endif |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
558 break; |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
559 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
|
560 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
|
561 break; |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
562 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
|
563 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
|
564 break; |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
565 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
|
566 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
|
567 break; |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
568 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
|
569 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
|
570 break; |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
571 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
|
572 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
|
573 break; |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
574 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
|
575 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
|
576 break; |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
577 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
|
578 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
|
579 break; |
79268
09c8be76a560
(unexec_regions_recorder, unexec_regions_merge):
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
78260
diff
changeset
|
580 #ifdef LC_UUID |
09c8be76a560
(unexec_regions_recorder, unexec_regions_merge):
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
78260
diff
changeset
|
581 case LC_UUID: |
09c8be76a560
(unexec_regions_recorder, unexec_regions_merge):
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
78260
diff
changeset
|
582 printf ("LC_UUID "); |
09c8be76a560
(unexec_regions_recorder, unexec_regions_merge):
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
78260
diff
changeset
|
583 break; |
09c8be76a560
(unexec_regions_recorder, unexec_regions_merge):
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
78260
diff
changeset
|
584 #endif |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
585 default: |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
586 printf ("unknown "); |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
587 } |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
588 } |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
589 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
590 static void |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
591 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
|
592 { |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
593 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
|
594 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
|
595 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
596 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
|
597 { |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
598 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
|
599 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
|
600 int j; |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
601 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
602 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
|
603 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
|
604 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
|
605 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
606 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
|
607 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
|
608 { |
73613
fd7f97a75198
2006-11-02 Nozomu Ando <nand@mac.com>
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
70306
diff
changeset
|
609 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
|
610 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
|
611 sectp++; |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
612 } |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
613 } |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
614 else |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
615 printf ("\n"); |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
616 } |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
617 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
618 /* 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
|
619 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
|
620 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
|
621 static void |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
622 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
|
623 { |
69966
de28ca2dd3c3
Include config.h before using HAVE_MALLOC_MALLOC_H.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
68651
diff
changeset
|
624 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
|
625 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
626 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
|
627 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
|
628 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
629 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
|
630 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
|
631 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
632 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
|
633 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
|
634 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
635 #if VERBOSE |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
636 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
|
637 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
|
638 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
|
639 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
|
640 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
|
641 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
|
642 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
|
643 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
|
644 #endif |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
645 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
646 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
|
647 lca = (struct load_command **) malloc (nlc * sizeof (struct load_command *)); |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48606
diff
changeset
|
648 |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
649 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
|
650 { |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
651 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
|
652 /* 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
|
653 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
|
654 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
|
655 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
|
656 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
|
657 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
|
658 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
|
659 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
|
660 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
|
661 { |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
662 struct segment_command *scp = (struct segment_command *) lca[i]; |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48606
diff
changeset
|
663 |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
664 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
|
665 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
|
666 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
667 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
|
668 { |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
669 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
|
670 int j; |
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 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
|
673 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
|
674 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
|
675 } |
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 } |
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 printf ("Highest address of load commands in input file: %#8x\n", |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
680 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
|
681 |
73690
04b7851d50f8
(malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
73613
diff
changeset
|
682 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
|
683 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 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
685 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
|
686 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
|
687 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
688 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
|
689 { |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
690 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
|
691 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
|
692 } |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
693 } |
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 /* 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
|
696 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
|
697 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
|
698 static void |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
699 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
|
700 { |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
701 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
|
702 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
|
703 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
|
704 int j; |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
705 |
73613
fd7f97a75198
2006-11-02 Nozomu Ando <nand@mac.com>
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
70306
diff
changeset
|
706 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
|
707 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
708 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
|
709 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
|
710 { |
73613
fd7f97a75198
2006-11-02 Nozomu Ando <nand@mac.com>
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
70306
diff
changeset
|
711 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
|
712 sectp++; |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
713 } |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
714 |
73690
04b7851d50f8
(malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
73613
diff
changeset
|
715 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
|
716 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
|
717 (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
|
718 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
719 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
|
720 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
|
721 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
|
722 |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
723 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
|
724 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
|
725 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
726 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
|
727 } |
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 /* 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
|
730 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
|
731 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
|
732 __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
|
733 __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
|
734 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
|
735 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
|
736 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
|
737 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
|
738 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
|
739 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
|
740 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
|
741 static void |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
742 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
|
743 { |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
744 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
|
745 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
|
746 int j; |
73690
04b7851d50f8
(malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
73613
diff
changeset
|
747 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
|
748 |
73690
04b7851d50f8
(malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
73613
diff
changeset
|
749 /* 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
|
750 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
|
751 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
|
752 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
|
753 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
|
754 scp->filesize = scp->vmsize; |
04b7851d50f8
(malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
73613
diff
changeset
|
755 |
04b7851d50f8
(malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
73613
diff
changeset
|
756 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
|
757 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
|
758 (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
|
759 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
760 /* 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
|
761 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
|
762 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
|
763 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
764 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
|
765 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
|
766 { |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
767 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
|
768 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
|
769 /* 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
|
770 __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
|
771 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
|
772 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
|
773 file. */ |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
774 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
|
775 { |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
776 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
|
777 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
|
778 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
|
779 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
|
780 } |
66764
1f4cf9d552f9
(unexec_write_zero): New function.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
64770
diff
changeset
|
781 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
|
782 { |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
783 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
|
784 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
|
785 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
|
786 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
|
787 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
|
788 } |
1f4cf9d552f9
(unexec_write_zero): New function.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
64770
diff
changeset
|
789 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
|
790 { |
1f4cf9d552f9
(unexec_write_zero): New function.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
64770
diff
changeset
|
791 extern char *my_endbss_static; |
1f4cf9d552f9
(unexec_write_zero): New function.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
64770
diff
changeset
|
792 unsigned long my_size; |
1f4cf9d552f9
(unexec_write_zero): New function.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
64770
diff
changeset
|
793 |
1f4cf9d552f9
(unexec_write_zero): New function.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
64770
diff
changeset
|
794 sectp->flags = S_REGULAR; |
1f4cf9d552f9
(unexec_write_zero): New function.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
64770
diff
changeset
|
795 |
1f4cf9d552f9
(unexec_write_zero): New function.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
64770
diff
changeset
|
796 /* 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
|
797 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
|
798 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
|
799 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
|
800 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
|
801 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
|
802 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
|
803 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
|
804 && my_size <= sectp->size)) |
1f4cf9d552f9
(unexec_write_zero): New function.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
64770
diff
changeset
|
805 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
|
806 sectp->sectname); |
1f4cf9d552f9
(unexec_write_zero): New function.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
64770
diff
changeset
|
807 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
|
808 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
|
809 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
|
810 sectp->size - my_size)) |
1f4cf9d552f9
(unexec_write_zero): New function.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
64770
diff
changeset
|
811 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
|
812 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
|
813 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
|
814 } |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
815 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
|
816 || 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
|
817 || 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
|
818 || 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
|
819 || 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
|
820 || 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
|
821 || strncmp (sectp->sectname, "__gcc_except_tab", 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
|
822 || 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
|
823 { |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
824 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
|
825 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
|
826 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
|
827 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
|
828 } |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
829 else |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
830 unexec_error ("unrecognized section name in __DATA segment"); |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48606
diff
changeset
|
831 |
73613
fd7f97a75198
2006-11-02 Nozomu Ando <nand@mac.com>
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
70306
diff
changeset
|
832 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
|
833 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
|
834 (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
|
835 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
836 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
|
837 sectp++; |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
838 } |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
839 |
73690
04b7851d50f8
(malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
73613
diff
changeset
|
840 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
|
841 |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
842 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
|
843 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
|
844 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
|
845 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
846 /* 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
|
847 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
|
848 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
|
849 */ |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
850 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
|
851 { |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
852 struct segment_command sc; |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48606
diff
changeset
|
853 |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
854 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
|
855 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
|
856 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
|
857 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
|
858 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
|
859 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
|
860 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
|
861 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
|
862 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
|
863 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
|
864 sc.flags = 0; |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48606
diff
changeset
|
865 |
73690
04b7851d50f8
(malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
73613
diff
changeset
|
866 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
|
867 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
|
868 (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
|
869 |
73690
04b7851d50f8
(malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
73613
diff
changeset
|
870 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
|
871 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
|
872 curr_file_offset += ROUNDUP_TO_PAGE_BOUNDARY (sc.filesize); |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48606
diff
changeset
|
873 |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
874 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
|
875 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
|
876 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
|
877 mh.ncmds++; |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
878 } |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
879 } |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
880 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
881 /* 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
|
882 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
|
883 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
|
884 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
|
885 { |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
886 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
|
887 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
888 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
|
889 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
|
890 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
891 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
|
892 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
893 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
|
894 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
|
895 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
896 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
|
897 } |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
898 |
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
|
899 /* 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
|
900 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
|
901 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
|
902 { |
d9dc58d31ffb
These are Nozomu Ando's changes to build Emacs to run under X Window
Andrew Choi <akochoi@shaw.ca>
parents:
52401
diff
changeset
|
903 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
|
904 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
|
905 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
|
906 = (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
|
907 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
|
908 |
d9dc58d31ffb
These are Nozomu Ando's changes to build Emacs to run under X Window
Andrew Choi <akochoi@shaw.ca>
parents:
52401
diff
changeset
|
909 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
|
910 { |
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 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
|
912 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
|
913 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
|
914 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
|
915 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
|
916 |
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 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
|
918 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
|
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 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
|
921 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
|
922 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
|
923 && 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
|
924 + 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
|
925 { |
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 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
|
927 + (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
|
928 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
|
929 + (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
|
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 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
|
932 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
|
933 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
|
934 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
|
935 } |
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 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
|
937 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
|
938 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
|
939 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
|
940 } |
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 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
|
942 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
|
943 { |
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 #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
|
945 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
|
946 /* 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
|
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 #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
|
949 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
|
950 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
|
951 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
|
952 } |
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 } |
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 (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
|
956 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
|
957 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
|
958 } |
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 |
79492
5ef8658dc79e
(unrelocate): New argument BASE. Use it instead of
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
79481
diff
changeset
|
960 #if __ppc64__ |
5ef8658dc79e
(unrelocate): New argument BASE. Use it instead of
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
79481
diff
changeset
|
961 /* 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
|
962 static void |
5ef8658dc79e
(unrelocate): New argument BASE. Use it instead of
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
79481
diff
changeset
|
963 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
|
964 { |
5ef8658dc79e
(unrelocate): New argument BASE. Use it instead of
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
79481
diff
changeset
|
965 int i; |
5ef8658dc79e
(unrelocate): New argument BASE. Use it instead of
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
79481
diff
changeset
|
966 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
|
967 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
|
968 = (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
|
969 |
5ef8658dc79e
(unrelocate): New argument BASE. Use it instead of
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
79481
diff
changeset
|
970 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
|
971 { |
5ef8658dc79e
(unrelocate): New argument BASE. Use it instead of
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
79481
diff
changeset
|
972 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
|
973 != 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
|
974 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
|
975 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
|
976 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
|
977 |
5ef8658dc79e
(unrelocate): New argument BASE. Use it instead of
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
79481
diff
changeset
|
978 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
|
979 && 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
|
980 { |
5ef8658dc79e
(unrelocate): New argument BASE. Use it instead of
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
79481
diff
changeset
|
981 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
|
982 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
|
983 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
|
984 } |
5ef8658dc79e
(unrelocate): New argument BASE. Use it instead of
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
79481
diff
changeset
|
985 } |
5ef8658dc79e
(unrelocate): New argument BASE. Use it instead of
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
79481
diff
changeset
|
986 } |
5ef8658dc79e
(unrelocate): New argument BASE. Use it instead of
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
79481
diff
changeset
|
987 #endif |
5ef8658dc79e
(unrelocate): New argument BASE. Use it instead of
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
79481
diff
changeset
|
988 |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
989 /* 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
|
990 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
|
991 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
|
992 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
|
993 { |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
994 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
|
995 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
|
996 |
79492
5ef8658dc79e
(unrelocate): New argument BASE. Use it instead of
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
79481
diff
changeset
|
997 #ifdef _LP64 |
5ef8658dc79e
(unrelocate): New argument BASE. Use it instead of
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
79481
diff
changeset
|
998 #if __ppc64__ |
5ef8658dc79e
(unrelocate): New argument BASE. Use it instead of
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
79481
diff
changeset
|
999 { |
5ef8658dc79e
(unrelocate): New argument BASE. Use it instead of
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
79481
diff
changeset
|
1000 int i; |
5ef8658dc79e
(unrelocate): New argument BASE. Use it instead of
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
79481
diff
changeset
|
1001 |
5ef8658dc79e
(unrelocate): New argument BASE. Use it instead of
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
79481
diff
changeset
|
1002 base = 0; |
5ef8658dc79e
(unrelocate): New argument BASE. Use it instead of
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
79481
diff
changeset
|
1003 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
|
1004 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
|
1005 { |
5ef8658dc79e
(unrelocate): New argument BASE. Use it instead of
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
79481
diff
changeset
|
1006 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
|
1007 |
5ef8658dc79e
(unrelocate): New argument BASE. Use it instead of
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
79481
diff
changeset
|
1008 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
|
1009 && (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
|
1010 { |
5ef8658dc79e
(unrelocate): New argument BASE. Use it instead of
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
79481
diff
changeset
|
1011 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
|
1012 break; |
5ef8658dc79e
(unrelocate): New argument BASE. Use it instead of
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
79481
diff
changeset
|
1013 } |
5ef8658dc79e
(unrelocate): New argument BASE. Use it instead of
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
79481
diff
changeset
|
1014 } |
5ef8658dc79e
(unrelocate): New argument BASE. Use it instead of
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
79481
diff
changeset
|
1015 } |
5ef8658dc79e
(unrelocate): New argument BASE. Use it instead of
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
79481
diff
changeset
|
1016 #else |
5ef8658dc79e
(unrelocate): New argument BASE. Use it instead of
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
79481
diff
changeset
|
1017 /* 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
|
1018 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
|
1019 #endif |
5ef8658dc79e
(unrelocate): New argument BASE. Use it instead of
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
79481
diff
changeset
|
1020 #else |
5ef8658dc79e
(unrelocate): New argument BASE. Use it instead of
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
79481
diff
changeset
|
1021 /* 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
|
1022 base = 0; |
5ef8658dc79e
(unrelocate): New argument BASE. Use it instead of
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
79481
diff
changeset
|
1023 #endif |
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 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
|
1026 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
|
1027 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1028 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
|
1029 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
|
1030 } |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1031 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1032 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
|
1033 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
|
1034 } |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1035 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1036 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
|
1037 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
|
1038 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1039 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
|
1040 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1041 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
|
1042 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
|
1043 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1044 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
|
1045 |
5ef8658dc79e
(unrelocate): New argument BASE. Use it instead of
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
79481
diff
changeset
|
1046 #if __ppc64__ |
5ef8658dc79e
(unrelocate): New argument BASE. Use it instead of
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
79481
diff
changeset
|
1047 /* 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
|
1048 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
|
1049 { |
5ef8658dc79e
(unrelocate): New argument BASE. Use it instead of
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
79481
diff
changeset
|
1050 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
|
1051 int i; |
5ef8658dc79e
(unrelocate): New argument BASE. Use it instead of
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
79481
diff
changeset
|
1052 |
5ef8658dc79e
(unrelocate): New argument BASE. Use it instead of
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
79481
diff
changeset
|
1053 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
|
1054 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
|
1055 > 0x100000000) |
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 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
|
1058 break; |
5ef8658dc79e
(unrelocate): New argument BASE. Use it instead of
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
79481
diff
changeset
|
1059 } |
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 if (newbase) |
5ef8658dc79e
(unrelocate): New argument BASE. Use it instead of
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
79481
diff
changeset
|
1062 { |
5ef8658dc79e
(unrelocate): New argument BASE. Use it instead of
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
79481
diff
changeset
|
1063 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
|
1064 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
|
1065 } |
5ef8658dc79e
(unrelocate): New argument BASE. Use it instead of
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
79481
diff
changeset
|
1066 } |
5ef8658dc79e
(unrelocate): New argument BASE. Use it instead of
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
79481
diff
changeset
|
1067 #endif |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1068 } |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1069 |
48606
87aa7494d1da
unexmacosx.c: Now corrects the offset in two hints table to allow prebinding
Steven Tamm <steventamm@mac.com>
parents:
48535
diff
changeset
|
1070 /* 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
|
1071 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
|
1072 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
|
1073 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
|
1074 { |
87aa7494d1da
unexmacosx.c: Now corrects the offset in two hints table to allow prebinding
Steven Tamm <steventamm@mac.com>
parents:
48535
diff
changeset
|
1075 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
|
1076 |
87aa7494d1da
unexmacosx.c: Now corrects the offset in two hints table to allow prebinding
Steven Tamm <steventamm@mac.com>
parents:
48535
diff
changeset
|
1077 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
|
1078 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
|
1079 } |
87aa7494d1da
unexmacosx.c: Now corrects the offset in two hints table to allow prebinding
Steven Tamm <steventamm@mac.com>
parents:
48535
diff
changeset
|
1080 |
87aa7494d1da
unexmacosx.c: Now corrects the offset in two hints table to allow prebinding
Steven Tamm <steventamm@mac.com>
parents:
48535
diff
changeset
|
1081 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
|
1082 |
87aa7494d1da
unexmacosx.c: Now corrects the offset in two hints table to allow prebinding
Steven Tamm <steventamm@mac.com>
parents:
48535
diff
changeset
|
1083 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
|
1084 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
|
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 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
|
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 |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1089 /* 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
|
1090 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
|
1091 static void |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1092 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
|
1093 { |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1094 printf ("Writing "); |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1095 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
|
1096 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
|
1097 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1098 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
|
1099 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
|
1100 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1101 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
|
1102 } |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1103 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1104 /* 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
|
1105 header. */ |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1106 static void |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1107 dump_it () |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1108 { |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1109 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
|
1110 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
|
1111 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1112 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
|
1113 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1114 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
|
1115 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
|
1116 { |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1117 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
|
1118 { |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1119 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
|
1120 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
|
1121 { |
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
|
1122 /* 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
|
1123 unrelocate */ |
73613
fd7f97a75198
2006-11-02 Nozomu Ando <nand@mac.com>
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
70306
diff
changeset
|
1124 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
|
1125 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
|
1126 " 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
|
1127 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
|
1128 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
|
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_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
|
1131 } |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1132 else |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1133 { |
73613
fd7f97a75198
2006-11-02 Nozomu Ando <nand@mac.com>
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
70306
diff
changeset
|
1134 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
|
1135 { |
fd7f97a75198
2006-11-02 Nozomu Ando <nand@mac.com>
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
70306
diff
changeset
|
1136 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
|
1137 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
|
1138 " 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
|
1139 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
|
1140 } |
fd7f97a75198
2006-11-02 Nozomu Ando <nand@mac.com>
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
70306
diff
changeset
|
1141 |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1142 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
|
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 break; |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1146 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
|
1147 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
|
1148 break; |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1149 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
|
1150 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
|
1151 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
|
1152 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
|
1153 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
|
1154 break; |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1155 default: |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1156 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
|
1157 break; |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1158 } |
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 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
|
1161 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
|
1162 |
73690
04b7851d50f8
(malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
73613
diff
changeset
|
1163 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
|
1164 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
|
1165 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1166 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
|
1167 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
|
1168 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
|
1169 } |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1170 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1171 /* 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
|
1172 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
|
1173 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
|
1174 ignored. */ |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1175 void |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1176 unexec (char *outfile, char *infile, void *start_data, void *start_bss, |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1177 void *entry_address) |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1178 { |
70306
470ac698d6f7
(unexec): Error if trying unexec from dumped executable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
69966
diff
changeset
|
1179 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
|
1180 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
|
1181 |
73613
fd7f97a75198
2006-11-02 Nozomu Ando <nand@mac.com>
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
70306
diff
changeset
|
1182 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
|
1183 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
|
1184 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
|
1185 { |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1186 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
|
1187 } |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48606
diff
changeset
|
1188 |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1189 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
|
1190 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
|
1191 { |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1192 close (infd); |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1193 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
|
1194 } |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1195 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1196 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
|
1197 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
|
1198 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1199 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
|
1200 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
|
1201 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1202 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
|
1203 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1204 dump_it (); |
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 close (outfd); |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1207 } |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1208 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1209 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1210 void |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1211 unexec_init_emacs_zone () |
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 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
|
1214 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
|
1215 } |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1216 |
62280
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1217 #ifndef MACOSX_MALLOC_MULT16 |
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1218 #define MACOSX_MALLOC_MULT16 1 |
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1219 #endif |
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1220 |
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1221 typedef struct unexec_malloc_header { |
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1222 union { |
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1223 char c[8]; |
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1224 size_t size; |
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1225 } u; |
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1226 } unexec_malloc_header_t; |
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1227 |
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1228 #if MACOSX_MALLOC_MULT16 |
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1229 |
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1230 #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
|
1231 |
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1232 #else |
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1233 |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1234 int |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1235 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
|
1236 { |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1237 int i; |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1238 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1239 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
|
1240 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
|
1241 < 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
|
1242 return 1; |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1243 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1244 return 0; |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1245 } |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1246 |
62280
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1247 #endif |
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1248 |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1249 void * |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1250 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
|
1251 { |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1252 if (in_dumped_exec) |
62280
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1253 { |
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1254 void *p; |
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1255 |
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1256 p = malloc (size); |
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1257 #if MACOSX_MALLOC_MULT16 |
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1258 assert (((vm_address_t) p % 16) == 0); |
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1259 #endif |
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1260 return p; |
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1261 } |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1262 else |
62280
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1263 { |
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1264 unexec_malloc_header_t *ptr; |
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1265 |
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1266 ptr = (unexec_malloc_header_t *) |
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1267 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
|
1268 ptr->u.size = size; |
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1269 ptr++; |
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1270 #if MACOSX_MALLOC_MULT16 |
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1271 assert (((vm_address_t) ptr % 16) == 8); |
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1272 #endif |
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1273 return (void *) ptr; |
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1274 } |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1275 } |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1276 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1277 void * |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1278 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
|
1279 { |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1280 if (in_dumped_exec) |
62280
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1281 { |
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1282 void *p; |
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1283 |
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1284 if (ptr_in_unexec_regions (old_ptr)) |
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1285 { |
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1286 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
|
1287 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
|
1288 |
62406
788686743e76
(unexec_realloc): Move declarations before statements.
Andreas Schwab <schwab@suse.de>
parents:
62280
diff
changeset
|
1289 p = (size_t *) malloc (new_size); |
62280
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1290 if (size) |
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1291 memcpy (p, old_ptr, size); |
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1292 } |
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1293 else |
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1294 { |
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1295 p = realloc (old_ptr, new_size); |
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1296 } |
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1297 #if MACOSX_MALLOC_MULT16 |
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1298 assert (((vm_address_t) p % 16) == 0); |
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1299 #endif |
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1300 return p; |
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1301 } |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1302 else |
62280
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1303 { |
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1304 unexec_malloc_header_t *ptr; |
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1305 |
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1306 ptr = (unexec_malloc_header_t *) |
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1307 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
|
1308 new_size + sizeof (unexec_malloc_header_t)); |
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1309 ptr->u.size = new_size; |
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1310 ptr++; |
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1311 #if MACOSX_MALLOC_MULT16 |
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1312 assert (((vm_address_t) ptr % 16) == 8); |
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1313 #endif |
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1314 return (void *) ptr; |
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1315 } |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1316 } |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1317 |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1318 void |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1319 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
|
1320 { |
95859
9ae1040f70e5
make unexec_free handle NULL the same way free does
Jim Meyering <jim@meyering.net>
parents:
94963
diff
changeset
|
1321 if (ptr == NULL) |
9ae1040f70e5
make unexec_free handle NULL the same way free does
Jim Meyering <jim@meyering.net>
parents:
94963
diff
changeset
|
1322 return; |
44890
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1323 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
|
1324 { |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1325 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
|
1326 free (ptr); |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1327 } |
01b93e5e53a7
Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff
changeset
|
1328 else |
62280
5517682762f6
Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
57397
diff
changeset
|
1329 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
|
1330 } |
52401 | 1331 |
1332 /* arch-tag: 1a784f7b-a184-4c4f-9544-da8619593d72 | |
1333 (do not change this comment) */ |