mirror of
https://github.com/bdnugget/eggos.git
synced 2026-11-07 04:17:27 +00:00
log: add leveled log
This commit is contained in:
1 parent
da213e35c3
commit
a2fac43358
16 files changed
+184
-131
No files matched your search
+2
-2
@@ -11,9 +11,9 @@ import (
|
||||
"time"
|
||||
|
||||
"github.com/icexin/eggos/app"
|
||||
"github.com/icexin/eggos/debug"
|
||||
"github.com/icexin/eggos/drivers/kbd"
|
||||
"github.com/icexin/eggos/drivers/vbe"
|
||||
"github.com/icexin/eggos/log"
|
||||
|
||||
"github.com/fogleman/nes/nes"
|
||||
"golang.org/x/image/draw"
|
||||
@@ -117,7 +117,7 @@ func runGame(rom io.Reader, scaler draw.Interpolator) error {
|
||||
sum += used
|
||||
cnt++
|
||||
if cnt%30 == 0 {
|
||||
debug.Logf("used %s", sum/time.Duration(cnt))
|
||||
log.Infof("used %s", sum/time.Duration(cnt))
|
||||
cnt = 0
|
||||
sum = 0
|
||||
}
|
||||
|
||||
@@ -1,38 +0,0 @@
|
||||
package debug
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"fmt"
|
||||
"os"
|
||||
|
||||
"github.com/icexin/eggos/console"
|
||||
"github.com/icexin/eggos/drivers/uart"
|
||||
"github.com/icexin/eggos/kernel/sys"
|
||||
)
|
||||
|
||||
func Logf(fmtstr string, args ...interface{}) {
|
||||
if os.Getenv("EGGOS_DEBUG") == "" {
|
||||
return
|
||||
}
|
||||
buf := bytes.Buffer{}
|
||||
fmt.Fprintf(&buf, fmtstr+"\n", args...)
|
||||
buf.WriteTo(console.Console())
|
||||
}
|
||||
|
||||
//go:nosplit
|
||||
func PrintStr(s string) {
|
||||
uart.WriteString(s)
|
||||
}
|
||||
|
||||
const hextab = "0123456789abcdef"
|
||||
|
||||
//go:nosplit
|
||||
func PrintHex(n uintptr) {
|
||||
shift := sys.PtrSize*8 - 4
|
||||
for ; shift > 0; shift = shift - 4 {
|
||||
v := (n >> shift) & 0x0F
|
||||
ch := hextab[v]
|
||||
uart.WriteByte(ch)
|
||||
}
|
||||
uart.WriteByte(hextab[n&0x0F])
|
||||
}
|
||||
+14
-14
@@ -6,12 +6,12 @@ import (
|
||||
"time"
|
||||
"unsafe"
|
||||
|
||||
"github.com/icexin/eggos/debug"
|
||||
"github.com/icexin/eggos/drivers/pci"
|
||||
"github.com/icexin/eggos/drivers/pic"
|
||||
"github.com/icexin/eggos/inet"
|
||||
"github.com/icexin/eggos/kernel/mm"
|
||||
"github.com/icexin/eggos/kernel/sys"
|
||||
"github.com/icexin/eggos/log"
|
||||
|
||||
"gvisor.dev/gvisor/pkg/tcpip/buffer"
|
||||
"gvisor.dev/gvisor/pkg/tcpip/stack"
|
||||
@@ -131,7 +131,7 @@ func (d *driver) Init(dev *pci.Device) error {
|
||||
|
||||
d.dev = dev
|
||||
|
||||
debug.Logf("[e1000] enable bus master")
|
||||
log.Infof("[e1000] enable bus master")
|
||||
dev.Addr.EnableBusMaster()
|
||||
|
||||
// mmap bar address
|
||||
@@ -141,7 +141,7 @@ func (d *driver) Init(dev *pci.Device) error {
|
||||
}
|
||||
mm.SysFixedMmap(uintptr(baddr), uintptr(baddr), uintptr(blen))
|
||||
d.bar = uintptr(baddr)
|
||||
debug.Logf("[e1000] mmap for bar0 0x%x", d.bar)
|
||||
log.Infof("[e1000] mmap for bar0 0x%x", d.bar)
|
||||
|
||||
// alloc desc
|
||||
descptr := mm.Alloc()
|
||||
@@ -152,7 +152,7 @@ func (d *driver) Init(dev *pci.Device) error {
|
||||
// disable all intrs
|
||||
d.writecmd(REG_IMC, 0xffffffff)
|
||||
|
||||
debug.Logf("[e1000] begin reset")
|
||||
log.Infof("[e1000] begin reset")
|
||||
// Reset the device.
|
||||
d.writecmd(REG_CTRL, d.readcmd(REG_CTRL)|CTRL_RST)
|
||||
|
||||
@@ -160,13 +160,13 @@ func (d *driver) Init(dev *pci.Device) error {
|
||||
// for (d.readcmd(REG_CTRL) & CTRL_RST) != 0 {
|
||||
// }
|
||||
time.Sleep(time.Microsecond)
|
||||
debug.Logf("[e1000] reset done")
|
||||
log.Infof("[e1000] reset done")
|
||||
// again disable all intrs after reset
|
||||
d.writecmd(REG_IMC, 0xffffffff)
|
||||
|
||||
// Link up!
|
||||
d.writecmd(REG_CTRL, d.readcmd(REG_CTRL)|CTRL_SLU|CTRL_ASDE)
|
||||
debug.Logf("[e1000] link up")
|
||||
log.Infof("[e1000] link up")
|
||||
|
||||
// Fill Multicast Table Array with zeros.
|
||||
for i := uint16(0); i < 0x80; i++ {
|
||||
@@ -213,9 +213,9 @@ func (d *driver) Init(dev *pci.Device) error {
|
||||
d.readcmd(REG_ICR)
|
||||
d.writecmd(REG_ICR, ^uint32(0))
|
||||
|
||||
debug.Logf("[e1000] begin read mac")
|
||||
log.Infof("[e1000] begin read mac")
|
||||
d.readmac()
|
||||
debug.Logf("[e1000] mac:%x", d.mac)
|
||||
log.Infof("[e1000] mac:%x", d.mac)
|
||||
// go d.recvloop()
|
||||
return nil
|
||||
}
|
||||
@@ -244,7 +244,7 @@ func (d *driver) Transmit(pkt *stack.PacketBuffer) error {
|
||||
|
||||
// for atomic.LoadInt32((*int32)(unsafe.Pointer(&desc.status))) == 0 {
|
||||
// }
|
||||
// debug.Logf("[e1000] send %d bytes", pktlen)
|
||||
// log.Infof("[e1000] send %d bytes", pktlen)
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -252,7 +252,7 @@ func (d *driver) Intr() {
|
||||
defer pic.EnableIRQ(uint16(d.dev.IRQLine))
|
||||
defer pic.EOI(uintptr(d.dev.IRQNO))
|
||||
cause := d.readcmd(REG_ICR)
|
||||
// debug.Logf("[e1000] cause %x", cause)
|
||||
// log.Infof("[e1000] cause %x", cause)
|
||||
// clear ICR register
|
||||
// e1000e may not clear upon read
|
||||
d.writecmd(REG_ICR, ^uint32(0))
|
||||
@@ -278,9 +278,9 @@ func (d *driver) recvloop() {
|
||||
func (d *driver) readpkt() bool {
|
||||
d.rxidx = d.readcmd(REG_RDT)
|
||||
d.rxidx = (d.rxidx + 1) % NUM_RX_DESCS
|
||||
// debug.Logf("[e1000] head:%d", d.readcmd(0x02810))
|
||||
// debug.Logf("[e1000] tail:%d", d.readcmd(0x02818))
|
||||
// debug.Logf("[e1000] rxidx:%d", d.rxidx)
|
||||
// log.Infof("[e1000] head:%d", d.readcmd(0x02810))
|
||||
// log.Infof("[e1000] tail:%d", d.readcmd(0x02818))
|
||||
// log.Infof("[e1000] rxidx:%d", d.rxidx)
|
||||
desc := &d.rxdescs[d.rxidx]
|
||||
|
||||
// fmt.Printf("status:%x\n", atomic.LoadUint32((*uint32)(unsafe.Pointer(&desc.status))))
|
||||
@@ -291,7 +291,7 @@ func (d *driver) readpkt() bool {
|
||||
}
|
||||
|
||||
buf := sys.UnsafeBuffer(uintptr(desc.paddr), int(desc.len))
|
||||
// debug.Logf("[e1000] read %d bytes", desc.len)
|
||||
// log.Infof("[e1000] read %d bytes", desc.len)
|
||||
if d.rxfunc != nil {
|
||||
d.rxfunc(buf)
|
||||
}
|
||||
|
||||
+3
-3
@@ -1,9 +1,9 @@
|
||||
package pci
|
||||
|
||||
import (
|
||||
"github.com/icexin/eggos/debug"
|
||||
"github.com/icexin/eggos/drivers/pic"
|
||||
"github.com/icexin/eggos/kernel/trap"
|
||||
"github.com/icexin/eggos/log"
|
||||
)
|
||||
|
||||
type Identity struct {
|
||||
@@ -74,10 +74,10 @@ func Init() {
|
||||
for _, driver := range drivers {
|
||||
dev := findDev(driver.Idents())
|
||||
if dev == nil {
|
||||
debug.Logf("[pci] no pci device found for %v\n", driver.Name())
|
||||
log.Infof("[pci] no pci device found for %v\n", driver.Name())
|
||||
continue
|
||||
}
|
||||
debug.Logf("[pci] found %x:%x for %s, irq:%d\n", dev.Ident.Vendor, dev.Ident.Device, driver.Name(), dev.IRQNO)
|
||||
log.Infof("[pci] found %x:%x for %s, irq:%d\n", dev.Ident.Vendor, dev.Ident.Device, driver.Name(), dev.IRQNO)
|
||||
driver.Init(dev)
|
||||
pic.EnableIRQ(uint16(dev.IRQLine))
|
||||
trap.Register(int(dev.IRQNO), driver.Intr)
|
||||
|
||||
@@ -41,12 +41,12 @@ func intr() {
|
||||
pic.EOI(_IRQ_MOUSE)
|
||||
for {
|
||||
st := ps2.ReadCmd()
|
||||
// debug.Logf("status:%08b", st)
|
||||
// log.Infof("status:%08b", st)
|
||||
if st&0x01 == 0 {
|
||||
break
|
||||
}
|
||||
x := ps2.ReadDataNoWait()
|
||||
// debug.Logf("data:%08b", x)
|
||||
// log.Infof("data:%08b", x)
|
||||
handlePacket(x)
|
||||
}
|
||||
}
|
||||
@@ -84,7 +84,7 @@ func handlePacket(v byte) {
|
||||
default:
|
||||
}
|
||||
}
|
||||
// debug.Logf("x:%d y:%d packet:%v status:%8b", xpos, ypos, packet, status)
|
||||
// log.Infof("x:%d y:%d packet:%v status:%8b", xpos, ypos, packet, status)
|
||||
}
|
||||
|
||||
func xrel(status byte, value int) int {
|
||||
|
||||
+5
-8
@@ -9,13 +9,12 @@ import (
|
||||
"context"
|
||||
"errors"
|
||||
"fmt"
|
||||
"log"
|
||||
"math/rand"
|
||||
"net"
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
"github.com/icexin/eggos/debug"
|
||||
"github.com/icexin/eggos/log"
|
||||
|
||||
"gvisor.dev/gvisor/pkg/tcpip"
|
||||
"gvisor.dev/gvisor/pkg/tcpip/adapters/gonet"
|
||||
@@ -55,7 +54,6 @@ func NewClient(s *stack.Stack, nicid tcpip.NICID, linkAddr tcpip.LinkAddress) *C
|
||||
func (c *Client) Start() {
|
||||
go func() {
|
||||
for {
|
||||
log.Print("DHCP request")
|
||||
ctx, cancel := context.WithTimeout(context.Background(), 3*time.Second)
|
||||
err := c.Request(ctx, "")
|
||||
cancel()
|
||||
@@ -63,7 +61,6 @@ func (c *Client) Start() {
|
||||
break
|
||||
}
|
||||
}
|
||||
log.Printf("DHCP acquired IP %s for %s", c.Address(), c.Config().LeaseLength)
|
||||
}()
|
||||
}
|
||||
|
||||
@@ -171,7 +168,7 @@ func (c *Client) Request(ctx context.Context, requestedAddr tcpip.Address) error
|
||||
if err != nil {
|
||||
return fmt.Errorf("dhcp offer: %v", err)
|
||||
}
|
||||
debug.Logf("[dhcp] offer done")
|
||||
log.Infof("[dhcp] offer done")
|
||||
|
||||
var ack bool
|
||||
var cfg Config
|
||||
@@ -207,7 +204,7 @@ func (c *Client) Request(ctx context.Context, requestedAddr tcpip.Address) error
|
||||
{optReqIPAddr, []byte(addr)},
|
||||
{optDHCPServer, []byte(cfg.ServerAddress)},
|
||||
})
|
||||
debug.Logf("[dhcp] offer ip:%s server:%s", addr, cfg.ServerAddress)
|
||||
log.Infof("[dhcp] offer ip:%s server:%s", addr, cfg.ServerAddress)
|
||||
_, err = conn.WriteTo(h, serverAddr)
|
||||
if err != nil {
|
||||
return err
|
||||
@@ -239,7 +236,7 @@ func (c *Client) Request(ctx context.Context, requestedAddr tcpip.Address) error
|
||||
if !ack {
|
||||
return fmt.Errorf("dhcp: request not acknowledged")
|
||||
}
|
||||
debug.Logf("[dhcp] lease:%s", cfg.LeaseLength)
|
||||
log.Infof("[dhcp] lease:%s", cfg.LeaseLength)
|
||||
if cfg.LeaseLength != 0 {
|
||||
go c.renewAfter(cfg.LeaseLength)
|
||||
}
|
||||
@@ -261,7 +258,7 @@ func (c *Client) renewAfter(d time.Duration) {
|
||||
case <-ctx.Done():
|
||||
case <-timer.C:
|
||||
if err := c.Request(ctx, c.addr); err != nil {
|
||||
log.Printf("address renewal failed: %v", err)
|
||||
log.Errorf("address renewal failed: %v", err)
|
||||
go c.renewAfter(1 * time.Minute)
|
||||
}
|
||||
}
|
||||
|
||||
+18
-18
@@ -8,8 +8,8 @@ import (
|
||||
"time"
|
||||
"unsafe"
|
||||
|
||||
"github.com/icexin/eggos/debug"
|
||||
"github.com/icexin/eggos/fs"
|
||||
"github.com/icexin/eggos/log"
|
||||
|
||||
"gvisor.dev/gvisor/pkg/abi/linux"
|
||||
"gvisor.dev/gvisor/pkg/tcpip"
|
||||
@@ -65,7 +65,7 @@ func (s *sockFile) Read(p []byte) (int, error) {
|
||||
case *tcpip.ErrClosedForReceive:
|
||||
return 0, nil
|
||||
default:
|
||||
debug.Logf("[socket] read error:%s", terr)
|
||||
log.Infof("[socket] read error:%s", terr)
|
||||
return 0, e(terr)
|
||||
}
|
||||
if result.Count < result.Total {
|
||||
@@ -87,7 +87,7 @@ func (s *sockFile) Write(p []byte) (int, error) {
|
||||
case *tcpip.ErrClosedForSend:
|
||||
return 0, syscall.EPIPE
|
||||
default:
|
||||
debug.Logf("[socket] write error:%s", terr)
|
||||
log.Infof("[socket] write error:%s", terr)
|
||||
return 0, e(terr)
|
||||
}
|
||||
}
|
||||
@@ -114,7 +114,7 @@ func (s *sockFile) stopEvent() {
|
||||
}
|
||||
|
||||
func (s *sockFile) evcallback(e *waiter.Entry, mask waiter.EventMask) {
|
||||
// debug.Logf("ev:%x fd:%d", mask, s.fd)
|
||||
// log.Infof("ev:%x fd:%d", mask, s.fd)
|
||||
// syscall.Syscall(kernel.SYS_EPOLL_NOTIFY, uintptr(s.fd), uintptr(mask.ToLinux()), 0)
|
||||
evnotify(uintptr(s.fd), uintptr(mask.ToLinux()))
|
||||
}
|
||||
@@ -133,7 +133,7 @@ func (s *sockFile) Bind(uaddr, uaddrlen uintptr) error {
|
||||
}
|
||||
err := s.ep.Bind(addr)
|
||||
if err != nil {
|
||||
debug.Logf("[socket] bind error:%s", err)
|
||||
log.Infof("[socket] bind error:%s", err)
|
||||
return e(err)
|
||||
}
|
||||
return nil
|
||||
@@ -154,7 +154,7 @@ func (s *sockFile) Connect(uaddr, uaddrlen uintptr) error {
|
||||
return syscall.EINPROGRESS
|
||||
}
|
||||
if err != nil {
|
||||
debug.Logf("[socket] connect error:%s", err)
|
||||
log.Infof("[socket] connect error:%s", err)
|
||||
return e(err)
|
||||
}
|
||||
return nil
|
||||
@@ -163,7 +163,7 @@ func (s *sockFile) Connect(uaddr, uaddrlen uintptr) error {
|
||||
func (s *sockFile) Listen(n uintptr) error {
|
||||
err := s.ep.Listen(int(n))
|
||||
if err != nil {
|
||||
debug.Logf("[socket] listen error:%s", err)
|
||||
log.Infof("[socket] listen error:%s", err)
|
||||
}
|
||||
return e(err)
|
||||
}
|
||||
@@ -180,13 +180,13 @@ func (s *sockFile) Accept4(uaddr, uaddrlen, flag uintptr) (int, error) {
|
||||
case *tcpip.ErrWouldBlock:
|
||||
return 0, syscall.EAGAIN
|
||||
default:
|
||||
debug.Logf("[socket] accept error:%s", err)
|
||||
log.Infof("[socket] accept error:%s", err)
|
||||
return 0, e(err)
|
||||
}
|
||||
|
||||
newaddr, err := newep.GetRemoteAddress()
|
||||
if err != nil {
|
||||
debug.Logf("[socket] accept getRemoteAddress error:%s", err)
|
||||
log.Infof("[socket] accept getRemoteAddress error:%s", err)
|
||||
return 0, e(err)
|
||||
}
|
||||
saddr.Family = syscall.AF_INET
|
||||
@@ -200,12 +200,12 @@ func (s *sockFile) Setsockopt(level, opt, vptr, vlen uintptr) error {
|
||||
switch level {
|
||||
case syscall.SOL_SOCKET, syscall.IPPROTO_TCP:
|
||||
default:
|
||||
debug.Logf("[socket] setsockopt:unsupport socket opt level:%d", level)
|
||||
log.Infof("[socket] setsockopt:unsupport socket opt level:%d", level)
|
||||
return syscall.EINVAL
|
||||
}
|
||||
|
||||
if vlen != 4 {
|
||||
debug.Logf("[socket] setsockopt:bad opt value length:%d", vlen)
|
||||
log.Infof("[socket] setsockopt:bad opt value length:%d", vlen)
|
||||
return syscall.EINVAL
|
||||
}
|
||||
|
||||
@@ -229,7 +229,7 @@ func (s *sockFile) Setsockopt(level, opt, vptr, vlen uintptr) error {
|
||||
v := tcpip.KeepaliveIdleOption(time.Duration(value) * time.Second)
|
||||
terr = s.ep.SetSockOpt(&v)
|
||||
default:
|
||||
debug.Logf("[socket] setsockopt:unknow socket option:%d", opt)
|
||||
log.Infof("[socket] setsockopt:unknow socket option:%d", opt)
|
||||
return syscall.EINVAL
|
||||
}
|
||||
|
||||
@@ -241,12 +241,12 @@ func (s *sockFile) Setsockopt(level, opt, vptr, vlen uintptr) error {
|
||||
|
||||
func (s *sockFile) Getsockopt(level, opt, vptr, vlenptr uintptr) error {
|
||||
if level != syscall.SOL_SOCKET {
|
||||
debug.Logf("[socket] getsockopt:unsupport socket opt level:%d", level)
|
||||
log.Infof("[socket] getsockopt:unsupport socket opt level:%d", level)
|
||||
return syscall.EINVAL
|
||||
}
|
||||
vlen := (*int)(unsafe.Pointer(vlenptr))
|
||||
if *vlen != 4 {
|
||||
debug.Logf("[socket] getsockopt:bad opt value length:%d", vlen)
|
||||
log.Infof("[socket] getsockopt:bad opt value length:%d", vlen)
|
||||
return syscall.EINVAL
|
||||
}
|
||||
value := (*uint32)(unsafe.Pointer(vptr))
|
||||
@@ -261,11 +261,11 @@ func (s *sockFile) Getsockopt(level, opt, vptr, vlenptr uintptr) error {
|
||||
case *tcpip.ErrNoRoute:
|
||||
*value = uint32(syscall.EHOSTUNREACH)
|
||||
default:
|
||||
debug.Logf("[socket] getsockopt:unknow socket error:%s", terr)
|
||||
log.Infof("[socket] getsockopt:unknow socket error:%s", terr)
|
||||
return e(terr)
|
||||
}
|
||||
default:
|
||||
debug.Logf("[socket] getsockopt:unknow socket option:%d", opt)
|
||||
log.Infof("[socket] getsockopt:unknow socket option:%d", opt)
|
||||
return syscall.EINVAL
|
||||
}
|
||||
return nil
|
||||
@@ -275,7 +275,7 @@ func (s *sockFile) Getpeername(uaddr, uaddrlen uintptr) error {
|
||||
saddr := (*linux.SockAddrInet)(unsafe.Pointer(uaddr))
|
||||
addr, err := s.ep.GetRemoteAddress()
|
||||
if err != nil {
|
||||
debug.Logf("[socket] getpeername error:%s", err)
|
||||
log.Infof("[socket] getpeername error:%s", err)
|
||||
return e(err)
|
||||
}
|
||||
saddr.Family = syscall.AF_INET
|
||||
@@ -288,7 +288,7 @@ func (s *sockFile) Getsockname(uaddr, uaddrlen uintptr) error {
|
||||
saddr := (*linux.SockAddrInet)(unsafe.Pointer(uaddr))
|
||||
addr, err := s.ep.GetLocalAddress()
|
||||
if err != nil {
|
||||
debug.Logf("[socket] getsockname error:%s", err)
|
||||
log.Infof("[socket] getsockname error:%s", err)
|
||||
return e(err)
|
||||
}
|
||||
saddr.Family = syscall.AF_INET
|
||||
|
||||
+7
-7
@@ -5,8 +5,8 @@ import (
|
||||
"errors"
|
||||
"time"
|
||||
|
||||
"github.com/icexin/eggos/debug"
|
||||
"github.com/icexin/eggos/inet/dhcp"
|
||||
"github.com/icexin/eggos/log"
|
||||
|
||||
"gvisor.dev/gvisor/pkg/tcpip"
|
||||
"gvisor.dev/gvisor/pkg/tcpip/header"
|
||||
@@ -83,18 +83,18 @@ func addInterfaceAddr(s *stack.Stack, nic tcpip.NICID, addr tcpip.Address) {
|
||||
func dodhcp(linkaddr tcpip.LinkAddress) error {
|
||||
dhcpclient := dhcp.NewClient(nstack, defaultNIC, linkaddr)
|
||||
ctx, cancel := context.WithTimeout(context.Background(), 3*time.Second)
|
||||
debug.Logf("[inet] begin dhcp")
|
||||
log.Infof("[inet] begin dhcp")
|
||||
err1 := dhcpclient.Request(ctx, "")
|
||||
cancel()
|
||||
if err1 != nil {
|
||||
return err1
|
||||
}
|
||||
debug.Logf("[inet] dhcp done")
|
||||
log.Infof("[inet] dhcp done")
|
||||
cfg := dhcpclient.Config()
|
||||
debug.Logf("[inet] addr:%v", dhcpclient.Address())
|
||||
debug.Logf("[inet] gateway:%v", cfg.Gateway)
|
||||
debug.Logf("[inet] mask:%v", cfg.SubnetMask)
|
||||
debug.Logf("[inet] dns:%v", cfg.DomainNameServer)
|
||||
log.Infof("[inet] addr:%v", dhcpclient.Address())
|
||||
log.Infof("[inet] gateway:%v", cfg.Gateway)
|
||||
log.Infof("[inet] mask:%v", cfg.SubnetMask)
|
||||
log.Infof("[inet] dns:%v", cfg.DomainNameServer)
|
||||
|
||||
addInterfaceAddr(nstack, defaultNIC, dhcpclient.Address())
|
||||
nstack.AddRoute(tcpip.Route{
|
||||
|
||||
+6
-6
@@ -266,12 +266,12 @@ func (v *vmmt) walkpglvl(pg *entryPage, va uintptr, lvl int, alloc bool) *entry
|
||||
sys.Memclr(addr, PGSIZE)
|
||||
// map new page to entry
|
||||
*pe = entry(addr | PTE_P | PTE_W | PTE_U)
|
||||
// debug.PrintHex(uintptr(unsafe.Pointer(pg)))
|
||||
// debug.PrintStr("@")
|
||||
// debug.PrintHex(idx)
|
||||
// debug.PrintStr("=")
|
||||
// debug.PrintHex(addr)
|
||||
// debug.PrintStr("\n")
|
||||
// log.PrintHex(uintptr(unsafe.Pointer(pg)))
|
||||
// log.PrintStr("@")
|
||||
// log.PrintHex(idx)
|
||||
// log.PrintStr("=")
|
||||
// log.PrintHex(addr)
|
||||
// log.PrintStr("\n")
|
||||
return pe
|
||||
}
|
||||
|
||||
|
||||
+7
-7
@@ -3,10 +3,10 @@ package kernel
|
||||
import (
|
||||
"unsafe"
|
||||
|
||||
"github.com/icexin/eggos/debug"
|
||||
"github.com/icexin/eggos/drivers/qemu"
|
||||
"github.com/icexin/eggos/drivers/uart"
|
||||
"github.com/icexin/eggos/kernel/sys"
|
||||
"github.com/icexin/eggos/log"
|
||||
)
|
||||
|
||||
var (
|
||||
@@ -27,13 +27,13 @@ func throwtf(tf *trapFrame, msg string) {
|
||||
uart.WriteString(msg)
|
||||
uart.WriteByte('\n')
|
||||
|
||||
debug.PrintStr("0x")
|
||||
debug.PrintHex(tf.IP)
|
||||
debug.PrintStr("\n")
|
||||
log.PrintStr("0x")
|
||||
log.PrintHex(tf.IP)
|
||||
log.PrintStr("\n")
|
||||
for i := 0; i < n; i++ {
|
||||
debug.PrintStr("0x")
|
||||
debug.PrintHex(panicPcs[i])
|
||||
debug.PrintStr("\n")
|
||||
log.PrintStr("0x")
|
||||
log.PrintHex(panicPcs[i])
|
||||
log.PrintStr("\n")
|
||||
}
|
||||
|
||||
qemu.Exit(0xff)
|
||||
|
||||
+8
-8
@@ -4,13 +4,13 @@ import (
|
||||
"syscall"
|
||||
"unsafe"
|
||||
|
||||
"github.com/icexin/eggos/debug"
|
||||
"github.com/icexin/eggos/drivers/qemu"
|
||||
"github.com/icexin/eggos/drivers/uart"
|
||||
"github.com/icexin/eggos/kernel/isyscall"
|
||||
"github.com/icexin/eggos/kernel/mm"
|
||||
"github.com/icexin/eggos/kernel/sys"
|
||||
"github.com/icexin/eggos/kernel/trap"
|
||||
"github.com/icexin/eggos/log"
|
||||
"golang.org/x/sys/unix"
|
||||
"gvisor.dev/gvisor/pkg/abi/linux"
|
||||
"gvisor.dev/gvisor/pkg/abi/linux/errno"
|
||||
@@ -163,9 +163,9 @@ func blocksyscall() {
|
||||
//go:nosplit
|
||||
func panicNosys() {
|
||||
req := Mythread().systf.SyscallRequest()
|
||||
debug.PrintStr("syscall not found:")
|
||||
debug.PrintStr(syscallName(int(req.NO())))
|
||||
debug.PrintStr("\n")
|
||||
log.PrintStr("syscall not found:")
|
||||
log.PrintStr(syscallName(int(req.NO())))
|
||||
log.PrintStr("\n")
|
||||
throw("")
|
||||
}
|
||||
|
||||
@@ -175,13 +175,13 @@ func doSyscall(req *isyscall.Request) {
|
||||
req.SetRet(0)
|
||||
|
||||
// if no != syscall.SYS_SCHED_YIELD {
|
||||
// debug.PrintStr("call ")
|
||||
// log.PrintStr("call ")
|
||||
// if int(no) < len(sysnum) {
|
||||
// debug.PrintStr(sysnum[no])
|
||||
// log.PrintStr(sysnum[no])
|
||||
// } else {
|
||||
// debug.PrintHex(no)
|
||||
// log.PrintHex(no)
|
||||
// }
|
||||
// debug.PrintStr("\n")
|
||||
// log.PrintStr("\n")
|
||||
// }
|
||||
switch no {
|
||||
case syscall.SYS_ARCH_PRCTL:
|
||||
|
||||
@@ -5,9 +5,9 @@ import (
|
||||
"syscall"
|
||||
"unsafe"
|
||||
|
||||
"github.com/icexin/eggos/debug"
|
||||
"github.com/icexin/eggos/kernel/isyscall"
|
||||
"github.com/icexin/eggos/kernel/sys"
|
||||
"github.com/icexin/eggos/log"
|
||||
)
|
||||
|
||||
var (
|
||||
@@ -55,7 +55,7 @@ func runSyscallThread() {
|
||||
runtime.LockOSThread()
|
||||
my := Mythread()
|
||||
syscalltask = (threadptr)(unsafe.Pointer(my))
|
||||
debug.Logf("[syscall] tid:%d", my.id)
|
||||
log.Infof("[syscall] tid:%d", my.id)
|
||||
for {
|
||||
callptr, _, err := syscall.Syscall(SYS_WAIT_SYSCALL, 0, 0, 0)
|
||||
if err != 0 {
|
||||
@@ -66,7 +66,7 @@ func runSyscallThread() {
|
||||
no := call.NO()
|
||||
handler := isyscall.GetHandler(no)
|
||||
if handler == nil {
|
||||
debug.Logf("[syscall] unhandled syscall %s(%d)", syscallName(int(no)), no)
|
||||
log.Infof("[syscall] unhandled syscall %s(%d)", syscallName(int(no)), no)
|
||||
call.SetErrorNO(syscall.ENOSYS)
|
||||
call.Done()
|
||||
continue
|
||||
@@ -80,7 +80,7 @@ func runSyscallThread() {
|
||||
} else {
|
||||
iret = ret
|
||||
}
|
||||
debug.Logf("[syscall] %s(%d)(0x%x, 0x%x, 0x%x, 0x%x, 0x%x, 0x%x) = %v",
|
||||
log.Debugf("[syscall] %s(%d)(0x%x, 0x%x, 0x%x, 0x%x, 0x%x, 0x%x) = %v",
|
||||
syscallName(int(no)), no,
|
||||
call.Arg(0), call.Arg(1), call.Arg(2), call.Arg(3),
|
||||
call.Arg(4), call.Arg(5), iret,
|
||||
|
||||
+8
-8
@@ -3,11 +3,11 @@ package kernel
|
||||
import (
|
||||
"unsafe"
|
||||
|
||||
"github.com/icexin/eggos/debug"
|
||||
"github.com/icexin/eggos/drivers/pic"
|
||||
"github.com/icexin/eggos/kernel/isyscall"
|
||||
"github.com/icexin/eggos/kernel/sys"
|
||||
"github.com/icexin/eggos/kernel/trap"
|
||||
"github.com/icexin/eggos/log"
|
||||
)
|
||||
|
||||
var (
|
||||
@@ -59,11 +59,11 @@ func trapret()
|
||||
//go:nosplit
|
||||
func trapPanic() {
|
||||
tf := Mythread().tf
|
||||
debug.PrintStr("trap panic: ")
|
||||
log.PrintStr("trap panic: ")
|
||||
if tf.Trapno < uintptr(len(trapnum)) {
|
||||
debug.PrintStr(trapnum[tf.Trapno])
|
||||
log.PrintStr(trapnum[tf.Trapno])
|
||||
}
|
||||
debug.PrintStr("\n")
|
||||
log.PrintStr("\n")
|
||||
throwtf(tf, "stack trace:")
|
||||
}
|
||||
|
||||
@@ -90,10 +90,10 @@ func faultHandler() {
|
||||
|
||||
//go:nosplit
|
||||
func printReg(name string, reg uintptr) {
|
||||
debug.PrintStr(name)
|
||||
debug.PrintStr("=")
|
||||
debug.PrintHex(reg)
|
||||
debug.PrintStr("\n")
|
||||
log.PrintStr(name)
|
||||
log.PrintStr("=")
|
||||
log.PrintHex(reg)
|
||||
log.PrintStr("\n")
|
||||
}
|
||||
|
||||
//go:nosplit
|
||||
|
||||
@@ -6,9 +6,9 @@ import (
|
||||
"syscall"
|
||||
"unsafe"
|
||||
|
||||
"github.com/icexin/eggos/debug"
|
||||
"github.com/icexin/eggos/drivers/pic"
|
||||
"github.com/icexin/eggos/kernel/trap"
|
||||
"github.com/icexin/eggos/log"
|
||||
)
|
||||
|
||||
var (
|
||||
@@ -27,7 +27,7 @@ func runTrapThread() {
|
||||
|
||||
my := Mythread()
|
||||
traptask = (threadptr)(unsafe.Pointer(my))
|
||||
debug.Logf("[trap] tid:%d", my.id)
|
||||
log.Infof("[trap] tid:%d", my.id)
|
||||
|
||||
for {
|
||||
trapset, _, err = syscall.Syscall(SYS_WAIT_IRQ, 0, 0, 0)
|
||||
|
||||
+3
-3
@@ -9,12 +9,12 @@ import (
|
||||
_ "github.com/icexin/eggos"
|
||||
"github.com/icexin/eggos/app/sh"
|
||||
"github.com/icexin/eggos/console"
|
||||
"github.com/icexin/eggos/debug"
|
||||
"github.com/icexin/eggos/log"
|
||||
)
|
||||
|
||||
func main() {
|
||||
debug.Logf("[runtime] go version:%s", runtime.Version())
|
||||
debug.Logf("[runtime] args:%v", os.Args)
|
||||
log.Infof("[runtime] go version:%s", runtime.Version())
|
||||
log.Infof("[runtime] args:%v", os.Args)
|
||||
w := console.Console()
|
||||
io.WriteString(w, "\nwelcome to eggos\n")
|
||||
sh.Bootstrap()
|
||||
|
||||
+94
@@ -0,0 +1,94 @@
|
||||
package log
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"fmt"
|
||||
"os"
|
||||
"sync"
|
||||
|
||||
"github.com/icexin/eggos/console"
|
||||
"github.com/icexin/eggos/drivers/uart"
|
||||
"github.com/icexin/eggos/kernel/sys"
|
||||
)
|
||||
|
||||
const (
|
||||
loglvlEnv = "EGGOS_LOGLVL"
|
||||
loglvlEnvDebug = "debug"
|
||||
loglvlEnvInfo = "info"
|
||||
loglvlEnvWarn = "warn"
|
||||
loglvlEnvError = "error"
|
||||
loglvlEnvNone = "none"
|
||||
|
||||
loglvlDebug = iota
|
||||
loglvlInfo
|
||||
loglvlWarn
|
||||
loglvlError
|
||||
loglvlNone
|
||||
)
|
||||
|
||||
var (
|
||||
loglvl int
|
||||
loglvlonce sync.Once
|
||||
)
|
||||
|
||||
func setLoglvl() {
|
||||
lvl := os.Getenv("EGGOS_LOGLVL")
|
||||
switch lvl {
|
||||
case loglvlEnvDebug:
|
||||
loglvl = loglvlDebug
|
||||
case loglvlEnvInfo:
|
||||
loglvl = loglvlInfo
|
||||
case loglvlEnvWarn:
|
||||
loglvl = loglvlWarn
|
||||
case loglvlEnvError:
|
||||
loglvl = loglvlError
|
||||
default:
|
||||
loglvl = loglvlNone
|
||||
}
|
||||
}
|
||||
|
||||
func logf(lvl int, fmtstr string, args ...interface{}) {
|
||||
loglvlonce.Do(setLoglvl)
|
||||
if lvl < loglvl {
|
||||
return
|
||||
}
|
||||
|
||||
buf := bytes.Buffer{}
|
||||
fmt.Fprintf(&buf, fmtstr, args...)
|
||||
buf.WriteByte('\n')
|
||||
buf.WriteTo(console.Console())
|
||||
}
|
||||
|
||||
func Debugf(fmtstr string, args ...interface{}) {
|
||||
logf(loglvlDebug, fmtstr, args...)
|
||||
}
|
||||
|
||||
func Infof(fmtstr string, args ...interface{}) {
|
||||
logf(loglvlInfo, fmtstr, args...)
|
||||
}
|
||||
|
||||
func Warnf(fmtstr string, args ...interface{}) {
|
||||
logf(loglvlWarn, fmtstr, args...)
|
||||
}
|
||||
|
||||
func Errorf(fmtstr string, args ...interface{}) {
|
||||
logf(loglvlError, fmtstr, args...)
|
||||
}
|
||||
|
||||
//go:nosplit
|
||||
func PrintStr(s string) {
|
||||
uart.WriteString(s)
|
||||
}
|
||||
|
||||
const hextab = "0123456789abcdef"
|
||||
|
||||
//go:nosplit
|
||||
func PrintHex(n uintptr) {
|
||||
shift := sys.PtrSize*8 - 4
|
||||
for ; shift > 0; shift = shift - 4 {
|
||||
v := (n >> shift) & 0x0F
|
||||
ch := hextab[v]
|
||||
uart.WriteByte(ch)
|
||||
}
|
||||
uart.WriteByte(hextab[n&0x0F])
|
||||
}
|
||||
Reference in new issue
Block a user