From: David Caldwell <david@porkrind.org>
To: 18505@debbugs.gnu.org
Subject: bug#18505: 24.3.93; intermittent unexec failures when building on Mac OS X 10.10 beta, Xcode 6.0
Date: Thu, 18 Sep 2014 21:13:41 -0700 [thread overview]
Message-ID: <541BAD75.9010701@porkrind.org> (raw)
[-- Attachment #1.1: Type: text/plain, Size: 1545 bytes --]
Hello,
I tried to build the latest pretest on Mac OS X Yosemite Beta with the
new Xcode 6.0 (GM) tools and ran into this error during the unexec step:
unexec: not enough room for load commands for new __DATA segments
(Full unexec log is attached).
Poking around I discovered a couple discrepancies. The "headerpad_extra"
setting in configure.ac says entries are 56 bytes, but they are actually
78 bytes (probably because the comment was originally written in the 32
bit days). Also the number of load commands needed is variable now--it
depends on how many malloc segments were found and how many it could
merge (see find_emacs_zone_regions() and unexec_regions_merge() in
unexmacosx.c).
I printed num_unexec_regions in unexmacosx.c and observed anywhere
from about 14 to 34 regions needed. But given that it seems to be
different on every run and it's super annoying to debug when you run out
of space, I suggest bumping headerpad_extra up to 0x1000. This gives
about 1.5KB of headroom (or wasted space, depending on how you look at
it) and allows for 52 load commands, which should be future proof for
quite a while. I have attached a patch for configure.ac that does this
and changes the comment to reflect my understanding.
I've also provided a patch that makes the unexec error more helpful: it
computes the size needed for headerpad_extra given the number of load
commands that it needed for that particular unexec run.
I assume this affects the trunk code, too, though I didn't look at it.
-David
[-- Attachment #1.2: increase_headerpad_extra.patch --]
[-- Type: text/plain, Size: 1143 bytes --]
--- configure.ac.orig 2014-09-18 18:00:52.000000000 -0700
+++ configure.ac 2014-09-18 20:51:55.000000000 -0700
@@ -4856,17 +4856,19 @@
darwin)
## The -headerpad option tells ld (see man page) to leave room at the
## end of the header for adding load commands. Needed for dumping.
- ## 0x690 is the total size of 30 segment load commands (at 56
- ## each); under Cocoa 31 commands are required.
+ ## 0x1000 is enough for roughly 52 load commands on the x86_64
+ ## architecture (where they are 78 bytes each). The actual number of
+ ## load commands added is not consistent but normally ranges from
+ ## about 14 to about 34. Setting it high gets us plenty of slop and
+ ## only costs about 1.5K of wasted binary space.
+ headerpad_extra=1000
if test "$HAVE_NS" = "yes"; then
libs_nsgui="-framework AppKit"
if test "$NS_IMPL_COCOA" = "yes"; then
libs_nsgui="$libs_nsgui -framework IOKit"
fi
- headerpad_extra=6C8
else
libs_nsgui=
- headerpad_extra=690
fi
LD_SWITCH_SYSTEM_TEMACS="-fno-pie -prebind $libs_nsgui -Xlinker -headerpad -Xlinker $headerpad_extra"
[-- Attachment #1.3: helpful_unexec_error.patch --]
[-- Type: text/plain, Size: 598 bytes --]
--- src/unexmacosx.c.orig 2014-09-18 20:53:21.000000000 -0700
+++ src/unexmacosx.c 2014-09-18 21:10:42.000000000 -0700
@@ -1302,7 +1306,9 @@
}
if (curr_header_offset > text_seg_lowest_offset)
- unexec_error ("not enough room for load commands for new __DATA segments");
+ unexec_error ("not enough room for load commands for new __DATA segments"
+ " (increase headerpad_extra in configure.in to at least %lX)",
+ num_unexec_regions * sizeof (struct segment_command));
printf ("%ld unused bytes follow Mach-O header\n",
text_seg_lowest_offset - curr_header_offset);
[-- Attachment #1.4: unexec-log.txt --]
[-- Type: text/plain, Size: 13359 bytes --]
for file in `find . -type d -print`; do case $file in .*/cedet* | .*/leim* ) ;; *) wins="$wins${wins:+ }$file" ;; esac; done; \
for file in $wins; do \
./../build-aux/update-subdirs $file; \
done;
if test "no" = "yes"; then \
rm -f bootstrap-emacs; \
ln temacs bootstrap-emacs; \
else \
./temacs --batch --load loadup bootstrap || exit 1; \
test "X" = X || -zex emacs; \
mv -f emacs bootstrap-emacs; \
fi
Loading loadup.el (source)...
Using load-path (/var/tmp/emacs-24.3.93/lisp /var/tmp/emacs-24.3.93/lisp/emacs-lisp /var/tmp/emacs-24.3.93/lisp/language /var/tmp/emacs-24.3.93/lisp/international /var/tmp/emacs-24.3.93/lisp/textmodes /var/tmp/emacs-24.3.93/lisp/vc)
Loading emacs-lisp/byte-run...
Loading emacs-lisp/backquote...
Loading subr...
Loading version...
Loading widget...
Loading custom...
Loading emacs-lisp/map-ynp...
Loading international/mule...
Loading international/mule-conf...
Loading env...
Loading format...
Loading bindings...
Loading cus-start...
Loading window...
Loading files...
Loading emacs-lisp/macroexp...
Loading cus-face...
Loading faces...
Loading button...
Loading startup...
Loading /var/tmp/emacs-24.3.93/lisp/loaddefs.el (source)...
Loading emacs-lisp/nadvice...
Loading minibuffer...
Loading abbrev...
Loading simple...
Loading help...
Loading jka-cmpr-hook...
Loading epa-hook...
Loading international/mule-cmds...
Loading case-table...
Loading /var/tmp/emacs-24.3.93/lisp/international/charprop.el (source)...
Loading international/characters...
Loading composite...
Loading language/chinese...
Loading language/cyrillic...
Loading language/indian...
Loading language/sinhala...
Loading language/english...
Loading language/ethiopic...
Loading language/european...
Loading language/czech...
Loading language/slovak...
Loading language/romanian...
Loading language/greek...
Loading language/hebrew...
Loading language/japanese...
Loading /var/tmp/emacs-24.3.93/lisp/international/cp51932.el (source)...
Loading /var/tmp/emacs-24.3.93/lisp/international/eucjp-ms.el (source)...
Loading language/korean...
Loading language/lao...
Loading language/tai-viet...
Loading language/thai...
Loading language/tibetan...
Loading language/vietnamese...
Loading language/misc-lang...
Loading language/utf-8-lang...
Loading language/georgian...
Loading language/khmer...
Loading language/burmese...
Loading language/cham...
Loading indent...
Loading frame...
Loading term/tty-colors...
Loading font-core...
Loading facemenu...
Loading emacs-lisp/syntax...
Loading font-lock...
Loading jit-lock...
Loading mouse...
Loading scroll-bar...
Loading select...
Loading emacs-lisp/timer...
Loading isearch...
Loading rfn-eshadow...
Loading menu-bar...
Loading emacs-lisp/lisp...
Loading textmodes/page...
Loading register...
Loading textmodes/paragraphs...
Loading progmodes/prog-mode...
Loading emacs-lisp/lisp-mode...
Loading textmodes/text-mode...
Loading textmodes/fill...
Loading newcomment...
Loading replace...
Loading emacs-lisp/tabulated-list...
Loading buff-menu...
Loading fringe...
Loading emacs-lisp/regexp-opt...
Loading image...
Loading international/fontset...
Loading dnd...
Loading tool-bar...
Loading term/common-win...
Loading term/ns-win...
Loading mwheel...
Loading emacs-lisp/float-sup...
Loading vc/vc-hooks...
Loading vc/ediff-hook...
Loading uniquify...
Loading electric...
Loading tooltip...
Loading /var/tmp/emacs-24.3.93/lisp/leim/leim-list.el (source)...
Finding pointers to doc strings...
Finding pointers to doc strings...done
Dumping under the name emacs
--- List of All Regions ---
address size prot maxp
--- List of Regions to be Dumped ---
address size prot maxp
--- Header Information ---
Magic = 0xfeedfacf
CPUType = 16777223
CPUSubType = -2147483645
FileType = 0x2
NCmds = 30
SizeOfCmds = 4160
Flags = 0x00000085
Highest address of load commands in input file: 0x100682000
Lowest offset of all sections in __TEXT segment: 0x17c0
--- List of Load Commands in Input File ---
# cmd cmdsize name address size
0 LC_SEGMENT_64 72 __PAGEZERO 0 0x100000000
1 LC_SEGMENT_64 952 __TEXT 0x100000000 0x20f000
__text 0x1000017c0 0x1db19b
__stubs 0x1001dc95c 0xb4c
__stub_helper 0x1001dd4a8 0x12e4
__const 0x1001de790 0x13334
__cstring 0x1001f1ad0 0x1507a
__objc_methname 0x100206b4a 0x386f
__objc_classname 0x10020a3b9 0x12b
__objc_methtype 0x10020a4e4 0x1579
__gcc_except_tab 0x10020ba60 0x4c
__unwind_info 0x10020baac 0x2b24
__eh_frame 0x10020e5d0 0xa28
2 LC_SEGMENT_64 1512 __DATA 0x10020f000 0x3a7000
__nl_symbol_ptr 0x10020f000 0x10
__got 0x10020f010 0x2c8
__la_symbol_ptr 0x10020f2d8 0xf10
__const 0x1002101f0 0x3b30
__cfstring 0x100213d20 0x8e0
__objc_classlist 0x100214600 0x78
__objc_catlist 0x100214678 0x8
__objc_protolist 0x100214680 0x30
__objc_imageinfo 0x1002146b0 0x8
__objc_const 0x1002146b8 0x3c68
__objc_selrefs 0x100218320 0x1170
__objc_classrefs 0x100219490 0x220
__objc_superrefs 0x1002196b0 0x60
__objc_ivar 0x100219710 0x220
__objc_data 0x100219930 0x4b0
__data 0x100219de0 0x3205bc
__common 0x10053a3a0 0x4179
__bss 0x10053e520 0x76e48
3 LC_SEGMENT_64 72 __LINKEDIT 0x1005b6000 0xcc000
4 LC_DYLD_INFO_ONLY 48
5 LC_SYMTAB 24
6 LC_DYSYMTAB 80
7 LC_LOAD_DYLINKER 32
8 LC_UUID 24
9 LC_VERSION_MIN_MACOSX 16
10 LC_SOURCE_VERSION 16
11 LC_MAIN 24
12 LC_LOAD_DYLIB 88
13 LC_LOAD_DYLIB 88
14 LC_LOAD_DYLIB 96
15 LC_LOAD_DYLIB 96
16 LC_LOAD_DYLIB 56
17 LC_LOAD_DYLIB 56
18 LC_LOAD_DYLIB 88
19 LC_LOAD_DYLIB 56
20 LC_LOAD_DYLIB 48
21 LC_LOAD_DYLIB 112
22 LC_LOAD_DYLIB 104
23 LC_LOAD_DYLIB 104
24 LC_LOAD_DYLIB 96
25 LC_LOAD_DYLIB 96
26 LC_LOAD_DYLIB 56
27 LC_FUNCTION_STARTS 16
28 LC_DATA_IN_CODE 16
29 LC_DYLIB_CODE_SIGN_DRS 16
0x107cfc080 (sz: 0x3f24/ 0x3f28)
0x107c00000 (sz: 0x3515/ 0xfc080)
0x100efc080 (sz: 0x3f24/ 0x3f28)
0x100e00000 (sz: 0x99505/ 0xfc080)
0x103dfc080 (sz: 0x3f24/ 0x3f28)
0x103d00000 (sz: 0x5fc65/ 0xfc080)
0x103ffc080 (sz: 0x3f24/ 0x3f28)
0x103f00000 (sz: 0x44205/ 0xfc080)
0x107bfc080 (sz: 0x3f24/ 0x3f28)
0x107b00000 (sz: 0x69df/ 0xfc080)
0x1078fc080 (sz: 0x3f24/ 0x3f28)
0x107800000 (sz: 0x20875/ 0xfc080)
0x103efc080 (sz: 0x3f24/ 0x3f28)
0x103e00000 (sz: 0x4ae5/ 0xfc080)
0x10e0fc080 (sz: 0x3f24/ 0x3f28)
0x10e000000 (sz: 0x1e5/ 0xfc080)
0x101ff8000 (sz: 0x3658/ 0x7fa0)
0x101800000 (sz: 0x3633fd/0x7f8000)
0x109ff8000 (sz: 0xc4/ 0x7fa0)
0x109800000 (sz: 0x9feb/0x7f8000)
0x1097f8000 (sz: 0x75a/ 0x7fa0)
0x109000000 (sz: 0x737ff/0x7f8000)
0x108ff8000 (sz: 0x1018/ 0x7fa0)
0x108800000 (sz: 0xff405/0x7f8000)
0x1077f8000 (sz: 0x2700/ 0x7fa0)
0x107000000 (sz: 0x26bc58/0x7f8000)
0x105ff8000 (sz: 0xba/ 0x7fa0)
0x105800000 (sz: 0x7a8f/0x7f8000)
0x1057f8000 (sz: 0x1a3e/ 0x7fa0)
0x105000000 (sz: 0x1a17fd/0x7f8000)
0x10dff8000 (sz: 0x6e/ 0x7fa0)
0x10d800000 (sz: 0x49f1/0x7f8000)
0x100dfc000 (sz: 0/ 0x1000)
--- Load Commands written to Output File ---
Writing segment __PAGEZERO @ 0 ( 0/0x100000000 @ 0)
Writing segment __TEXT @ 0 (0x20f000/0x20f000 @ 0x100000000)
Writing segment __DATA @ 0x20f000 (0x3a7000/0x3a7000 @ 0x10020f000)
section __nl_symbol_ptr at 0x20f000 - 0x20f010 (sz: 0x10)
section __got at 0x20f010 - 0x20f2d8 (sz: 0x2c8)
section __la_symbol_ptr at 0x20f2d8 - 0x2101e8 (sz: 0xf10)
section __const at 0x2101f0 - 0x213d20 (sz: 0x3b30)
section __cfstring at 0x213d20 - 0x214600 (sz: 0x8e0)
section __objc_classlist at 0x214600 - 0x214678 (sz: 0x78)
section __objc_catlist at 0x214678 - 0x214680 (sz: 0x8)
section __objc_protolist at 0x214680 - 0x2146b0 (sz: 0x30)
section __objc_imageinfo at 0x2146b0 - 0x2146b8 (sz: 0x8)
section __objc_const at 0x2146b8 - 0x218320 (sz: 0x3c68)
section __objc_selrefs at 0x218320 - 0x219490 (sz: 0x1170)
section __objc_classrefs at 0x219490 - 0x2196b0 (sz: 0x220)
section __objc_superrefs at 0x2196b0 - 0x219710 (sz: 0x60)
section __objc_ivar at 0x219710 - 0x219930 (sz: 0x220)
section __objc_data at 0x219930 - 0x219de0 (sz: 0x4b0)
section __data at 0x219de0 - 0x53a39c (sz: 0x3205bc)
section __common at 0x53a3a0 - 0x53e519 (sz: 0x4179)
section __bss at 0x53e520 - 0x5b5368 (sz: 0x76e48)
Writing segment __DATA @ 0x5b6000 ( 0/ 0x1000 @ 0x100dfc000)
Writing segment __DATA @ 0x5b6000 ( 0x99505/ 0xfc000 @ 0x100e00000)
Writing segment __DATA @ 0x650000 ( 0x3fa4/ 0x3fa8 @ 0x100efc000)
Writing segment __DATA @ 0x654000 (0x3633fd/0x7f8000 @ 0x101800000)
Writing segment __DATA @ 0x9b8000 ( 0x3658/ 0x7fa0 @ 0x101ff8000)
Writing segment __DATA @ 0x9bc000 ( 0x5fc65/ 0xfc000 @ 0x103d00000)
Writing segment __DATA @ 0xa1c000 ( 0x3fa4/ 0x3fa8 @ 0x103dfc000)
Writing segment __DATA @ 0xa20000 ( 0x4ae5/ 0xfc000 @ 0x103e00000)
Writing segment __DATA @ 0xa25000 ( 0x3fa4/ 0x3fa8 @ 0x103efc000)
Writing segment __DATA @ 0xa29000 ( 0x44205/ 0xfc000 @ 0x103f00000)
Writing segment __DATA @ 0xa6e000 ( 0x3fa4/ 0x3fa8 @ 0x103ffc000)
Writing segment __DATA @ 0xa72000 (0x1a17fd/0x7f8000 @ 0x105000000)
Writing segment __DATA @ 0xc14000 ( 0x1a3e/ 0x7fa0 @ 0x1057f8000)
Writing segment __DATA @ 0xc16000 ( 0x7a8f/0x7f8000 @ 0x105800000)
Writing segment __DATA @ 0xc1e000 ( 0xba/ 0x7fa0 @ 0x105ff8000)
Writing segment __DATA @ 0xc1f000 (0x26bc58/0x7f8000 @ 0x107000000)
Writing segment __DATA @ 0xe8b000 ( 0x2700/ 0x7fa0 @ 0x1077f8000)
Writing segment __DATA @ 0xe8e000 ( 0x20875/ 0xfc000 @ 0x107800000)
Writing segment __DATA @ 0xeaf000 ( 0x3fa4/ 0x3fa8 @ 0x1078fc000)
Writing segment __DATA @ 0xeb3000 ( 0x69df/ 0xfc000 @ 0x107b00000)
Writing segment __DATA @ 0xeba000 ( 0x3fa4/ 0x3fa8 @ 0x107bfc000)
Writing segment __DATA @ 0xebe000 ( 0x3515/ 0xfc000 @ 0x107c00000)
Writing segment __DATA @ 0xec2000 ( 0x3fa4/ 0x3fa8 @ 0x107cfc000)
Writing segment __DATA @ 0xec6000 ( 0xff405/0x7f8000 @ 0x108800000)
Writing segment __DATA @ 0xfc6000 ( 0x1018/ 0x7fa0 @ 0x108ff8000)
Writing segment __DATA @ 0xfc8000 ( 0x737ff/0x7f8000 @ 0x109000000)
Writing segment __DATA @ 0x103c000 ( 0x75a/ 0x7fa0 @ 0x1097f8000)
Writing segment __DATA @ 0x103d000 ( 0x9feb/0x7f8000 @ 0x109800000)
Writing segment __DATA @ 0x1047000 ( 0xc4/ 0x7fa0 @ 0x109ff8000)
Writing segment __DATA @ 0x1048000 ( 0x49f1/0x7f8000 @ 0x10d800000)
Writing segment __DATA @ 0x104d000 ( 0x6e/ 0x7fa0 @ 0x10dff8000)
Writing segment __DATA @ 0x104e000 ( 0x1e5/ 0xfc000 @ 0x10e000000)
Writing segment __DATA @ 0x104f000 ( 0x3fa4/ 0x3fa8 @ 0x10e0fc000)
Writing segment __LINKEDIT @ 0x1053000 ( 0xcb444/ 0xcc000 @ 0x1005b6000)
Writing LC_DYLD_INFO_ONLY command
Writing LC_SYMTAB command
Writing LC_DYSYMTAB command
Writing LC_LOAD_DYLINKER command
Writing LC_UUID command
Writing LC_VERSION_MIN_MACOSX command
Writing LC_SOURCE_VERSION command
Writing LC_MAIN command
Writing LC_LOAD_DYLIB command
Writing LC_LOAD_DYLIB command
Writing LC_LOAD_DYLIB command
Writing LC_LOAD_DYLIB command
Writing LC_LOAD_DYLIB command
Writing LC_LOAD_DYLIB command
Writing LC_LOAD_DYLIB command
Writing LC_LOAD_DYLIB command
Writing LC_LOAD_DYLIB command
Writing LC_LOAD_DYLIB command
Writing LC_LOAD_DYLIB command
Writing LC_LOAD_DYLIB command
Writing LC_LOAD_DYLIB command
Writing LC_LOAD_DYLIB command
Writing LC_LOAD_DYLIB command
Writing LC_FUNCTION_STARTS command
Writing LC_DATA_IN_CODE command
Writing LC_DYLIB_CODE_SIGN_DRS command
unexec: not enough room for load commands for new __DATA segments
make[1]: *** [bootstrap-emacs] Error 1
make: *** [src] Error 2
[-- Attachment #2: S/MIME Cryptographic Signature --]
[-- Type: application/pkcs7-signature, Size: 4219 bytes --]
next reply other threads:[~2014-09-19 4:13 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-09-19 4:13 David Caldwell [this message]
2014-09-20 15:31 ` bug#18505: 24.3.93; intermittent unexec failures when building on Mac OS X 10.10 beta, Xcode 6.0 Jan Djärv
2014-09-20 18:31 ` David Caldwell
2014-09-21 9:15 ` Jan Djärv
2014-09-21 18:07 ` David Caldwell
2014-09-21 20:37 ` Jan Djärv
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=541BAD75.9010701@porkrind.org \
--to=david@porkrind.org \
--cc=18505@debbugs.gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.