You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by va...@apache.org on 2006/12/05 13:18:38 UTC
svn commit: r482618 - in /harmony/enhanced/drlvm/trunk/vm:
jitrino/config/ia32/server.emconf vmcore/include/classloader.h
vmcore/src/class_support/classloader.cpp vmcore/src/init/vm_init.cpp
Author: varlax
Date: Tue Dec 5 04:18:37 2006
New Revision: 482618
URL: http://svn.apache.org/viewvc?view=rev&rev=482618
Log:
Fixed HARMONY-2375. Made BootstrapClassLoader::SetBCPElement private and moved handling of magics classpath to BootstrapClassLoader::Initialize.
Tested on WinXP.
Modified:
harmony/enhanced/drlvm/trunk/vm/jitrino/config/ia32/server.emconf
harmony/enhanced/drlvm/trunk/vm/vmcore/include/classloader.h
harmony/enhanced/drlvm/trunk/vm/vmcore/src/class_support/classloader.cpp
harmony/enhanced/drlvm/trunk/vm/vmcore/src/init/vm_init.cpp
Modified: harmony/enhanced/drlvm/trunk/vm/jitrino/config/ia32/server.emconf
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/jitrino/config/ia32/server.emconf?view=diff&rev=482618&r1=482617&r2=482618
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/jitrino/config/ia32/server.emconf (original)
+++ harmony/enhanced/drlvm/trunk/vm/jitrino/config/ia32/server.emconf Tue Dec 5 04:18:37 2006
@@ -91,4 +91,4 @@
#GC magics support
-Dvm.components.gc_cc.startupclass=org.apache.harmony.drlvm.gc_cc.GCHelper
--Dvm.components.gc_cc.classpath=gc_cc.jar
+-XDvm.component.classpath.gc_cc=gc_cc.jar
Modified: harmony/enhanced/drlvm/trunk/vm/vmcore/include/classloader.h
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/vmcore/include/classloader.h?view=diff&rev=482618&r1=482617&r2=482618
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/vmcore/include/classloader.h (original)
+++ harmony/enhanced/drlvm/trunk/vm/vmcore/include/classloader.h Tue Dec 5 04:18:37 2006
@@ -389,7 +389,7 @@
assert (k <= K_LAST_PRIMITIVE ); // primitive types are limited by K_LAST_PRIMITIVE bound
return primitive_types[k];
}
- void SetBCPElement(const char *path, apr_pool_t *tmp_pool);
+
protected:
virtual Class* DoLoadClass(Global_Env* env, const String* name);
@@ -402,6 +402,7 @@
const char* class_name_in_jar, const String* class_name, bool* not_found);
void SetClasspathFromString(char* prop_string, apr_pool_t *tmp_pool);
void SetClasspathFromJarFile(JarFile *jar, apr_pool_t *tmp_pool);
+ void SetBCPElement(const char *path, apr_pool_t *tmp_pool);
BCPElements m_BCPElements;
Global_Env* m_env;
Modified: harmony/enhanced/drlvm/trunk/vm/vmcore/src/class_support/classloader.cpp
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/vmcore/src/class_support/classloader.cpp?view=diff&rev=482618&r1=482617&r2=482618
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/vmcore/src/class_support/classloader.cpp (original)
+++ harmony/enhanced/drlvm/trunk/vm/vmcore/src/class_support/classloader.cpp Tue Dec 5 04:18:37 2006
@@ -1307,6 +1307,50 @@
}
}
+
+/**
+* Part of bootstrap classpath composed with jars from components.
+*/
+static char* bootstrap_components_classpath(Global_Env *vm_env) {
+ const char* PREFIX = "vm.component.classpath.";
+
+ const char* kernel_dir_path = vm_env->JavaProperties()->get(O_A_H_VM_VMDIR);
+ char* buf = NULL;
+ size_t buf_size = 0, buf_len = 0;
+
+ char** keys = vm_env->VmProperties()->get_keys_staring_with(PREFIX);
+ unsigned i = 0;
+ for (; keys[i]; ++i)
+ {
+ const char* key = keys[i];
+ const char* path = vm_env->VmProperties()->get(keys[i]);
+ size_t path_len = strlen(path) + strlen(PORT_PATH_SEPARATOR_STR) + 1;
+ // check if path must be extended
+ bool no_dir = (strstr(path, PORT_FILE_SEPARATOR_STR) == NULL);
+ if (no_dir) {
+ path_len += strlen(kernel_dir_path) + 1;
+ }
+ if (buf_len + path_len > buf_size) {
+ buf_size += path_len * 2;
+ buf = (char*)STD_REALLOC(buf, buf_size);
+ buf[buf_len] = '\0';
+ }
+ buf_len += path_len;
+ if (no_dir) {
+ strcat(buf, kernel_dir_path);
+ strcat(buf, PORT_FILE_SEPARATOR_STR);
+ }
+ strcat(buf, path);
+ strcat(buf, PORT_PATH_SEPARATOR_STR);
+ vm_env->VmProperties()->destroy((char*)path);
+ }
+ vm_env->VmProperties()->destroy(keys);
+ vm_env->JavaProperties()->destroy(const_cast<char*>(kernel_dir_path));
+
+ return buf;
+}
+
+
bool BootstrapClassLoader::Initialize(ManagedObject* UNREF loader)
{
// init bootstrap class loader
@@ -1332,14 +1376,15 @@
/*
* at this point, LUNI is loaded, so we can use the boot classpath
* generated there to set vm.boot.class.path since we didn't do
- * it before. We need to add on the kernel.jar
+ * it before. We need to add on the kernel.jar
+ * and magics support jars (if any).
* note that parse_arguments.cpp defers any override, postpend or
- * preprend here, storing everything as properties.
+ * prepend here, storing everything as properties.
*/
/*
* start with the boot classpath. If overridden, just use that as the basis
- * and otherwise, contstruct from o.a.h.b.c.p + o.a.h.vm.vmdir to add
+ * and otherwise, construct from o.a.h.b.c.p + o.a.h.vm.vmdir to add
* the kernel
*/
@@ -1354,14 +1399,21 @@
char *kernel_dir_path = m_env->JavaProperties()->get(O_A_H_VM_VMDIR);
- char *kernel_path = (char *) malloc(strlen(kernel_dir_path == NULL ? "" : kernel_dir_path)
+ char* comp_path = bootstrap_components_classpath(m_env);
+ char *kernel_path = (char *) malloc(strlen(kernel_dir_path)
+ strlen(PORT_FILE_SEPARATOR_STR)
- + strlen(KERNEL_JAR) + 1);
+ + strlen(KERNEL_JAR) + 1
+ + (comp_path ? strlen(comp_path) + strlen(PORT_PATH_SEPARATOR_STR) : 0) );
strcpy(kernel_path, kernel_dir_path);
strcat(kernel_path, PORT_FILE_SEPARATOR_STR);
strcat(kernel_path, KERNEL_JAR);
m_env->JavaProperties()->destroy(kernel_dir_path);
+ if (comp_path) {
+ strcat(kernel_path, PORT_PATH_SEPARATOR_STR);
+ strcat(kernel_path, comp_path);
+ STD_FREE(comp_path);
+ }
char *luni_path = m_env->JavaProperties()->get(O_A_H_BOOT_CLASS_PATH);
Modified: harmony/enhanced/drlvm/trunk/vm/vmcore/src/init/vm_init.cpp
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/vmcore/src/init/vm_init.cpp?view=diff&rev=482618&r1=482617&r2=482618
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/vmcore/src/init/vm_init.cpp (original)
+++ harmony/enhanced/drlvm/trunk/vm/vmcore/src/init/vm_init.cpp Tue Dec 5 04:18:37 2006
@@ -280,52 +280,6 @@
}
/**
-* Extends bootstrap classpath with jars from components
-*/
-static void bootstrap_add_components_classpath(Global_Env *vm_env) {
- static std::string VM_COMPONENT_BOOTSTRAP_PREFIX="vm.components.";
- static std::string VM_COMPONENT_BOOTSTRAP_SUFFIX=".classpath";
-
- // create temp pool for apr functions
- apr_pool_t *tmp_pool;
- apr_pool_create(&tmp_pool, NULL);
-
- std::string kernel_dir_path = get_property(O_A_H_VM_VMDIR, JAVA_PROPERTIES);
-
- char** keys = get_properties_keys(JAVA_PROPERTIES);
- for (unsigned i = 0; keys[i] != NULL; ++i) {
- const char* key = keys[i];
- //check if the property name is VM_COMPONENT_BOOTSTRAP_PREFIX.*.VM_COMPONENT_BOOTSTRAP_SUFFIX form
- if (strncmp(VM_COMPONENT_BOOTSTRAP_PREFIX.c_str(), key, VM_COMPONENT_BOOTSTRAP_PREFIX.length())) {
- continue;
- }
- size_t len = strlen(key);
- if (len < VM_COMPONENT_BOOTSTRAP_PREFIX.length()+ 2 + VM_COMPONENT_BOOTSTRAP_SUFFIX.length()) {
- continue;
- }
- if (strcmp(VM_COMPONENT_BOOTSTRAP_SUFFIX.c_str(), key + len - VM_COMPONENT_BOOTSTRAP_SUFFIX.length())) {
- continue;
- }
- //all checks passed
- //extends boot class path with the property value
- char* path = get_property(key, JAVA_PROPERTIES);
- // check if path must be extended
- std::string absPath;
- if (strstr(path, PORT_FILE_SEPARATOR_STR)==NULL) {
- absPath = kernel_dir_path + path;
- } else {
- absPath = path;
- }
- destroy_property_value(path);
- vm_env->bootstrap_class_loader->SetBCPElement(absPath.c_str(), tmp_pool);
- }
-
- destroy_properties_keys(keys);
-
- apr_pool_destroy(tmp_pool);
-}
-
-/**
* Loads initial classes. For example j.l.Object, j.l.Class, etc.
*/
static void bootstrap_initial_java_classes(Global_Env * vm_env)
@@ -334,8 +288,6 @@
TRACE("bootstrapping initial java classes");
vm_env->bootstrap_class_loader->Initialize();
-
- bootstrap_add_components_classpath(vm_env);
/*
* Bootstrap java.lang.Class class. This requires also loading the other classes