gnu: icedtea@2: Fix build with newer toolchain.
* gnu/packages/java.scm (icedtea-7)[arguments]: Add substitution to prevent ldd segfault and disable optimizations of dump.cpp instead of patching. [native-inputs]: Patch the "hotspot" drop. * gnu/packages/patches/icedtea-7-hotspot-pointer-comparison.patch: New file. * gnu/local.mk (dist_patch_DATA): Adjust accordingly.
This commit is contained in:
		
							parent
							
								
									53a94f6abf
								
							
						
					
					
						commit
						321e866b1c
					
				
					 3 changed files with 54 additions and 8 deletions
				
			
		|  | @ -1295,7 +1295,8 @@ dist_patch_DATA =						\ | ||||||
|   %D%/packages/patches/icecat-use-older-reveal-hidden-html.patch	\
 |   %D%/packages/patches/icecat-use-older-reveal-hidden-html.patch	\
 | ||||||
|   %D%/packages/patches/icecat-use-system-graphite2+harfbuzz.patch	\
 |   %D%/packages/patches/icecat-use-system-graphite2+harfbuzz.patch	\
 | ||||||
|   %D%/packages/patches/icecat-use-system-media-libs.patch	\
 |   %D%/packages/patches/icecat-use-system-media-libs.patch	\
 | ||||||
|   %D%/packages/patches/icedtea-7-hotspot-aarch64-use-c++98.patch\
 |   %D%/packages/patches/icedtea-7-hotspot-aarch64-use-c++98.patch	\
 | ||||||
|  |   %D%/packages/patches/icedtea-7-hotspot-pointer-comparison.patch	\
 | ||||||
|   %D%/packages/patches/id3lib-CVE-2007-4460.patch			\
 |   %D%/packages/patches/id3lib-CVE-2007-4460.patch			\
 | ||||||
|   %D%/packages/patches/id3lib-UTF16-writing-bug.patch			\
 |   %D%/packages/patches/id3lib-UTF16-writing-bug.patch			\
 | ||||||
|   %D%/packages/patches/idris-test-ffi008.patch			\
 |   %D%/packages/patches/idris-test-ffi008.patch			\
 | ||||||
|  |  | ||||||
|  | @ -903,15 +903,23 @@ supports sufficient parts of Java 7 to build Icedtea 2.x.") | ||||||
|                      "openjdk.src/jdk/src/solaris/native/java/net/PlainDatagramSocketImpl.c") |                      "openjdk.src/jdk/src/solaris/native/java/net/PlainDatagramSocketImpl.c") | ||||||
|                  (("#include <sys/sysctl.h>") |                  (("#include <sys/sysctl.h>") | ||||||
|                   "#include <linux/sysctl.h>")) |                   "#include <linux/sysctl.h>")) | ||||||
|  | 
 | ||||||
|  |                ;; XXX 'ldd' in glibc 2.35 segfaults upon reading | ||||||
|  |                ;;   openjdk.build-boot/lib/amd64/libnio.so (!). | ||||||
|  |                ;; It is only used as a verification step, so ignore it; | ||||||
|  |                ;; try removing this substitution for newer versions of glibc. | ||||||
|  |                (substitute* "openjdk.src/jdk/make/common/shared/Defs-linux.gmk" | ||||||
|  |                  (("\\$\\(LDD\\) \\$1 &&") | ||||||
|  |                   "")) | ||||||
|  | 
 | ||||||
|                ;; It looks like the "h = 31 * h + c" line of the jsum() |                ;; It looks like the "h = 31 * h + c" line of the jsum() | ||||||
|                ;; function gets miscompiled. After a few iterations of the loop |                ;; function gets miscompiled. After a few iterations of the loop | ||||||
|                ;; the result of "31 * h" is always 0x8000000000000000. |                ;; the result of "31 * h" is always 0x8000000000000000. | ||||||
|                ;; Bad optimization maybe... |                ;; Disable optimizations of dump.cpp as a workaround. | ||||||
|                ;; Transform "31 * h + c" into a convoluted "32 * h + c - h" |                (substitute* "openjdk.src/hotspot/make/linux/makefiles/gcc.make" | ||||||
|                ;; as a workaround. |                  (("OPT_CFLAGS/NOOPT.*" all) | ||||||
|                (substitute* "openjdk.src/hotspot/src/share/vm/memory/dump.cpp" |                   (string-append all "\n" | ||||||
|                  (("h = 31 \\* h \\+ c;") |                                  "OPT_CFLAGS/dump.o += -O0"))))) | ||||||
|                   "jlong h0 = h;\nfor(int i = 0; i < 5; i++) h += h;\nh += c - h0;")))) |  | ||||||
|            (add-after 'unpack 'fix-x11-extension-include-path |            (add-after 'unpack 'fix-x11-extension-include-path | ||||||
|              (lambda* (#:key inputs #:allow-other-keys) |              (lambda* (#:key inputs #:allow-other-keys) | ||||||
|                (substitute* "openjdk.src/jdk/make/sun/awt/mawt.gmk" |                (substitute* "openjdk.src/jdk/make/sun/awt/mawt.gmk" | ||||||
|  | @ -1287,7 +1295,8 @@ supports sufficient parts of Java 7 to build Icedtea 2.x.") | ||||||
|               (base32 |               (base32 | ||||||
|                "17bdv39n4lh8l5737c96f3xgamx4y305m067p01cywgp7zaddqws")) |                "17bdv39n4lh8l5737c96f3xgamx4y305m067p01cywgp7zaddqws")) | ||||||
|              (patches (search-patches |              (patches (search-patches | ||||||
|                        "icedtea-7-hotspot-aarch64-use-c++98.patch")))) |                        "icedtea-7-hotspot-aarch64-use-c++98.patch" | ||||||
|  |                        "icedtea-7-hotspot-pointer-comparison.patch")))) | ||||||
|          ("ant" ,ant-bootstrap) |          ("ant" ,ant-bootstrap) | ||||||
|          ("attr" ,attr) |          ("attr" ,attr) | ||||||
|          ("classpath" ,classpath-devel) |          ("classpath" ,classpath-devel) | ||||||
|  |  | ||||||
|  | @ -0,0 +1,36 @@ | ||||||
|  | Avoid ordered comparison of pointer with integer to prevent compile error | ||||||
|  | with GCC 11. | ||||||
|  | 
 | ||||||
|  | diff --git a/src/share/vm/opto/lcm.cpp b/src/share/vm/opto/lcm.cpp
 | ||||||
|  | --- a/src/share/vm/opto/lcm.cpp
 | ||||||
|  | +++ b/src/share/vm/opto/lcm.cpp
 | ||||||
|  | @@ -60,7 +60,7 @@
 | ||||||
|  |  // Check whether val is not-null-decoded compressed oop, | ||||||
|  |  // i.e. will grab into the base of the heap if it represents NULL. | ||||||
|  |  static bool accesses_heap_base_zone(Node *val) { | ||||||
|  | -  if (Universe::narrow_oop_base() > 0) { // Implies UseCompressedOops.
 | ||||||
|  | +  if (Universe::narrow_oop_base() != NULL) { // Implies UseCompressedOops.
 | ||||||
|  |      if (val && val->is_Mach()) { | ||||||
|  |        if (val->as_Mach()->ideal_Opcode() == Op_DecodeN) { | ||||||
|  |          // This assumes all Decodes with TypePtr::NotNull are matched to nodes that | ||||||
|  | diff --git a/src/share/vm/runtime/virtualspace.cpp b/src/share/vm/runtime/virtualspace.cpp
 | ||||||
|  | --- a/src/share/vm/runtime/virtualspace.cpp
 | ||||||
|  | +++ b/src/share/vm/runtime/virtualspace.cpp
 | ||||||
|  | @@ -527,7 +527,7 @@ ReservedHeapSpace::ReservedHeapSpace(size_t size, size_t alignment,
 | ||||||
|  |                  (UseCompressedOops && (Universe::narrow_oop_base() != NULL) && | ||||||
|  |                   Universe::narrow_oop_use_implicit_null_checks()) ? | ||||||
|  |                    lcm(os::vm_page_size(), alignment) : 0) { | ||||||
|  | -  if (base() > 0) {
 | ||||||
|  | +  if (base() != NULL) {
 | ||||||
|  |      MemTracker::record_virtual_memory_type((address)base(), mtJavaHeap); | ||||||
|  |    } | ||||||
|  |   | ||||||
|  | @@ -546,7 +546,7 @@ ReservedHeapSpace::ReservedHeapSpace(const size_t prefix_size,
 | ||||||
|  |                  (UseCompressedOops && (Universe::narrow_oop_base() != NULL) && | ||||||
|  |                   Universe::narrow_oop_use_implicit_null_checks()) ? | ||||||
|  |                    lcm(os::vm_page_size(), prefix_align) : 0) { | ||||||
|  | -  if (base() > 0) {
 | ||||||
|  | +  if (base() != NULL) {
 | ||||||
|  |      MemTracker::record_virtual_memory_type((address)base(), mtJavaHeap); | ||||||
|  |    } | ||||||
|  |   | ||||||
		Reference in a new issue