backport GCC 5 fixes from upstream ML: RHBZ #1263988, #1264012

This commit is contained in:
Adam Williamson 2015-10-16 12:52:06 -07:00
parent 3cddb21f27
commit 1e16eccb61
3 changed files with 371 additions and 1 deletions

View File

@ -0,0 +1,286 @@
From: Sylvain Gault <sylvain.gault at gmail.com>
For the compression / decompression to succeed, the sections layout must
be the same between the virtual memory and load memory. The section
alignment was kept in sync by introducing aligment that should be
greater or equal to the actual section alignment.
This patch compute the load memory addresses of the sections so that
the layout is the same as the virtual memory addresses.
Signed-off-by: Sylvain Gault <sylvain.gault at gmail.com>
---
core/i386/syslinux.ld | 63 ++++++++++---------------------------------------
core/x86_64/syslinux.ld | 63 ++++++++++---------------------------------------
2 files changed, 24 insertions(+), 102 deletions(-)
diff --git a/core/i386/syslinux.ld b/core/i386/syslinux.ld
index 7390451..92b75b1 100644
--- a/core/i386/syslinux.ld
+++ b/core/i386/syslinux.ld
@@ -255,10 +255,9 @@ SECTIONS
. = 0x100000;
__pm_code_start = .;
+ __vma_to_lma = __pm_code_lma - __pm_code_start;
- __text_vma = .;
- __text_lma = __pm_code_lma;
- .text : AT(__text_lma) {
+ .text : AT(ADDR(.text) + __vma_to_lma) {
FILL(0x90909090)
__text_start = .;
*(.text)
@@ -266,106 +265,68 @@ SECTIONS
__text_end = .;
}
- . = ALIGN(32);
-
- __rodata_vma = .;
- __rodata_lma = __rodata_vma + __text_lma - __text_vma;
- .rodata : AT(__rodata_lma) {
+ .rodata : AT(ADDR(.rodata) + __vma_to_lma) {
__rodata_start = .;
*(.rodata)
*(.rodata.*)
__rodata_end = .;
}
- . = ALIGN(4);
-
- __ctors_vma = .;
- __ctors_lma = __ctors_vma + __text_lma - __text_vma;
- .ctors : AT(__ctors_lma) {
+ .ctors : AT(ADDR(.ctors) + __vma_to_lma) {
__ctors_start = .;
KEEP (*(SORT(.ctors.*)))
KEEP (*(.ctors))
__ctors_end = .;
}
- __dtors_vma = .;
- __dtors_lma = __dtors_vma + __text_lma - __text_vma;
- .dtors : AT(__dtors_lma) {
+ .dtors : AT(ADDR(.dtors) + __vma_to_lma) {
__dtors_start = .;
KEEP (*(SORT(.dtors.*)))
KEEP (*(.dtors))
__dtors_end = .;
}
- . = ALIGN(4);
-
- __dynsym_vma = .;
- __dynsym_lma = __dynsym_vma + __text_lma - __text_vma;
- .dynsym : AT(__dynsym_lma) {
+ .dynsym : AT(ADDR(.dynsym) + __vma_to_lma) {
__dynsym_start = .;
*(.dynsym)
__dynsym_end = .;
}
__dynsym_len = __dynsym_end - __dynsym_start;
- . = ALIGN(4);
-
- __dynstr_vma = .;
- __dynstr_lma = __dynstr_vma + __text_lma - __text_vma;
- .dynstr : AT(__dynstr_lma) {
+ .dynstr : AT(ADDR(.dynstr) + __vma_to_lma) {
__dynstr_start = .;
*(.dynstr)
__dynstr_end = .;
}
__dynstr_len = __dynstr_end - __dynstr_start;
- . = ALIGN(4);
-
- __gnu_hash_vma = .;
- __gnu_hash_lma = __gnu_hash_vma + __text_lma - __text_vma;
- .gnu.hash : AT(__gnu_hash_lma) {
+ .gnu.hash : AT(ADDR(.gnu.hash) + __vma_to_lma) {
__gnu_hash_start = .;
*(.gnu.hash)
__gnu_hash_end = .;
}
- . = ALIGN(4);
-
- __dynlink_vma = .;
- __dynlink_lma = __dynlink_vma + __text_lma - __text_vma;
- .dynlink : AT(__dynlink_lma) {
+ .dynlink : AT(ADDR(.dynlink) + __vma_to_lma) {
__dynlink_start = .;
*(.dynlink)
__dynlink_end = .;
}
- . = ALIGN(4);
-
- __got_vma = .;
- __got_lma = __got_vma + __text_lma - __text_vma;
- .got : AT(__got_lma) {
+ .got : AT(ADDR(.got) + __vma_to_lma) {
__got_start = .;
KEEP (*(.got.plt))
KEEP (*(.got))
__got_end = .;
}
- . = ALIGN(4);
-
- __dynamic_vma = .;
- __dynamic_lma = __dynamic_vma + __text_lma - __text_vma;
- .dynamic : AT(__dynamic_lma) {
+ .dynamic : AT(ADDR(.dynamic) + __vma_to_lma) {
__dynamic_start = .;
*(.dynamic)
__dynamic_end = .;
}
- . = ALIGN(32);
-
- __data_vma = .;
- __data_lma = __data_vma + __text_lma - __text_vma;
- .data : AT(__data_lma) {
+ .data : AT(ADDR(.data) + __vma_to_lma) {
__data_start = .;
*(.data)
*(.data.*)
diff --git a/core/x86_64/syslinux.ld b/core/x86_64/syslinux.ld
index bf815c4..70c6e00 100644
--- a/core/x86_64/syslinux.ld
+++ b/core/x86_64/syslinux.ld
@@ -255,10 +255,9 @@ SECTIONS
. = 0x100000;
__pm_code_start = .;
+ __vma_to_lma = __pm_code_lma - __pm_code_start;
- __text_vma = .;
- __text_lma = __pm_code_lma;
- .text : AT(__text_lma) {
+ .text : AT(ADDR(.text) + __vma_to_lma) {
FILL(0x90909090)
__text_start = .;
*(.text)
@@ -266,106 +265,68 @@ SECTIONS
__text_end = .;
}
- . = ALIGN(32);
-
- __rodata_vma = .;
- __rodata_lma = __rodata_vma + __text_lma - __text_vma;
- .rodata : AT(__rodata_lma) {
+ .rodata : AT(ADDR(.rodata) + __vma_to_lma) {
__rodata_start = .;
*(.rodata)
*(.rodata.*)
__rodata_end = .;
}
- . = ALIGN(4);
-
- __ctors_vma = .;
- __ctors_lma = __ctors_vma + __text_lma - __text_vma;
- .ctors : AT(__ctors_lma) {
+ .ctors : AT(ADDR(.ctors) + __vma_to_lma) {
__ctors_start = .;
KEEP (*(SORT(.ctors.*)))
KEEP (*(.ctors))
__ctors_end = .;
}
- __dtors_vma = .;
- __dtors_lma = __dtors_vma + __text_lma - __text_vma;
- .dtors : AT(__dtors_lma) {
+ .dtors : AT(ADDR(.dtors) + __vma_to_lma) {
__dtors_start = .;
KEEP (*(SORT(.dtors.*)))
KEEP (*(.dtors))
__dtors_end = .;
}
- . = ALIGN(4);
-
- __dynsym_vma = .;
- __dynsym_lma = __dynsym_vma + __text_lma - __text_vma;
- .dynsym : AT(__dynsym_lma) {
+ .dynsym : AT(ADDR(.dynsym) + __vma_to_lma) {
__dynsym_start = .;
*(.dynsym)
__dynsym_end = .;
}
__dynsym_len = __dynsym_end - __dynsym_start;
- . = ALIGN(4);
-
- __dynstr_vma = .;
- __dynstr_lma = __dynstr_vma + __text_lma - __text_vma;
- .dynstr : AT(__dynstr_lma) {
+ .dynstr : AT(ADDR(.dynstr) + __vma_to_lma) {
__dynstr_start = .;
*(.dynstr)
__dynstr_end = .;
}
__dynstr_len = __dynstr_end - __dynstr_start;
- . = ALIGN(4);
-
- __gnu_hash_vma = .;
- __gnu_hash_lma = __gnu_hash_vma + __text_lma - __text_vma;
- .gnu.hash : AT(__gnu_hash_lma) {
+ .gnu.hash : AT(ADDR(.gnu.hash) + __vma_to_lma) {
__gnu_hash_start = .;
*(.gnu.hash)
__gnu_hash_end = .;
}
- . = ALIGN(4);
-
- __dynlink_vma = .;
- __dynlink_lma = __dynlink_vma + __text_lma - __text_vma;
- .dynlink : AT(__dynlink_lma) {
+ .dynlink : AT(ADDR(.dynlink) + __vma_to_lma) {
__dynlink_start = .;
*(.dynlink)
__dynlink_end = .;
}
- . = ALIGN(4);
-
- __got_vma = .;
- __got_lma = __got_vma + __text_lma - __text_vma;
- .got : AT(__got_lma) {
+ .got : AT(ADDR(.got) + __vma_to_lma) {
__got_start = .;
KEEP (*(.got.plt))
KEEP (*(.got))
__got_end = .;
}
- . = ALIGN(4);
-
- __dynamic_vma = .;
- __dynamic_lma = __dynamic_vma + __text_lma - __text_vma;
- .dynamic : AT(__dynamic_lma) {
+ .dynamic : AT(ADDR(.dynamic) + __vma_to_lma) {
__dynamic_start = .;
*(.dynamic)
__dynamic_end = .;
}
- . = ALIGN(32);
-
- __data_vma = .;
- __data_lma = __data_vma + __text_lma - __text_vma;
- .data : AT(__data_lma) {
+ .data : AT(ADDR(.data) + __vma_to_lma) {
__data_start = .;
*(.data)
*(.data.*)
--
2.5.3

View File

@ -0,0 +1,75 @@
From: Sylvain Gault <sylvain.gault at gmail.com>
The section aligment specified in the ld scripts have to be greater or
equal to those in the .o files generated by gcc.
Signed-off-by: Sylvain Gault <sylvain.gault at gmail.com>
---
core/i386/syslinux.ld | 6 +++---
core/x86_64/syslinux.ld | 6 +++---
2 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/core/i386/syslinux.ld b/core/i386/syslinux.ld
index 7b4e012..7390451 100644
--- a/core/i386/syslinux.ld
+++ b/core/i386/syslinux.ld
@@ -266,7 +266,7 @@ SECTIONS
__text_end = .;
}
- . = ALIGN(16);
+ . = ALIGN(32);
__rodata_vma = .;
__rodata_lma = __rodata_vma + __text_lma - __text_vma;
@@ -361,7 +361,7 @@ SECTIONS
__dynamic_end = .;
}
- . = ALIGN(16);
+ . = ALIGN(32);
__data_vma = .;
__data_lma = __data_vma + __text_lma - __text_vma;
@@ -377,7 +377,7 @@ SECTIONS
__pm_code_dwords = (__pm_code_len + 3) >> 2;
. = ALIGN(128);
-
+
__bss_vma = .;
__bss_lma = .; /* Dummy */
.bss (NOLOAD) : AT (__bss_lma) {
diff --git a/core/x86_64/syslinux.ld b/core/x86_64/syslinux.ld
index 1057112..bf815c4 100644
--- a/core/x86_64/syslinux.ld
+++ b/core/x86_64/syslinux.ld
@@ -266,7 +266,7 @@ SECTIONS
__text_end = .;
}
- . = ALIGN(16);
+ . = ALIGN(32);
__rodata_vma = .;
__rodata_lma = __rodata_vma + __text_lma - __text_vma;
@@ -361,7 +361,7 @@ SECTIONS
__dynamic_end = .;
}
- . = ALIGN(16);
+ . = ALIGN(32);
__data_vma = .;
__data_lma = __data_vma + __text_lma - __text_vma;
@@ -377,7 +377,7 @@ SECTIONS
__pm_code_dwords = (__pm_code_len + 3) >> 2;
. = ALIGN(128);
-
+
__bss_vma = .;
__bss_lma = .; /* Dummy */
.bss (NOLOAD) : AT (__bss_lma) {
--
2.5.3

View File

@ -2,7 +2,7 @@ Summary: Simple kernel loader which boots from a FAT filesystem
Name: syslinux
Version: 6.03
%define tarball_version 6.03
Release: 5%{?dist}
Release: 6%{?dist}
License: GPLv2+
Group: Applications/System
URL: http://syslinux.zytor.com/wiki/index.php/The_Syslinux_Project
@ -10,6 +10,12 @@ Source0: http://www.kernel.org/pub/linux/utils/boot/syslinux/%{name}-%{tarball_v
Patch0001: 0001-Add-install-all-target-to-top-side-of-HAVE_FIRMWARE.patch
# Backport from upstream git master to fix RHBZ #1234653
Patch0002: 0035-SYSAPPEND-Fix-space-stripping.patch
# From upstream ML, these should fix some GCC 5 issues, e.g. RHBZ #1263988
# http://www.syslinux.org/archives/2015-September/024317.html
# http://www.syslinux.org/archives/2015-September/024318.html
Patch0003: fix-alignment-change-gcc-5.patch
# http://www.syslinux.org/archives/2015-September/024319.html
Patch0004: dont-guess-section-alignment.patch
# this is to keep rpmbuild from thinking the .c32 / .com / .0 / memdisk files
# in noarch packages are a reason to stop the build.
@ -259,6 +265,9 @@ elif [ -f /boot/extlinux.conf ]; then \
fi
%changelog
* Thu Oct 15 2015 Adam Williamson <awilliam@redhat.com> - 6.03-6
- backport GCC 5 fixes from upstream ML: RHBZ #1263988, #1264012
* Fri Jul 03 2015 Adam Williamson <awilliam@redhat.com> - 6.03-5
- backport a commit from git master which appears to fix RHBZ #1234653