Files
Robin 0bb2d1def6 drivers/{multiboot,vbe,qemu}: add docs (#102)
* drivers/vbe: add docs

Also, remove unused bootloaderMagic constant. A corresponding constant
is defined in and used by the multiboot package.

* drivers/qemu: add docs

* drivers/multiboot: fix typo; s/DrivesrAddr/DriversAddr/

* all: add go:build comments for Go build tags, as used by Go 1.17

ref: https://go.dev/doc/go1.17#build-lines

This commit was automated using goimports:

	find . -type f -name '*.go' | xargs -I '{}' goimports -w '{}'
2022-02-08 22:58:59 +08:00

67 lines
1.4 KiB
Go

//go:build ignore
// +build ignore
package main
import (
"bytes"
"fmt"
"io/ioutil"
"log"
)
func hasErrCode(idx int) bool {
return idx == 8 || (idx >= 10 && idx <= 14) || idx == 17
}
func genasm() {
buf := new(bytes.Buffer)
buf.WriteString("// Code generated by genvector.go using 'go generate'. DO NOT EDIT.\n")
buf.WriteString(`#include "textflag.h"`)
buf.WriteString("\n\n")
for i := 0; i < 256; i++ {
fmt.Fprintf(buf, "TEXT ·trap%d(SB), NOSPLIT, $0-0\n", i)
if !hasErrCode(i) {
buf.WriteString(" PUSHQ $0\n")
}
fmt.Fprintf(buf, " PUSHQ $%d\n", i)
buf.WriteString(" JMP alltraps(SB)\n")
buf.WriteString(" POPQ AX\n")
if !hasErrCode(i) {
buf.WriteString(" POPQ AX\n")
}
buf.WriteString(" RET\n\n")
}
err := ioutil.WriteFile("vectors.s", buf.Bytes(), 0644)
if err != nil {
log.Fatal(err)
}
}
func gengo() {
buf := new(bytes.Buffer)
buf.WriteString("// Code generated by genvector.go using 'go generate'. DO NOT EDIT.\n")
buf.WriteString("package kernel\n\n")
for i := 0; i < 256; i++ {
fmt.Fprintf(buf, "//go:nosplit\n")
fmt.Fprintf(buf, "func trap%d()\n", i)
}
buf.WriteString("\n")
buf.WriteString("var vectors = [...]func(){\n")
for i := 0; i < 256; i++ {
fmt.Fprintf(buf, "trap%d,\n", i)
}
buf.WriteString("}\n\n")
err := ioutil.WriteFile("vectors.go", buf.Bytes(), 0644)
if err != nil {
log.Fatal(err)
}
}
func main() {
genasm()
gengo()
}