diff --git a/libgloss/msp430/ciosyscalls.S b/libgloss/msp430/ciosyscalls.S index abb01b03e..889deae9e 100644 --- a/libgloss/msp430/ciosyscalls.S +++ b/libgloss/msp430/ciosyscalls.S @@ -21,27 +21,59 @@ .macro sc,a sc2 \a,\a .endm - -.macro sc2,name,num - .weak \name - .global \name -\name: - call_ #__errno - movx_ #ENOSYS, @R12 - MOV.W #-1,R12 - ret_ + +.macro START_FUNC name1, name2=foo + .pushsection .text.\name1,"ax",@progbits + .p2align 1 + .weak \name1 + .global \name1 +\name1: + .ifnc \name2,foo + .weak \name2 + .global \name2 +\name2: + .endif .endm - .weak exit - .weak _exit - .global exit - .global _exit -exit: -_exit: +.macro END_FUNC name1, name2=foo + .type \name1 , @function + .size \name1 , . - \name1 + .ifnc \name2,foo + .type \name2 , @function + .size \name2 , . - \name2 + .endif + .popsection +.endm + + +START_FUNC exit, _exit /* For some reason, the board fails to stop at a breakpoint placed on top of a software breakpoint instruction. */ /* MOV.B #0,R3 ; this is a software breakpoint instruction */ 1: br_ #1b +END_FUNC exit, _exit + + +START_FUNC isatty,_isatty + MOV #1,R12 + ret_ +END_FUNC isatty,_isatty + + +START_FUNC getpid + MOV #42,R12 + ret_ +END_FUNC getpid + + +.macro sc2,name,num + START_FUNC \name + call_ #__errno + movx_ #ENOSYS, @R12 + MOV.W #-1,R12 + ret_ + END_FUNC \name +.endm #define SC(n) sc2 n,SYS_##n @@ -52,18 +84,3 @@ _exit: 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_