[uclibc-ng-devel] memmove() is failing on MIPS CPU

Rene Nielsen rene.nielsen at microsemi.com
Tue Apr 26 19:27:51 CEST 2016

Thanks, Lance, for backing me up here and for shedding further light on the issue. 

I wondered why Waldemar is asking so much about use of floating point, so I double-checked the kernel. It is indeed compiled with "CONFIG_CPU_R4K_FPU=y", but during boot it will figure out that there's no H/W FPU support on the actual CPU and therefore not push/pop FPU regs during task switches.

How it resorts to doing soft-float is not crystal clear to me.

I looked at the changeset you mentioned, Waldemar (2636b17616a19d628c3dbc373ebae67ef6e2b1f6), to get an idea why you are so keen to know about floating point.

Then I modified .../libc/string/mips/memcpy.S to see which macros were defined and which were not. I got to this conclusion:
  _LIBC defined
  _MIPS_ISA_MIPS32 defined
  DISABLE_PREFETCH undefined, so USE_PREFETCH gets defined	
  _MIPS_SIM undefined
  USE_DOUBLE remains undefined
  L defined
  PTR_ADDIU defined
  PTR_SRA defined
  PTR_LSA undefined, but gets defined to lsa

Hope it points in the right direction.


-----Original Message-----
From: Lance Fredrickson [mailto:lancethepants at gmail.com] 
Sent: 26. april 2016 16:18
To: Rene Nielsen <rene.nielsen at microsemi.com>
Subject: Re: [uclibc-ng-devel] memmove() is failing on MIPS CPU

I've also experienced the same issues described by Rene.  Up until now I've been applying the patches that entware-ng/optware-ng use which revert the mipsel changes between 1.0.9 and 1.0.10.

Without Rene's patch, or reverting those mipsel commits, Rene's test.c fails to run, and experiences same error's he experiences.
With his patch it is working as expected.

Note: with or without patching, the static "test" binary I make works with qemu on x64_86 machine.  It's only when I run it on the actual mipsel hardware that it fails. So testing with qemu for whatever reason is not an indication in this case of how it will work on the actual hardware.

binutils 2.25.1
gcc 5.3.0
mips32 soft-float

I'm working with routers like entware-ng/optware-ng, so am also stuck on the same kernel they are.  I know entware-ng is using cross-tools-ng for their toolchain.  I am using buildroot for mine.


More information about the devel mailing list