diff mbox series

[1/2] microblaze: fix endian handling

Message ID 20180102114720.3408356-1-arnd@arndb.de
State Accepted
Commit 71e7673dadfdae0605d4c1f66ecb4b045c79fe0f
Headers show
Series [1/2] microblaze: fix endian handling | expand

Commit Message

Arnd Bergmann Jan. 2, 2018, 11:47 a.m. UTC
Building an allmodconfig kernel fails horribly because of
endian mismatch. It turns out that the -mlittle-endian
switch was not honored at all as we were using the wrong
Kconfig symbol and failing to apply CPUFLAGS to the CFLAGS.
Finally, the linker flags did not get set right.

This addresses all three of those issues, which now lets
me build both big-endian and little-endian kernels for
testing.

Fixes: 428dbf156cc5 ("arch: change default endian for microblaze")
Fixes: 206d3642d8ee ("arch/microblaze: add choice for endianness and update Makefile")
Signed-off-by: Arnd Bergmann <arnd@arndb.de>

---
 arch/microblaze/Makefile | 17 +++++++++++------
 1 file changed, 11 insertions(+), 6 deletions(-)

-- 
2.9.0

Comments

kernel test robot Jan. 14, 2018, 1:01 a.m. UTC | #1
Hi Arnd,

I love your patch! Yet something to improve:

[auto build test ERROR on linus/master]
[also build test ERROR on v4.15-rc7 next-20180112]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]

url:    https://github.com/0day-ci/linux/commits/Arnd-Bergmann/microblaze-fix-endian-handling/20180105-120705
config: microblaze-mmu_defconfig (attached as .config)
compiler: microblaze-linux-gcc (GCC) 7.2.0
reproduce:
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # save the attached .config to linux build tree
        make.cross ARCH=microblaze 

All errors (new ones prefixed by >>):

>> arch/microblaze/lib/fastcopy.S:33:2: error: #error Microblaze LE not support ASM optimized lib func. Disable OPT_LIB_ASM.

    #error Microblaze LE not support ASM optimized lib func. Disable OPT_LIB_ASM.
     ^~~~~

vim +33 arch/microblaze/lib/fastcopy.S

de93c3c1 Michal Simek 2011-01-28 @33  #error Microblaze LE not support ASM optimized lib func. Disable OPT_LIB_ASM.
de93c3c1 Michal Simek 2011-01-28  34  #endif
de93c3c1 Michal Simek 2011-01-28  35  

:::::: The code at line 33 was first introduced by commit
:::::: de93c3c119382cb888ca8a94b642dbcf8035525e microblaze: Fix ASM optimized code for LE

:::::: TO: Michal Simek <monstr@monstr.eu>
:::::: CC: Michal Simek <monstr@monstr.eu>

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation
Arnd Bergmann Jan. 15, 2018, 9:29 a.m. UTC | #2
On Sun, Jan 14, 2018 at 2:01 AM, kbuild test robot <lkp@intel.com> wrote:
> Hi Arnd,

>

> I love your patch! Yet something to improve:

>

> [auto build test ERROR on linus/master]

> [also build test ERROR on v4.15-rc7 next-20180112]

> [if your patch is applied to the wrong git tree, please drop us a note to help improve the system]

>

> url:    https://github.com/0day-ci/linux/commits/Arnd-Bergmann/microblaze-fix-endian-handling/20180105-120705

> config: microblaze-mmu_defconfig (attached as .config)

> compiler: microblaze-linux-gcc (GCC) 7.2.0

> reproduce:

>         wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross

>         chmod +x ~/bin/make.cross

>         # save the attached .config to linux build tree

>         make.cross ARCH=microblaze

>

> All errors (new ones prefixed by >>):

>

>>> arch/microblaze/lib/fastcopy.S:33:2: error: #error Microblaze LE not support ASM optimized lib func. Disable OPT_LIB_ASM.

>     #error Microblaze LE not support ASM optimized lib func. Disable OPT_LIB_ASM.

>      ^~~~~

>

> vim +33 arch/microblaze/lib/fastcopy.S

>


This seems to be a result of fixing one bug so we run into one that we didn't
get to earlier. I still assume my patch is correct.

      Arnd
Michal Simek Jan. 15, 2018, 10:14 a.m. UTC | #3
On 15.1.2018 10:29, Arnd Bergmann wrote:
> On Sun, Jan 14, 2018 at 2:01 AM, kbuild test robot <lkp@intel.com> wrote:

>> Hi Arnd,

>>

>> I love your patch! Yet something to improve:

>>

>> [auto build test ERROR on linus/master]

>> [also build test ERROR on v4.15-rc7 next-20180112]

>> [if your patch is applied to the wrong git tree, please drop us a note to help improve the system]

>>

>> url:    https://github.com/0day-ci/linux/commits/Arnd-Bergmann/microblaze-fix-endian-handling/20180105-120705

>> config: microblaze-mmu_defconfig (attached as .config)

>> compiler: microblaze-linux-gcc (GCC) 7.2.0

>> reproduce:

>>         wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross

>>         chmod +x ~/bin/make.cross

>>         # save the attached .config to linux build tree

>>         make.cross ARCH=microblaze

>>

>> All errors (new ones prefixed by >>):

>>

>>>> arch/microblaze/lib/fastcopy.S:33:2: error: #error Microblaze LE not support ASM optimized lib func. Disable OPT_LIB_ASM.

>>     #error Microblaze LE not support ASM optimized lib func. Disable OPT_LIB_ASM.

>>      ^~~~~

>>

>> vim +33 arch/microblaze/lib/fastcopy.S

>>

> 

> This seems to be a result of fixing one bug so we run into one that we didn't

> get to earlier. I still assume my patch is correct.


I will look at this later this week. Xilinx toolchain which I use
normally are microblaze for BE or microblazeel that's why proper flags
are default options already that's why I didn't see any issue.

Did you take toolchain from kernel.org?
https://www.kernel.org/pub/tools/crosstool/files/bin/x86_64/4.9.0/

Thanks,
Michal

-- 
Michal Simek, Ing. (M.Eng), OpenPGP -> KeyID: FE3D1F91
w: www.monstr.eu p: +42-0-721842854
Maintainer of Linux kernel - Xilinx Microblaze
Maintainer of Linux kernel - Xilinx Zynq ARM and ZynqMP ARM64 SoCs
U-Boot custodian - Xilinx Microblaze/Zynq/ZynqMP SoCs
Arnd Bergmann Jan. 15, 2018, 10:19 a.m. UTC | #4
On Mon, Jan 15, 2018 at 11:14 AM, Michal Simek <monstr@monstr.eu> wrote:
> On 15.1.2018 10:29, Arnd Bergmann wrote:

>> On Sun, Jan 14, 2018 at 2:01 AM, kbuild test robot <lkp@intel.com> wrote:

>>> Hi Arnd,

>>>

>>> I love your patch! Yet something to improve:

>>>

>>> [auto build test ERROR on linus/master]

>>> [also build test ERROR on v4.15-rc7 next-20180112]

>>> [if your patch is applied to the wrong git tree, please drop us a note to help improve the system]

>>>

>>> url:    https://github.com/0day-ci/linux/commits/Arnd-Bergmann/microblaze-fix-endian-handling/20180105-120705

>>> config: microblaze-mmu_defconfig (attached as .config)

>>> compiler: microblaze-linux-gcc (GCC) 7.2.0

>>> reproduce:

>>>         wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross

>>>         chmod +x ~/bin/make.cross

>>>         # save the attached .config to linux build tree

>>>         make.cross ARCH=microblaze

>>>

>>> All errors (new ones prefixed by >>):

>>>

>>>>> arch/microblaze/lib/fastcopy.S:33:2: error: #error Microblaze LE not support ASM optimized lib func. Disable OPT_LIB_ASM.

>>>     #error Microblaze LE not support ASM optimized lib func. Disable OPT_LIB_ASM.

>>>      ^~~~~

>>>

>>> vim +33 arch/microblaze/lib/fastcopy.S

>>>

>>

>> This seems to be a result of fixing one bug so we run into one that we didn't

>> get to earlier. I still assume my patch is correct.

>

> I will look at this later this week. Xilinx toolchain which I use

> normally are microblaze for BE or microblazeel that's why proper flags

> are default options already that's why I didn't see any issue.

>

> Did you take toolchain from kernel.org?

> https://www.kernel.org/pub/tools/crosstool/files/bin/x86_64/4.9.0/


I used a gcc-7.2.1 that I built myself for all architectures in order to debug
a gcc issue that appeared in gcc-7.2.

The patch that got tested was my workaround for an obviously broken
allmodconfig build.

         Arnd
Michal Simek Jan. 17, 2018, 12:57 p.m. UTC | #5
On 15.1.2018 11:19, Arnd Bergmann wrote:
> On Mon, Jan 15, 2018 at 11:14 AM, Michal Simek <monstr@monstr.eu> wrote:

>> On 15.1.2018 10:29, Arnd Bergmann wrote:

>>> On Sun, Jan 14, 2018 at 2:01 AM, kbuild test robot <lkp@intel.com> wrote:

>>>> Hi Arnd,

>>>>

>>>> I love your patch! Yet something to improve:

>>>>

>>>> [auto build test ERROR on linus/master]

>>>> [also build test ERROR on v4.15-rc7 next-20180112]

>>>> [if your patch is applied to the wrong git tree, please drop us a note to help improve the system]

>>>>

>>>> url:    https://github.com/0day-ci/linux/commits/Arnd-Bergmann/microblaze-fix-endian-handling/20180105-120705

>>>> config: microblaze-mmu_defconfig (attached as .config)

>>>> compiler: microblaze-linux-gcc (GCC) 7.2.0

>>>> reproduce:

>>>>         wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross

>>>>         chmod +x ~/bin/make.cross

>>>>         # save the attached .config to linux build tree

>>>>         make.cross ARCH=microblaze

>>>>

>>>> All errors (new ones prefixed by >>):

>>>>

>>>>>> arch/microblaze/lib/fastcopy.S:33:2: error: #error Microblaze LE not support ASM optimized lib func. Disable OPT_LIB_ASM.

>>>>     #error Microblaze LE not support ASM optimized lib func. Disable OPT_LIB_ASM.

>>>>      ^~~~~

>>>>

>>>> vim +33 arch/microblaze/lib/fastcopy.S

>>>>

>>>

>>> This seems to be a result of fixing one bug so we run into one that we didn't

>>> get to earlier. I still assume my patch is correct.

>>

>> I will look at this later this week. Xilinx toolchain which I use

>> normally are microblaze for BE or microblazeel that's why proper flags

>> are default options already that's why I didn't see any issue.

>>

>> Did you take toolchain from kernel.org?

>> https://www.kernel.org/pub/tools/crosstool/files/bin/x86_64/4.9.0/

> 

> I used a gcc-7.2.1 that I built myself for all architectures in order to debug

> a gcc issue that appeared in gcc-7.2.

> 

> The patch that got tested was my workaround for an obviously broken

> allmodconfig build.


ok.

Applied both.

Thanks,
Michal


-- 
Michal Simek, Ing. (M.Eng), OpenPGP -> KeyID: FE3D1F91
w: www.monstr.eu p: +42-0-721842854
Maintainer of Linux kernel - Xilinx Microblaze
Maintainer of Linux kernel - Xilinx Zynq ARM and ZynqMP ARM64 SoCs
U-Boot custodian - Xilinx Microblaze/Zynq/ZynqMP SoCs
diff mbox series

Patch

diff --git a/arch/microblaze/Makefile b/arch/microblaze/Makefile
index 830ee7d42fa0..d269dd4b8279 100644
--- a/arch/microblaze/Makefile
+++ b/arch/microblaze/Makefile
@@ -36,16 +36,21 @@  endif
 CPUFLAGS-$(CONFIG_XILINX_MICROBLAZE0_USE_DIV) += -mno-xl-soft-div
 CPUFLAGS-$(CONFIG_XILINX_MICROBLAZE0_USE_BARREL) += -mxl-barrel-shift
 CPUFLAGS-$(CONFIG_XILINX_MICROBLAZE0_USE_PCMP_INSTR) += -mxl-pattern-compare
-CPUFLAGS-$(CONFIG_BIG_ENDIAN) += -mbig-endian
-CPUFLAGS-$(CONFIG_LITTLE_ENDIAN) += -mlittle-endian
+
+ifdef CONFIG_CPU_BIG_ENDIAN
+KBUILD_CFLAGS += -mbig-endian
+KBUILD_AFLAGS += -mbig-endian
+LD += -EB
+else
+KBUILD_CFLAGS += -mlittle-endian
+KBUILD_AFLAGS += -mlittle-endian
+LD += -EL
+endif
 
 CPUFLAGS-1 += $(call cc-option,-mcpu=v$(CPU_VER))
 
 # r31 holds current when in kernel mode
-KBUILD_CFLAGS += -ffixed-r31 $(CPUFLAGS-1) $(CPUFLAGS-2)
-
-LDFLAGS		:=
-LDFLAGS_vmlinux	:=
+KBUILD_CFLAGS += -ffixed-r31 $(CPUFLAGS-y) $(CPUFLAGS-1) $(CPUFLAGS-2)
 
 head-y := arch/microblaze/kernel/head.o
 libs-y += arch/microblaze/lib/