#4970: time002 and time004 (ghci) test failures on OS X 64 bit
-------------------------------+--------------------------------------------
    Reporter:  gwright         |       Owner:  gwright                    
        Type:  bug             |      Status:  new                        
    Priority:  normal          |   Component:  GHCi                       
     Version:  7.0.1           |    Keywords:                             
    Testcase:                  |   Blockedby:                             
          Os:  MacOS X         |    Blocking:                             
Architecture:  x86_64 (amd64)  |     Failure:  Incorrect result at runtime
-------------------------------+--------------------------------------------

Comment(by gwright):

 Some notes to self:

 The error occurs before the microseconds values from `gettimeofday` is
 multiplied by
 1000000 to convert to picoseconds.  Here's the source in `Time.hs` (the
 preprocessed `Time.hsc`):
 {{{
 getClockTime :: IO ClockTime

 {-# LINE 249 "libraries/old-time/./System/Time.hsc" #-}
 getClockTime = do
   allocaBytes (16) $ \ p_timeval -> do
 {-# LINE 251 "libraries/old-time/./System/Time.hsc" #-}
     throwErrnoIfMinus1_ "getClockTime" $ gettimeofday p_timeval nullPtr
     sec  <- ((\hsc_ptr -> peekByteOff hsc_ptr 0))  p_timeval :: IO CTime
 {-# LINE 253 "libraries/old-time/./System/Time.hsc" #-}
     usec <- ((\hsc_ptr -> peekByteOff hsc_ptr 8)) p_timeval :: IO CTime
 {-# LINE 254 "libraries/old-time/./System/Time.hsc" #-}
     return (TOD (realToInteger sec) ((realToInteger usec) * 1000000))
 }}}
 Either `usec` is not getting the right value or something is wrong with
 `realToInteger`.  I'm guessing it's the former.

 I've located where the multiplication by 1000000 is in the assembly code:
 {{{
 .text
 .align 3
 _s7ja_info_dsp:
         .quad   0
         .quad   32
 _s7ja_info:
 LcfET:
         movq %rbx,%r14
         leaq _r4N2_closure(%rip),%rax
         leaq 1(%rax),%rsi
         addq $8,%rbp
         jmp _integerzmgmp_GHCziInteger_timesInteger_info
         .long  _s7ja_info - _s7ja_info_dsp
 }}}
 and where `gettimeofday` is called:
 {{{
 .text
 .align 3
 _oldzmtimezm1zi0zi0zi6_SystemziTime_zdwa3_info_dsp:
         .quad
 
_oldzmtimezm1zi0zi0zi6_SystemziTime_zdwa3_srt-(_oldzmtimezm1zi0zi0zi6_SystemziTime_zdwa3_info)+0
         .quad   8589934596
         .quad   0
         .quad   133143986191
 .globl _oldzmtimezm1zi0zi0zi6_SystemziTime_zdwa3_info
 _oldzmtimezm1zi0zi0zi6_SystemziTime_zdwa3_info:
 LcfGM:
         leaq -16(%rbp),%rax
         cmpq %r15,%rax
         jb LcfGO
         movq %r14,%rax
         movq %rax,%rdi
         xorl %esi,%esi
         movl $0,%eax
         call ___hscore_gettimeofday
         movq %r14,-8(%rbp)
         movslq %eax,%rax
         cmpq $-1,%rax
         jne LcfGQ
         leaq _r4S3_closure(%rip),%r14
         leaq _s7jh_info(%rip),%rax
         movq %rax,-16(%rbp)
         addq $-16,%rbp
         jmp _base_ForeignziCziError_throwErrno1_info
 LcfGO:
         leaq _oldzmtimezm1zi0zi0zi6_SystemziTime_zdwa3_closure(%rip),%rbx
         jmp *-8(%r13)
 LcfGQ:
         addq $-16,%rbp
         jmp _s69Q_info
         .long  _oldzmtimezm1zi0zi0zi6_SystemziTime_zdwa3_info -
 _oldzmtimezm1zi0zi0zi6_SystemziTime_zdwa3_info_dsp
 }}}
 Now I need to do a bisection search to locate the bad relocation.

-- 
Ticket URL: <http://hackage.haskell.org/trac/ghc/ticket/4970#comment:5>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler

_______________________________________________
Glasgow-haskell-bugs mailing list
Glasgow-haskell-bugs@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-bugs

Reply via email to