annotate src/unexmacosx.c @ 112437:f3d875901372

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