xref: /dflybsd-src/contrib/gcc-4.7/gcc/cp/g++spec.c (revision 04febcfb30580676d3e95f58a16c5137ee478b32)
1*e4b17023SJohn Marino /* Specific flags and argument handling of the C++ front end.
2*e4b17023SJohn Marino    Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
3*e4b17023SJohn Marino    2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
4*e4b17023SJohn Marino 
5*e4b17023SJohn Marino This file is part of GCC.
6*e4b17023SJohn Marino 
7*e4b17023SJohn Marino GCC is free software; you can redistribute it and/or modify
8*e4b17023SJohn Marino it under the terms of the GNU General Public License as published by
9*e4b17023SJohn Marino the Free Software Foundation; either version 3, or (at your option)
10*e4b17023SJohn Marino any later version.
11*e4b17023SJohn Marino 
12*e4b17023SJohn Marino GCC is distributed in the hope that it will be useful,
13*e4b17023SJohn Marino but WITHOUT ANY WARRANTY; without even the implied warranty of
14*e4b17023SJohn Marino MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15*e4b17023SJohn Marino GNU General Public License for more details.
16*e4b17023SJohn Marino 
17*e4b17023SJohn Marino You should have received a copy of the GNU General Public License
18*e4b17023SJohn Marino along with GCC; see the file COPYING3.  If not see
19*e4b17023SJohn Marino <http://www.gnu.org/licenses/>.  */
20*e4b17023SJohn Marino 
21*e4b17023SJohn Marino #include "config.h"
22*e4b17023SJohn Marino #include "system.h"
23*e4b17023SJohn Marino #include "coretypes.h"
24*e4b17023SJohn Marino #include "tm.h"
25*e4b17023SJohn Marino #include "gcc.h"
26*e4b17023SJohn Marino #include "opts.h"
27*e4b17023SJohn Marino 
28*e4b17023SJohn Marino /* This bit is set if we saw a `-xfoo' language specification.  */
29*e4b17023SJohn Marino #define LANGSPEC	(1<<1)
30*e4b17023SJohn Marino /* This bit is set if they did `-lm' or `-lmath'.  */
31*e4b17023SJohn Marino #define MATHLIB		(1<<2)
32*e4b17023SJohn Marino /* This bit is set if they did `-lc'.  */
33*e4b17023SJohn Marino #define WITHLIBC	(1<<3)
34*e4b17023SJohn Marino /* Skip this option.  */
35*e4b17023SJohn Marino #define SKIPOPT		(1<<4)
36*e4b17023SJohn Marino 
37*e4b17023SJohn Marino #ifndef MATH_LIBRARY
38*e4b17023SJohn Marino #define MATH_LIBRARY "m"
39*e4b17023SJohn Marino #endif
40*e4b17023SJohn Marino #ifndef MATH_LIBRARY_PROFILE
41*e4b17023SJohn Marino #define MATH_LIBRARY_PROFILE MATH_LIBRARY
42*e4b17023SJohn Marino #endif
43*e4b17023SJohn Marino 
44*e4b17023SJohn Marino #ifndef LIBSTDCXX
45*e4b17023SJohn Marino #define LIBSTDCXX "stdc++"
46*e4b17023SJohn Marino #endif
47*e4b17023SJohn Marino #ifndef LIBSTDCXX_PROFILE
48*e4b17023SJohn Marino #define LIBSTDCXX_PROFILE LIBSTDCXX
49*e4b17023SJohn Marino #endif
50*e4b17023SJohn Marino #ifndef LIBSTDCXX_STATIC
51*e4b17023SJohn Marino #define LIBSTDCXX_STATIC NULL
52*e4b17023SJohn Marino #endif
53*e4b17023SJohn Marino 
54*e4b17023SJohn Marino void
lang_specific_driver(struct cl_decoded_option ** in_decoded_options,unsigned int * in_decoded_options_count,int * in_added_libraries)55*e4b17023SJohn Marino lang_specific_driver (struct cl_decoded_option **in_decoded_options,
56*e4b17023SJohn Marino 		      unsigned int *in_decoded_options_count,
57*e4b17023SJohn Marino 		      int *in_added_libraries)
58*e4b17023SJohn Marino {
59*e4b17023SJohn Marino   unsigned int i, j;
60*e4b17023SJohn Marino 
61*e4b17023SJohn Marino   /* If nonzero, the user gave us the `-p' or `-pg' flag.  */
62*e4b17023SJohn Marino   int saw_profile_flag = 0;
63*e4b17023SJohn Marino 
64*e4b17023SJohn Marino   /* What do with libstdc++:
65*e4b17023SJohn Marino      -1 means we should not link in libstdc++
66*e4b17023SJohn Marino      0  means we should link in libstdc++ if it is needed
67*e4b17023SJohn Marino      1  means libstdc++ is needed and should be linked in.
68*e4b17023SJohn Marino      2  means libstdc++ is needed and should be linked statically.  */
69*e4b17023SJohn Marino   int library = 0;
70*e4b17023SJohn Marino 
71*e4b17023SJohn Marino   /* The number of arguments being added to what's in argv, other than
72*e4b17023SJohn Marino      libraries.  We use this to track the number of times we've inserted
73*e4b17023SJohn Marino      -xc++/-xnone.  */
74*e4b17023SJohn Marino   int added = 0;
75*e4b17023SJohn Marino 
76*e4b17023SJohn Marino   /* The new argument list will be contained in this.  */
77*e4b17023SJohn Marino   struct cl_decoded_option *new_decoded_options;
78*e4b17023SJohn Marino 
79*e4b17023SJohn Marino   /* Nonzero if we saw a `-xfoo' language specification on the
80*e4b17023SJohn Marino      command line.  Used to avoid adding our own -xc++ if the user
81*e4b17023SJohn Marino      already gave a language for the file.  */
82*e4b17023SJohn Marino   int saw_speclang = 0;
83*e4b17023SJohn Marino 
84*e4b17023SJohn Marino   /* "-lm" or "-lmath" if it appears on the command line.  */
85*e4b17023SJohn Marino   const struct cl_decoded_option *saw_math = NULL;
86*e4b17023SJohn Marino 
87*e4b17023SJohn Marino   /* "-lc" if it appears on the command line.  */
88*e4b17023SJohn Marino   const struct cl_decoded_option *saw_libc = NULL;
89*e4b17023SJohn Marino 
90*e4b17023SJohn Marino   /* An array used to flag each argument that needs a bit set for
91*e4b17023SJohn Marino      LANGSPEC, MATHLIB, or WITHLIBC.  */
92*e4b17023SJohn Marino   int *args;
93*e4b17023SJohn Marino 
94*e4b17023SJohn Marino   /* By default, we throw on the math library if we have one.  */
95*e4b17023SJohn Marino   int need_math = (MATH_LIBRARY[0] != '\0');
96*e4b17023SJohn Marino 
97*e4b17023SJohn Marino   /* True if we saw -static.  */
98*e4b17023SJohn Marino   int static_link = 0;
99*e4b17023SJohn Marino 
100*e4b17023SJohn Marino   /* True if we should add -shared-libgcc to the command-line.  */
101*e4b17023SJohn Marino   int shared_libgcc = 1;
102*e4b17023SJohn Marino 
103*e4b17023SJohn Marino   /* The total number of arguments with the new stuff.  */
104*e4b17023SJohn Marino   unsigned int argc;
105*e4b17023SJohn Marino 
106*e4b17023SJohn Marino   /* The argument list.  */
107*e4b17023SJohn Marino   struct cl_decoded_option *decoded_options;
108*e4b17023SJohn Marino 
109*e4b17023SJohn Marino   /* The number of libraries added in.  */
110*e4b17023SJohn Marino   int added_libraries;
111*e4b17023SJohn Marino 
112*e4b17023SJohn Marino   /* The total number of arguments with the new stuff.  */
113*e4b17023SJohn Marino   unsigned int num_args = 1;
114*e4b17023SJohn Marino 
115*e4b17023SJohn Marino   argc = *in_decoded_options_count;
116*e4b17023SJohn Marino   decoded_options = *in_decoded_options;
117*e4b17023SJohn Marino   added_libraries = *in_added_libraries;
118*e4b17023SJohn Marino 
119*e4b17023SJohn Marino   args = XCNEWVEC (int, argc);
120*e4b17023SJohn Marino 
121*e4b17023SJohn Marino   for (i = 1; i < argc; i++)
122*e4b17023SJohn Marino     {
123*e4b17023SJohn Marino       const char *arg = decoded_options[i].arg;
124*e4b17023SJohn Marino       if (decoded_options[i].errors & CL_ERR_MISSING_ARG)
125*e4b17023SJohn Marino 	continue; /* Avoid examining arguments of options missing them.  */
126*e4b17023SJohn Marino 
127*e4b17023SJohn Marino       switch (decoded_options[i].opt_index)
128*e4b17023SJohn Marino 	{
129*e4b17023SJohn Marino 	case OPT_nostdlib:
130*e4b17023SJohn Marino 	case OPT_nodefaultlibs:
131*e4b17023SJohn Marino 	  library = -1;
132*e4b17023SJohn Marino 	  break;
133*e4b17023SJohn Marino 
134*e4b17023SJohn Marino 	case OPT_l:
135*e4b17023SJohn Marino 	  if (strcmp (arg, MATH_LIBRARY) == 0)
136*e4b17023SJohn Marino 	    {
137*e4b17023SJohn Marino 	      args[i] |= MATHLIB;
138*e4b17023SJohn Marino 	      need_math = 0;
139*e4b17023SJohn Marino 	    }
140*e4b17023SJohn Marino 	  else if (strcmp (arg, "c") == 0)
141*e4b17023SJohn Marino 	    args[i] |= WITHLIBC;
142*e4b17023SJohn Marino 	  else
143*e4b17023SJohn Marino 	    /* Unrecognized libraries (e.g. -lfoo) may require libstdc++.  */
144*e4b17023SJohn Marino 	    library = (library == 0) ? 1 : library;
145*e4b17023SJohn Marino 	  break;
146*e4b17023SJohn Marino 
147*e4b17023SJohn Marino 	case OPT_pg:
148*e4b17023SJohn Marino 	case OPT_p:
149*e4b17023SJohn Marino 	  saw_profile_flag++;
150*e4b17023SJohn Marino 	  break;
151*e4b17023SJohn Marino 
152*e4b17023SJohn Marino 	case OPT_x:
153*e4b17023SJohn Marino 	  if (library == 0
154*e4b17023SJohn Marino 	      && (strcmp (arg, "c++") == 0
155*e4b17023SJohn Marino 		  || strcmp (arg, "c++-cpp-output") == 0
156*e4b17023SJohn Marino 		  || strcmp (arg, "objective-c++") == 0
157*e4b17023SJohn Marino 		  || strcmp (arg, "objective-c++-cpp-output") == 0))
158*e4b17023SJohn Marino 	    library = 1;
159*e4b17023SJohn Marino 
160*e4b17023SJohn Marino 	  saw_speclang = 1;
161*e4b17023SJohn Marino 	  break;
162*e4b17023SJohn Marino 
163*e4b17023SJohn Marino 	case OPT_Xlinker:
164*e4b17023SJohn Marino 	case OPT_Wl_:
165*e4b17023SJohn Marino 	  /* Arguments that go directly to the linker might be .o files,
166*e4b17023SJohn Marino 	     or something, and so might cause libstdc++ to be needed.  */
167*e4b17023SJohn Marino 	  if (library == 0)
168*e4b17023SJohn Marino 	    library = 1;
169*e4b17023SJohn Marino 	  break;
170*e4b17023SJohn Marino 
171*e4b17023SJohn Marino 	case OPT_c:
172*e4b17023SJohn Marino 	case OPT_S:
173*e4b17023SJohn Marino 	case OPT_E:
174*e4b17023SJohn Marino 	case OPT_M:
175*e4b17023SJohn Marino 	case OPT_MM:
176*e4b17023SJohn Marino 	case OPT_fsyntax_only:
177*e4b17023SJohn Marino 	  /* Don't specify libraries if we won't link, since that would
178*e4b17023SJohn Marino 	     cause a warning.  */
179*e4b17023SJohn Marino 	  library = -1;
180*e4b17023SJohn Marino 	  break;
181*e4b17023SJohn Marino 
182*e4b17023SJohn Marino 	case OPT_static:
183*e4b17023SJohn Marino 	  static_link = 1;
184*e4b17023SJohn Marino 	  break;
185*e4b17023SJohn Marino 
186*e4b17023SJohn Marino 	case OPT_static_libgcc:
187*e4b17023SJohn Marino 	  shared_libgcc = 0;
188*e4b17023SJohn Marino 	  break;
189*e4b17023SJohn Marino 
190*e4b17023SJohn Marino 	case OPT_static_libstdc__:
191*e4b17023SJohn Marino 	  library = library >= 0 ? 2 : library;
192*e4b17023SJohn Marino 	  args[i] |= SKIPOPT;
193*e4b17023SJohn Marino 	  break;
194*e4b17023SJohn Marino 
195*e4b17023SJohn Marino 	case OPT_SPECIAL_input_file:
196*e4b17023SJohn Marino 	  {
197*e4b17023SJohn Marino 	    int len;
198*e4b17023SJohn Marino 
199*e4b17023SJohn Marino 	    /* We don't do this anymore, since we don't get them with minus
200*e4b17023SJohn Marino 	       signs on them.  */
201*e4b17023SJohn Marino 	    if (arg[0] == '\0' || arg[1] == '\0')
202*e4b17023SJohn Marino 	      continue;
203*e4b17023SJohn Marino 
204*e4b17023SJohn Marino 	    if (saw_speclang)
205*e4b17023SJohn Marino 	      {
206*e4b17023SJohn Marino 		saw_speclang = 0;
207*e4b17023SJohn Marino 		continue;
208*e4b17023SJohn Marino 	      }
209*e4b17023SJohn Marino 
210*e4b17023SJohn Marino 	    /* If the filename ends in .[chi], put options around it.
211*e4b17023SJohn Marino 	       But not if a specified -x option is currently active.  */
212*e4b17023SJohn Marino 	    len = strlen (arg);
213*e4b17023SJohn Marino 	    if (len > 2
214*e4b17023SJohn Marino 		&& (arg[len - 1] == 'c'
215*e4b17023SJohn Marino 		    || arg[len - 1] == 'i'
216*e4b17023SJohn Marino 		    || arg[len - 1] == 'h')
217*e4b17023SJohn Marino 		&& arg[len - 2] == '.')
218*e4b17023SJohn Marino 	      {
219*e4b17023SJohn Marino 		args[i] |= LANGSPEC;
220*e4b17023SJohn Marino 		added += 2;
221*e4b17023SJohn Marino 	      }
222*e4b17023SJohn Marino 
223*e4b17023SJohn Marino 	    /* If we don't know that this is a header file, we might
224*e4b17023SJohn Marino 	       need to be linking in the libraries.  */
225*e4b17023SJohn Marino 	    if (library == 0)
226*e4b17023SJohn Marino 	      {
227*e4b17023SJohn Marino 		if ((len <= 2 || strcmp (arg + (len - 2), ".H") != 0)
228*e4b17023SJohn Marino 		    && (len <= 2 || strcmp (arg + (len - 2), ".h") != 0)
229*e4b17023SJohn Marino 		    && (len <= 4 || strcmp (arg + (len - 4), ".hpp") != 0)
230*e4b17023SJohn Marino 		    && (len <= 3 || strcmp (arg + (len - 3), ".hp") != 0)
231*e4b17023SJohn Marino 		    && (len <= 4 || strcmp (arg + (len - 4), ".hxx") != 0)
232*e4b17023SJohn Marino 		    && (len <= 4 || strcmp (arg + (len - 4), ".h++") != 0)
233*e4b17023SJohn Marino 		    && (len <= 4 || strcmp (arg + (len - 4), ".HPP") != 0)
234*e4b17023SJohn Marino 		    && (len <= 4 || strcmp (arg + (len - 4), ".tcc") != 0)
235*e4b17023SJohn Marino 		    && (len <= 3 || strcmp (arg + (len - 3), ".hh") != 0))
236*e4b17023SJohn Marino 		  library = 1;
237*e4b17023SJohn Marino 	      }
238*e4b17023SJohn Marino 	  }
239*e4b17023SJohn Marino 	  break;
240*e4b17023SJohn Marino 	}
241*e4b17023SJohn Marino     }
242*e4b17023SJohn Marino 
243*e4b17023SJohn Marino   /* There's no point adding -shared-libgcc if we don't have a shared
244*e4b17023SJohn Marino      libgcc.  */
245*e4b17023SJohn Marino #ifndef ENABLE_SHARED_LIBGCC
246*e4b17023SJohn Marino   shared_libgcc = 0;
247*e4b17023SJohn Marino #endif
248*e4b17023SJohn Marino 
249*e4b17023SJohn Marino   /* Add one for shared_libgcc or extra static library.  */
250*e4b17023SJohn Marino   num_args = argc + added + need_math + (library > 0) * 4 + 1;
251*e4b17023SJohn Marino   new_decoded_options = XNEWVEC (struct cl_decoded_option, num_args);
252*e4b17023SJohn Marino 
253*e4b17023SJohn Marino   i = 0;
254*e4b17023SJohn Marino   j = 0;
255*e4b17023SJohn Marino 
256*e4b17023SJohn Marino   /* Copy the 0th argument, i.e., the name of the program itself.  */
257*e4b17023SJohn Marino   new_decoded_options[j++] = decoded_options[i++];
258*e4b17023SJohn Marino 
259*e4b17023SJohn Marino   /* NOTE: We start at 1 now, not 0.  */
260*e4b17023SJohn Marino   while (i < argc)
261*e4b17023SJohn Marino     {
262*e4b17023SJohn Marino       new_decoded_options[j] = decoded_options[i];
263*e4b17023SJohn Marino 
264*e4b17023SJohn Marino       /* Make sure -lstdc++ is before the math library, since libstdc++
265*e4b17023SJohn Marino 	 itself uses those math routines.  */
266*e4b17023SJohn Marino       if (!saw_math && (args[i] & MATHLIB) && library > 0)
267*e4b17023SJohn Marino 	{
268*e4b17023SJohn Marino 	  --j;
269*e4b17023SJohn Marino 	  saw_math = &decoded_options[i];
270*e4b17023SJohn Marino 	}
271*e4b17023SJohn Marino 
272*e4b17023SJohn Marino       if (!saw_libc && (args[i] & WITHLIBC) && library > 0)
273*e4b17023SJohn Marino 	{
274*e4b17023SJohn Marino 	  --j;
275*e4b17023SJohn Marino 	  saw_libc = &decoded_options[i];
276*e4b17023SJohn Marino 	}
277*e4b17023SJohn Marino 
278*e4b17023SJohn Marino       /* Wrap foo.[chi] files in a language specification to
279*e4b17023SJohn Marino 	 force the gcc compiler driver to run cc1plus on them.  */
280*e4b17023SJohn Marino       if (args[i] & LANGSPEC)
281*e4b17023SJohn Marino 	{
282*e4b17023SJohn Marino 	  const char *arg = decoded_options[i].arg;
283*e4b17023SJohn Marino 	  int len = strlen (arg);
284*e4b17023SJohn Marino 	  switch (arg[len - 1])
285*e4b17023SJohn Marino 	    {
286*e4b17023SJohn Marino 	    case 'c':
287*e4b17023SJohn Marino 	      generate_option (OPT_x, "c++", 1, CL_DRIVER,
288*e4b17023SJohn Marino 			       &new_decoded_options[j++]);
289*e4b17023SJohn Marino 	      break;
290*e4b17023SJohn Marino 	    case 'i':
291*e4b17023SJohn Marino 	      generate_option (OPT_x, "c++-cpp-output", 1, CL_DRIVER,
292*e4b17023SJohn Marino 			       &new_decoded_options[j++]);
293*e4b17023SJohn Marino 	      break;
294*e4b17023SJohn Marino 	    case 'h':
295*e4b17023SJohn Marino 	      generate_option (OPT_x, "c++-header", 1, CL_DRIVER,
296*e4b17023SJohn Marino 			       &new_decoded_options[j++]);
297*e4b17023SJohn Marino 	      break;
298*e4b17023SJohn Marino 	    default:
299*e4b17023SJohn Marino 	      gcc_unreachable ();
300*e4b17023SJohn Marino 	    }
301*e4b17023SJohn Marino 	  new_decoded_options[j++] = decoded_options[i];
302*e4b17023SJohn Marino 	  generate_option (OPT_x, "none", 1, CL_DRIVER,
303*e4b17023SJohn Marino 			   &new_decoded_options[j]);
304*e4b17023SJohn Marino 	}
305*e4b17023SJohn Marino 
306*e4b17023SJohn Marino       if ((args[i] & SKIPOPT) != 0)
307*e4b17023SJohn Marino 	--j;
308*e4b17023SJohn Marino 
309*e4b17023SJohn Marino       i++;
310*e4b17023SJohn Marino       j++;
311*e4b17023SJohn Marino     }
312*e4b17023SJohn Marino 
313*e4b17023SJohn Marino   /* Add `-lstdc++' if we haven't already done so.  */
314*e4b17023SJohn Marino   if (library > 0)
315*e4b17023SJohn Marino     {
316*e4b17023SJohn Marino #ifdef HAVE_LD_STATIC_DYNAMIC
317*e4b17023SJohn Marino       if (library > 1 && !static_link)
318*e4b17023SJohn Marino 	{
319*e4b17023SJohn Marino 	  generate_option (OPT_Wl_, LD_STATIC_OPTION, 1, CL_DRIVER,
320*e4b17023SJohn Marino 			   &new_decoded_options[j]);
321*e4b17023SJohn Marino 	  j++;
322*e4b17023SJohn Marino 	}
323*e4b17023SJohn Marino #endif
324*e4b17023SJohn Marino       generate_option (OPT_l,
325*e4b17023SJohn Marino 		       saw_profile_flag ? LIBSTDCXX_PROFILE : LIBSTDCXX, 1,
326*e4b17023SJohn Marino 		       CL_DRIVER, &new_decoded_options[j]);
327*e4b17023SJohn Marino       added_libraries++;
328*e4b17023SJohn Marino       j++;
329*e4b17023SJohn Marino       /* Add target-dependent static library, if necessary.  */
330*e4b17023SJohn Marino       if ((static_link || library > 1) && LIBSTDCXX_STATIC != NULL)
331*e4b17023SJohn Marino 	{
332*e4b17023SJohn Marino 	  generate_option (OPT_l, LIBSTDCXX_STATIC, 1,
333*e4b17023SJohn Marino 			   CL_DRIVER, &new_decoded_options[j]);
334*e4b17023SJohn Marino 	  added_libraries++;
335*e4b17023SJohn Marino 	  j++;
336*e4b17023SJohn Marino 	}
337*e4b17023SJohn Marino #ifdef HAVE_LD_STATIC_DYNAMIC
338*e4b17023SJohn Marino       if (library > 1 && !static_link)
339*e4b17023SJohn Marino 	{
340*e4b17023SJohn Marino 	  generate_option (OPT_Wl_, LD_DYNAMIC_OPTION, 1, CL_DRIVER,
341*e4b17023SJohn Marino 			   &new_decoded_options[j]);
342*e4b17023SJohn Marino 	  j++;
343*e4b17023SJohn Marino 	}
344*e4b17023SJohn Marino #endif
345*e4b17023SJohn Marino     }
346*e4b17023SJohn Marino   if (saw_math)
347*e4b17023SJohn Marino     new_decoded_options[j++] = *saw_math;
348*e4b17023SJohn Marino   else if (library > 0 && need_math)
349*e4b17023SJohn Marino     {
350*e4b17023SJohn Marino       generate_option (OPT_l,
351*e4b17023SJohn Marino 		       saw_profile_flag ? MATH_LIBRARY_PROFILE : MATH_LIBRARY,
352*e4b17023SJohn Marino 		       1, CL_DRIVER, &new_decoded_options[j]);
353*e4b17023SJohn Marino       added_libraries++;
354*e4b17023SJohn Marino       j++;
355*e4b17023SJohn Marino     }
356*e4b17023SJohn Marino   if (saw_libc)
357*e4b17023SJohn Marino     new_decoded_options[j++] = *saw_libc;
358*e4b17023SJohn Marino   if (shared_libgcc && !static_link)
359*e4b17023SJohn Marino     generate_option (OPT_shared_libgcc, NULL, 1, CL_DRIVER,
360*e4b17023SJohn Marino 		     &new_decoded_options[j++]);
361*e4b17023SJohn Marino 
362*e4b17023SJohn Marino   *in_decoded_options_count = j;
363*e4b17023SJohn Marino   *in_decoded_options = new_decoded_options;
364*e4b17023SJohn Marino   *in_added_libraries = added_libraries;
365*e4b17023SJohn Marino }
366*e4b17023SJohn Marino 
367*e4b17023SJohn Marino /* Called before linking.  Returns 0 on success and -1 on failure.  */
lang_specific_pre_link(void)368*e4b17023SJohn Marino int lang_specific_pre_link (void)  /* Not used for C++.  */
369*e4b17023SJohn Marino {
370*e4b17023SJohn Marino   return 0;
371*e4b17023SJohn Marino }
372*e4b17023SJohn Marino 
373*e4b17023SJohn Marino /* Number of extra output files that lang_specific_pre_link may generate.  */
374*e4b17023SJohn Marino int lang_specific_extra_outfiles = 0;  /* Not used for C++.  */
375