Mercurial > ecos
annotate packages/hal/synth/i386linux/current/src/vectors.S @ 260:922ca26d90c4
Add variables cyg_hal_sys_argc/argv/environ, corresponding to the
arguments and environment vector passed to the synthetic target
application.
| author | bartv |
|---|---|
| date | Sun, 04 Aug 2002 23:18:58 +0000 |
| parents | d2c90368aeef |
| children | 74dbf4c3f2e1 |
| rev | line source |
|---|---|
|
161
ac086aa3217e
Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents:
diff
changeset
|
1 ##============================================================================= |
|
ac086aa3217e
Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents:
diff
changeset
|
2 ## |
|
ac086aa3217e
Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents:
diff
changeset
|
3 ## vectors.S |
|
ac086aa3217e
Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents:
diff
changeset
|
4 ## |
|
ac086aa3217e
Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents:
diff
changeset
|
5 ## x86 exception vectors |
|
ac086aa3217e
Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents:
diff
changeset
|
6 ## |
|
ac086aa3217e
Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents:
diff
changeset
|
7 ##============================================================================= |
|
208
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
161
diff
changeset
|
8 #####ECOSGPLCOPYRIGHTBEGIN#### |
|
210
d2c90368aeef
Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
208
diff
changeset
|
9 ## ------------------------------------------- |
|
d2c90368aeef
Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
208
diff
changeset
|
10 ## This file is part of eCos, the Embedded Configurable Operating System. |
|
d2c90368aeef
Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
208
diff
changeset
|
11 ## Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. |
|
d2c90368aeef
Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
208
diff
changeset
|
12 ## |
|
d2c90368aeef
Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
208
diff
changeset
|
13 ## eCos is free software; you can redistribute it and/or modify it under |
|
d2c90368aeef
Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
208
diff
changeset
|
14 ## the terms of the GNU General Public License as published by the Free |
|
d2c90368aeef
Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
208
diff
changeset
|
15 ## Software Foundation; either version 2 or (at your option) any later version. |
|
d2c90368aeef
Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
208
diff
changeset
|
16 ## |
|
d2c90368aeef
Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
208
diff
changeset
|
17 ## eCos is distributed in the hope that it will be useful, but WITHOUT ANY |
|
d2c90368aeef
Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
208
diff
changeset
|
18 ## WARRANTY; without even the implied warranty of MERCHANTABILITY or |
|
d2c90368aeef
Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
208
diff
changeset
|
19 ## FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
|
d2c90368aeef
Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
208
diff
changeset
|
20 ## for more details. |
|
d2c90368aeef
Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
208
diff
changeset
|
21 ## |
|
d2c90368aeef
Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
208
diff
changeset
|
22 ## You should have received a copy of the GNU General Public License along |
|
d2c90368aeef
Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
208
diff
changeset
|
23 ## with eCos; if not, write to the Free Software Foundation, Inc., |
|
d2c90368aeef
Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
208
diff
changeset
|
24 ## 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. |
|
d2c90368aeef
Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
208
diff
changeset
|
25 ## |
|
d2c90368aeef
Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
208
diff
changeset
|
26 ## As a special exception, if other files instantiate templates or use macros |
|
d2c90368aeef
Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
208
diff
changeset
|
27 ## or inline functions from this file, or you compile this file and link it |
|
d2c90368aeef
Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
208
diff
changeset
|
28 ## with other works to produce a work based on this file, this file does not |
|
d2c90368aeef
Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
208
diff
changeset
|
29 ## by itself cause the resulting work to be covered by the GNU General Public |
|
d2c90368aeef
Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
208
diff
changeset
|
30 ## License. However the source code for this file must still be made available |
|
d2c90368aeef
Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
208
diff
changeset
|
31 ## in accordance with section (3) of the GNU General Public License. |
|
d2c90368aeef
Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
208
diff
changeset
|
32 ## |
|
d2c90368aeef
Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
208
diff
changeset
|
33 ## This exception does not invalidate any other reasons why a work based on |
|
d2c90368aeef
Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
208
diff
changeset
|
34 ## this file might be covered by the GNU General Public License. |
|
d2c90368aeef
Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
208
diff
changeset
|
35 ## |
|
d2c90368aeef
Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
208
diff
changeset
|
36 ## Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. |
|
d2c90368aeef
Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
208
diff
changeset
|
37 ## at http://sources.redhat.com/ecos/ecos-license/ |
|
d2c90368aeef
Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
208
diff
changeset
|
38 ## ------------------------------------------- |
|
208
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
161
diff
changeset
|
39 #####ECOSGPLCOPYRIGHTEND#### |
|
161
ac086aa3217e
Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents:
diff
changeset
|
40 ##============================================================================= |
|
ac086aa3217e
Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents:
diff
changeset
|
41 #######DESCRIPTIONBEGIN#### |
|
ac086aa3217e
Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents:
diff
changeset
|
42 ## |
|
ac086aa3217e
Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents:
diff
changeset
|
43 ## Author(s): bartv |
|
ac086aa3217e
Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents:
diff
changeset
|
44 ## Contributors:bartv |
|
ac086aa3217e
Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents:
diff
changeset
|
45 ## Date: 2001-03-16 |
|
ac086aa3217e
Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents:
diff
changeset
|
46 ## Purpose: Synthetic target startup |
|
ac086aa3217e
Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents:
diff
changeset
|
47 ## Description: When running on real hardware vectors.S contains |
|
ac086aa3217e
Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents:
diff
changeset
|
48 ## initialization code and usually the low-level interrupt and |
|
ac086aa3217e
Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents:
diff
changeset
|
49 ## exception support. On the synthetic target the latter is |
|
260
922ca26d90c4
Add variables cyg_hal_sys_argc/argv/environ, corresponding to the
bartv
parents:
210
diff
changeset
|
50 ## handled by C code. The main initialization that is needed is |
|
161
ac086aa3217e
Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents:
diff
changeset
|
51 ## to jump into the C startup. |
|
ac086aa3217e
Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents:
diff
changeset
|
52 ## |
|
ac086aa3217e
Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents:
diff
changeset
|
53 ######DESCRIPTIONEND#### |
|
ac086aa3217e
Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents:
diff
changeset
|
54 ## |
|
ac086aa3217e
Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents:
diff
changeset
|
55 ##============================================================================= |
|
ac086aa3217e
Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents:
diff
changeset
|
56 |
|
260
922ca26d90c4
Add variables cyg_hal_sys_argc/argv/environ, corresponding to the
bartv
parents:
210
diff
changeset
|
57 # According the SVR4/i386 ABI, most registers are undefined. However |
|
922ca26d90c4
Add variables cyg_hal_sys_argc/argv/environ, corresponding to the
bartv
parents:
210
diff
changeset
|
58 # there is some interesting information on the stack: |
|
922ca26d90c4
Add variables cyg_hal_sys_argc/argv/environ, corresponding to the
bartv
parents:
210
diff
changeset
|
59 # %esp argc |
|
922ca26d90c4
Add variables cyg_hal_sys_argc/argv/environ, corresponding to the
bartv
parents:
210
diff
changeset
|
60 # %esp+4 argv[0] |
|
922ca26d90c4
Add variables cyg_hal_sys_argc/argv/environ, corresponding to the
bartv
parents:
210
diff
changeset
|
61 # ... argv[1 onwards] |
|
922ca26d90c4
Add variables cyg_hal_sys_argc/argv/environ, corresponding to the
bartv
parents:
210
diff
changeset
|
62 # %esp + (argc*4) NULL |
|
922ca26d90c4
Add variables cyg_hal_sys_argc/argv/environ, corresponding to the
bartv
parents:
210
diff
changeset
|
63 # ... environ[0] |
|
922ca26d90c4
Add variables cyg_hal_sys_argc/argv/environ, corresponding to the
bartv
parents:
210
diff
changeset
|
64 # ... ... |
|
922ca26d90c4
Add variables cyg_hal_sys_argc/argv/environ, corresponding to the
bartv
parents:
210
diff
changeset
|
65 # ... NULL |
|
922ca26d90c4
Add variables cyg_hal_sys_argc/argv/environ, corresponding to the
bartv
parents:
210
diff
changeset
|
66 # |
|
922ca26d90c4
Add variables cyg_hal_sys_argc/argv/environ, corresponding to the
bartv
parents:
210
diff
changeset
|
67 # There are some other things that could be done, for example aligning |
|
922ca26d90c4
Add variables cyg_hal_sys_argc/argv/environ, corresponding to the
bartv
parents:
210
diff
changeset
|
68 # the stack to a 16-byte boundary for SSE, but it is not clear which of |
|
922ca26d90c4
Add variables cyg_hal_sys_argc/argv/environ, corresponding to the
bartv
parents:
210
diff
changeset
|
69 # those things are actually useful. The glibc source file |
|
922ca26d90c4
Add variables cyg_hal_sys_argc/argv/environ, corresponding to the
bartv
parents:
210
diff
changeset
|
70 # sysdeps/i386/elf/start.S contains some relevant information. |
|
161
ac086aa3217e
Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents:
diff
changeset
|
71 |
|
ac086aa3217e
Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents:
diff
changeset
|
72 #============================================================================== |
|
ac086aa3217e
Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents:
diff
changeset
|
73 |
|
260
922ca26d90c4
Add variables cyg_hal_sys_argc/argv/environ, corresponding to the
bartv
parents:
210
diff
changeset
|
74 .file "vectors.S" |
|
161
ac086aa3217e
Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents:
diff
changeset
|
75 |
|
ac086aa3217e
Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents:
diff
changeset
|
76 .extern _linux_entry |
|
260
922ca26d90c4
Add variables cyg_hal_sys_argc/argv/environ, corresponding to the
bartv
parents:
210
diff
changeset
|
77 |
|
922ca26d90c4
Add variables cyg_hal_sys_argc/argv/environ, corresponding to the
bartv
parents:
210
diff
changeset
|
78 .data |
|
922ca26d90c4
Add variables cyg_hal_sys_argc/argv/environ, corresponding to the
bartv
parents:
210
diff
changeset
|
79 .global cyg_hal_sys_argc |
|
922ca26d90c4
Add variables cyg_hal_sys_argc/argv/environ, corresponding to the
bartv
parents:
210
diff
changeset
|
80 cyg_hal_sys_argc: |
|
922ca26d90c4
Add variables cyg_hal_sys_argc/argv/environ, corresponding to the
bartv
parents:
210
diff
changeset
|
81 .long 0 |
|
922ca26d90c4
Add variables cyg_hal_sys_argc/argv/environ, corresponding to the
bartv
parents:
210
diff
changeset
|
82 .global cyg_hal_sys_argv |
|
922ca26d90c4
Add variables cyg_hal_sys_argc/argv/environ, corresponding to the
bartv
parents:
210
diff
changeset
|
83 cyg_hal_sys_argv: |
|
922ca26d90c4
Add variables cyg_hal_sys_argc/argv/environ, corresponding to the
bartv
parents:
210
diff
changeset
|
84 .long 0 |
|
922ca26d90c4
Add variables cyg_hal_sys_argc/argv/environ, corresponding to the
bartv
parents:
210
diff
changeset
|
85 .global cyg_hal_sys_environ |
|
922ca26d90c4
Add variables cyg_hal_sys_argc/argv/environ, corresponding to the
bartv
parents:
210
diff
changeset
|
86 cyg_hal_sys_environ: |
|
922ca26d90c4
Add variables cyg_hal_sys_argc/argv/environ, corresponding to the
bartv
parents:
210
diff
changeset
|
87 .long 0 |
|
922ca26d90c4
Add variables cyg_hal_sys_argc/argv/environ, corresponding to the
bartv
parents:
210
diff
changeset
|
88 |
|
161
ac086aa3217e
Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents:
diff
changeset
|
89 .text |
|
ac086aa3217e
Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents:
diff
changeset
|
90 .globl _start |
|
ac086aa3217e
Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents:
diff
changeset
|
91 _start: |
|
260
922ca26d90c4
Add variables cyg_hal_sys_argc/argv/environ, corresponding to the
bartv
parents:
210
diff
changeset
|
92 popl %eax |
|
922ca26d90c4
Add variables cyg_hal_sys_argc/argv/environ, corresponding to the
bartv
parents:
210
diff
changeset
|
93 movl %eax, cyg_hal_sys_argc |
|
922ca26d90c4
Add variables cyg_hal_sys_argc/argv/environ, corresponding to the
bartv
parents:
210
diff
changeset
|
94 movl %esp, %ebx |
|
922ca26d90c4
Add variables cyg_hal_sys_argc/argv/environ, corresponding to the
bartv
parents:
210
diff
changeset
|
95 movl %ebx, cyg_hal_sys_argv |
|
922ca26d90c4
Add variables cyg_hal_sys_argc/argv/environ, corresponding to the
bartv
parents:
210
diff
changeset
|
96 inc %eax |
|
922ca26d90c4
Add variables cyg_hal_sys_argc/argv/environ, corresponding to the
bartv
parents:
210
diff
changeset
|
97 addl %eax, %eax |
|
922ca26d90c4
Add variables cyg_hal_sys_argc/argv/environ, corresponding to the
bartv
parents:
210
diff
changeset
|
98 addl %eax, %eax |
|
922ca26d90c4
Add variables cyg_hal_sys_argc/argv/environ, corresponding to the
bartv
parents:
210
diff
changeset
|
99 addl %eax, %ebx |
|
922ca26d90c4
Add variables cyg_hal_sys_argc/argv/environ, corresponding to the
bartv
parents:
210
diff
changeset
|
100 movl %ebx, cyg_hal_sys_environ |
|
922ca26d90c4
Add variables cyg_hal_sys_argc/argv/environ, corresponding to the
bartv
parents:
210
diff
changeset
|
101 |
|
161
ac086aa3217e
Merge from eCos master repository on 2001-06-08-21:11:51-BST
jlarmour
parents:
diff
changeset
|
102 jmp _linux_entry |
