annotate src/unexmacosx.c @ 108203:877cada981cc

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