Skip to content

Commit 9f2fad8

Browse files
committed
Build VMString into zip, pull into OpenJDK build for string interning.
(OpenJDK now builds again, seems to work as well as before) git-svn-id: https://llvm.org/svn/llvm-project/vmkit/trunk@145763 91177308-0d34-0410-b5e6-96231b3b80d8
1 parent 11552a0 commit 9f2fad8

File tree

8 files changed

+48
-10
lines changed

8 files changed

+48
-10
lines changed

Makefile.config.in

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ MMTK_PLAN = @MMTK_PLAN@
1717
MMTK_PLAN_HEADER = @MMTK_PLAN_HEADER@
1818
WITH_64 = @WITH_64@
1919
ANT = @ANT@
20+
JAVAC= @JAVAC@
21+
ZIP =@ZIP@
2022

2123
CLASSPATH_IMPL = @classpathimpl@
2224

Makefile.rules

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,3 +145,26 @@ clean-local::
145145
-$(Verb) $(RM) -f FrametablesExterns.inc FrametablesSymbols.inc
146146

147147
endif
148+
149+
###############################################################################
150+
# COMPILE_OPENJDK_ZIP: Build the specified java sources and zip them up
151+
###############################################################################
152+
ifeq ($(COMPILE_OPENJDK_ZIP), 1)
153+
154+
# Some variables
155+
VMKIT_OPENJDK_ZIP=$(PROJ_OBJ_DIR)/vmkit-openjdk.zip
156+
CLASSES_DIR=$(PROJ_OBJ_DIR)/classes
157+
158+
all-local:: $(VMKIT_OPENJDK_ZIP)
159+
clean-local::
160+
-$(Verb) $(RM) -f $(CLASSES_DIR) $(VMKIT_OPENJDK_ZIP)
161+
162+
163+
$(VMKIT_OPENJDK_ZIP): $(addprefix $(PROJ_SRC_DIR)/,$(OPENJDK_JAVA_SOURCES))
164+
$(Echo) "Building OpenJDK java sources into zip"
165+
-$(Verb) $(RM) -rf $@ $(CLASSES_DIR)
166+
$(Verb) $(MKDIR) $(CLASSES_DIR)
167+
$(Verb) $(JAVAC) $^ -d $(CLASSES_DIR)
168+
cd $(CLASSES_DIR) && $(ZIP) -qr $(VMKIT_OPENJDK_ZIP) .
169+
170+
endif

autoconf/configure.ac

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -304,6 +304,8 @@ AC_PATH_PROG(CAT,[cat], [cat])
304304
AC_PATH_PROG(LLVMAS, [llvm-as], [llvm-as])
305305
AC_PATH_PROG(LLC, [llc], [llc])
306306
AC_PATH_PROG(ANT, [ant])
307+
AC_PATH_PROG(JAVAC, [javac], [javac])
308+
AC_PATH_PROG(ZIP, [zip], [zip])
307309

308310
dnl Find the install program
309311
AC_PROG_INSTALL

lib/j3/ClassLib/Classpath.h.in

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -27,12 +27,7 @@
2727
#define OpenJDKArch "@openjdkarchdir@"
2828

2929
// OpenJDK Bootstrap classpath
30-
#define OpenJDKBootPath \
31-
OpenJDKJRE "/lib/rt.jar" \
32-
":" OpenJDKJRE "/lib/resources.jar" \
33-
":" OpenJDKJRE "/lib/jsse.jar" \
34-
":" OpenJDKJRE "/lib/jce.jar" \
35-
":" OpenJDKJRE "/lib/charsets.jar"
30+
extern const char * OpenJDKBootPath;
3631

3732
// Location of OpenJDK's libjava.so
3833
#define OpenJDKLibJava OpenJDKArch "/libjava.so"

lib/j3/ClassLib/OpenJDK/JavaUpcalls.cpp

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ JavaField* Classpath::group;
4747
Class* Classpath::threadGroup;
4848
JavaMethod* Classpath::getUncaughtExceptionHandler;
4949
JavaMethod* Classpath::uncaughtException;
50+
JavaMethod* Classpath::internString;
5051

5152
JavaMethod* Classpath::setContextClassLoader;
5253
JavaMethod* Classpath::getSystemClassLoader;
@@ -228,6 +229,14 @@ Class* Classpath::RefHandlerClass;
228229
JavaMethod* Classpath::initRefHandler;
229230
JavaMethod* Classpath::threadStart;
230231

232+
const char * OpenJDKBootPath =
233+
OpenJDKJRE "/lib/rt.jar"
234+
":" OpenJDKJRE "/lib/resources.jar"
235+
":" OpenJDKJRE "/lib/jsse.jar"
236+
":" OpenJDKJRE "/lib/jce.jar"
237+
":" OpenJDKJRE "/lib/charsets.jar"
238+
":" VMKitOpenJDKZip ;
239+
231240
void Classpath::CreateJavaThread(Jnjvm* vm, JavaThread* myth,
232241
const char* thName, JavaObject* Group) {
233242
JavaObject* th = NULL;
@@ -947,6 +956,12 @@ void Classpath::initialiseClasspath(JnjvmClassLoader* loader) {
947956
UPCALL_METHOD(loader, "java/lang/ref/Reference", "<clinit>",
948957
"()V", ACC_STATIC);
949958
ReferenceClassInit->setNative();
959+
960+
// String support
961+
962+
internString =
963+
UPCALL_METHOD(loader, "java/lang/VMString", "intern",
964+
"(Ljava/lang/String;)Ljava/lang/String;", ACC_STATIC);
950965
}
951966

952967
void Classpath::InitializeSystem(Jnjvm * jvm) {

lib/j3/ClassLib/OpenJDK/JavaUpcalls.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,7 @@ class Classpath : public vmkit::PermanentObject {
144144
ISOLATE_STATIC UserClass* threadGroup;
145145
ISOLATE_STATIC JavaMethod* getUncaughtExceptionHandler;
146146
ISOLATE_STATIC JavaMethod* uncaughtException;
147+
ISOLATE_STATIC JavaMethod* internString;
147148

148149

149150
ISOLATE_STATIC UserClass* InvocationTargetException;

lib/j3/ClassLib/OpenJDK/Makefile

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,13 @@ include $(LEVEL)/Makefile.config
1414

1515
MODULE_WITH_GC = Classpath
1616

17+
COMPILE_OPENJDK_ZIP=1
18+
OPENJDK_JAVA_SOURCES=java/lang/VMString.java
19+
1720
include $(LEVEL)/Makefile.common
1821

1922
CXX.Flags += -I$(PROJ_SRC_DIR)/../../VMCore
2023
CXX.Flags += -I$(PROJ_SRC_ROOT)/include/j3
2124
CXX.Flags += -I$(PROJ_SRC_DIR)/.. -I$(PROJ_OBJ_DIR)/..
2225
CXX.Flags += -I$(PROJ_SRC_ROOT)/include/j3/openjdk
26+
CXX.Flags += -DVMKitOpenJDKZip=\"$(VMKIT_OPENJDK_ZIP)\"

lib/j3/ClassLib/OpenJDK/OpenJDK.inc

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -175,10 +175,6 @@ JVM_InternString(JNIEnv *env, jstring _str) {
175175
llvm_gcroot(array, 0);
176176
llvm_gcroot(res, 0);
177177

178-
// If already intern'd, just return.
179-
if(str->getVirtualTable() == JavaString::internStringVT)
180-
return _str;
181-
182178
BEGIN_JNI_EXCEPTION
183179

184180
Jnjvm* vm = JavaThread::get()->getJVM();

0 commit comments

Comments
 (0)