Commit 1dd7ccf2 authored by Andrew Choi's avatar Andrew Choi

unexmacosx.c: Sort and merge unexec regions before dumping them.

parent 5b4ffca2
2003-07-22 Andrew Choi <akochoi@shaw.ca>
* unexmacosx.c (unexec_regions_sort_compare):
(unexec_regions_merge): New functions. Sort and merge unexec
regions before dumping them.
2003-07-22 Dave Love <fx@gnu.org> 2003-07-22 Dave Love <fx@gnu.org>
* xfns.c [HAVE_PNG]: Consider both png.h and libpng/png.h. * xfns.c [HAVE_PNG]: Consider both png.h and libpng/png.h.
......
...@@ -364,7 +364,7 @@ build_region_list () ...@@ -364,7 +364,7 @@ build_region_list ()
} }
#define MAX_UNEXEC_REGIONS 30 #define MAX_UNEXEC_REGIONS 200
int num_unexec_regions; int num_unexec_regions;
vm_range_t unexec_regions[MAX_UNEXEC_REGIONS]; vm_range_t unexec_regions[MAX_UNEXEC_REGIONS];
...@@ -403,6 +403,46 @@ find_emacs_zone_regions () ...@@ -403,6 +403,46 @@ find_emacs_zone_regions ()
unexec_regions_recorder); unexec_regions_recorder);
} }
static int
unexec_regions_sort_compare (const void *a, const void *b)
{
vm_address_t aa = ((vm_range_t *) a)->address;
vm_address_t bb = ((vm_range_t *) b)->address;
if (aa < bb)
return -1;
else if (aa > bb)
return 1;
else
return 0;
}
static void
unexec_regions_merge ()
{
int i, n;
vm_range_t r;
qsort (unexec_regions, num_unexec_regions, sizeof (unexec_regions[0]),
&unexec_regions_sort_compare);
n = 0;
r = unexec_regions[0];
for (i = 1; i < num_unexec_regions; i++)
{
if (r.address + r.size == unexec_regions[i].address)
{
r.size += unexec_regions[i].size;
}
else
{
unexec_regions[n++] = r;
r = unexec_regions[i];
}
}
unexec_regions[n++] = r;
num_unexec_regions = n;
}
/* More informational messages routines. */ /* More informational messages routines. */
...@@ -863,6 +903,7 @@ unexec (char *outfile, char *infile, void *start_data, void *start_bss, ...@@ -863,6 +903,7 @@ unexec (char *outfile, char *infile, void *start_data, void *start_bss,
read_load_commands (); read_load_commands ();
find_emacs_zone_regions (); find_emacs_zone_regions ();
unexec_regions_merge ();
in_dumped_exec = 1; in_dumped_exec = 1;
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment