Re: [PATCH] MIPS: malta: Set load address for 32bit kernel correctly

From: Fangrui Song
Date: Mon Apr 06 2020 - 12:43:28 EST


On 2020-04-06, Jiaxun Yang wrote:


ä 2020å4æ6æ GMT+08:00 äå6:57:18, YunQiang Su <wzssyqa@xxxxxxxxx> åå:
Maciej W. Rozycki <macro@xxxxxxxxxxxxxx> ä2020å4æ6æåä äå1:23åéï

On Mon, 6 Apr 2020, Jiaxun Yang wrote:

> > 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

Use the usual shell tools like `sed', `cut', `awk', or whatever we
use in

perl may be the easiest to use tool here.

ifndef CONFIG_64BIT
load-y := $(shell $(PERL) -e 'print $(load-y) & 0xffffffff')
endif

Note that it is `:=' instead of '='.

It seems like perl is not one of kernel's build dependencies.[1]
I'm comsidering a alternative solution,
write a small hostprog in C to deal with that.

Thanks.

[1]: https://www.kernel.org/doc/html/v5.6/process/changes.html

load-y := 0xffffffff80100000
load-y := 0x$(shell echo "$(load-y)" | rev | head -c 8 | rev)


the kernel build already for other purposes. There's no need to do
any
actual calculation here to extract the last 8 characters (and the
leading
`0x' prefix). At worst you can write a small C program, compile it
with
the build system compiler and run, as we already do for some stuff.

Maciej

--
Jiaxun Yang