https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67627

            Bug ID: 67627
           Summary: libatomic parallel build failure
           Product: gcc
           Version: unknown
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: other
          Assignee: unassigned at gcc dot gnu.org
          Reporter: nsz at gcc dot gnu.org
  Target Milestone: ---

hard to reproduce, but the failure is

make[5]: Entering directory `/XX/obj/gcc4/arm-none-linux-gnueabihf/libatomic'
.deps/fsub_8_.lo.Ppo:87: *** missing separator.  Stop.

and the cause is that .deps/fsub_8_.lo.Ppo is a makefile fragment generated by
a compilation step that is run concurrently with another make reading this
file.

some relevant bits from libatomic/Makefile.in:

### begin

LTLIBRARIES = $(noinst_LTLIBRARIES) $(toolexeclib_LTLIBRARIES)
toolexeclib_LTLIBRARIES = libatomic.la
noinst_LTLIBRARIES = libatomic_convenience.la
libatomic_la_DEPENDENCIES = $(libatomic_la_LIBADD) $(libatomic_version_dep)
libatomic_la_LIBADD = $(foreach s,$(SIZES),$(addsuffix \
        _$(s)_.lo,$(SIZEOBJS))) $(am__append_1) $(am__append_2) \
        $(am__append_3)

M_DEPS = -MT $@ -MD -MP -MF $(DEPDIR)/$(@F).Ppo

libatomic.la: $(libatomic_la_OBJECTS) $(libatomic_la_DEPENDENCIES)
$(EXTRA_libatomic_la_DEPENDENCIES).
        $(libatomic_la_LINK) -rpath $(toolexeclibdir) $(libatomic_la_OBJECTS)
$(libatomic_la_LIBADD) $(LIBS)

all-multi:
        $(MULTIDO) $(AM_MAKEFLAGS) DO=all multi-do # $(MAKE)

all-am: Makefile $(LTLIBRARIES) all-multi auto-config.h

-include $(wildcard $(DEPDIR)/*.Ppo)

%_.lo: Makefile
        $(LTCOMPILE) $(M_DEPS) $(M_SIZE) $(M_IFUNC) -c -o $@ $(M_SRC)

### end

when all-am is built, building $(LTLIBRARIES) (the *_.lo targets) can run in
parallel with all-multi.

the all-multi target rereads the Makefile so reevaluates "-include $(wildcard
$(DEPDIR)/*.Ppo)", but those files are generated in a non-atomic way by gcc -MF
during the build of *_.lo targets.

Reply via email to