mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-22 04:29:29 +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
|
||||
PROCINC=$(RTL)/$(CPU_TARGET)
|
||||
UNITPREFIX=rtl
|
||||
LOADERS=prt0
|
||||
LOADERS=
|
||||
SYSTEMUNIT=system
|
||||
ifdef RELEASE
|
||||
override FPCOPT+=-Ur
|
||||
@ -3646,8 +3646,6 @@ SYSINCDEPS=$(addprefix $(INC)/,$(SYSINCNAMES))
|
||||
include $(PROCINC)/makefile.cpu
|
||||
SYSCPUDEPS=$(addprefix $(PROCINC)/,$(CPUINCNAMES))
|
||||
SYSDEPS=$(SYSINCDEPS) $(SYSCPUDEPS)
|
||||
prt0$(OEXT) : prt0.as
|
||||
$(AS) -o $(UNITTARGETDIRPREFIX)prt0$(OEXT) prt0.as
|
||||
$(SYSTEMUNIT)$(PPUEXT) : $(SYSTEMUNIT).pp $(SYSDEPS)
|
||||
$(COMPILER) $(FPC_SYSTEM_OPT) -Us -Sg @rtl.cfg $(SYSTEMUNIT).pp $(REDIR)
|
||||
heaptrc$(PPUEXT) : $(INC)/heaptrc.pp $(SYSTEMUNIT)$(PPUEXT)
|
||||
|
@ -43,7 +43,7 @@ INC=$(RTL)/inc
|
||||
COMMON=$(RTL)/common
|
||||
PROCINC=$(RTL)/$(CPU_TARGET)
|
||||
UNITPREFIX=rtl
|
||||
LOADERS=prt0
|
||||
LOADERS=
|
||||
SYSTEMUNIT=system
|
||||
|
||||
# Use new feature from 1.0.5 version
|
||||
@ -74,13 +74,6 @@ SYSCPUDEPS=$(addprefix $(PROCINC)/,$(CPUINCNAMES))
|
||||
SYSDEPS=$(SYSINCDEPS) $(SYSCPUDEPS)
|
||||
|
||||
|
||||
#
|
||||
# Loaders
|
||||
#
|
||||
|
||||
prt0$(OEXT) : prt0.as
|
||||
$(AS) -o $(UNITTARGETDIRPREFIX)prt0$(OEXT) prt0.as
|
||||
|
||||
#
|
||||
# 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