Hello,

The VxWorks ports come with specific crtstuff objects to cope
with the variety of possible means to load code on a target, as
kernel modules or RTPS (Real Time Processes).

Compilation of those objects is currently explicitly replicated
for the two modes, through t-vxcrtstuff:

  EXTRA_PARTS += vx_crtbegin-kernel.o vx_crtbegin-rtp.o vx_crtend.o

... where the difference between "-kernel" and "-rtp" is to pass -mrtp
in the compilation options.

But the ports that support RTPs already achieve that distinction
through the multilib mechanism, so we end up with nonsensical 
object sets like:

 ./lib/gcc/powerpc-wrs-vxworks7r2/10.2.1/mrtp/vx_crtbegin-rtp.o
 ./lib/gcc/powerpc-wrs-vxworks7r2/10.2.1/mrtp/vx_crtend.o
 ./lib/gcc/powerpc-wrs-vxworks7r2/10.2.1/mrtp/vx_crtbegin-kernel.o
 ./lib/gcc/powerpc-wrs-vxworks7r2/10.2.1/vx_crtbegin-rtp.o
 ./lib/gcc/powerpc-wrs-vxworks7r2/10.2.1/vx_crtend.o
 ./lib/gcc/powerpc-wrs-vxworks7r2/10.2.1/vx_crtbegin-kernel.o

This patch just removes the bogus explicit distinction and
leaves it all to the multilib circuitry.

Tested by verifying that our gcc-10 based toolchain behave as
intended after the change, both for VxWorks 6.9 and 7.2, and by
a sanity check build of mainline for VxWorks 6.9.

Olivier

2020-10-15  Olivier Hainque  <hain...@adacore.com>
    
libgcc/
        * config/t-vxcrtstuff: Remove the -kernel/-rtp specialization.
    
gcc/
        * config/vxworks.h (VX_CRTBEGIN_SPEC): Likewise.

diff --git a/gcc/config/vxworks.h b/gcc/config/vxworks.h
index d3c417e7f5ae..5b1538085e9e 100644
--- a/gcc/config/vxworks.h
+++ b/gcc/config/vxworks.h
@@ -158,8 +158,7 @@ along with GCC; see the file COPYING3.  If not see
 /* Setup the crtstuff begin/end we might need for dwarf EH registration.  */
 
 #if !defined(CONFIG_SJLJ_EXCEPTIONS) && DWARF2_UNWIND_INFO
-#define VX_CRTBEGIN_SPEC \
- "%{!mrtp:vx_crtbegin-kernel.o%s} %{mrtp:vx_crtbegin-rtp.o%s}"
+#define VX_CRTBEGIN_SPEC "vx_crtbegin.o%s"
 #define VX_CRTEND_SPEC "-l:vx_crtend.o"
 #else
 #define VX_CRTBEGIN_SPEC ""
diff --git a/libgcc/config/t-vxcrtstuff b/libgcc/config/t-vxcrtstuff
index 96b728525e04..ef64951c9038 100644
--- a/libgcc/config/t-vxcrtstuff
+++ b/libgcc/config/t-vxcrtstuff
@@ -1,12 +1,12 @@
-# crtbegin/crtend for VxWorks (DKM or RTP)
+# crtbegin/crtend for VxWorks
 
-vx_crtbegin-kernel.o: $(srcdir)/config/vxcrtstuff.c
+vx_crtbegin.o: $(srcdir)/config/vxcrtstuff.c
        $(crt_compile) $(CRTSTUFF_T_CFLAGS) -DCRT_BEGIN -c $<
 
-vx_crtbegin-rtp.o: $(srcdir)/config/vxcrtstuff.c
-       $(crt_compile) $(CRTSTUFF_T_CFLAGS) -DCRT_BEGIN -c $< -mrtp
-
 vx_crtend.o: $(srcdir)/config/vxcrtstuff.c
        $(crt_compile) $(CRTSTUFF_T_CFLAGS) -DCRT_END -c $<
 
-EXTRA_PARTS += vx_crtbegin-kernel.o vx_crtbegin-rtp.o vx_crtend.o
+# We do pretty different things for kernel vs rtp modes, all
+# controlled thanks to __RTP__ and (optional) multilibs.
+
+EXTRA_PARTS += vx_crtbegin.o vx_crtend.o

Reply via email to