This helps running cross compiled programs as well as compiling programs under Sortix with gcc. There is also support for global constructors. Currently, cross-compiled executables uses these startup files. The current build system continues to use start.o, which does not offer global constructors and other useful features. Note that these using the crtX.o files requires the crtbegin.o and crtend.o files that ship with the cross compiler, but that should be no problem.
53 lines
1.5 KiB
ArmAsm
53 lines
1.5 KiB
ArmAsm
/******************************************************************************
|
|
|
|
COPYRIGHT(C) JONAS 'SORTIE' TERMANSEN 2011.
|
|
|
|
This file is part of LibMaxsi.
|
|
|
|
LibMaxsi is free software: you can redistribute it and/or modify it under
|
|
the terms of the GNU Lesser General Public License as published by the Free
|
|
Software Foundation, either version 3 of the License, or (at your option)
|
|
any later version.
|
|
|
|
LibMaxsi is distributed in the hope that it will be useful, but WITHOUT ANY
|
|
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
|
FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for
|
|
more details.
|
|
|
|
You should have received a copy of the GNU Lesser General Public License
|
|
along with LibMaxsi. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
start.s
|
|
A stub for linking to the C runtime on Sortix.
|
|
|
|
******************************************************************************/
|
|
|
|
/* NOTE: This is almost identical to what is in crt1.s. crt1.s is used when
|
|
compiling with the real cross compiler, while start.s is used when
|
|
using the older hacky way of building Sortix. Please try to keep these
|
|
files alike by doing changes both places until we only build Sortix
|
|
with real cross compilers. */
|
|
|
|
.globl _start
|
|
|
|
.section .text
|
|
|
|
.type _start, @function
|
|
_start:
|
|
|
|
movl %ecx, environ # envp
|
|
|
|
# Arguments for main
|
|
push %ebx # argv
|
|
push %eax # argc
|
|
|
|
call initialize_standard_library
|
|
|
|
# Run main
|
|
call main
|
|
|
|
# Terminate the process with main's exit code.
|
|
push %eax
|
|
call exit
|
|
|