Hello,

Working on the reintroduction of shared libraries support
(and of modules depending on shared libraries) exposed a few
test failures of simple c++ constructor tests on arm-vxworks7r2.

Investigation revealed that we were not linking the
crtstuff objects as needed from a compiler configured not to
have shared libs support, because of the ENABLE_SHARED_LIBGCC
guard in this piece of vxworks.h:

  /* Setup the crtstuff begin/end we might need for dwarf EH registration
     and/or INITFINI_ARRAY support for shared libs.  */

  #if (HAVE_INITFINI_ARRAY_SUPPORT && defined(ENABLE_SHARED_LIBGCC)) \
      || (DWARF2_UNWIND_INFO && !defined(CONFIG_SJLJ_EXCEPTIONS))
  #define VX_CRTBEGIN_SPEC "%{!shared:vx_crtbegin.o%s;:vx_crtbeginS.o%s}"

crtstuff initfini array support is meant to be leveraged for
constructors regardless of whether the compiler also happens to be
configured with shared library support, so the guard on ENABLE_SHARED_LIBGCC
here is inappropriate.

This change just removes it, which cured the test c++ contructor
test failures we were observing and didn't produce adverse effect
on the rest of our builds/runs (gcc-11 based toolchains for vxowkrs7r2
on a variety of architectures).

Tested further with a gcc-12 build + basic test cycle on
both arm and ppc64 vxworks7r2, as well as ppc vxworks 6.9.

Will commit to mainline shortly.

Cheers,

Olivier

2022-09-30  Olivier Hainque <hain...@adacore.com>

gcc/
        * config/vxworks.h (VX_CRTBEGIN_SPEC, VX_CRTEND_SPEC): If
        HAVE_INITFINI_ARRAY_SUPPORT, pick crtstuff objects regardless
        of ENABLE_SHARED_LIBGCC.


Attachment: 0005-Refine-INITFINI-condition-for-vxworks-crtstuff-spec.patch
Description: Binary data


Reply via email to