Change-Id: I67fbd07da84e2043ace3e4ccc68e4c15dd915a11
Reviewed-on: http://photon-jenkins.eng.vmware.com:8082/2457
Tested-by: gerrit-photon <photon-checkins@vmware.com>
Reviewed-by: Divya Thaluru <dthaluru@vmware.com>
Reviewed-by: Alexey Makhalov <amakhalov@vmware.com>
| ... | ... |
@@ -41,6 +41,12 @@ else |
| 41 | 41 |
PHOTON_PUBLISH_RPMS := publish-rpms |
| 42 | 42 |
endif |
| 43 | 43 |
|
| 44 |
+ifdef PHOTON_PUBLISH_XRPMS_PATH |
|
| 45 |
+PHOTON_PUBLISH_XRPMS := publish-x-rpms-cached |
|
| 46 |
+else |
|
| 47 |
+PHOTON_PUBLISH_XRPMS := publish-x-rpms |
|
| 48 |
+endif |
|
| 49 |
+ |
|
| 44 | 50 |
# Tri state RPMCHECK: |
| 45 | 51 |
# 1) RPMCHECK is not specified: just build |
| 46 | 52 |
# 2) RPMCHECK=enable: build and run %check section. do not stop on error. will generate report file. |
| ... | ... |
@@ -224,7 +230,7 @@ who-needs: |
| 224 | 224 |
@cd $(PHOTON_SPECDEPS_DIR) && \ |
| 225 | 225 |
$(PHOTON_SPECDEPS) -s $(PHOTON_SPECS_DIR) -i who-needs -p $(pkg) |
| 226 | 226 |
|
| 227 |
-packages: check-tools $(PHOTON_STAGE) $(PHOTON_PUBLISH_RPMS) $(PHOTON_SOURCES) $(CONTAIN) generate-dep-lists |
|
| 227 |
+packages: check-tools $(PHOTON_STAGE) $(PHOTON_PUBLISH_XRPMS) $(PHOTON_PUBLISH_RPMS) $(PHOTON_SOURCES) $(CONTAIN) generate-dep-lists |
|
| 228 | 228 |
@echo "Building all RPMS..." |
| 229 | 229 |
@cd $(PHOTON_PKG_BUILDER_DIR) && \ |
| 230 | 230 |
$(PHOTON_PACKAGE_BUILDER) \ |
| ... | ... |
@@ -235,6 +241,7 @@ packages: check-tools $(PHOTON_STAGE) $(PHOTON_PUBLISH_RPMS) $(PHOTON_SOURCES) $ |
| 235 | 235 |
-b $(PHOTON_CHROOT_PATH) \ |
| 236 | 236 |
-l $(PHOTON_LOGS_DIR) \ |
| 237 | 237 |
-p $(PHOTON_PUBLISH_RPMS_DIR) \ |
| 238 |
+ -e $(PHOTON_PUBLISH_XRPMS_DIR) \ |
|
| 238 | 239 |
-c $(PHOTON_BINTRAY_CONFIG) \ |
| 239 | 240 |
-d $(PHOTON_DIST_TAG) \ |
| 240 | 241 |
-n $(PHOTON_BUILD_NUMBER) \ |
| ... | ... |
@@ -244,7 +251,7 @@ packages: check-tools $(PHOTON_STAGE) $(PHOTON_PUBLISH_RPMS) $(PHOTON_SOURCES) $ |
| 244 | 244 |
$(PHOTON_RPMCHECK_FLAGS) \ |
| 245 | 245 |
-t ${THREADS}
|
| 246 | 246 |
|
| 247 |
-updated-packages: check-tools $(PHOTON_STAGE) $(PHOTON_PUBLISH_RPMS) $(PHOTON_SOURCES) $(CONTAIN) generate-dep-lists |
|
| 247 |
+updated-packages: check-tools $(PHOTON_STAGE) $(PHOTON_PUBLISH_XRPMS) $(PHOTON_PUBLISH_RPMS) $(PHOTON_SOURCES) $(CONTAIN) generate-dep-lists |
|
| 248 | 248 |
@echo "Building only updated RPMS..." |
| 249 | 249 |
@cd $(PHOTON_PKG_BUILDER_DIR) && \ |
| 250 | 250 |
$(PHOTON_PACKAGE_BUILDER) \ |
| ... | ... |
@@ -254,6 +261,7 @@ updated-packages: check-tools $(PHOTON_STAGE) $(PHOTON_PUBLISH_RPMS) $(PHOTON_SO |
| 254 | 254 |
-b $(PHOTON_CHROOT_PATH) \ |
| 255 | 255 |
-l $(PHOTON_LOGS_DIR) \ |
| 256 | 256 |
-p $(PHOTON_PUBLISH_RPMS_DIR) \ |
| 257 |
+ -e $(PHOTON_PUBLISH_XRPMS_DIR) \ |
|
| 257 | 258 |
-c $(PHOTON_BINTRAY_CONFIG) \ |
| 258 | 259 |
-d $(PHOTON_DIST_TAG) \ |
| 259 | 260 |
-n $(PHOTON_BUILD_NUMBER) \ |
| ... | ... |
@@ -321,11 +329,21 @@ publish-rpms: |
| 321 | 321 |
@cd $(PHOTON_PULL_PUBLISH_RPMS_DIR) && \ |
| 322 | 322 |
$(PHOTON_PULL_PUBLISH_RPMS) $(PHOTON_PUBLISH_RPMS_DIR) |
| 323 | 323 |
|
| 324 |
+publish-x-rpms: |
|
| 325 |
+ @echo "Pulling publish X rpms from bintray..." |
|
| 326 |
+ @cd $(PHOTON_PULL_PUBLISH_RPMS_DIR) && \ |
|
| 327 |
+ $(PHOTON_PULL_PUBLISH_X_RPMS) $(PHOTON_PUBLISH_XRPMS_DIR) |
|
| 328 |
+ |
|
| 324 | 329 |
publish-rpms-cached: |
| 325 | 330 |
@echo "Using cached publish rpms..." |
| 326 | 331 |
@$(MKDIR) -p $(PHOTON_PUBLISH_RPMS_DIR) && \ |
| 327 | 332 |
$(CP) -rf $(PHOTON_PUBLISH_RPMS_PATH)/* $(PHOTON_PUBLISH_RPMS_DIR)/ |
| 328 | 333 |
|
| 334 |
+publish-x-rpms-cached: |
|
| 335 |
+ @echo "Using ..." |
|
| 336 |
+ @$(MKDIR) -p $(PHOTON_PUBLISH_XRPMS_DIR) && \ |
|
| 337 |
+ $(CP) -rf $(PHOTON_PUBLISH_XRPMS_PATH)/* $(PHOTON_PUBLISH_XRPMS_DIR)/ |
|
| 338 |
+ |
|
| 329 | 339 |
$(PHOTON_STAGE): |
| 330 | 340 |
@echo "Creating staging folder..." |
| 331 | 341 |
$(MKDIR) -p $(PHOTON_STAGE) |
| ... | ... |
@@ -506,6 +524,7 @@ check: packages |
| 506 | 506 |
-b $(PHOTON_CHROOT_PATH) \ |
| 507 | 507 |
-l $(PHOTON_LOGS_DIR) \ |
| 508 | 508 |
-p $(PHOTON_PUBLISH_RPMS_DIR) \ |
| 509 |
+ -e $(PHOTON_PUBLISH_XRPMS_DIR) \ |
|
| 509 | 510 |
-c $(PHOTON_BINTRAY_CONFIG) \ |
| 510 | 511 |
-d $(PHOTON_DIST_TAG) \ |
| 511 | 512 |
-n $(PHOTON_BUILD_NUMBER) \ |
| ... | ... |
@@ -516,7 +535,7 @@ check: packages |
| 516 | 516 |
$(rpmcheck_stop_on_error) \ |
| 517 | 517 |
-t ${THREADS}
|
| 518 | 518 |
|
| 519 |
-%: check-tools $(PHOTON_PUBLISH_RPMS) $(PHOTON_SOURCES) $(CONTAIN) |
|
| 519 |
+%: check-tools $(PHOTON_PUBLISH_RPMS) $(PHOTON_PUBLISH_XRPMS) $(PHOTON_SOURCES) $(CONTAIN) $(eval PKG_NAME = $@) |
|
| 520 | 520 |
$(eval PKG_NAME = $@) |
| 521 | 521 |
@echo "Building package $(PKG_NAME) ..." |
| 522 | 522 |
@cd $(PHOTON_PKG_BUILDER_DIR) && \ |
| ... | ... |
@@ -527,6 +546,7 @@ check: packages |
| 527 | 527 |
-a $(PHOTON_SRPMS_DIR) \ |
| 528 | 528 |
-x $(PHOTON_SRCS_DIR) \ |
| 529 | 529 |
-p $(PHOTON_PUBLISH_RPMS_DIR) \ |
| 530 |
+ -e $(PHOTON_PUBLISH_XRPMS_DIR) \ |
|
| 530 | 531 |
-c $(PHOTON_BINTRAY_CONFIG) \ |
| 531 | 532 |
-d $(PHOTON_DIST_TAG) \ |
| 532 | 533 |
-n $(PHOTON_BUILD_NUMBER) \ |
| 533 | 534 |
new file mode 100644 |
| ... | ... |
@@ -0,0 +1,433 @@ |
| 0 |
+--- a/jdk/src/share/back/invoker.c Tue Mar 29 23:02:04 2016 +0100 |
|
| 1 |
+@@ -211,6 +211,47 @@ |
|
| 2 |
+ return error; |
|
| 3 |
+ } |
|
| 4 |
+ |
|
| 5 |
++/* |
|
| 6 |
++ * Delete global references from the request which got put there before a |
|
| 7 |
++ * invoke request was carried out. See fillInvokeRequest() and invoker invoke*() |
|
| 8 |
++ * impls. |
|
| 9 |
++ */ |
|
| 10 |
++static void |
|
| 11 |
++deleteGlobalRefs(JNIEnv *env, InvokeRequest *request) |
|
| 12 |
++{
|
|
| 13 |
++ void *cursor; |
|
| 14 |
++ jint argIndex = 0; |
|
| 15 |
++ jvalue *argument = request->arguments; |
|
| 16 |
++ jbyte argumentTag = firstArgumentTypeTag(request->methodSignature, &cursor); |
|
| 17 |
++ |
|
| 18 |
++ if (request->clazz != NULL) {
|
|
| 19 |
++ tossGlobalRef(env, &(request->clazz)); |
|
| 20 |
++ } |
|
| 21 |
++ if (request->instance != NULL) {
|
|
| 22 |
++ tossGlobalRef(env, &(request->instance)); |
|
| 23 |
++ } |
|
| 24 |
++ /* Delete global argument references */ |
|
| 25 |
++ while (argIndex < request->argumentCount) {
|
|
| 26 |
++ if ((argumentTag == JDWP_TAG(OBJECT)) || |
|
| 27 |
++ (argumentTag == JDWP_TAG(ARRAY))) {
|
|
| 28 |
++ if (argument->l != NULL) {
|
|
| 29 |
++ tossGlobalRef(env, &(argument->l)); |
|
| 30 |
++ } |
|
| 31 |
++ } |
|
| 32 |
++ argument++; |
|
| 33 |
++ argIndex++; |
|
| 34 |
++ argumentTag = nextArgumentTypeTag(&cursor); |
|
| 35 |
++ } |
|
| 36 |
++ /* Delete potentially saved return values */ |
|
| 37 |
++ if ((request->invokeType == INVOKE_CONSTRUCTOR) || |
|
| 38 |
++ (returnTypeTag(request->methodSignature) == JDWP_TAG(OBJECT)) || |
|
| 39 |
++ (returnTypeTag(request->methodSignature) == JDWP_TAG(ARRAY))) {
|
|
| 40 |
++ if (request->returnValue.l != NULL) {
|
|
| 41 |
++ tossGlobalRef(env, &(request->returnValue.l)); |
|
| 42 |
++ } |
|
| 43 |
++ } |
|
| 44 |
++} |
|
| 45 |
++ |
|
| 46 |
+ static jvmtiError |
|
| 47 |
+ fillInvokeRequest(JNIEnv *env, InvokeRequest *request, |
|
| 48 |
+ jbyte invokeType, jbyte options, jint id, |
|
| 49 |
+@@ -736,6 +777,13 @@ |
|
| 50 |
+ (void)outStream_writeObjectRef(env, &out, exc); |
|
| 51 |
+ outStream_sendReply(&out); |
|
| 52 |
+ } |
|
| 53 |
++ |
|
| 54 |
++ /* |
|
| 55 |
++ * At this time, there's no need to retain global references on |
|
| 56 |
++ * arguments since the reply is processed. No one will deal with |
|
| 57 |
++ * this request ID anymore, so we must call deleteGlobalRefs(). |
|
| 58 |
++ */ |
|
| 59 |
++ deleteGlobalRefs(env, request); |
|
| 60 |
+ } |
|
| 61 |
+ |
|
| 62 |
+ jboolean |
|
| 63 |
+--- /dev/null Thu Jan 01 00:00:00 1970 +0000 |
|
| 64 |
+@@ -0,0 +1,1 @@ |
|
| 65 |
++-Xmx40m |
|
| 66 |
+\ No newline at end of file |
|
| 67 |
+--- /dev/null Thu Jan 01 00:00:00 1970 +0000 |
|
| 68 |
+@@ -0,0 +1,312 @@ |
|
| 69 |
++/* |
|
| 70 |
++ * Copyright (c) 2016 Red Hat Inc. |
|
| 71 |
++ * |
|
| 72 |
++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
|
| 73 |
++ * |
|
| 74 |
++ * This code is free software; you can redistribute it and/or modify it |
|
| 75 |
++ * under the terms of the GNU General Public License version 2 only, as |
|
| 76 |
++ * published by the Free Software Foundation. |
|
| 77 |
++ * |
|
| 78 |
++ * This code is distributed in the hope that it will be useful, but WITHOUT |
|
| 79 |
++ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
|
| 80 |
++ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
|
| 81 |
++ * version 2 for more details (a copy is included in the LICENSE file that |
|
| 82 |
++ * accompanied this code). |
|
| 83 |
++ * |
|
| 84 |
++ * You should have received a copy of the GNU General Public License version |
|
| 85 |
++ * 2 along with this work; if not, write to the Free Software Foundation, |
|
| 86 |
++ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. |
|
| 87 |
++ * |
|
| 88 |
++ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
|
| 89 |
++ * or visit www.oracle.com if you need additional information or have any |
|
| 90 |
++ * questions. |
|
| 91 |
++ */ |
|
| 92 |
++ |
|
| 93 |
++/** |
|
| 94 |
++ * @test |
|
| 95 |
++ * @bug 4858370 |
|
| 96 |
++ * @summary JDWP: Memory Leak (global references not deleted after invokeMethod). |
|
| 97 |
++ * |
|
| 98 |
++ * @author Severin Gehwolf <sgehwolf@redhat.com> |
|
| 99 |
++ * |
|
| 100 |
++ * @library .. |
|
| 101 |
++ * @run build TestScaffold VMConnection TargetListener TargetAdapter |
|
| 102 |
++ * @run compile -g OomDebugTest.java |
|
| 103 |
++ * @run shell OomDebugTestSetup.sh |
|
| 104 |
++ * @run main OomDebugTest OomDebugTestTarget test1 |
|
| 105 |
++ * @run main OomDebugTest OomDebugTestTarget test2 |
|
| 106 |
++ * @run main OomDebugTest OomDebugTestTarget test3 |
|
| 107 |
++ * @run main OomDebugTest OomDebugTestTarget test4 |
|
| 108 |
++ * @run main OomDebugTest OomDebugTestTarget test5 |
|
| 109 |
++ */ |
|
| 110 |
++import java.util.ArrayList; |
|
| 111 |
++import java.util.Collections; |
|
| 112 |
++import java.util.List; |
|
| 113 |
++ |
|
| 114 |
++import com.sun.jdi.ArrayReference; |
|
| 115 |
++import com.sun.jdi.ArrayType; |
|
| 116 |
++import com.sun.jdi.ClassType; |
|
| 117 |
++import com.sun.jdi.Field; |
|
| 118 |
++import com.sun.jdi.InvocationException; |
|
| 119 |
++import com.sun.jdi.Method; |
|
| 120 |
++import com.sun.jdi.ObjectReference; |
|
| 121 |
++import com.sun.jdi.ReferenceType; |
|
| 122 |
++import com.sun.jdi.StackFrame; |
|
| 123 |
++import com.sun.jdi.VMOutOfMemoryException; |
|
| 124 |
++import com.sun.jdi.Value; |
|
| 125 |
++import com.sun.jdi.event.BreakpointEvent; |
|
| 126 |
++ |
|
| 127 |
++/***************** Target program **********************/ |
|
| 128 |
++ |
|
| 129 |
++class OomDebugTestTarget {
|
|
| 130 |
++ |
|
| 131 |
++ OomDebugTestTarget() {
|
|
| 132 |
++ System.out.println("DEBUG: invoked constructor");
|
|
| 133 |
++ } |
|
| 134 |
++ static class FooCls {
|
|
| 135 |
++ @SuppressWarnings("unused")
|
|
| 136 |
++ private byte[] bytes = new byte[3000000]; |
|
| 137 |
++ }; |
|
| 138 |
++ |
|
| 139 |
++ FooCls fooCls = new FooCls(); |
|
| 140 |
++ byte[] byteArray = new byte[0]; |
|
| 141 |
++ |
|
| 142 |
++ void testMethod(FooCls foo) {
|
|
| 143 |
++ System.out.println("DEBUG: invoked 'void testMethod(FooCls)', foo == " + foo);
|
|
| 144 |
++ } |
|
| 145 |
++ |
|
| 146 |
++ void testPrimitive(byte[] foo) {
|
|
| 147 |
++ System.out.println("DEBUG: invoked 'void testPrimitive(byte[])', foo == " + foo);
|
|
| 148 |
++ } |
|
| 149 |
++ |
|
| 150 |
++ byte[] testPrimitiveArrRetval() {
|
|
| 151 |
++ System.out.println("DEBUG: invoked 'byte[] testPrimitiveArrRetval()'");
|
|
| 152 |
++ return new byte[3000000]; |
|
| 153 |
++ } |
|
| 154 |
++ |
|
| 155 |
++ FooCls testFooClsRetval() {
|
|
| 156 |
++ System.out.println("DEBUG: invoked 'FooCls testFooClsRetval()'");
|
|
| 157 |
++ return new FooCls(); |
|
| 158 |
++ } |
|
| 159 |
++ |
|
| 160 |
++ public void entry() {}
|
|
| 161 |
++ |
|
| 162 |
++ public static void main(String[] args){
|
|
| 163 |
++ System.out.println("DEBUG: OomDebugTestTarget.main");
|
|
| 164 |
++ new OomDebugTestTarget().entry(); |
|
| 165 |
++ } |
|
| 166 |
++} |
|
| 167 |
++ |
|
| 168 |
++/***************** Test program ************************/ |
|
| 169 |
++ |
|
| 170 |
++public class OomDebugTest extends TestScaffold {
|
|
| 171 |
++ |
|
| 172 |
++ private static final int TOTAL_TESTS = 1; |
|
| 173 |
++ private ReferenceType targetClass; |
|
| 174 |
++ private ObjectReference thisObject; |
|
| 175 |
++ private int failedTests; |
|
| 176 |
++ private final String testMethodName; |
|
| 177 |
++ |
|
| 178 |
++ public OomDebugTest(String[] args) {
|
|
| 179 |
++ super(args); |
|
| 180 |
++ if (args.length != 2) {
|
|
| 181 |
++ throw new RuntimeException("Test failed unexpectedly.");
|
|
| 182 |
++ } |
|
| 183 |
++ testMethodName = args[1]; |
|
| 184 |
++ } |
|
| 185 |
++ |
|
| 186 |
++ @Override |
|
| 187 |
++ protected void runTests() throws Exception {
|
|
| 188 |
++ try {
|
|
| 189 |
++ /* |
|
| 190 |
++ * Get to the top of entry() |
|
| 191 |
++ * to determine targetClass and mainThread |
|
| 192 |
++ */ |
|
| 193 |
++ BreakpointEvent bpe = startTo("OomDebugTestTarget", "entry", "()V");
|
|
| 194 |
++ targetClass = bpe.location().declaringType(); |
|
| 195 |
++ |
|
| 196 |
++ mainThread = bpe.thread(); |
|
| 197 |
++ |
|
| 198 |
++ StackFrame frame = mainThread.frame(0); |
|
| 199 |
++ thisObject = frame.thisObject(); |
|
| 200 |
++ java.lang.reflect.Method m = findTestMethod(); |
|
| 201 |
++ m.invoke(this); |
|
| 202 |
++ } catch (NoSuchMethodException e) {
|
|
| 203 |
++ e.printStackTrace(); |
|
| 204 |
++ failure(); |
|
| 205 |
++ } catch (SecurityException e) {
|
|
| 206 |
++ e.printStackTrace(); |
|
| 207 |
++ failure(); |
|
| 208 |
++ } |
|
| 209 |
++ } |
|
| 210 |
++ |
|
| 211 |
++ private java.lang.reflect.Method findTestMethod() |
|
| 212 |
++ throws NoSuchMethodException, SecurityException {
|
|
| 213 |
++ return OomDebugTest.class.getDeclaredMethod(testMethodName); |
|
| 214 |
++ } |
|
| 215 |
++ |
|
| 216 |
++ private void failure() {
|
|
| 217 |
++ failedTests++; |
|
| 218 |
++ } |
|
| 219 |
++ |
|
| 220 |
++ /* |
|
| 221 |
++ * Test case: Object reference as method parameter. |
|
| 222 |
++ */ |
|
| 223 |
++ @SuppressWarnings("unused") // called via reflection
|
|
| 224 |
++ private void test1() throws Exception {
|
|
| 225 |
++ System.out.println("DEBUG: ------------> Running " + testMethodName);
|
|
| 226 |
++ try {
|
|
| 227 |
++ Field field = targetClass.fieldByName("fooCls");
|
|
| 228 |
++ ClassType clsType = (ClassType)field.type(); |
|
| 229 |
++ Method constructor = getConstructorForClass(clsType); |
|
| 230 |
++ for (int i = 0; i < 15; i++) {
|
|
| 231 |
++ @SuppressWarnings({ "rawtypes", "unchecked" })
|
|
| 232 |
++ ObjectReference objRef = clsType.newInstance(mainThread, |
|
| 233 |
++ constructor, |
|
| 234 |
++ new ArrayList(0), |
|
| 235 |
++ ObjectReference.INVOKE_NONVIRTUAL); |
|
| 236 |
++ invoke("testMethod", "(LOomDebugTestTarget$FooCls;)V", objRef);
|
|
| 237 |
++ } |
|
| 238 |
++ } catch (InvocationException e) {
|
|
| 239 |
++ handleFailure(e); |
|
| 240 |
++ } |
|
| 241 |
++ } |
|
| 242 |
++ |
|
| 243 |
++ /* |
|
| 244 |
++ * Test case: Array reference as method parameter. |
|
| 245 |
++ */ |
|
| 246 |
++ @SuppressWarnings("unused") // called via reflection
|
|
| 247 |
++ private void test2() throws Exception {
|
|
| 248 |
++ System.out.println("DEBUG: ------------> Running " + testMethodName);
|
|
| 249 |
++ try {
|
|
| 250 |
++ Field field = targetClass.fieldByName("byteArray");
|
|
| 251 |
++ ArrayType arrType = (ArrayType)field.type(); |
|
| 252 |
++ |
|
| 253 |
++ for (int i = 0; i < 15; i++) {
|
|
| 254 |
++ ArrayReference byteArrayVal = arrType.newInstance(3000000); |
|
| 255 |
++ invoke("testPrimitive", "([B)V", byteArrayVal);
|
|
| 256 |
++ } |
|
| 257 |
++ } catch (VMOutOfMemoryException e) {
|
|
| 258 |
++ defaultHandleOOMFailure(e); |
|
| 259 |
++ } |
|
| 260 |
++ } |
|
| 261 |
++ |
|
| 262 |
++ /* |
|
| 263 |
++ * Test case: Array reference as return value. |
|
| 264 |
++ */ |
|
| 265 |
++ @SuppressWarnings("unused") // called via reflection
|
|
| 266 |
++ private void test3() throws Exception {
|
|
| 267 |
++ System.out.println("DEBUG: ------------> Running " + testMethodName);
|
|
| 268 |
++ try {
|
|
| 269 |
++ for (int i = 0; i < 15; i++) {
|
|
| 270 |
++ invoke("testPrimitiveArrRetval",
|
|
| 271 |
++ "()[B", |
|
| 272 |
++ Collections.EMPTY_LIST, |
|
| 273 |
++ vm().mirrorOfVoid()); |
|
| 274 |
++ } |
|
| 275 |
++ } catch (InvocationException e) {
|
|
| 276 |
++ handleFailure(e); |
|
| 277 |
++ } |
|
| 278 |
++ } |
|
| 279 |
++ |
|
| 280 |
++ /* |
|
| 281 |
++ * Test case: Object reference as return value. |
|
| 282 |
++ */ |
|
| 283 |
++ @SuppressWarnings("unused") // called via reflection
|
|
| 284 |
++ private void test4() throws Exception {
|
|
| 285 |
++ System.out.println("DEBUG: ------------> Running " + testMethodName);
|
|
| 286 |
++ try {
|
|
| 287 |
++ for (int i = 0; i < 15; i++) {
|
|
| 288 |
++ invoke("testFooClsRetval",
|
|
| 289 |
++ "()LOomDebugTestTarget$FooCls;", |
|
| 290 |
++ Collections.EMPTY_LIST, |
|
| 291 |
++ vm().mirrorOfVoid()); |
|
| 292 |
++ } |
|
| 293 |
++ } catch (InvocationException e) {
|
|
| 294 |
++ handleFailure(e); |
|
| 295 |
++ } |
|
| 296 |
++ } |
|
| 297 |
++ |
|
| 298 |
++ /* |
|
| 299 |
++ * Test case: Constructor |
|
| 300 |
++ */ |
|
| 301 |
++ @SuppressWarnings({ "unused", "unchecked", "rawtypes" }) // called via reflection
|
|
| 302 |
++ private void test5() throws Exception {
|
|
| 303 |
++ System.out.println("DEBUG: ------------> Running " + testMethodName);
|
|
| 304 |
++ try {
|
|
| 305 |
++ ClassType type = (ClassType)thisObject.type(); |
|
| 306 |
++ for (int i = 0; i < 15; i++) {
|
|
| 307 |
++ type.newInstance(mainThread, |
|
| 308 |
++ findMethod(targetClass, "<init>", "()V"), |
|
| 309 |
++ new ArrayList(0), |
|
| 310 |
++ ObjectReference.INVOKE_NONVIRTUAL); |
|
| 311 |
++ } |
|
| 312 |
++ } catch (InvocationException e) {
|
|
| 313 |
++ handleFailure(e); |
|
| 314 |
++ } |
|
| 315 |
++ } |
|
| 316 |
++ |
|
| 317 |
++ private Method getConstructorForClass(ClassType clsType) {
|
|
| 318 |
++ List<Method> methods = clsType.methodsByName("<init>");
|
|
| 319 |
++ if (methods.size() != 1) {
|
|
| 320 |
++ throw new RuntimeException("FAIL. Expected only one, the default, constructor");
|
|
| 321 |
++ } |
|
| 322 |
++ return methods.get(0); |
|
| 323 |
++ } |
|
| 324 |
++ |
|
| 325 |
++ private void handleFailure(InvocationException e) {
|
|
| 326 |
++ // There is no good way to see the OOME diagnostic message in the target since the |
|
| 327 |
++ // TestScaffold might throw an exception while trying to print the stack trace. I.e |
|
| 328 |
++ // it might get a a VMDisconnectedException before the stack trace printing finishes. |
|
| 329 |
++ System.err.println("FAILURE: InvocationException caused by OOM");
|
|
| 330 |
++ defaultHandleOOMFailure(e); |
|
| 331 |
++ } |
|
| 332 |
++ |
|
| 333 |
++ private void defaultHandleOOMFailure(Exception e) {
|
|
| 334 |
++ e.printStackTrace(); |
|
| 335 |
++ failure(); |
|
| 336 |
++ } |
|
| 337 |
++ |
|
| 338 |
++ @SuppressWarnings({ "rawtypes", "unchecked" })
|
|
| 339 |
++ void invoke(String methodName, String methodSig, Value value) |
|
| 340 |
++ throws Exception {
|
|
| 341 |
++ List args = new ArrayList(1); |
|
| 342 |
++ args.add(value); |
|
| 343 |
++ invoke(methodName, methodSig, args, value); |
|
| 344 |
++ } |
|
| 345 |
++ |
|
| 346 |
++ void invoke(String methodName, |
|
| 347 |
++ String methodSig, |
|
| 348 |
++ @SuppressWarnings("rawtypes") List args,
|
|
| 349 |
++ Value value) throws Exception {
|
|
| 350 |
++ Method method = findMethod(targetClass, methodName, methodSig); |
|
| 351 |
++ if ( method == null) {
|
|
| 352 |
++ failure("FAILED: Can't find method: "
|
|
| 353 |
++ + methodName + " for class = " + targetClass); |
|
| 354 |
++ return; |
|
| 355 |
++ } |
|
| 356 |
++ invoke(method, args, value); |
|
| 357 |
++ } |
|
| 358 |
++ |
|
| 359 |
++ @SuppressWarnings({ "rawtypes", "unchecked" })
|
|
| 360 |
++ void invoke(Method method, List args, Value value) throws Exception {
|
|
| 361 |
++ thisObject.invokeMethod(mainThread, method, args, 0); |
|
| 362 |
++ System.out.println("DEBUG: Done invoking method via debugger.");
|
|
| 363 |
++ } |
|
| 364 |
++ |
|
| 365 |
++ Value fieldValue(String fieldName) {
|
|
| 366 |
++ Field field = targetClass.fieldByName(fieldName); |
|
| 367 |
++ return thisObject.getValue(field); |
|
| 368 |
++ } |
|
| 369 |
++ |
|
| 370 |
++ public static void main(String[] args) throws Exception {
|
|
| 371 |
++ OomDebugTest oomTest = new OomDebugTest(args); |
|
| 372 |
++ oomTest.startTests(); |
|
| 373 |
++ if (oomTest.failedTests > 0) {
|
|
| 374 |
++ throw new RuntimeException(oomTest.failedTests |
|
| 375 |
++ + " of " + TOTAL_TESTS + " test(s) failed."); |
|
| 376 |
++ } |
|
| 377 |
++ System.out.println("All " + TOTAL_TESTS + " tests passed.");
|
|
| 378 |
++ } |
|
| 379 |
++ |
|
| 380 |
++} |
|
| 381 |
+--- /dev/null Thu Jan 01 00:00:00 1970 +0000 |
|
| 382 |
+@@ -0,0 +1,46 @@ |
|
| 383 |
++#!/bin/sh |
|
| 384 |
++# |
|
| 385 |
++# Copyright (c) 2016 Red Hat Inc. |
|
| 386 |
++# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
|
| 387 |
++# |
|
| 388 |
++# This code is free software; you can redistribute it and/or modify it |
|
| 389 |
++# under the terms of the GNU General Public License version 2 only, as |
|
| 390 |
++# published by the Free Software Foundation. |
|
| 391 |
++# |
|
| 392 |
++# This code is distributed in the hope that it will be useful, but WITHOUT |
|
| 393 |
++# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
|
| 394 |
++# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
|
| 395 |
++# version 2 for more details (a copy is included in the LICENSE file that |
|
| 396 |
++# accompanied this code). |
|
| 397 |
++# |
|
| 398 |
++# You should have received a copy of the GNU General Public License version |
|
| 399 |
++# 2 along with this work; if not, write to the Free Software Foundation, |
|
| 400 |
++# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. |
|
| 401 |
++# |
|
| 402 |
++# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
|
| 403 |
++# or visit www.oracle.com if you need additional information or have any |
|
| 404 |
++# questions. |
|
| 405 |
++# |
|
| 406 |
++ |
|
| 407 |
++ |
|
| 408 |
++if [ "${TESTSRC}" = "" ]
|
|
| 409 |
++then |
|
| 410 |
++ echo "TESTSRC not set. Test cannot execute. Failed." |
|
| 411 |
++ exit 1 |
|
| 412 |
++fi |
|
| 413 |
++echo "TESTSRC=${TESTSRC}"
|
|
| 414 |
++ |
|
| 415 |
++if [ "${TESTJAVA}" = "" ]
|
|
| 416 |
++then |
|
| 417 |
++ echo "TESTJAVA not set. Test cannot execute. Failed." |
|
| 418 |
++ exit 1 |
|
| 419 |
++fi |
|
| 420 |
++echo "TESTJAVA=${TESTJAVA}"
|
|
| 421 |
++ |
|
| 422 |
++if [ "${TESTCLASSES}" = "" ]
|
|
| 423 |
++then |
|
| 424 |
++ echo "TESTCLASSES not set. Test cannot execute. Failed." |
|
| 425 |
++ exit 1 |
|
| 426 |
++fi |
|
| 427 |
++ |
|
| 428 |
++cp ${TESTSRC}/@debuggeeVMOptions ${TESTCLASSES}/
|
| 0 | 429 |
new file mode 100644 |
| ... | ... |
@@ -0,0 +1,53 @@ |
| 0 |
+diff -r 6b81fd2227d1 -r 3334efeacd83 src/share/classes/sun/security/ssl/TrustManagerFactoryImpl.java |
|
| 1 |
+--- a/jdk/src/share/classes/sun/security/ssl/TrustManagerFactoryImpl.java Fri Apr 01 05:33:37 2016 +0100 |
|
| 2 |
+@@ -174,15 +174,20 @@ |
|
| 3 |
+ storeFile = new File(storeFileName); |
|
| 4 |
+ fis = getFileInputStream(storeFile); |
|
| 5 |
+ } else {
|
|
| 6 |
+- String javaHome = props.get("javaHome");
|
|
| 7 |
+- storeFile = new File(javaHome + sep + "lib" + sep |
|
| 8 |
+- + "security" + sep + |
|
| 9 |
+- "jssecacerts"); |
|
| 10 |
++ /* Check system cacerts DB first; /etc/pki/java/cacerts */ |
|
| 11 |
++ storeFile = new File(sep + "etc" + sep + "pki" + sep |
|
| 12 |
++ + "java" + sep + "cacerts"); |
|
| 13 |
+ if ((fis = getFileInputStream(storeFile)) == null) {
|
|
| 14 |
++ String javaHome = props.get("javaHome");
|
|
| 15 |
+ storeFile = new File(javaHome + sep + "lib" + sep |
|
| 16 |
+- + "security" + sep + |
|
| 17 |
+- "cacerts"); |
|
| 18 |
+- fis = getFileInputStream(storeFile); |
|
| 19 |
++ + "security" + sep + |
|
| 20 |
++ "jssecacerts"); |
|
| 21 |
++ if ((fis = getFileInputStream(storeFile)) == null) {
|
|
| 22 |
++ storeFile = new File(javaHome + sep + "lib" + sep |
|
| 23 |
++ + "security" + sep + |
|
| 24 |
++ "cacerts"); |
|
| 25 |
++ fis = getFileInputStream(storeFile); |
|
| 26 |
++ } |
|
| 27 |
+ } |
|
| 28 |
+ } |
|
| 29 |
+ |
|
| 30 |
+diff -r 6b81fd2227d1 -r 3334efeacd83 src/share/classes/sun/security/tools/KeyStoreUtil.java |
|
| 31 |
+--- a/jdk/src/share/classes/sun/security/tools/KeyStoreUtil.java Fri Apr 01 05:33:37 2016 +0100 |
|
| 32 |
+@@ -87,9 +87,14 @@ |
|
| 33 |
+ throws Exception |
|
| 34 |
+ {
|
|
| 35 |
+ String sep = File.separator; |
|
| 36 |
+- File file = new File(System.getProperty("java.home") + sep
|
|
| 37 |
+- + "lib" + sep + "security" + sep |
|
| 38 |
+- + "cacerts"); |
|
| 39 |
++ /* Check system cacerts DB first; /etc/pki/java/cacerts */ |
|
| 40 |
++ File file = new File(sep + "etc" + sep + "pki" + sep |
|
| 41 |
++ + "java" + sep + "cacerts"); |
|
| 42 |
++ if (!file.exists()) {
|
|
| 43 |
++ file = new File(System.getProperty("java.home") + sep
|
|
| 44 |
++ + "lib" + sep + "security" + sep |
|
| 45 |
++ + "cacerts"); |
|
| 46 |
++ } |
|
| 47 |
+ if (!file.exists()) {
|
|
| 48 |
+ return null; |
|
| 49 |
+ } |
|
| 50 |
+ |
| 0 | 51 |
new file mode 100644 |
| ... | ... |
@@ -0,0 +1,11 @@ |
| 0 |
+--- a/jdk/make/CompileNativeLibraries.gmk 2017-04-07 20:06:07.668018356 +0000 |
|
| 1 |
+@@ -83,7 +83,7 @@ |
|
| 2 |
+ |
|
| 3 |
+ include lib/ServiceabilityLibraries.gmk |
|
| 4 |
+ |
|
| 5 |
+-include lib/Awt2dLibraries.gmk |
|
| 6 |
++#include lib/Awt2dLibraries.gmk |
|
| 7 |
+ |
|
| 8 |
+ include lib/SoundLibraries.gmk |
|
| 9 |
+ |
| 0 | 10 |
new file mode 100644 |
| ... | ... |
@@ -0,0 +1,13 @@ |
| 0 |
+diff --git a/src/share/native/sun/java2d/cmm/lcms/cmstypes.c b/src/share/native/sun/java2d/cmm/lcms/cmstypes.c |
|
| 1 |
+--- openjdk/jdk/src/share/native/sun/java2d/cmm/lcms/cmstypes.c |
|
| 2 |
+@@ -1483,7 +1483,7 @@ |
|
| 3 |
+ if (!_cmsReadUInt32Number(io, &Offset)) goto Error; |
|
| 4 |
+ |
|
| 5 |
+ // Check for overflow |
|
| 6 |
+- if (Offset < (SizeOfHeader + 8)) goto Error; |
|
| 7 |
++ if ((Offset + Len) > SizeOfTag + :sunglasses: goto Error; |
|
| 8 |
+ |
|
| 9 |
+ // True begin of the string |
|
| 10 |
+ BeginOfThisString = Offset - SizeOfHeader - 8; |
|
| 11 |
+ |
| ... | ... |
@@ -1,18 +1,30 @@ |
| 1 | 1 |
%define _use_internal_dependency_generator 0 |
| 2 |
+%global security_hardening none |
|
| 2 | 3 |
Summary: OpenJDK |
| 3 | 4 |
Name: openjdk |
| 4 |
-Version: 1.8.0.112 |
|
| 5 |
-Release: 2%{?dist}
|
|
| 5 |
+Version: 1.8.0.131 |
|
| 6 |
+Release: 1%{?dist}
|
|
| 6 | 7 |
License: GNU GPL |
| 7 | 8 |
URL: https://openjdk.java.net |
| 8 | 9 |
Group: Development/Tools |
| 9 | 10 |
Vendor: VMware, Inc. |
| 10 | 11 |
Distribution: Photon |
| 11 |
-Source0: http://anduin.linuxfromscratch.org/files/BLFS/OpenJDK/OpenJDK-%{version}-x86_64-bin.tar.xz
|
|
| 12 |
-%define sha1 OpenJDK=c14a20158e16a8877940cfa6dbdf0900d4099a4a |
|
| 13 |
-Source1: macros.java |
|
| 12 |
+Source0: http://anduin.linuxfromscratch.org/files/BLFS/OpenJDK/openjdk-%{version}.tar.bz2
|
|
| 13 |
+%define sha1 openjdk=ae01c24fe5247d5aa246a60c0272ba92188a7d55 |
|
| 14 |
+Source1: macros.java |
|
| 15 |
+Patch0: disable-awt-lib.patch |
|
| 16 |
+Patch1: fix-lcms.patch |
|
| 17 |
+Patch2: Fix-memory-leak.patch |
|
| 18 |
+Patch3: check-system-ca-certs.patch |
|
| 19 |
+BuildRequires: pcre-devel |
|
| 20 |
+BuildRequires: which |
|
| 21 |
+BuildRequires: zip |
|
| 22 |
+BuildRequires: unzip |
|
| 23 |
+BuildRequires: zlib-devel |
|
| 24 |
+BuildRequires: ca-certificates |
|
| 14 | 25 |
Requires: openjre = %{version}-%{release}
|
| 15 | 26 |
AutoReqProv: no |
| 27 |
+%define bootstrapjdkversion 1.8.0.112 |
|
| 16 | 28 |
%description |
| 17 | 29 |
The OpenJDK package installs java class library and javac java compiler. |
| 18 | 30 |
|
| ... | ... |
@@ -46,16 +58,52 @@ This package provides the runtime library class sources. |
| 46 | 46 |
Requires: %{name} = %{version}-%{release}
|
| 47 | 47 |
|
| 48 | 48 |
%prep -p exit |
| 49 |
-%setup -qn OpenJDK-%{version}-x86_64-bin
|
|
| 49 |
+%setup -q -n openjdk |
|
| 50 |
+%patch0 -p1 |
|
| 51 |
+%patch1 -p1 |
|
| 52 |
+%patch2 -p1 |
|
| 53 |
+%patch3 -p1 |
|
| 54 |
+ |
|
| 50 | 55 |
%build |
| 56 |
+chmod a+x ./configure |
|
| 57 |
+unset JAVA_HOME && |
|
| 58 |
+./configure \ |
|
| 59 |
+ FREETYPE_NOT_NEEDED=yes \ |
|
| 60 |
+ CUPS_NOT_NEEDED=yes \ |
|
| 61 |
+ --with-target-bits=64 \ |
|
| 62 |
+ --with-boot-jdk=/var/opt/OpenJDK-%bootstrapjdkversion-bin \ |
|
| 63 |
+ --enable-headful=no \ |
|
| 64 |
+ --with-cacerts-file=/var/opt/OpenJDK-%bootstrapjdkversion-bin/jre/lib/security/cacerts \ |
|
| 65 |
+ --with-extra-cxxflags="-Wno-error -std=gnu++98 -fno-delete-null-pointer-checks -fno-lifetime-dse" \ |
|
| 66 |
+ --with-extra-cflags="-std=gnu++98 -fno-delete-null-pointer-checks -Wno-error -fno-lifetime-dse" \ |
|
| 67 |
+ --with-stdc++lib=dynamic |
|
| 68 |
+ |
|
| 69 |
+make \ |
|
| 70 |
+ DEBUG_BINARIES=true \ |
|
| 71 |
+ BUILD_HEADLESS_ONLY=yes \ |
|
| 72 |
+ OPENJDK_TARGET_OS=linux \ |
|
| 73 |
+ JAVAC_FLAGS=-g \ |
|
| 74 |
+ STRIP_POLICY=no_strip \ |
|
| 75 |
+ DISABLE_HOTSPOT_OS_VERSION_CHECK=ok \ |
|
| 76 |
+ CLASSPATH=/var/opt/OpenJDK-%bootstrapjdkversion-bin/jre \ |
|
| 77 |
+ POST_STRIP_CMD="" \ |
|
| 78 |
+ LOG=trace \ |
|
| 79 |
+ SCTP_WERROR= |
|
| 51 | 80 |
|
| 52 | 81 |
%install |
| 82 |
+make DESTDIR=%{buildroot} install \
|
|
| 83 |
+ BUILD_HEADLESS_ONLY=yes \ |
|
| 84 |
+ OPENJDK_TARGET_OS=linux \ |
|
| 85 |
+ DISABLE_HOTSPOT_OS_VERSION_CHECK=ok \ |
|
| 86 |
+ CLASSPATH=/var/opt/OpenJDK-%bootstrapjdkversion-bin/jre |
|
| 87 |
+ |
|
| 88 |
+install -vdm755 %{buildroot}/var/opt/OpenJDK-%{version}-bin
|
|
| 89 |
+chown -R root:root %{buildroot}/var/opt/OpenJDK-%{version}-bin
|
|
| 90 |
+mkdir -p %{buildroot}/etc/profile.d
|
|
| 53 | 91 |
install -vdm755 %{buildroot}%{_rpmconfigdir}/macros.d
|
| 54 | 92 |
install -m 644 %{SOURCE1} %{buildroot}/%{_rpmconfigdir}/macros.d/
|
| 55 |
-install -vdm755 %{buildroot}/var/opt/OpenJDK-%{version}-bin
|
|
| 56 |
-mv -v %{_builddir}/OpenJDK-%{version}-x86_64-bin/* %{buildroot}/var/opt/OpenJDK-%{version}-bin/
|
|
| 57 |
-chown -R root:root %{buildroot}/var/opt/OpenJDK-%{version}-bin
|
|
| 58 | 93 |
install -vdm644 %{buildroot}/etc/profile.d
|
| 94 |
+mv /usr/local/jvm/openjdk-1.8.0-internal/* %{buildroot}/var/opt/OpenJDK-%{version}-bin/
|
|
| 59 | 95 |
|
| 60 | 96 |
cat >> %{buildroot}/etc/profile.d/java-exports.sh <<- "EOF"
|
| 61 | 97 |
export CLASSPATH=.:/usr/share/java |
| ... | ... |
@@ -63,6 +111,11 @@ export JAVA_HOME=/var/opt/OpenJDK-%{version}-bin
|
| 63 | 63 |
export PATH="$PATH:/var/opt/OpenJDK-%{version}-bin/bin:/var/opt/OpenJDK-%{version}-bin/jre/bin"
|
| 64 | 64 |
EOF |
| 65 | 65 |
|
| 66 |
+chmod a+x %{buildroot}/etc/profile.d/java-exports.sh
|
|
| 67 |
+ |
|
| 68 |
+%post |
|
| 69 |
+source /etc/profile.d/java-exports.sh |
|
| 70 |
+ |
|
| 66 | 71 |
%clean |
| 67 | 72 |
rm -rf %{buildroot}/*
|
| 68 | 73 |
|
| ... | ... |
@@ -74,7 +127,6 @@ rm -rf %{buildroot}/*
|
| 74 | 74 |
/var/opt/OpenJDK-%{version}-bin/THIRD_PARTY_README
|
| 75 | 75 |
/var/opt/OpenJDK-%{version}-bin/lib
|
| 76 | 76 |
/var/opt/OpenJDK-%{version}-bin/include/
|
| 77 |
-/var/opt/OpenJDK-%{version}-bin/bin/appletviewer
|
|
| 78 | 77 |
/var/opt/OpenJDK-%{version}-bin/bin/extcheck
|
| 79 | 78 |
/var/opt/OpenJDK-%{version}-bin/bin/idlj
|
| 80 | 79 |
/var/opt/OpenJDK-%{version}-bin/bin/jar
|
| ... | ... |
@@ -98,7 +150,6 @@ rm -rf %{buildroot}/*
|
| 98 | 98 |
/var/opt/OpenJDK-%{version}-bin/bin/jstack
|
| 99 | 99 |
/var/opt/OpenJDK-%{version}-bin/bin/jstat
|
| 100 | 100 |
/var/opt/OpenJDK-%{version}-bin/bin/jstatd
|
| 101 |
-/var/opt/OpenJDK-%{version}-bin/bin/mkcacerts
|
|
| 102 | 101 |
/var/opt/OpenJDK-%{version}-bin/bin/native2ascii
|
| 103 | 102 |
/var/opt/OpenJDK-%{version}-bin/bin/rmic
|
| 104 | 103 |
/var/opt/OpenJDK-%{version}-bin/bin/schemagen
|
| ... | ... |
@@ -116,7 +167,6 @@ rm -rf %{buildroot}/*
|
| 116 | 116 |
/var/opt/OpenJDK-%{version}-bin/bin/keytool
|
| 117 | 117 |
/var/opt/OpenJDK-%{version}-bin/bin/orbd
|
| 118 | 118 |
/var/opt/OpenJDK-%{version}-bin/bin/pack200
|
| 119 |
-/var/opt/OpenJDK-%{version}-bin/bin/policytool
|
|
| 120 | 119 |
/var/opt/OpenJDK-%{version}-bin/bin/rmid
|
| 121 | 120 |
/var/opt/OpenJDK-%{version}-bin/bin/rmiregistry
|
| 122 | 121 |
/var/opt/OpenJDK-%{version}-bin/bin/servertool
|
| ... | ... |
@@ -140,6 +190,8 @@ rm -rf %{buildroot}/*
|
| 140 | 140 |
/var/opt/OpenJDK-%{version}-bin/src.zip
|
| 141 | 141 |
|
| 142 | 142 |
%changelog |
| 143 |
+* Mon Apr 10 2017 Harish Udaiya Kumar <hudaiyakumar@vmware.com> 1.8.0.131-1 |
|
| 144 |
+- Upgraded to version 1.8.0.131 and building Java from sources |
|
| 143 | 145 |
* Tue Mar 28 2017 Priyesh Padmavilasom <ppadmavilasom@vmware.com> 1.8.0.112-2 |
| 144 | 146 |
- add java rpm macros |
| 145 | 147 |
* Wed Dec 21 2016 Priyesh Padmavilasom <ppadmavilasom@vmware.com> 1.8.0.112-1 |
| ... | ... |
@@ -28,6 +28,7 @@ PHOTON_COMMON_DIR?=$(SRCROOT)/common |
| 28 | 28 |
PHOTON_DATA_DIR?=$(PHOTON_COMMON_DIR)/data |
| 29 | 29 |
PHOTON_SRCS_DIR=$(PHOTON_STAGE)/SOURCES |
| 30 | 30 |
PHOTON_PUBLISH_RPMS_DIR=$(PHOTON_STAGE)/PUBLISHRPMS |
| 31 |
+PHOTON_PUBLISH_XRPMS_DIR=$(PHOTON_STAGE)/PUBLISHXRPMS |
|
| 31 | 32 |
PHOTON_GENERATED_DATA_DIR=$(PHOTON_STAGE)/common/data |
| 32 | 33 |
|
| 33 | 34 |
PHOTON_PKG_BUILDER_DIR=$(SRCROOT)/support/package-builder |
| ... | ... |
@@ -41,6 +42,7 @@ PHOTON_SPECDEPS=$(PHOTON_SPECDEPS_DIR)/SpecDeps.py |
| 41 | 41 |
PHOTON_PACKAGE_BUILDER=$(PHOTON_PKG_BUILDER_DIR)/builder.py |
| 42 | 42 |
PHOTON_BINTRAY_CONFIG?=$(PHOTON_PKG_BUILDER_DIR)/pullsources.conf |
| 43 | 43 |
PHOTON_PULL_PUBLISH_RPMS=$(PHOTON_PULL_PUBLISH_RPMS_DIR)/pullpublishrpms.sh |
| 44 |
+PHOTON_PULL_PUBLISH_X_RPMS=$(PHOTON_PULL_PUBLISH_RPMS_DIR)/pullpublishXrpms.sh |
|
| 44 | 45 |
PHOTON_CLOUD_IMAGE_BUILDER=$(PHOTON_CLOUD_IMAGE_BUILDER_DIR)/cloud-image-build.sh |
| 45 | 46 |
|
| 46 | 47 |
PHOTON_CHROOT_CLEANER=$(PHOTON_PKG_BUILDER_DIR)/clean-up-chroot.py |
| ... | ... |
@@ -23,7 +23,7 @@ class PackageBuilder(object): |
| 23 | 23 |
self.listBuildOptionPackages=listBuildOptionPackages |
| 24 | 24 |
self.pkgBuildOptionFile=pkgBuildOptionFile |
| 25 | 25 |
|
| 26 |
- def prepareBuildRoot(self,chrootName): |
|
| 26 |
+ def prepareBuildRoot(self,chrootName, packageName): |
|
| 27 | 27 |
chrootID=None |
| 28 | 28 |
try: |
| 29 | 29 |
chrUtils = ChrootUtils(self.logName,self.logPath) |
| ... | ... |
@@ -32,7 +32,7 @@ class PackageBuilder(object): |
| 32 | 32 |
if not returnVal: |
| 33 | 33 |
raise Exception("Unable to prepare build root")
|
| 34 | 34 |
tUtils=ToolChainUtils(self.logName,self.logPath) |
| 35 |
- tUtils.installToolChainRPMS(chrootID) |
|
| 35 |
+ tUtils.installToolChainRPMS(chrootID, packageName) |
|
| 36 | 36 |
except Exception as e: |
| 37 | 37 |
if chrootID is not None: |
| 38 | 38 |
self.logger.debug("Deleting chroot: " + chrootID)
|
| ... | ... |
@@ -99,7 +99,7 @@ class PackageBuilder(object): |
| 99 | 99 |
chrootName="build-"+package |
| 100 | 100 |
chrootID=None |
| 101 | 101 |
try: |
| 102 |
- chrootID = self.prepareBuildRoot(chrootName) |
|
| 102 |
+ chrootID = self.prepareBuildRoot(chrootName, package) |
|
| 103 | 103 |
destLogPath=constants.logPath+"/build-"+package |
| 104 | 104 |
if not os.path.isdir(destLogPath): |
| 105 | 105 |
cmdUtils = CommandUtils() |
| ... | ... |
@@ -92,7 +92,7 @@ class ToolChainUtils(object): |
| 92 | 92 |
if not returnVal: |
| 93 | 93 |
self.logger.error("Creating chroot failed")
|
| 94 | 94 |
raise Exception("creating chroot failed")
|
| 95 |
- self.installToolChainRPMS(chrootID) |
|
| 95 |
+ self.installToolChainRPMS(chrootID, package) |
|
| 96 | 96 |
pkgUtils.adjustGCCSpecs(package, chrootID, destLogPath) |
| 97 | 97 |
pkgUtils.buildRPMSForGivenPackage(package, chrootID, listBuildOptionPackages, pkgBuildOptionFile, destLogPath) |
| 98 | 98 |
chrUtils.destroyChroot(chrootID) |
| ... | ... |
@@ -106,7 +106,7 @@ class ToolChainUtils(object): |
| 106 | 106 |
traceback.print_exc() |
| 107 | 107 |
raise e |
| 108 | 108 |
|
| 109 |
- def installToolChainRPMS(self,chrootID): |
|
| 109 |
+ def installToolChainRPMS(self,chrootID, packageName): |
|
| 110 | 110 |
cmdUtils = CommandUtils() |
| 111 | 111 |
self.prepareBuildRoot(chrootID) |
| 112 | 112 |
self.logger.info("Installing Tool Chain RPMS.......")
|
| ... | ... |
@@ -136,6 +136,30 @@ class ToolChainUtils(object): |
| 136 | 136 |
if retval != 0: |
| 137 | 137 |
self.logger.error("Installing tool chain failed")
|
| 138 | 138 |
raise Exception("RPM installation failed")
|
| 139 |
- |
|
| 140 |
- self.logger.info("Successfully installed all Tool Chain RPMS in Chroot:"+chrootID)
|
|
| 141 |
- |
|
| 139 |
+ self.logger.info("Successfully installed all Tool Chain RPMS in Chroot:"+chrootID)
|
|
| 140 |
+ if "openjdk" in packageName or "openjre" in packageName: |
|
| 141 |
+ self.installToolChainXRPMS(chrootID); |
|
| 142 |
+ |
|
| 143 |
+ def installToolChainXRPMS(self, chrootID): |
|
| 144 |
+ self.logger.info("Installing Tool Chain X package RPMS.......")
|
|
| 145 |
+ rpmFiles = "" |
|
| 146 |
+ packages = "" |
|
| 147 |
+ for package in constants.listToolChainXRPMsToInstall: |
|
| 148 |
+ pkgUtils=PackageUtils(self.logName,self.logPath) |
|
| 149 |
+ print "DEBUG:" + package |
|
| 150 |
+ rpmFile=self.findRPMFileInGivenLocation(package, constants.prevPublishXRPMRepo) |
|
| 151 |
+ if rpmFile is None: |
|
| 152 |
+ self.logger.error("Unable to find rpm "+ package +" in current and previous versions")
|
|
| 153 |
+ raise Exception("Input Error")
|
|
| 154 |
+ rpmFiles += " " + rpmFile |
|
| 155 |
+ packages += " " + package |
|
| 156 |
+ |
|
| 157 |
+ self.logger.debug("Installing rpms:"+packages)
|
|
| 158 |
+ cmd=self.rpmCommand + " -i --nodeps --force --root "+chrootID+" --define \'_dbpath /var/lib/rpm\' "+ rpmFiles |
|
| 159 |
+ print "Command Executed:" + cmd |
|
| 160 |
+ process = subprocess.Popen("%s" %cmd,shell=True,stdout=subprocess.PIPE)
|
|
| 161 |
+ retval = process.wait() |
|
| 162 |
+ if retval != 0: |
|
| 163 |
+ self.logger.error("Installing tool chain failed")
|
|
| 164 |
+ raise Exception("RPM installation failed")
|
|
| 165 |
+ self.logger.info("Successfully installed all Tool Chain X RPMS")
|
| ... | ... |
@@ -22,6 +22,7 @@ def main(): |
| 22 | 22 |
parser.add_argument("-r", "--rpm-path", dest="rpmPath", default="../../stage/RPMS")
|
| 23 | 23 |
parser.add_argument("-i", "--install-package", dest="installPackage", default=False, action ="store_true")
|
| 24 | 24 |
parser.add_argument("-p", "--publish-RPMS-path", dest="publishRPMSPath", default="../../stage/PUBLISHRPMS")
|
| 25 |
+ parser.add_argument("-e", "--publish-XRPMS-path", dest="publishXRPMSPath", default="../../stage/PUBLISHXRPMS")
|
|
| 25 | 26 |
parser.add_argument("-l", "--log-path", dest="logPath", default="../../stage/LOGS")
|
| 26 | 27 |
parser.add_argument("-z", "--top-dir-path", dest="topDirPath", default="/usr/src/photon")
|
| 27 | 28 |
parser.add_argument("-b", "--build-root-path", dest="buildRootPath", default="/mnt")
|
| ... | ... |
@@ -58,18 +59,26 @@ def main(): |
| 58 | 58 |
if not os.path.isdir(options.publishRPMSPath): |
| 59 | 59 |
logger.error("Given RPMS Path is not a directory:"+options.publishRPMSPath)
|
| 60 | 60 |
errorFlag = True |
| 61 |
+ if not os.path.isdir(options.publishXRPMSPath): |
|
| 62 |
+ logger.error("Given X RPMS Path is not a directory:"+options.publishXRPMSPath)
|
|
| 63 |
+ errorFlag = True |
|
| 61 | 64 |
if not os.path.isdir(options.publishRPMSPath+"/x86_64"): |
| 62 | 65 |
logger.error("Given RPMS Path is missing x86_64 sub-directory:"+options.publishRPMSPath)
|
| 63 | 66 |
errorFlag = True |
| 67 |
+ if not os.path.isdir(options.publishXRPMSPath+"/x86_64"): |
|
| 68 |
+ logger.error("Given X RPMS Path is missing x86_64 sub-directory:"+options.publishXRPMSPath)
|
|
| 69 |
+ errorFlag = True |
|
| 64 | 70 |
if not os.path.isdir(options.publishRPMSPath+"/noarch"): |
| 65 | 71 |
logger.error("Given RPMS Path is missing noarch sub-directory:"+options.publishRPMSPath)
|
| 66 | 72 |
errorFlag = True |
| 67 |
- |
|
| 73 |
+ if not os.path.isdir(options.publishXRPMSPath+"/noarch"): |
|
| 74 |
+ logger.error("Given X RPMS Path is missing noarch sub-directory:"+options.publishXRPMSPath)
|
|
| 75 |
+ errorFlag = True |
|
| 68 | 76 |
if not os.path.isfile(options.pkgBuildOptionFile): |
| 69 | 77 |
logger.warning("Given JSON File is not a file:"+options.pkgBuildOptionFile)
|
| 70 | 78 |
|
| 71 | 79 |
if options.inputRPMSPath is not None and not os.path.isdir(options.inputRPMSPath): |
| 72 |
- logger.error("Given input RPMS Path is not a directory:"+options.publishRPMSPath)
|
|
| 80 |
+ logger.error("Given input RPMS Path is not a directory:"+options.inputRPMSPath)
|
|
| 73 | 81 |
errorFlag = True |
| 74 | 82 |
|
| 75 | 83 |
if options.installPackage : |
| ... | ... |
@@ -100,6 +109,7 @@ def main(): |
| 100 | 100 |
logger.info("Log Path :" + options.logPath)
|
| 101 | 101 |
logger.info("Top Dir Path :" + options.topDirPath)
|
| 102 | 102 |
logger.info("Publish RPMS Path :" + options.publishRPMSPath)
|
| 103 |
+ logger.info("Publish X RPMS Path :" + options.publishXRPMSPath)
|
|
| 103 | 104 |
|
| 104 | 105 |
if options.installPackage: |
| 105 | 106 |
logger.info("Package to build:"+package)
|
| ... | ... |
@@ -13,6 +13,7 @@ class constants(object): |
| 13 | 13 |
specData=None |
| 14 | 14 |
buildRootPath="/mnt" |
| 15 | 15 |
prevPublishRPMRepo="" |
| 16 |
+ prevPublishXRPMRepo="" |
|
| 16 | 17 |
pullsourcesConfig="" |
| 17 | 18 |
buildPatch=False |
| 18 | 19 |
inputRPMSPath="" |
| ... | ... |
@@ -193,6 +194,47 @@ class constants(object): |
| 193 | 193 |
"cpio", |
| 194 | 194 |
"go"] |
| 195 | 195 |
|
| 196 |
+ # List of X library RPMS that will be installed in a chroot prior to build openjdk & openjre package. |
|
| 197 |
+ listToolChainXRPMsToInstall=[ |
|
| 198 |
+ "glib-devel", |
|
| 199 |
+ "icu-devel", |
|
| 200 |
+ "openjdk", |
|
| 201 |
+ "openjre", |
|
| 202 |
+ "icu", |
|
| 203 |
+ "harfbuzz", |
|
| 204 |
+ "harfbuzz-devel", |
|
| 205 |
+ "freetype2", |
|
| 206 |
+ "freetype2-devel", |
|
| 207 |
+ "alsa-lib", |
|
| 208 |
+ "alsa-lib-devel", |
|
| 209 |
+ "xcb-proto", |
|
| 210 |
+ "libXdmcp-devel", |
|
| 211 |
+ "libXau-devel", |
|
| 212 |
+ "util-macros", |
|
| 213 |
+ "xtrans", |
|
| 214 |
+ "libxcb-devel", |
|
| 215 |
+ "fontconfig-devel", |
|
| 216 |
+ "proto", |
|
| 217 |
+ "libXdmcp", |
|
| 218 |
+ "libxcb", |
|
| 219 |
+ "libXau", |
|
| 220 |
+ "fontconfig", |
|
| 221 |
+ "xtrans-devel", |
|
| 222 |
+ "libX11", |
|
| 223 |
+ "libX11-devel", |
|
| 224 |
+ "libXext", |
|
| 225 |
+ "libXext-devel", |
|
| 226 |
+ "libICE-devel", |
|
| 227 |
+ "libSM", |
|
| 228 |
+ "libICE", |
|
| 229 |
+ "libSM-devel", |
|
| 230 |
+ "libXt", |
|
| 231 |
+ "libXmu", |
|
| 232 |
+ "libXt-devel", |
|
| 233 |
+ "libXmu-devel", |
|
| 234 |
+ "libXrender", |
|
| 235 |
+ "libXrender-devel" |
|
| 236 |
+ ] |
|
| 196 | 237 |
# List of RPMs which are not published. They will be created during the |
| 197 | 238 |
# build process |
| 198 | 239 |
listOfRPMsProvidedAfterBuild=[ |
| ... | ... |
@@ -266,7 +308,8 @@ class constants(object): |
| 266 | 266 |
constants.sourceRpmPath = options.sourceRpmPath |
| 267 | 267 |
constants.topDirPath = options.topDirPath |
| 268 | 268 |
constants.logPath = options.logPath |
| 269 |
- constants.prevPublishRPMRepo=options.publishRPMSPath |
|
| 269 |
+ constants.prevPublishRPMRepo = options.publishRPMSPath |
|
| 270 |
+ constants.prevPublishXRPMRepo = options.publishXRPMSPath |
|
| 270 | 271 |
constants.buildRootPath=options.buildRootPath |
| 271 | 272 |
constants.specData = SerializableSpecObjectsUtils(constants.logPath) |
| 272 | 273 |
constants.specData.readSpecsAndConvertToSerializableObjects(constants.specPath) |
| 273 | 274 |
new file mode 100755 |
| ... | ... |
@@ -0,0 +1,18 @@ |
| 0 |
+#!/bin/bash |
|
| 1 |
+################################################# |
|
| 2 |
+# Title: pullpublishxrpms.sh # |
|
| 3 |
+# Date: 04-10-2017 # |
|
| 4 |
+# Version: 1.0 # |
|
| 5 |
+# Author: hudaiyakumar@vmware.com # |
|
| 6 |
+################################################# |
|
| 7 |
+ |
|
| 8 |
+PRGNAME=${0##*/}
|
|
| 9 |
+ |
|
| 10 |
+if [ $# -lt 1 ]; then |
|
| 11 |
+ echo "${PRGNAME}: No publish rpms path and log path are specified. Usage : ${PRGNAME} <publish-rpms-path>"
|
|
| 12 |
+ exit 1 |
|
| 13 |
+fi |
|
| 14 |
+ |
|
| 15 |
+PUBLISHRPMSPATHDIR=$1 |
|
| 16 |
+ |
|
| 17 |
+cat xrpmfilelist | awk '{print "https://bintray.com/artifact/download/vmware/photon_publish_x_rpms/"$1}' | xargs -n 1 -P 10 wget --user-agent Mozilla/4.0 -c -nv -nc -r -nH --cut-dirs=4 -P ${PUBLISHRPMSPATHDIR}
|
| 0 | 18 |
new file mode 100644 |
| ... | ... |
@@ -0,0 +1,39 @@ |
| 0 |
+noarch/proto-7.7-1.noarch.rpm |
|
| 1 |
+noarch/util-macros-1.19.0-1.noarch.rpm |
|
| 2 |
+x86_64/openjdk-1.8.0.112-1.x86_64.rpm |
|
| 3 |
+x86_64/openjre-1.8.0.112-1.x86_64.rpm |
|
| 4 |
+x86_64/alsa-lib-1.0.29-1.x86_64.rpm |
|
| 5 |
+x86_64/alsa-lib-devel-1.0.29-1.x86_64.rpm |
|
| 6 |
+x86_64/fontconfig-2.11.1-1.x86_64.rpm |
|
| 7 |
+x86_64/fontconfig-devel-2.11.1-1.x86_64.rpm |
|
| 8 |
+x86_64/freetype2-2.5.5-1.x86_64.rpm |
|
| 9 |
+x86_64/freetype2-devel-2.5.5-1.x86_64.rpm |
|
| 10 |
+x86_64/glib-2.48.2-1.ph1.x86_64.rpm |
|
| 11 |
+x86_64/glib-devel-2.48.2-1.ph1.x86_64.rpm |
|
| 12 |
+x86_64/harfbuzz-0.9.40-1.x86_64.rpm |
|
| 13 |
+x86_64/harfbuzz-devel-0.9.40-1.x86_64.rpm |
|
| 14 |
+x86_64/icu-55.1-1.x86_64.rpm |
|
| 15 |
+x86_64/icu-devel-55.1-1.x86_64.rpm |
|
| 16 |
+x86_64/libICE-1.0.9-1.x86_64.rpm |
|
| 17 |
+x86_64/libICE-devel-1.0.9-1.x86_64.rpm |
|
| 18 |
+x86_64/libSM-1.2.2-1.x86_64.rpm |
|
| 19 |
+x86_64/libSM-devel-1.2.2-1.x86_64.rpm |
|
| 20 |
+x86_64/libX11-1.6.3-1.x86_64.rpm |
|
| 21 |
+x86_64/libX11-devel-1.6.3-1.x86_64.rpm |
|
| 22 |
+x86_64/libXau-1.0.8-1.x86_64.rpm |
|
| 23 |
+x86_64/libXau-devel-1.0.8-1.x86_64.rpm |
|
| 24 |
+x86_64/libXdmcp-1.1.2-1.x86_64.rpm |
|
| 25 |
+x86_64/libXdmcp-devel-1.1.2-1.x86_64.rpm |
|
| 26 |
+x86_64/libXext-1.3.3-1.x86_64.rpm |
|
| 27 |
+x86_64/libXext-devel-1.3.3-1.x86_64.rpm |
|
| 28 |
+x86_64/libXmu-1.1.2-1.x86_64.rpm |
|
| 29 |
+x86_64/libXmu-devel-1.1.2-1.x86_64.rpm |
|
| 30 |
+x86_64/libXrender-0.9.8-1.x86_64.rpm |
|
| 31 |
+x86_64/libXrender-devel-0.9.8-1.x86_64.rpm |
|
| 32 |
+x86_64/libXt-1.1.4-1.x86_64.rpm |
|
| 33 |
+x86_64/libXt-devel-1.1.4-1.x86_64.rpm |
|
| 34 |
+x86_64/libxcb-1.11-1.x86_64.rpm |
|
| 35 |
+x86_64/libxcb-devel-1.11-1.x86_64.rpm |
|
| 36 |
+x86_64/xcb-proto-1.11-1.x86_64.rpm |
|
| 37 |
+x86_64/xtrans-1.3.5-1.x86_64.rpm |
|
| 38 |
+x86_64/xtrans-devel-1.3.5-1.x86_64.rpm |