Home | History | Annotate | Line # | Download | only in common
start.S revision 1.2.162.1
      1        1.1   itohy |-----------------------------------------------------------
      2        1.1   itohy |
      3        1.1   itohy |	Simple C runtime startup for Human68k
      4        1.1   itohy |
      5        1.1   itohy |	  o no stdio support (DOS/IOCS only)
      6        1.1   itohy |	  o HUPAIR support
      7        1.1   itohy |
      8  1.2.162.1  jruoho |	written by ITOH Yasufumi
      9        1.1   itohy |
     10        1.1   itohy |	This file is in the public domain
     11        1.1   itohy |
     12  1.2.162.1  jruoho |	$NetBSD: start.S,v 1.2.162.1 2011/06/06 09:07:03 jruoho Exp $
     13        1.2   itohy 
     14        1.2   itohy #include <machine/asm.h>
     15        1.1   itohy 
     16        1.1   itohy |-----------------------------------------------------------
     17        1.1   itohy |
     18        1.1   itohy |	configuration
     19        1.1   itohy |
     20        1.1   itohy #ifndef STACK_SIZE
     21        1.1   itohy #define STACK_SIZE	65536	/* stack size in bytes */
     22        1.1   itohy #endif
     23        1.1   itohy 
     24        1.1   itohy #ifndef STACK_SYMBOL
     25        1.2   itohy #ifdef	__ELF__
     26        1.2   itohy #define STACK_SYMBOL	_stack	/* stack top symbol name */
     27        1.2   itohy #else	/* a.out */
     28        1.1   itohy #define STACK_SYMBOL	stack_8K_hUMAn6	/* has largest hash val on NetBSD ld */
     29        1.1   itohy #endif					/* and will be at the end of bss */
     30        1.2   itohy #endif
     31        1.1   itohy 
     32        1.1   itohy #ifndef DUMMY___main
     33        1.2   itohy #define DUMMY___main	1	/* define dummy __main() for a.out */
     34        1.1   itohy #endif
     35        1.1   itohy 
     36        1.1   itohy #ifndef SUPPORT_R_EXEC		/* support  ".r"  relocatable executable */
     37        1.1   itohy #define SUPPORT_R_EXEC	0	/* (clear bss, don't use a1 at startup) */
     38        1.1   itohy #endif				/* XXX impossible for a.out */
     39        1.1   itohy 
     40        1.1   itohy #ifndef SUPPORT_HUPAIR
     41        1.1   itohy #define SUPPORT_HUPAIR	1	/* HUPAIR argument interface support */
     42        1.1   itohy #endif
     43        1.1   itohy 
     44        1.1   itohy #ifndef HUPAIR_ARGV0
     45        1.1   itohy #define HUPAIR_ARGV0	1	/* use argv[0] passed in HUPAIR manner */
     46        1.1   itohy #endif
     47        1.1   itohy 
     48        1.1   itohy #ifndef ADD_PATHNAME
     49        1.1   itohy #define ADD_PATHNAME	0	/* add command path to argv[0] if not HUPAIR */
     50        1.1   itohy #endif
     51        1.1   itohy 
     52        1.1   itohy #ifndef STRICT_SETBLOCK
     53        1.1   itohy #define STRICT_SETBLOCK	1	/* free unused memory after creating args */
     54        1.1   itohy #endif
     55        1.1   itohy 
     56        1.1   itohy #ifndef C_REGPARM
     57        1.1   itohy #define C_REGPARM	0	/* main() arguments are passed in registers */
     58        1.1   itohy #endif				/* (for  gcc -mregparm) */
     59        1.1   itohy 
     60        1.1   itohy #ifndef NEED_MEMCP
     61        1.1   itohy #define NEED_MEMCP	0	/* __memcp: MCB address */
     62        1.1   itohy #endif
     63        1.1   itohy #ifndef NEED_PROCP
     64        1.1   itohy #define NEED_PROCP	0	/* __procp: PDB address */
     65        1.1   itohy #endif
     66        1.1   itohy #ifndef NEED_VERNUM
     67        1.1   itohy #define NEED_VERNUM	1	/* __vernum: Human68k version */
     68        1.1   itohy #endif
     69        1.1   itohy #ifndef NEED_PROGNAME
     70        1.1   itohy #define NEED_PROGNAME	1	/* ___progname: program basename */
     71        1.1   itohy #endif
     72        1.1   itohy #ifndef NEED_ENVIRON
     73        1.1   itohy #define NEED_ENVIRON	1	/* _environ: environment vector */
     74        1.1   itohy #endif
     75        1.1   itohy 
     76        1.1   itohy |-----------------------------------------------------------
     77        1.1   itohy |
     78        1.1   itohy |	DOS call
     79        1.1   itohy |
     80        1.1   itohy #define DOS(x)		.word x
     81        1.1   itohy 
     82        1.1   itohy #define __FPUTS		0xFF1E
     83        1.1   itohy #define __VERNUM	0xFF30
     84        1.1   itohy #define __SETBLOCK	0xFF4A
     85        1.1   itohy #define __EXIT2		0xFF4C
     86        1.1   itohy 
     87        1.1   itohy |
     88        1.1   itohy |	seed to estimate argument string/vector and environment vector size
     89        1.1   itohy |	(max nohupair argv[0](92+4) + NULLs(8) + alignment(3))	<- donburi?
     90        1.1   itohy |
     91        1.1   itohy #define estimated_argsz	107
     92        1.1   itohy #define estimated_com	92	/* estimated command name length (included) */
     93        1.1   itohy 
     94        1.1   itohy |
     95        1.1   itohy |	other constants
     96        1.1   itohy |
     97        1.1   itohy #define char_tab	0x09
     98        1.1   itohy #define char_space	0x20
     99        1.1   itohy #define char_dquote	0x22
    100        1.1   itohy #define char_squote	0x27
    101        1.1   itohy #define char_slash	0x2f
    102        1.1   itohy #define char_backslash	0x5c
    103        1.1   itohy 
    104        1.1   itohy #define pdb_mcb		0x10	/* PDB address - MCB address */
    105        1.1   itohy #define drvpath_pdb	0x070	/* drive and path address - PDB address */
    106        1.1   itohy #define command_pdb	0x0b4	/* command name address - PDB address */
    107        1.1   itohy #define top_pdb		0xf0	/* program load address - PDB address */
    108        1.1   itohy 
    109        1.1   itohy #define stderr		2	/* stderr  file handle */
    110        1.1   itohy #define exit_nomem	127	/* exit status on SETBLOCK failure */
    111        1.1   itohy 
    112        1.1   itohy |-----------------------------------------------------------
    113        1.1   itohy |
    114        1.1   itohy |	execution start
    115        1.1   itohy |
    116        1.1   itohy |	a0: MCB address, a1: program end + 1,
    117        1.1   itohy |	a2: command line, a3: environ, a4: execution start
    118        1.1   itohy |
    119        1.1   itohy 	|.cpu	68000
    120        1.1   itohy 	.text
    121        1.1   itohy 	.even
    122        1.1   itohy 
    123        1.2   itohy 	.globl	_C_LABEL(main)
    124        1.1   itohy 
    125        1.2   itohy #ifdef	__ELF__
    126        1.2   itohy ASENTRY_NOPROFILE(_start)
    127        1.2   itohy #else
    128        1.2   itohy ASENTRY_NOPROFILE(start)
    129        1.2   itohy #endif
    130        1.1   itohy #if SUPPORT_HUPAIR
    131        1.1   itohy 	.word	0x611e,0x2348,0x5550,0x4149,0x5200
    132        1.1   itohy #else
    133        1.1   itohy 	.word	0x6016
    134        1.1   itohy #endif
    135        1.1   itohy #if SUPPORT_R_EXEC
    136        1.1   itohy 	.word	0x7263
    137        1.1   itohy #else
    138        1.1   itohy 	.word	0x7863
    139        1.1   itohy #endif
    140        1.1   itohy 	.long	0x72743020,0x56312E31,0x42206279,0x20596173,0x68610000
    141        1.1   itohy 
    142        1.1   itohy |
    143        1.1   itohy |	check if hupair
    144        1.1   itohy |
    145        1.1   itohy #if SUPPORT_HUPAIR
    146        1.2   itohy 	moveal	%a7@+,%a4
    147        1.2   itohy 	lea	%a2@(-8),%a6
    148        1.2   itohy 	moveql	#7,%d3
    149        1.1   itohy chkhupair:
    150        1.2   itohy 	cmpmb	%a6@+,%a4@+
    151        1.2   itohy 	dbne	%d3,chkhupair
    152        1.1   itohy 				| d3.l: 0xFFFF: hupair, 0x000x: not hupair
    153        1.2   itohy 	addqw	#1,%d3
    154        1.1   itohy 	beqs	ishupair
    155        1.1   itohy #endif
    156        1.2   itohy 	moveql	#char_tab,%d3		| tab (= 9)
    157        1.1   itohy ishupair:				| d3.l: 0: hupair, 9: not hupair
    158        1.1   itohy 
    159        1.1   itohy |
    160        1.1   itohy |	(over)estimate and allocate argument/environ area beforehand
    161        1.1   itohy |
    162        1.2   itohy 	addql	#1,%a2			| skip byte count
    163        1.2   itohy 	moveql	#estimated_argsz,%d1	| byte counter
    164        1.2   itohy 	moveal	%a2,%a6
    165        1.2   itohy 	moveql	#char_space,%d4		| space
    166        1.2   itohy acou1:	addql	#1,%d1
    167        1.2   itohy 	moveb	%a6@+,%d0
    168        1.1   itohy 	beqs	acou2
    169        1.2   itohy 	cmpb	%d4,%d0			| space
    170        1.1   itohy 	beqs	acous
    171        1.2   itohy 	cmpb	%d3,%d0			| tab (if not hupair)
    172        1.1   itohy 	bnes	acou1
    173        1.2   itohy acous:	addql	#4,%d1			| for argv area
    174        1.1   itohy 	bras	acou1
    175        1.1   itohy 
    176        1.1   itohy acou2:
    177        1.1   itohy #if SUPPORT_HUPAIR && HUPAIR_ARGV0
    178        1.2   itohy 	tstb	%d3
    179        1.1   itohy 	bnes	anohp
    180        1.2   itohy 	moveql	#-estimated_com,%d2	| reset argv[0] length
    181        1.2   itohy 	moveal	%a6,%a4			| preserve argv[0] string address
    182        1.2   itohy acouhp:	addql	#1,%d2
    183        1.2   itohy 	tstb	%a6@+
    184        1.1   itohy 	bnes	acouhp
    185        1.2   itohy 	addl	%d2,%d1
    186        1.1   itohy anohp:
    187        1.1   itohy #endif
    188        1.1   itohy 					| d1: estimated argument bytes
    189        1.1   itohy 
    190        1.1   itohy #if NEED_ENVIRON
    191        1.2   itohy 	addql	#4,%a3			| skip length field
    192        1.2   itohy 	moveal	%a3,%a6
    193        1.2   itohy ecou1:	addql	#4,%d1
    194        1.2   itohy 	tstb	%a6@+
    195        1.1   itohy 	beqs	ecoue
    196        1.2   itohy ecou2:	tstb	%a6@+
    197        1.1   itohy 	bnes	ecou2
    198        1.1   itohy 	bras	ecou1
    199        1.1   itohy ecoue:
    200        1.1   itohy #endif
    201        1.1   itohy 					| d1: estimated byte count
    202        1.1   itohy 
    203        1.1   itohy |
    204        1.1   itohy |	free memory
    205        1.1   itohy |	and ensure the bss/stack (for .r executable) and argument areas valid
    206        1.1   itohy |
    207        1.2   itohy 	lea	%a0@(pdb_mcb),%a5	| a5: PDB address
    208        1.2   itohy 	subl	%a5,%d1
    209        1.1   itohy #if SUPPORT_R_EXEC
    210        1.2   itohy #define RELOC(sym, reg)		lea sym+top_pdb,reg; addl %a5,reg
    211        1.2   itohy 	moveal	%a1,%a6			| end of data
    212        1.2   itohy 	RELOC(_end, %a1)		| end of bss
    213        1.1   itohy #endif
    214        1.2   itohy 	pea	%a1@(0,%d1:l)		| _end + size - pdb
    215        1.2   itohy 	movel	%a5,%a7@-
    216        1.1   itohy 	DOS(__SETBLOCK)
    217        1.2   itohy 	tstl	%d0
    218        1.1   itohy 	bpls	sbnoerr
    219        1.1   itohy 
    220        1.1   itohy setblock_err:
    221        1.2   itohy 	movew	#stderr,%a7@
    222        1.2   itohy 	bsrs	sberr1			| pea %pc@
    223        1.1   itohy 	.asciz	"setblock failed\r\n"
    224        1.1   itohy 	.even
    225        1.1   itohy sberr1:	DOS(__FPUTS)
    226        1.2   itohy 	movew	#exit_nomem,%a7@
    227        1.1   itohy 	DOS(__EXIT2)			| _exit(exit_nomem)
    228        1.1   itohy 
    229        1.1   itohy sbnoerr:
    230        1.1   itohy 
    231        1.1   itohy |	here, the bss, stack, and argument/environ areas are certainly valid
    232        1.1   itohy 
    233        1.1   itohy |
    234        1.1   itohy |	set stack
    235        1.1   itohy |
    236        1.2   itohy 	moveal	#STACK_SYMBOL+STACK_SIZE,%a7
    237        1.1   itohy 
    238        1.1   itohy #if SUPPORT_R_EXEC
    239        1.1   itohy |
    240        1.1   itohy |	clear bss section
    241        1.1   itohy |
    242        1.1   itohy loop_clrbss:
    243        1.2   itohy 	clrl	%a6@+
    244        1.2   itohy 	cmpal	%a1,%a6
    245        1.1   itohy 	bcss	loop_clrbss
    246        1.1   itohy #endif
    247        1.1   itohy 
    248        1.1   itohy |
    249        1.1   itohy |	save MCB address
    250        1.1   itohy |
    251        1.1   itohy #if NEED_MEMCP
    252        1.1   itohy # if SUPPORT_R_EXEC
    253        1.2   itohy 	RELOC(_C_LABEL(_memcp), %a6)
    254        1.2   itohy 	movel	%a0,%a6@
    255        1.1   itohy # else
    256        1.2   itohy 	movel	%a0,_C_LABEL(_memcp)
    257        1.1   itohy # endif
    258        1.1   itohy #endif
    259        1.1   itohy 
    260        1.1   itohy |
    261        1.1   itohy |	save PDB address
    262        1.1   itohy |
    263        1.1   itohy #if NEED_PROCP
    264        1.1   itohy # if SUPPORT_R_EXEC
    265        1.2   itohy 	RELOC(_C_LABEL(_procp), %a6)
    266        1.2   itohy 	movel	%a5,%a6@
    267        1.1   itohy # else
    268        1.2   itohy 	movel	%a5,_C_LABEL(_procp)
    269        1.1   itohy # endif
    270        1.1   itohy #endif
    271        1.1   itohy 
    272        1.1   itohy |
    273        1.1   itohy |	get version no of Human
    274        1.1   itohy |
    275        1.1   itohy #if NEED_VERNUM
    276        1.1   itohy 	DOS(__VERNUM)
    277        1.1   itohy # if SUPPORT_R_EXEC
    278        1.2   itohy 	RELOC(_C_LABEL(_vernum), %a6)
    279        1.2   itohy 	movel	%d0,%a6@
    280        1.1   itohy # else
    281        1.2   itohy 	movel	%d0,_C_LABEL(_vernum)
    282        1.1   itohy # endif
    283        1.1   itohy #endif
    284        1.1   itohy 
    285        1.1   itohy |
    286        1.1   itohy |	create argv[0]
    287        1.1   itohy |
    288        1.2   itohy 	moveal	%a1,%a0			| top of argument strings
    289        1.1   itohy #if SUPPORT_HUPAIR && HUPAIR_ARGV0
    290        1.2   itohy 	tstb	%d3
    291        1.1   itohy 	beqs	arg0lp
    292        1.1   itohy #endif
    293        1.1   itohy #if ADD_PATHNAME
    294        1.2   itohy 	lea	%a5@(drvpath_pdb),%a4	| drive and path name
    295        1.1   itohy arg0path:
    296        1.2   itohy 	moveb	%a4@+,%a1@+
    297        1.1   itohy 	bnes	arg0path
    298        1.2   itohy 	subql	#1,%a1			| remove nul char
    299        1.1   itohy #endif
    300        1.2   itohy 	lea	%a5@(command_pdb),%a4	| command name
    301        1.2   itohy arg0lp:	moveb	%a4@+,%a1@+
    302        1.1   itohy 	bnes	arg0lp
    303        1.1   itohy 
    304        1.1   itohy #if NEED_PROGNAME
    305        1.1   itohy |
    306        1.1   itohy |	find program basename
    307        1.1   itohy |
    308        1.2   itohy 	moveal	%a1,%a4
    309        1.1   itohy prognlp:
    310        1.2   itohy 	cmpal	%a0,%a4
    311        1.1   itohy 	beqs	prognexit
    312        1.2   itohy 	moveb	%a4@-,%d0
    313        1.2   itohy 	cmpib	#char_slash,%d0
    314        1.1   itohy 	beqs	prognfou
    315        1.2   itohy 	cmpib	#char_backslash,%d0
    316        1.1   itohy 	bnes	prognlp
    317        1.1   itohy prognfou:
    318        1.2   itohy 	addql	#1,%a4			| next of slash
    319        1.1   itohy prognexit:
    320        1.1   itohy # if SUPPORT_R_EXEC
    321        1.2   itohy 	RELOC(_C_LABEL(__progname), %a6)
    322        1.2   itohy 	movel	%a4,%a6@
    323        1.1   itohy # else
    324        1.2   itohy 	movel	%a4,_C_LABEL(__progname)
    325        1.1   itohy # endif
    326        1.1   itohy #endif
    327        1.1   itohy 
    328        1.1   itohy |
    329        1.1   itohy |	create argument strings
    330        1.1   itohy |
    331        1.2   itohy 	moveql	#1,%d0			| (d0:l) # arg
    332        1.1   itohy 
    333        1.2   itohy spskip:	moveb	%a2@+,%d2
    334        1.1   itohy 	beqs	comline_end
    335        1.2   itohy 	cmpb	%d4,%d2			| space
    336        1.1   itohy 	beqs	spskip
    337        1.2   itohy 	cmpb	%d3,%d2			| tab (if not hupair)
    338        1.1   itohy 	beqs	spskip
    339        1.1   itohy 
    340        1.1   itohy 	| create an arg
    341        1.2   itohy 	clrb	%d1			| no quote here
    342        1.2   itohy 	addql	#1,%d0			| increment argc
    343        1.1   itohy 
    344        1.2   itohy arglp:	tstb	%d1
    345        1.1   itohy 	bnes	in_quote
    346        1.2   itohy 	cmpib	#char_dquote,%d2
    347        1.1   itohy 	beqs	quote
    348        1.2   itohy 	cmpib	#char_squote,%d2
    349        1.1   itohy 	bnes	notquote
    350        1.2   itohy quote:	moveb	%d2,%d1			| save quote character
    351        1.1   itohy 	bras	argnextc
    352        1.1   itohy 
    353        1.1   itohy in_quote:
    354        1.2   itohy 	cmpb	%d1,%d2
    355        1.1   itohy 	bnes	argcopyc
    356        1.2   itohy 	clrb	%d1			| quote ended
    357        1.1   itohy 	bras	argnextc
    358        1.1   itohy 
    359        1.1   itohy notquote:
    360        1.2   itohy 	cmpb	%d4,%d2			| space
    361        1.1   itohy 	beqs	arg_end
    362        1.2   itohy 	cmpb	%d3,%d2			| tab (if not hupair)
    363        1.1   itohy 	bnes	argcopyc
    364        1.1   itohy arg_end:
    365        1.2   itohy 	clrb	%a1@+
    366        1.1   itohy 	bras	spskip
    367        1.1   itohy 
    368        1.1   itohy argcopyc:
    369        1.2   itohy 	moveb	%d2,%a1@+		| copy char
    370        1.1   itohy 
    371        1.1   itohy argnextc:
    372        1.2   itohy 	moveb	%a2@+,%d2
    373        1.1   itohy 	bnes	arglp
    374        1.2   itohy 	clrb	%a1@+
    375        1.1   itohy 
    376        1.1   itohy comline_end:
    377        1.1   itohy 
    378        1.1   itohy |
    379        1.1   itohy |	create argv vector
    380        1.1   itohy |
    381        1.2   itohy 	addql	#3,%a1
    382        1.2   itohy 	movel	%a1,%d1
    383        1.2   itohy 	andib	#0xfc,%d1		| long alignment
    384        1.2   itohy 	moveal	%d1,%a1			| argv
    385        1.2   itohy 	movel	%d0,%d4			| argc
    386        1.1   itohy 					| a0 is at argument strings
    387        1.1   itohy mkargv:
    388        1.2   itohy 	movel	%a0,%a1@+		| argv[0] ...
    389        1.2   itohy nxtarg:	tstb	%a0@+
    390        1.1   itohy 	bnes	nxtarg
    391        1.1   itohy #if STRICT_SETBLOCK
    392        1.2   itohy 	subqw	#1,%d0
    393        1.1   itohy #else
    394        1.2   itohy 	subqw	#1,%d4
    395        1.1   itohy #endif
    396        1.1   itohy 	bnes	mkargv
    397        1.1   itohy 
    398        1.2   itohy 	clrl	%a1@+			| argv[argc] should be NULL
    399        1.1   itohy 
    400        1.1   itohy |
    401        1.1   itohy |	create envp vector
    402        1.1   itohy |
    403        1.1   itohy #if NEED_ENVIRON
    404        1.2   itohy 	movel	%a1,%d2
    405        1.2   itohy envlp:	tstb	%a3@
    406        1.1   itohy 	beqs	envend
    407        1.2   itohy 	movel	%a3,%a1@+
    408        1.2   itohy envskp:	tstb	%a3@+
    409        1.1   itohy 	bnes	envskp
    410        1.1   itohy 	bras	envlp
    411        1.2   itohy envend:	clrl	%a1@+			| NULL termination
    412        1.1   itohy # if SUPPORT_R_EXEC
    413        1.2   itohy 	RELOC(_C_LABEL(environ), %a0)
    414        1.2   itohy 	movel	%d2,%a0@
    415        1.1   itohy # else
    416        1.2   itohy 	movel	%d2,_C_LABEL(environ)
    417        1.1   itohy # endif
    418        1.1   itohy #endif
    419        1.1   itohy 
    420        1.1   itohy |
    421        1.1   itohy |	free unused memory
    422        1.1   itohy |
    423        1.1   itohy #if STRICT_SETBLOCK
    424        1.2   itohy 	subal	%a5,%a1
    425        1.2   itohy 	movel	%a1,%a7@-
    426        1.2   itohy 	movel	%a5,%a7@-
    427        1.1   itohy 	DOS(__SETBLOCK)			| reset donburi-kanjo (never fails)
    428        1.2   itohy 	addql	#8,%a7
    429        1.2   itohy 	movel	%d4,%d0			| argc
    430        1.1   itohy #endif
    431        1.1   itohy 
    432        1.1   itohy |
    433        1.1   itohy |	make parameter
    434        1.1   itohy |
    435        1.1   itohy #if NEED_ENVIRON
    436        1.2   itohy 	movel	%d2,%a7@-		| arg #3 --- envp
    437        1.1   itohy #endif
    438        1.1   itohy #if !C_REGPARM
    439        1.2   itohy 	movel	%d1,%a7@-		| arg #2 --- argv
    440        1.2   itohy 	movel	%d0,%a7@-		| arg #1 --- argc
    441        1.1   itohy #endif
    442        1.1   itohy 
    443        1.1   itohy #if SUPPORT_R_EXEC
    444        1.2   itohy 	RELOC(_C_LABEL(main), %a0)
    445        1.2   itohy 	jsr	%a0@
    446        1.1   itohy #else
    447        1.2   itohy 	jsr	_C_LABEL(main)
    448        1.1   itohy #endif
    449        1.1   itohy 
    450        1.1   itohy #if !C_REGPARM || NEED_ENVIRON
    451        1.2   itohy 	movew	%d0,%a7@
    452        1.1   itohy #else
    453        1.2   itohy 	movew	%d0,%a7@-
    454        1.1   itohy #endif
    455        1.1   itohy 	DOS(__EXIT2)
    456        1.1   itohy 
    457        1.2   itohy #if !defined(__ELF__) && DUMMY___main
    458        1.2   itohy ENTRY_NOPROFILE(__main)
    459        1.1   itohy 	rts
    460        1.1   itohy #endif
    461        1.1   itohy 
    462        1.1   itohy |-----------------------------------------------------------
    463        1.1   itohy |
    464        1.1   itohy |	variables
    465        1.1   itohy |
    466        1.1   itohy #if NEED_MEMCP
    467        1.2   itohy 	.comm	_C_LABEL(_memcp),4
    468        1.1   itohy #endif
    469        1.1   itohy 
    470        1.1   itohy #if NEED_PROCP
    471        1.2   itohy 	.comm	_C_LABEL(_procp),4		| PDB address
    472        1.1   itohy #endif
    473        1.1   itohy 
    474        1.1   itohy #if NEED_VERNUM
    475        1.2   itohy 	.comm	_C_LABEL(_vernum),4
    476        1.1   itohy #endif
    477        1.1   itohy 
    478        1.1   itohy #if NEED_PROGNAME
    479        1.2   itohy 	.comm	_C_LABEL(__progname),4
    480        1.1   itohy #endif
    481        1.1   itohy 
    482        1.1   itohy #if NEED_ENVIRON
    483        1.2   itohy 	.comm	_C_LABEL(environ),4		| environ address
    484        1.1   itohy #endif
    485        1.1   itohy 
    486        1.1   itohy |-----------------------------------------------------------
    487        1.1   itohy |
    488        1.1   itohy |	stack
    489        1.1   itohy |
    490        1.2   itohy #ifdef	__ELF__
    491        1.2   itohy 	.section	.stack,"aw",@nobits
    492        1.2   itohy 	.align	4
    493        1.2   itohy STACK_SYMBOL:
    494        1.2   itohy 	.space	STACK_SIZE
    495        1.2   itohy #else
    496        1.1   itohy 	.comm	STACK_SYMBOL,STACK_SIZE
    497        1.2   itohy #endif
    498