On 8/17/22 22:59, Randy Dunlap wrote: > 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) Right. It seems to delete the CONFIG_64BIT which was set earlier. > I would like to have a command-line method to do that, > without editing the .config file. I found your patch for riscv: https://lore.kernel.org/all/20210912034538.19404-1-rdunlap@xxxxxxxxxxxxx/ and added a similiar one for parisc into my for-next git tree: https://git.kernel.org/pub/scm/linux/kernel/git/deller/parisc-linux.git/commit/?h=for-next&id=34793a5d09d9122f90acfa7e8f705436d5090d4d Does that help? Although, I'd prefer a generic solution for this problem, e.g. a new KCONFIG_MIN_RAND_CONFIG=$(srctree)/arch/parisc/configs/32-bit.config option which is used by randconfig/allmodconfig/.... Then it could be set once, and we can get rid of adding similiar patches to the arches, e.g. in arch/parisc/Makefile it could be: ifeq ($(ARCH),parisc64) KBUILD_DEFCONFIG := generic-64bit_defconfig KCONFIG_MIN_RAND_CONFIG = $(srctree)/arch/parisc/configs/64-bit.config else KBUILD_DEFCONFIG := generic-32bit_defconfig KCONFIG_MIN_RAND_CONFIG = $(srctree)/arch/parisc/configs/32-bit.config endif Thoughts? Helge