log: add leveled log

This commit is contained in:
icexin committed 2021-07-31 16:02:33 +08:00
1 parent da213e35c3
commit a2fac43358
16 files changed
+184 -131

No files matched your search

+2 -2
View File
@@ -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
}
-38
View File
@@ -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
View File
@@ -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
View File
@@ -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)
+3 -3
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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:
+4 -4
View File
@@ -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
View File
@@ -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
+2 -2
View File
@@ -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
View File
@@ -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
View File
@@ -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])
}