From 82eaabf52123bfaf45adb30d1e48271bd9207cae Mon Sep 17 00:00:00 2001 From: Christopher Faylor Date: Sun, 7 Aug 2005 02:38:13 +0000 Subject: [PATCH] * Makefile.in: Warn when end of cygheap is not on 64k boundary. * cygwin.sc: Try harder to ensure that cygheap is on a 64k boundary. Move cygheap to end of image to stop interference from unstripped debug regions. --- winsup/cygwin/ChangeLog | 7 ++++++ winsup/cygwin/Makefile.in | 6 +++++ winsup/cygwin/cygwin.sc | 48 +++++++++++++++++++-------------------- winsup/cygwin/dcrt0.cc | 3 +++ 4 files changed, 40 insertions(+), 24 deletions(-) diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog index 1bc93e2ec..064f21f0c 100644 --- a/winsup/cygwin/ChangeLog +++ b/winsup/cygwin/ChangeLog @@ -1,3 +1,10 @@ +2005-08-06 Christopher Faylor + + * Makefile.in: Warn when end of cygheap is not on 64k boundary. + * cygwin.sc: Try harder to ensure that cygheap is on a 64k boundary. + Move cygheap to end of image to stop interference from unstripped debug + regions. + 2005-08-06 Christopher Faylor * include/endian.h: Move everything into this file and define things diff --git a/winsup/cygwin/Makefile.in b/winsup/cygwin/Makefile.in index 087289b1c..9949a1ee1 100644 --- a/winsup/cygwin/Makefile.in +++ b/winsup/cygwin/Makefile.in @@ -372,6 +372,12 @@ $(TEST_DLL_NAME): $(LDSCRIPT) $(DLL_OFILES) $(DLL_IMPORTS) $(LIBSERVER) $(LIBC) -e $(DLL_ENTRY) $(DEF_FILE) $(DLL_OFILES) version.o winver.o \ $(MALLOC_OBJ) $(LIBSERVER) $(LIBM) $(LIBC) \ -lgcc $(DLL_IMPORTS) + @$(NM) $@ | perl -Minteger -n -e '/^(61[0-9a-f]+) A __cygheap_end/ and do {$$cygheap_end = $$1; exit;};\ + END { \ + die "ERROR: _cygheap_end not found in $@\n" unless defined($$cygheap_end); \ + die "ERROR: _cygheap_end is not on a 64k boundary (0x$$cygheap_end)!\n" if (hex($$cygheap_end) & 0xffff);\ + exit 0; \ + }' @ln -f $@ new-$(DLL_NAME) # Rule to build libcygwin.a diff --git a/winsup/cygwin/cygwin.sc b/winsup/cygwin/cygwin.sc index 9270ab5e2..e2a83d05d 100644 --- a/winsup/cygwin/cygwin.sc +++ b/winsup/cygwin/cygwin.sc @@ -70,30 +70,6 @@ SECTIONS { *(.cygwin_dll_common) } - .idata ALIGN(__section_alignment__) : - { - /* This cannot currently be handled with grouped sections. - See pe.em:sort_sections. */ - SORT(*)(.idata$2) - SORT(*)(.idata$3) - /* These zeroes mark the end of the import list. */ - LONG (0); LONG (0); LONG (0); LONG (0); LONG (0); - SORT(*)(.idata$4) - SORT(*)(.idata$5) - SORT(*)(.idata$6) - SORT(*)(.idata$7) - . = ALIGN(16); - __cygheap_start = ABSOLUTE(.); - } - .cygheap ALIGN(__section_alignment__): - { - __cygheap_mid = .; - *(.cygheap) - . = ALIGN(512 * 1024, 0x10000); - . += 8192; /* inexplicably needed for alignment on 64K boundary?!? */ - } - __cygheap_end = ABSOLUTE(.); - __cygheap_end1 = __cygheap_mid + SIZEOF(.cygheap); /DISCARD/ : { *(.debug$S) @@ -122,4 +98,28 @@ SECTIONS .debug_macinfo ALIGN(__section_alignment__) (NOLOAD) : { *(.debug_macinfo) } .debug_macinfo ALIGN(__section_alignment__) (NOLOAD) : { *(.debug_macinfo) } .debug_ranges ALIGN(__section_alignment__) (NOLOAD) : { *(.debug_ranges) } + .idata ALIGN(__section_alignment__) : + { + /* This cannot currently be handled with grouped sections. + See pe.em:sort_sections. */ + SORT(*)(.idata$2) + SORT(*)(.idata$3) + /* These zeroes mark the end of the import list. */ + LONG (0); LONG (0); LONG (0); LONG (0); LONG (0); + SORT(*)(.idata$4) + SORT(*)(.idata$5) + SORT(*)(.idata$6) + SORT(*)(.idata$7) + . = ALIGN(16); + __cygheap_start = ABSOLUTE(.); + . = ALIGN(0x10000); + } + .cygheap ALIGN(__section_alignment__) : + { + __cygheap_mid = .; + *(.cygheap) + . = ALIGN(512 * 1024, 0x10000); + } + __cygheap_end = ABSOLUTE(.); + __cygheap_end1 = __cygheap_mid + SIZEOF(.cygheap); } diff --git a/winsup/cygwin/dcrt0.cc b/winsup/cygwin/dcrt0.cc index 9fd9fa8ba..4286dd364 100644 --- a/winsup/cygwin/dcrt0.cc +++ b/winsup/cygwin/dcrt0.cc @@ -725,6 +725,9 @@ dll_crt0_1 (char *) check_sanity_and_sync (user_data); malloc_init (); + int i = 0; + while (i) + cmalloc (HEAP_STR, 2000000); /* Initialize SIGSEGV handling, etc. */ init_exceptions (&cygwin_except_entry);