aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorPaul Eggert2019-01-31 07:30:32 -0800
committerPaul Eggert2019-01-31 07:57:56 -0800
commita68eee50eb515b28b448894299334afced26ef78 (patch)
treed6d98e3bd6d5176234fae3d07d21691cee1001e6 /src
parent08bc407a228796b64e321cb28b38b39062ab1732 (diff)
downloademacs-a68eee50eb515b28b448894299334afced26ef78.tar.gz
emacs-a68eee50eb515b28b448894299334afced26ef78.zip
Minor pdumper simplification
* src/pdumper.c (dump_roots, pdumper_load): Simplify initialization. (dump_bitset_init, pdumper_load): Omit unnecessary assignments. (dump_bitset_destroy): Remove; never called. All callers removed. (dump_do_dump_relocation, pdumper_load): Add FIXME comment. (pdumper_load): Simplify by assuming C99. Remove unused local.
Diffstat (limited to 'src')
-rw-r--r--src/pdumper.c43
1 files changed, 10 insertions, 33 deletions
diff --git a/src/pdumper.c b/src/pdumper.c
index f9638d43579..7a8a90d4cf3 100644
--- a/src/pdumper.c
+++ b/src/pdumper.c
@@ -1785,10 +1785,8 @@ dump_root_visitor (Lisp_Object *root_ptr, enum gc_root_type type, void *data)
1785static void 1785static void
1786dump_roots (struct dump_context *ctx) 1786dump_roots (struct dump_context *ctx)
1787{ 1787{
1788 struct gc_root_visitor visitor; 1788 struct gc_root_visitor visitor = { .visit = dump_root_visitor,
1789 memset (&visitor, 0, sizeof (visitor)); 1789 .data = ctx };
1790 visitor.visit = dump_root_visitor;
1791 visitor.data = ctx;
1792 visit_static_gc_roots (visitor); 1790 visit_static_gc_roots (visitor);
1793} 1791}
1794 1792
@@ -4949,7 +4947,6 @@ struct dump_bitset {
4949static bool 4947static bool
4950dump_bitset_init (struct dump_bitset *bitset, size_t number_bits) 4948dump_bitset_init (struct dump_bitset *bitset, size_t number_bits)
4951{ 4949{
4952 memset (bitset, 0, sizeof (*bitset));
4953 int xword_size = sizeof (bitset->bits[0]); 4950 int xword_size = sizeof (bitset->bits[0]);
4954 int bits_per_word = xword_size * CHAR_BIT; 4951 int bits_per_word = xword_size * CHAR_BIT;
4955 ptrdiff_t words_needed = DIVIDE_ROUND_UP (number_bits, bits_per_word); 4952 ptrdiff_t words_needed = DIVIDE_ROUND_UP (number_bits, bits_per_word);
@@ -4958,12 +4955,6 @@ dump_bitset_init (struct dump_bitset *bitset, size_t number_bits)
4958 return bitset->bits != NULL; 4955 return bitset->bits != NULL;
4959} 4956}
4960 4957
4961static void
4962dump_bitset_destroy (struct dump_bitset *bitset)
4963{
4964 free (bitset->bits);
4965}
4966
4967static dump_bitset_word * 4958static dump_bitset_word *
4968dump_bitset__bit_slot (const struct dump_bitset *bitset, 4959dump_bitset__bit_slot (const struct dump_bitset *bitset,
4969 size_t bit_number) 4960 size_t bit_number)
@@ -5290,8 +5281,6 @@ dump_do_dump_relocation (
5290 struct bignum_reload_info reload_info; 5281 struct bignum_reload_info reload_info;
5291 verify (sizeof (reload_info) <= sizeof (bignum->value)); 5282 verify (sizeof (reload_info) <= sizeof (bignum->value));
5292 memcpy (&reload_info, &bignum->value, sizeof (reload_info)); 5283 memcpy (&reload_info, &bignum->value, sizeof (reload_info));
5293 memset (&bignum->value, 0, sizeof (bignum->value));
5294 mpz_init (bignum->value);
5295 const mp_limb_t *limbs = 5284 const mp_limb_t *limbs =
5296 dump_ptr (dump_base, reload_info.data_location); 5285 dump_ptr (dump_base, reload_info.data_location);
5297 mpz_roinit_n (bignum->value, limbs, reload_info.nlimbs); 5286 mpz_roinit_n (bignum->value, limbs, reload_info.nlimbs);
@@ -5395,9 +5384,6 @@ enum dump_section
5395enum pdumper_load_result 5384enum pdumper_load_result
5396pdumper_load (const char *dump_filename) 5385pdumper_load (const char *dump_filename)
5397{ 5386{
5398 enum pdumper_load_result err = PDUMPER_LOAD_ERROR;
5399
5400 int dump_fd = -1;
5401 intptr_t dump_size; 5387 intptr_t dump_size;
5402 struct stat stat; 5388 struct stat stat;
5403 uintptr_t dump_base; 5389 uintptr_t dump_base;
@@ -5405,18 +5391,14 @@ pdumper_load (const char *dump_filename)
5405 dump_off adj_discardable_start; 5391 dump_off adj_discardable_start;
5406 5392
5407 struct dump_bitset mark_bits; 5393 struct dump_bitset mark_bits;
5408 bool free_mark_bits = false;
5409 size_t mark_bits_needed; 5394 size_t mark_bits_needed;
5410 5395
5411 struct dump_header header_buf; 5396 struct dump_header header_buf = { 0 };
5412 struct dump_header *header = &header_buf; 5397 struct dump_header *header = &header_buf;
5413 struct dump_memory_map sections[NUMBER_DUMP_SECTIONS]; 5398 struct dump_memory_map sections[NUMBER_DUMP_SECTIONS] = { 0 };
5414 5399
5415 const struct timespec start_time = current_timespec (); 5400 const struct timespec start_time = current_timespec ();
5416 char *dump_filename_copy = NULL; 5401 char *dump_filename_copy;
5417
5418 memset (&header_buf, 0, sizeof (header_buf));
5419 memset (&sections, 0, sizeof (sections));
5420 5402
5421 /* Overwriting an initialized Lisp universe will not go well. */ 5403 /* Overwriting an initialized Lisp universe will not go well. */
5422 eassert (!initialized); 5404 eassert (!initialized);
@@ -5424,8 +5406,8 @@ pdumper_load (const char *dump_filename)
5424 /* We can load only one dump. */ 5406 /* We can load only one dump. */
5425 eassert (!dump_loaded_p ()); 5407 eassert (!dump_loaded_p ());
5426 5408
5427 err = PDUMPER_LOAD_FILE_NOT_FOUND; 5409 enum pdumper_load_result err = PDUMPER_LOAD_FILE_NOT_FOUND;
5428 dump_fd = emacs_open (dump_filename, O_RDONLY, 0); 5410 int dump_fd = emacs_open (dump_filename, O_RDONLY, 0);
5429 if (dump_fd < 0) 5411 if (dump_fd < 0)
5430 goto out; 5412 goto out;
5431 5413
@@ -5470,10 +5452,10 @@ pdumper_load (const char *dump_filename)
5470 goto out; 5452 goto out;
5471 } 5453 }
5472 5454
5473 err = PDUMPER_LOAD_OOM; 5455 /* FIXME: The comment at the start of this function says it should
5456 not use xmalloc, but xstrdup calls xmalloc. Either fix the
5457 comment or fix the following code. */
5474 dump_filename_copy = xstrdup (dump_filename); 5458 dump_filename_copy = xstrdup (dump_filename);
5475 if (!dump_filename_copy)
5476 goto out;
5477 5459
5478 err = PDUMPER_LOAD_OOM; 5460 err = PDUMPER_LOAD_OOM;
5479 5461
@@ -5518,13 +5500,11 @@ pdumper_load (const char *dump_filename)
5518 DIVIDE_ROUND_UP (header->discardable_start, DUMP_ALIGNMENT); 5500 DIVIDE_ROUND_UP (header->discardable_start, DUMP_ALIGNMENT);
5519 if (!dump_bitset_init (&mark_bits, mark_bits_needed)) 5501 if (!dump_bitset_init (&mark_bits, mark_bits_needed))
5520 goto out; 5502 goto out;
5521 free_mark_bits = true;
5522 5503
5523 /* Point of no return. */ 5504 /* Point of no return. */
5524 err = PDUMPER_LOAD_SUCCESS; 5505 err = PDUMPER_LOAD_SUCCESS;
5525 dump_base = (uintptr_t) sections[DS_HOT].mapping; 5506 dump_base = (uintptr_t) sections[DS_HOT].mapping;
5526 gflags.dumped_with_pdumper_ = true; 5507 gflags.dumped_with_pdumper_ = true;
5527 free_mark_bits = false;
5528 dump_private.header = *header; 5508 dump_private.header = *header;
5529 dump_private.mark_bits = mark_bits; 5509 dump_private.mark_bits = mark_bits;
5530 dump_public.start = dump_base; 5510 dump_public.start = dump_base;
@@ -5547,13 +5527,10 @@ pdumper_load (const char *dump_filename)
5547 timespec_sub (current_timespec (), start_time); 5527 timespec_sub (current_timespec (), start_time);
5548 dump_private.load_time = timespectod (load_timespec); 5528 dump_private.load_time = timespectod (load_timespec);
5549 dump_private.dump_filename = dump_filename_copy; 5529 dump_private.dump_filename = dump_filename_copy;
5550 dump_filename_copy = NULL;
5551 5530
5552 out: 5531 out:
5553 for (int i = 0; i < ARRAYELTS (sections); ++i) 5532 for (int i = 0; i < ARRAYELTS (sections); ++i)
5554 dump_mmap_release (&sections[i]); 5533 dump_mmap_release (&sections[i]);
5555 if (free_mark_bits)
5556 dump_bitset_destroy (&mark_bits);
5557 if (dump_fd >= 0) 5534 if (dump_fd >= 0)
5558 emacs_close (dump_fd); 5535 emacs_close (dump_fd);
5559 return err; 5536 return err;