summaryrefslogtreecommitdiff
path: root/src/pkg/runtime/tiny/386/sys.s
diff options
context:
space:
mode:
Diffstat (limited to 'src/pkg/runtime/tiny/386/sys.s')
-rw-r--r--src/pkg/runtime/tiny/386/sys.s92
1 files changed, 0 insertions, 92 deletions
diff --git a/src/pkg/runtime/tiny/386/sys.s b/src/pkg/runtime/tiny/386/sys.s
deleted file mode 100644
index 851171476..000000000
--- a/src/pkg/runtime/tiny/386/sys.s
+++ /dev/null
@@ -1,92 +0,0 @@
-// Copyright 2010 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-// Manipulation of segment tables.
-//
-// Descriptor entry format for system call
-// is the native machine format, ugly as it is:
-//
-// 2-byte limit
-// 3-byte base
-// 1-byte: 0x80=present, 0x60=dpl<<5, 0x1F=type
-// 1-byte: 0x80=limit is *4k, 0x40=32-bit operand size,
-// 0x0F=4 more bits of limit
-// 1 byte: 8 more bits of base
-
-// Called to set up memory hardware.
-// Already running in 32-bit mode thanks to boot block,
-// but we need to install our new GDT that we can modify.
-TEXT runtime·msetup(SB), 7, $0
- MOVL runtime·gdtptr(SB), GDTR
- MOVL $(1*8+0), AX
- MOVW AX, DS
- MOVW AX, ES
- MOVW AX, SS
- MOVW $0, AX
- MOVW AX, FS
- MOVW AX, GS
-
- // long jmp to cs:mret
- BYTE $0xEA
- LONG $runtime·mret(SB)
- WORD $(2*8+0)
-
-TEXT runtime·mret(SB), 7, $0
- RET
-
-// GDT memory
-TEXT runtime·gdt(SB), 7, $0
- // null segment
- LONG $0
- LONG $0
-
- // 4GB data segment
- LONG $0xFFFF
- LONG $0x00CF9200
-
- // 4GB code segment
- LONG $0xFFFF
- LONG $0x00CF9A00
-
- // null segment (will be thread-local storage segment)
- LONG $0
- LONG $0
-
-// GDT pseudo-descriptor
-TEXT runtime·gdtptr(SB), 7, $0
- WORD $(4*8)
- LONG $runtime·gdt(SB)
-
-// Called to establish the per-thread segment.
-// Write to gdt[3] and reload the gdt register.
-// setldt(int entry, int address, int limit)
-TEXT runtime·setldt(SB),7,$32
- MOVL address+4(FP), BX // aka base
- MOVL limit+8(FP), CX
-
- // set up segment descriptor
- LEAL gdt+(3*8)(SB), AX // gdt entry #3
- MOVL $0, 0(AX)
- MOVL $0, 4(AX)
-
- MOVW BX, 2(AX)
- SHRL $16, BX
- MOVB BX, 4(AX)
- SHRL $8, BX
- MOVB BX, 7(AX)
-
- MOVW CX, 0(AX)
- SHRL $16, CX
- ANDL $0x0F, CX
- ORL $0x40, CX // 32-bit operand size
- MOVB CX, 6(AX)
- MOVB $0xF2, 5(AX) // r/w data descriptor, dpl=3, present
-
- MOVL runtime·gdtptr(SB), GDTR
-
- // Compute segment selector - (entry*8+0)
- MOVL $(3*8+0), AX
- MOVW AX, GS
- RET
-