1. 07 Jan, 2020 1 commit
    • Mattias Engdegård's avatar
      Fix BSD and macOS builds w.r.t. pthread_setname_np (bug#38632) · 73fd8a4b
      Mattias Engdegård authored
      pthread_setname_np takes only a single argument on BSD and macOS,
      and affects the current thread only.
      
      * configure.ac: Add check for single-argument pthread_setname_np
      * src/systhread.c (sys_thread_set_name): New (w32 and pthread versions).
      (sys_thread_create): Remove name argument and name-setting.
      (w32_beginthread_wrapper): Remove name-setting.
      * src/systhread.h (sys_thread_create, sys_thread_set_name):
      Update prototypes.
      * src/thread.c (run_thread): Call sys_thread_set_name.
      (Fmake_thread): Adapt call to sys_thread_create.
      * src/thread.h (struct thread_state): Adjust comment.
      73fd8a4b
  2. 01 Jan, 2020 1 commit
  3. 20 Dec, 2019 1 commit
    • Eli Zaretskii's avatar
      Support setting OS names of threads on MS-Windows · 0e19b5d7
      Eli Zaretskii authored
      * src/w32fns.c (setup_w32_kbdhook): Don't initialize
      is_debugger_present here...
      (globals_of_w32fns): ...initialize it here.  Also initialize
      the new global variable set_thread_description.
      * src/systhread.c: [WINDOWSNT] Include mbctype.h
      (w32_set_thread_name): New function.
      (MS_VC_EXCEPTION): New macro.
      (THREADNAME_INFO, IsDebuggerPresent_Proc)
      (SetThreadDescription_Proc): New typedefs.
      (w32_beginthread_wrapper): Call w32_set_thread_name to set the
      name of the new thread.
      * src/thread.h (struct thread_state): New member thread_name.
      * src/thread.c (Fmake_thread): Set the thread_name field of
      the new thread object.
      (run_thread): Free the thread_name member after the thread
      exits.
      0e19b5d7
  4. 24 Apr, 2019 1 commit
    • Paul Eggert's avatar
      Simplify thread initialization and GC · 4c90369d
      Paul Eggert authored
      * src/lisp.h (PVECHEADERSIZE): New macro.
      (XSETPVECTYPESIZE): Use it.
      * src/search.c (syms_of_search): No need to initialize or
      staticpro last_thing_searched or saved_last_thing_searched, as
      the thread code arranges for initialization and GC.
      * src/thread.c (main_thread): Initialize statically.
      (Fmake_mutex, Fmake_condition_variable, Fmake_thread):
      Use ALLOCATE_ZEROED_PSEUDOVECTOR rather than zeroing by hand.
      (mark_one_thread): No need to mark Lisp_Object members.
      (init_main_thread, init_threads_once): Remove.  All uses removed.
      4c90369d
  5. 08 Apr, 2019 1 commit
  6. 28 Mar, 2019 1 commit
    • Paul Eggert's avatar
      No need for m_search_regs_saved in thread.h · eac5f967
      Paul Eggert authored
      * src/search.c (save_search_regs, restore_search_regs):
      Don’t use m_search_regs_saved; it’s equivalent to
      saved_search_regs.num_regs != 0.
      * src/thread.h (struct thread_state): Remove m_search_regs_saved.
      eac5f967
  7. 25 Mar, 2019 1 commit
    • Paul Eggert's avatar
      Fix some integer issues in regex-emacs · b7a98993
      Paul Eggert authored
      Also, remove some duplicate comments related to thread.h.
      * src/regex-emacs.h (struct re_registers):
      * src/regex-emacs.c (SIGN_EXTEND_CHAR): Remove.
      (TALLOC, RETALLOC): Remove.  All uses replaced by usual
      allocators, which check for integer overflow.
      (extract_number): Redo without using ‘unsigned’.
      (CHARSET_RANGE_TABLE_EXISTS_P): Clearly return a boolean.
      (print_fastmap, print_partial_compiled_pattern, CHECK_INFINITE_LOOP)
      (regex_compile, analyze_first, bcmp_translate, mutually_exclusive_p)
      (re_match_2_internal):
      Use bool for booleans.
      (print_fastmap, regex_compile, execute_charset):
      Prefer int to unsigned where either will do.
      (print_double_string): Prefer ptrdiff_t to ssize_t, since the
      latter can in theory be narrower than the former.  Use fwrite
      instead of repeated putchar.
      (emacs_re_max_failures, fail_stack_type, compile_stack_type)
      (re_wctype_parse, regex_compile, re_search, re_search_2)
      (re_match_2, re_match_2_internal, re_compile_pattern):
      Prefer ptrdiff_t to size_t where either will do.
      (union fail_stack_elt, PUSH_FAILURE_REG, POP_FAILURE_REG_OR_COUNT):
      Make the integer an intptr_t, not long.
      (GET_BUFFER_SPACE, EXTEND_BUFFER, regex_compile):
      Use xpalloc to simplify allocation.
      (regex_compile): Check for integer overflow when calculating
      register numbers.
      * src/regex-emacs.c (re_set_registers, re_match_2_internal):
      * src/regex-emacs.h (struct re_registers, struct re_pattern_buffer):
      * src/search.c (Freplace_match):
      Prefer ptrdiff_t to unsigned where either will do.
      * src/regex-emacs.h (struct re_pattern_buffer):
      Prefer bool_bf to unsigned where either will do.
      b7a98993
  8. 19 Mar, 2019 1 commit
    • Paul Eggert's avatar
      Use ‘const’ to clarify GC marking · 53914a10
      Paul Eggert authored
      Add ‘const’ to make the GC marking code a bit clearer.
      This can also help the compiler in some cases, I think because
      GCC can now determine more often that the value of a static C
      variable can be cached when its address is now converted to
      ‘Lisp Object const *’ before escaping.
      * src/alloc.c (staticvec, mark_maybe_objects, mark_memory)
      (mark_stack, staticpro, mark_object_root_visitor)
      (garbage_collect_1):
      * src/pdumper.c (dump_ptr_referrer, dump_emacs_reloc_to_lv)
      (dump_emacs_reloc_to_emacs_ptr_raw, dump_root_visitor):
      * src/lisp.h (vcopy, struct gc_root_visitor):
      * src/sysdep.c (stack_overflow):
      * src/thread.c (mark_one_thread):
      * src/thread.h (struct thread_state):
      Use pointer-to-const instead of plain pointer in some
      GC-related places where either will do.
      53914a10
  9. 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
  10. 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
  11. 01 Jan, 2019 1 commit
  12. 16 Sep, 2018 1 commit
  13. 07 Sep, 2018 1 commit
    • Paul Eggert's avatar
      Shrink pseudovectors a bit · 2c8520e1
      Paul Eggert authored
      sizeof (struct Lisp_Marker) was 32 on x86, where 24 would do.
      Problem noted by Stefan Monnier in:
      https://lists.gnu.org/r/emacs-devel/2018-09/msg00165.html
      * src/bignum.h (struct Lisp_Bignum):
      * src/frame.h (struct frame):
      * src/lisp.h (struct Lisp_Vector, struct Lisp_Bool_Vector)
      (struct Lisp_Char_Table, struct Lisp_Hash_Table)
      (struct Lisp_Marker, struct Lisp_Overlay)
      (struct Lisp_Misc_Ptr, struct Lisp_User_Ptr)
      (struct Lisp_Finalizer, struct Lisp_Float)
      (struct Lisp_Module_Function):
      * src/process.h (struct Lisp_Process):
      * src/termhooks.h (struct terminal):
      * src/thread.h (struct thread_state, struct Lisp_Mutex)
      (struct Lisp_CondVar):
      * src/window.c (struct save_window_data):
      * src/window.h (struct window):
      * src/xterm.h (struct scroll_bar):
      * src/xwidget.h (struct xwidget, struct xwidget_view):
      Add GCALIGNED_STRUCT attribute.
      * src/lisp.h (GCALIGNED_UNION_MEMBER): Renamed from GCALIGNED_UNION.
      All uses changed.
      (GCALIGNED_STRUCT_MEMBER, GCALIGNED_STRUCT, GCALIGNED): New macros.
      All uses of open-coded GCALIGNED changed to use GCALIGNED.
      (union vectorlike_header): No longer GC-aligned.
      (PSEUDOVECSIZE): Yield 0 for pseudovectors without Lisp
      objects that place a member before where the first Lisp object
      member would be.
      2c8520e1
  14. 06 Aug, 2018 2 commits
    • Paul Eggert's avatar
      Simplify regex-emacs code by assuming Emacs · 3a6abe65
      Paul Eggert authored
      * src/regex-emacs.c: Omit no-longer-needed AIX code.
      Don’t ignore GCC warnings.
      Include regex-emacs.h immediately after config.h,
      to test that it’s independent.
      Omit the "#ifndef emacs" and "#ifdef REGEX_MALLOC" and
      "#if WIDE_CHAR_SUPPORT" or "#ifdef _REGEX_RE_COMP",
      code, as we are no longer interested in compiling outside
      Emacs (with or without debugging or native wide char support)
      or in avoiding alloca.
      (REGEX_EMACS_DEBUG, regex_emacs_debug): Rename from DEBUG and debug,
      to avoid collision with other DEBUGS.  All uses changed.
      In debugging output, change %ld and %zd to %zu when appropriate.
      No need to include stddef.h, stdlib.h, sys/types.h, wchar.h,
      wctype.h, locale/localeinfo.h, locale/elem-hash.h, langinfo.h,
      libintl.h, unistd.h, stdbool.h, string.h, stdio.h, assert.h.
      All uses of assert changed to eassert.
      (RE_DUP_MAX, reg_syntax_t, RE_BACKSLASH_ESCAPE_IN_LISTS)
      (RE_BK_PLUS_QM, RE_CHAR_CLASSES, RE_CONTEXT_INDEP_ANCHORS)
      (RE_CONTEXT_INDEP_OPS, RE_CONTEXT_INVALID_OPS, RE_DOT_NEWLINE)
      (RE_DOT_NOT_NULL, RE_HAT_LISTS_NOT_NEWLINE, RE_INTERVALS)
      (RE_LIMITED_OPS, RE_NEWLINE_ALT, RE_NO_BK_BRACES)
      (RE_NO_BK_PARENS, RE_NO_BK_REFS, RE_NO_BK_VBAR)
      (RE_NO_EMPTY_RANGES, RE_UNMATCHED_RIGHT_PAREN_ORD)
      (RE_NO_POSIX_BACKTRACKING, RE_NO_GNU_OPS, RE_FRUGAL)
      (RE_SHY_GROUPS, RE_NO_NEWLINE_ANCHOR, RE_SYNTAX_EMACS)
      (REG_NOERROR, REG_NOMATCH, REG_BADPAT, REG_ECOLLATE)
      (REG_ECTYPE, REG_EESCAPE, REG_ESUBREG, REG_EBRACK, REG_EPAREN)
      (REG_EBRACE, REG_BADBR, REG_ERANGE, REG_ESPACE, REG_BADRPT)
      (REG_EEND, REG_ESIZE, REG_ERPAREN, REG_ERANGEX, REG_ESIZEBR)
      (reg_errcode_t, REGS_UNALLOCATED, REGS_REALLOCATE, REGS_FIXED)
      (RE_NREGS, RE_TRANSLATE, RE_TRANSLATE_P):
      Move here from regex-emacs.h.
      (RE_NREGS): Define unconditionally.
      (boolean): Remove.  All uses replaced by bool.
      (WIDE_CHAR_SUPPORT, regfree, regexec, regcomp, regerror):
      (re_set_syntax, re_syntax_options, WEAK_ALIAS, gettext, gettext_noop):
      Remove.  All uses removed.
      (malloc, realloc, free): Do not redefine.  Adjust all callers
      to use xmalloc, xrealloc, xfree instead.
      (re_error_msgid): Use C99 to avoid need to keep in same order
      as reg_error_t.
      (REGEX_USE_SAFE_ALLOCA): Simplify by using USE_SAFE_ALLOCA.
      (REGEX_ALLOCATE, REGEX_REALLOCATE, REGEX_FREE, REGEX_ALLOCATE_STACK)
      (REGEX_REALLOCATE_STACK, REGEX_FREE_STACK): Remove.
      All callers changed to use the non-REGEX_MALLOC version.
      (REGEX_TALLOC): Remove.  All callers changed to use SAFE_ALLOCA.
      (re_set_syntax): Remove; unused.
      (MATCH_MAY_ALLOCATE): Remove; now always true.  All uses simplified.
      (INIT_FAILURE_ALLOC): Define unconditionally.
      (re_compile_fastmap): Now static.
      (re_compile_pattern): Avoid unnecessary cast.
      * src/regex-emacs.h (EMACS_REGEX_H): Renamed from _REGEX_H to
      avoid possible collision with glibc.
      Don’t include sys/types.h.  All uses of ssize_t changed to ptrdiff_t.
      Don’t worry about C++ or VMS.
      Assume emacs is defined and that _REGEX_RE_COMP and WIDE_CHAR_SUPPORT
      are not.
      Define struct re_registers before including lisp.h.
      (REG_ENOSYS, RE_TRANSLATE_TYPE): Remove; all uses replaced by
      Lisp_Object.
      (regoff_t): Remove.  All uses replaced with ptrdiff_t.
      (re_match, regcomp, regexec, regerror, regfree):
      Remove decl of nonexistent functions.
      (RE_DEBUG, RE_SYNTAX_AWK, RE_SYNTAX_GNU_AWK)
      (RE_SYNTAX_POSIX_AWK, RE_SYNTAX_GREP, RE_SYNTAX_EGREP)
      (RE_SYNTAX_POSIX_EGREP, RE_SYNTAX_ED, RE_SYNTAX_SED)
      (_RE_SYNTAX_POSIX_COMMON, RE_SYNTAX_POSIX_BASIC)
      (RE_SYNTAX_POSIX_MINIMAL_BASIC, RE_SYNTAX_POSIX_EXTENDED)
      (RE_SYNTAX_POSIX_MINIMAL_EXTENDED, REG_EXTENDED, REG_ICASE)
      (REG_NEWLINE, REG_NOSUB, REG_NOTBOL, REG_NOTEOL, regmatch_t):
      Remove; unused.
      * src/search.c (Fset_match_data): Simplify range test now that
      we know it’s ptrdiff_t.
      3a6abe65
    • Paul Eggert's avatar
      Rename src/regex.c to src/regex-emacs.c. · e5652268
      Paul Eggert authored
      This is in preparation for using Gnulib regex for etags,
      to avoid collisions in include directives.
      * src/regex-emacs.c: Rename from src/regex.c.
      * src/regex-emacs.h: Rename from src/regex.h.  All uses changed.
      * test/src/regex-emacs-tests.el: Rename from test/src/regex-tests.el.
      e5652268
  15. 22 Jul, 2018 1 commit
    • Michael Albinus's avatar
      thread-join returns the result of finished thread · e2372797
      Michael Albinus authored
      * doc/lispref/threads.texi (Basic Thread Functions):
      * etc/NEWS: Document return value of `thread-join'.
      
      * src/thread.c (invoke_thread_function, Fmake_thread)
      (init_main_thread): Set result.
      (Fthread_join): Propagate signals, and return result.
      (Vmain_thread): New defvar.
      
      * src/thread.h (struct thread_state): Add `result' field.
      
      * test/src/thread-tests.el (threads-join): Test also return value.
      (threads-join-error): New test.
      (threads-mutex-signal): Check for propagation of `quit' signal.
      e2372797
  16. 16 Jun, 2018 1 commit
    • Daniel Colascione's avatar
      Make regex matching reentrant; update syntax during match · 938d252d
      Daniel Colascione authored
      * src/lisp.h (compile_pattern): Remove prototype of
      now-internal function.
      
      * src/regex.c (POS_AS_IN_BUFFER): Consult gl_state instead of
      re_match_object: the latter can change in Lisp.
      (re_match_2_internal): Switch back to UPDATE_SYNTAX_* FROM
      UPDATE_SYNTAX_FAST*, allowing calls into Lisp.
      
      * src/regex.h (re_match_object): Uncomment declaration.
      
      * src/search.c (struct regexp_cache): Add `busy' field.
      (thaw_buffer_relocation): Delete; rely on unbind.
      (compile_pattern_1): Assert pattern isn't busy.
      (shrink_regexp_cache): Don't shrink busy patterns.
      (clear_regexp_cache): Don't nuke busy patterns.
      (unfreeze_pattern, freeze_pattern): New functions.
      (compile_pattern): Return a regexp_cache pointer instead of the
      re_pattern_buffer, allowing callers to use `freeze_pattern' if
      needed.  Do not consider busy patterns as cache hit candidates;
      error if we run out of non-busy cache entries.
      (looking_at_1, fast_looking_at): Snapshot
      Vinhibit_changing_match_data; mark pattern busy while we're
      matching it; unbind.
      (string_match_1, fast_string_match_internal)
      (fast_c_string_match_ignore_case): Adjust for compile_pattern
      return type.
      (search_buffer_re): Regex code from old search_buffer moved here;
      snapshot Vinhibit_changing_match_data; mark pattern busy while
      we're matching it; unbind.
      (search_buffer_non_re): Non-regex code from old search_buffer
      moved here.
      (search_buffer): Split into search_buffer_re,
      search_buffer_non_re.
      (syms_of_search): Staticpro re_match_object, even though we really
      shouldn't have to.
      
      * src/syntax.h (UPDATE_SYNTAX_TABLE_FORWARD_FAST):
      (UPDATE_SYNTAX_TABLE_FAST): Remove.
      
      * src/thread.h (struct thread_state): Remove m_re_match_object,
      which is global again.  (It never needs to be preserved across
      thread switch.)
      938d252d
  17. 10 Jun, 2018 1 commit
    • Paul Eggert's avatar
      Use native alignment to access Lisp object data · 0303fab3
      Paul Eggert authored
      Instead of using __builtin_assume_aligned (P, GCALIGNMENT) to
      tell GCC that P has alignment 8, use (T *) P where T is the
      type of the pointed-to object, to tell GCC that P has native
      alignment.  This is simpler, matches the intent better, and
      should help simplify future improvements.  Some of these
      changes are to pacify gcc -Wnull-dereference, since GCC is
      smarter about pointers now that Emacs no longer uses
      __builtin_assume_aligned; these minor changes should improve
      code efficiency slightly.  On Fedora 28 x86-64 with default
      optimization this patch shrinks the size of the Emacs text
      segment by 0.36%.
      * src/conf_post.h (__has_builtin, __builtin_assume_aligned):
      Remove; no longer used.
      * src/dbusbind.c (XD_OBJECT_TO_DBUS_TYPE):
      Pacify -Wnull-dereference by using XCAR instead of CAR_SAFE
      and XCDR instead of CDR_SAFE when this is safe.
      * src/fileio.c (Fexpand_file_name):
      * src/font.c (clear_font_cache):
      Pacify -Wnull-dereference by removing unnecessary NILP test.
      * src/keyboard.c (xevent_start): New function.
      (read_char, read_key_sequence): Pacify -Wnull-dereference by
      using xevent_start instead of EVENT_START.
      * src/lisp.h (lisp_h_XUNTAG): Remove; XUNTAG is always a macro
      now, since it can no longer be implemented as a function.
      (XUNTAG): New third argument CTYPE.  All uses changed.
      Cast result to CTYPE * instead of using __builtin_assume_aligned.
      Simplify by using LISP_WORD_TAG.
      (LISP_WORD_TAG): New macro.
      (TAG_PTR): Use it.
      * src/menu.c (x_popup_menu_1):
      Pacify -Wnull-dereference by using XCAR instead of Fcar and
      XCDR instead of Fcdr where this is safe.
      0303fab3
  18. 18 Jan, 2018 1 commit
  19. 01 Jan, 2018 1 commit
  20. 13 Nov, 2017 1 commit
    • Paul Eggert's avatar
      Change vectorlike from struct to union · 5d68dc9a
      Paul Eggert authored
      * src/lisp.h (vectorlike_headed): Change from struct to union.
      All uses changed.  Since it has only one member, this does not
      change semantics.  This is designed to simplify future changes
      needed to fix bugs like Bug#29040.  All uses changed.
      5d68dc9a
  21. 18 Oct, 2017 1 commit
    • Eli Zaretskii's avatar
      Fix the MSDOS build. · 2f7163fb
      Eli Zaretskii authored
      * msdos/sed1v2.inp (GETADDRINFO_A_LIBS, LIBLCMS2, XDBE_LIBS)
      (XDBE_FLAGS, HYBRID_MALLOC, LIBSYSTEMD_CFLAGS)
      (LIBSYSTEMD_LIBS): Edit to empty.
      (LIBRESOLV, DEPFLAGS, MKDEPDIR, YMF_PASS_LDFLAGS)
      (PRE_EDIT_LDFLAGS, POST_EDIT_LDFLAGS): Remove editing.
      Remove editing of lines that are no longer present in
      src/Makefile.in.
      * msdos/sed2v2.inp (NEED_MKTIME_INTERNAL)
      (NEED_MKTIME_WORKING): Define to 1.
      (HAVE_STRUCT_DIRENT_D_TYPE): Define to 1 for
      DJGPP >= 2.05.
      (HAVE_STRUCT_ATTRIBUTE_ALIGNED): Define to 1.
      Define PACKAGE_VERSION, not VERSION.
      (FLEXIBLE_ARRAY_MEMBER): Define to empty.
      (HAVE_DECL_*_UNLOCKED): Define to 0.
      (HAVE___BUILTIN_FRAME_ADDRESS): Define to 1.
      (PENDING_*): Don't define, as Gnulib no longer supports that.
      Instead, define _IOERR as it is in libc/file.h.
      * msdos/sed3v2.inp: Use $(CURDIR) instead of $(shell cd) to
      determine the current directory.
      (UPDATE_MANIFEST, UTILITIES): Don't edit.
      * msdos/sedlisp.inp (FIND_DELETE): Edit to "-delete".
      * msdos/sedlibmk.inp (AUTO_DEPEND): Define to yes.
      (HYBRID_MALLOC): Edit to empty.
      (am__cd): Don't edit.
      (../config.status): Replaces $(top_builddir)/config.status.
      Define OMIT_GNULIB_MODULE_foo = true for modules not built for
      MS-DOS.  Convert GL_GENERATE_xxx_H_TRUE and
      GL_GENERATE_xxx_H_FALSE into values of GL_GENERATE_xxx_H.
      * msdos/mainmake.v2 (src): Use 'compile-one-process', and make
      the command line shorter to fit into 126-char limit of
      command.com.
      * config.bat: Generate src/deps/*.d files.  Rename more files
      like djtar on plain DOS would.
      Don't rename src/dir.h: it is long gone.  Edit
      lib/gnulib.mk.in using the same scripts as for
      lib/Makefile.in.
      * msdos/depfiles.bat: Create *.d files, not *.Po.
      
      * src/thread.c (Fmake_thread) [!THREADS_ENABLED]: Improve the
      error message.
      * src/thread.h [MSDOS]: Include <signal.h>.
      * src/sysselect.h (select) [MSDOS]: Undefine, to avoid
      compilation errors.
      * src/sysdep.c (block_interrupt_signal, restore_signal_mask):
      Expose to MSDOS build.
      * src/process.c (update_processes_for_thread_death)
      [!subprocess]: No-op implementation.
      [HAVE_SETRLIMIT]: Move inclusion of sys/resource.h and
      declaration of nofile_limit outside "#ifdef subprocesses", as
      it's needed for MSDOS.
      * src/msdos.c (faccessat): Declare fullname[].
      * src/msdos.h (ENOTSUP): Define to be identical to ENOSYS.
      Include termhooks.h.
      * src/conf_post.h [WINDOWSNT]: Include ms-w32.h only on
      WINDOWSNT, not DOS_NT.
      
      * admin/admin.el (set-version): Set version on PACKAGE_VERSION.
      2f7163fb
  22. 04 Oct, 2017 1 commit
    • Eli Zaretskii's avatar
      Avoid crashes on C-g when several threads wait for input · ea39d470
      Eli Zaretskii authored
      * src/thread.h (m_getcjmp): New member of 'struct thread_state'.
      (getcjmp): Define to current thread's 'm_getcjmp'.
      * src/thread.c (maybe_reacquire_global_lock): Switch to main
      thread, since this is called from a SIGINT handler, which always
      runs in the context of the main thread.
      * src/lisp.h (sys_jmp_buf, sys_setjmp, sys_longjmp): Move the
      definitions before thread.h is included, as thread.h now uses
      sys_jmp_buf.
      * src/keyboard.c (getcjmp): Remove declaration.
      (read_char): Don't call maybe_reacquire_global_lock here.
      (handle_interrupt): Call maybe_reacquire_global_lock here, if
      invoked from the SIGINT handler, to make sure
      quit_throw_to_read_char runs with main thread's Lisp bindings and
      uses the main thread's jmp_buf buffer.  (Bug#28630)
      ea39d470
  23. 13 Sep, 2017 1 commit
    • Paul Eggert's avatar
      Prefer HTTPS to FTP and HTTP in documentation · bc511a64
      Paul Eggert authored
      Most of this change is to boilerplate commentary such as license URLs.
      This change was prompted by ftp://ftp.gnu.org's going-away party,
      planned for November.  Change these FTP URLs to https://ftp.gnu.org
      instead.  Make similar changes for URLs to other organizations moving
      away from FTP.  Also, change HTTP to HTTPS for URLs to gnu.org and
      fsf.org when this works, as this will further help defend against
      man-in-the-middle attacks (for this part I omitted the MS-DOS and
      MS-Windows sources and the test tarballs to keep the workload down).
      HTTPS is not fully working to lists.gnu.org so I left those URLs alone
      for now.
      bc511a64
  24. 14 Jul, 2017 1 commit
    • Paul Eggert's avatar
      Improve stack-overflow heuristic on GNU/Linux · 9dee1c88
      Paul Eggert authored
      Problem reported by Steve Kemp (Bug#27585).
      * src/eval.c (near_C_stack_top): Remove.  All uses replaced
      by current_thread->stack_top.
      (record_in_backtrace): Set current_thread->stack_top.
      This is for when the Lisp interpreter calls itself.
      * src/lread.c (read1): Set current_thread->stack_top.
      This is for recursive s-expression reads.
      * src/print.c (print_object): Set current_thread->stack_top.
      This is for recursive s-expression printing.
      * src/thread.c (mark_one_thread): Get stack top first.
      * src/thread.h (struct thread_state.stack_top): Now void *, not char *.
      9dee1c88
  25. 01 Jan, 2017 1 commit
  26. 30 Dec, 2016 1 commit
    • Paul Eggert's avatar
      Rename primary_thread to main_thread · 108ef803
      Paul Eggert authored
      This avoids the confusion of using two different phrases "main thread"
      and "primary thread" internally to mean the same thing.  See:
      http://lists.gnu.org/archive/html/emacs-devel/2016-12/msg01142.html
      * src/thread.c (main_thread): Rename from primary_thread,
      since the new name no longer clashes with main_thread_id
      and Emacs internals normally call this the "main thread".
      (init_main_thread): Rename from init_primary_thread.
      (main_thread_p): Rename from primary_thread_p.
      All uses changed.
      108ef803
  27. 25 Dec, 2016 2 commits
    • Paul Eggert's avatar
      regex.h now includes sys/types.h · 615cec1d
      Paul Eggert authored
      * src/dired.c, src/emacs.c, src/search.c, src/syntax.c, src/thread.h:
      Do not include sys/types.h; no longer needed.
      * src/regex.h: Include <sys/types.h>, as that's what Gnulib and
      glibc regex.h does, and POSIX has blessed this since 2008.
      615cec1d
    • Paul Eggert's avatar
      Reorder lisp.h to declare types before using them · f5b9c1e5
      Paul Eggert authored
      This puts basic functions for types to be after the corresponding
      type definitions.  This is a more-common programming style in C,
      and will make it easier to port Emacs to gcc
      -fcheck-pointer-bounds, since the functions now have access to the
      corresponding types' sizes.  This patch does not change the code;
      it just moves declarations and definitions and removes
      no-longer-needed forward declarations (Bug#25128).
      * src/buffer.c, src/data.c, src/image.c:
      Include process.h, for PROCESSP.
      * src/buffer.h (BUFFERP, CHECK_BUFFER, XBUFFER):
      * src/process.h (PROCESSP, CHECK_PROCESS, XPROCESS):
      * src/termhooks.h (TERMINALP, XTERMINAL):
      * src/window.h (WINDOWP, CHECK_WINDOW, XWINDOW):
      * src/thread.h (THREADP, CHECK_THREAD, XTHREAD, MUTEXP, CHECK_MUTEX)
      (XMUTEX, CONDVARP, CHECK_CONDVAR, XCONDVAR):
      Move here from lisp.h.
      * src/intervals.h: Include buffer.h, for BUFFERP.
      Include lisp.h, for Lisp_Object.
      * src/lisp.h: Reorder declarations and definitions as described
      above.  Move thread includes to be later, so that they can use the
      reordered definitions.  Move some symbols to other headers (noted
      elsewhere).  Remove forward decls that are no longer needed.
      * src/thread.h: Include systhread.h here, not in lisp.h,
      since lisp.h itself does not need systhread.h.
      f5b9c1e5
  28. 24 Dec, 2016 1 commit
    • Paul Eggert's avatar
      Remove interpreter’s byte stack · a815e5f1
      Paul Eggert authored
      This improves performance overall on my benchmark on x86-64,
      since the interpreted program-counter resides in a machine
      register rather than in RAM.
      * etc/DEBUG, src/.gdbinit: Remove xbytecode GDB command, as there
      is no longer a byte stack to decode.
      * src/bytecode.c (struct byte_stack, byte_stack_list)
      (relocate_byte_stack): Remove.  All uses removed.
      (FETCH): Simplify now that pc is now local (typically, in a
      register) and no longer needs to be relocated.
      (CHECK_RANGE): Remove.  All uses now done inline, in a different way.
      (BYTE_CODE_QUIT): Remove; now done by op_relative_branch.
      (exec_byte_code): Allocate a copy of the function’s bytecode,
      so that there is no problem if GC moves it.
      * src/lisp.h (struct handler): Remove byte_stack member.
      All uses removed.
      * src/thread.c (unmark_threads): Remove.  All uses removed.
      * src/thread.h (struct thread_state): Remove m_byte_stack_list member.
      All uses removed.  m_stack_bottom is now the first non-Lisp field.
      a815e5f1
  29. 22 Dec, 2016 2 commits
  30. 19 Dec, 2016 1 commit
    • Eli Zaretskii's avatar
      Fix crashes upon C-g on Posix TTY frames · fe3188b1
      Eli Zaretskii authored
      * src/thread.h (struct thread_state): New member not_holding_lock.
      (maybe_reacquire_global_lock): Add prototype.
      * src/thread.c: Include syssignal.h.
      (maybe_reacquire_global_lock): New function.
      (really_call_select): Set the not_holding_lock member of the
      thread state before releasing the lock, and rest it after
      re-acquiring the lock when the select function returns.  Block
      SIGINT while doing this to make sure we are not interrupted on TTY
      frames.
      * src/sysdep.c (block_interrupt_signal, restore_signal_mask): New
      functions.
      * src/syssignal.h (block_interrupt_signal, restore_signal_mask):
      Add prototypes.
      * src/keyboard.c (read_char) [THREADS_ENABLED]: Call
      maybe_reacquire_global_lock.  (Bug#25178)
      fe3188b1
  31. 17 Dec, 2016 1 commit
    • Eli Zaretskii's avatar
      Fix comments · 0390edcb
      Eli Zaretskii authored
      * src/thread.h (struct thread_state): Fix comments.
      * src/process.c (wait_reading_process_output): Fix a typo in
      commentary.
      0390edcb
  32. 11 Dec, 2016 2 commits
    • Eli Zaretskii's avatar
      Undo part of last change · 2783e0e3
      Eli Zaretskii authored
      * src/thread.h:
      * src/keyboard.c:
      * src/keyboard.h: Undo part of last change:
      input_available_clear_time is again a global variable.
      2783e0e3
    • Eli Zaretskii's avatar
      Avoid aborts when a thread signals an error · 99708163
      Eli Zaretskii authored
      * src/thread.h (struct thread_state): Add members
      m_waiting_for_input and m_input_available_clear_time.
      (waiting_for_input, input_available_clear_time): New macros.
      * src/keyboard.c (waiting_for_input, input_available_clear_time):
      Remove; they are now macros that reference the current thread.
      (Bug#25171)
      * src/w32select.c: Don't include keyboard.h.
      
      * test/src/thread-tests.el (thread-errors): New test.
      99708163
  33. 10 Dec, 2016 1 commit
  34. 09 Dec, 2016 2 commits
  35. 05 Dec, 2016 1 commit