mirror of
https://github.com/openhwgroup/cva6.git
synced 2025-04-23 21:57:11 -04:00
72 lines
1.9 KiB
ArmAsm
72 lines
1.9 KiB
ArmAsm
/* Copyright (c) 2017 SiFive Inc. All rights reserved.
|
|
* Copyright (c) 2019 ETH Zürich and University of Bologna
|
|
* This copyrighted material is made available to anyone wishing to use,
|
|
* modify, copy, or redistribute it subject to the terms and conditions
|
|
* of the FreeBSD License. This program is distributed in the hope that
|
|
* it will be useful, but WITHOUT ANY WARRANTY expressed or implied,
|
|
* including the implied warranties of MERCHANTABILITY or FITNESS FOR
|
|
* A PARTICULAR PURPOSE. A copy of this license is available at
|
|
* http://www.opensource.org/licenses.
|
|
*/
|
|
/* Make sure the vector table gets linked into the binary. */
|
|
.global vector_table
|
|
|
|
/* Entry point for bare metal programs */
|
|
.section .text.start
|
|
.global _start
|
|
.type _start, @function
|
|
|
|
_start:
|
|
/* initialize global pointer */
|
|
.option push
|
|
.option norelax
|
|
1: auipc gp, %pcrel_hi(__global_pointer$)
|
|
addi gp, gp, %pcrel_lo(1b)
|
|
.option pop
|
|
|
|
/* initialize stack pointer */
|
|
la sp, __stack_end
|
|
|
|
/* set vector table address */
|
|
la a0, __vector_start
|
|
ori a0, a0, 1 /*vector mode = vectored */
|
|
csrw mtvec, a0
|
|
|
|
/* clear the bss segment */
|
|
la a0, _edata
|
|
la a2, _end
|
|
sub a2, a2, a0
|
|
li a1, 0
|
|
call memset
|
|
|
|
/* new-style constructors and destructors */
|
|
la a0, __libc_fini_array
|
|
call atexit
|
|
call __libc_init_array
|
|
|
|
/* call main */
|
|
// lw a0, 0(sp) /* a0 = argc */
|
|
// addi a1, sp, __SIZEOF_POINTER__ /* a1 = argv */
|
|
// li a2, 0 /* a2 = envp = NULL */
|
|
// Initialize these variables to 0. Cannot use argc or argv
|
|
// since the stack is not initialized
|
|
li a0, 0
|
|
li a1, 0
|
|
li a2, 0
|
|
|
|
call main
|
|
tail exit
|
|
|
|
.size _start, .-_start
|
|
|
|
.global _init
|
|
.type _init, @function
|
|
.global _fini
|
|
.type _fini, @function
|
|
_init:
|
|
_fini:
|
|
/* These don't have to do anything since we use init_array/fini_array. Prevent
|
|
missing symbol error */
|
|
ret
|
|
.size _init, .-_init
|
|
.size _fini, .-_fini
|