From 2f2a30423446f88e283f50f699bf7cc3c8cf74b8 Mon Sep 17 00:00:00 2001 From: DJ Delorie Date: Mon, 13 May 2013 21:39:51 +0000 Subject: [newlib] * configure.host (msp430): Add. * libc/include/machine/ieeefp.h: Add MSP430 support. * libc/include/machine/setjmp.h: Likewise. * libc/include/sys/config.h: Likewise. * libc/machine/configure.in (msp430): Add. * libc/machine/configure: Regenerate. * libc/machine/msp430: New directory. [libgloss] * configure.in (msp430*-*-elf): Add. * configure: Regenerate. * msp430: New directory. --- libgloss/msp430/syscalls.S | 66 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 libgloss/msp430/syscalls.S (limited to 'libgloss/msp430/syscalls.S') diff --git a/libgloss/msp430/syscalls.S b/libgloss/msp430/syscalls.S new file mode 100644 index 000000000..8aa22ae8a --- /dev/null +++ b/libgloss/msp430/syscalls.S @@ -0,0 +1,66 @@ +/* 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_ -- cgit v1.2.3