decl.c (GCJ_BINARYCOMPAT_ADDITION, [...]): Removed.
2005-05-26 Bryce McKinlay <mckinlay@redhat.com> * decl.c (GCJ_BINARYCOMPAT_ADDITION, GCJ_BOOTSTRAP_LOADER_ADDITION): Removed. (FLAG_BINARYCOMPAT_ABI, FLAG_BOOTSTRAP_LOADER, MINOR_BINARYCOMPAT_ABI_VERSION): New. (GCJ_CURRENT_BC_ABI_VERSION): Use new method to calculate version ID. (parse_version): Calculate version ID using new method. Use bit-flags for flag_indirect_dispatch and flag_bootstrap_classes. 2005-05-26 Bryce McKinlay <mckinlay@redhat.com> * include/jvm.h (FLAG_BINARYCOMPAT_ABI, FLAG_BOOTSTRAP_LOADER): New. (GCJ_BINARYCOMPAT_ADDITION, GCJ_BOOTSTRAP_LOADER_ADDITION): Removed. (OLD_GCJ_40_BC_ABI_VERSION): Renamed. Old-style version ID for BC-ABI classes. (GCJ_CXX_ABI_VERSION): Renamed from GCJ_ABI_VERSION. (GCJ_40_BC_ABI_VERSION): New. Calculate version IDs using new method. (_Jv_CheckABIVersion): Check for both old and new style version IDs. (_Jv_ClassForBootstrapLoader): Use FLAG_BOOTSTRAP_LOADER. From-SVN: r100222
This commit is contained in:
parent
b9fa227db9
commit
a04323f4cb
@ -1,3 +1,13 @@
|
|||||||
|
2005-05-26 Bryce McKinlay <mckinlay@redhat.com>
|
||||||
|
|
||||||
|
* decl.c (GCJ_BINARYCOMPAT_ADDITION,
|
||||||
|
GCJ_BOOTSTRAP_LOADER_ADDITION): Removed.
|
||||||
|
(FLAG_BINARYCOMPAT_ABI, FLAG_BOOTSTRAP_LOADER,
|
||||||
|
MINOR_BINARYCOMPAT_ABI_VERSION): New.
|
||||||
|
(GCJ_CURRENT_BC_ABI_VERSION): Use new method to calculate version ID.
|
||||||
|
(parse_version): Calculate version ID using new method. Use bit-flags
|
||||||
|
for flag_indirect_dispatch and flag_bootstrap_classes.
|
||||||
|
|
||||||
2005-05-25 Richard Henderson <rth@redhat.com>
|
2005-05-25 Richard Henderson <rth@redhat.com>
|
||||||
|
|
||||||
PR libgcj/21692
|
PR libgcj/21692
|
||||||
|
@ -61,19 +61,31 @@ static tree create_primitive_vtable (const char *);
|
|||||||
static tree check_local_unnamed_variable (tree, tree, tree);
|
static tree check_local_unnamed_variable (tree, tree, tree);
|
||||||
static void parse_version (void);
|
static void parse_version (void);
|
||||||
|
|
||||||
/* Used when computing the ABI version. */
|
|
||||||
#define GCJ_BINARYCOMPAT_ADDITION 5
|
|
||||||
|
|
||||||
/* Used when defining a class that should be loaded by the bootstrap
|
/* The following ABI flags are used in the high-order bits of the version
|
||||||
loader. */
|
ID field. The version ID number itself should never be larger than
|
||||||
#define GCJ_BOOTSTRAP_LOADER_ADDITION 1
|
0xfffff, so it should be safe to use top 12 bits for these flags. */
|
||||||
|
|
||||||
/* The version of the BC ABI that we generate. At the moment we are
|
#define FLAG_BINARYCOMPAT_ABI (1<<31) /* Class is built with the BC-ABI. */
|
||||||
compatible with what shipped in GCC 4.0. This must be kept in sync
|
|
||||||
with parse_version(), libgcj, and reality (if the BC format
|
#define FLAG_BOOTSTRAP_LOADER (1<<30) /* Used when defining a class that
|
||||||
changes, this must change. */
|
should be loaded by the bootstrap
|
||||||
|
loader. */
|
||||||
|
|
||||||
|
/* If an ABI change is made within a GCC release series, rendering current
|
||||||
|
binaries incompatible with the old runtimes, this number can be set to
|
||||||
|
enforce the compatibility rules. */
|
||||||
|
#define MINOR_BINARYCOMPAT_ABI_VERSION 0
|
||||||
|
|
||||||
|
/* The runtime may recognize a variety of BC ABIs (objects generated by
|
||||||
|
different version of gcj), but will probably always require strict
|
||||||
|
matching for the ordinary (C++) ABI. */
|
||||||
|
|
||||||
|
/* The version ID of the BC ABI that we generate. This must be kept in
|
||||||
|
sync with parse_version(), libgcj, and reality (if the BC format changes,
|
||||||
|
this must change). */
|
||||||
#define GCJ_CURRENT_BC_ABI_VERSION \
|
#define GCJ_CURRENT_BC_ABI_VERSION \
|
||||||
(4 * 10000 + 0 * 10 + GCJ_BINARYCOMPAT_ADDITION)
|
(4 * 100000 + 0 * 1000 + MINOR_BINARYCOMPAT_ABI_VERSION)
|
||||||
|
|
||||||
/* The ABI version number. */
|
/* The ABI version number. */
|
||||||
tree gcj_abi_version;
|
tree gcj_abi_version;
|
||||||
@ -613,18 +625,20 @@ parse_version (void)
|
|||||||
++p;
|
++p;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Implicit in this computation is the idea that we won't break the
|
|
||||||
old-style binary ABI in a sub-minor release (e.g., from 4.0.0 to
|
|
||||||
4.0.1). */
|
|
||||||
abi_version = 10000 * major + 10 * minor;
|
|
||||||
/* It is helpful to distinguish BC ABI from ordinary ABI at this
|
|
||||||
level, since at some point we will recognize a variety of BC ABIs
|
|
||||||
(objects generated by different version of gcj), but will
|
|
||||||
probably always require strict matching for ordinary ABI. */
|
|
||||||
if (flag_indirect_dispatch)
|
if (flag_indirect_dispatch)
|
||||||
abi_version = GCJ_CURRENT_BC_ABI_VERSION;
|
{
|
||||||
|
abi_version = GCJ_CURRENT_BC_ABI_VERSION;
|
||||||
|
abi_version |= FLAG_BINARYCOMPAT_ABI;
|
||||||
|
}
|
||||||
|
else /* C++ ABI */
|
||||||
|
{
|
||||||
|
/* Implicit in this computation is the idea that we won't break the
|
||||||
|
old-style binary ABI in a sub-minor release (e.g., from 4.0.0 to
|
||||||
|
4.0.1). */
|
||||||
|
abi_version = 100000 * major + 1000 * minor;
|
||||||
|
}
|
||||||
if (flag_bootstrap_classes)
|
if (flag_bootstrap_classes)
|
||||||
abi_version += GCJ_BOOTSTRAP_LOADER_ADDITION;
|
abi_version |= FLAG_BOOTSTRAP_LOADER;
|
||||||
|
|
||||||
gcj_abi_version = build_int_cstu (ptr_type_node, abi_version);
|
gcj_abi_version = build_int_cstu (ptr_type_node, abi_version);
|
||||||
}
|
}
|
||||||
|
@ -1,3 +1,14 @@
|
|||||||
|
2005-05-26 Bryce McKinlay <mckinlay@redhat.com>
|
||||||
|
|
||||||
|
* include/jvm.h (FLAG_BINARYCOMPAT_ABI, FLAG_BOOTSTRAP_LOADER): New.
|
||||||
|
(GCJ_BINARYCOMPAT_ADDITION, GCJ_BOOTSTRAP_LOADER_ADDITION): Removed.
|
||||||
|
(OLD_GCJ_40_BC_ABI_VERSION): Renamed. Old-style version ID for BC-ABI
|
||||||
|
classes.
|
||||||
|
(GCJ_CXX_ABI_VERSION): Renamed from GCJ_ABI_VERSION.
|
||||||
|
(GCJ_40_BC_ABI_VERSION): New. Calculate version IDs using new method.
|
||||||
|
(_Jv_CheckABIVersion): Check for both old and new style version IDs.
|
||||||
|
(_Jv_ClassForBootstrapLoader): Use FLAG_BOOTSTRAP_LOADER.
|
||||||
|
|
||||||
2005-05-25 Richard Henderson <rth@redhat.com>
|
2005-05-25 Richard Henderson <rth@redhat.com>
|
||||||
|
|
||||||
PR libgcj/21692
|
PR libgcj/21692
|
||||||
|
@ -564,31 +564,50 @@ extern void (*_Jv_JVMPI_Notify_THREAD_END) (JVMPI_Event *event);
|
|||||||
|
|
||||||
extern void _Jv_RegisterBootstrapPackages ();
|
extern void _Jv_RegisterBootstrapPackages ();
|
||||||
|
|
||||||
|
#define FLAG_BINARYCOMPAT_ABI (1<<31) /* Class is built with the BC-ABI. */
|
||||||
|
|
||||||
// This is used to find ABI versions we recognize.
|
#define FLAG_BOOTSTRAP_LOADER (1<<30) /* Used when defining a class that
|
||||||
#define GCJ_VERSION (__GNUC__ * 10000 + __GNUC_MINOR__ * 10)
|
should be loaded by the bootstrap
|
||||||
#define GCJ_BINARYCOMPAT_ADDITION 5
|
loader. */
|
||||||
#define GCJ_BOOTSTRAP_LOADER_ADDITION 1
|
|
||||||
|
|
||||||
// At present we know we are compatible with the BC ABI as used in GCC
|
// These are used to find ABI versions we recognize.
|
||||||
// 4.0.
|
#define GCJ_CXX_ABI_VERSION (__GNUC__ * 100000 + __GNUC_MINOR__ * 1000)
|
||||||
#define GCJ_40_BC_ABI_VERSION (4 * 10000 + 0 * 10 + GCJ_BINARYCOMPAT_ADDITION)
|
|
||||||
|
// This is the old-style BC version ID used by GCJ 4.0.0.
|
||||||
|
#define OLD_GCJ_40_BC_ABI_VERSION (4 * 10000 + 0 * 10 + 5)
|
||||||
|
|
||||||
|
// New style version IDs used by GCJ 4.0.1 and later.
|
||||||
|
#define GCJ_40_BC_ABI_VERSION (4 * 100000 + 0 * 1000)
|
||||||
|
|
||||||
inline bool
|
inline bool
|
||||||
_Jv_CheckABIVersion (unsigned long value)
|
_Jv_CheckABIVersion (unsigned long value)
|
||||||
{
|
{
|
||||||
// Recognize our defined C++ ABIs.
|
// We are compatible with GCJ 4.0.0 BC-ABI classes. This release used a
|
||||||
return (value == GCJ_VERSION
|
// different format for the version ID string.
|
||||||
|| value == (GCJ_VERSION + GCJ_BOOTSTRAP_LOADER_ADDITION)
|
if (value == OLD_GCJ_40_BC_ABI_VERSION)
|
||||||
|| value == GCJ_40_BC_ABI_VERSION
|
return true;
|
||||||
|| value == (GCJ_40_BC_ABI_VERSION + GCJ_BOOTSTRAP_LOADER_ADDITION));
|
|
||||||
|
// The 20 low-end bits are used for the version number.
|
||||||
|
unsigned long version = value & 0xfffff;
|
||||||
|
|
||||||
|
if (value & FLAG_BINARYCOMPAT_ABI)
|
||||||
|
{
|
||||||
|
int abi_rev = version % 100;
|
||||||
|
int abi_ver = version - abi_rev;
|
||||||
|
if (abi_ver == GCJ_40_BC_ABI_VERSION && abi_rev <= 0)
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
// C++ ABI
|
||||||
|
return version == GCJ_CXX_ABI_VERSION;
|
||||||
|
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline bool
|
inline bool
|
||||||
_Jv_ClassForBootstrapLoader (unsigned long value)
|
_Jv_ClassForBootstrapLoader (unsigned long value)
|
||||||
{
|
{
|
||||||
return (value == (GCJ_VERSION + GCJ_BOOTSTRAP_LOADER_ADDITION)
|
return (value & FLAG_BOOTSTRAP_LOADER);
|
||||||
|| value == (GCJ_40_BC_ABI_VERSION + GCJ_BOOTSTRAP_LOADER_ADDITION));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// It makes the source cleaner if we simply always define this
|
// It makes the source cleaner if we simply always define this
|
||||||
|
Loading…
Reference in New Issue
Block a user