This is the mail archive of the
java-patches@gcc.gnu.org
mailing list for the Java project.
Re: Allow 1.7 class file format
- From: Andrew Hughes <ahughes at redhat dot com>
- To: Andrew Haley <aph at redhat dot com>
- Cc: GCJ-patches <java-patches at gcc dot gnu dot org>
- Date: Mon, 23 Apr 2012 12:58:06 -0400 (EDT)
- Subject: Re: Allow 1.7 class file format
----- Original Message -----
> There's no real reason to disallow 1.7 class files. Anyone trying to
> use any of the new opcodes or new constants will fail verification,
> and most Java programs don't use them.
>
Seems very sensible to me. I was thinking we'd need something like this for
bootstrapping if nothing else.
FWIW, I think gcj is the only Classpath VM that checks the range of this at all
and it's always seemed fairly incompatible with a FOSS model of working to me
i.e. if there's a real issue with not being able to read a class, it's easier
to dig into the code and debug it when it hits the unknown bytecode
rather than on some arbitrary version check. As you say, in the majority of cases, 1.7
versioned bytecode will only contain bytecodes from <=1.6 anyway.
> Andrew.
>
>
> 012-04-23 Andrew Haley <aph@redhat.com>
>
> * defineclass.cc (MAJOR_1_7, MINOR_1_7): New.
> (parse): Allow MAJOR_1_7 classfile version.
>
> Index: defineclass.cc
> ===================================================================
> --- defineclass.cc (revision 186103)
> +++ defineclass.cc (working copy)
> @@ -361,6 +361,8 @@
> #define MINOR_1_5 0
> #define MAJOR_1_6 50
> #define MINOR_1_6 0
> +#define MAJOR_1_7 51
> +#define MINOR_1_7 0
>
> void
> _Jv_ClassReader::parse ()
> @@ -371,8 +373,8 @@
>
> int minor_version = read2u ();
> int major_version = read2u ();
> - if (major_version < MAJOR_1_1 || major_version > MAJOR_1_6
> - || (major_version == MAJOR_1_6 && minor_version > MINOR_1_6))
> + if (major_version < MAJOR_1_1 || major_version > MAJOR_1_7
> + || (major_version == MAJOR_1_7 && minor_version > MINOR_1_7))
> throw_class_format_error ("unrecognized class file version");
> is_15 = (major_version >= MAJOR_1_5);
>
>
>
--
Andrew :)
Free Java Software Engineer
Red Hat, Inc. (http://www.redhat.com)
PGP Key: 248BDC07 (https://keys.indymedia.org/)
Fingerprint = EC5A 1F5E C0AD 1D15 8F1F 8F91 3B96 A578 248B DC07