This is the mail archive of the
newlib@sourceware.org
mailing list for the newlib project.
Commit: MSP430: Separate cio syscalls into individual function sections
- From: Nick Clifton <nickc at redhat dot com>
- To: newlib at sourceware dot org
- Date: Tue, 09 Feb 2016 13:45:52 +0000
- Subject: Commit: MSP430: Separate cio syscalls into individual function sections
- Authentication-results: sourceware.org; auth=none
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_