From ed349fc2d79fdb19da2a7f5dc74e824e803e625f Mon Sep 17 00:00:00 2001 From: Peter Jones Date: Thu, 21 Jun 2012 10:55:08 -0400 Subject: [PATCH] Make it build on i686, though it's unclear it'll ever be necessary. --- ...tead-of-specificly-sized-types-where.patch | 78 ++++++++++++++++++ 0003-Fix-paths-for-32-bit-builds.patch | 79 +++++++++++++++++++ pesign.spec | 11 ++- 3 files changed, 165 insertions(+), 3 deletions(-) create mode 100644 0002-Use-intptr_t-instead-of-specificly-sized-types-where.patch create mode 100644 0003-Fix-paths-for-32-bit-builds.patch diff --git a/0002-Use-intptr_t-instead-of-specificly-sized-types-where.patch b/0002-Use-intptr_t-instead-of-specificly-sized-types-where.patch new file mode 100644 index 0000000..248d540 --- /dev/null +++ b/0002-Use-intptr_t-instead-of-specificly-sized-types-where.patch @@ -0,0 +1,78 @@ +From ec2cd81a6f275d14f8c3d13c94229a8cab0f343c Mon Sep 17 00:00:00 2001 +From: Peter Jones +Date: Thu, 21 Jun 2012 09:58:29 -0400 +Subject: [PATCH] Use uintptr_t instead of specificly sized types where + appropriate. + +--- + src/actions.c | 14 +++++++------- + 1 file changed, 7 insertions(+), 7 deletions(-) + +diff --git a/src/actions.c b/src/actions.c +index 31fc66f..e60a13e 100644 +--- a/src/actions.c ++++ b/src/actions.c +@@ -471,7 +471,7 @@ generate_digest(pesign_context *ctx, Pe *pe) + struct pe32_opt_hdr *pe32opthdr = NULL; + struct pe32plus_opt_hdr *pe64opthdr = NULL; + PK11Context *pk11ctx; +- uint64_t hashed_bytes = 0; ++ unsigned long hashed_bytes = 0; + int rc = -1; + + if (!pe) { +@@ -512,13 +512,13 @@ generate_digest(pesign_context *ctx, Pe *pe) + case PE_K_PE_EXE: { + void *opthdr = pe_getopthdr(pe); + pe32opthdr = opthdr; +- hash_size = (uint64_t)&pe32opthdr->csum - (uint64_t)hash_base; ++ hash_size = (uintptr_t)&pe32opthdr->csum - (uintptr_t)hash_base; + break; + } + case PE_K_PE64_EXE: { + void *opthdr = pe_getopthdr(pe); + pe64opthdr = opthdr; +- hash_size = (uint64_t)&pe64opthdr->csum - (uint64_t)hash_base; ++ hash_size = (uintptr_t)&pe64opthdr->csum - (uintptr_t)hash_base; + break; + } + default: +@@ -538,7 +538,7 @@ generate_digest(pesign_context *ctx, Pe *pe) + if (rc < 0 || !dd) + goto error; + +- hash_size = (uint64_t)&dd->certs - (uint64_t)hash_base; ++ hash_size = (uintptr_t)&dd->certs - (uintptr_t)hash_base; + PK11_DigestOp(pk11ctx, hash_base, hash_size); + + /* 8. Skip over the crt dir +@@ -546,7 +546,7 @@ generate_digest(pesign_context *ctx, Pe *pe) + hash_base = &dd->base_relocations; + hash_size = (pe32opthdr ? pe32opthdr->header_size + : pe64opthdr->header_size) - +- ((uint64_t)&dd->base_relocations - (uint64_t)map); ++ ((uintptr_t)&dd->base_relocations - (uintptr_t)map); + PK11_DigestOp(pk11ctx, hash_base, hash_size); + + /* 10. Set SUM_OF_BYTES_HASHED to the size of the header. */ +@@ -566,7 +566,7 @@ generate_digest(pesign_context *ctx, Pe *pe) + sort_shdrs(shdrs, pehdr.sections - 1); + + for (int i = 0; i < pehdr.sections; i++) { +- hash_base = (void *)((uint64_t)map + shdrs[i].data_addr); ++ hash_base = (void *)((uintptr_t)map + shdrs[i].data_addr); + hash_size = shdrs[i].raw_data_size; + PK11_DigestOp(pk11ctx, hash_base, hash_size); + +@@ -574,7 +574,7 @@ generate_digest(pesign_context *ctx, Pe *pe) + } + + if (map_size > hashed_bytes) { +- hash_base = (void *)((uint64_t)map + hashed_bytes); ++ hash_base = (void *)((uintptr_t)map + hashed_bytes); + hash_size = map_size - dd->certs.size - hashed_bytes; + PK11_DigestOp(pk11ctx, hash_base, hash_size); + } +-- +1.7.10.2 + diff --git a/0003-Fix-paths-for-32-bit-builds.patch b/0003-Fix-paths-for-32-bit-builds.patch new file mode 100644 index 0000000..d43beb3 --- /dev/null +++ b/0003-Fix-paths-for-32-bit-builds.patch @@ -0,0 +1,79 @@ +From 020edc721159a7aee09bdaef54d22f11f40766d6 Mon Sep 17 00:00:00 2001 +From: Peter Jones +Date: Thu, 21 Jun 2012 10:16:25 -0400 +Subject: [PATCH 3/3] Fix paths for 32-bit builds. + +--- + Make.defaults | 19 +++++++++---------- + util/Makefile | 6 +++--- + 2 files changed, 12 insertions(+), 13 deletions(-) + +diff --git a/Make.defaults b/Make.defaults +index feda335..50b28b7 100644 +--- a/Make.defaults ++++ b/Make.defaults +@@ -11,15 +11,14 @@ LDFLAGS = -nostdlib + CCLDFLAGS = -shared + INSTALL = install + # XXX this is broken +-LIBDIR = $(PREFIX)/lib64 +-prefix = /usr/bin/ ++bindir = /usr/bin/ + +-CC = $(prefix)gcc +-AS = $(prefix)as +-LD = $(prefix)ld.bfd +-AR = $(prefix)ar +-RANLIB = $(prefix)ranlib +-OBJCOPY = $(prefix)objcopy ++CC = $(bindir)gcc ++AS = $(bindir)as ++LD = $(bindir)ld.bfd ++AR = $(bindir)ar ++RANLIB = $(bindir)ranlib ++OBJCOPY = $(bindir)objcopy + + ifeq ($(ARCH),ia64) + CFLAGS += -mfixed-range=f32-f127 +@@ -27,17 +26,17 @@ ifeq ($(ARCH),ia64) + endif + + ifeq ($(ARCH), ia32) ++ LIBDIR := $(PREFIX)/lib + ifeq ($(HOSTARCH), x86_64) + ARCH3264 := -m32 +- LIBDIR := $(PREFIX)/lib + endif + endif + + ifeq ($(ARCH), x86_64) + CFLAGS += -mno-red-zone ++ LIBDIR := $(PREFIX)/lib64 + ifeq ($(HOSTARCH), ia32) + ARCH3264 := -m64 +- LIBDIR := $(PREFIX)/lib64 + endif + endif + +diff --git a/util/Makefile b/util/Makefile +index 1dd4ca0..1cf782c 100644 +--- a/util/Makefile ++++ b/util/Makefile +@@ -3,11 +3,11 @@ TOPDIR = $(SRCDIR)/.. + + include $(TOPDIR)/Make.defaults + +-FORMAT=efi-app-x86_64 +-LDFLAGS = -nostdlib -T /usr/lib64/gnuefi/elf_x86_64_efi.lds -shared -Bsymbolic /usr/lib64/gnuefi/crt0-efi-x86_64.o -L/usr/lib64/ ++FORMAT=efi-app-$(HOSTARCH) ++LDFLAGS = -nostdlib -T $(LIBDIR)/gnuefi/elf_$(HOSTARCH)_efi.lds -shared -Bsymbolic $(LIBDIR)/gnuefi/crt0-efi-$(HOSTARCH).o -L$(LIBDIR) + LIBS=-lefi -lgnuefi $(shell $(CC) -print-libgcc-file-name) + CCLDFLAGS = +-CFLAGS = -I/usr/include/efi/ -I/usr/include/efi/x86_64/ -I/usr/include/efi/protocol -fpic -fshort-wchar -fno-reorder-functions -fno-strict-aliasing -fno-merge-constants -mno-red-zone -Wimplicit-function-declaration ++CFLAGS = -I/usr/include/efi/ -I/usr/include/efi/$(HOSTARCH)/ -I/usr/include/efi/protocol -fpic -fshort-wchar -fno-reorder-functions -fno-strict-aliasing -fno-merge-constants -mno-red-zone -Wimplicit-function-declaration + + TARGETS = setupsb.efi dumpsb.efi clearpk.efi + +-- +1.7.10.2 + diff --git a/pesign.spec b/pesign.spec index d1a6782..c6ce0e7 100644 --- a/pesign.spec +++ b/pesign.spec @@ -1,7 +1,7 @@ Summary: Signing utility for UEFI binaries Name: pesign Version: 0.2 -Release: 2%{?dist} +Release: 3%{?dist} Group: Development/System License: GPLv2 URL: https://github.com/vathpela/pesign @@ -14,6 +14,8 @@ BuildRequires: git gnu-efi nspr nspr-devel nss nss-devel nss-util popt-devel Requires: nspr nss nss-util popt Patch0: 0001-Fix-decl-of-pe_update-off_t-loff_t.patch +Patch1: 0002-Use-intptr_t-instead-of-specificly-sized-types-where.patch +Patch2: 0003-Fix-paths-for-32-bit-builds.patch %description This package contains the pesign utility for signing UEFI binaries as @@ -29,7 +31,7 @@ git commit -a -q -m "%{version} baseline." git am %{patches} - 0.2-3 +- Make it build on i686, though it's unclear it'll ever be necessary. + * Thu Jun 21 2012 Peter Jones - 0.2-2 - Fix compile problem with f18's compiler.