mirror of
git://git.openembedded.org/meta-openembedded
synced 2026-01-04 16:10:10 +00:00
libhugetlbfs: enable build for x86-32
Backported commit e3928d572b12f4e85a2a989482ac2d68c1bc2734
("Force text segment alignment to 0x08000000 for i386 with gold linker")
from libhugetlbfs -next branch to fix the build failure with gold linker.
And, enable x86-32 in COMPATIBLE_HOST.
Signed-off-by: Yang Shi <yang.shi@linaro.org>
Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
This commit is contained in:
parent
c9c82d313e
commit
87084feb1e
|
|
@ -0,0 +1,92 @@
|
|||
From 3c6f8d0e3c0694f79244ec6ad5ad9ba3ca26bc0a Mon Sep 17 00:00:00 2001
|
||||
From: Yang Shi <yang.shi@linaro.org>
|
||||
Date: Mon, 7 Dec 2015 14:12:13 -0800
|
||||
Subject: [PATCH] Force text segment alignment to 0x08000000 for i386 with gold
|
||||
linker
|
||||
|
||||
Upstream-Status: Backport
|
||||
|
||||
When build libhugetlbfs tests with gold linker for i386, the below error occurs:
|
||||
|
||||
i586-oe-linux-gcc -m32 -march=i586 -Wl,-O1 -Wl,--hash-style=gnu
|
||||
-Wl,--as-needed
|
||||
--sysroot=/home/jenkins/oe/world/shr-core/tmp-glibc/sysroots/qemux86 -I..
|
||||
-O2
|
||||
-Wall -g -o obj32/linkhuge_rw.o -c linkhuge_rw.c
|
||||
| i586-oe-linux-gcc -m32 -march=i586 -Wl,-O1 -Wl,--hash-style=gnu
|
||||
-Wl,--as-needed
|
||||
--sysroot=/home/jenkins/oe/world/shr-core/tmp-glibc/sysroots/qemux86
|
||||
-B./obj32
|
||||
-Wl,-O1 -Wl,--hash-style=gnu -Wl,--as-needed -Wl,-z,noexecstack -ldl
|
||||
-L../obj32
|
||||
-o obj32/linkhuge_rw -Wl,--no-as-needed -lpthread -ldl -lhugetlbfs_privutils
|
||||
-Wl,--hugetlbfs-align obj32/linkhuge_rw.o obj32/testutils.o
|
||||
| i586-oe-linux-ld: internal error in do_write, at
|
||||
/home/jenkins/oe/world/shr-core/tmp-glibc/work/x86_64-oe-linux/binutils-cross-i586/2.25-r0/git/gold/output.cc:464
|
||||
| collect2: error: ld returned 1 exit status
|
||||
|
||||
But, it works well with GNU linker. --hugetlbfs-align flag passes
|
||||
"-zcommon-page-size=$SLICE_SIZE -zmax-page-size=$SLICE_SIZE", that are supported by gold linker too.
|
||||
But, it looks gold linker deal with them in a different way from gnu linker for i586.
|
||||
|
||||
The readelf shows the below result with GNU linker:
|
||||
|
||||
Elf file type is EXEC (Executable file)
|
||||
Entry point 0x8048fbd
|
||||
There are 8 program headers, starting at offset 52
|
||||
|
||||
Program Headers:
|
||||
Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align
|
||||
PHDR 0x000034 0x08000034 0x08000034 0x00100 0x00100 R E 0x4
|
||||
INTERP 0x048134 0x08048134 0x08048134 0x00013 0x00013 R 0x1
|
||||
[Requesting program interpreter: /lib/ld-linux.so.2]
|
||||
LOAD 0x000000 0x08000000 0x08000000 0x5a5bc 0x5a5bc R E 0x400000
|
||||
LOAD 0x05a5bc 0x0845a5bc 0x0845a5bc 0x1028c 0x202cc RW 0x400000
|
||||
DYNAMIC 0x05a5d0 0x0845a5d0 0x0845a5d0 0x000e8 0x000e8 RW 0x4
|
||||
NOTE 0x048148 0x08048148 0x08048148 0x00044 0x00044 R 0x4
|
||||
GNU_EH_FRAME 0x059e5c 0x08059e5c 0x08059e5c 0x0009c 0x0009c R 0x4
|
||||
GNU_STACK 0x000000 0x00000000 0x00000000 0x00000 0x00000 RW 0x10
|
||||
|
||||
"--relax" linker option doesn't solve this problem.
|
||||
Forced textsegment alignment to 0x08000000 with gold linker, the build will pass and
|
||||
readelf shows the same result with GNU linker:
|
||||
|
||||
Elf file type is EXEC (Executable file)
|
||||
Entry point 0x8048fbd
|
||||
There are 8 program headers, starting at offset 52
|
||||
|
||||
Program Headers:
|
||||
Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align
|
||||
PHDR 0x000034 0x08000034 0x08000034 0x00100 0x00100 R E 0x4
|
||||
INTERP 0x048134 0x08048134 0x08048134 0x00013 0x00013 R 0x1
|
||||
[Requesting program interpreter: /lib/ld-linux.so.2]
|
||||
LOAD 0x000000 0x08000000 0x08000000 0x5a5bc 0x5a5bc R E 0x400000
|
||||
LOAD 0x05a5bc 0x0845a5bc 0x0845a5bc 0x1028c 0x202cc RW 0x400000
|
||||
DYNAMIC 0x05a5d0 0x0845a5d0 0x0845a5d0 0x000e8 0x000e8 RW 0x4
|
||||
NOTE 0x048148 0x08048148 0x08048148 0x00044 0x00044 R 0x4
|
||||
GNU_EH_FRAME 0x059e5c 0x08059e5c 0x08059e5c 0x0009c 0x0009c R 0x4
|
||||
GNU_STACK 0x000000 0x00000000 0x00000000 0x00000 0x00000 RW 0x10
|
||||
|
||||
The fix just have impact on hugelink_rw test case, which needs --hugetlbfs-align flag.
|
||||
|
||||
Signed-off-by: Yang Shi <yang.shi@linaro.org>
|
||||
Signed-off-by: Eric B Munson <emunson@mgebm.net>
|
||||
---
|
||||
ld.hugetlbfs | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git a/ld.hugetlbfs b/ld.hugetlbfs
|
||||
index 4417442..32bc6fb 100755
|
||||
--- a/ld.hugetlbfs
|
||||
+++ b/ld.hugetlbfs
|
||||
@@ -98,6 +98,7 @@ if [ "$HTLB_ALIGN" == "slice" ]; then
|
||||
# otherwise it will be NULL.
|
||||
case "$EMU" in
|
||||
armelf*_linux_eabi) HTLBOPTS="$HTLBOPTS -Ttext-segment=$SLICE_SIZE" ;;
|
||||
+ elf_i386) HTLBOPTS="$HTLBOPTS -Ttext-segment=0x08000000" ;;
|
||||
esac
|
||||
fi
|
||||
|
||||
--
|
||||
2.0.2
|
||||
|
||||
|
|
@ -19,11 +19,12 @@ SRC_URI = " \
|
|||
file://0001-run_test.py-not-use-hard-coded-path-.-obj-hugeadm.patch \
|
||||
file://libhugetlbfs-elf_i386-avoid-search-host-library-path.patch \
|
||||
file://libhugetlbfs-avoid-using-restrict-as-var-name.patch \
|
||||
file://Force-text-segment-alignment-to-0x08000000-for-i386-.patch \
|
||||
"
|
||||
|
||||
S = "${WORKDIR}/git"
|
||||
|
||||
COMPATIBLE_HOST = "(x86_64|powerpc|powerpc64|aarch64|arm).*-linux*"
|
||||
COMPATIBLE_HOST = "(i.86|x86_64|powerpc|powerpc64|aarch64|arm).*-linux*"
|
||||
|
||||
LIBARGS = "LIB32=${baselib} LIB64=${baselib}"
|
||||
LIBHUGETLBFS_ARCH = "${TARGET_ARCH}"
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user