/* Specific flags and argument handling of the front-end of the
GNU compiler for the Java(TM) language.
- Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
- Free Software Foundation, Inc.
+ Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+ 2005, 2006, 2007, 2009, 2010, 2011 Free Software Foundation, Inc.
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 2, or (at your option)
+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,
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 COPYING. If not, write to
-the Free Software Foundation, 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA.
+along with GCC; see the file COPYING3. If not see
+<http://www.gnu.org/licenses/>.
Java and all Java-based marks are trademarks or registered trademarks
of Sun Microsystems, Inc. in the United States and other countries.
#include "coretypes.h"
#include "tm.h"
#include "gcc.h"
+#include "jcf.h"
+#include "opts.h"
/* Name of spec file. */
#define SPEC_FILE "libgcj.spec"
/* This bit is set if we saw a `-xfoo' language specification. */
#define LANGSPEC (1<<1)
-/* True if this arg is a parameter to the previous option-taking arg. */
-#define PARAM_ARG (1<<2)
/* True if this arg is a .java input file name. */
#define JAVA_FILE_ARG (1<<3)
/* True if this arg is a .class input file name. */
/* True if this arg is a resource file. */
#define RESOURCE_FILE_ARG (1<<7)
-static char *find_spec_file PARAMS ((const char *));
-static int verify_class_name PARAMS ((const char *));
+static char *find_spec_file (const char *);
+static int verify_class_name (const char *);
static const char *main_class_name = NULL;
int lang_specific_extra_outfiles = 0;
int shared_libgcc = 1;
static const char jvgenmain_spec[] =
- "jvgenmain %{D*} %b %m.i |\n\
+ "jvgenmain %{findirect-dispatch} %{D*} %b %m.i |\n\
cc1 %m.i %1 \
- %{!Q:-quiet} -dumpbase %b.c %{d*} %{m*} %{a*}\
+ %{!Q:-quiet} -dumpbase %b.c %{d*} %{m*}\
%{g*} %{O*} \
%{v:-version} %{pg:-p} %{p}\
%<fbounds-check %<fno-bounds-check\
- %<fassume-compiled %<fno-assume-compiled\
+ %<fassume-compiled* %<fno-assume-compiled*\
%<fcompile-resource* %<fassert %<fno-assert \
%<femit-class-file %<femit-class-files %<fencoding*\
%<fuse-boehm-gc %<fhash-synchronization %<fjni\
- %<findirect-dispatch \
+ %<findirect-dispatch\
%<fno-store-check %<foutput-class-dir\
- %<fclasspath* %<fCLASSPATH* %<fbootclasspath*\
+ %<fclasspath* %<fbootclasspath*\
%<fextdirs*\
%<fuse-divide-subroutine %<fno-use-divide-subroutine\
+ %<fuse-atomic-builtins %<fno-use-atomic-builtins\
%<fcheck-references %<fno-check-references\
- %<ffilelist-file\
+ %<ffilelist-file %<fsaw-java-file %<fsource* %<ftarget*\
%{f*} -fdollars-in-identifiers\
%{aux-info*}\
%{pg:%{fomit-frame-pointer:%e-pg and -fomit-frame-pointer are incompatible}}\
/* Return full path name of spec file if it is in DIR, or NULL if
not. */
static char *
-find_spec_file (dir)
- const char *dir;
+find_spec_file (const char *dir)
{
char *spec;
- int x;
struct stat sb;
- spec = xmalloc (strlen (dir) + sizeof (SPEC_FILE)
- + sizeof ("-specs=") + 4);
- strcpy (spec, "-specs=");
- x = strlen (spec);
- strcat (spec, dir);
+ spec = XNEWVEC (char, strlen (dir) + sizeof (SPEC_FILE) + 4);
+ strcpy (spec, dir);
strcat (spec, "/");
strcat (spec, SPEC_FILE);
- if (! stat (spec + x, &sb))
+ if (! stat (spec, &sb))
return spec;
free (spec);
return NULL;
}
-/* FIXME: these should come from lex.h. */
#define JAVA_START_CHAR_P(c) (c < 128 && (ISIDST (c) || c == '$'))
#define JAVA_PART_CHAR_P(c) (c < 128 \
&& (ISIDNUM (c) \
/* Verify that NAME is a valid Java class name that might contain
`main'. Return 0 on failure. */
static int
-verify_class_name (name)
- const char *name;
+verify_class_name (const char *name)
{
/* FIXME: what encoding do we use for command-line arguments? For
now we assume plain ASCII, which of course is wrong. */
}
void
-lang_specific_driver (in_argc, in_argv, in_added_libraries)
- int *in_argc;
- const char *const **in_argv;
- int *in_added_libraries;
+lang_specific_driver (struct cl_decoded_option **in_decoded_options,
+ unsigned int *in_decoded_options_count,
+ int *in_added_libraries)
{
- int i, j;
-
- /* If nonzero, the user gave us the `-v' flag. */
- int saw_verbose_flag = 0;
+ unsigned int i, j;
int saw_save_temps = 0;
libraries. */
int added = 2;
- /* Used to track options that take arguments, so we don't go wrapping
- those with -xc++/-xnone. */
- const char *quote = NULL;
-
/* The new argument list will be contained in this. */
- const char **arglist;
+ struct cl_decoded_option *new_decoded_options;
/* Nonzero if we saw a `-xfoo' language specification on the
command line. Used to avoid adding our own -xc++ if the user
already gave a language for the file. */
int saw_speclang = 0;
-#if 0
- /* "-lm" or "-lmath" if it appears on the command line. */
- const char *saw_math ATTRIBUTE_UNUSED = 0;
-
- /* "-lc" if it appears on the command line. */
- const char *saw_libc ATTRIBUTE_UNUSED = 0;
-
- /* "-lgcjgc" if it appears on the command line. */
- const char *saw_gc ATTRIBUTE_UNUSED = 0;
-
- /* Saw `-l' option for the thread library. */
- const char *saw_threadlib ATTRIBUTE_UNUSED = 0;
-
- /* Saw `-lgcj' on command line. */
- int saw_libgcj ATTRIBUTE_UNUSED = 0;
-#endif
-
/* Saw --resource, -C or -o options, respectively. */
int saw_resource = 0;
int saw_C = 0;
int *args;
/* The total number of arguments with the new stuff. */
- int argc;
+ unsigned int argc;
/* The argument list. */
- const char *const *argv;
+ struct cl_decoded_option *decoded_options;
/* The number of libraries added in. */
int added_libraries;
/* The total number of arguments with the new stuff. */
- int num_args = 1;
+ unsigned int num_args = 1;
/* Nonzero if linking is supposed to happen. */
int will_link = 1;
/* The argument we use to specify the spec file. */
char *spec_file = NULL;
- argc = *in_argc;
- argv = *in_argv;
+ /* If linking, nonzero if the BC-ABI is in use. */
+ int link_for_bc_abi = 0;
+
+ argc = *in_decoded_options_count;
+ decoded_options = *in_decoded_options;
added_libraries = *in_added_libraries;
- args = xcalloc (argc, sizeof (int));
+ args = XCNEWVEC (int, argc);
for (i = 1; i < argc; i++)
{
- /* If the previous option took an argument, we swallow it here. */
- if (quote)
- {
- quote = NULL;
- args[i] |= PARAM_ARG;
- continue;
- }
-
- /* We don't do this anymore, since we don't get them with minus
- signs on them. */
- if (argv[i][0] == '\0' || argv[i][1] == '\0')
- continue;
-
- if (argv[i][0] == '-')
+ switch (decoded_options[i].opt_index)
{
- if (library != 0 && (strcmp (argv[i], "-nostdlib") == 0
- || strcmp (argv[i], "-nodefaultlibs") == 0))
+ case OPT_nostdlib:
+ case OPT_nodefaultlibs:
+ library = 0;
+ break;
+
+ case OPT_fmain_:
+ main_class_name = decoded_options[i].arg;
+ added--;
+ break;
+
+ case OPT__help:
+ want_spec_file = 0;
+ break;
+
+ case OPT_v:
+ if (argc == 2)
{
+ /* If they only gave us `-v', don't try to link
+ in libgcj. */
library = 0;
}
- else if (strncmp (argv[i], "-fmain=", 7) == 0)
- {
- main_class_name = argv[i] + 7;
- added--;
- }
- else if (strcmp (argv[i], "-fhelp") == 0)
- want_spec_file = 0;
- else if (strcmp (argv[i], "-v") == 0)
- {
- saw_verbose_flag = 1;
- if (argc == 2)
- {
- /* If they only gave us `-v', don't try to link
- in libgcj. */
- library = 0;
- }
- }
- else if (strncmp (argv[i], "-x", 2) == 0)
- saw_speclang = 1;
- else if (strcmp (argv[i], "-C") == 0)
- {
- saw_C = 1;
- want_spec_file = 0;
- if (library != 0)
- added -= 2;
- library = 0;
- will_link = 0;
- }
- else if (strncmp (argv[i], "-fcompile-resource=", 19) == 0)
- {
- saw_resource = 1;
- want_spec_file = 0;
- if (library != 0)
- --added;
- library = 0;
- will_link = 0;
- }
- else if (argv[i][1] == 'D')
- saw_D = 1;
- else if (argv[i][1] == 'g')
- saw_g = 1;
- else if (argv[i][1] == 'O')
- saw_O = 1;
- else if ((argv[i][2] == '\0'
- && (char *)strchr ("bBVDUoeTuIYmLiA", argv[i][1]) != NULL)
- || strcmp (argv[i], "-Tdata") == 0
- || strcmp (argv[i], "-MT") == 0
- || strcmp (argv[i], "-MF") == 0)
- {
- if (strcmp (argv[i], "-o") == 0)
- saw_o = 1;
- quote = argv[i];
- }
- else if (strcmp(argv[i], "-classpath") == 0
- || strcmp(argv[i], "-bootclasspath") == 0
- || strcmp(argv[i], "-CLASSPATH") == 0)
- {
- quote = argv[i];
- added -= 1;
- }
- else if (library != 0
- && ((argv[i][2] == '\0'
- && (char *) strchr ("cSEM", argv[i][1]) != NULL)
- || strcmp (argv[i], "-MM") == 0))
- {
- /* Don't specify libraries if we won't link, since that would
- cause a warning. */
- library = 0;
- added -= 2;
+ break;
+
+ case OPT_x:
+ saw_speclang = 1;
+ break;
+
+ case OPT_C:
+ saw_C = 1;
+ want_spec_file = 0;
+ if (library != 0)
+ added -= 2;
+ library = 0;
+ will_link = 0;
+ break;
+
+ case OPT_fcompile_resource_:
+ saw_resource = 1;
+ want_spec_file = 0;
+ if (library != 0)
+ --added;
+ library = 0;
+ will_link = 0;
+ break;
+
+ case OPT_D:
+ saw_D = 1;
+ break;
+
+ case OPT_g:
+ case OPT_gcoff:
+ case OPT_gdwarf_:
+ case OPT_ggdb:
+ case OPT_gstabs:
+ case OPT_gstabs_:
+ case OPT_gvms:
+ case OPT_gxcoff:
+ case OPT_gxcoff_:
+ saw_g = 1;
+ break;
+
+ case OPT_O:
+ case OPT_Os:
+ case OPT_Ofast:
+ saw_O = 1;
+ break;
+
+ case OPT_o:
+ saw_o = 1;
+ break;
+
+ case OPT_fclasspath_:
+ case OPT_fbootclasspath_:
+ case OPT_extdirs:
+ added -= 1;
+ break;
+
+ case OPT_c:
+ case OPT_S:
+ case OPT_E:
+ case OPT_M:
+ case OPT_MM:
+ /* Don't specify libraries if we won't link, since that would
+ cause a warning. */
+ library = 0;
+ added -= 2;
+
+ /* Remember this so we can confirm -fmain option. */
+ will_link = 0;
+ break;
+
+ case OPT_fsyntax_only:
+ library = 0;
+ will_link = 0;
+ continue;
- /* Remember this so we can confirm -fmain option. */
- will_link = 0;
- }
- else if (strcmp (argv[i], "-d") == 0)
- {
- /* `-d' option is for javac compatibility. */
- quote = argv[i];
- added -= 1;
- }
- else if (strcmp (argv[i], "-fsyntax-only") == 0
- || strcmp (argv[i], "--syntax-only") == 0)
- {
- want_spec_file = 0;
- library = 0;
- will_link = 0;
- continue;
- }
- else if (strcmp (argv[i], "-save-temps") == 0)
- saw_save_temps = 1;
- else if (strcmp (argv[i], "-static-libgcc") == 0
- || strcmp (argv[i], "-static") == 0)
- shared_libgcc = 0;
- else
- /* Pass other options through. */
- continue;
- }
- else
- {
- int len;
+ case OPT_save_temps:
+ saw_save_temps = 1;
+ break;
- if (saw_speclang)
- {
- saw_speclang = 0;
- continue;
- }
+ case OPT_static_libgcc:
+ case OPT_static:
+ shared_libgcc = 0;
+ break;
- if (saw_resource)
- {
- args[i] |= RESOURCE_FILE_ARG;
- added += 2; /* for -xjava and -xnone */
- }
+ case OPT_findirect_dispatch:
+ link_for_bc_abi = 1;
+ break;
- if (argv[i][0] == '@')
- {
- args[i] |= INDIRECT_FILE_ARG;
- indirect_files_count++;
- added += 2; /* for -xjava and -xnone */
- }
+ case OPT_SPECIAL_input_file:
+ {
+ const char *arg = decoded_options[i].arg;
+ int len;
- len = strlen (argv[i]);
- if (len > 5 && strcmp (argv[i] + len - 5, ".java") == 0)
- {
- args[i] |= JAVA_FILE_ARG;
- java_files_count++;
- }
- if (len > 6 && strcmp (argv[i] + len - 6, ".class") == 0)
- {
- args[i] |= CLASS_FILE_ARG;
- class_files_count++;
- }
- if (len > 4
- && (strcmp (argv[i] + len - 4, ".zip") == 0
- || strcmp (argv[i] + len - 4, ".jar") == 0))
- {
- args[i] |= ZIP_FILE_ARG;
- zip_files_count++;
- }
+ /* We don't do this anymore, since we don't get them with minus
+ signs on them. */
+ if (arg[0] == '\0' || arg[1] == '\0')
+ continue;
+
+ if (saw_speclang)
+ {
+ saw_speclang = 0;
+ continue;
+ }
+
+ if (saw_resource)
+ {
+ args[i] |= RESOURCE_FILE_ARG;
+ added += 2; /* for -xjava and -xnone */
+ }
+
+ if (arg[0] == '@')
+ {
+ args[i] |= INDIRECT_FILE_ARG;
+ indirect_files_count++;
+ added += 2; /* for -xjava and -xnone */
+ }
+
+ len = strlen (arg);
+ if (len > 5 && strcmp (arg + len - 5, ".java") == 0)
+ {
+ args[i] |= JAVA_FILE_ARG;
+ java_files_count++;
+ }
+ if (len > 6 && strcmp (arg + len - 6, ".class") == 0)
+ {
+ args[i] |= CLASS_FILE_ARG;
+ class_files_count++;
+ }
+ if (len > 4
+ && (strcmp (arg + len - 4, ".zip") == 0
+ || strcmp (arg + len - 4, ".jar") == 0))
+ {
+ args[i] |= ZIP_FILE_ARG;
+ zip_files_count++;
+ }
+ }
+
+ default:
+ /* Pass other options through. */
+ continue;
}
}
- if (quote)
- fatal ("argument to `%s' missing\n", quote);
-
if (saw_D && ! main_class_name)
- fatal ("can't specify `-D' without `--main'\n");
+ fatal_error ("can%'t specify %<-D%> without %<--main%>");
if (main_class_name && ! verify_class_name (main_class_name))
- fatal ("`%s' is not a valid class name", main_class_name);
+ fatal_error ("%qs is not a valid class name", main_class_name);
num_args = argc + added;
if (saw_resource)
{
if (! saw_o)
- fatal ("--resource requires -o");
+ fatal_error ("--resource requires -o");
}
if (saw_C)
{
num_args += 3;
if (class_files_count + zip_files_count > 0)
{
- error ("warning: already-compiled .class files ignored with -C");
+ warning (0, "already-compiled .class files ignored with -C");
num_args -= class_files_count + zip_files_count;
class_files_count = 0;
zip_files_count = 0;
}
num_args += 2; /* For -o NONE. */
if (saw_o)
- fatal ("cannot specify both -C and -o");
+ fatal_error ("cannot specify both -C and -o");
}
if ((saw_o && java_files_count + class_files_count + zip_files_count > 1)
|| (saw_C && java_files_count > 1)
{
filelist_filename = make_temp_file ("jx");
if (filelist_filename == NULL)
- fatal ("cannot create temporary file");
+ fatal_error ("cannot create temporary file");
record_temp_file (filelist_filename, ! saw_save_temps, 0);
filelist_file = fopen (filelist_filename, "w");
if (filelist_file == NULL)
pfatal_with_name (filelist_filename);
num_args -= java_files_count + class_files_count + zip_files_count;
- num_args += 2; /* for the combined arg and "-xjava" */
- }
- /* If we know we don't have to do anything, bail now. */
-#if 0
- if (! added && ! library && main_class_name == NULL && ! saw_C)
- {
- free (args);
- return;
+ num_args += 3; /* for the combined arg "-xjava", and "-xnone" */
}
-#endif
if (main_class_name)
{
if (saw_g + saw_O == 0)
num_args++;
num_args++;
+ /* An additional entry for the classpath. */
+ num_args++;
if (combine_inputs || indirect_files_count > 0)
num_args += 1; /* for "-ffilelist-file" */
if (combine_inputs && indirect_files_count > 0)
- fatal("using both @FILE with multiple files not implemented");
+ fatal_error ("using both @FILE with multiple files not implemented");
/* There's no point adding -shared-libgcc if we don't have a shared
libgcc. */
shared_libgcc = 0;
#endif
+ if (java_files_count > 0)
+ ++num_args;
+
num_args += shared_libgcc;
- arglist = xmalloc ((num_args + 1) * sizeof (char *));
+ num_args += link_for_bc_abi;
+
+ new_decoded_options = XNEWVEC (struct cl_decoded_option, num_args);
j = 0;
- for (i = 0; i < argc; i++, j++)
+ new_decoded_options[j++] = decoded_options[0];
+
+ if (combine_inputs || indirect_files_count > 0)
+ generate_option (OPT_ffilelist_file, NULL, 1, CL_DRIVER,
+ &new_decoded_options[j++]);
+
+ if (combine_inputs)
+ {
+ generate_option (OPT_x, "java", 1, CL_DRIVER,
+ &new_decoded_options[j++]);
+ generate_option_input_file (filelist_filename,
+ &new_decoded_options[j++]);
+ generate_option (OPT_x, "none", 1, CL_DRIVER,
+ &new_decoded_options[j++]);
+ }
+
+ if (java_files_count > 0)
+ generate_option (OPT_fsaw_java_file, NULL, 1, CL_DRIVER,
+ &new_decoded_options[j++]);
+
+ jcf_path_init ();
+ for (i = 1; i < argc; i++, j++)
{
- arglist[j] = argv[i];
+ new_decoded_options[j] = decoded_options[i];
- if ((args[i] & PARAM_ARG) || i == 0)
+ if (decoded_options[i].errors & CL_ERR_MISSING_ARG)
continue;
if ((args[i] & RESOURCE_FILE_ARG) != 0)
{
- arglist[j++] = "-xjava";
- arglist[j++] = argv[i];
- arglist[j] = "-xnone";
+ generate_option (OPT_x, "java", 1, CL_DRIVER,
+ &new_decoded_options[j++]);
+ new_decoded_options[j++] = decoded_options[i];
+ generate_option (OPT_x, "none", 1, CL_DRIVER,
+ &new_decoded_options[j]);
}
- if (strcmp (argv[i], "-classpath") == 0
- || strcmp (argv[i], "-bootclasspath") == 0
- || strcmp (argv[i], "-CLASSPATH") == 0)
+ switch (decoded_options[i].opt_index)
{
- arglist[j] = concat ("-f", argv[i]+1, "=", argv[i+1], NULL);
- i++;
+ case OPT_I:
+ jcf_path_include_arg (decoded_options[i].arg);
+ --j;
continue;
- }
- if (strcmp (argv[i], "-d") == 0)
- {
- arglist[j] = concat ("-foutput-class-dir=", argv[i + 1], NULL);
- ++i;
+ case OPT_fclasspath_:
+ jcf_path_classpath_arg (decoded_options[i].arg);
+ --j;
continue;
- }
- if (spec_file == NULL && strncmp (argv[i], "-L", 2) == 0)
- spec_file = find_spec_file (argv[i] + 2);
+ case OPT_fbootclasspath_:
+ jcf_path_bootclasspath_arg (decoded_options[i].arg);
+ --j;
+ continue;
- if (strncmp (argv[i], "-fmain=", 7) == 0)
- {
+ case OPT_extdirs:
+ jcf_path_extdirs_arg (decoded_options[i].arg);
+ --j;
+ continue;
+
+ case OPT_L:
+ if (spec_file == NULL)
+ spec_file = find_spec_file (decoded_options[i].arg);
+ break;
+
+ case OPT_fmain_:
if (! will_link)
- fatal ("cannot specify `main' class when not linking");
+ fatal_error ("cannot specify %<main%> class when not linking");
--j;
continue;
}
if ((args[i] & INDIRECT_FILE_ARG) != 0)
{
- arglist[j++] = "-xjava";
- arglist[j++] = argv[i]+1; /* Drop '@'. */
- arglist[j] = "-xnone";
+ generate_option (OPT_x, "java", 1, CL_DRIVER,
+ &new_decoded_options[j++]);
+ /* Drop '@'. */
+ generate_option_input_file (decoded_options[i].arg + 1,
+ &new_decoded_options[j++]);
+ generate_option (OPT_x, "none", 1, CL_DRIVER,
+ &new_decoded_options[j]);
}
if ((args[i] & (CLASS_FILE_ARG|ZIP_FILE_ARG)) && saw_C)
if (combine_inputs
&& (args[i] & (CLASS_FILE_ARG|JAVA_FILE_ARG|ZIP_FILE_ARG)) != 0)
{
- fputs (argv[i], filelist_file);
+ fputs (decoded_options[i].arg, filelist_file);
fputc ('\n', filelist_file);
--j;
continue;
}
}
- if (combine_inputs || indirect_files_count > 0)
- arglist[j++] = "-ffilelist-file";
+ /* Handle classpath setting. We specify the bootclasspath since
+ that requires the fewest changes to our existing code... */
+ jcf_path_seal (0);
+ generate_option (OPT_fbootclasspath_, jcf_path_compute (""), 1,
+ CL_DRIVER, &new_decoded_options[j++]);
if (combine_inputs)
{
if (fclose (filelist_file))
pfatal_with_name (filelist_filename);
- arglist[j++] = "-xjava";
- arglist[j++] = filelist_filename;
}
/* If we saw no -O or -g option, default to -g1, for javac compatibility. */
if (saw_g + saw_O == 0)
- arglist[j++] = "-g1";
+ generate_option (OPT_g, "1", 1, CL_DRIVER, &new_decoded_options[j++]);
/* Read the specs file corresponding to libgcj.
If we didn't find the spec file on the -L path, then we hope it
is somewhere in the standard install areas. */
if (want_spec_file)
- arglist[j++] = spec_file == NULL ? "-specs=libgcj.spec" : spec_file;
+ generate_option (OPT_specs_, spec_file == NULL ? "libgcj.spec" : spec_file,
+ 1, CL_DRIVER, &new_decoded_options[j++]);
if (saw_C)
{
- arglist[j++] = "-fsyntax-only";
- arglist[j++] = "-femit-class-files";
- arglist[j++] = "-S";
- arglist[j++] = "-o";
- arglist[j++] = "NONE";
+ generate_option (OPT_fsyntax_only, NULL, 1, CL_DRIVER,
+ &new_decoded_options[j++]);
+ generate_option (OPT_femit_class_files, NULL, 1, CL_DRIVER,
+ &new_decoded_options[j++]);
+ generate_option (OPT_S, NULL, 1, CL_DRIVER, &new_decoded_options[j++]);
+ generate_option (OPT_o, "NONE", 1, CL_DRIVER,
+ &new_decoded_options[j++]);
}
if (shared_libgcc)
- arglist[j++] = "-shared-libgcc";
+ generate_option (OPT_shared_libgcc, NULL, 1, CL_DRIVER,
+ &new_decoded_options[j++]);
- arglist[j] = NULL;
+ if (link_for_bc_abi)
+ generate_option (OPT_s_bc_abi, NULL, 1, CL_DRIVER,
+ &new_decoded_options[j++]);
- *in_argc = j;
- *in_argv = arglist;
+ *in_decoded_options_count = j;
+ *in_decoded_options = new_decoded_options;
*in_added_libraries = added_libraries;
}
int
-lang_specific_pre_link ()
+lang_specific_pre_link (void)
{
int err;
if (main_class_name == NULL)
}
return err;
}
-
-/* Table of language-specific spec functions. */
-const struct spec_function lang_specific_spec_functions[] =
-{
- { 0, 0 }
-};