25391510 Upgrade zlib to version 1.2.11 s11u3-sru
authorPetr Sumbera <petr.sumbera@oracle.com>
Tue, 04 Apr 2017 07:25:56 -0700
branchs11u3-sru
changeset 7889 a5ad77e24b54
parent 7888 eb95548e9e3c
child 7890 8f7cc4856a32
25391510 Upgrade zlib to version 1.2.11 25214399 problem in LIBRARY/LIBZ 25417002 ZLIB_VERSION is not fully numeric, breaks Python zlib test
components/zlib/Makefile
components/zlib/capabilities/sun4v/sparcv7/Makefile
components/zlib/capabilities/sun4v/sparcv7/longest_match_t4.s
components/zlib/capabilities/sun4v/sparcv9/longest_match_t4.s
components/zlib/llib-lz
components/zlib/mapfile
components/zlib/patches/manpage.patch
components/zlib/patches/parfait.patch
components/zlib/patches/perf.patch
components/zlib/zlib.license
--- a/components/zlib/Makefile	Wed Mar 22 01:52:40 2017 -0700
+++ b/components/zlib/Makefile	Tue Apr 04 07:25:56 2017 -0700
@@ -20,28 +20,31 @@
 #
 
 #
-# Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2011, 2017, Oracle and/or its affiliates. All rights reserved.
 #
 
 include ../../make-rules/shared-macros.mk
 
 COMPONENT_NAME=		zlib
-COMPONENT_VERSION=	1.2.8
+COMPONENT_VERSION=	1.2.11
 COMPONENT_PROJECT_URL=	http://www.zlib.net/
 COMPONENT_SRC=		$(COMPONENT_NAME)-$(COMPONENT_VERSION)
 COMPONENT_ARCHIVE=	$(COMPONENT_SRC).tar.gz
 COMPONENT_ARCHIVE_HASH=	\
-    sha256:36658cb768a54c1d4dec43c3116c27ed893e88b02ecfcb44f2166f9c0b7f2a0d
+    sha256:c3e5e9fdd5004dcb542feda5ee4f0ff0744628baf8ed2dd5d66f8ca1197cb1a1
 COMPONENT_ARCHIVE_URL=	http://downloads.sourceforge.net/project/libpng/zlib/$(COMPONENT_VERSION)/$(COMPONENT_ARCHIVE)
 COMPONENT_BUGDB=	library/libz
 
-TPNO=			17611
+TPNO=			33488
 
 include $(WS_MAKE_RULES)/prep.mk
 include $(WS_MAKE_RULES)/configure.mk
 include $(WS_MAKE_RULES)/ips.mk
 include $(WS_MAKE_RULES)/lint-libraries.mk
 
+# Newer compiler is needed to build optimized sparcv7/symcap.o.
+SPRO_VROOT = $(SPRO_ROOT)/solarisstudio12.4
+
 #
 # We want to build hardware specific versions of the longest_match()
 # function into our shared library that has been hand optimised to use
@@ -102,7 +105,7 @@
 
 $(BUILD_DIR)/sparc%/.built: COMPONENT_PRE_BUILD_ACTION = ( \
 	cd capabilities; \
-	$(ENV) SUBDIRS="sun4v" BUILD_ARCH=$* $(GMAKE) build )
+	$(ENV) SUBDIRS="sun4v" BUILD_ARCH=$* CC=$(CC) $(GMAKE) build )
 
 COMPONENT_TEST_TARGETS = test
 
@@ -113,7 +116,7 @@
 test:		$(TEST_32_and_64)
 
 clean::
-	$(RM) -r $(BUILD_DIR) $(PROTO_DIR) capabilities/*/*/*.o
+	$(RM) -r $(BUILD_DIR) $(PROTO_DIR) capabilities/*/*/*.o capabilities/*/$(MACH32)/*.s
 
 
 REQUIRED_PACKAGES += system/library
--- a/components/zlib/capabilities/sun4v/sparcv7/Makefile	Wed Mar 22 01:52:40 2017 -0700
+++ b/components/zlib/capabilities/sun4v/sparcv7/Makefile	Tue Apr 04 07:25:56 2017 -0700
@@ -20,20 +20,25 @@
 #
 
 #
-# Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2012, 2017, Oracle and/or its affiliates. All rights reserved.
 #
 
 include		../Makefile.com
 include		../../Makefile.com
 
-CFLAGS += -xarch=sparc
+CFLAGS += -xarch=sparc4 -xtarget=T4 -xchip=T4 -xO5
 CPPFLAGS += -D__sparc
 ASFLAGS = -m32 -K PIC -xarch=sparc4
 
 include		../Makefile.targ
 include		../../Makefile.targ
 
+DEFLATE_C=../../../build/$(BUILD_ARCH)/deflate.c
+
+longest_match_t4.s: $(DEFLATE_C)
+	$(CC) $(CFLAGS) -DLONGEST_MATCH_ONLY -DORIG_LONGEST_MATCH_GLOBAL -S -o $@ $(DEFLATE_C)
+
 all build:	$(SYMCAP)
 
 clean:
-	$(RM) *.o
+	$(RM) *.o *.s
--- a/components/zlib/capabilities/sun4v/sparcv7/longest_match_t4.s	Wed Mar 22 01:52:40 2017 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,689 +0,0 @@
-!
-! This file was generated by a compiler that is currently not part of the CBE
-! as the CBE compiler does not generate code for the T4 architecture. If
-! such a compiler (e.g. the Oracle Studio 12.3) becomes part of the CBE
-! the longest_match.o file can simply be comp[iled from longest_match.c
-! as for the 32-bit version, no modifications were made.
-!
-
-	.section	".text",#alloc,#execinstr,#progbits
-	.file	"longest_match.c"
-
-	.section	".bss",#alloc,#write,#nobits
-
-Bbss.bss:
-
-	.section	".data",#alloc,#write,#progbits
-
-Ddata.data:
-
-	.section	".rodata",#alloc,#progbits
-!
-! CONSTANT POOL
-!
-
-Drodata.rodata:
-	.global	deflate_lm_copyright
-!
-! CONSTANT POOL
-!
-	.global deflate_lm_copyright
-
-deflate_lm_copyright:
-	.byte	32
-	.byte	100
-	.byte	101
-	.byte	102
-	.byte	108
-	.byte	97
-	.byte	116
-	.byte	101
-	.byte	47
-	.byte	108
-	.byte	111
-	.byte	110
-	.byte	103
-	.byte	101
-	.byte	115
-	.byte	116
-	.byte	95
-	.byte	109
-	.byte	97
-	.byte	116
-	.byte	99
-	.byte	104
-	.byte	32
-	.byte	49
-	.byte	46
-	.byte	50
-	.byte	46
-	.byte	51
-	.byte	32
-	.byte	67
-	.byte	111
-	.byte	112
-	.byte	121
-	.byte	114
-	.byte	105
-	.byte	103
-	.byte	104
-	.byte	116
-	.byte	32
-	.byte	49
-	.byte	57
-	.byte	57
-	.byte	53
-	.byte	45
-	.byte	50
-	.byte	48
-	.byte	48
-	.byte	53
-	.byte	32
-	.byte	74
-	.byte	101
-	.byte	97
-	.byte	110
-	.byte	45
-	.byte	108
-	.byte	111
-	.byte	117
-	.byte	112
-	.byte	32
-	.byte	71
-	.byte	97
-	.byte	105
-	.byte	108
-	.byte	108
-	.byte	121
-	.byte	32
-	.skip	1
-	.type	deflate_lm_copyright,#object
-	.size	deflate_lm_copyright,67
-
-	.section	".tbss",#alloc,#write,#tls,#nobits
-
-Ttbss.bss:
-
-	.section	".tdata",#alloc,#write,#tls,#progbits
-
-Ttdata.data:
-
-	.section	".text",#alloc,#execinstr,#progbits
-/* 000000	   0 */		.align	4
-! FILE longest_match.c
-
-!    1		      !/* deflate.c -- compress data using the deflation algorithm
-!    2		      ! * Copyright (C) 1995-2005 Jean-loup Gailly.
-!    3		      ! * For conditions of distribution and use, see copyright notice in zlib.h
-!    4		      ! */
-!    6		      !/*
-!    7		      ! * This file contains the longest_match() function cut out from the original
-!    8		      ! * deflate.c file - this was necessary so that the compiler do not inline
-!    9		      ! * this function and so architecture-specific versions of it may be built
-!   10		      ! * that can use the linker's capabilities-based linking feature to produce
-!   11		      ! * the best executable for all platforms.
-!   12		      ! */
-!   14		      !/* @(#) $Id$ */
-!   16		      !#include "deflate.h"
-!   18		      !const char deflate_lm_copyright[] =
-!   19		      !   " deflate/longest_match 1.2.3 Copyright 1995-2005 Jean-loup Gailly ";
-!   20		      !/*
-!   21		      !  If you use the zlib library in a product, an acknowledgment is welcome
-!   22		      !  in the documentation of your product. If for some reason you cannot
-!   23		      !  include such an acknowledgment, I would appreciate that you keep this
-!   24		      !  copyright string in the executable of your product.
-!   25		      ! */
-!   27		      !#define NIL 0
-!   29		      !#ifndef FASTEST
-!   30		      !#ifdef ASMV
-!   31		      !      void match_init OF((void)); /* asm code initialization */
-!   32		      !      uInt longest_match  OF((deflate_state *s, IPos cur_match));
-!   33		      !#else
-!   34		      !uInt longest_match  OF((deflate_state *s, IPos cur_match));
-!   35		      !#endif
-!   37		      !/* ===========================================================================
-!   38		      ! * Set match_start to the longest match starting at the given string and
-!   39		      ! * return its length. Matches shorter or equal to prev_length are discarded,
-!   40		      ! * in which case the result is equal to prev_length and match_start is
-!   41		      ! * garbage.
-!   42		      ! * IN assertions: cur_match is the head of the hash chain for the current
-!   43		      ! *   string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1
-!   44		      ! * OUT assertion: the match length is not greater than s->lookahead.
-!   45		      ! */
-!   46		      !#ifndef ASMV
-!   47		      !/* For 80x86 and 680x0, an optimized version will be provided in match.asm or
-!   48		      ! * match.S. The code will be functionally equivalent.
-!   49		      ! */
-!   50		      !uInt longest_match(s, cur_match)
-!   51		      !    deflate_state *s;
-!   52		      !    IPos cur_match;                             /* current match */
-!   53		      !{
-
-!
-! SUBROUTINE longest_match
-!
-! OFFSET    SOURCE LINE	LABEL	INSTRUCTION
-
-                       	.global longest_match
-                       
-
-			longest_match:
-
-! Registers live out of longest_match: 
-! g2 o1 sp l1 l2 l4 l5 l6 i0 i1 i2 i3 i4 fp gsr 
-! 
-		                       
-
-			.L900000109:
-/* 000000	  53 */		save	%sp,-96,%sp
-
-!   54		      !    unsigned chain_length = s->max_chain_length;/* max hash chain length */
-!   55		      !    register Bytef *scan = s->window + s->strstart; /* current string */
-
-/* 0x0004	  55 */		ld	[%i0+108],%l4
-/* 0x0008	     */		ld	[%i0+56],%l5
-
-!   56		      !    register Bytef *match;                       /* matched string */
-!   57		      !    register int len;                           /* length of current match */
-!   58		      !    int best_len = s->prev_length;              /* best match length so far */
-!   59		      !    int nice_match = s->nice_match;             /* stop if match long enough */
-!   60		      !    IPos limit = s->strstart > (IPos)MAX_DIST(s) ?
-!   61		      !        s->strstart - (IPos)MAX_DIST(s) : NIL;
-
-/* 0x000c	  61 */		mov	0,%l6
-/* 0x0010	     */		ld	[%i0+44],%i5
-/* 0x0014	  58 */		ld	[%i0+120],%i2
-/* 0x0018	  54 */		ld	[%i0+124],%o1
-/* 0x001c	  59 */		ld	[%i0+144],%g2
-/* 0x0020	  93 */		ld	[%i0+116],%i3
-/* 0x0024	  55 */		add	%l5,%l4,%i4
-/* 0x0028	  87 */		ld	[%i0+140],%l1
-/* 0x002c	  61 */		add	%i5,-262,%l3
-/* 0x0030	  77 */		add	%i4,%i2,%l2
-/* 0x0034	  61 */		cwbleu	%l4,%l3,.L77000163
-                       
-! predecessor blocks: .L900000109
-
-			.L77000159:
-/* 0x0038	  61 */		sub	%l4,%l3,%l6
-
-! Registers live out of .L77000159: 
-! g2 o1 sp l1 l2 l5 l6 i0 i1 i2 i3 i4 fp gsr 
-! 
-		
-!   62		      !    /* Stop when cur_match becomes <= limit. To simplify the code,
-!   63		      !     * we prevent matches with the string of window index 0.
-!   64		      !     */
-!   65		      !    Posf *prev = s->prev;
-!   66		      !    uInt wmask = s->w_mask;
-!   68		      !#ifdef UNALIGNED_OK
-!   69		      !    /* Compare two bytes at a time. Note: this is not always beneficial.
-!   70		      !     * Try with and without -DUNALIGNED_OK to check.
-!   71		      !     */
-!   72		      !    register Bytef *strend = s->window + s->strstart + MAX_MATCH - 1;
-!   73		      !    register ush scan_start = *(ushf*)scan;
-!   74		      !    register ush scan_end   = *(ushf*)(scan+best_len-1);
-!   75		      !#else
-!   76		      !    register Bytef *strend = s->window + s->strstart + MAX_MATCH;
-!   77		      !    register Byte scan_end1  = scan[best_len-1];
-
-                       
-! predecessor blocks: .L77000159 .L900000109
-
-			.L77000163:
-/* 0x003c	  77 */		ldub	[%l2-1],%l4
-
-!   78		      !    register Byte scan_end   = scan[best_len];
-!   79		      !#endif
-!   81		      !    /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16.
-!   82		      !     * It is easy to get rid of this optimization if necessary.
-!   83		      !     */
-!   84		      !    Assert(s->hash_bits >= 8 && MAX_MATCH == 258, "Code too clever");
-!   86		      !    /* Do not waste too much time if we already have a good match: */
-!   87		      !    if (s->prev_length >= s->good_match) {
-
-/* 0x0040	  87 */		cmp	%i2,%l1
-/* 0x0044	  78 */		ldub	[%i4+%i2],%l3
-/* 0x0048	  76 */		add	%i4,258,%l7
-/* 0x004c	  66 */		ld	[%i0+52],%l1
-/* 0x0050	  65 */		ld	[%i0+64],%l2
-/* 0x0054	  87 */		bcs,pn	%icc,.L77000167
-/* 0x0058	  93 */		cmp	%g2,%i3
-
-! Registers live out of .L77000163: 
-! g2 o1 sp l1 l2 l4 l5 l6 l7 i0 i1 i2 i3 i4 fp gsr 
-! 
-		
-!   88		      !        chain_length >>= 2;
-
-                       
-! predecessor blocks: .L77000163
-
-			.L77000165:
-/* 0x005c	  88 */		srl	%o1,2,%o1
-
-! Registers live out of .L77000165: 
-! g2 o1 sp l1 l2 l4 l5 l6 l7 i0 i1 i2 i3 i4 fp gsr 
-! 
-		
-!   89		      !    }
-!   90		      !    /* Do not look for matches beyond the end of the input. This is necessary
-!   91		      !     * to make deflate deterministic.
-!   92		      !     */
-!   93		      !    if ((uInt)nice_match > s->lookahead) nice_match = s->lookahead;
-
-                       
-! predecessor blocks: .L77000163 .L77000165
-
-			.L77000167:
-/* 0x0060	  93 */		movgu	%icc,%i3,%g2
-
-!   95		      !    Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, "need lookahead");
-!   97		      !    do {
-!   98		      !        Assert(cur_match < s->strstart, "no future");
-!   99		      !        match = s->window + cur_match;
-
-/* 0x0064	  99 */		add	%i1,%l5,%g3
-
-! Registers live out of .L77000167: 
-! g2 g3 o1 sp l1 l2 l4 l5 l6 l7 i0 i1 i2 i3 i4 fp gsr 
-! 
-		
-!  101		      !        /* Skip to next match if the match length cannot increase
-!  102		      !         * or if the match length is less than 2.  Note that the checks below
-!  103		      !         * for insufficient lookahead only occur occasionally for performance
-!  104		      !         * reasons.  Therefore uninitialized memory will be accessed, and
-!  105		      !         * conditional jumps will be made that depend on those values.
-!  106		      !         * However the length of the match is limited to the lookahead, so
-!  107		      !         * the output of deflate is not affected by the uninitialized values.
-!  108		      !         */
-!  109		      !#if (defined(UNALIGNED_OK) && MAX_MATCH == 258)
-!  110		      !        /* This code assumes sizeof(unsigned short) == 2. Do not use
-!  111		      !         * UNALIGNED_OK if your compiler uses a different size.
-!  112		      !         */
-!  113		      !        if (*(ushf*)(match+best_len-1) != scan_end ||
-!  114		      !            *(ushf*)match != scan_start) continue;
-!  116		      !        /* It is not necessary to compare scan[2] and match[2] since they are
-!  117		      !         * always equal when the other bytes match, given that the hash keys
-!  118		      !         * are equal and that HASH_BITS >= 8. Compare 2 bytes at a time at
-!  119		      !         * strstart+3, +5, ... up to strstart+257. We check for insufficient
-!  120		      !         * lookahead only every 4th comparison; the 128th check will be made
-!  121		      !         * at strstart+257. If MAX_MATCH-2 is not a multiple of 8, it is
-!  122		      !         * necessary to put more guard bytes at the end of the window, or
-!  123		      !         * to check more often for insufficient lookahead.
-!  124		      !         */
-!  125		      !        Assert(scan[2] == match[2], "scan[2]?");
-!  126		      !        scan++, match++;
-!  127		      !        do {
-!  128		      !        } while (*(ushf*)(scan+=2) == *(ushf*)(match+=2) &&
-!  129		      !                 *(ushf*)(scan+=2) == *(ushf*)(match+=2) &&
-!  130		      !                 *(ushf*)(scan+=2) == *(ushf*)(match+=2) &&
-!  131		      !                 *(ushf*)(scan+=2) == *(ushf*)(match+=2) &&
-!  132		      !                 scan < strend);
-!  133		      !        /* The funny "do {}" generates better code on most compilers */
-!  135		      !        /* Here, scan <= window+strstart+257 */
-!  136		      !        Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan");
-!  137		      !        if (*scan == *match) scan++;
-!  139		      !        len = (MAX_MATCH - 1) - (int)(strend-scan);
-!  140		      !        scan = strend - (MAX_MATCH-1);
-!  142		      !#else /* UNALIGNED_OK */
-!  144		      !        if (match[best_len]   != scan_end  ||
-!  145		      !            match[best_len-1] != scan_end1 ||
-!  146		      !            *match            != *scan     ||
-!  147		      !            *++match          != scan[1])      continue;
-
-                       
-! predecessor blocks: .L77000167 .L77000219
-
-			.L900000107:
-/* 0x0068	 147 */		ldub	[%g3+%i2],%o3
-/* 0x006c	     */		cwbne	%o3,%l3,.L77000217
-
-! Registers live out of .L900000107: 
-! g2 g3 o1 sp l1 l2 l4 l5 l6 l7 i0 i1 i2 i3 i4 fp gsr 
-! 
-		                       
-! predecessor blocks: .L900000107
-
-			.L77000175:
-/* 0x0070	 147 */		add	%g3,%i2,%g4
-/* 0x0074	     */		ldub	[%g4-1],%o4
-/* 0x0078	     */		cwbne	%o4,%l4,.L77000217
-
-! Registers live out of .L77000175: 
-! g2 g3 o1 sp l1 l2 l4 l5 l6 l7 i0 i1 i2 i3 i4 fp gsr 
-! 
-		                       
-! predecessor blocks: .L77000175
-
-			.L77000177:
-/* 0x007c	 147 */		ldub	[%l5+%i1],%o5
-/* 0x0080	     */		ldub	[%i4],%o7
-/* 0x0084	     */		cwbne	%o5,%o7,.L77000217
-
-! Registers live out of .L77000177: 
-! g2 g3 o1 sp l1 l2 l4 l5 l6 l7 i0 i1 i2 i3 i4 fp gsr 
-! 
-		                       
-! predecessor blocks: .L77000177
-
-			.L77000179:
-/* 0x0088	 147 */		ldub	[%i4+1],%i5
-/* 0x008c	     */		ldub	[%g3+1],%l0
-/* 0x0090	     */		cwbne	%l0,%i5,.L77000217
-
-! Registers live out of .L77000179: 
-! g2 g3 o1 sp l1 l2 l4 l5 l6 l7 i0 i1 i2 i3 i4 fp gsr 
-! 
-		
-!  149		      !        /* The check at best_len-1 can be removed because it will be made
-!  150		      !         * again later. (This heuristic is not always a win.)
-!  151		      !         * It is not necessary to compare scan[2] and match[2] since they
-!  152		      !         * are always equal when the other bytes match, given that
-!  153		      !         * the hash keys are equal and that HASH_BITS >= 8.
-!  154		      !         */
-!  155		      !        scan += 2, match++;
-
-                       
-! predecessor blocks: .L77000179
-
-			.L77000185:
-/* 0x0094	 155 */		add	%i4,2,%g4
-/* 0x0098	     */		add	%g3,2,%g3
-
-! Registers live out of .L77000185: 
-! g2 g3 g4 o1 sp l1 l2 l4 l5 l6 l7 i0 i1 i2 i3 i4 fp gsr 
-! 
-		
-!  156		      !        Assert(*scan == *match, "match[2]?");
-!  158		      !        /* We check for insufficient lookahead only every 8th comparison;
-!  159		      !         * the 256th check will be made at strstart+258.
-!  160		      !         */
-!  161		      !        do {
-!  162		      !        } while (*++scan == *++match && *++scan == *++match &&
-!  163		      !                 *++scan == *++match && *++scan == *++match &&
-!  164		      !                 *++scan == *++match && *++scan == *++match &&
-!  165		      !                 *++scan == *++match && *++scan == *++match &&
-!  166		      !                 scan < strend);
-
-                       
-! predecessor blocks: .L77000185 .L77000203
-
-			.L77000187:
-/* 0x009c	 166 */		ldub	[%g4+1],%g1
-/* 0x00a0	     */		add	%g4,1,%g4
-/* 0x00a4	     */		ldub	[%g3+1],%g5
-/* 0x00a8	     */		cwbne	%g1,%g5,.L77000207
-
-! Registers live out of .L77000187: 
-! g2 g3 g4 o1 sp l1 l2 l4 l5 l6 l7 i0 i1 i2 i3 i4 fp gsr 
-! 
-		                       
-! predecessor blocks: .L77000187
-
-			.L77000189:
-/* 0x00ac	 166 */		ldub	[%g4+1],%o0
-/* 0x00b0	     */		add	%g4,1,%g4
-/* 0x00b4	     */		ldub	[%g3+2],%o2
-/* 0x00b8	     */		cwbne	%o0,%o2,.L77000207
-
-! Registers live out of .L77000189: 
-! g2 g3 g4 o1 sp l1 l2 l4 l5 l6 l7 i0 i1 i2 i3 i4 fp gsr 
-! 
-		                       
-! predecessor blocks: .L77000189
-
-			.L77000191:
-/* 0x00bc	 166 */		ldub	[%g4+1],%o3
-/* 0x00c0	     */		add	%g4,1,%g4
-/* 0x00c4	     */		ldub	[%g3+3],%o4
-/* 0x00c8	     */		cwbne	%o3,%o4,.L77000207
-
-! Registers live out of .L77000191: 
-! g2 g3 g4 o1 sp l1 l2 l4 l5 l6 l7 i0 i1 i2 i3 i4 fp gsr 
-! 
-		                       
-! predecessor blocks: .L77000191
-
-			.L77000193:
-/* 0x00cc	 166 */		ldub	[%g4+1],%o5
-/* 0x00d0	     */		add	%g4,1,%g4
-/* 0x00d4	     */		ldub	[%g3+4],%o7
-/* 0x00d8	     */		cwbne	%o5,%o7,.L77000207
-
-! Registers live out of .L77000193: 
-! g2 g3 g4 o1 sp l1 l2 l4 l5 l6 l7 i0 i1 i2 i3 i4 fp gsr 
-! 
-		                       
-! predecessor blocks: .L77000193
-
-			.L77000195:
-/* 0x00dc	 166 */		ldub	[%g4+1],%l0
-/* 0x00e0	     */		add	%g4,1,%g4
-/* 0x00e4	     */		ldub	[%g3+5],%i5
-/* 0x00e8	     */		cwbne	%l0,%i5,.L77000207
-
-! Registers live out of .L77000195: 
-! g2 g3 g4 o1 sp l1 l2 l4 l5 l6 l7 i0 i1 i2 i3 i4 fp gsr 
-! 
-		                       
-! predecessor blocks: .L77000195
-
-			.L77000197:
-/* 0x00ec	 166 */		ldub	[%g4+1],%g1
-/* 0x00f0	     */		add	%g4,1,%g4
-/* 0x00f4	     */		ldub	[%g3+6],%g5
-/* 0x00f8	     */		cwbne	%g1,%g5,.L77000207
-
-! Registers live out of .L77000197: 
-! g2 g3 g4 o1 sp l1 l2 l4 l5 l6 l7 i0 i1 i2 i3 i4 fp gsr 
-! 
-		                       
-! predecessor blocks: .L77000197
-
-			.L77000199:
-/* 0x00fc	 166 */		ldub	[%g4+1],%o0
-/* 0x0100	     */		add	%g4,1,%g4
-/* 0x0104	     */		ldub	[%g3+7],%o2
-/* 0x0108	     */		cwbne	%o0,%o2,.L77000207
-
-! Registers live out of .L77000199: 
-! g2 g3 g4 o1 sp l1 l2 l4 l5 l6 l7 i0 i1 i2 i3 i4 fp gsr 
-! 
-		                       
-! predecessor blocks: .L77000199
-
-			.L77000201:
-/* 0x010c	 166 */		ldub	[%g4+1],%o3
-/* 0x0110	     */		add	%g4,1,%g4
-/* 0x0114	     */		ldub	[%g3+8],%o4
-/* 0x0118	     */		add	%g3,8,%g3
-/* 0x011c	     */		cwbne	%o3,%o4,.L77000207
-/* 0x0120	     */		nop
-
-! Registers live out of .L77000201: 
-! g2 g3 g4 o1 sp l1 l2 l4 l5 l6 l7 i0 i1 i2 i3 i4 fp gsr 
-! 
-		                       
-! predecessor blocks: .L77000201
-
-			.L77000203:
-/* 0x0124	 166 */		cwbcs	%g4,%l7,.L77000187
-
-! Registers live out of .L77000203: 
-! g2 g3 g4 o1 sp l1 l2 l4 l5 l6 l7 i0 i1 i2 i3 i4 fp gsr 
-! 
-		
-!  168		      !        Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan");
-!  170		      !        len = MAX_MATCH - (int)(strend - scan);
-
-                       
-! predecessor blocks: .L77000187 .L77000189 .L77000191 .L77000193 .L77000195 .L77000197 .L77000199 .L77000201 .L77000203
-
-			.L77000207:
-/* 0x0128	 170 */		sub	%g4,%l7,%o7
-/* 0x012c	     */		add	%o7,258,%o5
-
-!  171		      !        scan = strend - MAX_MATCH;
-!  173		      !#endif /* UNALIGNED_OK */
-!  175		      !        if (len > best_len) {
-
-/* 0x0130	 175 */		cwble	%o5,%i2,.L77000217
-
-! Registers live out of .L77000207: 
-! g2 o1 o5 sp l1 l2 l4 l5 l6 l7 i0 i1 i2 i3 i4 fp gsr 
-! 
-		
-!  176		      !            s->match_start = cur_match;
-
-                       
-! predecessor blocks: .L77000207
-
-			.L77000209:
-/* 0x0134	 176 */		st	%i1,[%i0+112]
-
-!  177		      !            best_len = len;
-
-/* 0x0138	 177 */		mov	%o5,%i2
-
-!  178		      !            if (len >= nice_match) break;
-
-/* 0x013c	 178 */		cwbge	%o5,%g2,.L77000225
-
-! Registers live out of .L77000209: 
-! g2 o1 o5 sp l1 l2 l5 l6 l7 i0 i1 i2 i3 i4 fp gsr 
-! 
-		
-!  179		      !#ifdef UNALIGNED_OK
-!  180		      !            scan_end = *(ushf*)(scan+best_len-1);
-!  181		      !#else
-!  182		      !            scan_end1  = scan[best_len-1];
-
-                       
-! predecessor blocks: .L77000209
-
-			.L77000213:
-/* 0x0140	 182 */		add	%i4,%o5,%l4
-
-!  183		      !            scan_end   = scan[best_len];
-
-/* 0x0144	 183 */		ldub	[%i4+%o5],%l3
-/* 0x0148	 182 */		ldub	[%l4-1],%l4
-
-! Registers live out of .L77000213: 
-! g2 o1 sp l1 l2 l4 l5 l6 l7 i0 i1 i2 i3 i4 fp gsr 
-! 
-		
-!  184		      !#endif
-!  185		      !        }
-!  186		      !    } while ((cur_match = prev[cur_match & wmask]) > limit
-!  187		      !             && --chain_length != 0);
-
-                       
-! predecessor blocks: .L77000175 .L77000177 .L77000179 .L77000207 .L77000213 .L900000107
-
-			.L77000217:
-/* 0x014c	 187 */		and	%i1,%l1,%i1
-/* 0x0150	     */		sll	%i1,1,%l0
-/* 0x0154	     */		lduh	[%l0+%l2],%i1
-/* 0x0158	     */		cwbleu	%i1,%l6,.L77000225
-
-! Registers live out of .L77000217: 
-! g2 o1 sp l1 l2 l4 l5 l6 l7 i0 i1 i2 i3 i4 fp gsr 
-! 
-		                       
-! predecessor blocks: .L77000217
-
-			.L77000219:
-/* 0x015c	 187 */		addcc	%o1,-1,%o1
-/* 0x0160	     */		bne,pt	%icc,.L900000107
-/* 0x0164	  99 */		add	%i1,%l5,%g3
-
-! Registers live out of .L77000219: 
-! g2 g3 o1 sp l1 l2 l4 l5 l6 l7 i0 i1 i2 i3 i4 fp gsr 
-! 
-		
-!  189		      !    if ((uInt)best_len <= s->lookahead) return (uInt)best_len;
-
-                       
-! predecessor blocks: .L77000209 .L77000217 .L77000219
-
-			.L77000225:
-/* 0x0168	 189 */		mov	%i3,%i0
-/* 0x016c	     */		cmp	%i2,%i3
-/* 0x0170	     */		movleu	%icc,%i2,%i0
-
-!  190		      !    return s->lookahead;
-
-/* 0x0174	 190 */		return	%i7+8	! Result =  %i0
-/* 0x0178	     */		nop
-/* 0x017c	   0 */		.type	longest_match,#function
-/* 0x017c	   0 */		.size	longest_match,(.-longest_match)
-                       
-
-			.L900000110:
-
-	.section	".text",#alloc,#execinstr,#progbits
-                       
-
-			.L900000112:
-
-	.section	".annotate",#progbits
-/* 000000	   0 */		.asciz	"anotate"
-/* 0x0008	   0 */		.half	6,0
-/* 0x000c	   0 */		.word	28
-/* 0x0010	   0 */		.half	0,8
-/* 0x0014	   0 */		.word	(.L900000112-0x17c)
-/* 0x0018	   0 */		.word	380
-/* 0x001c	   0 */		.half	1,12
-/* 0x0020	   0 */		.word	.L900000109
-/* 0x0024	   0 */		.word	(.L900000110-.L900000109)
-/* 0x0028	   0 */		.word	1577088
-
-! Begin Disassembling Debug Info
-!  Begin sdCreateSection : .debug_info
-!  Section Info: link_name/strtab=, entsize=0x1, adralign=0x1, flags=0x0
-!  Section Data Blocks:
-!   reloc[0]: knd=2, off=6, siz=4, lab1=.debug_abbrev, lab2=, loff=0
-!   reloc[1]: knd=2, off=286, siz=4, lab1=.debug_line, lab2=, loff=0
-	.section ".debug_info"
-	.byte 0x00,0x00,0x01,0x1f,0x00,0x02
-	.uaword %section_symbol(".debug_abbrev")
-	.byte 0x04,0x01
-	.ascii "longest_match.c\0"
-	.byte 0x0c
-	.ascii "/builds/frakoczi/userland_s11u1/zlib-t4/components/zlib/build/sparcv7\0"
-	.ascii " /ws/onnv-tools/SUNWspro/solarisstudio12.3/prod/bin/cc -xtarget=T4 -xarch=sparc4 -xchip=T4 -xO5 -S  longest_match.c\0"
-	.ascii "Xa;O;R=Sun C 5.12 SunOS_sparc 2011/11/16;backend;raw;cd;\0"
-	.ascii "DBG_GEN 5.3.3\0"
-	.uaword %section_symbol(".debug_line")
-	.byte 0x00
-!  End sdCreateSection
-!  Begin sdCreateSection : .debug_line
-!  Section Info: link_name/strtab=, entsize=0x1, adralign=0x1, flags=0x0
-!  Section Data Blocks:
-	.section ".debug_line"
-	.byte 0x00,0x00,0x00,0x29,0x00,0x02,0x00,0x00
-	.byte 0x00,0x23,0x04,0x00,0xff,0x04,0x0a,0x00
-	.byte 0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x01
-	.byte 0x00,0x6c,0x6f,0x6e,0x67,0x65,0x73,0x74
-	.byte 0x5f,0x6d,0x61,0x74,0x63,0x68,0x2e,0x63
-	.byte 0x00,0x00,0x00,0x00,0x00
-!  End sdCreateSection
-!  Begin sdCreateSection : .debug_abbrev
-!  Section Info: link_name/strtab=, entsize=0x1, adralign=0x1, flags=0x0
-!  Section Data Blocks:
-	.section ".debug_abbrev"
-	.byte 0x01,0x11,0x00,0x03,0x08,0x13,0x0b,0x1b
-	.byte 0x08,0x85,0x44,0x08,0x87,0x44,0x08,0x25
-	.byte 0x08,0x10,0x06,0x00,0x00,0x00
-!  End sdCreateSection
-
-! End Disassembling Debug Info
-
-! Begin Disassembling Ident
-	.ident	"cg: Sun Compiler Common 12.3 SunOS_sparc 2011/11/16"	! (NO SOURCE LINE)
-	.ident	"acomp: Sun C 5.12 SunOS_sparc 2011/11/16"	! (/tmp/acomp.1337176051.3981.02.sd:84)
-	.ident	"iropt: Sun Compiler Common 12.3 SunOS_sparc 2011/11/16"	! (/tmp/acomp.1337176051.3981.02.sd:85)
-	.ident	"cg: Sun Compiler Common 12.3 SunOS_sparc 2011/11/16"	! (NO SOURCE LINE)
-! End Disassembling Ident
--- a/components/zlib/capabilities/sun4v/sparcv9/longest_match_t4.s	Wed Mar 22 01:52:40 2017 -0700
+++ b/components/zlib/capabilities/sun4v/sparcv9/longest_match_t4.s	Tue Apr 04 07:25:56 2017 -0700
@@ -96,20 +96,20 @@
 
 			.L900000112:
 	save      %sp, -0xb0, %sp
-	 ld        [%i0 + 0x4c], %l4	!7
-	 ldn       [%i0 + 0x60], %l5	!7
+	 ld        [%i0 + 0x58], %l4	!7
+	 ldn       [%i0 + 0x70], %l5	!7
 	 and       %i1, %l4, %l2	!7
 	 prefetch [%l5 + %l2], #n_reads	!7
-!7	ld        [%i0 + 0x9c], %l4
-	 ld        [%i0 + 0x9c], %l1	!7
-	ld        [%i0 + 0x44], %l6
+!7	ld        [%i0 + 0xac], %l4
+	 ld        [%i0 + 0xac], %l1	!7
+	ld        [%i0 + 0x50], %l6
 	clr       %g4
-	ldn       [%i0 + 0x50], %g1
-	ld        [%i0 + 0xa8], %i2
-	ld        [%i0 + 0xac], %g5
-	ld        [%i0 + 0xc0], %o0
+	ldn       [%i0 + 0x60], %g1
+	ld        [%i0 + 0xb8], %i2
+	ld        [%i0 + 0xbc], %g5
+	ld        [%i0 + 0xd0], %o0
 !5	srl       %l4, 0x0, %l5
-	ld        [%i0 + 0xbc], %l7
+	ld        [%i0 + 0xcc], %l7
 	add       %l6, -0x106, %i3
 !5	add       %g1, %l5, %i4
 !7	 add       %g1, %l4, %i4	!5
@@ -120,9 +120,9 @@
 	 sub       %l1, %i3, %g4	!7
 		
 lm_0x38:
-!7	ld        [%i0 + 0x4c], %l4
+!7	ld        [%i0 + 0x5c], %l4
 !4	add       %i2, -0x1, %l3
-!7	ldn       [%i0 + 0x60], %l5
+!7	ldn       [%i0 + 0x70], %l5
 !4	sra       %l3, 0x0, %o2
 	 add       %i2, -0x1, %o2	!4
 	ldub      [%i4 + %o2], %o2
@@ -131,7 +131,7 @@
 	 ldub      [%i4 + %i2], %o1	!3
 	cmp       %i2, %l7
 	add       %i4, 0x102, %l7
-	ld        [%i0 + 0xa4], %i3
+	ld        [%i0 + 0xb4], %i3
 	bcs,pn    %icc, lm_0x6c
 	mov       0x102, %l3
 
@@ -241,7 +241,7 @@
 	sub       %l3, %l0, %o7
 	cwble     %o7, %i2, lm_0x17c
 
-	st        %i1, [%i0 + 0xa0]
+	st        %i1, [%i0 + 0xb0]
 	mov       %o7, %i2
 	cwbge     %o7, %o0, lm_0x190
 
--- a/components/zlib/llib-lz	Wed Mar 22 01:52:40 2017 -0700
+++ b/components/zlib/llib-lz	Tue Apr 04 07:25:56 2017 -0700
@@ -20,7 +20,7 @@
  */
 
 /*
- * Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.
  */
 
 /* LINTLIBRARY */
@@ -37,6 +37,7 @@
 int deflateInit2_(z_streamp strm, int  level, int  method, int windowBits,
     int memLevel, int strategy, const char *version, int stream_size);
 int deflate(z_streamp strm, int flush);
+int deflateGetDictionary(z_streamp strm, Bytef *dictionary, uInt *dictLength);
 int deflateSetDictionary(z_streamp strm, const Bytef *dictionary,
     uInt dictLength);
 int deflateCopy(z_streamp dest, z_streamp source);
@@ -74,6 +75,8 @@
 uLong compressBound(uLong sourceLen);
 int uncompress(Bytef *dest, uLongf *destLen, const Bytef *source,
     uLong sourceLen);
+int uncompress2(Bytef *dest, uLongf *destLen, const Bytef *source,
+    uLong *sourceLen);
 gzFile gzopen(const char *path, const char *mode);
 gzFile gzopen64(const char *path, const char *mode);
 gzFile gzdopen(int fd, const char *mode);
@@ -87,6 +90,8 @@
 int gzungetc(int c, gzFile file);
 int gzputc(gzFile file, int c);
 int gzflush(gzFile file, int flush);
+z_size_t gzfread(voidp buf, z_size_t size, z_size_t nitems, gzFile file);
+z_size_t gzfwrite(voidpc buf, z_size_t size, z_size_t nitems, gzFile file);
 z_off_t gzseek(gzFile file, z_off_t offset, int whence);
 z_off64_t gzseek64(gzFile, z_off64_t, int);
 int gzrewind(gzFile file);
@@ -104,14 +109,18 @@
 uLong adler32(uLong adler, const Bytef *buf, uInt len);
 uLong adler32_combine(uLong adler1, uLong adler2, z_off_t len2);
 uLong adler32_combine64(uLong adler1, uLong adler2, z_off64_t len2);
+uLong adler32_z(uLong adler, const Bytef *buf, z_size_t len);
 uLong crc32(uLong crc, const Bytef *buf, uInt len);
 uLong crc32_combine(uLong crc1, uLong crc2, z_off_t len2);
 uLong crc32_combine64(uLong crc1, uLong crc2, z_off64_t len2);
+uLong crc32_z(uLong adler, const Bytef *buf, z_size_t len);
 const char *zError(int err);
 uLong zlibCompileFlags(void);
 int inflateSyncPoint(z_streamp z);
 const z_crc_t *get_crc_table(void);
 int inflateUndermine(z_streamp, int);
+int inflateValidate(z_streamp, int);
+unsigned long inflateCodesUsed(z_streamp);
 int inflateResetKeep(z_streamp);
 int deflateResetKeep(z_streamp);
 int gzvprintf(gzFile file, const char *format, va_list va);
--- a/components/zlib/mapfile	Wed Mar 22 01:52:40 2017 -0700
+++ b/components/zlib/mapfile	Tue Apr 04 07:25:56 2017 -0700
@@ -32,12 +32,24 @@
 #
 # Note that the source above actually lives in the ON tree.
 #
-# Copyright (c) 2001, 2015, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2001, 2017, Oracle and/or its affiliates. All rights reserved.
 #
 # public interfaces in libz
 #
 $mapfile_version 2
 
+SYMBOL_VERSION SUNW_1.4 {
+    global:
+	deflateGetDictionary ;
+	uncompress2 ;
+	gzfread ;
+	gzfwrite ;
+	adler32_z ;
+	crc32_z ;
+	inflateValidate ;
+	inflateCodesUsed ;
+} SUNW_1.3;
+
 SYMBOL_VERSION SUNW_1.3 {
     global:
 	deflatePending ;
--- a/components/zlib/patches/manpage.patch	Wed Mar 22 01:52:40 2017 -0700
+++ b/components/zlib/patches/manpage.patch	Tue Apr 04 07:25:56 2017 -0700
@@ -1,11 +1,11 @@
 Patch origin: in-house
 Patch status: Solaris-specific; not suitable for upstream
 
---- zlib-1.2.8/zlib.3	2013-04-28 17:23:49.000000000 -0700
-+++ zlib-1.2.8/zlib.3	2014-04-18 06:07:00.037749015 -0700
+--- zlib-1.2.11/zlib.3
++++ zlib-1.2.11/zlib.3
 @@ -1,13 +1,13 @@
--.TH ZLIB 3 "28 Apr 2013"
-+.TH LIBZ 3 "28 Apr 2013"
+-.TH ZLIB 3 "15 Jan 2017"
++.TH LIBZ 3 "15 Jan 2017"
  .SH NAME
 -zlib \- compression/decompression library
 +libz \- compression/decompression library
@@ -16,7 +16,7 @@
  .SH DESCRIPTION
  The
 -.I zlib
-+.I libz (zlib)
++.I libz
  library is a general purpose data compression library.
  The code is thread safe, assuming that the standard library functions
  used are thread safe, such as memory allocation routines.
--- a/components/zlib/patches/parfait.patch	Wed Mar 22 01:52:40 2017 -0700
+++ b/components/zlib/patches/parfait.patch	Tue Apr 04 07:25:56 2017 -0700
@@ -8,13 +8,97 @@
 Downside of it is that Parfait will analyze also these separate object
 files.
 
---- zlib-1.2.8/Makefile.in	2013-04-28 15:57:11.000000000 -0700
-+++ zlib-1.2.8/Makefile.in	2014-05-07 07:30:58.047571894 -0700
-@@ -158,6 +158,7 @@
+--- zlib-1.2.11/Makefile.in
++++ zlib-1.2.11/Makefile.in
+@@ -208,76 +208,91 @@
+ 	-@mkdir objs 2>/dev/null || test -d objs
+ 	$(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/adler32.o $(SRCDIR)adler32.c
+ 	-@mv objs/adler32.o $@
++	-@if [ -f objs/adler32.o.bc ]; then mv objs/adler32.o.bc adler32.bc; fi
+ 
+ crc32.lo: $(SRCDIR)crc32.c
+ 	-@mkdir objs 2>/dev/null || test -d objs
+ 	$(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/crc32.o $(SRCDIR)crc32.c
+ 	-@mv objs/crc32.o $@
++	-@if [ -f objs/crc32.o.bc ]; then mv objs/crc32.o.bc crc32.bc; fi
+ 
+ deflate.lo: $(SRCDIR)deflate.c
+ 	-@mkdir objs 2>/dev/null || test -d objs
+ 	$(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/deflate.o $(SRCDIR)deflate.c
+ 	-@mv objs/deflate.o $@
++	-@if [ -f objs/deflate.o.bc ]; then mv objs/deflate.o.bc deflate.bc; fi
+ 
+ infback.lo: $(SRCDIR)infback.c
+ 	-@mkdir objs 2>/dev/null || test -d objs
+ 	$(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/infback.o $(SRCDIR)infback.c
+ 	-@mv objs/infback.o $@
++	-@if [ -f objs/infback.o.bc ]; then mv objs/infback.o.bc infback.bc; fi
+ 
+ inffast.lo: $(SRCDIR)inffast.c
+ 	-@mkdir objs 2>/dev/null || test -d objs
+ 	$(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/inffast.o $(SRCDIR)inffast.c
+ 	-@mv objs/inffast.o $@
++	-@if [ -f objs/inffast.o.bc ]; then mv objs/inffast.o.bc inffast.bc; fi
+ 
+ inflate.lo: $(SRCDIR)inflate.c
+ 	-@mkdir objs 2>/dev/null || test -d objs
+ 	$(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/inflate.o $(SRCDIR)inflate.c
+ 	-@mv objs/inflate.o $@
++	-@if [ -f objs/inflate.o.bc ]; then mv objs/inflate.o.bc inflate.bc; fi
+ 
+ inftrees.lo: $(SRCDIR)inftrees.c
+ 	-@mkdir objs 2>/dev/null || test -d objs
+ 	$(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/inftrees.o $(SRCDIR)inftrees.c
+ 	-@mv objs/inftrees.o $@
++	-@if [ -f objs/inftrees.o.bc ]; then mv objs/inftrees.o.bc inftrees.bc; fi
+ 
+ trees.lo: $(SRCDIR)trees.c
  	-@mkdir objs 2>/dev/null || test -d objs
- 	$(CC) $(SFLAGS) -DPIC -c -o objs/$*.o $<
- 	-@mv objs/$*.o $@
-+	-@if [ -f objs/$*.o.bc ]; then mv objs/$*.o.bc [email protected]; fi
+ 	$(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/trees.o $(SRCDIR)trees.c
+ 	-@mv objs/trees.o $@
++	-@if [ -f objs/trees.o.bc ]; then mv objs/trees.o.bc trees.bc; fi
+ 
+ zutil.lo: $(SRCDIR)zutil.c
+ 	-@mkdir objs 2>/dev/null || test -d objs
+ 	$(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/zutil.o $(SRCDIR)zutil.c
+ 	-@mv objs/zutil.o $@
++	-@if [ -f objs/zutil.o.bc ]; then mv objs/zutil.o.bc zutil.bc; fi
+ 
+ compress.lo: $(SRCDIR)compress.c
+ 	-@mkdir objs 2>/dev/null || test -d objs
+ 	$(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/compress.o $(SRCDIR)compress.c
+ 	-@mv objs/compress.o $@
++	-@if [ -f objs/compress.o.bc ]; then mv objs/compress.o.bc compress.bc; fi
+ 
+ uncompr.lo: $(SRCDIR)uncompr.c
+ 	-@mkdir objs 2>/dev/null || test -d objs
+ 	$(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/uncompr.o $(SRCDIR)uncompr.c
+ 	-@mv objs/uncompr.o $@
++	-@if [ -f objs/uncompr.o.bc ]; then mv objs/uncompr.o.bc uncompr.bc; fi
+ 
+ gzclose.lo: $(SRCDIR)gzclose.c
+ 	-@mkdir objs 2>/dev/null || test -d objs
+ 	$(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/gzclose.o $(SRCDIR)gzclose.c
+ 	-@mv objs/gzclose.o $@
++	-@if [ -f objs/gzclose.o.bc ]; then mv objs/gzclose.o.bc gzclose.bc; fi
+ 
+ gzlib.lo: $(SRCDIR)gzlib.c
+ 	-@mkdir objs 2>/dev/null || test -d objs
+ 	$(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/gzlib.o $(SRCDIR)gzlib.c
+ 	-@mv objs/gzlib.o $@
++	-@if [ -f objs/gzlib.o.bc ]; then mv objs/gzlib.o.bc gzlib.bc; fi
+ 
+ gzread.lo: $(SRCDIR)gzread.c
+ 	-@mkdir objs 2>/dev/null || test -d objs
+ 	$(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/gzread.o $(SRCDIR)gzread.c
+ 	-@mv objs/gzread.o $@
++	-@if [ -f objs/gzread.o.bc ]; then mv objs/gzread.o.bc gzread.bc; fi
+ 
+ gzwrite.lo: $(SRCDIR)gzwrite.c
+ 	-@mkdir objs 2>/dev/null || test -d objs
+ 	$(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/gzwrite.o $(SRCDIR)gzwrite.c
+ 	-@mv objs/gzwrite.o $@
++	-@if [ -f objs/gzwrite.o.bc ]; then mv objs/gzwrite.o.bc gzwrite.bc; fi
+ 
  
  placebo $(SHAREDLIBV): $(PIC_OBJS) libz.a
- 	$(LDSHARED) $(SFLAGS) -o $@ $(PIC_OBJS) $(LDSHAREDLIBC) $(LDFLAGS)
--- a/components/zlib/patches/perf.patch	Wed Mar 22 01:52:40 2017 -0700
+++ b/components/zlib/patches/perf.patch	Tue Apr 04 07:25:56 2017 -0700
@@ -1,23 +1,12 @@
 Patch origin: in-house
-Patch status: inffast.c part: submitted back to community without feedback
+Patch status: inffast.c part: accepted, will be in next version
 Patch status: deflate.c part: Solaris-specific; not suitable for upstream
 
---- zlib-1.2.8/zlib.h	2013-04-28 17:23:49.000000000 -0700
-+++ zlib-1.2.8/zlib.h	2014-04-18 05:32:31.316290241 -0700
-@@ -37,8 +37,8 @@
- extern "C" {
- #endif
- 
--#define ZLIB_VERSION "1.2.8"
--#define ZLIB_VERNUM 0x1280
-+#define ZLIB_VERSION "1.2.8-T4mods"
-+#define ZLIB_VERNUM 0x128f
- #define ZLIB_VER_MAJOR 1
- #define ZLIB_VER_MINOR 2
- #define ZLIB_VER_REVISION 8
+https://github.com/madler/zlib/commit/60a5ecc62b18d1e2391993b1fcfc10e100720642
+
 --- zlib-1.2.8/inffast.c	2013-03-24 22:47:59.000000000 -0700
 +++ zlib-1.2.8/inffast.c	2014-02-28 01:57:57.075708259 -0800
-@@ -87,7 +87,7 @@
+@@ -68,7 +68,7 @@
      code const FAR *dcode;      /* local strm->distcode */
      unsigned lmask;             /* mask for first level of length codes */
      unsigned dmask;             /* mask for first level of distance codes */
@@ -26,8 +15,8 @@
      unsigned op;                /* code bits, operation, extra bits, or */
                                  /*  window position, window bytes to copy */
      unsigned len;               /* match length, unused bytes */
-@@ -124,20 +124,20 @@
-             hold += (unsigned long)(PUP(in)) << bits;
+@@ -105,20 +105,20 @@
+             hold += (unsigned long)(*in++) << bits;
              bits += 8;
          }
 -        here = lcode[hold & lmask];
@@ -44,9 +33,9 @@
 +            Tracevv((stderr, here->val >= 0x20 && here->val < 0x7f ?
                      "inflate:         literal '%c'\n" :
 -                    "inflate:         literal 0x%02x\n", here.val));
--            PUP(out) = (unsigned char)(here.val);
+-            *out++ = (unsigned char)(here.val);
 +                    "inflate:         literal 0x%02x\n", here->val));
-+            PUP(out) = (unsigned char)(here->val);
++            *out++ = (unsigned char)(here->val);
          }
          else if (op & 16) {                     /* length base */
 -            len = (unsigned)(here.val);
@@ -54,8 +43,8 @@
              op &= 15;                           /* number of extra bits */
              if (op) {
                  if (bits < op) {
-@@ -155,14 +155,14 @@
-                 hold += (unsigned long)(PUP(in)) << bits;
+@@ -136,14 +136,14 @@
+                 hold += (unsigned long)(*in++) << bits;
                  bits += 8;
              }
 -            here = dcode[hold & dmask];
@@ -72,8 +61,8 @@
 +                dist = (unsigned)(here->val);
                  op &= 15;                       /* number of extra bits */
                  if (bits < op) {
-                     hold += (unsigned long)(PUP(in)) << bits;
-@@ -281,7 +281,7 @@
+                     hold += (unsigned long)(*in++) << bits;
+@@ -262,7 +262,7 @@
                  }
              }
              else if ((op & 64) == 0) {          /* 2nd level distance code */
@@ -82,7 +71,7 @@
                  goto dodist;
              }
              else {
-@@ -291,7 +291,7 @@
+@@ -272,7 +272,7 @@
              }
          }
          else if ((op & 64) == 0) {              /* 2nd level length code */
@@ -101,7 +90,7 @@
  /* ===========================================================================
   *  Function prototypes.
   */
-@@ -89,13 +90,18 @@
+@@ -91,13 +92,18 @@
        void match_init OF((void)); /* asm code initialization */
        uInt longest_match  OF((deflate_state *s, IPos cur_match));
  #else
@@ -112,7 +101,7 @@
 +#endif
  #endif
  
- #ifdef DEBUG
+ #ifdef ZLIB_DEBUG
  local  void check_match OF((deflate_state *s, IPos start, IPos match,
                              int length));
  #endif
@@ -120,7 +109,7 @@
  
  /* ===========================================================================
   * Local data
-@@ -104,6 +110,7 @@
+@@ -106,6 +112,7 @@
  #define NIL 0
  /* Tail of hash chains */
  
@@ -128,7 +117,7 @@
  #ifndef TOO_FAR
  #  define TOO_FAR 4096
  #endif
-@@ -1130,7 +1137,9 @@
+@@ -1217,7 +1224,9 @@
  #endif
  #endif
  }
@@ -138,7 +127,7 @@
  #ifndef FASTEST
  /* ===========================================================================
   * Set match_start to the longest match starting at the given string and
-@@ -1145,7 +1154,11 @@
+@@ -1232,7 +1241,11 @@
  /* For 80x86 and 680x0, an optimized version will be provided in match.asm or
   * match.S. The code will be functionally equivalent.
   */
@@ -150,7 +139,7 @@
      deflate_state *s;
      IPos cur_match;                             /* current match */
  {
-@@ -1288,6 +1301,7 @@
+@@ -1375,6 +1388,7 @@
      return s->lookahead;
  }
  #endif /* ASMV */
@@ -158,15 +147,15 @@
  
  #else /* FASTEST */
  
-@@ -1349,6 +1363,7 @@
+@@ -1436,6 +1450,7 @@
  
  #endif /* FASTEST */
  
 +#ifndef LONGEST_MATCH_ONLY
- #ifdef DEBUG
- /* ===========================================================================
-  * Check that the match at match_start is indeed a match.
-@@ -1965,3 +1980,4 @@
+ #ifdef ZLIB_DEBUG
+ 
+ #define EQUAL 0
+@@ -2154,3 +2169,4 @@
          FLUSH_BLOCK(s, 0);
      return block_done;
  }
--- a/components/zlib/zlib.license	Wed Mar 22 01:52:40 2017 -0700
+++ b/components/zlib/zlib.license	Tue Apr 04 07:25:56 2017 -0700
@@ -1,22 +1,22 @@
 
-Copyright (C) 1995-2013 Jean-loup Gailly and Mark Adler
+ (C) 1995-2017 Jean-loup Gailly and Mark Adler
 
-This software is provided 'as-is', without any express or implied
-warranty.  In no event will the authors be held liable for any damages
-arising from the use of this software.
+  This software is provided 'as-is', without any express or implied
+  warranty.  In no event will the authors be held liable for any damages
+  arising from the use of this software.
 
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it
-freely, subject to the following restrictions:
+  Permission is granted to anyone to use this software for any purpose,
+  including commercial applications, and to alter it and redistribute it
+  freely, subject to the following restrictions:
 
-1. The origin of this software must not be misrepresented; you must not
-   claim that you wrote the original software. If you use this software
-   in a product, an acknowledgment in the product documentation would be
-   appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be
-   misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
+  1. The origin of this software must not be misrepresented; you must not
+     claim that you wrote the original software. If you use this software
+     in a product, an acknowledgment in the product documentation would be
+     appreciated but is not required.
+  2. Altered source versions must be plainly marked as such, and must not be
+     misrepresented as being the original software.
+  3. This notice may not be removed or altered from any source distribution.
 
-Jean-loup Gailly        Mark Adler
[email protected]          [email protected]
+  Jean-loup Gailly        Mark Adler
+  [email protected]          [email protected]