Update to SLOF 20190114 for qemu-4.0

This commit is contained in:
Cole Robinson 2019-03-27 17:49:46 -04:00
parent 18fd1d7b49
commit f60a532726
6 changed files with 6 additions and 282 deletions

View File

@ -1,31 +0,0 @@
From: Thomas Huth <thuth@redhat.com>
Date: Wed, 18 Jul 2018 15:44:59 +0200
Subject: [PATCH] make.rules: Compile SLOF with -fno-asynchronous-unwind-tables
With the new GCC 8, the asynchronous-unwind-tables are always enabled.
We don't need this for SLOF, so disable them to save 32 kiB in the
boot_rom.bin.
Signed-off-by: Thomas Huth <thuth@redhat.com>
Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
(cherry picked from commit 5cd96a5ba9782d6f1c2d53d02d5a265fbcae580b)
---
make.rules | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/make.rules b/make.rules
index 3067314..acbc8ab 100644
--- a/make.rules
+++ b/make.rules
@@ -73,8 +73,9 @@ RANLIB ?= $(CROSS)ranlib
CPP ?= $(CROSS)cpp
WARNFLAGS = -Wall -Wmissing-prototypes -Wstrict-prototypes -Wformat-security
-CFLAGS ?= -g -O2 -fno-builtin -ffreestanding -nostdinc -msoft-float -fno-strict-aliasing \
- -mno-altivec -mabi=no-altivec -fno-stack-protector $(WARNFLAGS)
+CFLAGS ?= -g -O2 -fno-builtin -ffreestanding -nostdinc -msoft-float \
+ -fno-strict-aliasing -mno-altivec -mabi=no-altivec \
+ -fno-stack-protector -fno-asynchronous-unwind-tables $(WARNFLAGS)
export CC AS LD CLEAN OBJCOPY OBJDUMP STRIP AR RANLIB CFLAGS

View File

@ -1,111 +0,0 @@
From: Thomas Huth <thuth@redhat.com>
Date: Thu, 19 Jul 2018 14:46:24 +0200
Subject: [PATCH] romfs/tools: Remove superfluous union around the rom header
struct
Accessing the struct with memset and memcpy can also be done without the
union wrapper. While we're at it, also remove the FLASHFS_HEADER_DATA_SIZE
macre and use sizeof(stHeader) instead.
Signed-off-by: Thomas Huth <thuth@redhat.com>
Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
(cherry picked from commit d4443f17c956e77df7bb23b2d19462faae9f4b23)
---
include/calculatecrc.h | 1 -
romfs/tools/create_crc.c | 29 +++++++++++++----------------
2 files changed, 13 insertions(+), 17 deletions(-)
diff --git a/include/calculatecrc.h b/include/calculatecrc.h
index a19a229..667ea81 100644
--- a/include/calculatecrc.h
+++ b/include/calculatecrc.h
@@ -17,7 +17,6 @@
#define FLASHFS_HEADER_SIZE_ADDR 0x08 // uint64_t position of total flash header size value
#define FLASHFS_ROMADDR 0x00 // uint64_t position of pointer to next file
-#define FLASHFS_HEADER_DATA_SIZE 0x68 // 104 bytes of total header data size
#define CRC_METHODE Ethernet_32 // define the CRC genarator (CRC 16 bit to 64 is supported)
//--- header format ---------------------------------
diff --git a/romfs/tools/create_crc.c b/romfs/tools/create_crc.c
index 5a76b9c..e354339 100644
--- a/romfs/tools/create_crc.c
+++ b/romfs/tools/create_crc.c
@@ -10,6 +10,7 @@
* IBM Corporation - initial implementation
*****************************************************************************/
+#include <assert.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
@@ -71,21 +72,18 @@ createHeaderImage(int notime)
char dastr[16] = { 0, };
unsigned long long da = 0;
- union {
- unsigned char pcArray[FLASHFS_HEADER_DATA_SIZE];
- struct stH stHeader;
- } uHeader;
+ struct stH stHeader;
/* initialize Header */
- memset(uHeader.pcArray, 0x00, FLASHFS_HEADER_DATA_SIZE);
+ memset(&stHeader, 0x00, sizeof(stHeader));
/* read driver info */
if (NULL != (pcVersion = getenv("DRIVER_NAME"))) {
- strncpy(uHeader.stHeader.version, pcVersion, 16);
+ strncpy(stHeader.version, pcVersion, 16);
} else if (NULL != (pcVersion = getenv("USER"))) {
- strncpy(uHeader.stHeader.version, pcVersion, 16);
+ strncpy(stHeader.version, pcVersion, 16);
} else if (pcVersion == NULL) {
- strncpy(uHeader.stHeader.version, "No known user!", 16);
+ strncpy(stHeader.version, "No known user!", 16);
}
if (!notime) {
@@ -104,18 +102,18 @@ createHeaderImage(int notime)
}
da = cpu_to_be64(strtoll(dastr, NULL, 16));
}
- memcpy(uHeader.stHeader.date, &da, 8);
+ memcpy(stHeader.date, &da, 8);
/* write Magic value into data stream */
- strncpy(uHeader.stHeader.magic, FLASHFS_MAGIC, 8);
+ strncpy(stHeader.magic, FLASHFS_MAGIC, 8);
/* write platform name into data stream */
- strcpy(uHeader.stHeader.platform_name, FLASHFS_PLATFORM_MAGIC);
+ strcpy(stHeader.platform_name, FLASHFS_PLATFORM_MAGIC);
/* write platform revision into data stream */
- strcpy(uHeader.stHeader.platform_revision, FLASHFS_PLATFORM_REVISION);
+ strcpy(stHeader.platform_revision, FLASHFS_PLATFORM_REVISION);
/* fill end of file info (8 bytes of FF) into data stream */
- uHeader.stHeader.ui64FileEnd = -1;
+ stHeader.ui64FileEnd = -1;
/* read address of next file and address of header date, both are 64 bit values */
ui64RomAddr = 0;
@@ -129,7 +127,7 @@ createHeaderImage(int notime)
/* calculate final flash-header-size and flash-file-size */
/* calculate end addr of header */
- ui64globalHeaderSize = (uint32_t) ui64DataAddr + (uint32_t) FLASHFS_HEADER_DATA_SIZE;
+ ui64globalHeaderSize = (uint32_t) ui64DataAddr + sizeof(stHeader);
/* cut 64 bit to place CRC for File-End */
ui64globalHeaderSize -= 8;
/* add 64 bit to place CRC behind File-End */
@@ -143,8 +141,7 @@ createHeaderImage(int notime)
/* fill free space in Header with zeros */
memset(&pucFileStream[ui64DataAddr], 0, (ui64RomAddr - ui64DataAddr));
/* place data to header */
- memcpy(&pucFileStream[ui64DataAddr], uHeader.pcArray,
- FLASHFS_HEADER_DATA_SIZE);
+ memcpy(&pucFileStream[ui64DataAddr], &stHeader, sizeof(stHeader));
/* insert header length into data stream */
*(uint64_t *) (pucFileStream + FLASHFS_HEADER_SIZE_ADDR) =

View File

@ -1,66 +0,0 @@
From: Thomas Huth <thuth@redhat.com>
Date: Thu, 19 Jul 2018 14:46:25 +0200
Subject: [PATCH] romfs/tools: Silence GCC 8.1 compiler warning with
FLASHFS_MAGIC
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
GCC 8.1 introduce some new warnings which affect create_crc.c. One of
them is:
create_crc.c: In function ‘createHeaderImage’:
create_crc.c:110:2: warning: ‘strncpy’ output truncated before terminating nul
copying 8 bytes from a string of the same length [-Wstringop-truncation]
strncpy(uHeader.stHeader.magic, FLASHFS_MAGIC, 8);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Initialize the header struct statically here instead to silence the warning.
Suggested-by: Segher Boessenkool <segher@kernel.crashing.org>
Signed-off-by: Thomas Huth <thuth@redhat.com>
Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
(cherry picked from commit 49482e06ea74652a70a8cd067b852cc142021c03)
---
romfs/tools/create_crc.c | 21 ++++++---------------
1 file changed, 6 insertions(+), 15 deletions(-)
diff --git a/romfs/tools/create_crc.c b/romfs/tools/create_crc.c
index e354339..475b184 100644
--- a/romfs/tools/create_crc.c
+++ b/romfs/tools/create_crc.c
@@ -72,10 +72,12 @@ createHeaderImage(int notime)
char dastr[16] = { 0, };
unsigned long long da = 0;
- struct stH stHeader;
-
- /* initialize Header */
- memset(&stHeader, 0x00, sizeof(stHeader));
+ struct stH stHeader = {
+ .magic = FLASHFS_MAGIC,
+ .platform_name = FLASHFS_PLATFORM_MAGIC,
+ .platform_revision = FLASHFS_PLATFORM_REVISION,
+ .ui64FileEnd = -1,
+ };
/* read driver info */
if (NULL != (pcVersion = getenv("DRIVER_NAME"))) {
@@ -104,17 +106,6 @@ createHeaderImage(int notime)
}
memcpy(stHeader.date, &da, 8);
- /* write Magic value into data stream */
- strncpy(stHeader.magic, FLASHFS_MAGIC, 8);
- /* write platform name into data stream */
- strcpy(stHeader.platform_name, FLASHFS_PLATFORM_MAGIC);
- /* write platform revision into data stream */
- strcpy(stHeader.platform_revision, FLASHFS_PLATFORM_REVISION);
-
-
- /* fill end of file info (8 bytes of FF) into data stream */
- stHeader.ui64FileEnd = -1;
-
/* read address of next file and address of header date, both are 64 bit values */
ui64RomAddr = 0;
ui64DataAddr = 0;

View File

@ -1,64 +0,0 @@
From: Thomas Huth <thuth@redhat.com>
Date: Mon, 23 Jul 2018 15:19:44 +0200
Subject: [PATCH] romfs/tools: Silence more compiler warnings with GCC 8.1
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
GCC 8 complains about the following usages of strncpy, too:
create_crc.c:86:3: warning: ‘strncpy’ specified bound 16 equals destination
size [-Wstringop-truncation]
strncpy(uHeader.stHeader.version, pcVersion, 16);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
create_crc.c:84:3: warning: ‘strncpy’ specified bound 16 equals destination
size [-Wstringop-truncation]
strncpy(uHeader.stHeader.version, pcVersion, 16);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Let's work around the issue by using memcpy instead.
Signed-off-by: Thomas Huth <thuth@redhat.com>
Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
(cherry picked from commit d8a9354c2a351360da438826c95cf78efcaaf1b0)
---
romfs/tools/create_crc.c | 19 ++++++++++++-------
1 file changed, 12 insertions(+), 7 deletions(-)
diff --git a/romfs/tools/create_crc.c b/romfs/tools/create_crc.c
index 475b184..abc373b 100644
--- a/romfs/tools/create_crc.c
+++ b/romfs/tools/create_crc.c
@@ -32,6 +32,11 @@ static uint64_t ui64globalHeaderSize = 0;
/* flag to filter detect the header in buildDataStream() */
static int iglobalHeaderFlag = 1;
+static size_t min(size_t a, size_t b)
+{
+ return a < b ? a : b;
+}
+
/**
* Build the file image and store it as Data Stream of bytes
* calculate a first CRC for the first file and
@@ -80,13 +85,13 @@ createHeaderImage(int notime)
};
/* read driver info */
- if (NULL != (pcVersion = getenv("DRIVER_NAME"))) {
- strncpy(stHeader.version, pcVersion, 16);
- } else if (NULL != (pcVersion = getenv("USER"))) {
- strncpy(stHeader.version, pcVersion, 16);
- } else if (pcVersion == NULL) {
- strncpy(stHeader.version, "No known user!", 16);
- }
+ pcVersion = getenv("DRIVER_NAME");
+ if (!pcVersion)
+ pcVersion = getenv("USER");
+ if (!pcVersion)
+ pcVersion = "unknown";
+ memcpy(stHeader.version, pcVersion,
+ min(strlen(pcVersion), sizeof(stHeader.version)));
if (!notime) {
/* read time and write it into data stream */

View File

@ -1,7 +1,6 @@
%global gittagdate 20180702
%global gittagdate 20190114
%global gittag qemu-slof-%{gittagdate}
# Disable debuginfo because it is of no use to us.
%global debug_package %{nil}
@ -11,7 +10,7 @@
Name: SLOF
Version: 0.1.git%{gittagdate}
Release: 3%{?dist}
Release: 1%{?dist}
Summary: Slimline Open Firmware
License: BSD
@ -26,12 +25,6 @@ URL: http://www.openfirmware.info/SLOF
# --prefix=SLOF-{gittagdate}/ {gittag}
Source0: SLOF-%{gittagdate}.tar.gz
# Fix gcc 8.1 build compat (bz #1653655)
Patch0001: 0001-make.rules-Compile-SLOF-with-fno-asynchronous-unwind.patch
Patch0002: 0002-romfs-tools-Remove-superfluous-union-around-the-rom-.patch
Patch0003: 0003-romfs-tools-Silence-GCC-8.1-compiler-warning-with-FL.patch
Patch0004: 0004-romfs-tools-Silence-more-compiler-warnings-with-GCC-.patch
%if 0%{?cross:1}
BuildArch: noarch
@ -81,6 +74,9 @@ cp -a boot_rom.bin %{buildroot}%{_datadir}/qemu/slof.bin
%changelog
* Wed Mar 27 2019 Cole Robinson <aintdiscole@gmail.com> - 0.1.git20190114-1
- Update to SLOF 20190114 for qemu-4.0
* Thu Jan 31 2019 Fedora Release Engineering <releng@fedoraproject.org> - 0.1.git20180702-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild

View File

@ -1 +1 @@
SHA512 (SLOF-20180702.tar.gz) = a709d0ff4539817a449d7a429e4869fcce54137fc00dfd3424c39b2e2b0a73d4d8cff8dda3d9e37236396e735f75455c2d39872260df765d4ea8061559898f58
SHA512 (SLOF-20190114.tar.gz) = 948034f74627fb05047cdbef92ac35679ea1b551cbe5e4e545e0703e005b86067fc254ee32925334060b283fedd73a2df3f387df17f03a75b392ad18bb00b38e