summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libbsp/hppa1.1/simhppa/start
diff options
context:
space:
mode:
authorJoel Sherrill <joel.sherrill@OARcorp.com>1997-04-01 23:07:52 +0000
committerJoel Sherrill <joel.sherrill@OARcorp.com>1997-04-01 23:07:52 +0000
commit254b4450718a0873b444d35aeb6d74ba589734ea (patch)
tree0615a270d7b384c7394eb57290f4b6b92ed20706 /c/src/lib/libbsp/hppa1.1/simhppa/start
parentFixed symbols. (diff)
downloadrtems-254b4450718a0873b444d35aeb6d74ba589734ea.tar.bz2
This set of changes is the build of what was required to convert to
GNU autoconf. This is the first large step in allowing an RTEMS user to perform a one-tree build (per crossgcc FAQ) including RTEMS in the build process. With this change RTEMS is configured in built in the same style as the GNU tools, yet retains the basic structure of its traditional Makefiles (ala Tony Bennett). Jiri Gaisler (jgais@wd.estec.esa.nl) deserves (and received) a big thank you for doing this. There are still issues to be resolved but as of this commit, all target which can be built on a linux host have been using a modified version of the source Jiri submitted. This source was merged and most targets built in the tree before this commit. There are some issues which remain to be resolved but they are primarily related to host OS dependencies, script issues, the use of gawk for hack_specs, and the dependence on gcc snapshots. These will be resolved.
Diffstat (limited to 'c/src/lib/libbsp/hppa1.1/simhppa/start')
-rw-r--r--c/src/lib/libbsp/hppa1.1/simhppa/start/start.s169
1 files changed, 169 insertions, 0 deletions
diff --git a/c/src/lib/libbsp/hppa1.1/simhppa/start/start.s b/c/src/lib/libbsp/hppa1.1/simhppa/start/start.s
new file mode 100644
index 0000000000..92fda897d9
--- /dev/null
+++ b/c/src/lib/libbsp/hppa1.1/simhppa/start/start.s
@@ -0,0 +1,169 @@
+/*
+ * crt0.S -- startup file for hppa on RTEMS
+ *
+ * $Id$
+ */
+
+ .COPYRIGHT "crt0.S for hppa"
+
+ .DATA
+
+_progname .STRINGZ "simhppa"
+_crt0_argv .WORD _progname, 0
+
+/*
+ * Set up the standard spaces (sections) These definitions come
+ * from /lib/pcc_prefix.s.
+ */
+ .TEXT
+
+/*
+ * stuff we need that is defined elsewhere.
+ */
+ .IMPORT main, CODE
+ .IMPORT _bss_start, DATA
+ .IMPORT _bss_end, DATA
+ .IMPORT environ, DATA
+
+/*
+ * start -- set things up so the application will run.
+ *
+ */
+ .PROC
+ .CALLINFO SAVE_SP, FRAME=48
+ .EXPORT $START$,ENTRY
+ .EXPORT start,ENTRY
+$START$
+start:
+
+/*
+ * Get a stack
+ */
+
+ ldil L%crt_stack+48,%r30
+ ldo R%crt_stack+48(%r30),%r30
+
+/*
+ * we need to set %r27 (global data pointer) here
+ */
+
+ ldil L%$global$,%r27
+ ldo R%$global$(%r27),%r27
+
+/*
+ * zerobss -- zero out the bss section
+ * XXX We don't do this since simulator and boot rom will do this for us.
+ */
+#if 0
+ ; load the start of bss
+ ldil L%_bss_start,%r4
+ ldo R%_bss_start(%r4),%r4
+
+ ; load the end of bss
+ ldil L%_bss_end,%r5
+ ldo R%_bss_end(%r5),%r5
+
+
+bssloop
+ addi -1,%r5,%r5 ; decrement _bss_end
+ stb %r0,0(0,%r5) ; we do this by bytes for now even
+ ; though it is slower, it is safer
+ combf,= %r4,%r5, bssloop
+ nop
+#endif
+
+ ldi 1,%ret0
+
+/*
+ * Call the "main" routine from the application to get it going.
+ * We call it as main(1, argv, 0)
+ */
+
+ copy %r0, %r24
+
+ ldil L%_crt0_argv,%r25
+ ldo R%_crt0_argv(%r25),%r25
+
+ bl main,%r2
+ ldo 1(%r0), %r26
+
+ .PROCEND
+/*
+ * _exit -- Exit from the application. Normally we cause a user trap
+ * to return to the ROM monitor for another run, but with
+ * this monitor we can not. Still, "C" wants this symbol, it
+ * should be here. Jumping to 0xF0000004 jumps back into the
+ * firmware, while writing a 5 to 0xFFFE0030 causes a reset.
+ */
+_exit_fallthru
+ .PROC
+ .CALLINFO
+ .ENTRY
+
+ ;; This just causes a breakpoint exception
+ break 0x0,0x0
+ bv,n (%rp)
+ nop
+ .EXIT
+ .PROCEND
+
+/*
+ * _sr4export -- support for called functions. (mostly for GDB)
+ */
+ .EXPORT _sr4export, ENTRY
+_sr4export:
+ .PROC
+ .CALLINFO
+ .ENTRY
+
+ ble 0(%sr4,%r22)
+ copy %r31,%rp
+ ldw -18(%sr0,%sp),%rp
+ ldsid (%sr0,%rp),%r1
+ mtsp %r1,%sr0
+ be,n 0(%sr0,%rp)
+ nop
+ .EXIT
+ .PROCEND
+
+
+ .subspa $UNWIND_START$,QUAD=0,ALIGN=8,ACCESS=0x2c,SORT=56
+ .export $UNWIND_START
+$UNWIND_START
+ .subspa $UNWIND$,QUAD=0,ALIGN=8,ACCESS=0x2c,SORT=64
+ .subspa $UNWIND_END$,QUAD=0,ALIGN=8,ACCESS=0x2c,SORT=72
+ .export $UNWIND_END
+$UNWIND_END
+ .subspa $RECOVER_START$,QUAD=0,ALIGN=4,ACCESS=0x2c,SORT=73
+ .export $RECOVER_START
+$RECOVER_START
+ .subspa $RECOVER$,QUAD=0,ALIGN=4,ACCESS=0x2c,SORT=80
+ .subspa $RECOVER_END$,QUAD=0,ALIGN=4,ACCESS=0x2c,SORT=88
+ .export $RECOVER_END
+$RECOVER_END
+
+/*
+ * Here we set up the standard date sub spaces.
+ *
+ * Set up some room for a stack. We just grab a chunk of memory.
+ * We also setup some space for the global variable space, which
+ * must be done using the reserved name "$global$" so "C" code
+ * can find it. The stack grows towards the higher addresses.
+ */
+
+ .subspa $DATA$,QUAD=1,ALIGN=8,ACCESS=0x1f,SORT=16
+ .subspa $SHORTDATA$,QUAD=1,ALIGN=8,ACCESS=0x1f,SORT=24
+ .subspa $GLOBAL$,QUAD=1,ALIGN=8,ACCESS=0x1f,SORT=40
+ .export $global$
+$global$
+ .subspa $SHORTBSS$,QUAD=1,ALIGN=8,ACCESS=0x1f,SORT=80,ZERO
+ .subspa $BSS$,QUAD=1,ALIGN=8,ACCESS=0x1f,SORT=82,ZERO
+
+ .subspa $STACK$,QUAD=1,ALIGN=8,ACCESS=0x1f,SORT=88,ZERO
+
+ .export crt_stack
+crt_stack
+ .comm 0x1000
+
+ .end
+