Introduce -msmp to select /lib_smp/ on ppc-vx6

The .spec files used for linking on ppc-vx6, when the rtp-smp runtime
is selected, add -L flags for /lib_smp/ and /lib/.

There was a problem, though: although /lib_smp/ and /lib/ were to be
searched in this order, and the specs files do that correctly, the
compiler would search /lib/ first regardless, because
STARTFILE_PREFIX_SPEC said so, and specs files cannot override that.

With this patch, we arrange for the presence of -msmp to affect
STARTFILE_PREFIX_SPEC, so that the compiler searches /lib_smp/ rather
than /lib/ for crt files.  A separate patch for GNAT ensures that when
the rtp-smp runtime is selected, -msmp is passed to the compiler
driver for linking, along with the --specs flags.

for  gcc/ChangeLog

	* config/vxworks-smp.opt: New.  Introduce -msmp.
	* config.gcc: Enable it on powerpc* vxworks prior to 7r*.
	* config/rs6000/vxworks.h (STARTFILE_PREFIX_SPEC): Choose
	lib_smp when -msmp is present in the command line.
	* doc/invoke.texi: Document it.
This commit is contained in:
Alexandre Oliva 2023-08-03 03:34:31 -03:00 committed by Alexandre Oliva
parent 39663298b5
commit b6f4b00011
4 changed files with 35 additions and 3 deletions

View file

@ -3046,7 +3046,7 @@ powerpc*-wrs-vxworks7r*)
powerpc-wrs-vxworks*)
tm_file="${tm_file} elfos.h gnu-user.h freebsd-spec.h rs6000/sysv4.h"
tmake_file="${tmake_file} rs6000/t-fprules rs6000/t-ppccomm rs6000/t-vxworks"
extra_options="${extra_options} rs6000/sysv4.opt"
extra_options="${extra_options} rs6000/sysv4.opt vxworks-smp.opt"
extra_headers="${extra_headers} ppc-asm.h"
case ${target} in
*-vxworksmils*)

View file

@ -206,7 +206,7 @@ along with GCC; see the file COPYING3. If not see
#undef STARTFILE_PREFIX_SPEC
#define STARTFILE_PREFIX_SPEC \
"%{mrtp:%{!shared:/lib/usr/lib/ppc/PPC32/common}}"
"%{mrtp:%{!shared:/lib%{msmp:_smp}/usr/lib/ppc/PPC32/common}}"
/* For aggregates passing, use the same, consistent ABI as Linux. */
#define AGGREGATE_PADDING_FIXED 0

View file

@ -0,0 +1,25 @@
; Options for VxWorks configurations where smp/!smp variants of the
; system libraries are installed in separate locations.
;
; Copyright (C) 2023 Free Software Foundation, Inc.
; Contributed by AdaCore.
;
; This file is part of GCC.
;
; GCC is free software; you can redistribute it and/or modify it under
; the terms of the GNU General Public License as published by the Free
; Software Foundation; either version 3, or (at your option) any later
; version.
;
; GCC is distributed in the hope that it will be useful, but WITHOUT ANY
; WARRANTY; without even the implied warranty of MERCHANTABILITY or
; FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
; for more details.
;
; You should have received a copy of the GNU General Public License
; along with GCC; see the file COPYING3. If not see
; <http://www.gnu.org/licenses/>.
msmp
Driver Target RejectNegative
Select VxWorks SMP C runtimes for linking.

View file

@ -1403,7 +1403,7 @@ See RS/6000 and PowerPC Options.
-mpointer-size=@var{size}}
@emph{VxWorks Options}
@gccoptlist{-mrtp -non-static -Bstatic -Bdynamic
@gccoptlist{-mrtp -msmp -non-static -Bstatic -Bdynamic
-Xbind-lazy -Xbind-now}
@emph{x86 Options}
@ -32442,6 +32442,13 @@ GCC can generate code for both VxWorks kernels and real time processes
(RTPs). This option switches from the former to the latter. It also
defines the preprocessor macro @code{__RTP__}.
@opindex msmp
@item -msmp
Select SMP runtimes for linking. Not available on architectures other
than PowerPC, nor on VxWorks version 7 or later, in which the selection
is part of the VxWorks build configuration and the library paths are the
same for either choice.
@opindex non-static
@item -non-static
Link an RTP executable against shared libraries rather than static