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:
Bryce McKinlay 2005-05-26 21:07:04 +00:00 committed by Bryce McKinlay
parent b9fa227db9
commit a04323f4cb
4 changed files with 88 additions and 34 deletions

View file

@ -564,31 +564,50 @@ extern void (*_Jv_JVMPI_Notify_THREAD_END) (JVMPI_Event *event);
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 GCJ_VERSION (__GNUC__ * 10000 + __GNUC_MINOR__ * 10)
#define GCJ_BINARYCOMPAT_ADDITION 5
#define GCJ_BOOTSTRAP_LOADER_ADDITION 1
#define FLAG_BOOTSTRAP_LOADER (1<<30) /* Used when defining a class that
should be loaded by the bootstrap
loader. */
// At present we know we are compatible with the BC ABI as used in GCC
// 4.0.
#define GCJ_40_BC_ABI_VERSION (4 * 10000 + 0 * 10 + GCJ_BINARYCOMPAT_ADDITION)
// These are used to find ABI versions we recognize.
#define GCJ_CXX_ABI_VERSION (__GNUC__ * 100000 + __GNUC_MINOR__ * 1000)
// 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
_Jv_CheckABIVersion (unsigned long value)
{
// Recognize our defined C++ ABIs.
return (value == GCJ_VERSION
|| value == (GCJ_VERSION + GCJ_BOOTSTRAP_LOADER_ADDITION)
|| value == GCJ_40_BC_ABI_VERSION
|| value == (GCJ_40_BC_ABI_VERSION + GCJ_BOOTSTRAP_LOADER_ADDITION));
// We are compatible with GCJ 4.0.0 BC-ABI classes. This release used a
// different format for the version ID string.
if (value == OLD_GCJ_40_BC_ABI_VERSION)
return true;
// 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
_Jv_ClassForBootstrapLoader (unsigned long value)
{
return (value == (GCJ_VERSION + GCJ_BOOTSTRAP_LOADER_ADDITION)
|| value == (GCJ_40_BC_ABI_VERSION + GCJ_BOOTSTRAP_LOADER_ADDITION));
return (value & FLAG_BOOTSTRAP_LOADER);
}
// It makes the source cleaner if we simply always define this