1. 18 Apr, 2019 2 commits
    • Paul Eggert's avatar
      Fix make-fingerprint off-by-one bug · df5ca4f7
      Paul Eggert authored
      Problem reported by Alex Gramiak in:
      https://lists.gnu.org/r/emacs-devel/2019-04/msg00784.html
      * lib-src/make-fingerprint.c (main): Fix recently-introduced
      off-by-one bug when accessing args after -r.
      df5ca4f7
    • Paul Eggert's avatar
      Mark _Noreturn error functions as cold · 6d6c55db
      Paul Eggert authored
      On my platform this made ‘make compile-always’ 1.3% faster.
      Suggested by Alex Gramiak in:
      https://lists.gnu.org/r/emacs-devel/2019-04/msg00684.html
      * configure.ac (nw): Don’t use -Wsuggest-attribute=cold.
      * lib-src/make-docfile.c (write_globals):
      Mark noreturn functions as cold.
      * src/callproc.c (exec_failed):
      * src/data.c (wrong_length_argument, wrong_type_argument):
      * src/emacs-module.c (module_abort):
      * src/emacs.c (terminate_due_to_signal):
      * src/eval.c (unwind_to_catch):
      * src/image.c (my_png_error, my_error_exit):
      * src/json.c (json_out_of_memory, json_parse_error):
      * src/keyboard.c (quit_throw_to_read_char, user_error):
      * src/lisp.h (die, wrong_type_argument, wrong_choice)
      (args_out_of_range, args_out_of_range_3, circular_list)
      (buffer_overflow, memory_full, buffer_memory_full)
      (string_overflow, xsignal, xsignal0, xsignal1, xsignal2)
      (xsignal3, signal_error, overflow_error, error, verror)
      (nsberror, report_file_errno, report_file_error)
      (report_file_notify_error, terminate_due_to_signal)
      (emacs_abort, fatal):
      * src/lread.c (load_error_old_style_backquotes)
      (end_of_file_error, invalid_syntax):
      * src/pdumper.c (error_unsupported_dump_object):
      * src/puresize.h (pure_write_error):
      * src/search.c (matcher_overflow):
      * src/sound.c (sound_perror, alsa_sound_perror):
      * src/sysdep.c (handle_arith_signal):
      * src/systime.h (time_overflow):
      * src/term.c (maybe_fatal, vfatal):
      * src/textprop.c (text_read_only):
      * src/timefns.c (invalid_time_zone_specification)
      (time_error, invalid_hz):
      * src/xterm.c (x_connection_closed):
      Use AVOID instead of _Noreturn void, so that it’s marked cold.
      * src/conf_post.h (__has_attribute_cold) [!__has_attribute]:
      New macro.
      (ATTRIBUTE_COLD): New macro.
      * src/frame.h (WINDOW_SYSTEM_RETURN): Add ATTRIBUTE_COLD.
      * src/lisp.h (AVOID): New macro.
      * src/xterm.c: Omit unnecessary static decls, so that we needn’t
      worry about which functions should be marked cold.
      (x_io_error_quitter): Mark as cold.
      6d6c55db
  2. 15 Apr, 2019 2 commits
    • Eli Zaretskii's avatar
      Fix MS-Windows build broken by make-fingerprint changes · 3ec22997
      Eli Zaretskii authored
      * lib-src/make-fingerprint.c (fseeko) [WNDOWSNT]: Define to
      fseeko64 for non-MinGW64 MinGW.
      
      * lib-src/ntlib.c (stat): Fix calculation of file size.
      (fstat): New function, a subset of src/w32.c:fstat.  This is
      needed because make-fingerprint.c now calls 'fstat', and the
      MS version will fail to produce reliable results because
      nt/inc/sys/stat.h redefines 'struct stat'.
      3ec22997
    • Paul Eggert's avatar
      Replace executable’s fingerprint in place · 5c2f94a1
      Paul Eggert authored
      * admin/merge-gnulib (GNULIB_MODULES): Add memmem-simple.
      (AVOIDED_MODULES): Add memchr.
      * configure.ac (HAVE_PDUMPER): AC_SUBST it, too, for use in makefiles.
      * lib/Makefile.in (libgnu_a_OBJECTS): Add fingerprint.o.
      * lib/fingerprint.c: New file.
      * lib/memmem.c, lib/str-two-way.h, m4/memmem.m4: New files,
      copied from Gnulib.
      * lib/fingerprint.h: Rename from src/fingerprint.h.
      * lib-src/make-fingerprint.c: Include limits.h, sys/stat.h,
      fingerprint.h, intprops.h, min-max.h.
      (SSIZE_MAX): New macro, if not already defined.
      (main): Without -r, Replace the fingerprint in the input file
      instead of generating a fingerprint.c.
      * lib/Makefile.in (libgnu_a_OBJECTS): Add fingerprint.o.
      * lib/gnulib.mk.in, m4/gnulib-comp.m4: Regenerate.
      * src/Makefile.in (HAVE_PDUMPER, MAKE_PDUMPER_FINGERPRINT):
      New macros.
      (temacs$(EXEEXT)): Use them to replace the fingerprint instead
      of precalculating it.
      (mostlyclean, ctagsfiles1): Do not worry about fingerprint.c.
      5c2f94a1
  3. 09 Apr, 2019 2 commits
    • Paul Eggert's avatar
      Remove the need for temacs.in · d8260374
      Paul Eggert authored
      Instead of building a file temacs.in used only to compute a
      fingerprint, compute the fingerprint directly from the .o and
      .a files that go into temacs.in.  This speeds up the build by
      avoiding the need to link temacs twice, once with a dummy
      fingerprint.
      * lib-src/make-fingerprint.c (main): No need to generate
      a fingerprint file that includes config.h, now that fingerprint.c
      depends on all the .o files.
      * src/Makefile.in ($(libsrc)/make-fingerprint$(EXEEXT)):
      Use the same rule as $(libsrc)/make-docfile$(EXEEXT).
      * src/fingerprint-dummy.c: Remove.
      * src/Makefile.in (${charsets}, $(libsrc)/make-docfile$(EXEEXT))
      ($(LIBEGNU_ARCHIVE), $(lwlibdir)/liblw.a, $(oldXMenudir)/libXMenu11.a)
      (../config.status, ${ETAGS}, ../lisp/TAGS, $(lwlibdir)/TAGS)
      ($(lispsource)/loaddefs.el):
      Prefer ‘$(MAKE) -C $(dir $@)’ to ‘${MAKE} -C SOMESTRING’ when
      either will do, as the former is more regular and lets us
      coalesce rules better.
      (EMACS_DEPS_PRE, EMACS_DEPS_POST, BUILD_EMACS_PRE)
      (BUILD_EMACS_POST, temacs.in$(EXEEXT)): Remove.
      (FINGERPRINTED): New macro.
      (fingerprint.c): Use it instead of temacs.in$(EXEEXT), to
      avoid the need to build temacs.in at all.
      (temacs$(EXEEXT)): No need to depend on other .o files now;
      fingerprint.o is enough, since it depends on the rest.
      Spell out what used to be in BUILD_EMACS_PRE and BUILD_EMACS_POST.
      (mostlyclean): No need to remove temacs.in.
      d8260374
    • Paul Eggert's avatar
      Remove assumption of uint64_t etc. in portable code · e44ff2de
      Paul Eggert authored
      C11 doesn’t guarantee the existence of types like uint64_t,
      so avoid these types in portable code, as it’s easy to do so.
      There’s no need to avoid the types in w32-specific code,
      since w32 is guaranteed to have them.
      * lib-src/make-fingerprint.c (main):
      * src/fingerprint-dummy.c:
      * src/fingerprint.h:
      * src/pdumper.c (dump_fingerprint, struct dump_header):
      Prefer unsigned char to uint8_t in portable code, as either will do.
      Put an "#include <config.h>" in fingerprint.c files, so
      that the corresponding .o file is rebuilt after ./configure is run.
      * lib-src/make-fingerprint.c (main):
      Simplify loop.
      * src/Makefile.in (fingerprint.c): Update atomically.
      * src/pdumper.c: Omit unnecessary check that off_t is the same
      size as int32_t or int64_t, as the code does not rely on this
      assumption.
      (dump_off): Use int_least32_t, not int32_t.
      (struct dump_reloc): Use unsigned int, not uint32_t.
      (dump_anonymous_allocate_w32, dump_anonymous_allocate_posix)
      (dump_anonymous_allocate, dump_map_file_w32, dump_map_file_posix)
      (dump_map_file:
      Do the sanity checks at compile time, not at run-time, to avoid
      usage of uint64_t etc. on non-w32 platforms.
      e44ff2de
  4. 01 Mar, 2019 1 commit
    • Paul Eggert's avatar
      Suppress GC stats when obviously not needed · 7e29eae0
      Paul Eggert authored
      This should help future improvements where these stats can be
      bignums that do not fit into intmax_t.
      * src/alloc.c (struct gcstat, gcstat): New type and static var,
      to package up GC statistics into one C object.  It replaces ...
      (total_free_intervals, total_intervals, total_strings)
      (total_free_strings, total_string_bytes, total_vectors)
      (total_vector_slots, total_free_vector_slots): ... these
      removed static vars.  All uses changed.
      (garbage_collect_1): Accept a struct gcstat *, not a void *
      which was not used anymore anyway.  Return a bool indicating
      success, instead of a Lisp object.  All callers changed.
      (garbage_collect): New function.  All C callers of
      Fgarbage_collect changed to use it, since none of them use the
      return value.  Now, only Lisp code uses Fgarbage_collect.
      (Fgarbage_collect): No longer noinline.  Cons up the return
      value here, not in garbage_collect_1.
      7e29eae0
  5. 27 Feb, 2019 1 commit
    • Paul Eggert's avatar
      DEFVAR_INT variables are now intmax_t · e828765d
      Paul Eggert authored
      Formerly they were fixnums, which led to problems when dealing
      with values that might not fit on 32-bit platforms, such as
      string-chars-consed or floats_consed.  64-bit counters should
      be good enough for these (for a while, anyway...).
      While we’re at it, fix some unlikely integer overflow bugs
      that have been in the code for a while.
      * lib-src/make-docfile.c (write_globals):
      * src/data.c (do_symval_forwarding, store_symval_forwarding):
      * src/eval.c (restore_stack_limits, call_debugger):
      * src/frame.h (struct frame.cost_calculation_baud_rate):
      * src/keyboard.c (last_auto_save, bind_polling_period, read_char):
      * src/lisp.h (struct Lisp_Intfwd.intvar):
      * src/lread.c (defvar_int):
      * src/pdumper.c (dump_fwd_int):
      * src/thread.h (struct thread_state.m_lisp_eval_depth):
      * src/undo.c (truncate_undo_list):
      * src/xselect.c (wait_for_property_change)
      (x_get_foreign_selection):
      * src/xterm.c (x_emacs_to_x_modifiers):
      DEFVAR_INT variables now have the C type intmax_t, not EMACS_INT.
      * src/data.c (store_symval_forwarding):
      * src/gnutls.c (Fgnutls_boot):
      * src/keyboard.c (bind_polling_period):
      * src/macros.c (pop_kbd_macro, Fexecute_kbd_macro):
      * src/undo.c (truncate_undo_list):
      Allow any integer that fits into intmax_t, instead of
      requiring it to be a Lisp fixnum.
      * src/dispnew.c (update_window):
      * src/frame.c (x_figure_window_size):
      * src/gnutls.c (init_gnutls_functions)
      (emacs_gnutls_handle_error):
      * src/keyboard.c (make_lisp_event):
      * src/nsterm.m (ns_dumpglyphs_image):
      * src/profiler.c (make_log):
      * src/scroll.c (calculate_scrolling)
      (calculate_direct_scrolling):
      * src/termcap.c (tputs):
      * src/xterm.c (x_draw_image_relief):
      Avoid implementation-defined behavior on conversion of
      out-of-range integers.
      * src/eval.c (when_entered_debugger): Now intmax_t.
      (max_ensure_room): New function, that avoids signed integer overflow.
      (call_debugger, signal_or_quit): Use it.
      * src/fileio.c (Fdo_auto_save):
      * src/keyboard.c (make_lisp_event):
      * src/term.c (calculate_costs):
      * src/xdisp.c (build_desired_tool_bar_string)
      (hscroll_window_tree, try_scrolling, decode_mode_spec)
      (x_produce_glyphs):
      Avoid signed integer overflow.
      * src/lisp.h (clip_to_bounds): Generalize to intmax_t.
      * src/pdumper.c (dump_emacs_reloc_immediate_emacs_int): Remove, ...
      (dump_emacs_reloc_immediate_intmax_t): ... replacing with this
      function.  All uses changed.
      * src/profiler.c (make_log): Omit args.  All callers changed.
      * src/termcap.c: Include stdlib.h, for atoi.
      Include intprops.h.
      * src/window.c (sanitize_next_screen_context_lines): New function.
      (window_scroll_pixel_based, window_scroll_line_based):
      Use it to avoid signed integer overflow.
      e828765d
  6. 16 Jan, 2019 1 commit
  7. 15 Jan, 2019 1 commit
    • Daniel Colascione's avatar
      Add portable dumper · d12e5d00
      Daniel Colascione authored
      Add a new portable dumper as an alternative to unexec.  Use it by default.
      
      * src/dmpstruct.awk: New file.
      * src/doc.c (get_doc_string): use will_dump_p().
      * src/editfns.c (styled_format): silence compiler warning
      with UNINIT.
      * src/emacs-module.c (syms_of_module): staticpro ltv_mark.
      * src/emacs.c (gflags): new variable.
      (init_cmdargs): unwrap
      (string_starts_with_p, find_argument, dump_error_to_string)
      (load_pdump): new functions.
      (main): detect pdumper and --temacs invocation; actually load
      portable dump when detected; set gflags as appropriate; changes to
      init functions throughout to avoid passing explicit
      'initialized' argument.
      * src/eval.c (inhibit_lisp_code): remove unused variable.
      (init_eval_once_for_pdumper): new function.
      (init_eval_once): call it.
      * src/filelock.c: CANNOT_DUMP -> will_dump_p()
      * src/fingerprint-dummy.c: new file
      * src/fingerprint.h: new file
      * src/fns.c: CANNOT_DUMP -> will_dump_p(), etc.
      (weak_hash_tables): remove
      (hashfn_equal, hashfn_eql): un-staticify
      (make_hash_table): set new 'next_weak' hash table field; drop
      global weak_hash_tables logic.
      (copy_hash_table): drop global weak_hash_tables logic.
      (hash_table_rehash): new function.
      (hash_lookup, hash_put, hash_remove_from_table, hash_clear):
      rehash if needed.
      (sweep_weak_table): un-staticify; explain logic; bool-ify.
      (sweep_weak_hash_tables): remove function.
      * src/font.c (syms_of_font): remember pdumper stuff.
      * src/fontset.c (syms_of_fontset): remember pdumper stuff.
      * src/frame.c (make_initial_frame): don't reset Vframe_list.
      (init_frame_once_for_pdumper, init_frame_once): new functions.
      (syms_of_frame): remove redundant staticpro.
      * src/fringe.c (init_fringe_once_for_pdumper): new functin.
      (init_fringe_once): call it.
      * src/ftcrfont.c (syms_of_ftcrfont_for_pdumper): new function.
      (syms_of_ftcrfont): call it.
      * src/ftfont.c (syms_of_ftfont_for_pdumper): new function.
      (syms_of_ftfont): call it.
      * src/ftxont.c (syms_of_ftxfont_for_pdumper): new function.
      (syms_of_ftxfont): call it.
      * src/gmalloc.c: adjust for pdumper througout
      (DUMPED): remove weird custom dumped indicator.
      * src/gnutls.c (syms_of_gnutls): pdumper note for
      gnutls_global_initialized.
      * src/image.c (syms_of_image): add pdumper comment,
      initializer note.
      * src/insdel.c (prepare_to_modify_buffer_1): account
      for buffer contents possibly being in dump image.
      * src/keyboard.c (syms_of_keyboard_for_pdumper): new function.
      (syms_of_keyboard): staticpro more; call pdumper syms function.
      * src/lisp.h: add comments throughout
      (gflags): declare.
      (will_dump_p, will_bootstrap_p, will_dump_with_pdumper_p)
      (dumped_with_pdumper_p, will_dump_with_unexec_p)
      (dumped_with_unexec_p, definitely_will_not_unexec_p): new
      functions.
      (POWER_OF_2, ROUNDUP): move macros.
      (PSEUDOVECTOR_TYPE, PSEUDOVECTOR_TYPEP): take vectorlike header
      pointer instead of vector; constify.
      (Lisp_Hash_Table): add comment about need to rehash on access; add
      comment for next_weak.
      (HASH_KEY, HASH_VALUE, HASH_HASH, HASH_TABLE_SIZE): const-ify.
      (hash_table_rehash): declare.
      (hash_rehash_needed_p, hash_rehash_if_needed): new functions.
      (finalizers, doomed_finalizers): declare extern.
      (SUBR_SECTION_ATTRIBUTE): new macro.
      (staticvec, staticidx): un-static-ify.
      (sweep_weak_hash_tables): remove declaration.
      (sweep_weak_table): declare.
      (hashfn_eql, hashfn_equal): declare.
      (number_finalizers_run): new variable.
      (Vdead): externify when ENABLE_CHECKING.
      (gc_root_type): new enumeration.
      (gc_root_visitor): new struct.
      (visit_static_gc_roots): declare.
      (vectorlike_nbytes): declare.
      (vector_nbytes): define as trivial inline function wrapper for
      vectorlike_nbytes.
      (init_obarray_once): change signature.
      (primary_thread): extern-ify.
      (init_buffer): change signature.
      (init_frame_once): declare.
      * src/lread.c (readevalloop): adjust for new dumped predicates.
      (init_obarray_once): new function.
      (ndefsubr): new variable.
      (defsubr): increment it.
      (load_path_check): adjust for pdumper.
      (load_path_default): use pdumper functions; adjust for
      dump search.
      * src/macfont.m (macfont_init_font_change_handler): avoid
      shadowing global.
      (syms_of_macfont_for_pdumper): new function.
      (syms_of_macfont): call it.
      * src/menu.c (syms_of_menu): staticpro more stuff.
      * src/minibuf.c (Ftry_completion): rehash if needed.
      (init_minibuf_once_for_pdumper): new function.
      (init_minibuf_once): call it.
      * src/nsfont.m (syms_of_nsfns): staticpro more.
      * src/nsfont.m (syms_of_nsfont_for_pdumper): new function.
      (syms_of_nsfont): call it.
      * src/nsterm.m (syms_of_nsfont): remember pdumper stuff.
      * src/pdumper.c: new file.
      * src/pdumper.h: new file.
      * src/process.c (init_process_emacs): use new pdumper functions
      instead of CANNOT_DUMP.
      * src/profiler.c (syms_of_profiler_for_pdumper): new function.
      (syms_of_profiler_for_pdumper): call it.
      * src/search.c (syms_of_search_for_pdumper): new function.
      (syms_of_search_for_pdumper): call it.
      * src/sheap.c (bss_sbrk_did_unexec): remove.
      * src/sheap.h (bss_sbrk_did_unexec): remove.
      * src/syntax.c (syms_of_syntax): don't redundantly staticpro
      re_match_object.
      * src/sysdep.c: use will_dump_with_unexec_p() instead of bss
      hack thing.
      * src/syssignals.h (init_sigsegv): declare.
      * src/systime.h (init_timefns): remove bool from signature.
      * src/textprop.c (syms_of_textprop): move staticpro.
      * src/thread.c (main_thread_p): constify.
      * src/thread.h (main_thread_p): constify.
      * src/timefns.c (init_timefns): remove bool from signature.
      (syms_of_timefns_for_pdumper): new function.
      (syms_of_timefns): call it.
      * src/w32.c: rearrange code.
      * src/w32.h (w32_relocate): declare.
      * src/w32fns.c (syms_of_w32fns): add pdumper note.
      * src/w32font.c (syms_of_w32font_for_pdumper): new function.
      (syms_of_w32font): call it.
      * src/w32heap.c (using_dynamic_heap): new variable.
      (init_heap): use it.
      * src/w32menu.c (syms_of_w32menu): add pdumper note.
      * src/w32proc.c
      (ctrl_c_handler, mainCRTStartup, _start, open_input_file)
      (rva_to_section, close_file_data): move here.
      * src/w32uniscribe.c (syms_of_w32uniscribe_for_pdumper):
      new function.
      (syms_of_w32uniscribe): call it.
      * src/window.c (init_window_once_for_pdumper): new function.
      (init_window_once): call it; staticpro more stuff.
      * src/xfont.c (syms_of_xfont_for_pdumper): new function.
      (syms_of_xfont): call it.
      * src/xftfont.c (syms_of_xftfont_for_pdumper): new function.
      (syms_of_xftfont): call it.
      * src/xmenu.c (syms_of_xmenu_for_pdumper): new function.
      (syms_of_xmenu): call it.
      * src/xselect.c (syms_of_xselect_for_pdumper): new function.
      (syms_of_xselect): call it.
      * src/xsettings.c (syms_of_xsettings): add more pdumper notes.
      * src/term.c (syms_of_xterm): add pdumper note.
      
      * src/dispnew.c (init_faces_initial): new function.
      (init_display_interactive): rename from init_display; use
      will_dump_p instead of !initialized.  Initialize faces early for
      pdumper if needed.
      (init_display): new function.
      (syms_of_display_for_pdumper): new function.
      (syms_of_display): call it.
      
      * src/dbusbind.c (syms_of_dbusbind): Add TODO for bus reset
      on pdumper load.
      
      * src/data.c (Fdefalias): Use will_dump_p
      instead of Vpurify_flag.
      (Fmake_variable_buffer_local): silence compiler warning with -Og
      by making valcontents UNINIT.
      (arith_driver): silence compiler warning with UNINIT.
      
      * src/conf_post.h (ATTRIBUTE_SECTION): new macro.
      
      * src/composite.c (composition_gstring_put_cache): rehash hash
      table if needed.
      
      * src/coding.c (init_coding_once, syms_of_coding): remember
      pdumper stuff.
      
      * src/charset.h (charset_table_size, charset_table_user): declare.
      
      * src/charset.c (charset_table_used, charset_table_size): un-static.
      (init_charset_oncem, syms_of_charset): remember pdumper stuff.
      
      * src/category.c (category_table_version): remove obsolete
      variable.
      
      * src/callint.c (syms_of_callint): staticpro 'preserved_fns'
      (init_callproc): use will_dump_p instead of !CANNOT_DUMP.
      
      * src/bytecode.c (exec_byte_code): rehash table tables if needed
      
      * src/buffer.c (alloc_buffer_text, free_buffer_text): account for
      pdumper
      (init_buffer_once): add TODO; remember stuff for pdumper.
      (init_buffer): don't take initialized argument; adjust
      for pdumper.
      
      * src/atimer.c (init_atimer): initialize subr only if
      !initialized.
      
      * src/alloc.c: (vector_marked_p, set_vector_marked)
      (vectorlike_marked_p, set_vectorlike_marked, cons_marked_p)
      (set_cons_marked, string_marked_p, set_string_marked)
      (symbol_marked_p, set_symbol_marked, interval_marked_p)
      (set_interval_marked): new accessor routines.  Use them
      instead of raw GC access throughout.
      (Vdead): make non-static when ENABLE_CHECKING.
      (vectorlike_nbytes): rename of 'vector_nbytes'; take a vectorlike
      header as input instead of a vector.
      (number_finalizers_run): new internal C variable.
      (mark_maybe_object): check for pdumper objects.
      (valid_pointer_p): don't be gratuitously inefficient under rr(1).
      (make_pure_c_string): add support for size_byte = -2 mode
      indicating that string data points into Emacs image rodata.
      (visit_vectorlike_root): visits GC roots embedded in
      vectorlike objects.
      (visit_buffer_root): visits GC roots embedded in
      our totally-not-a-buffer buffer global objects.
      (visit_static_gc_roots): visit GC roots in the Emacs data section.
      (mark_object_root_visitor): root callback used for conventional GC
      marking
      (weak_hash_tables): new internal variable for tracking found weak
      hash tables during GC.
      (mark_and_sweep_weak_table_contents): new weak hash table marking.
      (garbage_collect_1): use new GC root visitor machinery.
      (mark_vectorlike): accept a vectorlike_header instead of a
      Lisp_Vector.
      (mark_frame, mark_window, mark_hash_table): new functions.
      (mark_object): initialize 'm'; check for pdumper objects and use
      new mark-bit accessors throughout.  Remove some object-specific
      marking code and move to helper functions above.
      (survives_gc_p): check for pdumper objects.
      (gc-sweep): clear pdumper mark bits.
      (init_alloc_once_for_pdumper): new helper function for early init
      called both during normal init and pdumper load.
      (init_alloc_once): pdumper integration.
      
      * src/Makefile.in: Rewrite dumping for pdumper; add pdumper.o;
      invoke temacs with --temacs command line option; build dmpstruct.h
      from dmpstruct.awk; stop relying on CANNOT_DUMP; clean up pdumper
      intermediate files during build.
      
      * nextstep/Makefile.in: build emacs.pdmp into NS packages
      
      * lisp/startup.el: account for new '--temacs' and '--dump-file'
      command line option.
      
      * lisp/loadup.el: rewrite early init to account for pdumper; use
      injected 'dump-mode' variable (set via the new '--temacs' option)
      instead of parsing command line.
      
      * lisp/cus-start.el: Check 'dump-mode' instead of 'purify-flag',
      since the new 'dump-mode'
      
      * lib-src/make-fingerprint.c: new program
      
      * lib-src/Makefile.in: built make-fingerprint utility program
      
      * configure.ac: Add --with-pdumper toggle to control pdumper
      support; add --with-unexec toggle to control unexec support.
      Add --with-dumping option to control which dumping strategy we use
      by default.  Adjust for pdumper throughout.  Check for
      posix_madvise.
      
      * Makefile.in: Add @DUMPING@ substitution; add pdumper mode.
      
      * .gitignore: Add make-fingerprint, temacs.in, fingerprint.c,
      dmpstruct.h, and pdumper dump files.
      d12e5d00
  8. 03 Jan, 2019 1 commit
  9. 01 Jan, 2019 2 commits
  10. 06 Dec, 2018 2 commits
    • Paul Eggert's avatar
      emacsclient: avoid background chatter · 46b81008
      Paul Eggert authored
      * lib-src/emacsclient.c (process_grouping): New function.
      (act_on_signals, main): Use it.
      (main): Omit "Waiting for Emacs..." and later "\n" messages
      if in background, since that messes up the screen.
      46b81008
    • Paul Eggert's avatar
      Fix emacsclient hang when backgrounded · 2f985977
      Paul Eggert authored
      Problem reported by Kaushal Modi in:
      https://lists.gnu.org/r/emacs-devel/2018-12/msg00083.html
      The tcdrain call replaced an fdatasync call which had no
      effect on the tty, so removing it entirely shouldn’t cause
      problems.  The fdatasync call replaced an fsync call which
      also had no effect on the tty, and the fsync call seems to be
      badly-merged revenant of emacsclient’s old (circa 2004) way of
      communicating to and from Emacs via FILE * streams, where
      fsync was apparently needed when talking to sockets.
      * lib-src/emacsclient.c [!DOS_NT]: Don’t include termios.h.
      (flush_stdout): Remove.  All callers removed.
      (main): Do not drain the tty after "Waiting for Emacs..."
      message.  There should be no need to drain, and draining it
      might send us a SIGTTOU.  Do not fflush stdout just before
      exiting, as exiting does that for us.
      2f985977
  11. 03 Dec, 2018 5 commits
    • Paul Eggert's avatar
      emacsclient: fix typo on recent socket-leak change · bc6ffabe
      Paul Eggert authored
      This ports to POSIXish platforms like macOS that lack SOCK_CLOEXEC.
      Fix suggested by Eli Zaretskii in:
      https://lists.gnu.org/r/emacs-devel/2018-12/msg00055.html
      * lib-src/emacsclient.c (set_local_socket):
      Don’t use SOCK_CLOEXEC; that’s cloexec_socket’s job.
      bc6ffabe
    • Eli Zaretskii's avatar
      Fix WINDOWSNT/DOS_NT build · 2ff9dca1
      Eli Zaretskii authored
      Recent changes in sysdep.c and emacsclient unnecessarily
      removed useful code from DOS_NT builds.  This changeset
      reinstates that code.
      * nt/inc/ms-w32.h (tcdrain): Redirect to _commit.
      (fdatasync): No need to redirect anymore.
      
      * lib-src/emacsclient.c (flush_stdout): Don't avoid calling
      tcdrain on DOS_NT platforms.
      
      * src/sysdep.c (reset_sys_modes): Don't ifdef away the call to
      tcdrain on DOS_NT platforms.
      2ff9dca1
    • Paul Eggert's avatar
      emacsclient: don’t leak socket to child processes · 5c412405
      Paul Eggert authored
      * lib-src/emacsclient.c [!WINDOWSNT]: Include fcntl.h.
      (cloexec_socket): New function.
      (set_tcp_socket, set_local_socket): Use it.
      5c412405
    • Paul Eggert's avatar
      Use tcdrain, not fdatasync, to drain ttys · f5090b91
      Paul Eggert authored
      fdatasync is for storage devices, not ttys.
      * admin/merge-gnulib (GNULIB_MODULES): Remove fdatasync.
      * lib/fdatasync.c, m4/fdatasync.m4: Remove.
      * lib-src/Makefile.in (LIB_FDATASYNC):
      * src/Makefile.in (LIB_FDATASYNC):
      Remove.  All uses removed.
      * lib-src/emacsclient.c [!DOS_NT]:
      Include <termios.h>, for tcdrain.
      * lib-src/emacsclient.c (flush_stdout):
      * src/sysdep.c (reset_sys_modes): On ttys, use tcdrain instead
      of fdatasync (except don’t use either function if DOS_NT).
      * lib/gnulib.mk.in, m4/gnulib-comp.m4: Regenerate.
      f5090b91
    • Paul Eggert's avatar
      emacsclient: fix symlink/socket race · 3e5d7755
      Paul Eggert authored
      * lib-src/emacsclient.c (socket_status): New arg UID.
      All uses changed.
      (set_local_socket): Don’t create the unbound socket unless the
      initial sanity checks on the socket file succeed; this
      simplifies cleaning it up.  Check socket ownership again
      after connecting, to fix a race (Bug#33366).
      3e5d7755
  12. 02 Dec, 2018 1 commit
    • Paul Eggert's avatar
      emacsclient: prefer XDG_RUNTIME_DIR (Bug#33367) · 92282cb5
      Paul Eggert authored
      * lib-src/emacsclient.c: Disable -Wformat-truncation=2,
      to avoid false alarms about the new snprintf calls.
      (local_sockname): New function.
      (set_local_socket): Use it.  Prefer XDG_RUNTIME_DIR (if set)
      for location of socket directory.  Avoid unnecessary memory
      allocation by using snprintf to destination.
      * lisp/server.el (server-socket-dir): Prefer XDG_RUNTIME_DIR if set.
      92282cb5
  13. 26 Nov, 2018 4 commits
    • Eli Zaretskii's avatar
      Unbreak compilation of emacsclient on MS-Windows · 038b425c
      Eli Zaretskii authored
      * lib-src/emacsclient.c (main): Make "-suspend" handling
      conditional on !WINDOWSNT, as there's no SIGSTOP nor 'kill'
      there.
      038b425c
    • Paul Eggert's avatar
      emacsclient: assume HAVE_INET_SOCKETS · ed3ae3fc
      Paul Eggert authored
      * configure.ac (HAVE_INET_SOCKETS): Remove.
      * lib-src/emacsclient.c: Simplify by assuming HAVE_SOCKETS and
      HAVE_INET_SOCKETS, which are always true nowadays, except perhaps
      for MS-DOS and if so this program shouldn’t be built there anyway.
      Don’t bother including sys/types.h, as it’s not needed on modern
      systems (and syswait.h does it for us anyway).
      (main): Simplify by assuming SIGSTOP (which is always defined
      if SIGCONT is), and by assuming HAVE_SOCKETS && HAVE_INET_SOCKETS.
      ed3ae3fc
    • Paul Eggert's avatar
      emacsclient: negate NO_SOCKETS_IN_FILE_SYSTEM · 5c1bf596
      Paul Eggert authored
      * lib-src/emacsclient.c (SOCKETS_IN_FILE_SYSTEM): Rename from
      NO_SOCKETS_IN_FILE_SYSTEM, with inverted sense.  All uses changed.
      All uses were of the form ‘#ifndef NO_SOCKETS_IN_FILE_SYSTEM’, and
      it’s easier to read ‘#ifdef SOCKETS_IN_FILE_SYSTEM’.
      5c1bf596
    • Paul Eggert's avatar
      emacsclient: fix some races on POSIX systems · 0331f2f4
      Paul Eggert authored
      Fix some longstanding race conditions due to emacsclient’s use of
      ‘signal’ instead of ‘sigaction’ and its use of nested signal
      handlers.  These races could cause premature exit or incorrect
      commands sent to Emacs.
      * lib-src/emacsclient.c (signal) [!WINDOWSNT]: Do not undef.
      (emacs_socket): Remove this static variable.  It is now a parameter.
      (send_to_emacs): Do not exit merely because ‘send’ was interrupted.
      Instead, act on the signal if possible, and then retry the ‘send’.
      (pass_signal_to_emacs): Remove; now done by act_on_signals.
      (reinstall_handler_if_needed, handle_sigttou, handle_sigwinch)
      (install_handler): New functions.
      (got_sigcont, got_sigtstp, got_sigttou, got_sigwinch):
      New globals, used for more-portable signal handling.
      (handle_sigcont, handle_sigtstp): Just set the static var; other
      actions are now done later by act_on_signals.
      (install_handler): New function that arranges for signals to
      never be reset to default, on modern POSIX platforms.
      This fixes some races.
      (act_on_signals): New function.  When acting on SIGCONT,
      don’t bother calling getpgrp if tcgetpgrp fails.
      (start_daemon_and_retry_set_socket): Return the socket
      rather than setting a global variable.  All uses changed.
      (flush_stdout): New function that acts on signals received while
      flushing.
      (main): Use it.  emacs_socket is now a local var.
      Act on signals received during recv.
      0331f2f4
  14. 23 Nov, 2018 4 commits
    • Eli Zaretskii's avatar
      Avoid compilation warning in emacsclient.c · 2b1bc701
      Eli Zaretskii authored
      * lib-src/emacsclient.c (set_tcp_socket): Avoid compilation
      warning in MS-Windows build.
      2b1bc701
    • Paul Eggert's avatar
      emacsclient: fix child exit when exec fails · 652dabff
      Paul Eggert authored
      * lib-src/emacsclient.c (start_daemon_and_retry_set_socket):
      If the execvp of Emacs fails exit instead of having the child
      run on and do the work of the parent.  Coalesce duplicate code.
      652dabff
    • Paul Eggert's avatar
      emacsclient: one ‘main’ function · ef1f6030
      Paul Eggert authored
      * lib-src/emacsclient.c (main): Simplify by having just one
      ‘main’ function instead of two.  Don’t assume argc is positive (!).
      ef1f6030
    • Paul Eggert's avatar
      emacsclient: tidy socket failure cleanup · 5daba9d8
      Paul Eggert authored
      * lib-src/emacsclient.c (set_tcp_socket, set_local_socket):
      Close socket (instead of leaking it) when ‘connect’ fails.
      (socket_status): Return errno if stat fails and -1 if we don’t own.
      (set_local_socket): Simplify based on socket_status change.
      5daba9d8
  15. 22 Nov, 2018 3 commits
    • Paul Eggert's avatar
      emacsclient: coalesce WINDOWSNT-specific code · 7a85753d
      Paul Eggert authored
      * lib-src/emacsclient.c (sock_err_message) [WINDOWSNT]:
      Do nothing if w32_window_app () && alternate_editor.
      Both callers changed.
      7a85753d
    • Paul Eggert's avatar
      emacsclient: sockaddr portability fixes · 5773470f
      Paul Eggert authored
      * lib-src/emacsclient.c (get_server_config, set_tcp_socket)
      (set_local_socket): Initialize any platform-specific extensions
      of struct to zero, just in case.
      (set_tcp_socket, set_local_socket): Don’t assume struct
      layout details that POSIX does not specify.
      Use union to sidestep some problems with strict aliasing.
      Remove unnecessary casts.
      5773470f
    • Paul Eggert's avatar
      emacsclient: getopt minor cleanup · ad063d25
      Paul Eggert authored
      * lib-src/emacsclient.c (shortopts): New constant.
      (decode_options): Use it.  Do not assume EOF == -1.
      ad063d25
  16. 21 Nov, 2018 5 commits
    • Paul Eggert's avatar
      emacsclient: omit EXTRA_SPACE guesswork · 0f22bf09
      Paul Eggert authored
      * lib-src/emacsclient.c: Include <intprops.h>.
      (EXTRA_SPACE): Remove; code no longer guesses this is enough.
      (open_config): New function.
      (get_server_config): Use it.
      (set_local_socket): Compute upper bound of buffer size
      instead of guessing via EXTRA_SPACE.
      0f22bf09
    • Paul Eggert's avatar
      emacsclient: take more care with int width · 8f49cb00
      Paul Eggert authored
      * lib-src/emacsclient.c: Include inttypes.h, stddef.h.
      (emacs_pid, main): Don’t assume pid fits in int.
      (fail): Don’t assume pointer difference fits in int.
      (set_local_socket): Don’t assume uid fits in long.
      8f49cb00
    • Paul Eggert's avatar
      emacsclient.c: use C99 to avoid {} · c0870736
      Paul Eggert authored
      * lib-src/emacsclient.c (set_local_socket):
      Assume C99 decl-after-statement and reindent.
      c0870736
    • Paul Eggert's avatar
      emacsclient: improve use of locals · 3fe110d3
      Paul Eggert authored
      * lib-src/emacsclient.c (main):
      Use smaller scopes for some locals.
      3fe110d3
    • Paul Eggert's avatar
      emacsclient: fix unlikely crash with "&" · 7a85a40e
      Paul Eggert authored
      * lib-src/emacsclient.c (quote_argument):
      Mention *DATA in comment so it’s clear DATA must be non-null.
      (quote_argument, unquote_argument): Simplify.
      (unquote_argument): Don’t crash if the string ends in "&".
      7a85a40e
  17. 19 Nov, 2018 3 commits
    • Eli Zaretskii's avatar
      Fix last change · 008bc1cb
      Eli Zaretskii authored
      * lib-src/emacsclient.c (start_daemon_and_retry_set_socket)
      [!WINDOWSNT]: Condition usage of socket_name on
      NO_SOCKETS_IN_FILE_SYSTEM being undefined.
      008bc1cb
    • Eli Zaretskii's avatar
      Avoid compiler warning in emacsclient.c · 57d5c14d
      Eli Zaretskii authored
      * lib-src/emacsclient.c (socket_name): Define only if
      NO_SOCKETS_IN_FILE_SYSTEM is not defined, to avoid a compiler
      warning.
      57d5c14d
    • Paul Eggert's avatar
      emacsclient.c: file name component fixes · 0e3b2458
      Paul Eggert authored
      * lib-src/emacsclient.c: Include <dosname.h>.
      (file_name_absolute_p): Remove, as a code duplicate.
      All uses replaced by IS_ABSOLUTE_FILE_NAME.
      (set_local_socket): Don’t treat \ as a file name separator
      on GNU and POSIX hosts.
      0e3b2458