annotate src/unexmacosx.c @ 74903:874568f886c5

*** empty log message ***
author Richard M. Stallman <rms@gnu.org>
date Mon, 25 Dec 2006 20:37:40 +0000
parents 04b7851d50f8
children 3d45362f1d38 02cf29720f31
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,
3bd95f4f2941 Update years in copyright notice; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 66764
diff changeset
3 2006 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
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
7 GNU Emacs is free software; you can redistribute it and/or modify
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
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
9 the Free Software Foundation; either version 2, or (at your option)
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
10 any later version.
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
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
18 along with GNU Emacs; see the file COPYING. If not, write to
64084
a8fa7c632ee4 Update FSF's address.
Lute Kamstra <lute@gnu.org>
parents: 63159
diff changeset
19 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
a8fa7c632ee4 Update FSF's address.
Lute Kamstra <lute@gnu.org>
parents: 63159
diff changeset
20 Boston, MA 02110-1301, USA. */
44890
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 /* 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
23
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
24 /* Documentation note.
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
25
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
26 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
27 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
28 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
29 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
30 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
31 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
32 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
33 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
34 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
35 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
36 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
37 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
38
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
39 /* 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
40 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
41 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
42 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
43 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
44 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
45 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
46 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
47 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
48 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
49 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
50 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
51 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
52 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
53 it. */
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
54
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
55 /* 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
56 (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
57
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
58 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
59 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
60 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
61 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
62 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
63 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
64 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
65 remains unchanged.
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
66
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
67 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
68 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
69 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
70 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
71 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
72 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
73 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
74 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
75 segments.
44890
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
76
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
77 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
78 __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
79 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
80 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
81 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
82 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
83 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
84 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
85 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
86 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
87 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
88 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
89 */
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
90
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
91 #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
92 #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
93 #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
94 #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
95 #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
96 #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
97 #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
98 #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
99 #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
100 #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
101 #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
102 #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
103 #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
104 #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
105 #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
106 #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
107 #ifdef HAVE_MALLOC_MALLOC_H
57397
8434603cae5b config.in (HAVE_MALLOC_MALLOC_H): Regenerate
Steven Tamm <steventamm@mac.com>
parents: 53737
diff changeset
108 #include <malloc/malloc.h>
8434603cae5b config.in (HAVE_MALLOC_MALLOC_H): Regenerate
Steven Tamm <steventamm@mac.com>
parents: 53737
diff changeset
109 #else
44890
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
110 #include <objc/malloc.h>
57397
8434603cae5b config.in (HAVE_MALLOC_MALLOC_H): Regenerate
Steven Tamm <steventamm@mac.com>
parents: 53737
diff changeset
111 #endif
8434603cae5b config.in (HAVE_MALLOC_MALLOC_H): Regenerate
Steven Tamm <steventamm@mac.com>
parents: 53737
diff changeset
112
62280
5517682762f6 Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 57397
diff changeset
113 #include <assert.h>
5517682762f6 Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 57397
diff changeset
114
73613
fd7f97a75198 2006-11-02 Nozomu Ando <nand@mac.com>
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 70306
diff changeset
115 #ifdef _LP64
fd7f97a75198 2006-11-02 Nozomu Ando <nand@mac.com>
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 70306
diff changeset
116 #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
117 #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
118 #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
119 #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
120 #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
121 #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
122 #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
123 #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
124 #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
125 #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
126 #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
127 #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
128 #endif
44890
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 #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
131
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
132 /* 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
133 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
134 #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
135
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
136 /* 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
137 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
138 #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
139
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
140 /* 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
141 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
142 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
143 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
144 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
145 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
146
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
147 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
148 };
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
149
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
150 /* 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
151 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
152 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
153
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
154 /* 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
155 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
156
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
157 /* Number of load commands. */
73690
04b7851d50f8 (malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 73613
diff changeset
158 static 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
159
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
160 /* 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
161 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
162 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
163 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
164
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
165 /* 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
166 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
167 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
168 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
169 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
170 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
171
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
172 /* Mach header. */
73690
04b7851d50f8 (malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 73613
diff changeset
173 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
174
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
175 /* 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
176 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
177
73613
fd7f97a75198 2006-11-02 Nozomu Ando <nand@mac.com>
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 70306
diff changeset
178 /* 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
179 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
180
fd7f97a75198 2006-11-02 Nozomu Ando <nand@mac.com>
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 70306
diff changeset
181 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
182 #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
183
73690
04b7851d50f8 (malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 73613
diff changeset
184 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
185
73690
04b7851d50f8 (malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 73613
diff changeset
186 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
187
73690
04b7851d50f8 (malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 73613
diff changeset
188 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
189
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 /* 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
191 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
192
73690
04b7851d50f8 (malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 73613
diff changeset
193 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
194
66764
1f4cf9d552f9 (unexec_write_zero): New function.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 64770
diff changeset
195 /* Read N bytes from infd into memory starting at address DEST.
44890
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
196 Return true if successful, false otherwise. */
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
197 static int
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
198 unexec_read (void *dest, size_t n)
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
199 {
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
200 return n == read (infd, dest, n);
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
201 }
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
202
66764
1f4cf9d552f9 (unexec_write_zero): New function.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 64770
diff changeset
203 /* Write COUNT bytes from memory starting at address SRC to outfd
1f4cf9d552f9 (unexec_write_zero): New function.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 64770
diff changeset
204 starting at offset DEST. Return true if successful, false
1f4cf9d552f9 (unexec_write_zero): New function.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 64770
diff changeset
205 otherwise. */
44890
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
206 static int
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
207 unexec_write (off_t dest, const void *src, size_t count)
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
208 {
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
209 if (lseek (outfd, dest, SEEK_SET) != dest)
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
210 return 0;
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
211
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
212 return write (outfd, src, count) == count;
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
213 }
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
214
66764
1f4cf9d552f9 (unexec_write_zero): New function.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 64770
diff changeset
215 /* Write COUNT bytes of zeros to outfd starting at offset DEST.
1f4cf9d552f9 (unexec_write_zero): New function.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 64770
diff changeset
216 Return true if successful, false otherwise. */
1f4cf9d552f9 (unexec_write_zero): New function.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 64770
diff changeset
217 static int
1f4cf9d552f9 (unexec_write_zero): New function.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 64770
diff changeset
218 unexec_write_zero (off_t dest, size_t count)
1f4cf9d552f9 (unexec_write_zero): New function.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 64770
diff changeset
219 {
1f4cf9d552f9 (unexec_write_zero): New function.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 64770
diff changeset
220 char buf[UNEXEC_COPY_BUFSZ];
1f4cf9d552f9 (unexec_write_zero): New function.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 64770
diff changeset
221 ssize_t bytes;
1f4cf9d552f9 (unexec_write_zero): New function.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 64770
diff changeset
222
1f4cf9d552f9 (unexec_write_zero): New function.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 64770
diff changeset
223 bzero (buf, UNEXEC_COPY_BUFSZ);
1f4cf9d552f9 (unexec_write_zero): New function.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 64770
diff changeset
224 if (lseek (outfd, dest, SEEK_SET) != dest)
1f4cf9d552f9 (unexec_write_zero): New function.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 64770
diff changeset
225 return 0;
1f4cf9d552f9 (unexec_write_zero): New function.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 64770
diff changeset
226
1f4cf9d552f9 (unexec_write_zero): New function.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 64770
diff changeset
227 while (count > 0)
1f4cf9d552f9 (unexec_write_zero): New function.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 64770
diff changeset
228 {
1f4cf9d552f9 (unexec_write_zero): New function.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 64770
diff changeset
229 bytes = count > UNEXEC_COPY_BUFSZ ? UNEXEC_COPY_BUFSZ : count;
1f4cf9d552f9 (unexec_write_zero): New function.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 64770
diff changeset
230 if (write (outfd, buf, bytes) != bytes)
1f4cf9d552f9 (unexec_write_zero): New function.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 64770
diff changeset
231 return 0;
1f4cf9d552f9 (unexec_write_zero): New function.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 64770
diff changeset
232 count -= bytes;
1f4cf9d552f9 (unexec_write_zero): New function.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 64770
diff changeset
233 }
1f4cf9d552f9 (unexec_write_zero): New function.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 64770
diff changeset
234
1f4cf9d552f9 (unexec_write_zero): New function.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 64770
diff changeset
235 return 1;
1f4cf9d552f9 (unexec_write_zero): New function.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 64770
diff changeset
236 }
1f4cf9d552f9 (unexec_write_zero): New function.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 64770
diff changeset
237
1f4cf9d552f9 (unexec_write_zero): New function.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 64770
diff changeset
238 /* Copy COUNT bytes from starting offset SRC in infd to starting
1f4cf9d552f9 (unexec_write_zero): New function.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 64770
diff changeset
239 offset DEST in outfd. Return true if successful, false
1f4cf9d552f9 (unexec_write_zero): New function.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 64770
diff changeset
240 otherwise. */
44890
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
241 static int
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
242 unexec_copy (off_t dest, off_t src, ssize_t count)
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
243 {
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
244 ssize_t bytes_read;
53737
349eb7d143cf unexecmacos.x (unexec_copy): Do not copy more than was requested (count)
Steven Tamm <steventamm@mac.com>
parents: 52961
diff changeset
245 ssize_t bytes_to_read;
44890
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
246
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
247 char buf[UNEXEC_COPY_BUFSZ];
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
248
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
249 if (lseek (infd, src, SEEK_SET) != src)
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
250 return 0;
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
251
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
252 if (lseek (outfd, dest, SEEK_SET) != dest)
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
253 return 0;
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
254
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
255 while (count > 0)
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
256 {
53737
349eb7d143cf unexecmacos.x (unexec_copy): Do not copy more than was requested (count)
Steven Tamm <steventamm@mac.com>
parents: 52961
diff changeset
257 bytes_to_read = count > UNEXEC_COPY_BUFSZ ? UNEXEC_COPY_BUFSZ : count;
349eb7d143cf unexecmacos.x (unexec_copy): Do not copy more than was requested (count)
Steven Tamm <steventamm@mac.com>
parents: 52961
diff changeset
258 bytes_read = read (infd, buf, bytes_to_read);
44890
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
259 if (bytes_read <= 0)
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
260 return 0;
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
261 if (write (outfd, buf, bytes_read) != bytes_read)
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
262 return 0;
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
263 count -= bytes_read;
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
264 }
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
265
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
266 return 1;
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
267 }
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
268
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
269 /* Debugging and informational messages routines. */
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
270
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
271 static void
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
272 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
273 {
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
274 va_list ap;
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
275
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
276 va_start (ap, format);
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
277 fprintf (stderr, "unexec: ");
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
278 vfprintf (stderr, format, ap);
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
279 fprintf (stderr, "\n");
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
280 va_end (ap);
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
281 exit (1);
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
282 }
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
283
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
284 static void
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
285 print_prot (vm_prot_t prot)
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
286 {
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
287 if (prot == VM_PROT_NONE)
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
288 printf ("none");
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
289 else
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
290 {
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
291 putchar (prot & VM_PROT_READ ? 'r' : ' ');
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
292 putchar (prot & VM_PROT_WRITE ? 'w' : ' ');
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
293 putchar (prot & VM_PROT_EXECUTE ? 'x' : ' ');
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
294 putchar (' ');
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
295 }
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
296 }
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
297
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
298 static void
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
299 print_region (vm_address_t address, vm_size_t size, vm_prot_t prot,
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
300 vm_prot_t max_prot)
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
301 {
73613
fd7f97a75198 2006-11-02 Nozomu Ando <nand@mac.com>
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 70306
diff changeset
302 printf ("%#10lx %#8lx ", (long) address, (long) size);
44890
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
303 print_prot (prot);
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
304 putchar (' ');
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
305 print_prot (max_prot);
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
306 putchar ('\n');
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
307 }
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
308
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
309 static void
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
310 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
311 {
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
312 struct region_t *r;
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
313
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
314 printf (" address size prot maxp\n");
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
315
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
316 for (r = region_list_head; r; r = r->next)
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
317 print_region (r->address, r->size, r->protection, r->max_protection);
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
318 }
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
319
73690
04b7851d50f8 (malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 73613
diff changeset
320 static void
44890
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
321 print_regions ()
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
322 {
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
323 task_t target_task = mach_task_self ();
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
324 vm_address_t address = (vm_address_t) 0;
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
325 vm_size_t size;
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
326 struct vm_region_basic_info info;
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
327 mach_msg_type_number_t info_count = VM_REGION_BASIC_INFO_COUNT;
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
328 mach_port_t object_name;
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
329
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
330 printf (" address size prot maxp\n");
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
331
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
332 while (vm_region (target_task, &address, &size, VM_REGION_BASIC_INFO,
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
333 (vm_region_info_t) &info, &info_count, &object_name)
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
334 == KERN_SUCCESS && info_count == VM_REGION_BASIC_INFO_COUNT)
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
335 {
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
336 print_region (address, size, info.protection, info.max_protection);
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
337
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
338 if (object_name != MACH_PORT_NULL)
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
339 mach_port_deallocate (target_task, object_name);
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 48606
diff changeset
340
44890
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
341 address += size;
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
342 }
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
343 }
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
344
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
345 /* Build the list of regions that need to be dumped. Regions with
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
346 addresses above VM_DATA_TOP are omitted. Adjacent regions with
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
347 identical protection are merged. Note that non-writable regions
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
348 cannot be omitted because they some regions created at run time are
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
349 read-only. */
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
350 static void
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
351 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
352 {
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
353 task_t target_task = mach_task_self ();
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
354 vm_address_t address = (vm_address_t) 0;
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
355 vm_size_t size;
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
356 struct vm_region_basic_info info;
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
357 mach_msg_type_number_t info_count = VM_REGION_BASIC_INFO_COUNT;
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
358 mach_port_t object_name;
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
359 struct region_t *r;
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
360
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
361 #if VERBOSE
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
362 printf ("--- List of All Regions ---\n");
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
363 printf (" address size prot maxp\n");
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
364 #endif
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
365
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
366 while (vm_region (target_task, &address, &size, VM_REGION_BASIC_INFO,
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
367 (vm_region_info_t) &info, &info_count, &object_name)
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
368 == KERN_SUCCESS && info_count == VM_REGION_BASIC_INFO_COUNT)
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
369 {
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
370 /* Done when we reach addresses of shared libraries, which are
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
371 loaded in high memory. */
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
372 if (address >= VM_DATA_TOP)
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
373 break;
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
374
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
375 #if VERBOSE
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
376 print_region (address, size, info.protection, info.max_protection);
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
377 #endif
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
378
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
379 /* If a region immediately follows the previous one (the one
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
380 most recently added to the list) and has identical
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
381 protection, merge it with the latter. Otherwise create a
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
382 new list element for it. */
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
383 if (region_list_tail
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
384 && info.protection == region_list_tail->protection
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
385 && info.max_protection == region_list_tail->max_protection
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
386 && region_list_tail->address + region_list_tail->size == address)
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
387 {
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
388 region_list_tail->size += size;
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
389 }
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
390 else
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
391 {
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
392 r = (struct region_t *) malloc (sizeof (struct region_t));
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 48606
diff changeset
393
44890
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
394 if (!r)
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
395 unexec_error ("cannot allocate region structure");
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 48606
diff changeset
396
44890
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
397 r->address = address;
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
398 r->size = size;
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
399 r->protection = info.protection;
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
400 r->max_protection = info.max_protection;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 48606
diff changeset
401
44890
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
402 r->next = 0;
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
403 if (region_list_head == 0)
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
404 {
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
405 region_list_head = r;
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
406 region_list_tail = r;
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
407 }
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
408 else
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
409 {
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
410 region_list_tail->next = r;
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
411 region_list_tail = r;
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
412 }
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 48606
diff changeset
413
44890
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
414 /* Deallocate (unused) object name returned by
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
415 vm_region. */
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
416 if (object_name != MACH_PORT_NULL)
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
417 mach_port_deallocate (target_task, object_name);
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
418 }
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 48606
diff changeset
419
44890
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
420 address += size;
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
421 }
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
422
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
423 printf ("--- List of Regions to be Dumped ---\n");
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
424 print_region_list ();
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
425 }
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
426
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
427
73613
fd7f97a75198 2006-11-02 Nozomu Ando <nand@mac.com>
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 70306
diff changeset
428 #define MAX_UNEXEC_REGIONS 400
44890
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
429
73690
04b7851d50f8 (malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 73613
diff changeset
430 static int num_unexec_regions;
04b7851d50f8 (malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 73613
diff changeset
431 typedef struct {
04b7851d50f8 (malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 73613
diff changeset
432 vm_range_t range;
04b7851d50f8 (malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 73613
diff changeset
433 vm_size_t filesize;
04b7851d50f8 (malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 73613
diff changeset
434 } unexec_region_info;
04b7851d50f8 (malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 73613
diff changeset
435 static unexec_region_info unexec_regions[MAX_UNEXEC_REGIONS];
44890
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
436
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
437 static void
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
438 unexec_regions_recorder (task_t task, void *rr, unsigned type,
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
439 vm_range_t *ranges, unsigned num)
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
440 {
73690
04b7851d50f8 (malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 73613
diff changeset
441 vm_address_t p;
04b7851d50f8 (malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 73613
diff changeset
442 vm_size_t filesize;
04b7851d50f8 (malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 73613
diff changeset
443
44890
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
444 while (num && num_unexec_regions < MAX_UNEXEC_REGIONS)
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
445 {
73690
04b7851d50f8 (malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 73613
diff changeset
446 /* Subtract the size of trailing null pages from filesize. It
04b7851d50f8 (malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 73613
diff changeset
447 can be smaller than vmsize in segment commands. In such a
04b7851d50f8 (malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 73613
diff changeset
448 case, trailing pages are initialized with zeros. */
04b7851d50f8 (malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 73613
diff changeset
449 for (p = ranges->address + ranges->size; p > ranges->address;
04b7851d50f8 (malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 73613
diff changeset
450 p -= sizeof (int))
04b7851d50f8 (malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 73613
diff changeset
451 if (*(((int *) p)-1))
04b7851d50f8 (malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 73613
diff changeset
452 break;
04b7851d50f8 (malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 73613
diff changeset
453 filesize = ROUNDUP_TO_PAGE_BOUNDARY (p - ranges->address);
04b7851d50f8 (malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 73613
diff changeset
454 assert (filesize <= ranges->size);
04b7851d50f8 (malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 73613
diff changeset
455
04b7851d50f8 (malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 73613
diff changeset
456 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
457 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
458 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
459 (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
460 ranges++; num--;
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
461 }
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
462 }
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
463
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
464 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
465 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
466 {
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
467 *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
468 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
469 }
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
470
73690
04b7851d50f8 (malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 73613
diff changeset
471 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
472 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
473 {
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
474 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
475
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
476 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
477 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
478 | 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
479 (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
480 unexec_reader,
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
481 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
482
fd7f97a75198 2006-11-02 Nozomu Ando <nand@mac.com>
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 70306
diff changeset
483 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
484 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
485 }
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
486
52011
8bbd4454be32 unexmacosx.c: Sort and merge unexec regions before dumping them.
Andrew Choi <akochoi@shaw.ca>
parents: 49854
diff changeset
487 static int
8bbd4454be32 unexmacosx.c: Sort and merge unexec regions before dumping them.
Andrew Choi <akochoi@shaw.ca>
parents: 49854
diff changeset
488 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
489 {
73690
04b7851d50f8 (malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 73613
diff changeset
490 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
491 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
492
8bbd4454be32 unexmacosx.c: Sort and merge unexec regions before dumping them.
Andrew Choi <akochoi@shaw.ca>
parents: 49854
diff changeset
493 if (aa < bb)
8bbd4454be32 unexmacosx.c: Sort and merge unexec regions before dumping them.
Andrew Choi <akochoi@shaw.ca>
parents: 49854
diff changeset
494 return -1;
8bbd4454be32 unexmacosx.c: Sort and merge unexec regions before dumping them.
Andrew Choi <akochoi@shaw.ca>
parents: 49854
diff changeset
495 else if (aa > bb)
8bbd4454be32 unexmacosx.c: Sort and merge unexec regions before dumping them.
Andrew Choi <akochoi@shaw.ca>
parents: 49854
diff changeset
496 return 1;
8bbd4454be32 unexmacosx.c: Sort and merge unexec regions before dumping them.
Andrew Choi <akochoi@shaw.ca>
parents: 49854
diff changeset
497 else
8bbd4454be32 unexmacosx.c: Sort and merge unexec regions before dumping them.
Andrew Choi <akochoi@shaw.ca>
parents: 49854
diff changeset
498 return 0;
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
8bbd4454be32 unexmacosx.c: Sort and merge unexec regions before dumping them.
Andrew Choi <akochoi@shaw.ca>
parents: 49854
diff changeset
501 static void
8bbd4454be32 unexmacosx.c: Sort and merge unexec regions before dumping them.
Andrew Choi <akochoi@shaw.ca>
parents: 49854
diff changeset
502 unexec_regions_merge ()
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 int i, n;
73690
04b7851d50f8 (malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 73613
diff changeset
505 unexec_region_info r;
52011
8bbd4454be32 unexmacosx.c: Sort and merge unexec regions before dumping them.
Andrew Choi <akochoi@shaw.ca>
parents: 49854
diff changeset
506
8bbd4454be32 unexmacosx.c: Sort and merge unexec regions before dumping them.
Andrew Choi <akochoi@shaw.ca>
parents: 49854
diff changeset
507 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
508 &unexec_regions_sort_compare);
8bbd4454be32 unexmacosx.c: Sort and merge unexec regions before dumping them.
Andrew Choi <akochoi@shaw.ca>
parents: 49854
diff changeset
509 n = 0;
8bbd4454be32 unexmacosx.c: Sort and merge unexec regions before dumping them.
Andrew Choi <akochoi@shaw.ca>
parents: 49854
diff changeset
510 r = unexec_regions[0];
8bbd4454be32 unexmacosx.c: Sort and merge unexec regions before dumping them.
Andrew Choi <akochoi@shaw.ca>
parents: 49854
diff changeset
511 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
512 {
73690
04b7851d50f8 (malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 73613
diff changeset
513 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
514 && 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
515 {
73690
04b7851d50f8 (malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 73613
diff changeset
516 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
517 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
518 }
8bbd4454be32 unexmacosx.c: Sort and merge unexec regions before dumping them.
Andrew Choi <akochoi@shaw.ca>
parents: 49854
diff changeset
519 else
8bbd4454be32 unexmacosx.c: Sort and merge unexec regions before dumping them.
Andrew Choi <akochoi@shaw.ca>
parents: 49854
diff changeset
520 {
8bbd4454be32 unexmacosx.c: Sort and merge unexec regions before dumping them.
Andrew Choi <akochoi@shaw.ca>
parents: 49854
diff changeset
521 unexec_regions[n++] = r;
8bbd4454be32 unexmacosx.c: Sort and merge unexec regions before dumping them.
Andrew Choi <akochoi@shaw.ca>
parents: 49854
diff changeset
522 r = unexec_regions[i];
8bbd4454be32 unexmacosx.c: Sort and merge unexec regions before dumping them.
Andrew Choi <akochoi@shaw.ca>
parents: 49854
diff changeset
523 }
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 num_unexec_regions = n;
8bbd4454be32 unexmacosx.c: Sort and merge unexec regions before dumping them.
Andrew Choi <akochoi@shaw.ca>
parents: 49854
diff changeset
527 }
8bbd4454be32 unexmacosx.c: Sort and merge unexec regions before dumping them.
Andrew Choi <akochoi@shaw.ca>
parents: 49854
diff changeset
528
44890
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
529
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
530 /* 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
531
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
532 static void
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
533 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
534 {
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
535 switch (lc)
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
536 {
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
537 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
538 #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
539 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
540 #else
fd7f97a75198 2006-11-02 Nozomu Ando <nand@mac.com>
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 70306
diff changeset
541 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
542 #endif
44890
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
543 break;
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
544 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
545 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
546 break;
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
547 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
548 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
549 break;
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
550 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
551 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
552 break;
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
553 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
554 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
555 break;
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
556 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
557 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
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_PREBOUND_DYLIB:
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_PREBOUND_DYLIB");
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_TWOLEVEL_HINTS:
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_TWOLEVEL_HINTS");
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 default:
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
566 printf ("unknown ");
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
567 }
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
568 }
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
569
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
570 static void
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
571 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
572 {
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
573 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
574 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
575
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
576 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
577 {
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
578 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
579 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
580 int j;
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
581
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
582 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
583 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
584 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
585
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
586 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
587 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
588 {
73613
fd7f97a75198 2006-11-02 Nozomu Ando <nand@mac.com>
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 70306
diff changeset
589 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
590 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
591 sectp++;
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
592 }
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
593 }
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
594 else
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
595 printf ("\n");
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 /* 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
599 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
600 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
601 static void
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
602 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
603 {
69966
de28ca2dd3c3 Include config.h before using HAVE_MALLOC_MALLOC_H.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 68651
diff changeset
604 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
605
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
606 if (!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
607 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
608
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
609 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
610 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
611
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
612 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
613 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
614
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
615 #if VERBOSE
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
616 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
617 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
618 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
619 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
620 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
621 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
622 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
623 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
624 #endif
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 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
627 lca = (struct load_command **) malloc (nlc * sizeof (struct load_command *));
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 48606
diff changeset
628
44890
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
629 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
630 {
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
631 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
632 /* 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
633 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
634 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
635 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
636 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
637 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
638 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
639 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
640 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
641 {
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
642 struct segment_command *scp = (struct segment_command *) lca[i];
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 48606
diff changeset
643
44890
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
644 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
645 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
646
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
647 if (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
648 {
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
649 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
650 int j;
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
651
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
652 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
653 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
654 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
655 }
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
656 }
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
657 }
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 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
660 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
661
73690
04b7851d50f8 (malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 73613
diff changeset
662 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
663 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
664
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
665 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
666 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
667
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
668 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
669 {
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
670 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
671 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
672 }
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
673 }
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 /* 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
676 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
677 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
678 static void
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
679 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
680 {
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
681 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
682 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
683 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
684 int j;
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
685
73613
fd7f97a75198 2006-11-02 Nozomu Ando <nand@mac.com>
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 70306
diff changeset
686 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
687
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
688 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
689 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
690 {
73613
fd7f97a75198 2006-11-02 Nozomu Ando <nand@mac.com>
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 70306
diff changeset
691 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
692 sectp++;
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
693 }
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
694
73690
04b7851d50f8 (malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 73613
diff changeset
695 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
696 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
697 (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
698
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
699 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
700 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
701 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
702
44890
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
703 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
704 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
705
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
706 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
707 }
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
708
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
709 /* 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
710 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
711 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
712 __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
713 __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
714 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
715 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
716 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
717 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
718 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
719 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
720 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
721 static void
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
722 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
723 {
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
724 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
725 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
726 int j;
73690
04b7851d50f8 (malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 73613
diff changeset
727 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
728
73690
04b7851d50f8 (malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 73613
diff changeset
729 /* 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
730 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
731 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
732 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
733 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
734 scp->filesize = scp->vmsize;
04b7851d50f8 (malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 73613
diff changeset
735
04b7851d50f8 (malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 73613
diff changeset
736 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
737 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
738 (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
739
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
740 /* 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
741 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
742 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
743
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
744 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
745 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
746 {
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
747 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
748 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
749 /* 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
750 __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
751 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
752 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
753 file. */
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
754 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
755 {
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
756 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
757 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
758 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
759 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
760 }
66764
1f4cf9d552f9 (unexec_write_zero): New function.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 64770
diff changeset
761 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
762 {
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
763 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
764 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
765 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
766 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
767 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
768 }
1f4cf9d552f9 (unexec_write_zero): New function.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 64770
diff changeset
769 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
770 {
1f4cf9d552f9 (unexec_write_zero): New function.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 64770
diff changeset
771 extern char *my_endbss_static;
1f4cf9d552f9 (unexec_write_zero): New function.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 64770
diff changeset
772 unsigned long my_size;
1f4cf9d552f9 (unexec_write_zero): New function.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 64770
diff changeset
773
1f4cf9d552f9 (unexec_write_zero): New function.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 64770
diff changeset
774 sectp->flags = S_REGULAR;
1f4cf9d552f9 (unexec_write_zero): New function.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 64770
diff changeset
775
1f4cf9d552f9 (unexec_write_zero): New function.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 64770
diff changeset
776 /* 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
777 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
778 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
779 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
780 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
781 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
782 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
783 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
784 && my_size <= sectp->size))
1f4cf9d552f9 (unexec_write_zero): New function.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 64770
diff changeset
785 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
786 sectp->sectname);
1f4cf9d552f9 (unexec_write_zero): New function.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 64770
diff changeset
787 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
788 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
789 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
790 sectp->size - my_size))
1f4cf9d552f9 (unexec_write_zero): New function.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 64770
diff changeset
791 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
792 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
793 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
794 }
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
795 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
796 || 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
797 || 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
798 || 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
799 || strncmp (sectp->sectname, "__const", 16) == 0
10764ce8e077 unexmacosx.c (copy_data_segment): Also copy __cfstring section.
Andrew Choi <akochoi@shaw.ca>
parents: 49600
diff changeset
800 || strncmp (sectp->sectname, "__cfstring", 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
801 {
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
802 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
803 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
804 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
805 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
806 }
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
807 else
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
808 unexec_error ("unrecognized section name in __DATA segment");
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 48606
diff changeset
809
73613
fd7f97a75198 2006-11-02 Nozomu Ando <nand@mac.com>
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 70306
diff changeset
810 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
811 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
812 (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
813
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
814 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
815 sectp++;
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
816 }
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
817
73690
04b7851d50f8 (malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 73613
diff changeset
818 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
819
44890
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
820 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
821 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
822 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
823
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
824 /* 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
825 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
826 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
827 */
44890
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
828 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
829 {
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
830 struct segment_command sc;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 48606
diff changeset
831
44890
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
832 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
833 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
834 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
835 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
836 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
837 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
838 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
839 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
840 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
841 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
842 sc.flags = 0;
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 48606
diff changeset
843
73690
04b7851d50f8 (malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 73613
diff changeset
844 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
845 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
846 (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
847
73690
04b7851d50f8 (malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 73613
diff changeset
848 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
849 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
850 curr_file_offset += ROUNDUP_TO_PAGE_BOUNDARY (sc.filesize);
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 48606
diff changeset
851
44890
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
852 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
853 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
854 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
855 mh.ncmds++;
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
856 }
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
857 }
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
858
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
859 /* 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
860 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
861 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
862 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
863 {
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
864 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
865
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
866 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
867 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
868
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
869 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
870
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
871 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
872 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
873
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
874 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
875 }
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
876
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
877 /* 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
878 static void
d9dc58d31ffb These are Nozomu Ando's changes to build Emacs to run under X Window
Andrew Choi <akochoi@shaw.ca>
parents: 52401
diff changeset
879 unrelocate (const char *name, off_t reloff, int nrel)
d9dc58d31ffb These are Nozomu Ando's changes to build Emacs to run under X Window
Andrew Choi <akochoi@shaw.ca>
parents: 52401
diff changeset
880 {
d9dc58d31ffb These are Nozomu Ando's changes to build Emacs to run under X Window
Andrew Choi <akochoi@shaw.ca>
parents: 52401
diff changeset
881 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
882 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
883 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
884 = (struct scattered_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
885
d9dc58d31ffb These are Nozomu Ando's changes to build Emacs to run under X Window
Andrew Choi <akochoi@shaw.ca>
parents: 52401
diff changeset
886 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
887 {
d9dc58d31ffb These are Nozomu Ando's changes to build Emacs to run under X Window
Andrew Choi <akochoi@shaw.ca>
parents: 52401
diff changeset
888 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
889 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
890 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
891 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
892 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
893
d9dc58d31ffb These are Nozomu Ando's changes to build Emacs to run under X Window
Andrew Choi <akochoi@shaw.ca>
parents: 52401
diff changeset
894 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
895 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
896 {
d9dc58d31ffb These are Nozomu Ando's changes to build Emacs to run under X Window
Andrew Choi <akochoi@shaw.ca>
parents: 52401
diff changeset
897 case GENERIC_RELOC_VANILLA:
d9dc58d31ffb These are Nozomu Ando's changes to build Emacs to run under X Window
Andrew Choi <akochoi@shaw.ca>
parents: 52401
diff changeset
898 if (reloc_info.r_address >= data_segment_scp->vmaddr
d9dc58d31ffb These are Nozomu Ando's changes to build Emacs to run under X Window
Andrew Choi <akochoi@shaw.ca>
parents: 52401
diff changeset
899 && reloc_info.r_address < (data_segment_scp->vmaddr
d9dc58d31ffb These are Nozomu Ando's changes to build Emacs to run under X Window
Andrew Choi <akochoi@shaw.ca>
parents: 52401
diff changeset
900 + data_segment_scp->vmsize))
d9dc58d31ffb These are Nozomu Ando's changes to build Emacs to run under X Window
Andrew Choi <akochoi@shaw.ca>
parents: 52401
diff changeset
901 {
d9dc58d31ffb These are Nozomu Ando's changes to build Emacs to run under X Window
Andrew Choi <akochoi@shaw.ca>
parents: 52401
diff changeset
902 off_t src_off = data_segment_old_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
903 + reloc_info.r_address - data_segment_scp->vmaddr;
d9dc58d31ffb These are Nozomu Ando's changes to build Emacs to run under X Window
Andrew Choi <akochoi@shaw.ca>
parents: 52401
diff changeset
904 off_t dst_off = data_segment_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
905 + reloc_info.r_address - data_segment_scp->vmaddr;
d9dc58d31ffb These are Nozomu Ando's changes to build Emacs to run under X Window
Andrew Choi <akochoi@shaw.ca>
parents: 52401
diff changeset
906
d9dc58d31ffb These are Nozomu Ando's changes to build Emacs to run under X Window
Andrew Choi <akochoi@shaw.ca>
parents: 52401
diff changeset
907 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
908 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
909 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
910 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
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 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
913 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
914 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
915 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
916 }
d9dc58d31ffb These are Nozomu Ando's changes to build Emacs to run under X Window
Andrew Choi <akochoi@shaw.ca>
parents: 52401
diff changeset
917 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
918 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
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 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
921 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
922 /* 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
923 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
924 #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
925 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
926 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
927 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
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 }
d9dc58d31ffb These are Nozomu Ando's changes to build Emacs to run under X Window
Andrew Choi <akochoi@shaw.ca>
parents: 52401
diff changeset
930
d9dc58d31ffb These are Nozomu Ando's changes to build Emacs to run under X Window
Andrew Choi <akochoi@shaw.ca>
parents: 52401
diff changeset
931 if (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
932 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
933 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
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
44890
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
936 /* 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
937 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
938 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
939 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
940 {
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
941 struct dysymtab_command *dstp = (struct dysymtab_command *) lc;
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
942
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
943 unrelocate ("local", dstp->locreloff, dstp->nlocrel);
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 unrelocate ("external", dstp->extreloff, dstp->nextrel);
44890
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
945
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
946 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
947 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
948 }
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
949
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
950 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
951 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
952 }
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
953
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
954 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
955 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
956
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
957 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
958
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
959 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
960 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
961
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
962 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
963 }
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
964
48606
87aa7494d1da unexmacosx.c: Now corrects the offset in two hints table to allow prebinding
Steven Tamm <steventamm@mac.com>
parents: 48535
diff changeset
965 /* 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
966 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
967 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
968 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
969 {
87aa7494d1da unexmacosx.c: Now corrects the offset in two hints table to allow prebinding
Steven Tamm <steventamm@mac.com>
parents: 48535
diff changeset
970 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
971
87aa7494d1da unexmacosx.c: Now corrects the offset in two hints table to allow prebinding
Steven Tamm <steventamm@mac.com>
parents: 48535
diff changeset
972 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
973 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
974 }
87aa7494d1da unexmacosx.c: Now corrects the offset in two hints table to allow prebinding
Steven Tamm <steventamm@mac.com>
parents: 48535
diff changeset
975
87aa7494d1da unexmacosx.c: Now corrects the offset in two hints table to allow prebinding
Steven Tamm <steventamm@mac.com>
parents: 48535
diff changeset
976 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
977
87aa7494d1da unexmacosx.c: Now corrects the offset in two hints table to allow prebinding
Steven Tamm <steventamm@mac.com>
parents: 48535
diff changeset
978 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
979 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
980
87aa7494d1da unexmacosx.c: Now corrects the offset in two hints table to allow prebinding
Steven Tamm <steventamm@mac.com>
parents: 48535
diff changeset
981 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
982 }
87aa7494d1da unexmacosx.c: Now corrects the offset in two hints table to allow prebinding
Steven Tamm <steventamm@mac.com>
parents: 48535
diff changeset
983
44890
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
984 /* 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
985 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
986 static void
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
987 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
988 {
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
989 printf ("Writing ");
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
990 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
991 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
992
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
993 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
994 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
995
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
996 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
997 }
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
998
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
999 /* 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
1000 header. */
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
1001 static void
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
1002 dump_it ()
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
1003 {
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
1004 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
1005 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
1006
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
1007 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
1008
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
1009 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
1010 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
1011 {
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
1012 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
1013 {
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
1014 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
1015 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
1016 {
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
1017 /* 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
1018 unrelocate */
73613
fd7f97a75198 2006-11-02 Nozomu Ando <nand@mac.com>
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 70306
diff changeset
1019 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
1020 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
1021 " 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
1022 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
1023 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
1024
44890
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
1025 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
1026 }
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
1027 else
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
1028 {
73613
fd7f97a75198 2006-11-02 Nozomu Ando <nand@mac.com>
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 70306
diff changeset
1029 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
1030 {
fd7f97a75198 2006-11-02 Nozomu Ando <nand@mac.com>
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 70306
diff changeset
1031 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
1032 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
1033 " 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
1034 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
1035 }
fd7f97a75198 2006-11-02 Nozomu Ando <nand@mac.com>
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 70306
diff changeset
1036
44890
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
1037 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
1038 }
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 break;
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
1041 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
1042 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
1043 break;
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
1044 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
1045 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
1046 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
1047 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
1048 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
1049 break;
44890
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
1050 default:
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
1051 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
1052 break;
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
1053 }
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
1054
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
1055 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
1056 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
1057
73690
04b7851d50f8 (malloc_cookie): Remove unused variable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 73613
diff changeset
1058 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
1059 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
1060
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
1061 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
1062 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
1063 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
1064 }
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
1065
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
1066 /* 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
1067 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
1068 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
1069 ignored. */
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
1070 void
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
1071 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
1072 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
1073 {
70306
470ac698d6f7 (unexec): Error if trying unexec from dumped executable.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 69966
diff changeset
1074 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
1075 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
1076
73613
fd7f97a75198 2006-11-02 Nozomu Ando <nand@mac.com>
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 70306
diff changeset
1077 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
1078 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
1079 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
1080 {
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
1081 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
1082 }
49600
23a1cea22d13 Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 48606
diff changeset
1083
44890
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
1084 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
1085 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
1086 {
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
1087 close (infd);
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
1088 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
1089 }
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
1090
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
1091 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
1092 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
1093
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
1094 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
1095 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
1096
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
1097 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
1098
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
1099 dump_it ();
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
1100
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
1101 close (outfd);
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
1102 }
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
1103
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
1104
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
1105 void
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
1106 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
1107 {
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
1108 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
1109 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
1110 }
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
1111
62280
5517682762f6 Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 57397
diff changeset
1112 #ifndef MACOSX_MALLOC_MULT16
5517682762f6 Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 57397
diff changeset
1113 #define MACOSX_MALLOC_MULT16 1
5517682762f6 Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 57397
diff changeset
1114 #endif
5517682762f6 Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 57397
diff changeset
1115
5517682762f6 Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 57397
diff changeset
1116 typedef struct unexec_malloc_header {
5517682762f6 Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 57397
diff changeset
1117 union {
5517682762f6 Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 57397
diff changeset
1118 char c[8];
5517682762f6 Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 57397
diff changeset
1119 size_t size;
5517682762f6 Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 57397
diff changeset
1120 } u;
5517682762f6 Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 57397
diff changeset
1121 } unexec_malloc_header_t;
5517682762f6 Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 57397
diff changeset
1122
5517682762f6 Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 57397
diff changeset
1123 #if MACOSX_MALLOC_MULT16
5517682762f6 Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 57397
diff changeset
1124
5517682762f6 Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 57397
diff changeset
1125 #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
1126
5517682762f6 Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 57397
diff changeset
1127 #else
5517682762f6 Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 57397
diff changeset
1128
44890
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
1129 int
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
1130 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
1131 {
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
1132 int i;
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
1133
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
1134 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
1135 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
1136 < 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
1137 return 1;
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
1138
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
1139 return 0;
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
1140 }
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
1141
62280
5517682762f6 Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 57397
diff changeset
1142 #endif
5517682762f6 Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 57397
diff changeset
1143
44890
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
1144 void *
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
1145 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
1146 {
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
1147 if (in_dumped_exec)
62280
5517682762f6 Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 57397
diff changeset
1148 {
5517682762f6 Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 57397
diff changeset
1149 void *p;
5517682762f6 Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 57397
diff changeset
1150
5517682762f6 Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 57397
diff changeset
1151 p = malloc (size);
5517682762f6 Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 57397
diff changeset
1152 #if MACOSX_MALLOC_MULT16
5517682762f6 Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 57397
diff changeset
1153 assert (((vm_address_t) p % 16) == 0);
5517682762f6 Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 57397
diff changeset
1154 #endif
5517682762f6 Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 57397
diff changeset
1155 return p;
5517682762f6 Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 57397
diff changeset
1156 }
44890
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
1157 else
62280
5517682762f6 Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 57397
diff changeset
1158 {
5517682762f6 Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 57397
diff changeset
1159 unexec_malloc_header_t *ptr;
5517682762f6 Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 57397
diff changeset
1160
5517682762f6 Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 57397
diff changeset
1161 ptr = (unexec_malloc_header_t *)
5517682762f6 Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 57397
diff changeset
1162 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
1163 ptr->u.size = size;
5517682762f6 Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 57397
diff changeset
1164 ptr++;
5517682762f6 Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 57397
diff changeset
1165 #if MACOSX_MALLOC_MULT16
5517682762f6 Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 57397
diff changeset
1166 assert (((vm_address_t) ptr % 16) == 8);
5517682762f6 Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 57397
diff changeset
1167 #endif
5517682762f6 Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 57397
diff changeset
1168 return (void *) ptr;
5517682762f6 Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 57397
diff changeset
1169 }
44890
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
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
1172 void *
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
1173 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
1174 {
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
1175 if (in_dumped_exec)
62280
5517682762f6 Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 57397
diff changeset
1176 {
5517682762f6 Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 57397
diff changeset
1177 void *p;
5517682762f6 Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 57397
diff changeset
1178
5517682762f6 Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 57397
diff changeset
1179 if (ptr_in_unexec_regions (old_ptr))
5517682762f6 Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 57397
diff changeset
1180 {
5517682762f6 Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 57397
diff changeset
1181 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
1182 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
1183
62406
788686743e76 (unexec_realloc): Move declarations before statements.
Andreas Schwab <schwab@suse.de>
parents: 62280
diff changeset
1184 p = (size_t *) malloc (new_size);
62280
5517682762f6 Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 57397
diff changeset
1185 if (size)
5517682762f6 Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 57397
diff changeset
1186 memcpy (p, old_ptr, size);
5517682762f6 Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 57397
diff changeset
1187 }
5517682762f6 Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 57397
diff changeset
1188 else
5517682762f6 Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 57397
diff changeset
1189 {
5517682762f6 Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 57397
diff changeset
1190 p = realloc (old_ptr, new_size);
5517682762f6 Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 57397
diff changeset
1191 }
5517682762f6 Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 57397
diff changeset
1192 #if MACOSX_MALLOC_MULT16
5517682762f6 Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 57397
diff changeset
1193 assert (((vm_address_t) p % 16) == 0);
5517682762f6 Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 57397
diff changeset
1194 #endif
5517682762f6 Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 57397
diff changeset
1195 return p;
5517682762f6 Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 57397
diff changeset
1196 }
44890
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
1197 else
62280
5517682762f6 Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 57397
diff changeset
1198 {
5517682762f6 Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 57397
diff changeset
1199 unexec_malloc_header_t *ptr;
5517682762f6 Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 57397
diff changeset
1200
5517682762f6 Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 57397
diff changeset
1201 ptr = (unexec_malloc_header_t *)
5517682762f6 Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 57397
diff changeset
1202 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
1203 new_size + sizeof (unexec_malloc_header_t));
5517682762f6 Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 57397
diff changeset
1204 ptr->u.size = new_size;
5517682762f6 Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 57397
diff changeset
1205 ptr++;
5517682762f6 Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 57397
diff changeset
1206 #if MACOSX_MALLOC_MULT16
5517682762f6 Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 57397
diff changeset
1207 assert (((vm_address_t) ptr % 16) == 8);
5517682762f6 Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 57397
diff changeset
1208 #endif
5517682762f6 Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 57397
diff changeset
1209 return (void *) ptr;
5517682762f6 Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 57397
diff changeset
1210 }
44890
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
1211 }
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
1212
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
1213 void
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
1214 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
1215 {
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
1216 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
1217 {
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
1218 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
1219 free (ptr);
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
1220 }
01b93e5e53a7 Patch for building Emacs on Mac OS X. April 26, 2002. See ChangeLog,
Andrew Choi <akochoi@shaw.ca>
parents:
diff changeset
1221 else
62280
5517682762f6 Include assert.h.
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 57397
diff changeset
1222 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
1223 }
52401
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 52011
diff changeset
1224
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 52011
diff changeset
1225 /* arch-tag: 1a784f7b-a184-4c4f-9544-da8619593d72
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 52011
diff changeset
1226 (do not change this comment) */