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 <[email protected]>
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