Fixed: <rdar://problem/3872724> soft link against JavaVM to save ~2MB RSHRD
authorcblu <cblu@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 10 Nov 2004 00:28:07 +0000 (00:28 +0000)
committercblu <cblu@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 10 Nov 2004 00:28:07 +0000 (00:28 +0000)
        Reviewed by rjw.

        * ChangeLog:
        * JavaScriptCore.pbproj/project.pbxproj: don't link against JavaVM
        * bindings/softlinking.c: Added.
        (loadFramework): new
        (getFunctionPointer): new
        (JNI_GetCreatedJavaVMs): load JavaVM if not already loaded, get _JNI_GetCreatedJavaVMs symbol if we don't already have it, call JNI_GetCreatedJavaVMs

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@7963 268f45cc-cd09-0410-ab3c-d52691b4dbfc

JavaScriptCore/ChangeLog
JavaScriptCore/JavaScriptCore.pbproj/project.pbxproj
JavaScriptCore/bindings/softlinking.c [new file with mode: 0644]

index 656610039c0688ec3a9c43c81337a7def4e713a3..5a4d615dc1825a21f768efdcd5aff8e69c701d68 100644 (file)
@@ -1,3 +1,16 @@
+2004-11-09  Chris Blumenberg  <cblu@apple.com>
+
+       Fixed: <rdar://problem/3872724> soft link against JavaVM to save ~2MB RSHRD
+
+        Reviewed by rjw.
+
+        * ChangeLog:
+        * JavaScriptCore.pbproj/project.pbxproj: don't link against JavaVM
+        * bindings/softlinking.c: Added.
+        (loadFramework): new
+        (getFunctionPointer): new
+        (JNI_GetCreatedJavaVMs): load JavaVM if not already loaded, get _JNI_GetCreatedJavaVMs symbol if we don't already have it, call JNI_GetCreatedJavaVMs
+
 === Safari-170 ===
 
 2004-11-04  Darin Adler  <darin@apple.com>
index 1c5f38a47b2c8a255ab400fb34189bcf4e35d411..801266b68d30b19d087249639382b7676f70a990 100644 (file)
                                51F0EB6105C86C6B00E6DF1B,
                                6560A4CF04B3B3E7008AE952,
                                6560A63D04B3B69F008AE952,
-                               51856D980562F158008B9D83,
                        );
                        isa = PBXGroup;
                        name = Frameworks;
                                650B68DA0639033F009D42DE,
                                51863FC506542D3100E9E8DD,
                                517EF37406D695930007C1BA,
+                               8442A378074175C2000AE2ED,
                        );
                        isa = PBXSourcesBuildPhase;
                        runOnlyForDeploymentPostprocessing = 0;
                        files = (
                                6560A4D004B3B3E7008AE952,
                                6560A63E04B3B69F008AE952,
-                               51856D990562F158008B9D83,
                                51F0EB6205C86C6B00E6DF1B,
                                51F0EC0805C86C9A00E6DF1B,
                                9322A00406C341D3009067BB,
                                518CF93805C72271003CF905,
                                51F0EC9605C88DC700E6DF1B,
                                51F0EC9705C88DC700E6DF1B,
+                               8442A376074175C2000AE2ED,
                        );
                        isa = PBXGroup;
                        name = bindings;
                        refType = 4;
                        sourceTree = "<group>";
                };
-               51856D980562F158008B9D83 = {
-                       isa = PBXFileReference;
-                       lastKnownFileType = wrapper.framework;
-                       name = JavaVM.framework;
-                       path = /System/Library/Frameworks/JavaVM.framework;
-                       refType = 0;
-                       sourceTree = "<absolute>";
-               };
-               51856D990562F158008B9D83 = {
-                       fileRef = 51856D980562F158008B9D83;
-                       isa = PBXBuildFile;
-                       settings = {
-                       };
-               };
                51863F6F065420E800E9E8DD = {
                        fileEncoding = 30;
                        isa = PBXFileReference;
 //842
 //843
 //844
+               8442A376074175C2000AE2ED = {
+                       fileEncoding = 4;
+                       isa = PBXFileReference;
+                       lastKnownFileType = sourcecode.c.c;
+                       name = softlinking.c;
+                       path = bindings/softlinking.c;
+                       refType = 4;
+                       sourceTree = "<group>";
+               };
+               8442A378074175C2000AE2ED = {
+                       fileRef = 8442A376074175C2000AE2ED;
+                       isa = PBXBuildFile;
+                       settings = {
+                       };
+               };
                84ABF1DE070B628C00A3AC05 = {
                        fileEncoding = 4;
                        isa = PBXFileReference;
diff --git a/JavaScriptCore/bindings/softlinking.c b/JavaScriptCore/bindings/softlinking.c
new file mode 100644 (file)
index 0000000..dd2d1f6
--- /dev/null
@@ -0,0 +1,57 @@
+/*
+ * Copyright (C) 2003 Apple Computer, Inc.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+                                        * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+                                        * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
+ */
+
+#include <JavaVM/jni.h>
+#import <mach-o/dyld.h>
+
+const struct mach_header *loadFramework(const char *execPath);
+void *getFunctionPointer(const struct mach_header *header, const char *functionName);
+
+const struct mach_header *loadFramework(const char *execPath)
+{
+    return NSAddImage(execPath, NSADDIMAGE_OPTION_WITH_SEARCHING | NSADDIMAGE_OPTION_MATCH_FILENAME_BY_INSTALLNAME);
+}
+
+void *getFunctionPointer(const struct mach_header *header, const char *functionName)
+{
+    NSSymbol symbol = NSLookupSymbolInImage(header, functionName, NSLOOKUPSYMBOLINIMAGE_OPTION_BIND);
+    if (symbol!=NULL) {
+        return NSAddressOfSymbol(symbol);
+    }
+    return 0;
+}
+
+jint JNI_GetCreatedJavaVMs(JavaVM **vmBuf, jsize bufLen, jsize *nVMs)
+{
+    static const struct mach_header *header = 0;
+    if (!header) {
+        header = loadFramework("/System/Library/Frameworks/JavaVM.framework/JavaVM");
+    }
+    static jint(*functionPointer)(JavaVM **, jsize, jsize *) = 0;
+    if (!functionPointer) {
+        functionPointer = getFunctionPointer(header, "_JNI_GetCreatedJavaVMs");
+    }
+    return functionPointer(vmBuf, bufLen, nVMs);
+}