From: George Rimar <grimar@accesssoftek.com>
To: Tri Vo <trong@android.com>, "x86@kernel.org" <x86@kernel.org>,
"tglx@linutronix.de" <tglx@linutronix.de>,
"mingo@redhat.com" <mingo@redhat.com>,
"bp@alien8.de" <bp@alien8.de>, "hpa@zytor.com" <hpa@zytor.com>
Cc: "dima@golovin.in" <dima@golovin.in>,
"morbo@google.com" <morbo@google.com>,
"ndesaulniers@google.com" <ndesaulniers@google.com>,
"matz@suse.de" <matz@suse.de>,
"ruiu@google.com" <ruiu@google.com>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH v3] x86_64: Add "-m elf_i386" when linking i386 object files.
Date: Sat, 12 Jan 2019 10:00:36 +0000 [thread overview]
Message-ID: <1547286899727.75112@accesssoftek.com> (raw)
In-Reply-To: <20190111201012.71210-1-trong@android.com>
Signed-off-by: George Rimar <grimar@accesssoftek.com>
Best regards,
George | Developer | Access Softek, Inc
________________________________________
От: Tri Vo <trong@android.com>
Отправлено: 11 января 2019 г. 23:10
Кому: x86@kernel.org; tglx@linutronix.de; mingo@redhat.com; bp@alien8.de; hpa@zytor.com
Копия: George Rimar; dima@golovin.in; morbo@google.com; ndesaulniers@google.com; matz@suse.de; ruiu@google.com; linux-kernel@vger.kernel.org; Tri Vo
Тема: [PATCH v3] x86_64: Add "-m elf_i386" when linking i386 object files.
CAUTION: This email originated from outside of the organization. Do not click links or open attachments unless you recognize the sender and know the content is safe. If you suspect potential phishing or spam email, report it to ReportSpam@accesssoftek.com
From: George Rimar <grimar@accesssoftek.com>
Linux kernel uses OUTPUT_FORMAT in it's linker scripts. Most of the time
-m option is passed to the linker with correct architecture, but
sometimes (at least for x86_64) the -m option contradicts OUTPUT_FORMAT
directive. Specifically, arch/x86/boot and arch/x86/realmode/rm modules
have i386 object files, but are linked with -m elf_x86_64 linker flag
when building for x86_64.
"man ld" doesn't explicitly state any tie-breakers between -m and
OUTPUT_FORMAT. BFD and Gold linkers override -m value with
OUTPUT_FORMAT. But LLVM lld has a different behavior. When supplied with
contradicting -m and OUTPUT_FORMAT values it fails with the following
error message:
ld.lld: error: arch/x86/realmode/rm/header.o is incompatible with elf_x86_64
Suggested fix: just add correct -m after incorrect one (it overrides
it), so the linker invocation looks like this: ld -m elf_x86_64 -z
max-page-size=0x200000 -m elf_i386 --emit-relocs -T realmode.lds
header.o trampoline_64.o stack.o reboot.o -o realmode.elf
This is not a functional change for GNU ld, because (although not
explicitly documented) it already overrides -m EMULATION with
OUTPUT_FORMAT.
Tested by building x86_64 kernel with GNU gcc/ld toolchain and booting
it in QEMU.
Suggested-by: Dmitry Golovin <dima@golovin.in>
Signed-off-by: George Rimar <grimar@accesssoftek.com>
Signed-off-by: Tri Vo <trong@android.com>
Tested-by: Tri Vo <trong@android.com>
Tested-by: Nick Desaulniers <ndesaulniers@google.com>
---
v2: updated commit message to clarify that ld documentation is ambiguous w.r.t
-m vs OUTPUT_FORMAT behavior.
v3: fixed/added SOB and "Tested-by" fields.
arch/x86/boot/Makefile | 2 +-
arch/x86/realmode/rm/Makefile | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/arch/x86/boot/Makefile b/arch/x86/boot/Makefile
index 9b5adae9cc40..e2839b5c246c 100644
--- a/arch/x86/boot/Makefile
+++ b/arch/x86/boot/Makefile
@@ -100,7 +100,7 @@ $(obj)/zoffset.h: $(obj)/compressed/vmlinux FORCE
AFLAGS_header.o += -I$(objtree)/$(obj)
$(obj)/header.o: $(obj)/zoffset.h
-LDFLAGS_setup.elf := -T
+LDFLAGS_setup.elf := -m elf_i386 -T
$(obj)/setup.elf: $(src)/setup.ld $(SETUP_OBJS) FORCE
$(call if_changed,ld)
diff --git a/arch/x86/realmode/rm/Makefile b/arch/x86/realmode/rm/Makefile
index 4463fa72db94..96cb20de08af 100644
--- a/arch/x86/realmode/rm/Makefile
+++ b/arch/x86/realmode/rm/Makefile
@@ -47,7 +47,7 @@ $(obj)/pasyms.h: $(REALMODE_OBJS) FORCE
targets += realmode.lds
$(obj)/realmode.lds: $(obj)/pasyms.h
-LDFLAGS_realmode.elf := --emit-relocs -T
+LDFLAGS_realmode.elf := -m elf_i386 --emit-relocs -T
CPPFLAGS_realmode.lds += -P -C -I$(objtree)/$(obj)
targets += realmode.elf
--
2.20.1.97.g81188d93c3-goog
prev parent reply other threads:[~2019-01-12 10:00 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <CAKwvOdnr1=Q=mL-P2icMTP8do3CVH+KF8564fKmpK_OshKxKwg@mail.gmail.com>
2019-01-11 19:14 ` [PATCH v2] x86_64: Add "-m elf_i386" when linking i386 object files Tri Vo
2019-01-11 19:27 ` Nick Desaulniers
2019-01-11 20:10 ` [PATCH v3] " Tri Vo
2019-01-12 8:39 ` [tip:x86/build] x86/build: Specify elf_i386 linker emulation explicitly for i386 objects tip-bot for George Rimar
2019-01-12 10:00 ` George Rimar [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1547286899727.75112@accesssoftek.com \
--to=grimar@accesssoftek.com \
--cc=bp@alien8.de \
--cc=dima@golovin.in \
--cc=hpa@zytor.com \
--cc=linux-kernel@vger.kernel.org \
--cc=matz@suse.de \
--cc=mingo@redhat.com \
--cc=morbo@google.com \
--cc=ndesaulniers@google.com \
--cc=ruiu@google.com \
--cc=tglx@linutronix.de \
--cc=trong@android.com \
--cc=x86@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox