76 assert(*(value+1) == ' ', "Unrecognized format" );
77 if (strstr((char*)attr, "-Digest") != NULL) {
78 isSigned = true;
79 break;
80 }
81 }
82 *_current = '\n'; // restore
83 attr = _current + 1;
84 }
85 _current ++;
86 }
87 return isSigned;
88 }
89 };
90
91 void SharedPathsMiscInfoExt::print_path(outputStream* out, int type, const char* path) {
92 switch(type) {
93 case APP:
94 ClassLoader::trace_class_path("Expecting -Djava.class.path=", path);
95 break;
96 default:
97 SharedPathsMiscInfo::print_path(out, type, path);
98 }
99 }
100
101 bool SharedPathsMiscInfoExt::check(jint type, const char* path) {
102
103 switch (type) {
104 case APP:
105 {
106 // Prefix is OK: E.g., dump with -cp foo.jar, but run with -cp foo.jar:bar.jar
107 size_t len = strlen(path);
108 const char *appcp = Arguments::get_appclasspath();
109 assert(appcp != NULL, "NULL app classpath");
110 size_t appcp_len = strlen(appcp);
111 if (appcp_len < len) {
112 return fail("Run time APP classpath is shorter than the one at dump time: ", appcp);
113 }
114 ResourceMark rm;
115 char* tmp_path;
150 isSigned = stream->check_is_signed();
151 if (isSigned) {
152 ent->_is_signed = true;
153 } else {
154 // Copy the manifest into the shared archive
155 manifest = ClassLoaderExt::read_raw_manifest(cpe, &manifest_size, CHECK);
156 Array<u1>* buf = MetadataFactory::new_array<u1>(loader_data,
157 manifest_size,
158 THREAD);
159 char* p = (char*)(buf->data());
160 memcpy(p, manifest, manifest_size);
161 ent->set_manifest(buf);
162 ent->_is_signed = false;
163 }
164 }
165 }
166 }
167
168 void SharedClassUtil::initialize(TRAPS) {
169 if (UseSharedSpaces) {
170 int size = FileMapInfo::get_number_of_share_classpaths();
171 if (size > 0) {
172 SystemDictionaryShared::allocate_shared_data_arrays(size, THREAD);
173 if (!DumpSharedSpaces) {
174 FileMapHeaderExt* header = (FileMapHeaderExt*)FileMapInfo::current_info()->header();
175 ClassLoaderExt::init_paths_start_index(header->_app_paths_start_index);
176 }
177 }
178 }
179
180 if (DumpSharedSpaces) {
181 if (SharedArchiveConfigFile) {
182 read_extra_data(SharedArchiveConfigFile, THREAD);
183 }
184 }
185 }
186
187 void SharedClassUtil::read_extra_data(const char* filename, TRAPS) {
188 HashtableTextDump reader(filename);
189 reader.check_version("VERSION: 1.0");
190
191 while (reader.remain() > 0) {
192 int utf8_length;
193 int prefix_type = reader.scan_prefix(&utf8_length);
194 ResourceMark rm(THREAD);
195 char* utf8_buffer = NEW_RESOURCE_ARRAY(char, utf8_length);
196 reader.get_utf8(utf8_buffer, utf8_length);
197
198 if (prefix_type == HashtableTextDump::SymbolPrefix) {
199 SymbolTable::new_symbol(utf8_buffer, utf8_length, THREAD);
200 } else{
201 assert(prefix_type == HashtableTextDump::StringPrefix, "Sanity");
202 utf8_buffer[utf8_length] = '\0';
203 oop s = StringTable::intern(utf8_buffer, THREAD);
204 }
205 }
206 }
207
208 bool SharedClassUtil::is_classpath_entry_signed(int classpath_index) {
209 assert(classpath_index >= 0, "Sanity");
210 SharedClassPathEntryExt* ent = (SharedClassPathEntryExt*)
211 FileMapInfo::shared_classpath(classpath_index);
212 return ent->_is_signed;
213 }
214
215 void FileMapHeaderExt::populate(FileMapInfo* mapinfo, size_t alignment) {
216 FileMapInfo::FileMapHeader::populate(mapinfo, alignment);
217
218 ClassLoaderExt::finalize_shared_paths_misc_info();
219 _app_paths_start_index = ClassLoaderExt::app_paths_start_index();
220
221 _verify_local = BytecodeVerificationLocal;
222 _verify_remote = BytecodeVerificationRemote;
223 _has_platform_or_app_classes = ClassLoaderExt::has_platform_or_app_classes();
224 }
225
226 bool FileMapHeaderExt::validate() {
227 if (UseAppCDS) {
228 const char* prop = Arguments::get_property("java.system.class.loader");
229 if (prop != NULL) {
230 warning("UseAppCDS is disabled because the java.system.class.loader property is specified (value = \"%s\"). "
231 "To enable UseAppCDS, this property must be not be set", prop);
232 UseAppCDS = false;
233 }
234 }
235
236 if (!FileMapInfo::FileMapHeader::validate()) {
237 return false;
238 }
239
|
76 assert(*(value+1) == ' ', "Unrecognized format" );
77 if (strstr((char*)attr, "-Digest") != NULL) {
78 isSigned = true;
79 break;
80 }
81 }
82 *_current = '\n'; // restore
83 attr = _current + 1;
84 }
85 _current ++;
86 }
87 return isSigned;
88 }
89 };
90
91 void SharedPathsMiscInfoExt::print_path(outputStream* out, int type, const char* path) {
92 switch(type) {
93 case APP:
94 ClassLoader::trace_class_path("Expecting -Djava.class.path=", path);
95 break;
96 case MODULE:
97 ClassLoader::trace_class_path("Checking module path: ", path);
98 break;
99 default:
100 SharedPathsMiscInfo::print_path(out, type, path);
101 }
102 }
103
104 bool SharedPathsMiscInfoExt::check(jint type, const char* path) {
105
106 switch (type) {
107 case APP:
108 {
109 // Prefix is OK: E.g., dump with -cp foo.jar, but run with -cp foo.jar:bar.jar
110 size_t len = strlen(path);
111 const char *appcp = Arguments::get_appclasspath();
112 assert(appcp != NULL, "NULL app classpath");
113 size_t appcp_len = strlen(appcp);
114 if (appcp_len < len) {
115 return fail("Run time APP classpath is shorter than the one at dump time: ", appcp);
116 }
117 ResourceMark rm;
118 char* tmp_path;
153 isSigned = stream->check_is_signed();
154 if (isSigned) {
155 ent->_is_signed = true;
156 } else {
157 // Copy the manifest into the shared archive
158 manifest = ClassLoaderExt::read_raw_manifest(cpe, &manifest_size, CHECK);
159 Array<u1>* buf = MetadataFactory::new_array<u1>(loader_data,
160 manifest_size,
161 THREAD);
162 char* p = (char*)(buf->data());
163 memcpy(p, manifest, manifest_size);
164 ent->set_manifest(buf);
165 ent->_is_signed = false;
166 }
167 }
168 }
169 }
170
171 void SharedClassUtil::initialize(TRAPS) {
172 if (UseSharedSpaces) {
173 int size = FileMapInfo::get_number_of_shared_paths();
174 if (size > 0) {
175 SystemDictionaryShared::allocate_shared_data_arrays(size, THREAD);
176 if (!DumpSharedSpaces) {
177 FileMapHeaderExt* header = (FileMapHeaderExt*)FileMapInfo::current_info()->header();
178 ClassLoaderExt::init_paths_start_index(header->_app_class_paths_start_index);
179 ClassLoaderExt::init_app_module_paths_start_index(header->_app_module_paths_start_index);
180 }
181 }
182 }
183
184 if (DumpSharedSpaces) {
185 if (SharedArchiveConfigFile) {
186 read_extra_data(SharedArchiveConfigFile, THREAD);
187 }
188 }
189 }
190
191 void SharedClassUtil::read_extra_data(const char* filename, TRAPS) {
192 HashtableTextDump reader(filename);
193 reader.check_version("VERSION: 1.0");
194
195 while (reader.remain() > 0) {
196 int utf8_length;
197 int prefix_type = reader.scan_prefix(&utf8_length);
198 ResourceMark rm(THREAD);
199 char* utf8_buffer = NEW_RESOURCE_ARRAY(char, utf8_length);
200 reader.get_utf8(utf8_buffer, utf8_length);
201
202 if (prefix_type == HashtableTextDump::SymbolPrefix) {
203 SymbolTable::new_symbol(utf8_buffer, utf8_length, THREAD);
204 } else{
205 assert(prefix_type == HashtableTextDump::StringPrefix, "Sanity");
206 utf8_buffer[utf8_length] = '\0';
207 oop s = StringTable::intern(utf8_buffer, THREAD);
208 }
209 }
210 }
211
212 bool SharedClassUtil::is_classpath_entry_signed(int classpath_index) {
213 assert(classpath_index >= 0, "Sanity");
214 SharedClassPathEntryExt* ent = (SharedClassPathEntryExt*)
215 FileMapInfo::shared_path(classpath_index);
216 return ent->_is_signed;
217 }
218
219 void FileMapHeaderExt::populate(FileMapInfo* mapinfo, size_t alignment) {
220 FileMapInfo::FileMapHeader::populate(mapinfo, alignment);
221
222 ClassLoaderExt::finalize_shared_paths_misc_info();
223 _app_class_paths_start_index = ClassLoaderExt::app_class_paths_start_index();
224 _app_module_paths_start_index = ClassLoaderExt::app_module_paths_start_index();
225
226 _verify_local = BytecodeVerificationLocal;
227 _verify_remote = BytecodeVerificationRemote;
228 _has_platform_or_app_classes = ClassLoaderExt::has_platform_or_app_classes();
229 }
230
231 bool FileMapHeaderExt::validate() {
232 if (UseAppCDS) {
233 const char* prop = Arguments::get_property("java.system.class.loader");
234 if (prop != NULL) {
235 warning("UseAppCDS is disabled because the java.system.class.loader property is specified (value = \"%s\"). "
236 "To enable UseAppCDS, this property must be not be set", prop);
237 UseAppCDS = false;
238 }
239 }
240
241 if (!FileMapInfo::FileMapHeader::validate()) {
242 return false;
243 }
244
|