To LUGNET HomepageTo LUGNET News HomepageTo LUGNET Guide Homepage
 Help on Searching
 
Post new message to lugnet.robotics.rcx.legosOpen lugnet.robotics.rcx.legos in your NNTP NewsreaderTo LUGNET News Traffic PageSign In (Members)
 Robotics / RCX / legOS / 636
635  |  637
Subject: 
Re: RCX "locking up" when trying to use dll
Newsgroups: 
lugnet.robotics.rcx.legos
Date: 
Tue, 11 Jan 2000 20:16:33 GMT
Viewed: 
1460 times
  
In lugnet.robotics.rcx.legos, Markus L. Noga writes:
Sounds like a problem with saving and restoring registers in
lnp_logical_handler. Could you verify in the disassembly if all
registers are being saved and restored?

It's actually in the library.  I just found it.  Here is a disassembly of a
correct memcpy.o, as built by egcs-1.1.2:

00000000 <_memcpy>:
   0:   0d 13             mov.w r1,r3
   2:   09 23             add.w r2,r3
   4:   1d 13             cmp.w r1,r3
   6:   47 00             beq   .0 (8)
   8:   6c 1a             mov.b @r1+,r2l
   a:   68 8a             mov.b r2l,@e0
   c:   0b 00             adds  #0x1,er0
   e:   40 00             bra   .0 (10)
  10:   54 70             rts

Here is the bad memcpy.o, from gcc-2.95.2:

00000000 <_memcpy>:
   0:   0d 13             mov.w r1,r3
   2:   09 23             add.w r2,r3
   4:   1d 13             cmp.w r1,r3
   6:   47 00             beq   .0 (8)
   8:   6c 19             mov.b @r1+,r1l
   a:   68 89             mov.b r1l,@e0
   c:   0b 00             adds  #0x1,er0
   e:   40 00             bra   .0 (10)
  10:   54 70             rts

Notice offset 8, which is 'src = *src++', so on the first loop iteration it
clobbers the src pointer.  In the correct version it uses a temporary register
(r2) to hold that.

If you browse a more complete disassembly you can see that the global register
allocator has been changed, but this appears to be the only case where it
breaks.  If you build and entire kernel with gcc-2.95.2, then replace memcpy.o
with one built by egcs-1.1.2 you get a working kernel.

I'll work on the gcc bug report.

--Ben



Message has 2 Replies:
  RE: RCX "locking up" when trying to use dll
 
(...) <Snipped disassembly showing exactly what the bug is...> WOW! Good catch Ben! I have recently been looking through some disassembly on a totally unrelated topic and have found a bug in an unnamed commercial compiler. But of course I had a (...) (25 years ago, 11-Jan-00, to lugnet.robotics.rcx.legos)
  Re: RCX "locking up" when trying to use dll
 
(...) Actually I won't, since I just read memcpy.c and I see it's an __asm__ macro. I don't know if that's a valid __asm__ or not. In this case, if it's causing legOS pain, memcpy.c should just be replaced by memcpy.s with the correct assembly (...) (25 years ago, 11-Jan-00, to lugnet.robotics.rcx.legos)

Message is in Reply To:
  Re: RCX "locking up" when trying to use dll
 
Ben Jackson schrieb: (...) Some parts of legOS, especially the interrupt handlers, are less portable than they should be - they use some assembly, or my attribute((rcx_interrupt)) which I haven't verified with 2.95.2. (...) Sounds like a problem (...) (25 years ago, 11-Jan-00, to lugnet.robotics.rcx.legos)

11 Messages in This Thread:



Entire Thread on One Page:
Nested:  All | Brief | Compact | Dots
Linear:  All | Brief | Compact

This Message and its Replies on One Page:
Nested:  All | Brief | Compact | Dots
Linear:  All | Brief | Compact
    

Custom Search

©2005 LUGNET. All rights reserved. - hosted by steinbruch.info GbR