Make working gettimeofday() for Mac OS X.
The system call puts the time in a pair of registers, not in the timeval structure. Add code to move the time to the structure, so programs see the correct time, not garbage. This fixes our example programs that use the time as a random seed.
This commit is contained in:
parent
98f2273d97
commit
b6b707d9df
|
@ -1,7 +1,18 @@
|
|||
! The system call checks the timeval pointer but doesn't store the
|
||||
! time there. If the pointer wasn't NULL, then the system call
|
||||
! returns the time in a pair of registers.
|
||||
|
||||
.sect .text
|
||||
.define _gettimeofday
|
||||
_gettimeofday:
|
||||
mov eax, 116
|
||||
int 0x80
|
||||
jb .set_errno
|
||||
mov ebx, 4(esp) ! timeval pointer
|
||||
test ebx, ebx
|
||||
je 1f
|
||||
mov 0(ebx), eax ! seconds
|
||||
mov 4(ebx), edx ! microseconds
|
||||
1:
|
||||
mov eax, 0 ! return 0
|
||||
ret
|
||||
|
|
|
@ -1,9 +1,19 @@
|
|||
! The system call checks the timeval pointer but doesn't store the
|
||||
! time there. If the pointer wasn't NULL, then the system call
|
||||
! returns the time in a pair of registers.
|
||||
|
||||
.sect .text
|
||||
.define _gettimeofday
|
||||
_gettimeofday:
|
||||
addi r0, r0, 116 ! gettimeofday
|
||||
lwz r3, 0(sp) ! timeval pointer
|
||||
lwz r4, 4(sp) ! timezone pointer
|
||||
or. r5, r3, r3
|
||||
sc 0
|
||||
b .set_errno
|
||||
bc 12, 2, 1f ! beq 1f
|
||||
stw r3, 0(r5) ! seconds
|
||||
stw r4, 4(r5) ! microseconds
|
||||
1:
|
||||
addi r3, r0, 0 ! return 0
|
||||
bclr 20, 0, 0
|
||||
|
|
Loading…
Reference in a new issue