* MIPS SF toolchain
@ 2005-09-07 13:09 Matej Kupljen
2005-09-07 13:54 ` sjhill
2005-09-07 15:33 ` David Daney
0 siblings, 2 replies; 12+ messages in thread
From: Matej Kupljen @ 2005-09-07 13:09 UTC (permalink / raw)
To: linux-mips
Hi
Can somebody tell me, what is the right way to make a soft float
toolchain. I tried with crosstool with different flags for configure
and gcc, but the resulting binaries still contains the FP instructions,
like swc1.
I used --with-float=soft and --nfp for gcc configure,
--without-fp for glibc configure, and compiled glibc
with -msoft-float flag.
Am I missing something, or am I using the wrong flags?
GCC: 3.3.5
GLIBC: 2.3.5
BINUTILS: 2.15
BR,
Matej
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: MIPS SF toolchain
2005-09-07 13:09 MIPS SF toolchain Matej Kupljen
@ 2005-09-07 13:54 ` sjhill
2005-09-07 15:33 ` David Daney
1 sibling, 0 replies; 12+ messages in thread
From: sjhill @ 2005-09-07 13:54 UTC (permalink / raw)
To: Matej Kupljen; +Cc: linux-mips
> Can somebody tell me, what is the right way to make a soft float
> toolchain. I tried with crosstool with different flags for configure
> and gcc, but the resulting binaries still contains the FP instructions,
> like swc1.
>
Here are my RPMS and SRPMS for soft float MIPS toolchains. They are a
bit old, but you can at least see the detailed steps necessary to do
it properly. These use uClibc and not glibc however.
-Steve
ftp://ftp.realitydiluted.com/linux/MIPS/toolchains/uclibc-swfp/
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: MIPS SF toolchain
2005-09-07 13:09 MIPS SF toolchain Matej Kupljen
2005-09-07 13:54 ` sjhill
@ 2005-09-07 15:33 ` David Daney
2005-09-08 8:41 ` Matej Kupljen
1 sibling, 1 reply; 12+ messages in thread
From: David Daney @ 2005-09-07 15:33 UTC (permalink / raw)
To: Matej Kupljen; +Cc: linux-mips
Matej Kupljen wrote:
> Hi
>
> Can somebody tell me, what is the right way to make a soft float
> toolchain. I tried with crosstool with different flags for configure
> and gcc, but the resulting binaries still contains the FP instructions,
> like swc1.
>
> I used --with-float=soft and --nfp for gcc configure,
> --without-fp for glibc configure, and compiled glibc
> with -msoft-float flag.
>
> Am I missing something, or am I using the wrong flags?
>
> GCC: 3.3.5
> GLIBC: 2.3.5
> BINUTILS: 2.15
On gcc 3.3.x --with-float=soft does nothing. If you are using a MIPS32
ISA processor you can configure it with --target=mipsisa32[el]-linux to
get soft float and MIPS32 ISA by default.
But even better would be to use gcc 3.4.x or 4.0.x where
--with-float=soft works. I would also recommend binutils 2.16.1 or
above as there are some severe bugs in the mips linker in earlier versions.
David Daney.
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: MIPS SF toolchain
2005-09-07 15:33 ` David Daney
@ 2005-09-08 8:41 ` Matej Kupljen
2005-09-08 11:33 ` Matej Kupljen
0 siblings, 1 reply; 12+ messages in thread
From: Matej Kupljen @ 2005-09-08 8:41 UTC (permalink / raw)
To: David Daney; +Cc: crossgcc, linux-mips
Hi
> On gcc 3.3.x --with-float=soft does nothing. If you are using a MIPS32
> ISA processor you can configure it with --target=mipsisa32[el]-linux to
> get soft float and MIPS32 ISA by default.
O.K.
Thank you for the explanation.
> But even better would be to use gcc 3.4.x or 4.0.x where
> --with-float=soft works. I would also recommend binutils 2.16.1 or
> above as there are some severe bugs in the mips linker in earlier versions.
O.K.
Yesterday I tried with the gcc 3.4.3, glibc 2.3.5 and binutils 2.16.1.
libgcc.a looks O.K, because I did not find any FP instruction, however
if I do objdump on libc.so.6, I get:
0002ff70 <__sigsetjmp_aux>:
2ff70: 3c1c0017 lui gp,0x17
2ff74: 279cce30 addiu gp,gp,-12752
2ff78: 0399e021 addu gp,gp,t9
2ff7c: 00801021 move v0,a0
2ff80: e4940038 swc1 $f20,56(a0)
2ff84: e495003c swc1 $f21,60(a0)
2ff88: e4960040 swc1 $f22,64(a0)
2ff8c: e4970044 swc1 $f23,68(a0)
2ff90: e4980048 swc1 $f24,72(a0)
2ff94: e499004c swc1 $f25,76(a0)
2ff98: e49a0050 swc1 $f26,80(a0)
2ff9c: e49b0054 swc1 $f27,84(a0)
2ffa0: e49c0058 swc1 $f28,88(a0)
2ffa4: e49d005c swc1 $f29,92(a0)
2ffa8: e49e0060 swc1 $f30,96(a0)
2ffac: e49f0064 swc1 $f31,100(a0)
2ffb0: ac9f0000 sw ra,0(a0)
2ffb4: ac860004 sw a2,4(a0)
2ffb8: ac870028 sw a3,40(a0)
Again, FP instructions! I don't know what is wrong :-(
Now I am trying with the:
GCC: 4.1.0
GLIBC: 2.3.5
BINUTILS: 2.16.1
Linux Headers: 2.6.11
Will let you know, when the toolchain is built.
BR,
Matej
P.S.: I am cc-ing crosstool mailing list too.
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: MIPS SF toolchain
2005-09-08 8:41 ` Matej Kupljen
@ 2005-09-08 11:33 ` Matej Kupljen
2005-09-08 12:22 ` Matej Kupljen
0 siblings, 1 reply; 12+ messages in thread
From: Matej Kupljen @ 2005-09-08 11:33 UTC (permalink / raw)
To: David Daney; +Cc: crossgcc, linux-mips
Hi
> Now I am trying with the:
> GCC: 4.1.0
> GLIBC: 2.3.5
> BINUTILS: 2.16.1
> Linux Headers: 2.6.11
Here are the results:
ligcc.a does not have any sf instructions.
busybox built as dynamic binary does not have any sf ins.
libc.so.6 has this:
-------------------------------------------------------------
0002fe80 <__longjmp>:
2fe80: c4940038 lwc1 $f20,56(a0)
2fe84: c495003c lwc1 $f21,60(a0)
2fe88: c4960040 lwc1 $f22,64(a0)
2fe8c: c4970044 lwc1 $f23,68(a0)
2fe90: c4980048 lwc1 $f24,72(a0)
2fe94: c499004c lwc1 $f25,76(a0)
2fe98: c49a0050 lwc1 $f26,80(a0)
2fe9c: c49b0054 lwc1 $f27,84(a0)
2fea0: c49c0058 lwc1 $f28,88(a0)
2fea4: c49d005c lwc1 $f29,92(a0)
2fea8: c49e0060 lwc1 $f30,96(a0)
2feac: c49f0064 lwc1 $f31,100(a0)
2feb0: 8c820030 lw v0,48(a0)
2feb4: 00000000 nop
2feb8: 44c2f800 ctc1 v0,$31
2febc: 8c9c002c lw gp,44(a0)
2fec0: 8c900008 lw s0,8(a0)
2fec4: 8c91000c lw s1,12(a0)
2fec8: 8c920010 lw s2,16(a0)
2fecc: 8c930014 lw s3,20(a0)
2fed0: 8c940018 lw s4,24(a0)
2fed4: 8c95001c lw s5,28(a0)
2fed8: 8c960020 lw s6,32(a0)
2fedc: 8c970024 lw s7,36(a0)
2fee0: 8c990000 lw t9,0(a0)
2fee4: 8c9d0004 lw sp,4(a0)
2fee8: 8c9e0028 lw s8,40(a0)
2feec: 14a00005 bnez a1,2ff04 <__longjmp+0x84>
2fef0: 00000000 nop
2fef4: 03200008 jr t9
2fef8: 24020001 li v0,1
2fefc: 1000ffff b 2fefc <__longjmp+0x7c>
2ff00: 00000000 nop
2ff04: 03200008 jr t9
2ff08: 00a01021 move v0,a1
2ff0c: 1000fffb b 2fefc <__longjmp+0x7c>
2ff10: 00000000 nop
-------------------------------------------------------------
and
-------------------------------------------------------------
0002ff70 <__sigsetjmp_aux>:
2ff70: 3c1c0017 lui gp,0x17
2ff74: 279cce40 addiu gp,gp,-12736
2ff78: 0399e021 addu gp,gp,t9
2ff7c: 00801021 move v0,a0
2ff80: e4940038 swc1 $f20,56(a0)
2ff84: e495003c swc1 $f21,60(a0)
2ff88: e4960040 swc1 $f22,64(a0)
2ff8c: e4970044 swc1 $f23,68(a0)
2ff90: e4980048 swc1 $f24,72(a0)
2ff94: e499004c swc1 $f25,76(a0)
2ff98: e49a0050 swc1 $f26,80(a0)
2ff9c: e49b0054 swc1 $f27,84(a0)
2ffa0: e49c0058 swc1 $f28,88(a0)
2ffa4: e49d005c swc1 $f29,92(a0)
2ffa8: e49e0060 swc1 $f30,96(a0)
2ffac: e49f0064 swc1 $f31,100(a0)
2ffb0: ac9f0000 sw ra,0(a0)
2ffb4: ac860004 sw a2,4(a0)
2ffb8: ac870028 sw a3,40(a0)
2ffbc: ac9c002c sw gp,44(a0)
2ffc0: ac900008 sw s0,8(a0)
2ffc4: ac91000c sw s1,12(a0)
2ffc8: ac920010 sw s2,16(a0)
2ffcc: ac930014 sw s3,20(a0)
2ffd0: ac940018 sw s4,24(a0)
2ffd4: ac95001c sw s5,28(a0)
2ffd8: ac960020 sw s6,32(a0)
2ffdc: ac970024 sw s7,36(a0)
2ffe0: 8f9982a8 lw t9,-32088(gp)
2ffe4: 4443f800 cfc1 v1,$31
2ffe8: 03200008 jr t9
2ffec: ac430030 sw v1,48(v0)
-------------------------------------------------------------
I did:
mipsel-linux-objdump -S libc.so.6 | less
and then searching for $f (floating point registers)
If I link busybox static, I get those two functions linked in.
How to solve this?
One more thing.
I can compile strace only with gcc-3.3.4. With any other version
I get:
syscall.c:449: error: 'SYS_read' undeclared (first use in this function)
I applayed the patch for this, but it doesn't seem to help.
BR,
Matej
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: MIPS SF toolchain
2005-09-08 11:33 ` Matej Kupljen
@ 2005-09-08 12:22 ` Matej Kupljen
2005-09-08 12:29 ` Ralf Baechle
` (2 more replies)
0 siblings, 3 replies; 12+ messages in thread
From: Matej Kupljen @ 2005-09-08 12:22 UTC (permalink / raw)
To: David Daney; +Cc: crossgcc, linux-mips
Hi
I think I found the problem.
> -------------------------------------------------------------
> 0002fe80 <__longjmp>:
> 2fe80: c4940038 lwc1 $f20,56(a0)
> 2fe84: c495003c lwc1 $f21,60(a0)
....
This code is written in sysdeps/mips/setjmp_aux.c in
inline assembly.
> and
> -------------------------------------------------------------
> 0002ff70 <__sigsetjmp_aux>:
> 2ff70: 3c1c0017 lui gp,0x17
> 2ff74: 279cce40 addiu gp,gp,-12736
This code is written in sysdeps/mips/__longjmp.c in
inline assembly.
> How to solve this?
Because I am using sf, there is no need to store those
registers, or is it?
Can I just #ifdef this code if compiled for sf?
BR,
Matej
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: MIPS SF toolchain
2005-09-08 12:22 ` Matej Kupljen
@ 2005-09-08 12:29 ` Ralf Baechle
2005-09-08 13:48 ` Dan Kegel
2005-09-08 15:29 ` David Daney
2 siblings, 0 replies; 12+ messages in thread
From: Ralf Baechle @ 2005-09-08 12:29 UTC (permalink / raw)
To: Matej Kupljen; +Cc: David Daney, crossgcc, linux-mips
On Thu, Sep 08, 2005 at 02:22:02PM +0200, Matej Kupljen wrote:
> > and
> > -------------------------------------------------------------
> > 0002ff70 <__sigsetjmp_aux>:
> > 2ff70: 3c1c0017 lui gp,0x17
> > 2ff74: 279cce40 addiu gp,gp,-12736
>
> This code is written in sysdeps/mips/__longjmp.c in
> inline assembly.
>
> > How to solve this?
>
> Because I am using sf, there is no need to store those
> registers, or is it?
> Can I just #ifdef this code if compiled for sf?
Why not just letting the kernel fp emulator do the job? On the average
fpu-less system fp performance doesn't matter, so the impact of the
kernel fp emulator is much less than the pain of avoiding it.
Ralf
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: MIPS SF toolchain
2005-09-08 12:22 ` Matej Kupljen
2005-09-08 12:29 ` Ralf Baechle
@ 2005-09-08 13:48 ` Dan Kegel
2005-09-08 15:29 ` David Daney
2 siblings, 0 replies; 12+ messages in thread
From: Dan Kegel @ 2005-09-08 13:48 UTC (permalink / raw)
To: Matej Kupljen; +Cc: David Daney, crossgcc, linux-mips
Matej Kupljen wrote:
> I think I found the problem.
>
> ....
>
> This code is written in sysdeps/mips/setjmp_aux.c in
> inline assembly. ...
>
> This code is written in sysdeps/mips/__longjmp.c in
> inline assembly.
>
> Because I am using sf, there is no need to store those
> registers, or is it?
> Can I just #ifdef this code if compiled for sf?
Other architectures do things like this, e.g.
sysdeps/powerpc/powerpc32/__longjmp-common.S:#ifdef __NO_VMX__
so I don't see why not.
In fact, I had to do something similar once to make life
possible for ppc405. See
http://kegel.com/xgcc3/glibc-ppc-nofpu.patch3
(Hmm, wonder if something like that ever made it in to
mainline glibc.)
- Dan
--
Trying to get a job as a c++ developer? See http://kegel.com/academy/getting-hired.html
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: MIPS SF toolchain
2005-09-08 12:22 ` Matej Kupljen
2005-09-08 12:29 ` Ralf Baechle
2005-09-08 13:48 ` Dan Kegel
@ 2005-09-08 15:29 ` David Daney
2005-09-09 6:48 ` Matej Kupljen
2 siblings, 1 reply; 12+ messages in thread
From: David Daney @ 2005-09-08 15:29 UTC (permalink / raw)
To: Matej Kupljen; +Cc: crossgcc, linux-mips
Matej Kupljen wrote:
> Hi
>
> I think I found the problem.
>
>
>>-------------------------------------------------------------
>>0002fe80 <__longjmp>:
>> 2fe80: c4940038 lwc1 $f20,56(a0)
>> 2fe84: c495003c lwc1 $f21,60(a0)
>
> ....
>
> This code is written in sysdeps/mips/setjmp_aux.c in
> inline assembly.
>
>
>>and
>>-------------------------------------------------------------
>>0002ff70 <__sigsetjmp_aux>:
>> 2ff70: 3c1c0017 lui gp,0x17
>> 2ff74: 279cce40 addiu gp,gp,-12736
>
>
> This code is written in sysdeps/mips/__longjmp.c in
> inline assembly.
>
>
>>How to solve this?
>
>
> Because I am using sf, there is no need to store those
> registers, or is it?
> Can I just #ifdef this code if compiled for sf?
>
I do have some patches for glibc to get rid of these in a soft float
build. However as Ralf Baechle said in the other message, the kernel FP
emulator works and is not that large of an overhead.
The reason I did the glibc patch was that some IDT processor/linux
kernel combination I was using was broken WRT the FP emulator. I
suppose if you had a lot of code doing setjump (like C++ code with
exeception handling that uses setjump/longjump as would be obtained with
uClibc) than this would be bad. But since you are using glibc, the
tools will be using DWARF exception handling and it is not really an issue.
David Daney.
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: MIPS SF toolchain
2005-09-08 15:29 ` David Daney
@ 2005-09-09 6:48 ` Matej Kupljen
2005-09-09 15:20 ` David Daney
0 siblings, 1 reply; 12+ messages in thread
From: Matej Kupljen @ 2005-09-09 6:48 UTC (permalink / raw)
To: David Daney; +Cc: crossgcc, linux-mips
Hi
> > Can I just #ifdef this code if compiled for sf?
> >
>
> I do have some patches for glibc to get rid of these in a soft float
> build.
Can I see these patches, please?
(What is the #define for the FP?)
> However as Ralf Baechle said in the other message, the kernel FP
> emulator works and is not that large of an overhead.
I also removed the FP Emulator in the kernel, just to be sure that
no SF ins are executed (I can send the patch to the list, but I know
there has already been discussion about this).
IMHO, if we say that we have a SF toolchain then there MUST NOT
BE any SF ins, otherwise we have a "semi soft float" toolchain.
Don't you agree?
BR,
Matej
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: MIPS SF toolchain
2005-09-09 6:48 ` Matej Kupljen
@ 2005-09-09 15:20 ` David Daney
2005-09-12 7:33 ` Matej Kupljen
0 siblings, 1 reply; 12+ messages in thread
From: David Daney @ 2005-09-09 15:20 UTC (permalink / raw)
To: Matej Kupljen; +Cc: crossgcc, linux-mips
[-- Attachment #1: Type: text/plain, Size: 1367 bytes --]
Matej Kupljen wrote:
> Hi
>
>
>>>Can I just #ifdef this code if compiled for sf?
>>>
>>
>>I do have some patches for glibc to get rid of these in a soft float
>>build.
>
>
> Can I see these patches, please?
> (What is the #define for the FP?)
>
>
>>However as Ralf Baechle said in the other message, the kernel FP
>>emulator works and is not that large of an overhead.
>
Attached is the portions of my patches to glibc-2.3.3 that contain the
setjump/longjump hacks. There are other things in there as well, so you
will have to pick and choose as to which parts you want.
I did this more as a proof of concept rather than the definitive answer.
There are still some FP instructions being generated but I have not
tracked them down yet.
On my 2.4.29 based kernel (mipsel-linux) with glibc 2.3.3 and busybox
1.00, I don't get the 'Algorithmics/MIPS FPU Emulator v1.5' message
until I run ldconfig or ftp. Most other programs don't seem to run any
FP instructions.
>
> I also removed the FP Emulator in the kernel, just to be sure that
> no SF ins are executed (I can send the patch to the list, but I know
> there has already been discussion about this).
>
> IMHO, if we say that we have a SF toolchain then there MUST NOT
> BE any SF ins, otherwise we have a "semi soft float" toolchain.
> Don't you agree?
Of course I agree.
David Daney.
[-- Attachment #2: glibc-2.3.3.diff.gz --]
[-- Type: application/x-gzip, Size: 5608 bytes --]
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: MIPS SF toolchain
2005-09-09 15:20 ` David Daney
@ 2005-09-12 7:33 ` Matej Kupljen
0 siblings, 0 replies; 12+ messages in thread
From: Matej Kupljen @ 2005-09-12 7:33 UTC (permalink / raw)
To: David Daney; +Cc: crossgcc, linux-mips
[-- Attachment #1: Type: text/plain, Size: 723 bytes --]
Hi
> Attached is the portions of my patches to glibc-2.3.3 that contain the
> setjump/longjump hacks. There are other things in there as well, so you
> will have to pick and choose as to which parts you want.
Done that :-)
> I did this more as a proof of concept rather than the definitive answer.
> There are still some FP instructions being generated but I have not
> tracked them down yet.
I did. They were in the sysdeps/mips/fpu_control.h
I tested it with busybox and MPlayer and found no SF ins in the
binaries. I run those binaries on kernel which has no FPU emulator.
Versions:
BINUTILS: 2.16.1
GCC: 3.4.4
GLIBC: 2.3.5
Let me know the results, if someone is going to use this patch.
BR,
Matej
[-- Attachment #2: glibc-2.3.5-mips-sf.patch.bz2 --]
[-- Type: application/x-bzip, Size: 988 bytes --]
^ permalink raw reply [flat|nested] 12+ messages in thread
end of thread, other threads:[~2005-09-12 7:34 UTC | newest]
Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2005-09-07 13:09 MIPS SF toolchain Matej Kupljen
2005-09-07 13:54 ` sjhill
2005-09-07 15:33 ` David Daney
2005-09-08 8:41 ` Matej Kupljen
2005-09-08 11:33 ` Matej Kupljen
2005-09-08 12:22 ` Matej Kupljen
2005-09-08 12:29 ` Ralf Baechle
2005-09-08 13:48 ` Dan Kegel
2005-09-08 15:29 ` David Daney
2005-09-09 6:48 ` Matej Kupljen
2005-09-09 15:20 ` David Daney
2005-09-12 7:33 ` Matej Kupljen
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.