GCJ Build Error

Antonio Ake ake@ecn.purdue.edu
Sun Aug 12 12:02:00 GMT 2001


I have recorded most of the changes that I have done from the release of
July 2nd, 2001. I hope this help. I am working with a Tru64 Unix v5.0 910
I have noticed some unique problems for this version of Tru64 UNIX, like
the natPlainDatagramsocket.cc.


1. libstdc++V3 config error building GCC 3.0 on alphaev6-dec-osf5.0
Reference: http://gcc.gnu.org/ml/libstdc++/2001-06/msg00507.html
Solution: http://gcc.gnu.org/ml/libstdc++/2001-07/msg00039.html

2. Invalid instruction " imb" on  Alpha
Reference: http://gcc.gnu.org/ml/gcc/2001-06/msg01527.html
Solution:  http://gcc.gnu.org/ml/gcc-patches/2001-07/msg00873.html

3. undefined assembler operation: .section  .section .rodata
Reference and Solution: http://gcc.gnu.org/ml/gcc-patches/2001-06/msg01564.html


4. natfile.cc" didn't compile because of duplicate of stat.
Reference: http://gcc.gnu.org/ml/java/2001-07/msg00165.html
Solution: http://gcc.gnu.org/ml/java/2001-07/msg00163.html

5. _ZN4java4lang5ClassC1Ev multiple defined in Alpha OSF1
Reference: http://gcc.gnu.org/ml/java/2001-07/msg00167.html
Solution: http://gcc.gnu.org/ml/java-patches/2001-q3/msg00024.html

6. Object file format error in Alpha OSF1
Reference: http://gcc.gnu.org/ml/java/2001-07/msg00172.html
This is a problem with the Tru64 UNIX OSF1 version 5.0 linker problem:
http://ftp1.support.compaq.com/public/unix/v5.0/Tru64_UNIX_V5.0/
Patch 578.00   OSF500-364. The patch was not installed, but to reduce the size of the libgcj, the java.awt libraries were omitted using the following command in gcc configure:
"configure -without-x "

7. natPlainDatagramSocketImpl.cc doesn't compile in ALPHA OSF1.
Reference GNAT PR 3694 on http://gcc.gnu.org
Solution: http://gcc.gnu.org/ml/java-patches/2001-q3/msg00181.html

8. natPlainSocketImpl.cc doesn't compile on ALPHA OSF1
Reference GNAT PR 3696 on http://gcc.gnu.org
Solution: http://gcc.gnu.org/ml/java-patches/2001-q3/msg00181.html

9. Problem with Alpha OSF1 and mips-tfile
Reference: http://gcc.gnu.org/ml/java/2001-07/msg00188.html
Solution: http://gcc.gnu.org/ml/java/2001-07/msg00188.html

10.Due to the Problem with Alpha OSF1 and mips-tfile, I compile by hand HelloWorld.java, but I had a segmentation fault:
Reference: http://gcc.gnu.org/ml/java/2001-07/msg00197.html
Solution: Order of the library in the collect2 command -lgcc_s -lgcc -lgcj -lm -lgcjgc -lzgcj -lgcc_s -lgcc -lc -lgcc_s -lgcc

11. "iconv" library problem:
Reference: http://gcc.gnu.org/ml/java/2001-07/msg00209.html
Solution: http://gcc.gnu.org/ml/java-patches/2001-q3/msg00124.html


12. symbol "JNI_OnLoad" unresolved
Reference: http://gcc.gnu.org/ml/java-patches/2001-q3/msg00128.html
Solution: http://gcc.gnu.org/ml/java-patches/2001-q3/msg00207.html

13. internal error with a classbyte file Reference
http://gcc.gnu.org/ml/java/2001-07/msg00222.html
Workaround: compile this program with  -O option.


On Fri, 10 Aug 2001, The Morsbergers wrote:

> Is someone going to keep the java / alpha patches until a generic fix is
> found?
>
> --
> David Morsberger
>
> > From: Alexandre Petit-Bianco <apbianco@cygnus.com>
> > Reply-To: apbianco@cygnus.com
> > Date: Fri, 10 Aug 2001 17:34:35 -0700 (PDT)
> > To: Antonio Ake <ake@ecn.purdue.edu>, The Morsbergers <morsberger@usa.net>,
> > <java@gcc.gnu.org>
> > Subject: Re: GCJ Build Error
> >
> >
> > Antonio Ake writes:
> >
> >> Ok. First I need to tell you this, In version 3.0, libgcj for True64
> >> is not supported. There have been solved like 10 problems for True64
> >> v5.0(mine version) for GCC 3.0, and finally there is a very
> >> acceptable version.
> >
> > OK, unfortunately, that patch will have to be reverted:
> >
> > http://gcc.gnu.org/ml/gcc/2001-08/msg00569.html
> >
> > It's not too obvious to me what makes it break things for some folks.
> >
> > Mark Mitchell is pushing for this to happen. Rainer is unreachable
> > until September 10. I don't really have the time to look into
> > that. We'll have to revert the patch and re-open the PR java/227. I
> > know, it's a bummer. Hopefully support will be restored in the trunk
> > (the patch will be removed from the trunk too) as soon as someone has
> > some usefull time to spend on it.
> >
> > Note that this doesn't prevent anyone from keeping them changes
> > locally and keep on hacking. The patch that will be reverted is the
> > following.
> >
> > ./A
> >
> >
> > Index: gcc.c
> > ===================================================================
> > RCS file: /cvs/gcc/gcc/gcc/gcc.c,v
> > retrieving revision 1.205.2.18
> > retrieving revision 1.205.2.19
> > diff -u -p -r1.205.2.18 -r1.205.2.19
> > --- gcc.c 2001/06/10 00:30:43 1.205.2.18
> > +++ gcc.c 2001/08/02 12:22:49 1.205.2.19
> > @@ -243,6 +243,7 @@ static void clear_failure_queue PARAMS (
> > static int check_live_switch PARAMS ((int, int));
> > static const char *handle_braces PARAMS ((const char *));
> > static char *save_string PARAMS ((const char *, int));
> > +static void set_collect_gcc_options PARAMS ((void));
> > static int do_spec_1  PARAMS ((const char *, int, const char *));
> > static const char *find_file PARAMS ((const char *));
> > static int is_directory  PARAMS ((const char *, const char *, int));
> > @@ -266,7 +267,6 @@ static void process_command  PARAMS ((in
> > static int execute   PARAMS ((void));
> > static void clear_args   PARAMS ((void));
> > static void fatal_error   PARAMS ((int));
> > -static void set_input   PARAMS ((const char *));
> > static void init_gcc_specs              PARAMS ((struct obstack *,
> > const char *,
> > const char *));
> > @@ -3869,6 +3869,63 @@ process_command (argc, argv)
> > switches[n_switches].part1 = 0;
> > infiles[n_infiles].name = 0;
> > }
> > +
> > +/* Store switches not filtered out but %{<S} in spec in COLLECT_GCC_OPTIONS
> > +   and place that in the environment.  */
> > +
> > +static void
> > +set_collect_gcc_options ()
> > +{
> > +  int i;
> > +  int first_time;
> > +
> > +  /* Build COLLECT_GCC_OPTIONS to have all of the options specified to
> > +     the compiler.  */
> > +  obstack_grow (&collect_obstack, "COLLECT_GCC_OPTIONS=",
> > +  sizeof ("COLLECT_GCC_OPTIONS=") - 1);
> > +
> > +  first_time = TRUE;
> > +  for (i = 0; (int) i < n_switches; i++)
> > +    {
> > +      const char *const *args;
> > +      const char *p, *q;
> > +      if (!first_time)
> > + obstack_grow (&collect_obstack, " ", 1);
> > +
> > +      first_time = FALSE;
> > +
> > +      /* Ignore elided switches.  */
> > +      if (switches[i].live_cond == SWITCH_IGNORE)
> > + continue;
> > +
> > +      obstack_grow (&collect_obstack, "'-", 2);
> > +      q = switches[i].part1;
> > +      while ((p = strchr (q, '\'')))
> > + {
> > +   obstack_grow (&collect_obstack, q, p - q);
> > +   obstack_grow (&collect_obstack, "'\\''", 4);
> > +   q = ++p;
> > + }
> > +      obstack_grow (&collect_obstack, q, strlen (q));
> > +      obstack_grow (&collect_obstack, "'", 1);
> > +
> > +      for (args = switches[i].args; args && *args; args++)
> > + {
> > +   obstack_grow (&collect_obstack, " '", 2);
> > +   q = *args;
> > +   while ((p = strchr (q, '\'')))
> > +     {
> > +       obstack_grow (&collect_obstack, q, p - q);
> > +       obstack_grow (&collect_obstack, "'\\''", 4);
> > +       q = ++p;
> > +     }
> > +   obstack_grow (&collect_obstack, q, strlen (q));
> > +   obstack_grow (&collect_obstack, "'", 1);
> > + }
> > +    }
> > +  obstack_grow (&collect_obstack, "\0", 1);
> > +  putenv (obstack_finish (&collect_obstack));
> > +}
> >
> > /* Process a spec string, accumulating and running commands.  */
> >
> > @@ -4012,6 +4069,8 @@ do_spec_1 (spec, inswitch, soft_matched_
> > argbuf_index--;
> > }
> >
> > + set_collect_gcc_options ();
> > +
> > if (argbuf_index > 0)
> > {
> > value = execute ();
> > @@ -5395,7 +5454,7 @@ is_directory (path1, path2, linker)
> > /* Set up the various global variables to indicate that we're processing
> > the input file named FILENAME.  */
> >
> > -static void
> > +void
> > set_input (filename)
> > const char *filename;
> > {
> > @@ -5567,52 +5626,6 @@ main (argc, argv)
> > Decode switches that are handled locally.  */
> >
> > process_command (argc, argv);
> > -
> > -  {
> > -    int first_time;
> > -
> > -    /* Build COLLECT_GCC_OPTIONS to have all of the options specified to
> > -       the compiler.  */
> > -    obstack_grow (&collect_obstack, "COLLECT_GCC_OPTIONS=",
> > -    sizeof ("COLLECT_GCC_OPTIONS=") - 1);
> > -
> > -    first_time = TRUE;
> > -    for (i = 0; (int) i < n_switches; i++)
> > -      {
> > - const char *const *args;
> > - const char *p, *q;
> > - if (!first_time)
> > -   obstack_grow (&collect_obstack, " ", 1);
> > -
> > - first_time = FALSE;
> > - obstack_grow (&collect_obstack, "'-", 2);
> > - q = switches[i].part1;
> > - while ((p = strchr (q, '\'')))
> > -   {
> > -     obstack_grow (&collect_obstack, q, p - q);
> > -     obstack_grow (&collect_obstack, "'\\''", 4);
> > -     q = ++p;
> > -   }
> > - obstack_grow (&collect_obstack, q, strlen (q));
> > - obstack_grow (&collect_obstack, "'", 1);
> > -
> > - for (args = switches[i].args; args && *args; args++)
> > -   {
> > -     obstack_grow (&collect_obstack, " '", 2);
> > -     q = *args;
> > -     while ((p = strchr (q, '\'')))
> > -       {
> > -  obstack_grow (&collect_obstack, q, p - q);
> > -  obstack_grow (&collect_obstack, "'\\''", 4);
> > -  q = ++p;
> > -       }
> > -     obstack_grow (&collect_obstack, q, strlen (q));
> > -     obstack_grow (&collect_obstack, "'", 1);
> > -   }
> > -      }
> > -    obstack_grow (&collect_obstack, "\0", 1);
> > -    putenv (obstack_finish (&collect_obstack));
> > -  }
> >
> > /* Initialize the vector of specs to just the default.
> > This means one element containing 0s, as a terminator.  */
> > Index: gcc.h
> > ===================================================================
> > RCS file: /cvs/gcc/gcc/gcc/gcc.h,v
> > retrieving revision 1.3.6.2
> > retrieving revision 1.3.6.3
> > diff -u -p -r1.3.6.2 -r1.3.6.3
> > --- gcc.h 2001/05/18 18:40:50 1.3.6.2
> > +++ gcc.h 2001/08/02 12:22:50 1.3.6.3
> > @@ -1,5 +1,5 @@
> > /* Header file for modules that link with gcc.c
> > -   Copyright (C) 1999 Free Software Foundation, Inc.
> > +   Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc.
> >
> > This file is part of GNU CC.
> >
> > @@ -33,6 +33,7 @@ extern void fatal PARAMS ((const char *,
> > ATTRIBUTE_PRINTF_1 ATTRIBUTE_NORETURN;
> > extern void error PARAMS ((const char *, ...)) ATTRIBUTE_PRINTF_1;
> > extern void pfatal_with_name PARAMS ((const char *)) ATTRIBUTE_NORETURN;
> > +extern void set_input PARAMS ((const char *));
> >
> > /* Spec files linked with gcc.c must provide definitions for these. */
> >
> > Index: java/jvgenmain.c
> > ===================================================================
> > RCS file: /cvs/gcc/gcc/gcc/java/jvgenmain.c,v
> > retrieving revision 1.23.2.1
> > retrieving revision 1.23.2.2
> > diff -u -p -r1.23.2.1 -r1.23.2.2
> > --- jvgenmain.c 2001/07/04 12:04:06 1.23.2.1
> > +++ jvgenmain.c 2001/08/02 12:22:54 1.23.2.2
> > @@ -62,14 +62,14 @@ static void usage (const char *) ATTRIBU
> > static void
> > usage (const char *name)
> > {
> > -  fprintf (stderr, "Usage: %s [OPTIONS]... CLASSNAME [OUTFILE]\n", name);
> > +  fprintf (stderr, "Usage: %s [OPTIONS]... CLASSNAMEmain [OUTFILE]\n", name);
> > exit (1);
> > }
> >
> > int
> > -main (int argc, const char **argv)
> > +main (int argc, char **argv)
> > {
> > -  const char *classname;
> > +  char *classname, *p;
> > FILE *stream;
> > const char *mangled_classname;
> > int i, last_arg;
> > @@ -92,6 +92,13 @@ main (int argc, const char **argv)
> > last_arg = i;
> >
> > classname = argv[i];
> > +
> > +  /* gcj always appends `main' to classname.  We need to strip this here.  */
> > +  p = strrchr (classname, 'm');
> > +  if (p == NULL || p == classname || strcmp (p, "main") != 0)
> > +    usage (argv[0]);
> > +  else
> > +    *p = '\0';
> >
> > gcc_obstack_init (mangle_obstack);
> > mangled_classname = do_mangle_classname (classname);
> > Index: java/jvspec.c
> > ===================================================================
> > RCS file: /cvs/gcc/gcc/gcc/java/jvspec.c,v
> > retrieving revision 1.35.2.6
> > retrieving revision 1.35.2.7
> > diff -u -p -r1.35.2.6 -r1.35.2.7
> > --- jvspec.c 2001/07/13 23:12:35 1.35.2.6
> > +++ jvspec.c 2001/08/02 12:22:54 1.35.2.7
> > @@ -52,8 +52,8 @@ int lang_specific_extra_outfiles = 0;
> > int shared_libgcc = 1;
> >
> > const char jvgenmain_spec[] =
> > -  "jvgenmain %{D*} %i %{!pipe:%umain.i} |\n\
> > -   cc1 %{!pipe:%Umain.i} %1 \
> > +  "jvgenmain %{D*} %b %{!pipe:%u.i} |\n\
> > +   cc1 %{!pipe:%U.i} %1 \
> > %{!Q:-quiet} -dumpbase %b.c %{d*} %{m*} %{a*}\
> > %{g*} %{O*} \
> > %{v:-version} %{pg:-p} %{p}\
> > @@ -67,8 +67,8 @@ const char jvgenmain_spec[] =
> > %{f*} -fdollars-in-identifiers\
> > %{aux-info*}\
> > %{pg:%{fomit-frame-pointer:%e-pg and -fomit-frame-pointer are incompatible}}\
> > -     %{S:%W{o*}%{!o*:-o %b.s}}%{!S:-o %{|!pipe:%Umain.s}} |\n\
> > -              %{!S:as %a %Y -o %d%w%umain%O %{!pipe:%Umain.s} %A\n }";
> > +     %{S:%W{o*}%{!o*:-o %b.s}}%{!S:-o %{|!pipe:%U.s}} |\n\
> > +              %{!S:as %a %Y -o %d%w%u%O %{!pipe:%U.s} %A\n }";
> >
> > /* Return full path name of spec file if it is in DIR, or NULL if
> > not.  */
> > @@ -528,8 +528,14 @@ lang_specific_pre_link ()
> > int err;
> > if (main_class_name == NULL)
> > return 0;
> > -  input_filename = main_class_name;
> > -  input_filename_length = strlen (main_class_name);
> > +  /* Append `main' to make the filename unique and allow
> > +
> > + gcj --main=hello -save-temps hello.java
> > +
> > +     to work.  jvgenmain needs to strip this `main' to arrive at the correct
> > +     class name.  Append dummy `.c' that can be stripped by set_input so %b
> > +     is correct.  */
> > +  set_input (concat (main_class_name, "main.c", NULL));
> > err = do_spec (jvgenmain_spec);
> > if (err == 0)
> > {
> >
>
>



More information about the Java mailing list