Sync from SUSE:ALP:Source:Standard:1.0 zlib revision 36f39b6d9d335ce320e489faa36e0710
This commit is contained in:
commit
2cfff5ee96
23
.gitattributes
vendored
Normal file
23
.gitattributes
vendored
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
## Default LFS
|
||||||
|
*.7z filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.bsp filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.bz2 filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.gem filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.gz filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.jar filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.lz filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.lzma filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.obscpio filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.oxt filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.pdf filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.png filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.rpm filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.tbz filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.tbz2 filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.tgz filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.ttf filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.txz filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.whl filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.xz filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.zip filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.zst filter=lfs diff=lfs merge=lfs -text
|
@ -0,0 +1,28 @@
|
|||||||
|
From bb5eec59e3ec66f6dccb79b1900aa806a1cca12e Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Chv=C3=A1tal?= <tchvatal@suse.com>
|
||||||
|
Date: Fri, 8 Dec 2017 14:59:08 +0100
|
||||||
|
Subject: [PATCH] Do not try to store negative values in unsigned int
|
||||||
|
|
||||||
|
---
|
||||||
|
deflate.c | 5 ++++-
|
||||||
|
1 file changed, 4 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/deflate.c b/deflate.c
|
||||||
|
index 1ec7614..1bad1eb 100644
|
||||||
|
--- a/deflate.c
|
||||||
|
+++ b/deflate.c
|
||||||
|
@@ -1536,7 +1536,10 @@ local void fill_window(s)
|
||||||
|
|
||||||
|
/* Initialize the hash value now that we have some input: */
|
||||||
|
if (s->lookahead + s->insert >= MIN_MATCH) {
|
||||||
|
- uInt str = s->strstart - s->insert;
|
||||||
|
+ uInt str = 0;
|
||||||
|
+ /* storing negative values to uInt is not good idea */
|
||||||
|
+ if (s->strstart - s->insert > 0)
|
||||||
|
+ str = s->strstart - s->insert;
|
||||||
|
s->ins_h = s->window[str];
|
||||||
|
UPDATE_HASH(s, s->ins_h, s->window[str + 1]);
|
||||||
|
#if MIN_MATCH != 3
|
||||||
|
--
|
||||||
|
2.15.1
|
||||||
|
|
354
LICENSE
Normal file
354
LICENSE
Normal file
@ -0,0 +1,354 @@
|
|||||||
|
The zlib library itself is released under specific zlib license see
|
||||||
|
zlib.h in tarball
|
||||||
|
|
||||||
|
However files (relative to extracted source tarballs root)
|
||||||
|
contrib/asm586/match.S
|
||||||
|
contrib/masm686/match.asm
|
||||||
|
contrib/masmx86/gvmat32.asm
|
||||||
|
contrib/ada/zlib.ads
|
||||||
|
|
||||||
|
which are not used to build zlib library, but are shipped in source
|
||||||
|
of zlib are release under the GNU General Public License, see the
|
||||||
|
text of the GNU GPL below.
|
||||||
|
|
||||||
|
---------------------------------------------------------------
|
||||||
|
GNU GENERAL PUBLIC LICENSE
|
||||||
|
Version 2, June 1991
|
||||||
|
|
||||||
|
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
|
||||||
|
59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
Everyone is permitted to copy and distribute verbatim copies
|
||||||
|
of this license document, but changing it is not allowed.
|
||||||
|
|
||||||
|
Preamble
|
||||||
|
|
||||||
|
The licenses for most software are designed to take away your
|
||||||
|
freedom to share and change it. By contrast, the GNU General Public
|
||||||
|
License is intended to guarantee your freedom to share and change free
|
||||||
|
software--to make sure the software is free for all its users. This
|
||||||
|
General Public License applies to most of the Free Software
|
||||||
|
Foundation's software and to any other program whose authors commit to
|
||||||
|
using it. (Some other Free Software Foundation software is covered by
|
||||||
|
the GNU Library General Public License instead.) You can apply it to
|
||||||
|
your programs, too.
|
||||||
|
|
||||||
|
When we speak of free software, we are referring to freedom, not
|
||||||
|
price. Our General Public Licenses are designed to make sure that you
|
||||||
|
have the freedom to distribute copies of free software (and charge for
|
||||||
|
this service if you wish), that you receive source code or can get it
|
||||||
|
if you want it, that you can change the software or use pieces of it
|
||||||
|
in new free programs; and that you know you can do these things.
|
||||||
|
|
||||||
|
To protect your rights, we need to make restrictions that forbid
|
||||||
|
anyone to deny you these rights or to ask you to surrender the rights.
|
||||||
|
These restrictions translate to certain responsibilities for you if you
|
||||||
|
distribute copies of the software, or if you modify it.
|
||||||
|
|
||||||
|
For example, if you distribute copies of such a program, whether
|
||||||
|
gratis or for a fee, you must give the recipients all the rights that
|
||||||
|
you have. You must make sure that they, too, receive or can get the
|
||||||
|
source code. And you must show them these terms so they know their
|
||||||
|
rights.
|
||||||
|
|
||||||
|
We protect your rights with two steps: (1) copyright the software, and
|
||||||
|
(2) offer you this license which gives you legal permission to copy,
|
||||||
|
distribute and/or modify the software.
|
||||||
|
|
||||||
|
Also, for each author's protection and ours, we want to make certain
|
||||||
|
that everyone understands that there is no warranty for this free
|
||||||
|
software. If the software is modified by someone else and passed on, we
|
||||||
|
want its recipients to know that what they have is not the original, so
|
||||||
|
that any problems introduced by others will not reflect on the original
|
||||||
|
authors' reputations.
|
||||||
|
|
||||||
|
Finally, any free program is threatened constantly by software
|
||||||
|
patents. We wish to avoid the danger that redistributors of a free
|
||||||
|
program will individually obtain patent licenses, in effect making the
|
||||||
|
program proprietary. To prevent this, we have made it clear that any
|
||||||
|
patent must be licensed for everyone's free use or not licensed at all.
|
||||||
|
|
||||||
|
The precise terms and conditions for copying, distribution and
|
||||||
|
modification follow.
|
||||||
|
|
||||||
|
GNU GENERAL PUBLIC LICENSE
|
||||||
|
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||||
|
|
||||||
|
0. This License applies to any program or other work which contains
|
||||||
|
a notice placed by the copyright holder saying it may be distributed
|
||||||
|
under the terms of this General Public License. The "Program", below,
|
||||||
|
refers to any such program or work, and a "work based on the Program"
|
||||||
|
means either the Program or any derivative work under copyright law:
|
||||||
|
that is to say, a work containing the Program or a portion of it,
|
||||||
|
either verbatim or with modifications and/or translated into another
|
||||||
|
language. (Hereinafter, translation is included without limitation in
|
||||||
|
the term "modification".) Each licensee is addressed as "you".
|
||||||
|
|
||||||
|
Activities other than copying, distribution and modification are not
|
||||||
|
covered by this License; they are outside its scope. The act of
|
||||||
|
running the Program is not restricted, and the output from the Program
|
||||||
|
is covered only if its contents constitute a work based on the
|
||||||
|
Program (independent of having been made by running the Program).
|
||||||
|
Whether that is true depends on what the Program does.
|
||||||
|
|
||||||
|
1. You may copy and distribute verbatim copies of the Program's
|
||||||
|
source code as you receive it, in any medium, provided that you
|
||||||
|
conspicuously and appropriately publish on each copy an appropriate
|
||||||
|
copyright notice and disclaimer of warranty; keep intact all the
|
||||||
|
notices that refer to this License and to the absence of any warranty;
|
||||||
|
and give any other recipients of the Program a copy of this License
|
||||||
|
along with the Program.
|
||||||
|
|
||||||
|
You may charge a fee for the physical act of transferring a copy, and
|
||||||
|
you may at your option offer warranty protection in exchange for a fee.
|
||||||
|
|
||||||
|
2. You may modify your copy or copies of the Program or any portion
|
||||||
|
of it, thus forming a work based on the Program, and copy and
|
||||||
|
distribute such modifications or work under the terms of Section 1
|
||||||
|
above, provided that you also meet all of these conditions:
|
||||||
|
|
||||||
|
a) You must cause the modified files to carry prominent notices
|
||||||
|
stating that you changed the files and the date of any change.
|
||||||
|
|
||||||
|
b) You must cause any work that you distribute or publish, that in
|
||||||
|
whole or in part contains or is derived from the Program or any
|
||||||
|
part thereof, to be licensed as a whole at no charge to all third
|
||||||
|
parties under the terms of this License.
|
||||||
|
|
||||||
|
c) If the modified program normally reads commands interactively
|
||||||
|
when run, you must cause it, when started running for such
|
||||||
|
interactive use in the most ordinary way, to print or display an
|
||||||
|
announcement including an appropriate copyright notice and a
|
||||||
|
notice that there is no warranty (or else, saying that you provide
|
||||||
|
a warranty) and that users may redistribute the program under
|
||||||
|
these conditions, and telling the user how to view a copy of this
|
||||||
|
License. (Exception: if the Program itself is interactive but
|
||||||
|
does not normally print such an announcement, your work based on
|
||||||
|
the Program is not required to print an announcement.)
|
||||||
|
|
||||||
|
These requirements apply to the modified work as a whole. If
|
||||||
|
identifiable sections of that work are not derived from the Program,
|
||||||
|
and can be reasonably considered independent and separate works in
|
||||||
|
themselves, then this License, and its terms, do not apply to those
|
||||||
|
sections when you distribute them as separate works. But when you
|
||||||
|
distribute the same sections as part of a whole which is a work based
|
||||||
|
on the Program, the distribution of the whole must be on the terms of
|
||||||
|
this License, whose permissions for other licensees extend to the
|
||||||
|
entire whole, and thus to each and every part regardless of who wrote it.
|
||||||
|
|
||||||
|
Thus, it is not the intent of this section to claim rights or contest
|
||||||
|
your rights to work written entirely by you; rather, the intent is to
|
||||||
|
exercise the right to control the distribution of derivative or
|
||||||
|
collective works based on the Program.
|
||||||
|
|
||||||
|
In addition, mere aggregation of another work not based on the Program
|
||||||
|
with the Program (or with a work based on the Program) on a volume of
|
||||||
|
a storage or distribution medium does not bring the other work under
|
||||||
|
the scope of this License.
|
||||||
|
|
||||||
|
3. You may copy and distribute the Program (or a work based on it,
|
||||||
|
under Section 2) in object code or executable form under the terms of
|
||||||
|
Sections 1 and 2 above provided that you also do one of the following:
|
||||||
|
|
||||||
|
a) Accompany it with the complete corresponding machine-readable
|
||||||
|
source code, which must be distributed under the terms of Sections
|
||||||
|
1 and 2 above on a medium customarily used for software interchange; or,
|
||||||
|
|
||||||
|
b) Accompany it with a written offer, valid for at least three
|
||||||
|
years, to give any third party, for a charge no more than your
|
||||||
|
cost of physically performing source distribution, a complete
|
||||||
|
machine-readable copy of the corresponding source code, to be
|
||||||
|
distributed under the terms of Sections 1 and 2 above on a medium
|
||||||
|
customarily used for software interchange; or,
|
||||||
|
|
||||||
|
c) Accompany it with the information you received as to the offer
|
||||||
|
to distribute corresponding source code. (This alternative is
|
||||||
|
allowed only for noncommercial distribution and only if you
|
||||||
|
received the program in object code or executable form with such
|
||||||
|
an offer, in accord with Subsection b above.)
|
||||||
|
|
||||||
|
The source code for a work means the preferred form of the work for
|
||||||
|
making modifications to it. For an executable work, complete source
|
||||||
|
code means all the source code for all modules it contains, plus any
|
||||||
|
associated interface definition files, plus the scripts used to
|
||||||
|
control compilation and installation of the executable. However, as a
|
||||||
|
special exception, the source code distributed need not include
|
||||||
|
anything that is normally distributed (in either source or binary
|
||||||
|
form) with the major components (compiler, kernel, and so on) of the
|
||||||
|
operating system on which the executable runs, unless that component
|
||||||
|
itself accompanies the executable.
|
||||||
|
|
||||||
|
If distribution of executable or object code is made by offering
|
||||||
|
access to copy from a designated place, then offering equivalent
|
||||||
|
access to copy the source code from the same place counts as
|
||||||
|
distribution of the source code, even though third parties are not
|
||||||
|
compelled to copy the source along with the object code.
|
||||||
|
|
||||||
|
4. You may not copy, modify, sublicense, or distribute the Program
|
||||||
|
except as expressly provided under this License. Any attempt
|
||||||
|
otherwise to copy, modify, sublicense or distribute the Program is
|
||||||
|
void, and will automatically terminate your rights under this License.
|
||||||
|
However, parties who have received copies, or rights, from you under
|
||||||
|
this License will not have their licenses terminated so long as such
|
||||||
|
parties remain in full compliance.
|
||||||
|
|
||||||
|
5. You are not required to accept this License, since you have not
|
||||||
|
signed it. However, nothing else grants you permission to modify or
|
||||||
|
distribute the Program or its derivative works. These actions are
|
||||||
|
prohibited by law if you do not accept this License. Therefore, by
|
||||||
|
modifying or distributing the Program (or any work based on the
|
||||||
|
Program), you indicate your acceptance of this License to do so, and
|
||||||
|
all its terms and conditions for copying, distributing or modifying
|
||||||
|
the Program or works based on it.
|
||||||
|
|
||||||
|
6. Each time you redistribute the Program (or any work based on the
|
||||||
|
Program), the recipient automatically receives a license from the
|
||||||
|
original licensor to copy, distribute or modify the Program subject to
|
||||||
|
these terms and conditions. You may not impose any further
|
||||||
|
restrictions on the recipients' exercise of the rights granted herein.
|
||||||
|
You are not responsible for enforcing compliance by third parties to
|
||||||
|
this License.
|
||||||
|
|
||||||
|
7. If, as a consequence of a court judgment or allegation of patent
|
||||||
|
infringement or for any other reason (not limited to patent issues),
|
||||||
|
conditions are imposed on you (whether by court order, agreement or
|
||||||
|
otherwise) that contradict the conditions of this License, they do not
|
||||||
|
excuse you from the conditions of this License. If you cannot
|
||||||
|
distribute so as to satisfy simultaneously your obligations under this
|
||||||
|
License and any other pertinent obligations, then as a consequence you
|
||||||
|
may not distribute the Program at all. For example, if a patent
|
||||||
|
license would not permit royalty-free redistribution of the Program by
|
||||||
|
all those who receive copies directly or indirectly through you, then
|
||||||
|
the only way you could satisfy both it and this License would be to
|
||||||
|
refrain entirely from distribution of the Program.
|
||||||
|
|
||||||
|
If any portion of this section is held invalid or unenforceable under
|
||||||
|
any particular circumstance, the balance of the section is intended to
|
||||||
|
apply and the section as a whole is intended to apply in other
|
||||||
|
circumstances.
|
||||||
|
|
||||||
|
It is not the purpose of this section to induce you to infringe any
|
||||||
|
patents or other property right claims or to contest validity of any
|
||||||
|
such claims; this section has the sole purpose of protecting the
|
||||||
|
integrity of the free software distribution system, which is
|
||||||
|
implemented by public license practices. Many people have made
|
||||||
|
generous contributions to the wide range of software distributed
|
||||||
|
through that system in reliance on consistent application of that
|
||||||
|
system; it is up to the author/donor to decide if he or she is willing
|
||||||
|
to distribute software through any other system and a licensee cannot
|
||||||
|
impose that choice.
|
||||||
|
|
||||||
|
This section is intended to make thoroughly clear what is believed to
|
||||||
|
be a consequence of the rest of this License.
|
||||||
|
|
||||||
|
8. If the distribution and/or use of the Program is restricted in
|
||||||
|
certain countries either by patents or by copyrighted interfaces, the
|
||||||
|
original copyright holder who places the Program under this License
|
||||||
|
may add an explicit geographical distribution limitation excluding
|
||||||
|
those countries, so that distribution is permitted only in or among
|
||||||
|
countries not thus excluded. In such case, this License incorporates
|
||||||
|
the limitation as if written in the body of this License.
|
||||||
|
|
||||||
|
9. The Free Software Foundation may publish revised and/or new versions
|
||||||
|
of the General Public License from time to time. Such new versions will
|
||||||
|
be similar in spirit to the present version, but may differ in detail to
|
||||||
|
address new problems or concerns.
|
||||||
|
|
||||||
|
Each version is given a distinguishing version number. If the Program
|
||||||
|
specifies a version number of this License which applies to it and "any
|
||||||
|
later version", you have the option of following the terms and conditions
|
||||||
|
either of that version or of any later version published by the Free
|
||||||
|
Software Foundation. If the Program does not specify a version number of
|
||||||
|
this License, you may choose any version ever published by the Free Software
|
||||||
|
Foundation.
|
||||||
|
|
||||||
|
10. If you wish to incorporate parts of the Program into other free
|
||||||
|
programs whose distribution conditions are different, write to the author
|
||||||
|
to ask for permission. For software which is copyrighted by the Free
|
||||||
|
Software Foundation, write to the Free Software Foundation; we sometimes
|
||||||
|
make exceptions for this. Our decision will be guided by the two goals
|
||||||
|
of preserving the free status of all derivatives of our free software and
|
||||||
|
of promoting the sharing and reuse of software generally.
|
||||||
|
|
||||||
|
NO WARRANTY
|
||||||
|
|
||||||
|
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
|
||||||
|
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
|
||||||
|
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
|
||||||
|
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
|
||||||
|
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||||
|
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
|
||||||
|
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
|
||||||
|
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
|
||||||
|
REPAIR OR CORRECTION.
|
||||||
|
|
||||||
|
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||||
|
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
|
||||||
|
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
|
||||||
|
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
|
||||||
|
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
|
||||||
|
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
|
||||||
|
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
|
||||||
|
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
|
||||||
|
POSSIBILITY OF SUCH DAMAGES.
|
||||||
|
|
||||||
|
END OF TERMS AND CONDITIONS
|
||||||
|
|
||||||
|
How to Apply These Terms to Your New Programs
|
||||||
|
|
||||||
|
If you develop a new program, and you want it to be of the greatest
|
||||||
|
possible use to the public, the best way to achieve this is to make it
|
||||||
|
free software which everyone can redistribute and change under these terms.
|
||||||
|
|
||||||
|
To do so, attach the following notices to the program. It is safest
|
||||||
|
to attach them to the start of each source file to most effectively
|
||||||
|
convey the exclusion of warranty; and each file should have at least
|
||||||
|
the "copyright" line and a pointer to where the full notice is found.
|
||||||
|
|
||||||
|
<one line to give the program's name and a brief idea of what it does.>
|
||||||
|
Copyright (C) <year> <name of author>
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
|
||||||
|
|
||||||
|
Also add information on how to contact you by electronic and paper mail.
|
||||||
|
|
||||||
|
If the program is interactive, make it output a short notice like this
|
||||||
|
when it starts in an interactive mode:
|
||||||
|
|
||||||
|
Gnomovision version 69, Copyright (C) year name of author
|
||||||
|
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
||||||
|
This is free software, and you are welcome to redistribute it
|
||||||
|
under certain conditions; type `show c' for details.
|
||||||
|
|
||||||
|
The hypothetical commands `show w' and `show c' should show the appropriate
|
||||||
|
parts of the General Public License. Of course, the commands you use may
|
||||||
|
be called something other than `show w' and `show c'; they could even be
|
||||||
|
mouse-clicks or menu items--whatever suits your program.
|
||||||
|
|
||||||
|
You should also get your employer (if you work as a programmer) or your
|
||||||
|
school, if any, to sign a "copyright disclaimer" for the program, if
|
||||||
|
necessary. Here is a sample; alter the names:
|
||||||
|
|
||||||
|
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
|
||||||
|
`Gnomovision' (which makes passes at compilers) written by James Hacker.
|
||||||
|
|
||||||
|
<signature of Ty Coon>, 1 April 1989
|
||||||
|
Ty Coon, President of Vice
|
||||||
|
|
||||||
|
This General Public License does not permit incorporating your program into
|
||||||
|
proprietary programs. If your program is a subroutine library, you may
|
||||||
|
consider it more useful to permit linking proprietary applications with the
|
||||||
|
library. If this is what you want to do, use the GNU Library General
|
||||||
|
Public License instead of this License.
|
14
baselibs.conf
Normal file
14
baselibs.conf
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
libz1
|
||||||
|
targettype x86 provides "baselibs-x86:<prefix>/lib/libz.so.1"
|
||||||
|
provides "zlib-<targettype> = <version>"
|
||||||
|
obsoletes "zlib-<targettype> <= 1.2.8"
|
||||||
|
zlib-devel
|
||||||
|
requires "glibc-devel-<targettype>"
|
||||||
|
requires "libz1-<targettype> = <version>"
|
||||||
|
zlib-devel-static
|
||||||
|
requires "zlib-devel-<targettype> = <version>"
|
||||||
|
targettype x86-64-v2 -/.*
|
||||||
|
targettype x86-64-v3 -/.*
|
||||||
|
targettype x86-64-v4 -/.*
|
||||||
|
libminizip1
|
||||||
|
targettype x86 provides "baselibs-x86:<prefix>/lib/libminizip.so.1"
|
13
bsc1210593.patch
Normal file
13
bsc1210593.patch
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
Index: zlib-1.2.11/contrib/s390/dfltcc_deflate.h
|
||||||
|
===================================================================
|
||||||
|
--- zlib-1.2.11.orig/contrib/s390/dfltcc_deflate.h
|
||||||
|
+++ zlib-1.2.11/contrib/s390/dfltcc_deflate.h
|
||||||
|
@@ -45,7 +45,7 @@ int ZLIB_INTERNAL dfltcc_deflate_get_dic
|
||||||
|
#define DEFLATE_DONE dfltcc_deflate_done
|
||||||
|
#define DEFLATE_BOUND_ADJUST_COMPLEN(strm, complen, source_len) \
|
||||||
|
do { \
|
||||||
|
- if (dfltcc_can_deflate((strm))) \
|
||||||
|
+ if (deflateStateCheck((strm)) || dfltcc_can_deflate((strm))) \
|
||||||
|
(complen) = DEFLATE_BOUND_COMPLEN(source_len); \
|
||||||
|
} while (0)
|
||||||
|
#define DEFLATE_NEED_CONSERVATIVE_BOUND(strm) (dfltcc_can_deflate((strm)))
|
32
minizip-dont-install-crypt-header.patch
Normal file
32
minizip-dont-install-crypt-header.patch
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
From e490ddad3091574a0c2e3b5a66a8fee9a7ab212f Mon Sep 17 00:00:00 2001
|
||||||
|
From: Pavel Raiskup <praiskup@redhat.com>
|
||||||
|
Date: Sun, 19 Feb 2017 16:42:12 +0100
|
||||||
|
Subject: [PATCH] minizip: don't install crypt.h
|
||||||
|
|
||||||
|
People did mistakenly or unintentionally include crypt.h before,
|
||||||
|
don't install this internal header from now.
|
||||||
|
---
|
||||||
|
contrib/minizip/Makefile.am | 4 +++-
|
||||||
|
1 file changed, 3 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/contrib/minizip/Makefile.am b/contrib/minizip/Makefile.am
|
||||||
|
index d343011eb..4f4661023 100644
|
||||||
|
--- a/contrib/minizip/Makefile.am
|
||||||
|
+++ b/contrib/minizip/Makefile.am
|
||||||
|
@@ -26,13 +26,15 @@ libminizip_la_LDFLAGS = $(AM_LDFLAGS) -version-info 1:0:0 -lz
|
||||||
|
|
||||||
|
minizip_includedir = $(includedir)/minizip
|
||||||
|
minizip_include_HEADERS = \
|
||||||
|
- crypt.h \
|
||||||
|
ioapi.h \
|
||||||
|
mztools.h \
|
||||||
|
unzip.h \
|
||||||
|
zip.h \
|
||||||
|
${iowin32_h}
|
||||||
|
|
||||||
|
+noinst_HEADERS = \
|
||||||
|
+ crypt.h
|
||||||
|
+
|
||||||
|
pkgconfigdir = $(libdir)/pkgconfig
|
||||||
|
pkgconfig_DATA = minizip.pc
|
||||||
|
|
28
zlib-1.2.11-covscan-issues-rhel9.patch
Normal file
28
zlib-1.2.11-covscan-issues-rhel9.patch
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
From a7d3c3076dc316f1408f56af86a72a17fcfdf5dd Mon Sep 17 00:00:00 2001
|
||||||
|
From: Ilya Leoshkevich <iii@linux.ibm.com>
|
||||||
|
Date: Wed, 27 Apr 2022 14:37:54 +0200
|
||||||
|
Subject: [PATCH] zlib-1.2.11-covscan-issues-rhel9.patch
|
||||||
|
|
||||||
|
---
|
||||||
|
contrib/minizip/mztools.c | 8 ++++++++
|
||||||
|
1 file changed, 8 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/contrib/minizip/mztools.c b/contrib/minizip/mztools.c
|
||||||
|
index 96891c2e0..1197928a7 100644
|
||||||
|
--- a/contrib/minizip/mztools.c
|
||||||
|
+++ b/contrib/minizip/mztools.c
|
||||||
|
@@ -286,6 +286,14 @@ uLong* bytesRecovered;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
err = Z_STREAM_ERROR;
|
||||||
|
+ if(fpZip != NULL)
|
||||||
|
+ fclose(fpZip);
|
||||||
|
+
|
||||||
|
+ if(fpOut != NULL)
|
||||||
|
+ fclose(fpOut);
|
||||||
|
+
|
||||||
|
+ if(fpOutCD != NULL)
|
||||||
|
+ fclose(fpOutCD);
|
||||||
|
}
|
||||||
|
return err;
|
||||||
|
}
|
22
zlib-1.2.11-covscan-issues.patch
Normal file
22
zlib-1.2.11-covscan-issues.patch
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
From e4c0c07385f80e260f1f1aa2a80c41c62754b9d4 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Ilya Leoshkevich <iii@linux.ibm.com>
|
||||||
|
Date: Wed, 27 Apr 2022 14:37:39 +0200
|
||||||
|
Subject: [PATCH] zlib-1.2.11-covscan-issues.patch
|
||||||
|
|
||||||
|
---
|
||||||
|
deflate.c | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/deflate.c b/deflate.c
|
||||||
|
index ac0b865a4..49f056a00 100644
|
||||||
|
--- a/deflate.c
|
||||||
|
+++ b/deflate.c
|
||||||
|
@@ -1062,7 +1062,7 @@ int ZEXPORT deflate (strm, flush)
|
||||||
|
*/
|
||||||
|
if (strm->avail_in != 0 || s->lookahead != 0 ||
|
||||||
|
(flush != Z_NO_FLUSH && s->status != FINISH_STATE)) {
|
||||||
|
- block_state bstate;
|
||||||
|
+ block_state bstate = 0;
|
||||||
|
|
||||||
|
bstate = DEFLATE_HOOK(strm, flush, &bstate) ? bstate :
|
||||||
|
s->level == 0 ? deflate_stored(s, flush) :
|
217
zlib-1.2.12-add-optimized-slide_hash-for-power.patch
Normal file
217
zlib-1.2.12-add-optimized-slide_hash-for-power.patch
Normal file
@ -0,0 +1,217 @@
|
|||||||
|
From 4a8d89ae49aa17d1634a2816c8d159f533a07eae Mon Sep 17 00:00:00 2001
|
||||||
|
From: Matheus Castanho <msc@linux.ibm.com>
|
||||||
|
Date: Wed, 27 Nov 2019 10:18:10 -0300
|
||||||
|
Subject: [PATCH] Add optimized slide_hash for Power
|
||||||
|
|
||||||
|
Considerable time is spent on deflate.c:slide_hash() during
|
||||||
|
deflate. This commit introduces a new slide_hash function that
|
||||||
|
uses VSX vector instructions to slide 8 hash elements at a time,
|
||||||
|
instead of just one as the standard code does.
|
||||||
|
|
||||||
|
The choice between the optimized and default versions is made only
|
||||||
|
on the first call to the function, enabling a fallback to standard
|
||||||
|
behavior if the host processor does not support VSX instructions,
|
||||||
|
so the same binary can be used for multiple Power processor
|
||||||
|
versions.
|
||||||
|
|
||||||
|
Author: Matheus Castanho <msc@linux.ibm.com>
|
||||||
|
---
|
||||||
|
CMakeLists.txt | 3 +-
|
||||||
|
Makefile.in | 8 ++++
|
||||||
|
configure | 4 +-
|
||||||
|
contrib/power/power.h | 3 ++
|
||||||
|
contrib/power/slide_hash_power8.c | 63 +++++++++++++++++++++++++++++
|
||||||
|
contrib/power/slide_hash_resolver.c | 15 +++++++
|
||||||
|
deflate.c | 12 ++++++
|
||||||
|
7 files changed, 105 insertions(+), 3 deletions(-)
|
||||||
|
create mode 100644 contrib/power/slide_hash_power8.c
|
||||||
|
create mode 100644 contrib/power/slide_hash_resolver.c
|
||||||
|
|
||||||
|
Index: zlib-1.2.13/CMakeLists.txt
|
||||||
|
===================================================================
|
||||||
|
--- zlib-1.2.13.orig/CMakeLists.txt
|
||||||
|
+++ zlib-1.2.13/CMakeLists.txt
|
||||||
|
@@ -174,7 +174,8 @@ if(CMAKE_COMPILER_IS_GNUCC)
|
||||||
|
add_definitions(-DZ_POWER8)
|
||||||
|
set(ZLIB_POWER8
|
||||||
|
contrib/power/adler32_power8.c
|
||||||
|
- contrib/power/crc32_z_power8.c)
|
||||||
|
+ contrib/power/crc32_z_power8.c
|
||||||
|
+ contrib/power/slide_hash_power8.c)
|
||||||
|
|
||||||
|
set_source_files_properties(
|
||||||
|
${ZLIB_POWER8}
|
||||||
|
Index: zlib-1.2.13/Makefile.in
|
||||||
|
===================================================================
|
||||||
|
--- zlib-1.2.13.orig/Makefile.in
|
||||||
|
+++ zlib-1.2.13/Makefile.in
|
||||||
|
@@ -185,6 +185,9 @@ crc32-vx.o: $(SRCDIR)contrib/s390/crc32-
|
||||||
|
deflate.o: $(SRCDIR)deflate.c
|
||||||
|
$(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)deflate.c
|
||||||
|
|
||||||
|
+slide_hash_power8.o: $(SRCDIR)contrib/power/slide_hash_power8.c
|
||||||
|
+ $(CC) $(CFLAGS) -mcpu=power8 $(ZINC) -c -o $@ $(SRCDIR)contrib/power/slide_hash_power8.c
|
||||||
|
+
|
||||||
|
infback.o: $(SRCDIR)infback.c
|
||||||
|
$(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)infback.c
|
||||||
|
|
||||||
|
@@ -252,6 +255,11 @@ deflate.lo: $(SRCDIR)deflate.c
|
||||||
|
$(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/deflate.o $(SRCDIR)deflate.c
|
||||||
|
-@mv objs/deflate.o $@
|
||||||
|
|
||||||
|
+slide_hash_power8.lo: $(SRCDIR)contrib/power/slide_hash_power8.c
|
||||||
|
+ -@mkdir objs 2>/dev/null || test -d objs
|
||||||
|
+ $(CC) $(SFLAGS) -mcpu=power8 $(ZINC) -DPIC -c -o objs/slide_hash_power8.o $(SRCDIR)contrib/power/slide_hash_power8.c
|
||||||
|
+ -@mv objs/slide_hash_power8.o $@
|
||||||
|
+
|
||||||
|
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
|
||||||
|
Index: zlib-1.2.13/configure
|
||||||
|
===================================================================
|
||||||
|
--- zlib-1.2.13.orig/configure
|
||||||
|
+++ zlib-1.2.13/configure
|
||||||
|
@@ -898,8 +898,8 @@ if tryboth $CC -c $CFLAGS $test.c; then
|
||||||
|
|
||||||
|
if tryboth $CC -c $CFLAGS -mcpu=power8 $test.c; then
|
||||||
|
POWER8="-DZ_POWER8"
|
||||||
|
- PIC_OBJC="${PIC_OBJC} adler32_power8.lo crc32_z_power8.lo"
|
||||||
|
- OBJC="${OBJC} adler32_power8.o crc32_z_power8.o"
|
||||||
|
+ PIC_OBJC="${PIC_OBJC} adler32_power8.lo crc32_z_power8.lo slide_hash_power8.lo"
|
||||||
|
+ OBJC="${OBJC} adler32_power8.o crc32_z_power8.o slide_hash_power8.o"
|
||||||
|
echo "Checking for -mcpu=power8 support... Yes." | tee -a configure.log
|
||||||
|
else
|
||||||
|
echo "Checking for -mcpu=power8 support... No." | tee -a configure.log
|
||||||
|
Index: zlib-1.2.13/contrib/power/power.h
|
||||||
|
===================================================================
|
||||||
|
--- zlib-1.2.13.orig/contrib/power/power.h
|
||||||
|
+++ zlib-1.2.13/contrib/power/power.h
|
||||||
|
@@ -4,7 +4,10 @@
|
||||||
|
*/
|
||||||
|
#include "../../zconf.h"
|
||||||
|
#include "../../zutil.h"
|
||||||
|
+#include "../../deflate.h"
|
||||||
|
|
||||||
|
uLong _adler32_power8(uLong adler, const Bytef* buf, uInt len);
|
||||||
|
|
||||||
|
unsigned long _crc32_z_power8(unsigned long, const Bytef *, z_size_t);
|
||||||
|
+
|
||||||
|
+void _slide_hash_power8(deflate_state *s);
|
||||||
|
Index: zlib-1.2.13/contrib/power/slide_hash_power8.c
|
||||||
|
===================================================================
|
||||||
|
--- /dev/null
|
||||||
|
+++ zlib-1.2.13/contrib/power/slide_hash_power8.c
|
||||||
|
@@ -0,0 +1,63 @@
|
||||||
|
+ /* Copyright (C) 2019 Matheus Castanho <msc@linux.ibm.com>, IBM
|
||||||
|
+ * For conditions of distribution and use, see copyright notice in zlib.h
|
||||||
|
+ */
|
||||||
|
+
|
||||||
|
+#include <altivec.h>
|
||||||
|
+#include "../../deflate.h"
|
||||||
|
+
|
||||||
|
+local inline void slide_hash_power8_loop OF((deflate_state *s,
|
||||||
|
+ unsigned n_elems, Posf *table_end)) __attribute__((always_inline));
|
||||||
|
+
|
||||||
|
+local void slide_hash_power8_loop(
|
||||||
|
+ deflate_state *s,
|
||||||
|
+ unsigned n_elems,
|
||||||
|
+ Posf *table_end)
|
||||||
|
+{
|
||||||
|
+ vector unsigned short vw, vm, *vp;
|
||||||
|
+ unsigned chunks;
|
||||||
|
+
|
||||||
|
+ /* Each vector register (chunk) corresponds to 128 bits == 8 Posf,
|
||||||
|
+ * so instead of processing each of the n_elems in the hash table
|
||||||
|
+ * individually, we can do it in chunks of 8 with vector instructions.
|
||||||
|
+ *
|
||||||
|
+ * This function is only called from slide_hash_power8(), and both calls
|
||||||
|
+ * pass n_elems as a power of 2 higher than 2^7, as defined by
|
||||||
|
+ * deflateInit2_(), so n_elems will always be a multiple of 8. */
|
||||||
|
+ chunks = n_elems >> 3;
|
||||||
|
+ Assert(n_elems % 8 == 0, "Weird hash table size!");
|
||||||
|
+
|
||||||
|
+ /* This type casting is safe since s->w_size is always <= 64KB
|
||||||
|
+ * as defined by deflateInit2_() and Posf == unsigned short */
|
||||||
|
+ vw[0] = (Posf) s->w_size;
|
||||||
|
+ vw = vec_splat(vw,0);
|
||||||
|
+
|
||||||
|
+ vp = (vector unsigned short *) table_end;
|
||||||
|
+
|
||||||
|
+ do {
|
||||||
|
+ /* Processing 8 elements at a time */
|
||||||
|
+ vp--;
|
||||||
|
+ vm = *vp;
|
||||||
|
+
|
||||||
|
+ /* This is equivalent to: m >= w_size ? m - w_size : 0
|
||||||
|
+ * Since we are using a saturated unsigned subtraction, any
|
||||||
|
+ * values that are > w_size will be set to 0, while the others
|
||||||
|
+ * will be subtracted by w_size. */
|
||||||
|
+ *vp = vec_subs(vm,vw);
|
||||||
|
+ } while (--chunks);
|
||||||
|
+};
|
||||||
|
+
|
||||||
|
+void ZLIB_INTERNAL _slide_hash_power8(deflate_state *s)
|
||||||
|
+{
|
||||||
|
+ unsigned n;
|
||||||
|
+ Posf *p;
|
||||||
|
+
|
||||||
|
+ n = s->hash_size;
|
||||||
|
+ p = &s->head[n];
|
||||||
|
+ slide_hash_power8_loop(s,n,p);
|
||||||
|
+
|
||||||
|
+#ifndef FASTEST
|
||||||
|
+ n = s->w_size;
|
||||||
|
+ p = &s->prev[n];
|
||||||
|
+ slide_hash_power8_loop(s,n,p);
|
||||||
|
+#endif
|
||||||
|
+}
|
||||||
|
Index: zlib-1.2.13/contrib/power/slide_hash_resolver.c
|
||||||
|
===================================================================
|
||||||
|
--- /dev/null
|
||||||
|
+++ zlib-1.2.13/contrib/power/slide_hash_resolver.c
|
||||||
|
@@ -0,0 +1,15 @@
|
||||||
|
+/* Copyright (C) 2019 Matheus Castanho <msc@linux.ibm.com>, IBM
|
||||||
|
+ * For conditions of distribution and use, see copyright notice in zlib.h
|
||||||
|
+ */
|
||||||
|
+
|
||||||
|
+#include "../gcc/zifunc.h"
|
||||||
|
+#include "power.h"
|
||||||
|
+
|
||||||
|
+Z_IFUNC(slide_hash) {
|
||||||
|
+#ifdef Z_POWER8
|
||||||
|
+ if (__builtin_cpu_supports("arch_2_07"))
|
||||||
|
+ return _slide_hash_power8;
|
||||||
|
+#endif
|
||||||
|
+
|
||||||
|
+ return slide_hash_default;
|
||||||
|
+}
|
||||||
|
Index: zlib-1.2.13/deflate.c
|
||||||
|
===================================================================
|
||||||
|
--- zlib-1.2.13.orig/deflate.c
|
||||||
|
+++ zlib-1.2.13/deflate.c
|
||||||
|
@@ -204,6 +204,13 @@ local const config configuration_table[1
|
||||||
|
(unsigned)(s->hash_size - 1)*sizeof(*s->head)); \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
+#ifdef Z_POWER_OPT
|
||||||
|
+/* Rename function so resolver can use its symbol. The default version will be
|
||||||
|
+ * returned by the resolver if the host has no support for an optimized version.
|
||||||
|
+ */
|
||||||
|
+#define slide_hash slide_hash_default
|
||||||
|
+#endif /* Z_POWER_OPT */
|
||||||
|
+
|
||||||
|
/* ===========================================================================
|
||||||
|
* Slide the hash table when sliding the window down (could be avoided with 32
|
||||||
|
* bit values at the expense of memory usage). We slide even when level == 0 to
|
||||||
|
@@ -235,6 +242,11 @@ local void slide_hash(s)
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
+#ifdef Z_POWER_OPT
|
||||||
|
+#undef slide_hash
|
||||||
|
+#include "contrib/power/slide_hash_resolver.c"
|
||||||
|
+#endif /* Z_POWER_OPT */
|
||||||
|
+
|
||||||
|
/* ========================================================================= */
|
||||||
|
int ZEXPORT deflateInit_(strm, level, version, stream_size)
|
||||||
|
z_streamp strm;
|
338
zlib-1.2.12-add-vectorized-longest_match-for-power.patch
Normal file
338
zlib-1.2.12-add-vectorized-longest_match-for-power.patch
Normal file
@ -0,0 +1,338 @@
|
|||||||
|
From aecdff0646c7e188b48f6db285d8d63a74f246c1 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Matheus Castanho <msc@linux.ibm.com>
|
||||||
|
Date: Tue, 29 Oct 2019 18:04:11 -0300
|
||||||
|
Subject: [PATCH] Add vectorized longest_match for Power
|
||||||
|
|
||||||
|
This commit introduces an optimized version of the longest_match
|
||||||
|
function for Power processors. It uses VSX instructions to match
|
||||||
|
16 bytes at a time on each comparison, instead of one by one.
|
||||||
|
|
||||||
|
Author: Matheus Castanho <msc@linux.ibm.com>
|
||||||
|
---
|
||||||
|
CMakeLists.txt | 3 +-
|
||||||
|
Makefile.in | 8 +
|
||||||
|
configure | 4 +-
|
||||||
|
contrib/power/longest_match_power9.c | 194 +++++++++++++++++++++++++
|
||||||
|
contrib/power/longest_match_resolver.c | 15 ++
|
||||||
|
contrib/power/power.h | 2 +
|
||||||
|
deflate.c | 13 ++
|
||||||
|
7 files changed, 236 insertions(+), 3 deletions(-)
|
||||||
|
create mode 100644 contrib/power/longest_match_power9.c
|
||||||
|
create mode 100644 contrib/power/longest_match_resolver.c
|
||||||
|
|
||||||
|
Index: zlib-1.2.13/CMakeLists.txt
|
||||||
|
===================================================================
|
||||||
|
--- zlib-1.2.13.orig/CMakeLists.txt
|
||||||
|
+++ zlib-1.2.13/CMakeLists.txt
|
||||||
|
@@ -187,7 +187,8 @@ if(CMAKE_COMPILER_IS_GNUCC)
|
||||||
|
|
||||||
|
if(POWER9)
|
||||||
|
add_definitions(-DZ_POWER9)
|
||||||
|
- set(ZLIB_POWER9 )
|
||||||
|
+ set(ZLIB_POWER9
|
||||||
|
+ contrib/power/longest_match_power9.c)
|
||||||
|
|
||||||
|
set_source_files_properties(
|
||||||
|
${ZLIB_POWER9}
|
||||||
|
Index: zlib-1.2.13/Makefile.in
|
||||||
|
===================================================================
|
||||||
|
--- zlib-1.2.13.orig/Makefile.in
|
||||||
|
+++ zlib-1.2.13/Makefile.in
|
||||||
|
@@ -185,6 +185,9 @@ crc32-vx.o: $(SRCDIR)contrib/s390/crc32-
|
||||||
|
deflate.o: $(SRCDIR)deflate.c
|
||||||
|
$(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)deflate.c
|
||||||
|
|
||||||
|
+longest_match_power9.o: $(SRCDIR)contrib/power/longest_match_power9.c
|
||||||
|
+ $(CC) $(CFLAGS) -mcpu=power9 $(ZINC) -c -o $@ $(SRCDIR)contrib/power/longest_match_power9.c
|
||||||
|
+
|
||||||
|
slide_hash_power8.o: $(SRCDIR)contrib/power/slide_hash_power8.c
|
||||||
|
$(CC) $(CFLAGS) -mcpu=power8 $(ZINC) -c -o $@ $(SRCDIR)contrib/power/slide_hash_power8.c
|
||||||
|
|
||||||
|
@@ -255,6 +258,11 @@ deflate.lo: $(SRCDIR)deflate.c
|
||||||
|
$(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/deflate.o $(SRCDIR)deflate.c
|
||||||
|
-@mv objs/deflate.o $@
|
||||||
|
|
||||||
|
+longest_match_power9.lo: $(SRCDIR)contrib/power/longest_match_power9.c
|
||||||
|
+ -@mkdir objs 2>/dev/null || test -d objs
|
||||||
|
+ $(CC) $(SFLAGS) -mcpu=power9 $(ZINC) -DPIC -c -o objs/longest_match_power9.o $(SRCDIR)contrib/power/longest_match_power9.c
|
||||||
|
+ -@mv objs/longest_match_power9.o $@
|
||||||
|
+
|
||||||
|
slide_hash_power8.lo: $(SRCDIR)contrib/power/slide_hash_power8.c
|
||||||
|
-@mkdir objs 2>/dev/null || test -d objs
|
||||||
|
$(CC) $(SFLAGS) -mcpu=power8 $(ZINC) -DPIC -c -o objs/slide_hash_power8.o $(SRCDIR)contrib/power/slide_hash_power8.c
|
||||||
|
Index: zlib-1.2.13/configure
|
||||||
|
===================================================================
|
||||||
|
--- zlib-1.2.13.orig/configure
|
||||||
|
+++ zlib-1.2.13/configure
|
||||||
|
@@ -907,8 +907,8 @@ if tryboth $CC -c $CFLAGS $test.c; then
|
||||||
|
|
||||||
|
if tryboth $CC -c $CFLAGS -mcpu=power9 $test.c; then
|
||||||
|
POWER9="-DZ_POWER9"
|
||||||
|
- PIC_OBJC="${PIC_OBJC}"
|
||||||
|
- OBJC="${OBJC}"
|
||||||
|
+ PIC_OBJC="$PIC_OBJC longest_match_power9.lo"
|
||||||
|
+ OBJC="$OBJC longest_match_power9.o"
|
||||||
|
echo "Checking for -mcpu=power9 support... Yes." | tee -a configure.log
|
||||||
|
else
|
||||||
|
echo "Checking for -mcpu=power9 support... No." | tee -a configure.log
|
||||||
|
Index: zlib-1.2.13/contrib/power/longest_match_power9.c
|
||||||
|
===================================================================
|
||||||
|
--- /dev/null
|
||||||
|
+++ zlib-1.2.13/contrib/power/longest_match_power9.c
|
||||||
|
@@ -0,0 +1,194 @@
|
||||||
|
+/* Copyright (C) 2019 Matheus Castanho <msc@linux.ibm.com>, IBM
|
||||||
|
+ * For conditions of distribution and use, see copyright notice in zlib.h
|
||||||
|
+ */
|
||||||
|
+
|
||||||
|
+#include <altivec.h>
|
||||||
|
+#include "../../deflate.h"
|
||||||
|
+
|
||||||
|
+local inline int vec_match OF((Bytef* scan, Bytef* match))
|
||||||
|
+ __attribute__((always_inline));
|
||||||
|
+
|
||||||
|
+local inline int vec_match(Bytef* scan, Bytef* match)
|
||||||
|
+{
|
||||||
|
+ vector unsigned char vscan, vmatch, vc;
|
||||||
|
+ int len;
|
||||||
|
+
|
||||||
|
+ vscan = *((vector unsigned char *) scan);
|
||||||
|
+ vmatch = *((vector unsigned char *) match);
|
||||||
|
+
|
||||||
|
+ /* Compare 16 bytes at a time.
|
||||||
|
+ * Each byte of vc will be either all ones or all zeroes,
|
||||||
|
+ * depending on the result of the comparison
|
||||||
|
+ */
|
||||||
|
+ vc = (vector unsigned char) vec_cmpne(vscan,vmatch);
|
||||||
|
+
|
||||||
|
+ /* Since the index of matching bytes will contain only zeroes
|
||||||
|
+ * on vc (since we used cmpne), counting the number of consecutive
|
||||||
|
+ * bytes where LSB == 0 is the same as counting the length of the match.
|
||||||
|
+ *
|
||||||
|
+ * There was an issue in the way the vec_cnttz_lsbb builtin was implemented
|
||||||
|
+ * that got fixed on GCC 12, but now we have to use different builtins
|
||||||
|
+ * depending on the compiler version. To avoid that, let's use inline asm to
|
||||||
|
+ * generate the exact instruction we need.
|
||||||
|
+ */
|
||||||
|
+ #ifdef __LITTLE_ENDIAN__
|
||||||
|
+ asm volatile("vctzlsbb %0, %1\n\t" : "=r" (len) : "v" (vc));
|
||||||
|
+ #else
|
||||||
|
+ asm volatile("vclzlsbb %0, %1\n\t" : "=r" (len) : "v" (vc));
|
||||||
|
+ #endif
|
||||||
|
+
|
||||||
|
+ return len;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+uInt ZLIB_INTERNAL _longest_match_power9(deflate_state *s, IPos cur_match)
|
||||||
|
+{
|
||||||
|
+ unsigned chain_length = s->max_chain_length;/* max hash chain length */
|
||||||
|
+ register Bytef *scan = s->window + s->strstart; /* current string */
|
||||||
|
+ register Bytef *match; /* matched string */
|
||||||
|
+ register int len; /* length of current match */
|
||||||
|
+ int best_len = (int)s->prev_length; /* best match length so far */
|
||||||
|
+ int nice_match = s->nice_match; /* stop if match long enough */
|
||||||
|
+ int mbytes; /* matched bytes inside loop */
|
||||||
|
+ IPos limit = s->strstart > (IPos)MAX_DIST(s) ?
|
||||||
|
+ s->strstart - (IPos)MAX_DIST(s) : 0;
|
||||||
|
+ /* Stop when cur_match becomes <= limit. To simplify the code,
|
||||||
|
+ * we prevent matches with the string of window index 0.
|
||||||
|
+ */
|
||||||
|
+ Posf *prev = s->prev;
|
||||||
|
+ uInt wmask = s->w_mask;
|
||||||
|
+
|
||||||
|
+#if (MAX_MATCH == 258)
|
||||||
|
+ /* Compare the last two bytes at once. */
|
||||||
|
+ register Bytef *strend2 = s->window + s->strstart + MAX_MATCH - 2;
|
||||||
|
+ register ush scan_end = *(ushf*)(scan+best_len-1);
|
||||||
|
+#else
|
||||||
|
+ register Bytef *strend = s->window + s->strstart + MAX_MATCH;
|
||||||
|
+ register Byte scan_end1 = scan[best_len-1];
|
||||||
|
+ register Byte scan_end = scan[best_len];
|
||||||
|
+#endif
|
||||||
|
+
|
||||||
|
+ /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16.
|
||||||
|
+ * It is easy to get rid of this optimization if necessary.
|
||||||
|
+ */
|
||||||
|
+ Assert(s->hash_bits >= 8 && MAX_MATCH == 258, "Code too clever");
|
||||||
|
+
|
||||||
|
+ /* Do not waste too much time if we already have a good match: */
|
||||||
|
+ if (s->prev_length >= s->good_match) {
|
||||||
|
+ chain_length >>= 2;
|
||||||
|
+ }
|
||||||
|
+ /* Do not look for matches beyond the end of the input. This is necessary
|
||||||
|
+ * to make deflate deterministic.
|
||||||
|
+ */
|
||||||
|
+ if ((uInt)nice_match > s->lookahead) nice_match = (int)s->lookahead;
|
||||||
|
+
|
||||||
|
+ Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, "need lookahead");
|
||||||
|
+
|
||||||
|
+ do {
|
||||||
|
+ Assert(cur_match < s->strstart, "no future");
|
||||||
|
+ match = s->window + cur_match;
|
||||||
|
+
|
||||||
|
+ /* Skip to next match if the match length cannot increase
|
||||||
|
+ * or if the match length is less than 2. Note that the checks below
|
||||||
|
+ * for insufficient lookahead only occur occasionally for performance
|
||||||
|
+ * reasons. Therefore uninitialized memory will be accessed, and
|
||||||
|
+ * conditional jumps will be made that depend on those values.
|
||||||
|
+ * However the length of the match is limited to the lookahead, so
|
||||||
|
+ * the output of deflate is not affected by the uninitialized values.
|
||||||
|
+ */
|
||||||
|
+
|
||||||
|
+/* MAX_MATCH - 2 should be a multiple of 16 for this optimization to work. */
|
||||||
|
+#if (MAX_MATCH == 258)
|
||||||
|
+
|
||||||
|
+ /* Compare ending (2 bytes) and beginning of potential match.
|
||||||
|
+ *
|
||||||
|
+ * On Power processors, loading a 16-byte vector takes only 1 extra
|
||||||
|
+ * cycle compared to a regular byte load. So instead of comparing the
|
||||||
|
+ * first two bytes and then the rest later if they match, we can compare
|
||||||
|
+ * the first 16 at once, and when we have a match longer than 2, we will
|
||||||
|
+ * already have the result of comparing the first 16 bytes saved in mbytes.
|
||||||
|
+ */
|
||||||
|
+ if (*(ushf*)(match+best_len-1) != scan_end ||
|
||||||
|
+ (mbytes = vec_match(scan,match)) < 3) continue;
|
||||||
|
+
|
||||||
|
+ scan += mbytes;
|
||||||
|
+ match += mbytes;
|
||||||
|
+
|
||||||
|
+ /* In case when we may have a match longer than 16, we perform further
|
||||||
|
+ * comparisons in chunks of 16 and keep going while all bytes match.
|
||||||
|
+ */
|
||||||
|
+ while(mbytes == 16) {
|
||||||
|
+ mbytes = vec_match(scan,match);
|
||||||
|
+ scan += mbytes;
|
||||||
|
+ match += mbytes;
|
||||||
|
+
|
||||||
|
+ /* We also have to limit the maximum match based on MAX_MATCH.
|
||||||
|
+ * Since we are comparing 16 bytes at a time and MAX_MATCH == 258 (to
|
||||||
|
+ * comply with default implementation), we should stop comparing when
|
||||||
|
+ * we have matched 256 bytes, which happens when scan == strend2.
|
||||||
|
+ * In this ("rare") case, we have to check the remaining 2 bytes
|
||||||
|
+ * individually using common load and compare operations.
|
||||||
|
+ */
|
||||||
|
+ if(scan >= strend2) {
|
||||||
|
+ if(*scan == *match) {
|
||||||
|
+ if(*++scan == *++match)
|
||||||
|
+ scan++;
|
||||||
|
+ }
|
||||||
|
+ break;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan");
|
||||||
|
+
|
||||||
|
+ len = (MAX_MATCH - 2) - (int)(strend2 - scan);
|
||||||
|
+ scan = strend2 - (MAX_MATCH - 2);
|
||||||
|
+
|
||||||
|
+#else /* MAX_MATCH == 258 */
|
||||||
|
+
|
||||||
|
+ if (match[best_len] != scan_end ||
|
||||||
|
+ match[best_len-1] != scan_end1 ||
|
||||||
|
+ *match != *scan ||
|
||||||
|
+ *++match != scan[1]) continue;
|
||||||
|
+
|
||||||
|
+ /* The check at best_len-1 can be removed because it will be made
|
||||||
|
+ * again later. (This heuristic is not always a win.)
|
||||||
|
+ * It is not necessary to compare scan[2] and match[2] since they
|
||||||
|
+ * are always equal when the other bytes match, given that
|
||||||
|
+ * the hash keys are equal and that HASH_BITS >= 8.
|
||||||
|
+ */
|
||||||
|
+ scan += 2, match++;
|
||||||
|
+ Assert(*scan == *match, "match[2]?");
|
||||||
|
+
|
||||||
|
+ /* We check for insufficient lookahead only every 8th comparison;
|
||||||
|
+ * the 256th check will be made at strstart+258.
|
||||||
|
+ */
|
||||||
|
+ do {
|
||||||
|
+ } while (*++scan == *++match && *++scan == *++match &&
|
||||||
|
+ *++scan == *++match && *++scan == *++match &&
|
||||||
|
+ *++scan == *++match && *++scan == *++match &&
|
||||||
|
+ *++scan == *++match && *++scan == *++match &&
|
||||||
|
+ scan < strend);
|
||||||
|
+
|
||||||
|
+ Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan");
|
||||||
|
+
|
||||||
|
+ len = MAX_MATCH - (int)(strend - scan);
|
||||||
|
+ scan = strend - MAX_MATCH;
|
||||||
|
+
|
||||||
|
+#endif /* MAX_MATCH == 258 */
|
||||||
|
+
|
||||||
|
+ if (len > best_len) {
|
||||||
|
+ s->match_start = cur_match;
|
||||||
|
+ best_len = len;
|
||||||
|
+ if (len >= nice_match) break;
|
||||||
|
+#if (MAX_MATCH == 258)
|
||||||
|
+ scan_end = *(ushf*)(scan+best_len-1);
|
||||||
|
+#else
|
||||||
|
+ scan_end1 = scan[best_len-1];
|
||||||
|
+ scan_end = scan[best_len];
|
||||||
|
+#endif
|
||||||
|
+ }
|
||||||
|
+ } while ((cur_match = prev[cur_match & wmask]) > limit
|
||||||
|
+ && --chain_length != 0);
|
||||||
|
+
|
||||||
|
+ if ((uInt)best_len <= s->lookahead) return (uInt)best_len;
|
||||||
|
+ return s->lookahead;
|
||||||
|
+}
|
||||||
|
Index: zlib-1.2.13/contrib/power/longest_match_resolver.c
|
||||||
|
===================================================================
|
||||||
|
--- /dev/null
|
||||||
|
+++ zlib-1.2.13/contrib/power/longest_match_resolver.c
|
||||||
|
@@ -0,0 +1,15 @@
|
||||||
|
+/* Copyright (C) 2019 Matheus Castanho <msc@linux.ibm.com>, IBM
|
||||||
|
+ * For conditions of distribution and use, see copyright notice in zlib.h
|
||||||
|
+ */
|
||||||
|
+
|
||||||
|
+#include "../gcc/zifunc.h"
|
||||||
|
+#include "power.h"
|
||||||
|
+
|
||||||
|
+Z_IFUNC(longest_match) {
|
||||||
|
+#ifdef Z_POWER9
|
||||||
|
+ if (__builtin_cpu_supports("arch_3_00"))
|
||||||
|
+ return _longest_match_power9;
|
||||||
|
+#endif
|
||||||
|
+
|
||||||
|
+ return longest_match_default;
|
||||||
|
+}
|
||||||
|
Index: zlib-1.2.13/contrib/power/power.h
|
||||||
|
===================================================================
|
||||||
|
--- zlib-1.2.13.orig/contrib/power/power.h
|
||||||
|
+++ zlib-1.2.13/contrib/power/power.h
|
||||||
|
@@ -10,4 +10,6 @@ uLong _adler32_power8(uLong adler, const
|
||||||
|
|
||||||
|
unsigned long _crc32_z_power8(unsigned long, const Bytef *, z_size_t);
|
||||||
|
|
||||||
|
+uInt _longest_match_power9(deflate_state *s, IPos cur_match);
|
||||||
|
+
|
||||||
|
void _slide_hash_power8(deflate_state *s);
|
||||||
|
Index: zlib-1.2.13/deflate.c
|
||||||
|
===================================================================
|
||||||
|
--- zlib-1.2.13.orig/deflate.c
|
||||||
|
+++ zlib-1.2.13/deflate.c
|
||||||
|
@@ -1313,6 +1313,14 @@ local void lm_init(s)
|
||||||
|
* string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1
|
||||||
|
* OUT assertion: the match length is not greater than s->lookahead.
|
||||||
|
*/
|
||||||
|
+
|
||||||
|
+#ifdef Z_POWER_OPT
|
||||||
|
+/* Rename function so resolver can use its symbol. The default version will be
|
||||||
|
+ * returned by the resolver if the host has no support for an optimized version.
|
||||||
|
+ */
|
||||||
|
+#define longest_match longest_match_default
|
||||||
|
+#endif /* Z_POWER_OPT */
|
||||||
|
+
|
||||||
|
local uInt longest_match(s, pcur_match)
|
||||||
|
deflate_state *s;
|
||||||
|
IPos pcur_match; /* current match */
|
||||||
|
@@ -1460,6 +1468,11 @@ local uInt longest_match(s, pcur_match)
|
||||||
|
return s->lookahead;
|
||||||
|
}
|
||||||
|
|
||||||
|
+#ifdef Z_POWER_OPT
|
||||||
|
+#undef longest_match
|
||||||
|
+#include "contrib/power/longest_match_resolver.c"
|
||||||
|
+#endif /* Z_POWER_OPT */
|
||||||
|
+
|
||||||
|
#else /* FASTEST */
|
||||||
|
|
||||||
|
/* ---------------------------------------------------------------------------
|
342
zlib-1.2.12-adler32-vector-optimizations-for-power.patch
Normal file
342
zlib-1.2.12-adler32-vector-optimizations-for-power.patch
Normal file
@ -0,0 +1,342 @@
|
|||||||
|
From 772f4bd0f880c4c193ab7da78728f38821572a02 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Rogerio Alves <rcardoso@linux.ibm.com>
|
||||||
|
Date: Mon, 9 Dec 2019 14:40:53 -0300
|
||||||
|
Subject: [PATCH] Adler32 vector optimization for Power.
|
||||||
|
|
||||||
|
This commit implements a Power (POWER8+) vector optimization for Adler32
|
||||||
|
checksum using VSX (vector) instructions. The VSX adler32 checksum is up
|
||||||
|
to 10x fast than the adler32 baseline code.
|
||||||
|
|
||||||
|
Author: Rogerio Alves <rcardoso@linux.ibm.com>
|
||||||
|
---
|
||||||
|
CMakeLists.txt | 1 +
|
||||||
|
Makefile.in | 8 ++
|
||||||
|
adler32.c | 11 ++
|
||||||
|
configure | 4 +-
|
||||||
|
contrib/power/adler32_power8.c | 196 +++++++++++++++++++++++++++++++
|
||||||
|
contrib/power/adler32_resolver.c | 15 +++
|
||||||
|
contrib/power/power.h | 4 +-
|
||||||
|
7 files changed, 236 insertions(+), 3 deletions(-)
|
||||||
|
create mode 100644 contrib/power/adler32_power8.c
|
||||||
|
create mode 100644 contrib/power/adler32_resolver.c
|
||||||
|
|
||||||
|
diff --git a/CMakeLists.txt b/CMakeLists.txt
|
||||||
|
index 581e1fa6d..c6296ee68 100644
|
||||||
|
--- a/CMakeLists.txt
|
||||||
|
+++ b/CMakeLists.txt
|
||||||
|
@@ -185,6 +185,7 @@ if(CMAKE_COMPILER_IS_GNUCC)
|
||||||
|
if(POWER8)
|
||||||
|
add_definitions(-DZ_POWER8)
|
||||||
|
set(ZLIB_POWER8
|
||||||
|
+ contrib/power/adler32_power8.c
|
||||||
|
contrib/power/crc32_z_power8.c)
|
||||||
|
|
||||||
|
set_source_files_properties(
|
||||||
|
diff --git a/Makefile.in b/Makefile.in
|
||||||
|
index 16943044e..a0ffac860 100644
|
||||||
|
--- a/Makefile.in
|
||||||
|
+++ b/Makefile.in
|
||||||
|
@@ -165,6 +165,9 @@ minigzip64.o: $(SRCDIR)test/minigzip.c $(SRCDIR)zlib.h zconf.h
|
||||||
|
adler32.o: $(SRCDIR)adler32.c
|
||||||
|
$(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)adler32.c
|
||||||
|
|
||||||
|
+adler32_power8.o: $(SRCDIR)contrib/power/adler32_power8.c
|
||||||
|
+ $(CC) $(CFLAGS) -mcpu=power8 $(ZINC) -c -o $@ $(SRCDIR)contrib/power/adler32_power8.c
|
||||||
|
+
|
||||||
|
crc32.o: $(SRCDIR)crc32.c
|
||||||
|
$(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)crc32.c
|
||||||
|
|
||||||
|
@@ -216,6 +219,11 @@ adler32.lo: $(SRCDIR)adler32.c
|
||||||
|
$(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/adler32.o $(SRCDIR)adler32.c
|
||||||
|
-@mv objs/adler32.o $@
|
||||||
|
|
||||||
|
+adler32_power8.lo: $(SRCDIR)contrib/power/adler32_power8.c
|
||||||
|
+ -@mkdir objs 2>/dev/null || test -d objs
|
||||||
|
+ $(CC) $(SFLAGS) -mcpu=power8 $(ZINC) -DPIC -c -o objs/adler32_power8.o $(SRCDIR)contrib/power/adler32_power8.c
|
||||||
|
+ -@mv objs/adler32_power8.o $@
|
||||||
|
+
|
||||||
|
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
|
||||||
|
diff --git a/adler32.c b/adler32.c
|
||||||
|
index d0be4380a..4bde0fa18 100644
|
||||||
|
--- a/adler32.c
|
||||||
|
+++ b/adler32.c
|
||||||
|
@@ -131,6 +131,12 @@ uLong ZEXPORT adler32_z(adler, buf, len)
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ========================================================================= */
|
||||||
|
+
|
||||||
|
+#ifdef Z_POWER_OPT
|
||||||
|
+/* Rename the default function to avoid naming conflicts */
|
||||||
|
+#define adler32 adler32_default
|
||||||
|
+#endif /* Z_POWER_OPT */
|
||||||
|
+
|
||||||
|
uLong ZEXPORT adler32(adler, buf, len)
|
||||||
|
uLong adler;
|
||||||
|
const Bytef *buf;
|
||||||
|
@@ -139,6 +145,11 @@ uLong ZEXPORT adler32(adler, buf, len)
|
||||||
|
return adler32_z(adler, buf, len);
|
||||||
|
}
|
||||||
|
|
||||||
|
+#ifdef Z_POWER_OPT
|
||||||
|
+#undef adler32
|
||||||
|
+#include "contrib/power/adler32_resolver.c"
|
||||||
|
+#endif /* Z_POWER_OPT */
|
||||||
|
+
|
||||||
|
/* ========================================================================= */
|
||||||
|
local uLong adler32_combine_(adler1, adler2, len2)
|
||||||
|
uLong adler1;
|
||||||
|
diff --git a/configure b/configure
|
||||||
|
index 914d9f4aa..810a7404d 100755
|
||||||
|
--- a/configure
|
||||||
|
+++ b/configure
|
||||||
|
@@ -879,8 +879,8 @@ if tryboth $CC -c $CFLAGS $test.c; then
|
||||||
|
|
||||||
|
if tryboth $CC -c $CFLAGS -mcpu=power8 $test.c; then
|
||||||
|
POWER8="-DZ_POWER8"
|
||||||
|
- PIC_OBJC="${PIC_OBJC} crc32_z_power8.lo"
|
||||||
|
- OBJC="${OBJC} crc32_z_power8.o"
|
||||||
|
+ PIC_OBJC="${PIC_OBJC} adler32_power8.lo crc32_z_power8.lo"
|
||||||
|
+ OBJC="${OBJC} adler32_power8.o crc32_z_power8.o"
|
||||||
|
echo "Checking for -mcpu=power8 support... Yes." | tee -a configure.log
|
||||||
|
else
|
||||||
|
echo "Checking for -mcpu=power8 support... No." | tee -a configure.log
|
||||||
|
diff --git a/contrib/power/adler32_power8.c b/contrib/power/adler32_power8.c
|
||||||
|
new file mode 100644
|
||||||
|
index 000000000..473c39457
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/contrib/power/adler32_power8.c
|
||||||
|
@@ -0,0 +1,196 @@
|
||||||
|
+/*
|
||||||
|
+ * Adler32 for POWER 8+ using VSX instructions.
|
||||||
|
+ *
|
||||||
|
+ * Calculate adler32 checksum for 16 bytes at once using POWER8+ VSX (vector)
|
||||||
|
+ * instructions.
|
||||||
|
+ *
|
||||||
|
+ * If adler32 do 1 byte at time on the first iteration s1 is s1_0 (_n means
|
||||||
|
+ * iteration n) is the initial value of adler - at start _0 is 1 unless
|
||||||
|
+ * adler initial value is different than 1. So s1_1 = s1_0 + c[0] after
|
||||||
|
+ * the first calculation. For the iteration s1_2 = s1_1 + c[1] and so on.
|
||||||
|
+ * Hence, for iteration N, s1_N = s1_(N-1) + c[N] is the value of s1 on
|
||||||
|
+ * after iteration N.
|
||||||
|
+ *
|
||||||
|
+ * Therefore, for s2 and iteration N, s2_N = s2_0 + N*s1_N + N*c[0] +
|
||||||
|
+ * N-1*c[1] + ... + c[N]
|
||||||
|
+ *
|
||||||
|
+ * In a more general way:
|
||||||
|
+ *
|
||||||
|
+ * s1_N = s1_0 + sum(i=1 to N)c[i]
|
||||||
|
+ * s2_N = s2_0 + N*s1 + sum (i=1 to N)(N-i+1)*c[i]
|
||||||
|
+ *
|
||||||
|
+ * Where s1_N, s2_N are the values for s1, s2 after N iterations. So if we
|
||||||
|
+ * can process N-bit at time we can do this at once.
|
||||||
|
+ *
|
||||||
|
+ * Since VSX can support 16-bit vector instructions, we can process
|
||||||
|
+ * 16-bit at time using N = 16 we have:
|
||||||
|
+ *
|
||||||
|
+ * s1 = s1_16 = s1_(16-1) + c[16] = s1_0 + sum(i=1 to 16)c[i]
|
||||||
|
+ * s2 = s2_16 = s2_0 + 16*s1 + sum(i=1 to 16)(16-i+1)*c[i]
|
||||||
|
+ *
|
||||||
|
+ * After the first iteration we calculate the adler32 checksum for 16 bytes.
|
||||||
|
+ *
|
||||||
|
+ * For more background about adler32 please check the RFC:
|
||||||
|
+ * https://www.ietf.org/rfc/rfc1950.txt
|
||||||
|
+ *
|
||||||
|
+ * Copyright (C) 2019 Rogerio Alves <rcardoso@linux.ibm.com>, IBM
|
||||||
|
+ * For conditions of distribution and use, see copyright notice in zlib.h
|
||||||
|
+ *
|
||||||
|
+ */
|
||||||
|
+
|
||||||
|
+#include "../../zutil.h"
|
||||||
|
+#include <altivec.h>
|
||||||
|
+
|
||||||
|
+/* Largest prime smaller than 65536. */
|
||||||
|
+#define BASE 65521U
|
||||||
|
+#define NMAX 5552
|
||||||
|
+/* NMAX is the largest n such that 255n(n+1)/2 + (n+1)(BASE-1) <= 2^32-1. */
|
||||||
|
+
|
||||||
|
+#define DO1(s1,s2,buf,i) {(s1) += buf[(i)]; (s2) += (s1);}
|
||||||
|
+#define DO2(s1,s2,buf,i) {DO1(s1,s2,buf,i); DO1(s1,s2,buf,i+1);}
|
||||||
|
+#define DO4(s1,s2,buf,i) {DO2(s1,s2,buf,i); DO2(s1,s2,buf,i+2);}
|
||||||
|
+#define DO8(s1,s2,buf,i) {DO4(s1,s2,buf,i); DO4(s1,s2,buf,i+4);}
|
||||||
|
+#define DO16(s1,s2,buf) {DO8(s1,s2,buf,0); DO8(s1,s2,buf,8);}
|
||||||
|
+
|
||||||
|
+/* Vector across sum unsigned int (saturate). */
|
||||||
|
+inline vector unsigned int vec_sumsu (vector unsigned int __a,
|
||||||
|
+ vector unsigned int __b)
|
||||||
|
+{
|
||||||
|
+ __b = vec_sld(__a, __a, 8);
|
||||||
|
+ __b = vec_add(__b, __a);
|
||||||
|
+ __a = vec_sld(__b, __b, 4);
|
||||||
|
+ __a = vec_add(__a, __b);
|
||||||
|
+
|
||||||
|
+ return __a;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+uLong ZLIB_INTERNAL _adler32_power8 (uLong adler, const Bytef* buf, uInt len)
|
||||||
|
+{
|
||||||
|
+ /* If buffer is empty or len=0 we need to return adler initial value. */
|
||||||
|
+ if (buf == NULL)
|
||||||
|
+ return 1;
|
||||||
|
+
|
||||||
|
+ unsigned int s1 = adler & 0xffff;
|
||||||
|
+ unsigned int s2 = (adler >> 16) & 0xffff;
|
||||||
|
+
|
||||||
|
+ /* in case user likes doing a byte at a time, keep it fast */
|
||||||
|
+ if (len == 1) {
|
||||||
|
+ s1 += buf[0];
|
||||||
|
+ if (s1 >= BASE)
|
||||||
|
+ s1 -= BASE;
|
||||||
|
+ s2 += s1;
|
||||||
|
+ if (s2 >= BASE)
|
||||||
|
+ s2 -= BASE;
|
||||||
|
+ return (s2 << 16) | s1;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ /* Keep it fast for short length buffers. */
|
||||||
|
+ if (len < 16) {
|
||||||
|
+ while (len--) {
|
||||||
|
+ s1 += *buf++;
|
||||||
|
+ s2 += s1;
|
||||||
|
+ }
|
||||||
|
+ if (s1 >= BASE)
|
||||||
|
+ s1 -= BASE;
|
||||||
|
+ s2 %= BASE;
|
||||||
|
+ return (s2 << 16) | s1;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ /* This is faster than VSX code for len < 64. */
|
||||||
|
+ if (len < 64) {
|
||||||
|
+ while (len >= 16) {
|
||||||
|
+ len -= 16;
|
||||||
|
+ DO16(s1,s2,buf);
|
||||||
|
+ buf += 16;
|
||||||
|
+ }
|
||||||
|
+ } else {
|
||||||
|
+ /* Use POWER VSX instructions for len >= 64. */
|
||||||
|
+ const vector unsigned int v_zeros = { 0 };
|
||||||
|
+ const vector unsigned char v_mul = {16, 15, 14, 13, 12, 11, 10, 9, 8, 7,
|
||||||
|
+ 6, 5, 4, 3, 2, 1};
|
||||||
|
+ const vector unsigned char vsh = vec_splat_u8(4);
|
||||||
|
+ const vector unsigned int vmask = {0xffffffff, 0x0, 0x0, 0x0};
|
||||||
|
+ vector unsigned int vs1 = vec_xl(0, &s1);
|
||||||
|
+ vector unsigned int vs2 = vec_xl(0, &s2);
|
||||||
|
+ vector unsigned int vs1_save = { 0 };
|
||||||
|
+ vector unsigned int vsum1, vsum2;
|
||||||
|
+ vector unsigned char vbuf;
|
||||||
|
+ int n;
|
||||||
|
+
|
||||||
|
+ /* Zeros the undefined values of vectors vs1, vs2. */
|
||||||
|
+ vs1 = vec_and(vs1, vmask);
|
||||||
|
+ vs2 = vec_and(vs2, vmask);
|
||||||
|
+
|
||||||
|
+ /* Do length bigger than NMAX in blocks of NMAX size. */
|
||||||
|
+ while (len >= NMAX) {
|
||||||
|
+ len -= NMAX;
|
||||||
|
+ n = NMAX / 16;
|
||||||
|
+ do {
|
||||||
|
+ vbuf = vec_xl(0, (unsigned char *) buf);
|
||||||
|
+ vsum1 = vec_sum4s(vbuf, v_zeros); /* sum(i=1 to 16) buf[i]. */
|
||||||
|
+ /* sum(i=1 to 16) buf[i]*(16-i+1). */
|
||||||
|
+ vsum2 = vec_msum(vbuf, v_mul, v_zeros);
|
||||||
|
+ /* Save vs1. */
|
||||||
|
+ vs1_save = vec_add(vs1_save, vs1);
|
||||||
|
+ /* Accumulate the sums. */
|
||||||
|
+ vs1 = vec_add(vsum1, vs1);
|
||||||
|
+ vs2 = vec_add(vsum2, vs2);
|
||||||
|
+
|
||||||
|
+ buf += 16;
|
||||||
|
+ } while (--n);
|
||||||
|
+ /* Once each block of NMAX size. */
|
||||||
|
+ vs1 = vec_sumsu(vs1, vsum1);
|
||||||
|
+ vs1_save = vec_sll(vs1_save, vsh); /* 16*vs1_save. */
|
||||||
|
+ vs2 = vec_add(vs1_save, vs2);
|
||||||
|
+ vs2 = vec_sumsu(vs2, vsum2);
|
||||||
|
+
|
||||||
|
+ /* vs1[0] = (s1_i + sum(i=1 to 16)buf[i]) mod 65521. */
|
||||||
|
+ vs1[0] = vs1[0] % BASE;
|
||||||
|
+ /* vs2[0] = s2_i + 16*s1_save +
|
||||||
|
+ sum(i=1 to 16)(16-i+1)*buf[i] mod 65521. */
|
||||||
|
+ vs2[0] = vs2[0] % BASE;
|
||||||
|
+
|
||||||
|
+ vs1 = vec_and(vs1, vmask);
|
||||||
|
+ vs2 = vec_and(vs2, vmask);
|
||||||
|
+ vs1_save = v_zeros;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ /* len is less than NMAX one modulo is needed. */
|
||||||
|
+ if (len >= 16) {
|
||||||
|
+ while (len >= 16) {
|
||||||
|
+ len -= 16;
|
||||||
|
+
|
||||||
|
+ vbuf = vec_xl(0, (unsigned char *) buf);
|
||||||
|
+
|
||||||
|
+ vsum1 = vec_sum4s(vbuf, v_zeros); /* sum(i=1 to 16) buf[i]. */
|
||||||
|
+ /* sum(i=1 to 16) buf[i]*(16-i+1). */
|
||||||
|
+ vsum2 = vec_msum(vbuf, v_mul, v_zeros);
|
||||||
|
+ /* Save vs1. */
|
||||||
|
+ vs1_save = vec_add(vs1_save, vs1);
|
||||||
|
+ /* Accumulate the sums. */
|
||||||
|
+ vs1 = vec_add(vsum1, vs1);
|
||||||
|
+ vs2 = vec_add(vsum2, vs2);
|
||||||
|
+
|
||||||
|
+ buf += 16;
|
||||||
|
+ }
|
||||||
|
+ /* Since the size will be always less than NMAX we do this once. */
|
||||||
|
+ vs1 = vec_sumsu(vs1, vsum1);
|
||||||
|
+ vs1_save = vec_sll(vs1_save, vsh); /* 16*vs1_save. */
|
||||||
|
+ vs2 = vec_add(vs1_save, vs2);
|
||||||
|
+ vs2 = vec_sumsu(vs2, vsum2);
|
||||||
|
+ }
|
||||||
|
+ /* Copy result back to s1, s2 (mod 65521). */
|
||||||
|
+ s1 = vs1[0] % BASE;
|
||||||
|
+ s2 = vs2[0] % BASE;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ /* Process tail (len < 16). */
|
||||||
|
+ while (len--) {
|
||||||
|
+ s1 += *buf++;
|
||||||
|
+ s2 += s1;
|
||||||
|
+ }
|
||||||
|
+ s1 %= BASE;
|
||||||
|
+ s2 %= BASE;
|
||||||
|
+
|
||||||
|
+ return (s2 << 16) | s1;
|
||||||
|
+}
|
||||||
|
diff --git a/contrib/power/adler32_resolver.c b/contrib/power/adler32_resolver.c
|
||||||
|
new file mode 100644
|
||||||
|
index 000000000..07a1a2cb2
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/contrib/power/adler32_resolver.c
|
||||||
|
@@ -0,0 +1,15 @@
|
||||||
|
+/* Copyright (C) 2019 Rogerio Alves <rcardoso@linux.ibm.com>, IBM
|
||||||
|
+ * For conditions of distribution and use, see copyright notice in zlib.h
|
||||||
|
+ */
|
||||||
|
+
|
||||||
|
+#include "../gcc/zifunc.h"
|
||||||
|
+#include "power.h"
|
||||||
|
+
|
||||||
|
+Z_IFUNC(adler32) {
|
||||||
|
+#ifdef Z_POWER8
|
||||||
|
+ if (__builtin_cpu_supports("arch_2_07"))
|
||||||
|
+ return _adler32_power8;
|
||||||
|
+#endif
|
||||||
|
+
|
||||||
|
+ return adler32_default;
|
||||||
|
+}
|
||||||
|
diff --git a/contrib/power/power.h b/contrib/power/power.h
|
||||||
|
index 79123aa90..f57c76167 100644
|
||||||
|
--- a/contrib/power/power.h
|
||||||
|
+++ b/contrib/power/power.h
|
||||||
|
@@ -2,7 +2,9 @@
|
||||||
|
* 2019 Rogerio Alves <rogerio.alves@ibm.com>, IBM
|
||||||
|
* For conditions of distribution and use, see copyright notice in zlib.h
|
||||||
|
*/
|
||||||
|
-
|
||||||
|
#include "../../zconf.h"
|
||||||
|
+#include "../../zutil.h"
|
||||||
|
+
|
||||||
|
+uLong _adler32_power8(uLong adler, const Bytef* buf, uInt len);
|
||||||
|
|
||||||
|
unsigned long _crc32_z_power8(unsigned long, const Bytef *, z_size_t);
|
34
zlib-1.2.12-fix-invalid-memory-access-on-ppc-and-ppc64.patch
Normal file
34
zlib-1.2.12-fix-invalid-memory-access-on-ppc-and-ppc64.patch
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
From 11b722e4ae91b611f605221587ec8e0829c27949 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Matheus Castanho <msc@linux.ibm.com>
|
||||||
|
Date: Tue, 23 Jun 2020 10:26:19 -0300
|
||||||
|
Subject: [PATCH] Fix invalid memory access on ppc and ppc64
|
||||||
|
|
||||||
|
---
|
||||||
|
contrib/power/adler32_power8.c | 9 ++++-----
|
||||||
|
1 file changed, 4 insertions(+), 5 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/contrib/power/adler32_power8.c b/contrib/power/adler32_power8.c
|
||||||
|
index 473c39457..fdd086453 100644
|
||||||
|
--- a/contrib/power/adler32_power8.c
|
||||||
|
+++ b/contrib/power/adler32_power8.c
|
||||||
|
@@ -110,16 +110,15 @@ uLong ZLIB_INTERNAL _adler32_power8 (uLong adler, const Bytef* buf, uInt len)
|
||||||
|
6, 5, 4, 3, 2, 1};
|
||||||
|
const vector unsigned char vsh = vec_splat_u8(4);
|
||||||
|
const vector unsigned int vmask = {0xffffffff, 0x0, 0x0, 0x0};
|
||||||
|
- vector unsigned int vs1 = vec_xl(0, &s1);
|
||||||
|
- vector unsigned int vs2 = vec_xl(0, &s2);
|
||||||
|
+ vector unsigned int vs1 = { 0 };
|
||||||
|
+ vector unsigned int vs2 = { 0 };
|
||||||
|
vector unsigned int vs1_save = { 0 };
|
||||||
|
vector unsigned int vsum1, vsum2;
|
||||||
|
vector unsigned char vbuf;
|
||||||
|
int n;
|
||||||
|
|
||||||
|
- /* Zeros the undefined values of vectors vs1, vs2. */
|
||||||
|
- vs1 = vec_and(vs1, vmask);
|
||||||
|
- vs2 = vec_and(vs2, vmask);
|
||||||
|
+ vs1[0] = s1;
|
||||||
|
+ vs2[0] = s2;
|
||||||
|
|
||||||
|
/* Do length bigger than NMAX in blocks of NMAX size. */
|
||||||
|
while (len >= NMAX) {
|
423
zlib-1.2.12-s390-vectorize-crc32.patch
Normal file
423
zlib-1.2.12-s390-vectorize-crc32.patch
Normal file
@ -0,0 +1,423 @@
|
|||||||
|
From 957bc67cfb4e01403c01fe6243850383183a7c19 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Ilya Leoshkevich <iii@linux.ibm.com>
|
||||||
|
Date: Thu, 19 Mar 2020 11:52:03 +0100
|
||||||
|
Subject: [PATCH] s390x: vectorize crc32
|
||||||
|
|
||||||
|
Use vector extensions when compiling for s390x and binutils knows
|
||||||
|
about them. At runtime, check whether kernel supports vector
|
||||||
|
extensions (it has to be not just the CPU, but also the kernel) and
|
||||||
|
choose between the regular and the vectorized implementations.
|
||||||
|
---
|
||||||
|
Makefile.in | 9 ++
|
||||||
|
configure | 28 +++++
|
||||||
|
contrib/gcc/zifunc.h | 21 +++-
|
||||||
|
contrib/s390/crc32-vx.c | 195 ++++++++++++++++++++++++++++++++
|
||||||
|
contrib/s390/crc32_z_resolver.c | 41 +++++++
|
||||||
|
crc32.c | 11 +-
|
||||||
|
6 files changed, 301 insertions(+), 4 deletions(-)
|
||||||
|
create mode 100644 contrib/s390/crc32-vx.c
|
||||||
|
create mode 100644 contrib/s390/crc32_z_resolver.c
|
||||||
|
|
||||||
|
Index: zlib-1.2.13/Makefile.in
|
||||||
|
===================================================================
|
||||||
|
--- zlib-1.2.13.orig/Makefile.in
|
||||||
|
+++ zlib-1.2.13/Makefile.in
|
||||||
|
@@ -25,6 +25,7 @@ LDFLAGS=
|
||||||
|
TEST_LDFLAGS=$(LDFLAGS) -L. libz.a
|
||||||
|
LDSHARED=$(CC)
|
||||||
|
CPP=$(CC) -E
|
||||||
|
+VGFMAFLAG=
|
||||||
|
|
||||||
|
STATICLIB=libz.a
|
||||||
|
SHAREDLIB=libz.so
|
||||||
|
@@ -175,6 +176,9 @@ crc32.o: $(SRCDIR)crc32.c
|
||||||
|
crc32_z_power8.o: $(SRCDIR)contrib/power/crc32_z_power8.c
|
||||||
|
$(CC) $(CFLAGS) -mcpu=power8 $(ZINC) -c -o $@ $(SRCDIR)contrib/power/crc32_z_power8.c
|
||||||
|
|
||||||
|
+crc32-vx.o: $(SRCDIR)contrib/s390/crc32-vx.c
|
||||||
|
+ $(CC) $(CFLAGS) $(VGFMAFLAG) $(ZINC) -c -o $@ $(SRCDIR)contrib/s390/crc32-vx.c
|
||||||
|
+
|
||||||
|
deflate.o: $(SRCDIR)deflate.c
|
||||||
|
$(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)deflate.c
|
||||||
|
|
||||||
|
@@ -225,6 +229,11 @@ crc32.lo: $(SRCDIR)crc32.c
|
||||||
|
$(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/crc32.o $(SRCDIR)crc32.c
|
||||||
|
-@mv objs/crc32.o $@
|
||||||
|
|
||||||
|
+crc32-vx.lo: $(SRCDIR)contrib/s390/crc32-vx.c
|
||||||
|
+ -@mkdir objs 2>/dev/null || test -d objs
|
||||||
|
+ $(CC) $(SFLAGS) $(VGFMAFLAG) $(ZINC) -DPIC -c -o objs/crc32-vx.o $(SRCDIR)contrib/s390/crc32-vx.c
|
||||||
|
+ -@mv objs/crc32-vx.o $@
|
||||||
|
+
|
||||||
|
crc32_z_power8.lo: $(SRCDIR)contrib/power/crc32_z_power8.c
|
||||||
|
-@mkdir objs 2>/dev/null || test -d objs
|
||||||
|
$(CC) $(SFLAGS) -mcpu=power8 $(ZINC) -DPIC -c -o objs/crc32_z_power8.o $(SRCDIR)contrib/power/crc32_z_power8.c
|
||||||
|
Index: zlib-1.2.13/configure
|
||||||
|
===================================================================
|
||||||
|
--- zlib-1.2.13.orig/configure
|
||||||
|
+++ zlib-1.2.13/configure
|
||||||
|
@@ -921,6 +921,32 @@ else
|
||||||
|
echo "Checking for Power optimizations support... No." | tee -a configure.log
|
||||||
|
fi
|
||||||
|
|
||||||
|
+# check if we are compiling for s390 and binutils support vector extensions
|
||||||
|
+VGFMAFLAG=-march=z13
|
||||||
|
+cat > $test.c <<EOF
|
||||||
|
+#ifndef __s390__
|
||||||
|
+#error
|
||||||
|
+#endif
|
||||||
|
+EOF
|
||||||
|
+if try $CC -c $CFLAGS $VGFMAFLAG $test.c; then
|
||||||
|
+ CFLAGS="$CFLAGS -DHAVE_S390X_VX"
|
||||||
|
+ SFLAGS="$SFLAGS -DHAVE_S390X_VX"
|
||||||
|
+ OBJC="$OBJC crc32-vx.o"
|
||||||
|
+ PIC_OBJC="$PIC_OBJC crc32-vx.lo"
|
||||||
|
+ echo "Checking for s390 vector extensions... Yes." | tee -a configure.log
|
||||||
|
+
|
||||||
|
+ for flag in -mzarch -fzvector; do
|
||||||
|
+ if try $CC -c $CFLAGS $VGFMAFLAG $flag $test.c; then
|
||||||
|
+ VGFMAFLAG="$VGFMAFLAG $flag"
|
||||||
|
+ echo "Checking for $flag... Yes." | tee -a configure.log
|
||||||
|
+ else
|
||||||
|
+ echo "Checking for $flag... No." | tee -a configure.log
|
||||||
|
+ fi
|
||||||
|
+ done
|
||||||
|
+else
|
||||||
|
+ echo "Checking for s390 vector extensions... No." | tee -a configure.log
|
||||||
|
+fi
|
||||||
|
+
|
||||||
|
# show the results in the log
|
||||||
|
echo >> configure.log
|
||||||
|
echo ALL = $ALL >> configure.log
|
||||||
|
@@ -952,6 +978,7 @@ echo mandir = $mandir >> configure.log
|
||||||
|
echo prefix = $prefix >> configure.log
|
||||||
|
echo sharedlibdir = $sharedlibdir >> configure.log
|
||||||
|
echo uname = $uname >> configure.log
|
||||||
|
+echo VGFMAFLAG = $VGFMAFLAG >> configure.log
|
||||||
|
|
||||||
|
# udpate Makefile with the configure results
|
||||||
|
sed < ${SRCDIR}Makefile.in "
|
||||||
|
@@ -961,6 +988,7 @@ sed < ${SRCDIR}Makefile.in "
|
||||||
|
/^LDFLAGS *=/s#=.*#=$LDFLAGS#
|
||||||
|
/^LDSHARED *=/s#=.*#=$LDSHARED#
|
||||||
|
/^CPP *=/s#=.*#=$CPP#
|
||||||
|
+/^VGFMAFLAG *=/s#=.*#=$VGFMAFLAG#
|
||||||
|
/^STATICLIB *=/s#=.*#=$STATICLIB#
|
||||||
|
/^SHAREDLIB *=/s#=.*#=$SHAREDLIB#
|
||||||
|
/^SHAREDLIBV *=/s#=.*#=$SHAREDLIBV#
|
||||||
|
Index: zlib-1.2.13/contrib/gcc/zifunc.h
|
||||||
|
===================================================================
|
||||||
|
--- zlib-1.2.13.orig/contrib/gcc/zifunc.h
|
||||||
|
+++ zlib-1.2.13/contrib/gcc/zifunc.h
|
||||||
|
@@ -8,9 +8,28 @@
|
||||||
|
|
||||||
|
/* Helpers for arch optimizations */
|
||||||
|
|
||||||
|
+#if defined(__clang__)
|
||||||
|
+#if __has_feature(coverage_sanitizer)
|
||||||
|
+#define Z_IFUNC_NO_SANCOV __attribute__((no_sanitize("coverage")))
|
||||||
|
+#else /* __has_feature(coverage_sanitizer) */
|
||||||
|
+#define Z_IFUNC_NO_SANCOV
|
||||||
|
+#endif /* __has_feature(coverage_sanitizer) */
|
||||||
|
+#else /* __clang__ */
|
||||||
|
+#define Z_IFUNC_NO_SANCOV
|
||||||
|
+#endif /* __clang__ */
|
||||||
|
+
|
||||||
|
+#ifdef __s390__
|
||||||
|
+#define Z_IFUNC_PARAMS unsigned long hwcap
|
||||||
|
+#define Z_IFUNC_ATTRS Z_IFUNC_NO_SANCOV
|
||||||
|
+#else /* __s390__ */
|
||||||
|
+#define Z_IFUNC_PARAMS void
|
||||||
|
+#define Z_IFUNC_ATTRS
|
||||||
|
+#endif /* __s390__ */
|
||||||
|
+
|
||||||
|
#define Z_IFUNC(fname) \
|
||||||
|
typeof(fname) fname __attribute__ ((ifunc (#fname "_resolver"))); \
|
||||||
|
- local typeof(fname) *fname##_resolver(void)
|
||||||
|
+ Z_IFUNC_ATTRS \
|
||||||
|
+ local typeof(fname) *fname##_resolver(Z_IFUNC_PARAMS)
|
||||||
|
/* This is a helper macro to declare a resolver for an indirect function
|
||||||
|
* (ifunc). Let's say you have function
|
||||||
|
*
|
||||||
|
Index: zlib-1.2.13/contrib/s390/crc32-vx.c
|
||||||
|
===================================================================
|
||||||
|
--- /dev/null
|
||||||
|
+++ zlib-1.2.13/contrib/s390/crc32-vx.c
|
||||||
|
@@ -0,0 +1,195 @@
|
||||||
|
+/*
|
||||||
|
+ * Hardware-accelerated CRC-32 variants for Linux on z Systems
|
||||||
|
+ *
|
||||||
|
+ * Use the z/Architecture Vector Extension Facility to accelerate the
|
||||||
|
+ * computing of bitreflected CRC-32 checksums.
|
||||||
|
+ *
|
||||||
|
+ * This CRC-32 implementation algorithm is bitreflected and processes
|
||||||
|
+ * the least-significant bit first (Little-Endian).
|
||||||
|
+ *
|
||||||
|
+ * This code was originally written by Hendrik Brueckner
|
||||||
|
+ * <brueckner@linux.vnet.ibm.com> for use in the Linux kernel and has been
|
||||||
|
+ * relicensed under the zlib license.
|
||||||
|
+ */
|
||||||
|
+
|
||||||
|
+#include "../../zutil.h"
|
||||||
|
+
|
||||||
|
+#include <stdint.h>
|
||||||
|
+#include <vecintrin.h>
|
||||||
|
+
|
||||||
|
+typedef unsigned char uv16qi __attribute__((vector_size(16)));
|
||||||
|
+typedef unsigned int uv4si __attribute__((vector_size(16)));
|
||||||
|
+typedef unsigned long long uv2di __attribute__((vector_size(16)));
|
||||||
|
+
|
||||||
|
+uint32_t crc32_le_vgfm_16(uint32_t crc, const unsigned char *buf, size_t len) {
|
||||||
|
+ /*
|
||||||
|
+ * The CRC-32 constant block contains reduction constants to fold and
|
||||||
|
+ * process particular chunks of the input data stream in parallel.
|
||||||
|
+ *
|
||||||
|
+ * For the CRC-32 variants, the constants are precomputed according to
|
||||||
|
+ * these definitions:
|
||||||
|
+ *
|
||||||
|
+ * R1 = [(x4*128+32 mod P'(x) << 32)]' << 1
|
||||||
|
+ * R2 = [(x4*128-32 mod P'(x) << 32)]' << 1
|
||||||
|
+ * R3 = [(x128+32 mod P'(x) << 32)]' << 1
|
||||||
|
+ * R4 = [(x128-32 mod P'(x) << 32)]' << 1
|
||||||
|
+ * R5 = [(x64 mod P'(x) << 32)]' << 1
|
||||||
|
+ * R6 = [(x32 mod P'(x) << 32)]' << 1
|
||||||
|
+ *
|
||||||
|
+ * The bitreflected Barret reduction constant, u', is defined as
|
||||||
|
+ * the bit reversal of floor(x**64 / P(x)).
|
||||||
|
+ *
|
||||||
|
+ * where P(x) is the polynomial in the normal domain and the P'(x) is the
|
||||||
|
+ * polynomial in the reversed (bitreflected) domain.
|
||||||
|
+ *
|
||||||
|
+ * CRC-32 (IEEE 802.3 Ethernet, ...) polynomials:
|
||||||
|
+ *
|
||||||
|
+ * P(x) = 0x04C11DB7
|
||||||
|
+ * P'(x) = 0xEDB88320
|
||||||
|
+ */
|
||||||
|
+ const uv16qi perm_le2be = {15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0}; /* BE->LE mask */
|
||||||
|
+ const uv2di r2r1 = {0x1C6E41596, 0x154442BD4}; /* R2, R1 */
|
||||||
|
+ const uv2di r4r3 = {0x0CCAA009E, 0x1751997D0}; /* R4, R3 */
|
||||||
|
+ const uv2di r5 = {0, 0x163CD6124}; /* R5 */
|
||||||
|
+ const uv2di ru_poly = {0, 0x1F7011641}; /* u' */
|
||||||
|
+ const uv2di crc_poly = {0, 0x1DB710641}; /* P'(x) << 1 */
|
||||||
|
+
|
||||||
|
+ /*
|
||||||
|
+ * Load the initial CRC value.
|
||||||
|
+ *
|
||||||
|
+ * The CRC value is loaded into the rightmost word of the
|
||||||
|
+ * vector register and is later XORed with the LSB portion
|
||||||
|
+ * of the loaded input data.
|
||||||
|
+ */
|
||||||
|
+ uv2di v0 = {0, 0};
|
||||||
|
+ v0 = (uv2di)vec_insert(crc, (uv4si)v0, 3);
|
||||||
|
+
|
||||||
|
+ /* Load a 64-byte data chunk and XOR with CRC */
|
||||||
|
+ uv2di v1 = vec_perm(((uv2di *)buf)[0], ((uv2di *)buf)[0], perm_le2be);
|
||||||
|
+ uv2di v2 = vec_perm(((uv2di *)buf)[1], ((uv2di *)buf)[1], perm_le2be);
|
||||||
|
+ uv2di v3 = vec_perm(((uv2di *)buf)[2], ((uv2di *)buf)[2], perm_le2be);
|
||||||
|
+ uv2di v4 = vec_perm(((uv2di *)buf)[3], ((uv2di *)buf)[3], perm_le2be);
|
||||||
|
+
|
||||||
|
+ v1 ^= v0;
|
||||||
|
+ buf += 64;
|
||||||
|
+ len -= 64;
|
||||||
|
+
|
||||||
|
+ while (len >= 64) {
|
||||||
|
+ /* Load the next 64-byte data chunk */
|
||||||
|
+ uv16qi part1 = vec_perm(((uv16qi *)buf)[0], ((uv16qi *)buf)[0], perm_le2be);
|
||||||
|
+ uv16qi part2 = vec_perm(((uv16qi *)buf)[1], ((uv16qi *)buf)[1], perm_le2be);
|
||||||
|
+ uv16qi part3 = vec_perm(((uv16qi *)buf)[2], ((uv16qi *)buf)[2], perm_le2be);
|
||||||
|
+ uv16qi part4 = vec_perm(((uv16qi *)buf)[3], ((uv16qi *)buf)[3], perm_le2be);
|
||||||
|
+
|
||||||
|
+ /*
|
||||||
|
+ * Perform a GF(2) multiplication of the doublewords in V1 with
|
||||||
|
+ * the R1 and R2 reduction constants in V0. The intermediate result
|
||||||
|
+ * is then folded (accumulated) with the next data chunk in PART1 and
|
||||||
|
+ * stored in V1. Repeat this step for the register contents
|
||||||
|
+ * in V2, V3, and V4 respectively.
|
||||||
|
+ */
|
||||||
|
+ v1 = (uv2di)vec_gfmsum_accum_128(r2r1, v1, part1);
|
||||||
|
+ v2 = (uv2di)vec_gfmsum_accum_128(r2r1, v2, part2);
|
||||||
|
+ v3 = (uv2di)vec_gfmsum_accum_128(r2r1, v3, part3);
|
||||||
|
+ v4 = (uv2di)vec_gfmsum_accum_128(r2r1, v4, part4);
|
||||||
|
+
|
||||||
|
+ buf += 64;
|
||||||
|
+ len -= 64;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ /*
|
||||||
|
+ * Fold V1 to V4 into a single 128-bit value in V1. Multiply V1 with R3
|
||||||
|
+ * and R4 and accumulating the next 128-bit chunk until a single 128-bit
|
||||||
|
+ * value remains.
|
||||||
|
+ */
|
||||||
|
+ v1 = (uv2di)vec_gfmsum_accum_128(r4r3, v1, (uv16qi)v2);
|
||||||
|
+ v1 = (uv2di)vec_gfmsum_accum_128(r4r3, v1, (uv16qi)v3);
|
||||||
|
+ v1 = (uv2di)vec_gfmsum_accum_128(r4r3, v1, (uv16qi)v4);
|
||||||
|
+
|
||||||
|
+ while (len >= 16) {
|
||||||
|
+ /* Load next data chunk */
|
||||||
|
+ v2 = vec_perm(*(uv2di *)buf, *(uv2di *)buf, perm_le2be);
|
||||||
|
+
|
||||||
|
+ /* Fold next data chunk */
|
||||||
|
+ v1 = (uv2di)vec_gfmsum_accum_128(r4r3, v1, (uv16qi)v2);
|
||||||
|
+
|
||||||
|
+ buf += 16;
|
||||||
|
+ len -= 16;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ /*
|
||||||
|
+ * Set up a vector register for byte shifts. The shift value must
|
||||||
|
+ * be loaded in bits 1-4 in byte element 7 of a vector register.
|
||||||
|
+ * Shift by 8 bytes: 0x40
|
||||||
|
+ * Shift by 4 bytes: 0x20
|
||||||
|
+ */
|
||||||
|
+ uv16qi v9 = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
|
||||||
|
+ v9 = vec_insert((unsigned char)0x40, v9, 7);
|
||||||
|
+
|
||||||
|
+ /*
|
||||||
|
+ * Prepare V0 for the next GF(2) multiplication: shift V0 by 8 bytes
|
||||||
|
+ * to move R4 into the rightmost doubleword and set the leftmost
|
||||||
|
+ * doubleword to 0x1.
|
||||||
|
+ */
|
||||||
|
+ v0 = vec_srb(r4r3, (uv2di)v9);
|
||||||
|
+ v0[0] = 1;
|
||||||
|
+
|
||||||
|
+ /*
|
||||||
|
+ * Compute GF(2) product of V1 and V0. The rightmost doubleword
|
||||||
|
+ * of V1 is multiplied with R4. The leftmost doubleword of V1 is
|
||||||
|
+ * multiplied by 0x1 and is then XORed with rightmost product.
|
||||||
|
+ * Implicitly, the intermediate leftmost product becomes padded
|
||||||
|
+ */
|
||||||
|
+ v1 = (uv2di)vec_gfmsum_128(v0, v1);
|
||||||
|
+
|
||||||
|
+ /*
|
||||||
|
+ * Now do the final 32-bit fold by multiplying the rightmost word
|
||||||
|
+ * in V1 with R5 and XOR the result with the remaining bits in V1.
|
||||||
|
+ *
|
||||||
|
+ * To achieve this by a single VGFMAG, right shift V1 by a word
|
||||||
|
+ * and store the result in V2 which is then accumulated. Use the
|
||||||
|
+ * vector unpack instruction to load the rightmost half of the
|
||||||
|
+ * doubleword into the rightmost doubleword element of V1; the other
|
||||||
|
+ * half is loaded in the leftmost doubleword.
|
||||||
|
+ * The vector register with CONST_R5 contains the R5 constant in the
|
||||||
|
+ * rightmost doubleword and the leftmost doubleword is zero to ignore
|
||||||
|
+ * the leftmost product of V1.
|
||||||
|
+ */
|
||||||
|
+ v9 = vec_insert((unsigned char)0x20, v9, 7);
|
||||||
|
+ v2 = vec_srb(v1, (uv2di)v9);
|
||||||
|
+ v1 = vec_unpackl((uv4si)v1); /* Split rightmost doubleword */
|
||||||
|
+ v1 = (uv2di)vec_gfmsum_accum_128(r5, v1, (uv16qi)v2);
|
||||||
|
+
|
||||||
|
+ /*
|
||||||
|
+ * Apply a Barret reduction to compute the final 32-bit CRC value.
|
||||||
|
+ *
|
||||||
|
+ * The input values to the Barret reduction are the degree-63 polynomial
|
||||||
|
+ * in V1 (R(x)), degree-32 generator polynomial, and the reduction
|
||||||
|
+ * constant u. The Barret reduction result is the CRC value of R(x) mod
|
||||||
|
+ * P(x).
|
||||||
|
+ *
|
||||||
|
+ * The Barret reduction algorithm is defined as:
|
||||||
|
+ *
|
||||||
|
+ * 1. T1(x) = floor( R(x) / x^32 ) GF2MUL u
|
||||||
|
+ * 2. T2(x) = floor( T1(x) / x^32 ) GF2MUL P(x)
|
||||||
|
+ * 3. C(x) = R(x) XOR T2(x) mod x^32
|
||||||
|
+ *
|
||||||
|
+ * Note: The leftmost doubleword of vector register containing
|
||||||
|
+ * CONST_RU_POLY is zero and, thus, the intermediate GF(2) product
|
||||||
|
+ * is zero and does not contribute to the final result.
|
||||||
|
+ */
|
||||||
|
+
|
||||||
|
+ /* T1(x) = floor( R(x) / x^32 ) GF2MUL u */
|
||||||
|
+ v2 = vec_unpackl((uv4si)v1);
|
||||||
|
+ v2 = (uv2di)vec_gfmsum_128(ru_poly, v2);
|
||||||
|
+
|
||||||
|
+ /*
|
||||||
|
+ * Compute the GF(2) product of the CRC polynomial with T1(x) in
|
||||||
|
+ * V2 and XOR the intermediate result, T2(x), with the value in V1.
|
||||||
|
+ * The final result is stored in word element 2 of V2.
|
||||||
|
+ */
|
||||||
|
+ v2 = vec_unpackl((uv4si)v2);
|
||||||
|
+ v2 = (uv2di)vec_gfmsum_accum_128(crc_poly, v2, (uv16qi)v1);
|
||||||
|
+
|
||||||
|
+ return ((uv4si)v2)[2];
|
||||||
|
+}
|
||||||
|
Index: zlib-1.2.13/contrib/s390/crc32_z_resolver.c
|
||||||
|
===================================================================
|
||||||
|
--- /dev/null
|
||||||
|
+++ zlib-1.2.13/contrib/s390/crc32_z_resolver.c
|
||||||
|
@@ -0,0 +1,41 @@
|
||||||
|
+#include <sys/auxv.h>
|
||||||
|
+#include "../gcc/zifunc.h"
|
||||||
|
+
|
||||||
|
+#define VX_MIN_LEN 64
|
||||||
|
+#define VX_ALIGNMENT 16L
|
||||||
|
+#define VX_ALIGN_MASK (VX_ALIGNMENT - 1)
|
||||||
|
+
|
||||||
|
+unsigned int crc32_le_vgfm_16(unsigned int crc, const unsigned char FAR *buf, z_size_t len);
|
||||||
|
+
|
||||||
|
+local unsigned long s390_crc32_vx(unsigned long crc, const unsigned char FAR *buf, z_size_t len)
|
||||||
|
+{
|
||||||
|
+ uintptr_t prealign, aligned, remaining;
|
||||||
|
+
|
||||||
|
+ if (buf == Z_NULL) return 0UL;
|
||||||
|
+
|
||||||
|
+ if (len < VX_MIN_LEN + VX_ALIGN_MASK)
|
||||||
|
+ return crc32_z_default(crc, buf, len);
|
||||||
|
+
|
||||||
|
+ if ((uintptr_t)buf & VX_ALIGN_MASK) {
|
||||||
|
+ prealign = VX_ALIGNMENT - ((uintptr_t)buf & VX_ALIGN_MASK);
|
||||||
|
+ len -= prealign;
|
||||||
|
+ crc = crc32_z_default(crc, buf, prealign);
|
||||||
|
+ buf += prealign;
|
||||||
|
+ }
|
||||||
|
+ aligned = len & ~VX_ALIGN_MASK;
|
||||||
|
+ remaining = len & VX_ALIGN_MASK;
|
||||||
|
+
|
||||||
|
+ crc = crc32_le_vgfm_16(crc ^ 0xffffffff, buf, (size_t)aligned) ^ 0xffffffff;
|
||||||
|
+
|
||||||
|
+ if (remaining)
|
||||||
|
+ crc = crc32_z_default(crc, buf + aligned, remaining);
|
||||||
|
+
|
||||||
|
+ return crc;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+Z_IFUNC(crc32_z)
|
||||||
|
+{
|
||||||
|
+ if (hwcap & HWCAP_S390_VX)
|
||||||
|
+ return s390_crc32_vx;
|
||||||
|
+ return crc32_z_default;
|
||||||
|
+}
|
||||||
|
Index: zlib-1.2.13/crc32.c
|
||||||
|
===================================================================
|
||||||
|
--- zlib-1.2.13.orig/crc32.c
|
||||||
|
+++ zlib-1.2.13/crc32.c
|
||||||
|
@@ -745,12 +745,12 @@ local z_word_t crc_word_big(data)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* ========================================================================= */
|
||||||
|
-#ifdef Z_POWER_OPT
|
||||||
|
+#if defined(Z_POWER_OPT) || defined(HAVE_S390X_VX)
|
||||||
|
/* Rename function so resolver can use its symbol. The default version will be
|
||||||
|
* returned by the resolver if the host has no support for an optimized version.
|
||||||
|
*/
|
||||||
|
#define crc32_z crc32_z_default
|
||||||
|
-#endif /* Z_POWER_OPT */
|
||||||
|
+#endif /* defined(Z_POWER_OPT) || defined(HAVE_S390X_VX) */
|
||||||
|
|
||||||
|
unsigned long ZEXPORT crc32_z(crc, buf, len)
|
||||||
|
unsigned long crc;
|
||||||
|
@@ -1073,10 +1073,15 @@ unsigned long ZEXPORT crc32_z(crc, buf,
|
||||||
|
return crc ^ 0xffffffff;
|
||||||
|
}
|
||||||
|
|
||||||
|
-#ifdef Z_POWER_OPT
|
||||||
|
+#if defined(Z_POWER_OPT) || defined(HAVE_S390X_VX)
|
||||||
|
#undef crc32_z
|
||||||
|
+#ifdef Z_POWER_OPT
|
||||||
|
#include "contrib/power/crc32_z_resolver.c"
|
||||||
|
#endif /* Z_POWER_OPT */
|
||||||
|
+#ifdef HAVE_S390X_VX
|
||||||
|
+#include "contrib/s390/crc32_z_resolver.c"
|
||||||
|
+#endif /* HAVE_S390X_VX */
|
||||||
|
+#endif /* defined(Z_POWER_OPT) || defined(HAVE_S390X_VX) */
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
5013
zlib-1.2.13-IBM-Z-hw-accelerated-deflate-s390x.patch
Normal file
5013
zlib-1.2.13-IBM-Z-hw-accelerated-deflate-s390x.patch
Normal file
File diff suppressed because it is too large
Load Diff
27
zlib-1.2.13-fix-bug-deflateBound.patch
Normal file
27
zlib-1.2.13-fix-bug-deflateBound.patch
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
From e554695638228b846d49657f31eeff0ca4680e8a Mon Sep 17 00:00:00 2001
|
||||||
|
From: Mark Adler <madler@alumni.caltech.edu>
|
||||||
|
Date: Thu, 15 Dec 2022 09:07:13 -0800
|
||||||
|
Subject: [PATCH] Fix bug in deflateBound() for level 0 and memLevel 9.
|
||||||
|
|
||||||
|
memLevel 9 would cause deflateBound() to assume the use of fixed
|
||||||
|
blocks, even if the compression level was 0, which forces stored
|
||||||
|
blocks. That could result in a bound less than the size of the
|
||||||
|
compressed data. Now level 0 always uses the stored blocks bound.
|
||||||
|
---
|
||||||
|
deflate.c | 3 ++-
|
||||||
|
1 file changed, 2 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/deflate.c b/deflate.c
|
||||||
|
index cd538b8ac..4a512e1f9 100644
|
||||||
|
--- a/deflate.c
|
||||||
|
+++ b/deflate.c
|
||||||
|
@@ -752,7 +752,8 @@ uLong ZEXPORT deflateBound(strm, sourceLen)
|
||||||
|
|
||||||
|
/* if not default parameters, return one of the conservative bounds */
|
||||||
|
if (s->w_bits != 15 || s->hash_bits != 8 + 7)
|
||||||
|
- return (s->w_bits <= s->hash_bits ? fixedlen : storelen) + wraplen;
|
||||||
|
+ return (s->w_bits <= s->hash_bits && s->level ? fixedlen : storelen) +
|
||||||
|
+ wraplen;
|
||||||
|
|
||||||
|
/* default settings: return tight bound for that case -- ~0.03% overhead
|
||||||
|
plus a small constant */
|
41
zlib-1.2.13-optimized-s390.patch
Normal file
41
zlib-1.2.13-optimized-s390.patch
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
Index: deflate.c
|
||||||
|
===================================================================
|
||||||
|
--- deflate.c.orig
|
||||||
|
+++ deflate.c
|
||||||
|
@@ -1233,15 +1233,16 @@ local void lm_init (s)
|
||||||
|
* string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1
|
||||||
|
* OUT assertion: the match length is not greater than s->lookahead.
|
||||||
|
*/
|
||||||
|
-local uInt longest_match(s, cur_match)
|
||||||
|
+local uInt longest_match(s, pcur_match)
|
||||||
|
deflate_state *s;
|
||||||
|
- IPos cur_match; /* current match */
|
||||||
|
+ IPos pcur_match; /* current match */
|
||||||
|
{
|
||||||
|
+ ptrdiff_t cur_match = pcur_match; /* extend to pointer width */
|
||||||
|
unsigned chain_length = s->max_chain_length;/* max hash chain length */
|
||||||
|
register Bytef *scan = s->window + s->strstart; /* current string */
|
||||||
|
register Bytef *match; /* matched string */
|
||||||
|
register int len; /* length of current match */
|
||||||
|
- int best_len = (int)s->prev_length; /* best match length so far */
|
||||||
|
+ ptrdiff_t best_len = s->prev_length; /* best match length so far */
|
||||||
|
int nice_match = s->nice_match; /* stop if match long enough */
|
||||||
|
IPos limit = s->strstart > (IPos)MAX_DIST(s) ?
|
||||||
|
s->strstart - (IPos)MAX_DIST(s) : NIL;
|
||||||
|
@@ -1256,12 +1257,12 @@ local uInt longest_match(s, cur_match)
|
||||||
|
* Try with and without -DUNALIGNED_OK to check.
|
||||||
|
*/
|
||||||
|
register Bytef *strend = s->window + s->strstart + MAX_MATCH - 1;
|
||||||
|
- register ush scan_start = *(ushf*)scan;
|
||||||
|
- register ush scan_end = *(ushf*)(scan + best_len - 1);
|
||||||
|
+ register uInt scan_start = *(ushf*)scan;
|
||||||
|
+ register uInt scan_end = *(ushf*)(scan + best_len - 1);
|
||||||
|
#else
|
||||||
|
register Bytef *strend = s->window + s->strstart + MAX_MATCH;
|
||||||
|
- register Byte scan_end1 = scan[best_len - 1];
|
||||||
|
- register Byte scan_end = scan[best_len];
|
||||||
|
+ register uInt scan_end1 = scan[best_len - 1];
|
||||||
|
+ register uInt scan_end = scan[best_len];
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16.
|
BIN
zlib-1.2.13.tar.gz
(Stored with Git LFS)
Normal file
BIN
zlib-1.2.13.tar.gz
(Stored with Git LFS)
Normal file
Binary file not shown.
7
zlib-1.2.13.tar.gz.asc
Normal file
7
zlib-1.2.13.tar.gz.asc
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
-----BEGIN PGP SIGNATURE-----
|
||||||
|
Comment: GPGTools - http://gpgtools.org
|
||||||
|
|
||||||
|
iF0EABECAB0WIQRe1GpnIdNlWHeR4qp4P82OWLyvugUCY0h42QAKCRB4P82OWLyv
|
||||||
|
upvZAKCF7EgWGaMEfO78WnkA8hivLlBMlACgyI7Vm2A5BI2jI+h23yqrKjgQC5s=
|
||||||
|
=umRA
|
||||||
|
-----END PGP SIGNATURE-----
|
24
zlib-1.2.5-minizip-fixuncrypt.patch
Normal file
24
zlib-1.2.5-minizip-fixuncrypt.patch
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
From 9352e84c149d02ec0df78e19dad55b7f83185622 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Ilya Leoshkevich <iii@linux.ibm.com>
|
||||||
|
Date: Wed, 27 Apr 2022 14:36:43 +0200
|
||||||
|
Subject: [PATCH] zlib-1.2.5-minizip-fixuncrypt.patch
|
||||||
|
|
||||||
|
---
|
||||||
|
contrib/minizip/unzip.c | 4 ----
|
||||||
|
1 file changed, 4 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/contrib/minizip/unzip.c b/contrib/minizip/unzip.c
|
||||||
|
index 5e12e4747..aa1a92d17 100644
|
||||||
|
--- a/contrib/minizip/unzip.c
|
||||||
|
+++ b/contrib/minizip/unzip.c
|
||||||
|
@@ -68,10 +68,6 @@
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
-#ifndef NOUNCRYPT
|
||||||
|
- #define NOUNCRYPT
|
||||||
|
-#endif
|
||||||
|
-
|
||||||
|
#include "zlib.h"
|
||||||
|
#include "unzip.h"
|
||||||
|
|
20
zlib-format.patch
Normal file
20
zlib-format.patch
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
From: meissner@suse.de
|
||||||
|
Subject: supply format arguments to gzprintf().
|
||||||
|
|
||||||
|
Index: zlib.h
|
||||||
|
===================================================================
|
||||||
|
--- zlib.h.orig
|
||||||
|
+++ zlib.h
|
||||||
|
@@ -1465,7 +1465,11 @@ ZEXTERN z_size_t ZEXPORT gzfwrite OF((vo
|
||||||
|
is returned, and the error state is set to Z_STREAM_ERROR.
|
||||||
|
*/
|
||||||
|
|
||||||
|
-ZEXTERN int ZEXPORTVA gzprintf Z_ARG((gzFile file, const char *format, ...));
|
||||||
|
+ZEXTERN int ZEXPORTVA gzprintf Z_ARG((gzFile file, const char *format, ...))
|
||||||
|
+#ifdef __GNUC__
|
||||||
|
+ __attribute__((__format__(__printf__,2,3)))
|
||||||
|
+#endif
|
||||||
|
+;
|
||||||
|
/*
|
||||||
|
Convert, format, compress, and write the arguments (...) to file under
|
||||||
|
control of the string format, as in fprintf. gzprintf returns the number of
|
45
zlib-no-version-check.patch
Normal file
45
zlib-no-version-check.patch
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
Index: zlib-1.2.12/infback.c
|
||||||
|
===================================================================
|
||||||
|
--- zlib-1.2.12.orig/infback.c
|
||||||
|
+++ zlib-1.2.12/infback.c
|
||||||
|
@@ -34,9 +34,6 @@ int stream_size;
|
||||||
|
{
|
||||||
|
struct inflate_state FAR *state;
|
||||||
|
|
||||||
|
- if (version == Z_NULL || version[0] != ZLIB_VERSION[0] ||
|
||||||
|
- stream_size != (int)(sizeof(z_stream)))
|
||||||
|
- return Z_VERSION_ERROR;
|
||||||
|
if (strm == Z_NULL || window == Z_NULL ||
|
||||||
|
windowBits < 8 || windowBits > 15)
|
||||||
|
return Z_STREAM_ERROR;
|
||||||
|
Index: zlib-1.2.12/inflate.c
|
||||||
|
===================================================================
|
||||||
|
--- zlib-1.2.12.orig/inflate.c
|
||||||
|
+++ zlib-1.2.12/inflate.c
|
||||||
|
@@ -202,9 +202,6 @@ int stream_size;
|
||||||
|
int ret;
|
||||||
|
struct inflate_state FAR *state;
|
||||||
|
|
||||||
|
- if (version == Z_NULL || version[0] != ZLIB_VERSION[0] ||
|
||||||
|
- stream_size != (int)(sizeof(z_stream)))
|
||||||
|
- return Z_VERSION_ERROR;
|
||||||
|
if (strm == Z_NULL) return Z_STREAM_ERROR;
|
||||||
|
strm->msg = Z_NULL; /* in case we return an error */
|
||||||
|
if (strm->zalloc == (alloc_func)0) {
|
||||||
|
Index: zlib-1.2.12/deflate.c
|
||||||
|
===================================================================
|
||||||
|
--- zlib-1.2.12.orig/deflate.c
|
||||||
|
+++ zlib-1.2.12/deflate.c
|
||||||
|
@@ -253,12 +253,7 @@ int ZEXPORT deflateInit2_(strm, level, m
|
||||||
|
{
|
||||||
|
deflate_state *s;
|
||||||
|
int wrap = 1;
|
||||||
|
- static const char my_version[] = ZLIB_VERSION;
|
||||||
|
|
||||||
|
- if (version == Z_NULL || version[0] != my_version[0] ||
|
||||||
|
- stream_size != sizeof(z_stream)) {
|
||||||
|
- return Z_VERSION_ERROR;
|
||||||
|
- }
|
||||||
|
if (strm == Z_NULL) return Z_STREAM_ERROR;
|
||||||
|
|
||||||
|
strm->msg = Z_NULL;
|
2
zlib-rpmlintrc
Normal file
2
zlib-rpmlintrc
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
# used only if build --with profiling
|
||||||
|
addFilter("zlib.src.*: W: make-check-outside-check-section time make check")
|
835
zlib.changes
Normal file
835
zlib.changes
Normal file
@ -0,0 +1,835 @@
|
|||||||
|
-------------------------------------------------------------------
|
||||||
|
Fri May 5 09:56:31 UTC 2023 - Danilo Spinella <danilo.spinella@suse.com>
|
||||||
|
|
||||||
|
- Fix deflateBound() before deflateInit(), bsc#1210593, bsc#1211005
|
||||||
|
bsc1210593.patch
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Wed Mar 1 17:50:05 UTC 2023 - Dirk Müller <dmueller@suse.com>
|
||||||
|
|
||||||
|
- avoid buildcycle with krb5 (in sle15+ - jsc#PED-3641)
|
||||||
|
- skip hwcaps subpackage building for -static subpackage
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Wed Feb 1 09:26:04 UTC 2023 - Dirk Müller <dmueller@suse.com>
|
||||||
|
|
||||||
|
- build with glibc hwcaps optimized libs
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Thu Jan 19 11:07:25 UTC 2023 - Danilo Spinella <danilo.spinella@suse.com>
|
||||||
|
|
||||||
|
- Update to 1.2.13:
|
||||||
|
* Fix configure issue that discarded provided CC definition
|
||||||
|
* Correct incorrect inputs provided to the CRC functions
|
||||||
|
* Repair prototypes and exporting of new CRC functions
|
||||||
|
* Fix inflateBack to detect invalid input with distances too far
|
||||||
|
* Have infback() deliver all of the available output up to any error
|
||||||
|
* Fix a bug when getting a gzip header extra field with inflate()
|
||||||
|
* Fix bug in block type selection when Z_FIXED used
|
||||||
|
* Tighten deflateBound bounds
|
||||||
|
* Remove deleted assembler code references
|
||||||
|
* Various portability and appearance improvements
|
||||||
|
- Added patches:
|
||||||
|
* zlib-1.2.13-IBM-Z-hw-accelerated-deflate-s390x.patch
|
||||||
|
* zlib-1.2.13-fix-bug-deflateBound.patch
|
||||||
|
* zlib-1.2.13-optimized-s390.patch
|
||||||
|
- Refreshed patches:
|
||||||
|
* zlib-1.2.12-add-optimized-slide_hash-for-power.patch
|
||||||
|
* zlib-1.2.12-add-vectorized-longest_match-for-power.patch
|
||||||
|
* zlib-1.2.12-s390-vectorize-crc32.patch
|
||||||
|
- Removed patches:
|
||||||
|
* zlib-1.2.12-fix-configure.patch
|
||||||
|
* zlib-1.2.12-IBM-Z-hw-accelerated-deflate-s390x.patch
|
||||||
|
* zlib-1.2.12-optimized-crc32-power8.patch
|
||||||
|
* zlib-1.2.12-correct-inputs-provided-to-crc-func.patch
|
||||||
|
* zlib-1.2.12-fix-CVE-2022-37434.patch
|
||||||
|
* zlib-1.2.11-optimized-s390.patch
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Sun Dec 11 16:41:51 UTC 2022 - Dirk Müller <dmueller@suse.com>
|
||||||
|
|
||||||
|
- build zlib with optflags again
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Mon Oct 10 10:08:02 UTC 2022 - Danilo Spinella <danilo.spinella@suse.com>
|
||||||
|
|
||||||
|
- Add Power8 optimizations:
|
||||||
|
* zlib-1.2.12-add-optimized-slide_hash-for-power.patch
|
||||||
|
* zlib-1.2.12-add-vectorized-longest_match-for-power.patch
|
||||||
|
* zlib-1.2.12-adler32-vector-optimizations-for-power.patch
|
||||||
|
* zlib-1.2.12-fix-invalid-memory-access-on-ppc-and-ppc64.patch
|
||||||
|
- Update zlib-1.2.12-IBM-Z-hw-accelerated-deflate-s390x.patch
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Tue Aug 23 16:22:59 UTC 2022 - Danilo Spinella <danilo.spinella@suse.com>
|
||||||
|
|
||||||
|
- Update to 1.2.12:
|
||||||
|
* A lot of bug fixes
|
||||||
|
* Improve speed of crc32 functions
|
||||||
|
* Use ARM crc32 instructions if the ARM architecture has them
|
||||||
|
For the complete changes, see ChangeLog
|
||||||
|
- Fixes CVE-2022-37434, heap-based buffer over-read or buffer overflow in
|
||||||
|
inflate.c via a large gzip header extra field
|
||||||
|
(CVE-2022-37434, bsc#1202175)
|
||||||
|
- Added patches:
|
||||||
|
* zlib-1.2.11-covscan-issues-rhel9.patch
|
||||||
|
* zlib-1.2.11-covscan-issues.patch
|
||||||
|
* zlib-1.2.12-s390-vectorize-crc32.patch
|
||||||
|
* zlib-1.2.12-optimized-crc32-power8.patch
|
||||||
|
* zlib-1.2.12-IBM-Z-hw-accelerated-deflate-s390x.patch
|
||||||
|
* zlib-1.2.12-fix-configure.patch
|
||||||
|
* zlib-1.2.12-correct-inputs-provided-to-crc-func.patch
|
||||||
|
* zlib-1.2.12-fix-CVE-2022-37434.patch
|
||||||
|
* zlib-1.2.5-minizip-fixuncrypt.patch
|
||||||
|
- Removed patches:
|
||||||
|
* bsc1197459.patch (upstreamed)
|
||||||
|
* zlib-power8-fate325307.patch
|
||||||
|
(replaced by zlib-1.2.12-optimized-crc32-power8.patch)
|
||||||
|
* bsc1174736-DFLTCC_LEVEL_MASK-set-to-0x1ff.patch
|
||||||
|
(replaced by zlib-1.2.12-IBM-Z-hw-accelrated-deflate-s390x.patch)
|
||||||
|
* 410.patch
|
||||||
|
(replaced by zlib-1.2.12-IBM-Z-hw-accelrated-deflate-s390x.patch)
|
||||||
|
- Refreshed patches:
|
||||||
|
* zlib-format.patch
|
||||||
|
* zlib-no-version-check.patch
|
||||||
|
- Disable profiling since it breaks tests
|
||||||
|
- Update zlib-rpmlintrc
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Sat Jul 2 10:00:46 UTC 2022 - Marcus Meissner <meissner@suse.com>
|
||||||
|
|
||||||
|
- switch to https urls
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Fri Mar 25 14:59:29 UTC 2022 - Danilo Spinella <danilo.spinella@suse.com>
|
||||||
|
|
||||||
|
- Fix memory corruption on deflate, bsc#1197459
|
||||||
|
* bsc1197459.patch - CVE-2018-25032
|
||||||
|
- Update 410.patch
|
||||||
|
* Remove included patches:
|
||||||
|
bsc1174551-fxi-imcomplete-raw-streams.patch
|
||||||
|
zlib-compression-switching.patch
|
||||||
|
zlib-s390x-z15-fix-hw-compression.patch
|
||||||
|
- Refresh bsc1174736-DFLTCC_LEVEL_MASK-set-to-0x1ff.patch
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Fri Mar 11 17:38:09 UTC 2022 - Arjen de Korte <suse+build@de-korte.org>
|
||||||
|
|
||||||
|
- Don't install (internal) crypt.h header in minizip
|
||||||
|
* minizip-dont-install-crypt-header.patch
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Mon Nov 9 08:00:35 UTC 2020 - Ali Abdallah <ali.abdallah@suse.com>
|
||||||
|
|
||||||
|
- Fix hw compression on z15 bsc#1176201
|
||||||
|
- Add zlib-s390x-z15-fix-hw-compression.patch
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Wed Oct 28 14:38:00 UTC 2020 - Ludwig Nussel <lnussel@suse.de>
|
||||||
|
|
||||||
|
- install to /usr (boo#1029961)
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Wed Sep 16 15:05:04 UTC 2020 - Stephan Kulow <coolo@suse.com>
|
||||||
|
|
||||||
|
- Provide a testsuite subpackage to run post-build validation
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Fri Aug 28 07:58:23 UTC 2020 - Tomáš Chvátal <tchvatal@suse.com>
|
||||||
|
|
||||||
|
- Add patch to fix compression level switching
|
||||||
|
bsc#1175811 bsc#1175830 bsc#1175831
|
||||||
|
* zlib-compression-switching.patch
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Thu Aug 27 06:55:29 UTC 2020 - Tomáš Chvátal <tchvatal@suse.com>
|
||||||
|
|
||||||
|
- Set -DDFLTCC_LEVEL_MASK=0x7e on s390/s390x jsc#13776
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Thu Aug 6 08:36:48 UTC 2020 - Lidong Zhong <lidong.zhong@suse.com>
|
||||||
|
|
||||||
|
- Permit a deflateParams() parameter change as soon as possible(bsc#1174736)
|
||||||
|
* bsc1174736-DFLTCC_LEVEL_MASK-set-to-0x1ff.patch
|
||||||
|
Fix DFLTCC not flushing EOBS when creating raw streams(bsc#1174551)
|
||||||
|
* bsc1174551-fxi-imcomplete-raw-streams.patch
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Thu Apr 23 08:17:19 UTC 2020 - Tomáš Chvátal <tchvatal@suse.com>
|
||||||
|
|
||||||
|
- Update 410.patch to contain latest fixes from IBM bsc#1166260
|
||||||
|
* The build behaviour changed
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Tue Oct 29 10:47:18 UTC 2019 - Tomáš Chvátal <tchvatal@suse.com>
|
||||||
|
|
||||||
|
- Update the zlib-no-version-check.patch to be even more forgiving
|
||||||
|
with the versions on the zlib to allow updates without rebuilds
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Mon Oct 21 07:11:58 UTC 2019 - Tomáš Chvátal <tchvatal@suse.com>
|
||||||
|
|
||||||
|
- Add SUSE specific patch to fix bsc#1138793, we simply don't want
|
||||||
|
to test if the app was linked with exactly same version of zlib
|
||||||
|
like the one that is present on the runtime:
|
||||||
|
* zlib-no-version-check.patch
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Wed Jul 17 07:26:35 UTC 2019 - Tomáš Chvátal <tchvatal@suse.com>
|
||||||
|
|
||||||
|
- Update the s390 patchset bsc#1137624:
|
||||||
|
* 410.patch
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Thu Jul 11 16:09:34 UTC 2019 - Bruce Rogers <brogers@suse.com>
|
||||||
|
|
||||||
|
- Tweak zlib-power8-fate325307.patch to have type of crc32_vpmsum
|
||||||
|
conform to usage
|
||||||
|
bsc#1141059
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Tue Jul 2 07:22:36 UTC 2019 - Martin Liška <mliska@suse.cz>
|
||||||
|
|
||||||
|
- Use FAT LTO objects in order to provide proper static library.
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Fri Jun 7 11:24:35 UTC 2019 - Tomáš Chvátal <tchvatal@suse.com>
|
||||||
|
|
||||||
|
- Do not enable the previous patchset on s390 but just s390x
|
||||||
|
bsc#1137624
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Thu Jun 6 09:43:12 UTC 2019 - Tomáš Chvátal <tchvatal@suse.com>
|
||||||
|
|
||||||
|
- Add patchset for s390 improvements jsc#SLE-5807 bsc#1136717:
|
||||||
|
* 410.patch
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Tue Mar 19 14:11:48 UTC 2019 - Tomáš Chvátal <tchvatal@suse.com>
|
||||||
|
|
||||||
|
- Try to safely abort if we get NULL ptr bsc#1110304 bsc#1129576:
|
||||||
|
* zlib-power8-fate325307.patch
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Wed Jun 20 14:51:07 UTC 2018 - tchvatal@suse.com
|
||||||
|
|
||||||
|
- Add patch for fate#325307 zlib speedup on power8:
|
||||||
|
* zlib-power8-fate325307.patch
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Tue May 15 10:56:20 UTC 2018 - tchvatal@suse.com
|
||||||
|
|
||||||
|
- Add patch to safeguard against negative values in uInt bsc#1071321:
|
||||||
|
* 0001-Do-not-try-to-store-negative-values-in-unsigned-int.patch
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Mon Jun 12 17:35:18 UTC 2017 - kah0922@gmail.com
|
||||||
|
|
||||||
|
- Added 32bit minizip support
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Thu Jun 1 13:34:38 UTC 2017 - mpluskal@suse.com
|
||||||
|
|
||||||
|
- Add gpg signature
|
||||||
|
- Re-enable profiling
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Wed May 10 13:43:08 UTC 2017 - mpluskal@suse.com
|
||||||
|
|
||||||
|
- Add s390 performance patch (fate#314093):
|
||||||
|
* zlib-1.2.11-optimized-s390.patch
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Tue Apr 4 08:31:28 UTC 2017 - schwab@suse.de
|
||||||
|
|
||||||
|
- baselibs.conf: add missing dependencies
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Mon Jan 16 09:57:59 UTC 2017 - mpluskal@suse.com
|
||||||
|
|
||||||
|
- Update to version 1.2.11:
|
||||||
|
* Fix deflate stored bug when pulling last block from window
|
||||||
|
* Permit immediate deflateParams changes before any deflate input
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Tue Jan 3 07:41:49 UTC 2017 - mpluskal@suse.com
|
||||||
|
|
||||||
|
- Update to version 1.2.10:
|
||||||
|
* Avoid warnings on snprintf() return value
|
||||||
|
* Fix bug in deflate_stored() for zero-length input
|
||||||
|
* Fix bug in gzwrite.c that produced corrupt gzip files
|
||||||
|
* Remove files to be installed before copying them in Makefile.in
|
||||||
|
* Add warnings when compiling with assembler code
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Mon Jan 2 09:08:50 UTC 2017 - mpluskal@suse.com
|
||||||
|
|
||||||
|
- Update to version 1.2.9:
|
||||||
|
* Improve compress() and uncompress() to support large lengths
|
||||||
|
* Allow building zlib outside of the source directory
|
||||||
|
* Fix bug when level 0 used with Z_HUFFMAN or Z_RLE
|
||||||
|
* Fix bugs in creating a very large gzip header
|
||||||
|
* Add uncompress2() function, which returns the input size used
|
||||||
|
* Dramatically speed up deflation for level 0 (storing)
|
||||||
|
* Add gzfread() and gzfwrite(), duplicating the interfaces of fread() and fwrite()
|
||||||
|
* Add crc32_z() and adler32_z() functions with size_t lengths
|
||||||
|
* Many portability improvements
|
||||||
|
- Drop patches included in upstream:
|
||||||
|
* zlib-bnc1003577.patch
|
||||||
|
* zlib-bnc1003579-part2.patch
|
||||||
|
* zlib-bnc1003579.patch
|
||||||
|
* zlib-bnc1003580.patch
|
||||||
|
* zlib-bnc1013882.patch
|
||||||
|
- Drop zlib-1.2.7-improve-longest_match-performance.patch
|
||||||
|
* not accepted by upstream for two releases
|
||||||
|
* rebasing no longer possible
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Sun Dec 4 12:47:51 UTC 2016 - tchvatal@suse.com
|
||||||
|
|
||||||
|
- Include fixes for bnc#1003580 bnc#1003579 bnc#1003577 bnc#1013882:
|
||||||
|
* zlib-bnc1003577.patch
|
||||||
|
* zlib-bnc1003579-part2.patch
|
||||||
|
* zlib-bnc1003579.patch
|
||||||
|
* zlib-bnc1003580.patch refreshed
|
||||||
|
* zlib-bnc1013882.patch CVE-2016-9843
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Thu Sep 24 20:21:46 UTC 2015 - jengelh@inai.de
|
||||||
|
|
||||||
|
- Trim descriptions to fit target audience. Update RPM group
|
||||||
|
classification.
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Mon Jul 13 11:58:44 UTC 2015 - tchvatal@suse.com
|
||||||
|
|
||||||
|
- Require zlib-devel in zlib-devel-static to fix previous change
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Tue Jun 30 11:30:37 UTC 2015 - tchvatal@suse.com
|
||||||
|
|
||||||
|
- Bring back zlib-devel-static. Needed by binutils
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Wed Jun 24 09:01:59 UTC 2015 - tchvatal@suse.com
|
||||||
|
|
||||||
|
- Remove zlib-devel-static, nothing should use libz.a anyway.
|
||||||
|
- Package minizip library, everything using it should now pull
|
||||||
|
minizip-devel and unbundle it bnc#935864
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Thu Sep 25 08:04:55 UTC 2014 - tchvatal@suse.com
|
||||||
|
|
||||||
|
- Install examples to cover another angle from bnc#890228
|
||||||
|
- Cleanup with spec-cleaner
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Mon Jul 29 12:37:19 UTC 2013 - mvyskocil@suse.com
|
||||||
|
|
||||||
|
- zlib-format.patch, backport missing sle11 feature back to openSUSE
|
||||||
|
bnc#831880
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Sat May 11 11:51:40 UTC 2013 - idonmez@suse.com
|
||||||
|
|
||||||
|
- Update to version 1.2.8
|
||||||
|
* Add new inflateGetDictionary() function
|
||||||
|
* Fix bug where gzopen() immediately followed by gzclose()
|
||||||
|
would write an empty file instead of an empty gzip stream.
|
||||||
|
* Fix bug in gzclose() when gzwrite() runs out of memory
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Tue Mar 5 10:00:58 UTC 2013 - mvyskocil@suse.com
|
||||||
|
|
||||||
|
- libz1-32bit obsoletes zlib-32bit <= 1.2.7 (fixes bnc#806310)
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Sat Dec 15 18:56:05 UTC 2012 - schwab@linux-m68k.org
|
||||||
|
|
||||||
|
- Add zlib-devel-static to baselibs.conf, needed for binutils testsuite
|
||||||
|
- Migrate zlib-<targettype> to libz1-<targettype>
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Thu Nov 22 01:17:59 UTC 2012 - jengelh@inai.de
|
||||||
|
|
||||||
|
- Replace %make_install by normal make install;
|
||||||
|
the former is a constant source of agony in older or non-SUSE.
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Mon Oct 22 05:10:48 UTC 2012 - coolo@suse.com
|
||||||
|
|
||||||
|
- buildignore checks for now to get bootstrapping working
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Mon Oct 15 07:39:29 UTC 2012 - mvyskocil@suse.com
|
||||||
|
|
||||||
|
- add longest_match performance patch (fate#314093)
|
||||||
|
* suggested by IBM, sent upstream
|
||||||
|
- rename the main library package to libz1 according Shared
|
||||||
|
Library Policy
|
||||||
|
- profiling build can be enabled via build --with profiling
|
||||||
|
- use the human-readable package description from zlib.net
|
||||||
|
- add rpmlintrc
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Mon May 7 12:34:45 UTC 2012 - joop.boonen@opensuse.org
|
||||||
|
|
||||||
|
- Update to 1.2.7
|
||||||
|
* Fix bug in gzclose_w() when gzwrite() fails to allocate memory
|
||||||
|
* Add "x" (O_EXCL) and "e" (O_CLOEXEC) modes support to gzopen()
|
||||||
|
* Add gzopen_w() in Windows for wide character path names
|
||||||
|
* Fix type mismatch between get_crc_table() and crc_table
|
||||||
|
- Passed the spec file through spec cleaner
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Thu Feb 9 16:17:55 UTC 2012 - jengelh@medozas.de
|
||||||
|
|
||||||
|
- Remove redundant tags/sections
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Thu Dec 22 14:31:42 CET 2011 - meissner@suse.de
|
||||||
|
|
||||||
|
- use configure options for library paths. Also fixes
|
||||||
|
the pkg-config file to not have /usr/local bnc#738169
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Wed Dec 7 15:29:27 UTC 2011 - coolo@suse.com
|
||||||
|
|
||||||
|
- zlib has it's own spdx license, so use it :)
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Sat Nov 19 20:00:11 UTC 2011 - crrodriguez@opensuse.org
|
||||||
|
|
||||||
|
- Do not include the codename in soversion.
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Sat Nov 19 18:42:12 UTC 2011 - crrodriguez@opensuse.org
|
||||||
|
|
||||||
|
- This is zlib 1.2.5.2 codename "motley"
|
||||||
|
- Fix bug and add consts in contrib/puff [Oberhumer]
|
||||||
|
- Fix static-only-build install in Makefile.in
|
||||||
|
- Add libz.a dependency to shared in Makefile.in for parallel builds
|
||||||
|
- Spell out "number" (instead of "nb") in zlib.h for total_in, total_out
|
||||||
|
- Fix bug in zlib.h for _FILE_OFFSET_BITS set and _LARGEFILE64_SOURCE not
|
||||||
|
- Add comment in zlib.h that adler32_combine with len2 < 0 makes no sense
|
||||||
|
- Make NO_DIVIDE option in adler32.c much faster (thanks to John Reiser)
|
||||||
|
- Fix zlib.h LFS support when Z_PREFIX used
|
||||||
|
- Avoid deflate sensitivity to volatile input data
|
||||||
|
- Avoid division in adler32_combine for NO_DIVIDE
|
||||||
|
- Clarify the use of Z_FINISH with deflateBound() amount of space
|
||||||
|
- Use u4 type for crc_table to avoid conversion warnings
|
||||||
|
- Apply casts in zlib.h to avoid conversion warnings
|
||||||
|
- Add OF to prototypes for adler32_combine_ and crc32_combine_ [Miller]
|
||||||
|
- Improve inflateSync() documentation to note indeterminancy
|
||||||
|
- Add deflatePending() function to return the amount of pending output
|
||||||
|
- Check that pointers fit in ints when gzprint() compiled old style
|
||||||
|
- Add dummy name before $(SHAREDLIBV) in Makefile [Bar-Lev, Bowler]
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Sun Nov 13 05:52:57 UTC 2011 - crrodriguez@opensuse.org
|
||||||
|
|
||||||
|
-open file descriptors with O_CLOEXEC but only in the·
|
||||||
|
gzopen() case, not in gzdopen() as that would change
|
||||||
|
the calling application' semantics.
|
||||||
|
It is responsability of the caller to ensure O_CLOEXEC is used
|
||||||
|
in such scenario.
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Tue Oct 4 09:10:46 UTC 2011 - uli@suse.com
|
||||||
|
|
||||||
|
- cross-build fix: use %__cc macro (not %configure, this is not
|
||||||
|
autoconf)
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Fri Aug 26 18:36:11 UTC 2011 - crrodriguez@opensuse.org
|
||||||
|
|
||||||
|
- Use __attribute__ target in SSE optimized functions
|
||||||
|
so the compiler defines __MMX__ __SSE__ etc, this probably
|
||||||
|
only matters in 32 bit. what version to use is still
|
||||||
|
determined at runtime by cpuid.
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Mon Jun 27 11:05:47 UTC 2011 - dimstar@opensuse.org
|
||||||
|
|
||||||
|
- bnc#652333: Change LICENSE text to not have version, which
|
||||||
|
changes too often and invalidates the text everytime.
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Mon May 30 19:38:43 UTC 2011 - crrodriguez@opensuse.org
|
||||||
|
|
||||||
|
- Fix two bugs that will break ia64 systems only.
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Fri May 27 09:13:31 UTC 2011 - mvyskocil@suse.cz
|
||||||
|
|
||||||
|
- fix bnc#679345: zlib segfaults when passing NULL to gzopen
|
||||||
|
* return NULL checks back to gz_open
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Thu May 12 20:02:26 UTC 2011 - crrodriguez@opensuse.org
|
||||||
|
|
||||||
|
- Update SSE patches, fixes bugs in PPC implementation
|
||||||
|
- X86 improvements.
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Sat May 7 18:25:48 UTC 2011 - crrodriguez@opensuse.org
|
||||||
|
|
||||||
|
- Update SSE2/MMX patches to their current version.
|
||||||
|
per request of the author.
|
||||||
|
* This are integrated now,including support for a number
|
||||||
|
of additional archs and fixes ARM patches bugs.
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Mon Apr 18 18:02:50 UTC 2011 - crrodriguez@opensuse.org
|
||||||
|
|
||||||
|
- Update SSE2/MMX patches tp version 3
|
||||||
|
now with comments,performance numbers,and ia64 support
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Wed Mar 30 19:47:30 UTC 2011 - crrodriguez@opensuse.org
|
||||||
|
|
||||||
|
- Update SSE2/MMX patches to version 2.
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Tue Mar 15 22:38:32 UTC 2011 - crrodriguez@opensuse.org
|
||||||
|
|
||||||
|
- Add highly experimental patches to use SSE2/SSSE3/MMX in zlib
|
||||||
|
this makes the library up to 6 times faster.
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Sun Jan 9 14:33:08 CET 2011 - meissner@suse.de
|
||||||
|
|
||||||
|
- do not use compiler profile information, as the testsuite fails
|
||||||
|
when using it.
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Tue Dec 21 16:12:56 CET 2010 - meissner@suse.de
|
||||||
|
|
||||||
|
- Add dependency to make it build in a parallel world.
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Tue Dec 7 17:18:43 UTC 2010 - cristian.rodriguez@opensuse.org
|
||||||
|
|
||||||
|
- use compiler profile information to make libz slightly faster.
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Tue Sep 21 21:48:23 UTC 2010 - dimstar@opensuse.org
|
||||||
|
|
||||||
|
- Simplified version of zlib-lfs.patch. Should also resolve issues
|
||||||
|
arising with various combination of LFS derinfes.
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Tue Sep 14 20:10:13 UTC 2010 - dimstar@opensuse.org
|
||||||
|
|
||||||
|
- Add zlib-lfs.patch: Fix Large File Support. Patch comes from the
|
||||||
|
zlib-devel mailinglist:
|
||||||
|
http://mail.madler.net/pipermail/zlib-devel_madler.net/2010-May/002303.html
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Tue Aug 10 16:04:54 CEST 2010 - dimstar@opensuse.org
|
||||||
|
|
||||||
|
- Update to version 1.2.5:
|
||||||
|
+ fixes bugs in gzseek() and gzeof()
|
||||||
|
- Changes from version 1.2.4:
|
||||||
|
+ Fixed bugs in adler32_combine(), compressBound(), and
|
||||||
|
deflateBound()
|
||||||
|
+ Wholesale replacement of gz* functions with faster versions
|
||||||
|
+ As part of that, added gzbuffer(), gzoffset(), gzclose_r(), and
|
||||||
|
gzclose_w() functions
|
||||||
|
+ Faster Z_HUFFMAN_ONLY and Z_RLE compression for images and
|
||||||
|
other specialized compression
|
||||||
|
+ Added flush options Z_BLOCK to deflate() and Z_TREES to
|
||||||
|
inflate() for finer control
|
||||||
|
+ Added inflateReset2() and inflateMark() functions, the latter
|
||||||
|
to aid in random access applications
|
||||||
|
+ Added LFS (Large File Summit) support for 64-bit file offsets
|
||||||
|
and many other portability improvements
|
||||||
|
+ Updated examples in examples/ and updated third-party
|
||||||
|
contributions in contrib/
|
||||||
|
- Drop obsolete patches:
|
||||||
|
+ zlib-1.2.1-make-test.patch
|
||||||
|
+ zlib-1.2.1-vsnprintf.patch
|
||||||
|
+ zlib-1.2.1-CFLAGS.dif
|
||||||
|
+ zlib-1.2.3-686.patch
|
||||||
|
+ zlib-1.2.3-visibility-support.patch
|
||||||
|
- Rebased zlib-1.2.2-format.patch
|
||||||
|
- Clean spec file using spec-cleaner.
|
||||||
|
- BuildRequire to have proper pkgconfig() provides.
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Mon Jun 28 06:38:35 UTC 2010 - jengelh@medozas.de
|
||||||
|
|
||||||
|
- use %_smp_mflags
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Sat Dec 12 18:41:52 CET 2009 - jengelh@medozas.de
|
||||||
|
|
||||||
|
- add baselibs.conf as a source
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Tue Nov 24 16:23:32 UTC 2009 - crrodriguez@opensuse.org
|
||||||
|
|
||||||
|
- refresh patches with fuzz=0
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Fri Apr 24 10:33:06 CEST 2009 - mseben@suse.cz
|
||||||
|
|
||||||
|
- added LICENSE file, for GPL licensed contrib files, however
|
||||||
|
they are not used to build our zlib library (bnc#490107)
|
||||||
|
- added zlib-1.2.3-686.patch - update license text (bnc#490107)
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Sat Mar 21 16:23:42 CET 2009 - crrodriguez@suse.de
|
||||||
|
|
||||||
|
- there is one valid use case of static zlib in "qemu" package
|
||||||
|
split a -devel-static subpackage, please do not BuildRequire
|
||||||
|
this package unless you are 100% sure you need it, if in doubt
|
||||||
|
mail either the security team or me.
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Fri Feb 27 19:58:04 CET 2009 - crrodriguez@suse.de
|
||||||
|
|
||||||
|
- add patch from gentoo that makes zlib to only export
|
||||||
|
its public API using GCC visibility features, this will
|
||||||
|
of course break wrong code that uses private symbols
|
||||||
|
- exclude static zlib, at least temporarily, in order to clearly know
|
||||||
|
what is using it.
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Wed Jan 7 12:34:56 CET 2009 - olh@suse.de
|
||||||
|
|
||||||
|
- obsolete old -XXbit packages (bnc#437293)
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Thu Apr 10 12:54:45 CEST 2008 - ro@suse.de
|
||||||
|
|
||||||
|
- added baselibs.conf file to build xxbit packages
|
||||||
|
for multilib support
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Sat Jan 12 03:41:39 CET 2008 - crrodriguez@suse.de
|
||||||
|
|
||||||
|
- fix library-without-ldconfig-* errors
|
||||||
|
- do not delete buildroot on install section
|
||||||
|
- run make test in the check section.
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Thu May 3 11:41:41 CEST 2007 - rguenther@suse.de
|
||||||
|
|
||||||
|
- move documentation files to zlib-devel package
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Wed Jan 31 13:02:30 CET 2007 - ro@suse.de
|
||||||
|
|
||||||
|
- remove libgz completely (obsolete long ago)
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Wed Jan 25 21:31:09 CET 2006 - mls@suse.de
|
||||||
|
|
||||||
|
- converted neededforbuild to BuildRequires
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Sat Dec 17 09:02:34 CET 2005 - kukuk@suse.de
|
||||||
|
|
||||||
|
- Remove unpackaged libz.so symlink
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Wed Jul 20 10:52:46 CEST 2005 - meissner@suse.de
|
||||||
|
|
||||||
|
- Upgraded to 1.2.3. Security fix is now in mainline.
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Mon Jul 4 10:03:17 CEST 2005 - meissner@suse.de
|
||||||
|
|
||||||
|
- fixed memory corruption problem #94926, CAN-2005-2096.
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Fri Apr 1 09:34:23 CEST 2005 - kukuk@suse.de
|
||||||
|
|
||||||
|
- Remove movage of setting CFLAGS
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Tue Mar 29 10:44:32 CEST 2005 - kukuk@suse.de
|
||||||
|
|
||||||
|
- Update to 1.2.2.2
|
||||||
|
- Fix compiling with gcc 3.3 and 4.0
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Mon Feb 28 10:03:18 CET 2005 - meissner@suse.de
|
||||||
|
|
||||||
|
- Use __printf__ in format attribute to avoid printf defines.
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Wed Feb 23 13:11:56 CET 2005 - meissner@suse.de
|
||||||
|
|
||||||
|
- supply format arguments to gzprintf().
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Tue Feb 8 10:13:30 CET 2005 - ro@suse.de
|
||||||
|
|
||||||
|
- update to 1.2.2
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Wed Aug 25 14:39:49 CEST 2004 - ro@suse.de
|
||||||
|
|
||||||
|
- updated crash patch to version from Dmitry (#44087)
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Mon Aug 23 15:54:02 CEST 2004 - ro@suse.de
|
||||||
|
|
||||||
|
- added fix for crash on invalid input (#44087)
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Thu Dec 4 01:59:05 CET 2003 - ro@suse.de
|
||||||
|
|
||||||
|
- update to 1.2.1
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Fri Nov 21 15:08:36 CET 2003 - kukuk@suse.de
|
||||||
|
|
||||||
|
- Use RPM_OPT_FLAGS
|
||||||
|
- Compile with no execstack
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Mon Oct 20 18:27:53 CEST 2003 - ro@suse.de
|
||||||
|
|
||||||
|
- don't build as root
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Mon May 12 18:55:18 CEST 2003 - kukuk@suse.de
|
||||||
|
|
||||||
|
- Add defattr
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Mon Mar 3 16:52:51 CET 2003 - ro@suse.de
|
||||||
|
|
||||||
|
- do use vsnprintf
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Sun Feb 16 10:37:37 CET 2003 - olh@suse.de
|
||||||
|
|
||||||
|
- no absolute symlinks for libz.so
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Thu Jul 25 08:40:28 CEST 2002 - kukuk@suse.de
|
||||||
|
|
||||||
|
- Rename to zlib
|
||||||
|
- Splitt off zlib-devel
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Fri Jul 5 12:50:05 MEST 2002 - bk@suse.de
|
||||||
|
|
||||||
|
- enable make test
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Mon May 27 09:13:31 CEST 2002 - ro@suse.de
|
||||||
|
|
||||||
|
- update to 1.1.4 including the previous security patch
|
||||||
|
- Returned incorrect error (Z_MEM_ERROR) on some invalid data
|
||||||
|
- Avoid accesses before window for invalid distances with inflate window
|
||||||
|
less than 32K.
|
||||||
|
- force windowBits > 8 to avoid a bug in the encoder for a window size
|
||||||
|
of 256 bytes. (A complete fix will be available in 1.1.5).
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Mon Feb 25 14:37:54 CET 2002 - ro@suse.de
|
||||||
|
|
||||||
|
- remove executable bits from manpage and include file
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Thu Feb 7 11:55:43 MET 2002 - draht@suse.de
|
||||||
|
|
||||||
|
- prevent double free() (security problem) with
|
||||||
|
zlib-1.1.3-zfree.dif
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Tue Dec 11 15:40:35 CET 2001 - froh@suse.de
|
||||||
|
|
||||||
|
- fixed specfile to use %_libdir for make install for
|
||||||
|
the sake of lib64 on S/390. also updated old sparc64 %ifarch at
|
||||||
|
this point.
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Tue Dec 4 17:54:00 CET 2001 - ro@suse.de
|
||||||
|
|
||||||
|
- added Provides zlib-devel for compatibility
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Tue May 1 18:12:26 CEST 2001 - kukuk@suse.de
|
||||||
|
|
||||||
|
- Minor spec file fixes for sparc64
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Thu Dec 7 13:55:36 CET 2000 - kukuk@suse.de
|
||||||
|
|
||||||
|
- Install only shared library in /%{_lib}
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Wed Dec 6 16:20:09 CET 2000 - ro@suse.de
|
||||||
|
|
||||||
|
- install main lib in /%{_lib} not /usr/%{_lib}
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Mon Oct 2 20:25:01 CEST 2000 - kukuk@suse.de
|
||||||
|
|
||||||
|
- Use %{_lib} macro
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Mon Sep 25 15:27:33 CEST 2000 - ro@suse.de
|
||||||
|
|
||||||
|
- sorted
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Wed Apr 5 01:01:37 CEST 2000 - bk@suse.de
|
||||||
|
|
||||||
|
- fixed BuildRoot support
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Mon Apr 3 15:12:01 MEST 2000 - bk@suse.de
|
||||||
|
|
||||||
|
- added buildroot for build with dynamically linked rpm which uses libz(s390)
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Thu Jan 20 15:38:46 CET 2000 - aj@suse.de
|
||||||
|
|
||||||
|
- /usr/man -> /usr/share/man
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Mon Sep 13 17:23:57 CEST 1999 - bs@suse.de
|
||||||
|
|
||||||
|
- ran old prepare_spec on spec file to switch to new prepare_spec.
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Tue Jul 13 13:13:43 MEST 1999 - ro@suse.de
|
||||||
|
|
||||||
|
- added zutil.h
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Thu Mar 4 10:03:38 MET 1999 - ro@suse.de
|
||||||
|
|
||||||
|
- moved from /usr/X11R6 to usr
|
||||||
|
- libgz is now only a link to libz
|
||||||
|
- "libgz.so.1" is provided from specfile
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Tue Aug 25 17:11:04 MEST 1998 - ro@suse.de
|
||||||
|
|
||||||
|
- update to 1.1.3
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Fri Mar 20 13:58:12 MET 1998 - ro@suse.de
|
||||||
|
|
||||||
|
- update to 1.1.2
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Mon Mar 2 14:03:08 MET 1998 - ro@suse.de
|
||||||
|
|
||||||
|
- update to 1.1.1
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Fri Feb 27 11:17:44 MET 1998 - ro@suse.de
|
||||||
|
|
||||||
|
- update to version 1.0.9
|
||||||
|
created own specfile for easier maintenance
|
||||||
|
included man-pages
|
||||||
|
|
38
zlib.keyring
Normal file
38
zlib.keyring
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||||
|
|
||||||
|
mQGiBDuVqKgRBAD5Mcvdc41W5lpeZvYplEuyEBXwmxnUryE2KaCG1C06sGyqgiec
|
||||||
|
VPXPbgIPKOUt4veMycVoqU4U4ZNuIeCGPfUvkGKLKvy5lK3iexC1Qvat+9ek2+yX
|
||||||
|
9zFlTo9QyT4kjn+xaZQYVctL370gUNV4eoiWDdrTjIvBfQCb+bf87eHv0QCg/7xt
|
||||||
|
wnq3uMpQHX+k2LGD2QDEjUcEALalUPPX99ZDjBN75CFUtbE43a73+jtNOLJFqGo3
|
||||||
|
ne/lB8DqVwavrgQQxQqjg2xBVvagNpu2Cpmz3HlWoaqEb5vwxjRjhF5WRE+4s4es
|
||||||
|
9536lQ6pd5tZK4tHMOjvICkSg2BLUsc8XzBreLv3GEdpHP6EeezgAVQyWMpZkCdn
|
||||||
|
Xk8FA/9gRmro4+X0KJilw1EShYzudEAi02xQbr9hGiA84pQ4hYkdnLLeRscChwxM
|
||||||
|
VmoiEuJ51ZzIPlcSifzvlQBHIyYCl0KJeVMECXyjLddWkQM32ZZmQvG02mL2XYmF
|
||||||
|
/UG+/0vd6b2ISmtns6WrULGPNtagHhul+8j7zUfedsWuqpwbm7QmTWFyayBBZGxl
|
||||||
|
ciA8bWFkbGVyQGFsdW1uaS5jYWx0ZWNoLmVkdT6IRgQQEQIABgUCPIx/xAAKCRDZ
|
||||||
|
on0lAZZxp+ETAJ0bn8ntrka3vrFPtI6pRwOlueDEgQCfdFqvNgLv1QTYZJQZ5rUn
|
||||||
|
oM+F+aGIRgQQEQIABgUCQ5GdzQAKCRAvWOuZeViwlP1AAJ4lI6tis2lruhG8DsQ0
|
||||||
|
xtWvb2OCfACfb5B/CYDjmRInrAgbVEla3EiO9sKIWAQQEQIAGAUCO5WoqAgLAwkI
|
||||||
|
BwIBCgIZAQUbAwAAAAAKCRB4P82OWLyvunKOAJ9kOC1uyoYYiXp2SMdcPMj5J+8J
|
||||||
|
XQCeKBP9Orx0bXK6luyWnCS5LJhevTyJARwEEAECAAYFAlDH6cIACgkQdxZ3RMno
|
||||||
|
5CguZAf/dxDbnY+rad6GJ1fYVyB9PfboyXLY/vksmupE9rbYmuLP85Rq1hdN56aZ
|
||||||
|
Qwjm7EPQi6htFANKOPkjOhutSD4X530Dj6Y7To8t85lW3351OP07EfZGilolIugU
|
||||||
|
6IMZNaUHVF1T0I68frkNTrmRx0PcOJacWB6fkBdoNtd5NLASgI+cszgLsD6THJZk
|
||||||
|
58RUDINY6fGBYFZkl2/dBbkLaj3DFr+ed6Oe99d546nfSz+zsm454W2M+Wf/yplK
|
||||||
|
O8Sd641h1eRGD/vihsOO+4gRgS+tQNzwb+eivON0PMvsGAEPEQ+aPVQ/U/UIQSYA
|
||||||
|
+cYz2jGSXhVppatEpq5U3aJLbcZKOrkCDQQ7laipEAgA9kJXtwh/CBdyorrWqULz
|
||||||
|
Bej5UxE5T7bxbrlLOCDaAadWoxTpj0BV89AHxstDqZSt90xkhkn4DIO9ZekX1KHT
|
||||||
|
UPj1WV/cdlJPPT2N286Z4VeSWc39uK50T8X8dryDxUcwYc58yWb/Ffm7/ZFexwGq
|
||||||
|
01uejaClcjrUGvC/RgBYK+X0iP1YTknbzSC0neSRBzZrM2w4DUUdD3yIsxx8Wy2O
|
||||||
|
9vPJI8BD8KVbGI2Ou1WMuF040zT9fBdXQ6MdGGzeMyEstSr/POGxKUAYEY18hKcK
|
||||||
|
ctaGxAMZyAcpesqVDNmWn6vQClCbAkbTCD1mpF1Bn5x8vYlLIhkmuquiXsNV6TIL
|
||||||
|
OwACAgf/aMWYoBCocATXsfSUAJb69OPUXWjevZiCf6n+7Id3L5X5um55L5sEBr8+
|
||||||
|
8m5SIuHUippgNFJdu2xyulbb1MeegtTttEWymF9sM8cWfeTjXPOd7+ZQumiOXwk/
|
||||||
|
g0qqjTrq7EYW5PlMjO2FbH/Ix9SHKVS9a0eGUUl+PBv3fkEZBJ4HhweqcSfLyKU/
|
||||||
|
CHysN03Z36gtdu1BJlzHy8BPxWzP4vtPEi57Q1dFDY/+OrdlBnwKTpne6y0rAbi/
|
||||||
|
wk6FxDGQ86vdapLI51kTxvkYx8+qZXqE4CG5fWbAFDQVTNZIWJNgYMX7Kgl8Fvw+
|
||||||
|
7zCqJsv/KbuonIEb5hNViflVTWlBAIhMBBgRAgAMBQI7laipBRsMAAAAAAoJEHg/
|
||||||
|
zY5YvK+6T88An1VSVGbeKbIL+k8HaPUsWB7qs5RhAKDdtkn0xqOr+0pE5eilEc61
|
||||||
|
pMCmSQ==
|
||||||
|
=5shY
|
||||||
|
-----END PGP PUBLIC KEY BLOCK-----
|
256
zlib.spec
Normal file
256
zlib.spec
Normal file
@ -0,0 +1,256 @@
|
|||||||
|
#
|
||||||
|
# spec file for package zlib
|
||||||
|
#
|
||||||
|
# Copyright (c) 2023 SUSE LLC
|
||||||
|
#
|
||||||
|
# All modifications and additions to the file contributed by third parties
|
||||||
|
# remain the property of their copyright owners, unless otherwise agreed
|
||||||
|
# upon. The license for this file, and modifications and additions to the
|
||||||
|
# file, is the same license as for the pristine package itself (unless the
|
||||||
|
# license for the pristine package is not an Open Source License, in which
|
||||||
|
# case the license is the MIT License). An "Open Source License" is a
|
||||||
|
# license that conforms to the Open Source Definition (Version 1.9)
|
||||||
|
# published by the Open Source Initiative.
|
||||||
|
|
||||||
|
# Please submit bugfixes or comments via https://bugs.opensuse.org/
|
||||||
|
#
|
||||||
|
|
||||||
|
|
||||||
|
Name: zlib
|
||||||
|
Version: 1.2.13
|
||||||
|
Release: 0
|
||||||
|
Summary: Library implementing the DEFLATE compression algorithm
|
||||||
|
License: Zlib
|
||||||
|
URL: https://www.zlib.net/
|
||||||
|
Source0: https://zlib.net/zlib-%{version}.tar.gz
|
||||||
|
Source1: https://zlib.net/zlib-%{version}.tar.gz.asc
|
||||||
|
Source2: %{name}.keyring
|
||||||
|
Source4: LICENSE
|
||||||
|
Source5: baselibs.conf
|
||||||
|
Source6: zlib-rpmlintrc
|
||||||
|
#PATCH-FIX-SUSE: compiler check of varguments passed to gzprintf
|
||||||
|
Patch1: zlib-format.patch
|
||||||
|
#PATCH-FIX-SUSE do not store negative values in uInt
|
||||||
|
Patch2: 0001-Do-not-try-to-store-negative-values-in-unsigned-int.patch
|
||||||
|
#PATCH-FIX-SUSE do not check exact version match as the lib can be updated
|
||||||
|
# we should simply rely on soname versioning to protect us
|
||||||
|
Patch3: zlib-no-version-check.patch
|
||||||
|
#PATCH-FIX-SUSE https://github.com/madler/zlib/pull/229
|
||||||
|
Patch4: minizip-dont-install-crypt-header.patch
|
||||||
|
# PATCH-FIX-UPSTREAM https://github.com/madler/zlib/commit/e554695638228b846d49657f31eeff0ca4680e8a
|
||||||
|
Patch5: zlib-1.2.13-fix-bug-deflateBound.patch
|
||||||
|
#PATCH-FIX-SUSE https://github.com/madler/zlib/pull/410
|
||||||
|
Patch6: zlib-1.2.13-IBM-Z-hw-accelerated-deflate-s390x.patch
|
||||||
|
# Patches taken from https://github.com/iii-i/zlib/releases/tag/crc32vx-v3
|
||||||
|
Patch7: zlib-1.2.5-minizip-fixuncrypt.patch
|
||||||
|
Patch8: zlib-1.2.13-optimized-s390.patch
|
||||||
|
# https://github.com/iii-i/zlib/commit/171d0ff3c9ed40da0ac14085ab16b766b1162069
|
||||||
|
Patch10: zlib-1.2.11-covscan-issues.patch
|
||||||
|
Patch11: zlib-1.2.11-covscan-issues-rhel9.patch
|
||||||
|
Patch14: zlib-1.2.12-s390-vectorize-crc32.patch
|
||||||
|
# The following patches are taken from https://github.com/mscastanho/zlib/commits/power-optimizations-1.2.12
|
||||||
|
Patch15: zlib-1.2.12-adler32-vector-optimizations-for-power.patch
|
||||||
|
Patch16: zlib-1.2.12-fix-invalid-memory-access-on-ppc-and-ppc64.patch
|
||||||
|
Patch17: zlib-1.2.12-add-optimized-slide_hash-for-power.patch
|
||||||
|
Patch18: zlib-1.2.12-add-vectorized-longest_match-for-power.patch
|
||||||
|
# PATCH-FIX-UPSTREAM danilo.spinella@suse.com bsc#1210593 bsc#1211005
|
||||||
|
# Fix deflateBound() before deflateInit()
|
||||||
|
Patch19: bsc1210593.patch
|
||||||
|
BuildRequires: autoconf
|
||||||
|
BuildRequires: automake
|
||||||
|
BuildRequires: libtool
|
||||||
|
BuildRequires: pkgconfig
|
||||||
|
# SLE15 specific buildcycle: we don't need NIS functionality in PAM for building
|
||||||
|
#!BuildIgnore: libtirpc3 libtirpc-netconfig
|
||||||
|
%{?suse_build_hwcaps_libs}
|
||||||
|
|
||||||
|
%description
|
||||||
|
zlib is a general-purpose lossless data-compression library,
|
||||||
|
implementing an API for the DEFLATE algorithm, the latter of
|
||||||
|
which is being used by, for example, gzip and the ZIP archive
|
||||||
|
format.
|
||||||
|
|
||||||
|
%package -n libz1
|
||||||
|
Summary: Library implementing the DEFLATE compression algorithm
|
||||||
|
Provides: %{name} = %{version}-%{release}
|
||||||
|
Obsoletes: %{name} < %{version}-%{release}
|
||||||
|
|
||||||
|
%description -n libz1
|
||||||
|
zlib is a general-purpose lossless data-compression library,
|
||||||
|
implementing an API for the DEFLATE algorithm, the latter of
|
||||||
|
which is being used by, for example, gzip and the ZIP archive
|
||||||
|
format.
|
||||||
|
|
||||||
|
%package devel
|
||||||
|
Summary: Development files for zlib, a data compression library
|
||||||
|
Requires: glibc-devel
|
||||||
|
Requires: libz1 = %{version}
|
||||||
|
|
||||||
|
%description devel
|
||||||
|
zlib is a general-purpose lossless data-compression library,
|
||||||
|
implementing an API for the DEFLATE algorithm, the latter of
|
||||||
|
which is being used by, for example, gzip and the ZIP archive
|
||||||
|
format.
|
||||||
|
|
||||||
|
This subpackage holds the development headers for the library.
|
||||||
|
|
||||||
|
The zlib data format is itself portable across platforms. Unlike the
|
||||||
|
LZW compression method used in unix compress(1) and in the GIF image
|
||||||
|
format, the compression method currently used in zlib essentially
|
||||||
|
never expands the data. (LZW can double or triple the file size in
|
||||||
|
extreme cases.) zlib's memory footprint is also independent of the
|
||||||
|
input data and can be reduced, if necessary, at some cost in
|
||||||
|
compression.
|
||||||
|
|
||||||
|
%package devel-static
|
||||||
|
Summary: Static library for zlib
|
||||||
|
Requires: %{name}-devel = %{version}
|
||||||
|
Provides: %{name}-devel:%{_libdir}/libz.a
|
||||||
|
|
||||||
|
%description devel-static
|
||||||
|
zlib is a general-purpose lossless data-compression library,
|
||||||
|
implementing an API for the DEFLATE algorithm, the latter of
|
||||||
|
which is being used by, for example, gzip and the ZIP archive
|
||||||
|
format.
|
||||||
|
|
||||||
|
This subpackage contains the static version of the library
|
||||||
|
used for development.
|
||||||
|
|
||||||
|
%package -n libminizip1
|
||||||
|
Summary: Library for manipulation with .zip archives
|
||||||
|
|
||||||
|
%description -n libminizip1
|
||||||
|
Minizip is a library for manipulation with files from .zip archives.
|
||||||
|
|
||||||
|
%package -n minizip-devel
|
||||||
|
Summary: Development files for the minizip library
|
||||||
|
Requires: %{name}-devel = %{version}
|
||||||
|
Requires: libminizip1 = %{version}
|
||||||
|
Requires: pkgconfig
|
||||||
|
|
||||||
|
%description -n minizip-devel
|
||||||
|
This package contains the libraries and header files needed for
|
||||||
|
developing applications which use minizip.
|
||||||
|
|
||||||
|
%package testsuite
|
||||||
|
Summary: Provide the test examples to reproduce test suite
|
||||||
|
Requires: libz1 = %{version}
|
||||||
|
|
||||||
|
%description testsuite
|
||||||
|
To run the testsuite, execute %{_libexecdir}/%{name}/testsuite
|
||||||
|
|
||||||
|
It should exit 0
|
||||||
|
|
||||||
|
%prep
|
||||||
|
%setup -q
|
||||||
|
%patch1
|
||||||
|
%patch2 -p1
|
||||||
|
%patch3 -p1
|
||||||
|
%patch4 -p1
|
||||||
|
%patch5 -p1
|
||||||
|
%patch6 -p1
|
||||||
|
%patch7 -p1
|
||||||
|
%patch8
|
||||||
|
%patch10 -p1
|
||||||
|
%patch11 -p1
|
||||||
|
%patch14 -p1
|
||||||
|
%patch15 -p1
|
||||||
|
%patch16 -p1
|
||||||
|
%patch17 -p1
|
||||||
|
%patch18 -p1
|
||||||
|
%patch19 -p1
|
||||||
|
cp %{SOURCE4} .
|
||||||
|
|
||||||
|
%build
|
||||||
|
%global _lto_cflags %{_lto_cflags} -ffat-lto-objects
|
||||||
|
export LDFLAGS="-Wl,-z,relro,-z,now"
|
||||||
|
# For sure not autotools build
|
||||||
|
CC="cc" CFLAGS="%{optflags}" ./configure \
|
||||||
|
--shared \
|
||||||
|
--prefix=%{_prefix} \
|
||||||
|
--libdir=%{_libdir} \
|
||||||
|
%ifarch s390x s390
|
||||||
|
--dfltcc \
|
||||||
|
--dfltcc-level-mask=0x7e \
|
||||||
|
%endif
|
||||||
|
%{nil}
|
||||||
|
|
||||||
|
# Profiling flags breaks tests, as of 1.2.12
|
||||||
|
# In particular, gzseek does not work as intended
|
||||||
|
#%if %{do_profiling}
|
||||||
|
# %make_build CFLAGS="%{optflags} %{cflags_profile_generate}"
|
||||||
|
# %make_build check
|
||||||
|
# %make_build clean
|
||||||
|
# %make_build %{?_smp_mflags} CFLAGS="%{optflags} %{cflags_profile_feedback}"
|
||||||
|
#%else
|
||||||
|
%make_build
|
||||||
|
#%endif
|
||||||
|
|
||||||
|
# And build minizip
|
||||||
|
cd contrib/minizip
|
||||||
|
autoreconf -fvi
|
||||||
|
%configure \
|
||||||
|
--disable-static \
|
||||||
|
--disable-silent-rules
|
||||||
|
%make_build
|
||||||
|
|
||||||
|
%check
|
||||||
|
%make_build check
|
||||||
|
|
||||||
|
%install
|
||||||
|
mkdir -p %{buildroot}%{_libdir}
|
||||||
|
%make_install
|
||||||
|
# manpage
|
||||||
|
install -m 644 zlib.3 %{buildroot}%{_mandir}/man3
|
||||||
|
install -m 644 zutil.h %{buildroot}%{_includedir}
|
||||||
|
# examples
|
||||||
|
mkdir -p %{buildroot}%{_docdir}/%{name}
|
||||||
|
cp -r examples/ %{buildroot}%{_docdir}/%{name}/
|
||||||
|
|
||||||
|
install -D examplesh %{buildroot}%{_libexecdir}/%{name}/testsuite
|
||||||
|
|
||||||
|
# Install minizip
|
||||||
|
cd contrib/minizip
|
||||||
|
%make_install
|
||||||
|
find %{buildroot} -type f -name "*.la" -delete -print
|
||||||
|
|
||||||
|
%post -n libz1 -p /sbin/ldconfig
|
||||||
|
%postun -n libz1 -p /sbin/ldconfig
|
||||||
|
%post -n libminizip1 -p /sbin/ldconfig
|
||||||
|
%postun -n libminizip1 -p /sbin/ldconfig
|
||||||
|
|
||||||
|
%files -n libz1
|
||||||
|
%license LICENSE
|
||||||
|
%{_libdir}/libz.so.1.2.*
|
||||||
|
%{_libdir}/libz.so.1
|
||||||
|
|
||||||
|
%files devel
|
||||||
|
%doc README ChangeLog
|
||||||
|
%dir %{_docdir}/%{name}/
|
||||||
|
%dir %{_docdir}/%{name}/examples
|
||||||
|
%{_docdir}/%{name}/examples/*
|
||||||
|
%{_mandir}/man3/zlib.3%{?ext_man}
|
||||||
|
%{_includedir}/zlib.h
|
||||||
|
%{_includedir}/zconf.h
|
||||||
|
%{_includedir}/zutil.h
|
||||||
|
%{_libdir}/libz.so
|
||||||
|
%{_libdir}/pkgconfig/zlib.pc
|
||||||
|
|
||||||
|
%files -n libminizip1
|
||||||
|
%doc contrib/minizip/MiniZip64_info.txt contrib/minizip/MiniZip64_Changes.txt
|
||||||
|
%{_libdir}/libminizip.so.*
|
||||||
|
|
||||||
|
%files -n minizip-devel
|
||||||
|
%dir %{_includedir}/minizip
|
||||||
|
%{_includedir}/minizip/*.h
|
||||||
|
%{_libdir}/libminizip.so
|
||||||
|
%{_libdir}/pkgconfig/minizip.pc
|
||||||
|
|
||||||
|
%files devel-static
|
||||||
|
%{_libdir}/libz.a
|
||||||
|
|
||||||
|
%files testsuite
|
||||||
|
%dir %{_libexecdir}/%{name}
|
||||||
|
%{_libexecdir}/%{name}/testsuite
|
||||||
|
|
||||||
|
%changelog
|
Loading…
Reference in New Issue
Block a user