-# object files that will be linked into gdb.
-
-# FIXME: There is a problem with this approach - init.c may force
-# unnecessary files to be linked in.
-
-# FIXME: cagney/2002-06-09: gdb/564: gdb/563: Force the order so that
-# the first call is to _initialize_gdbtypes (implemented by explicitly
-# putting that function's name first in the init.l-tmp file). This is
-# a hack to ensure that all the architecture dependant global
-# builtin_type_* variables are initialized before anything else
-# (per-architecture code is called in the same order that it is
-# registered). The ``correct fix'' is to have all the builtin types
-# made part of the architecture and initialize them on-demand (using
-# gdbarch_data) just like everything else. The catch is that other
-# modules still take the address of these builtin types forcing them
-# to be variables, sigh!
-
-# NOTE: cagney/2003-03-18: The sed pattern ``s|^\([^ /]...'' is
-# anchored on the first column and excludes the ``/'' character so
-# that it doesn't add the $(srcdir) prefix to any file that already
-# has an absolute path. It turns out that $(DEC)'s True64 make
-# automatically adds the $(srcdir) prefixes when it encounters files
-# in sub-directories such as cli/ and mi/.
-
-INIT_FILES = $(COMMON_OBS)
+# source files that will be linked into gdb. However, due to the way
+# this Makefile has generally been written, we do this indirectly, by
+# computing the list of source files from the list of object files.
+
+INIT_FILES = \
+ $(patsubst %.o,%.c, \
+ $(patsubst %-exp.o,%-exp.y, \
+ $(filter-out init.o version.o %_S.o %_U.o,\
+ $(COMMON_OBS))))
+