X-Git-Url: http://git.hcoop.net/bpt/emacs.git/blobdiff_plain/025875980c7fbde1d555bff245053241951e6909..89f20e05797d4d69a0731559c87c656fd54ac338:/src/unexcw.c diff --git a/src/unexcw.c b/src/unexcw.c index af93e158e1..12435a8505 100644 --- a/src/unexcw.c +++ b/src/unexcw.c @@ -20,9 +20,8 @@ along with GNU Emacs. If not, see . */ #include #include "unexec.h" -#include "w32common.h" +#include "lisp.h" -#include #include #include #include @@ -31,6 +30,8 @@ along with GNU Emacs. If not, see . */ #define DOTEXE ".exe" +extern void report_sheap_usage (int); + extern int bss_sbrk_did_unexec; extern int __malloc_initialized; @@ -73,7 +74,11 @@ read_exe_header (int fd, exe_header_t * exe_header_buffer) assert (exe_header_buffer->file_header.e_magic == 0x5a4d); assert (exe_header_buffer->file_header.nt_signature == 0x4550); +#ifdef __x86_64__ + assert (exe_header_buffer->file_header.f_magic == 0x8664); +#else assert (exe_header_buffer->file_header.f_magic == 0x014c); +#endif assert (exe_header_buffer->file_header.f_nscns > 0); assert (exe_header_buffer->file_header.f_nscns <= sizeof (exe_header_buffer->section_header) / @@ -85,7 +90,11 @@ read_exe_header (int fd, exe_header_t * exe_header_buffer) sizeof (exe_header_buffer->file_optional_header)); assert (ret == sizeof (exe_header_buffer->file_optional_header)); +#ifdef __x86_64__ + assert (exe_header_buffer->file_optional_header.magic == 0x020b); +#else assert (exe_header_buffer->file_optional_header.magic == 0x010b); +#endif for (i = 0; i < exe_header_buffer->file_header.f_nscns; ++i) { @@ -132,7 +141,7 @@ fixup_executable (int fd) exe_header->file_optional_header.ImageBase + exe_header->section_header[i].s_paddr; if (debug_unexcw) - printf ("%8s start 0x%08x end 0x%08x\n", + printf ("%8s start %#lx end %#lx\n", exe_header->section_header[i].s_name, start_address, end_address); if (my_edata >= (char *) start_address @@ -149,7 +158,7 @@ fixup_executable (int fd) assert (ret == my_edata - (char *) start_address); ++found_data; if (debug_unexcw) - printf (" .data, mem start 0x%08x mem length %d\n", + printf (" .data, mem start %#lx mem length %d\n", start_address, my_edata - (char *) start_address); if (debug_unexcw) printf (" .data, file start %d file length %d\n", @@ -233,7 +242,7 @@ fixup_executable (int fd) __malloc_initialized = 1; assert (ret == (my_endbss - (char *) start_address)); if (debug_unexcw) - printf (" .bss, mem start 0x%08x mem length %d\n", + printf (" .bss, mem start %#lx mem length %d\n", start_address, my_endbss - (char *) start_address); if (debug_unexcw) printf (" .bss, file start %d file length %d\n", @@ -289,9 +298,9 @@ unexec (const char *outfile, const char *infile) infile = add_exe_suffix_if_necessary (infile, infile_buffer); outfile = add_exe_suffix_if_necessary (outfile, outfile_buffer); - fd_in = open (infile, O_RDONLY | O_BINARY); + fd_in = emacs_open (infile, O_RDONLY | O_BINARY, 0); assert (fd_in >= 0); - fd_out = open (outfile, O_RDWR | O_TRUNC | O_CREAT | O_BINARY, 0755); + fd_out = emacs_open (outfile, O_RDWR | O_TRUNC | O_CREAT | O_BINARY, 0755); assert (fd_out >= 0); for (;;) { @@ -307,13 +316,13 @@ unexec (const char *outfile, const char *infile) ret2 = write (fd_out, buffer, ret); assert (ret2 == ret); } - ret = close (fd_in); + ret = emacs_close (fd_in); assert (ret == 0); bss_sbrk_did_unexec = 1; fixup_executable (fd_out); bss_sbrk_did_unexec = 0; - ret = close (fd_out); + ret = emacs_close (fd_out); assert (ret == 0); }