diff options
| author | Paul Eggert | 2019-01-31 07:30:32 -0800 |
|---|---|---|
| committer | Paul Eggert | 2019-01-31 07:57:56 -0800 |
| commit | a68eee50eb515b28b448894299334afced26ef78 (patch) | |
| tree | d6d98e3bd6d5176234fae3d07d21691cee1001e6 /src | |
| parent | 08bc407a228796b64e321cb28b38b39062ab1732 (diff) | |
| download | emacs-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.c | 43 |
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) | |||
| 1785 | static void | 1785 | static void |
| 1786 | dump_roots (struct dump_context *ctx) | 1786 | dump_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 { | |||
| 4949 | static bool | 4947 | static bool |
| 4950 | dump_bitset_init (struct dump_bitset *bitset, size_t number_bits) | 4948 | dump_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 | ||
| 4961 | static void | ||
| 4962 | dump_bitset_destroy (struct dump_bitset *bitset) | ||
| 4963 | { | ||
| 4964 | free (bitset->bits); | ||
| 4965 | } | ||
| 4966 | |||
| 4967 | static dump_bitset_word * | 4958 | static dump_bitset_word * |
| 4968 | dump_bitset__bit_slot (const struct dump_bitset *bitset, | 4959 | dump_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 | |||
| 5395 | enum pdumper_load_result | 5384 | enum pdumper_load_result |
| 5396 | pdumper_load (const char *dump_filename) | 5385 | pdumper_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 (§ions, 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 (§ions[i]); | 5533 | dump_mmap_release (§ions[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; |