From: "Maciej W. Rozycki" <macro@linux-mips.org>
To: Nick Desaulniers <ndesaulniers@google.com>
Cc: Jiaxun Yang <jiaxun.yang@flygoat.com>,
linux-mips@vger.kernel.org,
clang-built-linux <clang-built-linux@googlegroups.com>,
Fangrui Song <maskray@google.com>,
Nathan Chancellor <natechancellor@gmail.com>,
Thomas Bogendoerfer <tsbogend@alpha.franken.de>,
LKML <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH v2] MIPS: Truncate load-y into 32bit for 32bit kernel
Date: Tue, 7 Apr 2020 19:10:08 +0100 (BST) [thread overview]
Message-ID: <alpine.LFD.2.21.2004071837440.596385@eddie.linux-mips.org> (raw)
In-Reply-To: <CAKwvOd=Upj_OcrhBnqf1=woCRm-g2wqjv882R0HQeMJu12Uq9w@mail.gmail.com>
On Tue, 7 Apr 2020, Nick Desaulniers wrote:
> V2 is way too clever, V1 was much more readable.
I think V2 is a step in the right direction except it still has some
issues, and also I'd simplify it as there's surely too much processing
there.
OTOH V1 is going to be a maintenance nightmare, as you need to handle all
platforms individually whether they want different 32-bit and 64-bit load
addresses or not.
> > diff --git a/arch/mips/Makefile b/arch/mips/Makefile
> > index e1c44aed8156..f8fd3c39fb55 100644
> > --- a/arch/mips/Makefile
> > +++ b/arch/mips/Makefile
> > @@ -286,6 +286,9 @@ ifdef CONFIG_64BIT
> > $(error CONFIG_CPU_DADDI_WORKAROUNDS unsupported without -msym32)
> > endif
> > endif
> > +else
> > + # Truncate address into 32-bit
> > + load-y := 0x$(shell echo "$(load-y)" | rev | head -c 8 | rev)
You cannot just truncate `load-y' in place like this as it will break
logic with `expr' used elsewhere in this Makefile (your original change
would too) that does a string comparison on this variable. So you need to
define another variable for the sole linker's use, like `load-ld'.
Then I think there's no need to invoke multiple programs, especially ones
we don't currently rely on (`rev'). How about:
load-ld = $(shell echo "$(load-y)" | sed 's/.\{8\}\(.\{8\}\)$/\1/')
Also this really needs to be placed elsewhere, as it has nothing to do
with KBUILD_SYM32 it has been attached to with this change, and explain
why it is done rather than what (it's obvious from the command it's meant
to truncate the address).
So use something along the lines of:
# When linking a 32-bit executable the LLVM linker cannot cope with a
# 32-bit load address that has been sign-extended to 64 bits. Simply
# remove the upper 32 bits then, as it is safe to do so with other
# linkers.
ifdef CONFIG_64BIT
load-ld = $(load-y)
else
load-ld = $(shell echo "$(load-y)" | sed 's/.\{8\}\(.\{8\}\)$/\1/')
endif
just above the use place, and then adjust the place to refer `load-ld'
rather than `load-y'.
Put the justification for this change (feel free to reuse observations I
made here), like why a new variable, in the change description.
Maciej
next prev parent reply other threads:[~2020-04-07 18:10 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-04-05 8:24 [PATCH] MIPS: malta: Set load address for 32bit kernel correctly Jiaxun Yang
2020-04-05 16:47 ` Maciej W. Rozycki
2020-04-05 16:53 ` Jiaxun Yang
2020-04-05 17:23 ` Maciej W. Rozycki
2020-04-06 10:57 ` YunQiang Su
2020-04-06 11:10 ` Jiaxun Yang
2020-04-06 16:43 ` Fangrui Song
2020-04-07 8:06 ` [PATCH v2] MIPS: Truncate load-y into 32bit for 32bit kernel Jiaxun Yang
2020-04-07 17:21 ` Nick Desaulniers
2020-04-07 18:00 ` Fangrui Song
2020-04-07 18:10 ` Maciej W. Rozycki [this message]
2020-04-10 9:06 ` [PATCH v3] MIPS: Truncate link address " Jiaxun Yang
2020-04-10 20:45 ` Kees Cook
2020-04-10 23:40 ` Maciej W. Rozycki
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=alpine.LFD.2.21.2004071837440.596385@eddie.linux-mips.org \
--to=macro@linux-mips.org \
--cc=clang-built-linux@googlegroups.com \
--cc=jiaxun.yang@flygoat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mips@vger.kernel.org \
--cc=maskray@google.com \
--cc=natechancellor@gmail.com \
--cc=ndesaulniers@google.com \
--cc=tsbogend@alpha.franken.de \
/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