mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-14 01:59:32 +02:00
* rtl/atari: get rid of the old prt0.as startup code, which is not in use any more. this way, we do not require GAS any more for a build
This commit is contained in:
parent
6010ece532
commit
1e90a4db3e
@ -358,7 +358,7 @@ INC=$(RTL)/inc
|
|||||||
COMMON=$(RTL)/common
|
COMMON=$(RTL)/common
|
||||||
PROCINC=$(RTL)/$(CPU_TARGET)
|
PROCINC=$(RTL)/$(CPU_TARGET)
|
||||||
UNITPREFIX=rtl
|
UNITPREFIX=rtl
|
||||||
LOADERS=prt0
|
LOADERS=
|
||||||
SYSTEMUNIT=system
|
SYSTEMUNIT=system
|
||||||
ifdef RELEASE
|
ifdef RELEASE
|
||||||
override FPCOPT+=-Ur
|
override FPCOPT+=-Ur
|
||||||
@ -3646,8 +3646,6 @@ SYSINCDEPS=$(addprefix $(INC)/,$(SYSINCNAMES))
|
|||||||
include $(PROCINC)/makefile.cpu
|
include $(PROCINC)/makefile.cpu
|
||||||
SYSCPUDEPS=$(addprefix $(PROCINC)/,$(CPUINCNAMES))
|
SYSCPUDEPS=$(addprefix $(PROCINC)/,$(CPUINCNAMES))
|
||||||
SYSDEPS=$(SYSINCDEPS) $(SYSCPUDEPS)
|
SYSDEPS=$(SYSINCDEPS) $(SYSCPUDEPS)
|
||||||
prt0$(OEXT) : prt0.as
|
|
||||||
$(AS) -o $(UNITTARGETDIRPREFIX)prt0$(OEXT) prt0.as
|
|
||||||
$(SYSTEMUNIT)$(PPUEXT) : $(SYSTEMUNIT).pp $(SYSDEPS)
|
$(SYSTEMUNIT)$(PPUEXT) : $(SYSTEMUNIT).pp $(SYSDEPS)
|
||||||
$(COMPILER) $(FPC_SYSTEM_OPT) -Us -Sg @rtl.cfg $(SYSTEMUNIT).pp $(REDIR)
|
$(COMPILER) $(FPC_SYSTEM_OPT) -Us -Sg @rtl.cfg $(SYSTEMUNIT).pp $(REDIR)
|
||||||
heaptrc$(PPUEXT) : $(INC)/heaptrc.pp $(SYSTEMUNIT)$(PPUEXT)
|
heaptrc$(PPUEXT) : $(INC)/heaptrc.pp $(SYSTEMUNIT)$(PPUEXT)
|
||||||
|
@ -43,7 +43,7 @@ INC=$(RTL)/inc
|
|||||||
COMMON=$(RTL)/common
|
COMMON=$(RTL)/common
|
||||||
PROCINC=$(RTL)/$(CPU_TARGET)
|
PROCINC=$(RTL)/$(CPU_TARGET)
|
||||||
UNITPREFIX=rtl
|
UNITPREFIX=rtl
|
||||||
LOADERS=prt0
|
LOADERS=
|
||||||
SYSTEMUNIT=system
|
SYSTEMUNIT=system
|
||||||
|
|
||||||
# Use new feature from 1.0.5 version
|
# Use new feature from 1.0.5 version
|
||||||
@ -74,13 +74,6 @@ SYSCPUDEPS=$(addprefix $(PROCINC)/,$(CPUINCNAMES))
|
|||||||
SYSDEPS=$(SYSINCDEPS) $(SYSCPUDEPS)
|
SYSDEPS=$(SYSINCDEPS) $(SYSCPUDEPS)
|
||||||
|
|
||||||
|
|
||||||
#
|
|
||||||
# Loaders
|
|
||||||
#
|
|
||||||
|
|
||||||
prt0$(OEXT) : prt0.as
|
|
||||||
$(AS) -o $(UNITTARGETDIRPREFIX)prt0$(OEXT) prt0.as
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# Base Units (System, strings, os-dependent-base-unit)
|
# Base Units (System, strings, os-dependent-base-unit)
|
||||||
#
|
#
|
||||||
|
@ -1,209 +0,0 @@
|
|||||||
|*************************************************************************
|
|
||||||
|* *
|
|
||||||
|* DSTART.S Startup module for Pascal programs using dLibs *
|
|
||||||
|* *
|
|
||||||
|*************************************************************************
|
|
||||||
|
|
||||||
|*
|
|
||||||
|* entry points
|
|
||||||
|*
|
|
||||||
.globl __base | basepage pointer
|
|
||||||
.globl __start | startup entry point
|
|
||||||
.globl _etext | end of text segment
|
|
||||||
.globl _edata | end of data segment
|
|
||||||
.globl _end | end of BSS segment (end of program)
|
|
||||||
.globl __BREAK | location of stack/heap break
|
|
||||||
.globl __ARGC | number of arguments
|
|
||||||
.globl __ARGS | argument list pointer
|
|
||||||
.globl __envp | environment string pointer
|
|
||||||
.globl _errno | system error number
|
|
||||||
|
|
||||||
|
|
|
||||||
| external references
|
|
||||||
|
|
|
||||||
|.globl __stklen | Stack size value from C (unsigned long)
|
|
||||||
|
|
||||||
|
|
|
||||||
| useful constants
|
|
||||||
|
|
|
||||||
MINSTK = 16384 | Minimum 16K stack size
|
|
||||||
MARGIN = 512 | Minimum memory to return to OS
|
|
||||||
|
|
||||||
|
|
|
||||||
| GEMDOS functions
|
|
||||||
|
|
|
||||||
Cconws = 0x09 | Console write string
|
|
||||||
Pterm = 0x4C | Process terminate (with exit code)
|
|
||||||
Mshrink = 0x4A | Shrink program space
|
|
||||||
|
|
||||||
|
|
|
||||||
| basepage offsets
|
|
||||||
|
|
|
||||||
p_hitpa = 0x04 | top of TPA
|
|
||||||
p_tbase = 0x08 | base of text
|
|
||||||
p_tlen = 0x0C | length of text
|
|
||||||
p_dbase = 0x10 | base of data
|
|
||||||
p_dlen = 0x14 | length of data
|
|
||||||
p_bbase = 0x18 | base of BSS
|
|
||||||
p_blen = 0x1C | length of BSS
|
|
||||||
p_env = 0x2C | environment string
|
|
||||||
p_cmdlin = 0x80 | command line image
|
|
||||||
|
|
||||||
|
|
|
||||||
| STARTUP ROUTINE (must be first object in link)
|
|
||||||
|
|
|
||||||
.text
|
|
||||||
.globl start
|
|
||||||
.globl _start
|
|
||||||
|
|
||||||
__start:
|
|
||||||
start:
|
|
||||||
_start:
|
|
||||||
|
|
|
||||||
| save initial stack and basepage pointers
|
|
||||||
|
|
|
||||||
movel sp,a5 | a5 = initial stack pointer
|
|
||||||
movel sp@(4),a4 | a4 = basepage address
|
|
||||||
movel a4,__base
|
|
||||||
movel a4@(p_tbase),d3
|
|
||||||
addl a4@(p_tlen),d3
|
|
||||||
movel d3,_etext | end of text segment
|
|
||||||
movel a4@(p_dbase),d3
|
|
||||||
addl a4@(p_dlen),d3
|
|
||||||
movel d3,_edata | end of data segment
|
|
||||||
movel a4@(p_bbase),d3
|
|
||||||
addl a4@(p_blen),d3
|
|
||||||
movel d3,_end | end of BSS (end of program)
|
|
||||||
movel d3,__BREAK; | set initial _break value
|
|
||||||
movel a4@(p_env),__envp | save environment pointer
|
|
||||||
|
|
|
||||||
| call C function to get command line arguments
|
|
||||||
|
|
|
||||||
lea a4@(p_cmdlin),a0 | get pointer to command line image
|
|
||||||
moveb a0@+,d0
|
|
||||||
extw d0 | extract length
|
|
||||||
| movew d0,sp@- | cmdlen
|
|
||||||
| movel a0,sp@- | cmdline
|
|
||||||
| jsr __initar | call _initargs(cmdline, cmdlen)
|
|
||||||
| addql #6,sp
|
|
||||||
movew d0,__ARGC | save length
|
|
||||||
movel a0,__ARGS | save pointer to string
|
|
||||||
|
|
|
||||||
| calculate free space available to program
|
|
||||||
|
|
|
||||||
movel __BREAK,d3
|
|
||||||
movel d3,a3 | a3 = base of free space
|
|
||||||
negl d3
|
|
||||||
addl a4@(p_hitpa),d3
|
|
||||||
subl #MARGIN,d3 | d3 = free space
|
|
||||||
|
|
|
||||||
| calculate new stack size (store in d2)
|
|
||||||
|
|
|
||||||
| ASSUME 8K STACK FOR THE MOMENT.
|
|
||||||
movel __stklen,d2 | d2 = _STKSIZ
|
|
||||||
tstl d2 | if __STKSIZ is zero
|
|
||||||
beq minimum | use MINSTK
|
|
||||||
bra setstk | use __STKSIZ
|
|
||||||
minimum:
|
|
||||||
movel #MINSTK,d2 | use MINSTK
|
|
||||||
|
|
|
||||||
| check to see if there is enough room for requested stack
|
|
||||||
|
|
|
||||||
setstk:
|
|
||||||
cmpl d3,d2
|
|
||||||
blt shrink | if (available < requested)
|
|
||||||
movel #stkerr,sp@-
|
|
||||||
movew #Cconws,sp@-
|
|
||||||
trap #1 | report a stack error
|
|
||||||
addql #6,sp
|
|
||||||
movew #-39,sp@-
|
|
||||||
movew #Pterm,sp@-
|
|
||||||
trap #1 | and return error -39 (ENSMEM)
|
|
||||||
|
|
|
||||||
| set up new stack pointer and Mshrink
|
|
||||||
|
|
|
||||||
shrink:
|
|
||||||
addl a3,d2 | new stack = free base + stack size
|
|
||||||
movel d2,sp
|
|
||||||
subl a4,d2 | keep space = new stack - __base
|
|
||||||
movel d2,sp@-
|
|
||||||
movel a4,sp@-
|
|
||||||
clrw sp@-
|
|
||||||
movew #Mshrink,sp@-
|
|
||||||
trap #1 | Mshrink(0, _base, keep);
|
|
||||||
addl #12,sp
|
|
||||||
|
|
|
||||||
| call C entry point function _main()
|
|
||||||
|
|
|
||||||
jsr PASCALMAIN | if _main returns
|
|
||||||
|
|
||||||
movew #0,sp@- | Terminate program normally
|
|
||||||
trap #1
|
|
||||||
|
|
||||||
| movew d0,sp@(4) | insert return value and fall thru
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
| check for stack overflow (done after all OS traps)
|
|
||||||
|
|
|
||||||
chkstk:
|
|
||||||
cmpl __BREAK,sp
|
|
||||||
bgt nosweat | if (_break > sp)
|
|
||||||
movel #stkovf,sp@-
|
|
||||||
movew #Cconws,sp@-
|
|
||||||
trap #1 | report a stack overflow
|
|
||||||
addql #6,sp
|
|
||||||
movew #-1,sp@-
|
|
||||||
movew #Pterm,sp@-
|
|
||||||
trap #1 | and return error -1 (ERROR)
|
|
||||||
nosweat:
|
|
||||||
movel traprtn,sp@- | else, restore return address
|
|
||||||
rts | and do a normal return.
|
|
||||||
|
|
||||||
|
|
|
||||||
| this call to _main ensures that it the user's main() function will be
|
|
||||||
| linked, even if it is in a library.
|
|
||||||
|
|
|
||||||
jsr PASCALMAIN | NO PATH TO THIS STATEMENT
|
|
||||||
movew d0,sp@-
|
|
||||||
movew #0x4c,sp@-
|
|
||||||
trap #1
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
| initialized data space
|
|
||||||
|
|
|
||||||
.data
|
|
||||||
.even
|
|
||||||
stkerr: | not enough memory for stack
|
|
||||||
.ascii "Not enough memory"
|
|
||||||
.byte 0x0d,0x0a,0x00
|
|
||||||
stkovf: | impending stack overflow
|
|
||||||
.ascii "Stack overflow"
|
|
||||||
.byte 0x0d,0x0a,0x00
|
|
||||||
.even
|
|
||||||
_errno: | system error number
|
|
||||||
.word 0
|
|
||||||
__ARGC: | number of command line args
|
|
||||||
.word 0
|
|
||||||
__ARGS: | pointer to command line arg list
|
|
||||||
.long 0
|
|
||||||
|
|
|
||||||
| uninitialized data space
|
|
||||||
|
|
|
||||||
.even
|
|
||||||
__base: | pointer to basepage
|
|
||||||
.long 0
|
|
||||||
_etext: | pointer to end of text segment
|
|
||||||
.long 0
|
|
||||||
_edata: | pointer to end of data segment
|
|
||||||
.long 0
|
|
||||||
_end: | pointer to end of BSS (end of program)
|
|
||||||
.long 0
|
|
||||||
__BREAK: | pointer to stack/heap break
|
|
||||||
.long 0
|
|
||||||
__envp: | pointer to environment string
|
|
||||||
.long 0
|
|
||||||
traprtn: | storage for return PC in trap hooks
|
|
||||||
.long 0
|
|
Loading…
Reference in New Issue
Block a user