Update and reformat copyright, remove trailing white spaces and send
[kopensolaris-gnu/glibc.git] / sysdeps / standalone / i386 / force_cpu386 / strtsupp.S
1 /* Copyright (C) 1994, 1997 Free Software Foundation, Inc.
2    Contributed by Joel Sherrill (jsherril@redstone-emh2.army.mil),
3      On-Line Applications Research Corporation.
4    This file is part of the GNU C Library.
5
6    The GNU C Library is free software; you can redistribute it and/or
7    modify it under the terms of the GNU Library General Public License as
8    published by the Free Software Foundation; either version 2 of the
9    License, or (at your option) any later version.
10
11    The GNU C Library is distributed in the hope that it will be useful,
12    but WITHOUT ANY WARRANTY; without even the implied warranty of
13    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14    Library General Public License for more details.
15
16    You should have received a copy of the GNU Library General Public
17    License along with the GNU C Library; see the file COPYING.LIB.  If not,
18    write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
19    Boston, MA 02111-1307, USA.  */
20
21 /*  This file assists the board independent startup code by
22  *  loading the proper segment register values.  The values
23  *  loaded are dependent on the FORCEBUG.
24  *
25  *  NOTE:  No stack has been established when this routine
26  *         is invoked.  It returns by jumping back to the start code.
27  *
28  */
29
30 /*
31  *  FORCEBUG loads us into a virtual address space which
32  *  really starts at PHYSICAL_ADDRESS_BASE.
33  *
34  */
35
36 .set PHYSICAL_ADDRESS_BASE,    0x00002000
37
38 /*
39  *  At reset time, FORCEBUG normally has the segment selectors preloaded.
40  *  If a human resets the instruction pointer, this will not have occurred.
41  *  However, no guarantee can be made of the other registers if cs:ip was
42  *  modified to restart the program.  Because of this, the BSP reloads all
43  *  segment registers (except cs) with the values they have following
44  *  a reset.
45  */
46
47
48 .set RESET_SS, 0x40        # initial value of stack segment register
49 .set RESET_DS, 0x40        # initial value of data segment register
50 .set RESET_ES, 0x40        # initial value of extra segment register
51 .set RESET_FS, 0x40        # initial value of "f" segment register
52 .set RESET_GS, 0x30        # initial value of "g" segment register
53
54
55 #define LOAD_SEGMENTS(_value,_segreg) \
56         movw      $_value##,%ax ;  \
57         movw      %ax,##_segreg
58
59
60         .global  _load_segments
61
62         .global   _establish_stack
63
64 _load_segments:
65
66         LOAD_SEGMENTS( RESET_SS, %ss )
67         LOAD_SEGMENTS( RESET_DS, %ds )
68         LOAD_SEGMENTS( RESET_ES, %es )
69         LOAD_SEGMENTS( RESET_FS, %fs )
70         LOAD_SEGMENTS( RESET_GS, %gs )
71
72         jmp     _establish_stack        # return to the bsp entry code
73
74         .global  _return_to_monitor
75 _return_to_monitor:
76
77         movb    $0,%al
78         int     $0x20                   # restart FORCEbug
79         jmp     start                   # FORCEbug does not reset PC
80
81         .data
82
83         .global _Do_Load_IDT
84 _Do_Load_IDT:   .byte 1
85
86         .global _Do_Load_GDT
87 _Do_Load_GDT:   .byte 0