* m32c/crt0.S: Add support for preinit, init, and fini arrays, and

.init and .fini processing.
* m32c/crtn.S: Likewise.
* m32c/exit.S: Likewise.
This commit is contained in:
DJ Delorie 2005-12-14 03:38:27 +00:00
parent b24dda0b9d
commit fbe7cb7681
4 changed files with 83 additions and 2 deletions

View File

@ -1,3 +1,10 @@
2005-12-13 DJ Delorie <dj@redhat.com>
* m32c/crt0.S: Add support for preinit, init, and fini arrays, and
.init and .fini processing.
* m32c/crtn.S: Likewise.
* m32c/exit.S: Likewise.
2005-12-13 Nathan Sidwell <nathan@codesourcery.com>
* mt/16-002.ld: Change architecture to 'mt'. Remove

View File

@ -74,6 +74,8 @@ _start:
mov.w #0,r0
sstr.w
jsr.a __m32c_init
jsr.a _main
.LFE2:
@ -85,6 +87,61 @@ _start:
jsr.a _exit
.text
.global _m32c_run_preinit_array
.type _m32c_run_preinit_array,@function
_m32c_run_preinit_array:
mov.W #__preinit_array_start,a0
mov.W #__preinit_array_end,a1
jmp.w _m32c_run_inilist
.global _m32c_run_init_array
.type _m32c_run_init_array,@function
_m32c_run_init_array:
mov.W #__init_array_start,a0
mov.W #__init_array_end,a1
jmp.w _m32c_run_inilist
.global _m32c_run_fini_array
.type _m32c_run_fini_array,@function
_m32c_run_fini_array:
mov.W #__fini_array_start,a0
mov.W #__fini_array_end,a1
/* fall through */
_m32c_run_inilist:
next_inilist:
cmp.W a0,a1
jeq done_inilist
pushm a0,a1
mov.W [a0],a0
#ifdef A16
mov.b:s #0,a1 /* zero extends */
jsri.a a1a0
#else
jsri.a a0
#endif
popm a0,a1
add.W A(#2,#4),a0
jmp.b next_inilist
done_inilist:
rts
.section .init,"ax",@progbits
.global __m32c_init
__m32c_init:
enter #0
.section .fini,"ax",@progbits
.global __m32c_fini
__m32c_fini:
enter #0
jsr.a _m32c_run_fini_array
;;; Provide Dwarf unwinding information that will help GDB stop
;;; backtraces at the right place. This is stolen from assembly
;;; code generated by GCC with -dA.
@ -116,4 +173,5 @@ _start:
.byte 0x30 ; DW_OP_lit0
.p2align ALIGN
.LEFDE0:
.text
.text

View File

@ -41,5 +41,18 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#define W l
#endif
.section .init,"ax",@progbits
jsr.a _m32c_run_preinit_array
jsr.a _m32c_run_init_array
exitd
.global __m32c_init_end
__m32c_init_end:
.section .fini,"ax",@progbits
exitd
.global __m32c_fini_end
__m32c_fini_end:
.text

View File

@ -32,4 +32,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include "m32csys.h"
S(_exit)
.global __exit
__exit:
jsr.a __m32c_fini
SYSCALL(SYS_exit)