2013-05-14 05:39:51 +08:00
|
|
|
/* Copyright (c) 2012, 2013 Red Hat, Inc. All rights reserved.
|
|
|
|
|
|
|
|
This copyrighted material is made available to anyone wishing to use, modify,
|
|
|
|
copy, or redistribute it subject to the terms and conditions of the BSD
|
|
|
|
License. This program is distributed in the hope that it will be useful,
|
|
|
|
but WITHOUT ANY WARRANTY expressed or implied, including the implied warranties
|
|
|
|
of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. A copy of this license
|
|
|
|
is available at http://www.opensource.org/licenses. Any Red Hat trademarks that
|
|
|
|
are incorporated in the source code or documentation are not subject to the BSD
|
|
|
|
License and may only be used or replicated with the express permission of
|
|
|
|
Red Hat, Inc.
|
|
|
|
*/
|
|
|
|
|
|
|
|
/* Be wary: the lower N bits of the *address* of the function
|
|
|
|
determines the syscall used by the simulator. Thus, the addresses
|
|
|
|
listed here depend on the syscall numbers in ../syscalls.h. */
|
|
|
|
|
|
|
|
/* As per the MSP430x200 Family Users Guide, section 1.5, "An
|
|
|
|
instruction fetch from the address range 0x0000 - 0x01FF will reset
|
|
|
|
the device." We take advantage of that to do syscalls in the
|
|
|
|
simulator, by trying to execute specific addresses in that range
|
|
|
|
and letting the simulator catch them while simulating the CALL
|
|
|
|
instruction. In theory, this is an operation that the physical
|
|
|
|
hardware will never attempt to do, so it won't interfere with the
|
|
|
|
simulation's accuracy (i.e. we aren't abusing holes in the opcode
|
|
|
|
map, for example). */
|
|
|
|
|
|
|
|
#include "../syscall.h"
|
|
|
|
#include "memmodel.h"
|
|
|
|
|
|
|
|
.macro sc,a
|
|
|
|
sc2 \a,\a
|
|
|
|
.endm
|
|
|
|
|
|
|
|
.macro sc2,name,num
|
|
|
|
.weak \name
|
|
|
|
.global \name
|
|
|
|
\name = 0x180 + \num
|
|
|
|
.endm
|
|
|
|
|
|
|
|
#define SC(n) sc2 n,SYS_##n
|
|
|
|
|
|
|
|
sc2 _exit,SYS_exit
|
|
|
|
SC (exit)
|
|
|
|
SC (open)
|
|
|
|
SC (close)
|
|
|
|
SC (read)
|
|
|
|
/* SC (write)*/
|
|
|
|
SC (fstat)
|
|
|
|
SC (lseek)
|
|
|
|
SC (kill)
|
|
|
|
|
|
|
|
.weak isatty
|
|
|
|
.global isatty
|
|
|
|
isatty:
|
|
|
|
.weak _isatty
|
|
|
|
.global _isatty
|
|
|
|
_isatty:
|
|
|
|
MOV #1,R12
|
|
|
|
ret_
|
|
|
|
|
|
|
|
.weak getpid
|
|
|
|
.global getpid
|
|
|
|
getpid:
|
|
|
|
MOV #42,R12
|
|
|
|
ret_
|
2015-10-07 00:33:16 +08:00
|
|
|
|
|
|
|
.weak gettimeofday
|
|
|
|
.global gettimeofday
|
|
|
|
gettimeofday:
|
|
|
|
MOV #0,R12
|
|
|
|
ret_
|
|
|
|
.size gettimeofday , . - gettimeofday
|