diff --git a/configure.ac b/configure.ac
index 4cad214..bb9eb37 100644
--- a/configure.ac
+++ b/configure.ac
@@ -4818,6 +4818,18 @@ if test "$emacs_cv_struct_alignment" = yes; then
structure to an N-byte boundary.])
fi
+AC_CACHE_CHECK([whether function may be placed in a specified section],
+ [emacs_cv_function_section],
+ [AC_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM([[void __attribute__ ((section (".once"))) f (void) {}]])],
+ [emacs_cv_function_section=yes],
+ [emacs_cv_function_section=no])])
+if test "$emacs_cv_function_section" = yes; then
+ AC_DEFINE([HAVE_FUNCTION_ATTRIBUTE_SECTION], 1,
+ [Define to 1 if function '__attribute__ ((section (NAME)))' is supported.])
+ AC_CHECK_TOOL(STRIP, strip, :)
+fi
+
if test "${GNU_MALLOC}" = "yes" ; then
AC_DEFINE(GNU_MALLOC, 1,
[Define to 1 if you want to use the GNU memory allocator.])
diff --git a/lib-src/make-docfile.c b/lib-src/make-docfile.c
index bc5420e..b54a87d 100644
--- a/lib-src/make-docfile.c
+++ b/lib-src/make-docfile.c
@@ -39,6 +39,7 @@ along with GNU Emacs. If not, see . */
#include
#include
#include /* config.h unconditionally includes this anyway */
+#include
#ifdef WINDOWSNT
/* Defined to be sys_fopen in ms-w32.h, but only #ifdef emacs, so this
@@ -246,6 +247,12 @@ start_globals (void)
static char input_buffer[128];
+static char *
+copy_input_buffer (size_t len)
+{
+ return memcpy (xmalloc (len), input_buffer, len);
+}
+
/* Some state during the execution of `read_c_string_or_comment'. */
struct rcsoc_state
{
@@ -554,7 +561,8 @@ enum global_type
EMACS_INTEGER,
BOOLEAN,
SYMBOL,
- FUNCTION
+ FUNCTION,
+ ONCEFN
};
/* A single global. */
@@ -643,7 +651,7 @@ static void
write_globals (void)
{
int i, j;
- bool seen_defun = false;
+ bool seen_defun = false, seen_oncefn = false;
int symnum = 0;
int num_symbols = 0;
qsort (globals, num_globals, sizeof (struct global), compare_globals);
@@ -680,6 +688,13 @@ write_globals (void)
case LISP_OBJECT:
type = "Lisp_Object";
break;
+ case ONCEFN:
+ if (!seen_oncefn)
+ {
+ putchar ('\n');
+ seen_oncefn = true;
+ }
+ /* Fallthrough case. */
case SYMBOL:
case FUNCTION:
if (!seen_defun)
@@ -706,7 +721,7 @@ write_globals (void)
"DEFINE_LISP_SYMBOL_END (%s)\n\n"),
globals[i].name, globals[i].name, symnum++,
globals[i].name, globals[i].name, globals[i].name);
- else
+ else if (globals[i].type == FUNCTION)
{
/* It would be nice to have a cleaner way to deal with these
special hacks. */
@@ -760,6 +775,19 @@ write_globals (void)
puts (";");
}
+ else if (globals[i].type == ONCEFN)
+ {
+ fputs ("extern void ", stdout);
+#ifdef HAVE_FUNCTION_ATTRIBUTE_SECTION
+ fputs ("__attribute__ ((section (\".once\"))) ", stdout);
+#endif
+ fputs (globals[i].name, stdout);
+ fputs (" (void);\n", stdout);
+ if (i == num_globals - 1)
+ puts ("");
+ }
+ else
+ abort ();
}
if (!seen_defun)
@@ -817,6 +845,23 @@ scan_c_file (char *filename, const char *mode)
return scan_c_stream (infile);
}
+/* Return 1 if next input from INFILE is equal to P, -1 if EOF,
+ 0 if input doesn't match. */
+
+static int
+stream_match (FILE *infile, const char *p)
+{
+ for (; *p; p++)
+ {
+ int c = getc (infile);
+ if (c == EOF)
+ return -1;
+ if (c != *p)
+ return 0;
+ }
+ return 1;
+}
+
static int
scan_c_stream (FILE *infile)
{
@@ -910,6 +955,105 @@ scan_c_stream (FILE *infile)
c = getc (infile);
defunflag = c == 'U';
}
+ else if (c == 's')
+ {
+ /* Try syms_of_XXX. */
+ if (stream_match (infile, "yms_of_") != 1)
+ continue;
+ else
+ {
+ char *p = input_buffer + 8;
+
+ memcpy (input_buffer, "syms_of_", 8);
+
+ while (1)
+ {
+ c = getc (infile);
+ if (c < 0)
+ goto eof;
+ else if (p - input_buffer > sizeof (input_buffer) - 1)
+ abort ();
+ else if (isalnum (c) || c == '_')
+ *p++ = c;
+ else
+ break;
+ }
+ if (p != input_buffer + 8)
+ {
+ *p = '\0';
+ name = copy_input_buffer (p - input_buffer + 1);
+ add_global (ONCEFN, name, 0, 0);
+ continue;
+ }
+ }
+ }
+ else if (c == 'k')
+ {
+ /* Try keys_of_YYY. */
+ if (stream_match (infile, "eys_of_") != 1)
+ continue;
+ else
+ {
+ char *p = input_buffer + 8;
+
+ memcpy (input_buffer, "keys_of_", 8);
+
+ while (1)
+ {
+ c = getc (infile);
+ if (c < 0)
+ goto eof;
+ else if (p - input_buffer > sizeof (input_buffer) - 1)
+ abort ();
+ else if (isalnum (c) || c == '_')
+ *p++ = c;
+ else
+ break;
+ }
+ if (p != input_buffer + 8)
+ {
+ *p = '\0';
+ name = copy_input_buffer (p - input_buffer + 1);
+ add_global (ONCEFN, name, 0, 0);
+ continue;
+ }
+ }
+ }
+ else if (c == 'i')
+ {
+ /* Try init_ZZZ_once. */
+ if (stream_match (infile, "nit_") != 1)
+ continue;
+ else
+ {
+ char *p = input_buffer + 5;
+
+ memcpy (input_buffer, "init_", 5);
+
+ while (1)
+ {
+ c = getc (infile);
+ if (c < 0)
+ goto eof;
+ else if (p - input_buffer > sizeof (input_buffer) - 1)
+ abort ();
+ else if (isalnum (c) || c == '_')
+ *p++ = c;
+ else
+ break;
+ }
+ if (p != input_buffer + 5)
+ {
+ *p = '\0';
+ if (p > input_buffer + 9 && !strcmp (p - 5, "_once"))
+ {
+ name = copy_input_buffer (p - input_buffer + 1);
+ add_global (ONCEFN, name, 0, 0);
+ continue;
+ }
+ }
+ }
+ }
else continue;
if (generate_globals
@@ -957,8 +1101,7 @@ scan_c_stream (FILE *infile)
|| c == '\n' || c == '\r'));
input_buffer[i] = '\0';
- name = xmalloc (i + 1);
- memcpy (name, input_buffer, i + 1);
+ name = copy_input_buffer (i + 1);
if (type == SYMBOL)
{
diff --git a/src/Makefile.in b/src/Makefile.in
index 2ac34f5..a126fe5 100644
--- a/src/Makefile.in
+++ b/src/Makefile.in
@@ -117,6 +117,10 @@ SETFATTR = @SETFATTR@
PAXCTL_if_present = $(or $(PAXCTL),: paxctl)
SETFATTR_if_present = $(or $(SETFATTR),: setfattr)
+## Substituted only if we strip .once section.
+STRIP = @STRIP@
+STRIP_if_present = $(or $(STRIP),: strip)
+
## Some systems define this to request special libraries.
address@hidden@
@@ -456,6 +460,7 @@ ifeq ($(CANNOT_DUMP),yes)
else
LC_ALL=C $(RUN_TEMACS) -batch -l loadup dump
$(PAXCTL_if_present) -zex $@
+ $(STRIP_if_present) -R .once $@
ln -f $@ bootstrap-emacs$(EXEEXT)
endif
diff --git a/src/composite.h b/src/composite.h
index fb9f9eb..5a9ca45 100644
--- a/src/composite.h
+++ b/src/composite.h
@@ -197,7 +197,6 @@ extern bool find_composition (ptrdiff_t, ptrdiff_t, ptrdiff_t *, ptrdiff_t *,
Lisp_Object *, Lisp_Object);
extern void update_compositions (ptrdiff_t, ptrdiff_t, int);
extern void make_composition_value_copy (Lisp_Object);
-extern void syms_of_composite (void);
extern void compose_text (ptrdiff_t, ptrdiff_t, Lisp_Object, Lisp_Object,
Lisp_Object);
diff --git a/src/cygw32.h b/src/cygw32.h
index e14e3d1..628ee6d 100644
--- a/src/cygw32.h
+++ b/src/cygw32.h
@@ -33,7 +33,6 @@ along with GNU Emacs. If not, see . */
#include "lisp.h"
#include "coding.h"
-extern void syms_of_cygw32 (void);
extern char * w32_strerror (int error_no);
#endif /* CYGW32_H */
diff --git a/src/dispextern.h b/src/dispextern.h
index e9e6f70..3760ba0 100644
--- a/src/dispextern.h
+++ b/src/dispextern.h
@@ -3488,7 +3488,6 @@ void update_single_window (struct window *);
void do_pending_window_change (bool);
void change_frame_size (struct frame *, int, int, bool, bool, bool, bool);
void init_display (void);
-void syms_of_display (void);
extern void spec_glyph_lookup_face (struct window *, GLYPH *);
extern void fill_up_frame_row_with_spaces (struct glyph_row *, int);
diff --git a/src/emacs.c b/src/emacs.c
index d09c3c3..f61cf07 100644
--- a/src/emacs.c
+++ b/src/emacs.c
@@ -209,7 +209,6 @@ char **initial_argv;
int initial_argc;
static void sort_args (int argc, char **argv);
-static void syms_of_emacs (void);
/* C99 needs each string to be at most 4095 characters, and the usage
strings below are split to not overflow this limit. */
diff --git a/src/font.h b/src/font.h
index 5a3e38a..34800b9 100644
--- a/src/font.h
+++ b/src/font.h
@@ -772,32 +772,22 @@ extern void font_filter_properties (Lisp_Object font,
#ifdef HAVE_FREETYPE
extern struct font_driver ftfont_driver;
-extern void syms_of_ftfont (void);
#endif /* HAVE_FREETYPE */
#ifdef HAVE_X_WINDOWS
extern struct font_driver xfont_driver;
-extern void syms_of_xfont (void);
-extern void syms_of_ftxfont (void);
#ifdef HAVE_XFT
extern struct font_driver xftfont_driver;
#endif
#if defined HAVE_FREETYPE || defined HAVE_XFT
extern struct font_driver ftxfont_driver;
-extern void syms_of_xftfont (void);
#endif
-#ifdef HAVE_BDFFONT
-extern void syms_of_bdffont (void);
-#endif /* HAVE_BDFFONT */
#endif /* HAVE_X_WINDOWS */
#ifdef HAVE_NTGUI
extern struct font_driver w32font_driver;
extern struct font_driver uniscribe_font_driver;
-extern void syms_of_w32font (void);
#endif /* HAVE_NTGUI */
#ifdef HAVE_NS
extern struct font_driver nsfont_driver;
-extern void syms_of_nsfont (void);
-extern void syms_of_macfont (void);
#endif /* HAVE_NS */
#ifndef FONT_DEBUG
diff --git a/src/gnutls.h b/src/gnutls.h
index fd69682..1ec68ec 100644
--- a/src/gnutls.h
+++ b/src/gnutls.h
@@ -83,7 +83,4 @@ extern void emacs_gnutls_transport_set_errno (gnutls_session_t state, int err);
extern Lisp_Object emacs_gnutls_deinit (Lisp_Object);
#endif
-
-extern void syms_of_gnutls (void);
-
#endif
diff --git a/src/intervals.h b/src/intervals.h
index b2260d0..0880ee3 100644
--- a/src/intervals.h
+++ b/src/intervals.h
@@ -290,8 +290,6 @@ Lisp_Object get_char_property_and_overlay (Lisp_Object, Lisp_Object,
extern int text_property_stickiness (Lisp_Object prop, Lisp_Object pos,
Lisp_Object buffer);
-extern void syms_of_textprop (void);
-
#include "composite.h"
INLINE_HEADER_END
diff --git a/src/keymap.h b/src/keymap.h
index 215dd3f..17b1350 100644
--- a/src/keymap.h
+++ b/src/keymap.h
@@ -39,8 +39,6 @@ extern void describe_map_tree (Lisp_Object, bool, Lisp_Object, Lisp_Object,
extern ptrdiff_t current_minor_maps (Lisp_Object **, Lisp_Object **);
extern void initial_define_key (Lisp_Object, int, const char *);
extern void initial_define_lispy_key (Lisp_Object, const char *, const char *);
-extern void syms_of_keymap (void);
-extern void keys_of_keymap (void);
typedef void (*map_keymap_function_t)
(Lisp_Object key, Lisp_Object val, Lisp_Object args, void *data);
diff --git a/src/lisp.h b/src/lisp.h
index 9ed9375..caeb34c 100644
--- a/src/lisp.h
+++ b/src/lisp.h
@@ -3480,36 +3480,22 @@ extern _Noreturn void args_out_of_range_3 (Lisp_Object, Lisp_Object,
Lisp_Object);
extern Lisp_Object do_symval_forwarding (union Lisp_Fwd *);
extern void set_internal (Lisp_Object, Lisp_Object, Lisp_Object, bool);
-extern void syms_of_data (void);
extern void swap_in_global_binding (struct Lisp_Symbol *);
-/* Defined in cmds.c */
-extern void syms_of_cmds (void);
-extern void keys_of_cmds (void);
-
/* Defined in coding.c. */
extern Lisp_Object detect_coding_system (const unsigned char *, ptrdiff_t,
ptrdiff_t, bool, bool, Lisp_Object);
extern void init_coding (void);
-extern void init_coding_once (void);
-extern void syms_of_coding (void);
/* Defined in character.c. */
extern ptrdiff_t chars_in_text (const unsigned char *, ptrdiff_t);
extern ptrdiff_t multibyte_chars_in_text (const unsigned char *, ptrdiff_t);
-extern void syms_of_character (void);
/* Defined in charset.c. */
extern void init_charset (void);
-extern void init_charset_once (void);
-extern void syms_of_charset (void);
/* Structure forward declarations. */
struct charset;
-/* Defined in syntax.c. */
-extern void init_syntax_once (void);
-extern void syms_of_syntax (void);
-
/* Defined in fns.c. */
enum { NEXT_ALMOST_PRIME_LIMIT = 11 };
extern EMACS_INT next_almost_prime (EMACS_INT) ATTRIBUTE_CONST;
@@ -3539,24 +3525,19 @@ extern ptrdiff_t string_char_to_byte (Lisp_Object, ptrdiff_t);
extern ptrdiff_t string_byte_to_char (Lisp_Object, ptrdiff_t);
extern Lisp_Object string_to_multibyte (Lisp_Object);
extern Lisp_Object string_make_unibyte (Lisp_Object);
-extern void syms_of_fns (void);
/* Defined in floatfns.c. */
-extern void syms_of_floatfns (void);
extern Lisp_Object fmod_float (Lisp_Object x, Lisp_Object y);
/* Defined in fringe.c. */
-extern void syms_of_fringe (void);
extern void init_fringe (void);
#ifdef HAVE_WINDOW_SYSTEM
extern void mark_fringe_data (void);
-extern void init_fringe_once (void);
#endif /* HAVE_WINDOW_SYSTEM */
/* Defined in image.c. */
extern int x_bitmap_mask (struct frame *, ptrdiff_t);
extern void reset_image_types (void);
-extern void syms_of_image (void);
/* Defined in insdel.c. */
extern void move_gap_both (ptrdiff_t, ptrdiff_t);
@@ -3602,7 +3583,6 @@ extern void adjust_markers_for_delete (ptrdiff_t, ptrdiff_t,
extern void replace_range (ptrdiff_t, ptrdiff_t, Lisp_Object, bool, bool, bool);
extern void replace_range_2 (ptrdiff_t, ptrdiff_t, ptrdiff_t, ptrdiff_t,
const char *, ptrdiff_t, ptrdiff_t, bool);
-extern void syms_of_insdel (void);
/* Defined in dispnew.c. */
#if (defined PROFILING \
@@ -3637,15 +3617,11 @@ extern void truncate_echo_area (ptrdiff_t);
extern void redisplay (void);
void set_frame_cursor_types (struct frame *, Lisp_Object);
-extern void syms_of_xdisp (void);
extern void init_xdisp (void);
extern Lisp_Object safe_eval (Lisp_Object);
extern int pos_visible_p (struct window *, ptrdiff_t, int *,
int *, int *, int *, int *, int *);
-/* Defined in xsettings.c. */
-extern void syms_of_xsettings (void);
-
/* Defined in vm-limit.c. */
extern void memory_warnings (void *, void (*warnfun) (const char *));
@@ -3810,9 +3786,7 @@ extern void free_save_value (Lisp_Object);
extern Lisp_Object build_overlay (Lisp_Object, Lisp_Object, Lisp_Object);
extern void free_marker (Lisp_Object);
extern void free_cons (struct Lisp_Cons *);
-extern void init_alloc_once (void);
extern void init_alloc (void);
-extern void syms_of_alloc (void);
extern struct buffer * allocate_buffer (void);
extern int valid_lisp_object_p (Lisp_Object);
extern int relocatable_string_data_p (const char *);
@@ -3844,7 +3818,6 @@ extern void map_char_table_for_charset (void (*c_function) (Lisp_Object, Lisp_Ob
Lisp_Object, struct charset *,
unsigned, unsigned);
extern Lisp_Object uniprop_table (Lisp_Object);
-extern void syms_of_chartab (void);
/* Defined in print.c. */
extern Lisp_Object Vprin1_to_string_buffer;
@@ -3858,8 +3831,6 @@ extern Lisp_Object internal_with_output_to_temp_buffer
(const char *, Lisp_Object (*) (Lisp_Object), Lisp_Object);
#define FLOAT_TO_STRING_BUFSIZE 350
extern int float_to_string (char *, double);
-extern void init_print_once (void);
-extern void syms_of_print (void);
/* Defined in doprnt.c. */
extern ptrdiff_t doprnt (char *, ptrdiff_t, const char *, const char *,
@@ -3894,7 +3865,6 @@ extern void map_obarray (Lisp_Object, void (*) (Lisp_Object, Lisp_Object),
extern void dir_warning (const char *, Lisp_Object);
extern void init_obarray (void);
extern void init_lread (void);
-extern void syms_of_lread (void);
INLINE Lisp_Object
intern (const char *str)
@@ -3968,12 +3938,10 @@ extern _Noreturn void verror (const char *, va_list)
ATTRIBUTE_FORMAT_PRINTF (1, 0);
extern void un_autoload (Lisp_Object);
extern Lisp_Object call_debugger (Lisp_Object arg);
-extern void init_eval_once (void);
extern Lisp_Object safe_call (ptrdiff_t, Lisp_Object, ...);
extern Lisp_Object safe_call1 (Lisp_Object, Lisp_Object);
extern Lisp_Object safe_call2 (Lisp_Object, Lisp_Object, Lisp_Object);
extern void init_eval (void);
-extern void syms_of_eval (void);
extern void unwind_body (Lisp_Object);
extern ptrdiff_t record_in_backtrace (Lisp_Object, Lisp_Object *, ptrdiff_t);
extern void mark_specpdl (void);
@@ -3995,7 +3963,6 @@ extern Lisp_Object make_buffer_string (ptrdiff_t, ptrdiff_t, bool);
extern Lisp_Object make_buffer_string_both (ptrdiff_t, ptrdiff_t, ptrdiff_t,
ptrdiff_t, bool);
extern void init_editfns (void);
-extern void syms_of_editfns (void);
/* Defined in buffer.c. */
extern bool mouse_face_overlay_overlaps (Lisp_Object);
@@ -4008,10 +3975,7 @@ extern void report_overlay_modification (Lisp_Object, Lisp_Object, bool,
extern bool overlay_touches_p (ptrdiff_t);
extern Lisp_Object other_buffer_safely (Lisp_Object);
extern Lisp_Object get_truename_buffer (Lisp_Object);
-extern void init_buffer_once (void);
extern void init_buffer (int);
-extern void syms_of_buffer (void);
-extern void keys_of_buffer (void);
/* Defined in marker.c. */
@@ -4026,7 +3990,6 @@ extern Lisp_Object set_marker_both (Lisp_Object, Lisp_Object, ptrdiff_t, ptrdiff
extern Lisp_Object set_marker_restricted_both (Lisp_Object, Lisp_Object,
ptrdiff_t, ptrdiff_t);
extern Lisp_Object build_marker (struct buffer *, ptrdiff_t, ptrdiff_t);
-extern void syms_of_marker (void);
/* Defined in fileio.c. */
@@ -4044,7 +4007,6 @@ extern Lisp_Object emacs_readlinkat (int, const char *);
extern bool file_directory_p (const char *);
extern bool file_accessible_directory_p (Lisp_Object);
extern void init_fileio (void);
-extern void syms_of_fileio (void);
extern Lisp_Object make_temp_name (Lisp_Object, bool);
/* Defined in search.c. */
@@ -4070,7 +4032,6 @@ extern ptrdiff_t find_newline_no_quit (ptrdiff_t, ptrdiff_t,
ptrdiff_t, ptrdiff_t *);
extern ptrdiff_t find_before_next_newline (ptrdiff_t, ptrdiff_t,
ptrdiff_t, ptrdiff_t *);
-extern void syms_of_search (void);
extern void clear_regexp_cache (void);
/* Defined in minibuf.c. */
@@ -4078,22 +4039,6 @@ extern void clear_regexp_cache (void);
extern Lisp_Object Vminibuffer_list;
extern Lisp_Object last_minibuf_string;
extern Lisp_Object get_minibuffer (EMACS_INT);
-extern void init_minibuf_once (void);
-extern void syms_of_minibuf (void);
-
-/* Defined in callint.c. */
-
-extern void syms_of_callint (void);
-
-/* Defined in casefiddle.c. */
-
-extern void syms_of_casefiddle (void);
-extern void keys_of_casefiddle (void);
-
-/* Defined in casetab.c. */
-
-extern void init_casetab_once (void);
-extern void syms_of_casetab (void);
/* Defined in keyboard.c. */
@@ -4123,14 +4068,11 @@ extern Lisp_Object recursive_edit_1 (void);
extern void record_auto_save (void);
extern void force_auto_save_soon (void);
extern void init_keyboard (void);
-extern void syms_of_keyboard (void);
-extern void keys_of_keyboard (void);
/* Defined in indent.c. */
extern ptrdiff_t current_column (void);
extern void invalidate_current_column (void);
extern bool indented_beyond_p (ptrdiff_t, ptrdiff_t, EMACS_INT);
-extern void syms_of_indent (void);
/* Defined in frame.c. */
extern void store_frame_param (struct frame *, Lisp_Object, Lisp_Object);
@@ -4138,7 +4080,6 @@ extern void store_in_alist (Lisp_Object *, Lisp_Object, Lisp_Object);
extern Lisp_Object do_switch_frame (Lisp_Object, int, int, Lisp_Object);
extern Lisp_Object get_frame_param (struct frame *, Lisp_Object);
extern void frames_discard_buffer (Lisp_Object);
-extern void syms_of_frame (void);
/* Defined in emacs.c. */
extern char **initial_argv;
@@ -4204,7 +4145,6 @@ extern void add_gpm_wait_descriptor (int);
extern void delete_gpm_wait_descriptor (int);
#endif
extern void init_process_emacs (void);
-extern void syms_of_process (void);
extern void setup_process_coding_systems (Lisp_Object);
/* Defined in callproc.c. */
@@ -4215,16 +4155,13 @@ extern int child_setup (int, int, int, char **, bool, Lisp_Object);
extern void init_callproc_1 (void);
extern void init_callproc (void);
extern void set_initial_environment (void);
-extern void syms_of_callproc (void);
/* Defined in doc.c. */
extern Lisp_Object read_doc_string (Lisp_Object);
extern Lisp_Object get_doc_string (Lisp_Object, bool, bool);
-extern void syms_of_doc (void);
extern int read_bytecode_char (bool);
/* Defined in bytecode.c. */
-extern void syms_of_bytecode (void);
extern struct byte_stack *byte_stack_list;
#if BYTE_MARK_STACK
extern void mark_byte_stack (void);
@@ -4235,7 +4172,6 @@ extern Lisp_Object exec_byte_code (Lisp_Object, Lisp_Object, Lisp_Object,
/* Defined in macros.c. */
extern void init_macros (void);
-extern void syms_of_macros (void);
/* Defined in undo.c. */
extern void truncate_undo_list (struct buffer *);
@@ -4246,17 +4182,10 @@ extern void record_change (ptrdiff_t, ptrdiff_t);
extern void record_property_change (ptrdiff_t, ptrdiff_t,
Lisp_Object, Lisp_Object,
Lisp_Object);
-extern void syms_of_undo (void);
/* Defined in textprop.c. */
extern void report_interval_modification (Lisp_Object, Lisp_Object);
-/* Defined in menu.c. */
-extern void syms_of_menu (void);
-
-/* Defined in xmenu.c. */
-extern void syms_of_xmenu (void);
-
/* Defined in termchar.h. */
struct tty_display_info;
@@ -4296,79 +4225,32 @@ extern void unlock_all_files (void);
extern void lock_file (Lisp_Object);
extern void unlock_file (Lisp_Object);
extern void unlock_buffer (struct buffer *);
-extern void syms_of_filelock (void);
extern int str_collate (Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object);
-/* Defined in sound.c. */
-extern void syms_of_sound (void);
-
/* Defined in category.c. */
-extern void init_category_once (void);
extern Lisp_Object char_category_set (int);
-extern void syms_of_category (void);
-
-/* Defined in ccl.c. */
-extern void syms_of_ccl (void);
/* Defined in dired.c. */
-extern void syms_of_dired (void);
extern Lisp_Object directory_files_internal (Lisp_Object, Lisp_Object,
Lisp_Object, Lisp_Object,
bool, Lisp_Object);
/* Defined in term.c. */
extern int *char_ins_del_vector;
-extern void syms_of_term (void);
extern _Noreturn void fatal (const char *msgid, ...)
ATTRIBUTE_FORMAT_PRINTF (1, 2);
-/* Defined in terminal.c. */
-extern void syms_of_terminal (void);
-
/* Defined in font.c. */
-extern void syms_of_font (void);
extern void init_font (void);
-#ifdef HAVE_WINDOW_SYSTEM
-/* Defined in fontset.c. */
-extern void syms_of_fontset (void);
-#endif
-
/* Defined in gfilenotify.c */
#ifdef HAVE_GFILENOTIFY
extern void globals_of_gfilenotify (void);
-extern void syms_of_gfilenotify (void);
-#endif
-
-/* Defined in inotify.c */
-#ifdef HAVE_INOTIFY
-extern void syms_of_inotify (void);
-#endif
-
-#ifdef HAVE_W32NOTIFY
-/* Defined on w32notify.c. */
-extern void syms_of_w32notify (void);
#endif
/* Defined in xfaces.c. */
extern Lisp_Object Vface_alternative_font_family_alist;
extern Lisp_Object Vface_alternative_font_registry_alist;
-extern void syms_of_xfaces (void);
-
-#ifdef HAVE_X_WINDOWS
-/* Defined in xfns.c. */
-extern void syms_of_xfns (void);
-
-/* Defined in xsmfns.c. */
-extern void syms_of_xsmfns (void);
-
-/* Defined in xselect.c. */
-extern void syms_of_xselect (void);
-
-/* Defined in xterm.c. */
-extern void init_xterm (void);
-extern void syms_of_xterm (void);
-#endif /* HAVE_X_WINDOWS */
#ifdef HAVE_WINDOW_SYSTEM
/* Defined in xterm.c, nsterm.m, w32term.c. */
@@ -4377,26 +4259,18 @@ extern char *x_get_keysym_name (int);
#ifdef HAVE_LIBXML2
/* Defined in xml.c. */
-extern void syms_of_xml (void);
extern void xml_cleanup_parser (void);
#endif
-#ifdef HAVE_ZLIB
-/* Defined in decompress.c. */
-extern void syms_of_decompress (void);
-#endif
-
#ifdef HAVE_DBUS
/* Defined in dbusbind.c. */
void init_dbusbind (void);
-void syms_of_dbusbind (void);
#endif
/* Defined in profiler.c. */
extern bool profiler_memory_running;
extern void malloc_probe (size_t);
-extern void syms_of_profiler (void);
#ifdef DOS_NT
diff --git a/src/nsterm.h b/src/nsterm.h
index 9035ee1..258c9f1 100644
--- a/src/nsterm.h
+++ b/src/nsterm.h
@@ -857,10 +857,6 @@ extern void ns_run_file_dialog (void);
extern const char *ns_etc_directory (void);
extern const char *ns_exec_path (void);
extern const char *ns_load_path (void);
-extern void syms_of_nsterm (void);
-extern void syms_of_nsfns (void);
-extern void syms_of_nsmenu (void);
-extern void syms_of_nsselect (void);
/* From nsimage.m, needed in image.c */
struct image;
diff --git a/src/w32.h b/src/w32.h
index 835557d..32b9d89 100644
--- a/src/w32.h
+++ b/src/w32.h
@@ -179,8 +179,6 @@ extern int (WINAPI *pWideCharToMultiByte)(UINT,DWORD,LPCWSTR,int,LPSTR,int,LPCST
extern void init_environment (char **);
extern void check_windows_init_file (void);
-extern void syms_of_ntproc (void);
-extern void syms_of_ntterm (void);
extern void dostounix_filename (register char *);
extern void unixtodos_filename (register char *);
extern int filename_from_ansi (const char *, char *);
diff --git a/src/w32fns.c b/src/w32fns.c
index 789a91a..4f79210 100644
--- a/src/w32fns.c
+++ b/src/w32fns.c
@@ -79,7 +79,6 @@ along with GNU Emacs. If not, see . */
#define FOF_NO_CONNECTED_ELEMENTS 0x2000
#endif
-void syms_of_w32fns (void);
void globals_of_w32fns (void);
extern void free_frame_menubar (struct frame *);
@@ -214,7 +213,6 @@ extern HMENU current_popup_menu;
int menubar_in_use = 0;
/* From w32uniscribe.c */
-extern void syms_of_w32uniscribe (void);
extern int uniscribe_available;
#ifdef WINDOWSNT
diff --git a/src/w32font.h b/src/w32font.h
index 82c5e09..dbad23f 100644
--- a/src/w32font.h
+++ b/src/w32font.h
@@ -84,7 +84,6 @@ int uniscribe_check_otf (LOGFONT *font, Lisp_Object otf_spec);
Lisp_Object intern_font_name (char *);
-extern void syms_of_w32font (void);
extern void globals_of_w32font (void);
#endif
diff --git a/src/w32menu.c b/src/w32menu.c
index 7a946d2..a5dea2c 100644
--- a/src/w32menu.c
+++ b/src/w32menu.c
@@ -67,7 +67,6 @@ along with GNU Emacs. If not, see . */
HMENU current_popup_menu;
-void syms_of_w32menu (void);
void globals_of_w32menu (void);
typedef BOOL (WINAPI * GetMenuItemInfoA_Proc) (
diff --git a/src/w32select.h b/src/w32select.h
index 0fa9f18..3c7412e 100644
--- a/src/w32select.h
+++ b/src/w32select.h
@@ -21,7 +21,6 @@ along with GNU Emacs. If not, see . */
#define W32SELECT_H
#include
-extern void syms_of_w32select (void);
extern void globals_of_w32select (void);
extern void term_w32select (void);
diff --git a/src/w32term.h b/src/w32term.h
index 042d7ab..d15429a 100644
--- a/src/w32term.h
+++ b/src/w32term.h
@@ -845,10 +845,6 @@ typedef char guichar_t;
extern Lisp_Object w32_popup_dialog (struct frame *, Lisp_Object, Lisp_Object);
extern void w32_arrow_cursor (void);
-extern void syms_of_w32term (void);
-extern void syms_of_w32menu (void);
-extern void syms_of_w32fns (void);
-
extern void globals_of_w32menu (void);
extern void globals_of_w32fns (void);
extern void globals_of_w32notify (void);
diff --git a/src/window.h b/src/window.h
index 2ec28ab..f49e507 100644
--- a/src/window.h
+++ b/src/window.h
@@ -1101,10 +1101,7 @@ extern Lisp_Object sanitize_window_sizes (Lisp_Object, Lisp_Object);
/* This looks like a setter, but it is a bit special. */
extern void wset_buffer (struct window *, Lisp_Object);
extern bool window_outdated (struct window *);
-extern void init_window_once (void);
extern void init_window (void);
-extern void syms_of_window (void);
-extern void keys_of_window (void);
/* Move cursor to row/column position VPOS/HPOS, pixel coordinates
Y/X. HPOS/VPOS are window-relative row and column numbers and X/Y
diff --git a/src/xterm.h b/src/xterm.h
index f2aff72..8bf378d 100644
--- a/src/xterm.h
+++ b/src/xterm.h
@@ -979,6 +979,7 @@ XrmDatabase x_load_resources (Display *, const char *, const char *,
/* Defined in xterm.c */
+extern void init_xterm (void);
extern bool x_text_icon (struct frame *, const char *);
extern void x_catch_errors (Display *);
extern void x_check_errors (Display *, const char *)