11089e2062
When we use the cross-compiler to build syslinux with a recent binutils version, it fails with: /builds/arnout/buildroot/output/host/bin/i586-buildroot-linux-uclibc-ld -Bsymbolic -pie -E --hash-style=gnu -T /builds/arnout/buildroot/output/build/syslinux-6.03/core/i386/syslinux.ld -M -o ldlinux.elf ldlinux.o \ --start-group libcom32.a --whole-archive /builds/arnout/buildroot/output/build/syslinux-6.03/bios/com32/lib/libcom32core.a libldlinux.a --end-group -N --no-omagic \ > ldlinux.map /builds/arnout/buildroot/output/host/bin/i586-buildroot-linux-uclibc-ld: ldlinux.elf: Not enough room for program headers, try linking with -N /builds/arnout/buildroot/output/host/bin/i586-buildroot-linux-uclibc-ld: final link failed: Bad value /builds/arnout/buildroot/output/build/syslinux-6.03/core/Makefile:167: recipe for target 'ldlinux.elf' failed Backport an upstream patch that reorganises the i386 bios build by removing some symbols and making others hidden. To simplify the backport, an additional patch that also touches the link script is also included - it anyway looks like that patch could be relevant as well. Partially fixes: https://gitlab.com/arnout/buildroot/-/jobs/28979377 Signed-off-by: Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be> Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
296 lines
7.0 KiB
Diff
296 lines
7.0 KiB
Diff
From 76946dd67bc856eaf4fe69d0826547a794176f78 Mon Sep 17 00:00:00 2001
|
|
From: Sylvain Gault <sylvain.gault@gmail.com>
|
|
Date: Tue, 29 Sep 2015 04:45:09 +0200
|
|
Subject: [PATCH] bios: Don't try to guess the sections alignment
|
|
|
|
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@gmail.com>
|
|
Tested-by: poma <pomidorabelisima@gmail.com>
|
|
Signed-off-by: Paulo Alcantara <pcacjr@zytor.com>
|
|
|
|
Upstream: 0cc9a99e560a2f52bcf052fd85b1efae35ee812f
|
|
Signed-off-by: Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be>
|
|
---
|
|
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 73904510..92b75b11 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 bf815c46..70c6e00a 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.13.3
|
|
|