On 11/03/21 07:31 -0800, Caroline Tice via Libstdc++ wrote:
Adding the libstdc++ mailing list to the patch.

Thanks.

-- Caroline
cmt...@google.com

On Wed, Mar 10, 2021 at 8:50 PM Caroline Tice <cmt...@google.com> wrote:

This patch is to fix PR 99172.

Currently when GCC is configured with --enable-vtable-verify, the
libstdc++-v3 Makefiles add "-fvtable-verify=std
-Wl,-u_vtable_map_vars_start,-u_vtable_map_vars_end" to libtool link
commands. The "-fvtable-verify=std" piece causes alternate versions of
libtool (such as slibtool) to fail, unable to find "-lvtv" (GNU
libtool just removes that piece).

This patch updates the libstdc++-v3 Makefiles to not pass
"-fvtable-verify=std" to the libtool link commands, while continuing
to pass the rest of the VTV  flags (which are necessary for VTV to
work).

I tested this by configuring with --enable-vtable-verify, boostrapping
the compiler, and running all the regression testsuites (including
libvtv & libstdc++) without any regressions.  I only ran it on a linux
system, on an x86_64 machine.

I also gave a copy of the patch to the person who reported the bug,
and they verified that the patch fixes their issue.

Is this ok to commit?

Should the same change be made to CXXLINK in src/*/Makefile.am, for
consistency if nothing else?

The patch is OK for gcc-11 now, but for stage 1 I'm wondering about
simplifying it.

Why do we ever add -Wl,-u options to CXXFLAGS when those are linker
options?

Could we move the -Wl,-u options to VTV_CXXLINKFLAGS instead, so
they're only used when actually linking?

Then VTV_CXXFLAGS would just be -fvtable-verify=std (and so
VTV_PCH_CXXFLAGS would be redundant), and instead of having
AM_CXXFLAGS and AM_CXXFLAGS_LT we could just filter out the
-fvtable-verify=std option from the CXXLINK options:

CXXLINK = \
        $(LIBTOOL) --tag CXX \
        $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
        --mode=link $(CXX) \
        $(VTV_CXXLINKFLAGS) \
        $(OPT_LDFLAGS) $(SECTION_LDFLAGS) \
        $(filter-out,-fvtable-verify=std,$(AM_CXXFLAGS)) \
        $(LTLDFLAGS) -o $@

Would that make sense?

Or just add  -fvtable-verify=none to the CXXLINK command to cancel out
the  -fvtable-verify=std option from AM_CXXFLAGS:

CXXLINK = \
        $(LIBTOOL) --tag CXX \
        $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
        --mode=link $(CXX) \
        $(VTV_CXXLINKFLAGS) \
        $(OPT_LDFLAGS) $(SECTION_LDFLAGS) \
        $(AM_CXXFLAGS) -fvtable-verify=none \
        $(LTLDFLAGS) -o $@

That seems cleaner to me, rather than adding another variable with
minor differences from the existing AM_CXXFLAGS.

Reply via email to