This is the mail archive of the newlib@sourceware.org mailing list for the newlib project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Commit: MSP430: Separate cio syscalls into individual function sections


Hi Guys,

  Currently the MSP430's CIO system call library builds most of the
  stubs in the same object file and they are all placed in the .text
  section.  This means that if one stub is used, they are all linked
  in to the executable.
  
  I am applying the patch below so that each stub is located in its
  own .text.<stub-name> section, in much the same way as gcc's
  -ffunction-section option.  That way, linking with -gc-sections
  enabled will remove any unused stubs.

Cheers
  Nick

diff --git a/libgloss/msp430/ciosyscalls.S b/libgloss/msp430/ciosyscalls.S
index abb01b0..889deae 100644
--- a/libgloss/msp430/ciosyscalls.S
+++ b/libgloss/msp430/ciosyscalls.S
@@ -21,28 +21,60 @@
 .macro	sc,a
 	sc2 \a,\a
 .endm
+
+.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
+
+.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
-	.weak	\name
-	.global	\name
-\name:
+	START_FUNC \name
         call_   #__errno                 
         movx_   #ENOSYS, @R12                
 	MOV.W	#-1,R12
 	ret_
+	END_FUNC \name
 .endm
 
-	.weak	exit
-	.weak	_exit
-	.global	exit
-	.global	_exit
-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
-
 #define SC(n) sc2 n,SYS_##n
 
 	SC (open)
@@ -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_

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]