diff options
Diffstat (limited to 'src/unexmacosx.c')
-rw-r--r-- | src/unexmacosx.c | 52 |
1 files changed, 28 insertions, 24 deletions
diff --git a/src/unexmacosx.c b/src/unexmacosx.c index d6f170c9127..2e46c063e95 100644 --- a/src/unexmacosx.c +++ b/src/unexmacosx.c @@ -1,6 +1,5 @@ /* Dump Emacs in Mach-O format for use on Mac OS X. - Copyright (C) 2001, 2002, 2003, 2004, 2005, - 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc. + Copyright (C) 2001-2011 Free Software Foundation, Inc. This file is part of GNU Emacs. @@ -86,8 +85,17 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */ be changed accordingly. */ -#include <stdio.h> +/* config.h #define:s malloc/realloc/free and then includes stdlib.h. + We want the undefined versions, but if config.h includes stdlib.h + with the #define:s in place, the prototypes will be wrong and we get + warnings. To prevent that, include stdlib.h before config.h. */ + #include <stdlib.h> +#include <config.h> +#undef malloc +#undef realloc +#undef free +#include <stdio.h> #include <fcntl.h> #include <stdarg.h> #include <sys/types.h> @@ -98,10 +106,6 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */ #if defined (__ppc__) #include <mach-o/ppc/reloc.h> #endif -#include <config.h> -#undef malloc -#undef realloc -#undef free #ifdef HAVE_MALLOC_MALLOC_H #include <malloc/malloc.h> #else @@ -190,6 +194,8 @@ static off_t data_segment_old_fileoff = 0; static struct segment_command *data_segment_scp; +static void unexec_error (const char *format, ...) NO_RETURN; + /* Read N bytes from infd into memory starting at address DEST. Return true if successful, false otherwise. */ static int @@ -218,7 +224,7 @@ unexec_write_zero (off_t dest, size_t count) char buf[UNEXEC_COPY_BUFSZ]; ssize_t bytes; - bzero (buf, UNEXEC_COPY_BUFSZ); + memset (buf, 0, UNEXEC_COPY_BUFSZ); if (lseek (outfd, dest, SEEK_SET) != dest) return 0; @@ -267,7 +273,7 @@ unexec_copy (off_t dest, off_t src, ssize_t count) /* Debugging and informational messages routines. */ static void -unexec_error (char *format, ...) +unexec_error (const char *format, ...) { va_list ap; @@ -305,7 +311,7 @@ print_region (vm_address_t address, vm_size_t size, vm_prot_t prot, } static void -print_region_list () +print_region_list (void) { struct region_t *r; @@ -316,7 +322,7 @@ print_region_list () } static void -print_regions () +print_regions (void) { task_t target_task = mach_task_self (); vm_address_t address = (vm_address_t) 0; @@ -346,7 +352,7 @@ print_regions () cannot be omitted because they some regions created at run time are read-only. */ static void -build_region_list () +build_region_list (void) { task_t target_task = mach_task_self (); vm_address_t address = (vm_address_t) 0; @@ -465,7 +471,7 @@ unexec_reader (task_t task, vm_address_t address, vm_size_t size, void **ptr) } static void -find_emacs_zone_regions () +find_emacs_zone_regions (void) { num_unexec_regions = 0; @@ -495,7 +501,7 @@ unexec_regions_sort_compare (const void *a, const void *b) } static void -unexec_regions_merge () +unexec_regions_merge (void) { int i, n; unexec_region_info r; @@ -627,7 +633,7 @@ print_load_command (struct load_command *lc) the global array lca. Store the total number of load commands in global variable nlc. */ static void -read_load_commands () +read_load_commands (void) { int i; @@ -684,8 +690,8 @@ read_load_commands () } } - printf ("Highest address of load commands in input file: %#8x\n", - infile_lc_highest_addr); + printf ("Highest address of load commands in input file: %#8lx\n", + (unsigned long)infile_lc_highest_addr); printf ("Lowest offset of all sections in __TEXT segment: %#8lx\n", text_seg_lowest_offset); @@ -1144,7 +1150,7 @@ copy_other (struct load_command *lc) /* Loop through all load commands and dump them. Then write the Mach header. */ static void -dump_it () +dump_it (void) { int i; long linkedit_delta = 0; @@ -1218,9 +1224,8 @@ dump_it () from it. The file names of the output and input files are outfile and infile, respectively. The three other parameters are ignored. */ -void -unexec (char *outfile, char *infile, void *start_data, void *start_bss, - void *entry_address) +int +unexec (const char *outfile, const char *infile) { if (in_dumped_exec) unexec_error ("Unexec from a dumped executable is not supported."); @@ -1250,11 +1255,12 @@ unexec (char *outfile, char *infile, void *start_data, void *start_bss, dump_it (); close (outfd); + return 0; } void -unexec_init_emacs_zone () +unexec_init_emacs_zone (void) { emacs_zone = malloc_create_zone (0, 0); malloc_set_zone_name (emacs_zone, "EmacsZone"); @@ -1375,5 +1381,3 @@ unexec_free (void *ptr) malloc_zone_free (emacs_zone, (unexec_malloc_header_t *) ptr - 1); } -/* arch-tag: 1a784f7b-a184-4c4f-9544-da8619593d72 - (do not change this comment) */ |