From: Daniel Colascione Date: Tue, 15 Jan 2019 06:47:10 +0000 (-0500) Subject: word size fixes X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=a1d790550e5052916080c6de00268772bdb51d02;p=emacs.git word size fixes --- diff --git a/src/pdumper.c b/src/pdumper.c index 07cc65d49f9..956d90cc853 100644 --- a/src/pdumper.c +++ b/src/pdumper.c @@ -2013,7 +2013,9 @@ static dump_off finish_dump_pvec (struct dump_context *ctx, union vectorlike_header *out_hdr) { + ALLOW_IMPLICIT_CONVERSION; return dump_object_finish (ctx, out_hdr, vectorlike_nbytes (out_hdr)); + DISALLOW_IMPLICIT_CONVERSION; } static void @@ -2235,7 +2237,8 @@ dump_bignum (struct dump_context *ctx, Lisp_Object object) /* Write the offset of that exported blob here. */ dump_off value_offset = - bignum_offset + offsetof (struct Lisp_Bignum, value); + bignum_offset + + (dump_off) offsetof (struct Lisp_Bignum, value); dump_push (&ctx->fixups, list3 ( make_fixnum (DUMP_FIXUP_BIGNUM_DATA), @@ -2593,11 +2596,12 @@ dump_vectorlike_generic ( padding. Instead, use the size through the last non-Lisp field. */ size_t sz = (char*)&out.min_char + sizeof (out.min_char) - (char*)&out; - dump_object_start (ctx, &out, sz); + eassert (sz < DUMP_OFF_MAX); + dump_object_start (ctx, &out, (dump_off) sz); DUMP_FIELD_COPY (&out, sct, header.size); DUMP_FIELD_COPY (&out, sct, depth); DUMP_FIELD_COPY (&out, sct, min_char); - offset = dump_object_finish (ctx, &out, sz); + offset = dump_object_finish (ctx, &out, (dump_off) sz); skip = SUB_CHAR_TABLE_OFFSET; } else @@ -2629,7 +2633,10 @@ dump_vectorlike_generic ( { Lisp_Object out; const Lisp_Object *vslot = &v->contents[i]; + /* In the wide case, we're always misaligned. */ +#ifndef WIDE_EMACS_INT eassert (ctx->offset % sizeof (out) == 0); +#endif dump_object_start (ctx, &out, sizeof (out)); dump_field_lv (ctx, &out, vslot, vslot, WEIGHT_STRONG); dump_object_finish (ctx, &out, sizeof (out)); diff --git a/src/timefns.c b/src/timefns.c index 927198de67d..ce1f4d3f5a9 100644 --- a/src/timefns.c +++ b/src/timefns.c @@ -25,6 +25,7 @@ along with GNU Emacs. If not, see . */ #include "bignum.h" #include "coding.h" #include "lisp.h" +#include "pdumper.h" #include @@ -1729,6 +1730,19 @@ emacs_setenv_TZ (const char *tzstring) return 0; } +#if (ULONG_MAX < TRILLION || !FASTER_TIMEFNS) && !defined ztrillion +# define NEED_ZTRILLION_INIT 1 +#endif + +#ifdef NEED_ZTRILLION_INIT +static void +syms_of_timefns_for_pdumper (void) +{ + mpz_init_set_ui (ztrillion, 1000000); + mpz_mul_ui (ztrillion, ztrillion, 1000000); +} +#endif + void syms_of_timefns (void) { @@ -1740,10 +1754,6 @@ syms_of_timefns (void) trillion = make_int (1000000000000); staticpro (&trillion); #endif -#if (ULONG_MAX < TRILLION || !FASTER_TIMEFNS) && !defined ztrillion - mpz_init_set_ui (ztrillion, 1000000); - mpz_mul_ui (ztrillion, ztrillion, 1000000); -#endif DEFSYM (Qencode_time, "encode-time"); @@ -1759,4 +1769,7 @@ syms_of_timefns (void) defsubr (&Scurrent_time_string); defsubr (&Scurrent_time_zone); defsubr (&Sset_time_zone_rule); +#ifdef NEED_ZTRILLION_INIT + pdumper_do_now_and_after_load (syms_of_timefns_for_pdumper); +#endif }