Re: linux-parisc compile failure in current git

From: Randy Dunlap
Date: Wed Aug 17 2022 - 16:59:35 EST


Hi--

On 6/23/21 13:33, Helge Deller wrote:
> * Masahiro Yamada <masahiroy@xxxxxxxxxx>:
>> On Thu, Jun 10, 2021 at 4:04 PM Helge Deller <deller@xxxxxx> wrote:
>>>
>>> Hi Masahiro,
>>>
>>> On 6/10/21 4:03 AM, Masahiro Yamada wrote:
>>>> On Thu, Jun 10, 2021 at 7:50 AM Helge Deller <deller@xxxxxx> wrote:

[snip]

>>>> But, please keep in mind that there is an issue remaining.
>>>>
>>>> Please see this code:
>>>>
>>>> ifdef CONFIG_64BIT
>>>> UTS_MACHINE := parisc64
>>>> CHECKFLAGS += -D__LP64__=1
>>>> CC_ARCHES = hppa64
>>>> LD_BFD := elf64-hppa-linux
>>>> else # 32-bit
>>>> CC_ARCHES = hppa hppa2.0 hppa1.1
>>>> LD_BFD := elf32-hppa-linux
>>>> endif
>>>>
>>>>
>>>> UTS_MACHINE is determined by CONFIG_64BIT.
>>>>
>>>> CONFIG_64BIT is defined only after Kconfig is finished.
>>>> When you are trying to configure the .config,
>>>> CONFIG_64BIT is not defined yet.
>>>> So UTS_MACHINE is always 'parisc'.
>>>
>>> Yes.
>>> See above, but it worked when I had SUBARCH=x86 (when running my laptop).
>>>
>>>
>>>> As you know, Kconfig files now have a bunch of 'cc-option' syntax
>>>> to check the compiler capability in Kconfig time.
>>>> Hence, you need to provide a proper compiler in Kconfig time too.
>>>>
>>>> When you build a 64-bit parisc kernel on a 32-bit parisc machine,
>>>
>>> Please note, that we don't have a 64-bit parisc userspace yet (just kernel).
>>> This means, that all builds on parisc machines are 32bit and do a
>>> cross-compilation to a parisc64 kernel if requested in the .config.
>>>
>>>> Kconfig is passed with CC=gcc since SUBARCH==UTS_MACHINE==parisc.
>>>> After Kconfig, CROSS_COMPILE=hppa64-* is set,
>>>> and the kernel is built by CC=hppa64-*-gcc.
>>>
>>> Right. That is the old behaviour. Based on the CONFIG_64BIT option
>>> the hppa64 compiler is choosen for CROSS_COMPILE.
>>>
>>>> So, Kconfig evaluated a compiletely different compiler. This is pointless.
>>>
>>> Yes, probably.
>>>
>>>
>>>> There are some options
>>>>
>>>> [option 1]
>>>> revert the parisc bit of 23243c1ace9fb4eae2f75e0fe0ece8e3219fb4f3
>>>> This will restore the functionality you may want, but
>>>> as I said above, Kconfig is doing pointless things.
>>>
>>> as mentioned above: Doesn't solve the issue.
>>>
>>>> [option 2]
>>>> Stop using cc-cross-prefix, and pass CROSS_COMPILE explicitly.
>>>> This is what many architectures including arm, arm64 do.
>>>> You need to explicitly pass CROSS_COMPILE=aarch64-linux-gnu- etc.
>>>> if you are cross-compiling arm64.
>>>
>>> Might be an option, but it's not as handy as simply choosing CONFIG_64BIT
>>> and then things are done automatically.
>>>
>>>> [option 3]
>>>> Introduce ARCH=parisc64.
>>>>
>>>> When you are building 64-bit kernel, you can pass ARCH=parisc64
>>>> A patch attached. (but not tested much)
>>>
>>> Tried it, but doesn't work.
>>> asm-offsets.c is still preprocessed with 32bit compiler (gcc, not hppa20-gcc).
>>>
>>> Thanks for your help so far!
>>> If you like I'm happy to give you an account on a hppa64 machine to reproduce yourself.
>>> I'll now try to bisect where it goes wrong. There must be something else before commit 23243c1ace9fb4eae2f75e0fe0ece8e3219fb4f3.
>>>
>>> Helge
>>
>>
>> Sorry for my late reply.
>
> Me too.... :-(

Sorry to jump in even later, but:

I see that
$ make ARCH=parisc64 defconfig
does set CONFIG_64BIT.

Is there a way to do
$ make ARCH=parisc64 allmodconfig
?
That does not set CONFIG_64BIT in my testing.
(testing on linux-next-20220817)

I would like to have a command-line method to do that,
without editing the .config file.

Thanks.
--
~Randy