diff options
-rw-r--r-- | main/s390-tools/0001-zipl-flags.patch | 25 | ||||
-rw-r--r-- | main/s390-tools/0002-musl-fixes.patch | 103 | ||||
-rw-r--r-- | main/s390-tools/0003-major-minor.patch | 24 | ||||
-rw-r--r-- | main/s390-tools/0009-link-libexecinfo.patch | 17 | ||||
-rw-r--r-- | main/s390-tools/0100-zipl-no-pie.patch | 54 | ||||
-rw-r--r-- | main/s390-tools/0101-zipl-dont-optimize-size.patch | 21 | ||||
-rw-r--r-- | main/s390-tools/0300-disable-program-using-gnu-ext.patch | 32 | ||||
-rw-r--r-- | main/s390-tools/APKBUILD | 45 | ||||
-rw-r--r-- | main/s390-tools/Makefile.argz | 14 | ||||
-rw-r--r-- | main/s390-tools/argz.c | 389 | ||||
-rw-r--r-- | main/s390-tools/argz.h | 117 | ||||
-rw-r--r-- | main/s390-tools/argz.patch | 145 |
12 files changed, 745 insertions, 241 deletions
diff --git a/main/s390-tools/0001-zipl-flags.patch b/main/s390-tools/0001-zipl-flags.patch deleted file mode 100644 index da642fec93..0000000000 --- a/main/s390-tools/0001-zipl-flags.patch +++ /dev/null @@ -1,25 +0,0 @@ -From 584fd01d78e94d98ea2cb21954789fcc844fabcb Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Dan=20Hor=C3=A1k?= <dan@danny.cz> -Date: Fri, 22 Apr 2016 13:21:50 +0200 -Subject: [PATCH] zipl: disable strict aliasing for bootloader - ---- - zipl/boot/Makefile | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/zipl/boot/Makefile b/zipl/boot/Makefile -index bb8a19d..f1f4401 100644 ---- a/zipl/boot/Makefile -+++ b/zipl/boot/Makefile -@@ -4,7 +4,7 @@ include ../../common.mak - CFLAGS_BOOT = -Os -g -I../include -D__ASSEMBLY__ \ - -DS390_TOOLS_RELEASE=$(S390_TOOLS_RELEASE) \ - -fno-builtin -ffreestanding -fno-asynchronous-unwind-tables \ -- -fno-delete-null-pointer-checks \ -+ -fno-delete-null-pointer-checks -fno-strict-aliasing \ - -fexec-charset=IBM1047 -m64 -mpacked-stack \ - -mstack-size=8192 -mstack-guard=128 -msoft-float $(WARNFLAGS) - --- -2.7.4 - diff --git a/main/s390-tools/0002-musl-fixes.patch b/main/s390-tools/0002-musl-fixes.patch index 31271118d3..8c029b410a 100644 --- a/main/s390-tools/0002-musl-fixes.patch +++ b/main/s390-tools/0002-musl-fixes.patch @@ -37,8 +37,8 @@ index 0c1581a..8515fb6 100644 exit(-1); } -- vtocblk = (u_int64_t) vtoc_get_cyl_from_cchhb(&vlabel.vtoc) * -+ vtocblk = (uint64_t) vtoc_get_cyl_from_cchhb(&vlabel.vtoc) * +- vtocblk = (u_int64_t)vtoc_get_cyl_from_cchhb(&vlabel.vtoc) * ++ vtocblk = (uint64_t)vtoc_get_cyl_from_cchhb(&vlabel.vtoc) * info->geo.heads * info->geo.sectors + vtoc_get_head_from_cchhb(&vlabel.vtoc) * info->geo.sectors + vlabel.vtoc.b; @@ -76,10 +76,10 @@ index cc72e0a..8e34a10 100644 unsigned long long begin; unsigned long long size; diff --git a/fdasd/fdasd.c b/fdasd/fdasd.c -index ccc7046..fb28b1e 100644 +index 7c1a1a7..0898fb9 100644 --- a/fdasd/fdasd.c +++ b/fdasd/fdasd.c -@@ -61,9 +61,9 @@ setpos (fdasd_anchor_t *anc, int dsn, int pos) +@@ -211,9 +211,9 @@ static void setpos(fdasd_anchor_t *anc, int dsn, int pos) anc->partno[dsn] = pos; } @@ -91,64 +91,61 @@ index ccc7046..fb28b1e 100644 /* large volume */ if (anc->f4->DS4DEVCT.DS4DSCYL == LV_COMPAT_CYL && -@@ -72,7 +72,7 @@ static u_int32_t get_usable_cylinders(fdasd_anchor_t *anc) +@@ -221,7 +221,7 @@ static u_int32_t get_usable_cylinders(fdasd_anchor_t *anc) + return anc->f4->DS4DCYL; /* normal volume */ if (anc->f4->DS4DEVCT.DS4DEVFG & ALTERNATE_CYLINDERS_USED) - cyl = anc->f4->DS4DEVCT.DS4DSCYL - -- (u_int16_t) anc->f4->DS4DEVAC; -+ (uint16_t) anc->f4->DS4DEVAC; +- cyl = anc->f4->DS4DEVCT.DS4DSCYL - (u_int16_t)anc->f4->DS4DEVAC; ++ cyl = anc->f4->DS4DEVCT.DS4DSCYL - (uint16_t)anc->f4->DS4DEVAC; else cyl = anc->f4->DS4DEVCT.DS4DSCYL; - return cyl; -@@ -81,7 +81,7 @@ static u_int32_t get_usable_cylinders(fdasd_anchor_t *anc) + +@@ -230,7 +230,7 @@ static u_int32_t get_usable_cylinders(fdasd_anchor_t *anc) + static void get_addr_of_highest_f1_f8_label(fdasd_anchor_t *anc, cchhb_t *addr) { - - u_int8_t record; + uint8_t record; - /* We have to count the follwing labels: + /* We have to count the following labels: * one format 4 * one format 5 -@@ -2446,12 +2446,12 @@ fdasd_get_partition_data (fdasd_anchor_t *anc, extent_t *part_extent, - partition_info_t *part_info) - { +@@ -2468,9 +2468,9 @@ static int fdasd_get_partition_data(fdasd_anchor_t *anc, extent_t *part_extent, unsigned long start, stop, limit; -- u_int32_t cc, cyl; -- u_int16_t hh, head; -+ uint32_t cc, cyl; -+ uint16_t hh, head; - cchh_t llimit,ulimit; partition_info_t *part_tmp; - char mesg[48]; + cchh_t llimit, ulimit; +- u_int16_t hh, head; +- u_int32_t cc, cyl; - u_int8_t b1, b2; ++ uint16_t hh, head; ++ uint32_t cc, cyl; + uint8_t b1, b2; + char mesg[48]; start = FIRST_USABLE_TRK; - -@@ -2764,8 +2764,8 @@ fdasd_auto_partition(fdasd_anchor_t *anc) - cchh_t llimit,ulimit; - cchhb_t hf1; - extent_t ext; -- u_int32_t cyl; +@@ -2775,8 +2775,8 @@ static void fdasd_auto_partition(fdasd_anchor_t *anc) + { + partition_info_t *part_info = anc->first; + cchh_t llimit, ulimit; - u_int16_t head; -+ uint32_t cyl; +- u_int32_t cyl; + uint16_t head; ++ uint32_t cyl; + extent_t ext; + cchhb_t hf1; - if (!anc->silent) - printf("auto-creating one partition for the whole disk...\n"); diff --git a/fdasd/fdasd.h b/fdasd/fdasd.h index f22444e..39ea480 100644 --- a/fdasd/fdasd.h +++ b/fdasd/fdasd.h -@@ -188,7 +188,7 @@ struct fdasd_options options = { +@@ -67,7 +67,7 @@ static struct fdasd_options options = { }; typedef struct partition_info { -- u_int8_t used; -+ uint8_t used; - unsigned long start_trk; - unsigned long end_trk; - unsigned long len_trk; +- u_int8_t used; ++ uint8_t used; + unsigned long start_trk; + unsigned long end_trk; + unsigned long len_trk; @@ -223,7 +223,7 @@ typedef struct fdasd_anchor { int option_reuse; int option_recreate; @@ -548,40 +545,6 @@ index ea5b1c2..592200c 100644 #endif /* VTOC_H */ -diff --git a/libutil/util_opt.c b/libutil/util_opt.c -index a1a5cda..39540b6 100644 ---- a/libutil/util_opt.c -+++ b/libutil/util_opt.c -@@ -6,7 +6,6 @@ - * Copyright IBM Corp. 2016 - */ - --#include <argz.h> - #include <libgen.h> - #include <stdio.h> - #include <stdlib.h> -diff --git a/libvmdump/vm_dump.cpp b/libvmdump/vm_dump.cpp -index 53923ce..f2e460c 100644 ---- a/libvmdump/vm_dump.cpp -+++ b/libvmdump/vm_dump.cpp -@@ -14,7 +14,7 @@ - - Dump::DumpType VMDump::getDumpType(const char* inputFileName) - { -- char fmbk_id[8] = {0xc8, 0xc3, 0xd7, 0xc4, 0xc6, 0xd4, 0xc2, 0xd2}; -+ unsigned char fmbk_id[8] = {0xc8, 0xc3, 0xd7, 0xc4, 0xc6, 0xd4, 0xc2, 0xd2}; - struct _fir_basic fir; - struct _fmbk fmbk; - struct _adsr adsr; -@@ -84,7 +84,7 @@ Dump::DumpType VMDump::getDumpType(const char* inputFileName) - - VMDump::VMDump(const char *fileName) : Dump(fileName, "rb") - { -- char fmbk_id[8] = {0xc8, 0xc3, 0xd7, 0xc4, 0xc6, 0xd4, 0xc2, 0xd2}; -+ unsigned char fmbk_id[8] = {0xc8, 0xc3, 0xd7, 0xc4, 0xc6, 0xd4, 0xc2, 0xd2}; - - ebcdicAsciiConv = iconv_open("ISO-8859-1", "EBCDIC-US"); - diff --git a/libvtoc/vtoc.c b/libvtoc/vtoc.c index 048587b..9763f2e 100644 --- a/libvtoc/vtoc.c diff --git a/main/s390-tools/0003-major-minor.patch b/main/s390-tools/0003-major-minor.patch deleted file mode 100644 index f46f97377a..0000000000 --- a/main/s390-tools/0003-major-minor.patch +++ /dev/null @@ -1,24 +0,0 @@ -diff --git a/fdasd/fdasd.c b/fdasd/fdasd.c -index fb28b1e..218dca3 100644 ---- a/fdasd/fdasd.c -+++ b/fdasd/fdasd.c -@@ -9,6 +9,7 @@ - - #include <getopt.h> - #include <stdio.h> -+#include <sys/sysmacros.h> - - #include "lib/dasd_sys.h" - #include "lib/util_opt.h" -diff --git a/tape390/tape390_common.c b/tape390/tape390_common.c -index 90954c0..ffe72bf 100644 ---- a/tape390/tape390_common.c -+++ b/tape390/tape390_common.c -@@ -13,6 +13,7 @@ - #include <stdlib.h> - #include <string.h> - #include <sys/stat.h> -+#include <sys/sysmacros.h> - - #include "tape390_common.h" - diff --git a/main/s390-tools/0009-link-libexecinfo.patch b/main/s390-tools/0009-link-libexecinfo.patch index 9902e8db7f..be78bc1382 100644 --- a/main/s390-tools/0009-link-libexecinfo.patch +++ b/main/s390-tools/0009-link-libexecinfo.patch @@ -1,13 +1,12 @@ diff --git a/common.mak b/common.mak -index 175ec37..6d45e56 100644 +index 9c349e5..0a5fd69 100644 --- a/common.mak +++ b/common.mak -@@ -224,7 +224,7 @@ endif - $(CXX) $(ALL_CPPFLAGS) $(ALL_CXXFLAGS) -c $< -o $@ +@@ -228,6 +228,7 @@ else + NO_PIE_LINKFLAGS := + NO_PIE_LDFLAGS := + endif ++LDLIBS += $(LIBEXECINFO_LIBS) - %: %.o -- $(LINK) $(ALL_LDFLAGS) $^ $(LOADLIBES) $(LDLIBS) -o $@ -+ $(LINK) $(ALL_LDFLAGS) $^ $(LOADLIBES) $(LDLIBS) $(LIBEXECINFO_LIBS) -o $@ - - %.a: - $(AR) rcs $@ $^ + # Overwrite implicite makefile rules for having nice compile output + %.o: %.c diff --git a/main/s390-tools/0100-zipl-no-pie.patch b/main/s390-tools/0100-zipl-no-pie.patch deleted file mode 100644 index 50e983e0a8..0000000000 --- a/main/s390-tools/0100-zipl-no-pie.patch +++ /dev/null @@ -1,54 +0,0 @@ -diff --git a/zipl/boot/Makefile b/zipl/boot/Makefile -index 6474aad..83771f1 100644 ---- a/zipl/boot/Makefile -+++ b/zipl/boot/Makefile -@@ -1,7 +1,7 @@ - # Common definitions - include ../../common.mak - --CFLAGS_BOOT = -Os -g -I../include -D__ASSEMBLY__ \ -+CFLAGS_BOOT = -fno-pie -Os -g -I../include -D__ASSEMBLY__ \ - -DS390_TOOLS_RELEASE=$(S390_TOOLS_RELEASE) \ - -fno-builtin -ffreestanding -fno-asynchronous-unwind-tables \ - -fno-delete-null-pointer-checks -fno-strict-aliasing \ -@@ -54,11 +54,11 @@ stage3.exec: head.o stage3.o kdump3.o libc.o sclp.o sclp_stage3.o \ - }' \ - ); \ - case $$STAGE in \ -- 0) SFLAGS="-nostdlib -Wl,-Ttext,0";; \ -- 1) SFLAGS="-nostdlib -Wl,-Ttext,0x18";; \ -- 1b) SFLAGS="-nostdlib -Wl,-Ttext,0xE000";; \ -- 2) SFLAGS="-nostdlib -Wl,-T,stage2.lds";; \ -- 3) SFLAGS="-nostdlib -Wl,-T,stage3.lds";; \ -+ 0) SFLAGS="-no-pie -nostdlib -Wl,-Ttext,0";; \ -+ 1) SFLAGS="-no-pie -nostdlib -Wl,-Ttext,0x18";; \ -+ 1b) SFLAGS="-no-pie -nostdlib -Wl,-Ttext,0xE000";; \ -+ 2) SFLAGS="-no-pie -nostdlib -Wl,-T,stage2.lds";; \ -+ 3) SFLAGS="-no-pie -nostdlib -Wl,-T,stage3.lds";; \ - esac; \ - $(LINK) $$SFLAGS -m64 $^ -o $@ - -@@ -77,7 +77,7 @@ stage3.exec: head.o stage3.o kdump3.o libc.o sclp.o sclp_stage3.o \ - $< $@ - - data.o: $(FILES) -- $(LD) -r -b binary -o data.o $(FILES) -+ $(LD) -no-pie -r -b binary -o data.o $(FILES) - - data.h: data.o - rm -f data.h -diff --git a/zipl/src/Makefile b/zipl/src/Makefile -index 0ea0077..c526a46 100644 ---- a/zipl/src/Makefile -+++ b/zipl/src/Makefile -@@ -7,8 +7,8 @@ ALL_CPPFLAGS += -I../include -I../boot -I../../include \ - -DZFCPDUMP_FS_RD=$(ZFCPDUMP_FS_RD) \ - -DZFCPDUMP_PART_IMAGE=$(ZFCPDUMP_PART_IMAGE) \ - -DZFCPDUMP_PART_RD=$(ZFCPDUMP_PART_RD) \ -- -D_FILE_OFFSET_BITS=64 --ALL_LDFLAGS += -Wl,-z,noexecstack -+ -D_FILE_OFFSET_BITS=64 -fno-pie -+ALL_LDFLAGS += -Wl,-z,noexecstack -no-pie - - libs = $(rootdir)/libutil/libutil.a \ - $(rootdir)/libu2s/libu2s.a diff --git a/main/s390-tools/0101-zipl-dont-optimize-size.patch b/main/s390-tools/0101-zipl-dont-optimize-size.patch index 889dbf4750..6ef8d93e7c 100644 --- a/main/s390-tools/0101-zipl-dont-optimize-size.patch +++ b/main/s390-tools/0101-zipl-dont-optimize-size.patch @@ -1,26 +1,27 @@ diff --git a/zipl/boot/Makefile b/zipl/boot/Makefile -index 83771f1..f221dbf 100644 +index 52b3a23..9dfb146 100644 --- a/zipl/boot/Makefile +++ b/zipl/boot/Makefile -@@ -1,6 +1,8 @@ +@@ -1,6 +1,9 @@ # Common definitions include ../../common.mak +ALL_CPPFLAGS := $(filter-out -Os,$(ALL_CPPFLAGS)) +ALL_CFLAGS := $(filter-out -Os,$(ALL_CFLAGS)) - CFLAGS_BOOT = -fno-pie -Os -g -I../include -D__ASSEMBLY__ \ ++ + CFLAGS_BOOT = $(NO_PIE_CFLAGS) -Os -g -I../include -D__ASSEMBLY__ \ -DS390_TOOLS_RELEASE=$(S390_TOOLS_RELEASE) \ -fno-builtin -ffreestanding -fno-asynchronous-unwind-tables \ diff --git a/zipl/src/Makefile b/zipl/src/Makefile -index c526a46..24ec04f 100644 +index 1f39d06..f6bcb97 100644 --- a/zipl/src/Makefile +++ b/zipl/src/Makefile -@@ -8,6 +8,8 @@ ALL_CPPFLAGS += -I../include -I../boot -I../../include \ - -DZFCPDUMP_PART_IMAGE=$(ZFCPDUMP_PART_IMAGE) \ - -DZFCPDUMP_PART_RD=$(ZFCPDUMP_PART_RD) \ - -D_FILE_OFFSET_BITS=64 -fno-pie +@@ -5,6 +5,8 @@ ALL_CPPFLAGS += -I../include -I../boot \ + -DZFCPDUMP_IMAGE="STRINGIFY($(ZFCPDUMP_DIR)/$(ZFCPDUMP_IMAGE))" \ + -DZFCPDUMP_INITRD="STRINGIFY($(ZFCPDUMP_DIR)/$(ZFCPDUMP_INITRD))" \ + -D_FILE_OFFSET_BITS=64 $(NO_PIE_CFLAGS) +ALL_CPPFLAGS := $(filter-out -Os,$(ALL_CPPFLAGS)) +ALL_CFLAGS := $(filter-out -Os,$(ALL_CFLAGS)) - ALL_LDFLAGS += -Wl,-z,noexecstack -no-pie + ALL_LDFLAGS += -Wl,-z,noexecstack $(NO_PIE_LDFLAGS) - libs = $(rootdir)/libutil/libutil.a \ + libs = $(rootdir)/libu2s/libu2s.a \ diff --git a/main/s390-tools/0300-disable-program-using-gnu-ext.patch b/main/s390-tools/0300-disable-program-using-gnu-ext.patch index fcb92a088a..7688130757 100644 --- a/main/s390-tools/0300-disable-program-using-gnu-ext.patch +++ b/main/s390-tools/0300-disable-program-using-gnu-ext.patch @@ -1,4 +1,3 @@ -zconf/zcrypt : argz functions cpuplugd : feenableexcept function diff --git a/Makefile b/Makefile @@ -6,38 +5,11 @@ index a760c0f..7fe2694 100644 --- a/Makefile +++ b/Makefile @@ -6,7 +6,7 @@ include common.mak - LIB_DIRS = libvtoc libu2s libutil libzds libdasd libvmdump + LIB_DIRS = libvtoc libu2s libutil libzds libdasd libvmdump libccw libvmcp TOOL_DIRS = zipl zdump fdasd dasdfmt dasdview tunedasd \ tape390 osasnmpd qetharp ip_watcher qethconf scripts zconf \ - vmconvert vmcp man mon_tools dasdinfo vmur cpuplugd ipl_tools \ + vmconvert vmcp man mon_tools dasdinfo vmur ipl_tools \ ziomon iucvterm hyptop cmsfs-fuse qethqoat zfcpdump zdsfs cpumf \ - systemd hmcdrvfs cpacfstats zdev dump2tar + systemd hmcdrvfs cpacfstats zdev dump2tar zkey netboot etc zpcictl SUB_DIRS = $(LIB_DIRS) $(TOOL_DIRS) -diff --git a/scripts/Makefile b/scripts/Makefile -index 94cd6e0..e2c8091 100644 ---- a/scripts/Makefile -+++ b/scripts/Makefile -@@ -1,7 +1,7 @@ - include ../common.mak - --SCRIPTS = dbginfo.sh zfcpdbf scsi_logging_level --MAN_PAGES = dbginfo.sh.1 zfcpdbf.1 -+SCRIPTS = zfcpdbf scsi_logging_level -+MAN_PAGES = zfcpdbf.1 - - all: - -diff --git a/zconf/Makefile b/zconf/Makefile -index 0877c8c..e376104 100644 ---- a/zconf/Makefile -+++ b/zconf/Makefile -@@ -9,7 +9,7 @@ USRSBIN_SCRIPTS = lsmem chmem lsluns - MANPAGES= lsdasd.8 lstape.8 lscss.8 chccwdev.8 lsqeth.8 lszfcp.8 lsluns.8 \ - cio_ignore.8 znetconf.8 chmem.8 lsmem.8 dasdstat.8 - --SUB_DIRS = zcrypt scm chp -+SUB_DIRS = - - all: $(SUB_DIRS) - diff --git a/main/s390-tools/APKBUILD b/main/s390-tools/APKBUILD index c8a890da4e..c90552f66e 100644 --- a/main/s390-tools/APKBUILD +++ b/main/s390-tools/APKBUILD @@ -1,21 +1,19 @@ # Contributor: Natanael Copa <ncopa@alpinelinux.org> -# Maintainer: Tuan M. Hoang <tmhoang@flatglobe.org> +# Maintainer: Tuan Hoang <tmhoang@linux.ibm.com> pkgname=s390-tools -pkgver=1.37.1 +pkgver=2.8.0 pkgrel=0 -pkgdesc="Utilities for Linux on IBM z Systems" -url="http://www.ibm.com/developerworks/linux/linux390/s390-tools.html" +pkgdesc="Tools for use with the s390 Linux kernel and device drivers" +url="https://github.com/ibm-s390-tools/s390-tools" arch="s390x" -license="GPL-2.0-or-later" +license="MIT" depends_dev="" -makedepends="$depends_dev linux-headers libexecinfo-dev zlib-dev fuse-dev ncurses-dev" +makedepends="$depends_dev linux-headers libexecinfo-dev zlib-dev fuse-dev ncurses-dev openssl-dev cryptsetup-dev json-c-dev" triggers="$pkgname.trigger=/boot" install="$pkgname.post-install $pkgname.post-upgrade" subpackages="$pkgname-doc" -source="http://download.boulder.ibm.com/ibmdl/pub/software/dw/linux390/ht_src/$pkgname-$pkgver.tar.bz2 - 0001-zipl-flags.patch +source="$pkgname-$pkgver.tar.gz::https://github.com/ibm-s390-tools/$pkgname/archive/v$pkgver.tar.gz 0002-musl-fixes.patch - 0003-major-minor.patch 0004-missing-time-header.patch 0006-define-path-mounted.patch 0007-tunedasd-no-need-error-h.patch @@ -23,45 +21,54 @@ source="http://download.boulder.ibm.com/ibmdl/pub/software/dw/linux390/ht_src/$p 0009-link-libexecinfo.patch 0010-musl-s390x-signal-def.patch - 0100-zipl-no-pie.patch 0101-zipl-dont-optimize-size.patch 0200-dasdinfo-gnu-ext-hack.patch 0300-disable-program-using-gnu-ext.patch zconf-shell.patch + argz.patch + argz.c + argz.h + Makefile.argz mk-s390-cdboot.c " builddir="$srcdir/$pkgname-$pkgver" build() { cd "$builddir" + mkdir -p "$builddir"/libargz + cp "$srcdir"/argz.h "$builddir"/include/argz.h + cp "$srcdir"/argz.c "$builddir"/libargz/argz.c + cp "$srcdir"/Makefile.argz "$builddir"/libargz/Makefile make -j1 V=1 CFLAGS="$CFLAGS -D_GNU_SOURCE" \ HAVE_SNMP=0 \ HAVE_PFM=0 \ + DISTRELEASE="Alpine" \ LIBEXECINFO_LIBS="-lexecinfo" gcc -Wall -o mk-s390-cdboot "$srcdir"/mk-s390-cdboot.c } package() { cd "$builddir" - make HAVE_SNMP=0 HAVE_PFM=0 DESTDIR="$pkgdir" install + make HAVE_SNMP=0 HAVE_PFM=0 DESTDIR="$pkgdir" DISTRELEASE="Alpine" install install -Dm755 mk-s390-cdboot "$pkgdir"/sbin/mk-s390-cdboot } -sha512sums="43a255171956aad3d04e666a2ab949f392bb8d8faca0a8f8a4714f9eabbc93e625ed0ec0cae69f05ef6a3ab86982de2a757184b771b60e927d86c931fb5cdf89 s390-tools-1.37.1.tar.bz2 -3e1d0829e13bea69f48c556c2454b2927ffc59a7f4a04f7ebce41b9b5ed95ce963922fec9981e7ae62be801abbdc2cd27498399d0c4b8f9d10fae82dc3a9df85 0001-zipl-flags.patch -658b804edfef85e63c5df7a23dccff5a53c3ab5b310b81b1e584c672070d7cec64ac78624de282e535227517e405ff33003a2ddc5f1f4ec7d4edf6e125305638 0002-musl-fixes.patch -d8936addbf7713d14a44f9137c19769eb66f9c1d8ddc7dc58a7abbe4791045ed3c6eca88e2bbf8a6d3b18d8e437481df95d1827722bb1f7e093aa86753be85d1 0003-major-minor.patch +sha512sums="c13a58924b069a832a8c73e450dd6c9c3942787c1fa345450b1537af17ca23eda99025ee78edbe6c7192d82840596f9e07e25a10fccfba69f8a82b29980d82d1 s390-tools-2.8.0.tar.gz +f30729f9eb956dedc2a47888b9ea3da6a0e28aab23833fe6493932838371d6b0aa5eef686d7f36294a5ea1cd82d8b28bb5718f484cc7ecd8ae67dc827480447f 0002-musl-fixes.patch 5cadad403b0bce9c92e326612b2fa6d32b15b550ef9241fd77cc3b86e6e443087c29c539727a9584896624317cde9276543aeed4fa62ff1db233f8cfd8872d03 0004-missing-time-header.patch 984fd24ff1bf2d77f6aca77e4a75334ad21a9e36ce27fabb848d82a8e68446e2effeb16a725d5b93ae178ac11379f83a003c8c0d9e408cf96419873741517c3e 0006-define-path-mounted.patch a0ca14c6de2415a725c44e067157c2b5a8db582f4eadbd355fadab5e050870073cf5f5e11212fd046bf24841ed60b84e1475fed115d1e307b8fc1f2da69e5fbd 0007-tunedasd-no-need-error-h.patch bdbeb6f3873ede82487c7e4fcac84aa2bf8a922991ec32d029a64cd7142625f5a99920db0f1b6935805d7371ae5a7640c5ea577969937dd96c4f4f996b909ac3 0008-iucvterm-no-nls.patch -754ae56dc45326eccd9b5e7be5c1faffeeee7d8ff84ed3275269e28324b65c0437ebf6cff55dea2188a06f09a798a00c9792ccc41a805e1d24824a4d7334bec0 0009-link-libexecinfo.patch +798ae2128a2e419a2e76f3198ac7563e84470069571beffd673b9cfc1755f432afaa32d730fd1c43db890009f37bc11a7a00af6e7e6b41ea7ffd789469eaef25 0009-link-libexecinfo.patch 43edeb7f3ab3f5bbc6cd43e6d04deafcfa18211886f3801a226d46679cd70fc709732d5f41d8cc421f9fb0b441a395ebd2a57512f97662531a3050819c97ba1e 0010-musl-s390x-signal-def.patch -d879173250fc0cabef198785923248e6832158e38d6ea9ef615f14e2d6698810b54c38c8327f20b2c43d8d509a274b27a7c0ad999a0c0bed2743715f21ab859a 0100-zipl-no-pie.patch -1cbbe3fe265c7d4164143d24c532c18b354be4bc295ad24064d379660e43a475b7d678b458cdf74ffdb44d6cd38a497dbe00758d688c547c6ece63b6dee091b7 0101-zipl-dont-optimize-size.patch +97f5e0482f69b64c0f71df1bc39c10126d857b9fa38775f6d4b8dabe1267a0ff5fe231c937b82da76445118eb7c37625fc30190924c479dfacc7c1b8b0a7e487 0101-zipl-dont-optimize-size.patch 98f5a150e30752d2bec6447d8f24b89a3afda43c31ebe3e6ce940ac398ae9ebfab2c516e05686e7969461c7cf7e467e1221981a5499a9bb8a5aef2f265ec8b45 0200-dasdinfo-gnu-ext-hack.patch -6736ca9deb25838511e715e96d1f5bfc283460689e767181463d1827c80be200b1375708ff48772599083b14f74594f7053cf30fcc6c93ba7fa5dfae832434de 0300-disable-program-using-gnu-ext.patch +9e7550f9e19ee287b514893206edf70f4b4e45988a2e5d590f6b6902108a4581bda5c6904e4b10b08897771d6af7beb8632f21601ccad42cc385045823be159e 0300-disable-program-using-gnu-ext.patch 4fd96891cc2dc868793003a50eae3258a82db1c840b6d2a63107586e96f6c68686e54b625f5395190af606d996c812582938e9148ce51bdb08075f4fdbe96973 zconf-shell.patch +95a70259166fb90b645604501bfa9ab9473f8de102bdf75baa1ba43749efab6488d419ceb6c32058bcb21a3cbdcbacc2638201f74c17a2ed891b0c287d6e7348 argz.patch +2e573314d4c4ed90b61da28de22ae8e2f68ced5489f7e5e0b30f51b776efaf40c1f781d3b485418572d8f33a169fa6946b7358cbd4a7de5a3724b20ed622262b argz.c +50bd5c0f555963dadbfaa72df5bf0801a48743d6d0feddb6ebfa4ffa410196216c1860d3a577361e035169fea4217aef3f04d69394c59db65b60c5ea29eba8cb argz.h +5e19ccfce59a2a79863db676b0ea4280cb9016cda1a30dc233526f52425c305410dd148453b75c2613acac37e364305ee25f8e545d57c5059cca19a13bac2a5e Makefile.argz 349eb06895016d16194819c4a04f604720f1373ea61a9bc4c58467281c9a2ed3539bd4e8b6984f4e5177630dbe8b928aa95912c9a3e3b0e1fe275d59f9fe573d mk-s390-cdboot.c" diff --git a/main/s390-tools/Makefile.argz b/main/s390-tools/Makefile.argz new file mode 100644 index 0000000000..a3061dd5af --- /dev/null +++ b/main/s390-tools/Makefile.argz @@ -0,0 +1,14 @@ +include ../common.mak + +lib = libargz.a + +all: $(lib) + +objects = argz.o + +$(lib): $(objects) + +install: all + +clean: + rm -f *.o $(lib) diff --git a/main/s390-tools/argz.c b/main/s390-tools/argz.c new file mode 100644 index 0000000000..09ede86bae --- /dev/null +++ b/main/s390-tools/argz.c @@ -0,0 +1,389 @@ +/* Copyright (C) 1996-2019 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1996. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ + +#include <argz.h> +#include <stdlib.h> + + +/* Add BUF, of length BUF_LEN to the argz vector in ARGZ & ARGZ_LEN. */ +error_t +argz_append (char **argz, size_t *argz_len, const char *buf, size_t buf_len) +{ + size_t new_argz_len = *argz_len + buf_len; + char *new_argz = realloc (*argz, new_argz_len); + if (new_argz) + { + memcpy (new_argz + *argz_len, buf, buf_len); + *argz = new_argz; + *argz_len = new_argz_len; + return 0; + } + else + return ENOMEM; +} + +/* Add STR to the argz vector in ARGZ & ARGZ_LEN. This should be moved into + argz.c in libshouldbelibc. */ +error_t +argz_add (char **argz, size_t *argz_len, const char *str) +{ + return argz_append (argz, argz_len, str, strlen (str) + 1); +} + +/* Returns the number of strings in ARGZ. */ +size_t +argz_count (const char *argz, size_t len) +{ + size_t count = 0; + while (len > 0) + { + size_t part_len = strlen(argz); + argz += part_len + 1; + len -= part_len + 1; + count++; + } + return count; +} + +/* Make a '\0' separated arg vector from a unix argv vector, returning it in + ARGZ, and the total length in LEN. If a memory allocation error occurs, + ENOMEM is returned, otherwise 0. */ +error_t +argz_create (char *const argv[], char **argz, size_t *len) +{ + int argc; + size_t tlen = 0; + char *const *ap; + char *p; + + for (argc = 0; argv[argc] != NULL; ++argc) + tlen += strlen (argv[argc]) + 1; + + if (tlen == 0) + *argz = NULL; + else + { + *argz = malloc (tlen); + if (*argz == NULL) + return ENOMEM; + + for (p = *argz, ap = argv; *ap; ++ap, ++p) + p = stpcpy (p, *ap); + } + *len = tlen; + + return 0; +} + +error_t +argz_create_sep (const char *string, int delim, char **argz, size_t *len) +{ + size_t nlen = strlen (string) + 1; + + if (nlen > 1) + { + const char *rp; + char *wp; + + *argz = (char *) malloc (nlen); + if (*argz == NULL) + return ENOMEM; + + rp = string; + wp = *argz; + do + if (*rp == delim) + { + if (wp > *argz && wp[-1] != '\0') + *wp++ = '\0'; + else + --nlen; + } + else + *wp++ = *rp; + while (*rp++ != '\0'); + + if (nlen == 0) + { + free (*argz); + *argz = NULL; + *len = 0; + } + + *len = nlen; + } + else + { + *argz = NULL; + *len = 0; + } + + return 0; +} + +char * +argz_next (const char *argz, size_t argz_len, const char *entry) +{ + if (entry) + { + if (entry < argz + argz_len) + entry = strchr (entry, '\0') + 1; + + return entry >= argz + argz_len ? NULL : (char *) entry; + } + else + if (argz_len > 0) + return (char *) argz; + else + return NULL; +} + +/* Delete ENTRY from ARGZ & ARGZ_LEN, if any. */ +void +argz_delete (char **argz, size_t *argz_len, char *entry) +{ + if (entry) + /* Get rid of the old value for NAME. */ + { + size_t entry_len = strlen (entry) + 1; + *argz_len -= entry_len; + memmove (entry, entry + entry_len, *argz_len - (entry - *argz)); + if (*argz_len == 0) + { + free (*argz); + *argz = 0; + } + } +} + +/* Puts pointers to each string in ARGZ, plus a terminating 0 element, into + ARGV, which must be large enough to hold them all. */ +void +argz_extract (const char *argz, size_t len, char **argv) +{ + while (len > 0) + { + size_t part_len = strlen (argz); + *argv++ = (char *) argz; + argz += part_len + 1; + len -= part_len + 1; + } + *argv = 0; +} + +/* Insert ENTRY into ARGZ & ARGZ_LEN before BEFORE, which should be an + existing entry in ARGZ; if BEFORE is NULL, ENTRY is appended to the end. + Since ARGZ's first entry is the same as ARGZ, argz_insert (ARGZ, ARGZ_LEN, + ARGZ, ENTRY) will insert ENTRY at the beginning of ARGZ. If BEFORE is not + in ARGZ, EINVAL is returned, else if memory can't be allocated for the new + ARGZ, ENOMEM is returned, else 0. */ +error_t +argz_insert (char **argz, size_t *argz_len, char *before, const char *entry) +{ + if (! before) + return argz_add (argz, argz_len, entry); + + if (before < *argz || before >= *argz + *argz_len) + return EINVAL; + + if (before > *argz) + /* Make sure before is actually the beginning of an entry. */ + while (before[-1]) + before--; + + { + size_t after_before = *argz_len - (before - *argz); + size_t entry_len = strlen (entry) + 1; + size_t new_argz_len = *argz_len + entry_len; + char *new_argz = realloc (*argz, new_argz_len); + + if (new_argz) + { + before = new_argz + (before - *argz); + memmove (before + entry_len, before, after_before); + memmove (before, entry, entry_len); + *argz = new_argz; + *argz_len = new_argz_len; + return 0; + } + else + return ENOMEM; + } +} + +/* Make '\0' separated arg vector ARGZ printable by converting all the '\0's + except the last into the character SEP. */ +void +argz_stringify (char *argz, size_t len, int sep) +{ + if (len > 0) + while (1) + { + size_t part_len = strnlen (argz, len); + argz += part_len; + len -= part_len; + if (len-- <= 1) /* includes final '\0' we want to stop at */ + break; + *argz++ = sep; + } +} + +error_t +argz_add_sep (char **argz, size_t *argz_len, const char *string, int delim) +{ + size_t nlen = strlen (string) + 1; + + if (nlen > 1) + { + const char *rp; + char *wp; + + *argz = (char *) realloc (*argz, *argz_len + nlen); + if (*argz == NULL) + return ENOMEM; + + wp = *argz + *argz_len; + rp = string; + do + if (*rp == delim) + { + if (wp > *argz && wp[-1] != '\0') + *wp++ = '\0'; + else + --nlen; + } + else + *wp++ = *rp; + while (*rp++ != '\0'); + + *argz_len += nlen; + } + + return 0; +} + +/* Append BUF, of length BUF_LEN to *TO, of length *TO_LEN, reallocating and + updating *TO & *TO_LEN appropriately. If an allocation error occurs, + *TO's old value is freed, and *TO is set to 0. */ +static void +str_append (char **to, size_t *to_len, const char *buf, const size_t buf_len) +{ + size_t new_len = *to_len + buf_len; + char *new_to = realloc (*to, new_len + 1); + + if (new_to) + { + *((char *) mempcpy (new_to + *to_len, buf, buf_len)) = '\0'; + *to = new_to; + *to_len = new_len; + } + else + { + free (*to); + *to = 0; + } +} + +/* Replace any occurrences of the string STR in ARGZ with WITH, reallocating + ARGZ as necessary. If REPLACE_COUNT is non-zero, *REPLACE_COUNT will be + incremented by number of replacements performed. */ +error_t +argz_replace (char **argz, size_t *argz_len, const char *str, const char *with, + unsigned *replace_count) +{ + error_t err = 0; + + if (str && *str) + { + char *arg = 0; + char *src = *argz; + size_t src_len = *argz_len; + char *dst = 0; + size_t dst_len = 0; + int delayed_copy = 1; /* True while we've avoided copying anything. */ + size_t str_len = strlen (str), with_len = strlen (with); + + while (!err && (arg = argz_next (src, src_len, arg))) + { + char *match = strstr (arg, str); + if (match) + { + char *from = match + str_len; + size_t to_len = match - arg; + char *to = strndup (arg, to_len); + + while (to && from) + { + str_append (&to, &to_len, with, with_len); + if (to) + { + match = strstr (from, str); + if (match) + { + str_append (&to, &to_len, from, match - from); + from = match + str_len; + } + else + { + str_append (&to, &to_len, from, strlen (from)); + from = 0; + } + } + } + + if (to) + { + if (delayed_copy) + /* We avoided copying SRC to DST until we found a match; + now that we've done so, copy everything from the start + of SRC. */ + { + if (arg > src) + err = argz_append (&dst, &dst_len, src, (arg - src)); + delayed_copy = 0; + } + if (! err) + err = argz_add (&dst, &dst_len, to); + free (to); + } + else + err = ENOMEM; + + if (replace_count) + (*replace_count)++; + } + else if (! delayed_copy) + err = argz_add (&dst, &dst_len, arg); + } + + if (! err) + { + if (! delayed_copy) + /* We never found any instances of str. */ + { + free (src); + *argz = dst; + *argz_len = dst_len; + } + } + else if (dst_len > 0) + free (dst); + } + + return err; +} diff --git a/main/s390-tools/argz.h b/main/s390-tools/argz.h new file mode 100644 index 0000000000..80b4cf1cee --- /dev/null +++ b/main/s390-tools/argz.h @@ -0,0 +1,117 @@ +/* Routines for dealing with '\0' separated arg vectors. + Copyright (C) 1995-2019 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ + +#ifndef _ARGZ_H +#define _ARGZ_H 1 + +#include <features.h> +#include <errno.h> +#include <string.h> /* Need size_t, and strchr is called below. */ + +/* error_t may or may not be available from errno.h, depending on the + operating system. */ +#ifndef __error_t_defined +# define __error_t_defined 1 +typedef int error_t; +#endif + +/* Make a '\0' separated arg vector from a unix argv vector, returning it in + ARGZ, and the total length in LEN. If a memory allocation error occurs, + ENOMEM is returned, otherwise 0. The result can be destroyed using free. */ +extern error_t argz_create (char *const __argv[], char **__restrict __argz, + size_t *__restrict __len); + +/* Make a '\0' separated arg vector from a SEP separated list in + STRING, returning it in ARGZ, and the total length in LEN. If a + memory allocation error occurs, ENOMEM is returned, otherwise 0. + The result can be destroyed using free. */ +extern error_t argz_create_sep (const char *__restrict __string, + int __sep, char **__restrict __argz, + size_t *__restrict __len); + +/* Returns the number of strings in ARGZ. */ +extern size_t argz_count (const char *__argz, size_t __len); + +/* Puts pointers to each string in ARGZ into ARGV, which must be large enough + to hold them all. */ +extern void argz_extract (const char *__restrict __argz, size_t __len, + char **__restrict __argv); + +/* Make '\0' separated arg vector ARGZ printable by converting all the '\0's + except the last into the character SEP. */ +extern void argz_stringify (char *__argz, size_t __len, int __sep); + +/* Append BUF, of length BUF_LEN to the argz vector in ARGZ & ARGZ_LEN. */ +extern error_t argz_append (char **__restrict __argz, + size_t *__restrict __argz_len, + const char *__restrict __buf, size_t __buf_len); + +/* Append STR to the argz vector in ARGZ & ARGZ_LEN. */ +extern error_t argz_add (char **__restrict __argz, + size_t *__restrict __argz_len, + const char *__restrict __str); + +/* Append SEP separated list in STRING to the argz vector in ARGZ & + ARGZ_LEN. */ +extern error_t argz_add_sep (char **__restrict __argz, + size_t *__restrict __argz_len, + const char *__restrict __string, int __delim); + +/* Delete ENTRY from ARGZ & ARGZ_LEN, if it appears there. */ +extern void argz_delete (char **__restrict __argz, + size_t *__restrict __argz_len, + char *__restrict __entry); + +/* Insert ENTRY into ARGZ & ARGZ_LEN before BEFORE, which should be an + existing entry in ARGZ; if BEFORE is NULL, ENTRY is appended to the end. + Since ARGZ's first entry is the same as ARGZ, argz_insert (ARGZ, ARGZ_LEN, + ARGZ, ENTRY) will insert ENTRY at the beginning of ARGZ. If BEFORE is not + in ARGZ, EINVAL is returned, else if memory can't be allocated for the new + ARGZ, ENOMEM is returned, else 0. */ +extern error_t argz_insert (char **__restrict __argz, + size_t *__restrict __argz_len, + char *__restrict __before, + const char *__restrict __entry); + +/* Replace any occurrences of the string STR in ARGZ with WITH, reallocating + ARGZ as necessary. If REPLACE_COUNT is non-zero, *REPLACE_COUNT will be + incremented by number of replacements performed. */ +extern error_t argz_replace (char **__restrict __argz, + size_t *__restrict __argz_len, + const char *__restrict __str, + const char *__restrict __with, + unsigned int *__restrict __replace_count); + +/* Returns the next entry in ARGZ & ARGZ_LEN after ENTRY, or NULL if there + are no more. If entry is NULL, then the first entry is returned. This + behavior allows two convenient iteration styles: + + char *entry = 0; + while ((entry = argz_next (argz, argz_len, entry))) + ...; + + or + + char *entry; + for (entry = argz; entry; entry = argz_next (argz, argz_len, entry)) + ...; +*/ +extern char *argz_next (const char *__restrict __argz, size_t __argz_len, + const char *__restrict __entry); + +#endif /* argz.h */ diff --git a/main/s390-tools/argz.patch b/main/s390-tools/argz.patch new file mode 100644 index 0000000000..3419f626c7 --- /dev/null +++ b/main/s390-tools/argz.patch @@ -0,0 +1,145 @@ +diff --git a/Makefile b/Makefile +index 6081acc..fe8dd2f 100644 +--- a/Makefile ++++ b/Makefile +@@ -3,7 +3,7 @@ ARCH := $(shell uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ -e s/arm.*/ar + # Include common definitions + include common.mak + +-LIB_DIRS = libvtoc libu2s libutil libzds libdasd libvmdump libccw libvmcp ++LIB_DIRS = libargz libvtoc libu2s libutil libzds libdasd libvmdump libccw libvmcp + TOOL_DIRS = zipl zdump fdasd dasdfmt dasdview tunedasd \ + tape390 osasnmpd qetharp ip_watcher qethconf scripts zconf \ + vmconvert vmcp man mon_tools dasdinfo vmur ipl_tools \ +diff --git a/common.mak b/common.mak +index 0a5fd69..c6f429c 100644 +--- a/common.mak ++++ b/common.mak +@@ -312,6 +312,10 @@ endif + # check the library directory via "make -C" when the tools Makefile is + # processed. + ++$(rootdir)/libargz/libargz.a: $(rootdir)/libargz ++ $(MAKE) -C $(rootdir)/libargz/ libargz.a ++.PHONY: $(rootdir)/libargz ++ + $(rootdir)/libutil/libutil.a: $(rootdir)/libutil + $(MAKE) -C $(rootdir)/libutil/ libutil.a + .PHONY: $(rootdir)/libutil +diff --git a/zconf/chp/Makefile b/zconf/chp/Makefile +index 2e3065f..486d469 100644 +--- a/zconf/chp/Makefile ++++ b/zconf/chp/Makefile +@@ -2,7 +2,7 @@ include ../../common.mak + + all: chchp lschp + +-libs = $(rootdir)/libutil/libutil.a ++libs = $(rootdir)/libutil/libutil.a $(rootdir)/libargz/libargz.a + + chchp: chchp.o $(libs) + lschp: lschp.o $(libs) +diff --git a/zconf/css/Makefile b/zconf/css/Makefile +index 2a36820..749cc6e 100644 +--- a/zconf/css/Makefile ++++ b/zconf/css/Makefile +@@ -2,7 +2,8 @@ + include ../../common.mak + + libs = $(rootdir)/libccw/libccw.a \ +- $(rootdir)/libutil/libutil.a ++ $(rootdir)/libutil/libutil.a \ ++ $(rootdir)/libargz/libargz.a + + objects = lscss.o misc.o + +diff --git a/zconf/qeth/Makefile b/zconf/qeth/Makefile +index 43716a3..f69d4f0 100644 +--- a/zconf/qeth/Makefile ++++ b/zconf/qeth/Makefile +@@ -2,7 +2,7 @@ include ../../common.mak + + all: lsqeth + +-libs = $(rootdir)/libvmcp/libvmcp.a $(rootdir)/libutil/libutil.a ++libs = $(rootdir)/libvmcp/libvmcp.a $(rootdir)/libutil/libutil.a $(rootdir)/libargz/libargz.a + + lsqeth: lsqeth.o misc.o $(libs) + +diff --git a/zconf/scm/Makefile b/zconf/scm/Makefile +index 12faf44..1d9ec36 100644 +--- a/zconf/scm/Makefile ++++ b/zconf/scm/Makefile +@@ -2,7 +2,7 @@ include ../../common.mak + + all: lsscm + +-libs = $(rootdir)/libutil/libutil.a ++libs = $(rootdir)/libutil/libutil.a $(rootdir)/libargz/libargz.a + + lsscm: lsscm.o $(libs) + +diff --git a/zconf/zcrypt/Makefile b/zconf/zcrypt/Makefile +index d075f34..a1744a4 100644 +--- a/zconf/zcrypt/Makefile ++++ b/zconf/zcrypt/Makefile +@@ -2,7 +2,7 @@ include ../../common.mak + + all: chzcrypt lszcrypt zcryptctl + +-libs = $(rootdir)/libutil/libutil.a ++libs = $(rootdir)/libutil/libutil.a $(rootdir)/libargz/libargz.a + + chzcrypt: chzcrypt.o misc.o $(libs) + lszcrypt: lszcrypt.o misc.o $(libs) +diff --git a/zkey/Makefile b/zkey/Makefile +index a44b14b..48c02fb 100644 +--- a/zkey/Makefile ++++ b/zkey/Makefile +@@ -22,7 +22,7 @@ else + INSTALL_TARGETS += zkey-cryptsetup-skip-cryptsetup2 + endif + +-libs = $(rootdir)/libutil/libutil.a ++libs = $(rootdir)/libutil/libutil.a $(rootdir)/libargz/libargz.a + + detect-libcryptsetup.dep: + echo "#include <libcryptsetup.h>" > detect-libcryptsetup.dep +@@ -70,11 +70,11 @@ properties.o: check-dep-zkey properties.c properties.h + keystore.o: keystore.c keystore.h properties.h + zkey-cryptsetup.o: check-dep-zkey-cryptsetup zkey-cryptsetup.c pkey.h misc.h + +-zkey: LDLIBS = -ldl -lcrypto ++zkey: LDLIBS = -ldl -lcrypto $(LIBEXECINFO_LIBS) + zkey: zkey.o pkey.o properties.o keystore.o $(libs) + $(LINK) $(ALL_LDFLAGS) $^ $(LDLIBS) -o $@ + +-zkey-cryptsetup: LDLIBS = -ldl -lcryptsetup -ljson-c ++zkey-cryptsetup: LDLIBS = -ldl -lcryptsetup -ljson-c $(LIBEXECINFO_LIBS) + zkey-cryptsetup: zkey-cryptsetup.o pkey.o $(libs) + $(LINK) $(ALL_LDFLAGS) $^ $(LDLIBS) -o $@ + +diff --git a/zkey/keystore.c b/zkey/keystore.c +index 9dcac07..2f87798 100644 +--- a/zkey/keystore.c ++++ b/zkey/keystore.c +@@ -23,6 +23,7 @@ + #include <sys/file.h> + #include <sys/stat.h> + #include <sys/types.h> ++#include <fcntl.h> + + #include "lib/util_base.h" + #include "lib/util_file.h" +diff --git a/libutil/Makefile b/libutil/Makefile +index ca90f2a..3042f3d 100644 +--- a/libutil/Makefile ++++ b/libutil/Makefile +@@ -1,6 +1,6 @@ + include ../common.mak + +-lib = libutil.a ++lib = libutil.a $(rootdir)/libargz/libargz.a + + examples = util_base_example \ + util_panic_example \ |