Hello,

We used to have in gcc-interface/Makefile.in:

 GNATLIBCFLAGS_FOR_C = -W -Wall $(GNATLIBCFLAGS) $(TARGET_LIBGCC2_CFLAGS) ...
                                                 ^^^^^^^^^^^^^^^^^^^^^^^^
As part of the libgcc move to toplevel,

 http://gcc.gnu.org/ml/gcc-patches/2011-08/msg00917.html

introduced PIC_FLAG_FOR_TARGET and replaced all the uses of
TARGET_LIBGCC2_CFLAGS by that, on the assumption that it was
essentially used for gnatlib-shared related targets.

That was true for most of the uses indeed, in particular those
directly part of the gnatlib-shared targets which now have:

  gnatlib-shared-default:
     $(MAKE) $(FLAGS_TO_PASS) \
         GNATLIBFLAGS="$(GNATLIBFLAGS)" \
  ==>    GNATLIBCFLAGS="$(GNATLIBCFLAGS) $(PICFLAG_FOR_TARGET)" \
         GNATLIBCFLAGS_FOR_C="$(GNATLIBCFLAGS_FOR_C)" \
         gnatlib

However, we now alo have:

 GNATLIBCFLAGS_FOR_C = -W -Wall $(GNATLIBCFLAGS) $(PICFLAG_FOR_TARGET)
                                                 ^^^^^^^^^^^^^^^^^^^^^

which is used for all the gnatlib related targets in this Makefile, so we
end up passing -fpic or alike for the compilation of C files aimed at non
shared libs as well.

This causes kernel-mode library build failures with --diable-libada on VxWorks
because the compiler stops in presence of -fPIC without -mrtp. The extraneaous
PICFLAG is visible in libada/Makefile.in as well, with similar consequences
in the libada enabled case.

The attached patch addresses this with two simple steps: remove
PICFLAG_FOR_TARGET from the top definition of GNATLIBCFLAGS_FOR_C,
then add it explicitly to the options passed by the gnatlib-shared
targets only. Like

 GNATLIBCFLAGS_FOR_C = -W -Wall $(GNATLIBCFLAGS)

 gnatlib-shared-default:
    $(MAKE) $(FLAGS_TO_PASS) \
        GNATLIBFLAGS="$(GNATLIBFLAGS)" \
 ==>    GNATLIBCFLAGS="$(GNATLIBCFLAGS) $(PICFLAG_FOR_TARGET)" \
 ==>    GNATLIBCFLAGS_FOR_C="$(GNATLIBCFLAGS_FOR_C) $(PICFLAG_FOR_TARGET)" \
        gnatlib

This lets the simple VxWorks builds proceed to completion, and
bootstrap+regtest fine x86_64-linux.

Committing to mainline.

Olivier

2012-06-10  Olivier Hainque  <hain...@adacore.com>

        * Makefile.in (GNATLIBCFLAGS_FOR_C): Remove $(PIC_FLAG_FOR_TARGET).
        (gnatlib-shared-default): Add $(PIC_FLAG_FOR_TARGET) to
        GNATLIBCFLAGS_FOR_C passed to gnatlib.
        (gnatlib-shared-win32): Likewise.
        (gnatlib-shared-darwin): Likewise.
        (gnatlib-shared-dual-win32): Pass PIC_FLAG_FOR_TARGET to 
        gnatlib-shared-win32.

        libada/
        * Makefile.in (GNATLIBCFLAGS_FOR_C): Remove $(PICFLAG).

Attachment: ada-picflag.diff
Description: Binary data

Reply via email to