Messages in this thread | | | Date | Mon, 06 Apr 2020 00:53:26 +0800 | Subject | Re: [PATCH] MIPS: malta: Set load address for 32bit kernel correctly | From | Jiaxun Yang <> |
| |
于 2020年4月6日 GMT+08:00 上午12:47:29, "Maciej W. Rozycki" <macro@linux-mips.org> 写到: >On Sun, 5 Apr 2020, Jiaxun Yang wrote: > >> LLD failed to link vmlinux with 64bit load address for 32bit ELF >> while bfd will strip 64bit address into 32bit silently. >> To fix LLD build, we should supply a 32bit load address for 32bit >> kernel. >[...] >> diff --git a/arch/mips/mti-malta/Platform >b/arch/mips/mti-malta/Platform >> index 2cc72c9b38e3..f9b49cba1764 100644 >> --- a/arch/mips/mti-malta/Platform >> +++ b/arch/mips/mti-malta/Platform >> @@ -6,6 +6,10 @@ cflags-$(CONFIG_MIPS_MALTA) += >-I$(srctree)/arch/mips/include/asm/mach-malta >> ifdef CONFIG_KVM_GUEST >> load-$(CONFIG_MIPS_MALTA) += 0x0000000040100000 >> else >> +ifdef CONFIG_64BIT >> load-$(CONFIG_MIPS_MALTA) += 0xffffffff80100000 >> +else >> + load-$(CONFIG_MIPS_MALTA) += 0x80100000 > > Given the description above I think it should be done uniformly and >automatically across all platforms by trimming the address supplied >with >$(load-y) to low 8 digits in a single place, that is at the place where > >the variable is consumed. This will reduce clutter across Makefile >fragments, avoid inconsistencies and extra work to handle individual >platforms as the problem is triggered over and over again, and limit >the >risk of mistakes.
I was intended to do like this but failed to find a proper way.
Makefile isn't designed for any kind of calculation. And shell variables are 64-bit signed so it can't hold such a huge variable.
Just wish somebody can give me a way to do like:
ifndef CONFIG_64BIT load-y = $(load-y) & 0xffffffff endif
In makefiles.
Thanks. > >Some error checking might be doable for verifying that the 64-bit >address >truncated is a sign-extended 32-bit value, but that perhaps would be an > >overkill as certainly any 64-bit system that sets the load address to >be >outside the sign-extended 32-bit address range does not support a >!64BIT >configuration anyway. > > Maciej
-- Jiaxun Yang
| |