From 6ec87c5dd981670ed72e57ae2cdec6059657df21 Mon Sep 17 00:00:00 2001 From: cuz Date: Sat, 26 Feb 2005 09:06:46 +0000 Subject: [PATCH] Move initialization code into the init segment git-svn-id: svn://svn.cc65.org/cc65/trunk@3404 b7a2c559-68d2-44c3-8de9-860c34a00d81 --- libsrc/common/_heap.s | 3 ++- libsrc/common/zerobss.s | 4 ++-- libsrc/runtime/condes.s | 15 +++++++++------ libsrc/runtime/stkchk.s | 31 ++++++++++++++++++------------- 4 files changed, 31 insertions(+), 22 deletions(-) diff --git a/libsrc/common/_heap.s b/libsrc/common/_heap.s index 30b89b81e..5b45b85cc 100644 --- a/libsrc/common/_heap.s +++ b/libsrc/common/_heap.s @@ -27,7 +27,7 @@ __heaplast: ; Initialization. Will be called from startup! -.code +.segment "INIT" initheap: sec @@ -39,3 +39,4 @@ initheap: sta __heapend+1 rts + diff --git a/libsrc/common/zerobss.s b/libsrc/common/zerobss.s index 321a1f560..321424efa 100644 --- a/libsrc/common/zerobss.s +++ b/libsrc/common/zerobss.s @@ -1,5 +1,5 @@ ; -; Ullrich von Bassewitz, 17.09.1998 +; Ullrich von Bassewitz, 1998-09-17, 2005-02-26. ; ; Zero the bss segment. ; @@ -9,7 +9,7 @@ .importzp ptr1 -.code +.segment "INIT" zerobss: lda #<__BSS_RUN__ diff --git a/libsrc/runtime/condes.s b/libsrc/runtime/condes.s index 2a2692a7b..c94e41252 100644 --- a/libsrc/runtime/condes.s +++ b/libsrc/runtime/condes.s @@ -20,17 +20,17 @@ .macpack cpu -.code - ; -------------------------------------------------------------------------- ; Initialize library modules +.segment "INIT" + .proc initlib - ldy #<(__CONSTRUCTOR_COUNT__*2) + ldy #<(__CONSTRUCTOR_COUNT__*2) beq exit - lda #<__CONSTRUCTOR_TABLE__ - ldx #>__CONSTRUCTOR_TABLE__ + lda #<__CONSTRUCTOR_TABLE__ + ldx #>__CONSTRUCTOR_TABLE__ jmp condes exit: rts @@ -40,13 +40,16 @@ exit: rts ; -------------------------------------------------------------------------- ; Cleanup library modules +.code + .proc donelib ldy #<(__DESTRUCTOR_COUNT__*2) - beq initlib::exit + beq exit lda #<__DESTRUCTOR_TABLE__ ldx #>__DESTRUCTOR_TABLE__ jmp condes +exit: rts .endproc diff --git a/libsrc/runtime/stkchk.s b/libsrc/runtime/stkchk.s index 40e70efbb..40ccde3dc 100644 --- a/libsrc/runtime/stkchk.s +++ b/libsrc/runtime/stkchk.s @@ -22,24 +22,25 @@ ; Use macros for better readability .macpack generic -.code ; ---------------------------------------------------------------------------- ; Initialization code. This is a constructor, so it is called on startup if ; the linker has detected references to this module. +.segment "INIT" + .proc initstkchk - lda sp - sta initialsp - sub #<__STACKSIZE__ - sta lowwater - lda sp+1 - sta initialsp+1 - sbc #>__STACKSIZE__ - add #1 ; Add 256 bytes safety area - sta lowwater+1 - rts + lda sp + sta initialsp + sub #<__STACKSIZE__ + sta lowwater + lda sp+1 + sta initialsp+1 + sbc #>__STACKSIZE__ + add #1 ; Add 256 bytes safety area + sta lowwater+1 + rts .endproc @@ -47,14 +48,18 @@ ; 6502 stack checking routine. Does not need to save any registers. ; Safety zone for the hardware stack is 12 bytes. +.code + stkchk: tsx cpx #12 bcc Fail ; Jump on stack overflow - rts ; Return if ok + rts ; Return if ok ; ---------------------------------------------------------------------------- ; C stack checking routine. Does not need to save any registers. +.code + cstkchk: ; Check the high byte of the software stack @@ -101,4 +106,4 @@ initialsp: .word 0 lowwater: .word 0 - +