Skip to contentSkip to conversation

Enable ARCH_USE_BUILTIN_BSWAP by default

RFC In review David Woodhouse 4 participants 8 messages Oct 28, 2015 – Jan 29, 2016 Generic include/asm header files

lore
Share & tools
lore
#0 lore raw

RFC 1/1 Enable ARCH_USE_BUILTIN_BSWAP by default

Not sure we should actually *do* this, and if we did it'd be done differently. But... Fengguang, please could you add this (from
git://git.infradead.org/users/dwmw2/byteswap.git ) and we can see what breaks? Thanks.

I know MIPS will need some additional libgcc functionality brought into the kernel, and Ralf has already been looking at that; not sure about other platforms. Let's find out :)

Subject: [PATCH] TEST COMMIT: Enable CONFIG_ARCH_USE_BUILTIN_BSWAP for all
architectures

Let's see what breaks...

---
 arch/Kconfig | 1 +
 1 file changed, 1 insertion(+)
arch/Kconfig +1 -0
index 4e949e5..8680d1b 100644
@@ -144,6 +144,7 @@ config HAVE_EFFICIENT_UNALIGNED_ACCESS
 
 config ARCH_USE_BUILTIN_BSWAP
        bool
+       default y
        help
 	 Modern versions of GCC (since 4.4) have builtin functions
 	 for handling byte-swapping. Using these, instead of the old
Signature · 5 lines
2.4.3

-- 
David Woodhouse                            Open Source Technology Centre
[email protected]                              Intel Corporation
#1 lore raw

From: David Woodhouse <[email protected]>
Date: Wed, 28 Oct 2015 23:53:52 +0900

Quoted 3 lines

I know MIPS will need some additional libgcc functionality brought into the kernel, and Ralf has already been looking at that; not sure about other platforms. Let's find out :)

It should properly build on Sparc, but I still need to do my due diligence to see if gcc will actually emit the little-endian loads and stores or not...

#2 lore raw
Quoted 11 lines · David Miller

From: David Woodhouse <[email protected]>
Date: Wed, 28 Oct 2015 23:53:52 +0900

Quoted 2 lines

I know MIPS will need some additional libgcc functionality brought into the kernel, and Ralf has already been looking at that; not

sure

Quoted 1 line

about other platforms. Let's find out :)

It should properly build on Sparc, but I still need to do my due diligence to see if gcc will actually emit the little-endian loads and stores or not...

The results of the 0-day test (thanks Fengguang) seem to indicate that we need an implementation of __bswapdi2 and __bswapsi2 on SPARC, as well as blackfin, frv, m32r, m68k, microblaze, mips, mn10300, parisc and sh.

I wonder if we could provide a generic weak version in the lib/ directory which just uses the existing __arch_swab32 et al? Does GCC use a standard function call ABI for __bswap[sd]i2 or can it be 'special'?

Signature · 1 line
dwmw2
#3 lore raw
Quoted 9 lines · David Woodhouse
Quoted 8 lines · David Miller

From: David Woodhouse <[email protected]>
Date: Wed, 28 Oct 2015 23:53:52 +0900

Quoted 2 lines

I know MIPS will need some additional libgcc functionality brought into the kernel, and Ralf has already been looking at that; not

sure

Quoted 1 line

about other platforms. Let's find out :)

Quoted 8 lines
Quoted 3 lines

It should properly build on Sparc, but I still need to do my due diligence to see if gcc will actually emit the little-endian loads and stores or not...

The results of the 0-day test (thanks Fengguang) seem to indicate that we need an implementation of __bswapdi2 and __bswapsi2 on SPARC, as well as blackfin, frv, m32r, m68k, microblaze, mips, mn10300, parisc and sh.

Please note that for m68k only m68k-m5475evb_defconfig failed, so it seems to be compiler/config specific.

Gr{oetje,eeting}s,

Geert

--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- [email protected]

In personal conversations with technical people, I call myself a hacker. But when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds

#4 lore raw
In reply to David Woodhouse

From: David Woodhouse <[email protected]>
Date: Thu, 29 Oct 2015 12:06:34 +0900

Quoted 4 lines

I wonder if we could provide a generic weak version in the lib/ directory which just uses the existing __arch_swab32 et al? Does GCC use a standard function call ABI for __bswap[sd]i2 or can it be 'special'?

That's undesirable compared to inlining the asm.

#5 lore raw
In reply to David Miller

From: David Miller <[email protected]>
Date: Wed, 28 Oct 2015 18:44:15 -0700 (PDT)

Quoted 10 lines

From: David Woodhouse <[email protected]>
Date: Wed, 28 Oct 2015 23:53:52 +0900

Quoted 3 lines

I know MIPS will need some additional libgcc functionality brought into the kernel, and Ralf has already been looking at that; not sure about other platforms. Let's find out :)

It should properly build on Sparc, but I still need to do my due diligence to see if gcc will actually emit the little-endian loads and stores or not...

It does not, instead it emits libgcc calls.

So I don't I can use this on sparc.

#6 lore raw
Quoted 17 lines · David Miller

From: David Miller <[email protected]>
Date: Wed, 28 Oct 2015 18:44:15 -0700 (PDT)

Quoted 10 lines

From: David Woodhouse <[email protected]>
Date: Wed, 28 Oct 2015 23:53:52 +0900

Quoted 3 lines

I know MIPS will need some additional libgcc functionality brought into the kernel, and Ralf has already been looking at that; not sure about other platforms. Let's find out :)


It should properly build on Sparc, but I still need to do my due diligence to see if gcc will actually emit the little-endian loads and stores or not...

It does not, instead it emits libgcc calls.

So I don't I can use this on sparc.

....

Quoted 6 lines
Quoted 4 lines

I wonder if we could provide a generic weak version in the lib/ directory which just uses the existing __arch_swab32 et al? Does GCC use a standard function call ABI for __bswap[sd]i2 or can it be 'special'?

That's undesirable compared to inlining the asm.

So... GCC knows *exactly* what this builtin function does.

It is better to inline it than to call an out-of-line function.

Yet GCC emits an out-of-line call instead of just inlining it.

Is that not something we should be filing a GCC PR for?

Basically, we are working around a GCC misbehaviour by using opaque inline asm instead of the GCC builtins that *currently* happen to result in suboptimal code.

We've mostly learned our lesson *not* to do that kind of thing :)

Signature · 1 line
dwmw2
#7 lore raw
In reply to David Woodhouse

Hi David,

Quoted 4 lines · David Woodhouse

Not sure we should actually *do* this, and if we did it'd be done differently. But... Fengguang, please could you add this (from
git://git.infradead.org/users/dwmw2/byteswap.git ) and we can see what breaks? Thanks.

Sure. Here are the errors found up to now:

.

├── blackfin-BF526-EZBRD_defconfig
│   ├── include-uapi-linux-swab.h:undefined-reference-to-__bswapdi2
│   └── include-uapi-linux-swab.h:undefined-reference-to-__bswapsi2
├── blackfin-BF533-EZKIT_defconfig
│   ├── include-uapi-linux-swab.h:undefined-reference-to-__bswapdi2
│   └── include-uapi-linux-swab.h:undefined-reference-to-__bswapsi2
├── blackfin-BF561-EZKIT-SMP_defconfig
│   ├── include-uapi-linux-swab.h:undefined-reference-to-__bswapdi2
│   └── include-uapi-linux-swab.h:undefined-reference-to-__bswapsi2
├── blackfin-TCM-BF537_defconfig
│   ├── crypto-eseqiv.c:(.text):undefined-reference-to-__bswapdi2
│   ├── drivers-mtd-chips-cfi_probe.c:(.text):undefined-reference-to-__bswapsi2
│   ├── fs-binfmt_flat.c:(.text):undefined-reference-to-__bswapsi2
│   ├── (.init.text):undefined-reference-to-__bswapsi2
│   ├── kernel-bpf-core.c:(.text):undefined-reference-to-__bswapdi2
│   ├── kernel-bpf-core.c:(.text):undefined-reference-to-__bswapsi2
│   ├── lib-vsprintf.c:(.text):undefined-reference-to-__bswapsi2
│   ├── net-core-filter.c:(.text):undefined-reference-to-__bswapdi2
│   ├── net-core-filter.c:(.text):undefined-reference-to-__bswapsi2
│   └── (.text):undefined-reference-to-__bswapsi2
├── frv-defconfig
│   ├── core.c:(.text):undefined-reference-to-__bswapdi2
│   ├── core.c:(.text):undefined-reference-to-__bswapsi2
│   ├── efi.c:(.text):undefined-reference-to-__bswapdi2
│   ├── efi.c:(.text):undefined-reference-to-__bswapsi2
│   ├── find_bit.c:(.text):undefined-reference-to-__bswapsi2
│   └── (.text):undefined-reference-to-__bswapsi2
├── m32r-m32104ut_defconfig
│   ├── ERROR:__bswapdi2-drivers-md-dm-crypt.ko-undefined
│   ├── ERROR:__bswapdi2-drivers-md-dm-snapshot.ko-undefined
│   ├── ERROR:__bswapdi2-fs-udf-udf.ko-undefined
│   ├── ERROR:__bswapsi2-crypto-des_generic.ko-undefined
│   ├── ERROR:__bswapsi2-crypto-md4.ko-undefined
│   ├── ERROR:__bswapsi2-crypto-md5.ko-undefined
│   ├── ERROR:__bswapsi2-crypto-serpent_generic.ko-undefined
│   ├── ERROR:__bswapsi2-crypto-twofish_generic.ko-undefined
│   ├── ERROR:__bswapsi2-drivers-md-dm-crypt.ko-undefined
│   ├── ERROR:__bswapsi2-drivers-md-dm-snapshot.ko-undefined
│   └── ERROR:__bswapsi2-fs-udf-udf.ko-undefined
├── m32r-mappi3.smp_defconfig
│   └── ERROR:__bswapsi2-fs-fat-fat.ko-undefined
├── m32r-opsput_defconfig
│   ├── ERROR:__bswapdi2-fs-udf-udf.ko-undefined
│   ├── ERROR:__bswapsi2-fs-fat-fat.ko-undefined
│   └── ERROR:__bswapsi2-fs-udf-udf.ko-undefined
├── m68k-m5475evb_defconfig
│   ├── efi.c:(.text):undefined-reference-to-__bswapdi2
│   ├── find_bit.c:(.text):undefined-reference-to-__bswapsi2
│   ├── (.init.text):undefined-reference-to-__bswapdi2
│   ├── (.init.text):undefined-reference-to-__bswapsi2
│   ├── pci.c:(.text):undefined-reference-to-__bswapsi2
│   ├── super.c:(.text):undefined-reference-to-__bswapdi2
│   ├── super.c:(.text):undefined-reference-to-__bswapsi2
│   └── (.text):undefined-reference-to-__bswapsi2
├── microblaze-allnoconfig
│   ├── arch-microblaze-kernel-intc.o:(.text):undefined-reference-to-__bswapsi2
│   ├── arch-microblaze-kernel-timer.o:(.text):undefined-reference-to-__bswapsi2
│   └── (.text):undefined-reference-to-__bswapsi2
├── microblaze-mmu_defconfig
│   ├── fs-cifs-cifssmb.c:undefined-reference-to-__bswapdi2
│   ├── include-uapi-linux-swab.h:undefined-reference-to-__bswapdi2
│   └── include-uapi-linux-swab.h:undefined-reference-to-__bswapsi2
├── microblaze-nommu_defconfig
│   ├── include-uapi-linux-swab.h:undefined-reference-to-__bswapdi2
│   └── include-uapi-linux-swab.h:undefined-reference-to-__bswapsi2
├── mips-bcm63xx_defconfig
│   ├── aes_generic.c:(.text):undefined-reference-to-__bswapsi2
│   ├── efi.c:(.text):undefined-reference-to-__bswapdi2
│   ├── efi.c:(.text):undefined-reference-to-__bswapsi2
│   ├── find_bit.c:(.text):undefined-reference-to-__bswapsi2
│   ├── generic-chip.c:(.text):undefined-reference-to-__bswapsi2
│   └── (.text):undefined-reference-to-__bswapsi2
├── mips-fuloong2e_defconfig
│   ├── commit.c:(.text):undefined-reference-to-__bswapdi2
│   ├── commit.c:(.text):undefined-reference-to-__bswapsi2
│   ├── core.c:(.text):undefined-reference-to-__bswapdi2
│   ├── core.c:(.text):undefined-reference-to-__bswapsi2
│   ├── eseqiv.c:(.text):undefined-reference-to-__bswapdi2
│   ├── filter.c:(.text):undefined-reference-to-__bswapdi2
│   ├── filter.c:(.text):undefined-reference-to-__bswapsi2
│   ├── recovery.c:(.text):undefined-reference-to-__bswapdi2
│   ├── recovery.c:(.text):undefined-reference-to-__bswapsi2
│   ├── revoke.c:(.text):undefined-reference-to-__bswapsi2
│   ├── (.text):undefined-reference-to-__bswapsi2
│   └── vsprintf.c:(.text):undefined-reference-to-__bswapsi2
├── mips-rbtx49xx_defconfig
│   ├── efi.c:(.text):undefined-reference-to-__bswapdi2
│   ├── efi.c:(.text):undefined-reference-to-__bswapsi2
│   ├── find_bit.c:(.text):undefined-reference-to-__bswapsi2
│   ├── (.init.text):undefined-reference-to-__bswapdi2
│   ├── (.init.text):undefined-reference-to-__bswapsi2
│   └── (.text):undefined-reference-to-__bswapsi2
├── mips-rm200_defconfig
│   ├── commit.c:(.text):undefined-reference-to-__bswapdi2
│   ├── commit.c:(.text):undefined-reference-to-__bswapsi2
│   ├── core.c:(.text):undefined-reference-to-__bswapdi2
│   ├── core.c:(.text):undefined-reference-to-__bswapsi2
│   ├── eseqiv.c:(.text):undefined-reference-to-__bswapdi2
│   ├── filter.c:(.text):undefined-reference-to-__bswapdi2
│   ├── filter.c:(.text):undefined-reference-to-__bswapsi2
│   ├── recovery.c:(.text):undefined-reference-to-__bswapdi2
│   ├── recovery.c:(.text):undefined-reference-to-__bswapsi2
│   ├── revoke.c:(.text):undefined-reference-to-__bswapsi2
│   ├── (.text):undefined-reference-to-__bswapsi2
│   └── vsprintf.c:(.text):undefined-reference-to-__bswapsi2
├── mips-txx9
│   ├── 8250_early.c:(.init.text):undefined-reference-to-__bswapsi2
│   ├── core.c:(.text):undefined-reference-to-__bswapdi2
│   ├── des_generic.c:(.text):undefined-reference-to-__bswapsi2
│   ├── dm-log.c:(.text):undefined-reference-to-__bswapdi2
│   ├── dm-log.c:(.text):undefined-reference-to-__bswapsi2
│   ├── efi.c:(.text):undefined-reference-to-__bswapdi2
│   ├── efi.c:(.text):undefined-reference-to-__bswapsi2
│   ├── extents.c:(.text):undefined-reference-to-__bswapdi2
│   ├── extents.c:(.text):undefined-reference-to-__bswapsi2
│   ├── find_bit.c:(.text):undefined-reference-to-__bswapsi2
│   ├── ibss.c:(.text):undefined-reference-to-__bswapdi2
│   ├── (.init.text):undefined-reference-to-__bswapdi2
│   ├── (.init.text):undefined-reference-to-__bswapsi2
│   ├── libata-scsi.c:(.text):undefined-reference-to-__bswapdi2
│   ├── linear.c:(.text):undefined-reference-to-__bswapsi2
│   ├── md.c:(.text):undefined-reference-to-__bswapdi2
│   ├── md.c:(.text):undefined-reference-to-__bswapsi2
│   ├── migrate.c:(.text):undefined-reference-to-__bswapsi2
│   ├── mlme.c:(.text):undefined-reference-to-__bswapdi2
│   ├── mlme.c:(.text):undefined-reference-to-__bswapsi2
│   ├── mmp.c:(.text):undefined-reference-to-__bswapdi2
│   ├── mmp.c:(.text):undefined-reference-to-__bswapsi2
│   ├── quota_v2.c:(.text):undefined-reference-to-__bswapdi2
│   ├── quota_v2.c:(.text):undefined-reference-to-__bswapsi2
│   ├── super.c:(.text):undefined-reference-to-__bswapdi2
│   ├── super.c:(.text):undefined-reference-to-__bswapsi2
│   ├── (.text):undefined-reference-to-__bswapsi2
│   ├── vht.c:(.text):undefined-reference-to-__bswapsi2
│   ├── xattr.c:(.text):undefined-reference-to-__bswapdi2
│   └── xattr.c:(.text):undefined-reference-to-__bswapsi2
├── mn10300-asb2364_defconfig
│   ├── crypto-compress.c:undefined-reference-to-__bswapdi2
│   ├── drivers-video-fbdev-core-fb_notify.c:undefined-reference-to-__bswapsi2
│   ├── fs-readdir.c:undefined-reference-to-__bswapdi2
│   ├── fs-readdir.c:undefined-reference-to-__bswapsi2
│   ├── lib-halfmd4.c:undefined-reference-to-__bswapsi2
│   ├── net-core-netevent.c:undefined-reference-to-__bswapdi2
│   ├── net-core-netevent.c:undefined-reference-to-__bswapsi2
│   └── vsprintf.c:(.text):undefined-reference-to-__bswapsi2
├── parisc-c3000_defconfig
│   ├── ERROR:__bswapdi2-drivers-block-umem.ko-undefined
│   ├── ERROR:__bswapdi2-drivers-md-dm-crypt.ko-undefined
│   ├── ERROR:__bswapdi2-drivers-md-dm-log.ko-undefined
│   ├── ERROR:__bswapdi2-drivers-md-dm-snapshot.ko-undefined
│   ├── ERROR:__bswapdi2-drivers-message-fusion-mptbase.ko-undefined
│   ├── ERROR:__bswapdi2-drivers-net-ethernet-intel-e1000-e1000.ko-undefined
│   ├── ERROR:__bswapsi2-crypto-des_generic.ko-undefined
│   ├── ERROR:__bswapsi2-crypto-md5.ko-undefined
│   ├── ERROR:__bswapsi2-drivers-block-cryptoloop.ko-undefined
│   ├── ERROR:__bswapsi2-drivers-block-umem.ko-undefined
│   ├── ERROR:__bswapsi2-drivers-md-dm-crypt.ko-undefined
│   ├── ERROR:__bswapsi2-drivers-md-dm-log.ko-undefined
│   ├── ERROR:__bswapsi2-drivers-md-dm-snapshot.ko-undefined
│   ├── ERROR:__bswapsi2-drivers-message-fusion-mptbase.ko-undefined
│   ├── ERROR:__bswapsi2-drivers-message-fusion-mptctl.ko-undefined
│   ├── ERROR:__bswapsi2-drivers-message-fusion-mptscsih.ko-undefined
│   ├── ERROR:__bswapsi2-drivers-message-fusion-mptspi.ko-undefined
│   ├── ERROR:__bswapsi2-drivers-net-ethernet-alteon-acenic.ko-undefined
│   ├── ERROR:__bswapsi2-drivers-net-ethernet-broadcom-tg3.ko-undefined
│   ├── ERROR:__bswapsi2-drivers-net-ethernet-dec-tulip-de2104x.ko-undefined
│   ├── ERROR:__bswapsi2-drivers-net-ethernet-intel-e1000-e1000.ko-undefined
│   ├── ERROR:__bswapsi2-drivers-net-ethernet-intel-e100.ko-undefined
│   ├── ERROR:__bswapsi2-drivers-scsi-scsi_debug.ko-undefined
│   ├── ERROR:__bswapsi2-drivers-usb-storage-usb-storage.ko-undefined
│   ├── ERROR:__bswapsi2-fs-fat-fat.ko-undefined
│   └── ERROR:__bswapsi2-fs-xfs-xfs.ko-undefined
├── parisc-defconfig
│   ├── ERROR:__bswapdi2-crypto-tgr192.ko-undefined
│   ├── ERROR:__bswapdi2-fs-cifs-cifs.ko-undefined
│   ├── ERROR:__bswapsi2-crypto-md4.ko-undefined
│   ├── ERROR:__bswapsi2-crypto-michael_mic.ko-undefined
│   ├── ERROR:__bswapsi2-crypto-serpent_generic.ko-undefined
│   ├── ERROR:__bswapsi2-crypto-tea.ko-undefined
│   ├── ERROR:__bswapsi2-crypto-tgr192.ko-undefined
│   ├── ERROR:__bswapsi2-crypto-twofish_generic.ko-undefined
│   └── ERROR:__bswapsi2-fs-cifs-cifs.ko-undefined
├── parisc-generic-64bit_defconfig
│   ├── ERROR:__bswapdi2-drivers-md-dm-raid.ko-undefined
│   ├── ERROR:__bswapdi2-drivers-md-md-mod.ko-undefined
│   ├── ERROR:__bswapdi2-drivers-net-ethernet-qlogic-qlcnic-qlcnic.ko-undefined
│   ├── ERROR:__bswapdi2-drivers-net-ethernet-qlogic-qlge-qlge.ko-undefined
│   ├── ERROR:__bswapdi2-drivers-scsi-qla4xxx-qla4xxx.ko-undefined
│   ├── ERROR:__bswapdi2-drivers-usb-host-xhci-hcd.ko-undefined
│   ├── ERROR:__bswapdi2-fs-btrfs-btrfs.ko-undefined
│   ├── ERROR:__bswapsi2-crypto-des_generic.ko-undefined
│   ├── ERROR:__bswapsi2-crypto-md4.ko-undefined
│   ├── ERROR:__bswapsi2-drivers-ide-ide-gd_mod.ko-undefined
│   ├── ERROR:__bswapsi2-drivers-md-dm-raid.ko-undefined
│   ├── ERROR:__bswapsi2-drivers-md-md-mod.ko-undefined
│   ├── ERROR:__bswapsi2-drivers-mfd-sm501.ko-undefined
│   ├── ERROR:__bswapsi2-drivers-net-ethernet-hp-hp100.ko-undefined
│   ├── ERROR:__bswapsi2-drivers-net-ethernet-qlogic-qla3xxx.ko-undefined
│   ├── ERROR:__bswapsi2-drivers-net-ethernet-qlogic-qlcnic-qlcnic.ko-undefined
│   ├── ERROR:__bswapsi2-drivers-net-ethernet-qlogic-qlge-qlge.ko-undefined
│   ├── ERROR:__bswapsi2-drivers-scsi-53c700.ko-undefined
│   ├── ERROR:__bswapsi2-drivers-scsi-qla4xxx-qla4xxx.ko-undefined
│   ├── ERROR:__bswapsi2-drivers-ssb-ssb.ko-undefined
│   ├── ERROR:__bswapsi2-drivers-tty-nozomi.ko-undefined
│   ├── ERROR:__bswapsi2-drivers-tty-serial-jsm-jsm.ko-undefined
│   ├── ERROR:__bswapsi2-drivers-usb-host-xhci-hcd.ko-undefined
│   ├── ERROR:__bswapsi2-fs-btrfs-btrfs.ko-undefined
│   └── ERROR:__bswapsi2-fs-fat-fat.ko-undefined
├── sh-allnoconfig
│   ├── (.text):undefined-reference-to-__bswapsi2
│   └── vsprintf.c:(.text):undefined-reference-to-__bswapsi2
├── sh-dreamcast_defconfig
│   ├── cdrom.c:(.text):undefined-reference-to-__bswapsi2
│   ├── core.c:(.text):undefined-reference-to-__bswapdi2
│   ├── core.c:(.text):undefined-reference-to-__bswapsi2
│   ├── eseqiv.c:(.text):undefined-reference-to-__bswapdi2
│   ├── filter.c:(.text):undefined-reference-to-__bswapdi2
│   ├── filter.c:(.text):undefined-reference-to-__bswapsi2
│   ├── gdrom.c:(.text):undefined-reference-to-__bswapsi2
│   ├── (.text):undefined-reference-to-__bswapsi2
│   └── vsprintf.c:(.text):undefined-reference-to-__bswapsi2
├── sh-ecovec24-romimage_defconfig
│   ├── core.c:(.text):undefined-reference-to-__bswapdi2
│   ├── core.c:(.text):undefined-reference-to-__bswapsi2
│   ├── decompress_unlzo.c:(.init.text):undefined-reference-to-__bswapsi2
│   ├── eseqiv.c:(.text):undefined-reference-to-__bswapdi2
│   ├── filter.c:(.text):undefined-reference-to-__bswapdi2
│   ├── filter.c:(.text):undefined-reference-to-__bswapsi2
│   ├── sd.c:(.text):undefined-reference-to-__bswapdi2
│   ├── sd.c:(.text):undefined-reference-to-__bswapsi2
│   ├── sha256_generic.c:(.text):undefined-reference-to-__bswapdi2
│   ├── sha256_generic.c:(.text):undefined-reference-to-__bswapsi2
│   ├── sh_eth.c:(.text):undefined-reference-to-__bswapsi2
│   ├── (.text):undefined-reference-to-__bswapsi2
│   └── vsprintf.c:(.text):undefined-reference-to-__bswapsi2
├── sh-rsk7264_defconfig
│   ├── efi.c:(.text):undefined-reference-to-__bswapdi2
│   ├── find_bit.c:(.text):undefined-reference-to-__bswapsi2
│   ├── (.init.text):undefined-reference-to-__bswapdi2
│   ├── (.init.text):undefined-reference-to-__bswapsi2
│   ├── super.c:(.text):undefined-reference-to-__bswapdi2
│   ├── super.c:(.text):undefined-reference-to-__bswapsi2
│   └── (.text):undefined-reference-to-__bswapsi2
├── sh-rsk7269_defconfig
│   ├── balloc.c:(.text):undefined-reference-to-__bswapsi2
│   ├── core.c:(.text):undefined-reference-to-__bswapdi2
│   ├── core.c:(.text):undefined-reference-to-__bswapsi2
│   ├── efi.c:(.text):undefined-reference-to-__bswapdi2
│   ├── efi.c:(.text):undefined-reference-to-__bswapsi2
│   ├── extents.c:(.text):undefined-reference-to-__bswapdi2
│   ├── extents.c:(.text):undefined-reference-to-__bswapsi2
│   ├── find_bit.c:(.text):undefined-reference-to-__bswapsi2
│   ├── indirect.c:(.text):undefined-reference-to-__bswapsi2
│   ├── migrate.c:(.text):undefined-reference-to-__bswapsi2
│   ├── mmp.c:(.text):undefined-reference-to-__bswapdi2
│   ├── mmp.c:(.text):undefined-reference-to-__bswapsi2
│   ├── super.c:(.text):undefined-reference-to-__bswapdi2
│   ├── super.c:(.text):undefined-reference-to-__bswapsi2
│   ├── (.text):undefined-reference-to-__bswapsi2
│   ├── xattr.c:(.text):undefined-reference-to-__bswapdi2
│   └── xattr.c:(.text):undefined-reference-to-__bswapsi2
├── sh-se7206_defconfig
│   ├── efi.c:(.text):undefined-reference-to-__bswapdi2
│   ├── find_bit.c:(.text):undefined-reference-to-__bswapsi2
│   ├── (.init.text):undefined-reference-to-__bswapdi2
│   ├── (.init.text):undefined-reference-to-__bswapsi2
│   ├── super.c:(.text):undefined-reference-to-__bswapdi2
│   ├── super.c:(.text):undefined-reference-to-__bswapsi2
│   └── (.text):undefined-reference-to-__bswapsi2
├── sh-se7751_defconfig
│   ├── cfi_probe.c:(.text):undefined-reference-to-__bswapsi2
│   ├── core.c:(.text):undefined-reference-to-__bswapdi2
│   ├── core.c:(.text):undefined-reference-to-__bswapsi2
│   ├── eseqiv.c:(.text):undefined-reference-to-__bswapdi2
│   ├── filter.c:(.text):undefined-reference-to-__bswapdi2
│   ├── filter.c:(.text):undefined-reference-to-__bswapsi2
│   ├── (.init.text):undefined-reference-to-__bswapsi2
│   ├── (.text):undefined-reference-to-__bswapsi2
│   └── vsprintf.c:(.text):undefined-reference-to-__bswapsi2
├── sh-sh7785lcr_32bit_defconfig
│   ├── arch-sh-include-asm-bitops-llsc.h:undefined-reference-to-__bswapsi2
│   ├── arch-sh-include-asm-unaligned-sh4a.h:undefined-reference-to-__bswapdi2
│   ├── arch-sh-include-uapi-asm-swab.h:undefined-reference-to-__bswapsi2
│   ├── arch-sh-kernel-iomap.c:undefined-reference-to-__bswapsi2
│   ├── drivers-mtd-chips-cfi_probe.c:undefined-reference-to-__bswapsi2
│   ├── drivers-scsi-scsi_scan.c:undefined-reference-to-__bswapsi2
│   ├── drivers-scsi-sd.c:undefined-reference-to-__bswapdi2
│   ├── drivers-scsi-sd.c:undefined-reference-to-__bswapsi2
│   ├── fs-ext4-ext4.h:undefined-reference-to-__bswapsi2
│   ├── fs-jbd2-journal.c:undefined-reference-to-__bswapsi2
│   ├── fs-jbd2-recovery.c:undefined-reference-to-__bswapsi2
│   ├── fs-jbd2-revoke.c:undefined-reference-to-__bswapdi2
│   ├── fs-jbd2-revoke.c:undefined-reference-to-__bswapsi2
│   ├── fs-lockd-clnt4xdr.c:undefined-reference-to-__bswapdi2
│   ├── fs-lockd-xdr4.c:undefined-reference-to-__bswapdi2
│   ├── fs-lockd-xdr4.c:undefined-reference-to-__bswapsi2
│   ├── fs-nfs-callback_xdr.c:undefined-reference-to-__bswapsi2
│   ├── fs-nfs-delegation.c:undefined-reference-to-__bswapsi2
│   ├── fs-nfs-nfs3xdr.c:undefined-reference-to-__bswapdi2
│   ├── fs-nfs-nfs3xdr.c:undefined-reference-to-__bswapsi2
│   ├── fs-nfs-nfs4xdr.c:undefined-reference-to-__bswapdi2
│   ├── fs-nfs-nfs4xdr.c:undefined-reference-to-__bswapsi2
│   ├── include-asm-generic-preempt.h:undefined-reference-to-__bswapsi2
│   ├── include-crypto-scatterwalk.h:undefined-reference-to-__bswapdi2
│   ├── include-linux-buffer_head.h:undefined-reference-to-__bswapsi2
│   ├── include-linux-jbd2.h:undefined-reference-to-__bswapdi2
│   ├── include-linux-jbd2.h:undefined-reference-to-__bswapsi2
│   ├── include-scsi-scsi_device.h:undefined-reference-to-__bswapdi2
│   ├── include-scsi-scsi_device.h:undefined-reference-to-__bswapsi2
│   ├── include-scsi-scsi.h:undefined-reference-to-__bswapsi2
│   ├── include-uapi-linux-swab.h:undefined-reference-to-__bswapsi2
│   ├── init-do_mounts_rd.c:undefined-reference-to-__bswapsi2
│   ├── kernel-bpf-core.c:undefined-reference-to-__bswapdi2
│   ├── kernel-bpf-core.c:undefined-reference-to-__bswapsi2
│   ├── lib-crc32.c:undefined-reference-to-__bswapsi2
│   ├── lib-sha1.c:undefined-reference-to-__bswapsi2
│   ├── lib-vsprintf.c:undefined-reference-to-__bswapsi2
│   ├── net-core-filter.c:undefined-reference-to-__bswapdi2
│   ├── net-core-filter.c:undefined-reference-to-__bswapsi2
│   ├── net-core-tso.c:undefined-reference-to-__bswapsi2
│   ├── net-ipv4-ipconfig.c:undefined-reference-to-__bswapsi2
│   ├── net-ipv4-ip_forward.c:undefined-reference-to-__bswapsi2
│   ├── net-ipv4-ip_options.c:undefined-reference-to-__bswapsi2
│   ├── net-sunrpc-auth_gss-gss_rpc_xdr.c:undefined-reference-to-__bswapdi2
│   └── net-sunrpc-auth_gss-gss_rpc_xdr.c:undefined-reference-to-__bswapsi2
├── sh-titan_defconfig
│   ├── commit.c:(.text):undefined-reference-to-__bswapdi2
│   ├── commit.c:(.text):undefined-reference-to-__bswapsi2
│   ├── core.c:(.text):undefined-reference-to-__bswapdi2
│   ├── core.c:(.text):undefined-reference-to-__bswapsi2
│   ├── eseqiv.c:(.text):undefined-reference-to-__bswapdi2
│   ├── esp4.c:(.text):undefined-reference-to-__bswapdi2
│   ├── esp4.c:(.text):undefined-reference-to-__bswapsi2
│   ├── esp6.c:(.text):undefined-reference-to-__bswapdi2
│   ├── esp6.c:(.text):undefined-reference-to-__bswapsi2
│   ├── filter.c:(.text):undefined-reference-to-__bswapdi2
│   ├── filter.c:(.text):undefined-reference-to-__bswapsi2
│   ├── (.init.text):undefined-reference-to-__bswapsi2
│   ├── ipcomp6.c:(.text):undefined-reference-to-__bswapsi2
│   ├── ipcomp.c:(.text):undefined-reference-to-__bswapsi2
│   ├── journal.c:(.text):undefined-reference-to-__bswapsi2
│   ├── recovery.c:(.text):undefined-reference-to-__bswapdi2
│   ├── recovery.c:(.text):undefined-reference-to-__bswapsi2
│   ├── revoke.c:(.text):undefined-reference-to-__bswapsi2
│   ├── sha1_generic.c:(.text):undefined-reference-to-__bswapdi2
│   ├── super.c:(.text):undefined-reference-to-__bswapsi2
│   ├── (.text):undefined-reference-to-__bswapsi2
│   ├── vsprintf.c:(.text):undefined-reference-to-__bswapsi2
│   ├── xfrm4_policy.c:(.text):undefined-reference-to-__bswapsi2
│   └── xfrm4_state.c:(.text):undefined-reference-to-__bswapsi2
├── sparc64-allnoconfig
│   ├── find_bit.c:(.text):undefined-reference-to-__bswapdi2
│   └── (.text):undefined-reference-to-__bswapsi2
├── sparc64-defconfig
│   ├── balloc.c:(.text):undefined-reference-to-__bswapsi2
│   ├── core.c:(.text):undefined-reference-to-__bswapdi2
│   ├── core.c:(.text):undefined-reference-to-__bswapsi2
│   ├── efi.c:(.text):undefined-reference-to-__bswapdi2
│   ├── efi.c:(.text):undefined-reference-to-__bswapsi2
│   ├── extents.c:(.text):undefined-reference-to-__bswapdi2
│   ├── extents.c:(.text):undefined-reference-to-__bswapsi2
│   ├── find_bit.c:(.text):undefined-reference-to-__bswapdi2
│   ├── ide-disk.c:(.text):undefined-reference-to-__bswapsi2
│   ├── migrate.c:(.text):undefined-reference-to-__bswapsi2
│   ├── mmp.c:(.text):undefined-reference-to-__bswapdi2
│   ├── mmp.c:(.text):undefined-reference-to-__bswapsi2
│   ├── proc.c:(.text):undefined-reference-to-__bswapsi2
│   ├── resize.c:(.text):undefined-reference-to-__bswapsi2
│   ├── super.c:(.text):undefined-reference-to-__bswapdi2
│   ├── super.c:(.text):undefined-reference-to-__bswapsi2
│   ├── (.text):undefined-reference-to-__bswapsi2
│   ├── xattr.c:(.text):undefined-reference-to-__bswapdi2
│   └── xattr.c:(.text):undefined-reference-to-__bswapsi2
└── sparc-defconfig
    ├── core.c:(.text):undefined-reference-to-__bswapdi2
    ├── core.c:(.text):undefined-reference-to-__bswapsi2
    ├── efi.c:(.text):undefined-reference-to-__bswapdi2
    ├── efi.c:(.text):undefined-reference-to-__bswapsi2
    ├── find_bit.c:(.text):undefined-reference-to-__bswapsi2
    ├── (.init.text):undefined-reference-to-__bswapdi2
    ├── (.init.text):undefined-reference-to-__bswapsi2
    ├── pcic.c:(.text):undefined-reference-to-__bswapsi2
    ├── super.c:(.text):undefined-reference-to-__bswapdi2
    ├── super.c:(.text):undefined-reference-to-__bswapsi2
    └── (.text):undefined-reference-to-__bswapsi2

Thanks,
Fengguang