linux-perf-users.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Nathan Chancellor <nathan@kernel.org>
To: Arnd Bergmann <arnd@arndb.de>
Cc: Tiezhu Yang <yangtiezhu@loongson.cn>,
	linux-arm-kernel@lists.infradead.org,
	linux-riscv@lists.infradead.org, loongarch@lists.linux.dev,
	Linux-Arch <linux-arch@vger.kernel.org>,
	bpf@vger.kernel.org, linux-perf-users@vger.kernel.org,
	linux-kselftest@vger.kernel.org, linux-kernel@vger.kernel.org,
	loongson-kernel@lists.loongnix.cn
Subject: Re: [PATCH v3 1/2] asm-generic: Unify uapi bitsperlong.h for arm64, riscv and loongarch
Date: Fri, 28 Jul 2023 16:44:29 -0700	[thread overview]
Message-ID: <20230728234429.GA611252@dev-arch.thelio-3990X> (raw)
In-Reply-To: <a2fa1a31-e8bb-4659-9631-398b564e7c2b@app.fastmail.com>

On Fri, Jul 28, 2023 at 10:56:38PM +0200, Arnd Bergmann wrote:
> On Fri, Jul 28, 2023, at 19:31, Nathan Chancellor wrote:
> > On Fri, Jul 28, 2023 at 01:00:30PM +0200, Arnd Bergmann wrote:
> >>
> >> of the uapi version. The sanity check in the kernel-side header
> >> is intended to cross-check the CONFIG_64BIT value against the
> >> __BITS_PER_LONG constant from the header.
> >> 
> >> My first guess would be that this only worked by accident if the headers
> >> defaulted to "#define __BITS_PER_LONG 32" in and #undef CONFIG_64BIT"
> >> when include/generated/autoconf.h, but now the __BITS_PER_LONG value
> >> is actually correct.
> >
> > That seems like a reasonable theory. I am still busy looking into other
> > things today but I can try to double back to this on Monday if you don't
> > make any progress.
> 
> I tried reproducing this today on arm64 Debian with linux-6.5-rc3
> and clang-14.0.6 but I don't see the problem here. With 'make V=1'
> I see command for building scripts/sorttable is
> 
> clang -Wp,-MMD,scripts/.sorttable.d -Wall -Wmissing-prototypes \
>  -Wstrict-prototypes -O2 -fomit-frame-pointer -std=gnu11   \
>  -I./tools/include -I./tools/arch/x86/include -DUNWINDER_ORC_ENABLED \
>  -o scripts/sorttable scripts/sorttable.c   -lpthread
> 
> which does create an arm64 executable but includes the x86 headers,
> which is clearly a bug by itself, it just doesn't trigger the problem
> for me.

I could not initially reproduce this on Debian either but I figured out
why that might be: the default include paths on Debian look different
from Fedora so just doing 'headers_install' into /usr will not reproduce
this. If I add '-H' to that GCC command, Debian shows (I highlighted the
key difference):

  . /linux-stable/scripts/sorttable.h
  .. /linux-stable/tools/arch/x86/include/asm/orc_types.h
  ... /linux-stable/tools/include/linux/types.h
  .... /usr/lib/gcc/aarch64-linux-gnu/12/include/stdbool.h
  .... /usr/lib/gcc/aarch64-linux-gnu/12/include/stddef.h
  .... /usr/include/aarch64-linux-gnu/asm/types.h
  ..... /usr/include/asm-generic/types.h
  ...... /usr/include/asm-generic/int-ll64.h
  ....... /usr/include/aarch64-linux-gnu/asm/bitsperlong.h <-
  ........ /linux-stable/tools/include/asm-generic/bitsperlong.h
  ......... /linux-stable/tools/include/uapi/asm-generic/bitsperlong.h

Whereas Fedora shows:

  . /linux-stable/scripts/sorttable.h
  .. /linux-stable/tools/arch/x86/include/asm/orc_types.h
  ... /linux-stable/tools/include/linux/types.h
  .... /usr/lib/gcc/aarch64-redhat-linux/13/include/stdbool.h
  .... /usr/lib/gcc/aarch64-redhat-linux/13/include/stddef.h
  .... /usr/include/asm/types.h
  ..... /usr/include/asm-generic/types.h
  ...... /usr/include/asm-generic/int-ll64.h
  ....... /usr/include/asm/bitsperlong.h <-
  ........ /linux-stable/tools/include/asm-generic/bitsperlong.h
  ......... /linux-stable/tools/include/uapi/asm-generic/bitsperlong.h

Running 'gcc -fsyntax-only -v -x c /dev/null' shows:

Debian:

  #include <...> search starts here:
   /usr/lib/gcc/aarch64-linux-gnu/12/include
   /usr/local/include
   /usr/include/aarch64-linux-gnu
   /usr/include
  End of search list.

Fedora:

  #include <...> search starts here:
   /usr/lib/gcc/aarch64-redhat-linux/13/include
   /usr/local/include
   /usr/include
  End of search list.

It looks like Debian installs the architecture asm files into an
architecture specific subdirectory, which headers_install does not know
about, so the new "problematic" bitsperlong.h file gets installed to the
default location but the older one actually gets used because it has
higher priority in the include search path.

https://salsa.debian.org/kernel-team/linux/-/blob/36b9562acea404ecdc2911aeb2c4539402f441a3/debian/rules.real#L334-336

If I install/manipulate the headers as Debian does, I can reproduce this
issue in a fresh Debian container.

  # make -C /linux -j$(nproc) INSTALL_HDR_PATH=/usr O=/build headers_install
  # rm -fr /usr/include/aarch64-linux-gnu/asm
  # mv -v /usr/include/asm /usr/include/aarch64-linux-gnu
  # make -C /linux-stable -j$(nproc) ARCH=x86_64 CROSS_COMPILE=x86_64-linux-gnu- O=/build mrproper defconfig prepare
  ...
    DESCEND objtool
  In file included from /usr/include/aarch64-linux-gnu/asm/bitsperlong.h:1,
                   from /usr/include/asm-generic/int-ll64.h:12,
                   from /usr/include/asm-generic/types.h:7,
                   from /usr/include/aarch64-linux-gnu/asm/types.h:1,
                   from /linux-stable/tools/include/linux/types.h:13,
                   from /linux-stable/tools/arch/x86/include/asm/orc_types.h:9,
                   from /linux-stable/scripts/sorttable.h:96,
                   from /linux-stable/scripts/sorttable.c:201:
  /linux-stable/tools/include/asm-generic/bitsperlong.h:14:2: error: #error Inconsistent word size. Check asm/bitsperlong.h
     14 | #error Inconsistent word size. Check asm/bitsperlong.h
        |  ^~~~~
  make[3]: *** [/linux-stable/scripts/Makefile.host:114: scripts/sorttable] Error 1
  ...

> I also noticed that your command line includes CROSS_COMPILE=x86_64-linux-
> rather than CROSS_COMPILE=x86_64-linux-gnu-

Right, as I was reproducing this with your kernel.org GCC for
CROSS_COMPILE and Fedora's GCC for HOSTCC, since I wanted to make sure
this was not some issue with clang (which it does not appear to be).

Cheers,
Nathan

  reply	other threads:[~2023-07-28 23:44 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-06-22 14:13 [PATCH v3 0/2] Unify uapi bitsperlong.h Tiezhu Yang
2023-06-22 14:13 ` [PATCH v3 1/2] asm-generic: Unify uapi bitsperlong.h for arm64, riscv and loongarch Tiezhu Yang
2023-07-27 21:36   ` Nathan Chancellor
2023-07-28 11:00     ` Arnd Bergmann
2023-07-28 17:31       ` Nathan Chancellor
2023-07-28 20:56         ` Arnd Bergmann
2023-07-28 23:44           ` Nathan Chancellor [this message]
2023-07-29  7:59             ` Arnd Bergmann
2023-07-29 17:46               ` Nathan Chancellor
2023-07-29 21:12                 ` Arnd Bergmann
2023-07-31 16:04                   ` Nathan Chancellor
2023-06-22 14:13 ` [PATCH v3 2/2] tools arch: Remove uapi bitsperlong.h of hexagon and microblaze Tiezhu Yang
2023-06-22 15:09 ` [PATCH v3 0/2] Unify uapi bitsperlong.h Arnd Bergmann
2023-07-14 18:34   ` Ian Rogers
2023-07-14 19:56     ` Arnd Bergmann

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=20230728234429.GA611252@dev-arch.thelio-3990X \
    --to=nathan@kernel.org \
    --cc=arnd@arndb.de \
    --cc=bpf@vger.kernel.org \
    --cc=linux-arch@vger.kernel.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-kselftest@vger.kernel.org \
    --cc=linux-perf-users@vger.kernel.org \
    --cc=linux-riscv@lists.infradead.org \
    --cc=loongarch@lists.linux.dev \
    --cc=loongson-kernel@lists.loongnix.cn \
    --cc=yangtiezhu@loongson.cn \
    /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;
as well as URLs for NNTP newsgroup(s).