Re: jcf-reader: support for JSR 292 classfile extensions

2012-04-11 Thread Richard Guenther
On Wed, Apr 11, 2012 at 12:22 PM, Andrew Haley a...@redhat.com wrote:
 This adds support for the new (Version 51.0) class file format.  It
 doesn't actually generate code for invokedynamic bcause we don't have
 any runtime support yet, but it's a start.  jcf-dump prints all of the
 new attributes.

This breaks bootstrap for me:

In file included from
/space/rguenther/src/svn/trunk/gcc/java/jcf-parse.c:1009:0:
/space/rguenther/src/svn/trunk/gcc/java/jcf-reader.c:550:1: error:
'int jcf_parse_bootstrap_methods(JCF*, int)' defined but not used
[-Werror=unused-function]
 jcf_parse_bootstrap_methods (JCF* jcf, int attribute_length ATTRIBUTE_UNUSED)
 ^
cc1plus: all warnings being treated as errors
make[3]: *** [java/jcf-parse.o] Error 1
make[3]: *** Waiting for unfinished jobs


 Andrew.


 2012-04-11  Andrew Haley  a...@redhat.com

        * jcf.h (bootstrap_method): New.
        (BootstrapMethods): New.
        (JCF): Add BootstrapMethods.
        (enum cpool_tag): Add MethodHandle, MethodType, and InvokeDynamic.
        * jcf-reader.c (jcf_parse_bootstrap_methods): New.
        (jcf_parse_constant_pool): Handlers for MethodHandle, MethodType,
        and InvokeDynamic.
        (jcf_parse_bootstrap_methods): New.
        * javaop.def (invokedynamic): New opcode.
        * jcf-parse.c (get_constant): An unknown constant type should not
        be an internal error, but a fatal one.  Make it so.
        * jcf-dump.c (HANDLE_BOOTSTRAP_METHODS_ATTRIBUTE): New.
        (HANDLE_END_BOOTSTRAP_METHODS): New.
        (print_constant): Handlers for MethodHandle, MethodType, and
        InvokeDynamic.

 Index: java/jcf-dump.c
 ===
 --- java/jcf-dump.c     (revision 186103)
 +++ java/jcf-dump.c     (working copy)
 @@ -430,7 +430,24 @@
   print_element_value (out, jcf, 1);                                   \
  }

 +#define HANDLE_BOOTSTRAP_METHODS_ATTRIBUTE()                           \
 +{                                                                      \
 +  COMMON_HANDLE_ATTRIBUTE(jcf, attribute_name, attribute_length);      \
 +  fputc ('\n', out); jcf_parse_bootstrap_methods (jcf, attribute_length); \
 +}

 +#define HANDLE_END_BOOTSTRAP_METHODS(NUM_METHODS)                      \
 +  {                                                                    \
 +    int i;                                                             \
 +    for (i = 0; i  NUM_METHODS; i++)                                  \
 +      {                                                                      
   \
 +       bootstrap_method *m = jcf-bootstrap_methods.methods[i];       \
 +       fprintf (out,   %d: , i);                                     \
 +       print_constant (out, jcf, m-method_ref, 1);                    \
 +       fprintf (out, \n);                                            \
 +      }                                                                      
   \
 +  }
 +
  #define PROCESS_OTHER_ATTRIBUTE(JCF, INDEX, LENGTH) \
  { COMMON_HANDLE_ATTRIBUTE(JCF, INDEX, LENGTH); \
   fputc ('\n', out); JCF_SKIP (JCF, LENGTH); }
 @@ -898,6 +915,53 @@
        fputc ('\', out);
       }
       break;
 +    case CONSTANT_MethodHandle:
 +      {
 +       int kind = JPOOL_USHORT1 (jcf, index);
 +       if (verbosity  0)
 +         fprintf (out, MethodHandle kind: %d=, kind);
 +       switch(kind) {
 +       case 1:
 +       case 2:
 +       case 3:
 +       case 4:
 +         if (verbosity  0)
 +           fprintf (out, Fieldref: %ld=, JPOOL_USHORT2 (jcf, index));
 +         print_constant (out, jcf, JPOOL_USHORT2 (jcf, index), 0);
 +       case 5:
 +       case 6:
 +       case 7:
 +       case 8:
 +         if (verbosity  0)
 +           fprintf (out, Methodref: %ld=, JPOOL_USHORT2 (jcf, index));
 +         print_constant (out, jcf, JPOOL_USHORT2 (jcf, index), 0);
 +         break;
 +       case 9:
 +         if (verbosity  0)
 +           fprintf (out, InterfaceMethodref: %ld=, JPOOL_USHORT2 (jcf, 
 index));
 +         print_constant (out, jcf, JPOOL_USHORT2 (jcf, index), 0);
 +         break;
 +       }
 +       break;
 +      }
 +    case CONSTANT_MethodType:
 +      if (verbosity  0)
 +       fprintf (out, MethodType %ld: , JPOOL_USHORT1 (jcf, index));
 +      print_signature (out, jcf, JPOOL_USHORT1 (jcf, index), 0);
 +      break;
 +    case CONSTANT_InvokeDynamic:
 +      {
 +       uint16 name_and_type = JPOOL_USHORT2 (jcf, index);
 +       if (verbosity  0)
 +         fprintf (out, InvokeDynamic: );
 +       fprintf (out, bootstrap_method: %ld , JPOOL_USHORT1 (jcf, index));
 +       if (verbosity == 2)
 +         fprintf (out,  name_and_type: %d=, name_and_type);
 +       print_constant_terse (out, jcf, name_and_type, CONSTANT_NameAndType);
 +       if (verbosity == 2)
 +         fputc ('', out);
 +       break;
 +      }
     default:
       fprintf (out, (Unknown constant type %d), kind);
     }
 Index: java/jcf-parse.c
 

Re: jcf-reader: support for JSR 292 classfile extensions

2012-04-11 Thread Andrew Haley
On 04/11/2012 01:43 PM, Richard Guenther wrote:
 This breaks bootstrap for me:

 In file included from
 /space/rguenther/src/svn/trunk/gcc/java/jcf-parse.c:1009:0:
 /space/rguenther/src/svn/trunk/gcc/java/jcf-reader.c:550:1: error:
 'int jcf_parse_bootstrap_methods(JCF*, int)' defined but not used
 [-Werror=unused-function]
  jcf_parse_bootstrap_methods (JCF* jcf, int attribute_length ATTRIBUTE_UNUSED)
  ^
 cc1plus: all warnings being treated as errors
 make[3]: *** [java/jcf-parse.o] Error 1
 make[3]: *** Waiting for unfinished jobs


Sorry.

Andrew.


2012-04-11  Andrew Haley  a...@redhat.com

* jcf-reader.c (jcf_parse_bootstrap_methods): Add
ATTRIBUTE_UNUSED.

Index: gcc/java/jcf-reader.c
===
--- gcc/java/jcf-reader.c   (revision 186307)
+++ gcc/java/jcf-reader.c   (working copy)
@@ -36,7 +36,7 @@
 static int jcf_parse_one_method (JCF *, int);
 static int jcf_parse_methods (JCF *);
 static int jcf_parse_final_attributes (JCF *);
-static int jcf_parse_bootstrap_methods (JCF *, int );
+static int jcf_parse_bootstrap_methods (JCF *, int) ATTRIBUTE_UNUSED;
 #ifdef NEED_PEEK_ATTRIBUTE
 static int peek_attribute (JCF *, int, const char *, int);
 #endif



Re: jcf-reader: support for JSR 292 classfile extensions

2012-04-11 Thread Rainer Orth
Andrew Haley a...@redhat.com writes:

 On 04/11/2012 01:43 PM, Richard Guenther wrote:
 This breaks bootstrap for me:

 In file included from
 /space/rguenther/src/svn/trunk/gcc/java/jcf-parse.c:1009:0:
 /space/rguenther/src/svn/trunk/gcc/java/jcf-reader.c:550:1: error:
 'int jcf_parse_bootstrap_methods(JCF*, int)' defined but not used
 [-Werror=unused-function]
  jcf_parse_bootstrap_methods (JCF* jcf, int attribute_length 
 ATTRIBUTE_UNUSED)
  ^
 cc1plus: all warnings being treated as errors
 make[3]: *** [java/jcf-parse.o] Error 1
 make[3]: *** Waiting for unfinished jobs


 Sorry.

It also broke Java bootstrap on 32-bit targets:

/vol/gcc/src/hg/trunk/solaris/gcc/java/jcf-dump.c: In function 'void 
print_constant(std::FILE*, JCF*, int, int)':
/vol/gcc/src/hg/trunk/solaris/gcc/java/jcf-dump.c:929:64: error: format '%ld' 
expects argument of type 'long int', but argument 3 has type 'uint32 {aka 
unsigned int}' [-Werror=format]
  fprintf (out, Fieldref: %ld=, JPOOL_USHORT2 (jcf, index));
^
/vol/gcc/src/hg/trunk/solaris/gcc/java/jcf-dump.c:936:65: error: format '%ld' 
expects argument of type 'long int', but argument 3 has type 'uint32 {aka 
unsigned int}' [-Werror=format]
  fprintf (out, Methodref: %ld=, JPOOL_USHORT2 (jcf, index));
 ^
/vol/gcc/src/hg/trunk/solaris/gcc/java/jcf-dump.c:941:74: error: format '%ld' 
expects argument of type 'long int', but argument 3 has type 'uint32 {aka 
unsigned int}' [-Werror=format]
  fprintf (out, InterfaceMethodref: %ld=, JPOOL_USHORT2 (jcf, index));
  ^
/vol/gcc/src/hg/trunk/solaris/gcc/java/jcf-dump.c:949:62: error: format '%ld' 
expects argument of type 'long int', but argument 3 has type 'uint32 {aka 
unsigned int}' [-Werror=format]
  fprintf (out, MethodType %ld: , JPOOL_USHORT1 (jcf, index));
  ^
/vol/gcc/src/hg/trunk/solaris/gcc/java/jcf-dump.c:957:68: error: format '%ld' 
expects argument of type 'long int', but argument 3 has type 'uint32 {aka 
unsigned int}' [-Werror=format]
  fprintf (out, bootstrap_method: %ld , JPOOL_USHORT1 (jcf, index));
^
The following patch got me into stage3 on i386-pc-solaris2.10 and
amd64-pc-solaris2.10.

Ok for mainline?

Rainer


2012-04-11  Rainer Orth  r...@cebitec.uni-bielefeld.de

* jcf-dump.c (print_constant): Cast JPOOL_USHORT2, JPOOL_USHORT1
results to long to match formats.

# HG changeset patch
# Parent 94918a528698bab552dc2f8be5c1666444afca67
Fix java bootstrap on 32-bit targets

diff --git a/gcc/java/jcf-dump.c b/gcc/java/jcf-dump.c
--- a/gcc/java/jcf-dump.c
+++ b/gcc/java/jcf-dump.c
@@ -926,19 +926,20 @@ print_constant (FILE *out, JCF *jcf, int
 	case 3:
 	case 4:
 	  if (verbosity  0)
-	fprintf (out, Fieldref: %ld=, JPOOL_USHORT2 (jcf, index));
+	fprintf (out, Fieldref: %ld=, (long) JPOOL_USHORT2 (jcf, index));
 	  print_constant (out, jcf, JPOOL_USHORT2 (jcf, index), 0);
 	case 5:
 	case 6:
 	case 7:
 	case 8:
 	  if (verbosity  0)
-	fprintf (out, Methodref: %ld=, JPOOL_USHORT2 (jcf, index));
+	fprintf (out, Methodref: %ld=, (long) JPOOL_USHORT2 (jcf, index));
 	  print_constant (out, jcf, JPOOL_USHORT2 (jcf, index), 0);
 	  break;
 	case 9:
 	  if (verbosity  0)
-	fprintf (out, InterfaceMethodref: %ld=, JPOOL_USHORT2 (jcf, index));
+	fprintf (out, InterfaceMethodref: %ld=,
+		 (long) JPOOL_USHORT2 (jcf, index));
 	  print_constant (out, jcf, JPOOL_USHORT2 (jcf, index), 0);
 	  break;
 	}
@@ -946,7 +947,7 @@ print_constant (FILE *out, JCF *jcf, int
   }
 case CONSTANT_MethodType:
   if (verbosity  0)
-	fprintf (out, MethodType %ld: , JPOOL_USHORT1 (jcf, index));
+	fprintf (out, MethodType %ld: , (long) JPOOL_USHORT1 (jcf, index));
   print_signature (out, jcf, JPOOL_USHORT1 (jcf, index), 0);
   break;
 case CONSTANT_InvokeDynamic:
@@ -954,7 +955,8 @@ print_constant (FILE *out, JCF *jcf, int
 	uint16 name_and_type = JPOOL_USHORT2 (jcf, index);
 	if (verbosity  0)
 	  fprintf (out, InvokeDynamic: );
-	fprintf (out, bootstrap_method: %ld , JPOOL_USHORT1 (jcf, index));
+	fprintf (out, bootstrap_method: %ld ,
+		 (long) JPOOL_USHORT1 (jcf, index));
 	if (verbosity == 2)
 	  fprintf (out,  name_and_type: %d=, name_and_type);
 	print_constant_terse (out, jcf, name_and_type, CONSTANT_NameAndType);


-- 
-
Rainer Orth, Center for Biotechnology, Bielefeld University


Re: jcf-reader: support for JSR 292 classfile extensions

2012-04-11 Thread Andrew Haley
On 04/11/2012 04:57 PM, Rainer Orth wrote:
 Ok for mainline?
 
   Rainer
 
 
 2012-04-11  Rainer Orth  r...@cebitec.uni-bielefeld.de
 
   * jcf-dump.c (print_constant): Cast JPOOL_USHORT2, JPOOL_USHORT1
   results to long to match formats.

Sure.  Sorry for the noise.

I wonder what we're supposed to do about warnings that only trigger
on 32-bit systems.  Just wait for reports, or do we really have to
boostrap with both?

Andrew.