From a1099ffbdeb2268a3b32beaca2ee1ce03800a353 Mon Sep 17 00:00:00 2001 From: Bryce Himebaugh Date: Wed, 31 Aug 2016 15:33:32 -0400 Subject: [PATCH] initial commit of the system --- README.md | 7 +- apps/consume.c | 6 + apps/produce.c | 8 + compile/.defs | 699 ++ compile/.deps | 0 compile/.gdbinit | 4 + compile/.vers_num | 1 + compile/Makefile | 184 + compile/bin/build-make | 710 ++ compile/bin/buildxbin | 38 + compile/bin/mkvers | 27 + compile/ld.script | 33 + compile/make-errs | 28 + compile/uboot-tool/COPYRIGHT | 12 + compile/uboot-tool/Makefile | 17 + compile/uboot-tool/crc32.c | 205 + compile/uboot-tool/image.h | 158 + compile/uboot-tool/mkimage.c | 795 ++ compile/uboot-tool/source.txt | 3 + compile/version | 1 + compile/xinu.map | 16202 ++++++++++++++++++++++++++++ config/Configuration | 128 + config/Makefile | 41 + config/conf.c | 112 + config/conf.h | 65 + config/config.l | 40 + config/config.y | 622 ++ device/eth/colon2mac.c | 58 + device/eth/ethcontrol.c | 35 + device/eth/ethhandler.c | 123 + device/eth/ethinit.c | 403 + device/eth/ethread.c | 69 + device/eth/ethwrite.c | 83 + device/lfs/lfdballoc.c | 40 + device/lfs/lfdbfree.c | 25 + device/lfs/lfflush.c | 42 + device/lfs/lfgetmode.c | 61 + device/lfs/lfiballoc.c | 33 + device/lfs/lfibclear.c | 22 + device/lfs/lfibget.c | 31 + device/lfs/lfibput.c | 43 + device/lfs/lflclose.c | 38 + device/lfs/lflcontrol.c | 47 + device/lfs/lflgetc.c | 52 + device/lfs/lflinit.c | 46 + device/lfs/lflputc.c | 64 + device/lfs/lflread.c | 39 + device/lfs/lflseek.c | 41 + device/lfs/lflwrite.c | 29 + device/lfs/lfsckfmt.c | 58 + device/lfs/lfscreate.c | 74 + device/lfs/lfsetup.c | 122 + device/lfs/lfsinit.c | 32 + device/lfs/lfsopen.c | 180 + device/lfs/lftruncate.c | 104 + device/loopback/Doxygroup.c | 9 + device/loopback/Makerules | 12 + device/loopback/loopbackClose.c | 40 + device/loopback/loopbackClose.d | 27 + device/loopback/loopbackControl.c | 51 + device/loopback/loopbackControl.d | 23 + device/loopback/loopbackGetc.c | 51 + device/loopback/loopbackGetc.d | 35 + device/loopback/loopbackInit.c | 30 + device/loopback/loopbackInit.d | 25 + device/loopback/loopbackOpen.c | 54 + device/loopback/loopbackOpen.d | 27 + device/loopback/loopbackPutc.c | 51 + device/loopback/loopbackPutc.d | 25 + device/loopback/loopbackRead.c | 54 + device/loopback/loopbackRead.d | 22 + device/loopback/loopbackWrite.c | 56 + device/loopback/loopbackWrite.d | 22 + device/nam/mount.c | 76 + device/nam/naminit.c | 91 + device/nam/nammap.c | 135 + device/nam/namopen.c | 29 + device/ram/ramclose.c | 14 + device/ram/raminit.c | 19 + device/ram/ramopen.c | 19 + device/ram/ramread.c | 21 + device/ram/ramwrite.c | 21 + device/rds/TODO | 5 + device/rds/rdsbufalloc.c | 50 + device/rds/rdsclose.c | 60 + device/rds/rdscomm.c | 114 + device/rds/rdscontrol.c | 118 + device/rds/rdsinit.c | 104 + device/rds/rdsopen.c | 93 + device/rds/rdsprocess.c | 207 + device/rds/rdsread.c | 123 + device/rds/rdswrite.c | 91 + device/rfs/rflclose.c | 32 + device/rfs/rflgetc.c | 23 + device/rfs/rflinit.c | 29 + device/rfs/rflputc.c | 23 + device/rfs/rflread.c | 100 + device/rfs/rflseek.c | 33 + device/rfs/rflwrite.c | 97 + device/rfs/rfscomm.c | 85 + device/rfs/rfscontrol.c | 114 + device/rfs/rfsgetmode.c | 63 + device/rfs/rfsinit.c | 39 + device/rfs/rfsndmsg.c | 46 + device/rfs/rfsopen.c | 114 + device/tty/ttycontrol.c | 57 + device/tty/ttygetc.c | 37 + device/tty/ttyhandle_in.c | 265 + device/tty/ttyhandle_out.c | 77 + device/tty/ttyhandler.c | 83 + device/tty/ttyinit.c | 81 + device/tty/ttykickout.c | 19 + device/tty/ttyputc.c | 38 + device/tty/ttyread.c | 66 + device/tty/ttywrite.c | 29 + device/uart-pl011/Makerules | 25 + device/uart-pl011/kgetc.c | 55 + device/uart-pl011/kputc.c | 57 + device/uart-pl011/pl011.h | 149 + device/uart-pl011/uartHwInit.c | 131 + device/uart-pl011/uartHwPutc.c | 14 + device/uart-pl011/uartHwStat.c | 24 + device/uart-pl011/uartInterrupt.c | 149 + device/uart/README | 2 + device/uart/kprintf.c | 34 + device/uart/kvprintf.c | 39 + device/uart/uartControl.c | 76 + device/uart/uartGetc.c | 37 + device/uart/uartInit.c | 77 + device/uart/uartPutc.c | 37 + device/uart/uartRead.c | 81 + device/uart/uartStat.c | 45 + device/uart/uartWrite.c | 87 + include/am335x_control.h | 9 + include/am335x_eth.h | 198 + include/armv7a.h | 34 + include/arp.h | 50 + include/bufpool.h | 24 + include/clock.h | 23 + include/ctype.h | 33 + include/date.h | 67 + include/debug.h | 8 + include/delay.h | 25 + include/device.h | 7 + include/dhcp.h | 64 + include/dns.h | 49 + include/ether.h | 118 + include/ethloop.h | 65 + include/file.h | 20 + include/flash.h | 263 + include/gpio.h | 57 + include/icmp.h | 31 + include/icu.h | 9 + include/interrupt.h | 58 + include/ip.h | 25 + include/kernel.h | 73 + include/lfilesys.h | 167 + include/limits.h | 30 + include/loopback.h | 50 + include/mark.h | 16 + include/memory.h | 38 + include/mmu.h | 11 + include/name.h | 19 + include/net.h | 67 + include/platform.h | 92 + include/ports.h | 29 + include/process.h | 63 + include/prodcons.h | 0 include/prototypes.h | 632 ++ include/queue.h | 36 + include/ramdisk.h | 12 + include/rdisksys.h | 235 + include/resched.h | 16 + include/rfilesys.h | 292 + include/sched.h | 16 + include/semaphore.h | 22 + include/shell.h | 75 + include/shprototypes.h | 80 + include/stdarg.h | 15 + include/stddef.h | 12 + include/stdint.h | 21 + include/stdio.h | 34 + include/stdlib.h | 17 + include/string.h | 10 + include/testsuite.h | 38 + include/tftp.h | 67 + include/tty.h | 82 + include/uart.h | 232 + include/udp.h | 33 + include/xinu.h | 44 + lib/Makefile | 45 + lib/abs.c | 19 + lib/atoi.c | 39 + lib/atol.c | 40 + lib/bzero.c | 28 + lib/ctype_.c | 31 + lib/doprnt.c | 388 + lib/doscan.c | 384 + lib/fdoprnt.c | 364 + lib/fgetc.c | 30 + lib/fgets.c | 45 + lib/fprintf.c | 30 + lib/fputc.c | 30 + lib/fputs.c | 26 + lib/fscanf.c | 65 + lib/getchar.c | 9 + lib/labs.c | 19 + lib/memchr.c | 29 + lib/memcmp.c | 30 + lib/memcpy.c | 27 + lib/memset.c | 27 + lib/printf.c | 19 + lib/putchar.c | 9 + lib/qsort.c | 144 + lib/rand.c | 27 + lib/sprintf.c | 42 + lib/sscanf.c | 50 + lib/strchr.c | 32 + lib/strcmp.c | 25 + lib/strcpy.c | 16 + lib/strlen.c | 20 + lib/strncat.c | 32 + lib/strncmp.c | 27 + lib/strncpy.c | 34 + lib/strnlen.c | 24 + lib/strrchr.c | 34 + lib/strstr.c | 43 + net/arp.c | 357 + net/arp_dump.c | 23 + net/dhcp.c | 416 + net/dns.c | 268 + net/dot2ip.c | 59 + net/hexdump.c | 119 + net/icmp.c | 415 + net/ip.c | 466 + net/net.c | 139 + net/netstart.c | 42 + net/pdump.c | 316 + net/tftp.c | 289 + net/udp.c | 575 + shell/.xsh_udpecho.c.swp | Bin 0 -> 12288 bytes shell/addargs.c | 93 + shell/lexan.c | 148 + shell/shell.c | 308 + shell/xsh_argecho.c | 21 + shell/xsh_cat.c | 59 + shell/xsh_clear.c | 22 + shell/xsh_date.c | 69 + shell/xsh_devdump.c | 36 + shell/xsh_echo.c | 24 + shell/xsh_exit.c | 13 + shell/xsh_help.c | 124 + shell/xsh_kill.c | 66 + shell/xsh_led.c | 72 + shell/xsh_memdump.c | 157 + shell/xsh_memstat.c | 113 + shell/xsh_mmu.c | 22 + shell/xsh_ps.c | 62 + shell/xsh_rdstest.c | 118 + shell/xsh_sleep.c | 58 + shell/xsh_uptime.c | 75 + system/ascdate.c | 226 + system/bufinit.c | 16 + system/chprio.c | 28 + system/clkhandler.c | 39 + system/clkinit.c | 32 + system/close.c | 26 + system/control.c | 29 + system/create.c | 138 + system/ctxsw.S | 22 + system/debug.c | 78 + system/evec.c | 154 + system/exit.c | 12 + system/freebuf.c | 39 + system/freemem.c | 70 + system/getbuf.c | 43 + system/getc.c | 26 + system/getdev.c | 26 + system/getitem.c | 58 + system/getmem.c | 50 + system/getpid.c | 12 + system/getprio.c | 24 + system/getstk.c | 52 + system/gettime.c | 39 + system/init.c | 26 + system/initialize.c | 201 + system/insert.c | 36 + system/insertd.c | 42 + system/intr.S | 118 + system/ioerr.c | 12 + system/ionull.c | 12 + system/irq_handler.S | 77 + system/kill.c | 59 + system/main.c | 35 + system/mark.c | 47 + system/meminit.c | 28 + system/memory_barrier.S | 34 + system/mkbufpool.c | 54 + system/mmu.c | 64 + system/newqueue.c | 30 + system/open.c | 28 + system/page_fault.S | 20 + system/panic.c | 16 + system/pl190.c | 85 + system/platinit.c | 140 + system/ptclear.c | 50 + system/ptcount.c | 44 + system/ptcreate.c | 46 + system/ptdelete.c | 27 + system/ptinit.c | 45 + system/ptrecv.c | 48 + system/ptreset.c | 27 + system/ptsend.c | 59 + system/putc.c | 27 + system/queue.c | 52 + system/read.c | 28 + system/ready.c | 29 + system/receive.c | 25 + system/recvclr.c | 25 + system/recvtime.c | 44 + system/resched.c | 85 + system/resume.c | 31 + system/seek.c | 27 + system/semcount.c | 26 + system/semcreate.c | 50 + system/semdelete.c | 36 + system/semreset.c | 35 + system/send.c | 41 + system/signal.c | 31 + system/signaln.c | 37 + system/sleep.c | 50 + system/sp804.c | 74 + system/start.S | 113 + system/suspend.c | 41 + system/tmpdecls | 56 + system/udelay.c | 58 + system/unsleep.c | 47 + system/userret.c | 12 + system/wait.c | 39 + system/wakeup.c | 20 + system/write.c | 28 + system/xdone.c | 13 + system/yield.c | 17 + xtra/getutime.c | 64 + xtra/irq_handler.S | 77 + xtra/kprintf.c | 94 + xtra/memory_barrier.S | 34 + xtra/xsh_arp.c | 75 + xtra/xsh_ipaddr.c | 124 + xtra/xsh_ping.c | 114 + xtra/xsh_udpdump.c | 75 + xtra/xsh_udpecho.c | 120 + xtra/xsh_udpeserver.c | 82 + 353 files changed, 42956 insertions(+), 2 deletions(-) create mode 100644 apps/consume.c create mode 100644 apps/produce.c create mode 100644 compile/.defs create mode 100644 compile/.deps create mode 100644 compile/.gdbinit create mode 100644 compile/.vers_num create mode 100644 compile/Makefile create mode 100755 compile/bin/build-make create mode 100755 compile/bin/buildxbin create mode 100755 compile/bin/mkvers create mode 100644 compile/ld.script create mode 100644 compile/make-errs create mode 100644 compile/uboot-tool/COPYRIGHT create mode 100644 compile/uboot-tool/Makefile create mode 100644 compile/uboot-tool/crc32.c create mode 100644 compile/uboot-tool/image.h create mode 100644 compile/uboot-tool/mkimage.c create mode 100644 compile/uboot-tool/source.txt create mode 100644 compile/version create mode 100644 compile/xinu.map create mode 100644 config/Configuration create mode 100644 config/Makefile create mode 100644 config/conf.c create mode 100644 config/conf.h create mode 100644 config/config.l create mode 100644 config/config.y create mode 100644 device/eth/colon2mac.c create mode 100644 device/eth/ethcontrol.c create mode 100644 device/eth/ethhandler.c create mode 100644 device/eth/ethinit.c create mode 100644 device/eth/ethread.c create mode 100644 device/eth/ethwrite.c create mode 100644 device/lfs/lfdballoc.c create mode 100644 device/lfs/lfdbfree.c create mode 100644 device/lfs/lfflush.c create mode 100644 device/lfs/lfgetmode.c create mode 100644 device/lfs/lfiballoc.c create mode 100644 device/lfs/lfibclear.c create mode 100644 device/lfs/lfibget.c create mode 100644 device/lfs/lfibput.c create mode 100644 device/lfs/lflclose.c create mode 100644 device/lfs/lflcontrol.c create mode 100644 device/lfs/lflgetc.c create mode 100644 device/lfs/lflinit.c create mode 100644 device/lfs/lflputc.c create mode 100644 device/lfs/lflread.c create mode 100644 device/lfs/lflseek.c create mode 100644 device/lfs/lflwrite.c create mode 100644 device/lfs/lfsckfmt.c create mode 100644 device/lfs/lfscreate.c create mode 100644 device/lfs/lfsetup.c create mode 100644 device/lfs/lfsinit.c create mode 100644 device/lfs/lfsopen.c create mode 100644 device/lfs/lftruncate.c create mode 100644 device/loopback/Doxygroup.c create mode 100644 device/loopback/Makerules create mode 100644 device/loopback/loopbackClose.c create mode 100644 device/loopback/loopbackClose.d create mode 100644 device/loopback/loopbackControl.c create mode 100644 device/loopback/loopbackControl.d create mode 100644 device/loopback/loopbackGetc.c create mode 100644 device/loopback/loopbackGetc.d create mode 100644 device/loopback/loopbackInit.c create mode 100644 device/loopback/loopbackInit.d create mode 100644 device/loopback/loopbackOpen.c create mode 100644 device/loopback/loopbackOpen.d create mode 100644 device/loopback/loopbackPutc.c create mode 100644 device/loopback/loopbackPutc.d create mode 100644 device/loopback/loopbackRead.c create mode 100644 device/loopback/loopbackRead.d create mode 100644 device/loopback/loopbackWrite.c create mode 100644 device/loopback/loopbackWrite.d create mode 100644 device/nam/mount.c create mode 100644 device/nam/naminit.c create mode 100644 device/nam/nammap.c create mode 100644 device/nam/namopen.c create mode 100644 device/ram/ramclose.c create mode 100644 device/ram/raminit.c create mode 100644 device/ram/ramopen.c create mode 100644 device/ram/ramread.c create mode 100644 device/ram/ramwrite.c create mode 100644 device/rds/TODO create mode 100644 device/rds/rdsbufalloc.c create mode 100644 device/rds/rdsclose.c create mode 100644 device/rds/rdscomm.c create mode 100644 device/rds/rdscontrol.c create mode 100644 device/rds/rdsinit.c create mode 100644 device/rds/rdsopen.c create mode 100644 device/rds/rdsprocess.c create mode 100644 device/rds/rdsread.c create mode 100644 device/rds/rdswrite.c create mode 100644 device/rfs/rflclose.c create mode 100644 device/rfs/rflgetc.c create mode 100644 device/rfs/rflinit.c create mode 100644 device/rfs/rflputc.c create mode 100644 device/rfs/rflread.c create mode 100644 device/rfs/rflseek.c create mode 100644 device/rfs/rflwrite.c create mode 100644 device/rfs/rfscomm.c create mode 100644 device/rfs/rfscontrol.c create mode 100644 device/rfs/rfsgetmode.c create mode 100644 device/rfs/rfsinit.c create mode 100644 device/rfs/rfsndmsg.c create mode 100644 device/rfs/rfsopen.c create mode 100644 device/tty/ttycontrol.c create mode 100644 device/tty/ttygetc.c create mode 100644 device/tty/ttyhandle_in.c create mode 100644 device/tty/ttyhandle_out.c create mode 100644 device/tty/ttyhandler.c create mode 100644 device/tty/ttyinit.c create mode 100644 device/tty/ttykickout.c create mode 100644 device/tty/ttyputc.c create mode 100644 device/tty/ttyread.c create mode 100644 device/tty/ttywrite.c create mode 100644 device/uart-pl011/Makerules create mode 100644 device/uart-pl011/kgetc.c create mode 100644 device/uart-pl011/kputc.c create mode 100644 device/uart-pl011/pl011.h create mode 100644 device/uart-pl011/uartHwInit.c create mode 100644 device/uart-pl011/uartHwPutc.c create mode 100644 device/uart-pl011/uartHwStat.c create mode 100644 device/uart-pl011/uartInterrupt.c create mode 100644 device/uart/README create mode 100644 device/uart/kprintf.c create mode 100644 device/uart/kvprintf.c create mode 100644 device/uart/uartControl.c create mode 100644 device/uart/uartGetc.c create mode 100644 device/uart/uartInit.c create mode 100644 device/uart/uartPutc.c create mode 100644 device/uart/uartRead.c create mode 100644 device/uart/uartStat.c create mode 100644 device/uart/uartWrite.c create mode 100644 include/am335x_control.h create mode 100644 include/am335x_eth.h create mode 100644 include/armv7a.h create mode 100644 include/arp.h create mode 100644 include/bufpool.h create mode 100644 include/clock.h create mode 100644 include/ctype.h create mode 100644 include/date.h create mode 100644 include/debug.h create mode 100644 include/delay.h create mode 100644 include/device.h create mode 100644 include/dhcp.h create mode 100644 include/dns.h create mode 100644 include/ether.h create mode 100644 include/ethloop.h create mode 100644 include/file.h create mode 100644 include/flash.h create mode 100644 include/gpio.h create mode 100644 include/icmp.h create mode 100644 include/icu.h create mode 100644 include/interrupt.h create mode 100644 include/ip.h create mode 100644 include/kernel.h create mode 100644 include/lfilesys.h create mode 100644 include/limits.h create mode 100644 include/loopback.h create mode 100644 include/mark.h create mode 100644 include/memory.h create mode 100644 include/mmu.h create mode 100644 include/name.h create mode 100644 include/net.h create mode 100644 include/platform.h create mode 100644 include/ports.h create mode 100644 include/process.h create mode 100644 include/prodcons.h create mode 100644 include/prototypes.h create mode 100644 include/queue.h create mode 100644 include/ramdisk.h create mode 100644 include/rdisksys.h create mode 100644 include/resched.h create mode 100644 include/rfilesys.h create mode 100644 include/sched.h create mode 100644 include/semaphore.h create mode 100644 include/shell.h create mode 100644 include/shprototypes.h create mode 100644 include/stdarg.h create mode 100644 include/stddef.h create mode 100644 include/stdint.h create mode 100644 include/stdio.h create mode 100644 include/stdlib.h create mode 100644 include/string.h create mode 100644 include/testsuite.h create mode 100644 include/tftp.h create mode 100644 include/tty.h create mode 100644 include/uart.h create mode 100644 include/udp.h create mode 100644 include/xinu.h create mode 100644 lib/Makefile create mode 100644 lib/abs.c create mode 100644 lib/atoi.c create mode 100644 lib/atol.c create mode 100644 lib/bzero.c create mode 100644 lib/ctype_.c create mode 100644 lib/doprnt.c create mode 100644 lib/doscan.c create mode 100644 lib/fdoprnt.c create mode 100644 lib/fgetc.c create mode 100644 lib/fgets.c create mode 100644 lib/fprintf.c create mode 100644 lib/fputc.c create mode 100644 lib/fputs.c create mode 100644 lib/fscanf.c create mode 100644 lib/getchar.c create mode 100644 lib/labs.c create mode 100644 lib/memchr.c create mode 100644 lib/memcmp.c create mode 100644 lib/memcpy.c create mode 100644 lib/memset.c create mode 100644 lib/printf.c create mode 100644 lib/putchar.c create mode 100644 lib/qsort.c create mode 100644 lib/rand.c create mode 100644 lib/sprintf.c create mode 100644 lib/sscanf.c create mode 100644 lib/strchr.c create mode 100644 lib/strcmp.c create mode 100644 lib/strcpy.c create mode 100644 lib/strlen.c create mode 100644 lib/strncat.c create mode 100644 lib/strncmp.c create mode 100644 lib/strncpy.c create mode 100644 lib/strnlen.c create mode 100644 lib/strrchr.c create mode 100644 lib/strstr.c create mode 100644 net/arp.c create mode 100644 net/arp_dump.c create mode 100644 net/dhcp.c create mode 100644 net/dns.c create mode 100644 net/dot2ip.c create mode 100644 net/hexdump.c create mode 100644 net/icmp.c create mode 100644 net/ip.c create mode 100644 net/net.c create mode 100644 net/netstart.c create mode 100644 net/pdump.c create mode 100644 net/tftp.c create mode 100644 net/udp.c create mode 100644 shell/.xsh_udpecho.c.swp create mode 100644 shell/addargs.c create mode 100644 shell/lexan.c create mode 100644 shell/shell.c create mode 100644 shell/xsh_argecho.c create mode 100644 shell/xsh_cat.c create mode 100644 shell/xsh_clear.c create mode 100644 shell/xsh_date.c create mode 100644 shell/xsh_devdump.c create mode 100644 shell/xsh_echo.c create mode 100644 shell/xsh_exit.c create mode 100644 shell/xsh_help.c create mode 100644 shell/xsh_kill.c create mode 100644 shell/xsh_led.c create mode 100644 shell/xsh_memdump.c create mode 100644 shell/xsh_memstat.c create mode 100644 shell/xsh_mmu.c create mode 100644 shell/xsh_ps.c create mode 100644 shell/xsh_rdstest.c create mode 100644 shell/xsh_sleep.c create mode 100644 shell/xsh_uptime.c create mode 100644 system/ascdate.c create mode 100644 system/bufinit.c create mode 100644 system/chprio.c create mode 100644 system/clkhandler.c create mode 100644 system/clkinit.c create mode 100644 system/close.c create mode 100644 system/control.c create mode 100644 system/create.c create mode 100644 system/ctxsw.S create mode 100644 system/debug.c create mode 100644 system/evec.c create mode 100644 system/exit.c create mode 100644 system/freebuf.c create mode 100644 system/freemem.c create mode 100644 system/getbuf.c create mode 100644 system/getc.c create mode 100644 system/getdev.c create mode 100644 system/getitem.c create mode 100644 system/getmem.c create mode 100644 system/getpid.c create mode 100644 system/getprio.c create mode 100644 system/getstk.c create mode 100644 system/gettime.c create mode 100644 system/init.c create mode 100644 system/initialize.c create mode 100644 system/insert.c create mode 100644 system/insertd.c create mode 100644 system/intr.S create mode 100644 system/ioerr.c create mode 100644 system/ionull.c create mode 100644 system/irq_handler.S create mode 100644 system/kill.c create mode 100644 system/main.c create mode 100644 system/mark.c create mode 100644 system/meminit.c create mode 100644 system/memory_barrier.S create mode 100644 system/mkbufpool.c create mode 100644 system/mmu.c create mode 100644 system/newqueue.c create mode 100644 system/open.c create mode 100644 system/page_fault.S create mode 100644 system/panic.c create mode 100644 system/pl190.c create mode 100644 system/platinit.c create mode 100644 system/ptclear.c create mode 100644 system/ptcount.c create mode 100644 system/ptcreate.c create mode 100644 system/ptdelete.c create mode 100644 system/ptinit.c create mode 100644 system/ptrecv.c create mode 100644 system/ptreset.c create mode 100644 system/ptsend.c create mode 100644 system/putc.c create mode 100644 system/queue.c create mode 100644 system/read.c create mode 100644 system/ready.c create mode 100644 system/receive.c create mode 100644 system/recvclr.c create mode 100644 system/recvtime.c create mode 100644 system/resched.c create mode 100644 system/resume.c create mode 100644 system/seek.c create mode 100644 system/semcount.c create mode 100644 system/semcreate.c create mode 100644 system/semdelete.c create mode 100644 system/semreset.c create mode 100644 system/send.c create mode 100644 system/signal.c create mode 100644 system/signaln.c create mode 100644 system/sleep.c create mode 100644 system/sp804.c create mode 100644 system/start.S create mode 100644 system/suspend.c create mode 100644 system/tmpdecls create mode 100644 system/udelay.c create mode 100644 system/unsleep.c create mode 100644 system/userret.c create mode 100644 system/wait.c create mode 100644 system/wakeup.c create mode 100644 system/write.c create mode 100644 system/xdone.c create mode 100644 system/yield.c create mode 100644 xtra/getutime.c create mode 100644 xtra/irq_handler.S create mode 100644 xtra/kprintf.c create mode 100644 xtra/memory_barrier.S create mode 100644 xtra/xsh_arp.c create mode 100644 xtra/xsh_ipaddr.c create mode 100644 xtra/xsh_ping.c create mode 100644 xtra/xsh_udpdump.c create mode 100644 xtra/xsh_udpecho.c create mode 100644 xtra/xsh_udpeserver.c diff --git a/README.md b/README.md index 5448eba..048a21e 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,5 @@ -# P436-F16 -Class Repository for P436 Fall 2016 Semester +# Fall 2016 + +Welcome to Operating Systems! + + diff --git a/apps/consume.c b/apps/consume.c new file mode 100644 index 0000000..d6d4fa2 --- /dev/null +++ b/apps/consume.c @@ -0,0 +1,6 @@ +#include +#include + +void consumer(int count) { +} + diff --git a/apps/produce.c b/apps/produce.c new file mode 100644 index 0000000..55a5232 --- /dev/null +++ b/apps/produce.c @@ -0,0 +1,8 @@ +#include +#include + +void producer(int count) { +} + + + diff --git a/compile/.defs b/compile/.defs new file mode 100644 index 0000000..f908742 --- /dev/null +++ b/compile/.defs @@ -0,0 +1,699 @@ +#-------------------------------------------------------------------------------# +# # +# Definitions generated by build-make on Wed Aug 31 15:18:11 EDT 2016 # +# # +#-------------------------------------------------------------------------------# + +SRC_CFILES = +SRC_SFILES = + + + +#------------------------------------------------------------------ +# +# Directory ../system +# +#------------------------------------------------------------------ + +SYSTEM_SFILES = \ + ctxsw.S intr.S irq_handler.S memory_barrier.S \ + page_fault.S start.S + +SYSTEM_CFILES = \ + ascdate.c bufinit.c chprio.c clkhandler.c \ + clkinit.c close.c conf.c control.c \ + create.c evec.c exit.c freebuf.c \ + freemem.c getbuf.c getc.c getdev.c \ + getitem.c getmem.c getpid.c getprio.c \ + getstk.c gettime.c init.c initialize.c \ + insert.c insertd.c ioerr.c ionull.c \ + kill.c main.c mark.c meminit.c \ + mkbufpool.c mmu.c newqueue.c open.c \ + panic.c pl190.c platinit.c ptclear.c \ + ptcount.c ptcreate.c ptdelete.c ptinit.c \ + ptrecv.c ptreset.c ptsend.c putc.c \ + queue.c read.c ready.c receive.c \ + recvclr.c recvtime.c resched.c resume.c \ + seek.c semcount.c semcreate.c semdelete.c \ + semreset.c send.c signal.c signaln.c \ + sleep.c sp804.c suspend.c udelay.c \ + unsleep.c userret.c wait.c wakeup.c \ + write.c xdone.c yield.c + +SRC_CFILES += ${SYSTEM_CFILES} +SRC_SFILES += ${SYSTEM_SFILES} +SYSTEM_CFULL += ${SYSTEM_CFILES:%=../system/%} +SYSTEM_SFULL += ${SYSTEM_SFILES:%=../system/%} +SRC_CFULL += ${SYSTEM_CFULL} +SRC_SFULL += ${SYSTEM_SFULL} + + +#------------------------------------------------------------------ +# +# Directory ../lib +# +#------------------------------------------------------------------ + +LIB_CFILES = \ + abs.c atoi.c atol.c bzero.c ctype_.c doprnt.c \ + doscan.c fdoprnt.c fgetc.c fgets.c fprintf.c fputc.c \ + fputs.c fscanf.c getchar.c labs.c memchr.c memcmp.c \ + memcpy.c memset.c printf.c putchar.c qsort.c rand.c \ + sprintf.c sscanf.c strchr.c strcmp.c strcpy.c strlen.c \ + strncat.c strncmp.c strncpy.c strnlen.c strrchr.c strstr.c + +SRC_CFILES += ${LIB_CFILES} +LIB_CFULL += ${LIB_CFILES:%=../lib/%} +SRC_CFULL += ${LIB_CFULL} + + +#------------------------------------------------------------------ +# +# Directory ../device/tty +# +#------------------------------------------------------------------ + +DEVICE_TTY_CFILES = \ + ttycontrol.c ttygetc.c ttyhandle_in.c ttyhandle_out.c \ + ttyhandler.c ttyinit.c ttykickout.c ttyputc.c \ + ttyread.c ttywrite.c + +SRC_CFILES += ${DEVICE_TTY_CFILES} +DEVICE_TTY_CFULL += ${DEVICE_TTY_CFILES:%=../device/tty/%} +SRC_CFULL += ${DEVICE_TTY_CFULL} + + +#------------------------------------------------------------------ +# +# Directory ../device/nam +# +#------------------------------------------------------------------ + +DEVICE_NAM_CFILES = \ + mount.c naminit.c nammap.c namopen.c + +SRC_CFILES += ${DEVICE_NAM_CFILES} +DEVICE_NAM_CFULL += ${DEVICE_NAM_CFILES:%=../device/nam/%} +SRC_CFULL += ${DEVICE_NAM_CFULL} + + +#------------------------------------------------------------------ +# +# Directory ../device/ram +# +#------------------------------------------------------------------ + +DEVICE_RAM_CFILES = \ + ramclose.c raminit.c ramopen.c ramread.c ramwrite.c + +SRC_CFILES += ${DEVICE_RAM_CFILES} +DEVICE_RAM_CFULL += ${DEVICE_RAM_CFILES:%=../device/ram/%} +SRC_CFULL += ${DEVICE_RAM_CFULL} + + +#------------------------------------------------------------------ +# +# Directory ../device/lfs +# +#------------------------------------------------------------------ + +DEVICE_LFS_CFILES = \ + lfdballoc.c lfdbfree.c lfflush.c lfgetmode.c lfiballoc.c \ + lfibclear.c lfibget.c lfibput.c lflclose.c lflcontrol.c \ + lflgetc.c lflinit.c lflputc.c lflread.c lflseek.c \ + lflwrite.c lfsckfmt.c lfscreate.c lfsetup.c lfsinit.c \ + lfsopen.c lftruncate.c + +SRC_CFILES += ${DEVICE_LFS_CFILES} +DEVICE_LFS_CFULL += ${DEVICE_LFS_CFILES:%=../device/lfs/%} +SRC_CFULL += ${DEVICE_LFS_CFULL} + + +#------------------------------------------------------------------ +# +# Directory ../device/uart +# +#------------------------------------------------------------------ + +DEVICE_UART_CFILES = \ + kprintf.c kvprintf.c uartControl.c uartGetc.c \ + uartInit.c uartPutc.c uartRead.c uartStat.c \ + uartWrite.c + +SRC_CFILES += ${DEVICE_UART_CFILES} +DEVICE_UART_CFULL += ${DEVICE_UART_CFILES:%=../device/uart/%} +SRC_CFULL += ${DEVICE_UART_CFULL} + + +#------------------------------------------------------------------ +# +# Directory ../device/uart-pl011 +# +#------------------------------------------------------------------ + +DEVICE_UART-PL011_CFILES = \ + kgetc.c kputc.c uartHwInit.c uartHwPutc.c \ + uartHwStat.c uartInterrupt.c + +SRC_CFILES += ${DEVICE_UART-PL011_CFILES} +DEVICE_UART-PL011_CFULL += ${DEVICE_UART-PL011_CFILES:%=../device/uart-pl011/%} +SRC_CFULL += ${DEVICE_UART-PL011_CFULL} + + +#------------------------------------------------------------------ +# +# Directory ../device/loopback +# +#------------------------------------------------------------------ + +DEVICE_LOOPBACK_CFILES = \ + Doxygroup.c loopbackClose.c loopbackControl.c \ + loopbackGetc.c loopbackInit.c loopbackOpen.c \ + loopbackPutc.c loopbackRead.c loopbackWrite.c + +SRC_CFILES += ${DEVICE_LOOPBACK_CFILES} +DEVICE_LOOPBACK_CFULL += ${DEVICE_LOOPBACK_CFILES:%=../device/loopback/%} +SRC_CFULL += ${DEVICE_LOOPBACK_CFULL} + + +#------------------------------------------------------------------ +# +# Directory ../shell +# +#------------------------------------------------------------------ + +SHELL_CFILES = \ + addargs.c lexan.c shell.c xsh_argecho.c \ + xsh_cat.c xsh_clear.c xsh_date.c xsh_devdump.c \ + xsh_echo.c xsh_exit.c xsh_help.c xsh_kill.c \ + xsh_led.c xsh_memdump.c xsh_memstat.c xsh_mmu.c \ + xsh_ps.c xsh_sleep.c xsh_uptime.c + +SRC_CFILES += ${SHELL_CFILES} +SHELL_CFULL += ${SHELL_CFILES:%=../shell/%} +SRC_CFULL += ${SHELL_CFULL} + + +#------------------------------------------------------------------ +# +# Directory ../apps +# +#------------------------------------------------------------------ + +APPS_CFILES = \ + consume.c produce.c + +SRC_CFILES += ${APPS_CFILES} +APPS_CFULL += ${APPS_CFILES:%=../apps/%} +SRC_CFULL += ${APPS_CFULL} + + +#-------------------------------------------------------------------------------# +# # +# Rules For Generating Object Files # +# # +#-------------------------------------------------------------------------------# + +OBJ_TMP = ${patsubst %.s,%.o,$(SRC_SFILES)} # substitute .s => .o +OBJ_SFILES = ${patsubst %.S,%.o,$(OBJ_TMP)} # substitute .S => .o +OBJ_CFILES = ${patsubst %.c,%.o,$(SRC_CFILES)} # substitute .c => .o +OBJ_LIST = ${OBJ_CFILES} ${OBJ_SFILES} +OBJ_FILES = ${OBJ_LIST:%=binaries/%} +SRC_FULL = ${SRC_CFULL} ${SRC_SFULL} + +#------------------------------------------------------------------ +# Rules for files in directory ../system +#------------------------------------------------------------------ + +binaries/ctxsw.o: ../system/ctxsw.S + ${CC} ${CFLAGS} -o binaries/ctxsw.o ../system/ctxsw.S +binaries/intr.o: ../system/intr.S + ${CC} ${CFLAGS} -o binaries/intr.o ../system/intr.S +binaries/irq_handler.o: ../system/irq_handler.S + ${CC} ${CFLAGS} -o binaries/irq_handler.o ../system/irq_handler.S +binaries/memory_barrier.o: ../system/memory_barrier.S + ${CC} ${CFLAGS} -o binaries/memory_barrier.o ../system/memory_barrier.S +binaries/page_fault.o: ../system/page_fault.S + ${CC} ${CFLAGS} -o binaries/page_fault.o ../system/page_fault.S +binaries/start.o: ../system/start.S + ${CC} ${CFLAGS} -o binaries/start.o ../system/start.S +binaries/ascdate.o: ../system/ascdate.c + ${CC} ${CFLAGS} -o binaries/ascdate.o ../system/ascdate.c +binaries/bufinit.o: ../system/bufinit.c + ${CC} ${CFLAGS} -o binaries/bufinit.o ../system/bufinit.c +binaries/chprio.o: ../system/chprio.c + ${CC} ${CFLAGS} -o binaries/chprio.o ../system/chprio.c +binaries/clkhandler.o: ../system/clkhandler.c + ${CC} ${CFLAGS} -o binaries/clkhandler.o ../system/clkhandler.c +binaries/clkinit.o: ../system/clkinit.c + ${CC} ${CFLAGS} -o binaries/clkinit.o ../system/clkinit.c +binaries/close.o: ../system/close.c + ${CC} ${CFLAGS} -o binaries/close.o ../system/close.c +binaries/conf.o: ../system/conf.c + ${CC} ${CFLAGS} -o binaries/conf.o ../system/conf.c +binaries/control.o: ../system/control.c + ${CC} ${CFLAGS} -o binaries/control.o ../system/control.c +binaries/create.o: ../system/create.c + ${CC} ${CFLAGS} -o binaries/create.o ../system/create.c +binaries/evec.o: ../system/evec.c + ${CC} ${CFLAGS} -o binaries/evec.o ../system/evec.c +binaries/exit.o: ../system/exit.c + ${CC} ${CFLAGS} -o binaries/exit.o ../system/exit.c +binaries/freebuf.o: ../system/freebuf.c + ${CC} ${CFLAGS} -o binaries/freebuf.o ../system/freebuf.c +binaries/freemem.o: ../system/freemem.c + ${CC} ${CFLAGS} -o binaries/freemem.o ../system/freemem.c +binaries/getbuf.o: ../system/getbuf.c + ${CC} ${CFLAGS} -o binaries/getbuf.o ../system/getbuf.c +binaries/getc.o: ../system/getc.c + ${CC} ${CFLAGS} -o binaries/getc.o ../system/getc.c +binaries/getdev.o: ../system/getdev.c + ${CC} ${CFLAGS} -o binaries/getdev.o ../system/getdev.c +binaries/getitem.o: ../system/getitem.c + ${CC} ${CFLAGS} -o binaries/getitem.o ../system/getitem.c +binaries/getmem.o: ../system/getmem.c + ${CC} ${CFLAGS} -o binaries/getmem.o ../system/getmem.c +binaries/getpid.o: ../system/getpid.c + ${CC} ${CFLAGS} -o binaries/getpid.o ../system/getpid.c +binaries/getprio.o: ../system/getprio.c + ${CC} ${CFLAGS} -o binaries/getprio.o ../system/getprio.c +binaries/getstk.o: ../system/getstk.c + ${CC} ${CFLAGS} -o binaries/getstk.o ../system/getstk.c +binaries/gettime.o: ../system/gettime.c + ${CC} ${CFLAGS} -o binaries/gettime.o ../system/gettime.c +binaries/init.o: ../system/init.c + ${CC} ${CFLAGS} -o binaries/init.o ../system/init.c +binaries/initialize.o: ../system/initialize.c + ${CC} ${CFLAGS} -o binaries/initialize.o ../system/initialize.c +binaries/insert.o: ../system/insert.c + ${CC} ${CFLAGS} -o binaries/insert.o ../system/insert.c +binaries/insertd.o: ../system/insertd.c + ${CC} ${CFLAGS} -o binaries/insertd.o ../system/insertd.c +binaries/ioerr.o: ../system/ioerr.c + ${CC} ${CFLAGS} -o binaries/ioerr.o ../system/ioerr.c +binaries/ionull.o: ../system/ionull.c + ${CC} ${CFLAGS} -o binaries/ionull.o ../system/ionull.c +binaries/kill.o: ../system/kill.c + ${CC} ${CFLAGS} -o binaries/kill.o ../system/kill.c +binaries/main.o: ../system/main.c + ${CC} ${CFLAGS} -o binaries/main.o ../system/main.c +binaries/mark.o: ../system/mark.c + ${CC} ${CFLAGS} -o binaries/mark.o ../system/mark.c +binaries/meminit.o: ../system/meminit.c + ${CC} ${CFLAGS} -o binaries/meminit.o ../system/meminit.c +binaries/mkbufpool.o: ../system/mkbufpool.c + ${CC} ${CFLAGS} -o binaries/mkbufpool.o ../system/mkbufpool.c +binaries/mmu.o: ../system/mmu.c + ${CC} ${CFLAGS} -o binaries/mmu.o ../system/mmu.c +binaries/newqueue.o: ../system/newqueue.c + ${CC} ${CFLAGS} -o binaries/newqueue.o ../system/newqueue.c +binaries/open.o: ../system/open.c + ${CC} ${CFLAGS} -o binaries/open.o ../system/open.c +binaries/panic.o: ../system/panic.c + ${CC} ${CFLAGS} -o binaries/panic.o ../system/panic.c +binaries/pl190.o: ../system/pl190.c + ${CC} ${CFLAGS} -o binaries/pl190.o ../system/pl190.c +binaries/platinit.o: ../system/platinit.c + ${CC} ${CFLAGS} -o binaries/platinit.o ../system/platinit.c +binaries/ptclear.o: ../system/ptclear.c + ${CC} ${CFLAGS} -o binaries/ptclear.o ../system/ptclear.c +binaries/ptcount.o: ../system/ptcount.c + ${CC} ${CFLAGS} -o binaries/ptcount.o ../system/ptcount.c +binaries/ptcreate.o: ../system/ptcreate.c + ${CC} ${CFLAGS} -o binaries/ptcreate.o ../system/ptcreate.c +binaries/ptdelete.o: ../system/ptdelete.c + ${CC} ${CFLAGS} -o binaries/ptdelete.o ../system/ptdelete.c +binaries/ptinit.o: ../system/ptinit.c + ${CC} ${CFLAGS} -o binaries/ptinit.o ../system/ptinit.c +binaries/ptrecv.o: ../system/ptrecv.c + ${CC} ${CFLAGS} -o binaries/ptrecv.o ../system/ptrecv.c +binaries/ptreset.o: ../system/ptreset.c + ${CC} ${CFLAGS} -o binaries/ptreset.o ../system/ptreset.c +binaries/ptsend.o: ../system/ptsend.c + ${CC} ${CFLAGS} -o binaries/ptsend.o ../system/ptsend.c +binaries/putc.o: ../system/putc.c + ${CC} ${CFLAGS} -o binaries/putc.o ../system/putc.c +binaries/queue.o: ../system/queue.c + ${CC} ${CFLAGS} -o binaries/queue.o ../system/queue.c +binaries/read.o: ../system/read.c + ${CC} ${CFLAGS} -o binaries/read.o ../system/read.c +binaries/ready.o: ../system/ready.c + ${CC} ${CFLAGS} -o binaries/ready.o ../system/ready.c +binaries/receive.o: ../system/receive.c + ${CC} ${CFLAGS} -o binaries/receive.o ../system/receive.c +binaries/recvclr.o: ../system/recvclr.c + ${CC} ${CFLAGS} -o binaries/recvclr.o ../system/recvclr.c +binaries/recvtime.o: ../system/recvtime.c + ${CC} ${CFLAGS} -o binaries/recvtime.o ../system/recvtime.c +binaries/resched.o: ../system/resched.c + ${CC} ${CFLAGS} -o binaries/resched.o ../system/resched.c +binaries/resume.o: ../system/resume.c + ${CC} ${CFLAGS} -o binaries/resume.o ../system/resume.c +binaries/seek.o: ../system/seek.c + ${CC} ${CFLAGS} -o binaries/seek.o ../system/seek.c +binaries/semcount.o: ../system/semcount.c + ${CC} ${CFLAGS} -o binaries/semcount.o ../system/semcount.c +binaries/semcreate.o: ../system/semcreate.c + ${CC} ${CFLAGS} -o binaries/semcreate.o ../system/semcreate.c +binaries/semdelete.o: ../system/semdelete.c + ${CC} ${CFLAGS} -o binaries/semdelete.o ../system/semdelete.c +binaries/semreset.o: ../system/semreset.c + ${CC} ${CFLAGS} -o binaries/semreset.o ../system/semreset.c +binaries/send.o: ../system/send.c + ${CC} ${CFLAGS} -o binaries/send.o ../system/send.c +binaries/signal.o: ../system/signal.c + ${CC} ${CFLAGS} -o binaries/signal.o ../system/signal.c +binaries/signaln.o: ../system/signaln.c + ${CC} ${CFLAGS} -o binaries/signaln.o ../system/signaln.c +binaries/sleep.o: ../system/sleep.c + ${CC} ${CFLAGS} -o binaries/sleep.o ../system/sleep.c +binaries/sp804.o: ../system/sp804.c + ${CC} ${CFLAGS} -o binaries/sp804.o ../system/sp804.c +binaries/suspend.o: ../system/suspend.c + ${CC} ${CFLAGS} -o binaries/suspend.o ../system/suspend.c +binaries/udelay.o: ../system/udelay.c + ${CC} ${CFLAGS} -o binaries/udelay.o ../system/udelay.c +binaries/unsleep.o: ../system/unsleep.c + ${CC} ${CFLAGS} -o binaries/unsleep.o ../system/unsleep.c +binaries/userret.o: ../system/userret.c + ${CC} ${CFLAGS} -o binaries/userret.o ../system/userret.c +binaries/wait.o: ../system/wait.c + ${CC} ${CFLAGS} -o binaries/wait.o ../system/wait.c +binaries/wakeup.o: ../system/wakeup.c + ${CC} ${CFLAGS} -o binaries/wakeup.o ../system/wakeup.c +binaries/write.o: ../system/write.c + ${CC} ${CFLAGS} -o binaries/write.o ../system/write.c +binaries/xdone.o: ../system/xdone.c + ${CC} ${CFLAGS} -o binaries/xdone.o ../system/xdone.c +binaries/yield.o: ../system/yield.c + ${CC} ${CFLAGS} -o binaries/yield.o ../system/yield.c + +#------------------------------------------------------------------ +# Rules for files in directory ../lib +#------------------------------------------------------------------ + +binaries/abs.o: ../lib/abs.c + ${CC} ${CFLAGS} -o binaries/abs.o ../lib/abs.c +binaries/atoi.o: ../lib/atoi.c + ${CC} ${CFLAGS} -o binaries/atoi.o ../lib/atoi.c +binaries/atol.o: ../lib/atol.c + ${CC} ${CFLAGS} -o binaries/atol.o ../lib/atol.c +binaries/bzero.o: ../lib/bzero.c + ${CC} ${CFLAGS} -o binaries/bzero.o ../lib/bzero.c +binaries/ctype_.o: ../lib/ctype_.c + ${CC} ${CFLAGS} -o binaries/ctype_.o ../lib/ctype_.c +binaries/doprnt.o: ../lib/doprnt.c + ${CC} ${CFLAGS} -o binaries/doprnt.o ../lib/doprnt.c +binaries/doscan.o: ../lib/doscan.c + ${CC} ${CFLAGS} -o binaries/doscan.o ../lib/doscan.c +binaries/fdoprnt.o: ../lib/fdoprnt.c + ${CC} ${CFLAGS} -o binaries/fdoprnt.o ../lib/fdoprnt.c +binaries/fgetc.o: ../lib/fgetc.c + ${CC} ${CFLAGS} -o binaries/fgetc.o ../lib/fgetc.c +binaries/fgets.o: ../lib/fgets.c + ${CC} ${CFLAGS} -o binaries/fgets.o ../lib/fgets.c +binaries/fprintf.o: ../lib/fprintf.c + ${CC} ${CFLAGS} -o binaries/fprintf.o ../lib/fprintf.c +binaries/fputc.o: ../lib/fputc.c + ${CC} ${CFLAGS} -o binaries/fputc.o ../lib/fputc.c +binaries/fputs.o: ../lib/fputs.c + ${CC} ${CFLAGS} -o binaries/fputs.o ../lib/fputs.c +binaries/fscanf.o: ../lib/fscanf.c + ${CC} ${CFLAGS} -o binaries/fscanf.o ../lib/fscanf.c +binaries/getchar.o: ../lib/getchar.c + ${CC} ${CFLAGS} -o binaries/getchar.o ../lib/getchar.c +binaries/labs.o: ../lib/labs.c + ${CC} ${CFLAGS} -o binaries/labs.o ../lib/labs.c +binaries/memchr.o: ../lib/memchr.c + ${CC} ${CFLAGS} -o binaries/memchr.o ../lib/memchr.c +binaries/memcmp.o: ../lib/memcmp.c + ${CC} ${CFLAGS} -o binaries/memcmp.o ../lib/memcmp.c +binaries/memcpy.o: ../lib/memcpy.c + ${CC} ${CFLAGS} -o binaries/memcpy.o ../lib/memcpy.c +binaries/memset.o: ../lib/memset.c + ${CC} ${CFLAGS} -o binaries/memset.o ../lib/memset.c +binaries/printf.o: ../lib/printf.c + ${CC} ${CFLAGS} -o binaries/printf.o ../lib/printf.c +binaries/putchar.o: ../lib/putchar.c + ${CC} ${CFLAGS} -o binaries/putchar.o ../lib/putchar.c +binaries/qsort.o: ../lib/qsort.c + ${CC} ${CFLAGS} -o binaries/qsort.o ../lib/qsort.c +binaries/rand.o: ../lib/rand.c + ${CC} ${CFLAGS} -o binaries/rand.o ../lib/rand.c +binaries/sprintf.o: ../lib/sprintf.c + ${CC} ${CFLAGS} -o binaries/sprintf.o ../lib/sprintf.c +binaries/sscanf.o: ../lib/sscanf.c + ${CC} ${CFLAGS} -o binaries/sscanf.o ../lib/sscanf.c +binaries/strchr.o: ../lib/strchr.c + ${CC} ${CFLAGS} -o binaries/strchr.o ../lib/strchr.c +binaries/strcmp.o: ../lib/strcmp.c + ${CC} ${CFLAGS} -o binaries/strcmp.o ../lib/strcmp.c +binaries/strcpy.o: ../lib/strcpy.c + ${CC} ${CFLAGS} -o binaries/strcpy.o ../lib/strcpy.c +binaries/strlen.o: ../lib/strlen.c + ${CC} ${CFLAGS} -o binaries/strlen.o ../lib/strlen.c +binaries/strncat.o: ../lib/strncat.c + ${CC} ${CFLAGS} -o binaries/strncat.o ../lib/strncat.c +binaries/strncmp.o: ../lib/strncmp.c + ${CC} ${CFLAGS} -o binaries/strncmp.o ../lib/strncmp.c +binaries/strncpy.o: ../lib/strncpy.c + ${CC} ${CFLAGS} -o binaries/strncpy.o ../lib/strncpy.c +binaries/strnlen.o: ../lib/strnlen.c + ${CC} ${CFLAGS} -o binaries/strnlen.o ../lib/strnlen.c +binaries/strrchr.o: ../lib/strrchr.c + ${CC} ${CFLAGS} -o binaries/strrchr.o ../lib/strrchr.c +binaries/strstr.o: ../lib/strstr.c + ${CC} ${CFLAGS} -o binaries/strstr.o ../lib/strstr.c + +#------------------------------------------------------------------ +# Rules for files in directory ../device/tty +#------------------------------------------------------------------ + +binaries/ttycontrol.o: ../device/tty/ttycontrol.c + ${CC} ${CFLAGS} -o binaries/ttycontrol.o ../device/tty/ttycontrol.c +binaries/ttygetc.o: ../device/tty/ttygetc.c + ${CC} ${CFLAGS} -o binaries/ttygetc.o ../device/tty/ttygetc.c +binaries/ttyhandle_in.o: ../device/tty/ttyhandle_in.c + ${CC} ${CFLAGS} -o binaries/ttyhandle_in.o ../device/tty/ttyhandle_in.c +binaries/ttyhandle_out.o: ../device/tty/ttyhandle_out.c + ${CC} ${CFLAGS} -o binaries/ttyhandle_out.o ../device/tty/ttyhandle_out.c +binaries/ttyhandler.o: ../device/tty/ttyhandler.c + ${CC} ${CFLAGS} -o binaries/ttyhandler.o ../device/tty/ttyhandler.c +binaries/ttyinit.o: ../device/tty/ttyinit.c + ${CC} ${CFLAGS} -o binaries/ttyinit.o ../device/tty/ttyinit.c +binaries/ttykickout.o: ../device/tty/ttykickout.c + ${CC} ${CFLAGS} -o binaries/ttykickout.o ../device/tty/ttykickout.c +binaries/ttyputc.o: ../device/tty/ttyputc.c + ${CC} ${CFLAGS} -o binaries/ttyputc.o ../device/tty/ttyputc.c +binaries/ttyread.o: ../device/tty/ttyread.c + ${CC} ${CFLAGS} -o binaries/ttyread.o ../device/tty/ttyread.c +binaries/ttywrite.o: ../device/tty/ttywrite.c + ${CC} ${CFLAGS} -o binaries/ttywrite.o ../device/tty/ttywrite.c + +#------------------------------------------------------------------ +# Rules for files in directory ../device/nam +#------------------------------------------------------------------ + +binaries/mount.o: ../device/nam/mount.c + ${CC} ${CFLAGS} -o binaries/mount.o ../device/nam/mount.c +binaries/naminit.o: ../device/nam/naminit.c + ${CC} ${CFLAGS} -o binaries/naminit.o ../device/nam/naminit.c +binaries/nammap.o: ../device/nam/nammap.c + ${CC} ${CFLAGS} -o binaries/nammap.o ../device/nam/nammap.c +binaries/namopen.o: ../device/nam/namopen.c + ${CC} ${CFLAGS} -o binaries/namopen.o ../device/nam/namopen.c + +#------------------------------------------------------------------ +# Rules for files in directory ../device/ram +#------------------------------------------------------------------ + +binaries/ramclose.o: ../device/ram/ramclose.c + ${CC} ${CFLAGS} -o binaries/ramclose.o ../device/ram/ramclose.c +binaries/raminit.o: ../device/ram/raminit.c + ${CC} ${CFLAGS} -o binaries/raminit.o ../device/ram/raminit.c +binaries/ramopen.o: ../device/ram/ramopen.c + ${CC} ${CFLAGS} -o binaries/ramopen.o ../device/ram/ramopen.c +binaries/ramread.o: ../device/ram/ramread.c + ${CC} ${CFLAGS} -o binaries/ramread.o ../device/ram/ramread.c +binaries/ramwrite.o: ../device/ram/ramwrite.c + ${CC} ${CFLAGS} -o binaries/ramwrite.o ../device/ram/ramwrite.c + +#------------------------------------------------------------------ +# Rules for files in directory ../device/lfs +#------------------------------------------------------------------ + +binaries/lfdballoc.o: ../device/lfs/lfdballoc.c + ${CC} ${CFLAGS} -o binaries/lfdballoc.o ../device/lfs/lfdballoc.c +binaries/lfdbfree.o: ../device/lfs/lfdbfree.c + ${CC} ${CFLAGS} -o binaries/lfdbfree.o ../device/lfs/lfdbfree.c +binaries/lfflush.o: ../device/lfs/lfflush.c + ${CC} ${CFLAGS} -o binaries/lfflush.o ../device/lfs/lfflush.c +binaries/lfgetmode.o: ../device/lfs/lfgetmode.c + ${CC} ${CFLAGS} -o binaries/lfgetmode.o ../device/lfs/lfgetmode.c +binaries/lfiballoc.o: ../device/lfs/lfiballoc.c + ${CC} ${CFLAGS} -o binaries/lfiballoc.o ../device/lfs/lfiballoc.c +binaries/lfibclear.o: ../device/lfs/lfibclear.c + ${CC} ${CFLAGS} -o binaries/lfibclear.o ../device/lfs/lfibclear.c +binaries/lfibget.o: ../device/lfs/lfibget.c + ${CC} ${CFLAGS} -o binaries/lfibget.o ../device/lfs/lfibget.c +binaries/lfibput.o: ../device/lfs/lfibput.c + ${CC} ${CFLAGS} -o binaries/lfibput.o ../device/lfs/lfibput.c +binaries/lflclose.o: ../device/lfs/lflclose.c + ${CC} ${CFLAGS} -o binaries/lflclose.o ../device/lfs/lflclose.c +binaries/lflcontrol.o: ../device/lfs/lflcontrol.c + ${CC} ${CFLAGS} -o binaries/lflcontrol.o ../device/lfs/lflcontrol.c +binaries/lflgetc.o: ../device/lfs/lflgetc.c + ${CC} ${CFLAGS} -o binaries/lflgetc.o ../device/lfs/lflgetc.c +binaries/lflinit.o: ../device/lfs/lflinit.c + ${CC} ${CFLAGS} -o binaries/lflinit.o ../device/lfs/lflinit.c +binaries/lflputc.o: ../device/lfs/lflputc.c + ${CC} ${CFLAGS} -o binaries/lflputc.o ../device/lfs/lflputc.c +binaries/lflread.o: ../device/lfs/lflread.c + ${CC} ${CFLAGS} -o binaries/lflread.o ../device/lfs/lflread.c +binaries/lflseek.o: ../device/lfs/lflseek.c + ${CC} ${CFLAGS} -o binaries/lflseek.o ../device/lfs/lflseek.c +binaries/lflwrite.o: ../device/lfs/lflwrite.c + ${CC} ${CFLAGS} -o binaries/lflwrite.o ../device/lfs/lflwrite.c +binaries/lfsckfmt.o: ../device/lfs/lfsckfmt.c + ${CC} ${CFLAGS} -o binaries/lfsckfmt.o ../device/lfs/lfsckfmt.c +binaries/lfscreate.o: ../device/lfs/lfscreate.c + ${CC} ${CFLAGS} -o binaries/lfscreate.o ../device/lfs/lfscreate.c +binaries/lfsetup.o: ../device/lfs/lfsetup.c + ${CC} ${CFLAGS} -o binaries/lfsetup.o ../device/lfs/lfsetup.c +binaries/lfsinit.o: ../device/lfs/lfsinit.c + ${CC} ${CFLAGS} -o binaries/lfsinit.o ../device/lfs/lfsinit.c +binaries/lfsopen.o: ../device/lfs/lfsopen.c + ${CC} ${CFLAGS} -o binaries/lfsopen.o ../device/lfs/lfsopen.c +binaries/lftruncate.o: ../device/lfs/lftruncate.c + ${CC} ${CFLAGS} -o binaries/lftruncate.o ../device/lfs/lftruncate.c + +#------------------------------------------------------------------ +# Rules for files in directory ../device/uart +#------------------------------------------------------------------ + +binaries/kprintf.o: ../device/uart/kprintf.c + ${CC} ${CFLAGS} -o binaries/kprintf.o ../device/uart/kprintf.c +binaries/kvprintf.o: ../device/uart/kvprintf.c + ${CC} ${CFLAGS} -o binaries/kvprintf.o ../device/uart/kvprintf.c +binaries/uartControl.o: ../device/uart/uartControl.c + ${CC} ${CFLAGS} -o binaries/uartControl.o ../device/uart/uartControl.c +binaries/uartGetc.o: ../device/uart/uartGetc.c + ${CC} ${CFLAGS} -o binaries/uartGetc.o ../device/uart/uartGetc.c +binaries/uartInit.o: ../device/uart/uartInit.c + ${CC} ${CFLAGS} -o binaries/uartInit.o ../device/uart/uartInit.c +binaries/uartPutc.o: ../device/uart/uartPutc.c + ${CC} ${CFLAGS} -o binaries/uartPutc.o ../device/uart/uartPutc.c +binaries/uartRead.o: ../device/uart/uartRead.c + ${CC} ${CFLAGS} -o binaries/uartRead.o ../device/uart/uartRead.c +binaries/uartStat.o: ../device/uart/uartStat.c + ${CC} ${CFLAGS} -o binaries/uartStat.o ../device/uart/uartStat.c +binaries/uartWrite.o: ../device/uart/uartWrite.c + ${CC} ${CFLAGS} -o binaries/uartWrite.o ../device/uart/uartWrite.c + +#------------------------------------------------------------------ +# Rules for files in directory ../device/uart-pl011 +#------------------------------------------------------------------ + +binaries/kgetc.o: ../device/uart-pl011/kgetc.c + ${CC} ${CFLAGS} -o binaries/kgetc.o ../device/uart-pl011/kgetc.c +binaries/kputc.o: ../device/uart-pl011/kputc.c + ${CC} ${CFLAGS} -o binaries/kputc.o ../device/uart-pl011/kputc.c +binaries/uartHwInit.o: ../device/uart-pl011/uartHwInit.c + ${CC} ${CFLAGS} -o binaries/uartHwInit.o ../device/uart-pl011/uartHwInit.c +binaries/uartHwPutc.o: ../device/uart-pl011/uartHwPutc.c + ${CC} ${CFLAGS} -o binaries/uartHwPutc.o ../device/uart-pl011/uartHwPutc.c +binaries/uartHwStat.o: ../device/uart-pl011/uartHwStat.c + ${CC} ${CFLAGS} -o binaries/uartHwStat.o ../device/uart-pl011/uartHwStat.c +binaries/uartInterrupt.o: ../device/uart-pl011/uartInterrupt.c + ${CC} ${CFLAGS} -o binaries/uartInterrupt.o ../device/uart-pl011/uartInterrupt.c + +#------------------------------------------------------------------ +# Rules for files in directory ../device/loopback +#------------------------------------------------------------------ + +binaries/Doxygroup.o: ../device/loopback/Doxygroup.c + ${CC} ${CFLAGS} -o binaries/Doxygroup.o ../device/loopback/Doxygroup.c +binaries/loopbackClose.o: ../device/loopback/loopbackClose.c + ${CC} ${CFLAGS} -o binaries/loopbackClose.o ../device/loopback/loopbackClose.c +binaries/loopbackControl.o: ../device/loopback/loopbackControl.c + ${CC} ${CFLAGS} -o binaries/loopbackControl.o ../device/loopback/loopbackControl.c +binaries/loopbackGetc.o: ../device/loopback/loopbackGetc.c + ${CC} ${CFLAGS} -o binaries/loopbackGetc.o ../device/loopback/loopbackGetc.c +binaries/loopbackInit.o: ../device/loopback/loopbackInit.c + ${CC} ${CFLAGS} -o binaries/loopbackInit.o ../device/loopback/loopbackInit.c +binaries/loopbackOpen.o: ../device/loopback/loopbackOpen.c + ${CC} ${CFLAGS} -o binaries/loopbackOpen.o ../device/loopback/loopbackOpen.c +binaries/loopbackPutc.o: ../device/loopback/loopbackPutc.c + ${CC} ${CFLAGS} -o binaries/loopbackPutc.o ../device/loopback/loopbackPutc.c +binaries/loopbackRead.o: ../device/loopback/loopbackRead.c + ${CC} ${CFLAGS} -o binaries/loopbackRead.o ../device/loopback/loopbackRead.c +binaries/loopbackWrite.o: ../device/loopback/loopbackWrite.c + ${CC} ${CFLAGS} -o binaries/loopbackWrite.o ../device/loopback/loopbackWrite.c + +#------------------------------------------------------------------ +# Rules for files in directory ../shell +#------------------------------------------------------------------ + +binaries/addargs.o: ../shell/addargs.c + ${CC} ${CFLAGS} -o binaries/addargs.o ../shell/addargs.c +binaries/lexan.o: ../shell/lexan.c + ${CC} ${CFLAGS} -o binaries/lexan.o ../shell/lexan.c +binaries/shell.o: ../shell/shell.c + ${CC} ${CFLAGS} -o binaries/shell.o ../shell/shell.c +binaries/xsh_argecho.o: ../shell/xsh_argecho.c + ${CC} ${CFLAGS} -o binaries/xsh_argecho.o ../shell/xsh_argecho.c +binaries/xsh_cat.o: ../shell/xsh_cat.c + ${CC} ${CFLAGS} -o binaries/xsh_cat.o ../shell/xsh_cat.c +binaries/xsh_clear.o: ../shell/xsh_clear.c + ${CC} ${CFLAGS} -o binaries/xsh_clear.o ../shell/xsh_clear.c +binaries/xsh_date.o: ../shell/xsh_date.c + ${CC} ${CFLAGS} -o binaries/xsh_date.o ../shell/xsh_date.c +binaries/xsh_devdump.o: ../shell/xsh_devdump.c + ${CC} ${CFLAGS} -o binaries/xsh_devdump.o ../shell/xsh_devdump.c +binaries/xsh_echo.o: ../shell/xsh_echo.c + ${CC} ${CFLAGS} -o binaries/xsh_echo.o ../shell/xsh_echo.c +binaries/xsh_exit.o: ../shell/xsh_exit.c + ${CC} ${CFLAGS} -o binaries/xsh_exit.o ../shell/xsh_exit.c +binaries/xsh_help.o: ../shell/xsh_help.c + ${CC} ${CFLAGS} -o binaries/xsh_help.o ../shell/xsh_help.c +binaries/xsh_kill.o: ../shell/xsh_kill.c + ${CC} ${CFLAGS} -o binaries/xsh_kill.o ../shell/xsh_kill.c +binaries/xsh_led.o: ../shell/xsh_led.c + ${CC} ${CFLAGS} -o binaries/xsh_led.o ../shell/xsh_led.c +binaries/xsh_memdump.o: ../shell/xsh_memdump.c + ${CC} ${CFLAGS} -o binaries/xsh_memdump.o ../shell/xsh_memdump.c +binaries/xsh_memstat.o: ../shell/xsh_memstat.c + ${CC} ${CFLAGS} -o binaries/xsh_memstat.o ../shell/xsh_memstat.c +binaries/xsh_mmu.o: ../shell/xsh_mmu.c + ${CC} ${CFLAGS} -o binaries/xsh_mmu.o ../shell/xsh_mmu.c +binaries/xsh_ps.o: ../shell/xsh_ps.c + ${CC} ${CFLAGS} -o binaries/xsh_ps.o ../shell/xsh_ps.c +binaries/xsh_sleep.o: ../shell/xsh_sleep.c + ${CC} ${CFLAGS} -o binaries/xsh_sleep.o ../shell/xsh_sleep.c +binaries/xsh_uptime.o: ../shell/xsh_uptime.c + ${CC} ${CFLAGS} -o binaries/xsh_uptime.o ../shell/xsh_uptime.c + +#------------------------------------------------------------------ +# Rules for files in directory ../apps +#------------------------------------------------------------------ + +binaries/consume.o: ../apps/consume.c + ${CC} ${CFLAGS} -o binaries/consume.o ../apps/consume.c +binaries/produce.o: ../apps/produce.c + ${CC} ${CFLAGS} -o binaries/produce.o ../apps/produce.c + +objs: ${OBJ_FILES} + +list_obj: + @echo ${OBJ_FILES} + +list_csrc: + @echo ${SRC_CFILES} + +list_ssrc: + @echo ${SRC_SFILES} + +# Export variables for recursive make calls (such as the library) + +export + diff --git a/compile/.deps b/compile/.deps new file mode 100644 index 0000000..e69de29 diff --git a/compile/.gdbinit b/compile/.gdbinit new file mode 100644 index 0000000..d84f447 --- /dev/null +++ b/compile/.gdbinit @@ -0,0 +1,4 @@ +target extended-remote :5560 +load xinu +b main +c diff --git a/compile/.vers_num b/compile/.vers_num new file mode 100644 index 0000000..f599e28 --- /dev/null +++ b/compile/.vers_num @@ -0,0 +1 @@ +10 diff --git a/compile/Makefile b/compile/Makefile new file mode 100644 index 0000000..e33203f --- /dev/null +++ b/compile/Makefile @@ -0,0 +1,184 @@ +######################################################################### +# # +# # +# Makefile for Qemu version of hte the Xinu operating system # +# # +# includes: .deps and .defs # +# # +# # +######################################################################### + +NODE=0 +GPORT=556${NODE} + +COMPILER_ROOT = /l/arm2/devtools/bin/arm-none-eabi- +LIBGCC_LOC = /l/arm2/devtools/lib/gcc/arm-none-eabi/4.8.4 + +PNAME = bbb +PLAT = Platform_$(PNAME) +TOPDIR = .. + +CC = ${COMPILER_ROOT}gcc +LD = ${COMPILER_ROOT}ld +OBJCOPY = ${COMPILER_ROOT}objcopy +XINU = $(TOPDIR)/compile/xinu +XINUBIN = $(TOPDIR)/compile/xinu.bin +XINUBOOT = $(TOPDIR)/compile/xinu.boot +BUILDMAKE = $(TOPDIR)/compile/bin/build-make +MKVERS = $(TOPDIR)/compile/bin/mkvers + +MAKEDEP = $(CC) -M -MG + +DEPSFILE = .deps +DEFSFILE = .defs +VERSIONFILE = version +LDSCRIPT = ld.script +MKVERS = $(TOPDIR)/compile/bin/mkvers +REBUILDFLAGS = -s $(TOPDIR)/system debug.c \ + -s $(TOPDIR)/lib \ + -s $(TOPDIR)/device/tty \ + -s $(TOPDIR)/device/nam \ + -s $(TOPDIR)/device/ram \ + -s $(TOPDIR)/device/lfs \ + -s $(TOPDIR)/device/uart \ + -s $(TOPDIR)/device/uart-pl011 \ + -s $(TOPDIR)/device/loopback \ + -s $(TOPDIR)/shell 'xsh_rdstest*' \ + -s $(TOPDIR)/apps + + +INCLUDE = -I$(TOPDIR)/include +DEFS = -DBSDURG -DVERSION=\""`cat $(VERSIONFILE)`"\" + +# Compiler flags +CFLAGS = -mcpu=arm1176jz-s -ggdb3 -mno-unaligned-access -marm -fno-builtin -fno-stack-protector -nostdlib -c -Wall -O ${DEFS} ${INCLUDE} +SFLAGS = ${INCLUDE} + +# Loader flags + +LDFLAGS = -dn -m armelf -Map xinu.map -T ld.script + +all: xinu + +#-------------------------------------------------------------------------------- +# Handle generation of a new version string when initialize is recompiled +#-------------------------------------------------------------------------------- + +newversion: + @echo creating new version + @$(MKVERS) $(PNAME) > version + +#-------------------------------------------------------------------------------- +# Include generic make targets and rules from the file generated by build-make +#-------------------------------------------------------------------------------- +-include $(DEFSFILE) + +#-------------------------------------------------------------------------------- +# Add files that require special rules and place start.o at the front +#-------------------------------------------------------------------------------- +LD_LIST = binaries/start.o $(filter-out binaries/start.o,$(OBJ_FILES)) + +#------------------------------------------------------------ +# Rules for files that need special handling +#------------------------------------------------------------ + +# Define variables for the Configuration file and generated files + +CONFFILE = $(TOPDIR)/config/Configuration +CONFH = $(TOPDIR)/include/conf.h +CONFC = $(TOPDIR)/system/conf.c + +# Define variables for the config program and its sources + +CONFPGM = $(TOPDIR)/config/config +CONFL = $(TOPDIR)/config/config.l +CONFY = $(TOPDIR)/config/config.y + +# Set up the required build directory structure + +BLDDIRS = binaries +export + +#-------------------------------------------------------------------------------- +# Specific additional rules and exceptions +#-------------------------------------------------------------------------------- + +xinu: Makefile rebuild $(BLDDIRS) $(DEFSFILE) $(DEPSFILE) $(CONFH) $(CONFC) $(LD_LIST) + @echo;echo 'Loading object files to produce xinu' + @$(LD) $(LDFLAGS) $(LD_LIST) -o $(XINU) -L$(LIBGCC_LOC) -lgcc + @$(OBJCOPY) -O binary $(XINU) $(XINUBIN) + @./uboot-tool/mkimage -A arm -O linux -T kernel -C none -a 0x81000000 -e 0x81000000 -d $(XINUBIN) $(XINUBOOT) + +$(BLDDIRS): + @mkdir -p $(BLDDIRS) + +objects: $(LD_LIST) + +$(CONFH): $(CONFFILE) $(CONFPGM) + @echo making $(CONFH) + @make configure + +$(CONFC): $(CONFFILE) $(CONFPGM) + @echo making $(CONFC) + @make configure + +$(CONFPGM): $(CONFL) $(CONFY) + @echo making the config program + @make -C $(TOPDIR)/config clean all install + +configure: + @echo forcing a rebuild of conf.h and conf.c + @make newversion + @(cd $(TOPDIR)/config; make install) + +clean: + @echo removing .o files + @rm -f ${LD_LIST} + @echo removing configuration files ... + @rm -f $(CONFH) $(CONFC) + @(cd $(TOPDIR)/config; make clean) + @echo removing xinu ... + @rm -f $(XINU) + @rm -f $(XINUBIN) + @rm -f $(XINUBOOT) + +install: xinu + cp xinu.boot /tftpboot + +qemu: xinu + qemu-system-arm -M versatilepb -m 3G -nographic -cpu arm1176 -kernel xinu.boot + +qemu-gdb: xinu + qemu-system-arm -M versatilepb -m 3G -nographic -cpu arm1176 -kernel xinu.boot -S -gdb tcp::${GPORT} +#-------------------------------------------------------------------------------- +# Locations of source directories and exceptions (.c and .[sS] files to exclude) +#-------------------------------------------------------------------------------- + +$(DEFSFILE): + @rm -f $(DEFSFILE) + @echo "" > $(DEFSFILE) + @make rebuild + +$(DEPSFILE): + @rm -f $(DEPSFILE) + @echo "" > $(DEPSFILE) + @make depend + +rebuild: $(CONFC) + @echo Rebuilding the $(DEFSFILE) file + @$(BUILDMAKE) $(REBUILDFLAGS) > $(DEFSFILE) + +defclean: + rm -f $(DEFSFILE) + echo "" > $(DEFSFILE) + +depend: $(DEFSFILE) + @echo;echo Making all dependencies in $(DEPSFILE) + @$(MAKEDEP) ${INCLUDE} ${SRC_FULL} > $(DEPSFILE) + @echo;echo Finished making dependencies + +depclean: + rm -f $(DEPSFILE) + echo "" > $(DEPSFILE) + +-include $(DEPSFILE) diff --git a/compile/bin/build-make b/compile/bin/build-make new file mode 100755 index 0000000..f930488 --- /dev/null +++ b/compile/bin/build-make @@ -0,0 +1,710 @@ +#!/bin/sh +######################################################################### +# # +# build-make - build entries for a makefile # +# # +# use: build-make dir_spec... # +# # +# where each dir_spec, which specifies one of the source # +# directories to include has the form: # +# # +# -s source_dir_path [pattern...] # +# # +# Build-make generates rules for a Makefile that will compile # +# the source files from the specified set of source directories. # +# Build-make is run in the directory that will hold the Makefile, # +# and assumes .o files will be placed in the ./binaries # +# directory in the same file as the Makefile. # +# # +# # +# A directory specification begins with a -s srgument that is # +# followed by a source directory name (a relative path is # +# recommended, but not required), and a list of zero or more # +# patterns. The patterns are used to specify which files # +# from source directory should be omitted from consideration. # +# Build-make starts by making a list of all C and assembly # +# language files in the directory (i.e. files that match *.c and # +# *.[Ss]). It then uses the set of patterns (if any are present) # +# to decide which of the files to exclude from further # +# processing. A pattern can contain literal characters plus one # +# asterisk, which indicates a wild card match. For example, # +# 'xxx', 'xxx*', '*xxx', 'xxx*yyy' are legal forms of patterns. # +# Note: any pattern argument that contains an asterisk must be # +# enclosed in quotes on the command line to prevent the shell # +# from interpreting it. For example, to omit files that start # +# with 'debug', one would specify: 'debug*' in quotes. Omitting # +# files has two purposes. First, it allows files to be left in # +# the soruce directory that are not normally needed (e.g., # +# debug.c). Second, a programmer can specify a set of files # +# for which standard compilation rules are insufficient. Of # +# course, if a programmer omits a file, the programmer must # +# insert a compilation rule into the Makefile. # +# # +# Build-make does not create a complete Makefile. Instead, # +# build-make writes text output to stdout and allows the # +# programmer to use the output to construct a Makefile. # +# Typically, a programmer runs: # +# # +# build-make > Makedefs # +# # +# and then inserts the line # +# # +# include Makedefs # +# # +# into a Makefile. Doing so allows the Makedefs to be recreated # +# easily if the contents of the source directories change. # +# # +# Build-make generates two variables: SOURCE_FILES that contains # +# a list of all source file names, and OBJECT_FILES that lists # +# all the object files. it also generates a list of rules # +# for generating object files. For example, a rule might # +# be: # +# # +# binaries/aaa.o: ../../system/aaa.c # +# $(CC) $(CFLAGS) -o binaries/aaa.o ../../system/aaa.c # +# # +######################################################################### + +MSG1='use is: build-make dir_spec...' +MSG2=' where dir_spec is -s source_dir_path [pattern...]' + +# +# Define prefixes shared by this script and the awk program +# +PRE_ERR='+ERROR:' +PRE_DIR='+DIR:' +PRE_OMIT='+OMIT:' +PRE_CFILE='+CFILE:' +PRE_SFILE='+SFILE:' + +export PRE_ERR PRE_DIR PRE_OMIT PRE_CFILE PRE_SFILE + +TMP1=".,BUILDM1-$$" +TMP2=".,BUILDM2-$$" +trap "rm -f $TMP1 $TMP2; exit" 1 2 3 + +# +# Parse arguments and generate input to the script below +# + +if test $# -lt 2; then + echo "$MSG1" >&2 + echo "$MSG2" >&2 + exit 1 +fi + +# iterate through dirspecs + +( + > $TMP1 + > $TMP2 + + while test $# -gt 0; do + + # parse -s and get directory name + + if test $# -lt 2; then + echo "$PRE_ERR" + echo "$MSG1" >&2 + echo "$MSG2" >&2 + exit 1 + fi + + case "x$1" in + x-s) DIR="$2" + # verify that directory exists + if test -d $DIR; then + echo "$PRE_DIR$DIR" + else + echo "$PRE_ERR" + echo "cannot find a source directory named $DIR" >&2 + exit 1 + fi + shift; shift + ;; + *) echo 'expecting -s at start of directory specification' >&2 + echo "$PRE_ERR" + echo "$MSG1" >&2 + echo "$MSG2" >&2 + ;; + esac + + # + # See if DIR contains any .c or .[sS] files + # + if test "x$DIR" = "x."; then + CFILES=`ls *.c 2>$TMP1` + SFILES=`ls *.[sS] 2>$TMP2` + else + CFILES=`ls $DIR/*.c 2>$TMP1` + SFILES=`ls $DIR/*.[sS] 2>$TMP2` + fi + + if test -s $TMP1 -a -s $TMP2; then + (echo;echo "Warning: directory $DIR does not contain any .c or .[sS] files to compile";echo) >&2 + fi + rm -f $TMP1 $TMP2 + + # arguments up to the next -s as patterns that specify omitted files + + LOOKING=true + while $LOOKING; do + if test $# -eq 0; then + LOOKING=false + elif test "x$1" = "x-s"; then + LOOKING=false + else + echo "$PRE_OMIT$1" + shift + fi + done + + # output .s and .S files for this directory + + if test "x$SFILES" != "x"; then + for i in $SFILES; do + echo "$PRE_SFILE$i" + done + fi + + # output .c files for this directory + + if test "x$CFILES" != "x"; then + for i in $CFILES; do + echo "$PRE_CFILE$i" + done + fi + + done +) | + +gawk ' + +######################################################################### +# # +# # +# Start of awk script # +# # +# # +######################################################################### + +#################### +# +# function ftmlist - format a list of file names +# +# args are: number of names, array of names, maximum name length, +# directory name, prefix to use +# +#################### + +function fmtlist(n,items,maxl,dname, pfix) { + + if (n <= 0) { + return; + } + + if (doneheading == 0) { + printf("\n\n%s\n%s\n%sDirectory %s\n%s\n%s\n",hdr4, hdr5, hdr6, dname, hdr5, hdr4); + doneheading = 1; + } + fmt2 = sprintf("\n%%-%ds\\\n",maxwid-1); + printf(fmt2, pfix " ="); + + namwid = maxl + 2; + # + # compute number of names per line allowing 2 blanks between them + # and not taking more than actwid characters + # + nperline = int( (actwid+2)/(maxl+2) ); + extrabl = actwid-(nperline*maxl + 2*(nperline-1))+1; + cnt = 1; + fmt = sprintf("%%-%ds",maxl); + for (i=1; i<=n ; i++) { + if (cnt > nperline) { + for (b=1; b<=extrabl; b++) { + printf(" "); + } + printf("\\\n"); + cnt = 1; + } + if (cnt == 1) { + printf("%s", tb); + } else { + printf(" "); + } + printf(fmt, items[i]); + cnt++; + } + printf("\n"); + return; +} + +#################### +# +# function isomitted - check a file name against the list of omitted patters +# for the current directory and report 1 if the file +# name is omitted +# +# arg: file name to check +# +# globals used: nomits, omits[] list of omitted patterns (1 through nomits) +# +#################### + +function isomitted(io_fname) { + + io_flen = length(io_fname); + + # + # Iterate through all omit patterns for the current directory + # + + for (io_j=1; io_j <= nomits; io_j++) { + + # Get pattern to check + io_omit = omits[io_j]; + + # length of omit pattern + io_olen = length(io_omit); + + # Find where "*" occurs in the pattern and set prefix length + + io_plen = index(io_omit, "*") - 1; + + if (io_plen < 0) { # No * in the pattern, so check exact match + + if (io_fname == io_omit) { + return 1; + } else { + continue; + } + + } + + # At least one * occurs in the pattern + + if (io_olen == 1) { # Pattern is just a *, so omit everything + return 1; + } + + if (io_plen > 1) { # if fixed prefix exists, check for match + + # A file name shorter than the prefix is not omitted + + if (io_flen < io_plen) { + continue; + } + + # If prefix does not match, name is not omitted + + if ( substr(io_omit, 1, io_plen) != substr(io_fname, 1, io_plen) ) { + continue; + } + } + + # Prefix has matched; check suffix + + io_slen = io_olen - io_plen -1; + + if (io_slen <= 0) { # If no suffix, pattern matches + return 1; + } + + # A file name shorter than the suffix is not omitted + + if (io_flen < io_slen) { + continue; + } + + # If suffix in omit pattern exactly matches the suffix of the + # file name, this file name is omitted + + if ( substr(io_omit, io_olen - (io_slen - 1)) == \ + substr(io_fname, length(io_fname) - (io_slen - 1)) ) { + return 1; + } + + } + + # The file name does not match any omitted pattern, so keep it + + return 0; +} + +#################### +# +# getbasename - extract the basename from a path name and return it +# +# arg: path name +# +#################### + +function getbasename(gb_path) { + + for (gb_pos = length(gb_path); gb_pos > 0; gb_pos--) { + if (substr(gb_path, gb_pos, 1) == "/") { + break; + } + } + if (gb_pos > 0) { + return substr(gb_path, gb_pos+1); + } else { + return gb_path; + } +} + + +#################### +# +# Initialize variables for the awk script +# +#################### + +BEGIN { + ndirs = 0; # Number of directories found so far + maxwid = 81; # Maximum width of formatted line + actwid = maxwid - 10; # Actual width for names (line width minus 8 for tab indent and + # 2 for " \" at the end of the line) + + tb = " "; # Tab character + plen_err = length("'$PRE_ERR'"); + plen_dir = length("'$PRE_DIR'"); + plen_omt = length("'$PRE_OMIT'"); + plen_cfl = length("'$PRE_CFILE'"); + plen_sfl = length("'$PRE_SFILE'"); + + + hdr1 = "#-------------------------------------------------------------------------------#"; + hdr2 = "# #"; + hdr3 = "# Definitions generated by build-make on '"`date`"' #"; + hdr4 = "#------------------------------------------------------------------"; + hdr5 = "#"; + hdr6 = "# "; + hdr7 = "# Rules For Generating Object Files #"; + hdr8 = "# Rules for files in directory "; + + msg1 = "SRC_CFILES ="; + msg2 = "SRC_SFILES ="; + msg3 = "OBJ_FILES ="; +} + +# +# Skip blank lines in input +# +/^ *$/ { + next; +} + +# +# Handle errors +# +/^\'${PRE_ERR}'/ { + exit(1); +} + +# +# Start a new directory +# + +/^\'$PRE_DIR'/ { + + ndirs++; + dirs[ndirs] = substr($0,plen_dir+1); + + # Initialize counts for this directory + + ncfiles[ndirs] = 0; + nsfiles[ndirs] = 0; + nomits = 0; + next; +} + +# +# Collect list of omitted files for this directory (must occur in the input before +# any C or S files for the directory) +# + +/^\'$PRE_OMIT'/ { + + nomits++; + omits[nomits] = substr($0,plen_omt+1); + next; +} + +# +# Handle a C file from the current directory +# + +/^\'$PRE_CFILE'/ { + + fullname = substr($0,plen_cfl+1); + basename = getbasename(fullname); + + # Skip omitted files + + if (isomitted(basename) > 0) { + next; + } + + ncfiles[ndirs]++; + cpath[ndirs "%" ncfiles[ndirs]] = fullname; + cfile[ndirs "%" ncfiles[ndirs]] = basename; + + next; +} + +# +# Handle as S file from the current directory +# + +/^\'$PRE_SFILE'/ { + + fullname = substr($0,plen_sfl+1); + basename = getbasename(fullname); + + # Skip omitted files + + if (isomitted(basename) > 0) { + next; + } + + nsfiles[ndirs]++; + spath[ndirs "%" nsfiles[ndirs]] = fullname; + sfile[ndirs "%" nsfiles[ndirs]] = basename; + + next; +} + + +# +# Any other input line is unexpected +# + +{ + print "Error: unexpected input line ->", $0; + exit 1; +} + +END { + ################################################################# + # # + # Do all the work of formatting and printing the makefile # + # rules. Start by printing an initial comment block and the # + # variable initializtion statements. # + # # + ################################################################# + + printf("%s\n%s\n%s\n%s\n%s\n\n",hdr1, hdr2, hdr3, hdr2, hdr1); + printf("%s\n%s\n\n",msg1, msg2, msg3); + + totlen = 0; # max over valid source file names in all directories + + ################################################################# + # # + # Iterate over all directories and generate a unique prefix # + # to be used on make variables for each directory # + # # + ################################################################# + + totlen = 0; # max file name length across all directories + + for (d=1; d<=ndirs; d++) { + + # Generate a unique variable name prefix for this directory + + dirpath = dirs[d]; + strt = 1; + str = toupper(dirpath); + finish = length(str); + ch = substr(str,strt,1); + while ( (ch == ".") || (ch == "/") ) { + strt++; + if (strt > finish) { + break; + } + ch = substr(str,strt,1); + } + if (strt > finish) { + if (substr(str,1,1) == ".") { + prefix = "DOT"; + } else { + prefix = "SLASH"; + } + for (i=2; i<=finish; i++) { + if (substr(str,i,1) == ".") { + prefix = prefix "_DOT"; + } else { + prefix = prefix "_SLASH"; + } + } + } else { + prefix = ""; + for (i=strt; i<=finish; i++) { + ch = substr(str,i,1); + if (ch == "/") { + prefix = prefix "_"; + } else { + prefix = prefix ch; + } + } + } + pref[d] = prefix; + + doneheading = 0; + + # + # Compute the maximum length of a file name in this directory + # and update the max length across all directories + # + + maxlen = 0; # max file name length for this directory + + # Check S files first + + for (i = 1; i <= nsfiles[d]; i++) { + srcsfiles[i] = sfile[d "%" i] + l = length(srcsfiles[i]); + if (l > maxlen) { + maxlen = l; + } + } + if (maxlen > totlen) { # update global max across all directories + totlen = maxlen; + } + + # Check C files + + for (i = 1; i <= ncfiles[d]; i++) { + srccfiles[i] = cfile[d "%" i] + l = length(srccfiles[i]); + if (l > maxlen) { + maxlen = l; + } + } + if (maxlen > totlen) { # update global max across all directories + totlen = maxlen; + } + + # Format the list of S files for this directory + + fmtlist(nsfiles[d], srcsfiles, maxlen, dirs[d], pref[d] "_SFILES"); + + # Format the list of C files for this directory + + fmtlist(ncfiles[d], srccfiles, maxlen, dirs[d], pref[d] "_CFILES"); + + printf("\n"); + + # + # Generate assignments for Makefile variables + # + + nasn = 0; + + # + # Generate assignments for variables SRC_CFILES and SRC_SFILES + # + if (ncfiles[d] > 0) { + nasn++; + asnl[nasn] = "SRC_CFILES"; + asnr[nasn] = sprintf("+= ${%s_CFILES}", pref[d]); + } + if (nsfiles[d] > 0) { + nasn++; + asnl[nasn] = "SRC_SFILES"; + asnr[nasn] = sprintf("+= ${%s_SFILES}", pref[d]); + } + + # + # Generate assignments for variables prefix_CFULL and prefix_SFULL + # + + if (ncfiles[d] > 0) { + nasn++; + asnl[nasn] = sprintf("%s_CFULL", prefix); + asnr[nasn] = sprintf("+= ${%s_CFILES:%%=%s/%%}", pref[d], dirs[d]); + } + if (nsfiles[d] > 0) { + nasn++; + asnl[nasn] = sprintf("%s_SFULL", prefix); + asnr[nasn] = sprintf("+= ${%s_SFILES:%%=%s/%%}", pref[d], dirs[d]); + } + + # + # Generate assignments for variables SRC_CFULL and SRC_SFULL + # + + if (ncfiles[d] > 0) { + nasn++; + asnl[nasn] = "SRC_CFULL"; + asnr[nasn] = sprintf("+= ${%s_CFULL}", pref[d]); + } + if (nsfiles[d] > 0) { + nasn++; + asnl[nasn] = "SRC_SFULL"; + asnr[nasn] = sprintf("+= ${%s_SFULL}", pref[d]); + } + wid = 0; + for (i=1; i<=nasn; i++) { + n = length(asnl[i]); + if (n > wid) { + wid = n; + } + } + fmt3 = sprintf("%%-%ds %%s\n", wid); + for (i=1; i<=nasn; i++) { + printf(fmt3, asnl[i], asnr[i]); + } + } + + printf("\n\n%s\n%s\n%s\n%s\n%s\n\n", hdr1, hdr2, hdr7, hdr2, hdr1); + + printf("OBJ_TMP = ${patsubst %%.s,%%.o,$(SRC_SFILES)} # substitute .s => .o\n"); + printf("OBJ_SFILES = ${patsubst %%.S,%%.o,$(OBJ_TMP)} # substitute .S => .o\n"); + printf("OBJ_CFILES = ${patsubst %%.c,%%.o,$(SRC_CFILES)} # substitute .c => .o\n"); + printf("OBJ_LIST = ${OBJ_CFILES} ${OBJ_SFILES}\n"); + printf("OBJ_FILES = ${OBJ_LIST:%%=binaries/%%}\n"); + printf("SRC_FULL = ${SRC_CFULL} ${SRC_SFULL}\n"); + + fmt4c = sprintf("%%-%ds%%s\n\t${CC} ${CFLAGS} -o %%s %%s\n",9+totlen+3); + fmt4s = sprintf("%%-%ds%%s\n\t${CC} ${CFLAGS} -o %%s %%s\n",9+totlen+3); + for (d=1; d<=ndirs; d++) { + needheadings = 1; + + # print dependencies for .s files + + for (i = 1; i <= nsfiles[d]; i++) { + if (needheadings > 0) { + printf("\n%s\n%s%s\n%s\n\n", hdr4, hdr8, dirs[d], hdr4); + needheadings = 0; + } + fname = sfile[d "%" i]; + tmpobj = "binaries/" substr(fname, 1, length(fname)-2) ".o"; + tmpsrc = dirs[d] "/" fname; + printf(fmt4s, tmpobj ":", tmpsrc, tmpobj, tmpsrc); + } + + # print dependencies for .c files + + for (i = 1; i <= ncfiles[d]; i++) { + if (needheadings > 0) { + printf("\n%s\n%s%s\n%s\n\n", hdr4, hdr8, dirs[d], hdr4); + needheadings = 0; + } + fname = cfile[d "%" i]; + tmpobj = "binaries/" substr(fname, 1, length(fname)-2) ".o"; + tmpsrc = dirs[d] "/" fname; + printf(fmt4c, tmpobj ":", tmpsrc, tmpobj, tmpsrc); + } + + } + printf("\nobjs: ${OBJ_FILES}\n"); + + printf("\nlist_obj:\n\t@echo ${OBJ_FILES}\n"); + + printf("\nlist_csrc:\n\t@echo ${SRC_CFILES}\n"); + + printf("\nlist_ssrc:\n\t@echo ${SRC_SFILES}\n"); + + printf("\n# Export variables for recursive make calls (such as the library)\n\nexport\n\n"); +} ' diff --git a/compile/bin/buildxbin b/compile/bin/buildxbin new file mode 100755 index 0000000..ac0a347 --- /dev/null +++ b/compile/bin/buildxbin @@ -0,0 +1,38 @@ +#!/usr/bin/perl +######################################################################### +# +# buildxbin - Creates an xboot Xinu image from a binary Xinu image +# Adds the xboot header to the Xinu image +# +######################################################################### + +use strict; + +my $header_version = 0; # xboot header version +my $header_size = 512; # xboot header size +my $load_address = 0x100000; # Load Xinu at 1 MB +my @xboot_header = (0x58, 0x69, 0x6E, 0x75); # xboot signature - the 4 characters 'X', 'i', 'n', 'u' + +my $xinu_img_in = shift or die "Usage: buildxbin xinu.bin xinu.xbin\n"; +my $xinu_img_out = shift or die "Usage: buildxbin xinu.bin xinu.xbin\n"; + +# Determine image size +my $xinu_img_size = -s $xinu_img_in; + +# Determine the image checksum +my $checksum = `/usr/bin/crc32 $xinu_img_in`; +chomp $checksum; +my $checksum_int = hex $checksum; + +# Create the xboot header +my $header_string = pack("C4LLLLLC4", (@xboot_header, $header_version, $load_address, $load_address, $xinu_img_size, $checksum_int, @xboot_header)); +my $pad_size = $header_size - length($header_string) - 1; # pack will output header string as null terminated so reduce the padding by 1 + +# Output the xboot header +open(my $xinu_out, '>:raw', $xinu_img_out) or die "Unable to open $xinu_img_out: $!\n"; +print $xinu_out pack("Z*", $header_string); +print $xinu_out pack("x$pad_size"); +close($xinu_out); + +# Add the Xinu image +system("cat $xinu_img_in >> $xinu_img_out"); \ No newline at end of file diff --git a/compile/bin/mkvers b/compile/bin/mkvers new file mode 100755 index 0000000..2055392 --- /dev/null +++ b/compile/bin/mkvers @@ -0,0 +1,27 @@ +#!/bin/sh +# +# Generate a new version string to be printed at startup +# +# Use is: mkvers platform_name + +VERS_NUM_FILE=.vers_num + +case $# in + 1) PLAT="$1" + ;; + *) echo 'use is: mkvers platform_name' >&2 + exit 1 + ;; +esac + +if test -s $VERS_NUM_FILE; then + OLD_VERS=`cat $VERS_NUM_FILE` + VERS=`expr $OLD_VERS + 1` +else + VERS=1 +fi +echo $VERS > $VERS_NUM_FILE +if test "x$USER" = "x"; then + USER=`who am i | sed 's/ .*//'` +fi +echo "Xinu for $PLAT -- version #$VERS ($USER) `date`" diff --git a/compile/ld.script b/compile/ld.script new file mode 100644 index 0000000..bb1b4ac --- /dev/null +++ b/compile/ld.script @@ -0,0 +1,33 @@ +OUTPUT_ARCH(arm) +ENTRY(start) +physbase = 0x81000000; +SECTIONS +{ + . = physbase; /* Image starts here */ + . = ALIGN(4096); /* Accommodate bad physbase */ + .text : { + text = ABSOLUTE(.); /* text: beginning of text segment */ + *(.text .text.*) /* asm text, then C text */ + *(.rodata .rodata.*) /* asm and C read-only data */ + etext = ABSOLUTE(.) ; /* etext: end of text */ + . = ALIGN(4096); + } + .data : + { + data = ABSOLUTE(.); /* data: beginning of data segment */ + *(.data .data.*) + edata = ABSOLUTE(.) ; /* edata: end of data */ + . = ALIGN(4096); + } + .bss : + { + bss = ABSOLUTE(.); /* bss: beginning of bss segment */ + *(.bss .bss.*) + *(COMMON) /* extra sections that are common */ + ebss = ABSOLUTE(.) ; /* ebss: end of bss */ + . = ALIGN(4096); */ + end = ABSOLUTE(.); /* end: end of image */ + _end = ABSOLUTE(.); /* _end: end of image */ + . = ALIGN(4096); + } +} diff --git a/compile/make-errs b/compile/make-errs new file mode 100644 index 0000000..58ffd17 --- /dev/null +++ b/compile/make-errs @@ -0,0 +1,28 @@ +../system/Platform_galileo/initialize.c: In function 'sizmem': +../system/Platform_galileo/initialize.c:212:30: warning: variable 'stmp' set but not used [-Wunused-but-set-variable] +../system/Platform_galileo/evec.c: In function 'trap': +../system/Platform_galileo/evec.c:105:11: warning: variable 'mask' set but not used [-Wunused-but-set-variable] +../system/Platform_galileo/main.c: In function 'main': +../system/Platform_galileo/main.c:9:9: warning: variable 'retval' set but not used [-Wunused-but-set-variable] +../system/Platform_galileo/panic.c: In function 'panic': +../system/Platform_galileo/panic.c:13:10: warning: variable 'mask' set but not used [-Wunused-but-set-variable] +../system/Platform_galileo/pci.c: In function 'check_pcibios': +../system/Platform_galileo/pci.c:100:19: warning: variable 'minor_revision' set but not used [-Wunused-but-set-variable] +../system/Platform_galileo/pci.c:99:19: warning: variable 'major_revision' set but not used [-Wunused-but-set-variable] +../system/Platform_galileo/pci.c: In function 'find_pci_device': +../system/Platform_galileo/pci.c:206:28: warning: variable 'functionNum' set but not used [-Wunused-but-set-variable] +../system/Platform_galileo/pci.c:206:17: warning: variable 'deviceNum' set but not used [-Wunused-but-set-variable] +../system/Platform_galileo/pci.c:206:9: warning: variable 'busNum' set but not used [-Wunused-but-set-variable] +../device/Platform_galileo/tty/ttyInterrupt.c: In function 'ttyInterrupt': +../device/Platform_galileo/tty/ttyInterrupt.c:14:7: warning: variable 'lsr' set but not used [-Wunused-but-set-variable] +../device/Platform_galileo/eth/3c905C_intr.c: In function '_3c905C_rxPackets': +../device/Platform_galileo/eth/3c905C_intr.c:38:18: warning: unused variable 'rx_error' [-Wunused-variable] +../net/Platform_galileo/icmp.c: In function 'icmp_in': +../net/Platform_galileo/icmp.c:35:8: warning: variable 'len' set but not used [-Wunused-but-set-variable] +../net/Platform_galileo/icmp.c: In function 'icmp_send': +../net/Platform_galileo/icmp.c:240:18: warning: variable 'ifptr' set but not used [-Wunused-but-set-variable] +../net/Platform_galileo/icmp.c: In function 'icmp_mkpkt': +../net/Platform_galileo/icmp.c:282:8: warning: variable 'pktlen' set but not used [-Wunused-but-set-variable] +../net/Platform_galileo/icmp.c:280:10: warning: variable 'mask' set but not used [-Wunused-but-set-variable] +../net/Platform_galileo/nat.c: In function 'nat_in_icmp': +../net/Platform_galileo/nat.c:288:9: warning: variable 'currtime' set but not used [-Wunused-but-set-variable] diff --git a/compile/uboot-tool/COPYRIGHT b/compile/uboot-tool/COPYRIGHT new file mode 100644 index 0000000..eae7d53 --- /dev/null +++ b/compile/uboot-tool/COPYRIGHT @@ -0,0 +1,12 @@ +# +# Copyright (C) 2009, CyberTAN Corporation +# All Rights Reserved. +# +# THIS SOFTWARE IS OFFERED "AS IS", AND CYBERTAN GRANTS NO WARRANTIES OF ANY +# KIND, EXPRESS OR IMPLIED, BY STATUTE, COMMUNICATION OR OTHERWISE. CYBERTAN +# SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS +# FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE. +# + + + diff --git a/compile/uboot-tool/Makefile b/compile/uboot-tool/Makefile new file mode 100644 index 0000000..b685a64 --- /dev/null +++ b/compile/uboot-tool/Makefile @@ -0,0 +1,17 @@ +# +# Generating a proper header for running Xinu on a U-Boot router +# +# $Id$ + +MKIMAGEUTIL = mkimage +XINUPATH = ../../ + +HOSTCC = gcc -Wall -pedantic -DTEXT_BASE=0xBFC00000 -DUSE_HOSTCC -O -I. + +# include ${XINUPATH}/compile/mipsVars + +${MKIMAGEUTIL}: crc32.c mkimage.c + ${HOSTCC} ${HOSTCCFLAGS} $^ -o $@ + +clean: + rm -rf ${MKIMAGEUTIL} diff --git a/compile/uboot-tool/crc32.c b/compile/uboot-tool/crc32.c new file mode 100644 index 0000000..65fd433 --- /dev/null +++ b/compile/uboot-tool/crc32.c @@ -0,0 +1,205 @@ +/* + * This file is derived from crc32.c from the zlib-1.1.3 distribution + * by Jean-loup Gailly and Mark Adler. + */ + +/* crc32.c -- compute the CRC-32 of a data stream + * Copyright (C) 1995-1998 Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +#ifndef USE_HOSTCC /* Shut down "ANSI does not permit..." warnings */ +#include /* to get command definitions like CFG_CMD_JFFS2 */ +#endif + +#include "zlib.h" + +#define local static +#define ZEXPORT /* empty */ +unsigned long crc32(unsigned long, const unsigned char *, unsigned int); + +#ifdef DYNAMIC_CRC_TABLE + +local int crc_table_empty = 1; +local uLongf crc_table[256]; +local void make_crc_table OF((void)); + +/* + Generate a table for a byte-wise 32-bit CRC calculation on the polynomial: + x^32+x^26+x^23+x^22+x^16+x^12+x^11+x^10+x^8+x^7+x^5+x^4+x^2+x+1. + + Polynomials over GF(2) are represented in binary, one bit per coefficient, + with the lowest powers in the most significant bit. Then adding polynomials + is just exclusive-or, and multiplying a polynomial by x is a right shift by + one. If we call the above polynomial p, and represent a byte as the + polynomial q, also with the lowest power in the most significant bit (so the + byte 0xb1 is the polynomial x^7+x^3+x+1), then the CRC is (q*x^32) mod p, + where a mod b means the remainder after dividing a by b. + + This calculation is done using the shift-register method of multiplying and + taking the remainder. The register is initialized to zero, and for each + incoming bit, x^32 is added mod p to the register if the bit is a one (where + x^32 mod p is p+x^32 = x^26+...+1), and the register is multiplied mod p by + x (which is shifting right by one and adding x^32 mod p if the bit shifted + out is a one). We start with the highest power (least significant bit) of + q and repeat for all eight bits of q. + + The table is simply the CRC of all possible eight bit values. This is all + the information needed to generate CRC's on data a byte at a time for all + combinations of CRC register values and incoming bytes. +*/ +local void make_crc_table() +{ + uLong c; + int n, k; + uLong poly; /* polynomial exclusive-or pattern */ + /* terms of polynomial defining this crc (except x^32): */ + static const Byte p[] = + { 0, 1, 2, 4, 5, 7, 8, 10, 11, 12, 16, 22, 23, 26 }; + + /* make exclusive-or pattern from polynomial (0xedb88320L) */ + poly = 0L; + for (n = 0; n < sizeof(p) / sizeof(Byte); n++) + poly |= 1L << (31 - p[n]); + + for (n = 0; n < 256; n++) + { + c = (uLong) n; + for (k = 0; k < 8; k++) + c = c & 1 ? poly ^ (c >> 1) : c >> 1; + crc_table[n] = c; + } + crc_table_empty = 0; +} +#else +/* ======================================================================== + * Table of CRC-32's of all single-byte values (made by make_crc_table) + */ +local const uLongf crc_table[256] = { + 0x00000000L, 0x77073096L, 0xee0e612cL, 0x990951baL, 0x076dc419L, + 0x706af48fL, 0xe963a535L, 0x9e6495a3L, 0x0edb8832L, 0x79dcb8a4L, + 0xe0d5e91eL, 0x97d2d988L, 0x09b64c2bL, 0x7eb17cbdL, 0xe7b82d07L, + 0x90bf1d91L, 0x1db71064L, 0x6ab020f2L, 0xf3b97148L, 0x84be41deL, + 0x1adad47dL, 0x6ddde4ebL, 0xf4d4b551L, 0x83d385c7L, 0x136c9856L, + 0x646ba8c0L, 0xfd62f97aL, 0x8a65c9ecL, 0x14015c4fL, 0x63066cd9L, + 0xfa0f3d63L, 0x8d080df5L, 0x3b6e20c8L, 0x4c69105eL, 0xd56041e4L, + 0xa2677172L, 0x3c03e4d1L, 0x4b04d447L, 0xd20d85fdL, 0xa50ab56bL, + 0x35b5a8faL, 0x42b2986cL, 0xdbbbc9d6L, 0xacbcf940L, 0x32d86ce3L, + 0x45df5c75L, 0xdcd60dcfL, 0xabd13d59L, 0x26d930acL, 0x51de003aL, + 0xc8d75180L, 0xbfd06116L, 0x21b4f4b5L, 0x56b3c423L, 0xcfba9599L, + 0xb8bda50fL, 0x2802b89eL, 0x5f058808L, 0xc60cd9b2L, 0xb10be924L, + 0x2f6f7c87L, 0x58684c11L, 0xc1611dabL, 0xb6662d3dL, 0x76dc4190L, + 0x01db7106L, 0x98d220bcL, 0xefd5102aL, 0x71b18589L, 0x06b6b51fL, + 0x9fbfe4a5L, 0xe8b8d433L, 0x7807c9a2L, 0x0f00f934L, 0x9609a88eL, + 0xe10e9818L, 0x7f6a0dbbL, 0x086d3d2dL, 0x91646c97L, 0xe6635c01L, + 0x6b6b51f4L, 0x1c6c6162L, 0x856530d8L, 0xf262004eL, 0x6c0695edL, + 0x1b01a57bL, 0x8208f4c1L, 0xf50fc457L, 0x65b0d9c6L, 0x12b7e950L, + 0x8bbeb8eaL, 0xfcb9887cL, 0x62dd1ddfL, 0x15da2d49L, 0x8cd37cf3L, + 0xfbd44c65L, 0x4db26158L, 0x3ab551ceL, 0xa3bc0074L, 0xd4bb30e2L, + 0x4adfa541L, 0x3dd895d7L, 0xa4d1c46dL, 0xd3d6f4fbL, 0x4369e96aL, + 0x346ed9fcL, 0xad678846L, 0xda60b8d0L, 0x44042d73L, 0x33031de5L, + 0xaa0a4c5fL, 0xdd0d7cc9L, 0x5005713cL, 0x270241aaL, 0xbe0b1010L, + 0xc90c2086L, 0x5768b525L, 0x206f85b3L, 0xb966d409L, 0xce61e49fL, + 0x5edef90eL, 0x29d9c998L, 0xb0d09822L, 0xc7d7a8b4L, 0x59b33d17L, + 0x2eb40d81L, 0xb7bd5c3bL, 0xc0ba6cadL, 0xedb88320L, 0x9abfb3b6L, + 0x03b6e20cL, 0x74b1d29aL, 0xead54739L, 0x9dd277afL, 0x04db2615L, + 0x73dc1683L, 0xe3630b12L, 0x94643b84L, 0x0d6d6a3eL, 0x7a6a5aa8L, + 0xe40ecf0bL, 0x9309ff9dL, 0x0a00ae27L, 0x7d079eb1L, 0xf00f9344L, + 0x8708a3d2L, 0x1e01f268L, 0x6906c2feL, 0xf762575dL, 0x806567cbL, + 0x196c3671L, 0x6e6b06e7L, 0xfed41b76L, 0x89d32be0L, 0x10da7a5aL, + 0x67dd4accL, 0xf9b9df6fL, 0x8ebeeff9L, 0x17b7be43L, 0x60b08ed5L, + 0xd6d6a3e8L, 0xa1d1937eL, 0x38d8c2c4L, 0x4fdff252L, 0xd1bb67f1L, + 0xa6bc5767L, 0x3fb506ddL, 0x48b2364bL, 0xd80d2bdaL, 0xaf0a1b4cL, + 0x36034af6L, 0x41047a60L, 0xdf60efc3L, 0xa867df55L, 0x316e8eefL, + 0x4669be79L, 0xcb61b38cL, 0xbc66831aL, 0x256fd2a0L, 0x5268e236L, + 0xcc0c7795L, 0xbb0b4703L, 0x220216b9L, 0x5505262fL, 0xc5ba3bbeL, + 0xb2bd0b28L, 0x2bb45a92L, 0x5cb36a04L, 0xc2d7ffa7L, 0xb5d0cf31L, + 0x2cd99e8bL, 0x5bdeae1dL, 0x9b64c2b0L, 0xec63f226L, 0x756aa39cL, + 0x026d930aL, 0x9c0906a9L, 0xeb0e363fL, 0x72076785L, 0x05005713L, + 0x95bf4a82L, 0xe2b87a14L, 0x7bb12baeL, 0x0cb61b38L, 0x92d28e9bL, + 0xe5d5be0dL, 0x7cdcefb7L, 0x0bdbdf21L, 0x86d3d2d4L, 0xf1d4e242L, + 0x68ddb3f8L, 0x1fda836eL, 0x81be16cdL, 0xf6b9265bL, 0x6fb077e1L, + 0x18b74777L, 0x88085ae6L, 0xff0f6a70L, 0x66063bcaL, 0x11010b5cL, + 0x8f659effL, 0xf862ae69L, 0x616bffd3L, 0x166ccf45L, 0xa00ae278L, + 0xd70dd2eeL, 0x4e048354L, 0x3903b3c2L, 0xa7672661L, 0xd06016f7L, + 0x4969474dL, 0x3e6e77dbL, 0xaed16a4aL, 0xd9d65adcL, 0x40df0b66L, + 0x37d83bf0L, 0xa9bcae53L, 0xdebb9ec5L, 0x47b2cf7fL, 0x30b5ffe9L, + 0xbdbdf21cL, 0xcabac28aL, 0x53b39330L, 0x24b4a3a6L, 0xbad03605L, + 0xcdd70693L, 0x54de5729L, 0x23d967bfL, 0xb3667a2eL, 0xc4614ab8L, + 0x5d681b02L, 0x2a6f2b94L, 0xb40bbe37L, 0xc30c8ea1L, 0x5a05df1bL, + 0x2d02ef8dL +}; +#endif + +#if 0 +/* ========================================================================= + * This function can be used by asm versions of crc32() + */ +const uLongf *ZEXPORT get_crc_table() +{ +#ifdef DYNAMIC_CRC_TABLE + if (crc_table_empty) + make_crc_table(); +#endif + return (const uLongf *)crc_table; +} +#endif + +/* ========================================================================= */ +#define DO1(buf) crc = crc_table[((int)crc ^ (*buf++)) & 0xff] ^ (crc >> 8); +#define DO2(buf) DO1(buf); DO1(buf); +#define DO4(buf) DO2(buf); DO2(buf); +#define DO8(buf) DO4(buf); DO4(buf); + +/* ========================================================================= */ +uLong ZEXPORT crc32(crc, buf, len) +uLong crc; +const Bytef *buf; +uInt len; +{ +#ifdef DYNAMIC_CRC_TABLE + if (crc_table_empty) + make_crc_table(); +#endif + crc = crc ^ 0xffffffffL; + while (len >= 8) + { + DO8(buf); + len -= 8; + } + if (len) + do + { + DO1(buf); + } + while (--len); + return crc ^ 0xffffffffL; +} + +#if (CONFIG_COMMANDS & CFG_CMD_JFFS2) + +/* No ones complement version. JFFS2 (and other things ?) + * don't use ones compliment in their CRC calculations. + */ +uLong ZEXPORT crc32_no_comp(uLong crc, const Bytef * buf, uInt len) +{ +#ifdef DYNAMIC_CRC_TABLE + if (crc_table_empty) + make_crc_table(); +#endif + while (len >= 8) + { + DO8(buf); + len -= 8; + } + if (len) + do + { + DO1(buf); + } + while (--len); + + return crc; +} + +#endif /* CFG_CMD_JFFS2 */ diff --git a/compile/uboot-tool/image.h b/compile/uboot-tool/image.h new file mode 100644 index 0000000..53fb56e --- /dev/null +++ b/compile/uboot-tool/image.h @@ -0,0 +1,158 @@ +/* + * (C) Copyright 2000-2005 + * Wolfgang Denk, DENX Software Engineering, wd@denx.de. + * + * See file CREDITS for list of people who contributed to this + * project. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + ******************************************************************** + * NOTE: This header file defines an interface to U-Boot. Including + * this (unmodified) header file in another file is considered normal + * use of U-Boot, and does *not* fall under the heading of "derived + * work". + ******************************************************************** + */ + +#ifndef __IMAGE_H__ +#define __IMAGE_H__ + +/* + * Operating System Codes + */ +#define IH_OS_INVALID 0 /* Invalid OS */ +#define IH_OS_OPENBSD 1 /* OpenBSD */ +#define IH_OS_NETBSD 2 /* NetBSD */ +#define IH_OS_FREEBSD 3 /* FreeBSD */ +#define IH_OS_4_4BSD 4 /* 4.4BSD */ +#define IH_OS_LINUX 5 /* Linux */ +#define IH_OS_SVR4 6 /* SVR4 */ +#define IH_OS_ESIX 7 /* Esix */ +#define IH_OS_SOLARIS 8 /* Solaris */ +#define IH_OS_IRIX 9 /* Irix */ +#define IH_OS_SCO 10 /* SCO */ +#define IH_OS_DELL 11 /* Dell */ +#define IH_OS_NCR 12 /* NCR */ +#define IH_OS_LYNXOS 13 /* LynxOS */ +#define IH_OS_VXWORKS 14 /* VxWorks */ +#define IH_OS_PSOS 15 /* pSOS */ +#define IH_OS_QNX 16 /* QNX */ +#define IH_OS_U_BOOT 17 /* Firmware */ +#define IH_OS_RTEMS 18 /* RTEMS */ +#define IH_OS_ARTOS 19 /* ARTOS */ +#define IH_OS_UNITY 20 /* Unity OS */ + +/* + * CPU Architecture Codes (supported by Linux) + */ +#define IH_CPU_INVALID 0 /* Invalid CPU */ +#define IH_CPU_ALPHA 1 /* Alpha */ +#define IH_CPU_ARM 2 /* ARM */ +#define IH_CPU_I386 3 /* Intel x86 */ +#define IH_CPU_IA64 4 /* IA64 */ +#define IH_CPU_MIPS 5 /* MIPS */ +#define IH_CPU_MIPS64 6 /* MIPS 64 Bit */ +#define IH_CPU_PPC 7 /* PowerPC */ +#define IH_CPU_S390 8 /* IBM S390 */ +#define IH_CPU_SH 9 /* SuperH */ +#define IH_CPU_SPARC 10 /* Sparc */ +#define IH_CPU_SPARC64 11 /* Sparc 64 Bit */ +#define IH_CPU_M68K 12 /* M68K */ +#define IH_CPU_NIOS 13 /* Nios-32 */ +#define IH_CPU_MICROBLAZE 14 /* MicroBlaze */ +#define IH_CPU_NIOS2 15 /* Nios-II */ + +/* + * Image Types + * + * "Standalone Programs" are directly runnable in the environment + * provided by U-Boot; it is expected that (if they behave + * well) you can continue to work in U-Boot after return from + * the Standalone Program. + * "OS Kernel Images" are usually images of some Embedded OS which + * will take over control completely. Usually these programs + * will install their own set of exception handlers, device + * drivers, set up the MMU, etc. - this means, that you cannot + * expect to re-enter U-Boot except by resetting the CPU. + * "RAMDisk Images" are more or less just data blocks, and their + * parameters (address, size) are passed to an OS kernel that is + * being started. + * "Multi-File Images" contain several images, typically an OS + * (Linux) kernel image and one or more data images like + * RAMDisks. This construct is useful for instance when you want + * to boot over the network using BOOTP etc., where the boot + * server provides just a single image file, but you want to get + * for instance an OS kernel and a RAMDisk image. + * + * "Multi-File Images" start with a list of image sizes, each + * image size (in bytes) specified by an "uint32_t" in network + * byte order. This list is terminated by an "(uint32_t)0". + * Immediately after the terminating 0 follow the images, one by + * one, all aligned on "uint32_t" boundaries (size rounded up to + * a multiple of 4 bytes - except for the last file). + * + * "Firmware Images" are binary images containing firmware (like + * U-Boot or FPGA images) which usually will be programmed to + * flash memory. + * + * "Script files" are command sequences that will be executed by + * U-Boot's command interpreter; this feature is especially + * useful when you configure U-Boot to use a real shell (hush) + * as command interpreter (=> Shell Scripts). + */ + +#define IH_TYPE_INVALID 0 /* Invalid Image */ +#define IH_TYPE_STANDALONE 1 /* Standalone Program */ +#define IH_TYPE_KERNEL 2 /* OS Kernel Image */ +#define IH_TYPE_RAMDISK 3 /* RAMDisk Image */ +#define IH_TYPE_MULTI 4 /* Multi-File Image */ +#define IH_TYPE_FIRMWARE 5 /* Firmware Image */ +#define IH_TYPE_SCRIPT 6 /* Script file */ +#define IH_TYPE_FILESYSTEM 7 /* Filesystem Image (any type) */ + +/* + * Compression Types + */ +#define IH_COMP_NONE 0 /* No Compression Used */ +#define IH_COMP_GZIP 1 /* gzip Compression Used */ +#define IH_COMP_BZIP2 2 /* bzip2 Compression Used */ + +#define IH_MAGIC 0x27051956 /* Image Magic Number */ +#define IH_NMLEN 32 /* Image Name Length */ + +/* + * all data in network byte order (aka natural aka bigendian) + */ + +typedef struct image_header +{ + uint32_t ih_magic; /* Image Header Magic Number */ + uint32_t ih_hcrc; /* Image Header CRC Checksum */ + uint32_t ih_time; /* Image Creation Timestamp */ + uint32_t ih_size; /* Image Data Size */ + uint32_t ih_load; /* Data Load Address */ + uint32_t ih_ep; /* Entry Point Address */ + uint32_t ih_dcrc; /* Image Data CRC Checksum */ + uint8_t ih_os; /* Operating System */ + uint8_t ih_arch; /* CPU architecture */ + uint8_t ih_type; /* Image Type */ + uint8_t ih_comp; /* Compression Type */ + uint8_t ih_name[IH_NMLEN]; /* Image Name */ +} image_header_t; + + +#endif /* __IMAGE_H__ */ diff --git a/compile/uboot-tool/mkimage.c b/compile/uboot-tool/mkimage.c new file mode 100644 index 0000000..cf7d0b5 --- /dev/null +++ b/compile/uboot-tool/mkimage.c @@ -0,0 +1,795 @@ +/* + * (C) Copyright 2000-2004 + * DENX Software Engineering + * Wolfgang Denk, wd@denx.de + * All rights reserved. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + */ + +#include +#include +#include +#include +#include +#ifndef __WIN32__ +#include /* for host / network byte order conversions */ +#endif +#include +#include +#include +#include + +#if defined(__BEOS__) || defined(__NetBSD__) || defined(__APPLE__) +#include +#endif + +#ifdef __WIN32__ +typedef unsigned int __u32; + +#define SWAP_LONG(x) \ + ((__u32)( \ + (((__u32)(x) & (__u32)0x000000ffUL) << 24) | \ + (((__u32)(x) & (__u32)0x0000ff00UL) << 8) | \ + (((__u32)(x) & (__u32)0x00ff0000UL) >> 8) | \ + (((__u32)(x) & (__u32)0xff000000UL) >> 24) )) +typedef unsigned char uint8_t; +typedef unsigned short uint16_t; +typedef unsigned int uint32_t; + +#define ntohl(a) SWAP_LONG(a) +#define htonl(a) SWAP_LONG(a) +#endif /* __WIN32__ */ + +#ifndef O_BINARY /* should be define'd on __WIN32__ */ +#define O_BINARY 0 +#endif + +#include + +extern int errno; + +#ifndef MAP_FAILED +#define MAP_FAILED (-1) +#endif + +char *cmdname; + +extern unsigned long crc32(unsigned long crc, const char *buf, + unsigned int len); + +typedef struct table_entry +{ + int val; /* as defined in image.h */ + char *sname; /* short (input) name */ + char *lname; /* long (output) name */ +} table_entry_t; + +table_entry_t arch_name[] = { + {IH_CPU_INVALID, NULL, "Invalid CPU",}, + {IH_CPU_ALPHA, "alpha", "Alpha",}, + {IH_CPU_ARM, "arm", "ARM",}, + {IH_CPU_I386, "x86", "Intel x86",}, + {IH_CPU_IA64, "ia64", "IA64",}, + {IH_CPU_M68K, "m68k", "MC68000",}, + {IH_CPU_MICROBLAZE, "microblaze", "MicroBlaze",}, + {IH_CPU_MIPS, "mips", "MIPS",}, + {IH_CPU_MIPS64, "mips64", "MIPS 64 Bit",}, + {IH_CPU_NIOS, "nios", "NIOS",}, + {IH_CPU_NIOS2, "nios2", "NIOS II",}, + {IH_CPU_PPC, "ppc", "PowerPC",}, + {IH_CPU_S390, "s390", "IBM S390",}, + {IH_CPU_SH, "sh", "SuperH",}, + {IH_CPU_SPARC, "sparc", "SPARC",}, + {IH_CPU_SPARC64, "sparc64", "SPARC 64 Bit",}, + {-1, "", "",}, +}; + +table_entry_t os_name[] = { + {IH_OS_INVALID, NULL, "Invalid OS",}, + {IH_OS_4_4BSD, "4_4bsd", "4_4BSD",}, + {IH_OS_ARTOS, "artos", "ARTOS",}, + {IH_OS_DELL, "dell", "Dell",}, + {IH_OS_ESIX, "esix", "Esix",}, + {IH_OS_FREEBSD, "freebsd", "FreeBSD",}, + {IH_OS_IRIX, "irix", "Irix",}, + {IH_OS_LINUX, "linux", "Linux",}, + {IH_OS_LYNXOS, "lynxos", "LynxOS",}, + {IH_OS_NCR, "ncr", "NCR",}, + {IH_OS_NETBSD, "netbsd", "NetBSD",}, + {IH_OS_OPENBSD, "openbsd", "OpenBSD",}, + {IH_OS_PSOS, "psos", "pSOS",}, + {IH_OS_QNX, "qnx", "QNX",}, + {IH_OS_RTEMS, "rtems", "RTEMS",}, + {IH_OS_SCO, "sco", "SCO",}, + {IH_OS_SOLARIS, "solaris", "Solaris",}, + {IH_OS_SVR4, "svr4", "SVR4",}, + {IH_OS_U_BOOT, "u-boot", "U-Boot",}, + {IH_OS_VXWORKS, "vxworks", "VxWorks",}, + {-1, "", "",}, +}; + +table_entry_t type_name[] = { + {IH_TYPE_INVALID, NULL, "Invalid Image",}, + {IH_TYPE_FILESYSTEM, "filesystem", "Filesystem Image",}, + {IH_TYPE_FIRMWARE, "firmware", "Firmware",}, + {IH_TYPE_KERNEL, "kernel", "Kernel Image",}, + {IH_TYPE_MULTI, "multi", "Multi-File Image",}, + {IH_TYPE_RAMDISK, "ramdisk", "RAMDisk Image",}, + {IH_TYPE_SCRIPT, "script", "Script",}, + {IH_TYPE_STANDALONE, "standalone", "Standalone Program",}, + {-1, "", "",}, +}; + +table_entry_t comp_name[] = { + {IH_COMP_NONE, "none", "uncompressed",}, + {IH_COMP_BZIP2, "bzip2", "bzip2 compressed",}, + {IH_COMP_GZIP, "gzip", "gzip compressed",}, + {-1, "", "",}, +}; + +static void copy_file(int, const char *, int); +static void usage(void); +static void print_header(image_header_t *); +static void print_type(image_header_t *); +static char *put_table_entry(table_entry_t *, char *, int); +static char *put_arch(int); +static char *put_type(int); +static char *put_os(int); +static char *put_comp(int); +static int get_table_entry(table_entry_t *, char *, char *); +static int get_arch(char *); +static int get_comp(char *); +static int get_os(char *); +static int get_type(char *); + + +char *datafile; +char *imagefile; + +int dflag = 0; +int eflag = 0; +int lflag = 0; +int vflag = 0; +int xflag = 0; +int opt_os = IH_OS_LINUX; +int opt_arch = IH_CPU_PPC; +int opt_type = IH_TYPE_KERNEL; +int opt_comp = IH_COMP_GZIP; + +image_header_t header; +image_header_t *hdr = &header; + +int main(int argc, char **argv) +{ + int ifd; + uint32_t checksum; + uint32_t addr; + uint32_t ep; + struct stat sbuf; + unsigned char *ptr; + char *name = ""; + + cmdname = *argv; + + addr = ep = 0; + + while (--argc > 0 && **++argv == '-') + { + while (*++*argv) + { + switch (**argv) + { + case 'l': + lflag = 1; + break; + case 'A': + if ((--argc <= 0) || (opt_arch = get_arch(*++argv)) < 0) + usage(); + goto NXTARG; + case 'C': + if ((--argc <= 0) || (opt_comp = get_comp(*++argv)) < 0) + usage(); + goto NXTARG; + case 'O': + if ((--argc <= 0) || (opt_os = get_os(*++argv)) < 0) + usage(); + goto NXTARG; + case 'T': + if ((--argc <= 0) || (opt_type = get_type(*++argv)) < 0) + usage(); + goto NXTARG; + + case 'a': + if (--argc <= 0) + usage(); + addr = strtoul(*++argv, (char **)&ptr, 16); + if (*ptr) + { + fprintf(stderr, + "%s: invalid load address %s\n", + cmdname, *argv); + exit(EXIT_FAILURE); + } + goto NXTARG; + case 'd': + if (--argc <= 0) + usage(); + datafile = *++argv; + dflag = 1; + goto NXTARG; + case 'e': + if (--argc <= 0) + usage(); + ep = strtoul(*++argv, (char **)&ptr, 16); + if (*ptr) + { + fprintf(stderr, + "%s: invalid entry point %s\n", + cmdname, *argv); + exit(EXIT_FAILURE); + } + eflag = 1; + goto NXTARG; + case 'n': + if (--argc <= 0) + usage(); + name = *++argv; + goto NXTARG; + case 'v': + vflag++; + break; + case 'x': + xflag++; + break; + default: + usage(); + } + } + NXTARG:; + } + + if ((argc != 1) || ((lflag ^ dflag) == 0)) + usage(); + + if (!eflag) + { + ep = addr; + /* If XIP, entry point must be after the U-Boot header */ + if (xflag) + ep += sizeof(image_header_t); + } + + /* + * If XIP, ensure the entry point is equal to the load address plus + * the size of the U-Boot header. + */ + if (xflag) + { + if (ep != addr + sizeof(image_header_t)) + { + fprintf(stderr, + "%s: For XIP, the entry point must be the load addr + %lu\n", + cmdname, (unsigned long)sizeof(image_header_t)); + exit(EXIT_FAILURE); + } + } + + imagefile = *argv; + + if (lflag) + { + ifd = open(imagefile, O_RDONLY | O_BINARY); + } + else + { + ifd = + open(imagefile, O_RDWR | O_CREAT | O_TRUNC | O_BINARY, 0666); + } + + if (ifd < 0) + { + fprintf(stderr, "%s: Can't open %s: %s\n", + cmdname, imagefile, strerror(errno)); + exit(EXIT_FAILURE); + } + + if (lflag) + { + int len; + char *data; + /* + * list header information of existing image + */ + if (fstat(ifd, &sbuf) < 0) + { + fprintf(stderr, "%s: Can't stat %s: %s\n", + cmdname, imagefile, strerror(errno)); + exit(EXIT_FAILURE); + } + + if ((unsigned)sbuf.st_size < sizeof(image_header_t)) + { + fprintf(stderr, + "%s: Bad size: \"%s\" is no valid image\n", + cmdname, imagefile); + exit(EXIT_FAILURE); + } + + ptr = (unsigned char *)mmap(0, sbuf.st_size, + PROT_READ, MAP_SHARED, ifd, 0); + if ((caddr_t) ptr == (caddr_t) - 1) + { + fprintf(stderr, "%s: Can't read %s: %s\n", + cmdname, imagefile, strerror(errno)); + exit(EXIT_FAILURE); + } + + /* + * create copy of header so that we can blank out the + * checksum field for checking - this can't be done + * on the PROT_READ mapped data. + */ + memcpy(hdr, ptr, sizeof(image_header_t)); + + if (ntohl(hdr->ih_magic) != IH_MAGIC) + { + fprintf(stderr, + "%s: Bad Magic Number: \"%s\" is no valid image\n", + cmdname, imagefile); + exit(EXIT_FAILURE); + } + + data = (char *)hdr; + len = sizeof(image_header_t); + + checksum = ntohl(hdr->ih_hcrc); + hdr->ih_hcrc = htonl(0); /* clear for re-calculation */ + + if (crc32(0, data, len) != checksum) + { + fprintf(stderr, + "*** Warning: \"%s\" has bad header checksum!\n", + imagefile); + } + + data = (char *)(ptr + sizeof(image_header_t)); + len = sbuf.st_size - sizeof(image_header_t); + + if (crc32(0, data, len) != ntohl(hdr->ih_dcrc)) + { + fprintf(stderr, + "*** Warning: \"%s\" has corrupted data!\n", + imagefile); + } + + /* for multi-file images we need the data part, too */ + print_header((image_header_t *) ptr); + + (void)munmap((void *)ptr, sbuf.st_size); + (void)close(ifd); + + exit(EXIT_SUCCESS); + } + + /* + * Must be -w then: + * + * write dummy header, to be fixed later + */ + memset(hdr, 0, sizeof(image_header_t)); + + if (write(ifd, hdr, sizeof(image_header_t)) != sizeof(image_header_t)) + { + fprintf(stderr, "%s: Write error on %s: %s\n", + cmdname, imagefile, strerror(errno)); + exit(EXIT_FAILURE); + } + + if (opt_type == IH_TYPE_MULTI || opt_type == IH_TYPE_SCRIPT) + { + char *file = datafile; + unsigned long size; + + for (;;) + { + char *sep = NULL; + + if (file) + { + if ((sep = strchr(file, ':')) != NULL) + { + *sep = '\0'; + } + + if (stat(file, &sbuf) < 0) + { + fprintf(stderr, "%s: Can't stat %s: %s\n", + cmdname, file, strerror(errno)); + exit(EXIT_FAILURE); + } + size = htonl(sbuf.st_size); + } + else + { + size = 0; + } + + if (write(ifd, (char *)&size, sizeof(size)) != sizeof(size)) + { + fprintf(stderr, "%s: Write error on %s: %s\n", + cmdname, imagefile, strerror(errno)); + exit(EXIT_FAILURE); + } + + if (!file) + { + break; + } + + if (sep) + { + *sep = ':'; + file = sep + 1; + } + else + { + file = NULL; + } + } + + file = datafile; + + for (;;) + { + char *sep = strchr(file, ':'); + if (sep) + { + *sep = '\0'; + copy_file(ifd, file, 1); + *sep++ = ':'; + file = sep; + } + else + { + copy_file(ifd, file, 0); + break; + } + } + } + else + { + copy_file(ifd, datafile, 0); + } + + /* We're a bit of paranoid */ +#if defined(_POSIX_SYNCHRONIZED_IO) && !defined(__sun__) && !defined(__FreeBSD__) + (void)fdatasync(ifd); +#else + (void)fsync(ifd); +#endif + + if (fstat(ifd, &sbuf) < 0) + { + fprintf(stderr, "%s: Can't stat %s: %s\n", + cmdname, imagefile, strerror(errno)); + exit(EXIT_FAILURE); + } + + ptr = (unsigned char *)mmap(0, sbuf.st_size, + PROT_READ | PROT_WRITE, MAP_SHARED, ifd, + 0); + if (ptr == (unsigned char *)MAP_FAILED) + { + fprintf(stderr, "%s: Can't map %s: %s\n", + cmdname, imagefile, strerror(errno)); + exit(EXIT_FAILURE); + } + + hdr = (image_header_t *) ptr; + + checksum = crc32(0, + (const char *)(ptr + sizeof(image_header_t)), + sbuf.st_size - sizeof(image_header_t)); + + /* Build new header */ + hdr->ih_magic = htonl(IH_MAGIC); + hdr->ih_time = htonl(sbuf.st_mtime); + hdr->ih_size = htonl(sbuf.st_size - sizeof(image_header_t)); + hdr->ih_load = htonl(addr); + hdr->ih_ep = htonl(ep); + hdr->ih_dcrc = htonl(checksum); + hdr->ih_os = opt_os; + hdr->ih_arch = opt_arch; + hdr->ih_type = opt_type; + hdr->ih_comp = opt_comp; + + strncpy((char *)hdr->ih_name, name, IH_NMLEN); + + checksum = crc32(0, (const char *)hdr, sizeof(image_header_t)); + + hdr->ih_hcrc = htonl(checksum); + + print_header(hdr); + + (void)munmap((void *)ptr, sbuf.st_size); + + /* We're a bit of paranoid */ +#if defined(_POSIX_SYNCHRONIZED_IO) && !defined(__sun__) && !defined(__FreeBSD__) + (void)fdatasync(ifd); +#else + (void)fsync(ifd); +#endif + + if (close(ifd)) + { + fprintf(stderr, "%s: Write error on %s: %s\n", + cmdname, imagefile, strerror(errno)); + exit(EXIT_FAILURE); + } + + exit(EXIT_SUCCESS); +} + +static void copy_file(int ifd, const char *datafile, int pad) +{ + int dfd; + struct stat sbuf; + unsigned char *ptr; + int tail; + int zero = 0; + int offset = 0; + int size; + + if (vflag) + { + fprintf(stderr, "Adding Image %s\n", datafile); + } + + if ((dfd = open(datafile, O_RDONLY | O_BINARY)) < 0) + { + fprintf(stderr, "%s: Can't open %s: %s\n", + cmdname, datafile, strerror(errno)); + exit(EXIT_FAILURE); + } + + if (fstat(dfd, &sbuf) < 0) + { + fprintf(stderr, "%s: Can't stat %s: %s\n", + cmdname, datafile, strerror(errno)); + exit(EXIT_FAILURE); + } + + ptr = (unsigned char *)mmap(0, sbuf.st_size, + PROT_READ, MAP_SHARED, dfd, 0); + if (ptr == (unsigned char *)MAP_FAILED) + { + fprintf(stderr, "%s: Can't read %s: %s\n", + cmdname, datafile, strerror(errno)); + exit(EXIT_FAILURE); + } + + if (xflag) + { + unsigned char *p = NULL; + /* + * XIP: do not append the image_header_t at the + * beginning of the file, but consume the space + * reserved for it. + */ + + if ((unsigned)sbuf.st_size < sizeof(image_header_t)) + { + fprintf(stderr, + "%s: Bad size: \"%s\" is too small for XIP\n", + cmdname, datafile); + exit(EXIT_FAILURE); + } + + for (p = ptr; p < ptr + sizeof(image_header_t); p++) + { + if (*p != 0xff) + { + fprintf(stderr, + "%s: Bad file: \"%s\" has invalid buffer for XIP\n", + cmdname, datafile); + exit(EXIT_FAILURE); + } + } + + offset = sizeof(image_header_t); + } + + size = sbuf.st_size - offset; + if (write(ifd, ptr + offset, size) != size) + { + fprintf(stderr, "%s: Write error on %s: %s\n", + cmdname, imagefile, strerror(errno)); + exit(EXIT_FAILURE); + } + + if (pad && ((tail = size % 4) != 0)) + { + + if (write(ifd, (char *)&zero, 4 - tail) != 4 - tail) + { + fprintf(stderr, "%s: Write error on %s: %s\n", + cmdname, imagefile, strerror(errno)); + exit(EXIT_FAILURE); + } + } + + (void)munmap((void *)ptr, sbuf.st_size); + (void)close(dfd); +} + +void usage() +{ + fprintf(stderr, "Usage: %s -l image\n" + " -l ==> list image header information\n" + " %s [-x] -A arch -O os -T type -C comp " + "-a addr -e ep -n name -d data_file[:data_file...] image\n", + cmdname, cmdname); + fprintf(stderr, " -A ==> set architecture to 'arch'\n" + " -O ==> set operating system to 'os'\n" + " -T ==> set image type to 'type'\n" + " -C ==> set compression type 'comp'\n" + " -a ==> set load address to 'addr' (hex)\n" + " -e ==> set entry point to 'ep' (hex)\n" + " -n ==> set image name to 'name'\n" + " -d ==> use image data from 'datafile'\n" + " -x ==> set XIP (execute in place)\n"); + exit(EXIT_FAILURE); +} + +static void print_header(image_header_t * hdr) +{ + time_t timestamp; + uint32_t size; + + timestamp = (time_t) ntohl(hdr->ih_time); + size = ntohl(hdr->ih_size); + + printf("Image Name: %.*s\n", IH_NMLEN, hdr->ih_name); + printf("Created: %s", ctime(×tamp)); + printf("Image Type: "); + print_type(hdr); + printf("Data Size: %d Bytes = %.2f kB = %.2f MB\n", + size, (double)size / 1.024e3, (double)size / 1.048576e6); + printf("Load Address: 0x%08X\n", ntohl(hdr->ih_load)); + printf("Entry Point: 0x%08X\n", ntohl(hdr->ih_ep)); + + if (hdr->ih_type == IH_TYPE_MULTI || hdr->ih_type == IH_TYPE_SCRIPT) + { + int i, ptrs; + uint32_t pos; + unsigned long *len_ptr = (unsigned long *)((unsigned long)hdr + + sizeof + (image_header_t)); + + /* determine number of images first (to calculate image offsets) */ + for (i = 0; len_ptr[i]; ++i) /* null pointer terminates list */ + ; + ptrs = i; /* null pointer terminates list */ + + pos = sizeof(image_header_t) + ptrs * sizeof(long); + printf("Contents:\n"); + for (i = 0; len_ptr[i]; ++i) + { + size = ntohl(len_ptr[i]); + + printf(" Image %d: %8d Bytes = %4d kB = %d MB\n", + i, size, size >> 10, size >> 20); + if (hdr->ih_type == IH_TYPE_SCRIPT && i > 0) + { + /* + * the user may need to know offsets + * if planning to do something with + * multiple files + */ + printf(" Offset = %08X\n", pos); + } + /* copy_file() will pad the first files to even word align */ + size += 3; + size &= ~3; + pos += size; + } + } +} + + +static void print_type(image_header_t * hdr) +{ + printf("%s %s %s (%s)\n", + put_arch(hdr->ih_arch), + put_os(hdr->ih_os), + put_type(hdr->ih_type), put_comp(hdr->ih_comp)); +} + +static char *put_arch(int arch) +{ + return (put_table_entry(arch_name, "Unknown Architecture", arch)); +} + +static char *put_os(int os) +{ + return (put_table_entry(os_name, "Unknown OS", os)); +} + +static char *put_type(int type) +{ + return (put_table_entry(type_name, "Unknown Image", type)); +} + +static char *put_comp(int comp) +{ + return (put_table_entry(comp_name, "Unknown Compression", comp)); +} + +static char *put_table_entry(table_entry_t * table, char *msg, int type) +{ + for (; table->val >= 0; ++table) + { + if (table->val == type) + return (table->lname); + } + return (msg); +} + +static int get_arch(char *name) +{ + return (get_table_entry(arch_name, "CPU", name)); +} + + +static int get_comp(char *name) +{ + return (get_table_entry(comp_name, "Compression", name)); +} + + +static int get_os(char *name) +{ + return (get_table_entry(os_name, "OS", name)); +} + + +static int get_type(char *name) +{ + return (get_table_entry(type_name, "Image", name)); +} + +static int get_table_entry(table_entry_t * table, char *msg, char *name) +{ + table_entry_t *t; + int first = 1; + + for (t = table; t->val >= 0; ++t) + { + if (t->sname && strcasecmp(t->sname, name) == 0) + return (t->val); + } + fprintf(stderr, "\nInvalid %s Type - valid names are", msg); + for (t = table; t->val >= 0; ++t) + { + if (t->sname == NULL) + continue; + fprintf(stderr, "%c %s", (first) ? ':' : ',', t->sname); + first = 0; + } + fprintf(stderr, "\n"); + return (-1); +} diff --git a/compile/uboot-tool/source.txt b/compile/uboot-tool/source.txt new file mode 100644 index 0000000..3efe0ad --- /dev/null +++ b/compile/uboot-tool/source.txt @@ -0,0 +1,3 @@ +Found in WRT160NL_1.00.01.17/release/tools/src/ from +http://www.linksysbycisco.com/gpl +http://www.linksysbycisco.com/US/en/support/WRT160NL/download diff --git a/compile/version b/compile/version new file mode 100644 index 0000000..3c873e4 --- /dev/null +++ b/compile/version @@ -0,0 +1 @@ +Xinu for bbb -- version #10 (bhimebau) Wed Aug 31 15:18:11 EDT 2016 diff --git a/compile/xinu.map b/compile/xinu.map new file mode 100644 index 0000000..d71c5d4 --- /dev/null +++ b/compile/xinu.map @@ -0,0 +1,16202 @@ +Archive member included because of file (symbol) + +/l/arm2/devtools/lib/gcc/arm-none-eabi/4.8.4/libgcc.a(_udivsi3.o) + binaries/qsort.o (__aeabi_uidiv) +/l/arm2/devtools/lib/gcc/arm-none-eabi/4.8.4/libgcc.a(_divsi3.o) + binaries/xsh_help.o (__aeabi_idiv) +/l/arm2/devtools/lib/gcc/arm-none-eabi/4.8.4/libgcc.a(_dvmd_tls.o) + /l/arm2/devtools/lib/gcc/arm-none-eabi/4.8.4/libgcc.a(_udivsi3.o) (__aeabi_idiv0) + +Allocating common symbols +Common symbol size file + +platform 0x3c binaries/initialize.o +readylist 0x2 binaries/ready.o +page_table 0x190000 binaries/mmu.o +sleepq 0x2 binaries/clkinit.o +resdefer 0x4 binaries/resched.o +intc_vector 0x200 binaries/evec.o +nnames 0x4 binaries/naminit.o +minheap 0x4 binaries/meminit.o +marks 0x50 binaries/mark.o +currpid 0x4 binaries/initialize.o +Lf_data 0x20c binaries/lfsinit.o +porttab 0x2d0 binaries/ptinit.o +ttytab 0x10c binaries/ttyinit.o +proctab 0x15e0 binaries/initialize.o +prcount 0x4 binaries/initialize.o +lfltab 0xf00 binaries/lflinit.o +nmarks 0x4 binaries/mark.o +Defer 0x8 binaries/resched.o +semtab 0x4b0 binaries/initialize.o +interruptVector 0x80 binaries/pl190.o +clkticks 0x4 binaries/clkinit.o +maxheap 0x4 binaries/meminit.o +preempt 0x4 binaries/clkinit.o +buftab 0xf0 binaries/bufinit.o +uarttab 0x83c binaries/uartInit.o +mkmutex 0x4 binaries/mark.o +looptab 0x410 binaries/loopbackInit.o +clktime 0x4 binaries/clkinit.o +cpudelay 0x4 binaries/main.o +nbpools 0x4 binaries/bufinit.o +queuetab 0x980 binaries/queue.o +ptnextid 0x4 binaries/ptinit.o +Ram 0x19000 binaries/raminit.o +memlist 0x8 binaries/initialize.o +nametab 0x19a0 binaries/naminit.o +ptfree 0x4 binaries/ptinit.o + +Discarded input sections + + .group 0x00000000 0x8 binaries/ascdate.o + .group 0x00000000 0x8 binaries/ascdate.o + .group 0x00000000 0x8 binaries/ascdate.o + .group 0x00000000 0x8 binaries/ascdate.o + .group 0x00000000 0x8 binaries/ascdate.o + .group 0x00000000 0x8 binaries/ascdate.o + .group 0x00000000 0x8 binaries/ascdate.o + .group 0x00000000 0x8 binaries/ascdate.o + .group 0x00000000 0x8 binaries/ascdate.o + .group 0x00000000 0x8 binaries/ascdate.o + .group 0x00000000 0x8 binaries/ascdate.o + .group 0x00000000 0x8 binaries/ascdate.o + .group 0x00000000 0x8 binaries/ascdate.o + .group 0x00000000 0x8 binaries/ascdate.o + .group 0x00000000 0x8 binaries/ascdate.o + .group 0x00000000 0x8 binaries/ascdate.o + .group 0x00000000 0x8 binaries/ascdate.o + .group 0x00000000 0x8 binaries/ascdate.o + .group 0x00000000 0x8 binaries/ascdate.o + .group 0x00000000 0x8 binaries/ascdate.o + .group 0x00000000 0x8 binaries/ascdate.o + .group 0x00000000 0x8 binaries/ascdate.o + .group 0x00000000 0x8 binaries/ascdate.o + .group 0x00000000 0x8 binaries/ascdate.o + .group 0x00000000 0x8 binaries/ascdate.o + .group 0x00000000 0x8 binaries/ascdate.o + .group 0x00000000 0x8 binaries/ascdate.o + .group 0x00000000 0x8 binaries/ascdate.o + .group 0x00000000 0x8 binaries/ascdate.o + .group 0x00000000 0x8 binaries/ascdate.o + .group 0x00000000 0x8 binaries/ascdate.o + .group 0x00000000 0x8 binaries/ascdate.o + .group 0x00000000 0x8 binaries/ascdate.o + .group 0x00000000 0x8 binaries/ascdate.o + .group 0x00000000 0x8 binaries/ascdate.o + .group 0x00000000 0x8 binaries/ascdate.o + .group 0x00000000 0x8 binaries/ascdate.o + .group 0x00000000 0x8 binaries/bufinit.o + .group 0x00000000 0x8 binaries/bufinit.o + .group 0x00000000 0x8 binaries/bufinit.o + .group 0x00000000 0x8 binaries/bufinit.o + .group 0x00000000 0x8 binaries/bufinit.o + .group 0x00000000 0x8 binaries/bufinit.o + .group 0x00000000 0x8 binaries/bufinit.o + .group 0x00000000 0x8 binaries/bufinit.o + .group 0x00000000 0x8 binaries/bufinit.o + .group 0x00000000 0x8 binaries/bufinit.o + .group 0x00000000 0x8 binaries/bufinit.o + .group 0x00000000 0x8 binaries/bufinit.o + .group 0x00000000 0x8 binaries/bufinit.o + .group 0x00000000 0x8 binaries/bufinit.o + .group 0x00000000 0x8 binaries/bufinit.o + .group 0x00000000 0x8 binaries/bufinit.o + .group 0x00000000 0x8 binaries/bufinit.o + .group 0x00000000 0x8 binaries/bufinit.o + .group 0x00000000 0x8 binaries/bufinit.o + .group 0x00000000 0x8 binaries/bufinit.o + .group 0x00000000 0x8 binaries/bufinit.o + .group 0x00000000 0x8 binaries/bufinit.o + .group 0x00000000 0x8 binaries/bufinit.o + .group 0x00000000 0x8 binaries/bufinit.o + .group 0x00000000 0x8 binaries/bufinit.o + .group 0x00000000 0x8 binaries/bufinit.o + .group 0x00000000 0x8 binaries/bufinit.o + .group 0x00000000 0x8 binaries/bufinit.o + .group 0x00000000 0x8 binaries/bufinit.o + .group 0x00000000 0x8 binaries/bufinit.o + .group 0x00000000 0x8 binaries/bufinit.o + .group 0x00000000 0x8 binaries/bufinit.o + .group 0x00000000 0x8 binaries/bufinit.o + .group 0x00000000 0x8 binaries/bufinit.o + .group 0x00000000 0x8 binaries/bufinit.o + .group 0x00000000 0x8 binaries/bufinit.o + .group 0x00000000 0x8 binaries/bufinit.o + .debug_macro 0x00000000 0x838 binaries/bufinit.o + .debug_macro 0x00000000 0x58 binaries/bufinit.o + .debug_macro 0x00000000 0xb2 binaries/bufinit.o + .debug_macro 0x00000000 0x6a binaries/bufinit.o + .debug_macro 0x00000000 0x52 binaries/bufinit.o + .debug_macro 0x00000000 0x10 binaries/bufinit.o + .debug_macro 0x00000000 0x16 binaries/bufinit.o + .debug_macro 0x00000000 0x1c binaries/bufinit.o + .debug_macro 0x00000000 0x1c binaries/bufinit.o + .debug_macro 0x00000000 0x10 binaries/bufinit.o + .debug_macro 0x00000000 0x28 binaries/bufinit.o + .debug_macro 0x00000000 0x1c1 binaries/bufinit.o + .debug_macro 0x00000000 0xa0 binaries/bufinit.o + .debug_macro 0x00000000 0x10 binaries/bufinit.o + .debug_macro 0x00000000 0x22 binaries/bufinit.o + .debug_macro 0x00000000 0x46 binaries/bufinit.o + .debug_macro 0x00000000 0xfa binaries/bufinit.o + .debug_macro 0x00000000 0xdd binaries/bufinit.o + .debug_macro 0x00000000 0x91 binaries/bufinit.o + .debug_macro 0x00000000 0x8e binaries/bufinit.o + .debug_macro 0x00000000 0x82 binaries/bufinit.o + .debug_macro 0x00000000 0x2e binaries/bufinit.o + .debug_macro 0x00000000 0x3a binaries/bufinit.o + .debug_macro 0x00000000 0x4c binaries/bufinit.o + .debug_macro 0x00000000 0x3a binaries/bufinit.o + .debug_macro 0x00000000 0xa0 binaries/bufinit.o + .debug_macro 0x00000000 0x34 binaries/bufinit.o + .debug_macro 0x00000000 0x7c binaries/bufinit.o + .debug_macro 0x00000000 0x1c binaries/bufinit.o + .debug_macro 0x00000000 0xee binaries/bufinit.o + .debug_macro 0x00000000 0x7c binaries/bufinit.o + .debug_macro 0x00000000 0x20 binaries/bufinit.o + .debug_macro 0x00000000 0x10 binaries/bufinit.o + .debug_macro 0x00000000 0x1c binaries/bufinit.o + .debug_macro 0x00000000 0x34 binaries/bufinit.o + .debug_macro 0x00000000 0xeb binaries/bufinit.o + .debug_macro 0x00000000 0x8e binaries/bufinit.o + .group 0x00000000 0x8 binaries/chprio.o + .group 0x00000000 0x8 binaries/chprio.o + .group 0x00000000 0x8 binaries/chprio.o + .group 0x00000000 0x8 binaries/chprio.o + .group 0x00000000 0x8 binaries/chprio.o + .group 0x00000000 0x8 binaries/chprio.o + .group 0x00000000 0x8 binaries/chprio.o + .group 0x00000000 0x8 binaries/chprio.o + .group 0x00000000 0x8 binaries/chprio.o + .group 0x00000000 0x8 binaries/chprio.o + .group 0x00000000 0x8 binaries/chprio.o + .group 0x00000000 0x8 binaries/chprio.o + .group 0x00000000 0x8 binaries/chprio.o + .group 0x00000000 0x8 binaries/chprio.o + .group 0x00000000 0x8 binaries/chprio.o + .group 0x00000000 0x8 binaries/chprio.o + .group 0x00000000 0x8 binaries/chprio.o + .group 0x00000000 0x8 binaries/chprio.o + .group 0x00000000 0x8 binaries/chprio.o + .group 0x00000000 0x8 binaries/chprio.o + .group 0x00000000 0x8 binaries/chprio.o + .group 0x00000000 0x8 binaries/chprio.o + .group 0x00000000 0x8 binaries/chprio.o + .group 0x00000000 0x8 binaries/chprio.o + .group 0x00000000 0x8 binaries/chprio.o + .group 0x00000000 0x8 binaries/chprio.o + .group 0x00000000 0x8 binaries/chprio.o + .group 0x00000000 0x8 binaries/chprio.o + .group 0x00000000 0x8 binaries/chprio.o + .group 0x00000000 0x8 binaries/chprio.o + .group 0x00000000 0x8 binaries/chprio.o + .group 0x00000000 0x8 binaries/chprio.o + .group 0x00000000 0x8 binaries/chprio.o + .group 0x00000000 0x8 binaries/chprio.o + .group 0x00000000 0x8 binaries/chprio.o + .group 0x00000000 0x8 binaries/chprio.o + .group 0x00000000 0x8 binaries/chprio.o + .debug_macro 0x00000000 0x838 binaries/chprio.o + .debug_macro 0x00000000 0x58 binaries/chprio.o + .debug_macro 0x00000000 0xb2 binaries/chprio.o + .debug_macro 0x00000000 0x6a binaries/chprio.o + .debug_macro 0x00000000 0x52 binaries/chprio.o + .debug_macro 0x00000000 0x10 binaries/chprio.o + .debug_macro 0x00000000 0x16 binaries/chprio.o + .debug_macro 0x00000000 0x1c binaries/chprio.o + .debug_macro 0x00000000 0x1c binaries/chprio.o + .debug_macro 0x00000000 0x10 binaries/chprio.o + .debug_macro 0x00000000 0x28 binaries/chprio.o + .debug_macro 0x00000000 0x1c1 binaries/chprio.o + .debug_macro 0x00000000 0xa0 binaries/chprio.o + .debug_macro 0x00000000 0x10 binaries/chprio.o + .debug_macro 0x00000000 0x22 binaries/chprio.o + .debug_macro 0x00000000 0x46 binaries/chprio.o + .debug_macro 0x00000000 0xfa binaries/chprio.o + .debug_macro 0x00000000 0xdd binaries/chprio.o + .debug_macro 0x00000000 0x91 binaries/chprio.o + .debug_macro 0x00000000 0x8e binaries/chprio.o + .debug_macro 0x00000000 0x82 binaries/chprio.o + .debug_macro 0x00000000 0x2e binaries/chprio.o + .debug_macro 0x00000000 0x3a binaries/chprio.o + .debug_macro 0x00000000 0x4c binaries/chprio.o + .debug_macro 0x00000000 0x3a binaries/chprio.o + .debug_macro 0x00000000 0xa0 binaries/chprio.o + .debug_macro 0x00000000 0x34 binaries/chprio.o + .debug_macro 0x00000000 0x7c binaries/chprio.o + .debug_macro 0x00000000 0x1c binaries/chprio.o + .debug_macro 0x00000000 0xee binaries/chprio.o + .debug_macro 0x00000000 0x7c binaries/chprio.o + .debug_macro 0x00000000 0x20 binaries/chprio.o + .debug_macro 0x00000000 0x10 binaries/chprio.o + .debug_macro 0x00000000 0x1c binaries/chprio.o + .debug_macro 0x00000000 0x34 binaries/chprio.o + .debug_macro 0x00000000 0xeb binaries/chprio.o + .debug_macro 0x00000000 0x8e binaries/chprio.o + .group 0x00000000 0x8 binaries/clkhandler.o + .group 0x00000000 0x8 binaries/clkhandler.o + .group 0x00000000 0x8 binaries/clkhandler.o + .group 0x00000000 0x8 binaries/clkhandler.o + .group 0x00000000 0x8 binaries/clkhandler.o + .group 0x00000000 0x8 binaries/clkhandler.o + .group 0x00000000 0x8 binaries/clkhandler.o + .group 0x00000000 0x8 binaries/clkhandler.o + .group 0x00000000 0x8 binaries/clkhandler.o + .group 0x00000000 0x8 binaries/clkhandler.o + .group 0x00000000 0x8 binaries/clkhandler.o + .group 0x00000000 0x8 binaries/clkhandler.o + .group 0x00000000 0x8 binaries/clkhandler.o + .group 0x00000000 0x8 binaries/clkhandler.o + .group 0x00000000 0x8 binaries/clkhandler.o + .group 0x00000000 0x8 binaries/clkhandler.o + .group 0x00000000 0x8 binaries/clkhandler.o + .group 0x00000000 0x8 binaries/clkhandler.o + .group 0x00000000 0x8 binaries/clkhandler.o + .group 0x00000000 0x8 binaries/clkhandler.o + .group 0x00000000 0x8 binaries/clkhandler.o + .group 0x00000000 0x8 binaries/clkhandler.o + .group 0x00000000 0x8 binaries/clkhandler.o + .group 0x00000000 0x8 binaries/clkhandler.o + .group 0x00000000 0x8 binaries/clkhandler.o + .group 0x00000000 0x8 binaries/clkhandler.o + .group 0x00000000 0x8 binaries/clkhandler.o + .group 0x00000000 0x8 binaries/clkhandler.o + .group 0x00000000 0x8 binaries/clkhandler.o + .group 0x00000000 0x8 binaries/clkhandler.o + .group 0x00000000 0x8 binaries/clkhandler.o + .group 0x00000000 0x8 binaries/clkhandler.o + .group 0x00000000 0x8 binaries/clkhandler.o + .group 0x00000000 0x8 binaries/clkhandler.o + .group 0x00000000 0x8 binaries/clkhandler.o + .group 0x00000000 0x8 binaries/clkhandler.o + .group 0x00000000 0x8 binaries/clkhandler.o + .group 0x00000000 0x8 binaries/clkhandler.o + .group 0x00000000 0x8 binaries/clkhandler.o + .debug_macro 0x00000000 0x838 binaries/clkhandler.o + .debug_macro 0x00000000 0x58 binaries/clkhandler.o + .debug_macro 0x00000000 0xb2 binaries/clkhandler.o + .debug_macro 0x00000000 0x6a binaries/clkhandler.o + .debug_macro 0x00000000 0x52 binaries/clkhandler.o + .debug_macro 0x00000000 0x10 binaries/clkhandler.o + .debug_macro 0x00000000 0x16 binaries/clkhandler.o + .debug_macro 0x00000000 0x1c binaries/clkhandler.o + .debug_macro 0x00000000 0x1c binaries/clkhandler.o + .debug_macro 0x00000000 0x10 binaries/clkhandler.o + .debug_macro 0x00000000 0x28 binaries/clkhandler.o + .debug_macro 0x00000000 0x1c1 binaries/clkhandler.o + .debug_macro 0x00000000 0xa0 binaries/clkhandler.o + .debug_macro 0x00000000 0x10 binaries/clkhandler.o + .debug_macro 0x00000000 0x22 binaries/clkhandler.o + .debug_macro 0x00000000 0x46 binaries/clkhandler.o + .debug_macro 0x00000000 0xfa binaries/clkhandler.o + .debug_macro 0x00000000 0xdd binaries/clkhandler.o + .debug_macro 0x00000000 0x91 binaries/clkhandler.o + .debug_macro 0x00000000 0x8e binaries/clkhandler.o + .debug_macro 0x00000000 0x82 binaries/clkhandler.o + .debug_macro 0x00000000 0x2e binaries/clkhandler.o + .debug_macro 0x00000000 0x3a binaries/clkhandler.o + .debug_macro 0x00000000 0x4c binaries/clkhandler.o + .debug_macro 0x00000000 0x3a binaries/clkhandler.o + .debug_macro 0x00000000 0xa0 binaries/clkhandler.o + .debug_macro 0x00000000 0x34 binaries/clkhandler.o + .debug_macro 0x00000000 0x7c binaries/clkhandler.o + .debug_macro 0x00000000 0x1c binaries/clkhandler.o + .debug_macro 0x00000000 0xee binaries/clkhandler.o + .debug_macro 0x00000000 0x7c binaries/clkhandler.o + .debug_macro 0x00000000 0x20 binaries/clkhandler.o + .debug_macro 0x00000000 0x10 binaries/clkhandler.o + .debug_macro 0x00000000 0x1c binaries/clkhandler.o + .debug_macro 0x00000000 0x34 binaries/clkhandler.o + .debug_macro 0x00000000 0xeb binaries/clkhandler.o + .debug_macro 0x00000000 0x8e binaries/clkhandler.o + .group 0x00000000 0x8 binaries/clkinit.o + .group 0x00000000 0x8 binaries/clkinit.o + .group 0x00000000 0x8 binaries/clkinit.o + .group 0x00000000 0x8 binaries/clkinit.o + .group 0x00000000 0x8 binaries/clkinit.o + .group 0x00000000 0x8 binaries/clkinit.o + .group 0x00000000 0x8 binaries/clkinit.o + .group 0x00000000 0x8 binaries/clkinit.o + .group 0x00000000 0x8 binaries/clkinit.o + .group 0x00000000 0x8 binaries/clkinit.o + .group 0x00000000 0x8 binaries/clkinit.o + .group 0x00000000 0x8 binaries/clkinit.o + .group 0x00000000 0x8 binaries/clkinit.o + .group 0x00000000 0x8 binaries/clkinit.o + .group 0x00000000 0x8 binaries/clkinit.o + .group 0x00000000 0x8 binaries/clkinit.o + .group 0x00000000 0x8 binaries/clkinit.o + .group 0x00000000 0x8 binaries/clkinit.o + .group 0x00000000 0x8 binaries/clkinit.o + .group 0x00000000 0x8 binaries/clkinit.o + .group 0x00000000 0x8 binaries/clkinit.o + .group 0x00000000 0x8 binaries/clkinit.o + .group 0x00000000 0x8 binaries/clkinit.o + .group 0x00000000 0x8 binaries/clkinit.o + .group 0x00000000 0x8 binaries/clkinit.o + .group 0x00000000 0x8 binaries/clkinit.o + .group 0x00000000 0x8 binaries/clkinit.o + .group 0x00000000 0x8 binaries/clkinit.o + .group 0x00000000 0x8 binaries/clkinit.o + .group 0x00000000 0x8 binaries/clkinit.o + .group 0x00000000 0x8 binaries/clkinit.o + .group 0x00000000 0x8 binaries/clkinit.o + .group 0x00000000 0x8 binaries/clkinit.o + .group 0x00000000 0x8 binaries/clkinit.o + .group 0x00000000 0x8 binaries/clkinit.o + .group 0x00000000 0x8 binaries/clkinit.o + .group 0x00000000 0x8 binaries/clkinit.o + .group 0x00000000 0x8 binaries/clkinit.o + .group 0x00000000 0x8 binaries/clkinit.o + .debug_macro 0x00000000 0x838 binaries/clkinit.o + .debug_macro 0x00000000 0x58 binaries/clkinit.o + .debug_macro 0x00000000 0xb2 binaries/clkinit.o + .debug_macro 0x00000000 0x6a binaries/clkinit.o + .debug_macro 0x00000000 0x52 binaries/clkinit.o + .debug_macro 0x00000000 0x10 binaries/clkinit.o + .debug_macro 0x00000000 0x16 binaries/clkinit.o + .debug_macro 0x00000000 0x1c binaries/clkinit.o + .debug_macro 0x00000000 0x1c binaries/clkinit.o + .debug_macro 0x00000000 0x10 binaries/clkinit.o + .debug_macro 0x00000000 0x28 binaries/clkinit.o + .debug_macro 0x00000000 0x1c1 binaries/clkinit.o + .debug_macro 0x00000000 0xa0 binaries/clkinit.o + .debug_macro 0x00000000 0x10 binaries/clkinit.o + .debug_macro 0x00000000 0x22 binaries/clkinit.o + .debug_macro 0x00000000 0x46 binaries/clkinit.o + .debug_macro 0x00000000 0xfa binaries/clkinit.o + .debug_macro 0x00000000 0xdd binaries/clkinit.o + .debug_macro 0x00000000 0x91 binaries/clkinit.o + .debug_macro 0x00000000 0x8e binaries/clkinit.o + .debug_macro 0x00000000 0x82 binaries/clkinit.o + .debug_macro 0x00000000 0x2e binaries/clkinit.o + .debug_macro 0x00000000 0x3a binaries/clkinit.o + .debug_macro 0x00000000 0x4c binaries/clkinit.o + .debug_macro 0x00000000 0x3a binaries/clkinit.o + .debug_macro 0x00000000 0xa0 binaries/clkinit.o + .debug_macro 0x00000000 0x34 binaries/clkinit.o + .debug_macro 0x00000000 0x7c binaries/clkinit.o + .debug_macro 0x00000000 0x1c binaries/clkinit.o + .debug_macro 0x00000000 0xee binaries/clkinit.o + .debug_macro 0x00000000 0x7c binaries/clkinit.o + .debug_macro 0x00000000 0x20 binaries/clkinit.o + .debug_macro 0x00000000 0x10 binaries/clkinit.o + .debug_macro 0x00000000 0x1c binaries/clkinit.o + .debug_macro 0x00000000 0x34 binaries/clkinit.o + .debug_macro 0x00000000 0xeb binaries/clkinit.o + .debug_macro 0x00000000 0x8e binaries/clkinit.o + .debug_macro 0x00000000 0x1c binaries/clkinit.o + .debug_macro 0x00000000 0x5e binaries/clkinit.o + .group 0x00000000 0x8 binaries/close.o + .group 0x00000000 0x8 binaries/close.o + .group 0x00000000 0x8 binaries/close.o + .group 0x00000000 0x8 binaries/close.o + .group 0x00000000 0x8 binaries/close.o + .group 0x00000000 0x8 binaries/close.o + .group 0x00000000 0x8 binaries/close.o + .group 0x00000000 0x8 binaries/close.o + .group 0x00000000 0x8 binaries/close.o + .group 0x00000000 0x8 binaries/close.o + .group 0x00000000 0x8 binaries/close.o + .group 0x00000000 0x8 binaries/close.o + .group 0x00000000 0x8 binaries/close.o + .group 0x00000000 0x8 binaries/close.o + .group 0x00000000 0x8 binaries/close.o + .group 0x00000000 0x8 binaries/close.o + .group 0x00000000 0x8 binaries/close.o + .group 0x00000000 0x8 binaries/close.o + .group 0x00000000 0x8 binaries/close.o + .group 0x00000000 0x8 binaries/close.o + .group 0x00000000 0x8 binaries/close.o + .group 0x00000000 0x8 binaries/close.o + .group 0x00000000 0x8 binaries/close.o + .group 0x00000000 0x8 binaries/close.o + .group 0x00000000 0x8 binaries/close.o + .group 0x00000000 0x8 binaries/close.o + .group 0x00000000 0x8 binaries/close.o + .group 0x00000000 0x8 binaries/close.o + .group 0x00000000 0x8 binaries/close.o + .group 0x00000000 0x8 binaries/close.o + .group 0x00000000 0x8 binaries/close.o + .group 0x00000000 0x8 binaries/close.o + .group 0x00000000 0x8 binaries/close.o + .group 0x00000000 0x8 binaries/close.o + .group 0x00000000 0x8 binaries/close.o + .group 0x00000000 0x8 binaries/close.o + .group 0x00000000 0x8 binaries/close.o + .debug_macro 0x00000000 0x838 binaries/close.o + .debug_macro 0x00000000 0x58 binaries/close.o + .debug_macro 0x00000000 0xb2 binaries/close.o + .debug_macro 0x00000000 0x6a binaries/close.o + .debug_macro 0x00000000 0x52 binaries/close.o + .debug_macro 0x00000000 0x10 binaries/close.o + .debug_macro 0x00000000 0x16 binaries/close.o + .debug_macro 0x00000000 0x1c binaries/close.o + .debug_macro 0x00000000 0x1c binaries/close.o + .debug_macro 0x00000000 0x10 binaries/close.o + .debug_macro 0x00000000 0x28 binaries/close.o + .debug_macro 0x00000000 0x1c1 binaries/close.o + .debug_macro 0x00000000 0xa0 binaries/close.o + .debug_macro 0x00000000 0x10 binaries/close.o + .debug_macro 0x00000000 0x22 binaries/close.o + .debug_macro 0x00000000 0x46 binaries/close.o + .debug_macro 0x00000000 0xfa binaries/close.o + .debug_macro 0x00000000 0xdd binaries/close.o + .debug_macro 0x00000000 0x91 binaries/close.o + .debug_macro 0x00000000 0x8e binaries/close.o + .debug_macro 0x00000000 0x82 binaries/close.o + .debug_macro 0x00000000 0x2e binaries/close.o + .debug_macro 0x00000000 0x3a binaries/close.o + .debug_macro 0x00000000 0x4c binaries/close.o + .debug_macro 0x00000000 0x3a binaries/close.o + .debug_macro 0x00000000 0xa0 binaries/close.o + .debug_macro 0x00000000 0x34 binaries/close.o + .debug_macro 0x00000000 0x7c binaries/close.o + .debug_macro 0x00000000 0x1c binaries/close.o + .debug_macro 0x00000000 0xee binaries/close.o + .debug_macro 0x00000000 0x7c binaries/close.o + .debug_macro 0x00000000 0x20 binaries/close.o + .debug_macro 0x00000000 0x10 binaries/close.o + .debug_macro 0x00000000 0x1c binaries/close.o + .debug_macro 0x00000000 0x34 binaries/close.o + .debug_macro 0x00000000 0xeb binaries/close.o + .debug_macro 0x00000000 0x8e binaries/close.o + .group 0x00000000 0x8 binaries/conf.o + .group 0x00000000 0x8 binaries/conf.o + .group 0x00000000 0x8 binaries/conf.o + .group 0x00000000 0x8 binaries/conf.o + .group 0x00000000 0x8 binaries/conf.o + .group 0x00000000 0x8 binaries/conf.o + .group 0x00000000 0x8 binaries/conf.o + .group 0x00000000 0x8 binaries/conf.o + .group 0x00000000 0x8 binaries/conf.o + .group 0x00000000 0x8 binaries/conf.o + .group 0x00000000 0x8 binaries/conf.o + .group 0x00000000 0x8 binaries/conf.o + .group 0x00000000 0x8 binaries/conf.o + .group 0x00000000 0x8 binaries/conf.o + .group 0x00000000 0x8 binaries/conf.o + .group 0x00000000 0x8 binaries/conf.o + .group 0x00000000 0x8 binaries/conf.o + .group 0x00000000 0x8 binaries/conf.o + .group 0x00000000 0x8 binaries/conf.o + .group 0x00000000 0x8 binaries/conf.o + .group 0x00000000 0x8 binaries/conf.o + .group 0x00000000 0x8 binaries/conf.o + .group 0x00000000 0x8 binaries/conf.o + .group 0x00000000 0x8 binaries/conf.o + .group 0x00000000 0x8 binaries/conf.o + .group 0x00000000 0x8 binaries/conf.o + .group 0x00000000 0x8 binaries/conf.o + .group 0x00000000 0x8 binaries/conf.o + .group 0x00000000 0x8 binaries/conf.o + .group 0x00000000 0x8 binaries/conf.o + .group 0x00000000 0x8 binaries/conf.o + .group 0x00000000 0x8 binaries/conf.o + .group 0x00000000 0x8 binaries/conf.o + .group 0x00000000 0x8 binaries/conf.o + .group 0x00000000 0x8 binaries/conf.o + .group 0x00000000 0x8 binaries/conf.o + .group 0x00000000 0x8 binaries/conf.o + .debug_macro 0x00000000 0x838 binaries/conf.o + .debug_macro 0x00000000 0x58 binaries/conf.o + .debug_macro 0x00000000 0xb2 binaries/conf.o + .debug_macro 0x00000000 0x6a binaries/conf.o + .debug_macro 0x00000000 0x52 binaries/conf.o + .debug_macro 0x00000000 0x10 binaries/conf.o + .debug_macro 0x00000000 0x16 binaries/conf.o + .debug_macro 0x00000000 0x1c binaries/conf.o + .debug_macro 0x00000000 0x1c binaries/conf.o + .debug_macro 0x00000000 0x10 binaries/conf.o + .debug_macro 0x00000000 0x28 binaries/conf.o + .debug_macro 0x00000000 0x1c1 binaries/conf.o + .debug_macro 0x00000000 0xa0 binaries/conf.o + .debug_macro 0x00000000 0x10 binaries/conf.o + .debug_macro 0x00000000 0x22 binaries/conf.o + .debug_macro 0x00000000 0x46 binaries/conf.o + .debug_macro 0x00000000 0xfa binaries/conf.o + .debug_macro 0x00000000 0xdd binaries/conf.o + .debug_macro 0x00000000 0x91 binaries/conf.o + .debug_macro 0x00000000 0x8e binaries/conf.o + .debug_macro 0x00000000 0x82 binaries/conf.o + .debug_macro 0x00000000 0x2e binaries/conf.o + .debug_macro 0x00000000 0x3a binaries/conf.o + .debug_macro 0x00000000 0x4c binaries/conf.o + .debug_macro 0x00000000 0x3a binaries/conf.o + .debug_macro 0x00000000 0xa0 binaries/conf.o + .debug_macro 0x00000000 0x34 binaries/conf.o + .debug_macro 0x00000000 0x7c binaries/conf.o + .debug_macro 0x00000000 0x1c binaries/conf.o + .debug_macro 0x00000000 0xee binaries/conf.o + .debug_macro 0x00000000 0x7c binaries/conf.o + .debug_macro 0x00000000 0x20 binaries/conf.o + .debug_macro 0x00000000 0x10 binaries/conf.o + .debug_macro 0x00000000 0x1c binaries/conf.o + .debug_macro 0x00000000 0x34 binaries/conf.o + .debug_macro 0x00000000 0xeb binaries/conf.o + .debug_macro 0x00000000 0x8e binaries/conf.o + .group 0x00000000 0x8 binaries/control.o + .group 0x00000000 0x8 binaries/control.o + .group 0x00000000 0x8 binaries/control.o + .group 0x00000000 0x8 binaries/control.o + .group 0x00000000 0x8 binaries/control.o + .group 0x00000000 0x8 binaries/control.o + .group 0x00000000 0x8 binaries/control.o + .group 0x00000000 0x8 binaries/control.o + .group 0x00000000 0x8 binaries/control.o + .group 0x00000000 0x8 binaries/control.o + .group 0x00000000 0x8 binaries/control.o + .group 0x00000000 0x8 binaries/control.o + .group 0x00000000 0x8 binaries/control.o + .group 0x00000000 0x8 binaries/control.o + .group 0x00000000 0x8 binaries/control.o + .group 0x00000000 0x8 binaries/control.o + .group 0x00000000 0x8 binaries/control.o + .group 0x00000000 0x8 binaries/control.o + .group 0x00000000 0x8 binaries/control.o + .group 0x00000000 0x8 binaries/control.o + .group 0x00000000 0x8 binaries/control.o + .group 0x00000000 0x8 binaries/control.o + .group 0x00000000 0x8 binaries/control.o + .group 0x00000000 0x8 binaries/control.o + .group 0x00000000 0x8 binaries/control.o + .group 0x00000000 0x8 binaries/control.o + .group 0x00000000 0x8 binaries/control.o + .group 0x00000000 0x8 binaries/control.o + .group 0x00000000 0x8 binaries/control.o + .group 0x00000000 0x8 binaries/control.o + .group 0x00000000 0x8 binaries/control.o + .group 0x00000000 0x8 binaries/control.o + .group 0x00000000 0x8 binaries/control.o + .group 0x00000000 0x8 binaries/control.o + .group 0x00000000 0x8 binaries/control.o + .group 0x00000000 0x8 binaries/control.o + .group 0x00000000 0x8 binaries/control.o + .debug_macro 0x00000000 0x838 binaries/control.o + .debug_macro 0x00000000 0x58 binaries/control.o + .debug_macro 0x00000000 0xb2 binaries/control.o + .debug_macro 0x00000000 0x6a binaries/control.o + .debug_macro 0x00000000 0x52 binaries/control.o + .debug_macro 0x00000000 0x10 binaries/control.o + .debug_macro 0x00000000 0x16 binaries/control.o + .debug_macro 0x00000000 0x1c binaries/control.o + .debug_macro 0x00000000 0x1c binaries/control.o + .debug_macro 0x00000000 0x10 binaries/control.o + .debug_macro 0x00000000 0x28 binaries/control.o + .debug_macro 0x00000000 0x1c1 binaries/control.o + .debug_macro 0x00000000 0xa0 binaries/control.o + .debug_macro 0x00000000 0x10 binaries/control.o + .debug_macro 0x00000000 0x22 binaries/control.o + .debug_macro 0x00000000 0x46 binaries/control.o + .debug_macro 0x00000000 0xfa binaries/control.o + .debug_macro 0x00000000 0xdd binaries/control.o + .debug_macro 0x00000000 0x91 binaries/control.o + .debug_macro 0x00000000 0x8e binaries/control.o + .debug_macro 0x00000000 0x82 binaries/control.o + .debug_macro 0x00000000 0x2e binaries/control.o + .debug_macro 0x00000000 0x3a binaries/control.o + .debug_macro 0x00000000 0x4c binaries/control.o + .debug_macro 0x00000000 0x3a binaries/control.o + .debug_macro 0x00000000 0xa0 binaries/control.o + .debug_macro 0x00000000 0x34 binaries/control.o + .debug_macro 0x00000000 0x7c binaries/control.o + .debug_macro 0x00000000 0x1c binaries/control.o + .debug_macro 0x00000000 0xee binaries/control.o + .debug_macro 0x00000000 0x7c binaries/control.o + .debug_macro 0x00000000 0x20 binaries/control.o + .debug_macro 0x00000000 0x10 binaries/control.o + .debug_macro 0x00000000 0x1c binaries/control.o + .debug_macro 0x00000000 0x34 binaries/control.o + .debug_macro 0x00000000 0xeb binaries/control.o + .debug_macro 0x00000000 0x8e binaries/control.o + .group 0x00000000 0x8 binaries/create.o + .group 0x00000000 0x8 binaries/create.o + .group 0x00000000 0x8 binaries/create.o + .group 0x00000000 0x8 binaries/create.o + .group 0x00000000 0x8 binaries/create.o + .group 0x00000000 0x8 binaries/create.o + .group 0x00000000 0x8 binaries/create.o + .group 0x00000000 0x8 binaries/create.o + .group 0x00000000 0x8 binaries/create.o + .group 0x00000000 0x8 binaries/create.o + .group 0x00000000 0x8 binaries/create.o + .group 0x00000000 0x8 binaries/create.o + .group 0x00000000 0x8 binaries/create.o + .group 0x00000000 0x8 binaries/create.o + .group 0x00000000 0x8 binaries/create.o + .group 0x00000000 0x8 binaries/create.o + .group 0x00000000 0x8 binaries/create.o + .group 0x00000000 0x8 binaries/create.o + .group 0x00000000 0x8 binaries/create.o + .group 0x00000000 0x8 binaries/create.o + .group 0x00000000 0x8 binaries/create.o + .group 0x00000000 0x8 binaries/create.o + .group 0x00000000 0x8 binaries/create.o + .group 0x00000000 0x8 binaries/create.o + .group 0x00000000 0x8 binaries/create.o + .group 0x00000000 0x8 binaries/create.o + .group 0x00000000 0x8 binaries/create.o + .group 0x00000000 0x8 binaries/create.o + .group 0x00000000 0x8 binaries/create.o + .group 0x00000000 0x8 binaries/create.o + .group 0x00000000 0x8 binaries/create.o + .group 0x00000000 0x8 binaries/create.o + .group 0x00000000 0x8 binaries/create.o + .group 0x00000000 0x8 binaries/create.o + .group 0x00000000 0x8 binaries/create.o + .group 0x00000000 0x8 binaries/create.o + .group 0x00000000 0x8 binaries/create.o + .debug_macro 0x00000000 0x838 binaries/create.o + .debug_macro 0x00000000 0x58 binaries/create.o + .debug_macro 0x00000000 0xb2 binaries/create.o + .debug_macro 0x00000000 0x6a binaries/create.o + .debug_macro 0x00000000 0x52 binaries/create.o + .debug_macro 0x00000000 0x10 binaries/create.o + .debug_macro 0x00000000 0x16 binaries/create.o + .debug_macro 0x00000000 0x1c binaries/create.o + .debug_macro 0x00000000 0x1c binaries/create.o + .debug_macro 0x00000000 0x10 binaries/create.o + .debug_macro 0x00000000 0x28 binaries/create.o + .debug_macro 0x00000000 0x1c1 binaries/create.o + .debug_macro 0x00000000 0xa0 binaries/create.o + .debug_macro 0x00000000 0x10 binaries/create.o + .debug_macro 0x00000000 0x22 binaries/create.o + .debug_macro 0x00000000 0x46 binaries/create.o + .debug_macro 0x00000000 0xfa binaries/create.o + .debug_macro 0x00000000 0xdd binaries/create.o + .debug_macro 0x00000000 0x91 binaries/create.o + .debug_macro 0x00000000 0x8e binaries/create.o + .debug_macro 0x00000000 0x82 binaries/create.o + .debug_macro 0x00000000 0x2e binaries/create.o + .debug_macro 0x00000000 0x3a binaries/create.o + .debug_macro 0x00000000 0x4c binaries/create.o + .debug_macro 0x00000000 0x3a binaries/create.o + .debug_macro 0x00000000 0xa0 binaries/create.o + .debug_macro 0x00000000 0x34 binaries/create.o + .debug_macro 0x00000000 0x7c binaries/create.o + .debug_macro 0x00000000 0x1c binaries/create.o + .debug_macro 0x00000000 0xee binaries/create.o + .debug_macro 0x00000000 0x7c binaries/create.o + .debug_macro 0x00000000 0x20 binaries/create.o + .debug_macro 0x00000000 0x10 binaries/create.o + .debug_macro 0x00000000 0x1c binaries/create.o + .debug_macro 0x00000000 0x34 binaries/create.o + .debug_macro 0x00000000 0xeb binaries/create.o + .debug_macro 0x00000000 0x8e binaries/create.o + .group 0x00000000 0x8 binaries/evec.o + .group 0x00000000 0x8 binaries/evec.o + .group 0x00000000 0x8 binaries/evec.o + .group 0x00000000 0x8 binaries/evec.o + .group 0x00000000 0x8 binaries/evec.o + .group 0x00000000 0x8 binaries/evec.o + .group 0x00000000 0x8 binaries/evec.o + .group 0x00000000 0x8 binaries/evec.o + .group 0x00000000 0x8 binaries/evec.o + .group 0x00000000 0x8 binaries/evec.o + .group 0x00000000 0x8 binaries/evec.o + .group 0x00000000 0x8 binaries/evec.o + .group 0x00000000 0x8 binaries/evec.o + .group 0x00000000 0x8 binaries/evec.o + .group 0x00000000 0x8 binaries/evec.o + .group 0x00000000 0x8 binaries/evec.o + .group 0x00000000 0x8 binaries/evec.o + .group 0x00000000 0x8 binaries/evec.o + .group 0x00000000 0x8 binaries/evec.o + .group 0x00000000 0x8 binaries/evec.o + .group 0x00000000 0x8 binaries/evec.o + .group 0x00000000 0x8 binaries/evec.o + .group 0x00000000 0x8 binaries/evec.o + .group 0x00000000 0x8 binaries/evec.o + .group 0x00000000 0x8 binaries/evec.o + .group 0x00000000 0x8 binaries/evec.o + .group 0x00000000 0x8 binaries/evec.o + .group 0x00000000 0x8 binaries/evec.o + .group 0x00000000 0x8 binaries/evec.o + .group 0x00000000 0x8 binaries/evec.o + .group 0x00000000 0x8 binaries/evec.o + .group 0x00000000 0x8 binaries/evec.o + .group 0x00000000 0x8 binaries/evec.o + .group 0x00000000 0x8 binaries/evec.o + .group 0x00000000 0x8 binaries/evec.o + .group 0x00000000 0x8 binaries/evec.o + .group 0x00000000 0x8 binaries/evec.o + .debug_macro 0x00000000 0x838 binaries/evec.o + .debug_macro 0x00000000 0x58 binaries/evec.o + .debug_macro 0x00000000 0xb2 binaries/evec.o + .debug_macro 0x00000000 0x6a binaries/evec.o + .debug_macro 0x00000000 0x52 binaries/evec.o + .debug_macro 0x00000000 0x10 binaries/evec.o + .debug_macro 0x00000000 0x16 binaries/evec.o + .debug_macro 0x00000000 0x1c binaries/evec.o + .debug_macro 0x00000000 0x1c binaries/evec.o + .debug_macro 0x00000000 0x10 binaries/evec.o + .debug_macro 0x00000000 0x28 binaries/evec.o + .debug_macro 0x00000000 0x1c1 binaries/evec.o + .debug_macro 0x00000000 0xa0 binaries/evec.o + .debug_macro 0x00000000 0x10 binaries/evec.o + .debug_macro 0x00000000 0x22 binaries/evec.o + .debug_macro 0x00000000 0x46 binaries/evec.o + .debug_macro 0x00000000 0xfa binaries/evec.o + .debug_macro 0x00000000 0xdd binaries/evec.o + .debug_macro 0x00000000 0x91 binaries/evec.o + .debug_macro 0x00000000 0x8e binaries/evec.o + .debug_macro 0x00000000 0x82 binaries/evec.o + .debug_macro 0x00000000 0x2e binaries/evec.o + .debug_macro 0x00000000 0x3a binaries/evec.o + .debug_macro 0x00000000 0x4c binaries/evec.o + .debug_macro 0x00000000 0x3a binaries/evec.o + .debug_macro 0x00000000 0xa0 binaries/evec.o + .debug_macro 0x00000000 0x34 binaries/evec.o + .debug_macro 0x00000000 0x7c binaries/evec.o + .debug_macro 0x00000000 0x1c binaries/evec.o + .debug_macro 0x00000000 0xee binaries/evec.o + .debug_macro 0x00000000 0x7c binaries/evec.o + .debug_macro 0x00000000 0x20 binaries/evec.o + .debug_macro 0x00000000 0x10 binaries/evec.o + .debug_macro 0x00000000 0x1c binaries/evec.o + .debug_macro 0x00000000 0x34 binaries/evec.o + .debug_macro 0x00000000 0xeb binaries/evec.o + .debug_macro 0x00000000 0x8e binaries/evec.o + .group 0x00000000 0x8 binaries/exit.o + .group 0x00000000 0x8 binaries/exit.o + .group 0x00000000 0x8 binaries/exit.o + .group 0x00000000 0x8 binaries/exit.o + .group 0x00000000 0x8 binaries/exit.o + .group 0x00000000 0x8 binaries/exit.o + .group 0x00000000 0x8 binaries/exit.o + .group 0x00000000 0x8 binaries/exit.o + .group 0x00000000 0x8 binaries/exit.o + .group 0x00000000 0x8 binaries/exit.o + .group 0x00000000 0x8 binaries/exit.o + .group 0x00000000 0x8 binaries/exit.o + .group 0x00000000 0x8 binaries/exit.o + .group 0x00000000 0x8 binaries/exit.o + .group 0x00000000 0x8 binaries/exit.o + .group 0x00000000 0x8 binaries/exit.o + .group 0x00000000 0x8 binaries/exit.o + .group 0x00000000 0x8 binaries/exit.o + .group 0x00000000 0x8 binaries/exit.o + .group 0x00000000 0x8 binaries/exit.o + .group 0x00000000 0x8 binaries/exit.o + .group 0x00000000 0x8 binaries/exit.o + .group 0x00000000 0x8 binaries/exit.o + .group 0x00000000 0x8 binaries/exit.o + .group 0x00000000 0x8 binaries/exit.o + .group 0x00000000 0x8 binaries/exit.o + .group 0x00000000 0x8 binaries/exit.o + .group 0x00000000 0x8 binaries/exit.o + .group 0x00000000 0x8 binaries/exit.o + .group 0x00000000 0x8 binaries/exit.o + .group 0x00000000 0x8 binaries/exit.o + .group 0x00000000 0x8 binaries/exit.o + .group 0x00000000 0x8 binaries/exit.o + .group 0x00000000 0x8 binaries/exit.o + .group 0x00000000 0x8 binaries/exit.o + .group 0x00000000 0x8 binaries/exit.o + .group 0x00000000 0x8 binaries/exit.o + .debug_macro 0x00000000 0x838 binaries/exit.o + .debug_macro 0x00000000 0x58 binaries/exit.o + .debug_macro 0x00000000 0xb2 binaries/exit.o + .debug_macro 0x00000000 0x6a binaries/exit.o + .debug_macro 0x00000000 0x52 binaries/exit.o + .debug_macro 0x00000000 0x10 binaries/exit.o + .debug_macro 0x00000000 0x16 binaries/exit.o + .debug_macro 0x00000000 0x1c binaries/exit.o + .debug_macro 0x00000000 0x1c binaries/exit.o + .debug_macro 0x00000000 0x10 binaries/exit.o + .debug_macro 0x00000000 0x28 binaries/exit.o + .debug_macro 0x00000000 0x1c1 binaries/exit.o + .debug_macro 0x00000000 0xa0 binaries/exit.o + .debug_macro 0x00000000 0x10 binaries/exit.o + .debug_macro 0x00000000 0x22 binaries/exit.o + .debug_macro 0x00000000 0x46 binaries/exit.o + .debug_macro 0x00000000 0xfa binaries/exit.o + .debug_macro 0x00000000 0xdd binaries/exit.o + .debug_macro 0x00000000 0x91 binaries/exit.o + .debug_macro 0x00000000 0x8e binaries/exit.o + .debug_macro 0x00000000 0x82 binaries/exit.o + .debug_macro 0x00000000 0x2e binaries/exit.o + .debug_macro 0x00000000 0x3a binaries/exit.o + .debug_macro 0x00000000 0x4c binaries/exit.o + .debug_macro 0x00000000 0x3a binaries/exit.o + .debug_macro 0x00000000 0xa0 binaries/exit.o + .debug_macro 0x00000000 0x34 binaries/exit.o + .debug_macro 0x00000000 0x7c binaries/exit.o + .debug_macro 0x00000000 0x1c binaries/exit.o + .debug_macro 0x00000000 0xee binaries/exit.o + .debug_macro 0x00000000 0x7c binaries/exit.o + .debug_macro 0x00000000 0x20 binaries/exit.o + .debug_macro 0x00000000 0x10 binaries/exit.o + .debug_macro 0x00000000 0x1c binaries/exit.o + .debug_macro 0x00000000 0x34 binaries/exit.o + .debug_macro 0x00000000 0xeb binaries/exit.o + .debug_macro 0x00000000 0x8e binaries/exit.o + .group 0x00000000 0x8 binaries/freebuf.o + .group 0x00000000 0x8 binaries/freebuf.o + .group 0x00000000 0x8 binaries/freebuf.o + .group 0x00000000 0x8 binaries/freebuf.o + .group 0x00000000 0x8 binaries/freebuf.o + .group 0x00000000 0x8 binaries/freebuf.o + .group 0x00000000 0x8 binaries/freebuf.o + .group 0x00000000 0x8 binaries/freebuf.o + .group 0x00000000 0x8 binaries/freebuf.o + .group 0x00000000 0x8 binaries/freebuf.o + .group 0x00000000 0x8 binaries/freebuf.o + .group 0x00000000 0x8 binaries/freebuf.o + .group 0x00000000 0x8 binaries/freebuf.o + .group 0x00000000 0x8 binaries/freebuf.o + .group 0x00000000 0x8 binaries/freebuf.o + .group 0x00000000 0x8 binaries/freebuf.o + .group 0x00000000 0x8 binaries/freebuf.o + .group 0x00000000 0x8 binaries/freebuf.o + .group 0x00000000 0x8 binaries/freebuf.o + .group 0x00000000 0x8 binaries/freebuf.o + .group 0x00000000 0x8 binaries/freebuf.o + .group 0x00000000 0x8 binaries/freebuf.o + .group 0x00000000 0x8 binaries/freebuf.o + .group 0x00000000 0x8 binaries/freebuf.o + .group 0x00000000 0x8 binaries/freebuf.o + .group 0x00000000 0x8 binaries/freebuf.o + .group 0x00000000 0x8 binaries/freebuf.o + .group 0x00000000 0x8 binaries/freebuf.o + .group 0x00000000 0x8 binaries/freebuf.o + .group 0x00000000 0x8 binaries/freebuf.o + .group 0x00000000 0x8 binaries/freebuf.o + .group 0x00000000 0x8 binaries/freebuf.o + .group 0x00000000 0x8 binaries/freebuf.o + .group 0x00000000 0x8 binaries/freebuf.o + .group 0x00000000 0x8 binaries/freebuf.o + .group 0x00000000 0x8 binaries/freebuf.o + .group 0x00000000 0x8 binaries/freebuf.o + .debug_macro 0x00000000 0x838 binaries/freebuf.o + .debug_macro 0x00000000 0x58 binaries/freebuf.o + .debug_macro 0x00000000 0xb2 binaries/freebuf.o + .debug_macro 0x00000000 0x6a binaries/freebuf.o + .debug_macro 0x00000000 0x52 binaries/freebuf.o + .debug_macro 0x00000000 0x10 binaries/freebuf.o + .debug_macro 0x00000000 0x16 binaries/freebuf.o + .debug_macro 0x00000000 0x1c binaries/freebuf.o + .debug_macro 0x00000000 0x1c binaries/freebuf.o + .debug_macro 0x00000000 0x10 binaries/freebuf.o + .debug_macro 0x00000000 0x28 binaries/freebuf.o + .debug_macro 0x00000000 0x1c1 binaries/freebuf.o + .debug_macro 0x00000000 0xa0 binaries/freebuf.o + .debug_macro 0x00000000 0x10 binaries/freebuf.o + .debug_macro 0x00000000 0x22 binaries/freebuf.o + .debug_macro 0x00000000 0x46 binaries/freebuf.o + .debug_macro 0x00000000 0xfa binaries/freebuf.o + .debug_macro 0x00000000 0xdd binaries/freebuf.o + .debug_macro 0x00000000 0x91 binaries/freebuf.o + .debug_macro 0x00000000 0x8e binaries/freebuf.o + .debug_macro 0x00000000 0x82 binaries/freebuf.o + .debug_macro 0x00000000 0x2e binaries/freebuf.o + .debug_macro 0x00000000 0x3a binaries/freebuf.o + .debug_macro 0x00000000 0x4c binaries/freebuf.o + .debug_macro 0x00000000 0x3a binaries/freebuf.o + .debug_macro 0x00000000 0xa0 binaries/freebuf.o + .debug_macro 0x00000000 0x34 binaries/freebuf.o + .debug_macro 0x00000000 0x7c binaries/freebuf.o + .debug_macro 0x00000000 0x1c binaries/freebuf.o + .debug_macro 0x00000000 0xee binaries/freebuf.o + .debug_macro 0x00000000 0x7c binaries/freebuf.o + .debug_macro 0x00000000 0x20 binaries/freebuf.o + .debug_macro 0x00000000 0x10 binaries/freebuf.o + .debug_macro 0x00000000 0x1c binaries/freebuf.o + .debug_macro 0x00000000 0x34 binaries/freebuf.o + .debug_macro 0x00000000 0xeb binaries/freebuf.o + .debug_macro 0x00000000 0x8e binaries/freebuf.o + .group 0x00000000 0x8 binaries/freemem.o + .group 0x00000000 0x8 binaries/freemem.o + .group 0x00000000 0x8 binaries/freemem.o + .group 0x00000000 0x8 binaries/freemem.o + .group 0x00000000 0x8 binaries/freemem.o + .group 0x00000000 0x8 binaries/freemem.o + .group 0x00000000 0x8 binaries/freemem.o + .group 0x00000000 0x8 binaries/freemem.o + .group 0x00000000 0x8 binaries/freemem.o + .group 0x00000000 0x8 binaries/freemem.o + .group 0x00000000 0x8 binaries/freemem.o + .group 0x00000000 0x8 binaries/freemem.o + .group 0x00000000 0x8 binaries/freemem.o + .group 0x00000000 0x8 binaries/freemem.o + .group 0x00000000 0x8 binaries/freemem.o + .group 0x00000000 0x8 binaries/freemem.o + .group 0x00000000 0x8 binaries/freemem.o + .group 0x00000000 0x8 binaries/freemem.o + .group 0x00000000 0x8 binaries/freemem.o + .group 0x00000000 0x8 binaries/freemem.o + .group 0x00000000 0x8 binaries/freemem.o + .group 0x00000000 0x8 binaries/freemem.o + .group 0x00000000 0x8 binaries/freemem.o + .group 0x00000000 0x8 binaries/freemem.o + .group 0x00000000 0x8 binaries/freemem.o + .group 0x00000000 0x8 binaries/freemem.o + .group 0x00000000 0x8 binaries/freemem.o + .group 0x00000000 0x8 binaries/freemem.o + .group 0x00000000 0x8 binaries/freemem.o + .group 0x00000000 0x8 binaries/freemem.o + .group 0x00000000 0x8 binaries/freemem.o + .group 0x00000000 0x8 binaries/freemem.o + .group 0x00000000 0x8 binaries/freemem.o + .group 0x00000000 0x8 binaries/freemem.o + .group 0x00000000 0x8 binaries/freemem.o + .group 0x00000000 0x8 binaries/freemem.o + .group 0x00000000 0x8 binaries/freemem.o + .debug_macro 0x00000000 0x838 binaries/freemem.o + .debug_macro 0x00000000 0x58 binaries/freemem.o + .debug_macro 0x00000000 0xb2 binaries/freemem.o + .debug_macro 0x00000000 0x6a binaries/freemem.o + .debug_macro 0x00000000 0x52 binaries/freemem.o + .debug_macro 0x00000000 0x10 binaries/freemem.o + .debug_macro 0x00000000 0x16 binaries/freemem.o + .debug_macro 0x00000000 0x1c binaries/freemem.o + .debug_macro 0x00000000 0x1c binaries/freemem.o + .debug_macro 0x00000000 0x10 binaries/freemem.o + .debug_macro 0x00000000 0x28 binaries/freemem.o + .debug_macro 0x00000000 0x1c1 binaries/freemem.o + .debug_macro 0x00000000 0xa0 binaries/freemem.o + .debug_macro 0x00000000 0x10 binaries/freemem.o + .debug_macro 0x00000000 0x22 binaries/freemem.o + .debug_macro 0x00000000 0x46 binaries/freemem.o + .debug_macro 0x00000000 0xfa binaries/freemem.o + .debug_macro 0x00000000 0xdd binaries/freemem.o + .debug_macro 0x00000000 0x91 binaries/freemem.o + .debug_macro 0x00000000 0x8e binaries/freemem.o + .debug_macro 0x00000000 0x82 binaries/freemem.o + .debug_macro 0x00000000 0x2e binaries/freemem.o + .debug_macro 0x00000000 0x3a binaries/freemem.o + .debug_macro 0x00000000 0x4c binaries/freemem.o + .debug_macro 0x00000000 0x3a binaries/freemem.o + .debug_macro 0x00000000 0xa0 binaries/freemem.o + .debug_macro 0x00000000 0x34 binaries/freemem.o + .debug_macro 0x00000000 0x7c binaries/freemem.o + .debug_macro 0x00000000 0x1c binaries/freemem.o + .debug_macro 0x00000000 0xee binaries/freemem.o + .debug_macro 0x00000000 0x7c binaries/freemem.o + .debug_macro 0x00000000 0x20 binaries/freemem.o + .debug_macro 0x00000000 0x10 binaries/freemem.o + .debug_macro 0x00000000 0x1c binaries/freemem.o + .debug_macro 0x00000000 0x34 binaries/freemem.o + .debug_macro 0x00000000 0xeb binaries/freemem.o + .debug_macro 0x00000000 0x8e binaries/freemem.o + .group 0x00000000 0x8 binaries/getbuf.o + .group 0x00000000 0x8 binaries/getbuf.o + .group 0x00000000 0x8 binaries/getbuf.o + .group 0x00000000 0x8 binaries/getbuf.o + .group 0x00000000 0x8 binaries/getbuf.o + .group 0x00000000 0x8 binaries/getbuf.o + .group 0x00000000 0x8 binaries/getbuf.o + .group 0x00000000 0x8 binaries/getbuf.o + .group 0x00000000 0x8 binaries/getbuf.o + .group 0x00000000 0x8 binaries/getbuf.o + .group 0x00000000 0x8 binaries/getbuf.o + .group 0x00000000 0x8 binaries/getbuf.o + .group 0x00000000 0x8 binaries/getbuf.o + .group 0x00000000 0x8 binaries/getbuf.o + .group 0x00000000 0x8 binaries/getbuf.o + .group 0x00000000 0x8 binaries/getbuf.o + .group 0x00000000 0x8 binaries/getbuf.o + .group 0x00000000 0x8 binaries/getbuf.o + .group 0x00000000 0x8 binaries/getbuf.o + .group 0x00000000 0x8 binaries/getbuf.o + .group 0x00000000 0x8 binaries/getbuf.o + .group 0x00000000 0x8 binaries/getbuf.o + .group 0x00000000 0x8 binaries/getbuf.o + .group 0x00000000 0x8 binaries/getbuf.o + .group 0x00000000 0x8 binaries/getbuf.o + .group 0x00000000 0x8 binaries/getbuf.o + .group 0x00000000 0x8 binaries/getbuf.o + .group 0x00000000 0x8 binaries/getbuf.o + .group 0x00000000 0x8 binaries/getbuf.o + .group 0x00000000 0x8 binaries/getbuf.o + .group 0x00000000 0x8 binaries/getbuf.o + .group 0x00000000 0x8 binaries/getbuf.o + .group 0x00000000 0x8 binaries/getbuf.o + .group 0x00000000 0x8 binaries/getbuf.o + .group 0x00000000 0x8 binaries/getbuf.o + .group 0x00000000 0x8 binaries/getbuf.o + .group 0x00000000 0x8 binaries/getbuf.o + .debug_macro 0x00000000 0x838 binaries/getbuf.o + .debug_macro 0x00000000 0x58 binaries/getbuf.o + .debug_macro 0x00000000 0xb2 binaries/getbuf.o + .debug_macro 0x00000000 0x6a binaries/getbuf.o + .debug_macro 0x00000000 0x52 binaries/getbuf.o + .debug_macro 0x00000000 0x10 binaries/getbuf.o + .debug_macro 0x00000000 0x16 binaries/getbuf.o + .debug_macro 0x00000000 0x1c binaries/getbuf.o + .debug_macro 0x00000000 0x1c binaries/getbuf.o + .debug_macro 0x00000000 0x10 binaries/getbuf.o + .debug_macro 0x00000000 0x28 binaries/getbuf.o + .debug_macro 0x00000000 0x1c1 binaries/getbuf.o + .debug_macro 0x00000000 0xa0 binaries/getbuf.o + .debug_macro 0x00000000 0x10 binaries/getbuf.o + .debug_macro 0x00000000 0x22 binaries/getbuf.o + .debug_macro 0x00000000 0x46 binaries/getbuf.o + .debug_macro 0x00000000 0xfa binaries/getbuf.o + .debug_macro 0x00000000 0xdd binaries/getbuf.o + .debug_macro 0x00000000 0x91 binaries/getbuf.o + .debug_macro 0x00000000 0x8e binaries/getbuf.o + .debug_macro 0x00000000 0x82 binaries/getbuf.o + .debug_macro 0x00000000 0x2e binaries/getbuf.o + .debug_macro 0x00000000 0x3a binaries/getbuf.o + .debug_macro 0x00000000 0x4c binaries/getbuf.o + .debug_macro 0x00000000 0x3a binaries/getbuf.o + .debug_macro 0x00000000 0xa0 binaries/getbuf.o + .debug_macro 0x00000000 0x34 binaries/getbuf.o + .debug_macro 0x00000000 0x7c binaries/getbuf.o + .debug_macro 0x00000000 0x1c binaries/getbuf.o + .debug_macro 0x00000000 0xee binaries/getbuf.o + .debug_macro 0x00000000 0x7c binaries/getbuf.o + .debug_macro 0x00000000 0x20 binaries/getbuf.o + .debug_macro 0x00000000 0x10 binaries/getbuf.o + .debug_macro 0x00000000 0x1c binaries/getbuf.o + .debug_macro 0x00000000 0x34 binaries/getbuf.o + .debug_macro 0x00000000 0xeb binaries/getbuf.o + .debug_macro 0x00000000 0x8e binaries/getbuf.o + .group 0x00000000 0x8 binaries/getc.o + .group 0x00000000 0x8 binaries/getc.o + .group 0x00000000 0x8 binaries/getc.o + .group 0x00000000 0x8 binaries/getc.o + .group 0x00000000 0x8 binaries/getc.o + .group 0x00000000 0x8 binaries/getc.o + .group 0x00000000 0x8 binaries/getc.o + .group 0x00000000 0x8 binaries/getc.o + .group 0x00000000 0x8 binaries/getc.o + .group 0x00000000 0x8 binaries/getc.o + .group 0x00000000 0x8 binaries/getc.o + .group 0x00000000 0x8 binaries/getc.o + .group 0x00000000 0x8 binaries/getc.o + .group 0x00000000 0x8 binaries/getc.o + .group 0x00000000 0x8 binaries/getc.o + .group 0x00000000 0x8 binaries/getc.o + .group 0x00000000 0x8 binaries/getc.o + .group 0x00000000 0x8 binaries/getc.o + .group 0x00000000 0x8 binaries/getc.o + .group 0x00000000 0x8 binaries/getc.o + .group 0x00000000 0x8 binaries/getc.o + .group 0x00000000 0x8 binaries/getc.o + .group 0x00000000 0x8 binaries/getc.o + .group 0x00000000 0x8 binaries/getc.o + .group 0x00000000 0x8 binaries/getc.o + .group 0x00000000 0x8 binaries/getc.o + .group 0x00000000 0x8 binaries/getc.o + .group 0x00000000 0x8 binaries/getc.o + .group 0x00000000 0x8 binaries/getc.o + .group 0x00000000 0x8 binaries/getc.o + .group 0x00000000 0x8 binaries/getc.o + .group 0x00000000 0x8 binaries/getc.o + .group 0x00000000 0x8 binaries/getc.o + .group 0x00000000 0x8 binaries/getc.o + .group 0x00000000 0x8 binaries/getc.o + .group 0x00000000 0x8 binaries/getc.o + .group 0x00000000 0x8 binaries/getc.o + .debug_macro 0x00000000 0x838 binaries/getc.o + .debug_macro 0x00000000 0x58 binaries/getc.o + .debug_macro 0x00000000 0xb2 binaries/getc.o + .debug_macro 0x00000000 0x6a binaries/getc.o + .debug_macro 0x00000000 0x52 binaries/getc.o + .debug_macro 0x00000000 0x10 binaries/getc.o + .debug_macro 0x00000000 0x16 binaries/getc.o + .debug_macro 0x00000000 0x1c binaries/getc.o + .debug_macro 0x00000000 0x1c binaries/getc.o + .debug_macro 0x00000000 0x10 binaries/getc.o + .debug_macro 0x00000000 0x28 binaries/getc.o + .debug_macro 0x00000000 0x1c1 binaries/getc.o + .debug_macro 0x00000000 0xa0 binaries/getc.o + .debug_macro 0x00000000 0x10 binaries/getc.o + .debug_macro 0x00000000 0x22 binaries/getc.o + .debug_macro 0x00000000 0x46 binaries/getc.o + .debug_macro 0x00000000 0xfa binaries/getc.o + .debug_macro 0x00000000 0xdd binaries/getc.o + .debug_macro 0x00000000 0x91 binaries/getc.o + .debug_macro 0x00000000 0x8e binaries/getc.o + .debug_macro 0x00000000 0x82 binaries/getc.o + .debug_macro 0x00000000 0x2e binaries/getc.o + .debug_macro 0x00000000 0x3a binaries/getc.o + .debug_macro 0x00000000 0x4c binaries/getc.o + .debug_macro 0x00000000 0x3a binaries/getc.o + .debug_macro 0x00000000 0xa0 binaries/getc.o + .debug_macro 0x00000000 0x34 binaries/getc.o + .debug_macro 0x00000000 0x7c binaries/getc.o + .debug_macro 0x00000000 0x1c binaries/getc.o + .debug_macro 0x00000000 0xee binaries/getc.o + .debug_macro 0x00000000 0x7c binaries/getc.o + .debug_macro 0x00000000 0x20 binaries/getc.o + .debug_macro 0x00000000 0x10 binaries/getc.o + .debug_macro 0x00000000 0x1c binaries/getc.o + .debug_macro 0x00000000 0x34 binaries/getc.o + .debug_macro 0x00000000 0xeb binaries/getc.o + .debug_macro 0x00000000 0x8e binaries/getc.o + .group 0x00000000 0x8 binaries/getdev.o + .group 0x00000000 0x8 binaries/getdev.o + .group 0x00000000 0x8 binaries/getdev.o + .group 0x00000000 0x8 binaries/getdev.o + .group 0x00000000 0x8 binaries/getdev.o + .group 0x00000000 0x8 binaries/getdev.o + .group 0x00000000 0x8 binaries/getdev.o + .group 0x00000000 0x8 binaries/getdev.o + .group 0x00000000 0x8 binaries/getdev.o + .group 0x00000000 0x8 binaries/getdev.o + .group 0x00000000 0x8 binaries/getdev.o + .group 0x00000000 0x8 binaries/getdev.o + .group 0x00000000 0x8 binaries/getdev.o + .group 0x00000000 0x8 binaries/getdev.o + .group 0x00000000 0x8 binaries/getdev.o + .group 0x00000000 0x8 binaries/getdev.o + .group 0x00000000 0x8 binaries/getdev.o + .group 0x00000000 0x8 binaries/getdev.o + .group 0x00000000 0x8 binaries/getdev.o + .group 0x00000000 0x8 binaries/getdev.o + .group 0x00000000 0x8 binaries/getdev.o + .group 0x00000000 0x8 binaries/getdev.o + .group 0x00000000 0x8 binaries/getdev.o + .group 0x00000000 0x8 binaries/getdev.o + .group 0x00000000 0x8 binaries/getdev.o + .group 0x00000000 0x8 binaries/getdev.o + .group 0x00000000 0x8 binaries/getdev.o + .group 0x00000000 0x8 binaries/getdev.o + .group 0x00000000 0x8 binaries/getdev.o + .group 0x00000000 0x8 binaries/getdev.o + .group 0x00000000 0x8 binaries/getdev.o + .group 0x00000000 0x8 binaries/getdev.o + .group 0x00000000 0x8 binaries/getdev.o + .group 0x00000000 0x8 binaries/getdev.o + .group 0x00000000 0x8 binaries/getdev.o + .group 0x00000000 0x8 binaries/getdev.o + .group 0x00000000 0x8 binaries/getdev.o + .debug_macro 0x00000000 0x838 binaries/getdev.o + .debug_macro 0x00000000 0x58 binaries/getdev.o + .debug_macro 0x00000000 0xb2 binaries/getdev.o + .debug_macro 0x00000000 0x6a binaries/getdev.o + .debug_macro 0x00000000 0x52 binaries/getdev.o + .debug_macro 0x00000000 0x10 binaries/getdev.o + .debug_macro 0x00000000 0x16 binaries/getdev.o + .debug_macro 0x00000000 0x1c binaries/getdev.o + .debug_macro 0x00000000 0x1c binaries/getdev.o + .debug_macro 0x00000000 0x10 binaries/getdev.o + .debug_macro 0x00000000 0x28 binaries/getdev.o + .debug_macro 0x00000000 0x1c1 binaries/getdev.o + .debug_macro 0x00000000 0xa0 binaries/getdev.o + .debug_macro 0x00000000 0x10 binaries/getdev.o + .debug_macro 0x00000000 0x22 binaries/getdev.o + .debug_macro 0x00000000 0x46 binaries/getdev.o + .debug_macro 0x00000000 0xfa binaries/getdev.o + .debug_macro 0x00000000 0xdd binaries/getdev.o + .debug_macro 0x00000000 0x91 binaries/getdev.o + .debug_macro 0x00000000 0x8e binaries/getdev.o + .debug_macro 0x00000000 0x82 binaries/getdev.o + .debug_macro 0x00000000 0x2e binaries/getdev.o + .debug_macro 0x00000000 0x3a binaries/getdev.o + .debug_macro 0x00000000 0x4c binaries/getdev.o + .debug_macro 0x00000000 0x3a binaries/getdev.o + .debug_macro 0x00000000 0xa0 binaries/getdev.o + .debug_macro 0x00000000 0x34 binaries/getdev.o + .debug_macro 0x00000000 0x7c binaries/getdev.o + .debug_macro 0x00000000 0x1c binaries/getdev.o + .debug_macro 0x00000000 0xee binaries/getdev.o + .debug_macro 0x00000000 0x7c binaries/getdev.o + .debug_macro 0x00000000 0x20 binaries/getdev.o + .debug_macro 0x00000000 0x10 binaries/getdev.o + .debug_macro 0x00000000 0x1c binaries/getdev.o + .debug_macro 0x00000000 0x34 binaries/getdev.o + .debug_macro 0x00000000 0xeb binaries/getdev.o + .debug_macro 0x00000000 0x8e binaries/getdev.o + .group 0x00000000 0x8 binaries/getitem.o + .group 0x00000000 0x8 binaries/getitem.o + .group 0x00000000 0x8 binaries/getitem.o + .group 0x00000000 0x8 binaries/getitem.o + .group 0x00000000 0x8 binaries/getitem.o + .group 0x00000000 0x8 binaries/getitem.o + .group 0x00000000 0x8 binaries/getitem.o + .group 0x00000000 0x8 binaries/getitem.o + .group 0x00000000 0x8 binaries/getitem.o + .group 0x00000000 0x8 binaries/getitem.o + .group 0x00000000 0x8 binaries/getitem.o + .group 0x00000000 0x8 binaries/getitem.o + .group 0x00000000 0x8 binaries/getitem.o + .group 0x00000000 0x8 binaries/getitem.o + .group 0x00000000 0x8 binaries/getitem.o + .group 0x00000000 0x8 binaries/getitem.o + .group 0x00000000 0x8 binaries/getitem.o + .group 0x00000000 0x8 binaries/getitem.o + .group 0x00000000 0x8 binaries/getitem.o + .group 0x00000000 0x8 binaries/getitem.o + .group 0x00000000 0x8 binaries/getitem.o + .group 0x00000000 0x8 binaries/getitem.o + .group 0x00000000 0x8 binaries/getitem.o + .group 0x00000000 0x8 binaries/getitem.o + .group 0x00000000 0x8 binaries/getitem.o + .group 0x00000000 0x8 binaries/getitem.o + .group 0x00000000 0x8 binaries/getitem.o + .group 0x00000000 0x8 binaries/getitem.o + .group 0x00000000 0x8 binaries/getitem.o + .group 0x00000000 0x8 binaries/getitem.o + .group 0x00000000 0x8 binaries/getitem.o + .group 0x00000000 0x8 binaries/getitem.o + .group 0x00000000 0x8 binaries/getitem.o + .group 0x00000000 0x8 binaries/getitem.o + .group 0x00000000 0x8 binaries/getitem.o + .group 0x00000000 0x8 binaries/getitem.o + .group 0x00000000 0x8 binaries/getitem.o + .debug_macro 0x00000000 0x838 binaries/getitem.o + .debug_macro 0x00000000 0x58 binaries/getitem.o + .debug_macro 0x00000000 0xb2 binaries/getitem.o + .debug_macro 0x00000000 0x6a binaries/getitem.o + .debug_macro 0x00000000 0x52 binaries/getitem.o + .debug_macro 0x00000000 0x10 binaries/getitem.o + .debug_macro 0x00000000 0x16 binaries/getitem.o + .debug_macro 0x00000000 0x1c binaries/getitem.o + .debug_macro 0x00000000 0x1c binaries/getitem.o + .debug_macro 0x00000000 0x10 binaries/getitem.o + .debug_macro 0x00000000 0x28 binaries/getitem.o + .debug_macro 0x00000000 0x1c1 binaries/getitem.o + .debug_macro 0x00000000 0xa0 binaries/getitem.o + .debug_macro 0x00000000 0x10 binaries/getitem.o + .debug_macro 0x00000000 0x22 binaries/getitem.o + .debug_macro 0x00000000 0x46 binaries/getitem.o + .debug_macro 0x00000000 0xfa binaries/getitem.o + .debug_macro 0x00000000 0xdd binaries/getitem.o + .debug_macro 0x00000000 0x91 binaries/getitem.o + .debug_macro 0x00000000 0x8e binaries/getitem.o + .debug_macro 0x00000000 0x82 binaries/getitem.o + .debug_macro 0x00000000 0x2e binaries/getitem.o + .debug_macro 0x00000000 0x3a binaries/getitem.o + .debug_macro 0x00000000 0x4c binaries/getitem.o + .debug_macro 0x00000000 0x3a binaries/getitem.o + .debug_macro 0x00000000 0xa0 binaries/getitem.o + .debug_macro 0x00000000 0x34 binaries/getitem.o + .debug_macro 0x00000000 0x7c binaries/getitem.o + .debug_macro 0x00000000 0x1c binaries/getitem.o + .debug_macro 0x00000000 0xee binaries/getitem.o + .debug_macro 0x00000000 0x7c binaries/getitem.o + .debug_macro 0x00000000 0x20 binaries/getitem.o + .debug_macro 0x00000000 0x10 binaries/getitem.o + .debug_macro 0x00000000 0x1c binaries/getitem.o + .debug_macro 0x00000000 0x34 binaries/getitem.o + .debug_macro 0x00000000 0xeb binaries/getitem.o + .debug_macro 0x00000000 0x8e binaries/getitem.o + .group 0x00000000 0x8 binaries/getmem.o + .group 0x00000000 0x8 binaries/getmem.o + .group 0x00000000 0x8 binaries/getmem.o + .group 0x00000000 0x8 binaries/getmem.o + .group 0x00000000 0x8 binaries/getmem.o + .group 0x00000000 0x8 binaries/getmem.o + .group 0x00000000 0x8 binaries/getmem.o + .group 0x00000000 0x8 binaries/getmem.o + .group 0x00000000 0x8 binaries/getmem.o + .group 0x00000000 0x8 binaries/getmem.o + .group 0x00000000 0x8 binaries/getmem.o + .group 0x00000000 0x8 binaries/getmem.o + .group 0x00000000 0x8 binaries/getmem.o + .group 0x00000000 0x8 binaries/getmem.o + .group 0x00000000 0x8 binaries/getmem.o + .group 0x00000000 0x8 binaries/getmem.o + .group 0x00000000 0x8 binaries/getmem.o + .group 0x00000000 0x8 binaries/getmem.o + .group 0x00000000 0x8 binaries/getmem.o + .group 0x00000000 0x8 binaries/getmem.o + .group 0x00000000 0x8 binaries/getmem.o + .group 0x00000000 0x8 binaries/getmem.o + .group 0x00000000 0x8 binaries/getmem.o + .group 0x00000000 0x8 binaries/getmem.o + .group 0x00000000 0x8 binaries/getmem.o + .group 0x00000000 0x8 binaries/getmem.o + .group 0x00000000 0x8 binaries/getmem.o + .group 0x00000000 0x8 binaries/getmem.o + .group 0x00000000 0x8 binaries/getmem.o + .group 0x00000000 0x8 binaries/getmem.o + .group 0x00000000 0x8 binaries/getmem.o + .group 0x00000000 0x8 binaries/getmem.o + .group 0x00000000 0x8 binaries/getmem.o + .group 0x00000000 0x8 binaries/getmem.o + .group 0x00000000 0x8 binaries/getmem.o + .group 0x00000000 0x8 binaries/getmem.o + .group 0x00000000 0x8 binaries/getmem.o + .debug_macro 0x00000000 0x838 binaries/getmem.o + .debug_macro 0x00000000 0x58 binaries/getmem.o + .debug_macro 0x00000000 0xb2 binaries/getmem.o + .debug_macro 0x00000000 0x6a binaries/getmem.o + .debug_macro 0x00000000 0x52 binaries/getmem.o + .debug_macro 0x00000000 0x10 binaries/getmem.o + .debug_macro 0x00000000 0x16 binaries/getmem.o + .debug_macro 0x00000000 0x1c binaries/getmem.o + .debug_macro 0x00000000 0x1c binaries/getmem.o + .debug_macro 0x00000000 0x10 binaries/getmem.o + .debug_macro 0x00000000 0x28 binaries/getmem.o + .debug_macro 0x00000000 0x1c1 binaries/getmem.o + .debug_macro 0x00000000 0xa0 binaries/getmem.o + .debug_macro 0x00000000 0x10 binaries/getmem.o + .debug_macro 0x00000000 0x22 binaries/getmem.o + .debug_macro 0x00000000 0x46 binaries/getmem.o + .debug_macro 0x00000000 0xfa binaries/getmem.o + .debug_macro 0x00000000 0xdd binaries/getmem.o + .debug_macro 0x00000000 0x91 binaries/getmem.o + .debug_macro 0x00000000 0x8e binaries/getmem.o + .debug_macro 0x00000000 0x82 binaries/getmem.o + .debug_macro 0x00000000 0x2e binaries/getmem.o + .debug_macro 0x00000000 0x3a binaries/getmem.o + .debug_macro 0x00000000 0x4c binaries/getmem.o + .debug_macro 0x00000000 0x3a binaries/getmem.o + .debug_macro 0x00000000 0xa0 binaries/getmem.o + .debug_macro 0x00000000 0x34 binaries/getmem.o + .debug_macro 0x00000000 0x7c binaries/getmem.o + .debug_macro 0x00000000 0x1c binaries/getmem.o + .debug_macro 0x00000000 0xee binaries/getmem.o + .debug_macro 0x00000000 0x7c binaries/getmem.o + .debug_macro 0x00000000 0x20 binaries/getmem.o + .debug_macro 0x00000000 0x10 binaries/getmem.o + .debug_macro 0x00000000 0x1c binaries/getmem.o + .debug_macro 0x00000000 0x34 binaries/getmem.o + .debug_macro 0x00000000 0xeb binaries/getmem.o + .debug_macro 0x00000000 0x8e binaries/getmem.o + .group 0x00000000 0x8 binaries/getpid.o + .group 0x00000000 0x8 binaries/getpid.o + .group 0x00000000 0x8 binaries/getpid.o + .group 0x00000000 0x8 binaries/getpid.o + .group 0x00000000 0x8 binaries/getpid.o + .group 0x00000000 0x8 binaries/getpid.o + .group 0x00000000 0x8 binaries/getpid.o + .group 0x00000000 0x8 binaries/getpid.o + .group 0x00000000 0x8 binaries/getpid.o + .group 0x00000000 0x8 binaries/getpid.o + .group 0x00000000 0x8 binaries/getpid.o + .group 0x00000000 0x8 binaries/getpid.o + .group 0x00000000 0x8 binaries/getpid.o + .group 0x00000000 0x8 binaries/getpid.o + .group 0x00000000 0x8 binaries/getpid.o + .group 0x00000000 0x8 binaries/getpid.o + .group 0x00000000 0x8 binaries/getpid.o + .group 0x00000000 0x8 binaries/getpid.o + .group 0x00000000 0x8 binaries/getpid.o + .group 0x00000000 0x8 binaries/getpid.o + .group 0x00000000 0x8 binaries/getpid.o + .group 0x00000000 0x8 binaries/getpid.o + .group 0x00000000 0x8 binaries/getpid.o + .group 0x00000000 0x8 binaries/getpid.o + .group 0x00000000 0x8 binaries/getpid.o + .group 0x00000000 0x8 binaries/getpid.o + .group 0x00000000 0x8 binaries/getpid.o + .group 0x00000000 0x8 binaries/getpid.o + .group 0x00000000 0x8 binaries/getpid.o + .group 0x00000000 0x8 binaries/getpid.o + .group 0x00000000 0x8 binaries/getpid.o + .group 0x00000000 0x8 binaries/getpid.o + .group 0x00000000 0x8 binaries/getpid.o + .group 0x00000000 0x8 binaries/getpid.o + .group 0x00000000 0x8 binaries/getpid.o + .group 0x00000000 0x8 binaries/getpid.o + .group 0x00000000 0x8 binaries/getpid.o + .debug_macro 0x00000000 0x838 binaries/getpid.o + .debug_macro 0x00000000 0x58 binaries/getpid.o + .debug_macro 0x00000000 0xb2 binaries/getpid.o + .debug_macro 0x00000000 0x6a binaries/getpid.o + .debug_macro 0x00000000 0x52 binaries/getpid.o + .debug_macro 0x00000000 0x10 binaries/getpid.o + .debug_macro 0x00000000 0x16 binaries/getpid.o + .debug_macro 0x00000000 0x1c binaries/getpid.o + .debug_macro 0x00000000 0x1c binaries/getpid.o + .debug_macro 0x00000000 0x10 binaries/getpid.o + .debug_macro 0x00000000 0x28 binaries/getpid.o + .debug_macro 0x00000000 0x1c1 binaries/getpid.o + .debug_macro 0x00000000 0xa0 binaries/getpid.o + .debug_macro 0x00000000 0x10 binaries/getpid.o + .debug_macro 0x00000000 0x22 binaries/getpid.o + .debug_macro 0x00000000 0x46 binaries/getpid.o + .debug_macro 0x00000000 0xfa binaries/getpid.o + .debug_macro 0x00000000 0xdd binaries/getpid.o + .debug_macro 0x00000000 0x91 binaries/getpid.o + .debug_macro 0x00000000 0x8e binaries/getpid.o + .debug_macro 0x00000000 0x82 binaries/getpid.o + .debug_macro 0x00000000 0x2e binaries/getpid.o + .debug_macro 0x00000000 0x3a binaries/getpid.o + .debug_macro 0x00000000 0x4c binaries/getpid.o + .debug_macro 0x00000000 0x3a binaries/getpid.o + .debug_macro 0x00000000 0xa0 binaries/getpid.o + .debug_macro 0x00000000 0x34 binaries/getpid.o + .debug_macro 0x00000000 0x7c binaries/getpid.o + .debug_macro 0x00000000 0x1c binaries/getpid.o + .debug_macro 0x00000000 0xee binaries/getpid.o + .debug_macro 0x00000000 0x7c binaries/getpid.o + .debug_macro 0x00000000 0x20 binaries/getpid.o + .debug_macro 0x00000000 0x10 binaries/getpid.o + .debug_macro 0x00000000 0x1c binaries/getpid.o + .debug_macro 0x00000000 0x34 binaries/getpid.o + .debug_macro 0x00000000 0xeb binaries/getpid.o + .debug_macro 0x00000000 0x8e binaries/getpid.o + .group 0x00000000 0x8 binaries/getprio.o + .group 0x00000000 0x8 binaries/getprio.o + .group 0x00000000 0x8 binaries/getprio.o + .group 0x00000000 0x8 binaries/getprio.o + .group 0x00000000 0x8 binaries/getprio.o + .group 0x00000000 0x8 binaries/getprio.o + .group 0x00000000 0x8 binaries/getprio.o + .group 0x00000000 0x8 binaries/getprio.o + .group 0x00000000 0x8 binaries/getprio.o + .group 0x00000000 0x8 binaries/getprio.o + .group 0x00000000 0x8 binaries/getprio.o + .group 0x00000000 0x8 binaries/getprio.o + .group 0x00000000 0x8 binaries/getprio.o + .group 0x00000000 0x8 binaries/getprio.o + .group 0x00000000 0x8 binaries/getprio.o + .group 0x00000000 0x8 binaries/getprio.o + .group 0x00000000 0x8 binaries/getprio.o + .group 0x00000000 0x8 binaries/getprio.o + .group 0x00000000 0x8 binaries/getprio.o + .group 0x00000000 0x8 binaries/getprio.o + .group 0x00000000 0x8 binaries/getprio.o + .group 0x00000000 0x8 binaries/getprio.o + .group 0x00000000 0x8 binaries/getprio.o + .group 0x00000000 0x8 binaries/getprio.o + .group 0x00000000 0x8 binaries/getprio.o + .group 0x00000000 0x8 binaries/getprio.o + .group 0x00000000 0x8 binaries/getprio.o + .group 0x00000000 0x8 binaries/getprio.o + .group 0x00000000 0x8 binaries/getprio.o + .group 0x00000000 0x8 binaries/getprio.o + .group 0x00000000 0x8 binaries/getprio.o + .group 0x00000000 0x8 binaries/getprio.o + .group 0x00000000 0x8 binaries/getprio.o + .group 0x00000000 0x8 binaries/getprio.o + .group 0x00000000 0x8 binaries/getprio.o + .group 0x00000000 0x8 binaries/getprio.o + .group 0x00000000 0x8 binaries/getprio.o + .debug_macro 0x00000000 0x838 binaries/getprio.o + .debug_macro 0x00000000 0x58 binaries/getprio.o + .debug_macro 0x00000000 0xb2 binaries/getprio.o + .debug_macro 0x00000000 0x6a binaries/getprio.o + .debug_macro 0x00000000 0x52 binaries/getprio.o + .debug_macro 0x00000000 0x10 binaries/getprio.o + .debug_macro 0x00000000 0x16 binaries/getprio.o + .debug_macro 0x00000000 0x1c binaries/getprio.o + .debug_macro 0x00000000 0x1c binaries/getprio.o + .debug_macro 0x00000000 0x10 binaries/getprio.o + .debug_macro 0x00000000 0x28 binaries/getprio.o + .debug_macro 0x00000000 0x1c1 binaries/getprio.o + .debug_macro 0x00000000 0xa0 binaries/getprio.o + .debug_macro 0x00000000 0x10 binaries/getprio.o + .debug_macro 0x00000000 0x22 binaries/getprio.o + .debug_macro 0x00000000 0x46 binaries/getprio.o + .debug_macro 0x00000000 0xfa binaries/getprio.o + .debug_macro 0x00000000 0xdd binaries/getprio.o + .debug_macro 0x00000000 0x91 binaries/getprio.o + .debug_macro 0x00000000 0x8e binaries/getprio.o + .debug_macro 0x00000000 0x82 binaries/getprio.o + .debug_macro 0x00000000 0x2e binaries/getprio.o + .debug_macro 0x00000000 0x3a binaries/getprio.o + .debug_macro 0x00000000 0x4c binaries/getprio.o + .debug_macro 0x00000000 0x3a binaries/getprio.o + .debug_macro 0x00000000 0xa0 binaries/getprio.o + .debug_macro 0x00000000 0x34 binaries/getprio.o + .debug_macro 0x00000000 0x7c binaries/getprio.o + .debug_macro 0x00000000 0x1c binaries/getprio.o + .debug_macro 0x00000000 0xee binaries/getprio.o + .debug_macro 0x00000000 0x7c binaries/getprio.o + .debug_macro 0x00000000 0x20 binaries/getprio.o + .debug_macro 0x00000000 0x10 binaries/getprio.o + .debug_macro 0x00000000 0x1c binaries/getprio.o + .debug_macro 0x00000000 0x34 binaries/getprio.o + .debug_macro 0x00000000 0xeb binaries/getprio.o + .debug_macro 0x00000000 0x8e binaries/getprio.o + .group 0x00000000 0x8 binaries/getstk.o + .group 0x00000000 0x8 binaries/getstk.o + .group 0x00000000 0x8 binaries/getstk.o + .group 0x00000000 0x8 binaries/getstk.o + .group 0x00000000 0x8 binaries/getstk.o + .group 0x00000000 0x8 binaries/getstk.o + .group 0x00000000 0x8 binaries/getstk.o + .group 0x00000000 0x8 binaries/getstk.o + .group 0x00000000 0x8 binaries/getstk.o + .group 0x00000000 0x8 binaries/getstk.o + .group 0x00000000 0x8 binaries/getstk.o + .group 0x00000000 0x8 binaries/getstk.o + .group 0x00000000 0x8 binaries/getstk.o + .group 0x00000000 0x8 binaries/getstk.o + .group 0x00000000 0x8 binaries/getstk.o + .group 0x00000000 0x8 binaries/getstk.o + .group 0x00000000 0x8 binaries/getstk.o + .group 0x00000000 0x8 binaries/getstk.o + .group 0x00000000 0x8 binaries/getstk.o + .group 0x00000000 0x8 binaries/getstk.o + .group 0x00000000 0x8 binaries/getstk.o + .group 0x00000000 0x8 binaries/getstk.o + .group 0x00000000 0x8 binaries/getstk.o + .group 0x00000000 0x8 binaries/getstk.o + .group 0x00000000 0x8 binaries/getstk.o + .group 0x00000000 0x8 binaries/getstk.o + .group 0x00000000 0x8 binaries/getstk.o + .group 0x00000000 0x8 binaries/getstk.o + .group 0x00000000 0x8 binaries/getstk.o + .group 0x00000000 0x8 binaries/getstk.o + .group 0x00000000 0x8 binaries/getstk.o + .group 0x00000000 0x8 binaries/getstk.o + .group 0x00000000 0x8 binaries/getstk.o + .group 0x00000000 0x8 binaries/getstk.o + .group 0x00000000 0x8 binaries/getstk.o + .group 0x00000000 0x8 binaries/getstk.o + .group 0x00000000 0x8 binaries/getstk.o + .debug_macro 0x00000000 0x838 binaries/getstk.o + .debug_macro 0x00000000 0x58 binaries/getstk.o + .debug_macro 0x00000000 0xb2 binaries/getstk.o + .debug_macro 0x00000000 0x6a binaries/getstk.o + .debug_macro 0x00000000 0x52 binaries/getstk.o + .debug_macro 0x00000000 0x10 binaries/getstk.o + .debug_macro 0x00000000 0x16 binaries/getstk.o + .debug_macro 0x00000000 0x1c binaries/getstk.o + .debug_macro 0x00000000 0x1c binaries/getstk.o + .debug_macro 0x00000000 0x10 binaries/getstk.o + .debug_macro 0x00000000 0x28 binaries/getstk.o + .debug_macro 0x00000000 0x1c1 binaries/getstk.o + .debug_macro 0x00000000 0xa0 binaries/getstk.o + .debug_macro 0x00000000 0x10 binaries/getstk.o + .debug_macro 0x00000000 0x22 binaries/getstk.o + .debug_macro 0x00000000 0x46 binaries/getstk.o + .debug_macro 0x00000000 0xfa binaries/getstk.o + .debug_macro 0x00000000 0xdd binaries/getstk.o + .debug_macro 0x00000000 0x91 binaries/getstk.o + .debug_macro 0x00000000 0x8e binaries/getstk.o + .debug_macro 0x00000000 0x82 binaries/getstk.o + .debug_macro 0x00000000 0x2e binaries/getstk.o + .debug_macro 0x00000000 0x3a binaries/getstk.o + .debug_macro 0x00000000 0x4c binaries/getstk.o + .debug_macro 0x00000000 0x3a binaries/getstk.o + .debug_macro 0x00000000 0xa0 binaries/getstk.o + .debug_macro 0x00000000 0x34 binaries/getstk.o + .debug_macro 0x00000000 0x7c binaries/getstk.o + .debug_macro 0x00000000 0x1c binaries/getstk.o + .debug_macro 0x00000000 0xee binaries/getstk.o + .debug_macro 0x00000000 0x7c binaries/getstk.o + .debug_macro 0x00000000 0x20 binaries/getstk.o + .debug_macro 0x00000000 0x10 binaries/getstk.o + .debug_macro 0x00000000 0x1c binaries/getstk.o + .debug_macro 0x00000000 0x34 binaries/getstk.o + .debug_macro 0x00000000 0xeb binaries/getstk.o + .debug_macro 0x00000000 0x8e binaries/getstk.o + .group 0x00000000 0x8 binaries/gettime.o + .group 0x00000000 0x8 binaries/gettime.o + .group 0x00000000 0x8 binaries/gettime.o + .group 0x00000000 0x8 binaries/gettime.o + .group 0x00000000 0x8 binaries/gettime.o + .group 0x00000000 0x8 binaries/gettime.o + .group 0x00000000 0x8 binaries/gettime.o + .group 0x00000000 0x8 binaries/gettime.o + .group 0x00000000 0x8 binaries/gettime.o + .group 0x00000000 0x8 binaries/gettime.o + .group 0x00000000 0x8 binaries/gettime.o + .group 0x00000000 0x8 binaries/gettime.o + .group 0x00000000 0x8 binaries/gettime.o + .group 0x00000000 0x8 binaries/gettime.o + .group 0x00000000 0x8 binaries/gettime.o + .group 0x00000000 0x8 binaries/gettime.o + .group 0x00000000 0x8 binaries/gettime.o + .group 0x00000000 0x8 binaries/gettime.o + .group 0x00000000 0x8 binaries/gettime.o + .group 0x00000000 0x8 binaries/gettime.o + .group 0x00000000 0x8 binaries/gettime.o + .group 0x00000000 0x8 binaries/gettime.o + .group 0x00000000 0x8 binaries/gettime.o + .group 0x00000000 0x8 binaries/gettime.o + .group 0x00000000 0x8 binaries/gettime.o + .group 0x00000000 0x8 binaries/gettime.o + .group 0x00000000 0x8 binaries/gettime.o + .group 0x00000000 0x8 binaries/gettime.o + .group 0x00000000 0x8 binaries/gettime.o + .group 0x00000000 0x8 binaries/gettime.o + .group 0x00000000 0x8 binaries/gettime.o + .group 0x00000000 0x8 binaries/gettime.o + .group 0x00000000 0x8 binaries/gettime.o + .group 0x00000000 0x8 binaries/gettime.o + .group 0x00000000 0x8 binaries/gettime.o + .group 0x00000000 0x8 binaries/gettime.o + .group 0x00000000 0x8 binaries/gettime.o + .debug_macro 0x00000000 0x838 binaries/gettime.o + .debug_macro 0x00000000 0x58 binaries/gettime.o + .debug_macro 0x00000000 0xb2 binaries/gettime.o + .debug_macro 0x00000000 0x6a binaries/gettime.o + .debug_macro 0x00000000 0x52 binaries/gettime.o + .debug_macro 0x00000000 0x10 binaries/gettime.o + .debug_macro 0x00000000 0x16 binaries/gettime.o + .debug_macro 0x00000000 0x1c binaries/gettime.o + .debug_macro 0x00000000 0x1c binaries/gettime.o + .debug_macro 0x00000000 0x10 binaries/gettime.o + .debug_macro 0x00000000 0x28 binaries/gettime.o + .debug_macro 0x00000000 0x1c1 binaries/gettime.o + .debug_macro 0x00000000 0xa0 binaries/gettime.o + .debug_macro 0x00000000 0x10 binaries/gettime.o + .debug_macro 0x00000000 0x22 binaries/gettime.o + .debug_macro 0x00000000 0x46 binaries/gettime.o + .debug_macro 0x00000000 0xfa binaries/gettime.o + .debug_macro 0x00000000 0xdd binaries/gettime.o + .debug_macro 0x00000000 0x91 binaries/gettime.o + .debug_macro 0x00000000 0x8e binaries/gettime.o + .debug_macro 0x00000000 0x82 binaries/gettime.o + .debug_macro 0x00000000 0x2e binaries/gettime.o + .debug_macro 0x00000000 0x3a binaries/gettime.o + .debug_macro 0x00000000 0x4c binaries/gettime.o + .debug_macro 0x00000000 0x3a binaries/gettime.o + .debug_macro 0x00000000 0xa0 binaries/gettime.o + .debug_macro 0x00000000 0x34 binaries/gettime.o + .debug_macro 0x00000000 0x7c binaries/gettime.o + .debug_macro 0x00000000 0x1c binaries/gettime.o + .debug_macro 0x00000000 0xee binaries/gettime.o + .debug_macro 0x00000000 0x7c binaries/gettime.o + .debug_macro 0x00000000 0x20 binaries/gettime.o + .debug_macro 0x00000000 0x10 binaries/gettime.o + .debug_macro 0x00000000 0x1c binaries/gettime.o + .debug_macro 0x00000000 0x34 binaries/gettime.o + .debug_macro 0x00000000 0xeb binaries/gettime.o + .debug_macro 0x00000000 0x8e binaries/gettime.o + .group 0x00000000 0x8 binaries/init.o + .group 0x00000000 0x8 binaries/init.o + .group 0x00000000 0x8 binaries/init.o + .group 0x00000000 0x8 binaries/init.o + .group 0x00000000 0x8 binaries/init.o + .group 0x00000000 0x8 binaries/init.o + .group 0x00000000 0x8 binaries/init.o + .group 0x00000000 0x8 binaries/init.o + .group 0x00000000 0x8 binaries/init.o + .group 0x00000000 0x8 binaries/init.o + .group 0x00000000 0x8 binaries/init.o + .group 0x00000000 0x8 binaries/init.o + .group 0x00000000 0x8 binaries/init.o + .group 0x00000000 0x8 binaries/init.o + .group 0x00000000 0x8 binaries/init.o + .group 0x00000000 0x8 binaries/init.o + .group 0x00000000 0x8 binaries/init.o + .group 0x00000000 0x8 binaries/init.o + .group 0x00000000 0x8 binaries/init.o + .group 0x00000000 0x8 binaries/init.o + .group 0x00000000 0x8 binaries/init.o + .group 0x00000000 0x8 binaries/init.o + .group 0x00000000 0x8 binaries/init.o + .group 0x00000000 0x8 binaries/init.o + .group 0x00000000 0x8 binaries/init.o + .group 0x00000000 0x8 binaries/init.o + .group 0x00000000 0x8 binaries/init.o + .group 0x00000000 0x8 binaries/init.o + .group 0x00000000 0x8 binaries/init.o + .group 0x00000000 0x8 binaries/init.o + .group 0x00000000 0x8 binaries/init.o + .group 0x00000000 0x8 binaries/init.o + .group 0x00000000 0x8 binaries/init.o + .group 0x00000000 0x8 binaries/init.o + .group 0x00000000 0x8 binaries/init.o + .group 0x00000000 0x8 binaries/init.o + .group 0x00000000 0x8 binaries/init.o + .debug_macro 0x00000000 0x838 binaries/init.o + .debug_macro 0x00000000 0x58 binaries/init.o + .debug_macro 0x00000000 0xb2 binaries/init.o + .debug_macro 0x00000000 0x6a binaries/init.o + .debug_macro 0x00000000 0x52 binaries/init.o + .debug_macro 0x00000000 0x10 binaries/init.o + .debug_macro 0x00000000 0x16 binaries/init.o + .debug_macro 0x00000000 0x1c binaries/init.o + .debug_macro 0x00000000 0x1c binaries/init.o + .debug_macro 0x00000000 0x10 binaries/init.o + .debug_macro 0x00000000 0x28 binaries/init.o + .debug_macro 0x00000000 0x1c1 binaries/init.o + .debug_macro 0x00000000 0xa0 binaries/init.o + .debug_macro 0x00000000 0x10 binaries/init.o + .debug_macro 0x00000000 0x22 binaries/init.o + .debug_macro 0x00000000 0x46 binaries/init.o + .debug_macro 0x00000000 0xfa binaries/init.o + .debug_macro 0x00000000 0xdd binaries/init.o + .debug_macro 0x00000000 0x91 binaries/init.o + .debug_macro 0x00000000 0x8e binaries/init.o + .debug_macro 0x00000000 0x82 binaries/init.o + .debug_macro 0x00000000 0x2e binaries/init.o + .debug_macro 0x00000000 0x3a binaries/init.o + .debug_macro 0x00000000 0x4c binaries/init.o + .debug_macro 0x00000000 0x3a binaries/init.o + .debug_macro 0x00000000 0xa0 binaries/init.o + .debug_macro 0x00000000 0x34 binaries/init.o + .debug_macro 0x00000000 0x7c binaries/init.o + .debug_macro 0x00000000 0x1c binaries/init.o + .debug_macro 0x00000000 0xee binaries/init.o + .debug_macro 0x00000000 0x7c binaries/init.o + .debug_macro 0x00000000 0x20 binaries/init.o + .debug_macro 0x00000000 0x10 binaries/init.o + .debug_macro 0x00000000 0x1c binaries/init.o + .debug_macro 0x00000000 0x34 binaries/init.o + .debug_macro 0x00000000 0xeb binaries/init.o + .debug_macro 0x00000000 0x8e binaries/init.o + .group 0x00000000 0x8 binaries/initialize.o + .group 0x00000000 0x8 binaries/initialize.o + .group 0x00000000 0x8 binaries/initialize.o + .group 0x00000000 0x8 binaries/initialize.o + .group 0x00000000 0x8 binaries/initialize.o + .group 0x00000000 0x8 binaries/initialize.o + .group 0x00000000 0x8 binaries/initialize.o + .group 0x00000000 0x8 binaries/initialize.o + .group 0x00000000 0x8 binaries/initialize.o + .group 0x00000000 0x8 binaries/initialize.o + .group 0x00000000 0x8 binaries/initialize.o + .group 0x00000000 0x8 binaries/initialize.o + .group 0x00000000 0x8 binaries/initialize.o + .group 0x00000000 0x8 binaries/initialize.o + .group 0x00000000 0x8 binaries/initialize.o + .group 0x00000000 0x8 binaries/initialize.o + .group 0x00000000 0x8 binaries/initialize.o + .group 0x00000000 0x8 binaries/initialize.o + .group 0x00000000 0x8 binaries/initialize.o + .group 0x00000000 0x8 binaries/initialize.o + .group 0x00000000 0x8 binaries/initialize.o + .group 0x00000000 0x8 binaries/initialize.o + .group 0x00000000 0x8 binaries/initialize.o + .group 0x00000000 0x8 binaries/initialize.o + .group 0x00000000 0x8 binaries/initialize.o + .group 0x00000000 0x8 binaries/initialize.o + .group 0x00000000 0x8 binaries/initialize.o + .group 0x00000000 0x8 binaries/initialize.o + .group 0x00000000 0x8 binaries/initialize.o + .group 0x00000000 0x8 binaries/initialize.o + .group 0x00000000 0x8 binaries/initialize.o + .group 0x00000000 0x8 binaries/initialize.o + .group 0x00000000 0x8 binaries/initialize.o + .group 0x00000000 0x8 binaries/initialize.o + .group 0x00000000 0x8 binaries/initialize.o + .group 0x00000000 0x8 binaries/initialize.o + .group 0x00000000 0x8 binaries/initialize.o + .group 0x00000000 0x8 binaries/initialize.o + .group 0x00000000 0x8 binaries/initialize.o + .debug_macro 0x00000000 0x838 binaries/initialize.o + .debug_macro 0x00000000 0x58 binaries/initialize.o + .debug_macro 0x00000000 0xb2 binaries/initialize.o + .debug_macro 0x00000000 0x6a binaries/initialize.o + .debug_macro 0x00000000 0x52 binaries/initialize.o + .debug_macro 0x00000000 0x10 binaries/initialize.o + .debug_macro 0x00000000 0x16 binaries/initialize.o + .debug_macro 0x00000000 0x1c binaries/initialize.o + .debug_macro 0x00000000 0x1c binaries/initialize.o + .debug_macro 0x00000000 0x10 binaries/initialize.o + .debug_macro 0x00000000 0x28 binaries/initialize.o + .debug_macro 0x00000000 0x1c1 binaries/initialize.o + .debug_macro 0x00000000 0xa0 binaries/initialize.o + .debug_macro 0x00000000 0x10 binaries/initialize.o + .debug_macro 0x00000000 0x22 binaries/initialize.o + .debug_macro 0x00000000 0x46 binaries/initialize.o + .debug_macro 0x00000000 0xfa binaries/initialize.o + .debug_macro 0x00000000 0xdd binaries/initialize.o + .debug_macro 0x00000000 0x91 binaries/initialize.o + .debug_macro 0x00000000 0x8e binaries/initialize.o + .debug_macro 0x00000000 0x82 binaries/initialize.o + .debug_macro 0x00000000 0x2e binaries/initialize.o + .debug_macro 0x00000000 0x3a binaries/initialize.o + .debug_macro 0x00000000 0x4c binaries/initialize.o + .debug_macro 0x00000000 0x3a binaries/initialize.o + .debug_macro 0x00000000 0xa0 binaries/initialize.o + .debug_macro 0x00000000 0x34 binaries/initialize.o + .debug_macro 0x00000000 0x7c binaries/initialize.o + .debug_macro 0x00000000 0x1c binaries/initialize.o + .debug_macro 0x00000000 0xee binaries/initialize.o + .debug_macro 0x00000000 0x7c binaries/initialize.o + .debug_macro 0x00000000 0x20 binaries/initialize.o + .debug_macro 0x00000000 0x10 binaries/initialize.o + .debug_macro 0x00000000 0x1c binaries/initialize.o + .debug_macro 0x00000000 0x34 binaries/initialize.o + .debug_macro 0x00000000 0xeb binaries/initialize.o + .debug_macro 0x00000000 0x8e binaries/initialize.o + .debug_macro 0x00000000 0x1c binaries/initialize.o + .debug_macro 0x00000000 0x5e binaries/initialize.o + .group 0x00000000 0x8 binaries/insert.o + .group 0x00000000 0x8 binaries/insert.o + .group 0x00000000 0x8 binaries/insert.o + .group 0x00000000 0x8 binaries/insert.o + .group 0x00000000 0x8 binaries/insert.o + .group 0x00000000 0x8 binaries/insert.o + .group 0x00000000 0x8 binaries/insert.o + .group 0x00000000 0x8 binaries/insert.o + .group 0x00000000 0x8 binaries/insert.o + .group 0x00000000 0x8 binaries/insert.o + .group 0x00000000 0x8 binaries/insert.o + .group 0x00000000 0x8 binaries/insert.o + .group 0x00000000 0x8 binaries/insert.o + .group 0x00000000 0x8 binaries/insert.o + .group 0x00000000 0x8 binaries/insert.o + .group 0x00000000 0x8 binaries/insert.o + .group 0x00000000 0x8 binaries/insert.o + .group 0x00000000 0x8 binaries/insert.o + .group 0x00000000 0x8 binaries/insert.o + .group 0x00000000 0x8 binaries/insert.o + .group 0x00000000 0x8 binaries/insert.o + .group 0x00000000 0x8 binaries/insert.o + .group 0x00000000 0x8 binaries/insert.o + .group 0x00000000 0x8 binaries/insert.o + .group 0x00000000 0x8 binaries/insert.o + .group 0x00000000 0x8 binaries/insert.o + .group 0x00000000 0x8 binaries/insert.o + .group 0x00000000 0x8 binaries/insert.o + .group 0x00000000 0x8 binaries/insert.o + .group 0x00000000 0x8 binaries/insert.o + .group 0x00000000 0x8 binaries/insert.o + .group 0x00000000 0x8 binaries/insert.o + .group 0x00000000 0x8 binaries/insert.o + .group 0x00000000 0x8 binaries/insert.o + .group 0x00000000 0x8 binaries/insert.o + .group 0x00000000 0x8 binaries/insert.o + .group 0x00000000 0x8 binaries/insert.o + .debug_macro 0x00000000 0x838 binaries/insert.o + .debug_macro 0x00000000 0x58 binaries/insert.o + .debug_macro 0x00000000 0xb2 binaries/insert.o + .debug_macro 0x00000000 0x6a binaries/insert.o + .debug_macro 0x00000000 0x52 binaries/insert.o + .debug_macro 0x00000000 0x10 binaries/insert.o + .debug_macro 0x00000000 0x16 binaries/insert.o + .debug_macro 0x00000000 0x1c binaries/insert.o + .debug_macro 0x00000000 0x1c binaries/insert.o + .debug_macro 0x00000000 0x10 binaries/insert.o + .debug_macro 0x00000000 0x28 binaries/insert.o + .debug_macro 0x00000000 0x1c1 binaries/insert.o + .debug_macro 0x00000000 0xa0 binaries/insert.o + .debug_macro 0x00000000 0x10 binaries/insert.o + .debug_macro 0x00000000 0x22 binaries/insert.o + .debug_macro 0x00000000 0x46 binaries/insert.o + .debug_macro 0x00000000 0xfa binaries/insert.o + .debug_macro 0x00000000 0xdd binaries/insert.o + .debug_macro 0x00000000 0x91 binaries/insert.o + .debug_macro 0x00000000 0x8e binaries/insert.o + .debug_macro 0x00000000 0x82 binaries/insert.o + .debug_macro 0x00000000 0x2e binaries/insert.o + .debug_macro 0x00000000 0x3a binaries/insert.o + .debug_macro 0x00000000 0x4c binaries/insert.o + .debug_macro 0x00000000 0x3a binaries/insert.o + .debug_macro 0x00000000 0xa0 binaries/insert.o + .debug_macro 0x00000000 0x34 binaries/insert.o + .debug_macro 0x00000000 0x7c binaries/insert.o + .debug_macro 0x00000000 0x1c binaries/insert.o + .debug_macro 0x00000000 0xee binaries/insert.o + .debug_macro 0x00000000 0x7c binaries/insert.o + .debug_macro 0x00000000 0x20 binaries/insert.o + .debug_macro 0x00000000 0x10 binaries/insert.o + .debug_macro 0x00000000 0x1c binaries/insert.o + .debug_macro 0x00000000 0x34 binaries/insert.o + .debug_macro 0x00000000 0xeb binaries/insert.o + .debug_macro 0x00000000 0x8e binaries/insert.o + .group 0x00000000 0x8 binaries/insertd.o + .group 0x00000000 0x8 binaries/insertd.o + .group 0x00000000 0x8 binaries/insertd.o + .group 0x00000000 0x8 binaries/insertd.o + .group 0x00000000 0x8 binaries/insertd.o + .group 0x00000000 0x8 binaries/insertd.o + .group 0x00000000 0x8 binaries/insertd.o + .group 0x00000000 0x8 binaries/insertd.o + .group 0x00000000 0x8 binaries/insertd.o + .group 0x00000000 0x8 binaries/insertd.o + .group 0x00000000 0x8 binaries/insertd.o + .group 0x00000000 0x8 binaries/insertd.o + .group 0x00000000 0x8 binaries/insertd.o + .group 0x00000000 0x8 binaries/insertd.o + .group 0x00000000 0x8 binaries/insertd.o + .group 0x00000000 0x8 binaries/insertd.o + .group 0x00000000 0x8 binaries/insertd.o + .group 0x00000000 0x8 binaries/insertd.o + .group 0x00000000 0x8 binaries/insertd.o + .group 0x00000000 0x8 binaries/insertd.o + .group 0x00000000 0x8 binaries/insertd.o + .group 0x00000000 0x8 binaries/insertd.o + .group 0x00000000 0x8 binaries/insertd.o + .group 0x00000000 0x8 binaries/insertd.o + .group 0x00000000 0x8 binaries/insertd.o + .group 0x00000000 0x8 binaries/insertd.o + .group 0x00000000 0x8 binaries/insertd.o + .group 0x00000000 0x8 binaries/insertd.o + .group 0x00000000 0x8 binaries/insertd.o + .group 0x00000000 0x8 binaries/insertd.o + .group 0x00000000 0x8 binaries/insertd.o + .group 0x00000000 0x8 binaries/insertd.o + .group 0x00000000 0x8 binaries/insertd.o + .group 0x00000000 0x8 binaries/insertd.o + .group 0x00000000 0x8 binaries/insertd.o + .group 0x00000000 0x8 binaries/insertd.o + .group 0x00000000 0x8 binaries/insertd.o + .debug_macro 0x00000000 0x838 binaries/insertd.o + .debug_macro 0x00000000 0x58 binaries/insertd.o + .debug_macro 0x00000000 0xb2 binaries/insertd.o + .debug_macro 0x00000000 0x6a binaries/insertd.o + .debug_macro 0x00000000 0x52 binaries/insertd.o + .debug_macro 0x00000000 0x10 binaries/insertd.o + .debug_macro 0x00000000 0x16 binaries/insertd.o + .debug_macro 0x00000000 0x1c binaries/insertd.o + .debug_macro 0x00000000 0x1c binaries/insertd.o + .debug_macro 0x00000000 0x10 binaries/insertd.o + .debug_macro 0x00000000 0x28 binaries/insertd.o + .debug_macro 0x00000000 0x1c1 binaries/insertd.o + .debug_macro 0x00000000 0xa0 binaries/insertd.o + .debug_macro 0x00000000 0x10 binaries/insertd.o + .debug_macro 0x00000000 0x22 binaries/insertd.o + .debug_macro 0x00000000 0x46 binaries/insertd.o + .debug_macro 0x00000000 0xfa binaries/insertd.o + .debug_macro 0x00000000 0xdd binaries/insertd.o + .debug_macro 0x00000000 0x91 binaries/insertd.o + .debug_macro 0x00000000 0x8e binaries/insertd.o + .debug_macro 0x00000000 0x82 binaries/insertd.o + .debug_macro 0x00000000 0x2e binaries/insertd.o + .debug_macro 0x00000000 0x3a binaries/insertd.o + .debug_macro 0x00000000 0x4c binaries/insertd.o + .debug_macro 0x00000000 0x3a binaries/insertd.o + .debug_macro 0x00000000 0xa0 binaries/insertd.o + .debug_macro 0x00000000 0x34 binaries/insertd.o + .debug_macro 0x00000000 0x7c binaries/insertd.o + .debug_macro 0x00000000 0x1c binaries/insertd.o + .debug_macro 0x00000000 0xee binaries/insertd.o + .debug_macro 0x00000000 0x7c binaries/insertd.o + .debug_macro 0x00000000 0x20 binaries/insertd.o + .debug_macro 0x00000000 0x10 binaries/insertd.o + .debug_macro 0x00000000 0x1c binaries/insertd.o + .debug_macro 0x00000000 0x34 binaries/insertd.o + .debug_macro 0x00000000 0xeb binaries/insertd.o + .debug_macro 0x00000000 0x8e binaries/insertd.o + .group 0x00000000 0x8 binaries/ioerr.o + .group 0x00000000 0x8 binaries/ioerr.o + .group 0x00000000 0x8 binaries/ioerr.o + .group 0x00000000 0x8 binaries/ioerr.o + .group 0x00000000 0x8 binaries/ioerr.o + .group 0x00000000 0x8 binaries/ioerr.o + .group 0x00000000 0x8 binaries/ioerr.o + .group 0x00000000 0x8 binaries/ioerr.o + .group 0x00000000 0x8 binaries/ioerr.o + .group 0x00000000 0x8 binaries/ioerr.o + .group 0x00000000 0x8 binaries/ioerr.o + .group 0x00000000 0x8 binaries/ioerr.o + .group 0x00000000 0x8 binaries/ioerr.o + .group 0x00000000 0x8 binaries/ioerr.o + .group 0x00000000 0x8 binaries/ioerr.o + .group 0x00000000 0x8 binaries/ioerr.o + .group 0x00000000 0x8 binaries/ioerr.o + .group 0x00000000 0x8 binaries/ioerr.o + .group 0x00000000 0x8 binaries/ioerr.o + .group 0x00000000 0x8 binaries/ioerr.o + .group 0x00000000 0x8 binaries/ioerr.o + .group 0x00000000 0x8 binaries/ioerr.o + .group 0x00000000 0x8 binaries/ioerr.o + .group 0x00000000 0x8 binaries/ioerr.o + .group 0x00000000 0x8 binaries/ioerr.o + .group 0x00000000 0x8 binaries/ioerr.o + .group 0x00000000 0x8 binaries/ioerr.o + .group 0x00000000 0x8 binaries/ioerr.o + .group 0x00000000 0x8 binaries/ioerr.o + .group 0x00000000 0x8 binaries/ioerr.o + .group 0x00000000 0x8 binaries/ioerr.o + .group 0x00000000 0x8 binaries/ioerr.o + .group 0x00000000 0x8 binaries/ioerr.o + .group 0x00000000 0x8 binaries/ioerr.o + .group 0x00000000 0x8 binaries/ioerr.o + .group 0x00000000 0x8 binaries/ioerr.o + .group 0x00000000 0x8 binaries/ioerr.o + .debug_macro 0x00000000 0x838 binaries/ioerr.o + .debug_macro 0x00000000 0x58 binaries/ioerr.o + .debug_macro 0x00000000 0xb2 binaries/ioerr.o + .debug_macro 0x00000000 0x6a binaries/ioerr.o + .debug_macro 0x00000000 0x52 binaries/ioerr.o + .debug_macro 0x00000000 0x10 binaries/ioerr.o + .debug_macro 0x00000000 0x16 binaries/ioerr.o + .debug_macro 0x00000000 0x1c binaries/ioerr.o + .debug_macro 0x00000000 0x1c binaries/ioerr.o + .debug_macro 0x00000000 0x10 binaries/ioerr.o + .debug_macro 0x00000000 0x28 binaries/ioerr.o + .debug_macro 0x00000000 0x1c1 binaries/ioerr.o + .debug_macro 0x00000000 0xa0 binaries/ioerr.o + .debug_macro 0x00000000 0x10 binaries/ioerr.o + .debug_macro 0x00000000 0x22 binaries/ioerr.o + .debug_macro 0x00000000 0x46 binaries/ioerr.o + .debug_macro 0x00000000 0xfa binaries/ioerr.o + .debug_macro 0x00000000 0xdd binaries/ioerr.o + .debug_macro 0x00000000 0x91 binaries/ioerr.o + .debug_macro 0x00000000 0x8e binaries/ioerr.o + .debug_macro 0x00000000 0x82 binaries/ioerr.o + .debug_macro 0x00000000 0x2e binaries/ioerr.o + .debug_macro 0x00000000 0x3a binaries/ioerr.o + .debug_macro 0x00000000 0x4c binaries/ioerr.o + .debug_macro 0x00000000 0x3a binaries/ioerr.o + .debug_macro 0x00000000 0xa0 binaries/ioerr.o + .debug_macro 0x00000000 0x34 binaries/ioerr.o + .debug_macro 0x00000000 0x7c binaries/ioerr.o + .debug_macro 0x00000000 0x1c binaries/ioerr.o + .debug_macro 0x00000000 0xee binaries/ioerr.o + .debug_macro 0x00000000 0x7c binaries/ioerr.o + .debug_macro 0x00000000 0x20 binaries/ioerr.o + .debug_macro 0x00000000 0x10 binaries/ioerr.o + .debug_macro 0x00000000 0x1c binaries/ioerr.o + .debug_macro 0x00000000 0x34 binaries/ioerr.o + .debug_macro 0x00000000 0xeb binaries/ioerr.o + .debug_macro 0x00000000 0x8e binaries/ioerr.o + .group 0x00000000 0x8 binaries/ionull.o + .group 0x00000000 0x8 binaries/ionull.o + .group 0x00000000 0x8 binaries/ionull.o + .group 0x00000000 0x8 binaries/ionull.o + .group 0x00000000 0x8 binaries/ionull.o + .group 0x00000000 0x8 binaries/ionull.o + .group 0x00000000 0x8 binaries/ionull.o + .group 0x00000000 0x8 binaries/ionull.o + .group 0x00000000 0x8 binaries/ionull.o + .group 0x00000000 0x8 binaries/ionull.o + .group 0x00000000 0x8 binaries/ionull.o + .group 0x00000000 0x8 binaries/ionull.o + .group 0x00000000 0x8 binaries/ionull.o + .group 0x00000000 0x8 binaries/ionull.o + .group 0x00000000 0x8 binaries/ionull.o + .group 0x00000000 0x8 binaries/ionull.o + .group 0x00000000 0x8 binaries/ionull.o + .group 0x00000000 0x8 binaries/ionull.o + .group 0x00000000 0x8 binaries/ionull.o + .group 0x00000000 0x8 binaries/ionull.o + .group 0x00000000 0x8 binaries/ionull.o + .group 0x00000000 0x8 binaries/ionull.o + .group 0x00000000 0x8 binaries/ionull.o + .group 0x00000000 0x8 binaries/ionull.o + .group 0x00000000 0x8 binaries/ionull.o + .group 0x00000000 0x8 binaries/ionull.o + .group 0x00000000 0x8 binaries/ionull.o + .group 0x00000000 0x8 binaries/ionull.o + .group 0x00000000 0x8 binaries/ionull.o + .group 0x00000000 0x8 binaries/ionull.o + .group 0x00000000 0x8 binaries/ionull.o + .group 0x00000000 0x8 binaries/ionull.o + .group 0x00000000 0x8 binaries/ionull.o + .group 0x00000000 0x8 binaries/ionull.o + .group 0x00000000 0x8 binaries/ionull.o + .group 0x00000000 0x8 binaries/ionull.o + .group 0x00000000 0x8 binaries/ionull.o + .debug_macro 0x00000000 0x838 binaries/ionull.o + .debug_macro 0x00000000 0x58 binaries/ionull.o + .debug_macro 0x00000000 0xb2 binaries/ionull.o + .debug_macro 0x00000000 0x6a binaries/ionull.o + .debug_macro 0x00000000 0x52 binaries/ionull.o + .debug_macro 0x00000000 0x10 binaries/ionull.o + .debug_macro 0x00000000 0x16 binaries/ionull.o + .debug_macro 0x00000000 0x1c binaries/ionull.o + .debug_macro 0x00000000 0x1c binaries/ionull.o + .debug_macro 0x00000000 0x10 binaries/ionull.o + .debug_macro 0x00000000 0x28 binaries/ionull.o + .debug_macro 0x00000000 0x1c1 binaries/ionull.o + .debug_macro 0x00000000 0xa0 binaries/ionull.o + .debug_macro 0x00000000 0x10 binaries/ionull.o + .debug_macro 0x00000000 0x22 binaries/ionull.o + .debug_macro 0x00000000 0x46 binaries/ionull.o + .debug_macro 0x00000000 0xfa binaries/ionull.o + .debug_macro 0x00000000 0xdd binaries/ionull.o + .debug_macro 0x00000000 0x91 binaries/ionull.o + .debug_macro 0x00000000 0x8e binaries/ionull.o + .debug_macro 0x00000000 0x82 binaries/ionull.o + .debug_macro 0x00000000 0x2e binaries/ionull.o + .debug_macro 0x00000000 0x3a binaries/ionull.o + .debug_macro 0x00000000 0x4c binaries/ionull.o + .debug_macro 0x00000000 0x3a binaries/ionull.o + .debug_macro 0x00000000 0xa0 binaries/ionull.o + .debug_macro 0x00000000 0x34 binaries/ionull.o + .debug_macro 0x00000000 0x7c binaries/ionull.o + .debug_macro 0x00000000 0x1c binaries/ionull.o + .debug_macro 0x00000000 0xee binaries/ionull.o + .debug_macro 0x00000000 0x7c binaries/ionull.o + .debug_macro 0x00000000 0x20 binaries/ionull.o + .debug_macro 0x00000000 0x10 binaries/ionull.o + .debug_macro 0x00000000 0x1c binaries/ionull.o + .debug_macro 0x00000000 0x34 binaries/ionull.o + .debug_macro 0x00000000 0xeb binaries/ionull.o + .debug_macro 0x00000000 0x8e binaries/ionull.o + .group 0x00000000 0x8 binaries/kill.o + .group 0x00000000 0x8 binaries/kill.o + .group 0x00000000 0x8 binaries/kill.o + .group 0x00000000 0x8 binaries/kill.o + .group 0x00000000 0x8 binaries/kill.o + .group 0x00000000 0x8 binaries/kill.o + .group 0x00000000 0x8 binaries/kill.o + .group 0x00000000 0x8 binaries/kill.o + .group 0x00000000 0x8 binaries/kill.o + .group 0x00000000 0x8 binaries/kill.o + .group 0x00000000 0x8 binaries/kill.o + .group 0x00000000 0x8 binaries/kill.o + .group 0x00000000 0x8 binaries/kill.o + .group 0x00000000 0x8 binaries/kill.o + .group 0x00000000 0x8 binaries/kill.o + .group 0x00000000 0x8 binaries/kill.o + .group 0x00000000 0x8 binaries/kill.o + .group 0x00000000 0x8 binaries/kill.o + .group 0x00000000 0x8 binaries/kill.o + .group 0x00000000 0x8 binaries/kill.o + .group 0x00000000 0x8 binaries/kill.o + .group 0x00000000 0x8 binaries/kill.o + .group 0x00000000 0x8 binaries/kill.o + .group 0x00000000 0x8 binaries/kill.o + .group 0x00000000 0x8 binaries/kill.o + .group 0x00000000 0x8 binaries/kill.o + .group 0x00000000 0x8 binaries/kill.o + .group 0x00000000 0x8 binaries/kill.o + .group 0x00000000 0x8 binaries/kill.o + .group 0x00000000 0x8 binaries/kill.o + .group 0x00000000 0x8 binaries/kill.o + .group 0x00000000 0x8 binaries/kill.o + .group 0x00000000 0x8 binaries/kill.o + .group 0x00000000 0x8 binaries/kill.o + .group 0x00000000 0x8 binaries/kill.o + .group 0x00000000 0x8 binaries/kill.o + .group 0x00000000 0x8 binaries/kill.o + .debug_macro 0x00000000 0x838 binaries/kill.o + .debug_macro 0x00000000 0x58 binaries/kill.o + .debug_macro 0x00000000 0xb2 binaries/kill.o + .debug_macro 0x00000000 0x6a binaries/kill.o + .debug_macro 0x00000000 0x52 binaries/kill.o + .debug_macro 0x00000000 0x10 binaries/kill.o + .debug_macro 0x00000000 0x16 binaries/kill.o + .debug_macro 0x00000000 0x1c binaries/kill.o + .debug_macro 0x00000000 0x1c binaries/kill.o + .debug_macro 0x00000000 0x10 binaries/kill.o + .debug_macro 0x00000000 0x28 binaries/kill.o + .debug_macro 0x00000000 0x1c1 binaries/kill.o + .debug_macro 0x00000000 0xa0 binaries/kill.o + .debug_macro 0x00000000 0x10 binaries/kill.o + .debug_macro 0x00000000 0x22 binaries/kill.o + .debug_macro 0x00000000 0x46 binaries/kill.o + .debug_macro 0x00000000 0xfa binaries/kill.o + .debug_macro 0x00000000 0xdd binaries/kill.o + .debug_macro 0x00000000 0x91 binaries/kill.o + .debug_macro 0x00000000 0x8e binaries/kill.o + .debug_macro 0x00000000 0x82 binaries/kill.o + .debug_macro 0x00000000 0x2e binaries/kill.o + .debug_macro 0x00000000 0x3a binaries/kill.o + .debug_macro 0x00000000 0x4c binaries/kill.o + .debug_macro 0x00000000 0x3a binaries/kill.o + .debug_macro 0x00000000 0xa0 binaries/kill.o + .debug_macro 0x00000000 0x34 binaries/kill.o + .debug_macro 0x00000000 0x7c binaries/kill.o + .debug_macro 0x00000000 0x1c binaries/kill.o + .debug_macro 0x00000000 0xee binaries/kill.o + .debug_macro 0x00000000 0x7c binaries/kill.o + .debug_macro 0x00000000 0x20 binaries/kill.o + .debug_macro 0x00000000 0x10 binaries/kill.o + .debug_macro 0x00000000 0x1c binaries/kill.o + .debug_macro 0x00000000 0x34 binaries/kill.o + .debug_macro 0x00000000 0xeb binaries/kill.o + .debug_macro 0x00000000 0x8e binaries/kill.o + .group 0x00000000 0x8 binaries/main.o + .group 0x00000000 0x8 binaries/main.o + .group 0x00000000 0x8 binaries/main.o + .group 0x00000000 0x8 binaries/main.o + .group 0x00000000 0x8 binaries/main.o + .group 0x00000000 0x8 binaries/main.o + .group 0x00000000 0x8 binaries/main.o + .group 0x00000000 0x8 binaries/main.o + .group 0x00000000 0x8 binaries/main.o + .group 0x00000000 0x8 binaries/main.o + .group 0x00000000 0x8 binaries/main.o + .group 0x00000000 0x8 binaries/main.o + .group 0x00000000 0x8 binaries/main.o + .group 0x00000000 0x8 binaries/main.o + .group 0x00000000 0x8 binaries/main.o + .group 0x00000000 0x8 binaries/main.o + .group 0x00000000 0x8 binaries/main.o + .group 0x00000000 0x8 binaries/main.o + .group 0x00000000 0x8 binaries/main.o + .group 0x00000000 0x8 binaries/main.o + .group 0x00000000 0x8 binaries/main.o + .group 0x00000000 0x8 binaries/main.o + .group 0x00000000 0x8 binaries/main.o + .group 0x00000000 0x8 binaries/main.o + .group 0x00000000 0x8 binaries/main.o + .group 0x00000000 0x8 binaries/main.o + .group 0x00000000 0x8 binaries/main.o + .group 0x00000000 0x8 binaries/main.o + .group 0x00000000 0x8 binaries/main.o + .group 0x00000000 0x8 binaries/main.o + .group 0x00000000 0x8 binaries/main.o + .group 0x00000000 0x8 binaries/main.o + .group 0x00000000 0x8 binaries/main.o + .group 0x00000000 0x8 binaries/main.o + .group 0x00000000 0x8 binaries/main.o + .group 0x00000000 0x8 binaries/main.o + .group 0x00000000 0x8 binaries/main.o + .debug_macro 0x00000000 0x838 binaries/main.o + .debug_macro 0x00000000 0x58 binaries/main.o + .debug_macro 0x00000000 0xb2 binaries/main.o + .debug_macro 0x00000000 0x6a binaries/main.o + .debug_macro 0x00000000 0x52 binaries/main.o + .debug_macro 0x00000000 0x10 binaries/main.o + .debug_macro 0x00000000 0x16 binaries/main.o + .debug_macro 0x00000000 0x1c binaries/main.o + .debug_macro 0x00000000 0x1c binaries/main.o + .debug_macro 0x00000000 0x10 binaries/main.o + .debug_macro 0x00000000 0x28 binaries/main.o + .debug_macro 0x00000000 0x1c1 binaries/main.o + .debug_macro 0x00000000 0xa0 binaries/main.o + .debug_macro 0x00000000 0x10 binaries/main.o + .debug_macro 0x00000000 0x22 binaries/main.o + .debug_macro 0x00000000 0x46 binaries/main.o + .debug_macro 0x00000000 0xfa binaries/main.o + .debug_macro 0x00000000 0xdd binaries/main.o + .debug_macro 0x00000000 0x91 binaries/main.o + .debug_macro 0x00000000 0x8e binaries/main.o + .debug_macro 0x00000000 0x82 binaries/main.o + .debug_macro 0x00000000 0x2e binaries/main.o + .debug_macro 0x00000000 0x3a binaries/main.o + .debug_macro 0x00000000 0x4c binaries/main.o + .debug_macro 0x00000000 0x3a binaries/main.o + .debug_macro 0x00000000 0xa0 binaries/main.o + .debug_macro 0x00000000 0x34 binaries/main.o + .debug_macro 0x00000000 0x7c binaries/main.o + .debug_macro 0x00000000 0x1c binaries/main.o + .debug_macro 0x00000000 0xee binaries/main.o + .debug_macro 0x00000000 0x7c binaries/main.o + .debug_macro 0x00000000 0x20 binaries/main.o + .debug_macro 0x00000000 0x10 binaries/main.o + .debug_macro 0x00000000 0x1c binaries/main.o + .debug_macro 0x00000000 0x34 binaries/main.o + .debug_macro 0x00000000 0xeb binaries/main.o + .debug_macro 0x00000000 0x8e binaries/main.o + .group 0x00000000 0x8 binaries/mark.o + .group 0x00000000 0x8 binaries/mark.o + .group 0x00000000 0x8 binaries/mark.o + .group 0x00000000 0x8 binaries/mark.o + .group 0x00000000 0x8 binaries/mark.o + .group 0x00000000 0x8 binaries/mark.o + .group 0x00000000 0x8 binaries/mark.o + .group 0x00000000 0x8 binaries/mark.o + .group 0x00000000 0x8 binaries/mark.o + .group 0x00000000 0x8 binaries/mark.o + .group 0x00000000 0x8 binaries/mark.o + .group 0x00000000 0x8 binaries/mark.o + .group 0x00000000 0x8 binaries/mark.o + .group 0x00000000 0x8 binaries/mark.o + .group 0x00000000 0x8 binaries/mark.o + .group 0x00000000 0x8 binaries/mark.o + .group 0x00000000 0x8 binaries/mark.o + .group 0x00000000 0x8 binaries/mark.o + .group 0x00000000 0x8 binaries/mark.o + .group 0x00000000 0x8 binaries/mark.o + .group 0x00000000 0x8 binaries/mark.o + .group 0x00000000 0x8 binaries/mark.o + .group 0x00000000 0x8 binaries/mark.o + .group 0x00000000 0x8 binaries/mark.o + .group 0x00000000 0x8 binaries/mark.o + .group 0x00000000 0x8 binaries/mark.o + .group 0x00000000 0x8 binaries/mark.o + .group 0x00000000 0x8 binaries/mark.o + .group 0x00000000 0x8 binaries/mark.o + .group 0x00000000 0x8 binaries/mark.o + .group 0x00000000 0x8 binaries/mark.o + .group 0x00000000 0x8 binaries/mark.o + .group 0x00000000 0x8 binaries/mark.o + .group 0x00000000 0x8 binaries/mark.o + .group 0x00000000 0x8 binaries/mark.o + .group 0x00000000 0x8 binaries/mark.o + .group 0x00000000 0x8 binaries/mark.o + .debug_macro 0x00000000 0x838 binaries/mark.o + .debug_macro 0x00000000 0x58 binaries/mark.o + .debug_macro 0x00000000 0xb2 binaries/mark.o + .debug_macro 0x00000000 0x6a binaries/mark.o + .debug_macro 0x00000000 0x52 binaries/mark.o + .debug_macro 0x00000000 0x10 binaries/mark.o + .debug_macro 0x00000000 0x16 binaries/mark.o + .debug_macro 0x00000000 0x1c binaries/mark.o + .debug_macro 0x00000000 0x1c binaries/mark.o + .debug_macro 0x00000000 0x10 binaries/mark.o + .debug_macro 0x00000000 0x28 binaries/mark.o + .debug_macro 0x00000000 0x1c1 binaries/mark.o + .debug_macro 0x00000000 0xa0 binaries/mark.o + .debug_macro 0x00000000 0x10 binaries/mark.o + .debug_macro 0x00000000 0x22 binaries/mark.o + .debug_macro 0x00000000 0x46 binaries/mark.o + .debug_macro 0x00000000 0xfa binaries/mark.o + .debug_macro 0x00000000 0xdd binaries/mark.o + .debug_macro 0x00000000 0x91 binaries/mark.o + .debug_macro 0x00000000 0x8e binaries/mark.o + .debug_macro 0x00000000 0x82 binaries/mark.o + .debug_macro 0x00000000 0x2e binaries/mark.o + .debug_macro 0x00000000 0x3a binaries/mark.o + .debug_macro 0x00000000 0x4c binaries/mark.o + .debug_macro 0x00000000 0x3a binaries/mark.o + .debug_macro 0x00000000 0xa0 binaries/mark.o + .debug_macro 0x00000000 0x34 binaries/mark.o + .debug_macro 0x00000000 0x7c binaries/mark.o + .debug_macro 0x00000000 0x1c binaries/mark.o + .debug_macro 0x00000000 0xee binaries/mark.o + .debug_macro 0x00000000 0x7c binaries/mark.o + .debug_macro 0x00000000 0x20 binaries/mark.o + .debug_macro 0x00000000 0x10 binaries/mark.o + .debug_macro 0x00000000 0x1c binaries/mark.o + .debug_macro 0x00000000 0x34 binaries/mark.o + .debug_macro 0x00000000 0xeb binaries/mark.o + .debug_macro 0x00000000 0x8e binaries/mark.o + .group 0x00000000 0x8 binaries/meminit.o + .group 0x00000000 0x8 binaries/meminit.o + .group 0x00000000 0x8 binaries/meminit.o + .group 0x00000000 0x8 binaries/meminit.o + .group 0x00000000 0x8 binaries/meminit.o + .group 0x00000000 0x8 binaries/meminit.o + .group 0x00000000 0x8 binaries/meminit.o + .group 0x00000000 0x8 binaries/meminit.o + .group 0x00000000 0x8 binaries/meminit.o + .group 0x00000000 0x8 binaries/meminit.o + .group 0x00000000 0x8 binaries/meminit.o + .group 0x00000000 0x8 binaries/meminit.o + .group 0x00000000 0x8 binaries/meminit.o + .group 0x00000000 0x8 binaries/meminit.o + .group 0x00000000 0x8 binaries/meminit.o + .group 0x00000000 0x8 binaries/meminit.o + .group 0x00000000 0x8 binaries/meminit.o + .group 0x00000000 0x8 binaries/meminit.o + .group 0x00000000 0x8 binaries/meminit.o + .group 0x00000000 0x8 binaries/meminit.o + .group 0x00000000 0x8 binaries/meminit.o + .group 0x00000000 0x8 binaries/meminit.o + .group 0x00000000 0x8 binaries/meminit.o + .group 0x00000000 0x8 binaries/meminit.o + .group 0x00000000 0x8 binaries/meminit.o + .group 0x00000000 0x8 binaries/meminit.o + .group 0x00000000 0x8 binaries/meminit.o + .group 0x00000000 0x8 binaries/meminit.o + .group 0x00000000 0x8 binaries/meminit.o + .group 0x00000000 0x8 binaries/meminit.o + .group 0x00000000 0x8 binaries/meminit.o + .group 0x00000000 0x8 binaries/meminit.o + .group 0x00000000 0x8 binaries/meminit.o + .group 0x00000000 0x8 binaries/meminit.o + .group 0x00000000 0x8 binaries/meminit.o + .group 0x00000000 0x8 binaries/meminit.o + .group 0x00000000 0x8 binaries/meminit.o + .debug_macro 0x00000000 0x838 binaries/meminit.o + .debug_macro 0x00000000 0x58 binaries/meminit.o + .debug_macro 0x00000000 0xb2 binaries/meminit.o + .debug_macro 0x00000000 0x6a binaries/meminit.o + .debug_macro 0x00000000 0x52 binaries/meminit.o + .debug_macro 0x00000000 0x10 binaries/meminit.o + .debug_macro 0x00000000 0x16 binaries/meminit.o + .debug_macro 0x00000000 0x1c binaries/meminit.o + .debug_macro 0x00000000 0x1c binaries/meminit.o + .debug_macro 0x00000000 0x10 binaries/meminit.o + .debug_macro 0x00000000 0x28 binaries/meminit.o + .debug_macro 0x00000000 0x1c1 binaries/meminit.o + .debug_macro 0x00000000 0xa0 binaries/meminit.o + .debug_macro 0x00000000 0x10 binaries/meminit.o + .debug_macro 0x00000000 0x22 binaries/meminit.o + .debug_macro 0x00000000 0x46 binaries/meminit.o + .debug_macro 0x00000000 0xfa binaries/meminit.o + .debug_macro 0x00000000 0xdd binaries/meminit.o + .debug_macro 0x00000000 0x91 binaries/meminit.o + .debug_macro 0x00000000 0x8e binaries/meminit.o + .debug_macro 0x00000000 0x82 binaries/meminit.o + .debug_macro 0x00000000 0x2e binaries/meminit.o + .debug_macro 0x00000000 0x3a binaries/meminit.o + .debug_macro 0x00000000 0x4c binaries/meminit.o + .debug_macro 0x00000000 0x3a binaries/meminit.o + .debug_macro 0x00000000 0xa0 binaries/meminit.o + .debug_macro 0x00000000 0x34 binaries/meminit.o + .debug_macro 0x00000000 0x7c binaries/meminit.o + .debug_macro 0x00000000 0x1c binaries/meminit.o + .debug_macro 0x00000000 0xee binaries/meminit.o + .debug_macro 0x00000000 0x7c binaries/meminit.o + .debug_macro 0x00000000 0x20 binaries/meminit.o + .debug_macro 0x00000000 0x10 binaries/meminit.o + .debug_macro 0x00000000 0x1c binaries/meminit.o + .debug_macro 0x00000000 0x34 binaries/meminit.o + .debug_macro 0x00000000 0xeb binaries/meminit.o + .debug_macro 0x00000000 0x8e binaries/meminit.o + .group 0x00000000 0x8 binaries/mkbufpool.o + .group 0x00000000 0x8 binaries/mkbufpool.o + .group 0x00000000 0x8 binaries/mkbufpool.o + .group 0x00000000 0x8 binaries/mkbufpool.o + .group 0x00000000 0x8 binaries/mkbufpool.o + .group 0x00000000 0x8 binaries/mkbufpool.o + .group 0x00000000 0x8 binaries/mkbufpool.o + .group 0x00000000 0x8 binaries/mkbufpool.o + .group 0x00000000 0x8 binaries/mkbufpool.o + .group 0x00000000 0x8 binaries/mkbufpool.o + .group 0x00000000 0x8 binaries/mkbufpool.o + .group 0x00000000 0x8 binaries/mkbufpool.o + .group 0x00000000 0x8 binaries/mkbufpool.o + .group 0x00000000 0x8 binaries/mkbufpool.o + .group 0x00000000 0x8 binaries/mkbufpool.o + .group 0x00000000 0x8 binaries/mkbufpool.o + .group 0x00000000 0x8 binaries/mkbufpool.o + .group 0x00000000 0x8 binaries/mkbufpool.o + .group 0x00000000 0x8 binaries/mkbufpool.o + .group 0x00000000 0x8 binaries/mkbufpool.o + .group 0x00000000 0x8 binaries/mkbufpool.o + .group 0x00000000 0x8 binaries/mkbufpool.o + .group 0x00000000 0x8 binaries/mkbufpool.o + .group 0x00000000 0x8 binaries/mkbufpool.o + .group 0x00000000 0x8 binaries/mkbufpool.o + .group 0x00000000 0x8 binaries/mkbufpool.o + .group 0x00000000 0x8 binaries/mkbufpool.o + .group 0x00000000 0x8 binaries/mkbufpool.o + .group 0x00000000 0x8 binaries/mkbufpool.o + .group 0x00000000 0x8 binaries/mkbufpool.o + .group 0x00000000 0x8 binaries/mkbufpool.o + .group 0x00000000 0x8 binaries/mkbufpool.o + .group 0x00000000 0x8 binaries/mkbufpool.o + .group 0x00000000 0x8 binaries/mkbufpool.o + .group 0x00000000 0x8 binaries/mkbufpool.o + .group 0x00000000 0x8 binaries/mkbufpool.o + .group 0x00000000 0x8 binaries/mkbufpool.o + .debug_macro 0x00000000 0x838 binaries/mkbufpool.o + .debug_macro 0x00000000 0x58 binaries/mkbufpool.o + .debug_macro 0x00000000 0xb2 binaries/mkbufpool.o + .debug_macro 0x00000000 0x6a binaries/mkbufpool.o + .debug_macro 0x00000000 0x52 binaries/mkbufpool.o + .debug_macro 0x00000000 0x10 binaries/mkbufpool.o + .debug_macro 0x00000000 0x16 binaries/mkbufpool.o + .debug_macro 0x00000000 0x1c binaries/mkbufpool.o + .debug_macro 0x00000000 0x1c binaries/mkbufpool.o + .debug_macro 0x00000000 0x10 binaries/mkbufpool.o + .debug_macro 0x00000000 0x28 binaries/mkbufpool.o + .debug_macro 0x00000000 0x1c1 binaries/mkbufpool.o + .debug_macro 0x00000000 0xa0 binaries/mkbufpool.o + .debug_macro 0x00000000 0x10 binaries/mkbufpool.o + .debug_macro 0x00000000 0x22 binaries/mkbufpool.o + .debug_macro 0x00000000 0x46 binaries/mkbufpool.o + .debug_macro 0x00000000 0xfa binaries/mkbufpool.o + .debug_macro 0x00000000 0xdd binaries/mkbufpool.o + .debug_macro 0x00000000 0x91 binaries/mkbufpool.o + .debug_macro 0x00000000 0x8e binaries/mkbufpool.o + .debug_macro 0x00000000 0x82 binaries/mkbufpool.o + .debug_macro 0x00000000 0x2e binaries/mkbufpool.o + .debug_macro 0x00000000 0x3a binaries/mkbufpool.o + .debug_macro 0x00000000 0x4c binaries/mkbufpool.o + .debug_macro 0x00000000 0x3a binaries/mkbufpool.o + .debug_macro 0x00000000 0xa0 binaries/mkbufpool.o + .debug_macro 0x00000000 0x34 binaries/mkbufpool.o + .debug_macro 0x00000000 0x7c binaries/mkbufpool.o + .debug_macro 0x00000000 0x1c binaries/mkbufpool.o + .debug_macro 0x00000000 0xee binaries/mkbufpool.o + .debug_macro 0x00000000 0x7c binaries/mkbufpool.o + .debug_macro 0x00000000 0x20 binaries/mkbufpool.o + .debug_macro 0x00000000 0x10 binaries/mkbufpool.o + .debug_macro 0x00000000 0x1c binaries/mkbufpool.o + .debug_macro 0x00000000 0x34 binaries/mkbufpool.o + .debug_macro 0x00000000 0xeb binaries/mkbufpool.o + .debug_macro 0x00000000 0x8e binaries/mkbufpool.o + .group 0x00000000 0x8 binaries/mmu.o + .group 0x00000000 0x8 binaries/mmu.o + .group 0x00000000 0x8 binaries/mmu.o + .group 0x00000000 0x8 binaries/mmu.o + .group 0x00000000 0x8 binaries/mmu.o + .group 0x00000000 0x8 binaries/mmu.o + .group 0x00000000 0x8 binaries/mmu.o + .group 0x00000000 0x8 binaries/mmu.o + .group 0x00000000 0x8 binaries/mmu.o + .group 0x00000000 0x8 binaries/mmu.o + .group 0x00000000 0x8 binaries/mmu.o + .group 0x00000000 0x8 binaries/mmu.o + .group 0x00000000 0x8 binaries/mmu.o + .group 0x00000000 0x8 binaries/mmu.o + .group 0x00000000 0x8 binaries/mmu.o + .group 0x00000000 0x8 binaries/mmu.o + .group 0x00000000 0x8 binaries/mmu.o + .group 0x00000000 0x8 binaries/mmu.o + .group 0x00000000 0x8 binaries/mmu.o + .group 0x00000000 0x8 binaries/mmu.o + .group 0x00000000 0x8 binaries/mmu.o + .group 0x00000000 0x8 binaries/mmu.o + .group 0x00000000 0x8 binaries/mmu.o + .group 0x00000000 0x8 binaries/mmu.o + .group 0x00000000 0x8 binaries/mmu.o + .group 0x00000000 0x8 binaries/mmu.o + .group 0x00000000 0x8 binaries/mmu.o + .group 0x00000000 0x8 binaries/mmu.o + .group 0x00000000 0x8 binaries/mmu.o + .group 0x00000000 0x8 binaries/mmu.o + .group 0x00000000 0x8 binaries/mmu.o + .group 0x00000000 0x8 binaries/mmu.o + .group 0x00000000 0x8 binaries/mmu.o + .group 0x00000000 0x8 binaries/mmu.o + .group 0x00000000 0x8 binaries/mmu.o + .group 0x00000000 0x8 binaries/mmu.o + .group 0x00000000 0x8 binaries/mmu.o + .debug_macro 0x00000000 0x838 binaries/mmu.o + .debug_macro 0x00000000 0x58 binaries/mmu.o + .debug_macro 0x00000000 0xb2 binaries/mmu.o + .debug_macro 0x00000000 0x6a binaries/mmu.o + .debug_macro 0x00000000 0x52 binaries/mmu.o + .debug_macro 0x00000000 0x10 binaries/mmu.o + .debug_macro 0x00000000 0x16 binaries/mmu.o + .debug_macro 0x00000000 0x1c binaries/mmu.o + .debug_macro 0x00000000 0x1c binaries/mmu.o + .debug_macro 0x00000000 0x10 binaries/mmu.o + .debug_macro 0x00000000 0x28 binaries/mmu.o + .debug_macro 0x00000000 0x1c1 binaries/mmu.o + .debug_macro 0x00000000 0xa0 binaries/mmu.o + .debug_macro 0x00000000 0x10 binaries/mmu.o + .debug_macro 0x00000000 0x22 binaries/mmu.o + .debug_macro 0x00000000 0x46 binaries/mmu.o + .debug_macro 0x00000000 0xfa binaries/mmu.o + .debug_macro 0x00000000 0xdd binaries/mmu.o + .debug_macro 0x00000000 0x91 binaries/mmu.o + .debug_macro 0x00000000 0x8e binaries/mmu.o + .debug_macro 0x00000000 0x82 binaries/mmu.o + .debug_macro 0x00000000 0x2e binaries/mmu.o + .debug_macro 0x00000000 0x3a binaries/mmu.o + .debug_macro 0x00000000 0x4c binaries/mmu.o + .debug_macro 0x00000000 0x3a binaries/mmu.o + .debug_macro 0x00000000 0xa0 binaries/mmu.o + .debug_macro 0x00000000 0x34 binaries/mmu.o + .debug_macro 0x00000000 0x7c binaries/mmu.o + .debug_macro 0x00000000 0x1c binaries/mmu.o + .debug_macro 0x00000000 0xee binaries/mmu.o + .debug_macro 0x00000000 0x7c binaries/mmu.o + .debug_macro 0x00000000 0x20 binaries/mmu.o + .debug_macro 0x00000000 0x10 binaries/mmu.o + .debug_macro 0x00000000 0x1c binaries/mmu.o + .debug_macro 0x00000000 0x34 binaries/mmu.o + .debug_macro 0x00000000 0xeb binaries/mmu.o + .debug_macro 0x00000000 0x8e binaries/mmu.o + .group 0x00000000 0x8 binaries/newqueue.o + .group 0x00000000 0x8 binaries/newqueue.o + .group 0x00000000 0x8 binaries/newqueue.o + .group 0x00000000 0x8 binaries/newqueue.o + .group 0x00000000 0x8 binaries/newqueue.o + .group 0x00000000 0x8 binaries/newqueue.o + .group 0x00000000 0x8 binaries/newqueue.o + .group 0x00000000 0x8 binaries/newqueue.o + .group 0x00000000 0x8 binaries/newqueue.o + .group 0x00000000 0x8 binaries/newqueue.o + .group 0x00000000 0x8 binaries/newqueue.o + .group 0x00000000 0x8 binaries/newqueue.o + .group 0x00000000 0x8 binaries/newqueue.o + .group 0x00000000 0x8 binaries/newqueue.o + .group 0x00000000 0x8 binaries/newqueue.o + .group 0x00000000 0x8 binaries/newqueue.o + .group 0x00000000 0x8 binaries/newqueue.o + .group 0x00000000 0x8 binaries/newqueue.o + .group 0x00000000 0x8 binaries/newqueue.o + .group 0x00000000 0x8 binaries/newqueue.o + .group 0x00000000 0x8 binaries/newqueue.o + .group 0x00000000 0x8 binaries/newqueue.o + .group 0x00000000 0x8 binaries/newqueue.o + .group 0x00000000 0x8 binaries/newqueue.o + .group 0x00000000 0x8 binaries/newqueue.o + .group 0x00000000 0x8 binaries/newqueue.o + .group 0x00000000 0x8 binaries/newqueue.o + .group 0x00000000 0x8 binaries/newqueue.o + .group 0x00000000 0x8 binaries/newqueue.o + .group 0x00000000 0x8 binaries/newqueue.o + .group 0x00000000 0x8 binaries/newqueue.o + .group 0x00000000 0x8 binaries/newqueue.o + .group 0x00000000 0x8 binaries/newqueue.o + .group 0x00000000 0x8 binaries/newqueue.o + .group 0x00000000 0x8 binaries/newqueue.o + .group 0x00000000 0x8 binaries/newqueue.o + .group 0x00000000 0x8 binaries/newqueue.o + .debug_macro 0x00000000 0x838 binaries/newqueue.o + .debug_macro 0x00000000 0x58 binaries/newqueue.o + .debug_macro 0x00000000 0xb2 binaries/newqueue.o + .debug_macro 0x00000000 0x6a binaries/newqueue.o + .debug_macro 0x00000000 0x52 binaries/newqueue.o + .debug_macro 0x00000000 0x10 binaries/newqueue.o + .debug_macro 0x00000000 0x16 binaries/newqueue.o + .debug_macro 0x00000000 0x1c binaries/newqueue.o + .debug_macro 0x00000000 0x1c binaries/newqueue.o + .debug_macro 0x00000000 0x10 binaries/newqueue.o + .debug_macro 0x00000000 0x28 binaries/newqueue.o + .debug_macro 0x00000000 0x1c1 binaries/newqueue.o + .debug_macro 0x00000000 0xa0 binaries/newqueue.o + .debug_macro 0x00000000 0x10 binaries/newqueue.o + .debug_macro 0x00000000 0x22 binaries/newqueue.o + .debug_macro 0x00000000 0x46 binaries/newqueue.o + .debug_macro 0x00000000 0xfa binaries/newqueue.o + .debug_macro 0x00000000 0xdd binaries/newqueue.o + .debug_macro 0x00000000 0x91 binaries/newqueue.o + .debug_macro 0x00000000 0x8e binaries/newqueue.o + .debug_macro 0x00000000 0x82 binaries/newqueue.o + .debug_macro 0x00000000 0x2e binaries/newqueue.o + .debug_macro 0x00000000 0x3a binaries/newqueue.o + .debug_macro 0x00000000 0x4c binaries/newqueue.o + .debug_macro 0x00000000 0x3a binaries/newqueue.o + .debug_macro 0x00000000 0xa0 binaries/newqueue.o + .debug_macro 0x00000000 0x34 binaries/newqueue.o + .debug_macro 0x00000000 0x7c binaries/newqueue.o + .debug_macro 0x00000000 0x1c binaries/newqueue.o + .debug_macro 0x00000000 0xee binaries/newqueue.o + .debug_macro 0x00000000 0x7c binaries/newqueue.o + .debug_macro 0x00000000 0x20 binaries/newqueue.o + .debug_macro 0x00000000 0x10 binaries/newqueue.o + .debug_macro 0x00000000 0x1c binaries/newqueue.o + .debug_macro 0x00000000 0x34 binaries/newqueue.o + .debug_macro 0x00000000 0xeb binaries/newqueue.o + .debug_macro 0x00000000 0x8e binaries/newqueue.o + .group 0x00000000 0x8 binaries/open.o + .group 0x00000000 0x8 binaries/open.o + .group 0x00000000 0x8 binaries/open.o + .group 0x00000000 0x8 binaries/open.o + .group 0x00000000 0x8 binaries/open.o + .group 0x00000000 0x8 binaries/open.o + .group 0x00000000 0x8 binaries/open.o + .group 0x00000000 0x8 binaries/open.o + .group 0x00000000 0x8 binaries/open.o + .group 0x00000000 0x8 binaries/open.o + .group 0x00000000 0x8 binaries/open.o + .group 0x00000000 0x8 binaries/open.o + .group 0x00000000 0x8 binaries/open.o + .group 0x00000000 0x8 binaries/open.o + .group 0x00000000 0x8 binaries/open.o + .group 0x00000000 0x8 binaries/open.o + .group 0x00000000 0x8 binaries/open.o + .group 0x00000000 0x8 binaries/open.o + .group 0x00000000 0x8 binaries/open.o + .group 0x00000000 0x8 binaries/open.o + .group 0x00000000 0x8 binaries/open.o + .group 0x00000000 0x8 binaries/open.o + .group 0x00000000 0x8 binaries/open.o + .group 0x00000000 0x8 binaries/open.o + .group 0x00000000 0x8 binaries/open.o + .group 0x00000000 0x8 binaries/open.o + .group 0x00000000 0x8 binaries/open.o + .group 0x00000000 0x8 binaries/open.o + .group 0x00000000 0x8 binaries/open.o + .group 0x00000000 0x8 binaries/open.o + .group 0x00000000 0x8 binaries/open.o + .group 0x00000000 0x8 binaries/open.o + .group 0x00000000 0x8 binaries/open.o + .group 0x00000000 0x8 binaries/open.o + .group 0x00000000 0x8 binaries/open.o + .group 0x00000000 0x8 binaries/open.o + .group 0x00000000 0x8 binaries/open.o + .debug_macro 0x00000000 0x838 binaries/open.o + .debug_macro 0x00000000 0x58 binaries/open.o + .debug_macro 0x00000000 0xb2 binaries/open.o + .debug_macro 0x00000000 0x6a binaries/open.o + .debug_macro 0x00000000 0x52 binaries/open.o + .debug_macro 0x00000000 0x10 binaries/open.o + .debug_macro 0x00000000 0x16 binaries/open.o + .debug_macro 0x00000000 0x1c binaries/open.o + .debug_macro 0x00000000 0x1c binaries/open.o + .debug_macro 0x00000000 0x10 binaries/open.o + .debug_macro 0x00000000 0x28 binaries/open.o + .debug_macro 0x00000000 0x1c1 binaries/open.o + .debug_macro 0x00000000 0xa0 binaries/open.o + .debug_macro 0x00000000 0x10 binaries/open.o + .debug_macro 0x00000000 0x22 binaries/open.o + .debug_macro 0x00000000 0x46 binaries/open.o + .debug_macro 0x00000000 0xfa binaries/open.o + .debug_macro 0x00000000 0xdd binaries/open.o + .debug_macro 0x00000000 0x91 binaries/open.o + .debug_macro 0x00000000 0x8e binaries/open.o + .debug_macro 0x00000000 0x82 binaries/open.o + .debug_macro 0x00000000 0x2e binaries/open.o + .debug_macro 0x00000000 0x3a binaries/open.o + .debug_macro 0x00000000 0x4c binaries/open.o + .debug_macro 0x00000000 0x3a binaries/open.o + .debug_macro 0x00000000 0xa0 binaries/open.o + .debug_macro 0x00000000 0x34 binaries/open.o + .debug_macro 0x00000000 0x7c binaries/open.o + .debug_macro 0x00000000 0x1c binaries/open.o + .debug_macro 0x00000000 0xee binaries/open.o + .debug_macro 0x00000000 0x7c binaries/open.o + .debug_macro 0x00000000 0x20 binaries/open.o + .debug_macro 0x00000000 0x10 binaries/open.o + .debug_macro 0x00000000 0x1c binaries/open.o + .debug_macro 0x00000000 0x34 binaries/open.o + .debug_macro 0x00000000 0xeb binaries/open.o + .debug_macro 0x00000000 0x8e binaries/open.o + .group 0x00000000 0x8 binaries/panic.o + .group 0x00000000 0x8 binaries/panic.o + .group 0x00000000 0x8 binaries/panic.o + .group 0x00000000 0x8 binaries/panic.o + .group 0x00000000 0x8 binaries/panic.o + .group 0x00000000 0x8 binaries/panic.o + .group 0x00000000 0x8 binaries/panic.o + .group 0x00000000 0x8 binaries/panic.o + .group 0x00000000 0x8 binaries/panic.o + .group 0x00000000 0x8 binaries/panic.o + .group 0x00000000 0x8 binaries/panic.o + .group 0x00000000 0x8 binaries/panic.o + .group 0x00000000 0x8 binaries/panic.o + .group 0x00000000 0x8 binaries/panic.o + .group 0x00000000 0x8 binaries/panic.o + .group 0x00000000 0x8 binaries/panic.o + .group 0x00000000 0x8 binaries/panic.o + .group 0x00000000 0x8 binaries/panic.o + .group 0x00000000 0x8 binaries/panic.o + .group 0x00000000 0x8 binaries/panic.o + .group 0x00000000 0x8 binaries/panic.o + .group 0x00000000 0x8 binaries/panic.o + .group 0x00000000 0x8 binaries/panic.o + .group 0x00000000 0x8 binaries/panic.o + .group 0x00000000 0x8 binaries/panic.o + .group 0x00000000 0x8 binaries/panic.o + .group 0x00000000 0x8 binaries/panic.o + .group 0x00000000 0x8 binaries/panic.o + .group 0x00000000 0x8 binaries/panic.o + .group 0x00000000 0x8 binaries/panic.o + .group 0x00000000 0x8 binaries/panic.o + .group 0x00000000 0x8 binaries/panic.o + .group 0x00000000 0x8 binaries/panic.o + .group 0x00000000 0x8 binaries/panic.o + .group 0x00000000 0x8 binaries/panic.o + .group 0x00000000 0x8 binaries/panic.o + .group 0x00000000 0x8 binaries/panic.o + .debug_macro 0x00000000 0x838 binaries/panic.o + .debug_macro 0x00000000 0x58 binaries/panic.o + .debug_macro 0x00000000 0xb2 binaries/panic.o + .debug_macro 0x00000000 0x6a binaries/panic.o + .debug_macro 0x00000000 0x52 binaries/panic.o + .debug_macro 0x00000000 0x10 binaries/panic.o + .debug_macro 0x00000000 0x16 binaries/panic.o + .debug_macro 0x00000000 0x1c binaries/panic.o + .debug_macro 0x00000000 0x1c binaries/panic.o + .debug_macro 0x00000000 0x10 binaries/panic.o + .debug_macro 0x00000000 0x28 binaries/panic.o + .debug_macro 0x00000000 0x1c1 binaries/panic.o + .debug_macro 0x00000000 0xa0 binaries/panic.o + .debug_macro 0x00000000 0x10 binaries/panic.o + .debug_macro 0x00000000 0x22 binaries/panic.o + .debug_macro 0x00000000 0x46 binaries/panic.o + .debug_macro 0x00000000 0xfa binaries/panic.o + .debug_macro 0x00000000 0xdd binaries/panic.o + .debug_macro 0x00000000 0x91 binaries/panic.o + .debug_macro 0x00000000 0x8e binaries/panic.o + .debug_macro 0x00000000 0x82 binaries/panic.o + .debug_macro 0x00000000 0x2e binaries/panic.o + .debug_macro 0x00000000 0x3a binaries/panic.o + .debug_macro 0x00000000 0x4c binaries/panic.o + .debug_macro 0x00000000 0x3a binaries/panic.o + .debug_macro 0x00000000 0xa0 binaries/panic.o + .debug_macro 0x00000000 0x34 binaries/panic.o + .debug_macro 0x00000000 0x7c binaries/panic.o + .debug_macro 0x00000000 0x1c binaries/panic.o + .debug_macro 0x00000000 0xee binaries/panic.o + .debug_macro 0x00000000 0x7c binaries/panic.o + .debug_macro 0x00000000 0x20 binaries/panic.o + .debug_macro 0x00000000 0x10 binaries/panic.o + .debug_macro 0x00000000 0x1c binaries/panic.o + .debug_macro 0x00000000 0x34 binaries/panic.o + .debug_macro 0x00000000 0xeb binaries/panic.o + .debug_macro 0x00000000 0x8e binaries/panic.o + .group 0x00000000 0x8 binaries/pl190.o + .group 0x00000000 0x8 binaries/pl190.o + .group 0x00000000 0x8 binaries/pl190.o + .group 0x00000000 0x8 binaries/pl190.o + .group 0x00000000 0x8 binaries/pl190.o + .group 0x00000000 0x8 binaries/pl190.o + .group 0x00000000 0x8 binaries/pl190.o + .group 0x00000000 0x8 binaries/pl190.o + .group 0x00000000 0x8 binaries/pl190.o + .group 0x00000000 0x8 binaries/pl190.o + .group 0x00000000 0x8 binaries/pl190.o + .group 0x00000000 0x8 binaries/pl190.o + .group 0x00000000 0x8 binaries/pl190.o + .group 0x00000000 0x8 binaries/pl190.o + .group 0x00000000 0x8 binaries/pl190.o + .group 0x00000000 0x8 binaries/pl190.o + .group 0x00000000 0x8 binaries/pl190.o + .group 0x00000000 0x8 binaries/pl190.o + .group 0x00000000 0x8 binaries/pl190.o + .group 0x00000000 0x8 binaries/pl190.o + .group 0x00000000 0x8 binaries/pl190.o + .group 0x00000000 0x8 binaries/pl190.o + .group 0x00000000 0x8 binaries/pl190.o + .group 0x00000000 0x8 binaries/pl190.o + .group 0x00000000 0x8 binaries/pl190.o + .group 0x00000000 0x8 binaries/pl190.o + .group 0x00000000 0x8 binaries/pl190.o + .group 0x00000000 0x8 binaries/pl190.o + .group 0x00000000 0x8 binaries/pl190.o + .group 0x00000000 0x8 binaries/pl190.o + .group 0x00000000 0x8 binaries/pl190.o + .group 0x00000000 0x8 binaries/pl190.o + .group 0x00000000 0x8 binaries/pl190.o + .group 0x00000000 0x8 binaries/pl190.o + .group 0x00000000 0x8 binaries/pl190.o + .group 0x00000000 0x8 binaries/pl190.o + .group 0x00000000 0x8 binaries/pl190.o + .debug_macro 0x00000000 0x838 binaries/pl190.o + .debug_macro 0x00000000 0x58 binaries/pl190.o + .debug_macro 0x00000000 0xb2 binaries/pl190.o + .debug_macro 0x00000000 0x6a binaries/pl190.o + .debug_macro 0x00000000 0x52 binaries/pl190.o + .debug_macro 0x00000000 0x10 binaries/pl190.o + .debug_macro 0x00000000 0x16 binaries/pl190.o + .debug_macro 0x00000000 0x1c binaries/pl190.o + .debug_macro 0x00000000 0x1c binaries/pl190.o + .debug_macro 0x00000000 0x10 binaries/pl190.o + .debug_macro 0x00000000 0x28 binaries/pl190.o + .debug_macro 0x00000000 0x1c1 binaries/pl190.o + .debug_macro 0x00000000 0xa0 binaries/pl190.o + .debug_macro 0x00000000 0x10 binaries/pl190.o + .debug_macro 0x00000000 0x22 binaries/pl190.o + .debug_macro 0x00000000 0x46 binaries/pl190.o + .debug_macro 0x00000000 0xfa binaries/pl190.o + .debug_macro 0x00000000 0xdd binaries/pl190.o + .debug_macro 0x00000000 0x91 binaries/pl190.o + .debug_macro 0x00000000 0x8e binaries/pl190.o + .debug_macro 0x00000000 0x82 binaries/pl190.o + .debug_macro 0x00000000 0x2e binaries/pl190.o + .debug_macro 0x00000000 0x3a binaries/pl190.o + .debug_macro 0x00000000 0x4c binaries/pl190.o + .debug_macro 0x00000000 0x3a binaries/pl190.o + .debug_macro 0x00000000 0xa0 binaries/pl190.o + .debug_macro 0x00000000 0x34 binaries/pl190.o + .debug_macro 0x00000000 0x7c binaries/pl190.o + .debug_macro 0x00000000 0x1c binaries/pl190.o + .debug_macro 0x00000000 0xee binaries/pl190.o + .debug_macro 0x00000000 0x7c binaries/pl190.o + .debug_macro 0x00000000 0x20 binaries/pl190.o + .debug_macro 0x00000000 0x10 binaries/pl190.o + .debug_macro 0x00000000 0x1c binaries/pl190.o + .debug_macro 0x00000000 0x34 binaries/pl190.o + .debug_macro 0x00000000 0xeb binaries/pl190.o + .debug_macro 0x00000000 0x8e binaries/pl190.o + .group 0x00000000 0x8 binaries/platinit.o + .group 0x00000000 0x8 binaries/platinit.o + .group 0x00000000 0x8 binaries/platinit.o + .group 0x00000000 0x8 binaries/platinit.o + .group 0x00000000 0x8 binaries/platinit.o + .group 0x00000000 0x8 binaries/platinit.o + .group 0x00000000 0x8 binaries/platinit.o + .group 0x00000000 0x8 binaries/platinit.o + .group 0x00000000 0x8 binaries/platinit.o + .group 0x00000000 0x8 binaries/platinit.o + .group 0x00000000 0x8 binaries/platinit.o + .group 0x00000000 0x8 binaries/platinit.o + .group 0x00000000 0x8 binaries/platinit.o + .group 0x00000000 0x8 binaries/platinit.o + .group 0x00000000 0x8 binaries/platinit.o + .group 0x00000000 0x8 binaries/platinit.o + .group 0x00000000 0x8 binaries/platinit.o + .group 0x00000000 0x8 binaries/platinit.o + .group 0x00000000 0x8 binaries/platinit.o + .group 0x00000000 0x8 binaries/platinit.o + .group 0x00000000 0x8 binaries/platinit.o + .group 0x00000000 0x8 binaries/platinit.o + .group 0x00000000 0x8 binaries/platinit.o + .group 0x00000000 0x8 binaries/platinit.o + .group 0x00000000 0x8 binaries/platinit.o + .group 0x00000000 0x8 binaries/platinit.o + .group 0x00000000 0x8 binaries/platinit.o + .group 0x00000000 0x8 binaries/platinit.o + .group 0x00000000 0x8 binaries/platinit.o + .group 0x00000000 0x8 binaries/platinit.o + .group 0x00000000 0x8 binaries/platinit.o + .group 0x00000000 0x8 binaries/platinit.o + .group 0x00000000 0x8 binaries/platinit.o + .group 0x00000000 0x8 binaries/platinit.o + .group 0x00000000 0x8 binaries/platinit.o + .group 0x00000000 0x8 binaries/platinit.o + .group 0x00000000 0x8 binaries/platinit.o + .group 0x00000000 0x8 binaries/platinit.o + .group 0x00000000 0x8 binaries/platinit.o + .debug_macro 0x00000000 0x838 binaries/platinit.o + .debug_macro 0x00000000 0x58 binaries/platinit.o + .debug_macro 0x00000000 0xb2 binaries/platinit.o + .debug_macro 0x00000000 0x6a binaries/platinit.o + .debug_macro 0x00000000 0x52 binaries/platinit.o + .debug_macro 0x00000000 0x10 binaries/platinit.o + .debug_macro 0x00000000 0x16 binaries/platinit.o + .debug_macro 0x00000000 0x1c binaries/platinit.o + .debug_macro 0x00000000 0x1c binaries/platinit.o + .debug_macro 0x00000000 0x10 binaries/platinit.o + .debug_macro 0x00000000 0x28 binaries/platinit.o + .debug_macro 0x00000000 0x1c1 binaries/platinit.o + .debug_macro 0x00000000 0xa0 binaries/platinit.o + .debug_macro 0x00000000 0x10 binaries/platinit.o + .debug_macro 0x00000000 0x22 binaries/platinit.o + .debug_macro 0x00000000 0x46 binaries/platinit.o + .debug_macro 0x00000000 0xfa binaries/platinit.o + .debug_macro 0x00000000 0xdd binaries/platinit.o + .debug_macro 0x00000000 0x91 binaries/platinit.o + .debug_macro 0x00000000 0x8e binaries/platinit.o + .debug_macro 0x00000000 0x82 binaries/platinit.o + .debug_macro 0x00000000 0x2e binaries/platinit.o + .debug_macro 0x00000000 0x3a binaries/platinit.o + .debug_macro 0x00000000 0x4c binaries/platinit.o + .debug_macro 0x00000000 0x3a binaries/platinit.o + .debug_macro 0x00000000 0xa0 binaries/platinit.o + .debug_macro 0x00000000 0x34 binaries/platinit.o + .debug_macro 0x00000000 0x7c binaries/platinit.o + .debug_macro 0x00000000 0x1c binaries/platinit.o + .debug_macro 0x00000000 0xee binaries/platinit.o + .debug_macro 0x00000000 0x7c binaries/platinit.o + .debug_macro 0x00000000 0x20 binaries/platinit.o + .debug_macro 0x00000000 0x10 binaries/platinit.o + .debug_macro 0x00000000 0x1c binaries/platinit.o + .debug_macro 0x00000000 0x34 binaries/platinit.o + .debug_macro 0x00000000 0xeb binaries/platinit.o + .debug_macro 0x00000000 0x8e binaries/platinit.o + .debug_macro 0x00000000 0x1c binaries/platinit.o + .debug_macro 0x00000000 0x5e binaries/platinit.o + .group 0x00000000 0x8 binaries/ptclear.o + .group 0x00000000 0x8 binaries/ptclear.o + .group 0x00000000 0x8 binaries/ptclear.o + .group 0x00000000 0x8 binaries/ptclear.o + .group 0x00000000 0x8 binaries/ptclear.o + .group 0x00000000 0x8 binaries/ptclear.o + .group 0x00000000 0x8 binaries/ptclear.o + .group 0x00000000 0x8 binaries/ptclear.o + .group 0x00000000 0x8 binaries/ptclear.o + .group 0x00000000 0x8 binaries/ptclear.o + .group 0x00000000 0x8 binaries/ptclear.o + .group 0x00000000 0x8 binaries/ptclear.o + .group 0x00000000 0x8 binaries/ptclear.o + .group 0x00000000 0x8 binaries/ptclear.o + .group 0x00000000 0x8 binaries/ptclear.o + .group 0x00000000 0x8 binaries/ptclear.o + .group 0x00000000 0x8 binaries/ptclear.o + .group 0x00000000 0x8 binaries/ptclear.o + .group 0x00000000 0x8 binaries/ptclear.o + .group 0x00000000 0x8 binaries/ptclear.o + .group 0x00000000 0x8 binaries/ptclear.o + .group 0x00000000 0x8 binaries/ptclear.o + .group 0x00000000 0x8 binaries/ptclear.o + .group 0x00000000 0x8 binaries/ptclear.o + .group 0x00000000 0x8 binaries/ptclear.o + .group 0x00000000 0x8 binaries/ptclear.o + .group 0x00000000 0x8 binaries/ptclear.o + .group 0x00000000 0x8 binaries/ptclear.o + .group 0x00000000 0x8 binaries/ptclear.o + .group 0x00000000 0x8 binaries/ptclear.o + .group 0x00000000 0x8 binaries/ptclear.o + .group 0x00000000 0x8 binaries/ptclear.o + .group 0x00000000 0x8 binaries/ptclear.o + .group 0x00000000 0x8 binaries/ptclear.o + .group 0x00000000 0x8 binaries/ptclear.o + .group 0x00000000 0x8 binaries/ptclear.o + .group 0x00000000 0x8 binaries/ptclear.o + .debug_macro 0x00000000 0x838 binaries/ptclear.o + .debug_macro 0x00000000 0x58 binaries/ptclear.o + .debug_macro 0x00000000 0xb2 binaries/ptclear.o + .debug_macro 0x00000000 0x6a binaries/ptclear.o + .debug_macro 0x00000000 0x52 binaries/ptclear.o + .debug_macro 0x00000000 0x10 binaries/ptclear.o + .debug_macro 0x00000000 0x16 binaries/ptclear.o + .debug_macro 0x00000000 0x1c binaries/ptclear.o + .debug_macro 0x00000000 0x1c binaries/ptclear.o + .debug_macro 0x00000000 0x10 binaries/ptclear.o + .debug_macro 0x00000000 0x28 binaries/ptclear.o + .debug_macro 0x00000000 0x1c1 binaries/ptclear.o + .debug_macro 0x00000000 0xa0 binaries/ptclear.o + .debug_macro 0x00000000 0x10 binaries/ptclear.o + .debug_macro 0x00000000 0x22 binaries/ptclear.o + .debug_macro 0x00000000 0x46 binaries/ptclear.o + .debug_macro 0x00000000 0xfa binaries/ptclear.o + .debug_macro 0x00000000 0xdd binaries/ptclear.o + .debug_macro 0x00000000 0x91 binaries/ptclear.o + .debug_macro 0x00000000 0x8e binaries/ptclear.o + .debug_macro 0x00000000 0x82 binaries/ptclear.o + .debug_macro 0x00000000 0x2e binaries/ptclear.o + .debug_macro 0x00000000 0x3a binaries/ptclear.o + .debug_macro 0x00000000 0x4c binaries/ptclear.o + .debug_macro 0x00000000 0x3a binaries/ptclear.o + .debug_macro 0x00000000 0xa0 binaries/ptclear.o + .debug_macro 0x00000000 0x34 binaries/ptclear.o + .debug_macro 0x00000000 0x7c binaries/ptclear.o + .debug_macro 0x00000000 0x1c binaries/ptclear.o + .debug_macro 0x00000000 0xee binaries/ptclear.o + .debug_macro 0x00000000 0x7c binaries/ptclear.o + .debug_macro 0x00000000 0x20 binaries/ptclear.o + .debug_macro 0x00000000 0x10 binaries/ptclear.o + .debug_macro 0x00000000 0x1c binaries/ptclear.o + .debug_macro 0x00000000 0x34 binaries/ptclear.o + .debug_macro 0x00000000 0xeb binaries/ptclear.o + .debug_macro 0x00000000 0x8e binaries/ptclear.o + .group 0x00000000 0x8 binaries/ptcount.o + .group 0x00000000 0x8 binaries/ptcount.o + .group 0x00000000 0x8 binaries/ptcount.o + .group 0x00000000 0x8 binaries/ptcount.o + .group 0x00000000 0x8 binaries/ptcount.o + .group 0x00000000 0x8 binaries/ptcount.o + .group 0x00000000 0x8 binaries/ptcount.o + .group 0x00000000 0x8 binaries/ptcount.o + .group 0x00000000 0x8 binaries/ptcount.o + .group 0x00000000 0x8 binaries/ptcount.o + .group 0x00000000 0x8 binaries/ptcount.o + .group 0x00000000 0x8 binaries/ptcount.o + .group 0x00000000 0x8 binaries/ptcount.o + .group 0x00000000 0x8 binaries/ptcount.o + .group 0x00000000 0x8 binaries/ptcount.o + .group 0x00000000 0x8 binaries/ptcount.o + .group 0x00000000 0x8 binaries/ptcount.o + .group 0x00000000 0x8 binaries/ptcount.o + .group 0x00000000 0x8 binaries/ptcount.o + .group 0x00000000 0x8 binaries/ptcount.o + .group 0x00000000 0x8 binaries/ptcount.o + .group 0x00000000 0x8 binaries/ptcount.o + .group 0x00000000 0x8 binaries/ptcount.o + .group 0x00000000 0x8 binaries/ptcount.o + .group 0x00000000 0x8 binaries/ptcount.o + .group 0x00000000 0x8 binaries/ptcount.o + .group 0x00000000 0x8 binaries/ptcount.o + .group 0x00000000 0x8 binaries/ptcount.o + .group 0x00000000 0x8 binaries/ptcount.o + .group 0x00000000 0x8 binaries/ptcount.o + .group 0x00000000 0x8 binaries/ptcount.o + .group 0x00000000 0x8 binaries/ptcount.o + .group 0x00000000 0x8 binaries/ptcount.o + .group 0x00000000 0x8 binaries/ptcount.o + .group 0x00000000 0x8 binaries/ptcount.o + .group 0x00000000 0x8 binaries/ptcount.o + .group 0x00000000 0x8 binaries/ptcount.o + .debug_macro 0x00000000 0x838 binaries/ptcount.o + .debug_macro 0x00000000 0x58 binaries/ptcount.o + .debug_macro 0x00000000 0xb2 binaries/ptcount.o + .debug_macro 0x00000000 0x6a binaries/ptcount.o + .debug_macro 0x00000000 0x52 binaries/ptcount.o + .debug_macro 0x00000000 0x10 binaries/ptcount.o + .debug_macro 0x00000000 0x16 binaries/ptcount.o + .debug_macro 0x00000000 0x1c binaries/ptcount.o + .debug_macro 0x00000000 0x1c binaries/ptcount.o + .debug_macro 0x00000000 0x10 binaries/ptcount.o + .debug_macro 0x00000000 0x28 binaries/ptcount.o + .debug_macro 0x00000000 0x1c1 binaries/ptcount.o + .debug_macro 0x00000000 0xa0 binaries/ptcount.o + .debug_macro 0x00000000 0x10 binaries/ptcount.o + .debug_macro 0x00000000 0x22 binaries/ptcount.o + .debug_macro 0x00000000 0x46 binaries/ptcount.o + .debug_macro 0x00000000 0xfa binaries/ptcount.o + .debug_macro 0x00000000 0xdd binaries/ptcount.o + .debug_macro 0x00000000 0x91 binaries/ptcount.o + .debug_macro 0x00000000 0x8e binaries/ptcount.o + .debug_macro 0x00000000 0x82 binaries/ptcount.o + .debug_macro 0x00000000 0x2e binaries/ptcount.o + .debug_macro 0x00000000 0x3a binaries/ptcount.o + .debug_macro 0x00000000 0x4c binaries/ptcount.o + .debug_macro 0x00000000 0x3a binaries/ptcount.o + .debug_macro 0x00000000 0xa0 binaries/ptcount.o + .debug_macro 0x00000000 0x34 binaries/ptcount.o + .debug_macro 0x00000000 0x7c binaries/ptcount.o + .debug_macro 0x00000000 0x1c binaries/ptcount.o + .debug_macro 0x00000000 0xee binaries/ptcount.o + .debug_macro 0x00000000 0x7c binaries/ptcount.o + .debug_macro 0x00000000 0x20 binaries/ptcount.o + .debug_macro 0x00000000 0x10 binaries/ptcount.o + .debug_macro 0x00000000 0x1c binaries/ptcount.o + .debug_macro 0x00000000 0x34 binaries/ptcount.o + .debug_macro 0x00000000 0xeb binaries/ptcount.o + .debug_macro 0x00000000 0x8e binaries/ptcount.o + .group 0x00000000 0x8 binaries/ptcreate.o + .group 0x00000000 0x8 binaries/ptcreate.o + .group 0x00000000 0x8 binaries/ptcreate.o + .group 0x00000000 0x8 binaries/ptcreate.o + .group 0x00000000 0x8 binaries/ptcreate.o + .group 0x00000000 0x8 binaries/ptcreate.o + .group 0x00000000 0x8 binaries/ptcreate.o + .group 0x00000000 0x8 binaries/ptcreate.o + .group 0x00000000 0x8 binaries/ptcreate.o + .group 0x00000000 0x8 binaries/ptcreate.o + .group 0x00000000 0x8 binaries/ptcreate.o + .group 0x00000000 0x8 binaries/ptcreate.o + .group 0x00000000 0x8 binaries/ptcreate.o + .group 0x00000000 0x8 binaries/ptcreate.o + .group 0x00000000 0x8 binaries/ptcreate.o + .group 0x00000000 0x8 binaries/ptcreate.o + .group 0x00000000 0x8 binaries/ptcreate.o + .group 0x00000000 0x8 binaries/ptcreate.o + .group 0x00000000 0x8 binaries/ptcreate.o + .group 0x00000000 0x8 binaries/ptcreate.o + .group 0x00000000 0x8 binaries/ptcreate.o + .group 0x00000000 0x8 binaries/ptcreate.o + .group 0x00000000 0x8 binaries/ptcreate.o + .group 0x00000000 0x8 binaries/ptcreate.o + .group 0x00000000 0x8 binaries/ptcreate.o + .group 0x00000000 0x8 binaries/ptcreate.o + .group 0x00000000 0x8 binaries/ptcreate.o + .group 0x00000000 0x8 binaries/ptcreate.o + .group 0x00000000 0x8 binaries/ptcreate.o + .group 0x00000000 0x8 binaries/ptcreate.o + .group 0x00000000 0x8 binaries/ptcreate.o + .group 0x00000000 0x8 binaries/ptcreate.o + .group 0x00000000 0x8 binaries/ptcreate.o + .group 0x00000000 0x8 binaries/ptcreate.o + .group 0x00000000 0x8 binaries/ptcreate.o + .group 0x00000000 0x8 binaries/ptcreate.o + .group 0x00000000 0x8 binaries/ptcreate.o + .debug_macro 0x00000000 0x838 binaries/ptcreate.o + .debug_macro 0x00000000 0x58 binaries/ptcreate.o + .debug_macro 0x00000000 0xb2 binaries/ptcreate.o + .debug_macro 0x00000000 0x6a binaries/ptcreate.o + .debug_macro 0x00000000 0x52 binaries/ptcreate.o + .debug_macro 0x00000000 0x10 binaries/ptcreate.o + .debug_macro 0x00000000 0x16 binaries/ptcreate.o + .debug_macro 0x00000000 0x1c binaries/ptcreate.o + .debug_macro 0x00000000 0x1c binaries/ptcreate.o + .debug_macro 0x00000000 0x10 binaries/ptcreate.o + .debug_macro 0x00000000 0x28 binaries/ptcreate.o + .debug_macro 0x00000000 0x1c1 binaries/ptcreate.o + .debug_macro 0x00000000 0xa0 binaries/ptcreate.o + .debug_macro 0x00000000 0x10 binaries/ptcreate.o + .debug_macro 0x00000000 0x22 binaries/ptcreate.o + .debug_macro 0x00000000 0x46 binaries/ptcreate.o + .debug_macro 0x00000000 0xfa binaries/ptcreate.o + .debug_macro 0x00000000 0xdd binaries/ptcreate.o + .debug_macro 0x00000000 0x91 binaries/ptcreate.o + .debug_macro 0x00000000 0x8e binaries/ptcreate.o + .debug_macro 0x00000000 0x82 binaries/ptcreate.o + .debug_macro 0x00000000 0x2e binaries/ptcreate.o + .debug_macro 0x00000000 0x3a binaries/ptcreate.o + .debug_macro 0x00000000 0x4c binaries/ptcreate.o + .debug_macro 0x00000000 0x3a binaries/ptcreate.o + .debug_macro 0x00000000 0xa0 binaries/ptcreate.o + .debug_macro 0x00000000 0x34 binaries/ptcreate.o + .debug_macro 0x00000000 0x7c binaries/ptcreate.o + .debug_macro 0x00000000 0x1c binaries/ptcreate.o + .debug_macro 0x00000000 0xee binaries/ptcreate.o + .debug_macro 0x00000000 0x7c binaries/ptcreate.o + .debug_macro 0x00000000 0x20 binaries/ptcreate.o + .debug_macro 0x00000000 0x10 binaries/ptcreate.o + .debug_macro 0x00000000 0x1c binaries/ptcreate.o + .debug_macro 0x00000000 0x34 binaries/ptcreate.o + .debug_macro 0x00000000 0xeb binaries/ptcreate.o + .debug_macro 0x00000000 0x8e binaries/ptcreate.o + .group 0x00000000 0x8 binaries/ptdelete.o + .group 0x00000000 0x8 binaries/ptdelete.o + .group 0x00000000 0x8 binaries/ptdelete.o + .group 0x00000000 0x8 binaries/ptdelete.o + .group 0x00000000 0x8 binaries/ptdelete.o + .group 0x00000000 0x8 binaries/ptdelete.o + .group 0x00000000 0x8 binaries/ptdelete.o + .group 0x00000000 0x8 binaries/ptdelete.o + .group 0x00000000 0x8 binaries/ptdelete.o + .group 0x00000000 0x8 binaries/ptdelete.o + .group 0x00000000 0x8 binaries/ptdelete.o + .group 0x00000000 0x8 binaries/ptdelete.o + .group 0x00000000 0x8 binaries/ptdelete.o + .group 0x00000000 0x8 binaries/ptdelete.o + .group 0x00000000 0x8 binaries/ptdelete.o + .group 0x00000000 0x8 binaries/ptdelete.o + .group 0x00000000 0x8 binaries/ptdelete.o + .group 0x00000000 0x8 binaries/ptdelete.o + .group 0x00000000 0x8 binaries/ptdelete.o + .group 0x00000000 0x8 binaries/ptdelete.o + .group 0x00000000 0x8 binaries/ptdelete.o + .group 0x00000000 0x8 binaries/ptdelete.o + .group 0x00000000 0x8 binaries/ptdelete.o + .group 0x00000000 0x8 binaries/ptdelete.o + .group 0x00000000 0x8 binaries/ptdelete.o + .group 0x00000000 0x8 binaries/ptdelete.o + .group 0x00000000 0x8 binaries/ptdelete.o + .group 0x00000000 0x8 binaries/ptdelete.o + .group 0x00000000 0x8 binaries/ptdelete.o + .group 0x00000000 0x8 binaries/ptdelete.o + .group 0x00000000 0x8 binaries/ptdelete.o + .group 0x00000000 0x8 binaries/ptdelete.o + .group 0x00000000 0x8 binaries/ptdelete.o + .group 0x00000000 0x8 binaries/ptdelete.o + .group 0x00000000 0x8 binaries/ptdelete.o + .group 0x00000000 0x8 binaries/ptdelete.o + .group 0x00000000 0x8 binaries/ptdelete.o + .debug_macro 0x00000000 0x838 binaries/ptdelete.o + .debug_macro 0x00000000 0x58 binaries/ptdelete.o + .debug_macro 0x00000000 0xb2 binaries/ptdelete.o + .debug_macro 0x00000000 0x6a binaries/ptdelete.o + .debug_macro 0x00000000 0x52 binaries/ptdelete.o + .debug_macro 0x00000000 0x10 binaries/ptdelete.o + .debug_macro 0x00000000 0x16 binaries/ptdelete.o + .debug_macro 0x00000000 0x1c binaries/ptdelete.o + .debug_macro 0x00000000 0x1c binaries/ptdelete.o + .debug_macro 0x00000000 0x10 binaries/ptdelete.o + .debug_macro 0x00000000 0x28 binaries/ptdelete.o + .debug_macro 0x00000000 0x1c1 binaries/ptdelete.o + .debug_macro 0x00000000 0xa0 binaries/ptdelete.o + .debug_macro 0x00000000 0x10 binaries/ptdelete.o + .debug_macro 0x00000000 0x22 binaries/ptdelete.o + .debug_macro 0x00000000 0x46 binaries/ptdelete.o + .debug_macro 0x00000000 0xfa binaries/ptdelete.o + .debug_macro 0x00000000 0xdd binaries/ptdelete.o + .debug_macro 0x00000000 0x91 binaries/ptdelete.o + .debug_macro 0x00000000 0x8e binaries/ptdelete.o + .debug_macro 0x00000000 0x82 binaries/ptdelete.o + .debug_macro 0x00000000 0x2e binaries/ptdelete.o + .debug_macro 0x00000000 0x3a binaries/ptdelete.o + .debug_macro 0x00000000 0x4c binaries/ptdelete.o + .debug_macro 0x00000000 0x3a binaries/ptdelete.o + .debug_macro 0x00000000 0xa0 binaries/ptdelete.o + .debug_macro 0x00000000 0x34 binaries/ptdelete.o + .debug_macro 0x00000000 0x7c binaries/ptdelete.o + .debug_macro 0x00000000 0x1c binaries/ptdelete.o + .debug_macro 0x00000000 0xee binaries/ptdelete.o + .debug_macro 0x00000000 0x7c binaries/ptdelete.o + .debug_macro 0x00000000 0x20 binaries/ptdelete.o + .debug_macro 0x00000000 0x10 binaries/ptdelete.o + .debug_macro 0x00000000 0x1c binaries/ptdelete.o + .debug_macro 0x00000000 0x34 binaries/ptdelete.o + .debug_macro 0x00000000 0xeb binaries/ptdelete.o + .debug_macro 0x00000000 0x8e binaries/ptdelete.o + .group 0x00000000 0x8 binaries/ptinit.o + .group 0x00000000 0x8 binaries/ptinit.o + .group 0x00000000 0x8 binaries/ptinit.o + .group 0x00000000 0x8 binaries/ptinit.o + .group 0x00000000 0x8 binaries/ptinit.o + .group 0x00000000 0x8 binaries/ptinit.o + .group 0x00000000 0x8 binaries/ptinit.o + .group 0x00000000 0x8 binaries/ptinit.o + .group 0x00000000 0x8 binaries/ptinit.o + .group 0x00000000 0x8 binaries/ptinit.o + .group 0x00000000 0x8 binaries/ptinit.o + .group 0x00000000 0x8 binaries/ptinit.o + .group 0x00000000 0x8 binaries/ptinit.o + .group 0x00000000 0x8 binaries/ptinit.o + .group 0x00000000 0x8 binaries/ptinit.o + .group 0x00000000 0x8 binaries/ptinit.o + .group 0x00000000 0x8 binaries/ptinit.o + .group 0x00000000 0x8 binaries/ptinit.o + .group 0x00000000 0x8 binaries/ptinit.o + .group 0x00000000 0x8 binaries/ptinit.o + .group 0x00000000 0x8 binaries/ptinit.o + .group 0x00000000 0x8 binaries/ptinit.o + .group 0x00000000 0x8 binaries/ptinit.o + .group 0x00000000 0x8 binaries/ptinit.o + .group 0x00000000 0x8 binaries/ptinit.o + .group 0x00000000 0x8 binaries/ptinit.o + .group 0x00000000 0x8 binaries/ptinit.o + .group 0x00000000 0x8 binaries/ptinit.o + .group 0x00000000 0x8 binaries/ptinit.o + .group 0x00000000 0x8 binaries/ptinit.o + .group 0x00000000 0x8 binaries/ptinit.o + .group 0x00000000 0x8 binaries/ptinit.o + .group 0x00000000 0x8 binaries/ptinit.o + .group 0x00000000 0x8 binaries/ptinit.o + .group 0x00000000 0x8 binaries/ptinit.o + .group 0x00000000 0x8 binaries/ptinit.o + .group 0x00000000 0x8 binaries/ptinit.o + .debug_macro 0x00000000 0x838 binaries/ptinit.o + .debug_macro 0x00000000 0x58 binaries/ptinit.o + .debug_macro 0x00000000 0xb2 binaries/ptinit.o + .debug_macro 0x00000000 0x6a binaries/ptinit.o + .debug_macro 0x00000000 0x52 binaries/ptinit.o + .debug_macro 0x00000000 0x10 binaries/ptinit.o + .debug_macro 0x00000000 0x16 binaries/ptinit.o + .debug_macro 0x00000000 0x1c binaries/ptinit.o + .debug_macro 0x00000000 0x1c binaries/ptinit.o + .debug_macro 0x00000000 0x10 binaries/ptinit.o + .debug_macro 0x00000000 0x28 binaries/ptinit.o + .debug_macro 0x00000000 0x1c1 binaries/ptinit.o + .debug_macro 0x00000000 0xa0 binaries/ptinit.o + .debug_macro 0x00000000 0x10 binaries/ptinit.o + .debug_macro 0x00000000 0x22 binaries/ptinit.o + .debug_macro 0x00000000 0x46 binaries/ptinit.o + .debug_macro 0x00000000 0xfa binaries/ptinit.o + .debug_macro 0x00000000 0xdd binaries/ptinit.o + .debug_macro 0x00000000 0x91 binaries/ptinit.o + .debug_macro 0x00000000 0x8e binaries/ptinit.o + .debug_macro 0x00000000 0x82 binaries/ptinit.o + .debug_macro 0x00000000 0x2e binaries/ptinit.o + .debug_macro 0x00000000 0x3a binaries/ptinit.o + .debug_macro 0x00000000 0x4c binaries/ptinit.o + .debug_macro 0x00000000 0x3a binaries/ptinit.o + .debug_macro 0x00000000 0xa0 binaries/ptinit.o + .debug_macro 0x00000000 0x34 binaries/ptinit.o + .debug_macro 0x00000000 0x7c binaries/ptinit.o + .debug_macro 0x00000000 0x1c binaries/ptinit.o + .debug_macro 0x00000000 0xee binaries/ptinit.o + .debug_macro 0x00000000 0x7c binaries/ptinit.o + .debug_macro 0x00000000 0x20 binaries/ptinit.o + .debug_macro 0x00000000 0x10 binaries/ptinit.o + .debug_macro 0x00000000 0x1c binaries/ptinit.o + .debug_macro 0x00000000 0x34 binaries/ptinit.o + .debug_macro 0x00000000 0xeb binaries/ptinit.o + .debug_macro 0x00000000 0x8e binaries/ptinit.o + .group 0x00000000 0x8 binaries/ptrecv.o + .group 0x00000000 0x8 binaries/ptrecv.o + .group 0x00000000 0x8 binaries/ptrecv.o + .group 0x00000000 0x8 binaries/ptrecv.o + .group 0x00000000 0x8 binaries/ptrecv.o + .group 0x00000000 0x8 binaries/ptrecv.o + .group 0x00000000 0x8 binaries/ptrecv.o + .group 0x00000000 0x8 binaries/ptrecv.o + .group 0x00000000 0x8 binaries/ptrecv.o + .group 0x00000000 0x8 binaries/ptrecv.o + .group 0x00000000 0x8 binaries/ptrecv.o + .group 0x00000000 0x8 binaries/ptrecv.o + .group 0x00000000 0x8 binaries/ptrecv.o + .group 0x00000000 0x8 binaries/ptrecv.o + .group 0x00000000 0x8 binaries/ptrecv.o + .group 0x00000000 0x8 binaries/ptrecv.o + .group 0x00000000 0x8 binaries/ptrecv.o + .group 0x00000000 0x8 binaries/ptrecv.o + .group 0x00000000 0x8 binaries/ptrecv.o + .group 0x00000000 0x8 binaries/ptrecv.o + .group 0x00000000 0x8 binaries/ptrecv.o + .group 0x00000000 0x8 binaries/ptrecv.o + .group 0x00000000 0x8 binaries/ptrecv.o + .group 0x00000000 0x8 binaries/ptrecv.o + .group 0x00000000 0x8 binaries/ptrecv.o + .group 0x00000000 0x8 binaries/ptrecv.o + .group 0x00000000 0x8 binaries/ptrecv.o + .group 0x00000000 0x8 binaries/ptrecv.o + .group 0x00000000 0x8 binaries/ptrecv.o + .group 0x00000000 0x8 binaries/ptrecv.o + .group 0x00000000 0x8 binaries/ptrecv.o + .group 0x00000000 0x8 binaries/ptrecv.o + .group 0x00000000 0x8 binaries/ptrecv.o + .group 0x00000000 0x8 binaries/ptrecv.o + .group 0x00000000 0x8 binaries/ptrecv.o + .group 0x00000000 0x8 binaries/ptrecv.o + .group 0x00000000 0x8 binaries/ptrecv.o + .debug_macro 0x00000000 0x838 binaries/ptrecv.o + .debug_macro 0x00000000 0x58 binaries/ptrecv.o + .debug_macro 0x00000000 0xb2 binaries/ptrecv.o + .debug_macro 0x00000000 0x6a binaries/ptrecv.o + .debug_macro 0x00000000 0x52 binaries/ptrecv.o + .debug_macro 0x00000000 0x10 binaries/ptrecv.o + .debug_macro 0x00000000 0x16 binaries/ptrecv.o + .debug_macro 0x00000000 0x1c binaries/ptrecv.o + .debug_macro 0x00000000 0x1c binaries/ptrecv.o + .debug_macro 0x00000000 0x10 binaries/ptrecv.o + .debug_macro 0x00000000 0x28 binaries/ptrecv.o + .debug_macro 0x00000000 0x1c1 binaries/ptrecv.o + .debug_macro 0x00000000 0xa0 binaries/ptrecv.o + .debug_macro 0x00000000 0x10 binaries/ptrecv.o + .debug_macro 0x00000000 0x22 binaries/ptrecv.o + .debug_macro 0x00000000 0x46 binaries/ptrecv.o + .debug_macro 0x00000000 0xfa binaries/ptrecv.o + .debug_macro 0x00000000 0xdd binaries/ptrecv.o + .debug_macro 0x00000000 0x91 binaries/ptrecv.o + .debug_macro 0x00000000 0x8e binaries/ptrecv.o + .debug_macro 0x00000000 0x82 binaries/ptrecv.o + .debug_macro 0x00000000 0x2e binaries/ptrecv.o + .debug_macro 0x00000000 0x3a binaries/ptrecv.o + .debug_macro 0x00000000 0x4c binaries/ptrecv.o + .debug_macro 0x00000000 0x3a binaries/ptrecv.o + .debug_macro 0x00000000 0xa0 binaries/ptrecv.o + .debug_macro 0x00000000 0x34 binaries/ptrecv.o + .debug_macro 0x00000000 0x7c binaries/ptrecv.o + .debug_macro 0x00000000 0x1c binaries/ptrecv.o + .debug_macro 0x00000000 0xee binaries/ptrecv.o + .debug_macro 0x00000000 0x7c binaries/ptrecv.o + .debug_macro 0x00000000 0x20 binaries/ptrecv.o + .debug_macro 0x00000000 0x10 binaries/ptrecv.o + .debug_macro 0x00000000 0x1c binaries/ptrecv.o + .debug_macro 0x00000000 0x34 binaries/ptrecv.o + .debug_macro 0x00000000 0xeb binaries/ptrecv.o + .debug_macro 0x00000000 0x8e binaries/ptrecv.o + .group 0x00000000 0x8 binaries/ptreset.o + .group 0x00000000 0x8 binaries/ptreset.o + .group 0x00000000 0x8 binaries/ptreset.o + .group 0x00000000 0x8 binaries/ptreset.o + .group 0x00000000 0x8 binaries/ptreset.o + .group 0x00000000 0x8 binaries/ptreset.o + .group 0x00000000 0x8 binaries/ptreset.o + .group 0x00000000 0x8 binaries/ptreset.o + .group 0x00000000 0x8 binaries/ptreset.o + .group 0x00000000 0x8 binaries/ptreset.o + .group 0x00000000 0x8 binaries/ptreset.o + .group 0x00000000 0x8 binaries/ptreset.o + .group 0x00000000 0x8 binaries/ptreset.o + .group 0x00000000 0x8 binaries/ptreset.o + .group 0x00000000 0x8 binaries/ptreset.o + .group 0x00000000 0x8 binaries/ptreset.o + .group 0x00000000 0x8 binaries/ptreset.o + .group 0x00000000 0x8 binaries/ptreset.o + .group 0x00000000 0x8 binaries/ptreset.o + .group 0x00000000 0x8 binaries/ptreset.o + .group 0x00000000 0x8 binaries/ptreset.o + .group 0x00000000 0x8 binaries/ptreset.o + .group 0x00000000 0x8 binaries/ptreset.o + .group 0x00000000 0x8 binaries/ptreset.o + .group 0x00000000 0x8 binaries/ptreset.o + .group 0x00000000 0x8 binaries/ptreset.o + .group 0x00000000 0x8 binaries/ptreset.o + .group 0x00000000 0x8 binaries/ptreset.o + .group 0x00000000 0x8 binaries/ptreset.o + .group 0x00000000 0x8 binaries/ptreset.o + .group 0x00000000 0x8 binaries/ptreset.o + .group 0x00000000 0x8 binaries/ptreset.o + .group 0x00000000 0x8 binaries/ptreset.o + .group 0x00000000 0x8 binaries/ptreset.o + .group 0x00000000 0x8 binaries/ptreset.o + .group 0x00000000 0x8 binaries/ptreset.o + .group 0x00000000 0x8 binaries/ptreset.o + .debug_macro 0x00000000 0x838 binaries/ptreset.o + .debug_macro 0x00000000 0x58 binaries/ptreset.o + .debug_macro 0x00000000 0xb2 binaries/ptreset.o + .debug_macro 0x00000000 0x6a binaries/ptreset.o + .debug_macro 0x00000000 0x52 binaries/ptreset.o + .debug_macro 0x00000000 0x10 binaries/ptreset.o + .debug_macro 0x00000000 0x16 binaries/ptreset.o + .debug_macro 0x00000000 0x1c binaries/ptreset.o + .debug_macro 0x00000000 0x1c binaries/ptreset.o + .debug_macro 0x00000000 0x10 binaries/ptreset.o + .debug_macro 0x00000000 0x28 binaries/ptreset.o + .debug_macro 0x00000000 0x1c1 binaries/ptreset.o + .debug_macro 0x00000000 0xa0 binaries/ptreset.o + .debug_macro 0x00000000 0x10 binaries/ptreset.o + .debug_macro 0x00000000 0x22 binaries/ptreset.o + .debug_macro 0x00000000 0x46 binaries/ptreset.o + .debug_macro 0x00000000 0xfa binaries/ptreset.o + .debug_macro 0x00000000 0xdd binaries/ptreset.o + .debug_macro 0x00000000 0x91 binaries/ptreset.o + .debug_macro 0x00000000 0x8e binaries/ptreset.o + .debug_macro 0x00000000 0x82 binaries/ptreset.o + .debug_macro 0x00000000 0x2e binaries/ptreset.o + .debug_macro 0x00000000 0x3a binaries/ptreset.o + .debug_macro 0x00000000 0x4c binaries/ptreset.o + .debug_macro 0x00000000 0x3a binaries/ptreset.o + .debug_macro 0x00000000 0xa0 binaries/ptreset.o + .debug_macro 0x00000000 0x34 binaries/ptreset.o + .debug_macro 0x00000000 0x7c binaries/ptreset.o + .debug_macro 0x00000000 0x1c binaries/ptreset.o + .debug_macro 0x00000000 0xee binaries/ptreset.o + .debug_macro 0x00000000 0x7c binaries/ptreset.o + .debug_macro 0x00000000 0x20 binaries/ptreset.o + .debug_macro 0x00000000 0x10 binaries/ptreset.o + .debug_macro 0x00000000 0x1c binaries/ptreset.o + .debug_macro 0x00000000 0x34 binaries/ptreset.o + .debug_macro 0x00000000 0xeb binaries/ptreset.o + .debug_macro 0x00000000 0x8e binaries/ptreset.o + .group 0x00000000 0x8 binaries/ptsend.o + .group 0x00000000 0x8 binaries/ptsend.o + .group 0x00000000 0x8 binaries/ptsend.o + .group 0x00000000 0x8 binaries/ptsend.o + .group 0x00000000 0x8 binaries/ptsend.o + .group 0x00000000 0x8 binaries/ptsend.o + .group 0x00000000 0x8 binaries/ptsend.o + .group 0x00000000 0x8 binaries/ptsend.o + .group 0x00000000 0x8 binaries/ptsend.o + .group 0x00000000 0x8 binaries/ptsend.o + .group 0x00000000 0x8 binaries/ptsend.o + .group 0x00000000 0x8 binaries/ptsend.o + .group 0x00000000 0x8 binaries/ptsend.o + .group 0x00000000 0x8 binaries/ptsend.o + .group 0x00000000 0x8 binaries/ptsend.o + .group 0x00000000 0x8 binaries/ptsend.o + .group 0x00000000 0x8 binaries/ptsend.o + .group 0x00000000 0x8 binaries/ptsend.o + .group 0x00000000 0x8 binaries/ptsend.o + .group 0x00000000 0x8 binaries/ptsend.o + .group 0x00000000 0x8 binaries/ptsend.o + .group 0x00000000 0x8 binaries/ptsend.o + .group 0x00000000 0x8 binaries/ptsend.o + .group 0x00000000 0x8 binaries/ptsend.o + .group 0x00000000 0x8 binaries/ptsend.o + .group 0x00000000 0x8 binaries/ptsend.o + .group 0x00000000 0x8 binaries/ptsend.o + .group 0x00000000 0x8 binaries/ptsend.o + .group 0x00000000 0x8 binaries/ptsend.o + .group 0x00000000 0x8 binaries/ptsend.o + .group 0x00000000 0x8 binaries/ptsend.o + .group 0x00000000 0x8 binaries/ptsend.o + .group 0x00000000 0x8 binaries/ptsend.o + .group 0x00000000 0x8 binaries/ptsend.o + .group 0x00000000 0x8 binaries/ptsend.o + .group 0x00000000 0x8 binaries/ptsend.o + .group 0x00000000 0x8 binaries/ptsend.o + .debug_macro 0x00000000 0x838 binaries/ptsend.o + .debug_macro 0x00000000 0x58 binaries/ptsend.o + .debug_macro 0x00000000 0xb2 binaries/ptsend.o + .debug_macro 0x00000000 0x6a binaries/ptsend.o + .debug_macro 0x00000000 0x52 binaries/ptsend.o + .debug_macro 0x00000000 0x10 binaries/ptsend.o + .debug_macro 0x00000000 0x16 binaries/ptsend.o + .debug_macro 0x00000000 0x1c binaries/ptsend.o + .debug_macro 0x00000000 0x1c binaries/ptsend.o + .debug_macro 0x00000000 0x10 binaries/ptsend.o + .debug_macro 0x00000000 0x28 binaries/ptsend.o + .debug_macro 0x00000000 0x1c1 binaries/ptsend.o + .debug_macro 0x00000000 0xa0 binaries/ptsend.o + .debug_macro 0x00000000 0x10 binaries/ptsend.o + .debug_macro 0x00000000 0x22 binaries/ptsend.o + .debug_macro 0x00000000 0x46 binaries/ptsend.o + .debug_macro 0x00000000 0xfa binaries/ptsend.o + .debug_macro 0x00000000 0xdd binaries/ptsend.o + .debug_macro 0x00000000 0x91 binaries/ptsend.o + .debug_macro 0x00000000 0x8e binaries/ptsend.o + .debug_macro 0x00000000 0x82 binaries/ptsend.o + .debug_macro 0x00000000 0x2e binaries/ptsend.o + .debug_macro 0x00000000 0x3a binaries/ptsend.o + .debug_macro 0x00000000 0x4c binaries/ptsend.o + .debug_macro 0x00000000 0x3a binaries/ptsend.o + .debug_macro 0x00000000 0xa0 binaries/ptsend.o + .debug_macro 0x00000000 0x34 binaries/ptsend.o + .debug_macro 0x00000000 0x7c binaries/ptsend.o + .debug_macro 0x00000000 0x1c binaries/ptsend.o + .debug_macro 0x00000000 0xee binaries/ptsend.o + .debug_macro 0x00000000 0x7c binaries/ptsend.o + .debug_macro 0x00000000 0x20 binaries/ptsend.o + .debug_macro 0x00000000 0x10 binaries/ptsend.o + .debug_macro 0x00000000 0x1c binaries/ptsend.o + .debug_macro 0x00000000 0x34 binaries/ptsend.o + .debug_macro 0x00000000 0xeb binaries/ptsend.o + .debug_macro 0x00000000 0x8e binaries/ptsend.o + .group 0x00000000 0x8 binaries/putc.o + .group 0x00000000 0x8 binaries/putc.o + .group 0x00000000 0x8 binaries/putc.o + .group 0x00000000 0x8 binaries/putc.o + .group 0x00000000 0x8 binaries/putc.o + .group 0x00000000 0x8 binaries/putc.o + .group 0x00000000 0x8 binaries/putc.o + .group 0x00000000 0x8 binaries/putc.o + .group 0x00000000 0x8 binaries/putc.o + .group 0x00000000 0x8 binaries/putc.o + .group 0x00000000 0x8 binaries/putc.o + .group 0x00000000 0x8 binaries/putc.o + .group 0x00000000 0x8 binaries/putc.o + .group 0x00000000 0x8 binaries/putc.o + .group 0x00000000 0x8 binaries/putc.o + .group 0x00000000 0x8 binaries/putc.o + .group 0x00000000 0x8 binaries/putc.o + .group 0x00000000 0x8 binaries/putc.o + .group 0x00000000 0x8 binaries/putc.o + .group 0x00000000 0x8 binaries/putc.o + .group 0x00000000 0x8 binaries/putc.o + .group 0x00000000 0x8 binaries/putc.o + .group 0x00000000 0x8 binaries/putc.o + .group 0x00000000 0x8 binaries/putc.o + .group 0x00000000 0x8 binaries/putc.o + .group 0x00000000 0x8 binaries/putc.o + .group 0x00000000 0x8 binaries/putc.o + .group 0x00000000 0x8 binaries/putc.o + .group 0x00000000 0x8 binaries/putc.o + .group 0x00000000 0x8 binaries/putc.o + .group 0x00000000 0x8 binaries/putc.o + .group 0x00000000 0x8 binaries/putc.o + .group 0x00000000 0x8 binaries/putc.o + .group 0x00000000 0x8 binaries/putc.o + .group 0x00000000 0x8 binaries/putc.o + .group 0x00000000 0x8 binaries/putc.o + .group 0x00000000 0x8 binaries/putc.o + .debug_macro 0x00000000 0x838 binaries/putc.o + .debug_macro 0x00000000 0x58 binaries/putc.o + .debug_macro 0x00000000 0xb2 binaries/putc.o + .debug_macro 0x00000000 0x6a binaries/putc.o + .debug_macro 0x00000000 0x52 binaries/putc.o + .debug_macro 0x00000000 0x10 binaries/putc.o + .debug_macro 0x00000000 0x16 binaries/putc.o + .debug_macro 0x00000000 0x1c binaries/putc.o + .debug_macro 0x00000000 0x1c binaries/putc.o + .debug_macro 0x00000000 0x10 binaries/putc.o + .debug_macro 0x00000000 0x28 binaries/putc.o + .debug_macro 0x00000000 0x1c1 binaries/putc.o + .debug_macro 0x00000000 0xa0 binaries/putc.o + .debug_macro 0x00000000 0x10 binaries/putc.o + .debug_macro 0x00000000 0x22 binaries/putc.o + .debug_macro 0x00000000 0x46 binaries/putc.o + .debug_macro 0x00000000 0xfa binaries/putc.o + .debug_macro 0x00000000 0xdd binaries/putc.o + .debug_macro 0x00000000 0x91 binaries/putc.o + .debug_macro 0x00000000 0x8e binaries/putc.o + .debug_macro 0x00000000 0x82 binaries/putc.o + .debug_macro 0x00000000 0x2e binaries/putc.o + .debug_macro 0x00000000 0x3a binaries/putc.o + .debug_macro 0x00000000 0x4c binaries/putc.o + .debug_macro 0x00000000 0x3a binaries/putc.o + .debug_macro 0x00000000 0xa0 binaries/putc.o + .debug_macro 0x00000000 0x34 binaries/putc.o + .debug_macro 0x00000000 0x7c binaries/putc.o + .debug_macro 0x00000000 0x1c binaries/putc.o + .debug_macro 0x00000000 0xee binaries/putc.o + .debug_macro 0x00000000 0x7c binaries/putc.o + .debug_macro 0x00000000 0x20 binaries/putc.o + .debug_macro 0x00000000 0x10 binaries/putc.o + .debug_macro 0x00000000 0x1c binaries/putc.o + .debug_macro 0x00000000 0x34 binaries/putc.o + .debug_macro 0x00000000 0xeb binaries/putc.o + .debug_macro 0x00000000 0x8e binaries/putc.o + .group 0x00000000 0x8 binaries/queue.o + .group 0x00000000 0x8 binaries/queue.o + .group 0x00000000 0x8 binaries/queue.o + .group 0x00000000 0x8 binaries/queue.o + .group 0x00000000 0x8 binaries/queue.o + .group 0x00000000 0x8 binaries/queue.o + .group 0x00000000 0x8 binaries/queue.o + .group 0x00000000 0x8 binaries/queue.o + .group 0x00000000 0x8 binaries/queue.o + .group 0x00000000 0x8 binaries/queue.o + .group 0x00000000 0x8 binaries/queue.o + .group 0x00000000 0x8 binaries/queue.o + .group 0x00000000 0x8 binaries/queue.o + .group 0x00000000 0x8 binaries/queue.o + .group 0x00000000 0x8 binaries/queue.o + .group 0x00000000 0x8 binaries/queue.o + .group 0x00000000 0x8 binaries/queue.o + .group 0x00000000 0x8 binaries/queue.o + .group 0x00000000 0x8 binaries/queue.o + .group 0x00000000 0x8 binaries/queue.o + .group 0x00000000 0x8 binaries/queue.o + .group 0x00000000 0x8 binaries/queue.o + .group 0x00000000 0x8 binaries/queue.o + .group 0x00000000 0x8 binaries/queue.o + .group 0x00000000 0x8 binaries/queue.o + .group 0x00000000 0x8 binaries/queue.o + .group 0x00000000 0x8 binaries/queue.o + .group 0x00000000 0x8 binaries/queue.o + .group 0x00000000 0x8 binaries/queue.o + .group 0x00000000 0x8 binaries/queue.o + .group 0x00000000 0x8 binaries/queue.o + .group 0x00000000 0x8 binaries/queue.o + .group 0x00000000 0x8 binaries/queue.o + .group 0x00000000 0x8 binaries/queue.o + .group 0x00000000 0x8 binaries/queue.o + .group 0x00000000 0x8 binaries/queue.o + .group 0x00000000 0x8 binaries/queue.o + .debug_macro 0x00000000 0x838 binaries/queue.o + .debug_macro 0x00000000 0x58 binaries/queue.o + .debug_macro 0x00000000 0xb2 binaries/queue.o + .debug_macro 0x00000000 0x6a binaries/queue.o + .debug_macro 0x00000000 0x52 binaries/queue.o + .debug_macro 0x00000000 0x10 binaries/queue.o + .debug_macro 0x00000000 0x16 binaries/queue.o + .debug_macro 0x00000000 0x1c binaries/queue.o + .debug_macro 0x00000000 0x1c binaries/queue.o + .debug_macro 0x00000000 0x10 binaries/queue.o + .debug_macro 0x00000000 0x28 binaries/queue.o + .debug_macro 0x00000000 0x1c1 binaries/queue.o + .debug_macro 0x00000000 0xa0 binaries/queue.o + .debug_macro 0x00000000 0x10 binaries/queue.o + .debug_macro 0x00000000 0x22 binaries/queue.o + .debug_macro 0x00000000 0x46 binaries/queue.o + .debug_macro 0x00000000 0xfa binaries/queue.o + .debug_macro 0x00000000 0xdd binaries/queue.o + .debug_macro 0x00000000 0x91 binaries/queue.o + .debug_macro 0x00000000 0x8e binaries/queue.o + .debug_macro 0x00000000 0x82 binaries/queue.o + .debug_macro 0x00000000 0x2e binaries/queue.o + .debug_macro 0x00000000 0x3a binaries/queue.o + .debug_macro 0x00000000 0x4c binaries/queue.o + .debug_macro 0x00000000 0x3a binaries/queue.o + .debug_macro 0x00000000 0xa0 binaries/queue.o + .debug_macro 0x00000000 0x34 binaries/queue.o + .debug_macro 0x00000000 0x7c binaries/queue.o + .debug_macro 0x00000000 0x1c binaries/queue.o + .debug_macro 0x00000000 0xee binaries/queue.o + .debug_macro 0x00000000 0x7c binaries/queue.o + .debug_macro 0x00000000 0x20 binaries/queue.o + .debug_macro 0x00000000 0x10 binaries/queue.o + .debug_macro 0x00000000 0x1c binaries/queue.o + .debug_macro 0x00000000 0x34 binaries/queue.o + .debug_macro 0x00000000 0xeb binaries/queue.o + .debug_macro 0x00000000 0x8e binaries/queue.o + .group 0x00000000 0x8 binaries/read.o + .group 0x00000000 0x8 binaries/read.o + .group 0x00000000 0x8 binaries/read.o + .group 0x00000000 0x8 binaries/read.o + .group 0x00000000 0x8 binaries/read.o + .group 0x00000000 0x8 binaries/read.o + .group 0x00000000 0x8 binaries/read.o + .group 0x00000000 0x8 binaries/read.o + .group 0x00000000 0x8 binaries/read.o + .group 0x00000000 0x8 binaries/read.o + .group 0x00000000 0x8 binaries/read.o + .group 0x00000000 0x8 binaries/read.o + .group 0x00000000 0x8 binaries/read.o + .group 0x00000000 0x8 binaries/read.o + .group 0x00000000 0x8 binaries/read.o + .group 0x00000000 0x8 binaries/read.o + .group 0x00000000 0x8 binaries/read.o + .group 0x00000000 0x8 binaries/read.o + .group 0x00000000 0x8 binaries/read.o + .group 0x00000000 0x8 binaries/read.o + .group 0x00000000 0x8 binaries/read.o + .group 0x00000000 0x8 binaries/read.o + .group 0x00000000 0x8 binaries/read.o + .group 0x00000000 0x8 binaries/read.o + .group 0x00000000 0x8 binaries/read.o + .group 0x00000000 0x8 binaries/read.o + .group 0x00000000 0x8 binaries/read.o + .group 0x00000000 0x8 binaries/read.o + .group 0x00000000 0x8 binaries/read.o + .group 0x00000000 0x8 binaries/read.o + .group 0x00000000 0x8 binaries/read.o + .group 0x00000000 0x8 binaries/read.o + .group 0x00000000 0x8 binaries/read.o + .group 0x00000000 0x8 binaries/read.o + .group 0x00000000 0x8 binaries/read.o + .group 0x00000000 0x8 binaries/read.o + .group 0x00000000 0x8 binaries/read.o + .debug_macro 0x00000000 0x838 binaries/read.o + .debug_macro 0x00000000 0x58 binaries/read.o + .debug_macro 0x00000000 0xb2 binaries/read.o + .debug_macro 0x00000000 0x6a binaries/read.o + .debug_macro 0x00000000 0x52 binaries/read.o + .debug_macro 0x00000000 0x10 binaries/read.o + .debug_macro 0x00000000 0x16 binaries/read.o + .debug_macro 0x00000000 0x1c binaries/read.o + .debug_macro 0x00000000 0x1c binaries/read.o + .debug_macro 0x00000000 0x10 binaries/read.o + .debug_macro 0x00000000 0x28 binaries/read.o + .debug_macro 0x00000000 0x1c1 binaries/read.o + .debug_macro 0x00000000 0xa0 binaries/read.o + .debug_macro 0x00000000 0x10 binaries/read.o + .debug_macro 0x00000000 0x22 binaries/read.o + .debug_macro 0x00000000 0x46 binaries/read.o + .debug_macro 0x00000000 0xfa binaries/read.o + .debug_macro 0x00000000 0xdd binaries/read.o + .debug_macro 0x00000000 0x91 binaries/read.o + .debug_macro 0x00000000 0x8e binaries/read.o + .debug_macro 0x00000000 0x82 binaries/read.o + .debug_macro 0x00000000 0x2e binaries/read.o + .debug_macro 0x00000000 0x3a binaries/read.o + .debug_macro 0x00000000 0x4c binaries/read.o + .debug_macro 0x00000000 0x3a binaries/read.o + .debug_macro 0x00000000 0xa0 binaries/read.o + .debug_macro 0x00000000 0x34 binaries/read.o + .debug_macro 0x00000000 0x7c binaries/read.o + .debug_macro 0x00000000 0x1c binaries/read.o + .debug_macro 0x00000000 0xee binaries/read.o + .debug_macro 0x00000000 0x7c binaries/read.o + .debug_macro 0x00000000 0x20 binaries/read.o + .debug_macro 0x00000000 0x10 binaries/read.o + .debug_macro 0x00000000 0x1c binaries/read.o + .debug_macro 0x00000000 0x34 binaries/read.o + .debug_macro 0x00000000 0xeb binaries/read.o + .debug_macro 0x00000000 0x8e binaries/read.o + .group 0x00000000 0x8 binaries/ready.o + .group 0x00000000 0x8 binaries/ready.o + .group 0x00000000 0x8 binaries/ready.o + .group 0x00000000 0x8 binaries/ready.o + .group 0x00000000 0x8 binaries/ready.o + .group 0x00000000 0x8 binaries/ready.o + .group 0x00000000 0x8 binaries/ready.o + .group 0x00000000 0x8 binaries/ready.o + .group 0x00000000 0x8 binaries/ready.o + .group 0x00000000 0x8 binaries/ready.o + .group 0x00000000 0x8 binaries/ready.o + .group 0x00000000 0x8 binaries/ready.o + .group 0x00000000 0x8 binaries/ready.o + .group 0x00000000 0x8 binaries/ready.o + .group 0x00000000 0x8 binaries/ready.o + .group 0x00000000 0x8 binaries/ready.o + .group 0x00000000 0x8 binaries/ready.o + .group 0x00000000 0x8 binaries/ready.o + .group 0x00000000 0x8 binaries/ready.o + .group 0x00000000 0x8 binaries/ready.o + .group 0x00000000 0x8 binaries/ready.o + .group 0x00000000 0x8 binaries/ready.o + .group 0x00000000 0x8 binaries/ready.o + .group 0x00000000 0x8 binaries/ready.o + .group 0x00000000 0x8 binaries/ready.o + .group 0x00000000 0x8 binaries/ready.o + .group 0x00000000 0x8 binaries/ready.o + .group 0x00000000 0x8 binaries/ready.o + .group 0x00000000 0x8 binaries/ready.o + .group 0x00000000 0x8 binaries/ready.o + .group 0x00000000 0x8 binaries/ready.o + .group 0x00000000 0x8 binaries/ready.o + .group 0x00000000 0x8 binaries/ready.o + .group 0x00000000 0x8 binaries/ready.o + .group 0x00000000 0x8 binaries/ready.o + .group 0x00000000 0x8 binaries/ready.o + .group 0x00000000 0x8 binaries/ready.o + .debug_macro 0x00000000 0x838 binaries/ready.o + .debug_macro 0x00000000 0x58 binaries/ready.o + .debug_macro 0x00000000 0xb2 binaries/ready.o + .debug_macro 0x00000000 0x6a binaries/ready.o + .debug_macro 0x00000000 0x52 binaries/ready.o + .debug_macro 0x00000000 0x10 binaries/ready.o + .debug_macro 0x00000000 0x16 binaries/ready.o + .debug_macro 0x00000000 0x1c binaries/ready.o + .debug_macro 0x00000000 0x1c binaries/ready.o + .debug_macro 0x00000000 0x10 binaries/ready.o + .debug_macro 0x00000000 0x28 binaries/ready.o + .debug_macro 0x00000000 0x1c1 binaries/ready.o + .debug_macro 0x00000000 0xa0 binaries/ready.o + .debug_macro 0x00000000 0x10 binaries/ready.o + .debug_macro 0x00000000 0x22 binaries/ready.o + .debug_macro 0x00000000 0x46 binaries/ready.o + .debug_macro 0x00000000 0xfa binaries/ready.o + .debug_macro 0x00000000 0xdd binaries/ready.o + .debug_macro 0x00000000 0x91 binaries/ready.o + .debug_macro 0x00000000 0x8e binaries/ready.o + .debug_macro 0x00000000 0x82 binaries/ready.o + .debug_macro 0x00000000 0x2e binaries/ready.o + .debug_macro 0x00000000 0x3a binaries/ready.o + .debug_macro 0x00000000 0x4c binaries/ready.o + .debug_macro 0x00000000 0x3a binaries/ready.o + .debug_macro 0x00000000 0xa0 binaries/ready.o + .debug_macro 0x00000000 0x34 binaries/ready.o + .debug_macro 0x00000000 0x7c binaries/ready.o + .debug_macro 0x00000000 0x1c binaries/ready.o + .debug_macro 0x00000000 0xee binaries/ready.o + .debug_macro 0x00000000 0x7c binaries/ready.o + .debug_macro 0x00000000 0x20 binaries/ready.o + .debug_macro 0x00000000 0x10 binaries/ready.o + .debug_macro 0x00000000 0x1c binaries/ready.o + .debug_macro 0x00000000 0x34 binaries/ready.o + .debug_macro 0x00000000 0xeb binaries/ready.o + .debug_macro 0x00000000 0x8e binaries/ready.o + .group 0x00000000 0x8 binaries/receive.o + .group 0x00000000 0x8 binaries/receive.o + .group 0x00000000 0x8 binaries/receive.o + .group 0x00000000 0x8 binaries/receive.o + .group 0x00000000 0x8 binaries/receive.o + .group 0x00000000 0x8 binaries/receive.o + .group 0x00000000 0x8 binaries/receive.o + .group 0x00000000 0x8 binaries/receive.o + .group 0x00000000 0x8 binaries/receive.o + .group 0x00000000 0x8 binaries/receive.o + .group 0x00000000 0x8 binaries/receive.o + .group 0x00000000 0x8 binaries/receive.o + .group 0x00000000 0x8 binaries/receive.o + .group 0x00000000 0x8 binaries/receive.o + .group 0x00000000 0x8 binaries/receive.o + .group 0x00000000 0x8 binaries/receive.o + .group 0x00000000 0x8 binaries/receive.o + .group 0x00000000 0x8 binaries/receive.o + .group 0x00000000 0x8 binaries/receive.o + .group 0x00000000 0x8 binaries/receive.o + .group 0x00000000 0x8 binaries/receive.o + .group 0x00000000 0x8 binaries/receive.o + .group 0x00000000 0x8 binaries/receive.o + .group 0x00000000 0x8 binaries/receive.o + .group 0x00000000 0x8 binaries/receive.o + .group 0x00000000 0x8 binaries/receive.o + .group 0x00000000 0x8 binaries/receive.o + .group 0x00000000 0x8 binaries/receive.o + .group 0x00000000 0x8 binaries/receive.o + .group 0x00000000 0x8 binaries/receive.o + .group 0x00000000 0x8 binaries/receive.o + .group 0x00000000 0x8 binaries/receive.o + .group 0x00000000 0x8 binaries/receive.o + .group 0x00000000 0x8 binaries/receive.o + .group 0x00000000 0x8 binaries/receive.o + .group 0x00000000 0x8 binaries/receive.o + .group 0x00000000 0x8 binaries/receive.o + .debug_macro 0x00000000 0x838 binaries/receive.o + .debug_macro 0x00000000 0x58 binaries/receive.o + .debug_macro 0x00000000 0xb2 binaries/receive.o + .debug_macro 0x00000000 0x6a binaries/receive.o + .debug_macro 0x00000000 0x52 binaries/receive.o + .debug_macro 0x00000000 0x10 binaries/receive.o + .debug_macro 0x00000000 0x16 binaries/receive.o + .debug_macro 0x00000000 0x1c binaries/receive.o + .debug_macro 0x00000000 0x1c binaries/receive.o + .debug_macro 0x00000000 0x10 binaries/receive.o + .debug_macro 0x00000000 0x28 binaries/receive.o + .debug_macro 0x00000000 0x1c1 binaries/receive.o + .debug_macro 0x00000000 0xa0 binaries/receive.o + .debug_macro 0x00000000 0x10 binaries/receive.o + .debug_macro 0x00000000 0x22 binaries/receive.o + .debug_macro 0x00000000 0x46 binaries/receive.o + .debug_macro 0x00000000 0xfa binaries/receive.o + .debug_macro 0x00000000 0xdd binaries/receive.o + .debug_macro 0x00000000 0x91 binaries/receive.o + .debug_macro 0x00000000 0x8e binaries/receive.o + .debug_macro 0x00000000 0x82 binaries/receive.o + .debug_macro 0x00000000 0x2e binaries/receive.o + .debug_macro 0x00000000 0x3a binaries/receive.o + .debug_macro 0x00000000 0x4c binaries/receive.o + .debug_macro 0x00000000 0x3a binaries/receive.o + .debug_macro 0x00000000 0xa0 binaries/receive.o + .debug_macro 0x00000000 0x34 binaries/receive.o + .debug_macro 0x00000000 0x7c binaries/receive.o + .debug_macro 0x00000000 0x1c binaries/receive.o + .debug_macro 0x00000000 0xee binaries/receive.o + .debug_macro 0x00000000 0x7c binaries/receive.o + .debug_macro 0x00000000 0x20 binaries/receive.o + .debug_macro 0x00000000 0x10 binaries/receive.o + .debug_macro 0x00000000 0x1c binaries/receive.o + .debug_macro 0x00000000 0x34 binaries/receive.o + .debug_macro 0x00000000 0xeb binaries/receive.o + .debug_macro 0x00000000 0x8e binaries/receive.o + .group 0x00000000 0x8 binaries/recvclr.o + .group 0x00000000 0x8 binaries/recvclr.o + .group 0x00000000 0x8 binaries/recvclr.o + .group 0x00000000 0x8 binaries/recvclr.o + .group 0x00000000 0x8 binaries/recvclr.o + .group 0x00000000 0x8 binaries/recvclr.o + .group 0x00000000 0x8 binaries/recvclr.o + .group 0x00000000 0x8 binaries/recvclr.o + .group 0x00000000 0x8 binaries/recvclr.o + .group 0x00000000 0x8 binaries/recvclr.o + .group 0x00000000 0x8 binaries/recvclr.o + .group 0x00000000 0x8 binaries/recvclr.o + .group 0x00000000 0x8 binaries/recvclr.o + .group 0x00000000 0x8 binaries/recvclr.o + .group 0x00000000 0x8 binaries/recvclr.o + .group 0x00000000 0x8 binaries/recvclr.o + .group 0x00000000 0x8 binaries/recvclr.o + .group 0x00000000 0x8 binaries/recvclr.o + .group 0x00000000 0x8 binaries/recvclr.o + .group 0x00000000 0x8 binaries/recvclr.o + .group 0x00000000 0x8 binaries/recvclr.o + .group 0x00000000 0x8 binaries/recvclr.o + .group 0x00000000 0x8 binaries/recvclr.o + .group 0x00000000 0x8 binaries/recvclr.o + .group 0x00000000 0x8 binaries/recvclr.o + .group 0x00000000 0x8 binaries/recvclr.o + .group 0x00000000 0x8 binaries/recvclr.o + .group 0x00000000 0x8 binaries/recvclr.o + .group 0x00000000 0x8 binaries/recvclr.o + .group 0x00000000 0x8 binaries/recvclr.o + .group 0x00000000 0x8 binaries/recvclr.o + .group 0x00000000 0x8 binaries/recvclr.o + .group 0x00000000 0x8 binaries/recvclr.o + .group 0x00000000 0x8 binaries/recvclr.o + .group 0x00000000 0x8 binaries/recvclr.o + .group 0x00000000 0x8 binaries/recvclr.o + .group 0x00000000 0x8 binaries/recvclr.o + .debug_macro 0x00000000 0x838 binaries/recvclr.o + .debug_macro 0x00000000 0x58 binaries/recvclr.o + .debug_macro 0x00000000 0xb2 binaries/recvclr.o + .debug_macro 0x00000000 0x6a binaries/recvclr.o + .debug_macro 0x00000000 0x52 binaries/recvclr.o + .debug_macro 0x00000000 0x10 binaries/recvclr.o + .debug_macro 0x00000000 0x16 binaries/recvclr.o + .debug_macro 0x00000000 0x1c binaries/recvclr.o + .debug_macro 0x00000000 0x1c binaries/recvclr.o + .debug_macro 0x00000000 0x10 binaries/recvclr.o + .debug_macro 0x00000000 0x28 binaries/recvclr.o + .debug_macro 0x00000000 0x1c1 binaries/recvclr.o + .debug_macro 0x00000000 0xa0 binaries/recvclr.o + .debug_macro 0x00000000 0x10 binaries/recvclr.o + .debug_macro 0x00000000 0x22 binaries/recvclr.o + .debug_macro 0x00000000 0x46 binaries/recvclr.o + .debug_macro 0x00000000 0xfa binaries/recvclr.o + .debug_macro 0x00000000 0xdd binaries/recvclr.o + .debug_macro 0x00000000 0x91 binaries/recvclr.o + .debug_macro 0x00000000 0x8e binaries/recvclr.o + .debug_macro 0x00000000 0x82 binaries/recvclr.o + .debug_macro 0x00000000 0x2e binaries/recvclr.o + .debug_macro 0x00000000 0x3a binaries/recvclr.o + .debug_macro 0x00000000 0x4c binaries/recvclr.o + .debug_macro 0x00000000 0x3a binaries/recvclr.o + .debug_macro 0x00000000 0xa0 binaries/recvclr.o + .debug_macro 0x00000000 0x34 binaries/recvclr.o + .debug_macro 0x00000000 0x7c binaries/recvclr.o + .debug_macro 0x00000000 0x1c binaries/recvclr.o + .debug_macro 0x00000000 0xee binaries/recvclr.o + .debug_macro 0x00000000 0x7c binaries/recvclr.o + .debug_macro 0x00000000 0x20 binaries/recvclr.o + .debug_macro 0x00000000 0x10 binaries/recvclr.o + .debug_macro 0x00000000 0x1c binaries/recvclr.o + .debug_macro 0x00000000 0x34 binaries/recvclr.o + .debug_macro 0x00000000 0xeb binaries/recvclr.o + .debug_macro 0x00000000 0x8e binaries/recvclr.o + .group 0x00000000 0x8 binaries/recvtime.o + .group 0x00000000 0x8 binaries/recvtime.o + .group 0x00000000 0x8 binaries/recvtime.o + .group 0x00000000 0x8 binaries/recvtime.o + .group 0x00000000 0x8 binaries/recvtime.o + .group 0x00000000 0x8 binaries/recvtime.o + .group 0x00000000 0x8 binaries/recvtime.o + .group 0x00000000 0x8 binaries/recvtime.o + .group 0x00000000 0x8 binaries/recvtime.o + .group 0x00000000 0x8 binaries/recvtime.o + .group 0x00000000 0x8 binaries/recvtime.o + .group 0x00000000 0x8 binaries/recvtime.o + .group 0x00000000 0x8 binaries/recvtime.o + .group 0x00000000 0x8 binaries/recvtime.o + .group 0x00000000 0x8 binaries/recvtime.o + .group 0x00000000 0x8 binaries/recvtime.o + .group 0x00000000 0x8 binaries/recvtime.o + .group 0x00000000 0x8 binaries/recvtime.o + .group 0x00000000 0x8 binaries/recvtime.o + .group 0x00000000 0x8 binaries/recvtime.o + .group 0x00000000 0x8 binaries/recvtime.o + .group 0x00000000 0x8 binaries/recvtime.o + .group 0x00000000 0x8 binaries/recvtime.o + .group 0x00000000 0x8 binaries/recvtime.o + .group 0x00000000 0x8 binaries/recvtime.o + .group 0x00000000 0x8 binaries/recvtime.o + .group 0x00000000 0x8 binaries/recvtime.o + .group 0x00000000 0x8 binaries/recvtime.o + .group 0x00000000 0x8 binaries/recvtime.o + .group 0x00000000 0x8 binaries/recvtime.o + .group 0x00000000 0x8 binaries/recvtime.o + .group 0x00000000 0x8 binaries/recvtime.o + .group 0x00000000 0x8 binaries/recvtime.o + .group 0x00000000 0x8 binaries/recvtime.o + .group 0x00000000 0x8 binaries/recvtime.o + .group 0x00000000 0x8 binaries/recvtime.o + .group 0x00000000 0x8 binaries/recvtime.o + .debug_macro 0x00000000 0x838 binaries/recvtime.o + .debug_macro 0x00000000 0x58 binaries/recvtime.o + .debug_macro 0x00000000 0xb2 binaries/recvtime.o + .debug_macro 0x00000000 0x6a binaries/recvtime.o + .debug_macro 0x00000000 0x52 binaries/recvtime.o + .debug_macro 0x00000000 0x10 binaries/recvtime.o + .debug_macro 0x00000000 0x16 binaries/recvtime.o + .debug_macro 0x00000000 0x1c binaries/recvtime.o + .debug_macro 0x00000000 0x1c binaries/recvtime.o + .debug_macro 0x00000000 0x10 binaries/recvtime.o + .debug_macro 0x00000000 0x28 binaries/recvtime.o + .debug_macro 0x00000000 0x1c1 binaries/recvtime.o + .debug_macro 0x00000000 0xa0 binaries/recvtime.o + .debug_macro 0x00000000 0x10 binaries/recvtime.o + .debug_macro 0x00000000 0x22 binaries/recvtime.o + .debug_macro 0x00000000 0x46 binaries/recvtime.o + .debug_macro 0x00000000 0xfa binaries/recvtime.o + .debug_macro 0x00000000 0xdd binaries/recvtime.o + .debug_macro 0x00000000 0x91 binaries/recvtime.o + .debug_macro 0x00000000 0x8e binaries/recvtime.o + .debug_macro 0x00000000 0x82 binaries/recvtime.o + .debug_macro 0x00000000 0x2e binaries/recvtime.o + .debug_macro 0x00000000 0x3a binaries/recvtime.o + .debug_macro 0x00000000 0x4c binaries/recvtime.o + .debug_macro 0x00000000 0x3a binaries/recvtime.o + .debug_macro 0x00000000 0xa0 binaries/recvtime.o + .debug_macro 0x00000000 0x34 binaries/recvtime.o + .debug_macro 0x00000000 0x7c binaries/recvtime.o + .debug_macro 0x00000000 0x1c binaries/recvtime.o + .debug_macro 0x00000000 0xee binaries/recvtime.o + .debug_macro 0x00000000 0x7c binaries/recvtime.o + .debug_macro 0x00000000 0x20 binaries/recvtime.o + .debug_macro 0x00000000 0x10 binaries/recvtime.o + .debug_macro 0x00000000 0x1c binaries/recvtime.o + .debug_macro 0x00000000 0x34 binaries/recvtime.o + .debug_macro 0x00000000 0xeb binaries/recvtime.o + .debug_macro 0x00000000 0x8e binaries/recvtime.o + .group 0x00000000 0x8 binaries/resched.o + .group 0x00000000 0x8 binaries/resched.o + .group 0x00000000 0x8 binaries/resched.o + .group 0x00000000 0x8 binaries/resched.o + .group 0x00000000 0x8 binaries/resched.o + .group 0x00000000 0x8 binaries/resched.o + .group 0x00000000 0x8 binaries/resched.o + .group 0x00000000 0x8 binaries/resched.o + .group 0x00000000 0x8 binaries/resched.o + .group 0x00000000 0x8 binaries/resched.o + .group 0x00000000 0x8 binaries/resched.o + .group 0x00000000 0x8 binaries/resched.o + .group 0x00000000 0x8 binaries/resched.o + .group 0x00000000 0x8 binaries/resched.o + .group 0x00000000 0x8 binaries/resched.o + .group 0x00000000 0x8 binaries/resched.o + .group 0x00000000 0x8 binaries/resched.o + .group 0x00000000 0x8 binaries/resched.o + .group 0x00000000 0x8 binaries/resched.o + .group 0x00000000 0x8 binaries/resched.o + .group 0x00000000 0x8 binaries/resched.o + .group 0x00000000 0x8 binaries/resched.o + .group 0x00000000 0x8 binaries/resched.o + .group 0x00000000 0x8 binaries/resched.o + .group 0x00000000 0x8 binaries/resched.o + .group 0x00000000 0x8 binaries/resched.o + .group 0x00000000 0x8 binaries/resched.o + .group 0x00000000 0x8 binaries/resched.o + .group 0x00000000 0x8 binaries/resched.o + .group 0x00000000 0x8 binaries/resched.o + .group 0x00000000 0x8 binaries/resched.o + .group 0x00000000 0x8 binaries/resched.o + .group 0x00000000 0x8 binaries/resched.o + .group 0x00000000 0x8 binaries/resched.o + .group 0x00000000 0x8 binaries/resched.o + .group 0x00000000 0x8 binaries/resched.o + .group 0x00000000 0x8 binaries/resched.o + .debug_macro 0x00000000 0x838 binaries/resched.o + .debug_macro 0x00000000 0x58 binaries/resched.o + .debug_macro 0x00000000 0xb2 binaries/resched.o + .debug_macro 0x00000000 0x6a binaries/resched.o + .debug_macro 0x00000000 0x52 binaries/resched.o + .debug_macro 0x00000000 0x10 binaries/resched.o + .debug_macro 0x00000000 0x16 binaries/resched.o + .debug_macro 0x00000000 0x1c binaries/resched.o + .debug_macro 0x00000000 0x1c binaries/resched.o + .debug_macro 0x00000000 0x10 binaries/resched.o + .debug_macro 0x00000000 0x28 binaries/resched.o + .debug_macro 0x00000000 0x1c1 binaries/resched.o + .debug_macro 0x00000000 0xa0 binaries/resched.o + .debug_macro 0x00000000 0x10 binaries/resched.o + .debug_macro 0x00000000 0x22 binaries/resched.o + .debug_macro 0x00000000 0x46 binaries/resched.o + .debug_macro 0x00000000 0xfa binaries/resched.o + .debug_macro 0x00000000 0xdd binaries/resched.o + .debug_macro 0x00000000 0x91 binaries/resched.o + .debug_macro 0x00000000 0x8e binaries/resched.o + .debug_macro 0x00000000 0x82 binaries/resched.o + .debug_macro 0x00000000 0x2e binaries/resched.o + .debug_macro 0x00000000 0x3a binaries/resched.o + .debug_macro 0x00000000 0x4c binaries/resched.o + .debug_macro 0x00000000 0x3a binaries/resched.o + .debug_macro 0x00000000 0xa0 binaries/resched.o + .debug_macro 0x00000000 0x34 binaries/resched.o + .debug_macro 0x00000000 0x7c binaries/resched.o + .debug_macro 0x00000000 0x1c binaries/resched.o + .debug_macro 0x00000000 0xee binaries/resched.o + .debug_macro 0x00000000 0x7c binaries/resched.o + .debug_macro 0x00000000 0x20 binaries/resched.o + .debug_macro 0x00000000 0x10 binaries/resched.o + .debug_macro 0x00000000 0x1c binaries/resched.o + .debug_macro 0x00000000 0x34 binaries/resched.o + .debug_macro 0x00000000 0xeb binaries/resched.o + .debug_macro 0x00000000 0x8e binaries/resched.o + .group 0x00000000 0x8 binaries/resume.o + .group 0x00000000 0x8 binaries/resume.o + .group 0x00000000 0x8 binaries/resume.o + .group 0x00000000 0x8 binaries/resume.o + .group 0x00000000 0x8 binaries/resume.o + .group 0x00000000 0x8 binaries/resume.o + .group 0x00000000 0x8 binaries/resume.o + .group 0x00000000 0x8 binaries/resume.o + .group 0x00000000 0x8 binaries/resume.o + .group 0x00000000 0x8 binaries/resume.o + .group 0x00000000 0x8 binaries/resume.o + .group 0x00000000 0x8 binaries/resume.o + .group 0x00000000 0x8 binaries/resume.o + .group 0x00000000 0x8 binaries/resume.o + .group 0x00000000 0x8 binaries/resume.o + .group 0x00000000 0x8 binaries/resume.o + .group 0x00000000 0x8 binaries/resume.o + .group 0x00000000 0x8 binaries/resume.o + .group 0x00000000 0x8 binaries/resume.o + .group 0x00000000 0x8 binaries/resume.o + .group 0x00000000 0x8 binaries/resume.o + .group 0x00000000 0x8 binaries/resume.o + .group 0x00000000 0x8 binaries/resume.o + .group 0x00000000 0x8 binaries/resume.o + .group 0x00000000 0x8 binaries/resume.o + .group 0x00000000 0x8 binaries/resume.o + .group 0x00000000 0x8 binaries/resume.o + .group 0x00000000 0x8 binaries/resume.o + .group 0x00000000 0x8 binaries/resume.o + .group 0x00000000 0x8 binaries/resume.o + .group 0x00000000 0x8 binaries/resume.o + .group 0x00000000 0x8 binaries/resume.o + .group 0x00000000 0x8 binaries/resume.o + .group 0x00000000 0x8 binaries/resume.o + .group 0x00000000 0x8 binaries/resume.o + .group 0x00000000 0x8 binaries/resume.o + .group 0x00000000 0x8 binaries/resume.o + .debug_macro 0x00000000 0x838 binaries/resume.o + .debug_macro 0x00000000 0x58 binaries/resume.o + .debug_macro 0x00000000 0xb2 binaries/resume.o + .debug_macro 0x00000000 0x6a binaries/resume.o + .debug_macro 0x00000000 0x52 binaries/resume.o + .debug_macro 0x00000000 0x10 binaries/resume.o + .debug_macro 0x00000000 0x16 binaries/resume.o + .debug_macro 0x00000000 0x1c binaries/resume.o + .debug_macro 0x00000000 0x1c binaries/resume.o + .debug_macro 0x00000000 0x10 binaries/resume.o + .debug_macro 0x00000000 0x28 binaries/resume.o + .debug_macro 0x00000000 0x1c1 binaries/resume.o + .debug_macro 0x00000000 0xa0 binaries/resume.o + .debug_macro 0x00000000 0x10 binaries/resume.o + .debug_macro 0x00000000 0x22 binaries/resume.o + .debug_macro 0x00000000 0x46 binaries/resume.o + .debug_macro 0x00000000 0xfa binaries/resume.o + .debug_macro 0x00000000 0xdd binaries/resume.o + .debug_macro 0x00000000 0x91 binaries/resume.o + .debug_macro 0x00000000 0x8e binaries/resume.o + .debug_macro 0x00000000 0x82 binaries/resume.o + .debug_macro 0x00000000 0x2e binaries/resume.o + .debug_macro 0x00000000 0x3a binaries/resume.o + .debug_macro 0x00000000 0x4c binaries/resume.o + .debug_macro 0x00000000 0x3a binaries/resume.o + .debug_macro 0x00000000 0xa0 binaries/resume.o + .debug_macro 0x00000000 0x34 binaries/resume.o + .debug_macro 0x00000000 0x7c binaries/resume.o + .debug_macro 0x00000000 0x1c binaries/resume.o + .debug_macro 0x00000000 0xee binaries/resume.o + .debug_macro 0x00000000 0x7c binaries/resume.o + .debug_macro 0x00000000 0x20 binaries/resume.o + .debug_macro 0x00000000 0x10 binaries/resume.o + .debug_macro 0x00000000 0x1c binaries/resume.o + .debug_macro 0x00000000 0x34 binaries/resume.o + .debug_macro 0x00000000 0xeb binaries/resume.o + .debug_macro 0x00000000 0x8e binaries/resume.o + .group 0x00000000 0x8 binaries/seek.o + .group 0x00000000 0x8 binaries/seek.o + .group 0x00000000 0x8 binaries/seek.o + .group 0x00000000 0x8 binaries/seek.o + .group 0x00000000 0x8 binaries/seek.o + .group 0x00000000 0x8 binaries/seek.o + .group 0x00000000 0x8 binaries/seek.o + .group 0x00000000 0x8 binaries/seek.o + .group 0x00000000 0x8 binaries/seek.o + .group 0x00000000 0x8 binaries/seek.o + .group 0x00000000 0x8 binaries/seek.o + .group 0x00000000 0x8 binaries/seek.o + .group 0x00000000 0x8 binaries/seek.o + .group 0x00000000 0x8 binaries/seek.o + .group 0x00000000 0x8 binaries/seek.o + .group 0x00000000 0x8 binaries/seek.o + .group 0x00000000 0x8 binaries/seek.o + .group 0x00000000 0x8 binaries/seek.o + .group 0x00000000 0x8 binaries/seek.o + .group 0x00000000 0x8 binaries/seek.o + .group 0x00000000 0x8 binaries/seek.o + .group 0x00000000 0x8 binaries/seek.o + .group 0x00000000 0x8 binaries/seek.o + .group 0x00000000 0x8 binaries/seek.o + .group 0x00000000 0x8 binaries/seek.o + .group 0x00000000 0x8 binaries/seek.o + .group 0x00000000 0x8 binaries/seek.o + .group 0x00000000 0x8 binaries/seek.o + .group 0x00000000 0x8 binaries/seek.o + .group 0x00000000 0x8 binaries/seek.o + .group 0x00000000 0x8 binaries/seek.o + .group 0x00000000 0x8 binaries/seek.o + .group 0x00000000 0x8 binaries/seek.o + .group 0x00000000 0x8 binaries/seek.o + .group 0x00000000 0x8 binaries/seek.o + .group 0x00000000 0x8 binaries/seek.o + .group 0x00000000 0x8 binaries/seek.o + .debug_macro 0x00000000 0x838 binaries/seek.o + .debug_macro 0x00000000 0x58 binaries/seek.o + .debug_macro 0x00000000 0xb2 binaries/seek.o + .debug_macro 0x00000000 0x6a binaries/seek.o + .debug_macro 0x00000000 0x52 binaries/seek.o + .debug_macro 0x00000000 0x10 binaries/seek.o + .debug_macro 0x00000000 0x16 binaries/seek.o + .debug_macro 0x00000000 0x1c binaries/seek.o + .debug_macro 0x00000000 0x1c binaries/seek.o + .debug_macro 0x00000000 0x10 binaries/seek.o + .debug_macro 0x00000000 0x28 binaries/seek.o + .debug_macro 0x00000000 0x1c1 binaries/seek.o + .debug_macro 0x00000000 0xa0 binaries/seek.o + .debug_macro 0x00000000 0x10 binaries/seek.o + .debug_macro 0x00000000 0x22 binaries/seek.o + .debug_macro 0x00000000 0x46 binaries/seek.o + .debug_macro 0x00000000 0xfa binaries/seek.o + .debug_macro 0x00000000 0xdd binaries/seek.o + .debug_macro 0x00000000 0x91 binaries/seek.o + .debug_macro 0x00000000 0x8e binaries/seek.o + .debug_macro 0x00000000 0x82 binaries/seek.o + .debug_macro 0x00000000 0x2e binaries/seek.o + .debug_macro 0x00000000 0x3a binaries/seek.o + .debug_macro 0x00000000 0x4c binaries/seek.o + .debug_macro 0x00000000 0x3a binaries/seek.o + .debug_macro 0x00000000 0xa0 binaries/seek.o + .debug_macro 0x00000000 0x34 binaries/seek.o + .debug_macro 0x00000000 0x7c binaries/seek.o + .debug_macro 0x00000000 0x1c binaries/seek.o + .debug_macro 0x00000000 0xee binaries/seek.o + .debug_macro 0x00000000 0x7c binaries/seek.o + .debug_macro 0x00000000 0x20 binaries/seek.o + .debug_macro 0x00000000 0x10 binaries/seek.o + .debug_macro 0x00000000 0x1c binaries/seek.o + .debug_macro 0x00000000 0x34 binaries/seek.o + .debug_macro 0x00000000 0xeb binaries/seek.o + .debug_macro 0x00000000 0x8e binaries/seek.o + .group 0x00000000 0x8 binaries/semcount.o + .group 0x00000000 0x8 binaries/semcount.o + .group 0x00000000 0x8 binaries/semcount.o + .group 0x00000000 0x8 binaries/semcount.o + .group 0x00000000 0x8 binaries/semcount.o + .group 0x00000000 0x8 binaries/semcount.o + .group 0x00000000 0x8 binaries/semcount.o + .group 0x00000000 0x8 binaries/semcount.o + .group 0x00000000 0x8 binaries/semcount.o + .group 0x00000000 0x8 binaries/semcount.o + .group 0x00000000 0x8 binaries/semcount.o + .group 0x00000000 0x8 binaries/semcount.o + .group 0x00000000 0x8 binaries/semcount.o + .group 0x00000000 0x8 binaries/semcount.o + .group 0x00000000 0x8 binaries/semcount.o + .group 0x00000000 0x8 binaries/semcount.o + .group 0x00000000 0x8 binaries/semcount.o + .group 0x00000000 0x8 binaries/semcount.o + .group 0x00000000 0x8 binaries/semcount.o + .group 0x00000000 0x8 binaries/semcount.o + .group 0x00000000 0x8 binaries/semcount.o + .group 0x00000000 0x8 binaries/semcount.o + .group 0x00000000 0x8 binaries/semcount.o + .group 0x00000000 0x8 binaries/semcount.o + .group 0x00000000 0x8 binaries/semcount.o + .group 0x00000000 0x8 binaries/semcount.o + .group 0x00000000 0x8 binaries/semcount.o + .group 0x00000000 0x8 binaries/semcount.o + .group 0x00000000 0x8 binaries/semcount.o + .group 0x00000000 0x8 binaries/semcount.o + .group 0x00000000 0x8 binaries/semcount.o + .group 0x00000000 0x8 binaries/semcount.o + .group 0x00000000 0x8 binaries/semcount.o + .group 0x00000000 0x8 binaries/semcount.o + .group 0x00000000 0x8 binaries/semcount.o + .group 0x00000000 0x8 binaries/semcount.o + .group 0x00000000 0x8 binaries/semcount.o + .debug_macro 0x00000000 0x838 binaries/semcount.o + .debug_macro 0x00000000 0x58 binaries/semcount.o + .debug_macro 0x00000000 0xb2 binaries/semcount.o + .debug_macro 0x00000000 0x6a binaries/semcount.o + .debug_macro 0x00000000 0x52 binaries/semcount.o + .debug_macro 0x00000000 0x10 binaries/semcount.o + .debug_macro 0x00000000 0x16 binaries/semcount.o + .debug_macro 0x00000000 0x1c binaries/semcount.o + .debug_macro 0x00000000 0x1c binaries/semcount.o + .debug_macro 0x00000000 0x10 binaries/semcount.o + .debug_macro 0x00000000 0x28 binaries/semcount.o + .debug_macro 0x00000000 0x1c1 binaries/semcount.o + .debug_macro 0x00000000 0xa0 binaries/semcount.o + .debug_macro 0x00000000 0x10 binaries/semcount.o + .debug_macro 0x00000000 0x22 binaries/semcount.o + .debug_macro 0x00000000 0x46 binaries/semcount.o + .debug_macro 0x00000000 0xfa binaries/semcount.o + .debug_macro 0x00000000 0xdd binaries/semcount.o + .debug_macro 0x00000000 0x91 binaries/semcount.o + .debug_macro 0x00000000 0x8e binaries/semcount.o + .debug_macro 0x00000000 0x82 binaries/semcount.o + .debug_macro 0x00000000 0x2e binaries/semcount.o + .debug_macro 0x00000000 0x3a binaries/semcount.o + .debug_macro 0x00000000 0x4c binaries/semcount.o + .debug_macro 0x00000000 0x3a binaries/semcount.o + .debug_macro 0x00000000 0xa0 binaries/semcount.o + .debug_macro 0x00000000 0x34 binaries/semcount.o + .debug_macro 0x00000000 0x7c binaries/semcount.o + .debug_macro 0x00000000 0x1c binaries/semcount.o + .debug_macro 0x00000000 0xee binaries/semcount.o + .debug_macro 0x00000000 0x7c binaries/semcount.o + .debug_macro 0x00000000 0x20 binaries/semcount.o + .debug_macro 0x00000000 0x10 binaries/semcount.o + .debug_macro 0x00000000 0x1c binaries/semcount.o + .debug_macro 0x00000000 0x34 binaries/semcount.o + .debug_macro 0x00000000 0xeb binaries/semcount.o + .debug_macro 0x00000000 0x8e binaries/semcount.o + .group 0x00000000 0x8 binaries/semcreate.o + .group 0x00000000 0x8 binaries/semcreate.o + .group 0x00000000 0x8 binaries/semcreate.o + .group 0x00000000 0x8 binaries/semcreate.o + .group 0x00000000 0x8 binaries/semcreate.o + .group 0x00000000 0x8 binaries/semcreate.o + .group 0x00000000 0x8 binaries/semcreate.o + .group 0x00000000 0x8 binaries/semcreate.o + .group 0x00000000 0x8 binaries/semcreate.o + .group 0x00000000 0x8 binaries/semcreate.o + .group 0x00000000 0x8 binaries/semcreate.o + .group 0x00000000 0x8 binaries/semcreate.o + .group 0x00000000 0x8 binaries/semcreate.o + .group 0x00000000 0x8 binaries/semcreate.o + .group 0x00000000 0x8 binaries/semcreate.o + .group 0x00000000 0x8 binaries/semcreate.o + .group 0x00000000 0x8 binaries/semcreate.o + .group 0x00000000 0x8 binaries/semcreate.o + .group 0x00000000 0x8 binaries/semcreate.o + .group 0x00000000 0x8 binaries/semcreate.o + .group 0x00000000 0x8 binaries/semcreate.o + .group 0x00000000 0x8 binaries/semcreate.o + .group 0x00000000 0x8 binaries/semcreate.o + .group 0x00000000 0x8 binaries/semcreate.o + .group 0x00000000 0x8 binaries/semcreate.o + .group 0x00000000 0x8 binaries/semcreate.o + .group 0x00000000 0x8 binaries/semcreate.o + .group 0x00000000 0x8 binaries/semcreate.o + .group 0x00000000 0x8 binaries/semcreate.o + .group 0x00000000 0x8 binaries/semcreate.o + .group 0x00000000 0x8 binaries/semcreate.o + .group 0x00000000 0x8 binaries/semcreate.o + .group 0x00000000 0x8 binaries/semcreate.o + .group 0x00000000 0x8 binaries/semcreate.o + .group 0x00000000 0x8 binaries/semcreate.o + .group 0x00000000 0x8 binaries/semcreate.o + .group 0x00000000 0x8 binaries/semcreate.o + .debug_macro 0x00000000 0x838 binaries/semcreate.o + .debug_macro 0x00000000 0x58 binaries/semcreate.o + .debug_macro 0x00000000 0xb2 binaries/semcreate.o + .debug_macro 0x00000000 0x6a binaries/semcreate.o + .debug_macro 0x00000000 0x52 binaries/semcreate.o + .debug_macro 0x00000000 0x10 binaries/semcreate.o + .debug_macro 0x00000000 0x16 binaries/semcreate.o + .debug_macro 0x00000000 0x1c binaries/semcreate.o + .debug_macro 0x00000000 0x1c binaries/semcreate.o + .debug_macro 0x00000000 0x10 binaries/semcreate.o + .debug_macro 0x00000000 0x28 binaries/semcreate.o + .debug_macro 0x00000000 0x1c1 binaries/semcreate.o + .debug_macro 0x00000000 0xa0 binaries/semcreate.o + .debug_macro 0x00000000 0x10 binaries/semcreate.o + .debug_macro 0x00000000 0x22 binaries/semcreate.o + .debug_macro 0x00000000 0x46 binaries/semcreate.o + .debug_macro 0x00000000 0xfa binaries/semcreate.o + .debug_macro 0x00000000 0xdd binaries/semcreate.o + .debug_macro 0x00000000 0x91 binaries/semcreate.o + .debug_macro 0x00000000 0x8e binaries/semcreate.o + .debug_macro 0x00000000 0x82 binaries/semcreate.o + .debug_macro 0x00000000 0x2e binaries/semcreate.o + .debug_macro 0x00000000 0x3a binaries/semcreate.o + .debug_macro 0x00000000 0x4c binaries/semcreate.o + .debug_macro 0x00000000 0x3a binaries/semcreate.o + .debug_macro 0x00000000 0xa0 binaries/semcreate.o + .debug_macro 0x00000000 0x34 binaries/semcreate.o + .debug_macro 0x00000000 0x7c binaries/semcreate.o + .debug_macro 0x00000000 0x1c binaries/semcreate.o + .debug_macro 0x00000000 0xee binaries/semcreate.o + .debug_macro 0x00000000 0x7c binaries/semcreate.o + .debug_macro 0x00000000 0x20 binaries/semcreate.o + .debug_macro 0x00000000 0x10 binaries/semcreate.o + .debug_macro 0x00000000 0x1c binaries/semcreate.o + .debug_macro 0x00000000 0x34 binaries/semcreate.o + .debug_macro 0x00000000 0xeb binaries/semcreate.o + .debug_macro 0x00000000 0x8e binaries/semcreate.o + .group 0x00000000 0x8 binaries/semdelete.o + .group 0x00000000 0x8 binaries/semdelete.o + .group 0x00000000 0x8 binaries/semdelete.o + .group 0x00000000 0x8 binaries/semdelete.o + .group 0x00000000 0x8 binaries/semdelete.o + .group 0x00000000 0x8 binaries/semdelete.o + .group 0x00000000 0x8 binaries/semdelete.o + .group 0x00000000 0x8 binaries/semdelete.o + .group 0x00000000 0x8 binaries/semdelete.o + .group 0x00000000 0x8 binaries/semdelete.o + .group 0x00000000 0x8 binaries/semdelete.o + .group 0x00000000 0x8 binaries/semdelete.o + .group 0x00000000 0x8 binaries/semdelete.o + .group 0x00000000 0x8 binaries/semdelete.o + .group 0x00000000 0x8 binaries/semdelete.o + .group 0x00000000 0x8 binaries/semdelete.o + .group 0x00000000 0x8 binaries/semdelete.o + .group 0x00000000 0x8 binaries/semdelete.o + .group 0x00000000 0x8 binaries/semdelete.o + .group 0x00000000 0x8 binaries/semdelete.o + .group 0x00000000 0x8 binaries/semdelete.o + .group 0x00000000 0x8 binaries/semdelete.o + .group 0x00000000 0x8 binaries/semdelete.o + .group 0x00000000 0x8 binaries/semdelete.o + .group 0x00000000 0x8 binaries/semdelete.o + .group 0x00000000 0x8 binaries/semdelete.o + .group 0x00000000 0x8 binaries/semdelete.o + .group 0x00000000 0x8 binaries/semdelete.o + .group 0x00000000 0x8 binaries/semdelete.o + .group 0x00000000 0x8 binaries/semdelete.o + .group 0x00000000 0x8 binaries/semdelete.o + .group 0x00000000 0x8 binaries/semdelete.o + .group 0x00000000 0x8 binaries/semdelete.o + .group 0x00000000 0x8 binaries/semdelete.o + .group 0x00000000 0x8 binaries/semdelete.o + .group 0x00000000 0x8 binaries/semdelete.o + .group 0x00000000 0x8 binaries/semdelete.o + .debug_macro 0x00000000 0x838 binaries/semdelete.o + .debug_macro 0x00000000 0x58 binaries/semdelete.o + .debug_macro 0x00000000 0xb2 binaries/semdelete.o + .debug_macro 0x00000000 0x6a binaries/semdelete.o + .debug_macro 0x00000000 0x52 binaries/semdelete.o + .debug_macro 0x00000000 0x10 binaries/semdelete.o + .debug_macro 0x00000000 0x16 binaries/semdelete.o + .debug_macro 0x00000000 0x1c binaries/semdelete.o + .debug_macro 0x00000000 0x1c binaries/semdelete.o + .debug_macro 0x00000000 0x10 binaries/semdelete.o + .debug_macro 0x00000000 0x28 binaries/semdelete.o + .debug_macro 0x00000000 0x1c1 binaries/semdelete.o + .debug_macro 0x00000000 0xa0 binaries/semdelete.o + .debug_macro 0x00000000 0x10 binaries/semdelete.o + .debug_macro 0x00000000 0x22 binaries/semdelete.o + .debug_macro 0x00000000 0x46 binaries/semdelete.o + .debug_macro 0x00000000 0xfa binaries/semdelete.o + .debug_macro 0x00000000 0xdd binaries/semdelete.o + .debug_macro 0x00000000 0x91 binaries/semdelete.o + .debug_macro 0x00000000 0x8e binaries/semdelete.o + .debug_macro 0x00000000 0x82 binaries/semdelete.o + .debug_macro 0x00000000 0x2e binaries/semdelete.o + .debug_macro 0x00000000 0x3a binaries/semdelete.o + .debug_macro 0x00000000 0x4c binaries/semdelete.o + .debug_macro 0x00000000 0x3a binaries/semdelete.o + .debug_macro 0x00000000 0xa0 binaries/semdelete.o + .debug_macro 0x00000000 0x34 binaries/semdelete.o + .debug_macro 0x00000000 0x7c binaries/semdelete.o + .debug_macro 0x00000000 0x1c binaries/semdelete.o + .debug_macro 0x00000000 0xee binaries/semdelete.o + .debug_macro 0x00000000 0x7c binaries/semdelete.o + .debug_macro 0x00000000 0x20 binaries/semdelete.o + .debug_macro 0x00000000 0x10 binaries/semdelete.o + .debug_macro 0x00000000 0x1c binaries/semdelete.o + .debug_macro 0x00000000 0x34 binaries/semdelete.o + .debug_macro 0x00000000 0xeb binaries/semdelete.o + .debug_macro 0x00000000 0x8e binaries/semdelete.o + .group 0x00000000 0x8 binaries/semreset.o + .group 0x00000000 0x8 binaries/semreset.o + .group 0x00000000 0x8 binaries/semreset.o + .group 0x00000000 0x8 binaries/semreset.o + .group 0x00000000 0x8 binaries/semreset.o + .group 0x00000000 0x8 binaries/semreset.o + .group 0x00000000 0x8 binaries/semreset.o + .group 0x00000000 0x8 binaries/semreset.o + .group 0x00000000 0x8 binaries/semreset.o + .group 0x00000000 0x8 binaries/semreset.o + .group 0x00000000 0x8 binaries/semreset.o + .group 0x00000000 0x8 binaries/semreset.o + .group 0x00000000 0x8 binaries/semreset.o + .group 0x00000000 0x8 binaries/semreset.o + .group 0x00000000 0x8 binaries/semreset.o + .group 0x00000000 0x8 binaries/semreset.o + .group 0x00000000 0x8 binaries/semreset.o + .group 0x00000000 0x8 binaries/semreset.o + .group 0x00000000 0x8 binaries/semreset.o + .group 0x00000000 0x8 binaries/semreset.o + .group 0x00000000 0x8 binaries/semreset.o + .group 0x00000000 0x8 binaries/semreset.o + .group 0x00000000 0x8 binaries/semreset.o + .group 0x00000000 0x8 binaries/semreset.o + .group 0x00000000 0x8 binaries/semreset.o + .group 0x00000000 0x8 binaries/semreset.o + .group 0x00000000 0x8 binaries/semreset.o + .group 0x00000000 0x8 binaries/semreset.o + .group 0x00000000 0x8 binaries/semreset.o + .group 0x00000000 0x8 binaries/semreset.o + .group 0x00000000 0x8 binaries/semreset.o + .group 0x00000000 0x8 binaries/semreset.o + .group 0x00000000 0x8 binaries/semreset.o + .group 0x00000000 0x8 binaries/semreset.o + .group 0x00000000 0x8 binaries/semreset.o + .group 0x00000000 0x8 binaries/semreset.o + .group 0x00000000 0x8 binaries/semreset.o + .debug_macro 0x00000000 0x838 binaries/semreset.o + .debug_macro 0x00000000 0x58 binaries/semreset.o + .debug_macro 0x00000000 0xb2 binaries/semreset.o + .debug_macro 0x00000000 0x6a binaries/semreset.o + .debug_macro 0x00000000 0x52 binaries/semreset.o + .debug_macro 0x00000000 0x10 binaries/semreset.o + .debug_macro 0x00000000 0x16 binaries/semreset.o + .debug_macro 0x00000000 0x1c binaries/semreset.o + .debug_macro 0x00000000 0x1c binaries/semreset.o + .debug_macro 0x00000000 0x10 binaries/semreset.o + .debug_macro 0x00000000 0x28 binaries/semreset.o + .debug_macro 0x00000000 0x1c1 binaries/semreset.o + .debug_macro 0x00000000 0xa0 binaries/semreset.o + .debug_macro 0x00000000 0x10 binaries/semreset.o + .debug_macro 0x00000000 0x22 binaries/semreset.o + .debug_macro 0x00000000 0x46 binaries/semreset.o + .debug_macro 0x00000000 0xfa binaries/semreset.o + .debug_macro 0x00000000 0xdd binaries/semreset.o + .debug_macro 0x00000000 0x91 binaries/semreset.o + .debug_macro 0x00000000 0x8e binaries/semreset.o + .debug_macro 0x00000000 0x82 binaries/semreset.o + .debug_macro 0x00000000 0x2e binaries/semreset.o + .debug_macro 0x00000000 0x3a binaries/semreset.o + .debug_macro 0x00000000 0x4c binaries/semreset.o + .debug_macro 0x00000000 0x3a binaries/semreset.o + .debug_macro 0x00000000 0xa0 binaries/semreset.o + .debug_macro 0x00000000 0x34 binaries/semreset.o + .debug_macro 0x00000000 0x7c binaries/semreset.o + .debug_macro 0x00000000 0x1c binaries/semreset.o + .debug_macro 0x00000000 0xee binaries/semreset.o + .debug_macro 0x00000000 0x7c binaries/semreset.o + .debug_macro 0x00000000 0x20 binaries/semreset.o + .debug_macro 0x00000000 0x10 binaries/semreset.o + .debug_macro 0x00000000 0x1c binaries/semreset.o + .debug_macro 0x00000000 0x34 binaries/semreset.o + .debug_macro 0x00000000 0xeb binaries/semreset.o + .debug_macro 0x00000000 0x8e binaries/semreset.o + .group 0x00000000 0x8 binaries/send.o + .group 0x00000000 0x8 binaries/send.o + .group 0x00000000 0x8 binaries/send.o + .group 0x00000000 0x8 binaries/send.o + .group 0x00000000 0x8 binaries/send.o + .group 0x00000000 0x8 binaries/send.o + .group 0x00000000 0x8 binaries/send.o + .group 0x00000000 0x8 binaries/send.o + .group 0x00000000 0x8 binaries/send.o + .group 0x00000000 0x8 binaries/send.o + .group 0x00000000 0x8 binaries/send.o + .group 0x00000000 0x8 binaries/send.o + .group 0x00000000 0x8 binaries/send.o + .group 0x00000000 0x8 binaries/send.o + .group 0x00000000 0x8 binaries/send.o + .group 0x00000000 0x8 binaries/send.o + .group 0x00000000 0x8 binaries/send.o + .group 0x00000000 0x8 binaries/send.o + .group 0x00000000 0x8 binaries/send.o + .group 0x00000000 0x8 binaries/send.o + .group 0x00000000 0x8 binaries/send.o + .group 0x00000000 0x8 binaries/send.o + .group 0x00000000 0x8 binaries/send.o + .group 0x00000000 0x8 binaries/send.o + .group 0x00000000 0x8 binaries/send.o + .group 0x00000000 0x8 binaries/send.o + .group 0x00000000 0x8 binaries/send.o + .group 0x00000000 0x8 binaries/send.o + .group 0x00000000 0x8 binaries/send.o + .group 0x00000000 0x8 binaries/send.o + .group 0x00000000 0x8 binaries/send.o + .group 0x00000000 0x8 binaries/send.o + .group 0x00000000 0x8 binaries/send.o + .group 0x00000000 0x8 binaries/send.o + .group 0x00000000 0x8 binaries/send.o + .group 0x00000000 0x8 binaries/send.o + .group 0x00000000 0x8 binaries/send.o + .debug_macro 0x00000000 0x838 binaries/send.o + .debug_macro 0x00000000 0x58 binaries/send.o + .debug_macro 0x00000000 0xb2 binaries/send.o + .debug_macro 0x00000000 0x6a binaries/send.o + .debug_macro 0x00000000 0x52 binaries/send.o + .debug_macro 0x00000000 0x10 binaries/send.o + .debug_macro 0x00000000 0x16 binaries/send.o + .debug_macro 0x00000000 0x1c binaries/send.o + .debug_macro 0x00000000 0x1c binaries/send.o + .debug_macro 0x00000000 0x10 binaries/send.o + .debug_macro 0x00000000 0x28 binaries/send.o + .debug_macro 0x00000000 0x1c1 binaries/send.o + .debug_macro 0x00000000 0xa0 binaries/send.o + .debug_macro 0x00000000 0x10 binaries/send.o + .debug_macro 0x00000000 0x22 binaries/send.o + .debug_macro 0x00000000 0x46 binaries/send.o + .debug_macro 0x00000000 0xfa binaries/send.o + .debug_macro 0x00000000 0xdd binaries/send.o + .debug_macro 0x00000000 0x91 binaries/send.o + .debug_macro 0x00000000 0x8e binaries/send.o + .debug_macro 0x00000000 0x82 binaries/send.o + .debug_macro 0x00000000 0x2e binaries/send.o + .debug_macro 0x00000000 0x3a binaries/send.o + .debug_macro 0x00000000 0x4c binaries/send.o + .debug_macro 0x00000000 0x3a binaries/send.o + .debug_macro 0x00000000 0xa0 binaries/send.o + .debug_macro 0x00000000 0x34 binaries/send.o + .debug_macro 0x00000000 0x7c binaries/send.o + .debug_macro 0x00000000 0x1c binaries/send.o + .debug_macro 0x00000000 0xee binaries/send.o + .debug_macro 0x00000000 0x7c binaries/send.o + .debug_macro 0x00000000 0x20 binaries/send.o + .debug_macro 0x00000000 0x10 binaries/send.o + .debug_macro 0x00000000 0x1c binaries/send.o + .debug_macro 0x00000000 0x34 binaries/send.o + .debug_macro 0x00000000 0xeb binaries/send.o + .debug_macro 0x00000000 0x8e binaries/send.o + .group 0x00000000 0x8 binaries/signal.o + .group 0x00000000 0x8 binaries/signal.o + .group 0x00000000 0x8 binaries/signal.o + .group 0x00000000 0x8 binaries/signal.o + .group 0x00000000 0x8 binaries/signal.o + .group 0x00000000 0x8 binaries/signal.o + .group 0x00000000 0x8 binaries/signal.o + .group 0x00000000 0x8 binaries/signal.o + .group 0x00000000 0x8 binaries/signal.o + .group 0x00000000 0x8 binaries/signal.o + .group 0x00000000 0x8 binaries/signal.o + .group 0x00000000 0x8 binaries/signal.o + .group 0x00000000 0x8 binaries/signal.o + .group 0x00000000 0x8 binaries/signal.o + .group 0x00000000 0x8 binaries/signal.o + .group 0x00000000 0x8 binaries/signal.o + .group 0x00000000 0x8 binaries/signal.o + .group 0x00000000 0x8 binaries/signal.o + .group 0x00000000 0x8 binaries/signal.o + .group 0x00000000 0x8 binaries/signal.o + .group 0x00000000 0x8 binaries/signal.o + .group 0x00000000 0x8 binaries/signal.o + .group 0x00000000 0x8 binaries/signal.o + .group 0x00000000 0x8 binaries/signal.o + .group 0x00000000 0x8 binaries/signal.o + .group 0x00000000 0x8 binaries/signal.o + .group 0x00000000 0x8 binaries/signal.o + .group 0x00000000 0x8 binaries/signal.o + .group 0x00000000 0x8 binaries/signal.o + .group 0x00000000 0x8 binaries/signal.o + .group 0x00000000 0x8 binaries/signal.o + .group 0x00000000 0x8 binaries/signal.o + .group 0x00000000 0x8 binaries/signal.o + .group 0x00000000 0x8 binaries/signal.o + .group 0x00000000 0x8 binaries/signal.o + .group 0x00000000 0x8 binaries/signal.o + .group 0x00000000 0x8 binaries/signal.o + .debug_macro 0x00000000 0x838 binaries/signal.o + .debug_macro 0x00000000 0x58 binaries/signal.o + .debug_macro 0x00000000 0xb2 binaries/signal.o + .debug_macro 0x00000000 0x6a binaries/signal.o + .debug_macro 0x00000000 0x52 binaries/signal.o + .debug_macro 0x00000000 0x10 binaries/signal.o + .debug_macro 0x00000000 0x16 binaries/signal.o + .debug_macro 0x00000000 0x1c binaries/signal.o + .debug_macro 0x00000000 0x1c binaries/signal.o + .debug_macro 0x00000000 0x10 binaries/signal.o + .debug_macro 0x00000000 0x28 binaries/signal.o + .debug_macro 0x00000000 0x1c1 binaries/signal.o + .debug_macro 0x00000000 0xa0 binaries/signal.o + .debug_macro 0x00000000 0x10 binaries/signal.o + .debug_macro 0x00000000 0x22 binaries/signal.o + .debug_macro 0x00000000 0x46 binaries/signal.o + .debug_macro 0x00000000 0xfa binaries/signal.o + .debug_macro 0x00000000 0xdd binaries/signal.o + .debug_macro 0x00000000 0x91 binaries/signal.o + .debug_macro 0x00000000 0x8e binaries/signal.o + .debug_macro 0x00000000 0x82 binaries/signal.o + .debug_macro 0x00000000 0x2e binaries/signal.o + .debug_macro 0x00000000 0x3a binaries/signal.o + .debug_macro 0x00000000 0x4c binaries/signal.o + .debug_macro 0x00000000 0x3a binaries/signal.o + .debug_macro 0x00000000 0xa0 binaries/signal.o + .debug_macro 0x00000000 0x34 binaries/signal.o + .debug_macro 0x00000000 0x7c binaries/signal.o + .debug_macro 0x00000000 0x1c binaries/signal.o + .debug_macro 0x00000000 0xee binaries/signal.o + .debug_macro 0x00000000 0x7c binaries/signal.o + .debug_macro 0x00000000 0x20 binaries/signal.o + .debug_macro 0x00000000 0x10 binaries/signal.o + .debug_macro 0x00000000 0x1c binaries/signal.o + .debug_macro 0x00000000 0x34 binaries/signal.o + .debug_macro 0x00000000 0xeb binaries/signal.o + .debug_macro 0x00000000 0x8e binaries/signal.o + .group 0x00000000 0x8 binaries/signaln.o + .group 0x00000000 0x8 binaries/signaln.o + .group 0x00000000 0x8 binaries/signaln.o + .group 0x00000000 0x8 binaries/signaln.o + .group 0x00000000 0x8 binaries/signaln.o + .group 0x00000000 0x8 binaries/signaln.o + .group 0x00000000 0x8 binaries/signaln.o + .group 0x00000000 0x8 binaries/signaln.o + .group 0x00000000 0x8 binaries/signaln.o + .group 0x00000000 0x8 binaries/signaln.o + .group 0x00000000 0x8 binaries/signaln.o + .group 0x00000000 0x8 binaries/signaln.o + .group 0x00000000 0x8 binaries/signaln.o + .group 0x00000000 0x8 binaries/signaln.o + .group 0x00000000 0x8 binaries/signaln.o + .group 0x00000000 0x8 binaries/signaln.o + .group 0x00000000 0x8 binaries/signaln.o + .group 0x00000000 0x8 binaries/signaln.o + .group 0x00000000 0x8 binaries/signaln.o + .group 0x00000000 0x8 binaries/signaln.o + .group 0x00000000 0x8 binaries/signaln.o + .group 0x00000000 0x8 binaries/signaln.o + .group 0x00000000 0x8 binaries/signaln.o + .group 0x00000000 0x8 binaries/signaln.o + .group 0x00000000 0x8 binaries/signaln.o + .group 0x00000000 0x8 binaries/signaln.o + .group 0x00000000 0x8 binaries/signaln.o + .group 0x00000000 0x8 binaries/signaln.o + .group 0x00000000 0x8 binaries/signaln.o + .group 0x00000000 0x8 binaries/signaln.o + .group 0x00000000 0x8 binaries/signaln.o + .group 0x00000000 0x8 binaries/signaln.o + .group 0x00000000 0x8 binaries/signaln.o + .group 0x00000000 0x8 binaries/signaln.o + .group 0x00000000 0x8 binaries/signaln.o + .group 0x00000000 0x8 binaries/signaln.o + .group 0x00000000 0x8 binaries/signaln.o + .debug_macro 0x00000000 0x838 binaries/signaln.o + .debug_macro 0x00000000 0x58 binaries/signaln.o + .debug_macro 0x00000000 0xb2 binaries/signaln.o + .debug_macro 0x00000000 0x6a binaries/signaln.o + .debug_macro 0x00000000 0x52 binaries/signaln.o + .debug_macro 0x00000000 0x10 binaries/signaln.o + .debug_macro 0x00000000 0x16 binaries/signaln.o + .debug_macro 0x00000000 0x1c binaries/signaln.o + .debug_macro 0x00000000 0x1c binaries/signaln.o + .debug_macro 0x00000000 0x10 binaries/signaln.o + .debug_macro 0x00000000 0x28 binaries/signaln.o + .debug_macro 0x00000000 0x1c1 binaries/signaln.o + .debug_macro 0x00000000 0xa0 binaries/signaln.o + .debug_macro 0x00000000 0x10 binaries/signaln.o + .debug_macro 0x00000000 0x22 binaries/signaln.o + .debug_macro 0x00000000 0x46 binaries/signaln.o + .debug_macro 0x00000000 0xfa binaries/signaln.o + .debug_macro 0x00000000 0xdd binaries/signaln.o + .debug_macro 0x00000000 0x91 binaries/signaln.o + .debug_macro 0x00000000 0x8e binaries/signaln.o + .debug_macro 0x00000000 0x82 binaries/signaln.o + .debug_macro 0x00000000 0x2e binaries/signaln.o + .debug_macro 0x00000000 0x3a binaries/signaln.o + .debug_macro 0x00000000 0x4c binaries/signaln.o + .debug_macro 0x00000000 0x3a binaries/signaln.o + .debug_macro 0x00000000 0xa0 binaries/signaln.o + .debug_macro 0x00000000 0x34 binaries/signaln.o + .debug_macro 0x00000000 0x7c binaries/signaln.o + .debug_macro 0x00000000 0x1c binaries/signaln.o + .debug_macro 0x00000000 0xee binaries/signaln.o + .debug_macro 0x00000000 0x7c binaries/signaln.o + .debug_macro 0x00000000 0x20 binaries/signaln.o + .debug_macro 0x00000000 0x10 binaries/signaln.o + .debug_macro 0x00000000 0x1c binaries/signaln.o + .debug_macro 0x00000000 0x34 binaries/signaln.o + .debug_macro 0x00000000 0xeb binaries/signaln.o + .debug_macro 0x00000000 0x8e binaries/signaln.o + .group 0x00000000 0x8 binaries/sleep.o + .group 0x00000000 0x8 binaries/sleep.o + .group 0x00000000 0x8 binaries/sleep.o + .group 0x00000000 0x8 binaries/sleep.o + .group 0x00000000 0x8 binaries/sleep.o + .group 0x00000000 0x8 binaries/sleep.o + .group 0x00000000 0x8 binaries/sleep.o + .group 0x00000000 0x8 binaries/sleep.o + .group 0x00000000 0x8 binaries/sleep.o + .group 0x00000000 0x8 binaries/sleep.o + .group 0x00000000 0x8 binaries/sleep.o + .group 0x00000000 0x8 binaries/sleep.o + .group 0x00000000 0x8 binaries/sleep.o + .group 0x00000000 0x8 binaries/sleep.o + .group 0x00000000 0x8 binaries/sleep.o + .group 0x00000000 0x8 binaries/sleep.o + .group 0x00000000 0x8 binaries/sleep.o + .group 0x00000000 0x8 binaries/sleep.o + .group 0x00000000 0x8 binaries/sleep.o + .group 0x00000000 0x8 binaries/sleep.o + .group 0x00000000 0x8 binaries/sleep.o + .group 0x00000000 0x8 binaries/sleep.o + .group 0x00000000 0x8 binaries/sleep.o + .group 0x00000000 0x8 binaries/sleep.o + .group 0x00000000 0x8 binaries/sleep.o + .group 0x00000000 0x8 binaries/sleep.o + .group 0x00000000 0x8 binaries/sleep.o + .group 0x00000000 0x8 binaries/sleep.o + .group 0x00000000 0x8 binaries/sleep.o + .group 0x00000000 0x8 binaries/sleep.o + .group 0x00000000 0x8 binaries/sleep.o + .group 0x00000000 0x8 binaries/sleep.o + .group 0x00000000 0x8 binaries/sleep.o + .group 0x00000000 0x8 binaries/sleep.o + .group 0x00000000 0x8 binaries/sleep.o + .group 0x00000000 0x8 binaries/sleep.o + .group 0x00000000 0x8 binaries/sleep.o + .debug_macro 0x00000000 0x838 binaries/sleep.o + .debug_macro 0x00000000 0x58 binaries/sleep.o + .debug_macro 0x00000000 0xb2 binaries/sleep.o + .debug_macro 0x00000000 0x6a binaries/sleep.o + .debug_macro 0x00000000 0x52 binaries/sleep.o + .debug_macro 0x00000000 0x10 binaries/sleep.o + .debug_macro 0x00000000 0x16 binaries/sleep.o + .debug_macro 0x00000000 0x1c binaries/sleep.o + .debug_macro 0x00000000 0x1c binaries/sleep.o + .debug_macro 0x00000000 0x10 binaries/sleep.o + .debug_macro 0x00000000 0x28 binaries/sleep.o + .debug_macro 0x00000000 0x1c1 binaries/sleep.o + .debug_macro 0x00000000 0xa0 binaries/sleep.o + .debug_macro 0x00000000 0x10 binaries/sleep.o + .debug_macro 0x00000000 0x22 binaries/sleep.o + .debug_macro 0x00000000 0x46 binaries/sleep.o + .debug_macro 0x00000000 0xfa binaries/sleep.o + .debug_macro 0x00000000 0xdd binaries/sleep.o + .debug_macro 0x00000000 0x91 binaries/sleep.o + .debug_macro 0x00000000 0x8e binaries/sleep.o + .debug_macro 0x00000000 0x82 binaries/sleep.o + .debug_macro 0x00000000 0x2e binaries/sleep.o + .debug_macro 0x00000000 0x3a binaries/sleep.o + .debug_macro 0x00000000 0x4c binaries/sleep.o + .debug_macro 0x00000000 0x3a binaries/sleep.o + .debug_macro 0x00000000 0xa0 binaries/sleep.o + .debug_macro 0x00000000 0x34 binaries/sleep.o + .debug_macro 0x00000000 0x7c binaries/sleep.o + .debug_macro 0x00000000 0x1c binaries/sleep.o + .debug_macro 0x00000000 0xee binaries/sleep.o + .debug_macro 0x00000000 0x7c binaries/sleep.o + .debug_macro 0x00000000 0x20 binaries/sleep.o + .debug_macro 0x00000000 0x10 binaries/sleep.o + .debug_macro 0x00000000 0x1c binaries/sleep.o + .debug_macro 0x00000000 0x34 binaries/sleep.o + .debug_macro 0x00000000 0xeb binaries/sleep.o + .debug_macro 0x00000000 0x8e binaries/sleep.o + .group 0x00000000 0x8 binaries/sp804.o + .group 0x00000000 0x8 binaries/sp804.o + .group 0x00000000 0x8 binaries/sp804.o + .group 0x00000000 0x8 binaries/sp804.o + .group 0x00000000 0x8 binaries/sp804.o + .group 0x00000000 0x8 binaries/sp804.o + .group 0x00000000 0x8 binaries/sp804.o + .group 0x00000000 0x8 binaries/sp804.o + .group 0x00000000 0x8 binaries/sp804.o + .group 0x00000000 0x8 binaries/sp804.o + .group 0x00000000 0x8 binaries/sp804.o + .group 0x00000000 0x8 binaries/sp804.o + .group 0x00000000 0x8 binaries/sp804.o + .group 0x00000000 0x8 binaries/sp804.o + .group 0x00000000 0x8 binaries/sp804.o + .group 0x00000000 0x8 binaries/sp804.o + .group 0x00000000 0x8 binaries/sp804.o + .group 0x00000000 0x8 binaries/sp804.o + .group 0x00000000 0x8 binaries/sp804.o + .group 0x00000000 0x8 binaries/sp804.o + .group 0x00000000 0x8 binaries/sp804.o + .group 0x00000000 0x8 binaries/sp804.o + .group 0x00000000 0x8 binaries/sp804.o + .group 0x00000000 0x8 binaries/sp804.o + .group 0x00000000 0x8 binaries/sp804.o + .group 0x00000000 0x8 binaries/sp804.o + .group 0x00000000 0x8 binaries/sp804.o + .group 0x00000000 0x8 binaries/sp804.o + .group 0x00000000 0x8 binaries/sp804.o + .group 0x00000000 0x8 binaries/sp804.o + .group 0x00000000 0x8 binaries/sp804.o + .group 0x00000000 0x8 binaries/sp804.o + .group 0x00000000 0x8 binaries/sp804.o + .group 0x00000000 0x8 binaries/sp804.o + .group 0x00000000 0x8 binaries/sp804.o + .group 0x00000000 0x8 binaries/sp804.o + .group 0x00000000 0x8 binaries/sp804.o + .debug_macro 0x00000000 0x838 binaries/sp804.o + .debug_macro 0x00000000 0x58 binaries/sp804.o + .debug_macro 0x00000000 0xb2 binaries/sp804.o + .debug_macro 0x00000000 0x6a binaries/sp804.o + .debug_macro 0x00000000 0x52 binaries/sp804.o + .debug_macro 0x00000000 0x10 binaries/sp804.o + .debug_macro 0x00000000 0x16 binaries/sp804.o + .debug_macro 0x00000000 0x1c binaries/sp804.o + .debug_macro 0x00000000 0x1c binaries/sp804.o + .debug_macro 0x00000000 0x10 binaries/sp804.o + .debug_macro 0x00000000 0x28 binaries/sp804.o + .debug_macro 0x00000000 0x1c1 binaries/sp804.o + .debug_macro 0x00000000 0xa0 binaries/sp804.o + .debug_macro 0x00000000 0x10 binaries/sp804.o + .debug_macro 0x00000000 0x22 binaries/sp804.o + .debug_macro 0x00000000 0x46 binaries/sp804.o + .debug_macro 0x00000000 0xfa binaries/sp804.o + .debug_macro 0x00000000 0xdd binaries/sp804.o + .debug_macro 0x00000000 0x91 binaries/sp804.o + .debug_macro 0x00000000 0x8e binaries/sp804.o + .debug_macro 0x00000000 0x82 binaries/sp804.o + .debug_macro 0x00000000 0x2e binaries/sp804.o + .debug_macro 0x00000000 0x3a binaries/sp804.o + .debug_macro 0x00000000 0x4c binaries/sp804.o + .debug_macro 0x00000000 0x3a binaries/sp804.o + .debug_macro 0x00000000 0xa0 binaries/sp804.o + .debug_macro 0x00000000 0x34 binaries/sp804.o + .debug_macro 0x00000000 0x7c binaries/sp804.o + .debug_macro 0x00000000 0x1c binaries/sp804.o + .debug_macro 0x00000000 0xee binaries/sp804.o + .debug_macro 0x00000000 0x7c binaries/sp804.o + .debug_macro 0x00000000 0x20 binaries/sp804.o + .debug_macro 0x00000000 0x10 binaries/sp804.o + .debug_macro 0x00000000 0x1c binaries/sp804.o + .debug_macro 0x00000000 0x34 binaries/sp804.o + .debug_macro 0x00000000 0xeb binaries/sp804.o + .debug_macro 0x00000000 0x8e binaries/sp804.o + .group 0x00000000 0x8 binaries/suspend.o + .group 0x00000000 0x8 binaries/suspend.o + .group 0x00000000 0x8 binaries/suspend.o + .group 0x00000000 0x8 binaries/suspend.o + .group 0x00000000 0x8 binaries/suspend.o + .group 0x00000000 0x8 binaries/suspend.o + .group 0x00000000 0x8 binaries/suspend.o + .group 0x00000000 0x8 binaries/suspend.o + .group 0x00000000 0x8 binaries/suspend.o + .group 0x00000000 0x8 binaries/suspend.o + .group 0x00000000 0x8 binaries/suspend.o + .group 0x00000000 0x8 binaries/suspend.o + .group 0x00000000 0x8 binaries/suspend.o + .group 0x00000000 0x8 binaries/suspend.o + .group 0x00000000 0x8 binaries/suspend.o + .group 0x00000000 0x8 binaries/suspend.o + .group 0x00000000 0x8 binaries/suspend.o + .group 0x00000000 0x8 binaries/suspend.o + .group 0x00000000 0x8 binaries/suspend.o + .group 0x00000000 0x8 binaries/suspend.o + .group 0x00000000 0x8 binaries/suspend.o + .group 0x00000000 0x8 binaries/suspend.o + .group 0x00000000 0x8 binaries/suspend.o + .group 0x00000000 0x8 binaries/suspend.o + .group 0x00000000 0x8 binaries/suspend.o + .group 0x00000000 0x8 binaries/suspend.o + .group 0x00000000 0x8 binaries/suspend.o + .group 0x00000000 0x8 binaries/suspend.o + .group 0x00000000 0x8 binaries/suspend.o + .group 0x00000000 0x8 binaries/suspend.o + .group 0x00000000 0x8 binaries/suspend.o + .group 0x00000000 0x8 binaries/suspend.o + .group 0x00000000 0x8 binaries/suspend.o + .group 0x00000000 0x8 binaries/suspend.o + .group 0x00000000 0x8 binaries/suspend.o + .group 0x00000000 0x8 binaries/suspend.o + .group 0x00000000 0x8 binaries/suspend.o + .debug_macro 0x00000000 0x838 binaries/suspend.o + .debug_macro 0x00000000 0x58 binaries/suspend.o + .debug_macro 0x00000000 0xb2 binaries/suspend.o + .debug_macro 0x00000000 0x6a binaries/suspend.o + .debug_macro 0x00000000 0x52 binaries/suspend.o + .debug_macro 0x00000000 0x10 binaries/suspend.o + .debug_macro 0x00000000 0x16 binaries/suspend.o + .debug_macro 0x00000000 0x1c binaries/suspend.o + .debug_macro 0x00000000 0x1c binaries/suspend.o + .debug_macro 0x00000000 0x10 binaries/suspend.o + .debug_macro 0x00000000 0x28 binaries/suspend.o + .debug_macro 0x00000000 0x1c1 binaries/suspend.o + .debug_macro 0x00000000 0xa0 binaries/suspend.o + .debug_macro 0x00000000 0x10 binaries/suspend.o + .debug_macro 0x00000000 0x22 binaries/suspend.o + .debug_macro 0x00000000 0x46 binaries/suspend.o + .debug_macro 0x00000000 0xfa binaries/suspend.o + .debug_macro 0x00000000 0xdd binaries/suspend.o + .debug_macro 0x00000000 0x91 binaries/suspend.o + .debug_macro 0x00000000 0x8e binaries/suspend.o + .debug_macro 0x00000000 0x82 binaries/suspend.o + .debug_macro 0x00000000 0x2e binaries/suspend.o + .debug_macro 0x00000000 0x3a binaries/suspend.o + .debug_macro 0x00000000 0x4c binaries/suspend.o + .debug_macro 0x00000000 0x3a binaries/suspend.o + .debug_macro 0x00000000 0xa0 binaries/suspend.o + .debug_macro 0x00000000 0x34 binaries/suspend.o + .debug_macro 0x00000000 0x7c binaries/suspend.o + .debug_macro 0x00000000 0x1c binaries/suspend.o + .debug_macro 0x00000000 0xee binaries/suspend.o + .debug_macro 0x00000000 0x7c binaries/suspend.o + .debug_macro 0x00000000 0x20 binaries/suspend.o + .debug_macro 0x00000000 0x10 binaries/suspend.o + .debug_macro 0x00000000 0x1c binaries/suspend.o + .debug_macro 0x00000000 0x34 binaries/suspend.o + .debug_macro 0x00000000 0xeb binaries/suspend.o + .debug_macro 0x00000000 0x8e binaries/suspend.o + .group 0x00000000 0x8 binaries/udelay.o + .group 0x00000000 0x8 binaries/udelay.o + .group 0x00000000 0x8 binaries/udelay.o + .group 0x00000000 0x8 binaries/udelay.o + .group 0x00000000 0x8 binaries/udelay.o + .group 0x00000000 0x8 binaries/udelay.o + .group 0x00000000 0x8 binaries/udelay.o + .group 0x00000000 0x8 binaries/udelay.o + .group 0x00000000 0x8 binaries/udelay.o + .group 0x00000000 0x8 binaries/udelay.o + .group 0x00000000 0x8 binaries/udelay.o + .group 0x00000000 0x8 binaries/udelay.o + .group 0x00000000 0x8 binaries/udelay.o + .group 0x00000000 0x8 binaries/udelay.o + .group 0x00000000 0x8 binaries/udelay.o + .group 0x00000000 0x8 binaries/udelay.o + .group 0x00000000 0x8 binaries/udelay.o + .group 0x00000000 0x8 binaries/udelay.o + .group 0x00000000 0x8 binaries/udelay.o + .group 0x00000000 0x8 binaries/udelay.o + .group 0x00000000 0x8 binaries/udelay.o + .group 0x00000000 0x8 binaries/udelay.o + .group 0x00000000 0x8 binaries/udelay.o + .group 0x00000000 0x8 binaries/udelay.o + .group 0x00000000 0x8 binaries/udelay.o + .group 0x00000000 0x8 binaries/udelay.o + .group 0x00000000 0x8 binaries/udelay.o + .group 0x00000000 0x8 binaries/udelay.o + .group 0x00000000 0x8 binaries/udelay.o + .group 0x00000000 0x8 binaries/udelay.o + .group 0x00000000 0x8 binaries/udelay.o + .group 0x00000000 0x8 binaries/udelay.o + .group 0x00000000 0x8 binaries/udelay.o + .group 0x00000000 0x8 binaries/udelay.o + .group 0x00000000 0x8 binaries/udelay.o + .group 0x00000000 0x8 binaries/udelay.o + .group 0x00000000 0x8 binaries/udelay.o + .group 0x00000000 0x8 binaries/udelay.o + .group 0x00000000 0x8 binaries/udelay.o + .debug_macro 0x00000000 0x838 binaries/udelay.o + .debug_macro 0x00000000 0x58 binaries/udelay.o + .debug_macro 0x00000000 0xb2 binaries/udelay.o + .debug_macro 0x00000000 0x6a binaries/udelay.o + .debug_macro 0x00000000 0x52 binaries/udelay.o + .debug_macro 0x00000000 0x10 binaries/udelay.o + .debug_macro 0x00000000 0x16 binaries/udelay.o + .debug_macro 0x00000000 0x1c binaries/udelay.o + .debug_macro 0x00000000 0x1c binaries/udelay.o + .debug_macro 0x00000000 0x10 binaries/udelay.o + .debug_macro 0x00000000 0x28 binaries/udelay.o + .debug_macro 0x00000000 0x1c1 binaries/udelay.o + .debug_macro 0x00000000 0xa0 binaries/udelay.o + .debug_macro 0x00000000 0x10 binaries/udelay.o + .debug_macro 0x00000000 0x22 binaries/udelay.o + .debug_macro 0x00000000 0x46 binaries/udelay.o + .debug_macro 0x00000000 0xfa binaries/udelay.o + .debug_macro 0x00000000 0xdd binaries/udelay.o + .debug_macro 0x00000000 0x91 binaries/udelay.o + .debug_macro 0x00000000 0x8e binaries/udelay.o + .debug_macro 0x00000000 0x82 binaries/udelay.o + .debug_macro 0x00000000 0x2e binaries/udelay.o + .debug_macro 0x00000000 0x3a binaries/udelay.o + .debug_macro 0x00000000 0x4c binaries/udelay.o + .debug_macro 0x00000000 0x3a binaries/udelay.o + .debug_macro 0x00000000 0xa0 binaries/udelay.o + .debug_macro 0x00000000 0x34 binaries/udelay.o + .debug_macro 0x00000000 0x7c binaries/udelay.o + .debug_macro 0x00000000 0x1c binaries/udelay.o + .debug_macro 0x00000000 0xee binaries/udelay.o + .debug_macro 0x00000000 0x7c binaries/udelay.o + .debug_macro 0x00000000 0x20 binaries/udelay.o + .debug_macro 0x00000000 0x10 binaries/udelay.o + .debug_macro 0x00000000 0x1c binaries/udelay.o + .debug_macro 0x00000000 0x34 binaries/udelay.o + .debug_macro 0x00000000 0xeb binaries/udelay.o + .debug_macro 0x00000000 0x8e binaries/udelay.o + .debug_macro 0x00000000 0x1c binaries/udelay.o + .debug_macro 0x00000000 0x5e binaries/udelay.o + .group 0x00000000 0x8 binaries/unsleep.o + .group 0x00000000 0x8 binaries/unsleep.o + .group 0x00000000 0x8 binaries/unsleep.o + .group 0x00000000 0x8 binaries/unsleep.o + .group 0x00000000 0x8 binaries/unsleep.o + .group 0x00000000 0x8 binaries/unsleep.o + .group 0x00000000 0x8 binaries/unsleep.o + .group 0x00000000 0x8 binaries/unsleep.o + .group 0x00000000 0x8 binaries/unsleep.o + .group 0x00000000 0x8 binaries/unsleep.o + .group 0x00000000 0x8 binaries/unsleep.o + .group 0x00000000 0x8 binaries/unsleep.o + .group 0x00000000 0x8 binaries/unsleep.o + .group 0x00000000 0x8 binaries/unsleep.o + .group 0x00000000 0x8 binaries/unsleep.o + .group 0x00000000 0x8 binaries/unsleep.o + .group 0x00000000 0x8 binaries/unsleep.o + .group 0x00000000 0x8 binaries/unsleep.o + .group 0x00000000 0x8 binaries/unsleep.o + .group 0x00000000 0x8 binaries/unsleep.o + .group 0x00000000 0x8 binaries/unsleep.o + .group 0x00000000 0x8 binaries/unsleep.o + .group 0x00000000 0x8 binaries/unsleep.o + .group 0x00000000 0x8 binaries/unsleep.o + .group 0x00000000 0x8 binaries/unsleep.o + .group 0x00000000 0x8 binaries/unsleep.o + .group 0x00000000 0x8 binaries/unsleep.o + .group 0x00000000 0x8 binaries/unsleep.o + .group 0x00000000 0x8 binaries/unsleep.o + .group 0x00000000 0x8 binaries/unsleep.o + .group 0x00000000 0x8 binaries/unsleep.o + .group 0x00000000 0x8 binaries/unsleep.o + .group 0x00000000 0x8 binaries/unsleep.o + .group 0x00000000 0x8 binaries/unsleep.o + .group 0x00000000 0x8 binaries/unsleep.o + .group 0x00000000 0x8 binaries/unsleep.o + .group 0x00000000 0x8 binaries/unsleep.o + .debug_macro 0x00000000 0x838 binaries/unsleep.o + .debug_macro 0x00000000 0x58 binaries/unsleep.o + .debug_macro 0x00000000 0xb2 binaries/unsleep.o + .debug_macro 0x00000000 0x6a binaries/unsleep.o + .debug_macro 0x00000000 0x52 binaries/unsleep.o + .debug_macro 0x00000000 0x10 binaries/unsleep.o + .debug_macro 0x00000000 0x16 binaries/unsleep.o + .debug_macro 0x00000000 0x1c binaries/unsleep.o + .debug_macro 0x00000000 0x1c binaries/unsleep.o + .debug_macro 0x00000000 0x10 binaries/unsleep.o + .debug_macro 0x00000000 0x28 binaries/unsleep.o + .debug_macro 0x00000000 0x1c1 binaries/unsleep.o + .debug_macro 0x00000000 0xa0 binaries/unsleep.o + .debug_macro 0x00000000 0x10 binaries/unsleep.o + .debug_macro 0x00000000 0x22 binaries/unsleep.o + .debug_macro 0x00000000 0x46 binaries/unsleep.o + .debug_macro 0x00000000 0xfa binaries/unsleep.o + .debug_macro 0x00000000 0xdd binaries/unsleep.o + .debug_macro 0x00000000 0x91 binaries/unsleep.o + .debug_macro 0x00000000 0x8e binaries/unsleep.o + .debug_macro 0x00000000 0x82 binaries/unsleep.o + .debug_macro 0x00000000 0x2e binaries/unsleep.o + .debug_macro 0x00000000 0x3a binaries/unsleep.o + .debug_macro 0x00000000 0x4c binaries/unsleep.o + .debug_macro 0x00000000 0x3a binaries/unsleep.o + .debug_macro 0x00000000 0xa0 binaries/unsleep.o + .debug_macro 0x00000000 0x34 binaries/unsleep.o + .debug_macro 0x00000000 0x7c binaries/unsleep.o + .debug_macro 0x00000000 0x1c binaries/unsleep.o + .debug_macro 0x00000000 0xee binaries/unsleep.o + .debug_macro 0x00000000 0x7c binaries/unsleep.o + .debug_macro 0x00000000 0x20 binaries/unsleep.o + .debug_macro 0x00000000 0x10 binaries/unsleep.o + .debug_macro 0x00000000 0x1c binaries/unsleep.o + .debug_macro 0x00000000 0x34 binaries/unsleep.o + .debug_macro 0x00000000 0xeb binaries/unsleep.o + .debug_macro 0x00000000 0x8e binaries/unsleep.o + .group 0x00000000 0x8 binaries/userret.o + .group 0x00000000 0x8 binaries/userret.o + .group 0x00000000 0x8 binaries/userret.o + .group 0x00000000 0x8 binaries/userret.o + .group 0x00000000 0x8 binaries/userret.o + .group 0x00000000 0x8 binaries/userret.o + .group 0x00000000 0x8 binaries/userret.o + .group 0x00000000 0x8 binaries/userret.o + .group 0x00000000 0x8 binaries/userret.o + .group 0x00000000 0x8 binaries/userret.o + .group 0x00000000 0x8 binaries/userret.o + .group 0x00000000 0x8 binaries/userret.o + .group 0x00000000 0x8 binaries/userret.o + .group 0x00000000 0x8 binaries/userret.o + .group 0x00000000 0x8 binaries/userret.o + .group 0x00000000 0x8 binaries/userret.o + .group 0x00000000 0x8 binaries/userret.o + .group 0x00000000 0x8 binaries/userret.o + .group 0x00000000 0x8 binaries/userret.o + .group 0x00000000 0x8 binaries/userret.o + .group 0x00000000 0x8 binaries/userret.o + .group 0x00000000 0x8 binaries/userret.o + .group 0x00000000 0x8 binaries/userret.o + .group 0x00000000 0x8 binaries/userret.o + .group 0x00000000 0x8 binaries/userret.o + .group 0x00000000 0x8 binaries/userret.o + .group 0x00000000 0x8 binaries/userret.o + .group 0x00000000 0x8 binaries/userret.o + .group 0x00000000 0x8 binaries/userret.o + .group 0x00000000 0x8 binaries/userret.o + .group 0x00000000 0x8 binaries/userret.o + .group 0x00000000 0x8 binaries/userret.o + .group 0x00000000 0x8 binaries/userret.o + .group 0x00000000 0x8 binaries/userret.o + .group 0x00000000 0x8 binaries/userret.o + .group 0x00000000 0x8 binaries/userret.o + .group 0x00000000 0x8 binaries/userret.o + .debug_macro 0x00000000 0x838 binaries/userret.o + .debug_macro 0x00000000 0x58 binaries/userret.o + .debug_macro 0x00000000 0xb2 binaries/userret.o + .debug_macro 0x00000000 0x6a binaries/userret.o + .debug_macro 0x00000000 0x52 binaries/userret.o + .debug_macro 0x00000000 0x10 binaries/userret.o + .debug_macro 0x00000000 0x16 binaries/userret.o + .debug_macro 0x00000000 0x1c binaries/userret.o + .debug_macro 0x00000000 0x1c binaries/userret.o + .debug_macro 0x00000000 0x10 binaries/userret.o + .debug_macro 0x00000000 0x28 binaries/userret.o + .debug_macro 0x00000000 0x1c1 binaries/userret.o + .debug_macro 0x00000000 0xa0 binaries/userret.o + .debug_macro 0x00000000 0x10 binaries/userret.o + .debug_macro 0x00000000 0x22 binaries/userret.o + .debug_macro 0x00000000 0x46 binaries/userret.o + .debug_macro 0x00000000 0xfa binaries/userret.o + .debug_macro 0x00000000 0xdd binaries/userret.o + .debug_macro 0x00000000 0x91 binaries/userret.o + .debug_macro 0x00000000 0x8e binaries/userret.o + .debug_macro 0x00000000 0x82 binaries/userret.o + .debug_macro 0x00000000 0x2e binaries/userret.o + .debug_macro 0x00000000 0x3a binaries/userret.o + .debug_macro 0x00000000 0x4c binaries/userret.o + .debug_macro 0x00000000 0x3a binaries/userret.o + .debug_macro 0x00000000 0xa0 binaries/userret.o + .debug_macro 0x00000000 0x34 binaries/userret.o + .debug_macro 0x00000000 0x7c binaries/userret.o + .debug_macro 0x00000000 0x1c binaries/userret.o + .debug_macro 0x00000000 0xee binaries/userret.o + .debug_macro 0x00000000 0x7c binaries/userret.o + .debug_macro 0x00000000 0x20 binaries/userret.o + .debug_macro 0x00000000 0x10 binaries/userret.o + .debug_macro 0x00000000 0x1c binaries/userret.o + .debug_macro 0x00000000 0x34 binaries/userret.o + .debug_macro 0x00000000 0xeb binaries/userret.o + .debug_macro 0x00000000 0x8e binaries/userret.o + .group 0x00000000 0x8 binaries/wait.o + .group 0x00000000 0x8 binaries/wait.o + .group 0x00000000 0x8 binaries/wait.o + .group 0x00000000 0x8 binaries/wait.o + .group 0x00000000 0x8 binaries/wait.o + .group 0x00000000 0x8 binaries/wait.o + .group 0x00000000 0x8 binaries/wait.o + .group 0x00000000 0x8 binaries/wait.o + .group 0x00000000 0x8 binaries/wait.o + .group 0x00000000 0x8 binaries/wait.o + .group 0x00000000 0x8 binaries/wait.o + .group 0x00000000 0x8 binaries/wait.o + .group 0x00000000 0x8 binaries/wait.o + .group 0x00000000 0x8 binaries/wait.o + .group 0x00000000 0x8 binaries/wait.o + .group 0x00000000 0x8 binaries/wait.o + .group 0x00000000 0x8 binaries/wait.o + .group 0x00000000 0x8 binaries/wait.o + .group 0x00000000 0x8 binaries/wait.o + .group 0x00000000 0x8 binaries/wait.o + .group 0x00000000 0x8 binaries/wait.o + .group 0x00000000 0x8 binaries/wait.o + .group 0x00000000 0x8 binaries/wait.o + .group 0x00000000 0x8 binaries/wait.o + .group 0x00000000 0x8 binaries/wait.o + .group 0x00000000 0x8 binaries/wait.o + .group 0x00000000 0x8 binaries/wait.o + .group 0x00000000 0x8 binaries/wait.o + .group 0x00000000 0x8 binaries/wait.o + .group 0x00000000 0x8 binaries/wait.o + .group 0x00000000 0x8 binaries/wait.o + .group 0x00000000 0x8 binaries/wait.o + .group 0x00000000 0x8 binaries/wait.o + .group 0x00000000 0x8 binaries/wait.o + .group 0x00000000 0x8 binaries/wait.o + .group 0x00000000 0x8 binaries/wait.o + .group 0x00000000 0x8 binaries/wait.o + .debug_macro 0x00000000 0x838 binaries/wait.o + .debug_macro 0x00000000 0x58 binaries/wait.o + .debug_macro 0x00000000 0xb2 binaries/wait.o + .debug_macro 0x00000000 0x6a binaries/wait.o + .debug_macro 0x00000000 0x52 binaries/wait.o + .debug_macro 0x00000000 0x10 binaries/wait.o + .debug_macro 0x00000000 0x16 binaries/wait.o + .debug_macro 0x00000000 0x1c binaries/wait.o + .debug_macro 0x00000000 0x1c binaries/wait.o + .debug_macro 0x00000000 0x10 binaries/wait.o + .debug_macro 0x00000000 0x28 binaries/wait.o + .debug_macro 0x00000000 0x1c1 binaries/wait.o + .debug_macro 0x00000000 0xa0 binaries/wait.o + .debug_macro 0x00000000 0x10 binaries/wait.o + .debug_macro 0x00000000 0x22 binaries/wait.o + .debug_macro 0x00000000 0x46 binaries/wait.o + .debug_macro 0x00000000 0xfa binaries/wait.o + .debug_macro 0x00000000 0xdd binaries/wait.o + .debug_macro 0x00000000 0x91 binaries/wait.o + .debug_macro 0x00000000 0x8e binaries/wait.o + .debug_macro 0x00000000 0x82 binaries/wait.o + .debug_macro 0x00000000 0x2e binaries/wait.o + .debug_macro 0x00000000 0x3a binaries/wait.o + .debug_macro 0x00000000 0x4c binaries/wait.o + .debug_macro 0x00000000 0x3a binaries/wait.o + .debug_macro 0x00000000 0xa0 binaries/wait.o + .debug_macro 0x00000000 0x34 binaries/wait.o + .debug_macro 0x00000000 0x7c binaries/wait.o + .debug_macro 0x00000000 0x1c binaries/wait.o + .debug_macro 0x00000000 0xee binaries/wait.o + .debug_macro 0x00000000 0x7c binaries/wait.o + .debug_macro 0x00000000 0x20 binaries/wait.o + .debug_macro 0x00000000 0x10 binaries/wait.o + .debug_macro 0x00000000 0x1c binaries/wait.o + .debug_macro 0x00000000 0x34 binaries/wait.o + .debug_macro 0x00000000 0xeb binaries/wait.o + .debug_macro 0x00000000 0x8e binaries/wait.o + .group 0x00000000 0x8 binaries/wakeup.o + .group 0x00000000 0x8 binaries/wakeup.o + .group 0x00000000 0x8 binaries/wakeup.o + .group 0x00000000 0x8 binaries/wakeup.o + .group 0x00000000 0x8 binaries/wakeup.o + .group 0x00000000 0x8 binaries/wakeup.o + .group 0x00000000 0x8 binaries/wakeup.o + .group 0x00000000 0x8 binaries/wakeup.o + .group 0x00000000 0x8 binaries/wakeup.o + .group 0x00000000 0x8 binaries/wakeup.o + .group 0x00000000 0x8 binaries/wakeup.o + .group 0x00000000 0x8 binaries/wakeup.o + .group 0x00000000 0x8 binaries/wakeup.o + .group 0x00000000 0x8 binaries/wakeup.o + .group 0x00000000 0x8 binaries/wakeup.o + .group 0x00000000 0x8 binaries/wakeup.o + .group 0x00000000 0x8 binaries/wakeup.o + .group 0x00000000 0x8 binaries/wakeup.o + .group 0x00000000 0x8 binaries/wakeup.o + .group 0x00000000 0x8 binaries/wakeup.o + .group 0x00000000 0x8 binaries/wakeup.o + .group 0x00000000 0x8 binaries/wakeup.o + .group 0x00000000 0x8 binaries/wakeup.o + .group 0x00000000 0x8 binaries/wakeup.o + .group 0x00000000 0x8 binaries/wakeup.o + .group 0x00000000 0x8 binaries/wakeup.o + .group 0x00000000 0x8 binaries/wakeup.o + .group 0x00000000 0x8 binaries/wakeup.o + .group 0x00000000 0x8 binaries/wakeup.o + .group 0x00000000 0x8 binaries/wakeup.o + .group 0x00000000 0x8 binaries/wakeup.o + .group 0x00000000 0x8 binaries/wakeup.o + .group 0x00000000 0x8 binaries/wakeup.o + .group 0x00000000 0x8 binaries/wakeup.o + .group 0x00000000 0x8 binaries/wakeup.o + .group 0x00000000 0x8 binaries/wakeup.o + .group 0x00000000 0x8 binaries/wakeup.o + .debug_macro 0x00000000 0x838 binaries/wakeup.o + .debug_macro 0x00000000 0x58 binaries/wakeup.o + .debug_macro 0x00000000 0xb2 binaries/wakeup.o + .debug_macro 0x00000000 0x6a binaries/wakeup.o + .debug_macro 0x00000000 0x52 binaries/wakeup.o + .debug_macro 0x00000000 0x10 binaries/wakeup.o + .debug_macro 0x00000000 0x16 binaries/wakeup.o + .debug_macro 0x00000000 0x1c binaries/wakeup.o + .debug_macro 0x00000000 0x1c binaries/wakeup.o + .debug_macro 0x00000000 0x10 binaries/wakeup.o + .debug_macro 0x00000000 0x28 binaries/wakeup.o + .debug_macro 0x00000000 0x1c1 binaries/wakeup.o + .debug_macro 0x00000000 0xa0 binaries/wakeup.o + .debug_macro 0x00000000 0x10 binaries/wakeup.o + .debug_macro 0x00000000 0x22 binaries/wakeup.o + .debug_macro 0x00000000 0x46 binaries/wakeup.o + .debug_macro 0x00000000 0xfa binaries/wakeup.o + .debug_macro 0x00000000 0xdd binaries/wakeup.o + .debug_macro 0x00000000 0x91 binaries/wakeup.o + .debug_macro 0x00000000 0x8e binaries/wakeup.o + .debug_macro 0x00000000 0x82 binaries/wakeup.o + .debug_macro 0x00000000 0x2e binaries/wakeup.o + .debug_macro 0x00000000 0x3a binaries/wakeup.o + .debug_macro 0x00000000 0x4c binaries/wakeup.o + .debug_macro 0x00000000 0x3a binaries/wakeup.o + .debug_macro 0x00000000 0xa0 binaries/wakeup.o + .debug_macro 0x00000000 0x34 binaries/wakeup.o + .debug_macro 0x00000000 0x7c binaries/wakeup.o + .debug_macro 0x00000000 0x1c binaries/wakeup.o + .debug_macro 0x00000000 0xee binaries/wakeup.o + .debug_macro 0x00000000 0x7c binaries/wakeup.o + .debug_macro 0x00000000 0x20 binaries/wakeup.o + .debug_macro 0x00000000 0x10 binaries/wakeup.o + .debug_macro 0x00000000 0x1c binaries/wakeup.o + .debug_macro 0x00000000 0x34 binaries/wakeup.o + .debug_macro 0x00000000 0xeb binaries/wakeup.o + .debug_macro 0x00000000 0x8e binaries/wakeup.o + .group 0x00000000 0x8 binaries/write.o + .group 0x00000000 0x8 binaries/write.o + .group 0x00000000 0x8 binaries/write.o + .group 0x00000000 0x8 binaries/write.o + .group 0x00000000 0x8 binaries/write.o + .group 0x00000000 0x8 binaries/write.o + .group 0x00000000 0x8 binaries/write.o + .group 0x00000000 0x8 binaries/write.o + .group 0x00000000 0x8 binaries/write.o + .group 0x00000000 0x8 binaries/write.o + .group 0x00000000 0x8 binaries/write.o + .group 0x00000000 0x8 binaries/write.o + .group 0x00000000 0x8 binaries/write.o + .group 0x00000000 0x8 binaries/write.o + .group 0x00000000 0x8 binaries/write.o + .group 0x00000000 0x8 binaries/write.o + .group 0x00000000 0x8 binaries/write.o + .group 0x00000000 0x8 binaries/write.o + .group 0x00000000 0x8 binaries/write.o + .group 0x00000000 0x8 binaries/write.o + .group 0x00000000 0x8 binaries/write.o + .group 0x00000000 0x8 binaries/write.o + .group 0x00000000 0x8 binaries/write.o + .group 0x00000000 0x8 binaries/write.o + .group 0x00000000 0x8 binaries/write.o + .group 0x00000000 0x8 binaries/write.o + .group 0x00000000 0x8 binaries/write.o + .group 0x00000000 0x8 binaries/write.o + .group 0x00000000 0x8 binaries/write.o + .group 0x00000000 0x8 binaries/write.o + .group 0x00000000 0x8 binaries/write.o + .group 0x00000000 0x8 binaries/write.o + .group 0x00000000 0x8 binaries/write.o + .group 0x00000000 0x8 binaries/write.o + .group 0x00000000 0x8 binaries/write.o + .group 0x00000000 0x8 binaries/write.o + .group 0x00000000 0x8 binaries/write.o + .debug_macro 0x00000000 0x838 binaries/write.o + .debug_macro 0x00000000 0x58 binaries/write.o + .debug_macro 0x00000000 0xb2 binaries/write.o + .debug_macro 0x00000000 0x6a binaries/write.o + .debug_macro 0x00000000 0x52 binaries/write.o + .debug_macro 0x00000000 0x10 binaries/write.o + .debug_macro 0x00000000 0x16 binaries/write.o + .debug_macro 0x00000000 0x1c binaries/write.o + .debug_macro 0x00000000 0x1c binaries/write.o + .debug_macro 0x00000000 0x10 binaries/write.o + .debug_macro 0x00000000 0x28 binaries/write.o + .debug_macro 0x00000000 0x1c1 binaries/write.o + .debug_macro 0x00000000 0xa0 binaries/write.o + .debug_macro 0x00000000 0x10 binaries/write.o + .debug_macro 0x00000000 0x22 binaries/write.o + .debug_macro 0x00000000 0x46 binaries/write.o + .debug_macro 0x00000000 0xfa binaries/write.o + .debug_macro 0x00000000 0xdd binaries/write.o + .debug_macro 0x00000000 0x91 binaries/write.o + .debug_macro 0x00000000 0x8e binaries/write.o + .debug_macro 0x00000000 0x82 binaries/write.o + .debug_macro 0x00000000 0x2e binaries/write.o + .debug_macro 0x00000000 0x3a binaries/write.o + .debug_macro 0x00000000 0x4c binaries/write.o + .debug_macro 0x00000000 0x3a binaries/write.o + .debug_macro 0x00000000 0xa0 binaries/write.o + .debug_macro 0x00000000 0x34 binaries/write.o + .debug_macro 0x00000000 0x7c binaries/write.o + .debug_macro 0x00000000 0x1c binaries/write.o + .debug_macro 0x00000000 0xee binaries/write.o + .debug_macro 0x00000000 0x7c binaries/write.o + .debug_macro 0x00000000 0x20 binaries/write.o + .debug_macro 0x00000000 0x10 binaries/write.o + .debug_macro 0x00000000 0x1c binaries/write.o + .debug_macro 0x00000000 0x34 binaries/write.o + .debug_macro 0x00000000 0xeb binaries/write.o + .debug_macro 0x00000000 0x8e binaries/write.o + .group 0x00000000 0x8 binaries/xdone.o + .group 0x00000000 0x8 binaries/xdone.o + .group 0x00000000 0x8 binaries/xdone.o + .group 0x00000000 0x8 binaries/xdone.o + .group 0x00000000 0x8 binaries/xdone.o + .group 0x00000000 0x8 binaries/xdone.o + .group 0x00000000 0x8 binaries/xdone.o + .group 0x00000000 0x8 binaries/xdone.o + .group 0x00000000 0x8 binaries/xdone.o + .group 0x00000000 0x8 binaries/xdone.o + .group 0x00000000 0x8 binaries/xdone.o + .group 0x00000000 0x8 binaries/xdone.o + .group 0x00000000 0x8 binaries/xdone.o + .group 0x00000000 0x8 binaries/xdone.o + .group 0x00000000 0x8 binaries/xdone.o + .group 0x00000000 0x8 binaries/xdone.o + .group 0x00000000 0x8 binaries/xdone.o + .group 0x00000000 0x8 binaries/xdone.o + .group 0x00000000 0x8 binaries/xdone.o + .group 0x00000000 0x8 binaries/xdone.o + .group 0x00000000 0x8 binaries/xdone.o + .group 0x00000000 0x8 binaries/xdone.o + .group 0x00000000 0x8 binaries/xdone.o + .group 0x00000000 0x8 binaries/xdone.o + .group 0x00000000 0x8 binaries/xdone.o + .group 0x00000000 0x8 binaries/xdone.o + .group 0x00000000 0x8 binaries/xdone.o + .group 0x00000000 0x8 binaries/xdone.o + .group 0x00000000 0x8 binaries/xdone.o + .group 0x00000000 0x8 binaries/xdone.o + .group 0x00000000 0x8 binaries/xdone.o + .group 0x00000000 0x8 binaries/xdone.o + .group 0x00000000 0x8 binaries/xdone.o + .group 0x00000000 0x8 binaries/xdone.o + .group 0x00000000 0x8 binaries/xdone.o + .group 0x00000000 0x8 binaries/xdone.o + .group 0x00000000 0x8 binaries/xdone.o + .debug_macro 0x00000000 0x838 binaries/xdone.o + .debug_macro 0x00000000 0x58 binaries/xdone.o + .debug_macro 0x00000000 0xb2 binaries/xdone.o + .debug_macro 0x00000000 0x6a binaries/xdone.o + .debug_macro 0x00000000 0x52 binaries/xdone.o + .debug_macro 0x00000000 0x10 binaries/xdone.o + .debug_macro 0x00000000 0x16 binaries/xdone.o + .debug_macro 0x00000000 0x1c binaries/xdone.o + .debug_macro 0x00000000 0x1c binaries/xdone.o + .debug_macro 0x00000000 0x10 binaries/xdone.o + .debug_macro 0x00000000 0x28 binaries/xdone.o + .debug_macro 0x00000000 0x1c1 binaries/xdone.o + .debug_macro 0x00000000 0xa0 binaries/xdone.o + .debug_macro 0x00000000 0x10 binaries/xdone.o + .debug_macro 0x00000000 0x22 binaries/xdone.o + .debug_macro 0x00000000 0x46 binaries/xdone.o + .debug_macro 0x00000000 0xfa binaries/xdone.o + .debug_macro 0x00000000 0xdd binaries/xdone.o + .debug_macro 0x00000000 0x91 binaries/xdone.o + .debug_macro 0x00000000 0x8e binaries/xdone.o + .debug_macro 0x00000000 0x82 binaries/xdone.o + .debug_macro 0x00000000 0x2e binaries/xdone.o + .debug_macro 0x00000000 0x3a binaries/xdone.o + .debug_macro 0x00000000 0x4c binaries/xdone.o + .debug_macro 0x00000000 0x3a binaries/xdone.o + .debug_macro 0x00000000 0xa0 binaries/xdone.o + .debug_macro 0x00000000 0x34 binaries/xdone.o + .debug_macro 0x00000000 0x7c binaries/xdone.o + .debug_macro 0x00000000 0x1c binaries/xdone.o + .debug_macro 0x00000000 0xee binaries/xdone.o + .debug_macro 0x00000000 0x7c binaries/xdone.o + .debug_macro 0x00000000 0x20 binaries/xdone.o + .debug_macro 0x00000000 0x10 binaries/xdone.o + .debug_macro 0x00000000 0x1c binaries/xdone.o + .debug_macro 0x00000000 0x34 binaries/xdone.o + .debug_macro 0x00000000 0xeb binaries/xdone.o + .debug_macro 0x00000000 0x8e binaries/xdone.o + .group 0x00000000 0x8 binaries/yield.o + .group 0x00000000 0x8 binaries/yield.o + .group 0x00000000 0x8 binaries/yield.o + .group 0x00000000 0x8 binaries/yield.o + .group 0x00000000 0x8 binaries/yield.o + .group 0x00000000 0x8 binaries/yield.o + .group 0x00000000 0x8 binaries/yield.o + .group 0x00000000 0x8 binaries/yield.o + .group 0x00000000 0x8 binaries/yield.o + .group 0x00000000 0x8 binaries/yield.o + .group 0x00000000 0x8 binaries/yield.o + .group 0x00000000 0x8 binaries/yield.o + .group 0x00000000 0x8 binaries/yield.o + .group 0x00000000 0x8 binaries/yield.o + .group 0x00000000 0x8 binaries/yield.o + .group 0x00000000 0x8 binaries/yield.o + .group 0x00000000 0x8 binaries/yield.o + .group 0x00000000 0x8 binaries/yield.o + .group 0x00000000 0x8 binaries/yield.o + .group 0x00000000 0x8 binaries/yield.o + .group 0x00000000 0x8 binaries/yield.o + .group 0x00000000 0x8 binaries/yield.o + .group 0x00000000 0x8 binaries/yield.o + .group 0x00000000 0x8 binaries/yield.o + .group 0x00000000 0x8 binaries/yield.o + .group 0x00000000 0x8 binaries/yield.o + .group 0x00000000 0x8 binaries/yield.o + .group 0x00000000 0x8 binaries/yield.o + .group 0x00000000 0x8 binaries/yield.o + .group 0x00000000 0x8 binaries/yield.o + .group 0x00000000 0x8 binaries/yield.o + .group 0x00000000 0x8 binaries/yield.o + .group 0x00000000 0x8 binaries/yield.o + .group 0x00000000 0x8 binaries/yield.o + .group 0x00000000 0x8 binaries/yield.o + .group 0x00000000 0x8 binaries/yield.o + .group 0x00000000 0x8 binaries/yield.o + .debug_macro 0x00000000 0x838 binaries/yield.o + .debug_macro 0x00000000 0x58 binaries/yield.o + .debug_macro 0x00000000 0xb2 binaries/yield.o + .debug_macro 0x00000000 0x6a binaries/yield.o + .debug_macro 0x00000000 0x52 binaries/yield.o + .debug_macro 0x00000000 0x10 binaries/yield.o + .debug_macro 0x00000000 0x16 binaries/yield.o + .debug_macro 0x00000000 0x1c binaries/yield.o + .debug_macro 0x00000000 0x1c binaries/yield.o + .debug_macro 0x00000000 0x10 binaries/yield.o + .debug_macro 0x00000000 0x28 binaries/yield.o + .debug_macro 0x00000000 0x1c1 binaries/yield.o + .debug_macro 0x00000000 0xa0 binaries/yield.o + .debug_macro 0x00000000 0x10 binaries/yield.o + .debug_macro 0x00000000 0x22 binaries/yield.o + .debug_macro 0x00000000 0x46 binaries/yield.o + .debug_macro 0x00000000 0xfa binaries/yield.o + .debug_macro 0x00000000 0xdd binaries/yield.o + .debug_macro 0x00000000 0x91 binaries/yield.o + .debug_macro 0x00000000 0x8e binaries/yield.o + .debug_macro 0x00000000 0x82 binaries/yield.o + .debug_macro 0x00000000 0x2e binaries/yield.o + .debug_macro 0x00000000 0x3a binaries/yield.o + .debug_macro 0x00000000 0x4c binaries/yield.o + .debug_macro 0x00000000 0x3a binaries/yield.o + .debug_macro 0x00000000 0xa0 binaries/yield.o + .debug_macro 0x00000000 0x34 binaries/yield.o + .debug_macro 0x00000000 0x7c binaries/yield.o + .debug_macro 0x00000000 0x1c binaries/yield.o + .debug_macro 0x00000000 0xee binaries/yield.o + .debug_macro 0x00000000 0x7c binaries/yield.o + .debug_macro 0x00000000 0x20 binaries/yield.o + .debug_macro 0x00000000 0x10 binaries/yield.o + .debug_macro 0x00000000 0x1c binaries/yield.o + .debug_macro 0x00000000 0x34 binaries/yield.o + .debug_macro 0x00000000 0xeb binaries/yield.o + .debug_macro 0x00000000 0x8e binaries/yield.o + .group 0x00000000 0x8 binaries/abs.o + .debug_macro 0x00000000 0x838 binaries/abs.o + .group 0x00000000 0x8 binaries/atoi.o + .debug_macro 0x00000000 0x838 binaries/atoi.o + .group 0x00000000 0x8 binaries/atol.o + .debug_macro 0x00000000 0x838 binaries/atol.o + .group 0x00000000 0x8 binaries/bzero.o + .debug_macro 0x00000000 0x838 binaries/bzero.o + .group 0x00000000 0x8 binaries/ctype_.o + .group 0x00000000 0x8 binaries/ctype_.o + .debug_macro 0x00000000 0x838 binaries/ctype_.o + .group 0x00000000 0x8 binaries/doprnt.o + .group 0x00000000 0x8 binaries/doprnt.o + .debug_macro 0x00000000 0x838 binaries/doprnt.o + .debug_macro 0x00000000 0x1c binaries/doprnt.o + .group 0x00000000 0x8 binaries/doscan.o + .group 0x00000000 0x8 binaries/doscan.o + .debug_macro 0x00000000 0x838 binaries/doscan.o + .debug_macro 0x00000000 0x88 binaries/doscan.o + .group 0x00000000 0x8 binaries/fdoprnt.o + .group 0x00000000 0x8 binaries/fdoprnt.o + .debug_macro 0x00000000 0x838 binaries/fdoprnt.o + .debug_macro 0x00000000 0x1c binaries/fdoprnt.o + .group 0x00000000 0x8 binaries/fgetc.o + .debug_macro 0x00000000 0x838 binaries/fgetc.o + .group 0x00000000 0x8 binaries/fgets.o + .debug_macro 0x00000000 0x838 binaries/fgets.o + .group 0x00000000 0x8 binaries/fprintf.o + .group 0x00000000 0x8 binaries/fprintf.o + .group 0x00000000 0x8 binaries/fprintf.o + .group 0x00000000 0x8 binaries/fprintf.o + .group 0x00000000 0x8 binaries/fprintf.o + .group 0x00000000 0x8 binaries/fprintf.o + .group 0x00000000 0x8 binaries/fprintf.o + .group 0x00000000 0x8 binaries/fprintf.o + .group 0x00000000 0x8 binaries/fprintf.o + .group 0x00000000 0x8 binaries/fprintf.o + .group 0x00000000 0x8 binaries/fprintf.o + .group 0x00000000 0x8 binaries/fprintf.o + .group 0x00000000 0x8 binaries/fprintf.o + .group 0x00000000 0x8 binaries/fprintf.o + .group 0x00000000 0x8 binaries/fprintf.o + .group 0x00000000 0x8 binaries/fprintf.o + .group 0x00000000 0x8 binaries/fprintf.o + .group 0x00000000 0x8 binaries/fprintf.o + .group 0x00000000 0x8 binaries/fprintf.o + .group 0x00000000 0x8 binaries/fprintf.o + .group 0x00000000 0x8 binaries/fprintf.o + .group 0x00000000 0x8 binaries/fprintf.o + .group 0x00000000 0x8 binaries/fprintf.o + .group 0x00000000 0x8 binaries/fprintf.o + .group 0x00000000 0x8 binaries/fprintf.o + .group 0x00000000 0x8 binaries/fprintf.o + .group 0x00000000 0x8 binaries/fprintf.o + .group 0x00000000 0x8 binaries/fprintf.o + .group 0x00000000 0x8 binaries/fprintf.o + .group 0x00000000 0x8 binaries/fprintf.o + .group 0x00000000 0x8 binaries/fprintf.o + .group 0x00000000 0x8 binaries/fprintf.o + .group 0x00000000 0x8 binaries/fprintf.o + .group 0x00000000 0x8 binaries/fprintf.o + .group 0x00000000 0x8 binaries/fprintf.o + .group 0x00000000 0x8 binaries/fprintf.o + .group 0x00000000 0x8 binaries/fprintf.o + .group 0x00000000 0x8 binaries/fprintf.o + .debug_macro 0x00000000 0x838 binaries/fprintf.o + .debug_macro 0x00000000 0x58 binaries/fprintf.o + .debug_macro 0x00000000 0xb2 binaries/fprintf.o + .debug_macro 0x00000000 0x6a binaries/fprintf.o + .debug_macro 0x00000000 0x52 binaries/fprintf.o + .debug_macro 0x00000000 0x10 binaries/fprintf.o + .debug_macro 0x00000000 0x16 binaries/fprintf.o + .debug_macro 0x00000000 0x1c binaries/fprintf.o + .debug_macro 0x00000000 0x1c binaries/fprintf.o + .debug_macro 0x00000000 0x10 binaries/fprintf.o + .debug_macro 0x00000000 0x28 binaries/fprintf.o + .debug_macro 0x00000000 0x1c1 binaries/fprintf.o + .debug_macro 0x00000000 0xa0 binaries/fprintf.o + .debug_macro 0x00000000 0x10 binaries/fprintf.o + .debug_macro 0x00000000 0x22 binaries/fprintf.o + .debug_macro 0x00000000 0x46 binaries/fprintf.o + .debug_macro 0x00000000 0xfa binaries/fprintf.o + .debug_macro 0x00000000 0xdd binaries/fprintf.o + .debug_macro 0x00000000 0x91 binaries/fprintf.o + .debug_macro 0x00000000 0x8e binaries/fprintf.o + .debug_macro 0x00000000 0x82 binaries/fprintf.o + .debug_macro 0x00000000 0x2e binaries/fprintf.o + .debug_macro 0x00000000 0x3a binaries/fprintf.o + .debug_macro 0x00000000 0x4c binaries/fprintf.o + .debug_macro 0x00000000 0x3a binaries/fprintf.o + .debug_macro 0x00000000 0xa0 binaries/fprintf.o + .debug_macro 0x00000000 0x34 binaries/fprintf.o + .debug_macro 0x00000000 0x7c binaries/fprintf.o + .debug_macro 0x00000000 0x1c binaries/fprintf.o + .debug_macro 0x00000000 0xee binaries/fprintf.o + .debug_macro 0x00000000 0x7c binaries/fprintf.o + .debug_macro 0x00000000 0x20 binaries/fprintf.o + .debug_macro 0x00000000 0x10 binaries/fprintf.o + .debug_macro 0x00000000 0x1c binaries/fprintf.o + .debug_macro 0x00000000 0x34 binaries/fprintf.o + .debug_macro 0x00000000 0xeb binaries/fprintf.o + .debug_macro 0x00000000 0x8e binaries/fprintf.o + .debug_macro 0x00000000 0x1c binaries/fprintf.o + .group 0x00000000 0x8 binaries/fputc.o + .debug_macro 0x00000000 0x838 binaries/fputc.o + .group 0x00000000 0x8 binaries/fputs.o + .debug_macro 0x00000000 0x838 binaries/fputs.o + .group 0x00000000 0x8 binaries/fscanf.o + .debug_macro 0x00000000 0x838 binaries/fscanf.o + .group 0x00000000 0x8 binaries/getchar.o + .group 0x00000000 0x8 binaries/getchar.o + .group 0x00000000 0x8 binaries/getchar.o + .group 0x00000000 0x8 binaries/getchar.o + .group 0x00000000 0x8 binaries/getchar.o + .group 0x00000000 0x8 binaries/getchar.o + .group 0x00000000 0x8 binaries/getchar.o + .group 0x00000000 0x8 binaries/getchar.o + .group 0x00000000 0x8 binaries/getchar.o + .group 0x00000000 0x8 binaries/getchar.o + .group 0x00000000 0x8 binaries/getchar.o + .group 0x00000000 0x8 binaries/getchar.o + .group 0x00000000 0x8 binaries/getchar.o + .group 0x00000000 0x8 binaries/getchar.o + .group 0x00000000 0x8 binaries/getchar.o + .group 0x00000000 0x8 binaries/getchar.o + .group 0x00000000 0x8 binaries/getchar.o + .group 0x00000000 0x8 binaries/getchar.o + .group 0x00000000 0x8 binaries/getchar.o + .group 0x00000000 0x8 binaries/getchar.o + .group 0x00000000 0x8 binaries/getchar.o + .group 0x00000000 0x8 binaries/getchar.o + .group 0x00000000 0x8 binaries/getchar.o + .group 0x00000000 0x8 binaries/getchar.o + .group 0x00000000 0x8 binaries/getchar.o + .group 0x00000000 0x8 binaries/getchar.o + .group 0x00000000 0x8 binaries/getchar.o + .group 0x00000000 0x8 binaries/getchar.o + .group 0x00000000 0x8 binaries/getchar.o + .group 0x00000000 0x8 binaries/getchar.o + .group 0x00000000 0x8 binaries/getchar.o + .group 0x00000000 0x8 binaries/getchar.o + .group 0x00000000 0x8 binaries/getchar.o + .group 0x00000000 0x8 binaries/getchar.o + .group 0x00000000 0x8 binaries/getchar.o + .group 0x00000000 0x8 binaries/getchar.o + .group 0x00000000 0x8 binaries/getchar.o + .debug_macro 0x00000000 0x838 binaries/getchar.o + .debug_macro 0x00000000 0x58 binaries/getchar.o + .debug_macro 0x00000000 0xb2 binaries/getchar.o + .debug_macro 0x00000000 0x6a binaries/getchar.o + .debug_macro 0x00000000 0x52 binaries/getchar.o + .debug_macro 0x00000000 0x10 binaries/getchar.o + .debug_macro 0x00000000 0x16 binaries/getchar.o + .debug_macro 0x00000000 0x1c binaries/getchar.o + .debug_macro 0x00000000 0x1c binaries/getchar.o + .debug_macro 0x00000000 0x10 binaries/getchar.o + .debug_macro 0x00000000 0x28 binaries/getchar.o + .debug_macro 0x00000000 0x1c1 binaries/getchar.o + .debug_macro 0x00000000 0xa0 binaries/getchar.o + .debug_macro 0x00000000 0x10 binaries/getchar.o + .debug_macro 0x00000000 0x22 binaries/getchar.o + .debug_macro 0x00000000 0x46 binaries/getchar.o + .debug_macro 0x00000000 0xfa binaries/getchar.o + .debug_macro 0x00000000 0xdd binaries/getchar.o + .debug_macro 0x00000000 0x91 binaries/getchar.o + .debug_macro 0x00000000 0x8e binaries/getchar.o + .debug_macro 0x00000000 0x82 binaries/getchar.o + .debug_macro 0x00000000 0x2e binaries/getchar.o + .debug_macro 0x00000000 0x3a binaries/getchar.o + .debug_macro 0x00000000 0x4c binaries/getchar.o + .debug_macro 0x00000000 0x3a binaries/getchar.o + .debug_macro 0x00000000 0xa0 binaries/getchar.o + .debug_macro 0x00000000 0x34 binaries/getchar.o + .debug_macro 0x00000000 0x7c binaries/getchar.o + .debug_macro 0x00000000 0x1c binaries/getchar.o + .debug_macro 0x00000000 0xee binaries/getchar.o + .debug_macro 0x00000000 0x7c binaries/getchar.o + .debug_macro 0x00000000 0x20 binaries/getchar.o + .debug_macro 0x00000000 0x10 binaries/getchar.o + .debug_macro 0x00000000 0x1c binaries/getchar.o + .debug_macro 0x00000000 0x34 binaries/getchar.o + .debug_macro 0x00000000 0xeb binaries/getchar.o + .debug_macro 0x00000000 0x8e binaries/getchar.o + .group 0x00000000 0x8 binaries/labs.o + .debug_macro 0x00000000 0x838 binaries/labs.o + .group 0x00000000 0x8 binaries/memchr.o + .debug_macro 0x00000000 0x838 binaries/memchr.o + .group 0x00000000 0x8 binaries/memcmp.o + .debug_macro 0x00000000 0x838 binaries/memcmp.o + .group 0x00000000 0x8 binaries/memcpy.o + .debug_macro 0x00000000 0x838 binaries/memcpy.o + .group 0x00000000 0x8 binaries/memset.o + .debug_macro 0x00000000 0x838 binaries/memset.o + .group 0x00000000 0x8 binaries/printf.o + .group 0x00000000 0x8 binaries/printf.o + .group 0x00000000 0x8 binaries/printf.o + .group 0x00000000 0x8 binaries/printf.o + .group 0x00000000 0x8 binaries/printf.o + .group 0x00000000 0x8 binaries/printf.o + .group 0x00000000 0x8 binaries/printf.o + .group 0x00000000 0x8 binaries/printf.o + .group 0x00000000 0x8 binaries/printf.o + .group 0x00000000 0x8 binaries/printf.o + .group 0x00000000 0x8 binaries/printf.o + .group 0x00000000 0x8 binaries/printf.o + .group 0x00000000 0x8 binaries/printf.o + .group 0x00000000 0x8 binaries/printf.o + .group 0x00000000 0x8 binaries/printf.o + .group 0x00000000 0x8 binaries/printf.o + .group 0x00000000 0x8 binaries/printf.o + .group 0x00000000 0x8 binaries/printf.o + .group 0x00000000 0x8 binaries/printf.o + .group 0x00000000 0x8 binaries/printf.o + .group 0x00000000 0x8 binaries/printf.o + .group 0x00000000 0x8 binaries/printf.o + .group 0x00000000 0x8 binaries/printf.o + .group 0x00000000 0x8 binaries/printf.o + .group 0x00000000 0x8 binaries/printf.o + .group 0x00000000 0x8 binaries/printf.o + .group 0x00000000 0x8 binaries/printf.o + .group 0x00000000 0x8 binaries/printf.o + .group 0x00000000 0x8 binaries/printf.o + .group 0x00000000 0x8 binaries/printf.o + .group 0x00000000 0x8 binaries/printf.o + .group 0x00000000 0x8 binaries/printf.o + .group 0x00000000 0x8 binaries/printf.o + .group 0x00000000 0x8 binaries/printf.o + .group 0x00000000 0x8 binaries/printf.o + .group 0x00000000 0x8 binaries/printf.o + .group 0x00000000 0x8 binaries/printf.o + .group 0x00000000 0x8 binaries/printf.o + .debug_macro 0x00000000 0x838 binaries/printf.o + .debug_macro 0x00000000 0x58 binaries/printf.o + .debug_macro 0x00000000 0xb2 binaries/printf.o + .debug_macro 0x00000000 0x6a binaries/printf.o + .debug_macro 0x00000000 0x52 binaries/printf.o + .debug_macro 0x00000000 0x10 binaries/printf.o + .debug_macro 0x00000000 0x16 binaries/printf.o + .debug_macro 0x00000000 0x1c binaries/printf.o + .debug_macro 0x00000000 0x1c binaries/printf.o + .debug_macro 0x00000000 0x10 binaries/printf.o + .debug_macro 0x00000000 0x28 binaries/printf.o + .debug_macro 0x00000000 0x1c1 binaries/printf.o + .debug_macro 0x00000000 0xa0 binaries/printf.o + .debug_macro 0x00000000 0x10 binaries/printf.o + .debug_macro 0x00000000 0x22 binaries/printf.o + .debug_macro 0x00000000 0x46 binaries/printf.o + .debug_macro 0x00000000 0xfa binaries/printf.o + .debug_macro 0x00000000 0xdd binaries/printf.o + .debug_macro 0x00000000 0x91 binaries/printf.o + .debug_macro 0x00000000 0x8e binaries/printf.o + .debug_macro 0x00000000 0x82 binaries/printf.o + .debug_macro 0x00000000 0x2e binaries/printf.o + .debug_macro 0x00000000 0x3a binaries/printf.o + .debug_macro 0x00000000 0x4c binaries/printf.o + .debug_macro 0x00000000 0x3a binaries/printf.o + .debug_macro 0x00000000 0xa0 binaries/printf.o + .debug_macro 0x00000000 0x34 binaries/printf.o + .debug_macro 0x00000000 0x7c binaries/printf.o + .debug_macro 0x00000000 0x1c binaries/printf.o + .debug_macro 0x00000000 0xee binaries/printf.o + .debug_macro 0x00000000 0x7c binaries/printf.o + .debug_macro 0x00000000 0x20 binaries/printf.o + .debug_macro 0x00000000 0x10 binaries/printf.o + .debug_macro 0x00000000 0x1c binaries/printf.o + .debug_macro 0x00000000 0x34 binaries/printf.o + .debug_macro 0x00000000 0xeb binaries/printf.o + .debug_macro 0x00000000 0x8e binaries/printf.o + .debug_macro 0x00000000 0x1c binaries/printf.o + .group 0x00000000 0x8 binaries/putchar.o + .group 0x00000000 0x8 binaries/putchar.o + .group 0x00000000 0x8 binaries/putchar.o + .group 0x00000000 0x8 binaries/putchar.o + .group 0x00000000 0x8 binaries/putchar.o + .group 0x00000000 0x8 binaries/putchar.o + .group 0x00000000 0x8 binaries/putchar.o + .group 0x00000000 0x8 binaries/putchar.o + .group 0x00000000 0x8 binaries/putchar.o + .group 0x00000000 0x8 binaries/putchar.o + .group 0x00000000 0x8 binaries/putchar.o + .group 0x00000000 0x8 binaries/putchar.o + .group 0x00000000 0x8 binaries/putchar.o + .group 0x00000000 0x8 binaries/putchar.o + .group 0x00000000 0x8 binaries/putchar.o + .group 0x00000000 0x8 binaries/putchar.o + .group 0x00000000 0x8 binaries/putchar.o + .group 0x00000000 0x8 binaries/putchar.o + .group 0x00000000 0x8 binaries/putchar.o + .group 0x00000000 0x8 binaries/putchar.o + .group 0x00000000 0x8 binaries/putchar.o + .group 0x00000000 0x8 binaries/putchar.o + .group 0x00000000 0x8 binaries/putchar.o + .group 0x00000000 0x8 binaries/putchar.o + .group 0x00000000 0x8 binaries/putchar.o + .group 0x00000000 0x8 binaries/putchar.o + .group 0x00000000 0x8 binaries/putchar.o + .group 0x00000000 0x8 binaries/putchar.o + .group 0x00000000 0x8 binaries/putchar.o + .group 0x00000000 0x8 binaries/putchar.o + .group 0x00000000 0x8 binaries/putchar.o + .group 0x00000000 0x8 binaries/putchar.o + .group 0x00000000 0x8 binaries/putchar.o + .group 0x00000000 0x8 binaries/putchar.o + .group 0x00000000 0x8 binaries/putchar.o + .group 0x00000000 0x8 binaries/putchar.o + .group 0x00000000 0x8 binaries/putchar.o + .debug_macro 0x00000000 0x838 binaries/putchar.o + .debug_macro 0x00000000 0x58 binaries/putchar.o + .debug_macro 0x00000000 0xb2 binaries/putchar.o + .debug_macro 0x00000000 0x6a binaries/putchar.o + .debug_macro 0x00000000 0x52 binaries/putchar.o + .debug_macro 0x00000000 0x10 binaries/putchar.o + .debug_macro 0x00000000 0x16 binaries/putchar.o + .debug_macro 0x00000000 0x1c binaries/putchar.o + .debug_macro 0x00000000 0x1c binaries/putchar.o + .debug_macro 0x00000000 0x10 binaries/putchar.o + .debug_macro 0x00000000 0x28 binaries/putchar.o + .debug_macro 0x00000000 0x1c1 binaries/putchar.o + .debug_macro 0x00000000 0xa0 binaries/putchar.o + .debug_macro 0x00000000 0x10 binaries/putchar.o + .debug_macro 0x00000000 0x22 binaries/putchar.o + .debug_macro 0x00000000 0x46 binaries/putchar.o + .debug_macro 0x00000000 0xfa binaries/putchar.o + .debug_macro 0x00000000 0xdd binaries/putchar.o + .debug_macro 0x00000000 0x91 binaries/putchar.o + .debug_macro 0x00000000 0x8e binaries/putchar.o + .debug_macro 0x00000000 0x82 binaries/putchar.o + .debug_macro 0x00000000 0x2e binaries/putchar.o + .debug_macro 0x00000000 0x3a binaries/putchar.o + .debug_macro 0x00000000 0x4c binaries/putchar.o + .debug_macro 0x00000000 0x3a binaries/putchar.o + .debug_macro 0x00000000 0xa0 binaries/putchar.o + .debug_macro 0x00000000 0x34 binaries/putchar.o + .debug_macro 0x00000000 0x7c binaries/putchar.o + .debug_macro 0x00000000 0x1c binaries/putchar.o + .debug_macro 0x00000000 0xee binaries/putchar.o + .debug_macro 0x00000000 0x7c binaries/putchar.o + .debug_macro 0x00000000 0x20 binaries/putchar.o + .debug_macro 0x00000000 0x10 binaries/putchar.o + .debug_macro 0x00000000 0x1c binaries/putchar.o + .debug_macro 0x00000000 0x34 binaries/putchar.o + .debug_macro 0x00000000 0xeb binaries/putchar.o + .debug_macro 0x00000000 0x8e binaries/putchar.o + .group 0x00000000 0x8 binaries/qsort.o + .debug_macro 0x00000000 0x838 binaries/qsort.o + .group 0x00000000 0x8 binaries/rand.o + .debug_macro 0x00000000 0x838 binaries/rand.o + .group 0x00000000 0x8 binaries/sprintf.o + .group 0x00000000 0x8 binaries/sprintf.o + .debug_macro 0x00000000 0x838 binaries/sprintf.o + .debug_macro 0x00000000 0x1c binaries/sprintf.o + .group 0x00000000 0x8 binaries/sscanf.o + .debug_macro 0x00000000 0x838 binaries/sscanf.o + .group 0x00000000 0x8 binaries/strchr.o + .debug_macro 0x00000000 0x838 binaries/strchr.o + .group 0x00000000 0x8 binaries/strcmp.o + .debug_macro 0x00000000 0x838 binaries/strcmp.o + .group 0x00000000 0x8 binaries/strcpy.o + .debug_macro 0x00000000 0x838 binaries/strcpy.o + .group 0x00000000 0x8 binaries/strlen.o + .debug_macro 0x00000000 0x838 binaries/strlen.o + .group 0x00000000 0x8 binaries/strncat.o + .debug_macro 0x00000000 0x838 binaries/strncat.o + .group 0x00000000 0x8 binaries/strncmp.o + .debug_macro 0x00000000 0x838 binaries/strncmp.o + .group 0x00000000 0x8 binaries/strncpy.o + .debug_macro 0x00000000 0x838 binaries/strncpy.o + .group 0x00000000 0x8 binaries/strnlen.o + .debug_macro 0x00000000 0x838 binaries/strnlen.o + .group 0x00000000 0x8 binaries/strrchr.o + .debug_macro 0x00000000 0x838 binaries/strrchr.o + .group 0x00000000 0x8 binaries/strstr.o + .debug_macro 0x00000000 0x838 binaries/strstr.o + .group 0x00000000 0x8 binaries/ttycontrol.o + .group 0x00000000 0x8 binaries/ttycontrol.o + .group 0x00000000 0x8 binaries/ttycontrol.o + .group 0x00000000 0x8 binaries/ttycontrol.o + .group 0x00000000 0x8 binaries/ttycontrol.o + .group 0x00000000 0x8 binaries/ttycontrol.o + .group 0x00000000 0x8 binaries/ttycontrol.o + .group 0x00000000 0x8 binaries/ttycontrol.o + .group 0x00000000 0x8 binaries/ttycontrol.o + .group 0x00000000 0x8 binaries/ttycontrol.o + .group 0x00000000 0x8 binaries/ttycontrol.o + .group 0x00000000 0x8 binaries/ttycontrol.o + .group 0x00000000 0x8 binaries/ttycontrol.o + .group 0x00000000 0x8 binaries/ttycontrol.o + .group 0x00000000 0x8 binaries/ttycontrol.o + .group 0x00000000 0x8 binaries/ttycontrol.o + .group 0x00000000 0x8 binaries/ttycontrol.o + .group 0x00000000 0x8 binaries/ttycontrol.o + .group 0x00000000 0x8 binaries/ttycontrol.o + .group 0x00000000 0x8 binaries/ttycontrol.o + .group 0x00000000 0x8 binaries/ttycontrol.o + .group 0x00000000 0x8 binaries/ttycontrol.o + .group 0x00000000 0x8 binaries/ttycontrol.o + .group 0x00000000 0x8 binaries/ttycontrol.o + .group 0x00000000 0x8 binaries/ttycontrol.o + .group 0x00000000 0x8 binaries/ttycontrol.o + .group 0x00000000 0x8 binaries/ttycontrol.o + .group 0x00000000 0x8 binaries/ttycontrol.o + .group 0x00000000 0x8 binaries/ttycontrol.o + .group 0x00000000 0x8 binaries/ttycontrol.o + .group 0x00000000 0x8 binaries/ttycontrol.o + .group 0x00000000 0x8 binaries/ttycontrol.o + .group 0x00000000 0x8 binaries/ttycontrol.o + .group 0x00000000 0x8 binaries/ttycontrol.o + .group 0x00000000 0x8 binaries/ttycontrol.o + .group 0x00000000 0x8 binaries/ttycontrol.o + .group 0x00000000 0x8 binaries/ttycontrol.o + .debug_macro 0x00000000 0x838 binaries/ttycontrol.o + .debug_macro 0x00000000 0x58 binaries/ttycontrol.o + .debug_macro 0x00000000 0xb2 binaries/ttycontrol.o + .debug_macro 0x00000000 0x6a binaries/ttycontrol.o + .debug_macro 0x00000000 0x52 binaries/ttycontrol.o + .debug_macro 0x00000000 0x10 binaries/ttycontrol.o + .debug_macro 0x00000000 0x16 binaries/ttycontrol.o + .debug_macro 0x00000000 0x1c binaries/ttycontrol.o + .debug_macro 0x00000000 0x1c binaries/ttycontrol.o + .debug_macro 0x00000000 0x10 binaries/ttycontrol.o + .debug_macro 0x00000000 0x28 binaries/ttycontrol.o + .debug_macro 0x00000000 0x1c1 binaries/ttycontrol.o + .debug_macro 0x00000000 0xa0 binaries/ttycontrol.o + .debug_macro 0x00000000 0x10 binaries/ttycontrol.o + .debug_macro 0x00000000 0x22 binaries/ttycontrol.o + .debug_macro 0x00000000 0x46 binaries/ttycontrol.o + .debug_macro 0x00000000 0xfa binaries/ttycontrol.o + .debug_macro 0x00000000 0xdd binaries/ttycontrol.o + .debug_macro 0x00000000 0x91 binaries/ttycontrol.o + .debug_macro 0x00000000 0x8e binaries/ttycontrol.o + .debug_macro 0x00000000 0x82 binaries/ttycontrol.o + .debug_macro 0x00000000 0x2e binaries/ttycontrol.o + .debug_macro 0x00000000 0x3a binaries/ttycontrol.o + .debug_macro 0x00000000 0x4c binaries/ttycontrol.o + .debug_macro 0x00000000 0x3a binaries/ttycontrol.o + .debug_macro 0x00000000 0xa0 binaries/ttycontrol.o + .debug_macro 0x00000000 0x34 binaries/ttycontrol.o + .debug_macro 0x00000000 0x7c binaries/ttycontrol.o + .debug_macro 0x00000000 0x1c binaries/ttycontrol.o + .debug_macro 0x00000000 0xee binaries/ttycontrol.o + .debug_macro 0x00000000 0x7c binaries/ttycontrol.o + .debug_macro 0x00000000 0x20 binaries/ttycontrol.o + .debug_macro 0x00000000 0x10 binaries/ttycontrol.o + .debug_macro 0x00000000 0x1c binaries/ttycontrol.o + .debug_macro 0x00000000 0x34 binaries/ttycontrol.o + .debug_macro 0x00000000 0xeb binaries/ttycontrol.o + .debug_macro 0x00000000 0x8e binaries/ttycontrol.o + .group 0x00000000 0x8 binaries/ttygetc.o + .group 0x00000000 0x8 binaries/ttygetc.o + .group 0x00000000 0x8 binaries/ttygetc.o + .group 0x00000000 0x8 binaries/ttygetc.o + .group 0x00000000 0x8 binaries/ttygetc.o + .group 0x00000000 0x8 binaries/ttygetc.o + .group 0x00000000 0x8 binaries/ttygetc.o + .group 0x00000000 0x8 binaries/ttygetc.o + .group 0x00000000 0x8 binaries/ttygetc.o + .group 0x00000000 0x8 binaries/ttygetc.o + .group 0x00000000 0x8 binaries/ttygetc.o + .group 0x00000000 0x8 binaries/ttygetc.o + .group 0x00000000 0x8 binaries/ttygetc.o + .group 0x00000000 0x8 binaries/ttygetc.o + .group 0x00000000 0x8 binaries/ttygetc.o + .group 0x00000000 0x8 binaries/ttygetc.o + .group 0x00000000 0x8 binaries/ttygetc.o + .group 0x00000000 0x8 binaries/ttygetc.o + .group 0x00000000 0x8 binaries/ttygetc.o + .group 0x00000000 0x8 binaries/ttygetc.o + .group 0x00000000 0x8 binaries/ttygetc.o + .group 0x00000000 0x8 binaries/ttygetc.o + .group 0x00000000 0x8 binaries/ttygetc.o + .group 0x00000000 0x8 binaries/ttygetc.o + .group 0x00000000 0x8 binaries/ttygetc.o + .group 0x00000000 0x8 binaries/ttygetc.o + .group 0x00000000 0x8 binaries/ttygetc.o + .group 0x00000000 0x8 binaries/ttygetc.o + .group 0x00000000 0x8 binaries/ttygetc.o + .group 0x00000000 0x8 binaries/ttygetc.o + .group 0x00000000 0x8 binaries/ttygetc.o + .group 0x00000000 0x8 binaries/ttygetc.o + .group 0x00000000 0x8 binaries/ttygetc.o + .group 0x00000000 0x8 binaries/ttygetc.o + .group 0x00000000 0x8 binaries/ttygetc.o + .group 0x00000000 0x8 binaries/ttygetc.o + .group 0x00000000 0x8 binaries/ttygetc.o + .debug_macro 0x00000000 0x838 binaries/ttygetc.o + .debug_macro 0x00000000 0x58 binaries/ttygetc.o + .debug_macro 0x00000000 0xb2 binaries/ttygetc.o + .debug_macro 0x00000000 0x6a binaries/ttygetc.o + .debug_macro 0x00000000 0x52 binaries/ttygetc.o + .debug_macro 0x00000000 0x10 binaries/ttygetc.o + .debug_macro 0x00000000 0x16 binaries/ttygetc.o + .debug_macro 0x00000000 0x1c binaries/ttygetc.o + .debug_macro 0x00000000 0x1c binaries/ttygetc.o + .debug_macro 0x00000000 0x10 binaries/ttygetc.o + .debug_macro 0x00000000 0x28 binaries/ttygetc.o + .debug_macro 0x00000000 0x1c1 binaries/ttygetc.o + .debug_macro 0x00000000 0xa0 binaries/ttygetc.o + .debug_macro 0x00000000 0x10 binaries/ttygetc.o + .debug_macro 0x00000000 0x22 binaries/ttygetc.o + .debug_macro 0x00000000 0x46 binaries/ttygetc.o + .debug_macro 0x00000000 0xfa binaries/ttygetc.o + .debug_macro 0x00000000 0xdd binaries/ttygetc.o + .debug_macro 0x00000000 0x91 binaries/ttygetc.o + .debug_macro 0x00000000 0x8e binaries/ttygetc.o + .debug_macro 0x00000000 0x82 binaries/ttygetc.o + .debug_macro 0x00000000 0x2e binaries/ttygetc.o + .debug_macro 0x00000000 0x3a binaries/ttygetc.o + .debug_macro 0x00000000 0x4c binaries/ttygetc.o + .debug_macro 0x00000000 0x3a binaries/ttygetc.o + .debug_macro 0x00000000 0xa0 binaries/ttygetc.o + .debug_macro 0x00000000 0x34 binaries/ttygetc.o + .debug_macro 0x00000000 0x7c binaries/ttygetc.o + .debug_macro 0x00000000 0x1c binaries/ttygetc.o + .debug_macro 0x00000000 0xee binaries/ttygetc.o + .debug_macro 0x00000000 0x7c binaries/ttygetc.o + .debug_macro 0x00000000 0x20 binaries/ttygetc.o + .debug_macro 0x00000000 0x10 binaries/ttygetc.o + .debug_macro 0x00000000 0x1c binaries/ttygetc.o + .debug_macro 0x00000000 0x34 binaries/ttygetc.o + .debug_macro 0x00000000 0xeb binaries/ttygetc.o + .debug_macro 0x00000000 0x8e binaries/ttygetc.o + .group 0x00000000 0x8 binaries/ttyhandle_in.o + .group 0x00000000 0x8 binaries/ttyhandle_in.o + .group 0x00000000 0x8 binaries/ttyhandle_in.o + .group 0x00000000 0x8 binaries/ttyhandle_in.o + .group 0x00000000 0x8 binaries/ttyhandle_in.o + .group 0x00000000 0x8 binaries/ttyhandle_in.o + .group 0x00000000 0x8 binaries/ttyhandle_in.o + .group 0x00000000 0x8 binaries/ttyhandle_in.o + .group 0x00000000 0x8 binaries/ttyhandle_in.o + .group 0x00000000 0x8 binaries/ttyhandle_in.o + .group 0x00000000 0x8 binaries/ttyhandle_in.o + .group 0x00000000 0x8 binaries/ttyhandle_in.o + .group 0x00000000 0x8 binaries/ttyhandle_in.o + .group 0x00000000 0x8 binaries/ttyhandle_in.o + .group 0x00000000 0x8 binaries/ttyhandle_in.o + .group 0x00000000 0x8 binaries/ttyhandle_in.o + .group 0x00000000 0x8 binaries/ttyhandle_in.o + .group 0x00000000 0x8 binaries/ttyhandle_in.o + .group 0x00000000 0x8 binaries/ttyhandle_in.o + .group 0x00000000 0x8 binaries/ttyhandle_in.o + .group 0x00000000 0x8 binaries/ttyhandle_in.o + .group 0x00000000 0x8 binaries/ttyhandle_in.o + .group 0x00000000 0x8 binaries/ttyhandle_in.o + .group 0x00000000 0x8 binaries/ttyhandle_in.o + .group 0x00000000 0x8 binaries/ttyhandle_in.o + .group 0x00000000 0x8 binaries/ttyhandle_in.o + .group 0x00000000 0x8 binaries/ttyhandle_in.o + .group 0x00000000 0x8 binaries/ttyhandle_in.o + .group 0x00000000 0x8 binaries/ttyhandle_in.o + .group 0x00000000 0x8 binaries/ttyhandle_in.o + .group 0x00000000 0x8 binaries/ttyhandle_in.o + .group 0x00000000 0x8 binaries/ttyhandle_in.o + .group 0x00000000 0x8 binaries/ttyhandle_in.o + .group 0x00000000 0x8 binaries/ttyhandle_in.o + .group 0x00000000 0x8 binaries/ttyhandle_in.o + .group 0x00000000 0x8 binaries/ttyhandle_in.o + .group 0x00000000 0x8 binaries/ttyhandle_in.o + .debug_macro 0x00000000 0x838 binaries/ttyhandle_in.o + .debug_macro 0x00000000 0x58 binaries/ttyhandle_in.o + .debug_macro 0x00000000 0xb2 binaries/ttyhandle_in.o + .debug_macro 0x00000000 0x6a binaries/ttyhandle_in.o + .debug_macro 0x00000000 0x52 binaries/ttyhandle_in.o + .debug_macro 0x00000000 0x10 binaries/ttyhandle_in.o + .debug_macro 0x00000000 0x16 binaries/ttyhandle_in.o + .debug_macro 0x00000000 0x1c binaries/ttyhandle_in.o + .debug_macro 0x00000000 0x1c binaries/ttyhandle_in.o + .debug_macro 0x00000000 0x10 binaries/ttyhandle_in.o + .debug_macro 0x00000000 0x28 binaries/ttyhandle_in.o + .debug_macro 0x00000000 0x1c1 binaries/ttyhandle_in.o + .debug_macro 0x00000000 0xa0 binaries/ttyhandle_in.o + .debug_macro 0x00000000 0x10 binaries/ttyhandle_in.o + .debug_macro 0x00000000 0x22 binaries/ttyhandle_in.o + .debug_macro 0x00000000 0x46 binaries/ttyhandle_in.o + .debug_macro 0x00000000 0xfa binaries/ttyhandle_in.o + .debug_macro 0x00000000 0xdd binaries/ttyhandle_in.o + .debug_macro 0x00000000 0x91 binaries/ttyhandle_in.o + .debug_macro 0x00000000 0x8e binaries/ttyhandle_in.o + .debug_macro 0x00000000 0x82 binaries/ttyhandle_in.o + .debug_macro 0x00000000 0x2e binaries/ttyhandle_in.o + .debug_macro 0x00000000 0x3a binaries/ttyhandle_in.o + .debug_macro 0x00000000 0x4c binaries/ttyhandle_in.o + .debug_macro 0x00000000 0x3a binaries/ttyhandle_in.o + .debug_macro 0x00000000 0xa0 binaries/ttyhandle_in.o + .debug_macro 0x00000000 0x34 binaries/ttyhandle_in.o + .debug_macro 0x00000000 0x7c binaries/ttyhandle_in.o + .debug_macro 0x00000000 0x1c binaries/ttyhandle_in.o + .debug_macro 0x00000000 0xee binaries/ttyhandle_in.o + .debug_macro 0x00000000 0x7c binaries/ttyhandle_in.o + .debug_macro 0x00000000 0x20 binaries/ttyhandle_in.o + .debug_macro 0x00000000 0x10 binaries/ttyhandle_in.o + .debug_macro 0x00000000 0x1c binaries/ttyhandle_in.o + .debug_macro 0x00000000 0x34 binaries/ttyhandle_in.o + .debug_macro 0x00000000 0xeb binaries/ttyhandle_in.o + .debug_macro 0x00000000 0x8e binaries/ttyhandle_in.o + .group 0x00000000 0x8 binaries/ttyhandle_out.o + .group 0x00000000 0x8 binaries/ttyhandle_out.o + .group 0x00000000 0x8 binaries/ttyhandle_out.o + .group 0x00000000 0x8 binaries/ttyhandle_out.o + .group 0x00000000 0x8 binaries/ttyhandle_out.o + .group 0x00000000 0x8 binaries/ttyhandle_out.o + .group 0x00000000 0x8 binaries/ttyhandle_out.o + .group 0x00000000 0x8 binaries/ttyhandle_out.o + .group 0x00000000 0x8 binaries/ttyhandle_out.o + .group 0x00000000 0x8 binaries/ttyhandle_out.o + .group 0x00000000 0x8 binaries/ttyhandle_out.o + .group 0x00000000 0x8 binaries/ttyhandle_out.o + .group 0x00000000 0x8 binaries/ttyhandle_out.o + .group 0x00000000 0x8 binaries/ttyhandle_out.o + .group 0x00000000 0x8 binaries/ttyhandle_out.o + .group 0x00000000 0x8 binaries/ttyhandle_out.o + .group 0x00000000 0x8 binaries/ttyhandle_out.o + .group 0x00000000 0x8 binaries/ttyhandle_out.o + .group 0x00000000 0x8 binaries/ttyhandle_out.o + .group 0x00000000 0x8 binaries/ttyhandle_out.o + .group 0x00000000 0x8 binaries/ttyhandle_out.o + .group 0x00000000 0x8 binaries/ttyhandle_out.o + .group 0x00000000 0x8 binaries/ttyhandle_out.o + .group 0x00000000 0x8 binaries/ttyhandle_out.o + .group 0x00000000 0x8 binaries/ttyhandle_out.o + .group 0x00000000 0x8 binaries/ttyhandle_out.o + .group 0x00000000 0x8 binaries/ttyhandle_out.o + .group 0x00000000 0x8 binaries/ttyhandle_out.o + .group 0x00000000 0x8 binaries/ttyhandle_out.o + .group 0x00000000 0x8 binaries/ttyhandle_out.o + .group 0x00000000 0x8 binaries/ttyhandle_out.o + .group 0x00000000 0x8 binaries/ttyhandle_out.o + .group 0x00000000 0x8 binaries/ttyhandle_out.o + .group 0x00000000 0x8 binaries/ttyhandle_out.o + .group 0x00000000 0x8 binaries/ttyhandle_out.o + .group 0x00000000 0x8 binaries/ttyhandle_out.o + .group 0x00000000 0x8 binaries/ttyhandle_out.o + .debug_macro 0x00000000 0x838 binaries/ttyhandle_out.o + .debug_macro 0x00000000 0x58 binaries/ttyhandle_out.o + .debug_macro 0x00000000 0xb2 binaries/ttyhandle_out.o + .debug_macro 0x00000000 0x6a binaries/ttyhandle_out.o + .debug_macro 0x00000000 0x52 binaries/ttyhandle_out.o + .debug_macro 0x00000000 0x10 binaries/ttyhandle_out.o + .debug_macro 0x00000000 0x16 binaries/ttyhandle_out.o + .debug_macro 0x00000000 0x1c binaries/ttyhandle_out.o + .debug_macro 0x00000000 0x1c binaries/ttyhandle_out.o + .debug_macro 0x00000000 0x10 binaries/ttyhandle_out.o + .debug_macro 0x00000000 0x28 binaries/ttyhandle_out.o + .debug_macro 0x00000000 0x1c1 binaries/ttyhandle_out.o + .debug_macro 0x00000000 0xa0 binaries/ttyhandle_out.o + .debug_macro 0x00000000 0x10 binaries/ttyhandle_out.o + .debug_macro 0x00000000 0x22 binaries/ttyhandle_out.o + .debug_macro 0x00000000 0x46 binaries/ttyhandle_out.o + .debug_macro 0x00000000 0xfa binaries/ttyhandle_out.o + .debug_macro 0x00000000 0xdd binaries/ttyhandle_out.o + .debug_macro 0x00000000 0x91 binaries/ttyhandle_out.o + .debug_macro 0x00000000 0x8e binaries/ttyhandle_out.o + .debug_macro 0x00000000 0x82 binaries/ttyhandle_out.o + .debug_macro 0x00000000 0x2e binaries/ttyhandle_out.o + .debug_macro 0x00000000 0x3a binaries/ttyhandle_out.o + .debug_macro 0x00000000 0x4c binaries/ttyhandle_out.o + .debug_macro 0x00000000 0x3a binaries/ttyhandle_out.o + .debug_macro 0x00000000 0xa0 binaries/ttyhandle_out.o + .debug_macro 0x00000000 0x34 binaries/ttyhandle_out.o + .debug_macro 0x00000000 0x7c binaries/ttyhandle_out.o + .debug_macro 0x00000000 0x1c binaries/ttyhandle_out.o + .debug_macro 0x00000000 0xee binaries/ttyhandle_out.o + .debug_macro 0x00000000 0x7c binaries/ttyhandle_out.o + .debug_macro 0x00000000 0x20 binaries/ttyhandle_out.o + .debug_macro 0x00000000 0x10 binaries/ttyhandle_out.o + .debug_macro 0x00000000 0x1c binaries/ttyhandle_out.o + .debug_macro 0x00000000 0x34 binaries/ttyhandle_out.o + .debug_macro 0x00000000 0xeb binaries/ttyhandle_out.o + .debug_macro 0x00000000 0x8e binaries/ttyhandle_out.o + .group 0x00000000 0x8 binaries/ttyhandler.o + .group 0x00000000 0x8 binaries/ttyhandler.o + .group 0x00000000 0x8 binaries/ttyhandler.o + .group 0x00000000 0x8 binaries/ttyhandler.o + .group 0x00000000 0x8 binaries/ttyhandler.o + .group 0x00000000 0x8 binaries/ttyhandler.o + .group 0x00000000 0x8 binaries/ttyhandler.o + .group 0x00000000 0x8 binaries/ttyhandler.o + .group 0x00000000 0x8 binaries/ttyhandler.o + .group 0x00000000 0x8 binaries/ttyhandler.o + .group 0x00000000 0x8 binaries/ttyhandler.o + .group 0x00000000 0x8 binaries/ttyhandler.o + .group 0x00000000 0x8 binaries/ttyhandler.o + .group 0x00000000 0x8 binaries/ttyhandler.o + .group 0x00000000 0x8 binaries/ttyhandler.o + .group 0x00000000 0x8 binaries/ttyhandler.o + .group 0x00000000 0x8 binaries/ttyhandler.o + .group 0x00000000 0x8 binaries/ttyhandler.o + .group 0x00000000 0x8 binaries/ttyhandler.o + .group 0x00000000 0x8 binaries/ttyhandler.o + .group 0x00000000 0x8 binaries/ttyhandler.o + .group 0x00000000 0x8 binaries/ttyhandler.o + .group 0x00000000 0x8 binaries/ttyhandler.o + .group 0x00000000 0x8 binaries/ttyhandler.o + .group 0x00000000 0x8 binaries/ttyhandler.o + .group 0x00000000 0x8 binaries/ttyhandler.o + .group 0x00000000 0x8 binaries/ttyhandler.o + .group 0x00000000 0x8 binaries/ttyhandler.o + .group 0x00000000 0x8 binaries/ttyhandler.o + .group 0x00000000 0x8 binaries/ttyhandler.o + .group 0x00000000 0x8 binaries/ttyhandler.o + .group 0x00000000 0x8 binaries/ttyhandler.o + .group 0x00000000 0x8 binaries/ttyhandler.o + .group 0x00000000 0x8 binaries/ttyhandler.o + .group 0x00000000 0x8 binaries/ttyhandler.o + .group 0x00000000 0x8 binaries/ttyhandler.o + .group 0x00000000 0x8 binaries/ttyhandler.o + .debug_macro 0x00000000 0x838 binaries/ttyhandler.o + .debug_macro 0x00000000 0x58 binaries/ttyhandler.o + .debug_macro 0x00000000 0xb2 binaries/ttyhandler.o + .debug_macro 0x00000000 0x6a binaries/ttyhandler.o + .debug_macro 0x00000000 0x52 binaries/ttyhandler.o + .debug_macro 0x00000000 0x10 binaries/ttyhandler.o + .debug_macro 0x00000000 0x16 binaries/ttyhandler.o + .debug_macro 0x00000000 0x1c binaries/ttyhandler.o + .debug_macro 0x00000000 0x1c binaries/ttyhandler.o + .debug_macro 0x00000000 0x10 binaries/ttyhandler.o + .debug_macro 0x00000000 0x28 binaries/ttyhandler.o + .debug_macro 0x00000000 0x1c1 binaries/ttyhandler.o + .debug_macro 0x00000000 0xa0 binaries/ttyhandler.o + .debug_macro 0x00000000 0x10 binaries/ttyhandler.o + .debug_macro 0x00000000 0x22 binaries/ttyhandler.o + .debug_macro 0x00000000 0x46 binaries/ttyhandler.o + .debug_macro 0x00000000 0xfa binaries/ttyhandler.o + .debug_macro 0x00000000 0xdd binaries/ttyhandler.o + .debug_macro 0x00000000 0x91 binaries/ttyhandler.o + .debug_macro 0x00000000 0x8e binaries/ttyhandler.o + .debug_macro 0x00000000 0x82 binaries/ttyhandler.o + .debug_macro 0x00000000 0x2e binaries/ttyhandler.o + .debug_macro 0x00000000 0x3a binaries/ttyhandler.o + .debug_macro 0x00000000 0x4c binaries/ttyhandler.o + .debug_macro 0x00000000 0x3a binaries/ttyhandler.o + .debug_macro 0x00000000 0xa0 binaries/ttyhandler.o + .debug_macro 0x00000000 0x34 binaries/ttyhandler.o + .debug_macro 0x00000000 0x7c binaries/ttyhandler.o + .debug_macro 0x00000000 0x1c binaries/ttyhandler.o + .debug_macro 0x00000000 0xee binaries/ttyhandler.o + .debug_macro 0x00000000 0x7c binaries/ttyhandler.o + .debug_macro 0x00000000 0x20 binaries/ttyhandler.o + .debug_macro 0x00000000 0x10 binaries/ttyhandler.o + .debug_macro 0x00000000 0x1c binaries/ttyhandler.o + .debug_macro 0x00000000 0x34 binaries/ttyhandler.o + .debug_macro 0x00000000 0xeb binaries/ttyhandler.o + .debug_macro 0x00000000 0x8e binaries/ttyhandler.o + .group 0x00000000 0x8 binaries/ttyinit.o + .group 0x00000000 0x8 binaries/ttyinit.o + .group 0x00000000 0x8 binaries/ttyinit.o + .group 0x00000000 0x8 binaries/ttyinit.o + .group 0x00000000 0x8 binaries/ttyinit.o + .group 0x00000000 0x8 binaries/ttyinit.o + .group 0x00000000 0x8 binaries/ttyinit.o + .group 0x00000000 0x8 binaries/ttyinit.o + .group 0x00000000 0x8 binaries/ttyinit.o + .group 0x00000000 0x8 binaries/ttyinit.o + .group 0x00000000 0x8 binaries/ttyinit.o + .group 0x00000000 0x8 binaries/ttyinit.o + .group 0x00000000 0x8 binaries/ttyinit.o + .group 0x00000000 0x8 binaries/ttyinit.o + .group 0x00000000 0x8 binaries/ttyinit.o + .group 0x00000000 0x8 binaries/ttyinit.o + .group 0x00000000 0x8 binaries/ttyinit.o + .group 0x00000000 0x8 binaries/ttyinit.o + .group 0x00000000 0x8 binaries/ttyinit.o + .group 0x00000000 0x8 binaries/ttyinit.o + .group 0x00000000 0x8 binaries/ttyinit.o + .group 0x00000000 0x8 binaries/ttyinit.o + .group 0x00000000 0x8 binaries/ttyinit.o + .group 0x00000000 0x8 binaries/ttyinit.o + .group 0x00000000 0x8 binaries/ttyinit.o + .group 0x00000000 0x8 binaries/ttyinit.o + .group 0x00000000 0x8 binaries/ttyinit.o + .group 0x00000000 0x8 binaries/ttyinit.o + .group 0x00000000 0x8 binaries/ttyinit.o + .group 0x00000000 0x8 binaries/ttyinit.o + .group 0x00000000 0x8 binaries/ttyinit.o + .group 0x00000000 0x8 binaries/ttyinit.o + .group 0x00000000 0x8 binaries/ttyinit.o + .group 0x00000000 0x8 binaries/ttyinit.o + .group 0x00000000 0x8 binaries/ttyinit.o + .group 0x00000000 0x8 binaries/ttyinit.o + .group 0x00000000 0x8 binaries/ttyinit.o + .debug_macro 0x00000000 0x838 binaries/ttyinit.o + .debug_macro 0x00000000 0x58 binaries/ttyinit.o + .debug_macro 0x00000000 0xb2 binaries/ttyinit.o + .debug_macro 0x00000000 0x6a binaries/ttyinit.o + .debug_macro 0x00000000 0x52 binaries/ttyinit.o + .debug_macro 0x00000000 0x10 binaries/ttyinit.o + .debug_macro 0x00000000 0x16 binaries/ttyinit.o + .debug_macro 0x00000000 0x1c binaries/ttyinit.o + .debug_macro 0x00000000 0x1c binaries/ttyinit.o + .debug_macro 0x00000000 0x10 binaries/ttyinit.o + .debug_macro 0x00000000 0x28 binaries/ttyinit.o + .debug_macro 0x00000000 0x1c1 binaries/ttyinit.o + .debug_macro 0x00000000 0xa0 binaries/ttyinit.o + .debug_macro 0x00000000 0x10 binaries/ttyinit.o + .debug_macro 0x00000000 0x22 binaries/ttyinit.o + .debug_macro 0x00000000 0x46 binaries/ttyinit.o + .debug_macro 0x00000000 0xfa binaries/ttyinit.o + .debug_macro 0x00000000 0xdd binaries/ttyinit.o + .debug_macro 0x00000000 0x91 binaries/ttyinit.o + .debug_macro 0x00000000 0x8e binaries/ttyinit.o + .debug_macro 0x00000000 0x82 binaries/ttyinit.o + .debug_macro 0x00000000 0x2e binaries/ttyinit.o + .debug_macro 0x00000000 0x3a binaries/ttyinit.o + .debug_macro 0x00000000 0x4c binaries/ttyinit.o + .debug_macro 0x00000000 0x3a binaries/ttyinit.o + .debug_macro 0x00000000 0xa0 binaries/ttyinit.o + .debug_macro 0x00000000 0x34 binaries/ttyinit.o + .debug_macro 0x00000000 0x7c binaries/ttyinit.o + .debug_macro 0x00000000 0x1c binaries/ttyinit.o + .debug_macro 0x00000000 0xee binaries/ttyinit.o + .debug_macro 0x00000000 0x7c binaries/ttyinit.o + .debug_macro 0x00000000 0x20 binaries/ttyinit.o + .debug_macro 0x00000000 0x10 binaries/ttyinit.o + .debug_macro 0x00000000 0x1c binaries/ttyinit.o + .debug_macro 0x00000000 0x34 binaries/ttyinit.o + .debug_macro 0x00000000 0xeb binaries/ttyinit.o + .debug_macro 0x00000000 0x8e binaries/ttyinit.o + .group 0x00000000 0x8 binaries/ttykickout.o + .group 0x00000000 0x8 binaries/ttykickout.o + .group 0x00000000 0x8 binaries/ttykickout.o + .group 0x00000000 0x8 binaries/ttykickout.o + .group 0x00000000 0x8 binaries/ttykickout.o + .group 0x00000000 0x8 binaries/ttykickout.o + .group 0x00000000 0x8 binaries/ttykickout.o + .group 0x00000000 0x8 binaries/ttykickout.o + .group 0x00000000 0x8 binaries/ttykickout.o + .group 0x00000000 0x8 binaries/ttykickout.o + .group 0x00000000 0x8 binaries/ttykickout.o + .group 0x00000000 0x8 binaries/ttykickout.o + .group 0x00000000 0x8 binaries/ttykickout.o + .group 0x00000000 0x8 binaries/ttykickout.o + .group 0x00000000 0x8 binaries/ttykickout.o + .group 0x00000000 0x8 binaries/ttykickout.o + .group 0x00000000 0x8 binaries/ttykickout.o + .group 0x00000000 0x8 binaries/ttykickout.o + .group 0x00000000 0x8 binaries/ttykickout.o + .group 0x00000000 0x8 binaries/ttykickout.o + .group 0x00000000 0x8 binaries/ttykickout.o + .group 0x00000000 0x8 binaries/ttykickout.o + .group 0x00000000 0x8 binaries/ttykickout.o + .group 0x00000000 0x8 binaries/ttykickout.o + .group 0x00000000 0x8 binaries/ttykickout.o + .group 0x00000000 0x8 binaries/ttykickout.o + .group 0x00000000 0x8 binaries/ttykickout.o + .group 0x00000000 0x8 binaries/ttykickout.o + .group 0x00000000 0x8 binaries/ttykickout.o + .group 0x00000000 0x8 binaries/ttykickout.o + .group 0x00000000 0x8 binaries/ttykickout.o + .group 0x00000000 0x8 binaries/ttykickout.o + .group 0x00000000 0x8 binaries/ttykickout.o + .group 0x00000000 0x8 binaries/ttykickout.o + .group 0x00000000 0x8 binaries/ttykickout.o + .group 0x00000000 0x8 binaries/ttykickout.o + .group 0x00000000 0x8 binaries/ttykickout.o + .debug_macro 0x00000000 0x838 binaries/ttykickout.o + .debug_macro 0x00000000 0x58 binaries/ttykickout.o + .debug_macro 0x00000000 0xb2 binaries/ttykickout.o + .debug_macro 0x00000000 0x6a binaries/ttykickout.o + .debug_macro 0x00000000 0x52 binaries/ttykickout.o + .debug_macro 0x00000000 0x10 binaries/ttykickout.o + .debug_macro 0x00000000 0x16 binaries/ttykickout.o + .debug_macro 0x00000000 0x1c binaries/ttykickout.o + .debug_macro 0x00000000 0x1c binaries/ttykickout.o + .debug_macro 0x00000000 0x10 binaries/ttykickout.o + .debug_macro 0x00000000 0x28 binaries/ttykickout.o + .debug_macro 0x00000000 0x1c1 binaries/ttykickout.o + .debug_macro 0x00000000 0xa0 binaries/ttykickout.o + .debug_macro 0x00000000 0x10 binaries/ttykickout.o + .debug_macro 0x00000000 0x22 binaries/ttykickout.o + .debug_macro 0x00000000 0x46 binaries/ttykickout.o + .debug_macro 0x00000000 0xfa binaries/ttykickout.o + .debug_macro 0x00000000 0xdd binaries/ttykickout.o + .debug_macro 0x00000000 0x91 binaries/ttykickout.o + .debug_macro 0x00000000 0x8e binaries/ttykickout.o + .debug_macro 0x00000000 0x82 binaries/ttykickout.o + .debug_macro 0x00000000 0x2e binaries/ttykickout.o + .debug_macro 0x00000000 0x3a binaries/ttykickout.o + .debug_macro 0x00000000 0x4c binaries/ttykickout.o + .debug_macro 0x00000000 0x3a binaries/ttykickout.o + .debug_macro 0x00000000 0xa0 binaries/ttykickout.o + .debug_macro 0x00000000 0x34 binaries/ttykickout.o + .debug_macro 0x00000000 0x7c binaries/ttykickout.o + .debug_macro 0x00000000 0x1c binaries/ttykickout.o + .debug_macro 0x00000000 0xee binaries/ttykickout.o + .debug_macro 0x00000000 0x7c binaries/ttykickout.o + .debug_macro 0x00000000 0x20 binaries/ttykickout.o + .debug_macro 0x00000000 0x10 binaries/ttykickout.o + .debug_macro 0x00000000 0x1c binaries/ttykickout.o + .debug_macro 0x00000000 0x34 binaries/ttykickout.o + .debug_macro 0x00000000 0xeb binaries/ttykickout.o + .debug_macro 0x00000000 0x8e binaries/ttykickout.o + .group 0x00000000 0x8 binaries/ttyputc.o + .group 0x00000000 0x8 binaries/ttyputc.o + .group 0x00000000 0x8 binaries/ttyputc.o + .group 0x00000000 0x8 binaries/ttyputc.o + .group 0x00000000 0x8 binaries/ttyputc.o + .group 0x00000000 0x8 binaries/ttyputc.o + .group 0x00000000 0x8 binaries/ttyputc.o + .group 0x00000000 0x8 binaries/ttyputc.o + .group 0x00000000 0x8 binaries/ttyputc.o + .group 0x00000000 0x8 binaries/ttyputc.o + .group 0x00000000 0x8 binaries/ttyputc.o + .group 0x00000000 0x8 binaries/ttyputc.o + .group 0x00000000 0x8 binaries/ttyputc.o + .group 0x00000000 0x8 binaries/ttyputc.o + .group 0x00000000 0x8 binaries/ttyputc.o + .group 0x00000000 0x8 binaries/ttyputc.o + .group 0x00000000 0x8 binaries/ttyputc.o + .group 0x00000000 0x8 binaries/ttyputc.o + .group 0x00000000 0x8 binaries/ttyputc.o + .group 0x00000000 0x8 binaries/ttyputc.o + .group 0x00000000 0x8 binaries/ttyputc.o + .group 0x00000000 0x8 binaries/ttyputc.o + .group 0x00000000 0x8 binaries/ttyputc.o + .group 0x00000000 0x8 binaries/ttyputc.o + .group 0x00000000 0x8 binaries/ttyputc.o + .group 0x00000000 0x8 binaries/ttyputc.o + .group 0x00000000 0x8 binaries/ttyputc.o + .group 0x00000000 0x8 binaries/ttyputc.o + .group 0x00000000 0x8 binaries/ttyputc.o + .group 0x00000000 0x8 binaries/ttyputc.o + .group 0x00000000 0x8 binaries/ttyputc.o + .group 0x00000000 0x8 binaries/ttyputc.o + .group 0x00000000 0x8 binaries/ttyputc.o + .group 0x00000000 0x8 binaries/ttyputc.o + .group 0x00000000 0x8 binaries/ttyputc.o + .group 0x00000000 0x8 binaries/ttyputc.o + .group 0x00000000 0x8 binaries/ttyputc.o + .debug_macro 0x00000000 0x838 binaries/ttyputc.o + .debug_macro 0x00000000 0x58 binaries/ttyputc.o + .debug_macro 0x00000000 0xb2 binaries/ttyputc.o + .debug_macro 0x00000000 0x6a binaries/ttyputc.o + .debug_macro 0x00000000 0x52 binaries/ttyputc.o + .debug_macro 0x00000000 0x10 binaries/ttyputc.o + .debug_macro 0x00000000 0x16 binaries/ttyputc.o + .debug_macro 0x00000000 0x1c binaries/ttyputc.o + .debug_macro 0x00000000 0x1c binaries/ttyputc.o + .debug_macro 0x00000000 0x10 binaries/ttyputc.o + .debug_macro 0x00000000 0x28 binaries/ttyputc.o + .debug_macro 0x00000000 0x1c1 binaries/ttyputc.o + .debug_macro 0x00000000 0xa0 binaries/ttyputc.o + .debug_macro 0x00000000 0x10 binaries/ttyputc.o + .debug_macro 0x00000000 0x22 binaries/ttyputc.o + .debug_macro 0x00000000 0x46 binaries/ttyputc.o + .debug_macro 0x00000000 0xfa binaries/ttyputc.o + .debug_macro 0x00000000 0xdd binaries/ttyputc.o + .debug_macro 0x00000000 0x91 binaries/ttyputc.o + .debug_macro 0x00000000 0x8e binaries/ttyputc.o + .debug_macro 0x00000000 0x82 binaries/ttyputc.o + .debug_macro 0x00000000 0x2e binaries/ttyputc.o + .debug_macro 0x00000000 0x3a binaries/ttyputc.o + .debug_macro 0x00000000 0x4c binaries/ttyputc.o + .debug_macro 0x00000000 0x3a binaries/ttyputc.o + .debug_macro 0x00000000 0xa0 binaries/ttyputc.o + .debug_macro 0x00000000 0x34 binaries/ttyputc.o + .debug_macro 0x00000000 0x7c binaries/ttyputc.o + .debug_macro 0x00000000 0x1c binaries/ttyputc.o + .debug_macro 0x00000000 0xee binaries/ttyputc.o + .debug_macro 0x00000000 0x7c binaries/ttyputc.o + .debug_macro 0x00000000 0x20 binaries/ttyputc.o + .debug_macro 0x00000000 0x10 binaries/ttyputc.o + .debug_macro 0x00000000 0x1c binaries/ttyputc.o + .debug_macro 0x00000000 0x34 binaries/ttyputc.o + .debug_macro 0x00000000 0xeb binaries/ttyputc.o + .debug_macro 0x00000000 0x8e binaries/ttyputc.o + .group 0x00000000 0x8 binaries/ttyread.o + .group 0x00000000 0x8 binaries/ttyread.o + .group 0x00000000 0x8 binaries/ttyread.o + .group 0x00000000 0x8 binaries/ttyread.o + .group 0x00000000 0x8 binaries/ttyread.o + .group 0x00000000 0x8 binaries/ttyread.o + .group 0x00000000 0x8 binaries/ttyread.o + .group 0x00000000 0x8 binaries/ttyread.o + .group 0x00000000 0x8 binaries/ttyread.o + .group 0x00000000 0x8 binaries/ttyread.o + .group 0x00000000 0x8 binaries/ttyread.o + .group 0x00000000 0x8 binaries/ttyread.o + .group 0x00000000 0x8 binaries/ttyread.o + .group 0x00000000 0x8 binaries/ttyread.o + .group 0x00000000 0x8 binaries/ttyread.o + .group 0x00000000 0x8 binaries/ttyread.o + .group 0x00000000 0x8 binaries/ttyread.o + .group 0x00000000 0x8 binaries/ttyread.o + .group 0x00000000 0x8 binaries/ttyread.o + .group 0x00000000 0x8 binaries/ttyread.o + .group 0x00000000 0x8 binaries/ttyread.o + .group 0x00000000 0x8 binaries/ttyread.o + .group 0x00000000 0x8 binaries/ttyread.o + .group 0x00000000 0x8 binaries/ttyread.o + .group 0x00000000 0x8 binaries/ttyread.o + .group 0x00000000 0x8 binaries/ttyread.o + .group 0x00000000 0x8 binaries/ttyread.o + .group 0x00000000 0x8 binaries/ttyread.o + .group 0x00000000 0x8 binaries/ttyread.o + .group 0x00000000 0x8 binaries/ttyread.o + .group 0x00000000 0x8 binaries/ttyread.o + .group 0x00000000 0x8 binaries/ttyread.o + .group 0x00000000 0x8 binaries/ttyread.o + .group 0x00000000 0x8 binaries/ttyread.o + .group 0x00000000 0x8 binaries/ttyread.o + .group 0x00000000 0x8 binaries/ttyread.o + .group 0x00000000 0x8 binaries/ttyread.o + .debug_macro 0x00000000 0x838 binaries/ttyread.o + .debug_macro 0x00000000 0x58 binaries/ttyread.o + .debug_macro 0x00000000 0xb2 binaries/ttyread.o + .debug_macro 0x00000000 0x6a binaries/ttyread.o + .debug_macro 0x00000000 0x52 binaries/ttyread.o + .debug_macro 0x00000000 0x10 binaries/ttyread.o + .debug_macro 0x00000000 0x16 binaries/ttyread.o + .debug_macro 0x00000000 0x1c binaries/ttyread.o + .debug_macro 0x00000000 0x1c binaries/ttyread.o + .debug_macro 0x00000000 0x10 binaries/ttyread.o + .debug_macro 0x00000000 0x28 binaries/ttyread.o + .debug_macro 0x00000000 0x1c1 binaries/ttyread.o + .debug_macro 0x00000000 0xa0 binaries/ttyread.o + .debug_macro 0x00000000 0x10 binaries/ttyread.o + .debug_macro 0x00000000 0x22 binaries/ttyread.o + .debug_macro 0x00000000 0x46 binaries/ttyread.o + .debug_macro 0x00000000 0xfa binaries/ttyread.o + .debug_macro 0x00000000 0xdd binaries/ttyread.o + .debug_macro 0x00000000 0x91 binaries/ttyread.o + .debug_macro 0x00000000 0x8e binaries/ttyread.o + .debug_macro 0x00000000 0x82 binaries/ttyread.o + .debug_macro 0x00000000 0x2e binaries/ttyread.o + .debug_macro 0x00000000 0x3a binaries/ttyread.o + .debug_macro 0x00000000 0x4c binaries/ttyread.o + .debug_macro 0x00000000 0x3a binaries/ttyread.o + .debug_macro 0x00000000 0xa0 binaries/ttyread.o + .debug_macro 0x00000000 0x34 binaries/ttyread.o + .debug_macro 0x00000000 0x7c binaries/ttyread.o + .debug_macro 0x00000000 0x1c binaries/ttyread.o + .debug_macro 0x00000000 0xee binaries/ttyread.o + .debug_macro 0x00000000 0x7c binaries/ttyread.o + .debug_macro 0x00000000 0x20 binaries/ttyread.o + .debug_macro 0x00000000 0x10 binaries/ttyread.o + .debug_macro 0x00000000 0x1c binaries/ttyread.o + .debug_macro 0x00000000 0x34 binaries/ttyread.o + .debug_macro 0x00000000 0xeb binaries/ttyread.o + .debug_macro 0x00000000 0x8e binaries/ttyread.o + .group 0x00000000 0x8 binaries/ttywrite.o + .group 0x00000000 0x8 binaries/ttywrite.o + .group 0x00000000 0x8 binaries/ttywrite.o + .group 0x00000000 0x8 binaries/ttywrite.o + .group 0x00000000 0x8 binaries/ttywrite.o + .group 0x00000000 0x8 binaries/ttywrite.o + .group 0x00000000 0x8 binaries/ttywrite.o + .group 0x00000000 0x8 binaries/ttywrite.o + .group 0x00000000 0x8 binaries/ttywrite.o + .group 0x00000000 0x8 binaries/ttywrite.o + .group 0x00000000 0x8 binaries/ttywrite.o + .group 0x00000000 0x8 binaries/ttywrite.o + .group 0x00000000 0x8 binaries/ttywrite.o + .group 0x00000000 0x8 binaries/ttywrite.o + .group 0x00000000 0x8 binaries/ttywrite.o + .group 0x00000000 0x8 binaries/ttywrite.o + .group 0x00000000 0x8 binaries/ttywrite.o + .group 0x00000000 0x8 binaries/ttywrite.o + .group 0x00000000 0x8 binaries/ttywrite.o + .group 0x00000000 0x8 binaries/ttywrite.o + .group 0x00000000 0x8 binaries/ttywrite.o + .group 0x00000000 0x8 binaries/ttywrite.o + .group 0x00000000 0x8 binaries/ttywrite.o + .group 0x00000000 0x8 binaries/ttywrite.o + .group 0x00000000 0x8 binaries/ttywrite.o + .group 0x00000000 0x8 binaries/ttywrite.o + .group 0x00000000 0x8 binaries/ttywrite.o + .group 0x00000000 0x8 binaries/ttywrite.o + .group 0x00000000 0x8 binaries/ttywrite.o + .group 0x00000000 0x8 binaries/ttywrite.o + .group 0x00000000 0x8 binaries/ttywrite.o + .group 0x00000000 0x8 binaries/ttywrite.o + .group 0x00000000 0x8 binaries/ttywrite.o + .group 0x00000000 0x8 binaries/ttywrite.o + .group 0x00000000 0x8 binaries/ttywrite.o + .group 0x00000000 0x8 binaries/ttywrite.o + .group 0x00000000 0x8 binaries/ttywrite.o + .debug_macro 0x00000000 0x838 binaries/ttywrite.o + .debug_macro 0x00000000 0x58 binaries/ttywrite.o + .debug_macro 0x00000000 0xb2 binaries/ttywrite.o + .debug_macro 0x00000000 0x6a binaries/ttywrite.o + .debug_macro 0x00000000 0x52 binaries/ttywrite.o + .debug_macro 0x00000000 0x10 binaries/ttywrite.o + .debug_macro 0x00000000 0x16 binaries/ttywrite.o + .debug_macro 0x00000000 0x1c binaries/ttywrite.o + .debug_macro 0x00000000 0x1c binaries/ttywrite.o + .debug_macro 0x00000000 0x10 binaries/ttywrite.o + .debug_macro 0x00000000 0x28 binaries/ttywrite.o + .debug_macro 0x00000000 0x1c1 binaries/ttywrite.o + .debug_macro 0x00000000 0xa0 binaries/ttywrite.o + .debug_macro 0x00000000 0x10 binaries/ttywrite.o + .debug_macro 0x00000000 0x22 binaries/ttywrite.o + .debug_macro 0x00000000 0x46 binaries/ttywrite.o + .debug_macro 0x00000000 0xfa binaries/ttywrite.o + .debug_macro 0x00000000 0xdd binaries/ttywrite.o + .debug_macro 0x00000000 0x91 binaries/ttywrite.o + .debug_macro 0x00000000 0x8e binaries/ttywrite.o + .debug_macro 0x00000000 0x82 binaries/ttywrite.o + .debug_macro 0x00000000 0x2e binaries/ttywrite.o + .debug_macro 0x00000000 0x3a binaries/ttywrite.o + .debug_macro 0x00000000 0x4c binaries/ttywrite.o + .debug_macro 0x00000000 0x3a binaries/ttywrite.o + .debug_macro 0x00000000 0xa0 binaries/ttywrite.o + .debug_macro 0x00000000 0x34 binaries/ttywrite.o + .debug_macro 0x00000000 0x7c binaries/ttywrite.o + .debug_macro 0x00000000 0x1c binaries/ttywrite.o + .debug_macro 0x00000000 0xee binaries/ttywrite.o + .debug_macro 0x00000000 0x7c binaries/ttywrite.o + .debug_macro 0x00000000 0x20 binaries/ttywrite.o + .debug_macro 0x00000000 0x10 binaries/ttywrite.o + .debug_macro 0x00000000 0x1c binaries/ttywrite.o + .debug_macro 0x00000000 0x34 binaries/ttywrite.o + .debug_macro 0x00000000 0xeb binaries/ttywrite.o + .debug_macro 0x00000000 0x8e binaries/ttywrite.o + .group 0x00000000 0x8 binaries/mount.o + .group 0x00000000 0x8 binaries/mount.o + .group 0x00000000 0x8 binaries/mount.o + .group 0x00000000 0x8 binaries/mount.o + .group 0x00000000 0x8 binaries/mount.o + .group 0x00000000 0x8 binaries/mount.o + .group 0x00000000 0x8 binaries/mount.o + .group 0x00000000 0x8 binaries/mount.o + .group 0x00000000 0x8 binaries/mount.o + .group 0x00000000 0x8 binaries/mount.o + .group 0x00000000 0x8 binaries/mount.o + .group 0x00000000 0x8 binaries/mount.o + .group 0x00000000 0x8 binaries/mount.o + .group 0x00000000 0x8 binaries/mount.o + .group 0x00000000 0x8 binaries/mount.o + .group 0x00000000 0x8 binaries/mount.o + .group 0x00000000 0x8 binaries/mount.o + .group 0x00000000 0x8 binaries/mount.o + .group 0x00000000 0x8 binaries/mount.o + .group 0x00000000 0x8 binaries/mount.o + .group 0x00000000 0x8 binaries/mount.o + .group 0x00000000 0x8 binaries/mount.o + .group 0x00000000 0x8 binaries/mount.o + .group 0x00000000 0x8 binaries/mount.o + .group 0x00000000 0x8 binaries/mount.o + .group 0x00000000 0x8 binaries/mount.o + .group 0x00000000 0x8 binaries/mount.o + .group 0x00000000 0x8 binaries/mount.o + .group 0x00000000 0x8 binaries/mount.o + .group 0x00000000 0x8 binaries/mount.o + .group 0x00000000 0x8 binaries/mount.o + .group 0x00000000 0x8 binaries/mount.o + .group 0x00000000 0x8 binaries/mount.o + .group 0x00000000 0x8 binaries/mount.o + .group 0x00000000 0x8 binaries/mount.o + .group 0x00000000 0x8 binaries/mount.o + .group 0x00000000 0x8 binaries/mount.o + .debug_macro 0x00000000 0x838 binaries/mount.o + .debug_macro 0x00000000 0x58 binaries/mount.o + .debug_macro 0x00000000 0xb2 binaries/mount.o + .debug_macro 0x00000000 0x6a binaries/mount.o + .debug_macro 0x00000000 0x52 binaries/mount.o + .debug_macro 0x00000000 0x10 binaries/mount.o + .debug_macro 0x00000000 0x16 binaries/mount.o + .debug_macro 0x00000000 0x1c binaries/mount.o + .debug_macro 0x00000000 0x1c binaries/mount.o + .debug_macro 0x00000000 0x10 binaries/mount.o + .debug_macro 0x00000000 0x28 binaries/mount.o + .debug_macro 0x00000000 0x1c1 binaries/mount.o + .debug_macro 0x00000000 0xa0 binaries/mount.o + .debug_macro 0x00000000 0x10 binaries/mount.o + .debug_macro 0x00000000 0x22 binaries/mount.o + .debug_macro 0x00000000 0x46 binaries/mount.o + .debug_macro 0x00000000 0xfa binaries/mount.o + .debug_macro 0x00000000 0xdd binaries/mount.o + .debug_macro 0x00000000 0x91 binaries/mount.o + .debug_macro 0x00000000 0x8e binaries/mount.o + .debug_macro 0x00000000 0x82 binaries/mount.o + .debug_macro 0x00000000 0x2e binaries/mount.o + .debug_macro 0x00000000 0x3a binaries/mount.o + .debug_macro 0x00000000 0x4c binaries/mount.o + .debug_macro 0x00000000 0x3a binaries/mount.o + .debug_macro 0x00000000 0xa0 binaries/mount.o + .debug_macro 0x00000000 0x34 binaries/mount.o + .debug_macro 0x00000000 0x7c binaries/mount.o + .debug_macro 0x00000000 0x1c binaries/mount.o + .debug_macro 0x00000000 0xee binaries/mount.o + .debug_macro 0x00000000 0x7c binaries/mount.o + .debug_macro 0x00000000 0x20 binaries/mount.o + .debug_macro 0x00000000 0x10 binaries/mount.o + .debug_macro 0x00000000 0x1c binaries/mount.o + .debug_macro 0x00000000 0x34 binaries/mount.o + .debug_macro 0x00000000 0xeb binaries/mount.o + .debug_macro 0x00000000 0x8e binaries/mount.o + .group 0x00000000 0x8 binaries/naminit.o + .group 0x00000000 0x8 binaries/naminit.o + .group 0x00000000 0x8 binaries/naminit.o + .group 0x00000000 0x8 binaries/naminit.o + .group 0x00000000 0x8 binaries/naminit.o + .group 0x00000000 0x8 binaries/naminit.o + .group 0x00000000 0x8 binaries/naminit.o + .group 0x00000000 0x8 binaries/naminit.o + .group 0x00000000 0x8 binaries/naminit.o + .group 0x00000000 0x8 binaries/naminit.o + .group 0x00000000 0x8 binaries/naminit.o + .group 0x00000000 0x8 binaries/naminit.o + .group 0x00000000 0x8 binaries/naminit.o + .group 0x00000000 0x8 binaries/naminit.o + .group 0x00000000 0x8 binaries/naminit.o + .group 0x00000000 0x8 binaries/naminit.o + .group 0x00000000 0x8 binaries/naminit.o + .group 0x00000000 0x8 binaries/naminit.o + .group 0x00000000 0x8 binaries/naminit.o + .group 0x00000000 0x8 binaries/naminit.o + .group 0x00000000 0x8 binaries/naminit.o + .group 0x00000000 0x8 binaries/naminit.o + .group 0x00000000 0x8 binaries/naminit.o + .group 0x00000000 0x8 binaries/naminit.o + .group 0x00000000 0x8 binaries/naminit.o + .group 0x00000000 0x8 binaries/naminit.o + .group 0x00000000 0x8 binaries/naminit.o + .group 0x00000000 0x8 binaries/naminit.o + .group 0x00000000 0x8 binaries/naminit.o + .group 0x00000000 0x8 binaries/naminit.o + .group 0x00000000 0x8 binaries/naminit.o + .group 0x00000000 0x8 binaries/naminit.o + .group 0x00000000 0x8 binaries/naminit.o + .group 0x00000000 0x8 binaries/naminit.o + .group 0x00000000 0x8 binaries/naminit.o + .group 0x00000000 0x8 binaries/naminit.o + .group 0x00000000 0x8 binaries/naminit.o + .debug_macro 0x00000000 0x838 binaries/naminit.o + .debug_macro 0x00000000 0x58 binaries/naminit.o + .debug_macro 0x00000000 0xb2 binaries/naminit.o + .debug_macro 0x00000000 0x6a binaries/naminit.o + .debug_macro 0x00000000 0x52 binaries/naminit.o + .debug_macro 0x00000000 0x10 binaries/naminit.o + .debug_macro 0x00000000 0x16 binaries/naminit.o + .debug_macro 0x00000000 0x1c binaries/naminit.o + .debug_macro 0x00000000 0x1c binaries/naminit.o + .debug_macro 0x00000000 0x10 binaries/naminit.o + .debug_macro 0x00000000 0x28 binaries/naminit.o + .debug_macro 0x00000000 0x1c1 binaries/naminit.o + .debug_macro 0x00000000 0xa0 binaries/naminit.o + .debug_macro 0x00000000 0x10 binaries/naminit.o + .debug_macro 0x00000000 0x22 binaries/naminit.o + .debug_macro 0x00000000 0x46 binaries/naminit.o + .debug_macro 0x00000000 0xfa binaries/naminit.o + .debug_macro 0x00000000 0xdd binaries/naminit.o + .debug_macro 0x00000000 0x91 binaries/naminit.o + .debug_macro 0x00000000 0x8e binaries/naminit.o + .debug_macro 0x00000000 0x82 binaries/naminit.o + .debug_macro 0x00000000 0x2e binaries/naminit.o + .debug_macro 0x00000000 0x3a binaries/naminit.o + .debug_macro 0x00000000 0x4c binaries/naminit.o + .debug_macro 0x00000000 0x3a binaries/naminit.o + .debug_macro 0x00000000 0xa0 binaries/naminit.o + .debug_macro 0x00000000 0x34 binaries/naminit.o + .debug_macro 0x00000000 0x7c binaries/naminit.o + .debug_macro 0x00000000 0x1c binaries/naminit.o + .debug_macro 0x00000000 0xee binaries/naminit.o + .debug_macro 0x00000000 0x7c binaries/naminit.o + .debug_macro 0x00000000 0x20 binaries/naminit.o + .debug_macro 0x00000000 0x10 binaries/naminit.o + .debug_macro 0x00000000 0x1c binaries/naminit.o + .debug_macro 0x00000000 0x34 binaries/naminit.o + .debug_macro 0x00000000 0xeb binaries/naminit.o + .debug_macro 0x00000000 0x8e binaries/naminit.o + .group 0x00000000 0x8 binaries/nammap.o + .group 0x00000000 0x8 binaries/nammap.o + .group 0x00000000 0x8 binaries/nammap.o + .group 0x00000000 0x8 binaries/nammap.o + .group 0x00000000 0x8 binaries/nammap.o + .group 0x00000000 0x8 binaries/nammap.o + .group 0x00000000 0x8 binaries/nammap.o + .group 0x00000000 0x8 binaries/nammap.o + .group 0x00000000 0x8 binaries/nammap.o + .group 0x00000000 0x8 binaries/nammap.o + .group 0x00000000 0x8 binaries/nammap.o + .group 0x00000000 0x8 binaries/nammap.o + .group 0x00000000 0x8 binaries/nammap.o + .group 0x00000000 0x8 binaries/nammap.o + .group 0x00000000 0x8 binaries/nammap.o + .group 0x00000000 0x8 binaries/nammap.o + .group 0x00000000 0x8 binaries/nammap.o + .group 0x00000000 0x8 binaries/nammap.o + .group 0x00000000 0x8 binaries/nammap.o + .group 0x00000000 0x8 binaries/nammap.o + .group 0x00000000 0x8 binaries/nammap.o + .group 0x00000000 0x8 binaries/nammap.o + .group 0x00000000 0x8 binaries/nammap.o + .group 0x00000000 0x8 binaries/nammap.o + .group 0x00000000 0x8 binaries/nammap.o + .group 0x00000000 0x8 binaries/nammap.o + .group 0x00000000 0x8 binaries/nammap.o + .group 0x00000000 0x8 binaries/nammap.o + .group 0x00000000 0x8 binaries/nammap.o + .group 0x00000000 0x8 binaries/nammap.o + .group 0x00000000 0x8 binaries/nammap.o + .group 0x00000000 0x8 binaries/nammap.o + .group 0x00000000 0x8 binaries/nammap.o + .group 0x00000000 0x8 binaries/nammap.o + .group 0x00000000 0x8 binaries/nammap.o + .group 0x00000000 0x8 binaries/nammap.o + .group 0x00000000 0x8 binaries/nammap.o + .debug_macro 0x00000000 0x838 binaries/nammap.o + .debug_macro 0x00000000 0x58 binaries/nammap.o + .debug_macro 0x00000000 0xb2 binaries/nammap.o + .debug_macro 0x00000000 0x6a binaries/nammap.o + .debug_macro 0x00000000 0x52 binaries/nammap.o + .debug_macro 0x00000000 0x10 binaries/nammap.o + .debug_macro 0x00000000 0x16 binaries/nammap.o + .debug_macro 0x00000000 0x1c binaries/nammap.o + .debug_macro 0x00000000 0x1c binaries/nammap.o + .debug_macro 0x00000000 0x10 binaries/nammap.o + .debug_macro 0x00000000 0x28 binaries/nammap.o + .debug_macro 0x00000000 0x1c1 binaries/nammap.o + .debug_macro 0x00000000 0xa0 binaries/nammap.o + .debug_macro 0x00000000 0x10 binaries/nammap.o + .debug_macro 0x00000000 0x22 binaries/nammap.o + .debug_macro 0x00000000 0x46 binaries/nammap.o + .debug_macro 0x00000000 0xfa binaries/nammap.o + .debug_macro 0x00000000 0xdd binaries/nammap.o + .debug_macro 0x00000000 0x91 binaries/nammap.o + .debug_macro 0x00000000 0x8e binaries/nammap.o + .debug_macro 0x00000000 0x82 binaries/nammap.o + .debug_macro 0x00000000 0x2e binaries/nammap.o + .debug_macro 0x00000000 0x3a binaries/nammap.o + .debug_macro 0x00000000 0x4c binaries/nammap.o + .debug_macro 0x00000000 0x3a binaries/nammap.o + .debug_macro 0x00000000 0xa0 binaries/nammap.o + .debug_macro 0x00000000 0x34 binaries/nammap.o + .debug_macro 0x00000000 0x7c binaries/nammap.o + .debug_macro 0x00000000 0x1c binaries/nammap.o + .debug_macro 0x00000000 0xee binaries/nammap.o + .debug_macro 0x00000000 0x7c binaries/nammap.o + .debug_macro 0x00000000 0x20 binaries/nammap.o + .debug_macro 0x00000000 0x10 binaries/nammap.o + .debug_macro 0x00000000 0x1c binaries/nammap.o + .debug_macro 0x00000000 0x34 binaries/nammap.o + .debug_macro 0x00000000 0xeb binaries/nammap.o + .debug_macro 0x00000000 0x8e binaries/nammap.o + .group 0x00000000 0x8 binaries/namopen.o + .group 0x00000000 0x8 binaries/namopen.o + .group 0x00000000 0x8 binaries/namopen.o + .group 0x00000000 0x8 binaries/namopen.o + .group 0x00000000 0x8 binaries/namopen.o + .group 0x00000000 0x8 binaries/namopen.o + .group 0x00000000 0x8 binaries/namopen.o + .group 0x00000000 0x8 binaries/namopen.o + .group 0x00000000 0x8 binaries/namopen.o + .group 0x00000000 0x8 binaries/namopen.o + .group 0x00000000 0x8 binaries/namopen.o + .group 0x00000000 0x8 binaries/namopen.o + .group 0x00000000 0x8 binaries/namopen.o + .group 0x00000000 0x8 binaries/namopen.o + .group 0x00000000 0x8 binaries/namopen.o + .group 0x00000000 0x8 binaries/namopen.o + .group 0x00000000 0x8 binaries/namopen.o + .group 0x00000000 0x8 binaries/namopen.o + .group 0x00000000 0x8 binaries/namopen.o + .group 0x00000000 0x8 binaries/namopen.o + .group 0x00000000 0x8 binaries/namopen.o + .group 0x00000000 0x8 binaries/namopen.o + .group 0x00000000 0x8 binaries/namopen.o + .group 0x00000000 0x8 binaries/namopen.o + .group 0x00000000 0x8 binaries/namopen.o + .group 0x00000000 0x8 binaries/namopen.o + .group 0x00000000 0x8 binaries/namopen.o + .group 0x00000000 0x8 binaries/namopen.o + .group 0x00000000 0x8 binaries/namopen.o + .group 0x00000000 0x8 binaries/namopen.o + .group 0x00000000 0x8 binaries/namopen.o + .group 0x00000000 0x8 binaries/namopen.o + .group 0x00000000 0x8 binaries/namopen.o + .group 0x00000000 0x8 binaries/namopen.o + .group 0x00000000 0x8 binaries/namopen.o + .group 0x00000000 0x8 binaries/namopen.o + .group 0x00000000 0x8 binaries/namopen.o + .debug_macro 0x00000000 0x838 binaries/namopen.o + .debug_macro 0x00000000 0x58 binaries/namopen.o + .debug_macro 0x00000000 0xb2 binaries/namopen.o + .debug_macro 0x00000000 0x6a binaries/namopen.o + .debug_macro 0x00000000 0x52 binaries/namopen.o + .debug_macro 0x00000000 0x10 binaries/namopen.o + .debug_macro 0x00000000 0x16 binaries/namopen.o + .debug_macro 0x00000000 0x1c binaries/namopen.o + .debug_macro 0x00000000 0x1c binaries/namopen.o + .debug_macro 0x00000000 0x10 binaries/namopen.o + .debug_macro 0x00000000 0x28 binaries/namopen.o + .debug_macro 0x00000000 0x1c1 binaries/namopen.o + .debug_macro 0x00000000 0xa0 binaries/namopen.o + .debug_macro 0x00000000 0x10 binaries/namopen.o + .debug_macro 0x00000000 0x22 binaries/namopen.o + .debug_macro 0x00000000 0x46 binaries/namopen.o + .debug_macro 0x00000000 0xfa binaries/namopen.o + .debug_macro 0x00000000 0xdd binaries/namopen.o + .debug_macro 0x00000000 0x91 binaries/namopen.o + .debug_macro 0x00000000 0x8e binaries/namopen.o + .debug_macro 0x00000000 0x82 binaries/namopen.o + .debug_macro 0x00000000 0x2e binaries/namopen.o + .debug_macro 0x00000000 0x3a binaries/namopen.o + .debug_macro 0x00000000 0x4c binaries/namopen.o + .debug_macro 0x00000000 0x3a binaries/namopen.o + .debug_macro 0x00000000 0xa0 binaries/namopen.o + .debug_macro 0x00000000 0x34 binaries/namopen.o + .debug_macro 0x00000000 0x7c binaries/namopen.o + .debug_macro 0x00000000 0x1c binaries/namopen.o + .debug_macro 0x00000000 0xee binaries/namopen.o + .debug_macro 0x00000000 0x7c binaries/namopen.o + .debug_macro 0x00000000 0x20 binaries/namopen.o + .debug_macro 0x00000000 0x10 binaries/namopen.o + .debug_macro 0x00000000 0x1c binaries/namopen.o + .debug_macro 0x00000000 0x34 binaries/namopen.o + .debug_macro 0x00000000 0xeb binaries/namopen.o + .debug_macro 0x00000000 0x8e binaries/namopen.o + .group 0x00000000 0x8 binaries/ramclose.o + .group 0x00000000 0x8 binaries/ramclose.o + .group 0x00000000 0x8 binaries/ramclose.o + .group 0x00000000 0x8 binaries/ramclose.o + .group 0x00000000 0x8 binaries/ramclose.o + .group 0x00000000 0x8 binaries/ramclose.o + .group 0x00000000 0x8 binaries/ramclose.o + .group 0x00000000 0x8 binaries/ramclose.o + .group 0x00000000 0x8 binaries/ramclose.o + .group 0x00000000 0x8 binaries/ramclose.o + .group 0x00000000 0x8 binaries/ramclose.o + .group 0x00000000 0x8 binaries/ramclose.o + .group 0x00000000 0x8 binaries/ramclose.o + .group 0x00000000 0x8 binaries/ramclose.o + .group 0x00000000 0x8 binaries/ramclose.o + .group 0x00000000 0x8 binaries/ramclose.o + .group 0x00000000 0x8 binaries/ramclose.o + .group 0x00000000 0x8 binaries/ramclose.o + .group 0x00000000 0x8 binaries/ramclose.o + .group 0x00000000 0x8 binaries/ramclose.o + .group 0x00000000 0x8 binaries/ramclose.o + .group 0x00000000 0x8 binaries/ramclose.o + .group 0x00000000 0x8 binaries/ramclose.o + .group 0x00000000 0x8 binaries/ramclose.o + .group 0x00000000 0x8 binaries/ramclose.o + .group 0x00000000 0x8 binaries/ramclose.o + .group 0x00000000 0x8 binaries/ramclose.o + .group 0x00000000 0x8 binaries/ramclose.o + .group 0x00000000 0x8 binaries/ramclose.o + .group 0x00000000 0x8 binaries/ramclose.o + .group 0x00000000 0x8 binaries/ramclose.o + .group 0x00000000 0x8 binaries/ramclose.o + .group 0x00000000 0x8 binaries/ramclose.o + .group 0x00000000 0x8 binaries/ramclose.o + .group 0x00000000 0x8 binaries/ramclose.o + .group 0x00000000 0x8 binaries/ramclose.o + .group 0x00000000 0x8 binaries/ramclose.o + .debug_macro 0x00000000 0x838 binaries/ramclose.o + .debug_macro 0x00000000 0x58 binaries/ramclose.o + .debug_macro 0x00000000 0xb2 binaries/ramclose.o + .debug_macro 0x00000000 0x6a binaries/ramclose.o + .debug_macro 0x00000000 0x52 binaries/ramclose.o + .debug_macro 0x00000000 0x10 binaries/ramclose.o + .debug_macro 0x00000000 0x16 binaries/ramclose.o + .debug_macro 0x00000000 0x1c binaries/ramclose.o + .debug_macro 0x00000000 0x1c binaries/ramclose.o + .debug_macro 0x00000000 0x10 binaries/ramclose.o + .debug_macro 0x00000000 0x28 binaries/ramclose.o + .debug_macro 0x00000000 0x1c1 binaries/ramclose.o + .debug_macro 0x00000000 0xa0 binaries/ramclose.o + .debug_macro 0x00000000 0x10 binaries/ramclose.o + .debug_macro 0x00000000 0x22 binaries/ramclose.o + .debug_macro 0x00000000 0x46 binaries/ramclose.o + .debug_macro 0x00000000 0xfa binaries/ramclose.o + .debug_macro 0x00000000 0xdd binaries/ramclose.o + .debug_macro 0x00000000 0x91 binaries/ramclose.o + .debug_macro 0x00000000 0x8e binaries/ramclose.o + .debug_macro 0x00000000 0x82 binaries/ramclose.o + .debug_macro 0x00000000 0x2e binaries/ramclose.o + .debug_macro 0x00000000 0x3a binaries/ramclose.o + .debug_macro 0x00000000 0x4c binaries/ramclose.o + .debug_macro 0x00000000 0x3a binaries/ramclose.o + .debug_macro 0x00000000 0xa0 binaries/ramclose.o + .debug_macro 0x00000000 0x34 binaries/ramclose.o + .debug_macro 0x00000000 0x7c binaries/ramclose.o + .debug_macro 0x00000000 0x1c binaries/ramclose.o + .debug_macro 0x00000000 0xee binaries/ramclose.o + .debug_macro 0x00000000 0x7c binaries/ramclose.o + .debug_macro 0x00000000 0x20 binaries/ramclose.o + .debug_macro 0x00000000 0x10 binaries/ramclose.o + .debug_macro 0x00000000 0x1c binaries/ramclose.o + .debug_macro 0x00000000 0x34 binaries/ramclose.o + .debug_macro 0x00000000 0xeb binaries/ramclose.o + .debug_macro 0x00000000 0x8e binaries/ramclose.o + .group 0x00000000 0x8 binaries/raminit.o + .group 0x00000000 0x8 binaries/raminit.o + .group 0x00000000 0x8 binaries/raminit.o + .group 0x00000000 0x8 binaries/raminit.o + .group 0x00000000 0x8 binaries/raminit.o + .group 0x00000000 0x8 binaries/raminit.o + .group 0x00000000 0x8 binaries/raminit.o + .group 0x00000000 0x8 binaries/raminit.o + .group 0x00000000 0x8 binaries/raminit.o + .group 0x00000000 0x8 binaries/raminit.o + .group 0x00000000 0x8 binaries/raminit.o + .group 0x00000000 0x8 binaries/raminit.o + .group 0x00000000 0x8 binaries/raminit.o + .group 0x00000000 0x8 binaries/raminit.o + .group 0x00000000 0x8 binaries/raminit.o + .group 0x00000000 0x8 binaries/raminit.o + .group 0x00000000 0x8 binaries/raminit.o + .group 0x00000000 0x8 binaries/raminit.o + .group 0x00000000 0x8 binaries/raminit.o + .group 0x00000000 0x8 binaries/raminit.o + .group 0x00000000 0x8 binaries/raminit.o + .group 0x00000000 0x8 binaries/raminit.o + .group 0x00000000 0x8 binaries/raminit.o + .group 0x00000000 0x8 binaries/raminit.o + .group 0x00000000 0x8 binaries/raminit.o + .group 0x00000000 0x8 binaries/raminit.o + .group 0x00000000 0x8 binaries/raminit.o + .group 0x00000000 0x8 binaries/raminit.o + .group 0x00000000 0x8 binaries/raminit.o + .group 0x00000000 0x8 binaries/raminit.o + .group 0x00000000 0x8 binaries/raminit.o + .group 0x00000000 0x8 binaries/raminit.o + .group 0x00000000 0x8 binaries/raminit.o + .group 0x00000000 0x8 binaries/raminit.o + .group 0x00000000 0x8 binaries/raminit.o + .group 0x00000000 0x8 binaries/raminit.o + .group 0x00000000 0x8 binaries/raminit.o + .group 0x00000000 0x8 binaries/raminit.o + .debug_macro 0x00000000 0x838 binaries/raminit.o + .debug_macro 0x00000000 0x58 binaries/raminit.o + .debug_macro 0x00000000 0xb2 binaries/raminit.o + .debug_macro 0x00000000 0x6a binaries/raminit.o + .debug_macro 0x00000000 0x52 binaries/raminit.o + .debug_macro 0x00000000 0x10 binaries/raminit.o + .debug_macro 0x00000000 0x16 binaries/raminit.o + .debug_macro 0x00000000 0x1c binaries/raminit.o + .debug_macro 0x00000000 0x1c binaries/raminit.o + .debug_macro 0x00000000 0x10 binaries/raminit.o + .debug_macro 0x00000000 0x28 binaries/raminit.o + .debug_macro 0x00000000 0x1c1 binaries/raminit.o + .debug_macro 0x00000000 0xa0 binaries/raminit.o + .debug_macro 0x00000000 0x10 binaries/raminit.o + .debug_macro 0x00000000 0x22 binaries/raminit.o + .debug_macro 0x00000000 0x46 binaries/raminit.o + .debug_macro 0x00000000 0xfa binaries/raminit.o + .debug_macro 0x00000000 0xdd binaries/raminit.o + .debug_macro 0x00000000 0x91 binaries/raminit.o + .debug_macro 0x00000000 0x8e binaries/raminit.o + .debug_macro 0x00000000 0x82 binaries/raminit.o + .debug_macro 0x00000000 0x2e binaries/raminit.o + .debug_macro 0x00000000 0x3a binaries/raminit.o + .debug_macro 0x00000000 0x4c binaries/raminit.o + .debug_macro 0x00000000 0x3a binaries/raminit.o + .debug_macro 0x00000000 0xa0 binaries/raminit.o + .debug_macro 0x00000000 0x34 binaries/raminit.o + .debug_macro 0x00000000 0x7c binaries/raminit.o + .debug_macro 0x00000000 0x1c binaries/raminit.o + .debug_macro 0x00000000 0xee binaries/raminit.o + .debug_macro 0x00000000 0x7c binaries/raminit.o + .debug_macro 0x00000000 0x20 binaries/raminit.o + .debug_macro 0x00000000 0x10 binaries/raminit.o + .debug_macro 0x00000000 0x1c binaries/raminit.o + .debug_macro 0x00000000 0x34 binaries/raminit.o + .debug_macro 0x00000000 0xeb binaries/raminit.o + .debug_macro 0x00000000 0x8e binaries/raminit.o + .group 0x00000000 0x8 binaries/ramopen.o + .group 0x00000000 0x8 binaries/ramopen.o + .group 0x00000000 0x8 binaries/ramopen.o + .group 0x00000000 0x8 binaries/ramopen.o + .group 0x00000000 0x8 binaries/ramopen.o + .group 0x00000000 0x8 binaries/ramopen.o + .group 0x00000000 0x8 binaries/ramopen.o + .group 0x00000000 0x8 binaries/ramopen.o + .group 0x00000000 0x8 binaries/ramopen.o + .group 0x00000000 0x8 binaries/ramopen.o + .group 0x00000000 0x8 binaries/ramopen.o + .group 0x00000000 0x8 binaries/ramopen.o + .group 0x00000000 0x8 binaries/ramopen.o + .group 0x00000000 0x8 binaries/ramopen.o + .group 0x00000000 0x8 binaries/ramopen.o + .group 0x00000000 0x8 binaries/ramopen.o + .group 0x00000000 0x8 binaries/ramopen.o + .group 0x00000000 0x8 binaries/ramopen.o + .group 0x00000000 0x8 binaries/ramopen.o + .group 0x00000000 0x8 binaries/ramopen.o + .group 0x00000000 0x8 binaries/ramopen.o + .group 0x00000000 0x8 binaries/ramopen.o + .group 0x00000000 0x8 binaries/ramopen.o + .group 0x00000000 0x8 binaries/ramopen.o + .group 0x00000000 0x8 binaries/ramopen.o + .group 0x00000000 0x8 binaries/ramopen.o + .group 0x00000000 0x8 binaries/ramopen.o + .group 0x00000000 0x8 binaries/ramopen.o + .group 0x00000000 0x8 binaries/ramopen.o + .group 0x00000000 0x8 binaries/ramopen.o + .group 0x00000000 0x8 binaries/ramopen.o + .group 0x00000000 0x8 binaries/ramopen.o + .group 0x00000000 0x8 binaries/ramopen.o + .group 0x00000000 0x8 binaries/ramopen.o + .group 0x00000000 0x8 binaries/ramopen.o + .group 0x00000000 0x8 binaries/ramopen.o + .group 0x00000000 0x8 binaries/ramopen.o + .debug_macro 0x00000000 0x838 binaries/ramopen.o + .debug_macro 0x00000000 0x58 binaries/ramopen.o + .debug_macro 0x00000000 0xb2 binaries/ramopen.o + .debug_macro 0x00000000 0x6a binaries/ramopen.o + .debug_macro 0x00000000 0x52 binaries/ramopen.o + .debug_macro 0x00000000 0x10 binaries/ramopen.o + .debug_macro 0x00000000 0x16 binaries/ramopen.o + .debug_macro 0x00000000 0x1c binaries/ramopen.o + .debug_macro 0x00000000 0x1c binaries/ramopen.o + .debug_macro 0x00000000 0x10 binaries/ramopen.o + .debug_macro 0x00000000 0x28 binaries/ramopen.o + .debug_macro 0x00000000 0x1c1 binaries/ramopen.o + .debug_macro 0x00000000 0xa0 binaries/ramopen.o + .debug_macro 0x00000000 0x10 binaries/ramopen.o + .debug_macro 0x00000000 0x22 binaries/ramopen.o + .debug_macro 0x00000000 0x46 binaries/ramopen.o + .debug_macro 0x00000000 0xfa binaries/ramopen.o + .debug_macro 0x00000000 0xdd binaries/ramopen.o + .debug_macro 0x00000000 0x91 binaries/ramopen.o + .debug_macro 0x00000000 0x8e binaries/ramopen.o + .debug_macro 0x00000000 0x82 binaries/ramopen.o + .debug_macro 0x00000000 0x2e binaries/ramopen.o + .debug_macro 0x00000000 0x3a binaries/ramopen.o + .debug_macro 0x00000000 0x4c binaries/ramopen.o + .debug_macro 0x00000000 0x3a binaries/ramopen.o + .debug_macro 0x00000000 0xa0 binaries/ramopen.o + .debug_macro 0x00000000 0x34 binaries/ramopen.o + .debug_macro 0x00000000 0x7c binaries/ramopen.o + .debug_macro 0x00000000 0x1c binaries/ramopen.o + .debug_macro 0x00000000 0xee binaries/ramopen.o + .debug_macro 0x00000000 0x7c binaries/ramopen.o + .debug_macro 0x00000000 0x20 binaries/ramopen.o + .debug_macro 0x00000000 0x10 binaries/ramopen.o + .debug_macro 0x00000000 0x1c binaries/ramopen.o + .debug_macro 0x00000000 0x34 binaries/ramopen.o + .debug_macro 0x00000000 0xeb binaries/ramopen.o + .debug_macro 0x00000000 0x8e binaries/ramopen.o + .group 0x00000000 0x8 binaries/ramread.o + .group 0x00000000 0x8 binaries/ramread.o + .group 0x00000000 0x8 binaries/ramread.o + .group 0x00000000 0x8 binaries/ramread.o + .group 0x00000000 0x8 binaries/ramread.o + .group 0x00000000 0x8 binaries/ramread.o + .group 0x00000000 0x8 binaries/ramread.o + .group 0x00000000 0x8 binaries/ramread.o + .group 0x00000000 0x8 binaries/ramread.o + .group 0x00000000 0x8 binaries/ramread.o + .group 0x00000000 0x8 binaries/ramread.o + .group 0x00000000 0x8 binaries/ramread.o + .group 0x00000000 0x8 binaries/ramread.o + .group 0x00000000 0x8 binaries/ramread.o + .group 0x00000000 0x8 binaries/ramread.o + .group 0x00000000 0x8 binaries/ramread.o + .group 0x00000000 0x8 binaries/ramread.o + .group 0x00000000 0x8 binaries/ramread.o + .group 0x00000000 0x8 binaries/ramread.o + .group 0x00000000 0x8 binaries/ramread.o + .group 0x00000000 0x8 binaries/ramread.o + .group 0x00000000 0x8 binaries/ramread.o + .group 0x00000000 0x8 binaries/ramread.o + .group 0x00000000 0x8 binaries/ramread.o + .group 0x00000000 0x8 binaries/ramread.o + .group 0x00000000 0x8 binaries/ramread.o + .group 0x00000000 0x8 binaries/ramread.o + .group 0x00000000 0x8 binaries/ramread.o + .group 0x00000000 0x8 binaries/ramread.o + .group 0x00000000 0x8 binaries/ramread.o + .group 0x00000000 0x8 binaries/ramread.o + .group 0x00000000 0x8 binaries/ramread.o + .group 0x00000000 0x8 binaries/ramread.o + .group 0x00000000 0x8 binaries/ramread.o + .group 0x00000000 0x8 binaries/ramread.o + .group 0x00000000 0x8 binaries/ramread.o + .group 0x00000000 0x8 binaries/ramread.o + .group 0x00000000 0x8 binaries/ramread.o + .debug_macro 0x00000000 0x838 binaries/ramread.o + .debug_macro 0x00000000 0x58 binaries/ramread.o + .debug_macro 0x00000000 0xb2 binaries/ramread.o + .debug_macro 0x00000000 0x6a binaries/ramread.o + .debug_macro 0x00000000 0x52 binaries/ramread.o + .debug_macro 0x00000000 0x10 binaries/ramread.o + .debug_macro 0x00000000 0x16 binaries/ramread.o + .debug_macro 0x00000000 0x1c binaries/ramread.o + .debug_macro 0x00000000 0x1c binaries/ramread.o + .debug_macro 0x00000000 0x10 binaries/ramread.o + .debug_macro 0x00000000 0x28 binaries/ramread.o + .debug_macro 0x00000000 0x1c1 binaries/ramread.o + .debug_macro 0x00000000 0xa0 binaries/ramread.o + .debug_macro 0x00000000 0x10 binaries/ramread.o + .debug_macro 0x00000000 0x22 binaries/ramread.o + .debug_macro 0x00000000 0x46 binaries/ramread.o + .debug_macro 0x00000000 0xfa binaries/ramread.o + .debug_macro 0x00000000 0xdd binaries/ramread.o + .debug_macro 0x00000000 0x91 binaries/ramread.o + .debug_macro 0x00000000 0x8e binaries/ramread.o + .debug_macro 0x00000000 0x82 binaries/ramread.o + .debug_macro 0x00000000 0x2e binaries/ramread.o + .debug_macro 0x00000000 0x3a binaries/ramread.o + .debug_macro 0x00000000 0x4c binaries/ramread.o + .debug_macro 0x00000000 0x3a binaries/ramread.o + .debug_macro 0x00000000 0xa0 binaries/ramread.o + .debug_macro 0x00000000 0x34 binaries/ramread.o + .debug_macro 0x00000000 0x7c binaries/ramread.o + .debug_macro 0x00000000 0x1c binaries/ramread.o + .debug_macro 0x00000000 0xee binaries/ramread.o + .debug_macro 0x00000000 0x7c binaries/ramread.o + .debug_macro 0x00000000 0x20 binaries/ramread.o + .debug_macro 0x00000000 0x10 binaries/ramread.o + .debug_macro 0x00000000 0x1c binaries/ramread.o + .debug_macro 0x00000000 0x34 binaries/ramread.o + .debug_macro 0x00000000 0xeb binaries/ramread.o + .debug_macro 0x00000000 0x8e binaries/ramread.o + .debug_macro 0x00000000 0x10 binaries/ramread.o + .group 0x00000000 0x8 binaries/ramwrite.o + .group 0x00000000 0x8 binaries/ramwrite.o + .group 0x00000000 0x8 binaries/ramwrite.o + .group 0x00000000 0x8 binaries/ramwrite.o + .group 0x00000000 0x8 binaries/ramwrite.o + .group 0x00000000 0x8 binaries/ramwrite.o + .group 0x00000000 0x8 binaries/ramwrite.o + .group 0x00000000 0x8 binaries/ramwrite.o + .group 0x00000000 0x8 binaries/ramwrite.o + .group 0x00000000 0x8 binaries/ramwrite.o + .group 0x00000000 0x8 binaries/ramwrite.o + .group 0x00000000 0x8 binaries/ramwrite.o + .group 0x00000000 0x8 binaries/ramwrite.o + .group 0x00000000 0x8 binaries/ramwrite.o + .group 0x00000000 0x8 binaries/ramwrite.o + .group 0x00000000 0x8 binaries/ramwrite.o + .group 0x00000000 0x8 binaries/ramwrite.o + .group 0x00000000 0x8 binaries/ramwrite.o + .group 0x00000000 0x8 binaries/ramwrite.o + .group 0x00000000 0x8 binaries/ramwrite.o + .group 0x00000000 0x8 binaries/ramwrite.o + .group 0x00000000 0x8 binaries/ramwrite.o + .group 0x00000000 0x8 binaries/ramwrite.o + .group 0x00000000 0x8 binaries/ramwrite.o + .group 0x00000000 0x8 binaries/ramwrite.o + .group 0x00000000 0x8 binaries/ramwrite.o + .group 0x00000000 0x8 binaries/ramwrite.o + .group 0x00000000 0x8 binaries/ramwrite.o + .group 0x00000000 0x8 binaries/ramwrite.o + .group 0x00000000 0x8 binaries/ramwrite.o + .group 0x00000000 0x8 binaries/ramwrite.o + .group 0x00000000 0x8 binaries/ramwrite.o + .group 0x00000000 0x8 binaries/ramwrite.o + .group 0x00000000 0x8 binaries/ramwrite.o + .group 0x00000000 0x8 binaries/ramwrite.o + .group 0x00000000 0x8 binaries/ramwrite.o + .group 0x00000000 0x8 binaries/ramwrite.o + .group 0x00000000 0x8 binaries/ramwrite.o + .debug_macro 0x00000000 0x838 binaries/ramwrite.o + .debug_macro 0x00000000 0x58 binaries/ramwrite.o + .debug_macro 0x00000000 0xb2 binaries/ramwrite.o + .debug_macro 0x00000000 0x6a binaries/ramwrite.o + .debug_macro 0x00000000 0x52 binaries/ramwrite.o + .debug_macro 0x00000000 0x10 binaries/ramwrite.o + .debug_macro 0x00000000 0x16 binaries/ramwrite.o + .debug_macro 0x00000000 0x1c binaries/ramwrite.o + .debug_macro 0x00000000 0x1c binaries/ramwrite.o + .debug_macro 0x00000000 0x10 binaries/ramwrite.o + .debug_macro 0x00000000 0x28 binaries/ramwrite.o + .debug_macro 0x00000000 0x1c1 binaries/ramwrite.o + .debug_macro 0x00000000 0xa0 binaries/ramwrite.o + .debug_macro 0x00000000 0x10 binaries/ramwrite.o + .debug_macro 0x00000000 0x22 binaries/ramwrite.o + .debug_macro 0x00000000 0x46 binaries/ramwrite.o + .debug_macro 0x00000000 0xfa binaries/ramwrite.o + .debug_macro 0x00000000 0xdd binaries/ramwrite.o + .debug_macro 0x00000000 0x91 binaries/ramwrite.o + .debug_macro 0x00000000 0x8e binaries/ramwrite.o + .debug_macro 0x00000000 0x82 binaries/ramwrite.o + .debug_macro 0x00000000 0x2e binaries/ramwrite.o + .debug_macro 0x00000000 0x3a binaries/ramwrite.o + .debug_macro 0x00000000 0x4c binaries/ramwrite.o + .debug_macro 0x00000000 0x3a binaries/ramwrite.o + .debug_macro 0x00000000 0xa0 binaries/ramwrite.o + .debug_macro 0x00000000 0x34 binaries/ramwrite.o + .debug_macro 0x00000000 0x7c binaries/ramwrite.o + .debug_macro 0x00000000 0x1c binaries/ramwrite.o + .debug_macro 0x00000000 0xee binaries/ramwrite.o + .debug_macro 0x00000000 0x7c binaries/ramwrite.o + .debug_macro 0x00000000 0x20 binaries/ramwrite.o + .debug_macro 0x00000000 0x10 binaries/ramwrite.o + .debug_macro 0x00000000 0x1c binaries/ramwrite.o + .debug_macro 0x00000000 0x34 binaries/ramwrite.o + .debug_macro 0x00000000 0xeb binaries/ramwrite.o + .debug_macro 0x00000000 0x8e binaries/ramwrite.o + .debug_macro 0x00000000 0x10 binaries/ramwrite.o + .group 0x00000000 0x8 binaries/lfdballoc.o + .group 0x00000000 0x8 binaries/lfdballoc.o + .group 0x00000000 0x8 binaries/lfdballoc.o + .group 0x00000000 0x8 binaries/lfdballoc.o + .group 0x00000000 0x8 binaries/lfdballoc.o + .group 0x00000000 0x8 binaries/lfdballoc.o + .group 0x00000000 0x8 binaries/lfdballoc.o + .group 0x00000000 0x8 binaries/lfdballoc.o + .group 0x00000000 0x8 binaries/lfdballoc.o + .group 0x00000000 0x8 binaries/lfdballoc.o + .group 0x00000000 0x8 binaries/lfdballoc.o + .group 0x00000000 0x8 binaries/lfdballoc.o + .group 0x00000000 0x8 binaries/lfdballoc.o + .group 0x00000000 0x8 binaries/lfdballoc.o + .group 0x00000000 0x8 binaries/lfdballoc.o + .group 0x00000000 0x8 binaries/lfdballoc.o + .group 0x00000000 0x8 binaries/lfdballoc.o + .group 0x00000000 0x8 binaries/lfdballoc.o + .group 0x00000000 0x8 binaries/lfdballoc.o + .group 0x00000000 0x8 binaries/lfdballoc.o + .group 0x00000000 0x8 binaries/lfdballoc.o + .group 0x00000000 0x8 binaries/lfdballoc.o + .group 0x00000000 0x8 binaries/lfdballoc.o + .group 0x00000000 0x8 binaries/lfdballoc.o + .group 0x00000000 0x8 binaries/lfdballoc.o + .group 0x00000000 0x8 binaries/lfdballoc.o + .group 0x00000000 0x8 binaries/lfdballoc.o + .group 0x00000000 0x8 binaries/lfdballoc.o + .group 0x00000000 0x8 binaries/lfdballoc.o + .group 0x00000000 0x8 binaries/lfdballoc.o + .group 0x00000000 0x8 binaries/lfdballoc.o + .group 0x00000000 0x8 binaries/lfdballoc.o + .group 0x00000000 0x8 binaries/lfdballoc.o + .group 0x00000000 0x8 binaries/lfdballoc.o + .group 0x00000000 0x8 binaries/lfdballoc.o + .group 0x00000000 0x8 binaries/lfdballoc.o + .group 0x00000000 0x8 binaries/lfdballoc.o + .debug_macro 0x00000000 0x838 binaries/lfdballoc.o + .debug_macro 0x00000000 0x58 binaries/lfdballoc.o + .debug_macro 0x00000000 0xb2 binaries/lfdballoc.o + .debug_macro 0x00000000 0x6a binaries/lfdballoc.o + .debug_macro 0x00000000 0x52 binaries/lfdballoc.o + .debug_macro 0x00000000 0x10 binaries/lfdballoc.o + .debug_macro 0x00000000 0x16 binaries/lfdballoc.o + .debug_macro 0x00000000 0x1c binaries/lfdballoc.o + .debug_macro 0x00000000 0x1c binaries/lfdballoc.o + .debug_macro 0x00000000 0x10 binaries/lfdballoc.o + .debug_macro 0x00000000 0x28 binaries/lfdballoc.o + .debug_macro 0x00000000 0x1c1 binaries/lfdballoc.o + .debug_macro 0x00000000 0xa0 binaries/lfdballoc.o + .debug_macro 0x00000000 0x10 binaries/lfdballoc.o + .debug_macro 0x00000000 0x22 binaries/lfdballoc.o + .debug_macro 0x00000000 0x46 binaries/lfdballoc.o + .debug_macro 0x00000000 0xfa binaries/lfdballoc.o + .debug_macro 0x00000000 0xdd binaries/lfdballoc.o + .debug_macro 0x00000000 0x91 binaries/lfdballoc.o + .debug_macro 0x00000000 0x8e binaries/lfdballoc.o + .debug_macro 0x00000000 0x82 binaries/lfdballoc.o + .debug_macro 0x00000000 0x2e binaries/lfdballoc.o + .debug_macro 0x00000000 0x3a binaries/lfdballoc.o + .debug_macro 0x00000000 0x4c binaries/lfdballoc.o + .debug_macro 0x00000000 0x3a binaries/lfdballoc.o + .debug_macro 0x00000000 0xa0 binaries/lfdballoc.o + .debug_macro 0x00000000 0x34 binaries/lfdballoc.o + .debug_macro 0x00000000 0x7c binaries/lfdballoc.o + .debug_macro 0x00000000 0x1c binaries/lfdballoc.o + .debug_macro 0x00000000 0xee binaries/lfdballoc.o + .debug_macro 0x00000000 0x7c binaries/lfdballoc.o + .debug_macro 0x00000000 0x20 binaries/lfdballoc.o + .debug_macro 0x00000000 0x10 binaries/lfdballoc.o + .debug_macro 0x00000000 0x1c binaries/lfdballoc.o + .debug_macro 0x00000000 0x34 binaries/lfdballoc.o + .debug_macro 0x00000000 0xeb binaries/lfdballoc.o + .debug_macro 0x00000000 0x8e binaries/lfdballoc.o + .group 0x00000000 0x8 binaries/lfdbfree.o + .group 0x00000000 0x8 binaries/lfdbfree.o + .group 0x00000000 0x8 binaries/lfdbfree.o + .group 0x00000000 0x8 binaries/lfdbfree.o + .group 0x00000000 0x8 binaries/lfdbfree.o + .group 0x00000000 0x8 binaries/lfdbfree.o + .group 0x00000000 0x8 binaries/lfdbfree.o + .group 0x00000000 0x8 binaries/lfdbfree.o + .group 0x00000000 0x8 binaries/lfdbfree.o + .group 0x00000000 0x8 binaries/lfdbfree.o + .group 0x00000000 0x8 binaries/lfdbfree.o + .group 0x00000000 0x8 binaries/lfdbfree.o + .group 0x00000000 0x8 binaries/lfdbfree.o + .group 0x00000000 0x8 binaries/lfdbfree.o + .group 0x00000000 0x8 binaries/lfdbfree.o + .group 0x00000000 0x8 binaries/lfdbfree.o + .group 0x00000000 0x8 binaries/lfdbfree.o + .group 0x00000000 0x8 binaries/lfdbfree.o + .group 0x00000000 0x8 binaries/lfdbfree.o + .group 0x00000000 0x8 binaries/lfdbfree.o + .group 0x00000000 0x8 binaries/lfdbfree.o + .group 0x00000000 0x8 binaries/lfdbfree.o + .group 0x00000000 0x8 binaries/lfdbfree.o + .group 0x00000000 0x8 binaries/lfdbfree.o + .group 0x00000000 0x8 binaries/lfdbfree.o + .group 0x00000000 0x8 binaries/lfdbfree.o + .group 0x00000000 0x8 binaries/lfdbfree.o + .group 0x00000000 0x8 binaries/lfdbfree.o + .group 0x00000000 0x8 binaries/lfdbfree.o + .group 0x00000000 0x8 binaries/lfdbfree.o + .group 0x00000000 0x8 binaries/lfdbfree.o + .group 0x00000000 0x8 binaries/lfdbfree.o + .group 0x00000000 0x8 binaries/lfdbfree.o + .group 0x00000000 0x8 binaries/lfdbfree.o + .group 0x00000000 0x8 binaries/lfdbfree.o + .group 0x00000000 0x8 binaries/lfdbfree.o + .group 0x00000000 0x8 binaries/lfdbfree.o + .debug_macro 0x00000000 0x838 binaries/lfdbfree.o + .debug_macro 0x00000000 0x58 binaries/lfdbfree.o + .debug_macro 0x00000000 0xb2 binaries/lfdbfree.o + .debug_macro 0x00000000 0x6a binaries/lfdbfree.o + .debug_macro 0x00000000 0x52 binaries/lfdbfree.o + .debug_macro 0x00000000 0x10 binaries/lfdbfree.o + .debug_macro 0x00000000 0x16 binaries/lfdbfree.o + .debug_macro 0x00000000 0x1c binaries/lfdbfree.o + .debug_macro 0x00000000 0x1c binaries/lfdbfree.o + .debug_macro 0x00000000 0x10 binaries/lfdbfree.o + .debug_macro 0x00000000 0x28 binaries/lfdbfree.o + .debug_macro 0x00000000 0x1c1 binaries/lfdbfree.o + .debug_macro 0x00000000 0xa0 binaries/lfdbfree.o + .debug_macro 0x00000000 0x10 binaries/lfdbfree.o + .debug_macro 0x00000000 0x22 binaries/lfdbfree.o + .debug_macro 0x00000000 0x46 binaries/lfdbfree.o + .debug_macro 0x00000000 0xfa binaries/lfdbfree.o + .debug_macro 0x00000000 0xdd binaries/lfdbfree.o + .debug_macro 0x00000000 0x91 binaries/lfdbfree.o + .debug_macro 0x00000000 0x8e binaries/lfdbfree.o + .debug_macro 0x00000000 0x82 binaries/lfdbfree.o + .debug_macro 0x00000000 0x2e binaries/lfdbfree.o + .debug_macro 0x00000000 0x3a binaries/lfdbfree.o + .debug_macro 0x00000000 0x4c binaries/lfdbfree.o + .debug_macro 0x00000000 0x3a binaries/lfdbfree.o + .debug_macro 0x00000000 0xa0 binaries/lfdbfree.o + .debug_macro 0x00000000 0x34 binaries/lfdbfree.o + .debug_macro 0x00000000 0x7c binaries/lfdbfree.o + .debug_macro 0x00000000 0x1c binaries/lfdbfree.o + .debug_macro 0x00000000 0xee binaries/lfdbfree.o + .debug_macro 0x00000000 0x7c binaries/lfdbfree.o + .debug_macro 0x00000000 0x20 binaries/lfdbfree.o + .debug_macro 0x00000000 0x10 binaries/lfdbfree.o + .debug_macro 0x00000000 0x1c binaries/lfdbfree.o + .debug_macro 0x00000000 0x34 binaries/lfdbfree.o + .debug_macro 0x00000000 0xeb binaries/lfdbfree.o + .debug_macro 0x00000000 0x8e binaries/lfdbfree.o + .group 0x00000000 0x8 binaries/lfflush.o + .group 0x00000000 0x8 binaries/lfflush.o + .group 0x00000000 0x8 binaries/lfflush.o + .group 0x00000000 0x8 binaries/lfflush.o + .group 0x00000000 0x8 binaries/lfflush.o + .group 0x00000000 0x8 binaries/lfflush.o + .group 0x00000000 0x8 binaries/lfflush.o + .group 0x00000000 0x8 binaries/lfflush.o + .group 0x00000000 0x8 binaries/lfflush.o + .group 0x00000000 0x8 binaries/lfflush.o + .group 0x00000000 0x8 binaries/lfflush.o + .group 0x00000000 0x8 binaries/lfflush.o + .group 0x00000000 0x8 binaries/lfflush.o + .group 0x00000000 0x8 binaries/lfflush.o + .group 0x00000000 0x8 binaries/lfflush.o + .group 0x00000000 0x8 binaries/lfflush.o + .group 0x00000000 0x8 binaries/lfflush.o + .group 0x00000000 0x8 binaries/lfflush.o + .group 0x00000000 0x8 binaries/lfflush.o + .group 0x00000000 0x8 binaries/lfflush.o + .group 0x00000000 0x8 binaries/lfflush.o + .group 0x00000000 0x8 binaries/lfflush.o + .group 0x00000000 0x8 binaries/lfflush.o + .group 0x00000000 0x8 binaries/lfflush.o + .group 0x00000000 0x8 binaries/lfflush.o + .group 0x00000000 0x8 binaries/lfflush.o + .group 0x00000000 0x8 binaries/lfflush.o + .group 0x00000000 0x8 binaries/lfflush.o + .group 0x00000000 0x8 binaries/lfflush.o + .group 0x00000000 0x8 binaries/lfflush.o + .group 0x00000000 0x8 binaries/lfflush.o + .group 0x00000000 0x8 binaries/lfflush.o + .group 0x00000000 0x8 binaries/lfflush.o + .group 0x00000000 0x8 binaries/lfflush.o + .group 0x00000000 0x8 binaries/lfflush.o + .group 0x00000000 0x8 binaries/lfflush.o + .group 0x00000000 0x8 binaries/lfflush.o + .debug_macro 0x00000000 0x838 binaries/lfflush.o + .debug_macro 0x00000000 0x58 binaries/lfflush.o + .debug_macro 0x00000000 0xb2 binaries/lfflush.o + .debug_macro 0x00000000 0x6a binaries/lfflush.o + .debug_macro 0x00000000 0x52 binaries/lfflush.o + .debug_macro 0x00000000 0x10 binaries/lfflush.o + .debug_macro 0x00000000 0x16 binaries/lfflush.o + .debug_macro 0x00000000 0x1c binaries/lfflush.o + .debug_macro 0x00000000 0x1c binaries/lfflush.o + .debug_macro 0x00000000 0x10 binaries/lfflush.o + .debug_macro 0x00000000 0x28 binaries/lfflush.o + .debug_macro 0x00000000 0x1c1 binaries/lfflush.o + .debug_macro 0x00000000 0xa0 binaries/lfflush.o + .debug_macro 0x00000000 0x10 binaries/lfflush.o + .debug_macro 0x00000000 0x22 binaries/lfflush.o + .debug_macro 0x00000000 0x46 binaries/lfflush.o + .debug_macro 0x00000000 0xfa binaries/lfflush.o + .debug_macro 0x00000000 0xdd binaries/lfflush.o + .debug_macro 0x00000000 0x91 binaries/lfflush.o + .debug_macro 0x00000000 0x8e binaries/lfflush.o + .debug_macro 0x00000000 0x82 binaries/lfflush.o + .debug_macro 0x00000000 0x2e binaries/lfflush.o + .debug_macro 0x00000000 0x3a binaries/lfflush.o + .debug_macro 0x00000000 0x4c binaries/lfflush.o + .debug_macro 0x00000000 0x3a binaries/lfflush.o + .debug_macro 0x00000000 0xa0 binaries/lfflush.o + .debug_macro 0x00000000 0x34 binaries/lfflush.o + .debug_macro 0x00000000 0x7c binaries/lfflush.o + .debug_macro 0x00000000 0x1c binaries/lfflush.o + .debug_macro 0x00000000 0xee binaries/lfflush.o + .debug_macro 0x00000000 0x7c binaries/lfflush.o + .debug_macro 0x00000000 0x20 binaries/lfflush.o + .debug_macro 0x00000000 0x10 binaries/lfflush.o + .debug_macro 0x00000000 0x1c binaries/lfflush.o + .debug_macro 0x00000000 0x34 binaries/lfflush.o + .debug_macro 0x00000000 0xeb binaries/lfflush.o + .debug_macro 0x00000000 0x8e binaries/lfflush.o + .group 0x00000000 0x8 binaries/lfgetmode.o + .group 0x00000000 0x8 binaries/lfgetmode.o + .group 0x00000000 0x8 binaries/lfgetmode.o + .group 0x00000000 0x8 binaries/lfgetmode.o + .group 0x00000000 0x8 binaries/lfgetmode.o + .group 0x00000000 0x8 binaries/lfgetmode.o + .group 0x00000000 0x8 binaries/lfgetmode.o + .group 0x00000000 0x8 binaries/lfgetmode.o + .group 0x00000000 0x8 binaries/lfgetmode.o + .group 0x00000000 0x8 binaries/lfgetmode.o + .group 0x00000000 0x8 binaries/lfgetmode.o + .group 0x00000000 0x8 binaries/lfgetmode.o + .group 0x00000000 0x8 binaries/lfgetmode.o + .group 0x00000000 0x8 binaries/lfgetmode.o + .group 0x00000000 0x8 binaries/lfgetmode.o + .group 0x00000000 0x8 binaries/lfgetmode.o + .group 0x00000000 0x8 binaries/lfgetmode.o + .group 0x00000000 0x8 binaries/lfgetmode.o + .group 0x00000000 0x8 binaries/lfgetmode.o + .group 0x00000000 0x8 binaries/lfgetmode.o + .group 0x00000000 0x8 binaries/lfgetmode.o + .group 0x00000000 0x8 binaries/lfgetmode.o + .group 0x00000000 0x8 binaries/lfgetmode.o + .group 0x00000000 0x8 binaries/lfgetmode.o + .group 0x00000000 0x8 binaries/lfgetmode.o + .group 0x00000000 0x8 binaries/lfgetmode.o + .group 0x00000000 0x8 binaries/lfgetmode.o + .group 0x00000000 0x8 binaries/lfgetmode.o + .group 0x00000000 0x8 binaries/lfgetmode.o + .group 0x00000000 0x8 binaries/lfgetmode.o + .group 0x00000000 0x8 binaries/lfgetmode.o + .group 0x00000000 0x8 binaries/lfgetmode.o + .group 0x00000000 0x8 binaries/lfgetmode.o + .group 0x00000000 0x8 binaries/lfgetmode.o + .group 0x00000000 0x8 binaries/lfgetmode.o + .group 0x00000000 0x8 binaries/lfgetmode.o + .group 0x00000000 0x8 binaries/lfgetmode.o + .debug_macro 0x00000000 0x838 binaries/lfgetmode.o + .debug_macro 0x00000000 0x58 binaries/lfgetmode.o + .debug_macro 0x00000000 0xb2 binaries/lfgetmode.o + .debug_macro 0x00000000 0x6a binaries/lfgetmode.o + .debug_macro 0x00000000 0x52 binaries/lfgetmode.o + .debug_macro 0x00000000 0x10 binaries/lfgetmode.o + .debug_macro 0x00000000 0x16 binaries/lfgetmode.o + .debug_macro 0x00000000 0x1c binaries/lfgetmode.o + .debug_macro 0x00000000 0x1c binaries/lfgetmode.o + .debug_macro 0x00000000 0x10 binaries/lfgetmode.o + .debug_macro 0x00000000 0x28 binaries/lfgetmode.o + .debug_macro 0x00000000 0x1c1 binaries/lfgetmode.o + .debug_macro 0x00000000 0xa0 binaries/lfgetmode.o + .debug_macro 0x00000000 0x10 binaries/lfgetmode.o + .debug_macro 0x00000000 0x22 binaries/lfgetmode.o + .debug_macro 0x00000000 0x46 binaries/lfgetmode.o + .debug_macro 0x00000000 0xfa binaries/lfgetmode.o + .debug_macro 0x00000000 0xdd binaries/lfgetmode.o + .debug_macro 0x00000000 0x91 binaries/lfgetmode.o + .debug_macro 0x00000000 0x8e binaries/lfgetmode.o + .debug_macro 0x00000000 0x82 binaries/lfgetmode.o + .debug_macro 0x00000000 0x2e binaries/lfgetmode.o + .debug_macro 0x00000000 0x3a binaries/lfgetmode.o + .debug_macro 0x00000000 0x4c binaries/lfgetmode.o + .debug_macro 0x00000000 0x3a binaries/lfgetmode.o + .debug_macro 0x00000000 0xa0 binaries/lfgetmode.o + .debug_macro 0x00000000 0x34 binaries/lfgetmode.o + .debug_macro 0x00000000 0x7c binaries/lfgetmode.o + .debug_macro 0x00000000 0x1c binaries/lfgetmode.o + .debug_macro 0x00000000 0xee binaries/lfgetmode.o + .debug_macro 0x00000000 0x7c binaries/lfgetmode.o + .debug_macro 0x00000000 0x20 binaries/lfgetmode.o + .debug_macro 0x00000000 0x10 binaries/lfgetmode.o + .debug_macro 0x00000000 0x1c binaries/lfgetmode.o + .debug_macro 0x00000000 0x34 binaries/lfgetmode.o + .debug_macro 0x00000000 0xeb binaries/lfgetmode.o + .debug_macro 0x00000000 0x8e binaries/lfgetmode.o + .group 0x00000000 0x8 binaries/lfiballoc.o + .group 0x00000000 0x8 binaries/lfiballoc.o + .group 0x00000000 0x8 binaries/lfiballoc.o + .group 0x00000000 0x8 binaries/lfiballoc.o + .group 0x00000000 0x8 binaries/lfiballoc.o + .group 0x00000000 0x8 binaries/lfiballoc.o + .group 0x00000000 0x8 binaries/lfiballoc.o + .group 0x00000000 0x8 binaries/lfiballoc.o + .group 0x00000000 0x8 binaries/lfiballoc.o + .group 0x00000000 0x8 binaries/lfiballoc.o + .group 0x00000000 0x8 binaries/lfiballoc.o + .group 0x00000000 0x8 binaries/lfiballoc.o + .group 0x00000000 0x8 binaries/lfiballoc.o + .group 0x00000000 0x8 binaries/lfiballoc.o + .group 0x00000000 0x8 binaries/lfiballoc.o + .group 0x00000000 0x8 binaries/lfiballoc.o + .group 0x00000000 0x8 binaries/lfiballoc.o + .group 0x00000000 0x8 binaries/lfiballoc.o + .group 0x00000000 0x8 binaries/lfiballoc.o + .group 0x00000000 0x8 binaries/lfiballoc.o + .group 0x00000000 0x8 binaries/lfiballoc.o + .group 0x00000000 0x8 binaries/lfiballoc.o + .group 0x00000000 0x8 binaries/lfiballoc.o + .group 0x00000000 0x8 binaries/lfiballoc.o + .group 0x00000000 0x8 binaries/lfiballoc.o + .group 0x00000000 0x8 binaries/lfiballoc.o + .group 0x00000000 0x8 binaries/lfiballoc.o + .group 0x00000000 0x8 binaries/lfiballoc.o + .group 0x00000000 0x8 binaries/lfiballoc.o + .group 0x00000000 0x8 binaries/lfiballoc.o + .group 0x00000000 0x8 binaries/lfiballoc.o + .group 0x00000000 0x8 binaries/lfiballoc.o + .group 0x00000000 0x8 binaries/lfiballoc.o + .group 0x00000000 0x8 binaries/lfiballoc.o + .group 0x00000000 0x8 binaries/lfiballoc.o + .group 0x00000000 0x8 binaries/lfiballoc.o + .group 0x00000000 0x8 binaries/lfiballoc.o + .debug_macro 0x00000000 0x838 binaries/lfiballoc.o + .debug_macro 0x00000000 0x58 binaries/lfiballoc.o + .debug_macro 0x00000000 0xb2 binaries/lfiballoc.o + .debug_macro 0x00000000 0x6a binaries/lfiballoc.o + .debug_macro 0x00000000 0x52 binaries/lfiballoc.o + .debug_macro 0x00000000 0x10 binaries/lfiballoc.o + .debug_macro 0x00000000 0x16 binaries/lfiballoc.o + .debug_macro 0x00000000 0x1c binaries/lfiballoc.o + .debug_macro 0x00000000 0x1c binaries/lfiballoc.o + .debug_macro 0x00000000 0x10 binaries/lfiballoc.o + .debug_macro 0x00000000 0x28 binaries/lfiballoc.o + .debug_macro 0x00000000 0x1c1 binaries/lfiballoc.o + .debug_macro 0x00000000 0xa0 binaries/lfiballoc.o + .debug_macro 0x00000000 0x10 binaries/lfiballoc.o + .debug_macro 0x00000000 0x22 binaries/lfiballoc.o + .debug_macro 0x00000000 0x46 binaries/lfiballoc.o + .debug_macro 0x00000000 0xfa binaries/lfiballoc.o + .debug_macro 0x00000000 0xdd binaries/lfiballoc.o + .debug_macro 0x00000000 0x91 binaries/lfiballoc.o + .debug_macro 0x00000000 0x8e binaries/lfiballoc.o + .debug_macro 0x00000000 0x82 binaries/lfiballoc.o + .debug_macro 0x00000000 0x2e binaries/lfiballoc.o + .debug_macro 0x00000000 0x3a binaries/lfiballoc.o + .debug_macro 0x00000000 0x4c binaries/lfiballoc.o + .debug_macro 0x00000000 0x3a binaries/lfiballoc.o + .debug_macro 0x00000000 0xa0 binaries/lfiballoc.o + .debug_macro 0x00000000 0x34 binaries/lfiballoc.o + .debug_macro 0x00000000 0x7c binaries/lfiballoc.o + .debug_macro 0x00000000 0x1c binaries/lfiballoc.o + .debug_macro 0x00000000 0xee binaries/lfiballoc.o + .debug_macro 0x00000000 0x7c binaries/lfiballoc.o + .debug_macro 0x00000000 0x20 binaries/lfiballoc.o + .debug_macro 0x00000000 0x10 binaries/lfiballoc.o + .debug_macro 0x00000000 0x1c binaries/lfiballoc.o + .debug_macro 0x00000000 0x34 binaries/lfiballoc.o + .debug_macro 0x00000000 0xeb binaries/lfiballoc.o + .debug_macro 0x00000000 0x8e binaries/lfiballoc.o + .group 0x00000000 0x8 binaries/lfibclear.o + .group 0x00000000 0x8 binaries/lfibclear.o + .group 0x00000000 0x8 binaries/lfibclear.o + .group 0x00000000 0x8 binaries/lfibclear.o + .group 0x00000000 0x8 binaries/lfibclear.o + .group 0x00000000 0x8 binaries/lfibclear.o + .group 0x00000000 0x8 binaries/lfibclear.o + .group 0x00000000 0x8 binaries/lfibclear.o + .group 0x00000000 0x8 binaries/lfibclear.o + .group 0x00000000 0x8 binaries/lfibclear.o + .group 0x00000000 0x8 binaries/lfibclear.o + .group 0x00000000 0x8 binaries/lfibclear.o + .group 0x00000000 0x8 binaries/lfibclear.o + .group 0x00000000 0x8 binaries/lfibclear.o + .group 0x00000000 0x8 binaries/lfibclear.o + .group 0x00000000 0x8 binaries/lfibclear.o + .group 0x00000000 0x8 binaries/lfibclear.o + .group 0x00000000 0x8 binaries/lfibclear.o + .group 0x00000000 0x8 binaries/lfibclear.o + .group 0x00000000 0x8 binaries/lfibclear.o + .group 0x00000000 0x8 binaries/lfibclear.o + .group 0x00000000 0x8 binaries/lfibclear.o + .group 0x00000000 0x8 binaries/lfibclear.o + .group 0x00000000 0x8 binaries/lfibclear.o + .group 0x00000000 0x8 binaries/lfibclear.o + .group 0x00000000 0x8 binaries/lfibclear.o + .group 0x00000000 0x8 binaries/lfibclear.o + .group 0x00000000 0x8 binaries/lfibclear.o + .group 0x00000000 0x8 binaries/lfibclear.o + .group 0x00000000 0x8 binaries/lfibclear.o + .group 0x00000000 0x8 binaries/lfibclear.o + .group 0x00000000 0x8 binaries/lfibclear.o + .group 0x00000000 0x8 binaries/lfibclear.o + .group 0x00000000 0x8 binaries/lfibclear.o + .group 0x00000000 0x8 binaries/lfibclear.o + .group 0x00000000 0x8 binaries/lfibclear.o + .group 0x00000000 0x8 binaries/lfibclear.o + .debug_macro 0x00000000 0x838 binaries/lfibclear.o + .debug_macro 0x00000000 0x58 binaries/lfibclear.o + .debug_macro 0x00000000 0xb2 binaries/lfibclear.o + .debug_macro 0x00000000 0x6a binaries/lfibclear.o + .debug_macro 0x00000000 0x52 binaries/lfibclear.o + .debug_macro 0x00000000 0x10 binaries/lfibclear.o + .debug_macro 0x00000000 0x16 binaries/lfibclear.o + .debug_macro 0x00000000 0x1c binaries/lfibclear.o + .debug_macro 0x00000000 0x1c binaries/lfibclear.o + .debug_macro 0x00000000 0x10 binaries/lfibclear.o + .debug_macro 0x00000000 0x28 binaries/lfibclear.o + .debug_macro 0x00000000 0x1c1 binaries/lfibclear.o + .debug_macro 0x00000000 0xa0 binaries/lfibclear.o + .debug_macro 0x00000000 0x10 binaries/lfibclear.o + .debug_macro 0x00000000 0x22 binaries/lfibclear.o + .debug_macro 0x00000000 0x46 binaries/lfibclear.o + .debug_macro 0x00000000 0xfa binaries/lfibclear.o + .debug_macro 0x00000000 0xdd binaries/lfibclear.o + .debug_macro 0x00000000 0x91 binaries/lfibclear.o + .debug_macro 0x00000000 0x8e binaries/lfibclear.o + .debug_macro 0x00000000 0x82 binaries/lfibclear.o + .debug_macro 0x00000000 0x2e binaries/lfibclear.o + .debug_macro 0x00000000 0x3a binaries/lfibclear.o + .debug_macro 0x00000000 0x4c binaries/lfibclear.o + .debug_macro 0x00000000 0x3a binaries/lfibclear.o + .debug_macro 0x00000000 0xa0 binaries/lfibclear.o + .debug_macro 0x00000000 0x34 binaries/lfibclear.o + .debug_macro 0x00000000 0x7c binaries/lfibclear.o + .debug_macro 0x00000000 0x1c binaries/lfibclear.o + .debug_macro 0x00000000 0xee binaries/lfibclear.o + .debug_macro 0x00000000 0x7c binaries/lfibclear.o + .debug_macro 0x00000000 0x20 binaries/lfibclear.o + .debug_macro 0x00000000 0x10 binaries/lfibclear.o + .debug_macro 0x00000000 0x1c binaries/lfibclear.o + .debug_macro 0x00000000 0x34 binaries/lfibclear.o + .debug_macro 0x00000000 0xeb binaries/lfibclear.o + .debug_macro 0x00000000 0x8e binaries/lfibclear.o + .group 0x00000000 0x8 binaries/lfibget.o + .group 0x00000000 0x8 binaries/lfibget.o + .group 0x00000000 0x8 binaries/lfibget.o + .group 0x00000000 0x8 binaries/lfibget.o + .group 0x00000000 0x8 binaries/lfibget.o + .group 0x00000000 0x8 binaries/lfibget.o + .group 0x00000000 0x8 binaries/lfibget.o + .group 0x00000000 0x8 binaries/lfibget.o + .group 0x00000000 0x8 binaries/lfibget.o + .group 0x00000000 0x8 binaries/lfibget.o + .group 0x00000000 0x8 binaries/lfibget.o + .group 0x00000000 0x8 binaries/lfibget.o + .group 0x00000000 0x8 binaries/lfibget.o + .group 0x00000000 0x8 binaries/lfibget.o + .group 0x00000000 0x8 binaries/lfibget.o + .group 0x00000000 0x8 binaries/lfibget.o + .group 0x00000000 0x8 binaries/lfibget.o + .group 0x00000000 0x8 binaries/lfibget.o + .group 0x00000000 0x8 binaries/lfibget.o + .group 0x00000000 0x8 binaries/lfibget.o + .group 0x00000000 0x8 binaries/lfibget.o + .group 0x00000000 0x8 binaries/lfibget.o + .group 0x00000000 0x8 binaries/lfibget.o + .group 0x00000000 0x8 binaries/lfibget.o + .group 0x00000000 0x8 binaries/lfibget.o + .group 0x00000000 0x8 binaries/lfibget.o + .group 0x00000000 0x8 binaries/lfibget.o + .group 0x00000000 0x8 binaries/lfibget.o + .group 0x00000000 0x8 binaries/lfibget.o + .group 0x00000000 0x8 binaries/lfibget.o + .group 0x00000000 0x8 binaries/lfibget.o + .group 0x00000000 0x8 binaries/lfibget.o + .group 0x00000000 0x8 binaries/lfibget.o + .group 0x00000000 0x8 binaries/lfibget.o + .group 0x00000000 0x8 binaries/lfibget.o + .group 0x00000000 0x8 binaries/lfibget.o + .group 0x00000000 0x8 binaries/lfibget.o + .debug_macro 0x00000000 0x838 binaries/lfibget.o + .debug_macro 0x00000000 0x58 binaries/lfibget.o + .debug_macro 0x00000000 0xb2 binaries/lfibget.o + .debug_macro 0x00000000 0x6a binaries/lfibget.o + .debug_macro 0x00000000 0x52 binaries/lfibget.o + .debug_macro 0x00000000 0x10 binaries/lfibget.o + .debug_macro 0x00000000 0x16 binaries/lfibget.o + .debug_macro 0x00000000 0x1c binaries/lfibget.o + .debug_macro 0x00000000 0x1c binaries/lfibget.o + .debug_macro 0x00000000 0x10 binaries/lfibget.o + .debug_macro 0x00000000 0x28 binaries/lfibget.o + .debug_macro 0x00000000 0x1c1 binaries/lfibget.o + .debug_macro 0x00000000 0xa0 binaries/lfibget.o + .debug_macro 0x00000000 0x10 binaries/lfibget.o + .debug_macro 0x00000000 0x22 binaries/lfibget.o + .debug_macro 0x00000000 0x46 binaries/lfibget.o + .debug_macro 0x00000000 0xfa binaries/lfibget.o + .debug_macro 0x00000000 0xdd binaries/lfibget.o + .debug_macro 0x00000000 0x91 binaries/lfibget.o + .debug_macro 0x00000000 0x8e binaries/lfibget.o + .debug_macro 0x00000000 0x82 binaries/lfibget.o + .debug_macro 0x00000000 0x2e binaries/lfibget.o + .debug_macro 0x00000000 0x3a binaries/lfibget.o + .debug_macro 0x00000000 0x4c binaries/lfibget.o + .debug_macro 0x00000000 0x3a binaries/lfibget.o + .debug_macro 0x00000000 0xa0 binaries/lfibget.o + .debug_macro 0x00000000 0x34 binaries/lfibget.o + .debug_macro 0x00000000 0x7c binaries/lfibget.o + .debug_macro 0x00000000 0x1c binaries/lfibget.o + .debug_macro 0x00000000 0xee binaries/lfibget.o + .debug_macro 0x00000000 0x7c binaries/lfibget.o + .debug_macro 0x00000000 0x20 binaries/lfibget.o + .debug_macro 0x00000000 0x10 binaries/lfibget.o + .debug_macro 0x00000000 0x1c binaries/lfibget.o + .debug_macro 0x00000000 0x34 binaries/lfibget.o + .debug_macro 0x00000000 0xeb binaries/lfibget.o + .debug_macro 0x00000000 0x8e binaries/lfibget.o + .group 0x00000000 0x8 binaries/lfibput.o + .group 0x00000000 0x8 binaries/lfibput.o + .group 0x00000000 0x8 binaries/lfibput.o + .group 0x00000000 0x8 binaries/lfibput.o + .group 0x00000000 0x8 binaries/lfibput.o + .group 0x00000000 0x8 binaries/lfibput.o + .group 0x00000000 0x8 binaries/lfibput.o + .group 0x00000000 0x8 binaries/lfibput.o + .group 0x00000000 0x8 binaries/lfibput.o + .group 0x00000000 0x8 binaries/lfibput.o + .group 0x00000000 0x8 binaries/lfibput.o + .group 0x00000000 0x8 binaries/lfibput.o + .group 0x00000000 0x8 binaries/lfibput.o + .group 0x00000000 0x8 binaries/lfibput.o + .group 0x00000000 0x8 binaries/lfibput.o + .group 0x00000000 0x8 binaries/lfibput.o + .group 0x00000000 0x8 binaries/lfibput.o + .group 0x00000000 0x8 binaries/lfibput.o + .group 0x00000000 0x8 binaries/lfibput.o + .group 0x00000000 0x8 binaries/lfibput.o + .group 0x00000000 0x8 binaries/lfibput.o + .group 0x00000000 0x8 binaries/lfibput.o + .group 0x00000000 0x8 binaries/lfibput.o + .group 0x00000000 0x8 binaries/lfibput.o + .group 0x00000000 0x8 binaries/lfibput.o + .group 0x00000000 0x8 binaries/lfibput.o + .group 0x00000000 0x8 binaries/lfibput.o + .group 0x00000000 0x8 binaries/lfibput.o + .group 0x00000000 0x8 binaries/lfibput.o + .group 0x00000000 0x8 binaries/lfibput.o + .group 0x00000000 0x8 binaries/lfibput.o + .group 0x00000000 0x8 binaries/lfibput.o + .group 0x00000000 0x8 binaries/lfibput.o + .group 0x00000000 0x8 binaries/lfibput.o + .group 0x00000000 0x8 binaries/lfibput.o + .group 0x00000000 0x8 binaries/lfibput.o + .group 0x00000000 0x8 binaries/lfibput.o + .debug_macro 0x00000000 0x838 binaries/lfibput.o + .debug_macro 0x00000000 0x58 binaries/lfibput.o + .debug_macro 0x00000000 0xb2 binaries/lfibput.o + .debug_macro 0x00000000 0x6a binaries/lfibput.o + .debug_macro 0x00000000 0x52 binaries/lfibput.o + .debug_macro 0x00000000 0x10 binaries/lfibput.o + .debug_macro 0x00000000 0x16 binaries/lfibput.o + .debug_macro 0x00000000 0x1c binaries/lfibput.o + .debug_macro 0x00000000 0x1c binaries/lfibput.o + .debug_macro 0x00000000 0x10 binaries/lfibput.o + .debug_macro 0x00000000 0x28 binaries/lfibput.o + .debug_macro 0x00000000 0x1c1 binaries/lfibput.o + .debug_macro 0x00000000 0xa0 binaries/lfibput.o + .debug_macro 0x00000000 0x10 binaries/lfibput.o + .debug_macro 0x00000000 0x22 binaries/lfibput.o + .debug_macro 0x00000000 0x46 binaries/lfibput.o + .debug_macro 0x00000000 0xfa binaries/lfibput.o + .debug_macro 0x00000000 0xdd binaries/lfibput.o + .debug_macro 0x00000000 0x91 binaries/lfibput.o + .debug_macro 0x00000000 0x8e binaries/lfibput.o + .debug_macro 0x00000000 0x82 binaries/lfibput.o + .debug_macro 0x00000000 0x2e binaries/lfibput.o + .debug_macro 0x00000000 0x3a binaries/lfibput.o + .debug_macro 0x00000000 0x4c binaries/lfibput.o + .debug_macro 0x00000000 0x3a binaries/lfibput.o + .debug_macro 0x00000000 0xa0 binaries/lfibput.o + .debug_macro 0x00000000 0x34 binaries/lfibput.o + .debug_macro 0x00000000 0x7c binaries/lfibput.o + .debug_macro 0x00000000 0x1c binaries/lfibput.o + .debug_macro 0x00000000 0xee binaries/lfibput.o + .debug_macro 0x00000000 0x7c binaries/lfibput.o + .debug_macro 0x00000000 0x20 binaries/lfibput.o + .debug_macro 0x00000000 0x10 binaries/lfibput.o + .debug_macro 0x00000000 0x1c binaries/lfibput.o + .debug_macro 0x00000000 0x34 binaries/lfibput.o + .debug_macro 0x00000000 0xeb binaries/lfibput.o + .debug_macro 0x00000000 0x8e binaries/lfibput.o + .group 0x00000000 0x8 binaries/lflclose.o + .group 0x00000000 0x8 binaries/lflclose.o + .group 0x00000000 0x8 binaries/lflclose.o + .group 0x00000000 0x8 binaries/lflclose.o + .group 0x00000000 0x8 binaries/lflclose.o + .group 0x00000000 0x8 binaries/lflclose.o + .group 0x00000000 0x8 binaries/lflclose.o + .group 0x00000000 0x8 binaries/lflclose.o + .group 0x00000000 0x8 binaries/lflclose.o + .group 0x00000000 0x8 binaries/lflclose.o + .group 0x00000000 0x8 binaries/lflclose.o + .group 0x00000000 0x8 binaries/lflclose.o + .group 0x00000000 0x8 binaries/lflclose.o + .group 0x00000000 0x8 binaries/lflclose.o + .group 0x00000000 0x8 binaries/lflclose.o + .group 0x00000000 0x8 binaries/lflclose.o + .group 0x00000000 0x8 binaries/lflclose.o + .group 0x00000000 0x8 binaries/lflclose.o + .group 0x00000000 0x8 binaries/lflclose.o + .group 0x00000000 0x8 binaries/lflclose.o + .group 0x00000000 0x8 binaries/lflclose.o + .group 0x00000000 0x8 binaries/lflclose.o + .group 0x00000000 0x8 binaries/lflclose.o + .group 0x00000000 0x8 binaries/lflclose.o + .group 0x00000000 0x8 binaries/lflclose.o + .group 0x00000000 0x8 binaries/lflclose.o + .group 0x00000000 0x8 binaries/lflclose.o + .group 0x00000000 0x8 binaries/lflclose.o + .group 0x00000000 0x8 binaries/lflclose.o + .group 0x00000000 0x8 binaries/lflclose.o + .group 0x00000000 0x8 binaries/lflclose.o + .group 0x00000000 0x8 binaries/lflclose.o + .group 0x00000000 0x8 binaries/lflclose.o + .group 0x00000000 0x8 binaries/lflclose.o + .group 0x00000000 0x8 binaries/lflclose.o + .group 0x00000000 0x8 binaries/lflclose.o + .group 0x00000000 0x8 binaries/lflclose.o + .debug_macro 0x00000000 0x838 binaries/lflclose.o + .debug_macro 0x00000000 0x58 binaries/lflclose.o + .debug_macro 0x00000000 0xb2 binaries/lflclose.o + .debug_macro 0x00000000 0x6a binaries/lflclose.o + .debug_macro 0x00000000 0x52 binaries/lflclose.o + .debug_macro 0x00000000 0x10 binaries/lflclose.o + .debug_macro 0x00000000 0x16 binaries/lflclose.o + .debug_macro 0x00000000 0x1c binaries/lflclose.o + .debug_macro 0x00000000 0x1c binaries/lflclose.o + .debug_macro 0x00000000 0x10 binaries/lflclose.o + .debug_macro 0x00000000 0x28 binaries/lflclose.o + .debug_macro 0x00000000 0x1c1 binaries/lflclose.o + .debug_macro 0x00000000 0xa0 binaries/lflclose.o + .debug_macro 0x00000000 0x10 binaries/lflclose.o + .debug_macro 0x00000000 0x22 binaries/lflclose.o + .debug_macro 0x00000000 0x46 binaries/lflclose.o + .debug_macro 0x00000000 0xfa binaries/lflclose.o + .debug_macro 0x00000000 0xdd binaries/lflclose.o + .debug_macro 0x00000000 0x91 binaries/lflclose.o + .debug_macro 0x00000000 0x8e binaries/lflclose.o + .debug_macro 0x00000000 0x82 binaries/lflclose.o + .debug_macro 0x00000000 0x2e binaries/lflclose.o + .debug_macro 0x00000000 0x3a binaries/lflclose.o + .debug_macro 0x00000000 0x4c binaries/lflclose.o + .debug_macro 0x00000000 0x3a binaries/lflclose.o + .debug_macro 0x00000000 0xa0 binaries/lflclose.o + .debug_macro 0x00000000 0x34 binaries/lflclose.o + .debug_macro 0x00000000 0x7c binaries/lflclose.o + .debug_macro 0x00000000 0x1c binaries/lflclose.o + .debug_macro 0x00000000 0xee binaries/lflclose.o + .debug_macro 0x00000000 0x7c binaries/lflclose.o + .debug_macro 0x00000000 0x20 binaries/lflclose.o + .debug_macro 0x00000000 0x10 binaries/lflclose.o + .debug_macro 0x00000000 0x1c binaries/lflclose.o + .debug_macro 0x00000000 0x34 binaries/lflclose.o + .debug_macro 0x00000000 0xeb binaries/lflclose.o + .debug_macro 0x00000000 0x8e binaries/lflclose.o + .group 0x00000000 0x8 binaries/lflcontrol.o + .group 0x00000000 0x8 binaries/lflcontrol.o + .group 0x00000000 0x8 binaries/lflcontrol.o + .group 0x00000000 0x8 binaries/lflcontrol.o + .group 0x00000000 0x8 binaries/lflcontrol.o + .group 0x00000000 0x8 binaries/lflcontrol.o + .group 0x00000000 0x8 binaries/lflcontrol.o + .group 0x00000000 0x8 binaries/lflcontrol.o + .group 0x00000000 0x8 binaries/lflcontrol.o + .group 0x00000000 0x8 binaries/lflcontrol.o + .group 0x00000000 0x8 binaries/lflcontrol.o + .group 0x00000000 0x8 binaries/lflcontrol.o + .group 0x00000000 0x8 binaries/lflcontrol.o + .group 0x00000000 0x8 binaries/lflcontrol.o + .group 0x00000000 0x8 binaries/lflcontrol.o + .group 0x00000000 0x8 binaries/lflcontrol.o + .group 0x00000000 0x8 binaries/lflcontrol.o + .group 0x00000000 0x8 binaries/lflcontrol.o + .group 0x00000000 0x8 binaries/lflcontrol.o + .group 0x00000000 0x8 binaries/lflcontrol.o + .group 0x00000000 0x8 binaries/lflcontrol.o + .group 0x00000000 0x8 binaries/lflcontrol.o + .group 0x00000000 0x8 binaries/lflcontrol.o + .group 0x00000000 0x8 binaries/lflcontrol.o + .group 0x00000000 0x8 binaries/lflcontrol.o + .group 0x00000000 0x8 binaries/lflcontrol.o + .group 0x00000000 0x8 binaries/lflcontrol.o + .group 0x00000000 0x8 binaries/lflcontrol.o + .group 0x00000000 0x8 binaries/lflcontrol.o + .group 0x00000000 0x8 binaries/lflcontrol.o + .group 0x00000000 0x8 binaries/lflcontrol.o + .group 0x00000000 0x8 binaries/lflcontrol.o + .group 0x00000000 0x8 binaries/lflcontrol.o + .group 0x00000000 0x8 binaries/lflcontrol.o + .group 0x00000000 0x8 binaries/lflcontrol.o + .group 0x00000000 0x8 binaries/lflcontrol.o + .group 0x00000000 0x8 binaries/lflcontrol.o + .debug_macro 0x00000000 0x838 binaries/lflcontrol.o + .debug_macro 0x00000000 0x58 binaries/lflcontrol.o + .debug_macro 0x00000000 0xb2 binaries/lflcontrol.o + .debug_macro 0x00000000 0x6a binaries/lflcontrol.o + .debug_macro 0x00000000 0x52 binaries/lflcontrol.o + .debug_macro 0x00000000 0x10 binaries/lflcontrol.o + .debug_macro 0x00000000 0x16 binaries/lflcontrol.o + .debug_macro 0x00000000 0x1c binaries/lflcontrol.o + .debug_macro 0x00000000 0x1c binaries/lflcontrol.o + .debug_macro 0x00000000 0x10 binaries/lflcontrol.o + .debug_macro 0x00000000 0x28 binaries/lflcontrol.o + .debug_macro 0x00000000 0x1c1 binaries/lflcontrol.o + .debug_macro 0x00000000 0xa0 binaries/lflcontrol.o + .debug_macro 0x00000000 0x10 binaries/lflcontrol.o + .debug_macro 0x00000000 0x22 binaries/lflcontrol.o + .debug_macro 0x00000000 0x46 binaries/lflcontrol.o + .debug_macro 0x00000000 0xfa binaries/lflcontrol.o + .debug_macro 0x00000000 0xdd binaries/lflcontrol.o + .debug_macro 0x00000000 0x91 binaries/lflcontrol.o + .debug_macro 0x00000000 0x8e binaries/lflcontrol.o + .debug_macro 0x00000000 0x82 binaries/lflcontrol.o + .debug_macro 0x00000000 0x2e binaries/lflcontrol.o + .debug_macro 0x00000000 0x3a binaries/lflcontrol.o + .debug_macro 0x00000000 0x4c binaries/lflcontrol.o + .debug_macro 0x00000000 0x3a binaries/lflcontrol.o + .debug_macro 0x00000000 0xa0 binaries/lflcontrol.o + .debug_macro 0x00000000 0x34 binaries/lflcontrol.o + .debug_macro 0x00000000 0x7c binaries/lflcontrol.o + .debug_macro 0x00000000 0x1c binaries/lflcontrol.o + .debug_macro 0x00000000 0xee binaries/lflcontrol.o + .debug_macro 0x00000000 0x7c binaries/lflcontrol.o + .debug_macro 0x00000000 0x20 binaries/lflcontrol.o + .debug_macro 0x00000000 0x10 binaries/lflcontrol.o + .debug_macro 0x00000000 0x1c binaries/lflcontrol.o + .debug_macro 0x00000000 0x34 binaries/lflcontrol.o + .debug_macro 0x00000000 0xeb binaries/lflcontrol.o + .debug_macro 0x00000000 0x8e binaries/lflcontrol.o + .group 0x00000000 0x8 binaries/lflgetc.o + .group 0x00000000 0x8 binaries/lflgetc.o + .group 0x00000000 0x8 binaries/lflgetc.o + .group 0x00000000 0x8 binaries/lflgetc.o + .group 0x00000000 0x8 binaries/lflgetc.o + .group 0x00000000 0x8 binaries/lflgetc.o + .group 0x00000000 0x8 binaries/lflgetc.o + .group 0x00000000 0x8 binaries/lflgetc.o + .group 0x00000000 0x8 binaries/lflgetc.o + .group 0x00000000 0x8 binaries/lflgetc.o + .group 0x00000000 0x8 binaries/lflgetc.o + .group 0x00000000 0x8 binaries/lflgetc.o + .group 0x00000000 0x8 binaries/lflgetc.o + .group 0x00000000 0x8 binaries/lflgetc.o + .group 0x00000000 0x8 binaries/lflgetc.o + .group 0x00000000 0x8 binaries/lflgetc.o + .group 0x00000000 0x8 binaries/lflgetc.o + .group 0x00000000 0x8 binaries/lflgetc.o + .group 0x00000000 0x8 binaries/lflgetc.o + .group 0x00000000 0x8 binaries/lflgetc.o + .group 0x00000000 0x8 binaries/lflgetc.o + .group 0x00000000 0x8 binaries/lflgetc.o + .group 0x00000000 0x8 binaries/lflgetc.o + .group 0x00000000 0x8 binaries/lflgetc.o + .group 0x00000000 0x8 binaries/lflgetc.o + .group 0x00000000 0x8 binaries/lflgetc.o + .group 0x00000000 0x8 binaries/lflgetc.o + .group 0x00000000 0x8 binaries/lflgetc.o + .group 0x00000000 0x8 binaries/lflgetc.o + .group 0x00000000 0x8 binaries/lflgetc.o + .group 0x00000000 0x8 binaries/lflgetc.o + .group 0x00000000 0x8 binaries/lflgetc.o + .group 0x00000000 0x8 binaries/lflgetc.o + .group 0x00000000 0x8 binaries/lflgetc.o + .group 0x00000000 0x8 binaries/lflgetc.o + .group 0x00000000 0x8 binaries/lflgetc.o + .group 0x00000000 0x8 binaries/lflgetc.o + .debug_macro 0x00000000 0x838 binaries/lflgetc.o + .debug_macro 0x00000000 0x58 binaries/lflgetc.o + .debug_macro 0x00000000 0xb2 binaries/lflgetc.o + .debug_macro 0x00000000 0x6a binaries/lflgetc.o + .debug_macro 0x00000000 0x52 binaries/lflgetc.o + .debug_macro 0x00000000 0x10 binaries/lflgetc.o + .debug_macro 0x00000000 0x16 binaries/lflgetc.o + .debug_macro 0x00000000 0x1c binaries/lflgetc.o + .debug_macro 0x00000000 0x1c binaries/lflgetc.o + .debug_macro 0x00000000 0x10 binaries/lflgetc.o + .debug_macro 0x00000000 0x28 binaries/lflgetc.o + .debug_macro 0x00000000 0x1c1 binaries/lflgetc.o + .debug_macro 0x00000000 0xa0 binaries/lflgetc.o + .debug_macro 0x00000000 0x10 binaries/lflgetc.o + .debug_macro 0x00000000 0x22 binaries/lflgetc.o + .debug_macro 0x00000000 0x46 binaries/lflgetc.o + .debug_macro 0x00000000 0xfa binaries/lflgetc.o + .debug_macro 0x00000000 0xdd binaries/lflgetc.o + .debug_macro 0x00000000 0x91 binaries/lflgetc.o + .debug_macro 0x00000000 0x8e binaries/lflgetc.o + .debug_macro 0x00000000 0x82 binaries/lflgetc.o + .debug_macro 0x00000000 0x2e binaries/lflgetc.o + .debug_macro 0x00000000 0x3a binaries/lflgetc.o + .debug_macro 0x00000000 0x4c binaries/lflgetc.o + .debug_macro 0x00000000 0x3a binaries/lflgetc.o + .debug_macro 0x00000000 0xa0 binaries/lflgetc.o + .debug_macro 0x00000000 0x34 binaries/lflgetc.o + .debug_macro 0x00000000 0x7c binaries/lflgetc.o + .debug_macro 0x00000000 0x1c binaries/lflgetc.o + .debug_macro 0x00000000 0xee binaries/lflgetc.o + .debug_macro 0x00000000 0x7c binaries/lflgetc.o + .debug_macro 0x00000000 0x20 binaries/lflgetc.o + .debug_macro 0x00000000 0x10 binaries/lflgetc.o + .debug_macro 0x00000000 0x1c binaries/lflgetc.o + .debug_macro 0x00000000 0x34 binaries/lflgetc.o + .debug_macro 0x00000000 0xeb binaries/lflgetc.o + .debug_macro 0x00000000 0x8e binaries/lflgetc.o + .group 0x00000000 0x8 binaries/lflinit.o + .group 0x00000000 0x8 binaries/lflinit.o + .group 0x00000000 0x8 binaries/lflinit.o + .group 0x00000000 0x8 binaries/lflinit.o + .group 0x00000000 0x8 binaries/lflinit.o + .group 0x00000000 0x8 binaries/lflinit.o + .group 0x00000000 0x8 binaries/lflinit.o + .group 0x00000000 0x8 binaries/lflinit.o + .group 0x00000000 0x8 binaries/lflinit.o + .group 0x00000000 0x8 binaries/lflinit.o + .group 0x00000000 0x8 binaries/lflinit.o + .group 0x00000000 0x8 binaries/lflinit.o + .group 0x00000000 0x8 binaries/lflinit.o + .group 0x00000000 0x8 binaries/lflinit.o + .group 0x00000000 0x8 binaries/lflinit.o + .group 0x00000000 0x8 binaries/lflinit.o + .group 0x00000000 0x8 binaries/lflinit.o + .group 0x00000000 0x8 binaries/lflinit.o + .group 0x00000000 0x8 binaries/lflinit.o + .group 0x00000000 0x8 binaries/lflinit.o + .group 0x00000000 0x8 binaries/lflinit.o + .group 0x00000000 0x8 binaries/lflinit.o + .group 0x00000000 0x8 binaries/lflinit.o + .group 0x00000000 0x8 binaries/lflinit.o + .group 0x00000000 0x8 binaries/lflinit.o + .group 0x00000000 0x8 binaries/lflinit.o + .group 0x00000000 0x8 binaries/lflinit.o + .group 0x00000000 0x8 binaries/lflinit.o + .group 0x00000000 0x8 binaries/lflinit.o + .group 0x00000000 0x8 binaries/lflinit.o + .group 0x00000000 0x8 binaries/lflinit.o + .group 0x00000000 0x8 binaries/lflinit.o + .group 0x00000000 0x8 binaries/lflinit.o + .group 0x00000000 0x8 binaries/lflinit.o + .group 0x00000000 0x8 binaries/lflinit.o + .group 0x00000000 0x8 binaries/lflinit.o + .group 0x00000000 0x8 binaries/lflinit.o + .debug_macro 0x00000000 0x838 binaries/lflinit.o + .debug_macro 0x00000000 0x58 binaries/lflinit.o + .debug_macro 0x00000000 0xb2 binaries/lflinit.o + .debug_macro 0x00000000 0x6a binaries/lflinit.o + .debug_macro 0x00000000 0x52 binaries/lflinit.o + .debug_macro 0x00000000 0x10 binaries/lflinit.o + .debug_macro 0x00000000 0x16 binaries/lflinit.o + .debug_macro 0x00000000 0x1c binaries/lflinit.o + .debug_macro 0x00000000 0x1c binaries/lflinit.o + .debug_macro 0x00000000 0x10 binaries/lflinit.o + .debug_macro 0x00000000 0x28 binaries/lflinit.o + .debug_macro 0x00000000 0x1c1 binaries/lflinit.o + .debug_macro 0x00000000 0xa0 binaries/lflinit.o + .debug_macro 0x00000000 0x10 binaries/lflinit.o + .debug_macro 0x00000000 0x22 binaries/lflinit.o + .debug_macro 0x00000000 0x46 binaries/lflinit.o + .debug_macro 0x00000000 0xfa binaries/lflinit.o + .debug_macro 0x00000000 0xdd binaries/lflinit.o + .debug_macro 0x00000000 0x91 binaries/lflinit.o + .debug_macro 0x00000000 0x8e binaries/lflinit.o + .debug_macro 0x00000000 0x82 binaries/lflinit.o + .debug_macro 0x00000000 0x2e binaries/lflinit.o + .debug_macro 0x00000000 0x3a binaries/lflinit.o + .debug_macro 0x00000000 0x4c binaries/lflinit.o + .debug_macro 0x00000000 0x3a binaries/lflinit.o + .debug_macro 0x00000000 0xa0 binaries/lflinit.o + .debug_macro 0x00000000 0x34 binaries/lflinit.o + .debug_macro 0x00000000 0x7c binaries/lflinit.o + .debug_macro 0x00000000 0x1c binaries/lflinit.o + .debug_macro 0x00000000 0xee binaries/lflinit.o + .debug_macro 0x00000000 0x7c binaries/lflinit.o + .debug_macro 0x00000000 0x20 binaries/lflinit.o + .debug_macro 0x00000000 0x10 binaries/lflinit.o + .debug_macro 0x00000000 0x1c binaries/lflinit.o + .debug_macro 0x00000000 0x34 binaries/lflinit.o + .debug_macro 0x00000000 0xeb binaries/lflinit.o + .debug_macro 0x00000000 0x8e binaries/lflinit.o + .group 0x00000000 0x8 binaries/lflputc.o + .group 0x00000000 0x8 binaries/lflputc.o + .group 0x00000000 0x8 binaries/lflputc.o + .group 0x00000000 0x8 binaries/lflputc.o + .group 0x00000000 0x8 binaries/lflputc.o + .group 0x00000000 0x8 binaries/lflputc.o + .group 0x00000000 0x8 binaries/lflputc.o + .group 0x00000000 0x8 binaries/lflputc.o + .group 0x00000000 0x8 binaries/lflputc.o + .group 0x00000000 0x8 binaries/lflputc.o + .group 0x00000000 0x8 binaries/lflputc.o + .group 0x00000000 0x8 binaries/lflputc.o + .group 0x00000000 0x8 binaries/lflputc.o + .group 0x00000000 0x8 binaries/lflputc.o + .group 0x00000000 0x8 binaries/lflputc.o + .group 0x00000000 0x8 binaries/lflputc.o + .group 0x00000000 0x8 binaries/lflputc.o + .group 0x00000000 0x8 binaries/lflputc.o + .group 0x00000000 0x8 binaries/lflputc.o + .group 0x00000000 0x8 binaries/lflputc.o + .group 0x00000000 0x8 binaries/lflputc.o + .group 0x00000000 0x8 binaries/lflputc.o + .group 0x00000000 0x8 binaries/lflputc.o + .group 0x00000000 0x8 binaries/lflputc.o + .group 0x00000000 0x8 binaries/lflputc.o + .group 0x00000000 0x8 binaries/lflputc.o + .group 0x00000000 0x8 binaries/lflputc.o + .group 0x00000000 0x8 binaries/lflputc.o + .group 0x00000000 0x8 binaries/lflputc.o + .group 0x00000000 0x8 binaries/lflputc.o + .group 0x00000000 0x8 binaries/lflputc.o + .group 0x00000000 0x8 binaries/lflputc.o + .group 0x00000000 0x8 binaries/lflputc.o + .group 0x00000000 0x8 binaries/lflputc.o + .group 0x00000000 0x8 binaries/lflputc.o + .group 0x00000000 0x8 binaries/lflputc.o + .group 0x00000000 0x8 binaries/lflputc.o + .debug_macro 0x00000000 0x838 binaries/lflputc.o + .debug_macro 0x00000000 0x58 binaries/lflputc.o + .debug_macro 0x00000000 0xb2 binaries/lflputc.o + .debug_macro 0x00000000 0x6a binaries/lflputc.o + .debug_macro 0x00000000 0x52 binaries/lflputc.o + .debug_macro 0x00000000 0x10 binaries/lflputc.o + .debug_macro 0x00000000 0x16 binaries/lflputc.o + .debug_macro 0x00000000 0x1c binaries/lflputc.o + .debug_macro 0x00000000 0x1c binaries/lflputc.o + .debug_macro 0x00000000 0x10 binaries/lflputc.o + .debug_macro 0x00000000 0x28 binaries/lflputc.o + .debug_macro 0x00000000 0x1c1 binaries/lflputc.o + .debug_macro 0x00000000 0xa0 binaries/lflputc.o + .debug_macro 0x00000000 0x10 binaries/lflputc.o + .debug_macro 0x00000000 0x22 binaries/lflputc.o + .debug_macro 0x00000000 0x46 binaries/lflputc.o + .debug_macro 0x00000000 0xfa binaries/lflputc.o + .debug_macro 0x00000000 0xdd binaries/lflputc.o + .debug_macro 0x00000000 0x91 binaries/lflputc.o + .debug_macro 0x00000000 0x8e binaries/lflputc.o + .debug_macro 0x00000000 0x82 binaries/lflputc.o + .debug_macro 0x00000000 0x2e binaries/lflputc.o + .debug_macro 0x00000000 0x3a binaries/lflputc.o + .debug_macro 0x00000000 0x4c binaries/lflputc.o + .debug_macro 0x00000000 0x3a binaries/lflputc.o + .debug_macro 0x00000000 0xa0 binaries/lflputc.o + .debug_macro 0x00000000 0x34 binaries/lflputc.o + .debug_macro 0x00000000 0x7c binaries/lflputc.o + .debug_macro 0x00000000 0x1c binaries/lflputc.o + .debug_macro 0x00000000 0xee binaries/lflputc.o + .debug_macro 0x00000000 0x7c binaries/lflputc.o + .debug_macro 0x00000000 0x20 binaries/lflputc.o + .debug_macro 0x00000000 0x10 binaries/lflputc.o + .debug_macro 0x00000000 0x1c binaries/lflputc.o + .debug_macro 0x00000000 0x34 binaries/lflputc.o + .debug_macro 0x00000000 0xeb binaries/lflputc.o + .debug_macro 0x00000000 0x8e binaries/lflputc.o + .group 0x00000000 0x8 binaries/lflread.o + .group 0x00000000 0x8 binaries/lflread.o + .group 0x00000000 0x8 binaries/lflread.o + .group 0x00000000 0x8 binaries/lflread.o + .group 0x00000000 0x8 binaries/lflread.o + .group 0x00000000 0x8 binaries/lflread.o + .group 0x00000000 0x8 binaries/lflread.o + .group 0x00000000 0x8 binaries/lflread.o + .group 0x00000000 0x8 binaries/lflread.o + .group 0x00000000 0x8 binaries/lflread.o + .group 0x00000000 0x8 binaries/lflread.o + .group 0x00000000 0x8 binaries/lflread.o + .group 0x00000000 0x8 binaries/lflread.o + .group 0x00000000 0x8 binaries/lflread.o + .group 0x00000000 0x8 binaries/lflread.o + .group 0x00000000 0x8 binaries/lflread.o + .group 0x00000000 0x8 binaries/lflread.o + .group 0x00000000 0x8 binaries/lflread.o + .group 0x00000000 0x8 binaries/lflread.o + .group 0x00000000 0x8 binaries/lflread.o + .group 0x00000000 0x8 binaries/lflread.o + .group 0x00000000 0x8 binaries/lflread.o + .group 0x00000000 0x8 binaries/lflread.o + .group 0x00000000 0x8 binaries/lflread.o + .group 0x00000000 0x8 binaries/lflread.o + .group 0x00000000 0x8 binaries/lflread.o + .group 0x00000000 0x8 binaries/lflread.o + .group 0x00000000 0x8 binaries/lflread.o + .group 0x00000000 0x8 binaries/lflread.o + .group 0x00000000 0x8 binaries/lflread.o + .group 0x00000000 0x8 binaries/lflread.o + .group 0x00000000 0x8 binaries/lflread.o + .group 0x00000000 0x8 binaries/lflread.o + .group 0x00000000 0x8 binaries/lflread.o + .group 0x00000000 0x8 binaries/lflread.o + .group 0x00000000 0x8 binaries/lflread.o + .group 0x00000000 0x8 binaries/lflread.o + .debug_macro 0x00000000 0x838 binaries/lflread.o + .debug_macro 0x00000000 0x58 binaries/lflread.o + .debug_macro 0x00000000 0xb2 binaries/lflread.o + .debug_macro 0x00000000 0x6a binaries/lflread.o + .debug_macro 0x00000000 0x52 binaries/lflread.o + .debug_macro 0x00000000 0x10 binaries/lflread.o + .debug_macro 0x00000000 0x16 binaries/lflread.o + .debug_macro 0x00000000 0x1c binaries/lflread.o + .debug_macro 0x00000000 0x1c binaries/lflread.o + .debug_macro 0x00000000 0x10 binaries/lflread.o + .debug_macro 0x00000000 0x28 binaries/lflread.o + .debug_macro 0x00000000 0x1c1 binaries/lflread.o + .debug_macro 0x00000000 0xa0 binaries/lflread.o + .debug_macro 0x00000000 0x10 binaries/lflread.o + .debug_macro 0x00000000 0x22 binaries/lflread.o + .debug_macro 0x00000000 0x46 binaries/lflread.o + .debug_macro 0x00000000 0xfa binaries/lflread.o + .debug_macro 0x00000000 0xdd binaries/lflread.o + .debug_macro 0x00000000 0x91 binaries/lflread.o + .debug_macro 0x00000000 0x8e binaries/lflread.o + .debug_macro 0x00000000 0x82 binaries/lflread.o + .debug_macro 0x00000000 0x2e binaries/lflread.o + .debug_macro 0x00000000 0x3a binaries/lflread.o + .debug_macro 0x00000000 0x4c binaries/lflread.o + .debug_macro 0x00000000 0x3a binaries/lflread.o + .debug_macro 0x00000000 0xa0 binaries/lflread.o + .debug_macro 0x00000000 0x34 binaries/lflread.o + .debug_macro 0x00000000 0x7c binaries/lflread.o + .debug_macro 0x00000000 0x1c binaries/lflread.o + .debug_macro 0x00000000 0xee binaries/lflread.o + .debug_macro 0x00000000 0x7c binaries/lflread.o + .debug_macro 0x00000000 0x20 binaries/lflread.o + .debug_macro 0x00000000 0x10 binaries/lflread.o + .debug_macro 0x00000000 0x1c binaries/lflread.o + .debug_macro 0x00000000 0x34 binaries/lflread.o + .debug_macro 0x00000000 0xeb binaries/lflread.o + .debug_macro 0x00000000 0x8e binaries/lflread.o + .group 0x00000000 0x8 binaries/lflseek.o + .group 0x00000000 0x8 binaries/lflseek.o + .group 0x00000000 0x8 binaries/lflseek.o + .group 0x00000000 0x8 binaries/lflseek.o + .group 0x00000000 0x8 binaries/lflseek.o + .group 0x00000000 0x8 binaries/lflseek.o + .group 0x00000000 0x8 binaries/lflseek.o + .group 0x00000000 0x8 binaries/lflseek.o + .group 0x00000000 0x8 binaries/lflseek.o + .group 0x00000000 0x8 binaries/lflseek.o + .group 0x00000000 0x8 binaries/lflseek.o + .group 0x00000000 0x8 binaries/lflseek.o + .group 0x00000000 0x8 binaries/lflseek.o + .group 0x00000000 0x8 binaries/lflseek.o + .group 0x00000000 0x8 binaries/lflseek.o + .group 0x00000000 0x8 binaries/lflseek.o + .group 0x00000000 0x8 binaries/lflseek.o + .group 0x00000000 0x8 binaries/lflseek.o + .group 0x00000000 0x8 binaries/lflseek.o + .group 0x00000000 0x8 binaries/lflseek.o + .group 0x00000000 0x8 binaries/lflseek.o + .group 0x00000000 0x8 binaries/lflseek.o + .group 0x00000000 0x8 binaries/lflseek.o + .group 0x00000000 0x8 binaries/lflseek.o + .group 0x00000000 0x8 binaries/lflseek.o + .group 0x00000000 0x8 binaries/lflseek.o + .group 0x00000000 0x8 binaries/lflseek.o + .group 0x00000000 0x8 binaries/lflseek.o + .group 0x00000000 0x8 binaries/lflseek.o + .group 0x00000000 0x8 binaries/lflseek.o + .group 0x00000000 0x8 binaries/lflseek.o + .group 0x00000000 0x8 binaries/lflseek.o + .group 0x00000000 0x8 binaries/lflseek.o + .group 0x00000000 0x8 binaries/lflseek.o + .group 0x00000000 0x8 binaries/lflseek.o + .group 0x00000000 0x8 binaries/lflseek.o + .group 0x00000000 0x8 binaries/lflseek.o + .debug_macro 0x00000000 0x838 binaries/lflseek.o + .debug_macro 0x00000000 0x58 binaries/lflseek.o + .debug_macro 0x00000000 0xb2 binaries/lflseek.o + .debug_macro 0x00000000 0x6a binaries/lflseek.o + .debug_macro 0x00000000 0x52 binaries/lflseek.o + .debug_macro 0x00000000 0x10 binaries/lflseek.o + .debug_macro 0x00000000 0x16 binaries/lflseek.o + .debug_macro 0x00000000 0x1c binaries/lflseek.o + .debug_macro 0x00000000 0x1c binaries/lflseek.o + .debug_macro 0x00000000 0x10 binaries/lflseek.o + .debug_macro 0x00000000 0x28 binaries/lflseek.o + .debug_macro 0x00000000 0x1c1 binaries/lflseek.o + .debug_macro 0x00000000 0xa0 binaries/lflseek.o + .debug_macro 0x00000000 0x10 binaries/lflseek.o + .debug_macro 0x00000000 0x22 binaries/lflseek.o + .debug_macro 0x00000000 0x46 binaries/lflseek.o + .debug_macro 0x00000000 0xfa binaries/lflseek.o + .debug_macro 0x00000000 0xdd binaries/lflseek.o + .debug_macro 0x00000000 0x91 binaries/lflseek.o + .debug_macro 0x00000000 0x8e binaries/lflseek.o + .debug_macro 0x00000000 0x82 binaries/lflseek.o + .debug_macro 0x00000000 0x2e binaries/lflseek.o + .debug_macro 0x00000000 0x3a binaries/lflseek.o + .debug_macro 0x00000000 0x4c binaries/lflseek.o + .debug_macro 0x00000000 0x3a binaries/lflseek.o + .debug_macro 0x00000000 0xa0 binaries/lflseek.o + .debug_macro 0x00000000 0x34 binaries/lflseek.o + .debug_macro 0x00000000 0x7c binaries/lflseek.o + .debug_macro 0x00000000 0x1c binaries/lflseek.o + .debug_macro 0x00000000 0xee binaries/lflseek.o + .debug_macro 0x00000000 0x7c binaries/lflseek.o + .debug_macro 0x00000000 0x20 binaries/lflseek.o + .debug_macro 0x00000000 0x10 binaries/lflseek.o + .debug_macro 0x00000000 0x1c binaries/lflseek.o + .debug_macro 0x00000000 0x34 binaries/lflseek.o + .debug_macro 0x00000000 0xeb binaries/lflseek.o + .debug_macro 0x00000000 0x8e binaries/lflseek.o + .group 0x00000000 0x8 binaries/lflwrite.o + .group 0x00000000 0x8 binaries/lflwrite.o + .group 0x00000000 0x8 binaries/lflwrite.o + .group 0x00000000 0x8 binaries/lflwrite.o + .group 0x00000000 0x8 binaries/lflwrite.o + .group 0x00000000 0x8 binaries/lflwrite.o + .group 0x00000000 0x8 binaries/lflwrite.o + .group 0x00000000 0x8 binaries/lflwrite.o + .group 0x00000000 0x8 binaries/lflwrite.o + .group 0x00000000 0x8 binaries/lflwrite.o + .group 0x00000000 0x8 binaries/lflwrite.o + .group 0x00000000 0x8 binaries/lflwrite.o + .group 0x00000000 0x8 binaries/lflwrite.o + .group 0x00000000 0x8 binaries/lflwrite.o + .group 0x00000000 0x8 binaries/lflwrite.o + .group 0x00000000 0x8 binaries/lflwrite.o + .group 0x00000000 0x8 binaries/lflwrite.o + .group 0x00000000 0x8 binaries/lflwrite.o + .group 0x00000000 0x8 binaries/lflwrite.o + .group 0x00000000 0x8 binaries/lflwrite.o + .group 0x00000000 0x8 binaries/lflwrite.o + .group 0x00000000 0x8 binaries/lflwrite.o + .group 0x00000000 0x8 binaries/lflwrite.o + .group 0x00000000 0x8 binaries/lflwrite.o + .group 0x00000000 0x8 binaries/lflwrite.o + .group 0x00000000 0x8 binaries/lflwrite.o + .group 0x00000000 0x8 binaries/lflwrite.o + .group 0x00000000 0x8 binaries/lflwrite.o + .group 0x00000000 0x8 binaries/lflwrite.o + .group 0x00000000 0x8 binaries/lflwrite.o + .group 0x00000000 0x8 binaries/lflwrite.o + .group 0x00000000 0x8 binaries/lflwrite.o + .group 0x00000000 0x8 binaries/lflwrite.o + .group 0x00000000 0x8 binaries/lflwrite.o + .group 0x00000000 0x8 binaries/lflwrite.o + .group 0x00000000 0x8 binaries/lflwrite.o + .group 0x00000000 0x8 binaries/lflwrite.o + .debug_macro 0x00000000 0x838 binaries/lflwrite.o + .debug_macro 0x00000000 0x58 binaries/lflwrite.o + .debug_macro 0x00000000 0xb2 binaries/lflwrite.o + .debug_macro 0x00000000 0x6a binaries/lflwrite.o + .debug_macro 0x00000000 0x52 binaries/lflwrite.o + .debug_macro 0x00000000 0x10 binaries/lflwrite.o + .debug_macro 0x00000000 0x16 binaries/lflwrite.o + .debug_macro 0x00000000 0x1c binaries/lflwrite.o + .debug_macro 0x00000000 0x1c binaries/lflwrite.o + .debug_macro 0x00000000 0x10 binaries/lflwrite.o + .debug_macro 0x00000000 0x28 binaries/lflwrite.o + .debug_macro 0x00000000 0x1c1 binaries/lflwrite.o + .debug_macro 0x00000000 0xa0 binaries/lflwrite.o + .debug_macro 0x00000000 0x10 binaries/lflwrite.o + .debug_macro 0x00000000 0x22 binaries/lflwrite.o + .debug_macro 0x00000000 0x46 binaries/lflwrite.o + .debug_macro 0x00000000 0xfa binaries/lflwrite.o + .debug_macro 0x00000000 0xdd binaries/lflwrite.o + .debug_macro 0x00000000 0x91 binaries/lflwrite.o + .debug_macro 0x00000000 0x8e binaries/lflwrite.o + .debug_macro 0x00000000 0x82 binaries/lflwrite.o + .debug_macro 0x00000000 0x2e binaries/lflwrite.o + .debug_macro 0x00000000 0x3a binaries/lflwrite.o + .debug_macro 0x00000000 0x4c binaries/lflwrite.o + .debug_macro 0x00000000 0x3a binaries/lflwrite.o + .debug_macro 0x00000000 0xa0 binaries/lflwrite.o + .debug_macro 0x00000000 0x34 binaries/lflwrite.o + .debug_macro 0x00000000 0x7c binaries/lflwrite.o + .debug_macro 0x00000000 0x1c binaries/lflwrite.o + .debug_macro 0x00000000 0xee binaries/lflwrite.o + .debug_macro 0x00000000 0x7c binaries/lflwrite.o + .debug_macro 0x00000000 0x20 binaries/lflwrite.o + .debug_macro 0x00000000 0x10 binaries/lflwrite.o + .debug_macro 0x00000000 0x1c binaries/lflwrite.o + .debug_macro 0x00000000 0x34 binaries/lflwrite.o + .debug_macro 0x00000000 0xeb binaries/lflwrite.o + .debug_macro 0x00000000 0x8e binaries/lflwrite.o + .group 0x00000000 0x8 binaries/lfsckfmt.o + .group 0x00000000 0x8 binaries/lfsckfmt.o + .group 0x00000000 0x8 binaries/lfsckfmt.o + .group 0x00000000 0x8 binaries/lfsckfmt.o + .group 0x00000000 0x8 binaries/lfsckfmt.o + .group 0x00000000 0x8 binaries/lfsckfmt.o + .group 0x00000000 0x8 binaries/lfsckfmt.o + .group 0x00000000 0x8 binaries/lfsckfmt.o + .group 0x00000000 0x8 binaries/lfsckfmt.o + .group 0x00000000 0x8 binaries/lfsckfmt.o + .group 0x00000000 0x8 binaries/lfsckfmt.o + .group 0x00000000 0x8 binaries/lfsckfmt.o + .group 0x00000000 0x8 binaries/lfsckfmt.o + .group 0x00000000 0x8 binaries/lfsckfmt.o + .group 0x00000000 0x8 binaries/lfsckfmt.o + .group 0x00000000 0x8 binaries/lfsckfmt.o + .group 0x00000000 0x8 binaries/lfsckfmt.o + .group 0x00000000 0x8 binaries/lfsckfmt.o + .group 0x00000000 0x8 binaries/lfsckfmt.o + .group 0x00000000 0x8 binaries/lfsckfmt.o + .group 0x00000000 0x8 binaries/lfsckfmt.o + .group 0x00000000 0x8 binaries/lfsckfmt.o + .group 0x00000000 0x8 binaries/lfsckfmt.o + .group 0x00000000 0x8 binaries/lfsckfmt.o + .group 0x00000000 0x8 binaries/lfsckfmt.o + .group 0x00000000 0x8 binaries/lfsckfmt.o + .group 0x00000000 0x8 binaries/lfsckfmt.o + .group 0x00000000 0x8 binaries/lfsckfmt.o + .group 0x00000000 0x8 binaries/lfsckfmt.o + .group 0x00000000 0x8 binaries/lfsckfmt.o + .group 0x00000000 0x8 binaries/lfsckfmt.o + .group 0x00000000 0x8 binaries/lfsckfmt.o + .group 0x00000000 0x8 binaries/lfsckfmt.o + .group 0x00000000 0x8 binaries/lfsckfmt.o + .group 0x00000000 0x8 binaries/lfsckfmt.o + .group 0x00000000 0x8 binaries/lfsckfmt.o + .group 0x00000000 0x8 binaries/lfsckfmt.o + .group 0x00000000 0x8 binaries/lfsckfmt.o + .debug_macro 0x00000000 0x838 binaries/lfsckfmt.o + .debug_macro 0x00000000 0x58 binaries/lfsckfmt.o + .debug_macro 0x00000000 0xb2 binaries/lfsckfmt.o + .debug_macro 0x00000000 0x6a binaries/lfsckfmt.o + .debug_macro 0x00000000 0x52 binaries/lfsckfmt.o + .debug_macro 0x00000000 0x10 binaries/lfsckfmt.o + .debug_macro 0x00000000 0x16 binaries/lfsckfmt.o + .debug_macro 0x00000000 0x1c binaries/lfsckfmt.o + .debug_macro 0x00000000 0x1c binaries/lfsckfmt.o + .debug_macro 0x00000000 0x10 binaries/lfsckfmt.o + .debug_macro 0x00000000 0x28 binaries/lfsckfmt.o + .debug_macro 0x00000000 0x1c1 binaries/lfsckfmt.o + .debug_macro 0x00000000 0xa0 binaries/lfsckfmt.o + .debug_macro 0x00000000 0x10 binaries/lfsckfmt.o + .debug_macro 0x00000000 0x22 binaries/lfsckfmt.o + .debug_macro 0x00000000 0x46 binaries/lfsckfmt.o + .debug_macro 0x00000000 0xfa binaries/lfsckfmt.o + .debug_macro 0x00000000 0xdd binaries/lfsckfmt.o + .debug_macro 0x00000000 0x91 binaries/lfsckfmt.o + .debug_macro 0x00000000 0x8e binaries/lfsckfmt.o + .debug_macro 0x00000000 0x82 binaries/lfsckfmt.o + .debug_macro 0x00000000 0x2e binaries/lfsckfmt.o + .debug_macro 0x00000000 0x3a binaries/lfsckfmt.o + .debug_macro 0x00000000 0x4c binaries/lfsckfmt.o + .debug_macro 0x00000000 0x3a binaries/lfsckfmt.o + .debug_macro 0x00000000 0xa0 binaries/lfsckfmt.o + .debug_macro 0x00000000 0x34 binaries/lfsckfmt.o + .debug_macro 0x00000000 0x7c binaries/lfsckfmt.o + .debug_macro 0x00000000 0x1c binaries/lfsckfmt.o + .debug_macro 0x00000000 0xee binaries/lfsckfmt.o + .debug_macro 0x00000000 0x7c binaries/lfsckfmt.o + .debug_macro 0x00000000 0x20 binaries/lfsckfmt.o + .debug_macro 0x00000000 0x10 binaries/lfsckfmt.o + .debug_macro 0x00000000 0x1c binaries/lfsckfmt.o + .debug_macro 0x00000000 0x34 binaries/lfsckfmt.o + .debug_macro 0x00000000 0xeb binaries/lfsckfmt.o + .debug_macro 0x00000000 0x8e binaries/lfsckfmt.o + .debug_macro 0x00000000 0x10 binaries/lfsckfmt.o + .group 0x00000000 0x8 binaries/lfscreate.o + .group 0x00000000 0x8 binaries/lfscreate.o + .group 0x00000000 0x8 binaries/lfscreate.o + .group 0x00000000 0x8 binaries/lfscreate.o + .group 0x00000000 0x8 binaries/lfscreate.o + .group 0x00000000 0x8 binaries/lfscreate.o + .group 0x00000000 0x8 binaries/lfscreate.o + .group 0x00000000 0x8 binaries/lfscreate.o + .group 0x00000000 0x8 binaries/lfscreate.o + .group 0x00000000 0x8 binaries/lfscreate.o + .group 0x00000000 0x8 binaries/lfscreate.o + .group 0x00000000 0x8 binaries/lfscreate.o + .group 0x00000000 0x8 binaries/lfscreate.o + .group 0x00000000 0x8 binaries/lfscreate.o + .group 0x00000000 0x8 binaries/lfscreate.o + .group 0x00000000 0x8 binaries/lfscreate.o + .group 0x00000000 0x8 binaries/lfscreate.o + .group 0x00000000 0x8 binaries/lfscreate.o + .group 0x00000000 0x8 binaries/lfscreate.o + .group 0x00000000 0x8 binaries/lfscreate.o + .group 0x00000000 0x8 binaries/lfscreate.o + .group 0x00000000 0x8 binaries/lfscreate.o + .group 0x00000000 0x8 binaries/lfscreate.o + .group 0x00000000 0x8 binaries/lfscreate.o + .group 0x00000000 0x8 binaries/lfscreate.o + .group 0x00000000 0x8 binaries/lfscreate.o + .group 0x00000000 0x8 binaries/lfscreate.o + .group 0x00000000 0x8 binaries/lfscreate.o + .group 0x00000000 0x8 binaries/lfscreate.o + .group 0x00000000 0x8 binaries/lfscreate.o + .group 0x00000000 0x8 binaries/lfscreate.o + .group 0x00000000 0x8 binaries/lfscreate.o + .group 0x00000000 0x8 binaries/lfscreate.o + .group 0x00000000 0x8 binaries/lfscreate.o + .group 0x00000000 0x8 binaries/lfscreate.o + .group 0x00000000 0x8 binaries/lfscreate.o + .group 0x00000000 0x8 binaries/lfscreate.o + .group 0x00000000 0x8 binaries/lfscreate.o + .debug_macro 0x00000000 0x838 binaries/lfscreate.o + .debug_macro 0x00000000 0x58 binaries/lfscreate.o + .debug_macro 0x00000000 0xb2 binaries/lfscreate.o + .debug_macro 0x00000000 0x6a binaries/lfscreate.o + .debug_macro 0x00000000 0x52 binaries/lfscreate.o + .debug_macro 0x00000000 0x10 binaries/lfscreate.o + .debug_macro 0x00000000 0x16 binaries/lfscreate.o + .debug_macro 0x00000000 0x1c binaries/lfscreate.o + .debug_macro 0x00000000 0x1c binaries/lfscreate.o + .debug_macro 0x00000000 0x10 binaries/lfscreate.o + .debug_macro 0x00000000 0x28 binaries/lfscreate.o + .debug_macro 0x00000000 0x1c1 binaries/lfscreate.o + .debug_macro 0x00000000 0xa0 binaries/lfscreate.o + .debug_macro 0x00000000 0x10 binaries/lfscreate.o + .debug_macro 0x00000000 0x22 binaries/lfscreate.o + .debug_macro 0x00000000 0x46 binaries/lfscreate.o + .debug_macro 0x00000000 0xfa binaries/lfscreate.o + .debug_macro 0x00000000 0xdd binaries/lfscreate.o + .debug_macro 0x00000000 0x91 binaries/lfscreate.o + .debug_macro 0x00000000 0x8e binaries/lfscreate.o + .debug_macro 0x00000000 0x82 binaries/lfscreate.o + .debug_macro 0x00000000 0x2e binaries/lfscreate.o + .debug_macro 0x00000000 0x3a binaries/lfscreate.o + .debug_macro 0x00000000 0x4c binaries/lfscreate.o + .debug_macro 0x00000000 0x3a binaries/lfscreate.o + .debug_macro 0x00000000 0xa0 binaries/lfscreate.o + .debug_macro 0x00000000 0x34 binaries/lfscreate.o + .debug_macro 0x00000000 0x7c binaries/lfscreate.o + .debug_macro 0x00000000 0x1c binaries/lfscreate.o + .debug_macro 0x00000000 0xee binaries/lfscreate.o + .debug_macro 0x00000000 0x7c binaries/lfscreate.o + .debug_macro 0x00000000 0x20 binaries/lfscreate.o + .debug_macro 0x00000000 0x10 binaries/lfscreate.o + .debug_macro 0x00000000 0x1c binaries/lfscreate.o + .debug_macro 0x00000000 0x34 binaries/lfscreate.o + .debug_macro 0x00000000 0xeb binaries/lfscreate.o + .debug_macro 0x00000000 0x8e binaries/lfscreate.o + .debug_macro 0x00000000 0x10 binaries/lfscreate.o + .group 0x00000000 0x8 binaries/lfsetup.o + .group 0x00000000 0x8 binaries/lfsetup.o + .group 0x00000000 0x8 binaries/lfsetup.o + .group 0x00000000 0x8 binaries/lfsetup.o + .group 0x00000000 0x8 binaries/lfsetup.o + .group 0x00000000 0x8 binaries/lfsetup.o + .group 0x00000000 0x8 binaries/lfsetup.o + .group 0x00000000 0x8 binaries/lfsetup.o + .group 0x00000000 0x8 binaries/lfsetup.o + .group 0x00000000 0x8 binaries/lfsetup.o + .group 0x00000000 0x8 binaries/lfsetup.o + .group 0x00000000 0x8 binaries/lfsetup.o + .group 0x00000000 0x8 binaries/lfsetup.o + .group 0x00000000 0x8 binaries/lfsetup.o + .group 0x00000000 0x8 binaries/lfsetup.o + .group 0x00000000 0x8 binaries/lfsetup.o + .group 0x00000000 0x8 binaries/lfsetup.o + .group 0x00000000 0x8 binaries/lfsetup.o + .group 0x00000000 0x8 binaries/lfsetup.o + .group 0x00000000 0x8 binaries/lfsetup.o + .group 0x00000000 0x8 binaries/lfsetup.o + .group 0x00000000 0x8 binaries/lfsetup.o + .group 0x00000000 0x8 binaries/lfsetup.o + .group 0x00000000 0x8 binaries/lfsetup.o + .group 0x00000000 0x8 binaries/lfsetup.o + .group 0x00000000 0x8 binaries/lfsetup.o + .group 0x00000000 0x8 binaries/lfsetup.o + .group 0x00000000 0x8 binaries/lfsetup.o + .group 0x00000000 0x8 binaries/lfsetup.o + .group 0x00000000 0x8 binaries/lfsetup.o + .group 0x00000000 0x8 binaries/lfsetup.o + .group 0x00000000 0x8 binaries/lfsetup.o + .group 0x00000000 0x8 binaries/lfsetup.o + .group 0x00000000 0x8 binaries/lfsetup.o + .group 0x00000000 0x8 binaries/lfsetup.o + .group 0x00000000 0x8 binaries/lfsetup.o + .group 0x00000000 0x8 binaries/lfsetup.o + .debug_macro 0x00000000 0x838 binaries/lfsetup.o + .debug_macro 0x00000000 0x58 binaries/lfsetup.o + .debug_macro 0x00000000 0xb2 binaries/lfsetup.o + .debug_macro 0x00000000 0x6a binaries/lfsetup.o + .debug_macro 0x00000000 0x52 binaries/lfsetup.o + .debug_macro 0x00000000 0x10 binaries/lfsetup.o + .debug_macro 0x00000000 0x16 binaries/lfsetup.o + .debug_macro 0x00000000 0x1c binaries/lfsetup.o + .debug_macro 0x00000000 0x1c binaries/lfsetup.o + .debug_macro 0x00000000 0x10 binaries/lfsetup.o + .debug_macro 0x00000000 0x28 binaries/lfsetup.o + .debug_macro 0x00000000 0x1c1 binaries/lfsetup.o + .debug_macro 0x00000000 0xa0 binaries/lfsetup.o + .debug_macro 0x00000000 0x10 binaries/lfsetup.o + .debug_macro 0x00000000 0x22 binaries/lfsetup.o + .debug_macro 0x00000000 0x46 binaries/lfsetup.o + .debug_macro 0x00000000 0xfa binaries/lfsetup.o + .debug_macro 0x00000000 0xdd binaries/lfsetup.o + .debug_macro 0x00000000 0x91 binaries/lfsetup.o + .debug_macro 0x00000000 0x8e binaries/lfsetup.o + .debug_macro 0x00000000 0x82 binaries/lfsetup.o + .debug_macro 0x00000000 0x2e binaries/lfsetup.o + .debug_macro 0x00000000 0x3a binaries/lfsetup.o + .debug_macro 0x00000000 0x4c binaries/lfsetup.o + .debug_macro 0x00000000 0x3a binaries/lfsetup.o + .debug_macro 0x00000000 0xa0 binaries/lfsetup.o + .debug_macro 0x00000000 0x34 binaries/lfsetup.o + .debug_macro 0x00000000 0x7c binaries/lfsetup.o + .debug_macro 0x00000000 0x1c binaries/lfsetup.o + .debug_macro 0x00000000 0xee binaries/lfsetup.o + .debug_macro 0x00000000 0x7c binaries/lfsetup.o + .debug_macro 0x00000000 0x20 binaries/lfsetup.o + .debug_macro 0x00000000 0x10 binaries/lfsetup.o + .debug_macro 0x00000000 0x1c binaries/lfsetup.o + .debug_macro 0x00000000 0x34 binaries/lfsetup.o + .debug_macro 0x00000000 0xeb binaries/lfsetup.o + .debug_macro 0x00000000 0x8e binaries/lfsetup.o + .group 0x00000000 0x8 binaries/lfsinit.o + .group 0x00000000 0x8 binaries/lfsinit.o + .group 0x00000000 0x8 binaries/lfsinit.o + .group 0x00000000 0x8 binaries/lfsinit.o + .group 0x00000000 0x8 binaries/lfsinit.o + .group 0x00000000 0x8 binaries/lfsinit.o + .group 0x00000000 0x8 binaries/lfsinit.o + .group 0x00000000 0x8 binaries/lfsinit.o + .group 0x00000000 0x8 binaries/lfsinit.o + .group 0x00000000 0x8 binaries/lfsinit.o + .group 0x00000000 0x8 binaries/lfsinit.o + .group 0x00000000 0x8 binaries/lfsinit.o + .group 0x00000000 0x8 binaries/lfsinit.o + .group 0x00000000 0x8 binaries/lfsinit.o + .group 0x00000000 0x8 binaries/lfsinit.o + .group 0x00000000 0x8 binaries/lfsinit.o + .group 0x00000000 0x8 binaries/lfsinit.o + .group 0x00000000 0x8 binaries/lfsinit.o + .group 0x00000000 0x8 binaries/lfsinit.o + .group 0x00000000 0x8 binaries/lfsinit.o + .group 0x00000000 0x8 binaries/lfsinit.o + .group 0x00000000 0x8 binaries/lfsinit.o + .group 0x00000000 0x8 binaries/lfsinit.o + .group 0x00000000 0x8 binaries/lfsinit.o + .group 0x00000000 0x8 binaries/lfsinit.o + .group 0x00000000 0x8 binaries/lfsinit.o + .group 0x00000000 0x8 binaries/lfsinit.o + .group 0x00000000 0x8 binaries/lfsinit.o + .group 0x00000000 0x8 binaries/lfsinit.o + .group 0x00000000 0x8 binaries/lfsinit.o + .group 0x00000000 0x8 binaries/lfsinit.o + .group 0x00000000 0x8 binaries/lfsinit.o + .group 0x00000000 0x8 binaries/lfsinit.o + .group 0x00000000 0x8 binaries/lfsinit.o + .group 0x00000000 0x8 binaries/lfsinit.o + .group 0x00000000 0x8 binaries/lfsinit.o + .group 0x00000000 0x8 binaries/lfsinit.o + .debug_macro 0x00000000 0x838 binaries/lfsinit.o + .debug_macro 0x00000000 0x58 binaries/lfsinit.o + .debug_macro 0x00000000 0xb2 binaries/lfsinit.o + .debug_macro 0x00000000 0x6a binaries/lfsinit.o + .debug_macro 0x00000000 0x52 binaries/lfsinit.o + .debug_macro 0x00000000 0x10 binaries/lfsinit.o + .debug_macro 0x00000000 0x16 binaries/lfsinit.o + .debug_macro 0x00000000 0x1c binaries/lfsinit.o + .debug_macro 0x00000000 0x1c binaries/lfsinit.o + .debug_macro 0x00000000 0x10 binaries/lfsinit.o + .debug_macro 0x00000000 0x28 binaries/lfsinit.o + .debug_macro 0x00000000 0x1c1 binaries/lfsinit.o + .debug_macro 0x00000000 0xa0 binaries/lfsinit.o + .debug_macro 0x00000000 0x10 binaries/lfsinit.o + .debug_macro 0x00000000 0x22 binaries/lfsinit.o + .debug_macro 0x00000000 0x46 binaries/lfsinit.o + .debug_macro 0x00000000 0xfa binaries/lfsinit.o + .debug_macro 0x00000000 0xdd binaries/lfsinit.o + .debug_macro 0x00000000 0x91 binaries/lfsinit.o + .debug_macro 0x00000000 0x8e binaries/lfsinit.o + .debug_macro 0x00000000 0x82 binaries/lfsinit.o + .debug_macro 0x00000000 0x2e binaries/lfsinit.o + .debug_macro 0x00000000 0x3a binaries/lfsinit.o + .debug_macro 0x00000000 0x4c binaries/lfsinit.o + .debug_macro 0x00000000 0x3a binaries/lfsinit.o + .debug_macro 0x00000000 0xa0 binaries/lfsinit.o + .debug_macro 0x00000000 0x34 binaries/lfsinit.o + .debug_macro 0x00000000 0x7c binaries/lfsinit.o + .debug_macro 0x00000000 0x1c binaries/lfsinit.o + .debug_macro 0x00000000 0xee binaries/lfsinit.o + .debug_macro 0x00000000 0x7c binaries/lfsinit.o + .debug_macro 0x00000000 0x20 binaries/lfsinit.o + .debug_macro 0x00000000 0x10 binaries/lfsinit.o + .debug_macro 0x00000000 0x1c binaries/lfsinit.o + .debug_macro 0x00000000 0x34 binaries/lfsinit.o + .debug_macro 0x00000000 0xeb binaries/lfsinit.o + .debug_macro 0x00000000 0x8e binaries/lfsinit.o + .group 0x00000000 0x8 binaries/lfsopen.o + .group 0x00000000 0x8 binaries/lfsopen.o + .group 0x00000000 0x8 binaries/lfsopen.o + .group 0x00000000 0x8 binaries/lfsopen.o + .group 0x00000000 0x8 binaries/lfsopen.o + .group 0x00000000 0x8 binaries/lfsopen.o + .group 0x00000000 0x8 binaries/lfsopen.o + .group 0x00000000 0x8 binaries/lfsopen.o + .group 0x00000000 0x8 binaries/lfsopen.o + .group 0x00000000 0x8 binaries/lfsopen.o + .group 0x00000000 0x8 binaries/lfsopen.o + .group 0x00000000 0x8 binaries/lfsopen.o + .group 0x00000000 0x8 binaries/lfsopen.o + .group 0x00000000 0x8 binaries/lfsopen.o + .group 0x00000000 0x8 binaries/lfsopen.o + .group 0x00000000 0x8 binaries/lfsopen.o + .group 0x00000000 0x8 binaries/lfsopen.o + .group 0x00000000 0x8 binaries/lfsopen.o + .group 0x00000000 0x8 binaries/lfsopen.o + .group 0x00000000 0x8 binaries/lfsopen.o + .group 0x00000000 0x8 binaries/lfsopen.o + .group 0x00000000 0x8 binaries/lfsopen.o + .group 0x00000000 0x8 binaries/lfsopen.o + .group 0x00000000 0x8 binaries/lfsopen.o + .group 0x00000000 0x8 binaries/lfsopen.o + .group 0x00000000 0x8 binaries/lfsopen.o + .group 0x00000000 0x8 binaries/lfsopen.o + .group 0x00000000 0x8 binaries/lfsopen.o + .group 0x00000000 0x8 binaries/lfsopen.o + .group 0x00000000 0x8 binaries/lfsopen.o + .group 0x00000000 0x8 binaries/lfsopen.o + .group 0x00000000 0x8 binaries/lfsopen.o + .group 0x00000000 0x8 binaries/lfsopen.o + .group 0x00000000 0x8 binaries/lfsopen.o + .group 0x00000000 0x8 binaries/lfsopen.o + .group 0x00000000 0x8 binaries/lfsopen.o + .group 0x00000000 0x8 binaries/lfsopen.o + .debug_macro 0x00000000 0x838 binaries/lfsopen.o + .debug_macro 0x00000000 0x58 binaries/lfsopen.o + .debug_macro 0x00000000 0xb2 binaries/lfsopen.o + .debug_macro 0x00000000 0x6a binaries/lfsopen.o + .debug_macro 0x00000000 0x52 binaries/lfsopen.o + .debug_macro 0x00000000 0x10 binaries/lfsopen.o + .debug_macro 0x00000000 0x16 binaries/lfsopen.o + .debug_macro 0x00000000 0x1c binaries/lfsopen.o + .debug_macro 0x00000000 0x1c binaries/lfsopen.o + .debug_macro 0x00000000 0x10 binaries/lfsopen.o + .debug_macro 0x00000000 0x28 binaries/lfsopen.o + .debug_macro 0x00000000 0x1c1 binaries/lfsopen.o + .debug_macro 0x00000000 0xa0 binaries/lfsopen.o + .debug_macro 0x00000000 0x10 binaries/lfsopen.o + .debug_macro 0x00000000 0x22 binaries/lfsopen.o + .debug_macro 0x00000000 0x46 binaries/lfsopen.o + .debug_macro 0x00000000 0xfa binaries/lfsopen.o + .debug_macro 0x00000000 0xdd binaries/lfsopen.o + .debug_macro 0x00000000 0x91 binaries/lfsopen.o + .debug_macro 0x00000000 0x8e binaries/lfsopen.o + .debug_macro 0x00000000 0x82 binaries/lfsopen.o + .debug_macro 0x00000000 0x2e binaries/lfsopen.o + .debug_macro 0x00000000 0x3a binaries/lfsopen.o + .debug_macro 0x00000000 0x4c binaries/lfsopen.o + .debug_macro 0x00000000 0x3a binaries/lfsopen.o + .debug_macro 0x00000000 0xa0 binaries/lfsopen.o + .debug_macro 0x00000000 0x34 binaries/lfsopen.o + .debug_macro 0x00000000 0x7c binaries/lfsopen.o + .debug_macro 0x00000000 0x1c binaries/lfsopen.o + .debug_macro 0x00000000 0xee binaries/lfsopen.o + .debug_macro 0x00000000 0x7c binaries/lfsopen.o + .debug_macro 0x00000000 0x20 binaries/lfsopen.o + .debug_macro 0x00000000 0x10 binaries/lfsopen.o + .debug_macro 0x00000000 0x1c binaries/lfsopen.o + .debug_macro 0x00000000 0x34 binaries/lfsopen.o + .debug_macro 0x00000000 0xeb binaries/lfsopen.o + .debug_macro 0x00000000 0x8e binaries/lfsopen.o + .group 0x00000000 0x8 binaries/lftruncate.o + .group 0x00000000 0x8 binaries/lftruncate.o + .group 0x00000000 0x8 binaries/lftruncate.o + .group 0x00000000 0x8 binaries/lftruncate.o + .group 0x00000000 0x8 binaries/lftruncate.o + .group 0x00000000 0x8 binaries/lftruncate.o + .group 0x00000000 0x8 binaries/lftruncate.o + .group 0x00000000 0x8 binaries/lftruncate.o + .group 0x00000000 0x8 binaries/lftruncate.o + .group 0x00000000 0x8 binaries/lftruncate.o + .group 0x00000000 0x8 binaries/lftruncate.o + .group 0x00000000 0x8 binaries/lftruncate.o + .group 0x00000000 0x8 binaries/lftruncate.o + .group 0x00000000 0x8 binaries/lftruncate.o + .group 0x00000000 0x8 binaries/lftruncate.o + .group 0x00000000 0x8 binaries/lftruncate.o + .group 0x00000000 0x8 binaries/lftruncate.o + .group 0x00000000 0x8 binaries/lftruncate.o + .group 0x00000000 0x8 binaries/lftruncate.o + .group 0x00000000 0x8 binaries/lftruncate.o + .group 0x00000000 0x8 binaries/lftruncate.o + .group 0x00000000 0x8 binaries/lftruncate.o + .group 0x00000000 0x8 binaries/lftruncate.o + .group 0x00000000 0x8 binaries/lftruncate.o + .group 0x00000000 0x8 binaries/lftruncate.o + .group 0x00000000 0x8 binaries/lftruncate.o + .group 0x00000000 0x8 binaries/lftruncate.o + .group 0x00000000 0x8 binaries/lftruncate.o + .group 0x00000000 0x8 binaries/lftruncate.o + .group 0x00000000 0x8 binaries/lftruncate.o + .group 0x00000000 0x8 binaries/lftruncate.o + .group 0x00000000 0x8 binaries/lftruncate.o + .group 0x00000000 0x8 binaries/lftruncate.o + .group 0x00000000 0x8 binaries/lftruncate.o + .group 0x00000000 0x8 binaries/lftruncate.o + .group 0x00000000 0x8 binaries/lftruncate.o + .group 0x00000000 0x8 binaries/lftruncate.o + .debug_macro 0x00000000 0x838 binaries/lftruncate.o + .debug_macro 0x00000000 0x58 binaries/lftruncate.o + .debug_macro 0x00000000 0xb2 binaries/lftruncate.o + .debug_macro 0x00000000 0x6a binaries/lftruncate.o + .debug_macro 0x00000000 0x52 binaries/lftruncate.o + .debug_macro 0x00000000 0x10 binaries/lftruncate.o + .debug_macro 0x00000000 0x16 binaries/lftruncate.o + .debug_macro 0x00000000 0x1c binaries/lftruncate.o + .debug_macro 0x00000000 0x1c binaries/lftruncate.o + .debug_macro 0x00000000 0x10 binaries/lftruncate.o + .debug_macro 0x00000000 0x28 binaries/lftruncate.o + .debug_macro 0x00000000 0x1c1 binaries/lftruncate.o + .debug_macro 0x00000000 0xa0 binaries/lftruncate.o + .debug_macro 0x00000000 0x10 binaries/lftruncate.o + .debug_macro 0x00000000 0x22 binaries/lftruncate.o + .debug_macro 0x00000000 0x46 binaries/lftruncate.o + .debug_macro 0x00000000 0xfa binaries/lftruncate.o + .debug_macro 0x00000000 0xdd binaries/lftruncate.o + .debug_macro 0x00000000 0x91 binaries/lftruncate.o + .debug_macro 0x00000000 0x8e binaries/lftruncate.o + .debug_macro 0x00000000 0x82 binaries/lftruncate.o + .debug_macro 0x00000000 0x2e binaries/lftruncate.o + .debug_macro 0x00000000 0x3a binaries/lftruncate.o + .debug_macro 0x00000000 0x4c binaries/lftruncate.o + .debug_macro 0x00000000 0x3a binaries/lftruncate.o + .debug_macro 0x00000000 0xa0 binaries/lftruncate.o + .debug_macro 0x00000000 0x34 binaries/lftruncate.o + .debug_macro 0x00000000 0x7c binaries/lftruncate.o + .debug_macro 0x00000000 0x1c binaries/lftruncate.o + .debug_macro 0x00000000 0xee binaries/lftruncate.o + .debug_macro 0x00000000 0x7c binaries/lftruncate.o + .debug_macro 0x00000000 0x20 binaries/lftruncate.o + .debug_macro 0x00000000 0x10 binaries/lftruncate.o + .debug_macro 0x00000000 0x1c binaries/lftruncate.o + .debug_macro 0x00000000 0x34 binaries/lftruncate.o + .debug_macro 0x00000000 0xeb binaries/lftruncate.o + .debug_macro 0x00000000 0x8e binaries/lftruncate.o + .group 0x00000000 0x8 binaries/kprintf.o + .group 0x00000000 0x8 binaries/kprintf.o + .group 0x00000000 0x8 binaries/kprintf.o + .debug_macro 0x00000000 0x838 binaries/kprintf.o + .debug_macro 0x00000000 0x58 binaries/kprintf.o + .debug_macro 0x00000000 0x1c binaries/kprintf.o + .group 0x00000000 0x8 binaries/kvprintf.o + .group 0x00000000 0x8 binaries/kvprintf.o + .group 0x00000000 0x8 binaries/kvprintf.o + .group 0x00000000 0x8 binaries/kvprintf.o + .group 0x00000000 0x8 binaries/kvprintf.o + .group 0x00000000 0x8 binaries/kvprintf.o + .group 0x00000000 0x8 binaries/kvprintf.o + .group 0x00000000 0x8 binaries/kvprintf.o + .group 0x00000000 0x8 binaries/kvprintf.o + .group 0x00000000 0x8 binaries/kvprintf.o + .group 0x00000000 0x8 binaries/kvprintf.o + .group 0x00000000 0x8 binaries/kvprintf.o + .group 0x00000000 0x8 binaries/kvprintf.o + .group 0x00000000 0x8 binaries/kvprintf.o + .group 0x00000000 0x8 binaries/kvprintf.o + .group 0x00000000 0x8 binaries/kvprintf.o + .group 0x00000000 0x8 binaries/kvprintf.o + .group 0x00000000 0x8 binaries/kvprintf.o + .group 0x00000000 0x8 binaries/kvprintf.o + .group 0x00000000 0x8 binaries/kvprintf.o + .group 0x00000000 0x8 binaries/kvprintf.o + .group 0x00000000 0x8 binaries/kvprintf.o + .group 0x00000000 0x8 binaries/kvprintf.o + .group 0x00000000 0x8 binaries/kvprintf.o + .group 0x00000000 0x8 binaries/kvprintf.o + .group 0x00000000 0x8 binaries/kvprintf.o + .group 0x00000000 0x8 binaries/kvprintf.o + .group 0x00000000 0x8 binaries/kvprintf.o + .group 0x00000000 0x8 binaries/kvprintf.o + .group 0x00000000 0x8 binaries/kvprintf.o + .group 0x00000000 0x8 binaries/kvprintf.o + .group 0x00000000 0x8 binaries/kvprintf.o + .group 0x00000000 0x8 binaries/kvprintf.o + .group 0x00000000 0x8 binaries/kvprintf.o + .group 0x00000000 0x8 binaries/kvprintf.o + .group 0x00000000 0x8 binaries/kvprintf.o + .group 0x00000000 0x8 binaries/kvprintf.o + .group 0x00000000 0x8 binaries/kvprintf.o + .debug_macro 0x00000000 0x838 binaries/kvprintf.o + .debug_macro 0x00000000 0x58 binaries/kvprintf.o + .debug_macro 0x00000000 0xb2 binaries/kvprintf.o + .debug_macro 0x00000000 0x6a binaries/kvprintf.o + .debug_macro 0x00000000 0x52 binaries/kvprintf.o + .debug_macro 0x00000000 0x10 binaries/kvprintf.o + .debug_macro 0x00000000 0x16 binaries/kvprintf.o + .debug_macro 0x00000000 0x1c binaries/kvprintf.o + .debug_macro 0x00000000 0x1c binaries/kvprintf.o + .debug_macro 0x00000000 0x10 binaries/kvprintf.o + .debug_macro 0x00000000 0x28 binaries/kvprintf.o + .debug_macro 0x00000000 0x1c1 binaries/kvprintf.o + .debug_macro 0x00000000 0xa0 binaries/kvprintf.o + .debug_macro 0x00000000 0x10 binaries/kvprintf.o + .debug_macro 0x00000000 0x22 binaries/kvprintf.o + .debug_macro 0x00000000 0x46 binaries/kvprintf.o + .debug_macro 0x00000000 0xfa binaries/kvprintf.o + .debug_macro 0x00000000 0xdd binaries/kvprintf.o + .debug_macro 0x00000000 0x91 binaries/kvprintf.o + .debug_macro 0x00000000 0x8e binaries/kvprintf.o + .debug_macro 0x00000000 0x82 binaries/kvprintf.o + .debug_macro 0x00000000 0x2e binaries/kvprintf.o + .debug_macro 0x00000000 0x3a binaries/kvprintf.o + .debug_macro 0x00000000 0x4c binaries/kvprintf.o + .debug_macro 0x00000000 0x3a binaries/kvprintf.o + .debug_macro 0x00000000 0xa0 binaries/kvprintf.o + .debug_macro 0x00000000 0x34 binaries/kvprintf.o + .debug_macro 0x00000000 0x7c binaries/kvprintf.o + .debug_macro 0x00000000 0x1c binaries/kvprintf.o + .debug_macro 0x00000000 0xee binaries/kvprintf.o + .debug_macro 0x00000000 0x7c binaries/kvprintf.o + .debug_macro 0x00000000 0x20 binaries/kvprintf.o + .debug_macro 0x00000000 0x10 binaries/kvprintf.o + .debug_macro 0x00000000 0x1c binaries/kvprintf.o + .debug_macro 0x00000000 0x34 binaries/kvprintf.o + .debug_macro 0x00000000 0xeb binaries/kvprintf.o + .debug_macro 0x00000000 0x8e binaries/kvprintf.o + .debug_macro 0x00000000 0x1c binaries/kvprintf.o + .group 0x00000000 0x8 binaries/uartControl.o + .group 0x00000000 0x8 binaries/uartControl.o + .group 0x00000000 0x8 binaries/uartControl.o + .group 0x00000000 0x8 binaries/uartControl.o + .group 0x00000000 0x8 binaries/uartControl.o + .group 0x00000000 0x8 binaries/uartControl.o + .group 0x00000000 0x8 binaries/uartControl.o + .group 0x00000000 0x8 binaries/uartControl.o + .group 0x00000000 0x8 binaries/uartControl.o + .group 0x00000000 0x8 binaries/uartControl.o + .group 0x00000000 0x8 binaries/uartControl.o + .group 0x00000000 0x8 binaries/uartControl.o + .group 0x00000000 0x8 binaries/uartControl.o + .group 0x00000000 0x8 binaries/uartControl.o + .group 0x00000000 0x8 binaries/uartControl.o + .group 0x00000000 0x8 binaries/uartControl.o + .group 0x00000000 0x8 binaries/uartControl.o + .group 0x00000000 0x8 binaries/uartControl.o + .group 0x00000000 0x8 binaries/uartControl.o + .group 0x00000000 0x8 binaries/uartControl.o + .group 0x00000000 0x8 binaries/uartControl.o + .group 0x00000000 0x8 binaries/uartControl.o + .group 0x00000000 0x8 binaries/uartControl.o + .group 0x00000000 0x8 binaries/uartControl.o + .group 0x00000000 0x8 binaries/uartControl.o + .group 0x00000000 0x8 binaries/uartControl.o + .group 0x00000000 0x8 binaries/uartControl.o + .group 0x00000000 0x8 binaries/uartControl.o + .group 0x00000000 0x8 binaries/uartControl.o + .group 0x00000000 0x8 binaries/uartControl.o + .group 0x00000000 0x8 binaries/uartControl.o + .group 0x00000000 0x8 binaries/uartControl.o + .group 0x00000000 0x8 binaries/uartControl.o + .group 0x00000000 0x8 binaries/uartControl.o + .group 0x00000000 0x8 binaries/uartControl.o + .group 0x00000000 0x8 binaries/uartControl.o + .group 0x00000000 0x8 binaries/uartControl.o + .debug_macro 0x00000000 0x838 binaries/uartControl.o + .debug_macro 0x00000000 0x58 binaries/uartControl.o + .debug_macro 0x00000000 0xb2 binaries/uartControl.o + .debug_macro 0x00000000 0x6a binaries/uartControl.o + .debug_macro 0x00000000 0x52 binaries/uartControl.o + .debug_macro 0x00000000 0x10 binaries/uartControl.o + .debug_macro 0x00000000 0x16 binaries/uartControl.o + .debug_macro 0x00000000 0x1c binaries/uartControl.o + .debug_macro 0x00000000 0x1c binaries/uartControl.o + .debug_macro 0x00000000 0x10 binaries/uartControl.o + .debug_macro 0x00000000 0x28 binaries/uartControl.o + .debug_macro 0x00000000 0x1c1 binaries/uartControl.o + .debug_macro 0x00000000 0xa0 binaries/uartControl.o + .debug_macro 0x00000000 0x10 binaries/uartControl.o + .debug_macro 0x00000000 0x22 binaries/uartControl.o + .debug_macro 0x00000000 0x46 binaries/uartControl.o + .debug_macro 0x00000000 0xfa binaries/uartControl.o + .debug_macro 0x00000000 0xdd binaries/uartControl.o + .debug_macro 0x00000000 0x91 binaries/uartControl.o + .debug_macro 0x00000000 0x8e binaries/uartControl.o + .debug_macro 0x00000000 0x82 binaries/uartControl.o + .debug_macro 0x00000000 0x2e binaries/uartControl.o + .debug_macro 0x00000000 0x3a binaries/uartControl.o + .debug_macro 0x00000000 0x4c binaries/uartControl.o + .debug_macro 0x00000000 0x3a binaries/uartControl.o + .debug_macro 0x00000000 0xa0 binaries/uartControl.o + .debug_macro 0x00000000 0x34 binaries/uartControl.o + .debug_macro 0x00000000 0x7c binaries/uartControl.o + .debug_macro 0x00000000 0x1c binaries/uartControl.o + .debug_macro 0x00000000 0xee binaries/uartControl.o + .debug_macro 0x00000000 0x7c binaries/uartControl.o + .debug_macro 0x00000000 0x20 binaries/uartControl.o + .debug_macro 0x00000000 0x10 binaries/uartControl.o + .debug_macro 0x00000000 0x1c binaries/uartControl.o + .debug_macro 0x00000000 0x34 binaries/uartControl.o + .debug_macro 0x00000000 0xeb binaries/uartControl.o + .debug_macro 0x00000000 0x8e binaries/uartControl.o + .group 0x00000000 0x8 binaries/uartGetc.o + .group 0x00000000 0x8 binaries/uartGetc.o + .group 0x00000000 0x8 binaries/uartGetc.o + .group 0x00000000 0x8 binaries/uartGetc.o + .group 0x00000000 0x8 binaries/uartGetc.o + .group 0x00000000 0x8 binaries/uartGetc.o + .group 0x00000000 0x8 binaries/uartGetc.o + .group 0x00000000 0x8 binaries/uartGetc.o + .group 0x00000000 0x8 binaries/uartGetc.o + .group 0x00000000 0x8 binaries/uartGetc.o + .group 0x00000000 0x8 binaries/uartGetc.o + .group 0x00000000 0x8 binaries/uartGetc.o + .group 0x00000000 0x8 binaries/uartGetc.o + .group 0x00000000 0x8 binaries/uartGetc.o + .group 0x00000000 0x8 binaries/uartGetc.o + .group 0x00000000 0x8 binaries/uartGetc.o + .group 0x00000000 0x8 binaries/uartGetc.o + .group 0x00000000 0x8 binaries/uartGetc.o + .group 0x00000000 0x8 binaries/uartGetc.o + .group 0x00000000 0x8 binaries/uartGetc.o + .group 0x00000000 0x8 binaries/uartGetc.o + .group 0x00000000 0x8 binaries/uartGetc.o + .group 0x00000000 0x8 binaries/uartGetc.o + .group 0x00000000 0x8 binaries/uartGetc.o + .group 0x00000000 0x8 binaries/uartGetc.o + .group 0x00000000 0x8 binaries/uartGetc.o + .group 0x00000000 0x8 binaries/uartGetc.o + .group 0x00000000 0x8 binaries/uartGetc.o + .group 0x00000000 0x8 binaries/uartGetc.o + .group 0x00000000 0x8 binaries/uartGetc.o + .group 0x00000000 0x8 binaries/uartGetc.o + .group 0x00000000 0x8 binaries/uartGetc.o + .group 0x00000000 0x8 binaries/uartGetc.o + .group 0x00000000 0x8 binaries/uartGetc.o + .group 0x00000000 0x8 binaries/uartGetc.o + .group 0x00000000 0x8 binaries/uartGetc.o + .group 0x00000000 0x8 binaries/uartGetc.o + .debug_macro 0x00000000 0x838 binaries/uartGetc.o + .debug_macro 0x00000000 0x58 binaries/uartGetc.o + .debug_macro 0x00000000 0xb2 binaries/uartGetc.o + .debug_macro 0x00000000 0x6a binaries/uartGetc.o + .debug_macro 0x00000000 0x52 binaries/uartGetc.o + .debug_macro 0x00000000 0x10 binaries/uartGetc.o + .debug_macro 0x00000000 0x16 binaries/uartGetc.o + .debug_macro 0x00000000 0x1c binaries/uartGetc.o + .debug_macro 0x00000000 0x1c binaries/uartGetc.o + .debug_macro 0x00000000 0x10 binaries/uartGetc.o + .debug_macro 0x00000000 0x28 binaries/uartGetc.o + .debug_macro 0x00000000 0x1c1 binaries/uartGetc.o + .debug_macro 0x00000000 0xa0 binaries/uartGetc.o + .debug_macro 0x00000000 0x10 binaries/uartGetc.o + .debug_macro 0x00000000 0x22 binaries/uartGetc.o + .debug_macro 0x00000000 0x46 binaries/uartGetc.o + .debug_macro 0x00000000 0xfa binaries/uartGetc.o + .debug_macro 0x00000000 0xdd binaries/uartGetc.o + .debug_macro 0x00000000 0x91 binaries/uartGetc.o + .debug_macro 0x00000000 0x8e binaries/uartGetc.o + .debug_macro 0x00000000 0x82 binaries/uartGetc.o + .debug_macro 0x00000000 0x2e binaries/uartGetc.o + .debug_macro 0x00000000 0x3a binaries/uartGetc.o + .debug_macro 0x00000000 0x4c binaries/uartGetc.o + .debug_macro 0x00000000 0x3a binaries/uartGetc.o + .debug_macro 0x00000000 0xa0 binaries/uartGetc.o + .debug_macro 0x00000000 0x34 binaries/uartGetc.o + .debug_macro 0x00000000 0x7c binaries/uartGetc.o + .debug_macro 0x00000000 0x1c binaries/uartGetc.o + .debug_macro 0x00000000 0xee binaries/uartGetc.o + .debug_macro 0x00000000 0x7c binaries/uartGetc.o + .debug_macro 0x00000000 0x20 binaries/uartGetc.o + .debug_macro 0x00000000 0x10 binaries/uartGetc.o + .debug_macro 0x00000000 0x1c binaries/uartGetc.o + .debug_macro 0x00000000 0x34 binaries/uartGetc.o + .debug_macro 0x00000000 0xeb binaries/uartGetc.o + .debug_macro 0x00000000 0x8e binaries/uartGetc.o + .group 0x00000000 0x8 binaries/uartInit.o + .group 0x00000000 0x8 binaries/uartInit.o + .group 0x00000000 0x8 binaries/uartInit.o + .group 0x00000000 0x8 binaries/uartInit.o + .group 0x00000000 0x8 binaries/uartInit.o + .group 0x00000000 0x8 binaries/uartInit.o + .group 0x00000000 0x8 binaries/uartInit.o + .group 0x00000000 0x8 binaries/uartInit.o + .group 0x00000000 0x8 binaries/uartInit.o + .group 0x00000000 0x8 binaries/uartInit.o + .group 0x00000000 0x8 binaries/uartInit.o + .group 0x00000000 0x8 binaries/uartInit.o + .group 0x00000000 0x8 binaries/uartInit.o + .group 0x00000000 0x8 binaries/uartInit.o + .group 0x00000000 0x8 binaries/uartInit.o + .group 0x00000000 0x8 binaries/uartInit.o + .group 0x00000000 0x8 binaries/uartInit.o + .group 0x00000000 0x8 binaries/uartInit.o + .group 0x00000000 0x8 binaries/uartInit.o + .group 0x00000000 0x8 binaries/uartInit.o + .group 0x00000000 0x8 binaries/uartInit.o + .group 0x00000000 0x8 binaries/uartInit.o + .group 0x00000000 0x8 binaries/uartInit.o + .group 0x00000000 0x8 binaries/uartInit.o + .group 0x00000000 0x8 binaries/uartInit.o + .group 0x00000000 0x8 binaries/uartInit.o + .group 0x00000000 0x8 binaries/uartInit.o + .group 0x00000000 0x8 binaries/uartInit.o + .group 0x00000000 0x8 binaries/uartInit.o + .group 0x00000000 0x8 binaries/uartInit.o + .group 0x00000000 0x8 binaries/uartInit.o + .group 0x00000000 0x8 binaries/uartInit.o + .group 0x00000000 0x8 binaries/uartInit.o + .group 0x00000000 0x8 binaries/uartInit.o + .group 0x00000000 0x8 binaries/uartInit.o + .group 0x00000000 0x8 binaries/uartInit.o + .group 0x00000000 0x8 binaries/uartInit.o + .debug_macro 0x00000000 0x838 binaries/uartInit.o + .debug_macro 0x00000000 0x58 binaries/uartInit.o + .debug_macro 0x00000000 0xb2 binaries/uartInit.o + .debug_macro 0x00000000 0x6a binaries/uartInit.o + .debug_macro 0x00000000 0x52 binaries/uartInit.o + .debug_macro 0x00000000 0x10 binaries/uartInit.o + .debug_macro 0x00000000 0x16 binaries/uartInit.o + .debug_macro 0x00000000 0x1c binaries/uartInit.o + .debug_macro 0x00000000 0x1c binaries/uartInit.o + .debug_macro 0x00000000 0x10 binaries/uartInit.o + .debug_macro 0x00000000 0x28 binaries/uartInit.o + .debug_macro 0x00000000 0x1c1 binaries/uartInit.o + .debug_macro 0x00000000 0xa0 binaries/uartInit.o + .debug_macro 0x00000000 0x10 binaries/uartInit.o + .debug_macro 0x00000000 0x22 binaries/uartInit.o + .debug_macro 0x00000000 0x46 binaries/uartInit.o + .debug_macro 0x00000000 0xfa binaries/uartInit.o + .debug_macro 0x00000000 0xdd binaries/uartInit.o + .debug_macro 0x00000000 0x91 binaries/uartInit.o + .debug_macro 0x00000000 0x8e binaries/uartInit.o + .debug_macro 0x00000000 0x82 binaries/uartInit.o + .debug_macro 0x00000000 0x2e binaries/uartInit.o + .debug_macro 0x00000000 0x3a binaries/uartInit.o + .debug_macro 0x00000000 0x4c binaries/uartInit.o + .debug_macro 0x00000000 0x3a binaries/uartInit.o + .debug_macro 0x00000000 0xa0 binaries/uartInit.o + .debug_macro 0x00000000 0x34 binaries/uartInit.o + .debug_macro 0x00000000 0x7c binaries/uartInit.o + .debug_macro 0x00000000 0x1c binaries/uartInit.o + .debug_macro 0x00000000 0xee binaries/uartInit.o + .debug_macro 0x00000000 0x7c binaries/uartInit.o + .debug_macro 0x00000000 0x20 binaries/uartInit.o + .debug_macro 0x00000000 0x10 binaries/uartInit.o + .debug_macro 0x00000000 0x1c binaries/uartInit.o + .debug_macro 0x00000000 0x34 binaries/uartInit.o + .debug_macro 0x00000000 0xeb binaries/uartInit.o + .debug_macro 0x00000000 0x8e binaries/uartInit.o + .group 0x00000000 0x8 binaries/uartPutc.o + .group 0x00000000 0x8 binaries/uartPutc.o + .group 0x00000000 0x8 binaries/uartPutc.o + .group 0x00000000 0x8 binaries/uartPutc.o + .group 0x00000000 0x8 binaries/uartPutc.o + .group 0x00000000 0x8 binaries/uartPutc.o + .group 0x00000000 0x8 binaries/uartPutc.o + .group 0x00000000 0x8 binaries/uartPutc.o + .group 0x00000000 0x8 binaries/uartPutc.o + .group 0x00000000 0x8 binaries/uartPutc.o + .group 0x00000000 0x8 binaries/uartPutc.o + .group 0x00000000 0x8 binaries/uartPutc.o + .group 0x00000000 0x8 binaries/uartPutc.o + .group 0x00000000 0x8 binaries/uartPutc.o + .group 0x00000000 0x8 binaries/uartPutc.o + .group 0x00000000 0x8 binaries/uartPutc.o + .group 0x00000000 0x8 binaries/uartPutc.o + .group 0x00000000 0x8 binaries/uartPutc.o + .group 0x00000000 0x8 binaries/uartPutc.o + .group 0x00000000 0x8 binaries/uartPutc.o + .group 0x00000000 0x8 binaries/uartPutc.o + .group 0x00000000 0x8 binaries/uartPutc.o + .group 0x00000000 0x8 binaries/uartPutc.o + .group 0x00000000 0x8 binaries/uartPutc.o + .group 0x00000000 0x8 binaries/uartPutc.o + .group 0x00000000 0x8 binaries/uartPutc.o + .group 0x00000000 0x8 binaries/uartPutc.o + .group 0x00000000 0x8 binaries/uartPutc.o + .group 0x00000000 0x8 binaries/uartPutc.o + .group 0x00000000 0x8 binaries/uartPutc.o + .group 0x00000000 0x8 binaries/uartPutc.o + .group 0x00000000 0x8 binaries/uartPutc.o + .group 0x00000000 0x8 binaries/uartPutc.o + .group 0x00000000 0x8 binaries/uartPutc.o + .group 0x00000000 0x8 binaries/uartPutc.o + .group 0x00000000 0x8 binaries/uartPutc.o + .group 0x00000000 0x8 binaries/uartPutc.o + .debug_macro 0x00000000 0x838 binaries/uartPutc.o + .debug_macro 0x00000000 0x58 binaries/uartPutc.o + .debug_macro 0x00000000 0xb2 binaries/uartPutc.o + .debug_macro 0x00000000 0x6a binaries/uartPutc.o + .debug_macro 0x00000000 0x52 binaries/uartPutc.o + .debug_macro 0x00000000 0x10 binaries/uartPutc.o + .debug_macro 0x00000000 0x16 binaries/uartPutc.o + .debug_macro 0x00000000 0x1c binaries/uartPutc.o + .debug_macro 0x00000000 0x1c binaries/uartPutc.o + .debug_macro 0x00000000 0x10 binaries/uartPutc.o + .debug_macro 0x00000000 0x28 binaries/uartPutc.o + .debug_macro 0x00000000 0x1c1 binaries/uartPutc.o + .debug_macro 0x00000000 0xa0 binaries/uartPutc.o + .debug_macro 0x00000000 0x10 binaries/uartPutc.o + .debug_macro 0x00000000 0x22 binaries/uartPutc.o + .debug_macro 0x00000000 0x46 binaries/uartPutc.o + .debug_macro 0x00000000 0xfa binaries/uartPutc.o + .debug_macro 0x00000000 0xdd binaries/uartPutc.o + .debug_macro 0x00000000 0x91 binaries/uartPutc.o + .debug_macro 0x00000000 0x8e binaries/uartPutc.o + .debug_macro 0x00000000 0x82 binaries/uartPutc.o + .debug_macro 0x00000000 0x2e binaries/uartPutc.o + .debug_macro 0x00000000 0x3a binaries/uartPutc.o + .debug_macro 0x00000000 0x4c binaries/uartPutc.o + .debug_macro 0x00000000 0x3a binaries/uartPutc.o + .debug_macro 0x00000000 0xa0 binaries/uartPutc.o + .debug_macro 0x00000000 0x34 binaries/uartPutc.o + .debug_macro 0x00000000 0x7c binaries/uartPutc.o + .debug_macro 0x00000000 0x1c binaries/uartPutc.o + .debug_macro 0x00000000 0xee binaries/uartPutc.o + .debug_macro 0x00000000 0x7c binaries/uartPutc.o + .debug_macro 0x00000000 0x20 binaries/uartPutc.o + .debug_macro 0x00000000 0x10 binaries/uartPutc.o + .debug_macro 0x00000000 0x1c binaries/uartPutc.o + .debug_macro 0x00000000 0x34 binaries/uartPutc.o + .debug_macro 0x00000000 0xeb binaries/uartPutc.o + .debug_macro 0x00000000 0x8e binaries/uartPutc.o + .group 0x00000000 0x8 binaries/uartRead.o + .group 0x00000000 0x8 binaries/uartRead.o + .group 0x00000000 0x8 binaries/uartRead.o + .group 0x00000000 0x8 binaries/uartRead.o + .group 0x00000000 0x8 binaries/uartRead.o + .group 0x00000000 0x8 binaries/uartRead.o + .group 0x00000000 0x8 binaries/uartRead.o + .group 0x00000000 0x8 binaries/uartRead.o + .group 0x00000000 0x8 binaries/uartRead.o + .group 0x00000000 0x8 binaries/uartRead.o + .group 0x00000000 0x8 binaries/uartRead.o + .group 0x00000000 0x8 binaries/uartRead.o + .group 0x00000000 0x8 binaries/uartRead.o + .group 0x00000000 0x8 binaries/uartRead.o + .group 0x00000000 0x8 binaries/uartRead.o + .group 0x00000000 0x8 binaries/uartRead.o + .group 0x00000000 0x8 binaries/uartRead.o + .group 0x00000000 0x8 binaries/uartRead.o + .group 0x00000000 0x8 binaries/uartRead.o + .group 0x00000000 0x8 binaries/uartRead.o + .group 0x00000000 0x8 binaries/uartRead.o + .group 0x00000000 0x8 binaries/uartRead.o + .group 0x00000000 0x8 binaries/uartRead.o + .group 0x00000000 0x8 binaries/uartRead.o + .group 0x00000000 0x8 binaries/uartRead.o + .group 0x00000000 0x8 binaries/uartRead.o + .group 0x00000000 0x8 binaries/uartRead.o + .group 0x00000000 0x8 binaries/uartRead.o + .group 0x00000000 0x8 binaries/uartRead.o + .group 0x00000000 0x8 binaries/uartRead.o + .group 0x00000000 0x8 binaries/uartRead.o + .group 0x00000000 0x8 binaries/uartRead.o + .group 0x00000000 0x8 binaries/uartRead.o + .group 0x00000000 0x8 binaries/uartRead.o + .group 0x00000000 0x8 binaries/uartRead.o + .group 0x00000000 0x8 binaries/uartRead.o + .group 0x00000000 0x8 binaries/uartRead.o + .debug_macro 0x00000000 0x838 binaries/uartRead.o + .debug_macro 0x00000000 0x58 binaries/uartRead.o + .debug_macro 0x00000000 0xb2 binaries/uartRead.o + .debug_macro 0x00000000 0x6a binaries/uartRead.o + .debug_macro 0x00000000 0x52 binaries/uartRead.o + .debug_macro 0x00000000 0x10 binaries/uartRead.o + .debug_macro 0x00000000 0x16 binaries/uartRead.o + .debug_macro 0x00000000 0x1c binaries/uartRead.o + .debug_macro 0x00000000 0x1c binaries/uartRead.o + .debug_macro 0x00000000 0x10 binaries/uartRead.o + .debug_macro 0x00000000 0x28 binaries/uartRead.o + .debug_macro 0x00000000 0x1c1 binaries/uartRead.o + .debug_macro 0x00000000 0xa0 binaries/uartRead.o + .debug_macro 0x00000000 0x10 binaries/uartRead.o + .debug_macro 0x00000000 0x22 binaries/uartRead.o + .debug_macro 0x00000000 0x46 binaries/uartRead.o + .debug_macro 0x00000000 0xfa binaries/uartRead.o + .debug_macro 0x00000000 0xdd binaries/uartRead.o + .debug_macro 0x00000000 0x91 binaries/uartRead.o + .debug_macro 0x00000000 0x8e binaries/uartRead.o + .debug_macro 0x00000000 0x82 binaries/uartRead.o + .debug_macro 0x00000000 0x2e binaries/uartRead.o + .debug_macro 0x00000000 0x3a binaries/uartRead.o + .debug_macro 0x00000000 0x4c binaries/uartRead.o + .debug_macro 0x00000000 0x3a binaries/uartRead.o + .debug_macro 0x00000000 0xa0 binaries/uartRead.o + .debug_macro 0x00000000 0x34 binaries/uartRead.o + .debug_macro 0x00000000 0x7c binaries/uartRead.o + .debug_macro 0x00000000 0x1c binaries/uartRead.o + .debug_macro 0x00000000 0xee binaries/uartRead.o + .debug_macro 0x00000000 0x7c binaries/uartRead.o + .debug_macro 0x00000000 0x20 binaries/uartRead.o + .debug_macro 0x00000000 0x10 binaries/uartRead.o + .debug_macro 0x00000000 0x1c binaries/uartRead.o + .debug_macro 0x00000000 0x34 binaries/uartRead.o + .debug_macro 0x00000000 0xeb binaries/uartRead.o + .debug_macro 0x00000000 0x8e binaries/uartRead.o + .group 0x00000000 0x8 binaries/uartStat.o + .group 0x00000000 0x8 binaries/uartStat.o + .group 0x00000000 0x8 binaries/uartStat.o + .group 0x00000000 0x8 binaries/uartStat.o + .group 0x00000000 0x8 binaries/uartStat.o + .group 0x00000000 0x8 binaries/uartStat.o + .group 0x00000000 0x8 binaries/uartStat.o + .group 0x00000000 0x8 binaries/uartStat.o + .group 0x00000000 0x8 binaries/uartStat.o + .group 0x00000000 0x8 binaries/uartStat.o + .group 0x00000000 0x8 binaries/uartStat.o + .group 0x00000000 0x8 binaries/uartStat.o + .group 0x00000000 0x8 binaries/uartStat.o + .group 0x00000000 0x8 binaries/uartStat.o + .group 0x00000000 0x8 binaries/uartStat.o + .group 0x00000000 0x8 binaries/uartStat.o + .group 0x00000000 0x8 binaries/uartStat.o + .group 0x00000000 0x8 binaries/uartStat.o + .group 0x00000000 0x8 binaries/uartStat.o + .group 0x00000000 0x8 binaries/uartStat.o + .group 0x00000000 0x8 binaries/uartStat.o + .group 0x00000000 0x8 binaries/uartStat.o + .group 0x00000000 0x8 binaries/uartStat.o + .group 0x00000000 0x8 binaries/uartStat.o + .group 0x00000000 0x8 binaries/uartStat.o + .group 0x00000000 0x8 binaries/uartStat.o + .group 0x00000000 0x8 binaries/uartStat.o + .group 0x00000000 0x8 binaries/uartStat.o + .group 0x00000000 0x8 binaries/uartStat.o + .group 0x00000000 0x8 binaries/uartStat.o + .group 0x00000000 0x8 binaries/uartStat.o + .group 0x00000000 0x8 binaries/uartStat.o + .group 0x00000000 0x8 binaries/uartStat.o + .group 0x00000000 0x8 binaries/uartStat.o + .group 0x00000000 0x8 binaries/uartStat.o + .group 0x00000000 0x8 binaries/uartStat.o + .group 0x00000000 0x8 binaries/uartStat.o + .debug_macro 0x00000000 0x838 binaries/uartStat.o + .debug_macro 0x00000000 0x58 binaries/uartStat.o + .debug_macro 0x00000000 0xb2 binaries/uartStat.o + .debug_macro 0x00000000 0x6a binaries/uartStat.o + .debug_macro 0x00000000 0x52 binaries/uartStat.o + .debug_macro 0x00000000 0x10 binaries/uartStat.o + .debug_macro 0x00000000 0x16 binaries/uartStat.o + .debug_macro 0x00000000 0x1c binaries/uartStat.o + .debug_macro 0x00000000 0x1c binaries/uartStat.o + .debug_macro 0x00000000 0x10 binaries/uartStat.o + .debug_macro 0x00000000 0x28 binaries/uartStat.o + .debug_macro 0x00000000 0x1c1 binaries/uartStat.o + .debug_macro 0x00000000 0xa0 binaries/uartStat.o + .debug_macro 0x00000000 0x10 binaries/uartStat.o + .debug_macro 0x00000000 0x22 binaries/uartStat.o + .debug_macro 0x00000000 0x46 binaries/uartStat.o + .debug_macro 0x00000000 0xfa binaries/uartStat.o + .debug_macro 0x00000000 0xdd binaries/uartStat.o + .debug_macro 0x00000000 0x91 binaries/uartStat.o + .debug_macro 0x00000000 0x8e binaries/uartStat.o + .debug_macro 0x00000000 0x82 binaries/uartStat.o + .debug_macro 0x00000000 0x2e binaries/uartStat.o + .debug_macro 0x00000000 0x3a binaries/uartStat.o + .debug_macro 0x00000000 0x4c binaries/uartStat.o + .debug_macro 0x00000000 0x3a binaries/uartStat.o + .debug_macro 0x00000000 0xa0 binaries/uartStat.o + .debug_macro 0x00000000 0x34 binaries/uartStat.o + .debug_macro 0x00000000 0x7c binaries/uartStat.o + .debug_macro 0x00000000 0x1c binaries/uartStat.o + .debug_macro 0x00000000 0xee binaries/uartStat.o + .debug_macro 0x00000000 0x7c binaries/uartStat.o + .debug_macro 0x00000000 0x20 binaries/uartStat.o + .debug_macro 0x00000000 0x10 binaries/uartStat.o + .debug_macro 0x00000000 0x1c binaries/uartStat.o + .debug_macro 0x00000000 0x34 binaries/uartStat.o + .debug_macro 0x00000000 0xeb binaries/uartStat.o + .debug_macro 0x00000000 0x8e binaries/uartStat.o + .group 0x00000000 0x8 binaries/uartWrite.o + .group 0x00000000 0x8 binaries/uartWrite.o + .group 0x00000000 0x8 binaries/uartWrite.o + .group 0x00000000 0x8 binaries/uartWrite.o + .group 0x00000000 0x8 binaries/uartWrite.o + .group 0x00000000 0x8 binaries/uartWrite.o + .group 0x00000000 0x8 binaries/uartWrite.o + .group 0x00000000 0x8 binaries/uartWrite.o + .group 0x00000000 0x8 binaries/uartWrite.o + .group 0x00000000 0x8 binaries/uartWrite.o + .group 0x00000000 0x8 binaries/uartWrite.o + .group 0x00000000 0x8 binaries/uartWrite.o + .group 0x00000000 0x8 binaries/uartWrite.o + .group 0x00000000 0x8 binaries/uartWrite.o + .group 0x00000000 0x8 binaries/uartWrite.o + .group 0x00000000 0x8 binaries/uartWrite.o + .group 0x00000000 0x8 binaries/uartWrite.o + .group 0x00000000 0x8 binaries/uartWrite.o + .group 0x00000000 0x8 binaries/uartWrite.o + .group 0x00000000 0x8 binaries/uartWrite.o + .group 0x00000000 0x8 binaries/uartWrite.o + .group 0x00000000 0x8 binaries/uartWrite.o + .group 0x00000000 0x8 binaries/uartWrite.o + .group 0x00000000 0x8 binaries/uartWrite.o + .group 0x00000000 0x8 binaries/uartWrite.o + .group 0x00000000 0x8 binaries/uartWrite.o + .group 0x00000000 0x8 binaries/uartWrite.o + .group 0x00000000 0x8 binaries/uartWrite.o + .group 0x00000000 0x8 binaries/uartWrite.o + .group 0x00000000 0x8 binaries/uartWrite.o + .group 0x00000000 0x8 binaries/uartWrite.o + .group 0x00000000 0x8 binaries/uartWrite.o + .group 0x00000000 0x8 binaries/uartWrite.o + .group 0x00000000 0x8 binaries/uartWrite.o + .group 0x00000000 0x8 binaries/uartWrite.o + .group 0x00000000 0x8 binaries/uartWrite.o + .group 0x00000000 0x8 binaries/uartWrite.o + .debug_macro 0x00000000 0x838 binaries/uartWrite.o + .debug_macro 0x00000000 0x58 binaries/uartWrite.o + .debug_macro 0x00000000 0xb2 binaries/uartWrite.o + .debug_macro 0x00000000 0x6a binaries/uartWrite.o + .debug_macro 0x00000000 0x52 binaries/uartWrite.o + .debug_macro 0x00000000 0x10 binaries/uartWrite.o + .debug_macro 0x00000000 0x16 binaries/uartWrite.o + .debug_macro 0x00000000 0x1c binaries/uartWrite.o + .debug_macro 0x00000000 0x1c binaries/uartWrite.o + .debug_macro 0x00000000 0x10 binaries/uartWrite.o + .debug_macro 0x00000000 0x28 binaries/uartWrite.o + .debug_macro 0x00000000 0x1c1 binaries/uartWrite.o + .debug_macro 0x00000000 0xa0 binaries/uartWrite.o + .debug_macro 0x00000000 0x10 binaries/uartWrite.o + .debug_macro 0x00000000 0x22 binaries/uartWrite.o + .debug_macro 0x00000000 0x46 binaries/uartWrite.o + .debug_macro 0x00000000 0xfa binaries/uartWrite.o + .debug_macro 0x00000000 0xdd binaries/uartWrite.o + .debug_macro 0x00000000 0x91 binaries/uartWrite.o + .debug_macro 0x00000000 0x8e binaries/uartWrite.o + .debug_macro 0x00000000 0x82 binaries/uartWrite.o + .debug_macro 0x00000000 0x2e binaries/uartWrite.o + .debug_macro 0x00000000 0x3a binaries/uartWrite.o + .debug_macro 0x00000000 0x4c binaries/uartWrite.o + .debug_macro 0x00000000 0x3a binaries/uartWrite.o + .debug_macro 0x00000000 0xa0 binaries/uartWrite.o + .debug_macro 0x00000000 0x34 binaries/uartWrite.o + .debug_macro 0x00000000 0x7c binaries/uartWrite.o + .debug_macro 0x00000000 0x1c binaries/uartWrite.o + .debug_macro 0x00000000 0xee binaries/uartWrite.o + .debug_macro 0x00000000 0x7c binaries/uartWrite.o + .debug_macro 0x00000000 0x20 binaries/uartWrite.o + .debug_macro 0x00000000 0x10 binaries/uartWrite.o + .debug_macro 0x00000000 0x1c binaries/uartWrite.o + .debug_macro 0x00000000 0x34 binaries/uartWrite.o + .debug_macro 0x00000000 0xeb binaries/uartWrite.o + .debug_macro 0x00000000 0x8e binaries/uartWrite.o + .group 0x00000000 0x8 binaries/kgetc.o + .group 0x00000000 0x8 binaries/kgetc.o + .group 0x00000000 0x8 binaries/kgetc.o + .group 0x00000000 0x8 binaries/kgetc.o + .group 0x00000000 0x8 binaries/kgetc.o + .group 0x00000000 0x8 binaries/kgetc.o + .group 0x00000000 0x8 binaries/kgetc.o + .group 0x00000000 0x8 binaries/kgetc.o + .group 0x00000000 0x8 binaries/kgetc.o + .group 0x00000000 0x8 binaries/kgetc.o + .group 0x00000000 0x8 binaries/kgetc.o + .group 0x00000000 0x8 binaries/kgetc.o + .group 0x00000000 0x8 binaries/kgetc.o + .group 0x00000000 0x8 binaries/kgetc.o + .group 0x00000000 0x8 binaries/kgetc.o + .group 0x00000000 0x8 binaries/kgetc.o + .group 0x00000000 0x8 binaries/kgetc.o + .group 0x00000000 0x8 binaries/kgetc.o + .group 0x00000000 0x8 binaries/kgetc.o + .group 0x00000000 0x8 binaries/kgetc.o + .group 0x00000000 0x8 binaries/kgetc.o + .group 0x00000000 0x8 binaries/kgetc.o + .group 0x00000000 0x8 binaries/kgetc.o + .group 0x00000000 0x8 binaries/kgetc.o + .group 0x00000000 0x8 binaries/kgetc.o + .group 0x00000000 0x8 binaries/kgetc.o + .group 0x00000000 0x8 binaries/kgetc.o + .group 0x00000000 0x8 binaries/kgetc.o + .group 0x00000000 0x8 binaries/kgetc.o + .group 0x00000000 0x8 binaries/kgetc.o + .group 0x00000000 0x8 binaries/kgetc.o + .group 0x00000000 0x8 binaries/kgetc.o + .group 0x00000000 0x8 binaries/kgetc.o + .group 0x00000000 0x8 binaries/kgetc.o + .group 0x00000000 0x8 binaries/kgetc.o + .group 0x00000000 0x8 binaries/kgetc.o + .group 0x00000000 0x8 binaries/kgetc.o + .group 0x00000000 0x8 binaries/kgetc.o + .debug_macro 0x00000000 0x838 binaries/kgetc.o + .debug_macro 0x00000000 0x58 binaries/kgetc.o + .debug_macro 0x00000000 0xb2 binaries/kgetc.o + .debug_macro 0x00000000 0x6a binaries/kgetc.o + .debug_macro 0x00000000 0x52 binaries/kgetc.o + .debug_macro 0x00000000 0x10 binaries/kgetc.o + .debug_macro 0x00000000 0x16 binaries/kgetc.o + .debug_macro 0x00000000 0x1c binaries/kgetc.o + .debug_macro 0x00000000 0x1c binaries/kgetc.o + .debug_macro 0x00000000 0x10 binaries/kgetc.o + .debug_macro 0x00000000 0x28 binaries/kgetc.o + .debug_macro 0x00000000 0x1c1 binaries/kgetc.o + .debug_macro 0x00000000 0xa0 binaries/kgetc.o + .debug_macro 0x00000000 0x10 binaries/kgetc.o + .debug_macro 0x00000000 0x22 binaries/kgetc.o + .debug_macro 0x00000000 0x46 binaries/kgetc.o + .debug_macro 0x00000000 0xfa binaries/kgetc.o + .debug_macro 0x00000000 0xdd binaries/kgetc.o + .debug_macro 0x00000000 0x91 binaries/kgetc.o + .debug_macro 0x00000000 0x8e binaries/kgetc.o + .debug_macro 0x00000000 0x82 binaries/kgetc.o + .debug_macro 0x00000000 0x2e binaries/kgetc.o + .debug_macro 0x00000000 0x3a binaries/kgetc.o + .debug_macro 0x00000000 0x4c binaries/kgetc.o + .debug_macro 0x00000000 0x3a binaries/kgetc.o + .debug_macro 0x00000000 0xa0 binaries/kgetc.o + .debug_macro 0x00000000 0x34 binaries/kgetc.o + .debug_macro 0x00000000 0x7c binaries/kgetc.o + .debug_macro 0x00000000 0x1c binaries/kgetc.o + .debug_macro 0x00000000 0xee binaries/kgetc.o + .debug_macro 0x00000000 0x7c binaries/kgetc.o + .debug_macro 0x00000000 0x20 binaries/kgetc.o + .debug_macro 0x00000000 0x10 binaries/kgetc.o + .debug_macro 0x00000000 0x1c binaries/kgetc.o + .debug_macro 0x00000000 0x34 binaries/kgetc.o + .debug_macro 0x00000000 0xeb binaries/kgetc.o + .debug_macro 0x00000000 0x8e binaries/kgetc.o + .group 0x00000000 0x8 binaries/kputc.o + .group 0x00000000 0x8 binaries/kputc.o + .group 0x00000000 0x8 binaries/kputc.o + .group 0x00000000 0x8 binaries/kputc.o + .group 0x00000000 0x8 binaries/kputc.o + .group 0x00000000 0x8 binaries/kputc.o + .group 0x00000000 0x8 binaries/kputc.o + .group 0x00000000 0x8 binaries/kputc.o + .group 0x00000000 0x8 binaries/kputc.o + .group 0x00000000 0x8 binaries/kputc.o + .group 0x00000000 0x8 binaries/kputc.o + .group 0x00000000 0x8 binaries/kputc.o + .group 0x00000000 0x8 binaries/kputc.o + .group 0x00000000 0x8 binaries/kputc.o + .group 0x00000000 0x8 binaries/kputc.o + .group 0x00000000 0x8 binaries/kputc.o + .group 0x00000000 0x8 binaries/kputc.o + .group 0x00000000 0x8 binaries/kputc.o + .group 0x00000000 0x8 binaries/kputc.o + .group 0x00000000 0x8 binaries/kputc.o + .group 0x00000000 0x8 binaries/kputc.o + .group 0x00000000 0x8 binaries/kputc.o + .group 0x00000000 0x8 binaries/kputc.o + .group 0x00000000 0x8 binaries/kputc.o + .group 0x00000000 0x8 binaries/kputc.o + .group 0x00000000 0x8 binaries/kputc.o + .group 0x00000000 0x8 binaries/kputc.o + .group 0x00000000 0x8 binaries/kputc.o + .group 0x00000000 0x8 binaries/kputc.o + .group 0x00000000 0x8 binaries/kputc.o + .group 0x00000000 0x8 binaries/kputc.o + .group 0x00000000 0x8 binaries/kputc.o + .group 0x00000000 0x8 binaries/kputc.o + .group 0x00000000 0x8 binaries/kputc.o + .group 0x00000000 0x8 binaries/kputc.o + .group 0x00000000 0x8 binaries/kputc.o + .group 0x00000000 0x8 binaries/kputc.o + .group 0x00000000 0x8 binaries/kputc.o + .debug_macro 0x00000000 0x838 binaries/kputc.o + .debug_macro 0x00000000 0x58 binaries/kputc.o + .debug_macro 0x00000000 0xb2 binaries/kputc.o + .debug_macro 0x00000000 0x6a binaries/kputc.o + .debug_macro 0x00000000 0x52 binaries/kputc.o + .debug_macro 0x00000000 0x10 binaries/kputc.o + .debug_macro 0x00000000 0x16 binaries/kputc.o + .debug_macro 0x00000000 0x1c binaries/kputc.o + .debug_macro 0x00000000 0x1c binaries/kputc.o + .debug_macro 0x00000000 0x10 binaries/kputc.o + .debug_macro 0x00000000 0x28 binaries/kputc.o + .debug_macro 0x00000000 0x1c1 binaries/kputc.o + .debug_macro 0x00000000 0xa0 binaries/kputc.o + .debug_macro 0x00000000 0x10 binaries/kputc.o + .debug_macro 0x00000000 0x22 binaries/kputc.o + .debug_macro 0x00000000 0x46 binaries/kputc.o + .debug_macro 0x00000000 0xfa binaries/kputc.o + .debug_macro 0x00000000 0xdd binaries/kputc.o + .debug_macro 0x00000000 0x91 binaries/kputc.o + .debug_macro 0x00000000 0x8e binaries/kputc.o + .debug_macro 0x00000000 0x82 binaries/kputc.o + .debug_macro 0x00000000 0x2e binaries/kputc.o + .debug_macro 0x00000000 0x3a binaries/kputc.o + .debug_macro 0x00000000 0x4c binaries/kputc.o + .debug_macro 0x00000000 0x3a binaries/kputc.o + .debug_macro 0x00000000 0xa0 binaries/kputc.o + .debug_macro 0x00000000 0x34 binaries/kputc.o + .debug_macro 0x00000000 0x7c binaries/kputc.o + .debug_macro 0x00000000 0x1c binaries/kputc.o + .debug_macro 0x00000000 0xee binaries/kputc.o + .debug_macro 0x00000000 0x7c binaries/kputc.o + .debug_macro 0x00000000 0x20 binaries/kputc.o + .debug_macro 0x00000000 0x10 binaries/kputc.o + .debug_macro 0x00000000 0x1c binaries/kputc.o + .debug_macro 0x00000000 0x34 binaries/kputc.o + .debug_macro 0x00000000 0xeb binaries/kputc.o + .debug_macro 0x00000000 0x8e binaries/kputc.o + .debug_macro 0x00000000 0x25b binaries/kputc.o + .group 0x00000000 0x8 binaries/uartHwInit.o + .group 0x00000000 0x8 binaries/uartHwInit.o + .group 0x00000000 0x8 binaries/uartHwInit.o + .group 0x00000000 0x8 binaries/uartHwInit.o + .group 0x00000000 0x8 binaries/uartHwInit.o + .group 0x00000000 0x8 binaries/uartHwInit.o + .group 0x00000000 0x8 binaries/uartHwInit.o + .group 0x00000000 0x8 binaries/uartHwInit.o + .group 0x00000000 0x8 binaries/uartHwInit.o + .group 0x00000000 0x8 binaries/uartHwInit.o + .group 0x00000000 0x8 binaries/uartHwInit.o + .group 0x00000000 0x8 binaries/uartHwInit.o + .group 0x00000000 0x8 binaries/uartHwInit.o + .group 0x00000000 0x8 binaries/uartHwInit.o + .group 0x00000000 0x8 binaries/uartHwInit.o + .group 0x00000000 0x8 binaries/uartHwInit.o + .group 0x00000000 0x8 binaries/uartHwInit.o + .group 0x00000000 0x8 binaries/uartHwInit.o + .group 0x00000000 0x8 binaries/uartHwInit.o + .group 0x00000000 0x8 binaries/uartHwInit.o + .group 0x00000000 0x8 binaries/uartHwInit.o + .group 0x00000000 0x8 binaries/uartHwInit.o + .group 0x00000000 0x8 binaries/uartHwInit.o + .group 0x00000000 0x8 binaries/uartHwInit.o + .group 0x00000000 0x8 binaries/uartHwInit.o + .group 0x00000000 0x8 binaries/uartHwInit.o + .group 0x00000000 0x8 binaries/uartHwInit.o + .group 0x00000000 0x8 binaries/uartHwInit.o + .group 0x00000000 0x8 binaries/uartHwInit.o + .group 0x00000000 0x8 binaries/uartHwInit.o + .group 0x00000000 0x8 binaries/uartHwInit.o + .group 0x00000000 0x8 binaries/uartHwInit.o + .group 0x00000000 0x8 binaries/uartHwInit.o + .group 0x00000000 0x8 binaries/uartHwInit.o + .group 0x00000000 0x8 binaries/uartHwInit.o + .group 0x00000000 0x8 binaries/uartHwInit.o + .group 0x00000000 0x8 binaries/uartHwInit.o + .group 0x00000000 0x8 binaries/uartHwInit.o + .debug_macro 0x00000000 0x838 binaries/uartHwInit.o + .debug_macro 0x00000000 0x58 binaries/uartHwInit.o + .debug_macro 0x00000000 0xb2 binaries/uartHwInit.o + .debug_macro 0x00000000 0x6a binaries/uartHwInit.o + .debug_macro 0x00000000 0x52 binaries/uartHwInit.o + .debug_macro 0x00000000 0x10 binaries/uartHwInit.o + .debug_macro 0x00000000 0x16 binaries/uartHwInit.o + .debug_macro 0x00000000 0x1c binaries/uartHwInit.o + .debug_macro 0x00000000 0x1c binaries/uartHwInit.o + .debug_macro 0x00000000 0x10 binaries/uartHwInit.o + .debug_macro 0x00000000 0x28 binaries/uartHwInit.o + .debug_macro 0x00000000 0x1c1 binaries/uartHwInit.o + .debug_macro 0x00000000 0xa0 binaries/uartHwInit.o + .debug_macro 0x00000000 0x10 binaries/uartHwInit.o + .debug_macro 0x00000000 0x22 binaries/uartHwInit.o + .debug_macro 0x00000000 0x46 binaries/uartHwInit.o + .debug_macro 0x00000000 0xfa binaries/uartHwInit.o + .debug_macro 0x00000000 0xdd binaries/uartHwInit.o + .debug_macro 0x00000000 0x91 binaries/uartHwInit.o + .debug_macro 0x00000000 0x8e binaries/uartHwInit.o + .debug_macro 0x00000000 0x82 binaries/uartHwInit.o + .debug_macro 0x00000000 0x2e binaries/uartHwInit.o + .debug_macro 0x00000000 0x3a binaries/uartHwInit.o + .debug_macro 0x00000000 0x4c binaries/uartHwInit.o + .debug_macro 0x00000000 0x3a binaries/uartHwInit.o + .debug_macro 0x00000000 0xa0 binaries/uartHwInit.o + .debug_macro 0x00000000 0x34 binaries/uartHwInit.o + .debug_macro 0x00000000 0x7c binaries/uartHwInit.o + .debug_macro 0x00000000 0x1c binaries/uartHwInit.o + .debug_macro 0x00000000 0xee binaries/uartHwInit.o + .debug_macro 0x00000000 0x7c binaries/uartHwInit.o + .debug_macro 0x00000000 0x20 binaries/uartHwInit.o + .debug_macro 0x00000000 0x10 binaries/uartHwInit.o + .debug_macro 0x00000000 0x1c binaries/uartHwInit.o + .debug_macro 0x00000000 0x34 binaries/uartHwInit.o + .debug_macro 0x00000000 0xeb binaries/uartHwInit.o + .debug_macro 0x00000000 0x8e binaries/uartHwInit.o + .debug_macro 0x00000000 0x25b binaries/uartHwInit.o + .group 0x00000000 0x8 binaries/uartHwPutc.o + .group 0x00000000 0x8 binaries/uartHwPutc.o + .group 0x00000000 0x8 binaries/uartHwPutc.o + .group 0x00000000 0x8 binaries/uartHwPutc.o + .group 0x00000000 0x8 binaries/uartHwPutc.o + .group 0x00000000 0x8 binaries/uartHwPutc.o + .group 0x00000000 0x8 binaries/uartHwPutc.o + .group 0x00000000 0x8 binaries/uartHwPutc.o + .group 0x00000000 0x8 binaries/uartHwPutc.o + .group 0x00000000 0x8 binaries/uartHwPutc.o + .group 0x00000000 0x8 binaries/uartHwPutc.o + .group 0x00000000 0x8 binaries/uartHwPutc.o + .group 0x00000000 0x8 binaries/uartHwPutc.o + .group 0x00000000 0x8 binaries/uartHwPutc.o + .group 0x00000000 0x8 binaries/uartHwPutc.o + .group 0x00000000 0x8 binaries/uartHwPutc.o + .group 0x00000000 0x8 binaries/uartHwPutc.o + .group 0x00000000 0x8 binaries/uartHwPutc.o + .group 0x00000000 0x8 binaries/uartHwPutc.o + .group 0x00000000 0x8 binaries/uartHwPutc.o + .group 0x00000000 0x8 binaries/uartHwPutc.o + .group 0x00000000 0x8 binaries/uartHwPutc.o + .group 0x00000000 0x8 binaries/uartHwPutc.o + .group 0x00000000 0x8 binaries/uartHwPutc.o + .group 0x00000000 0x8 binaries/uartHwPutc.o + .group 0x00000000 0x8 binaries/uartHwPutc.o + .group 0x00000000 0x8 binaries/uartHwPutc.o + .group 0x00000000 0x8 binaries/uartHwPutc.o + .group 0x00000000 0x8 binaries/uartHwPutc.o + .group 0x00000000 0x8 binaries/uartHwPutc.o + .group 0x00000000 0x8 binaries/uartHwPutc.o + .group 0x00000000 0x8 binaries/uartHwPutc.o + .group 0x00000000 0x8 binaries/uartHwPutc.o + .group 0x00000000 0x8 binaries/uartHwPutc.o + .group 0x00000000 0x8 binaries/uartHwPutc.o + .group 0x00000000 0x8 binaries/uartHwPutc.o + .group 0x00000000 0x8 binaries/uartHwPutc.o + .group 0x00000000 0x8 binaries/uartHwPutc.o + .debug_macro 0x00000000 0x838 binaries/uartHwPutc.o + .debug_macro 0x00000000 0x58 binaries/uartHwPutc.o + .debug_macro 0x00000000 0xb2 binaries/uartHwPutc.o + .debug_macro 0x00000000 0x6a binaries/uartHwPutc.o + .debug_macro 0x00000000 0x52 binaries/uartHwPutc.o + .debug_macro 0x00000000 0x10 binaries/uartHwPutc.o + .debug_macro 0x00000000 0x16 binaries/uartHwPutc.o + .debug_macro 0x00000000 0x1c binaries/uartHwPutc.o + .debug_macro 0x00000000 0x1c binaries/uartHwPutc.o + .debug_macro 0x00000000 0x10 binaries/uartHwPutc.o + .debug_macro 0x00000000 0x28 binaries/uartHwPutc.o + .debug_macro 0x00000000 0x1c1 binaries/uartHwPutc.o + .debug_macro 0x00000000 0xa0 binaries/uartHwPutc.o + .debug_macro 0x00000000 0x10 binaries/uartHwPutc.o + .debug_macro 0x00000000 0x22 binaries/uartHwPutc.o + .debug_macro 0x00000000 0x46 binaries/uartHwPutc.o + .debug_macro 0x00000000 0xfa binaries/uartHwPutc.o + .debug_macro 0x00000000 0xdd binaries/uartHwPutc.o + .debug_macro 0x00000000 0x91 binaries/uartHwPutc.o + .debug_macro 0x00000000 0x8e binaries/uartHwPutc.o + .debug_macro 0x00000000 0x82 binaries/uartHwPutc.o + .debug_macro 0x00000000 0x2e binaries/uartHwPutc.o + .debug_macro 0x00000000 0x3a binaries/uartHwPutc.o + .debug_macro 0x00000000 0x4c binaries/uartHwPutc.o + .debug_macro 0x00000000 0x3a binaries/uartHwPutc.o + .debug_macro 0x00000000 0xa0 binaries/uartHwPutc.o + .debug_macro 0x00000000 0x34 binaries/uartHwPutc.o + .debug_macro 0x00000000 0x7c binaries/uartHwPutc.o + .debug_macro 0x00000000 0x1c binaries/uartHwPutc.o + .debug_macro 0x00000000 0xee binaries/uartHwPutc.o + .debug_macro 0x00000000 0x7c binaries/uartHwPutc.o + .debug_macro 0x00000000 0x20 binaries/uartHwPutc.o + .debug_macro 0x00000000 0x10 binaries/uartHwPutc.o + .debug_macro 0x00000000 0x1c binaries/uartHwPutc.o + .debug_macro 0x00000000 0x34 binaries/uartHwPutc.o + .debug_macro 0x00000000 0xeb binaries/uartHwPutc.o + .debug_macro 0x00000000 0x8e binaries/uartHwPutc.o + .debug_macro 0x00000000 0x25b binaries/uartHwPutc.o + .group 0x00000000 0x8 binaries/uartHwStat.o + .group 0x00000000 0x8 binaries/uartHwStat.o + .group 0x00000000 0x8 binaries/uartHwStat.o + .group 0x00000000 0x8 binaries/uartHwStat.o + .group 0x00000000 0x8 binaries/uartHwStat.o + .group 0x00000000 0x8 binaries/uartHwStat.o + .group 0x00000000 0x8 binaries/uartHwStat.o + .group 0x00000000 0x8 binaries/uartHwStat.o + .group 0x00000000 0x8 binaries/uartHwStat.o + .group 0x00000000 0x8 binaries/uartHwStat.o + .group 0x00000000 0x8 binaries/uartHwStat.o + .group 0x00000000 0x8 binaries/uartHwStat.o + .group 0x00000000 0x8 binaries/uartHwStat.o + .group 0x00000000 0x8 binaries/uartHwStat.o + .group 0x00000000 0x8 binaries/uartHwStat.o + .group 0x00000000 0x8 binaries/uartHwStat.o + .group 0x00000000 0x8 binaries/uartHwStat.o + .group 0x00000000 0x8 binaries/uartHwStat.o + .group 0x00000000 0x8 binaries/uartHwStat.o + .group 0x00000000 0x8 binaries/uartHwStat.o + .group 0x00000000 0x8 binaries/uartHwStat.o + .group 0x00000000 0x8 binaries/uartHwStat.o + .group 0x00000000 0x8 binaries/uartHwStat.o + .group 0x00000000 0x8 binaries/uartHwStat.o + .group 0x00000000 0x8 binaries/uartHwStat.o + .group 0x00000000 0x8 binaries/uartHwStat.o + .group 0x00000000 0x8 binaries/uartHwStat.o + .group 0x00000000 0x8 binaries/uartHwStat.o + .group 0x00000000 0x8 binaries/uartHwStat.o + .group 0x00000000 0x8 binaries/uartHwStat.o + .group 0x00000000 0x8 binaries/uartHwStat.o + .group 0x00000000 0x8 binaries/uartHwStat.o + .group 0x00000000 0x8 binaries/uartHwStat.o + .group 0x00000000 0x8 binaries/uartHwStat.o + .group 0x00000000 0x8 binaries/uartHwStat.o + .group 0x00000000 0x8 binaries/uartHwStat.o + .group 0x00000000 0x8 binaries/uartHwStat.o + .group 0x00000000 0x8 binaries/uartHwStat.o + .debug_macro 0x00000000 0x838 binaries/uartHwStat.o + .debug_macro 0x00000000 0x58 binaries/uartHwStat.o + .debug_macro 0x00000000 0xb2 binaries/uartHwStat.o + .debug_macro 0x00000000 0x6a binaries/uartHwStat.o + .debug_macro 0x00000000 0x52 binaries/uartHwStat.o + .debug_macro 0x00000000 0x10 binaries/uartHwStat.o + .debug_macro 0x00000000 0x16 binaries/uartHwStat.o + .debug_macro 0x00000000 0x1c binaries/uartHwStat.o + .debug_macro 0x00000000 0x1c binaries/uartHwStat.o + .debug_macro 0x00000000 0x10 binaries/uartHwStat.o + .debug_macro 0x00000000 0x28 binaries/uartHwStat.o + .debug_macro 0x00000000 0x1c1 binaries/uartHwStat.o + .debug_macro 0x00000000 0xa0 binaries/uartHwStat.o + .debug_macro 0x00000000 0x10 binaries/uartHwStat.o + .debug_macro 0x00000000 0x22 binaries/uartHwStat.o + .debug_macro 0x00000000 0x46 binaries/uartHwStat.o + .debug_macro 0x00000000 0xfa binaries/uartHwStat.o + .debug_macro 0x00000000 0xdd binaries/uartHwStat.o + .debug_macro 0x00000000 0x91 binaries/uartHwStat.o + .debug_macro 0x00000000 0x8e binaries/uartHwStat.o + .debug_macro 0x00000000 0x82 binaries/uartHwStat.o + .debug_macro 0x00000000 0x2e binaries/uartHwStat.o + .debug_macro 0x00000000 0x3a binaries/uartHwStat.o + .debug_macro 0x00000000 0x4c binaries/uartHwStat.o + .debug_macro 0x00000000 0x3a binaries/uartHwStat.o + .debug_macro 0x00000000 0xa0 binaries/uartHwStat.o + .debug_macro 0x00000000 0x34 binaries/uartHwStat.o + .debug_macro 0x00000000 0x7c binaries/uartHwStat.o + .debug_macro 0x00000000 0x1c binaries/uartHwStat.o + .debug_macro 0x00000000 0xee binaries/uartHwStat.o + .debug_macro 0x00000000 0x7c binaries/uartHwStat.o + .debug_macro 0x00000000 0x20 binaries/uartHwStat.o + .debug_macro 0x00000000 0x10 binaries/uartHwStat.o + .debug_macro 0x00000000 0x1c binaries/uartHwStat.o + .debug_macro 0x00000000 0x34 binaries/uartHwStat.o + .debug_macro 0x00000000 0xeb binaries/uartHwStat.o + .debug_macro 0x00000000 0x8e binaries/uartHwStat.o + .debug_macro 0x00000000 0x25b binaries/uartHwStat.o + .group 0x00000000 0x8 binaries/uartInterrupt.o + .group 0x00000000 0x8 binaries/uartInterrupt.o + .group 0x00000000 0x8 binaries/uartInterrupt.o + .group 0x00000000 0x8 binaries/uartInterrupt.o + .group 0x00000000 0x8 binaries/uartInterrupt.o + .group 0x00000000 0x8 binaries/uartInterrupt.o + .group 0x00000000 0x8 binaries/uartInterrupt.o + .group 0x00000000 0x8 binaries/uartInterrupt.o + .group 0x00000000 0x8 binaries/uartInterrupt.o + .group 0x00000000 0x8 binaries/uartInterrupt.o + .group 0x00000000 0x8 binaries/uartInterrupt.o + .group 0x00000000 0x8 binaries/uartInterrupt.o + .group 0x00000000 0x8 binaries/uartInterrupt.o + .group 0x00000000 0x8 binaries/uartInterrupt.o + .group 0x00000000 0x8 binaries/uartInterrupt.o + .group 0x00000000 0x8 binaries/uartInterrupt.o + .group 0x00000000 0x8 binaries/uartInterrupt.o + .group 0x00000000 0x8 binaries/uartInterrupt.o + .group 0x00000000 0x8 binaries/uartInterrupt.o + .group 0x00000000 0x8 binaries/uartInterrupt.o + .group 0x00000000 0x8 binaries/uartInterrupt.o + .group 0x00000000 0x8 binaries/uartInterrupt.o + .group 0x00000000 0x8 binaries/uartInterrupt.o + .group 0x00000000 0x8 binaries/uartInterrupt.o + .group 0x00000000 0x8 binaries/uartInterrupt.o + .group 0x00000000 0x8 binaries/uartInterrupt.o + .group 0x00000000 0x8 binaries/uartInterrupt.o + .group 0x00000000 0x8 binaries/uartInterrupt.o + .group 0x00000000 0x8 binaries/uartInterrupt.o + .group 0x00000000 0x8 binaries/uartInterrupt.o + .group 0x00000000 0x8 binaries/uartInterrupt.o + .group 0x00000000 0x8 binaries/uartInterrupt.o + .group 0x00000000 0x8 binaries/uartInterrupt.o + .group 0x00000000 0x8 binaries/uartInterrupt.o + .group 0x00000000 0x8 binaries/uartInterrupt.o + .group 0x00000000 0x8 binaries/uartInterrupt.o + .group 0x00000000 0x8 binaries/uartInterrupt.o + .group 0x00000000 0x8 binaries/uartInterrupt.o + .debug_macro 0x00000000 0x838 binaries/uartInterrupt.o + .debug_macro 0x00000000 0x58 binaries/uartInterrupt.o + .debug_macro 0x00000000 0xb2 binaries/uartInterrupt.o + .debug_macro 0x00000000 0x6a binaries/uartInterrupt.o + .debug_macro 0x00000000 0x52 binaries/uartInterrupt.o + .debug_macro 0x00000000 0x10 binaries/uartInterrupt.o + .debug_macro 0x00000000 0x16 binaries/uartInterrupt.o + .debug_macro 0x00000000 0x1c binaries/uartInterrupt.o + .debug_macro 0x00000000 0x1c binaries/uartInterrupt.o + .debug_macro 0x00000000 0x10 binaries/uartInterrupt.o + .debug_macro 0x00000000 0x28 binaries/uartInterrupt.o + .debug_macro 0x00000000 0x1c1 binaries/uartInterrupt.o + .debug_macro 0x00000000 0xa0 binaries/uartInterrupt.o + .debug_macro 0x00000000 0x10 binaries/uartInterrupt.o + .debug_macro 0x00000000 0x22 binaries/uartInterrupt.o + .debug_macro 0x00000000 0x46 binaries/uartInterrupt.o + .debug_macro 0x00000000 0xfa binaries/uartInterrupt.o + .debug_macro 0x00000000 0xdd binaries/uartInterrupt.o + .debug_macro 0x00000000 0x91 binaries/uartInterrupt.o + .debug_macro 0x00000000 0x8e binaries/uartInterrupt.o + .debug_macro 0x00000000 0x82 binaries/uartInterrupt.o + .debug_macro 0x00000000 0x2e binaries/uartInterrupt.o + .debug_macro 0x00000000 0x3a binaries/uartInterrupt.o + .debug_macro 0x00000000 0x4c binaries/uartInterrupt.o + .debug_macro 0x00000000 0x3a binaries/uartInterrupt.o + .debug_macro 0x00000000 0xa0 binaries/uartInterrupt.o + .debug_macro 0x00000000 0x34 binaries/uartInterrupt.o + .debug_macro 0x00000000 0x7c binaries/uartInterrupt.o + .debug_macro 0x00000000 0x1c binaries/uartInterrupt.o + .debug_macro 0x00000000 0xee binaries/uartInterrupt.o + .debug_macro 0x00000000 0x7c binaries/uartInterrupt.o + .debug_macro 0x00000000 0x20 binaries/uartInterrupt.o + .debug_macro 0x00000000 0x10 binaries/uartInterrupt.o + .debug_macro 0x00000000 0x1c binaries/uartInterrupt.o + .debug_macro 0x00000000 0x34 binaries/uartInterrupt.o + .debug_macro 0x00000000 0xeb binaries/uartInterrupt.o + .debug_macro 0x00000000 0x8e binaries/uartInterrupt.o + .debug_macro 0x00000000 0x25b binaries/uartInterrupt.o + .group 0x00000000 0x8 binaries/Doxygroup.o + .debug_macro 0x00000000 0x838 binaries/Doxygroup.o + .group 0x00000000 0x8 binaries/loopbackClose.o + .group 0x00000000 0x8 binaries/loopbackClose.o + .group 0x00000000 0x8 binaries/loopbackClose.o + .group 0x00000000 0x8 binaries/loopbackClose.o + .group 0x00000000 0x8 binaries/loopbackClose.o + .group 0x00000000 0x8 binaries/loopbackClose.o + .group 0x00000000 0x8 binaries/loopbackClose.o + .group 0x00000000 0x8 binaries/loopbackClose.o + .group 0x00000000 0x8 binaries/loopbackClose.o + .group 0x00000000 0x8 binaries/loopbackClose.o + .group 0x00000000 0x8 binaries/loopbackClose.o + .group 0x00000000 0x8 binaries/loopbackClose.o + .group 0x00000000 0x8 binaries/loopbackClose.o + .group 0x00000000 0x8 binaries/loopbackClose.o + .group 0x00000000 0x8 binaries/loopbackClose.o + .group 0x00000000 0x8 binaries/loopbackClose.o + .group 0x00000000 0x8 binaries/loopbackClose.o + .group 0x00000000 0x8 binaries/loopbackClose.o + .group 0x00000000 0x8 binaries/loopbackClose.o + .group 0x00000000 0x8 binaries/loopbackClose.o + .group 0x00000000 0x8 binaries/loopbackClose.o + .group 0x00000000 0x8 binaries/loopbackClose.o + .group 0x00000000 0x8 binaries/loopbackClose.o + .group 0x00000000 0x8 binaries/loopbackClose.o + .group 0x00000000 0x8 binaries/loopbackClose.o + .group 0x00000000 0x8 binaries/loopbackClose.o + .group 0x00000000 0x8 binaries/loopbackClose.o + .group 0x00000000 0x8 binaries/loopbackClose.o + .group 0x00000000 0x8 binaries/loopbackClose.o + .group 0x00000000 0x8 binaries/loopbackClose.o + .group 0x00000000 0x8 binaries/loopbackClose.o + .group 0x00000000 0x8 binaries/loopbackClose.o + .group 0x00000000 0x8 binaries/loopbackClose.o + .group 0x00000000 0x8 binaries/loopbackClose.o + .group 0x00000000 0x8 binaries/loopbackClose.o + .group 0x00000000 0x8 binaries/loopbackClose.o + .group 0x00000000 0x8 binaries/loopbackClose.o + .group 0x00000000 0x8 binaries/loopbackClose.o + .debug_macro 0x00000000 0x838 binaries/loopbackClose.o + .debug_macro 0x00000000 0x58 binaries/loopbackClose.o + .debug_macro 0x00000000 0xb2 binaries/loopbackClose.o + .debug_macro 0x00000000 0x6a binaries/loopbackClose.o + .debug_macro 0x00000000 0x52 binaries/loopbackClose.o + .debug_macro 0x00000000 0x10 binaries/loopbackClose.o + .debug_macro 0x00000000 0x16 binaries/loopbackClose.o + .debug_macro 0x00000000 0x1c binaries/loopbackClose.o + .debug_macro 0x00000000 0x1c binaries/loopbackClose.o + .debug_macro 0x00000000 0x10 binaries/loopbackClose.o + .debug_macro 0x00000000 0x28 binaries/loopbackClose.o + .debug_macro 0x00000000 0x1c1 binaries/loopbackClose.o + .debug_macro 0x00000000 0xa0 binaries/loopbackClose.o + .debug_macro 0x00000000 0x10 binaries/loopbackClose.o + .debug_macro 0x00000000 0x22 binaries/loopbackClose.o + .debug_macro 0x00000000 0x46 binaries/loopbackClose.o + .debug_macro 0x00000000 0xfa binaries/loopbackClose.o + .debug_macro 0x00000000 0xdd binaries/loopbackClose.o + .debug_macro 0x00000000 0x91 binaries/loopbackClose.o + .debug_macro 0x00000000 0x8e binaries/loopbackClose.o + .debug_macro 0x00000000 0x82 binaries/loopbackClose.o + .debug_macro 0x00000000 0x2e binaries/loopbackClose.o + .debug_macro 0x00000000 0x3a binaries/loopbackClose.o + .debug_macro 0x00000000 0x4c binaries/loopbackClose.o + .debug_macro 0x00000000 0x3a binaries/loopbackClose.o + .debug_macro 0x00000000 0xa0 binaries/loopbackClose.o + .debug_macro 0x00000000 0x34 binaries/loopbackClose.o + .debug_macro 0x00000000 0x7c binaries/loopbackClose.o + .debug_macro 0x00000000 0x1c binaries/loopbackClose.o + .debug_macro 0x00000000 0xee binaries/loopbackClose.o + .debug_macro 0x00000000 0x7c binaries/loopbackClose.o + .debug_macro 0x00000000 0x20 binaries/loopbackClose.o + .debug_macro 0x00000000 0x10 binaries/loopbackClose.o + .debug_macro 0x00000000 0x1c binaries/loopbackClose.o + .debug_macro 0x00000000 0x34 binaries/loopbackClose.o + .debug_macro 0x00000000 0xeb binaries/loopbackClose.o + .debug_macro 0x00000000 0x8e binaries/loopbackClose.o + .group 0x00000000 0x8 binaries/loopbackControl.o + .group 0x00000000 0x8 binaries/loopbackControl.o + .group 0x00000000 0x8 binaries/loopbackControl.o + .group 0x00000000 0x8 binaries/loopbackControl.o + .group 0x00000000 0x8 binaries/loopbackControl.o + .group 0x00000000 0x8 binaries/loopbackControl.o + .group 0x00000000 0x8 binaries/loopbackControl.o + .group 0x00000000 0x8 binaries/loopbackControl.o + .group 0x00000000 0x8 binaries/loopbackControl.o + .group 0x00000000 0x8 binaries/loopbackControl.o + .group 0x00000000 0x8 binaries/loopbackControl.o + .group 0x00000000 0x8 binaries/loopbackControl.o + .group 0x00000000 0x8 binaries/loopbackControl.o + .group 0x00000000 0x8 binaries/loopbackControl.o + .group 0x00000000 0x8 binaries/loopbackControl.o + .group 0x00000000 0x8 binaries/loopbackControl.o + .group 0x00000000 0x8 binaries/loopbackControl.o + .group 0x00000000 0x8 binaries/loopbackControl.o + .group 0x00000000 0x8 binaries/loopbackControl.o + .group 0x00000000 0x8 binaries/loopbackControl.o + .group 0x00000000 0x8 binaries/loopbackControl.o + .group 0x00000000 0x8 binaries/loopbackControl.o + .group 0x00000000 0x8 binaries/loopbackControl.o + .group 0x00000000 0x8 binaries/loopbackControl.o + .group 0x00000000 0x8 binaries/loopbackControl.o + .group 0x00000000 0x8 binaries/loopbackControl.o + .group 0x00000000 0x8 binaries/loopbackControl.o + .group 0x00000000 0x8 binaries/loopbackControl.o + .group 0x00000000 0x8 binaries/loopbackControl.o + .group 0x00000000 0x8 binaries/loopbackControl.o + .group 0x00000000 0x8 binaries/loopbackControl.o + .group 0x00000000 0x8 binaries/loopbackControl.o + .group 0x00000000 0x8 binaries/loopbackControl.o + .group 0x00000000 0x8 binaries/loopbackControl.o + .group 0x00000000 0x8 binaries/loopbackControl.o + .group 0x00000000 0x8 binaries/loopbackControl.o + .group 0x00000000 0x8 binaries/loopbackControl.o + .group 0x00000000 0x8 binaries/loopbackControl.o + .debug_macro 0x00000000 0x838 binaries/loopbackControl.o + .debug_macro 0x00000000 0x58 binaries/loopbackControl.o + .debug_macro 0x00000000 0xb2 binaries/loopbackControl.o + .debug_macro 0x00000000 0x6a binaries/loopbackControl.o + .debug_macro 0x00000000 0x52 binaries/loopbackControl.o + .debug_macro 0x00000000 0x10 binaries/loopbackControl.o + .debug_macro 0x00000000 0x16 binaries/loopbackControl.o + .debug_macro 0x00000000 0x1c binaries/loopbackControl.o + .debug_macro 0x00000000 0x1c binaries/loopbackControl.o + .debug_macro 0x00000000 0x10 binaries/loopbackControl.o + .debug_macro 0x00000000 0x28 binaries/loopbackControl.o + .debug_macro 0x00000000 0x1c1 binaries/loopbackControl.o + .debug_macro 0x00000000 0xa0 binaries/loopbackControl.o + .debug_macro 0x00000000 0x10 binaries/loopbackControl.o + .debug_macro 0x00000000 0x22 binaries/loopbackControl.o + .debug_macro 0x00000000 0x46 binaries/loopbackControl.o + .debug_macro 0x00000000 0xfa binaries/loopbackControl.o + .debug_macro 0x00000000 0xdd binaries/loopbackControl.o + .debug_macro 0x00000000 0x91 binaries/loopbackControl.o + .debug_macro 0x00000000 0x8e binaries/loopbackControl.o + .debug_macro 0x00000000 0x82 binaries/loopbackControl.o + .debug_macro 0x00000000 0x2e binaries/loopbackControl.o + .debug_macro 0x00000000 0x3a binaries/loopbackControl.o + .debug_macro 0x00000000 0x4c binaries/loopbackControl.o + .debug_macro 0x00000000 0x3a binaries/loopbackControl.o + .debug_macro 0x00000000 0xa0 binaries/loopbackControl.o + .debug_macro 0x00000000 0x34 binaries/loopbackControl.o + .debug_macro 0x00000000 0x7c binaries/loopbackControl.o + .debug_macro 0x00000000 0x1c binaries/loopbackControl.o + .debug_macro 0x00000000 0xee binaries/loopbackControl.o + .debug_macro 0x00000000 0x7c binaries/loopbackControl.o + .debug_macro 0x00000000 0x20 binaries/loopbackControl.o + .debug_macro 0x00000000 0x10 binaries/loopbackControl.o + .debug_macro 0x00000000 0x1c binaries/loopbackControl.o + .debug_macro 0x00000000 0x34 binaries/loopbackControl.o + .debug_macro 0x00000000 0xeb binaries/loopbackControl.o + .debug_macro 0x00000000 0x8e binaries/loopbackControl.o + .debug_macro 0x00000000 0x2e binaries/loopbackControl.o + .group 0x00000000 0x8 binaries/loopbackGetc.o + .group 0x00000000 0x8 binaries/loopbackGetc.o + .group 0x00000000 0x8 binaries/loopbackGetc.o + .group 0x00000000 0x8 binaries/loopbackGetc.o + .group 0x00000000 0x8 binaries/loopbackGetc.o + .group 0x00000000 0x8 binaries/loopbackGetc.o + .group 0x00000000 0x8 binaries/loopbackGetc.o + .group 0x00000000 0x8 binaries/loopbackGetc.o + .group 0x00000000 0x8 binaries/loopbackGetc.o + .group 0x00000000 0x8 binaries/loopbackGetc.o + .group 0x00000000 0x8 binaries/loopbackGetc.o + .group 0x00000000 0x8 binaries/loopbackGetc.o + .group 0x00000000 0x8 binaries/loopbackGetc.o + .group 0x00000000 0x8 binaries/loopbackGetc.o + .group 0x00000000 0x8 binaries/loopbackGetc.o + .group 0x00000000 0x8 binaries/loopbackGetc.o + .group 0x00000000 0x8 binaries/loopbackGetc.o + .group 0x00000000 0x8 binaries/loopbackGetc.o + .group 0x00000000 0x8 binaries/loopbackGetc.o + .group 0x00000000 0x8 binaries/loopbackGetc.o + .group 0x00000000 0x8 binaries/loopbackGetc.o + .group 0x00000000 0x8 binaries/loopbackGetc.o + .group 0x00000000 0x8 binaries/loopbackGetc.o + .group 0x00000000 0x8 binaries/loopbackGetc.o + .group 0x00000000 0x8 binaries/loopbackGetc.o + .group 0x00000000 0x8 binaries/loopbackGetc.o + .group 0x00000000 0x8 binaries/loopbackGetc.o + .group 0x00000000 0x8 binaries/loopbackGetc.o + .group 0x00000000 0x8 binaries/loopbackGetc.o + .group 0x00000000 0x8 binaries/loopbackGetc.o + .group 0x00000000 0x8 binaries/loopbackGetc.o + .group 0x00000000 0x8 binaries/loopbackGetc.o + .group 0x00000000 0x8 binaries/loopbackGetc.o + .group 0x00000000 0x8 binaries/loopbackGetc.o + .group 0x00000000 0x8 binaries/loopbackGetc.o + .group 0x00000000 0x8 binaries/loopbackGetc.o + .group 0x00000000 0x8 binaries/loopbackGetc.o + .group 0x00000000 0x8 binaries/loopbackGetc.o + .debug_macro 0x00000000 0x838 binaries/loopbackGetc.o + .debug_macro 0x00000000 0x58 binaries/loopbackGetc.o + .debug_macro 0x00000000 0xb2 binaries/loopbackGetc.o + .debug_macro 0x00000000 0x6a binaries/loopbackGetc.o + .debug_macro 0x00000000 0x52 binaries/loopbackGetc.o + .debug_macro 0x00000000 0x10 binaries/loopbackGetc.o + .debug_macro 0x00000000 0x16 binaries/loopbackGetc.o + .debug_macro 0x00000000 0x1c binaries/loopbackGetc.o + .debug_macro 0x00000000 0x1c binaries/loopbackGetc.o + .debug_macro 0x00000000 0x10 binaries/loopbackGetc.o + .debug_macro 0x00000000 0x28 binaries/loopbackGetc.o + .debug_macro 0x00000000 0x1c1 binaries/loopbackGetc.o + .debug_macro 0x00000000 0xa0 binaries/loopbackGetc.o + .debug_macro 0x00000000 0x10 binaries/loopbackGetc.o + .debug_macro 0x00000000 0x22 binaries/loopbackGetc.o + .debug_macro 0x00000000 0x46 binaries/loopbackGetc.o + .debug_macro 0x00000000 0xfa binaries/loopbackGetc.o + .debug_macro 0x00000000 0xdd binaries/loopbackGetc.o + .debug_macro 0x00000000 0x91 binaries/loopbackGetc.o + .debug_macro 0x00000000 0x8e binaries/loopbackGetc.o + .debug_macro 0x00000000 0x82 binaries/loopbackGetc.o + .debug_macro 0x00000000 0x2e binaries/loopbackGetc.o + .debug_macro 0x00000000 0x3a binaries/loopbackGetc.o + .debug_macro 0x00000000 0x4c binaries/loopbackGetc.o + .debug_macro 0x00000000 0x3a binaries/loopbackGetc.o + .debug_macro 0x00000000 0xa0 binaries/loopbackGetc.o + .debug_macro 0x00000000 0x34 binaries/loopbackGetc.o + .debug_macro 0x00000000 0x7c binaries/loopbackGetc.o + .debug_macro 0x00000000 0x1c binaries/loopbackGetc.o + .debug_macro 0x00000000 0xee binaries/loopbackGetc.o + .debug_macro 0x00000000 0x7c binaries/loopbackGetc.o + .debug_macro 0x00000000 0x20 binaries/loopbackGetc.o + .debug_macro 0x00000000 0x10 binaries/loopbackGetc.o + .debug_macro 0x00000000 0x1c binaries/loopbackGetc.o + .debug_macro 0x00000000 0x34 binaries/loopbackGetc.o + .debug_macro 0x00000000 0xeb binaries/loopbackGetc.o + .debug_macro 0x00000000 0x8e binaries/loopbackGetc.o + .debug_macro 0x00000000 0x2e binaries/loopbackGetc.o + .group 0x00000000 0x8 binaries/loopbackInit.o + .group 0x00000000 0x8 binaries/loopbackInit.o + .group 0x00000000 0x8 binaries/loopbackInit.o + .group 0x00000000 0x8 binaries/loopbackInit.o + .group 0x00000000 0x8 binaries/loopbackInit.o + .group 0x00000000 0x8 binaries/loopbackInit.o + .group 0x00000000 0x8 binaries/loopbackInit.o + .group 0x00000000 0x8 binaries/loopbackInit.o + .group 0x00000000 0x8 binaries/loopbackInit.o + .group 0x00000000 0x8 binaries/loopbackInit.o + .group 0x00000000 0x8 binaries/loopbackInit.o + .group 0x00000000 0x8 binaries/loopbackInit.o + .group 0x00000000 0x8 binaries/loopbackInit.o + .group 0x00000000 0x8 binaries/loopbackInit.o + .group 0x00000000 0x8 binaries/loopbackInit.o + .group 0x00000000 0x8 binaries/loopbackInit.o + .group 0x00000000 0x8 binaries/loopbackInit.o + .group 0x00000000 0x8 binaries/loopbackInit.o + .group 0x00000000 0x8 binaries/loopbackInit.o + .group 0x00000000 0x8 binaries/loopbackInit.o + .group 0x00000000 0x8 binaries/loopbackInit.o + .group 0x00000000 0x8 binaries/loopbackInit.o + .group 0x00000000 0x8 binaries/loopbackInit.o + .group 0x00000000 0x8 binaries/loopbackInit.o + .group 0x00000000 0x8 binaries/loopbackInit.o + .group 0x00000000 0x8 binaries/loopbackInit.o + .group 0x00000000 0x8 binaries/loopbackInit.o + .group 0x00000000 0x8 binaries/loopbackInit.o + .group 0x00000000 0x8 binaries/loopbackInit.o + .group 0x00000000 0x8 binaries/loopbackInit.o + .group 0x00000000 0x8 binaries/loopbackInit.o + .group 0x00000000 0x8 binaries/loopbackInit.o + .group 0x00000000 0x8 binaries/loopbackInit.o + .group 0x00000000 0x8 binaries/loopbackInit.o + .group 0x00000000 0x8 binaries/loopbackInit.o + .group 0x00000000 0x8 binaries/loopbackInit.o + .group 0x00000000 0x8 binaries/loopbackInit.o + .group 0x00000000 0x8 binaries/loopbackInit.o + .debug_macro 0x00000000 0x838 binaries/loopbackInit.o + .debug_macro 0x00000000 0x58 binaries/loopbackInit.o + .debug_macro 0x00000000 0xb2 binaries/loopbackInit.o + .debug_macro 0x00000000 0x6a binaries/loopbackInit.o + .debug_macro 0x00000000 0x52 binaries/loopbackInit.o + .debug_macro 0x00000000 0x10 binaries/loopbackInit.o + .debug_macro 0x00000000 0x16 binaries/loopbackInit.o + .debug_macro 0x00000000 0x1c binaries/loopbackInit.o + .debug_macro 0x00000000 0x1c binaries/loopbackInit.o + .debug_macro 0x00000000 0x10 binaries/loopbackInit.o + .debug_macro 0x00000000 0x28 binaries/loopbackInit.o + .debug_macro 0x00000000 0x1c1 binaries/loopbackInit.o + .debug_macro 0x00000000 0xa0 binaries/loopbackInit.o + .debug_macro 0x00000000 0x10 binaries/loopbackInit.o + .debug_macro 0x00000000 0x22 binaries/loopbackInit.o + .debug_macro 0x00000000 0x46 binaries/loopbackInit.o + .debug_macro 0x00000000 0xfa binaries/loopbackInit.o + .debug_macro 0x00000000 0xdd binaries/loopbackInit.o + .debug_macro 0x00000000 0x91 binaries/loopbackInit.o + .debug_macro 0x00000000 0x8e binaries/loopbackInit.o + .debug_macro 0x00000000 0x82 binaries/loopbackInit.o + .debug_macro 0x00000000 0x2e binaries/loopbackInit.o + .debug_macro 0x00000000 0x3a binaries/loopbackInit.o + .debug_macro 0x00000000 0x4c binaries/loopbackInit.o + .debug_macro 0x00000000 0x3a binaries/loopbackInit.o + .debug_macro 0x00000000 0xa0 binaries/loopbackInit.o + .debug_macro 0x00000000 0x34 binaries/loopbackInit.o + .debug_macro 0x00000000 0x7c binaries/loopbackInit.o + .debug_macro 0x00000000 0x1c binaries/loopbackInit.o + .debug_macro 0x00000000 0xee binaries/loopbackInit.o + .debug_macro 0x00000000 0x7c binaries/loopbackInit.o + .debug_macro 0x00000000 0x20 binaries/loopbackInit.o + .debug_macro 0x00000000 0x10 binaries/loopbackInit.o + .debug_macro 0x00000000 0x1c binaries/loopbackInit.o + .debug_macro 0x00000000 0x34 binaries/loopbackInit.o + .debug_macro 0x00000000 0xeb binaries/loopbackInit.o + .debug_macro 0x00000000 0x8e binaries/loopbackInit.o + .debug_macro 0x00000000 0x2e binaries/loopbackInit.o + .group 0x00000000 0x8 binaries/loopbackOpen.o + .group 0x00000000 0x8 binaries/loopbackOpen.o + .group 0x00000000 0x8 binaries/loopbackOpen.o + .group 0x00000000 0x8 binaries/loopbackOpen.o + .group 0x00000000 0x8 binaries/loopbackOpen.o + .group 0x00000000 0x8 binaries/loopbackOpen.o + .group 0x00000000 0x8 binaries/loopbackOpen.o + .group 0x00000000 0x8 binaries/loopbackOpen.o + .group 0x00000000 0x8 binaries/loopbackOpen.o + .group 0x00000000 0x8 binaries/loopbackOpen.o + .group 0x00000000 0x8 binaries/loopbackOpen.o + .group 0x00000000 0x8 binaries/loopbackOpen.o + .group 0x00000000 0x8 binaries/loopbackOpen.o + .group 0x00000000 0x8 binaries/loopbackOpen.o + .group 0x00000000 0x8 binaries/loopbackOpen.o + .group 0x00000000 0x8 binaries/loopbackOpen.o + .group 0x00000000 0x8 binaries/loopbackOpen.o + .group 0x00000000 0x8 binaries/loopbackOpen.o + .group 0x00000000 0x8 binaries/loopbackOpen.o + .group 0x00000000 0x8 binaries/loopbackOpen.o + .group 0x00000000 0x8 binaries/loopbackOpen.o + .group 0x00000000 0x8 binaries/loopbackOpen.o + .group 0x00000000 0x8 binaries/loopbackOpen.o + .group 0x00000000 0x8 binaries/loopbackOpen.o + .group 0x00000000 0x8 binaries/loopbackOpen.o + .group 0x00000000 0x8 binaries/loopbackOpen.o + .group 0x00000000 0x8 binaries/loopbackOpen.o + .group 0x00000000 0x8 binaries/loopbackOpen.o + .group 0x00000000 0x8 binaries/loopbackOpen.o + .group 0x00000000 0x8 binaries/loopbackOpen.o + .group 0x00000000 0x8 binaries/loopbackOpen.o + .group 0x00000000 0x8 binaries/loopbackOpen.o + .group 0x00000000 0x8 binaries/loopbackOpen.o + .group 0x00000000 0x8 binaries/loopbackOpen.o + .group 0x00000000 0x8 binaries/loopbackOpen.o + .group 0x00000000 0x8 binaries/loopbackOpen.o + .group 0x00000000 0x8 binaries/loopbackOpen.o + .group 0x00000000 0x8 binaries/loopbackOpen.o + .debug_macro 0x00000000 0x838 binaries/loopbackOpen.o + .debug_macro 0x00000000 0x58 binaries/loopbackOpen.o + .debug_macro 0x00000000 0xb2 binaries/loopbackOpen.o + .debug_macro 0x00000000 0x6a binaries/loopbackOpen.o + .debug_macro 0x00000000 0x52 binaries/loopbackOpen.o + .debug_macro 0x00000000 0x10 binaries/loopbackOpen.o + .debug_macro 0x00000000 0x16 binaries/loopbackOpen.o + .debug_macro 0x00000000 0x1c binaries/loopbackOpen.o + .debug_macro 0x00000000 0x1c binaries/loopbackOpen.o + .debug_macro 0x00000000 0x10 binaries/loopbackOpen.o + .debug_macro 0x00000000 0x28 binaries/loopbackOpen.o + .debug_macro 0x00000000 0x1c1 binaries/loopbackOpen.o + .debug_macro 0x00000000 0xa0 binaries/loopbackOpen.o + .debug_macro 0x00000000 0x10 binaries/loopbackOpen.o + .debug_macro 0x00000000 0x22 binaries/loopbackOpen.o + .debug_macro 0x00000000 0x46 binaries/loopbackOpen.o + .debug_macro 0x00000000 0xfa binaries/loopbackOpen.o + .debug_macro 0x00000000 0xdd binaries/loopbackOpen.o + .debug_macro 0x00000000 0x91 binaries/loopbackOpen.o + .debug_macro 0x00000000 0x8e binaries/loopbackOpen.o + .debug_macro 0x00000000 0x82 binaries/loopbackOpen.o + .debug_macro 0x00000000 0x2e binaries/loopbackOpen.o + .debug_macro 0x00000000 0x3a binaries/loopbackOpen.o + .debug_macro 0x00000000 0x4c binaries/loopbackOpen.o + .debug_macro 0x00000000 0x3a binaries/loopbackOpen.o + .debug_macro 0x00000000 0xa0 binaries/loopbackOpen.o + .debug_macro 0x00000000 0x34 binaries/loopbackOpen.o + .debug_macro 0x00000000 0x7c binaries/loopbackOpen.o + .debug_macro 0x00000000 0x1c binaries/loopbackOpen.o + .debug_macro 0x00000000 0xee binaries/loopbackOpen.o + .debug_macro 0x00000000 0x7c binaries/loopbackOpen.o + .debug_macro 0x00000000 0x20 binaries/loopbackOpen.o + .debug_macro 0x00000000 0x10 binaries/loopbackOpen.o + .debug_macro 0x00000000 0x1c binaries/loopbackOpen.o + .debug_macro 0x00000000 0x34 binaries/loopbackOpen.o + .debug_macro 0x00000000 0xeb binaries/loopbackOpen.o + .debug_macro 0x00000000 0x8e binaries/loopbackOpen.o + .debug_macro 0x00000000 0x2e binaries/loopbackOpen.o + .group 0x00000000 0x8 binaries/loopbackPutc.o + .group 0x00000000 0x8 binaries/loopbackPutc.o + .group 0x00000000 0x8 binaries/loopbackPutc.o + .group 0x00000000 0x8 binaries/loopbackPutc.o + .group 0x00000000 0x8 binaries/loopbackPutc.o + .group 0x00000000 0x8 binaries/loopbackPutc.o + .group 0x00000000 0x8 binaries/loopbackPutc.o + .group 0x00000000 0x8 binaries/loopbackPutc.o + .group 0x00000000 0x8 binaries/loopbackPutc.o + .group 0x00000000 0x8 binaries/loopbackPutc.o + .group 0x00000000 0x8 binaries/loopbackPutc.o + .group 0x00000000 0x8 binaries/loopbackPutc.o + .group 0x00000000 0x8 binaries/loopbackPutc.o + .group 0x00000000 0x8 binaries/loopbackPutc.o + .group 0x00000000 0x8 binaries/loopbackPutc.o + .group 0x00000000 0x8 binaries/loopbackPutc.o + .group 0x00000000 0x8 binaries/loopbackPutc.o + .group 0x00000000 0x8 binaries/loopbackPutc.o + .group 0x00000000 0x8 binaries/loopbackPutc.o + .group 0x00000000 0x8 binaries/loopbackPutc.o + .group 0x00000000 0x8 binaries/loopbackPutc.o + .group 0x00000000 0x8 binaries/loopbackPutc.o + .group 0x00000000 0x8 binaries/loopbackPutc.o + .group 0x00000000 0x8 binaries/loopbackPutc.o + .group 0x00000000 0x8 binaries/loopbackPutc.o + .group 0x00000000 0x8 binaries/loopbackPutc.o + .group 0x00000000 0x8 binaries/loopbackPutc.o + .group 0x00000000 0x8 binaries/loopbackPutc.o + .group 0x00000000 0x8 binaries/loopbackPutc.o + .group 0x00000000 0x8 binaries/loopbackPutc.o + .group 0x00000000 0x8 binaries/loopbackPutc.o + .group 0x00000000 0x8 binaries/loopbackPutc.o + .group 0x00000000 0x8 binaries/loopbackPutc.o + .group 0x00000000 0x8 binaries/loopbackPutc.o + .group 0x00000000 0x8 binaries/loopbackPutc.o + .group 0x00000000 0x8 binaries/loopbackPutc.o + .group 0x00000000 0x8 binaries/loopbackPutc.o + .group 0x00000000 0x8 binaries/loopbackPutc.o + .debug_macro 0x00000000 0x838 binaries/loopbackPutc.o + .debug_macro 0x00000000 0x58 binaries/loopbackPutc.o + .debug_macro 0x00000000 0xb2 binaries/loopbackPutc.o + .debug_macro 0x00000000 0x6a binaries/loopbackPutc.o + .debug_macro 0x00000000 0x52 binaries/loopbackPutc.o + .debug_macro 0x00000000 0x10 binaries/loopbackPutc.o + .debug_macro 0x00000000 0x16 binaries/loopbackPutc.o + .debug_macro 0x00000000 0x1c binaries/loopbackPutc.o + .debug_macro 0x00000000 0x1c binaries/loopbackPutc.o + .debug_macro 0x00000000 0x10 binaries/loopbackPutc.o + .debug_macro 0x00000000 0x28 binaries/loopbackPutc.o + .debug_macro 0x00000000 0x1c1 binaries/loopbackPutc.o + .debug_macro 0x00000000 0xa0 binaries/loopbackPutc.o + .debug_macro 0x00000000 0x10 binaries/loopbackPutc.o + .debug_macro 0x00000000 0x22 binaries/loopbackPutc.o + .debug_macro 0x00000000 0x46 binaries/loopbackPutc.o + .debug_macro 0x00000000 0xfa binaries/loopbackPutc.o + .debug_macro 0x00000000 0xdd binaries/loopbackPutc.o + .debug_macro 0x00000000 0x91 binaries/loopbackPutc.o + .debug_macro 0x00000000 0x8e binaries/loopbackPutc.o + .debug_macro 0x00000000 0x82 binaries/loopbackPutc.o + .debug_macro 0x00000000 0x2e binaries/loopbackPutc.o + .debug_macro 0x00000000 0x3a binaries/loopbackPutc.o + .debug_macro 0x00000000 0x4c binaries/loopbackPutc.o + .debug_macro 0x00000000 0x3a binaries/loopbackPutc.o + .debug_macro 0x00000000 0xa0 binaries/loopbackPutc.o + .debug_macro 0x00000000 0x34 binaries/loopbackPutc.o + .debug_macro 0x00000000 0x7c binaries/loopbackPutc.o + .debug_macro 0x00000000 0x1c binaries/loopbackPutc.o + .debug_macro 0x00000000 0xee binaries/loopbackPutc.o + .debug_macro 0x00000000 0x7c binaries/loopbackPutc.o + .debug_macro 0x00000000 0x20 binaries/loopbackPutc.o + .debug_macro 0x00000000 0x10 binaries/loopbackPutc.o + .debug_macro 0x00000000 0x1c binaries/loopbackPutc.o + .debug_macro 0x00000000 0x34 binaries/loopbackPutc.o + .debug_macro 0x00000000 0xeb binaries/loopbackPutc.o + .debug_macro 0x00000000 0x8e binaries/loopbackPutc.o + .debug_macro 0x00000000 0x2e binaries/loopbackPutc.o + .group 0x00000000 0x8 binaries/loopbackRead.o + .group 0x00000000 0x8 binaries/loopbackRead.o + .group 0x00000000 0x8 binaries/loopbackRead.o + .group 0x00000000 0x8 binaries/loopbackRead.o + .group 0x00000000 0x8 binaries/loopbackRead.o + .group 0x00000000 0x8 binaries/loopbackRead.o + .group 0x00000000 0x8 binaries/loopbackRead.o + .group 0x00000000 0x8 binaries/loopbackRead.o + .group 0x00000000 0x8 binaries/loopbackRead.o + .group 0x00000000 0x8 binaries/loopbackRead.o + .group 0x00000000 0x8 binaries/loopbackRead.o + .group 0x00000000 0x8 binaries/loopbackRead.o + .group 0x00000000 0x8 binaries/loopbackRead.o + .group 0x00000000 0x8 binaries/loopbackRead.o + .group 0x00000000 0x8 binaries/loopbackRead.o + .group 0x00000000 0x8 binaries/loopbackRead.o + .group 0x00000000 0x8 binaries/loopbackRead.o + .group 0x00000000 0x8 binaries/loopbackRead.o + .group 0x00000000 0x8 binaries/loopbackRead.o + .group 0x00000000 0x8 binaries/loopbackRead.o + .group 0x00000000 0x8 binaries/loopbackRead.o + .group 0x00000000 0x8 binaries/loopbackRead.o + .group 0x00000000 0x8 binaries/loopbackRead.o + .group 0x00000000 0x8 binaries/loopbackRead.o + .group 0x00000000 0x8 binaries/loopbackRead.o + .group 0x00000000 0x8 binaries/loopbackRead.o + .group 0x00000000 0x8 binaries/loopbackRead.o + .group 0x00000000 0x8 binaries/loopbackRead.o + .group 0x00000000 0x8 binaries/loopbackRead.o + .group 0x00000000 0x8 binaries/loopbackRead.o + .group 0x00000000 0x8 binaries/loopbackRead.o + .group 0x00000000 0x8 binaries/loopbackRead.o + .group 0x00000000 0x8 binaries/loopbackRead.o + .group 0x00000000 0x8 binaries/loopbackRead.o + .group 0x00000000 0x8 binaries/loopbackRead.o + .group 0x00000000 0x8 binaries/loopbackRead.o + .group 0x00000000 0x8 binaries/loopbackRead.o + .group 0x00000000 0x8 binaries/loopbackRead.o + .debug_macro 0x00000000 0x838 binaries/loopbackRead.o + .debug_macro 0x00000000 0x58 binaries/loopbackRead.o + .debug_macro 0x00000000 0xb2 binaries/loopbackRead.o + .debug_macro 0x00000000 0x6a binaries/loopbackRead.o + .debug_macro 0x00000000 0x52 binaries/loopbackRead.o + .debug_macro 0x00000000 0x10 binaries/loopbackRead.o + .debug_macro 0x00000000 0x16 binaries/loopbackRead.o + .debug_macro 0x00000000 0x1c binaries/loopbackRead.o + .debug_macro 0x00000000 0x1c binaries/loopbackRead.o + .debug_macro 0x00000000 0x10 binaries/loopbackRead.o + .debug_macro 0x00000000 0x28 binaries/loopbackRead.o + .debug_macro 0x00000000 0x1c1 binaries/loopbackRead.o + .debug_macro 0x00000000 0xa0 binaries/loopbackRead.o + .debug_macro 0x00000000 0x10 binaries/loopbackRead.o + .debug_macro 0x00000000 0x22 binaries/loopbackRead.o + .debug_macro 0x00000000 0x46 binaries/loopbackRead.o + .debug_macro 0x00000000 0xfa binaries/loopbackRead.o + .debug_macro 0x00000000 0xdd binaries/loopbackRead.o + .debug_macro 0x00000000 0x91 binaries/loopbackRead.o + .debug_macro 0x00000000 0x8e binaries/loopbackRead.o + .debug_macro 0x00000000 0x82 binaries/loopbackRead.o + .debug_macro 0x00000000 0x2e binaries/loopbackRead.o + .debug_macro 0x00000000 0x3a binaries/loopbackRead.o + .debug_macro 0x00000000 0x4c binaries/loopbackRead.o + .debug_macro 0x00000000 0x3a binaries/loopbackRead.o + .debug_macro 0x00000000 0xa0 binaries/loopbackRead.o + .debug_macro 0x00000000 0x34 binaries/loopbackRead.o + .debug_macro 0x00000000 0x7c binaries/loopbackRead.o + .debug_macro 0x00000000 0x1c binaries/loopbackRead.o + .debug_macro 0x00000000 0xee binaries/loopbackRead.o + .debug_macro 0x00000000 0x7c binaries/loopbackRead.o + .debug_macro 0x00000000 0x20 binaries/loopbackRead.o + .debug_macro 0x00000000 0x10 binaries/loopbackRead.o + .debug_macro 0x00000000 0x1c binaries/loopbackRead.o + .debug_macro 0x00000000 0x34 binaries/loopbackRead.o + .debug_macro 0x00000000 0xeb binaries/loopbackRead.o + .debug_macro 0x00000000 0x8e binaries/loopbackRead.o + .debug_macro 0x00000000 0x2e binaries/loopbackRead.o + .group 0x00000000 0x8 binaries/loopbackWrite.o + .group 0x00000000 0x8 binaries/loopbackWrite.o + .group 0x00000000 0x8 binaries/loopbackWrite.o + .group 0x00000000 0x8 binaries/loopbackWrite.o + .group 0x00000000 0x8 binaries/loopbackWrite.o + .group 0x00000000 0x8 binaries/loopbackWrite.o + .group 0x00000000 0x8 binaries/loopbackWrite.o + .group 0x00000000 0x8 binaries/loopbackWrite.o + .group 0x00000000 0x8 binaries/loopbackWrite.o + .group 0x00000000 0x8 binaries/loopbackWrite.o + .group 0x00000000 0x8 binaries/loopbackWrite.o + .group 0x00000000 0x8 binaries/loopbackWrite.o + .group 0x00000000 0x8 binaries/loopbackWrite.o + .group 0x00000000 0x8 binaries/loopbackWrite.o + .group 0x00000000 0x8 binaries/loopbackWrite.o + .group 0x00000000 0x8 binaries/loopbackWrite.o + .group 0x00000000 0x8 binaries/loopbackWrite.o + .group 0x00000000 0x8 binaries/loopbackWrite.o + .group 0x00000000 0x8 binaries/loopbackWrite.o + .group 0x00000000 0x8 binaries/loopbackWrite.o + .group 0x00000000 0x8 binaries/loopbackWrite.o + .group 0x00000000 0x8 binaries/loopbackWrite.o + .group 0x00000000 0x8 binaries/loopbackWrite.o + .group 0x00000000 0x8 binaries/loopbackWrite.o + .group 0x00000000 0x8 binaries/loopbackWrite.o + .group 0x00000000 0x8 binaries/loopbackWrite.o + .group 0x00000000 0x8 binaries/loopbackWrite.o + .group 0x00000000 0x8 binaries/loopbackWrite.o + .group 0x00000000 0x8 binaries/loopbackWrite.o + .group 0x00000000 0x8 binaries/loopbackWrite.o + .group 0x00000000 0x8 binaries/loopbackWrite.o + .group 0x00000000 0x8 binaries/loopbackWrite.o + .group 0x00000000 0x8 binaries/loopbackWrite.o + .group 0x00000000 0x8 binaries/loopbackWrite.o + .group 0x00000000 0x8 binaries/loopbackWrite.o + .group 0x00000000 0x8 binaries/loopbackWrite.o + .group 0x00000000 0x8 binaries/loopbackWrite.o + .group 0x00000000 0x8 binaries/loopbackWrite.o + .debug_macro 0x00000000 0x838 binaries/loopbackWrite.o + .debug_macro 0x00000000 0x58 binaries/loopbackWrite.o + .debug_macro 0x00000000 0xb2 binaries/loopbackWrite.o + .debug_macro 0x00000000 0x6a binaries/loopbackWrite.o + .debug_macro 0x00000000 0x52 binaries/loopbackWrite.o + .debug_macro 0x00000000 0x10 binaries/loopbackWrite.o + .debug_macro 0x00000000 0x16 binaries/loopbackWrite.o + .debug_macro 0x00000000 0x1c binaries/loopbackWrite.o + .debug_macro 0x00000000 0x1c binaries/loopbackWrite.o + .debug_macro 0x00000000 0x10 binaries/loopbackWrite.o + .debug_macro 0x00000000 0x28 binaries/loopbackWrite.o + .debug_macro 0x00000000 0x1c1 binaries/loopbackWrite.o + .debug_macro 0x00000000 0xa0 binaries/loopbackWrite.o + .debug_macro 0x00000000 0x10 binaries/loopbackWrite.o + .debug_macro 0x00000000 0x22 binaries/loopbackWrite.o + .debug_macro 0x00000000 0x46 binaries/loopbackWrite.o + .debug_macro 0x00000000 0xfa binaries/loopbackWrite.o + .debug_macro 0x00000000 0xdd binaries/loopbackWrite.o + .debug_macro 0x00000000 0x91 binaries/loopbackWrite.o + .debug_macro 0x00000000 0x8e binaries/loopbackWrite.o + .debug_macro 0x00000000 0x82 binaries/loopbackWrite.o + .debug_macro 0x00000000 0x2e binaries/loopbackWrite.o + .debug_macro 0x00000000 0x3a binaries/loopbackWrite.o + .debug_macro 0x00000000 0x4c binaries/loopbackWrite.o + .debug_macro 0x00000000 0x3a binaries/loopbackWrite.o + .debug_macro 0x00000000 0xa0 binaries/loopbackWrite.o + .debug_macro 0x00000000 0x34 binaries/loopbackWrite.o + .debug_macro 0x00000000 0x7c binaries/loopbackWrite.o + .debug_macro 0x00000000 0x1c binaries/loopbackWrite.o + .debug_macro 0x00000000 0xee binaries/loopbackWrite.o + .debug_macro 0x00000000 0x7c binaries/loopbackWrite.o + .debug_macro 0x00000000 0x20 binaries/loopbackWrite.o + .debug_macro 0x00000000 0x10 binaries/loopbackWrite.o + .debug_macro 0x00000000 0x1c binaries/loopbackWrite.o + .debug_macro 0x00000000 0x34 binaries/loopbackWrite.o + .debug_macro 0x00000000 0xeb binaries/loopbackWrite.o + .debug_macro 0x00000000 0x8e binaries/loopbackWrite.o + .debug_macro 0x00000000 0x2e binaries/loopbackWrite.o + .group 0x00000000 0x8 binaries/addargs.o + .group 0x00000000 0x8 binaries/addargs.o + .group 0x00000000 0x8 binaries/addargs.o + .group 0x00000000 0x8 binaries/addargs.o + .group 0x00000000 0x8 binaries/addargs.o + .group 0x00000000 0x8 binaries/addargs.o + .group 0x00000000 0x8 binaries/addargs.o + .group 0x00000000 0x8 binaries/addargs.o + .group 0x00000000 0x8 binaries/addargs.o + .group 0x00000000 0x8 binaries/addargs.o + .group 0x00000000 0x8 binaries/addargs.o + .group 0x00000000 0x8 binaries/addargs.o + .group 0x00000000 0x8 binaries/addargs.o + .group 0x00000000 0x8 binaries/addargs.o + .group 0x00000000 0x8 binaries/addargs.o + .group 0x00000000 0x8 binaries/addargs.o + .group 0x00000000 0x8 binaries/addargs.o + .group 0x00000000 0x8 binaries/addargs.o + .group 0x00000000 0x8 binaries/addargs.o + .group 0x00000000 0x8 binaries/addargs.o + .group 0x00000000 0x8 binaries/addargs.o + .group 0x00000000 0x8 binaries/addargs.o + .group 0x00000000 0x8 binaries/addargs.o + .group 0x00000000 0x8 binaries/addargs.o + .group 0x00000000 0x8 binaries/addargs.o + .group 0x00000000 0x8 binaries/addargs.o + .group 0x00000000 0x8 binaries/addargs.o + .group 0x00000000 0x8 binaries/addargs.o + .group 0x00000000 0x8 binaries/addargs.o + .group 0x00000000 0x8 binaries/addargs.o + .group 0x00000000 0x8 binaries/addargs.o + .group 0x00000000 0x8 binaries/addargs.o + .group 0x00000000 0x8 binaries/addargs.o + .group 0x00000000 0x8 binaries/addargs.o + .group 0x00000000 0x8 binaries/addargs.o + .group 0x00000000 0x8 binaries/addargs.o + .group 0x00000000 0x8 binaries/addargs.o + .debug_macro 0x00000000 0x838 binaries/addargs.o + .debug_macro 0x00000000 0x58 binaries/addargs.o + .debug_macro 0x00000000 0xb2 binaries/addargs.o + .debug_macro 0x00000000 0x6a binaries/addargs.o + .debug_macro 0x00000000 0x52 binaries/addargs.o + .debug_macro 0x00000000 0x10 binaries/addargs.o + .debug_macro 0x00000000 0x16 binaries/addargs.o + .debug_macro 0x00000000 0x1c binaries/addargs.o + .debug_macro 0x00000000 0x1c binaries/addargs.o + .debug_macro 0x00000000 0x10 binaries/addargs.o + .debug_macro 0x00000000 0x28 binaries/addargs.o + .debug_macro 0x00000000 0x1c1 binaries/addargs.o + .debug_macro 0x00000000 0xa0 binaries/addargs.o + .debug_macro 0x00000000 0x10 binaries/addargs.o + .debug_macro 0x00000000 0x22 binaries/addargs.o + .debug_macro 0x00000000 0x46 binaries/addargs.o + .debug_macro 0x00000000 0xfa binaries/addargs.o + .debug_macro 0x00000000 0xdd binaries/addargs.o + .debug_macro 0x00000000 0x91 binaries/addargs.o + .debug_macro 0x00000000 0x8e binaries/addargs.o + .debug_macro 0x00000000 0x82 binaries/addargs.o + .debug_macro 0x00000000 0x2e binaries/addargs.o + .debug_macro 0x00000000 0x3a binaries/addargs.o + .debug_macro 0x00000000 0x4c binaries/addargs.o + .debug_macro 0x00000000 0x3a binaries/addargs.o + .debug_macro 0x00000000 0xa0 binaries/addargs.o + .debug_macro 0x00000000 0x34 binaries/addargs.o + .debug_macro 0x00000000 0x7c binaries/addargs.o + .debug_macro 0x00000000 0x1c binaries/addargs.o + .debug_macro 0x00000000 0xee binaries/addargs.o + .debug_macro 0x00000000 0x7c binaries/addargs.o + .debug_macro 0x00000000 0x20 binaries/addargs.o + .debug_macro 0x00000000 0x10 binaries/addargs.o + .debug_macro 0x00000000 0x1c binaries/addargs.o + .debug_macro 0x00000000 0x34 binaries/addargs.o + .debug_macro 0x00000000 0xeb binaries/addargs.o + .debug_macro 0x00000000 0x8e binaries/addargs.o + .group 0x00000000 0x8 binaries/lexan.o + .group 0x00000000 0x8 binaries/lexan.o + .group 0x00000000 0x8 binaries/lexan.o + .group 0x00000000 0x8 binaries/lexan.o + .group 0x00000000 0x8 binaries/lexan.o + .group 0x00000000 0x8 binaries/lexan.o + .group 0x00000000 0x8 binaries/lexan.o + .group 0x00000000 0x8 binaries/lexan.o + .group 0x00000000 0x8 binaries/lexan.o + .group 0x00000000 0x8 binaries/lexan.o + .group 0x00000000 0x8 binaries/lexan.o + .group 0x00000000 0x8 binaries/lexan.o + .group 0x00000000 0x8 binaries/lexan.o + .group 0x00000000 0x8 binaries/lexan.o + .group 0x00000000 0x8 binaries/lexan.o + .group 0x00000000 0x8 binaries/lexan.o + .group 0x00000000 0x8 binaries/lexan.o + .group 0x00000000 0x8 binaries/lexan.o + .group 0x00000000 0x8 binaries/lexan.o + .group 0x00000000 0x8 binaries/lexan.o + .group 0x00000000 0x8 binaries/lexan.o + .group 0x00000000 0x8 binaries/lexan.o + .group 0x00000000 0x8 binaries/lexan.o + .group 0x00000000 0x8 binaries/lexan.o + .group 0x00000000 0x8 binaries/lexan.o + .group 0x00000000 0x8 binaries/lexan.o + .group 0x00000000 0x8 binaries/lexan.o + .group 0x00000000 0x8 binaries/lexan.o + .group 0x00000000 0x8 binaries/lexan.o + .group 0x00000000 0x8 binaries/lexan.o + .group 0x00000000 0x8 binaries/lexan.o + .group 0x00000000 0x8 binaries/lexan.o + .group 0x00000000 0x8 binaries/lexan.o + .group 0x00000000 0x8 binaries/lexan.o + .group 0x00000000 0x8 binaries/lexan.o + .group 0x00000000 0x8 binaries/lexan.o + .group 0x00000000 0x8 binaries/lexan.o + .debug_macro 0x00000000 0x838 binaries/lexan.o + .debug_macro 0x00000000 0x58 binaries/lexan.o + .debug_macro 0x00000000 0xb2 binaries/lexan.o + .debug_macro 0x00000000 0x6a binaries/lexan.o + .debug_macro 0x00000000 0x52 binaries/lexan.o + .debug_macro 0x00000000 0x10 binaries/lexan.o + .debug_macro 0x00000000 0x16 binaries/lexan.o + .debug_macro 0x00000000 0x1c binaries/lexan.o + .debug_macro 0x00000000 0x1c binaries/lexan.o + .debug_macro 0x00000000 0x10 binaries/lexan.o + .debug_macro 0x00000000 0x28 binaries/lexan.o + .debug_macro 0x00000000 0x1c1 binaries/lexan.o + .debug_macro 0x00000000 0xa0 binaries/lexan.o + .debug_macro 0x00000000 0x10 binaries/lexan.o + .debug_macro 0x00000000 0x22 binaries/lexan.o + .debug_macro 0x00000000 0x46 binaries/lexan.o + .debug_macro 0x00000000 0xfa binaries/lexan.o + .debug_macro 0x00000000 0xdd binaries/lexan.o + .debug_macro 0x00000000 0x91 binaries/lexan.o + .debug_macro 0x00000000 0x8e binaries/lexan.o + .debug_macro 0x00000000 0x82 binaries/lexan.o + .debug_macro 0x00000000 0x2e binaries/lexan.o + .debug_macro 0x00000000 0x3a binaries/lexan.o + .debug_macro 0x00000000 0x4c binaries/lexan.o + .debug_macro 0x00000000 0x3a binaries/lexan.o + .debug_macro 0x00000000 0xa0 binaries/lexan.o + .debug_macro 0x00000000 0x34 binaries/lexan.o + .debug_macro 0x00000000 0x7c binaries/lexan.o + .debug_macro 0x00000000 0x1c binaries/lexan.o + .debug_macro 0x00000000 0xee binaries/lexan.o + .debug_macro 0x00000000 0x7c binaries/lexan.o + .debug_macro 0x00000000 0x20 binaries/lexan.o + .debug_macro 0x00000000 0x10 binaries/lexan.o + .debug_macro 0x00000000 0x1c binaries/lexan.o + .debug_macro 0x00000000 0x34 binaries/lexan.o + .debug_macro 0x00000000 0xeb binaries/lexan.o + .debug_macro 0x00000000 0x8e binaries/lexan.o + .group 0x00000000 0x8 binaries/shell.o + .group 0x00000000 0x8 binaries/shell.o + .group 0x00000000 0x8 binaries/shell.o + .group 0x00000000 0x8 binaries/shell.o + .group 0x00000000 0x8 binaries/shell.o + .group 0x00000000 0x8 binaries/shell.o + .group 0x00000000 0x8 binaries/shell.o + .group 0x00000000 0x8 binaries/shell.o + .group 0x00000000 0x8 binaries/shell.o + .group 0x00000000 0x8 binaries/shell.o + .group 0x00000000 0x8 binaries/shell.o + .group 0x00000000 0x8 binaries/shell.o + .group 0x00000000 0x8 binaries/shell.o + .group 0x00000000 0x8 binaries/shell.o + .group 0x00000000 0x8 binaries/shell.o + .group 0x00000000 0x8 binaries/shell.o + .group 0x00000000 0x8 binaries/shell.o + .group 0x00000000 0x8 binaries/shell.o + .group 0x00000000 0x8 binaries/shell.o + .group 0x00000000 0x8 binaries/shell.o + .group 0x00000000 0x8 binaries/shell.o + .group 0x00000000 0x8 binaries/shell.o + .group 0x00000000 0x8 binaries/shell.o + .group 0x00000000 0x8 binaries/shell.o + .group 0x00000000 0x8 binaries/shell.o + .group 0x00000000 0x8 binaries/shell.o + .group 0x00000000 0x8 binaries/shell.o + .group 0x00000000 0x8 binaries/shell.o + .group 0x00000000 0x8 binaries/shell.o + .group 0x00000000 0x8 binaries/shell.o + .group 0x00000000 0x8 binaries/shell.o + .group 0x00000000 0x8 binaries/shell.o + .group 0x00000000 0x8 binaries/shell.o + .group 0x00000000 0x8 binaries/shell.o + .group 0x00000000 0x8 binaries/shell.o + .group 0x00000000 0x8 binaries/shell.o + .group 0x00000000 0x8 binaries/shell.o + .debug_macro 0x00000000 0x838 binaries/shell.o + .debug_macro 0x00000000 0x58 binaries/shell.o + .debug_macro 0x00000000 0xb2 binaries/shell.o + .debug_macro 0x00000000 0x6a binaries/shell.o + .debug_macro 0x00000000 0x52 binaries/shell.o + .debug_macro 0x00000000 0x10 binaries/shell.o + .debug_macro 0x00000000 0x16 binaries/shell.o + .debug_macro 0x00000000 0x1c binaries/shell.o + .debug_macro 0x00000000 0x1c binaries/shell.o + .debug_macro 0x00000000 0x10 binaries/shell.o + .debug_macro 0x00000000 0x28 binaries/shell.o + .debug_macro 0x00000000 0x1c1 binaries/shell.o + .debug_macro 0x00000000 0xa0 binaries/shell.o + .debug_macro 0x00000000 0x10 binaries/shell.o + .debug_macro 0x00000000 0x22 binaries/shell.o + .debug_macro 0x00000000 0x46 binaries/shell.o + .debug_macro 0x00000000 0xfa binaries/shell.o + .debug_macro 0x00000000 0xdd binaries/shell.o + .debug_macro 0x00000000 0x91 binaries/shell.o + .debug_macro 0x00000000 0x8e binaries/shell.o + .debug_macro 0x00000000 0x82 binaries/shell.o + .debug_macro 0x00000000 0x2e binaries/shell.o + .debug_macro 0x00000000 0x3a binaries/shell.o + .debug_macro 0x00000000 0x4c binaries/shell.o + .debug_macro 0x00000000 0x3a binaries/shell.o + .debug_macro 0x00000000 0xa0 binaries/shell.o + .debug_macro 0x00000000 0x34 binaries/shell.o + .debug_macro 0x00000000 0x7c binaries/shell.o + .debug_macro 0x00000000 0x1c binaries/shell.o + .debug_macro 0x00000000 0xee binaries/shell.o + .debug_macro 0x00000000 0x7c binaries/shell.o + .debug_macro 0x00000000 0x20 binaries/shell.o + .debug_macro 0x00000000 0x10 binaries/shell.o + .debug_macro 0x00000000 0x1c binaries/shell.o + .debug_macro 0x00000000 0x34 binaries/shell.o + .debug_macro 0x00000000 0xeb binaries/shell.o + .debug_macro 0x00000000 0x8e binaries/shell.o + .group 0x00000000 0x8 binaries/xsh_argecho.o + .group 0x00000000 0x8 binaries/xsh_argecho.o + .group 0x00000000 0x8 binaries/xsh_argecho.o + .group 0x00000000 0x8 binaries/xsh_argecho.o + .group 0x00000000 0x8 binaries/xsh_argecho.o + .group 0x00000000 0x8 binaries/xsh_argecho.o + .group 0x00000000 0x8 binaries/xsh_argecho.o + .group 0x00000000 0x8 binaries/xsh_argecho.o + .group 0x00000000 0x8 binaries/xsh_argecho.o + .group 0x00000000 0x8 binaries/xsh_argecho.o + .group 0x00000000 0x8 binaries/xsh_argecho.o + .group 0x00000000 0x8 binaries/xsh_argecho.o + .group 0x00000000 0x8 binaries/xsh_argecho.o + .group 0x00000000 0x8 binaries/xsh_argecho.o + .group 0x00000000 0x8 binaries/xsh_argecho.o + .group 0x00000000 0x8 binaries/xsh_argecho.o + .group 0x00000000 0x8 binaries/xsh_argecho.o + .group 0x00000000 0x8 binaries/xsh_argecho.o + .group 0x00000000 0x8 binaries/xsh_argecho.o + .group 0x00000000 0x8 binaries/xsh_argecho.o + .group 0x00000000 0x8 binaries/xsh_argecho.o + .group 0x00000000 0x8 binaries/xsh_argecho.o + .group 0x00000000 0x8 binaries/xsh_argecho.o + .group 0x00000000 0x8 binaries/xsh_argecho.o + .group 0x00000000 0x8 binaries/xsh_argecho.o + .group 0x00000000 0x8 binaries/xsh_argecho.o + .group 0x00000000 0x8 binaries/xsh_argecho.o + .group 0x00000000 0x8 binaries/xsh_argecho.o + .group 0x00000000 0x8 binaries/xsh_argecho.o + .group 0x00000000 0x8 binaries/xsh_argecho.o + .group 0x00000000 0x8 binaries/xsh_argecho.o + .group 0x00000000 0x8 binaries/xsh_argecho.o + .group 0x00000000 0x8 binaries/xsh_argecho.o + .group 0x00000000 0x8 binaries/xsh_argecho.o + .group 0x00000000 0x8 binaries/xsh_argecho.o + .group 0x00000000 0x8 binaries/xsh_argecho.o + .group 0x00000000 0x8 binaries/xsh_argecho.o + .debug_macro 0x00000000 0x838 binaries/xsh_argecho.o + .debug_macro 0x00000000 0x58 binaries/xsh_argecho.o + .debug_macro 0x00000000 0xb2 binaries/xsh_argecho.o + .debug_macro 0x00000000 0x6a binaries/xsh_argecho.o + .debug_macro 0x00000000 0x52 binaries/xsh_argecho.o + .debug_macro 0x00000000 0x10 binaries/xsh_argecho.o + .debug_macro 0x00000000 0x16 binaries/xsh_argecho.o + .debug_macro 0x00000000 0x1c binaries/xsh_argecho.o + .debug_macro 0x00000000 0x1c binaries/xsh_argecho.o + .debug_macro 0x00000000 0x10 binaries/xsh_argecho.o + .debug_macro 0x00000000 0x28 binaries/xsh_argecho.o + .debug_macro 0x00000000 0x1c1 binaries/xsh_argecho.o + .debug_macro 0x00000000 0xa0 binaries/xsh_argecho.o + .debug_macro 0x00000000 0x10 binaries/xsh_argecho.o + .debug_macro 0x00000000 0x22 binaries/xsh_argecho.o + .debug_macro 0x00000000 0x46 binaries/xsh_argecho.o + .debug_macro 0x00000000 0xfa binaries/xsh_argecho.o + .debug_macro 0x00000000 0xdd binaries/xsh_argecho.o + .debug_macro 0x00000000 0x91 binaries/xsh_argecho.o + .debug_macro 0x00000000 0x8e binaries/xsh_argecho.o + .debug_macro 0x00000000 0x82 binaries/xsh_argecho.o + .debug_macro 0x00000000 0x2e binaries/xsh_argecho.o + .debug_macro 0x00000000 0x3a binaries/xsh_argecho.o + .debug_macro 0x00000000 0x4c binaries/xsh_argecho.o + .debug_macro 0x00000000 0x3a binaries/xsh_argecho.o + .debug_macro 0x00000000 0xa0 binaries/xsh_argecho.o + .debug_macro 0x00000000 0x34 binaries/xsh_argecho.o + .debug_macro 0x00000000 0x7c binaries/xsh_argecho.o + .debug_macro 0x00000000 0x1c binaries/xsh_argecho.o + .debug_macro 0x00000000 0xee binaries/xsh_argecho.o + .debug_macro 0x00000000 0x7c binaries/xsh_argecho.o + .debug_macro 0x00000000 0x20 binaries/xsh_argecho.o + .debug_macro 0x00000000 0x10 binaries/xsh_argecho.o + .debug_macro 0x00000000 0x1c binaries/xsh_argecho.o + .debug_macro 0x00000000 0x34 binaries/xsh_argecho.o + .debug_macro 0x00000000 0xeb binaries/xsh_argecho.o + .debug_macro 0x00000000 0x8e binaries/xsh_argecho.o + .group 0x00000000 0x8 binaries/xsh_cat.o + .group 0x00000000 0x8 binaries/xsh_cat.o + .group 0x00000000 0x8 binaries/xsh_cat.o + .group 0x00000000 0x8 binaries/xsh_cat.o + .group 0x00000000 0x8 binaries/xsh_cat.o + .group 0x00000000 0x8 binaries/xsh_cat.o + .group 0x00000000 0x8 binaries/xsh_cat.o + .group 0x00000000 0x8 binaries/xsh_cat.o + .group 0x00000000 0x8 binaries/xsh_cat.o + .group 0x00000000 0x8 binaries/xsh_cat.o + .group 0x00000000 0x8 binaries/xsh_cat.o + .group 0x00000000 0x8 binaries/xsh_cat.o + .group 0x00000000 0x8 binaries/xsh_cat.o + .group 0x00000000 0x8 binaries/xsh_cat.o + .group 0x00000000 0x8 binaries/xsh_cat.o + .group 0x00000000 0x8 binaries/xsh_cat.o + .group 0x00000000 0x8 binaries/xsh_cat.o + .group 0x00000000 0x8 binaries/xsh_cat.o + .group 0x00000000 0x8 binaries/xsh_cat.o + .group 0x00000000 0x8 binaries/xsh_cat.o + .group 0x00000000 0x8 binaries/xsh_cat.o + .group 0x00000000 0x8 binaries/xsh_cat.o + .group 0x00000000 0x8 binaries/xsh_cat.o + .group 0x00000000 0x8 binaries/xsh_cat.o + .group 0x00000000 0x8 binaries/xsh_cat.o + .group 0x00000000 0x8 binaries/xsh_cat.o + .group 0x00000000 0x8 binaries/xsh_cat.o + .group 0x00000000 0x8 binaries/xsh_cat.o + .group 0x00000000 0x8 binaries/xsh_cat.o + .group 0x00000000 0x8 binaries/xsh_cat.o + .group 0x00000000 0x8 binaries/xsh_cat.o + .group 0x00000000 0x8 binaries/xsh_cat.o + .group 0x00000000 0x8 binaries/xsh_cat.o + .group 0x00000000 0x8 binaries/xsh_cat.o + .group 0x00000000 0x8 binaries/xsh_cat.o + .group 0x00000000 0x8 binaries/xsh_cat.o + .group 0x00000000 0x8 binaries/xsh_cat.o + .debug_macro 0x00000000 0x838 binaries/xsh_cat.o + .debug_macro 0x00000000 0x58 binaries/xsh_cat.o + .debug_macro 0x00000000 0xb2 binaries/xsh_cat.o + .debug_macro 0x00000000 0x6a binaries/xsh_cat.o + .debug_macro 0x00000000 0x52 binaries/xsh_cat.o + .debug_macro 0x00000000 0x10 binaries/xsh_cat.o + .debug_macro 0x00000000 0x16 binaries/xsh_cat.o + .debug_macro 0x00000000 0x1c binaries/xsh_cat.o + .debug_macro 0x00000000 0x1c binaries/xsh_cat.o + .debug_macro 0x00000000 0x10 binaries/xsh_cat.o + .debug_macro 0x00000000 0x28 binaries/xsh_cat.o + .debug_macro 0x00000000 0x1c1 binaries/xsh_cat.o + .debug_macro 0x00000000 0xa0 binaries/xsh_cat.o + .debug_macro 0x00000000 0x10 binaries/xsh_cat.o + .debug_macro 0x00000000 0x22 binaries/xsh_cat.o + .debug_macro 0x00000000 0x46 binaries/xsh_cat.o + .debug_macro 0x00000000 0xfa binaries/xsh_cat.o + .debug_macro 0x00000000 0xdd binaries/xsh_cat.o + .debug_macro 0x00000000 0x91 binaries/xsh_cat.o + .debug_macro 0x00000000 0x8e binaries/xsh_cat.o + .debug_macro 0x00000000 0x82 binaries/xsh_cat.o + .debug_macro 0x00000000 0x2e binaries/xsh_cat.o + .debug_macro 0x00000000 0x3a binaries/xsh_cat.o + .debug_macro 0x00000000 0x4c binaries/xsh_cat.o + .debug_macro 0x00000000 0x3a binaries/xsh_cat.o + .debug_macro 0x00000000 0xa0 binaries/xsh_cat.o + .debug_macro 0x00000000 0x34 binaries/xsh_cat.o + .debug_macro 0x00000000 0x7c binaries/xsh_cat.o + .debug_macro 0x00000000 0x1c binaries/xsh_cat.o + .debug_macro 0x00000000 0xee binaries/xsh_cat.o + .debug_macro 0x00000000 0x7c binaries/xsh_cat.o + .debug_macro 0x00000000 0x20 binaries/xsh_cat.o + .debug_macro 0x00000000 0x10 binaries/xsh_cat.o + .debug_macro 0x00000000 0x1c binaries/xsh_cat.o + .debug_macro 0x00000000 0x34 binaries/xsh_cat.o + .debug_macro 0x00000000 0xeb binaries/xsh_cat.o + .debug_macro 0x00000000 0x8e binaries/xsh_cat.o + .group 0x00000000 0x8 binaries/xsh_clear.o + .group 0x00000000 0x8 binaries/xsh_clear.o + .group 0x00000000 0x8 binaries/xsh_clear.o + .group 0x00000000 0x8 binaries/xsh_clear.o + .group 0x00000000 0x8 binaries/xsh_clear.o + .group 0x00000000 0x8 binaries/xsh_clear.o + .group 0x00000000 0x8 binaries/xsh_clear.o + .group 0x00000000 0x8 binaries/xsh_clear.o + .group 0x00000000 0x8 binaries/xsh_clear.o + .group 0x00000000 0x8 binaries/xsh_clear.o + .group 0x00000000 0x8 binaries/xsh_clear.o + .group 0x00000000 0x8 binaries/xsh_clear.o + .group 0x00000000 0x8 binaries/xsh_clear.o + .group 0x00000000 0x8 binaries/xsh_clear.o + .group 0x00000000 0x8 binaries/xsh_clear.o + .group 0x00000000 0x8 binaries/xsh_clear.o + .group 0x00000000 0x8 binaries/xsh_clear.o + .group 0x00000000 0x8 binaries/xsh_clear.o + .group 0x00000000 0x8 binaries/xsh_clear.o + .group 0x00000000 0x8 binaries/xsh_clear.o + .group 0x00000000 0x8 binaries/xsh_clear.o + .group 0x00000000 0x8 binaries/xsh_clear.o + .group 0x00000000 0x8 binaries/xsh_clear.o + .group 0x00000000 0x8 binaries/xsh_clear.o + .group 0x00000000 0x8 binaries/xsh_clear.o + .group 0x00000000 0x8 binaries/xsh_clear.o + .group 0x00000000 0x8 binaries/xsh_clear.o + .group 0x00000000 0x8 binaries/xsh_clear.o + .group 0x00000000 0x8 binaries/xsh_clear.o + .group 0x00000000 0x8 binaries/xsh_clear.o + .group 0x00000000 0x8 binaries/xsh_clear.o + .group 0x00000000 0x8 binaries/xsh_clear.o + .group 0x00000000 0x8 binaries/xsh_clear.o + .group 0x00000000 0x8 binaries/xsh_clear.o + .group 0x00000000 0x8 binaries/xsh_clear.o + .group 0x00000000 0x8 binaries/xsh_clear.o + .group 0x00000000 0x8 binaries/xsh_clear.o + .debug_macro 0x00000000 0x838 binaries/xsh_clear.o + .debug_macro 0x00000000 0x58 binaries/xsh_clear.o + .debug_macro 0x00000000 0xb2 binaries/xsh_clear.o + .debug_macro 0x00000000 0x6a binaries/xsh_clear.o + .debug_macro 0x00000000 0x52 binaries/xsh_clear.o + .debug_macro 0x00000000 0x10 binaries/xsh_clear.o + .debug_macro 0x00000000 0x16 binaries/xsh_clear.o + .debug_macro 0x00000000 0x1c binaries/xsh_clear.o + .debug_macro 0x00000000 0x1c binaries/xsh_clear.o + .debug_macro 0x00000000 0x10 binaries/xsh_clear.o + .debug_macro 0x00000000 0x28 binaries/xsh_clear.o + .debug_macro 0x00000000 0x1c1 binaries/xsh_clear.o + .debug_macro 0x00000000 0xa0 binaries/xsh_clear.o + .debug_macro 0x00000000 0x10 binaries/xsh_clear.o + .debug_macro 0x00000000 0x22 binaries/xsh_clear.o + .debug_macro 0x00000000 0x46 binaries/xsh_clear.o + .debug_macro 0x00000000 0xfa binaries/xsh_clear.o + .debug_macro 0x00000000 0xdd binaries/xsh_clear.o + .debug_macro 0x00000000 0x91 binaries/xsh_clear.o + .debug_macro 0x00000000 0x8e binaries/xsh_clear.o + .debug_macro 0x00000000 0x82 binaries/xsh_clear.o + .debug_macro 0x00000000 0x2e binaries/xsh_clear.o + .debug_macro 0x00000000 0x3a binaries/xsh_clear.o + .debug_macro 0x00000000 0x4c binaries/xsh_clear.o + .debug_macro 0x00000000 0x3a binaries/xsh_clear.o + .debug_macro 0x00000000 0xa0 binaries/xsh_clear.o + .debug_macro 0x00000000 0x34 binaries/xsh_clear.o + .debug_macro 0x00000000 0x7c binaries/xsh_clear.o + .debug_macro 0x00000000 0x1c binaries/xsh_clear.o + .debug_macro 0x00000000 0xee binaries/xsh_clear.o + .debug_macro 0x00000000 0x7c binaries/xsh_clear.o + .debug_macro 0x00000000 0x20 binaries/xsh_clear.o + .debug_macro 0x00000000 0x10 binaries/xsh_clear.o + .debug_macro 0x00000000 0x1c binaries/xsh_clear.o + .debug_macro 0x00000000 0x34 binaries/xsh_clear.o + .debug_macro 0x00000000 0xeb binaries/xsh_clear.o + .debug_macro 0x00000000 0x8e binaries/xsh_clear.o + .group 0x00000000 0x8 binaries/xsh_date.o + .group 0x00000000 0x8 binaries/xsh_date.o + .group 0x00000000 0x8 binaries/xsh_date.o + .group 0x00000000 0x8 binaries/xsh_date.o + .group 0x00000000 0x8 binaries/xsh_date.o + .group 0x00000000 0x8 binaries/xsh_date.o + .group 0x00000000 0x8 binaries/xsh_date.o + .group 0x00000000 0x8 binaries/xsh_date.o + .group 0x00000000 0x8 binaries/xsh_date.o + .group 0x00000000 0x8 binaries/xsh_date.o + .group 0x00000000 0x8 binaries/xsh_date.o + .group 0x00000000 0x8 binaries/xsh_date.o + .group 0x00000000 0x8 binaries/xsh_date.o + .group 0x00000000 0x8 binaries/xsh_date.o + .group 0x00000000 0x8 binaries/xsh_date.o + .group 0x00000000 0x8 binaries/xsh_date.o + .group 0x00000000 0x8 binaries/xsh_date.o + .group 0x00000000 0x8 binaries/xsh_date.o + .group 0x00000000 0x8 binaries/xsh_date.o + .group 0x00000000 0x8 binaries/xsh_date.o + .group 0x00000000 0x8 binaries/xsh_date.o + .group 0x00000000 0x8 binaries/xsh_date.o + .group 0x00000000 0x8 binaries/xsh_date.o + .group 0x00000000 0x8 binaries/xsh_date.o + .group 0x00000000 0x8 binaries/xsh_date.o + .group 0x00000000 0x8 binaries/xsh_date.o + .group 0x00000000 0x8 binaries/xsh_date.o + .group 0x00000000 0x8 binaries/xsh_date.o + .group 0x00000000 0x8 binaries/xsh_date.o + .group 0x00000000 0x8 binaries/xsh_date.o + .group 0x00000000 0x8 binaries/xsh_date.o + .group 0x00000000 0x8 binaries/xsh_date.o + .group 0x00000000 0x8 binaries/xsh_date.o + .group 0x00000000 0x8 binaries/xsh_date.o + .group 0x00000000 0x8 binaries/xsh_date.o + .group 0x00000000 0x8 binaries/xsh_date.o + .group 0x00000000 0x8 binaries/xsh_date.o + .debug_macro 0x00000000 0x838 binaries/xsh_date.o + .debug_macro 0x00000000 0x58 binaries/xsh_date.o + .debug_macro 0x00000000 0xb2 binaries/xsh_date.o + .debug_macro 0x00000000 0x6a binaries/xsh_date.o + .debug_macro 0x00000000 0x52 binaries/xsh_date.o + .debug_macro 0x00000000 0x10 binaries/xsh_date.o + .debug_macro 0x00000000 0x16 binaries/xsh_date.o + .debug_macro 0x00000000 0x1c binaries/xsh_date.o + .debug_macro 0x00000000 0x1c binaries/xsh_date.o + .debug_macro 0x00000000 0x10 binaries/xsh_date.o + .debug_macro 0x00000000 0x28 binaries/xsh_date.o + .debug_macro 0x00000000 0x1c1 binaries/xsh_date.o + .debug_macro 0x00000000 0xa0 binaries/xsh_date.o + .debug_macro 0x00000000 0x10 binaries/xsh_date.o + .debug_macro 0x00000000 0x22 binaries/xsh_date.o + .debug_macro 0x00000000 0x46 binaries/xsh_date.o + .debug_macro 0x00000000 0xfa binaries/xsh_date.o + .debug_macro 0x00000000 0xdd binaries/xsh_date.o + .debug_macro 0x00000000 0x91 binaries/xsh_date.o + .debug_macro 0x00000000 0x8e binaries/xsh_date.o + .debug_macro 0x00000000 0x82 binaries/xsh_date.o + .debug_macro 0x00000000 0x2e binaries/xsh_date.o + .debug_macro 0x00000000 0x3a binaries/xsh_date.o + .debug_macro 0x00000000 0x4c binaries/xsh_date.o + .debug_macro 0x00000000 0x3a binaries/xsh_date.o + .debug_macro 0x00000000 0xa0 binaries/xsh_date.o + .debug_macro 0x00000000 0x34 binaries/xsh_date.o + .debug_macro 0x00000000 0x7c binaries/xsh_date.o + .debug_macro 0x00000000 0x1c binaries/xsh_date.o + .debug_macro 0x00000000 0xee binaries/xsh_date.o + .debug_macro 0x00000000 0x7c binaries/xsh_date.o + .debug_macro 0x00000000 0x20 binaries/xsh_date.o + .debug_macro 0x00000000 0x10 binaries/xsh_date.o + .debug_macro 0x00000000 0x1c binaries/xsh_date.o + .debug_macro 0x00000000 0x34 binaries/xsh_date.o + .debug_macro 0x00000000 0xeb binaries/xsh_date.o + .debug_macro 0x00000000 0x8e binaries/xsh_date.o + .group 0x00000000 0x8 binaries/xsh_devdump.o + .group 0x00000000 0x8 binaries/xsh_devdump.o + .group 0x00000000 0x8 binaries/xsh_devdump.o + .group 0x00000000 0x8 binaries/xsh_devdump.o + .group 0x00000000 0x8 binaries/xsh_devdump.o + .group 0x00000000 0x8 binaries/xsh_devdump.o + .group 0x00000000 0x8 binaries/xsh_devdump.o + .group 0x00000000 0x8 binaries/xsh_devdump.o + .group 0x00000000 0x8 binaries/xsh_devdump.o + .group 0x00000000 0x8 binaries/xsh_devdump.o + .group 0x00000000 0x8 binaries/xsh_devdump.o + .group 0x00000000 0x8 binaries/xsh_devdump.o + .group 0x00000000 0x8 binaries/xsh_devdump.o + .group 0x00000000 0x8 binaries/xsh_devdump.o + .group 0x00000000 0x8 binaries/xsh_devdump.o + .group 0x00000000 0x8 binaries/xsh_devdump.o + .group 0x00000000 0x8 binaries/xsh_devdump.o + .group 0x00000000 0x8 binaries/xsh_devdump.o + .group 0x00000000 0x8 binaries/xsh_devdump.o + .group 0x00000000 0x8 binaries/xsh_devdump.o + .group 0x00000000 0x8 binaries/xsh_devdump.o + .group 0x00000000 0x8 binaries/xsh_devdump.o + .group 0x00000000 0x8 binaries/xsh_devdump.o + .group 0x00000000 0x8 binaries/xsh_devdump.o + .group 0x00000000 0x8 binaries/xsh_devdump.o + .group 0x00000000 0x8 binaries/xsh_devdump.o + .group 0x00000000 0x8 binaries/xsh_devdump.o + .group 0x00000000 0x8 binaries/xsh_devdump.o + .group 0x00000000 0x8 binaries/xsh_devdump.o + .group 0x00000000 0x8 binaries/xsh_devdump.o + .group 0x00000000 0x8 binaries/xsh_devdump.o + .group 0x00000000 0x8 binaries/xsh_devdump.o + .group 0x00000000 0x8 binaries/xsh_devdump.o + .group 0x00000000 0x8 binaries/xsh_devdump.o + .group 0x00000000 0x8 binaries/xsh_devdump.o + .group 0x00000000 0x8 binaries/xsh_devdump.o + .group 0x00000000 0x8 binaries/xsh_devdump.o + .debug_macro 0x00000000 0x838 binaries/xsh_devdump.o + .debug_macro 0x00000000 0x58 binaries/xsh_devdump.o + .debug_macro 0x00000000 0xb2 binaries/xsh_devdump.o + .debug_macro 0x00000000 0x6a binaries/xsh_devdump.o + .debug_macro 0x00000000 0x52 binaries/xsh_devdump.o + .debug_macro 0x00000000 0x10 binaries/xsh_devdump.o + .debug_macro 0x00000000 0x16 binaries/xsh_devdump.o + .debug_macro 0x00000000 0x1c binaries/xsh_devdump.o + .debug_macro 0x00000000 0x1c binaries/xsh_devdump.o + .debug_macro 0x00000000 0x10 binaries/xsh_devdump.o + .debug_macro 0x00000000 0x28 binaries/xsh_devdump.o + .debug_macro 0x00000000 0x1c1 binaries/xsh_devdump.o + .debug_macro 0x00000000 0xa0 binaries/xsh_devdump.o + .debug_macro 0x00000000 0x10 binaries/xsh_devdump.o + .debug_macro 0x00000000 0x22 binaries/xsh_devdump.o + .debug_macro 0x00000000 0x46 binaries/xsh_devdump.o + .debug_macro 0x00000000 0xfa binaries/xsh_devdump.o + .debug_macro 0x00000000 0xdd binaries/xsh_devdump.o + .debug_macro 0x00000000 0x91 binaries/xsh_devdump.o + .debug_macro 0x00000000 0x8e binaries/xsh_devdump.o + .debug_macro 0x00000000 0x82 binaries/xsh_devdump.o + .debug_macro 0x00000000 0x2e binaries/xsh_devdump.o + .debug_macro 0x00000000 0x3a binaries/xsh_devdump.o + .debug_macro 0x00000000 0x4c binaries/xsh_devdump.o + .debug_macro 0x00000000 0x3a binaries/xsh_devdump.o + .debug_macro 0x00000000 0xa0 binaries/xsh_devdump.o + .debug_macro 0x00000000 0x34 binaries/xsh_devdump.o + .debug_macro 0x00000000 0x7c binaries/xsh_devdump.o + .debug_macro 0x00000000 0x1c binaries/xsh_devdump.o + .debug_macro 0x00000000 0xee binaries/xsh_devdump.o + .debug_macro 0x00000000 0x7c binaries/xsh_devdump.o + .debug_macro 0x00000000 0x20 binaries/xsh_devdump.o + .debug_macro 0x00000000 0x10 binaries/xsh_devdump.o + .debug_macro 0x00000000 0x1c binaries/xsh_devdump.o + .debug_macro 0x00000000 0x34 binaries/xsh_devdump.o + .debug_macro 0x00000000 0xeb binaries/xsh_devdump.o + .debug_macro 0x00000000 0x8e binaries/xsh_devdump.o + .group 0x00000000 0x8 binaries/xsh_echo.o + .group 0x00000000 0x8 binaries/xsh_echo.o + .group 0x00000000 0x8 binaries/xsh_echo.o + .group 0x00000000 0x8 binaries/xsh_echo.o + .group 0x00000000 0x8 binaries/xsh_echo.o + .group 0x00000000 0x8 binaries/xsh_echo.o + .group 0x00000000 0x8 binaries/xsh_echo.o + .group 0x00000000 0x8 binaries/xsh_echo.o + .group 0x00000000 0x8 binaries/xsh_echo.o + .group 0x00000000 0x8 binaries/xsh_echo.o + .group 0x00000000 0x8 binaries/xsh_echo.o + .group 0x00000000 0x8 binaries/xsh_echo.o + .group 0x00000000 0x8 binaries/xsh_echo.o + .group 0x00000000 0x8 binaries/xsh_echo.o + .group 0x00000000 0x8 binaries/xsh_echo.o + .group 0x00000000 0x8 binaries/xsh_echo.o + .group 0x00000000 0x8 binaries/xsh_echo.o + .group 0x00000000 0x8 binaries/xsh_echo.o + .group 0x00000000 0x8 binaries/xsh_echo.o + .group 0x00000000 0x8 binaries/xsh_echo.o + .group 0x00000000 0x8 binaries/xsh_echo.o + .group 0x00000000 0x8 binaries/xsh_echo.o + .group 0x00000000 0x8 binaries/xsh_echo.o + .group 0x00000000 0x8 binaries/xsh_echo.o + .group 0x00000000 0x8 binaries/xsh_echo.o + .group 0x00000000 0x8 binaries/xsh_echo.o + .group 0x00000000 0x8 binaries/xsh_echo.o + .group 0x00000000 0x8 binaries/xsh_echo.o + .group 0x00000000 0x8 binaries/xsh_echo.o + .group 0x00000000 0x8 binaries/xsh_echo.o + .group 0x00000000 0x8 binaries/xsh_echo.o + .group 0x00000000 0x8 binaries/xsh_echo.o + .group 0x00000000 0x8 binaries/xsh_echo.o + .group 0x00000000 0x8 binaries/xsh_echo.o + .group 0x00000000 0x8 binaries/xsh_echo.o + .group 0x00000000 0x8 binaries/xsh_echo.o + .group 0x00000000 0x8 binaries/xsh_echo.o + .debug_macro 0x00000000 0x838 binaries/xsh_echo.o + .debug_macro 0x00000000 0x58 binaries/xsh_echo.o + .debug_macro 0x00000000 0xb2 binaries/xsh_echo.o + .debug_macro 0x00000000 0x6a binaries/xsh_echo.o + .debug_macro 0x00000000 0x52 binaries/xsh_echo.o + .debug_macro 0x00000000 0x10 binaries/xsh_echo.o + .debug_macro 0x00000000 0x16 binaries/xsh_echo.o + .debug_macro 0x00000000 0x1c binaries/xsh_echo.o + .debug_macro 0x00000000 0x1c binaries/xsh_echo.o + .debug_macro 0x00000000 0x10 binaries/xsh_echo.o + .debug_macro 0x00000000 0x28 binaries/xsh_echo.o + .debug_macro 0x00000000 0x1c1 binaries/xsh_echo.o + .debug_macro 0x00000000 0xa0 binaries/xsh_echo.o + .debug_macro 0x00000000 0x10 binaries/xsh_echo.o + .debug_macro 0x00000000 0x22 binaries/xsh_echo.o + .debug_macro 0x00000000 0x46 binaries/xsh_echo.o + .debug_macro 0x00000000 0xfa binaries/xsh_echo.o + .debug_macro 0x00000000 0xdd binaries/xsh_echo.o + .debug_macro 0x00000000 0x91 binaries/xsh_echo.o + .debug_macro 0x00000000 0x8e binaries/xsh_echo.o + .debug_macro 0x00000000 0x82 binaries/xsh_echo.o + .debug_macro 0x00000000 0x2e binaries/xsh_echo.o + .debug_macro 0x00000000 0x3a binaries/xsh_echo.o + .debug_macro 0x00000000 0x4c binaries/xsh_echo.o + .debug_macro 0x00000000 0x3a binaries/xsh_echo.o + .debug_macro 0x00000000 0xa0 binaries/xsh_echo.o + .debug_macro 0x00000000 0x34 binaries/xsh_echo.o + .debug_macro 0x00000000 0x7c binaries/xsh_echo.o + .debug_macro 0x00000000 0x1c binaries/xsh_echo.o + .debug_macro 0x00000000 0xee binaries/xsh_echo.o + .debug_macro 0x00000000 0x7c binaries/xsh_echo.o + .debug_macro 0x00000000 0x20 binaries/xsh_echo.o + .debug_macro 0x00000000 0x10 binaries/xsh_echo.o + .debug_macro 0x00000000 0x1c binaries/xsh_echo.o + .debug_macro 0x00000000 0x34 binaries/xsh_echo.o + .debug_macro 0x00000000 0xeb binaries/xsh_echo.o + .debug_macro 0x00000000 0x8e binaries/xsh_echo.o + .group 0x00000000 0x8 binaries/xsh_exit.o + .group 0x00000000 0x8 binaries/xsh_exit.o + .group 0x00000000 0x8 binaries/xsh_exit.o + .group 0x00000000 0x8 binaries/xsh_exit.o + .group 0x00000000 0x8 binaries/xsh_exit.o + .group 0x00000000 0x8 binaries/xsh_exit.o + .group 0x00000000 0x8 binaries/xsh_exit.o + .group 0x00000000 0x8 binaries/xsh_exit.o + .group 0x00000000 0x8 binaries/xsh_exit.o + .group 0x00000000 0x8 binaries/xsh_exit.o + .group 0x00000000 0x8 binaries/xsh_exit.o + .group 0x00000000 0x8 binaries/xsh_exit.o + .group 0x00000000 0x8 binaries/xsh_exit.o + .group 0x00000000 0x8 binaries/xsh_exit.o + .group 0x00000000 0x8 binaries/xsh_exit.o + .group 0x00000000 0x8 binaries/xsh_exit.o + .group 0x00000000 0x8 binaries/xsh_exit.o + .group 0x00000000 0x8 binaries/xsh_exit.o + .group 0x00000000 0x8 binaries/xsh_exit.o + .group 0x00000000 0x8 binaries/xsh_exit.o + .group 0x00000000 0x8 binaries/xsh_exit.o + .group 0x00000000 0x8 binaries/xsh_exit.o + .group 0x00000000 0x8 binaries/xsh_exit.o + .group 0x00000000 0x8 binaries/xsh_exit.o + .group 0x00000000 0x8 binaries/xsh_exit.o + .group 0x00000000 0x8 binaries/xsh_exit.o + .group 0x00000000 0x8 binaries/xsh_exit.o + .group 0x00000000 0x8 binaries/xsh_exit.o + .group 0x00000000 0x8 binaries/xsh_exit.o + .group 0x00000000 0x8 binaries/xsh_exit.o + .group 0x00000000 0x8 binaries/xsh_exit.o + .group 0x00000000 0x8 binaries/xsh_exit.o + .group 0x00000000 0x8 binaries/xsh_exit.o + .group 0x00000000 0x8 binaries/xsh_exit.o + .group 0x00000000 0x8 binaries/xsh_exit.o + .group 0x00000000 0x8 binaries/xsh_exit.o + .group 0x00000000 0x8 binaries/xsh_exit.o + .debug_macro 0x00000000 0x838 binaries/xsh_exit.o + .debug_macro 0x00000000 0x58 binaries/xsh_exit.o + .debug_macro 0x00000000 0xb2 binaries/xsh_exit.o + .debug_macro 0x00000000 0x6a binaries/xsh_exit.o + .debug_macro 0x00000000 0x52 binaries/xsh_exit.o + .debug_macro 0x00000000 0x10 binaries/xsh_exit.o + .debug_macro 0x00000000 0x16 binaries/xsh_exit.o + .debug_macro 0x00000000 0x1c binaries/xsh_exit.o + .debug_macro 0x00000000 0x1c binaries/xsh_exit.o + .debug_macro 0x00000000 0x10 binaries/xsh_exit.o + .debug_macro 0x00000000 0x28 binaries/xsh_exit.o + .debug_macro 0x00000000 0x1c1 binaries/xsh_exit.o + .debug_macro 0x00000000 0xa0 binaries/xsh_exit.o + .debug_macro 0x00000000 0x10 binaries/xsh_exit.o + .debug_macro 0x00000000 0x22 binaries/xsh_exit.o + .debug_macro 0x00000000 0x46 binaries/xsh_exit.o + .debug_macro 0x00000000 0xfa binaries/xsh_exit.o + .debug_macro 0x00000000 0xdd binaries/xsh_exit.o + .debug_macro 0x00000000 0x91 binaries/xsh_exit.o + .debug_macro 0x00000000 0x8e binaries/xsh_exit.o + .debug_macro 0x00000000 0x82 binaries/xsh_exit.o + .debug_macro 0x00000000 0x2e binaries/xsh_exit.o + .debug_macro 0x00000000 0x3a binaries/xsh_exit.o + .debug_macro 0x00000000 0x4c binaries/xsh_exit.o + .debug_macro 0x00000000 0x3a binaries/xsh_exit.o + .debug_macro 0x00000000 0xa0 binaries/xsh_exit.o + .debug_macro 0x00000000 0x34 binaries/xsh_exit.o + .debug_macro 0x00000000 0x7c binaries/xsh_exit.o + .debug_macro 0x00000000 0x1c binaries/xsh_exit.o + .debug_macro 0x00000000 0xee binaries/xsh_exit.o + .debug_macro 0x00000000 0x7c binaries/xsh_exit.o + .debug_macro 0x00000000 0x20 binaries/xsh_exit.o + .debug_macro 0x00000000 0x10 binaries/xsh_exit.o + .debug_macro 0x00000000 0x1c binaries/xsh_exit.o + .debug_macro 0x00000000 0x34 binaries/xsh_exit.o + .debug_macro 0x00000000 0xeb binaries/xsh_exit.o + .debug_macro 0x00000000 0x8e binaries/xsh_exit.o + .group 0x00000000 0x8 binaries/xsh_help.o + .group 0x00000000 0x8 binaries/xsh_help.o + .group 0x00000000 0x8 binaries/xsh_help.o + .group 0x00000000 0x8 binaries/xsh_help.o + .group 0x00000000 0x8 binaries/xsh_help.o + .group 0x00000000 0x8 binaries/xsh_help.o + .group 0x00000000 0x8 binaries/xsh_help.o + .group 0x00000000 0x8 binaries/xsh_help.o + .group 0x00000000 0x8 binaries/xsh_help.o + .group 0x00000000 0x8 binaries/xsh_help.o + .group 0x00000000 0x8 binaries/xsh_help.o + .group 0x00000000 0x8 binaries/xsh_help.o + .group 0x00000000 0x8 binaries/xsh_help.o + .group 0x00000000 0x8 binaries/xsh_help.o + .group 0x00000000 0x8 binaries/xsh_help.o + .group 0x00000000 0x8 binaries/xsh_help.o + .group 0x00000000 0x8 binaries/xsh_help.o + .group 0x00000000 0x8 binaries/xsh_help.o + .group 0x00000000 0x8 binaries/xsh_help.o + .group 0x00000000 0x8 binaries/xsh_help.o + .group 0x00000000 0x8 binaries/xsh_help.o + .group 0x00000000 0x8 binaries/xsh_help.o + .group 0x00000000 0x8 binaries/xsh_help.o + .group 0x00000000 0x8 binaries/xsh_help.o + .group 0x00000000 0x8 binaries/xsh_help.o + .group 0x00000000 0x8 binaries/xsh_help.o + .group 0x00000000 0x8 binaries/xsh_help.o + .group 0x00000000 0x8 binaries/xsh_help.o + .group 0x00000000 0x8 binaries/xsh_help.o + .group 0x00000000 0x8 binaries/xsh_help.o + .group 0x00000000 0x8 binaries/xsh_help.o + .group 0x00000000 0x8 binaries/xsh_help.o + .group 0x00000000 0x8 binaries/xsh_help.o + .group 0x00000000 0x8 binaries/xsh_help.o + .group 0x00000000 0x8 binaries/xsh_help.o + .group 0x00000000 0x8 binaries/xsh_help.o + .group 0x00000000 0x8 binaries/xsh_help.o + .debug_macro 0x00000000 0x838 binaries/xsh_help.o + .debug_macro 0x00000000 0x58 binaries/xsh_help.o + .debug_macro 0x00000000 0xb2 binaries/xsh_help.o + .debug_macro 0x00000000 0x6a binaries/xsh_help.o + .debug_macro 0x00000000 0x52 binaries/xsh_help.o + .debug_macro 0x00000000 0x10 binaries/xsh_help.o + .debug_macro 0x00000000 0x16 binaries/xsh_help.o + .debug_macro 0x00000000 0x1c binaries/xsh_help.o + .debug_macro 0x00000000 0x1c binaries/xsh_help.o + .debug_macro 0x00000000 0x10 binaries/xsh_help.o + .debug_macro 0x00000000 0x28 binaries/xsh_help.o + .debug_macro 0x00000000 0x1c1 binaries/xsh_help.o + .debug_macro 0x00000000 0xa0 binaries/xsh_help.o + .debug_macro 0x00000000 0x10 binaries/xsh_help.o + .debug_macro 0x00000000 0x22 binaries/xsh_help.o + .debug_macro 0x00000000 0x46 binaries/xsh_help.o + .debug_macro 0x00000000 0xfa binaries/xsh_help.o + .debug_macro 0x00000000 0xdd binaries/xsh_help.o + .debug_macro 0x00000000 0x91 binaries/xsh_help.o + .debug_macro 0x00000000 0x8e binaries/xsh_help.o + .debug_macro 0x00000000 0x82 binaries/xsh_help.o + .debug_macro 0x00000000 0x2e binaries/xsh_help.o + .debug_macro 0x00000000 0x3a binaries/xsh_help.o + .debug_macro 0x00000000 0x4c binaries/xsh_help.o + .debug_macro 0x00000000 0x3a binaries/xsh_help.o + .debug_macro 0x00000000 0xa0 binaries/xsh_help.o + .debug_macro 0x00000000 0x34 binaries/xsh_help.o + .debug_macro 0x00000000 0x7c binaries/xsh_help.o + .debug_macro 0x00000000 0x1c binaries/xsh_help.o + .debug_macro 0x00000000 0xee binaries/xsh_help.o + .debug_macro 0x00000000 0x7c binaries/xsh_help.o + .debug_macro 0x00000000 0x20 binaries/xsh_help.o + .debug_macro 0x00000000 0x10 binaries/xsh_help.o + .debug_macro 0x00000000 0x1c binaries/xsh_help.o + .debug_macro 0x00000000 0x34 binaries/xsh_help.o + .debug_macro 0x00000000 0xeb binaries/xsh_help.o + .debug_macro 0x00000000 0x8e binaries/xsh_help.o + .group 0x00000000 0x8 binaries/xsh_kill.o + .group 0x00000000 0x8 binaries/xsh_kill.o + .group 0x00000000 0x8 binaries/xsh_kill.o + .group 0x00000000 0x8 binaries/xsh_kill.o + .group 0x00000000 0x8 binaries/xsh_kill.o + .group 0x00000000 0x8 binaries/xsh_kill.o + .group 0x00000000 0x8 binaries/xsh_kill.o + .group 0x00000000 0x8 binaries/xsh_kill.o + .group 0x00000000 0x8 binaries/xsh_kill.o + .group 0x00000000 0x8 binaries/xsh_kill.o + .group 0x00000000 0x8 binaries/xsh_kill.o + .group 0x00000000 0x8 binaries/xsh_kill.o + .group 0x00000000 0x8 binaries/xsh_kill.o + .group 0x00000000 0x8 binaries/xsh_kill.o + .group 0x00000000 0x8 binaries/xsh_kill.o + .group 0x00000000 0x8 binaries/xsh_kill.o + .group 0x00000000 0x8 binaries/xsh_kill.o + .group 0x00000000 0x8 binaries/xsh_kill.o + .group 0x00000000 0x8 binaries/xsh_kill.o + .group 0x00000000 0x8 binaries/xsh_kill.o + .group 0x00000000 0x8 binaries/xsh_kill.o + .group 0x00000000 0x8 binaries/xsh_kill.o + .group 0x00000000 0x8 binaries/xsh_kill.o + .group 0x00000000 0x8 binaries/xsh_kill.o + .group 0x00000000 0x8 binaries/xsh_kill.o + .group 0x00000000 0x8 binaries/xsh_kill.o + .group 0x00000000 0x8 binaries/xsh_kill.o + .group 0x00000000 0x8 binaries/xsh_kill.o + .group 0x00000000 0x8 binaries/xsh_kill.o + .group 0x00000000 0x8 binaries/xsh_kill.o + .group 0x00000000 0x8 binaries/xsh_kill.o + .group 0x00000000 0x8 binaries/xsh_kill.o + .group 0x00000000 0x8 binaries/xsh_kill.o + .group 0x00000000 0x8 binaries/xsh_kill.o + .group 0x00000000 0x8 binaries/xsh_kill.o + .group 0x00000000 0x8 binaries/xsh_kill.o + .group 0x00000000 0x8 binaries/xsh_kill.o + .debug_macro 0x00000000 0x838 binaries/xsh_kill.o + .debug_macro 0x00000000 0x58 binaries/xsh_kill.o + .debug_macro 0x00000000 0xb2 binaries/xsh_kill.o + .debug_macro 0x00000000 0x6a binaries/xsh_kill.o + .debug_macro 0x00000000 0x52 binaries/xsh_kill.o + .debug_macro 0x00000000 0x10 binaries/xsh_kill.o + .debug_macro 0x00000000 0x16 binaries/xsh_kill.o + .debug_macro 0x00000000 0x1c binaries/xsh_kill.o + .debug_macro 0x00000000 0x1c binaries/xsh_kill.o + .debug_macro 0x00000000 0x10 binaries/xsh_kill.o + .debug_macro 0x00000000 0x28 binaries/xsh_kill.o + .debug_macro 0x00000000 0x1c1 binaries/xsh_kill.o + .debug_macro 0x00000000 0xa0 binaries/xsh_kill.o + .debug_macro 0x00000000 0x10 binaries/xsh_kill.o + .debug_macro 0x00000000 0x22 binaries/xsh_kill.o + .debug_macro 0x00000000 0x46 binaries/xsh_kill.o + .debug_macro 0x00000000 0xfa binaries/xsh_kill.o + .debug_macro 0x00000000 0xdd binaries/xsh_kill.o + .debug_macro 0x00000000 0x91 binaries/xsh_kill.o + .debug_macro 0x00000000 0x8e binaries/xsh_kill.o + .debug_macro 0x00000000 0x82 binaries/xsh_kill.o + .debug_macro 0x00000000 0x2e binaries/xsh_kill.o + .debug_macro 0x00000000 0x3a binaries/xsh_kill.o + .debug_macro 0x00000000 0x4c binaries/xsh_kill.o + .debug_macro 0x00000000 0x3a binaries/xsh_kill.o + .debug_macro 0x00000000 0xa0 binaries/xsh_kill.o + .debug_macro 0x00000000 0x34 binaries/xsh_kill.o + .debug_macro 0x00000000 0x7c binaries/xsh_kill.o + .debug_macro 0x00000000 0x1c binaries/xsh_kill.o + .debug_macro 0x00000000 0xee binaries/xsh_kill.o + .debug_macro 0x00000000 0x7c binaries/xsh_kill.o + .debug_macro 0x00000000 0x20 binaries/xsh_kill.o + .debug_macro 0x00000000 0x10 binaries/xsh_kill.o + .debug_macro 0x00000000 0x1c binaries/xsh_kill.o + .debug_macro 0x00000000 0x34 binaries/xsh_kill.o + .debug_macro 0x00000000 0xeb binaries/xsh_kill.o + .debug_macro 0x00000000 0x8e binaries/xsh_kill.o + .group 0x00000000 0x8 binaries/xsh_led.o + .group 0x00000000 0x8 binaries/xsh_led.o + .group 0x00000000 0x8 binaries/xsh_led.o + .group 0x00000000 0x8 binaries/xsh_led.o + .group 0x00000000 0x8 binaries/xsh_led.o + .group 0x00000000 0x8 binaries/xsh_led.o + .group 0x00000000 0x8 binaries/xsh_led.o + .group 0x00000000 0x8 binaries/xsh_led.o + .group 0x00000000 0x8 binaries/xsh_led.o + .group 0x00000000 0x8 binaries/xsh_led.o + .group 0x00000000 0x8 binaries/xsh_led.o + .group 0x00000000 0x8 binaries/xsh_led.o + .group 0x00000000 0x8 binaries/xsh_led.o + .group 0x00000000 0x8 binaries/xsh_led.o + .group 0x00000000 0x8 binaries/xsh_led.o + .group 0x00000000 0x8 binaries/xsh_led.o + .group 0x00000000 0x8 binaries/xsh_led.o + .group 0x00000000 0x8 binaries/xsh_led.o + .group 0x00000000 0x8 binaries/xsh_led.o + .group 0x00000000 0x8 binaries/xsh_led.o + .group 0x00000000 0x8 binaries/xsh_led.o + .group 0x00000000 0x8 binaries/xsh_led.o + .group 0x00000000 0x8 binaries/xsh_led.o + .group 0x00000000 0x8 binaries/xsh_led.o + .group 0x00000000 0x8 binaries/xsh_led.o + .group 0x00000000 0x8 binaries/xsh_led.o + .group 0x00000000 0x8 binaries/xsh_led.o + .group 0x00000000 0x8 binaries/xsh_led.o + .group 0x00000000 0x8 binaries/xsh_led.o + .group 0x00000000 0x8 binaries/xsh_led.o + .group 0x00000000 0x8 binaries/xsh_led.o + .group 0x00000000 0x8 binaries/xsh_led.o + .group 0x00000000 0x8 binaries/xsh_led.o + .group 0x00000000 0x8 binaries/xsh_led.o + .group 0x00000000 0x8 binaries/xsh_led.o + .group 0x00000000 0x8 binaries/xsh_led.o + .group 0x00000000 0x8 binaries/xsh_led.o + .debug_macro 0x00000000 0x838 binaries/xsh_led.o + .debug_macro 0x00000000 0x58 binaries/xsh_led.o + .debug_macro 0x00000000 0xb2 binaries/xsh_led.o + .debug_macro 0x00000000 0x6a binaries/xsh_led.o + .debug_macro 0x00000000 0x52 binaries/xsh_led.o + .debug_macro 0x00000000 0x10 binaries/xsh_led.o + .debug_macro 0x00000000 0x16 binaries/xsh_led.o + .debug_macro 0x00000000 0x1c binaries/xsh_led.o + .debug_macro 0x00000000 0x1c binaries/xsh_led.o + .debug_macro 0x00000000 0x10 binaries/xsh_led.o + .debug_macro 0x00000000 0x28 binaries/xsh_led.o + .debug_macro 0x00000000 0x1c1 binaries/xsh_led.o + .debug_macro 0x00000000 0xa0 binaries/xsh_led.o + .debug_macro 0x00000000 0x10 binaries/xsh_led.o + .debug_macro 0x00000000 0x22 binaries/xsh_led.o + .debug_macro 0x00000000 0x46 binaries/xsh_led.o + .debug_macro 0x00000000 0xfa binaries/xsh_led.o + .debug_macro 0x00000000 0xdd binaries/xsh_led.o + .debug_macro 0x00000000 0x91 binaries/xsh_led.o + .debug_macro 0x00000000 0x8e binaries/xsh_led.o + .debug_macro 0x00000000 0x82 binaries/xsh_led.o + .debug_macro 0x00000000 0x2e binaries/xsh_led.o + .debug_macro 0x00000000 0x3a binaries/xsh_led.o + .debug_macro 0x00000000 0x4c binaries/xsh_led.o + .debug_macro 0x00000000 0x3a binaries/xsh_led.o + .debug_macro 0x00000000 0xa0 binaries/xsh_led.o + .debug_macro 0x00000000 0x34 binaries/xsh_led.o + .debug_macro 0x00000000 0x7c binaries/xsh_led.o + .debug_macro 0x00000000 0x1c binaries/xsh_led.o + .debug_macro 0x00000000 0xee binaries/xsh_led.o + .debug_macro 0x00000000 0x7c binaries/xsh_led.o + .debug_macro 0x00000000 0x20 binaries/xsh_led.o + .debug_macro 0x00000000 0x10 binaries/xsh_led.o + .debug_macro 0x00000000 0x1c binaries/xsh_led.o + .debug_macro 0x00000000 0x34 binaries/xsh_led.o + .debug_macro 0x00000000 0xeb binaries/xsh_led.o + .debug_macro 0x00000000 0x8e binaries/xsh_led.o + .group 0x00000000 0x8 binaries/xsh_memdump.o + .group 0x00000000 0x8 binaries/xsh_memdump.o + .group 0x00000000 0x8 binaries/xsh_memdump.o + .group 0x00000000 0x8 binaries/xsh_memdump.o + .group 0x00000000 0x8 binaries/xsh_memdump.o + .group 0x00000000 0x8 binaries/xsh_memdump.o + .group 0x00000000 0x8 binaries/xsh_memdump.o + .group 0x00000000 0x8 binaries/xsh_memdump.o + .group 0x00000000 0x8 binaries/xsh_memdump.o + .group 0x00000000 0x8 binaries/xsh_memdump.o + .group 0x00000000 0x8 binaries/xsh_memdump.o + .group 0x00000000 0x8 binaries/xsh_memdump.o + .group 0x00000000 0x8 binaries/xsh_memdump.o + .group 0x00000000 0x8 binaries/xsh_memdump.o + .group 0x00000000 0x8 binaries/xsh_memdump.o + .group 0x00000000 0x8 binaries/xsh_memdump.o + .group 0x00000000 0x8 binaries/xsh_memdump.o + .group 0x00000000 0x8 binaries/xsh_memdump.o + .group 0x00000000 0x8 binaries/xsh_memdump.o + .group 0x00000000 0x8 binaries/xsh_memdump.o + .group 0x00000000 0x8 binaries/xsh_memdump.o + .group 0x00000000 0x8 binaries/xsh_memdump.o + .group 0x00000000 0x8 binaries/xsh_memdump.o + .group 0x00000000 0x8 binaries/xsh_memdump.o + .group 0x00000000 0x8 binaries/xsh_memdump.o + .group 0x00000000 0x8 binaries/xsh_memdump.o + .group 0x00000000 0x8 binaries/xsh_memdump.o + .group 0x00000000 0x8 binaries/xsh_memdump.o + .group 0x00000000 0x8 binaries/xsh_memdump.o + .group 0x00000000 0x8 binaries/xsh_memdump.o + .group 0x00000000 0x8 binaries/xsh_memdump.o + .group 0x00000000 0x8 binaries/xsh_memdump.o + .group 0x00000000 0x8 binaries/xsh_memdump.o + .group 0x00000000 0x8 binaries/xsh_memdump.o + .group 0x00000000 0x8 binaries/xsh_memdump.o + .group 0x00000000 0x8 binaries/xsh_memdump.o + .group 0x00000000 0x8 binaries/xsh_memdump.o + .debug_macro 0x00000000 0x838 binaries/xsh_memdump.o + .debug_macro 0x00000000 0x58 binaries/xsh_memdump.o + .debug_macro 0x00000000 0xb2 binaries/xsh_memdump.o + .debug_macro 0x00000000 0x6a binaries/xsh_memdump.o + .debug_macro 0x00000000 0x52 binaries/xsh_memdump.o + .debug_macro 0x00000000 0x10 binaries/xsh_memdump.o + .debug_macro 0x00000000 0x16 binaries/xsh_memdump.o + .debug_macro 0x00000000 0x1c binaries/xsh_memdump.o + .debug_macro 0x00000000 0x1c binaries/xsh_memdump.o + .debug_macro 0x00000000 0x10 binaries/xsh_memdump.o + .debug_macro 0x00000000 0x28 binaries/xsh_memdump.o + .debug_macro 0x00000000 0x1c1 binaries/xsh_memdump.o + .debug_macro 0x00000000 0xa0 binaries/xsh_memdump.o + .debug_macro 0x00000000 0x10 binaries/xsh_memdump.o + .debug_macro 0x00000000 0x22 binaries/xsh_memdump.o + .debug_macro 0x00000000 0x46 binaries/xsh_memdump.o + .debug_macro 0x00000000 0xfa binaries/xsh_memdump.o + .debug_macro 0x00000000 0xdd binaries/xsh_memdump.o + .debug_macro 0x00000000 0x91 binaries/xsh_memdump.o + .debug_macro 0x00000000 0x8e binaries/xsh_memdump.o + .debug_macro 0x00000000 0x82 binaries/xsh_memdump.o + .debug_macro 0x00000000 0x2e binaries/xsh_memdump.o + .debug_macro 0x00000000 0x3a binaries/xsh_memdump.o + .debug_macro 0x00000000 0x4c binaries/xsh_memdump.o + .debug_macro 0x00000000 0x3a binaries/xsh_memdump.o + .debug_macro 0x00000000 0xa0 binaries/xsh_memdump.o + .debug_macro 0x00000000 0x34 binaries/xsh_memdump.o + .debug_macro 0x00000000 0x7c binaries/xsh_memdump.o + .debug_macro 0x00000000 0x1c binaries/xsh_memdump.o + .debug_macro 0x00000000 0xee binaries/xsh_memdump.o + .debug_macro 0x00000000 0x7c binaries/xsh_memdump.o + .debug_macro 0x00000000 0x20 binaries/xsh_memdump.o + .debug_macro 0x00000000 0x10 binaries/xsh_memdump.o + .debug_macro 0x00000000 0x1c binaries/xsh_memdump.o + .debug_macro 0x00000000 0x34 binaries/xsh_memdump.o + .debug_macro 0x00000000 0xeb binaries/xsh_memdump.o + .debug_macro 0x00000000 0x8e binaries/xsh_memdump.o + .group 0x00000000 0x8 binaries/xsh_memstat.o + .group 0x00000000 0x8 binaries/xsh_memstat.o + .group 0x00000000 0x8 binaries/xsh_memstat.o + .group 0x00000000 0x8 binaries/xsh_memstat.o + .group 0x00000000 0x8 binaries/xsh_memstat.o + .group 0x00000000 0x8 binaries/xsh_memstat.o + .group 0x00000000 0x8 binaries/xsh_memstat.o + .group 0x00000000 0x8 binaries/xsh_memstat.o + .group 0x00000000 0x8 binaries/xsh_memstat.o + .group 0x00000000 0x8 binaries/xsh_memstat.o + .group 0x00000000 0x8 binaries/xsh_memstat.o + .group 0x00000000 0x8 binaries/xsh_memstat.o + .group 0x00000000 0x8 binaries/xsh_memstat.o + .group 0x00000000 0x8 binaries/xsh_memstat.o + .group 0x00000000 0x8 binaries/xsh_memstat.o + .group 0x00000000 0x8 binaries/xsh_memstat.o + .group 0x00000000 0x8 binaries/xsh_memstat.o + .group 0x00000000 0x8 binaries/xsh_memstat.o + .group 0x00000000 0x8 binaries/xsh_memstat.o + .group 0x00000000 0x8 binaries/xsh_memstat.o + .group 0x00000000 0x8 binaries/xsh_memstat.o + .group 0x00000000 0x8 binaries/xsh_memstat.o + .group 0x00000000 0x8 binaries/xsh_memstat.o + .group 0x00000000 0x8 binaries/xsh_memstat.o + .group 0x00000000 0x8 binaries/xsh_memstat.o + .group 0x00000000 0x8 binaries/xsh_memstat.o + .group 0x00000000 0x8 binaries/xsh_memstat.o + .group 0x00000000 0x8 binaries/xsh_memstat.o + .group 0x00000000 0x8 binaries/xsh_memstat.o + .group 0x00000000 0x8 binaries/xsh_memstat.o + .group 0x00000000 0x8 binaries/xsh_memstat.o + .group 0x00000000 0x8 binaries/xsh_memstat.o + .group 0x00000000 0x8 binaries/xsh_memstat.o + .group 0x00000000 0x8 binaries/xsh_memstat.o + .group 0x00000000 0x8 binaries/xsh_memstat.o + .group 0x00000000 0x8 binaries/xsh_memstat.o + .group 0x00000000 0x8 binaries/xsh_memstat.o + .debug_macro 0x00000000 0x838 binaries/xsh_memstat.o + .debug_macro 0x00000000 0x58 binaries/xsh_memstat.o + .debug_macro 0x00000000 0xb2 binaries/xsh_memstat.o + .debug_macro 0x00000000 0x6a binaries/xsh_memstat.o + .debug_macro 0x00000000 0x52 binaries/xsh_memstat.o + .debug_macro 0x00000000 0x10 binaries/xsh_memstat.o + .debug_macro 0x00000000 0x16 binaries/xsh_memstat.o + .debug_macro 0x00000000 0x1c binaries/xsh_memstat.o + .debug_macro 0x00000000 0x1c binaries/xsh_memstat.o + .debug_macro 0x00000000 0x10 binaries/xsh_memstat.o + .debug_macro 0x00000000 0x28 binaries/xsh_memstat.o + .debug_macro 0x00000000 0x1c1 binaries/xsh_memstat.o + .debug_macro 0x00000000 0xa0 binaries/xsh_memstat.o + .debug_macro 0x00000000 0x10 binaries/xsh_memstat.o + .debug_macro 0x00000000 0x22 binaries/xsh_memstat.o + .debug_macro 0x00000000 0x46 binaries/xsh_memstat.o + .debug_macro 0x00000000 0xfa binaries/xsh_memstat.o + .debug_macro 0x00000000 0xdd binaries/xsh_memstat.o + .debug_macro 0x00000000 0x91 binaries/xsh_memstat.o + .debug_macro 0x00000000 0x8e binaries/xsh_memstat.o + .debug_macro 0x00000000 0x82 binaries/xsh_memstat.o + .debug_macro 0x00000000 0x2e binaries/xsh_memstat.o + .debug_macro 0x00000000 0x3a binaries/xsh_memstat.o + .debug_macro 0x00000000 0x4c binaries/xsh_memstat.o + .debug_macro 0x00000000 0x3a binaries/xsh_memstat.o + .debug_macro 0x00000000 0xa0 binaries/xsh_memstat.o + .debug_macro 0x00000000 0x34 binaries/xsh_memstat.o + .debug_macro 0x00000000 0x7c binaries/xsh_memstat.o + .debug_macro 0x00000000 0x1c binaries/xsh_memstat.o + .debug_macro 0x00000000 0xee binaries/xsh_memstat.o + .debug_macro 0x00000000 0x7c binaries/xsh_memstat.o + .debug_macro 0x00000000 0x20 binaries/xsh_memstat.o + .debug_macro 0x00000000 0x10 binaries/xsh_memstat.o + .debug_macro 0x00000000 0x1c binaries/xsh_memstat.o + .debug_macro 0x00000000 0x34 binaries/xsh_memstat.o + .debug_macro 0x00000000 0xeb binaries/xsh_memstat.o + .debug_macro 0x00000000 0x8e binaries/xsh_memstat.o + .group 0x00000000 0x8 binaries/xsh_mmu.o + .group 0x00000000 0x8 binaries/xsh_mmu.o + .group 0x00000000 0x8 binaries/xsh_mmu.o + .group 0x00000000 0x8 binaries/xsh_mmu.o + .group 0x00000000 0x8 binaries/xsh_mmu.o + .group 0x00000000 0x8 binaries/xsh_mmu.o + .group 0x00000000 0x8 binaries/xsh_mmu.o + .group 0x00000000 0x8 binaries/xsh_mmu.o + .group 0x00000000 0x8 binaries/xsh_mmu.o + .group 0x00000000 0x8 binaries/xsh_mmu.o + .group 0x00000000 0x8 binaries/xsh_mmu.o + .group 0x00000000 0x8 binaries/xsh_mmu.o + .group 0x00000000 0x8 binaries/xsh_mmu.o + .group 0x00000000 0x8 binaries/xsh_mmu.o + .group 0x00000000 0x8 binaries/xsh_mmu.o + .group 0x00000000 0x8 binaries/xsh_mmu.o + .group 0x00000000 0x8 binaries/xsh_mmu.o + .group 0x00000000 0x8 binaries/xsh_mmu.o + .group 0x00000000 0x8 binaries/xsh_mmu.o + .group 0x00000000 0x8 binaries/xsh_mmu.o + .group 0x00000000 0x8 binaries/xsh_mmu.o + .group 0x00000000 0x8 binaries/xsh_mmu.o + .group 0x00000000 0x8 binaries/xsh_mmu.o + .group 0x00000000 0x8 binaries/xsh_mmu.o + .group 0x00000000 0x8 binaries/xsh_mmu.o + .group 0x00000000 0x8 binaries/xsh_mmu.o + .group 0x00000000 0x8 binaries/xsh_mmu.o + .group 0x00000000 0x8 binaries/xsh_mmu.o + .group 0x00000000 0x8 binaries/xsh_mmu.o + .group 0x00000000 0x8 binaries/xsh_mmu.o + .group 0x00000000 0x8 binaries/xsh_mmu.o + .group 0x00000000 0x8 binaries/xsh_mmu.o + .group 0x00000000 0x8 binaries/xsh_mmu.o + .group 0x00000000 0x8 binaries/xsh_mmu.o + .group 0x00000000 0x8 binaries/xsh_mmu.o + .group 0x00000000 0x8 binaries/xsh_mmu.o + .group 0x00000000 0x8 binaries/xsh_mmu.o + .debug_macro 0x00000000 0x838 binaries/xsh_mmu.o + .debug_macro 0x00000000 0x58 binaries/xsh_mmu.o + .debug_macro 0x00000000 0xb2 binaries/xsh_mmu.o + .debug_macro 0x00000000 0x6a binaries/xsh_mmu.o + .debug_macro 0x00000000 0x52 binaries/xsh_mmu.o + .debug_macro 0x00000000 0x10 binaries/xsh_mmu.o + .debug_macro 0x00000000 0x16 binaries/xsh_mmu.o + .debug_macro 0x00000000 0x1c binaries/xsh_mmu.o + .debug_macro 0x00000000 0x1c binaries/xsh_mmu.o + .debug_macro 0x00000000 0x10 binaries/xsh_mmu.o + .debug_macro 0x00000000 0x28 binaries/xsh_mmu.o + .debug_macro 0x00000000 0x1c1 binaries/xsh_mmu.o + .debug_macro 0x00000000 0xa0 binaries/xsh_mmu.o + .debug_macro 0x00000000 0x10 binaries/xsh_mmu.o + .debug_macro 0x00000000 0x22 binaries/xsh_mmu.o + .debug_macro 0x00000000 0x46 binaries/xsh_mmu.o + .debug_macro 0x00000000 0xfa binaries/xsh_mmu.o + .debug_macro 0x00000000 0xdd binaries/xsh_mmu.o + .debug_macro 0x00000000 0x91 binaries/xsh_mmu.o + .debug_macro 0x00000000 0x8e binaries/xsh_mmu.o + .debug_macro 0x00000000 0x82 binaries/xsh_mmu.o + .debug_macro 0x00000000 0x2e binaries/xsh_mmu.o + .debug_macro 0x00000000 0x3a binaries/xsh_mmu.o + .debug_macro 0x00000000 0x4c binaries/xsh_mmu.o + .debug_macro 0x00000000 0x3a binaries/xsh_mmu.o + .debug_macro 0x00000000 0xa0 binaries/xsh_mmu.o + .debug_macro 0x00000000 0x34 binaries/xsh_mmu.o + .debug_macro 0x00000000 0x7c binaries/xsh_mmu.o + .debug_macro 0x00000000 0x1c binaries/xsh_mmu.o + .debug_macro 0x00000000 0xee binaries/xsh_mmu.o + .debug_macro 0x00000000 0x7c binaries/xsh_mmu.o + .debug_macro 0x00000000 0x20 binaries/xsh_mmu.o + .debug_macro 0x00000000 0x10 binaries/xsh_mmu.o + .debug_macro 0x00000000 0x1c binaries/xsh_mmu.o + .debug_macro 0x00000000 0x34 binaries/xsh_mmu.o + .debug_macro 0x00000000 0xeb binaries/xsh_mmu.o + .debug_macro 0x00000000 0x8e binaries/xsh_mmu.o + .group 0x00000000 0x8 binaries/xsh_ps.o + .group 0x00000000 0x8 binaries/xsh_ps.o + .group 0x00000000 0x8 binaries/xsh_ps.o + .group 0x00000000 0x8 binaries/xsh_ps.o + .group 0x00000000 0x8 binaries/xsh_ps.o + .group 0x00000000 0x8 binaries/xsh_ps.o + .group 0x00000000 0x8 binaries/xsh_ps.o + .group 0x00000000 0x8 binaries/xsh_ps.o + .group 0x00000000 0x8 binaries/xsh_ps.o + .group 0x00000000 0x8 binaries/xsh_ps.o + .group 0x00000000 0x8 binaries/xsh_ps.o + .group 0x00000000 0x8 binaries/xsh_ps.o + .group 0x00000000 0x8 binaries/xsh_ps.o + .group 0x00000000 0x8 binaries/xsh_ps.o + .group 0x00000000 0x8 binaries/xsh_ps.o + .group 0x00000000 0x8 binaries/xsh_ps.o + .group 0x00000000 0x8 binaries/xsh_ps.o + .group 0x00000000 0x8 binaries/xsh_ps.o + .group 0x00000000 0x8 binaries/xsh_ps.o + .group 0x00000000 0x8 binaries/xsh_ps.o + .group 0x00000000 0x8 binaries/xsh_ps.o + .group 0x00000000 0x8 binaries/xsh_ps.o + .group 0x00000000 0x8 binaries/xsh_ps.o + .group 0x00000000 0x8 binaries/xsh_ps.o + .group 0x00000000 0x8 binaries/xsh_ps.o + .group 0x00000000 0x8 binaries/xsh_ps.o + .group 0x00000000 0x8 binaries/xsh_ps.o + .group 0x00000000 0x8 binaries/xsh_ps.o + .group 0x00000000 0x8 binaries/xsh_ps.o + .group 0x00000000 0x8 binaries/xsh_ps.o + .group 0x00000000 0x8 binaries/xsh_ps.o + .group 0x00000000 0x8 binaries/xsh_ps.o + .group 0x00000000 0x8 binaries/xsh_ps.o + .group 0x00000000 0x8 binaries/xsh_ps.o + .group 0x00000000 0x8 binaries/xsh_ps.o + .group 0x00000000 0x8 binaries/xsh_ps.o + .group 0x00000000 0x8 binaries/xsh_ps.o + .debug_macro 0x00000000 0x838 binaries/xsh_ps.o + .debug_macro 0x00000000 0x58 binaries/xsh_ps.o + .debug_macro 0x00000000 0xb2 binaries/xsh_ps.o + .debug_macro 0x00000000 0x6a binaries/xsh_ps.o + .debug_macro 0x00000000 0x52 binaries/xsh_ps.o + .debug_macro 0x00000000 0x10 binaries/xsh_ps.o + .debug_macro 0x00000000 0x16 binaries/xsh_ps.o + .debug_macro 0x00000000 0x1c binaries/xsh_ps.o + .debug_macro 0x00000000 0x1c binaries/xsh_ps.o + .debug_macro 0x00000000 0x10 binaries/xsh_ps.o + .debug_macro 0x00000000 0x28 binaries/xsh_ps.o + .debug_macro 0x00000000 0x1c1 binaries/xsh_ps.o + .debug_macro 0x00000000 0xa0 binaries/xsh_ps.o + .debug_macro 0x00000000 0x10 binaries/xsh_ps.o + .debug_macro 0x00000000 0x22 binaries/xsh_ps.o + .debug_macro 0x00000000 0x46 binaries/xsh_ps.o + .debug_macro 0x00000000 0xfa binaries/xsh_ps.o + .debug_macro 0x00000000 0xdd binaries/xsh_ps.o + .debug_macro 0x00000000 0x91 binaries/xsh_ps.o + .debug_macro 0x00000000 0x8e binaries/xsh_ps.o + .debug_macro 0x00000000 0x82 binaries/xsh_ps.o + .debug_macro 0x00000000 0x2e binaries/xsh_ps.o + .debug_macro 0x00000000 0x3a binaries/xsh_ps.o + .debug_macro 0x00000000 0x4c binaries/xsh_ps.o + .debug_macro 0x00000000 0x3a binaries/xsh_ps.o + .debug_macro 0x00000000 0xa0 binaries/xsh_ps.o + .debug_macro 0x00000000 0x34 binaries/xsh_ps.o + .debug_macro 0x00000000 0x7c binaries/xsh_ps.o + .debug_macro 0x00000000 0x1c binaries/xsh_ps.o + .debug_macro 0x00000000 0xee binaries/xsh_ps.o + .debug_macro 0x00000000 0x7c binaries/xsh_ps.o + .debug_macro 0x00000000 0x20 binaries/xsh_ps.o + .debug_macro 0x00000000 0x10 binaries/xsh_ps.o + .debug_macro 0x00000000 0x1c binaries/xsh_ps.o + .debug_macro 0x00000000 0x34 binaries/xsh_ps.o + .debug_macro 0x00000000 0xeb binaries/xsh_ps.o + .debug_macro 0x00000000 0x8e binaries/xsh_ps.o + .group 0x00000000 0x8 binaries/xsh_sleep.o + .group 0x00000000 0x8 binaries/xsh_sleep.o + .group 0x00000000 0x8 binaries/xsh_sleep.o + .group 0x00000000 0x8 binaries/xsh_sleep.o + .group 0x00000000 0x8 binaries/xsh_sleep.o + .group 0x00000000 0x8 binaries/xsh_sleep.o + .group 0x00000000 0x8 binaries/xsh_sleep.o + .group 0x00000000 0x8 binaries/xsh_sleep.o + .group 0x00000000 0x8 binaries/xsh_sleep.o + .group 0x00000000 0x8 binaries/xsh_sleep.o + .group 0x00000000 0x8 binaries/xsh_sleep.o + .group 0x00000000 0x8 binaries/xsh_sleep.o + .group 0x00000000 0x8 binaries/xsh_sleep.o + .group 0x00000000 0x8 binaries/xsh_sleep.o + .group 0x00000000 0x8 binaries/xsh_sleep.o + .group 0x00000000 0x8 binaries/xsh_sleep.o + .group 0x00000000 0x8 binaries/xsh_sleep.o + .group 0x00000000 0x8 binaries/xsh_sleep.o + .group 0x00000000 0x8 binaries/xsh_sleep.o + .group 0x00000000 0x8 binaries/xsh_sleep.o + .group 0x00000000 0x8 binaries/xsh_sleep.o + .group 0x00000000 0x8 binaries/xsh_sleep.o + .group 0x00000000 0x8 binaries/xsh_sleep.o + .group 0x00000000 0x8 binaries/xsh_sleep.o + .group 0x00000000 0x8 binaries/xsh_sleep.o + .group 0x00000000 0x8 binaries/xsh_sleep.o + .group 0x00000000 0x8 binaries/xsh_sleep.o + .group 0x00000000 0x8 binaries/xsh_sleep.o + .group 0x00000000 0x8 binaries/xsh_sleep.o + .group 0x00000000 0x8 binaries/xsh_sleep.o + .group 0x00000000 0x8 binaries/xsh_sleep.o + .group 0x00000000 0x8 binaries/xsh_sleep.o + .group 0x00000000 0x8 binaries/xsh_sleep.o + .group 0x00000000 0x8 binaries/xsh_sleep.o + .group 0x00000000 0x8 binaries/xsh_sleep.o + .group 0x00000000 0x8 binaries/xsh_sleep.o + .group 0x00000000 0x8 binaries/xsh_sleep.o + .debug_macro 0x00000000 0x838 binaries/xsh_sleep.o + .debug_macro 0x00000000 0x58 binaries/xsh_sleep.o + .debug_macro 0x00000000 0xb2 binaries/xsh_sleep.o + .debug_macro 0x00000000 0x6a binaries/xsh_sleep.o + .debug_macro 0x00000000 0x52 binaries/xsh_sleep.o + .debug_macro 0x00000000 0x10 binaries/xsh_sleep.o + .debug_macro 0x00000000 0x16 binaries/xsh_sleep.o + .debug_macro 0x00000000 0x1c binaries/xsh_sleep.o + .debug_macro 0x00000000 0x1c binaries/xsh_sleep.o + .debug_macro 0x00000000 0x10 binaries/xsh_sleep.o + .debug_macro 0x00000000 0x28 binaries/xsh_sleep.o + .debug_macro 0x00000000 0x1c1 binaries/xsh_sleep.o + .debug_macro 0x00000000 0xa0 binaries/xsh_sleep.o + .debug_macro 0x00000000 0x10 binaries/xsh_sleep.o + .debug_macro 0x00000000 0x22 binaries/xsh_sleep.o + .debug_macro 0x00000000 0x46 binaries/xsh_sleep.o + .debug_macro 0x00000000 0xfa binaries/xsh_sleep.o + .debug_macro 0x00000000 0xdd binaries/xsh_sleep.o + .debug_macro 0x00000000 0x91 binaries/xsh_sleep.o + .debug_macro 0x00000000 0x8e binaries/xsh_sleep.o + .debug_macro 0x00000000 0x82 binaries/xsh_sleep.o + .debug_macro 0x00000000 0x2e binaries/xsh_sleep.o + .debug_macro 0x00000000 0x3a binaries/xsh_sleep.o + .debug_macro 0x00000000 0x4c binaries/xsh_sleep.o + .debug_macro 0x00000000 0x3a binaries/xsh_sleep.o + .debug_macro 0x00000000 0xa0 binaries/xsh_sleep.o + .debug_macro 0x00000000 0x34 binaries/xsh_sleep.o + .debug_macro 0x00000000 0x7c binaries/xsh_sleep.o + .debug_macro 0x00000000 0x1c binaries/xsh_sleep.o + .debug_macro 0x00000000 0xee binaries/xsh_sleep.o + .debug_macro 0x00000000 0x7c binaries/xsh_sleep.o + .debug_macro 0x00000000 0x20 binaries/xsh_sleep.o + .debug_macro 0x00000000 0x10 binaries/xsh_sleep.o + .debug_macro 0x00000000 0x1c binaries/xsh_sleep.o + .debug_macro 0x00000000 0x34 binaries/xsh_sleep.o + .debug_macro 0x00000000 0xeb binaries/xsh_sleep.o + .debug_macro 0x00000000 0x8e binaries/xsh_sleep.o + .group 0x00000000 0x8 binaries/xsh_uptime.o + .group 0x00000000 0x8 binaries/xsh_uptime.o + .group 0x00000000 0x8 binaries/xsh_uptime.o + .group 0x00000000 0x8 binaries/xsh_uptime.o + .group 0x00000000 0x8 binaries/xsh_uptime.o + .group 0x00000000 0x8 binaries/xsh_uptime.o + .group 0x00000000 0x8 binaries/xsh_uptime.o + .group 0x00000000 0x8 binaries/xsh_uptime.o + .group 0x00000000 0x8 binaries/xsh_uptime.o + .group 0x00000000 0x8 binaries/xsh_uptime.o + .group 0x00000000 0x8 binaries/xsh_uptime.o + .group 0x00000000 0x8 binaries/xsh_uptime.o + .group 0x00000000 0x8 binaries/xsh_uptime.o + .group 0x00000000 0x8 binaries/xsh_uptime.o + .group 0x00000000 0x8 binaries/xsh_uptime.o + .group 0x00000000 0x8 binaries/xsh_uptime.o + .group 0x00000000 0x8 binaries/xsh_uptime.o + .group 0x00000000 0x8 binaries/xsh_uptime.o + .group 0x00000000 0x8 binaries/xsh_uptime.o + .group 0x00000000 0x8 binaries/xsh_uptime.o + .group 0x00000000 0x8 binaries/xsh_uptime.o + .group 0x00000000 0x8 binaries/xsh_uptime.o + .group 0x00000000 0x8 binaries/xsh_uptime.o + .group 0x00000000 0x8 binaries/xsh_uptime.o + .group 0x00000000 0x8 binaries/xsh_uptime.o + .group 0x00000000 0x8 binaries/xsh_uptime.o + .group 0x00000000 0x8 binaries/xsh_uptime.o + .group 0x00000000 0x8 binaries/xsh_uptime.o + .group 0x00000000 0x8 binaries/xsh_uptime.o + .group 0x00000000 0x8 binaries/xsh_uptime.o + .group 0x00000000 0x8 binaries/xsh_uptime.o + .group 0x00000000 0x8 binaries/xsh_uptime.o + .group 0x00000000 0x8 binaries/xsh_uptime.o + .group 0x00000000 0x8 binaries/xsh_uptime.o + .group 0x00000000 0x8 binaries/xsh_uptime.o + .group 0x00000000 0x8 binaries/xsh_uptime.o + .group 0x00000000 0x8 binaries/xsh_uptime.o + .debug_macro 0x00000000 0x838 binaries/xsh_uptime.o + .debug_macro 0x00000000 0x58 binaries/xsh_uptime.o + .debug_macro 0x00000000 0xb2 binaries/xsh_uptime.o + .debug_macro 0x00000000 0x6a binaries/xsh_uptime.o + .debug_macro 0x00000000 0x52 binaries/xsh_uptime.o + .debug_macro 0x00000000 0x10 binaries/xsh_uptime.o + .debug_macro 0x00000000 0x16 binaries/xsh_uptime.o + .debug_macro 0x00000000 0x1c binaries/xsh_uptime.o + .debug_macro 0x00000000 0x1c binaries/xsh_uptime.o + .debug_macro 0x00000000 0x10 binaries/xsh_uptime.o + .debug_macro 0x00000000 0x28 binaries/xsh_uptime.o + .debug_macro 0x00000000 0x1c1 binaries/xsh_uptime.o + .debug_macro 0x00000000 0xa0 binaries/xsh_uptime.o + .debug_macro 0x00000000 0x10 binaries/xsh_uptime.o + .debug_macro 0x00000000 0x22 binaries/xsh_uptime.o + .debug_macro 0x00000000 0x46 binaries/xsh_uptime.o + .debug_macro 0x00000000 0xfa binaries/xsh_uptime.o + .debug_macro 0x00000000 0xdd binaries/xsh_uptime.o + .debug_macro 0x00000000 0x91 binaries/xsh_uptime.o + .debug_macro 0x00000000 0x8e binaries/xsh_uptime.o + .debug_macro 0x00000000 0x82 binaries/xsh_uptime.o + .debug_macro 0x00000000 0x2e binaries/xsh_uptime.o + .debug_macro 0x00000000 0x3a binaries/xsh_uptime.o + .debug_macro 0x00000000 0x4c binaries/xsh_uptime.o + .debug_macro 0x00000000 0x3a binaries/xsh_uptime.o + .debug_macro 0x00000000 0xa0 binaries/xsh_uptime.o + .debug_macro 0x00000000 0x34 binaries/xsh_uptime.o + .debug_macro 0x00000000 0x7c binaries/xsh_uptime.o + .debug_macro 0x00000000 0x1c binaries/xsh_uptime.o + .debug_macro 0x00000000 0xee binaries/xsh_uptime.o + .debug_macro 0x00000000 0x7c binaries/xsh_uptime.o + .debug_macro 0x00000000 0x20 binaries/xsh_uptime.o + .debug_macro 0x00000000 0x10 binaries/xsh_uptime.o + .debug_macro 0x00000000 0x1c binaries/xsh_uptime.o + .debug_macro 0x00000000 0x34 binaries/xsh_uptime.o + .debug_macro 0x00000000 0xeb binaries/xsh_uptime.o + .debug_macro 0x00000000 0x8e binaries/xsh_uptime.o + .group 0x00000000 0x8 binaries/consume.o + .group 0x00000000 0x8 binaries/consume.o + .group 0x00000000 0x8 binaries/consume.o + .group 0x00000000 0x8 binaries/consume.o + .group 0x00000000 0x8 binaries/consume.o + .group 0x00000000 0x8 binaries/consume.o + .group 0x00000000 0x8 binaries/consume.o + .group 0x00000000 0x8 binaries/consume.o + .group 0x00000000 0x8 binaries/consume.o + .group 0x00000000 0x8 binaries/consume.o + .group 0x00000000 0x8 binaries/consume.o + .group 0x00000000 0x8 binaries/consume.o + .group 0x00000000 0x8 binaries/consume.o + .group 0x00000000 0x8 binaries/consume.o + .group 0x00000000 0x8 binaries/consume.o + .group 0x00000000 0x8 binaries/consume.o + .group 0x00000000 0x8 binaries/consume.o + .group 0x00000000 0x8 binaries/consume.o + .group 0x00000000 0x8 binaries/consume.o + .group 0x00000000 0x8 binaries/consume.o + .group 0x00000000 0x8 binaries/consume.o + .group 0x00000000 0x8 binaries/consume.o + .group 0x00000000 0x8 binaries/consume.o + .group 0x00000000 0x8 binaries/consume.o + .group 0x00000000 0x8 binaries/consume.o + .group 0x00000000 0x8 binaries/consume.o + .group 0x00000000 0x8 binaries/consume.o + .group 0x00000000 0x8 binaries/consume.o + .group 0x00000000 0x8 binaries/consume.o + .group 0x00000000 0x8 binaries/consume.o + .group 0x00000000 0x8 binaries/consume.o + .group 0x00000000 0x8 binaries/consume.o + .group 0x00000000 0x8 binaries/consume.o + .group 0x00000000 0x8 binaries/consume.o + .group 0x00000000 0x8 binaries/consume.o + .group 0x00000000 0x8 binaries/consume.o + .group 0x00000000 0x8 binaries/consume.o + .debug_macro 0x00000000 0x838 binaries/consume.o + .debug_macro 0x00000000 0x58 binaries/consume.o + .debug_macro 0x00000000 0xb2 binaries/consume.o + .debug_macro 0x00000000 0x6a binaries/consume.o + .debug_macro 0x00000000 0x52 binaries/consume.o + .debug_macro 0x00000000 0x10 binaries/consume.o + .debug_macro 0x00000000 0x16 binaries/consume.o + .debug_macro 0x00000000 0x1c binaries/consume.o + .debug_macro 0x00000000 0x1c binaries/consume.o + .debug_macro 0x00000000 0x10 binaries/consume.o + .debug_macro 0x00000000 0x28 binaries/consume.o + .debug_macro 0x00000000 0x1c1 binaries/consume.o + .debug_macro 0x00000000 0xa0 binaries/consume.o + .debug_macro 0x00000000 0x10 binaries/consume.o + .debug_macro 0x00000000 0x22 binaries/consume.o + .debug_macro 0x00000000 0x46 binaries/consume.o + .debug_macro 0x00000000 0xfa binaries/consume.o + .debug_macro 0x00000000 0xdd binaries/consume.o + .debug_macro 0x00000000 0x91 binaries/consume.o + .debug_macro 0x00000000 0x8e binaries/consume.o + .debug_macro 0x00000000 0x82 binaries/consume.o + .debug_macro 0x00000000 0x2e binaries/consume.o + .debug_macro 0x00000000 0x3a binaries/consume.o + .debug_macro 0x00000000 0x4c binaries/consume.o + .debug_macro 0x00000000 0x3a binaries/consume.o + .debug_macro 0x00000000 0xa0 binaries/consume.o + .debug_macro 0x00000000 0x34 binaries/consume.o + .debug_macro 0x00000000 0x7c binaries/consume.o + .debug_macro 0x00000000 0x1c binaries/consume.o + .debug_macro 0x00000000 0xee binaries/consume.o + .debug_macro 0x00000000 0x7c binaries/consume.o + .debug_macro 0x00000000 0x20 binaries/consume.o + .debug_macro 0x00000000 0x10 binaries/consume.o + .debug_macro 0x00000000 0x1c binaries/consume.o + .debug_macro 0x00000000 0x34 binaries/consume.o + .debug_macro 0x00000000 0xeb binaries/consume.o + .debug_macro 0x00000000 0x8e binaries/consume.o + .group 0x00000000 0x8 binaries/produce.o + .group 0x00000000 0x8 binaries/produce.o + .group 0x00000000 0x8 binaries/produce.o + .group 0x00000000 0x8 binaries/produce.o + .group 0x00000000 0x8 binaries/produce.o + .group 0x00000000 0x8 binaries/produce.o + .group 0x00000000 0x8 binaries/produce.o + .group 0x00000000 0x8 binaries/produce.o + .group 0x00000000 0x8 binaries/produce.o + .group 0x00000000 0x8 binaries/produce.o + .group 0x00000000 0x8 binaries/produce.o + .group 0x00000000 0x8 binaries/produce.o + .group 0x00000000 0x8 binaries/produce.o + .group 0x00000000 0x8 binaries/produce.o + .group 0x00000000 0x8 binaries/produce.o + .group 0x00000000 0x8 binaries/produce.o + .group 0x00000000 0x8 binaries/produce.o + .group 0x00000000 0x8 binaries/produce.o + .group 0x00000000 0x8 binaries/produce.o + .group 0x00000000 0x8 binaries/produce.o + .group 0x00000000 0x8 binaries/produce.o + .group 0x00000000 0x8 binaries/produce.o + .group 0x00000000 0x8 binaries/produce.o + .group 0x00000000 0x8 binaries/produce.o + .group 0x00000000 0x8 binaries/produce.o + .group 0x00000000 0x8 binaries/produce.o + .group 0x00000000 0x8 binaries/produce.o + .group 0x00000000 0x8 binaries/produce.o + .group 0x00000000 0x8 binaries/produce.o + .group 0x00000000 0x8 binaries/produce.o + .group 0x00000000 0x8 binaries/produce.o + .group 0x00000000 0x8 binaries/produce.o + .group 0x00000000 0x8 binaries/produce.o + .group 0x00000000 0x8 binaries/produce.o + .group 0x00000000 0x8 binaries/produce.o + .group 0x00000000 0x8 binaries/produce.o + .group 0x00000000 0x8 binaries/produce.o + .debug_macro 0x00000000 0x838 binaries/produce.o + .debug_macro 0x00000000 0x58 binaries/produce.o + .debug_macro 0x00000000 0xb2 binaries/produce.o + .debug_macro 0x00000000 0x6a binaries/produce.o + .debug_macro 0x00000000 0x52 binaries/produce.o + .debug_macro 0x00000000 0x10 binaries/produce.o + .debug_macro 0x00000000 0x16 binaries/produce.o + .debug_macro 0x00000000 0x1c binaries/produce.o + .debug_macro 0x00000000 0x1c binaries/produce.o + .debug_macro 0x00000000 0x10 binaries/produce.o + .debug_macro 0x00000000 0x28 binaries/produce.o + .debug_macro 0x00000000 0x1c1 binaries/produce.o + .debug_macro 0x00000000 0xa0 binaries/produce.o + .debug_macro 0x00000000 0x10 binaries/produce.o + .debug_macro 0x00000000 0x22 binaries/produce.o + .debug_macro 0x00000000 0x46 binaries/produce.o + .debug_macro 0x00000000 0xfa binaries/produce.o + .debug_macro 0x00000000 0xdd binaries/produce.o + .debug_macro 0x00000000 0x91 binaries/produce.o + .debug_macro 0x00000000 0x8e binaries/produce.o + .debug_macro 0x00000000 0x82 binaries/produce.o + .debug_macro 0x00000000 0x2e binaries/produce.o + .debug_macro 0x00000000 0x3a binaries/produce.o + .debug_macro 0x00000000 0x4c binaries/produce.o + .debug_macro 0x00000000 0x3a binaries/produce.o + .debug_macro 0x00000000 0xa0 binaries/produce.o + .debug_macro 0x00000000 0x34 binaries/produce.o + .debug_macro 0x00000000 0x7c binaries/produce.o + .debug_macro 0x00000000 0x1c binaries/produce.o + .debug_macro 0x00000000 0xee binaries/produce.o + .debug_macro 0x00000000 0x7c binaries/produce.o + .debug_macro 0x00000000 0x20 binaries/produce.o + .debug_macro 0x00000000 0x10 binaries/produce.o + .debug_macro 0x00000000 0x1c binaries/produce.o + .debug_macro 0x00000000 0x34 binaries/produce.o + .debug_macro 0x00000000 0xeb binaries/produce.o + .debug_macro 0x00000000 0x8e binaries/produce.o + +Memory Configuration + +Name Origin Length Attributes +*default* 0x00000000 0xffffffff + +Linker script and memory map + + 0x81000000 physbase = 0x81000000 + 0x81000000 . = physbase + 0x81000000 . = ALIGN (0x1000) + +.text 0x81000000 0xd000 + 0x81000000 text = ABSOLUTE (.) + *(.text .text.*) + .text 0x81000000 0xc4 binaries/start.o + 0x81000000 start + .text 0x810000c4 0x320 binaries/ascdate.o + 0x810000c4 ascdate + .text 0x810003e4 0x18 binaries/bufinit.o + 0x810003e4 bufinit + .text 0x810003fc 0x68 binaries/chprio.o + 0x810003fc chprio + .text 0x81000464 0xb8 binaries/clkhandler.o + 0x81000464 clkhandler + .text 0x8100051c 0x88 binaries/clkinit.o + 0x8100051c clkinit + .text 0x810005a4 0x50 binaries/close.o + 0x810005a4 close + .text 0x810005f4 0x0 binaries/conf.o + .text 0x810005f4 0x68 binaries/control.o + 0x810005f4 control + .text 0x8100065c 0x290 binaries/create.o + 0x8100065c create + .text 0x810008ec 0xac binaries/evec.o + 0x810008ec initintc + 0x81000918 set_1evec + 0x81000958 irq_dispatch + .text 0x81000998 0x10 binaries/exit.o + 0x81000998 exit + .text 0x810009a8 0x7c binaries/freebuf.o + 0x810009a8 freebuf + .text 0x81000a24 0x13c binaries/freemem.o + 0x81000a24 freemem + .text 0x81000b60 0x78 binaries/getbuf.o + 0x81000b60 getbuf + .text 0x81000bd8 0x50 binaries/getc.o + 0x81000bd8 getc + .text 0x81000c28 0x68 binaries/getdev.o + 0x81000c28 getdev + .text 0x81000c90 0x9c binaries/getitem.o + 0x81000c90 getitem + 0x81000cc0 getfirst + 0x81000cf4 getlast + .text 0x81000d2c 0xf8 binaries/getmem.o + 0x81000d2c getmem + .text 0x81000e24 0x10 binaries/getpid.o + 0x81000e24 getpid + .text 0x81000e34 0x58 binaries/getprio.o + 0x81000e34 getprio + .text 0x81000e8c 0xc0 binaries/getstk.o + 0x81000e8c getstk + .text 0x81000f4c 0x58 binaries/gettime.o + 0x81000f4c get_datetime + 0x81000f6c set_datetime + 0x81000f8c gettime + .text 0x81000fa4 0x50 binaries/init.o + 0x81000fa4 init + .text 0x81000ff4 0x2e0 binaries/initialize.o + 0x81000ff4 nulluser + 0x81001274 stop + 0x81001298 delay + .text 0x810012d4 0xc0 binaries/insert.o + 0x810012d4 insert + .text 0x81001394 0x120 binaries/insertd.o + 0x81001394 insertd + .text 0x810014b4 0x8 binaries/ioerr.o + 0x810014b4 ioerr + .text 0x810014bc 0x8 binaries/ionull.o + 0x810014bc ionull + .text 0x810014c4 0x158 binaries/kill.o + 0x810014c4 kill + .text 0x8100161c 0xd4 binaries/main.o + 0x8100161c counterproc + 0x81001654 main + .text 0x810016f0 0xc4 binaries/mark.o + 0x810016f0 markinit + 0x8100171c mark + .text 0x810017b4 0x44 binaries/meminit.o + 0x810017b4 meminit + .text 0x810017f8 0x134 binaries/mkbufpool.o + 0x810017f8 mkbufpool + .text 0x8100192c 0x160 binaries/mmu.o + 0x8100192c setPageTable + 0x8100194c setAccessControl + 0x81001958 FlushTLB + 0x81001964 enableMMU + 0x81001974 initializeMMU + 0x81001a78 pageFaultHandler + .text 0x81001a8c 0x7c binaries/newqueue.o + 0x81001a8c newqueue + .text 0x81001b08 0x60 binaries/open.o + 0x81001b08 open + .text 0x81001b68 0x20 binaries/panic.o + 0x81001b68 panic + .text 0x81001b88 0x68 binaries/pl190.o + 0x81001b88 enable_irq + 0x81001ba0 disable_irq + 0x81001bb8 dispatch + .text 0x81001bf0 0x130 binaries/platinit.o + 0x81001bf0 platinit + .text 0x81001d20 0xa8 binaries/ptclear.o + 0x81001d20 _ptclear + .text 0x81001dc8 0x78 binaries/ptcount.o + 0x81001dc8 ptcount + .text 0x81001e40 0xd4 binaries/ptcreate.o + 0x81001e40 ptcreate + .text 0x81001f14 0x74 binaries/ptdelete.o + 0x81001f14 ptdelete + .text 0x81001f88 0xb8 binaries/ptinit.o + 0x81001f88 ptinit + .text 0x81002040 0xd0 binaries/ptrecv.o + 0x81002040 ptrecv + .text 0x81002110 0x64 binaries/ptreset.o + 0x81002110 ptreset + .text 0x81002174 0xf0 binaries/ptsend.o + 0x81002174 ptsend + .text 0x81002264 0x58 binaries/putc.o + 0x81002264 putc + .text 0x810022bc 0xe8 binaries/queue.o + 0x810022bc enqueue + 0x81002348 dequeue + .text 0x810023a4 0x60 binaries/read.o + 0x810023a4 read + .text 0x81002404 0x70 binaries/ready.o + 0x81002404 ready + .text 0x81002474 0x60 binaries/receive.o + 0x81002474 receive + .text 0x810024d4 0x48 binaries/recvclr.o + 0x810024d4 recvclr + .text 0x8100251c 0xb0 binaries/recvtime.o + 0x8100251c recvtime + .text 0x810025cc 0x18c binaries/resched.o + 0x810025cc resched + 0x810026ac resched_cntl + .text 0x81002758 0x90 binaries/resume.o + 0x81002758 resume + .text 0x810027e8 0x58 binaries/seek.o + 0x810027e8 seek + .text 0x81002840 0x54 binaries/semcount.o + 0x81002840 semcount + .text 0x81002894 0xa8 binaries/semcreate.o + 0x81002894 semcreate + .text 0x8100293c 0xac binaries/semdelete.o + 0x8100293c semdelete + .text 0x810029e8 0xa0 binaries/semreset.o + 0x810029e8 semreset + .text 0x81002a88 0xbc binaries/send.o + 0x81002a88 send + .text 0x81002b44 0x80 binaries/signal.o + 0x81002b44 signal + .text 0x81002bc4 0xb0 binaries/signaln.o + 0x81002bc4 signaln + .text 0x81002c74 0xcc binaries/sleep.o + 0x81002c74 sleepms + 0x81002d10 sleep + .text 0x81002d40 0x48 binaries/sp804.o + 0x81002d40 sp804_init + 0x81002d54 clkcount + 0x81002d68 clkupdate + .text 0x81002d88 0xb8 binaries/suspend.o + 0x81002d88 suspend + .text 0x81002e40 0x68 binaries/udelay.o + 0x81002e40 udelay + .text 0x81002ea8 0xac binaries/unsleep.o + 0x81002ea8 unsleep + .text 0x81002f54 0x10 binaries/userret.o + 0x81002f54 userret + .text 0x81002f64 0xac binaries/wait.o + 0x81002f64 wait + .text 0x81003010 0x88 binaries/wakeup.o + 0x81003010 wakeup + .text 0x81003098 0x60 binaries/write.o + 0x81003098 write + .text 0x810030f8 0x18 binaries/xdone.o + 0x810030f8 xdone + .text 0x81003110 0x20 binaries/yield.o + 0x81003110 yield + .text 0x81003130 0xc binaries/abs.o + 0x81003130 abs + .text 0x8100313c 0x114 binaries/atoi.o + 0x8100313c atoi + .text 0x81003250 0x114 binaries/atol.o + 0x81003250 atol + .text 0x81003364 0x20 binaries/bzero.o + 0x81003364 bzero + .text 0x81003384 0x0 binaries/ctype_.o + .text 0x81003384 0x948 binaries/doprnt.o + 0x81003568 _doprnt + .text 0x81003ccc 0x708 binaries/doscan.o + 0x81003ccc _doscan + .text 0x810043d4 0x878 binaries/fdoprnt.o + 0x81004480 _fdoprnt + .text 0x81004c4c 0x14 binaries/fgetc.o + 0x81004c4c fgetc + .text 0x81004c60 0x84 binaries/fgets.o + 0x81004c60 fgets + .text 0x81004ce4 0x3c binaries/fprintf.o + 0x81004ce4 fprintf + .text 0x81004d20 0x24 binaries/fputc.o + 0x81004d20 fputc + .text 0x81004d44 0x38 binaries/fputs.o + 0x81004d44 fputs + .text 0x81004d7c 0x78 binaries/fscanf.o + 0x81004db0 fscanf + .text 0x81004df4 0x2c binaries/getchar.o + 0x81004df4 getchar + .text 0x81004e20 0xc binaries/labs.o + 0x81004e20 labs + .text 0x81004e2c 0x48 binaries/memchr.o + 0x81004e2c memchr + .text 0x81004e74 0x60 binaries/memcmp.o + 0x81004e74 memcmp + .text 0x81004ed4 0x24 binaries/memcpy.o + 0x81004ed4 memcpy + .text 0x81004ef8 0x20 binaries/memset.o + 0x81004ef8 memset + .text 0x81004f18 0x58 binaries/printf.o + 0x81004f18 printf + .text 0x81004f70 0x2c binaries/putchar.o + 0x81004f70 putchar + .text 0x81004f9c 0x250 binaries/qsort.o + 0x810051cc qsort + .text 0x810051ec 0x40 binaries/rand.o + 0x810051ec srand + 0x810051fc rand + .text 0x8100522c 0x68 binaries/sprintf.o + 0x81005244 sprintf + .text 0x81005294 0x78 binaries/sscanf.o + 0x810052c8 sscanf + .text 0x8100530c 0x48 binaries/strchr.o + 0x8100530c strchr + .text 0x81005354 0x54 binaries/strcmp.o + 0x81005354 strcmp + .text 0x810053a8 0x18 binaries/strcpy.o + 0x810053a8 strcpy + .text 0x810053c0 0x30 binaries/strlen.o + 0x810053c0 strlen + .text 0x810053f0 0x50 binaries/strncat.o + 0x810053f0 strncat + .text 0x81005440 0x54 binaries/strncmp.o + 0x81005440 strncmp + .text 0x81005494 0x80 binaries/strncpy.o + 0x81005494 strncpy + .text 0x81005514 0x48 binaries/strnlen.o + 0x81005514 strnlen + .text 0x8100555c 0x58 binaries/strrchr.o + 0x8100555c strrchr + .text 0x810055b4 0xb0 binaries/strstr.o + 0x810055b4 strstr + .text 0x81005664 0xc8 binaries/ttycontrol.o + 0x81005664 ttycontrol + .text 0x8100572c 0x6c binaries/ttygetc.o + 0x8100572c ttygetc + .text 0x81005798 0x4d4 binaries/ttyhandle_in.o + 0x81005864 ttyhandle_in + .text 0x81005c6c 0x14c binaries/ttyhandle_out.o + 0x81005c6c ttyhandle_out + .text 0x81005db8 0xc8 binaries/ttyhandler.o + 0x81005db8 ttyhandler + .text 0x81005e80 0x120 binaries/ttyinit.o + 0x81005e80 ttyinit + .text 0x81005fa0 0xc binaries/ttykickout.o + 0x81005fa0 ttykickout + .text 0x81005fac 0x78 binaries/ttyputc.o + 0x81005fac ttyputc + .text 0x81006024 0x110 binaries/ttyread.o + 0x81006024 ttyread + .text 0x81006134 0x4c binaries/ttywrite.o + 0x81006134 ttywrite + .text 0x81006180 0x130 binaries/mount.o + 0x81006180 namlen + 0x810061d4 mount + .text 0x810062b0 0x1bc binaries/naminit.o + 0x810062b0 naminit + .text 0x8100646c 0x234 binaries/nammap.o + 0x8100646c namrepl + 0x810065a4 namcpy + 0x81006600 nammap + .text 0x810066a0 0x40 binaries/namopen.o + 0x810066a0 namopen + .text 0x810066e0 0x8 binaries/ramclose.o + 0x810066e0 ramclose + .text 0x810066e8 0x3c binaries/raminit.o + 0x810066e8 raminit + .text 0x81006724 0x8 binaries/ramopen.o + 0x81006724 ramopen + .text 0x8100672c 0x24 binaries/ramread.o + 0x8100672c ramread + .text 0x81006750 0x20 binaries/ramwrite.o + 0x81006750 ramwrite + .text 0x81006770 0x8c binaries/lfdballoc.o + 0x81006770 lfdballoc + .text 0x810067fc 0x4c binaries/lfdbfree.o + 0x810067fc lfdbfree + .text 0x81006848 0xac binaries/lfflush.o + 0x81006848 lfflush + .text 0x810068f4 0xc8 binaries/lfgetmode.o + 0x810068f4 lfgetmode + .text 0x810069bc 0x68 binaries/lfiballoc.o + 0x810069bc lfiballoc + .text 0x81006a24 0x30 binaries/lfibclear.o + 0x81006a24 lfibclear + .text 0x81006a54 0x64 binaries/lfibget.o + 0x81006a54 lfibget + .text 0x81006ab8 0x84 binaries/lfibput.o + 0x81006ab8 lfibput + .text 0x81006b3c 0x84 binaries/lflclose.o + 0x81006b3c lflclose + .text 0x81006bc0 0xa0 binaries/lflcontrol.o + 0x81006bc0 lflcontrol + .text 0x81006c60 0xa8 binaries/lflgetc.o + 0x81006c60 lflgetc + .text 0x81006d08 0xa8 binaries/lflinit.o + 0x81006d08 lflinit + .text 0x81006db0 0xd8 binaries/lflputc.o + 0x81006db0 lflputc + .text 0x81006e88 0x78 binaries/lflread.o + 0x81006e88 lflread + .text 0x81006f00 0x80 binaries/lflseek.o + 0x81006f00 lflseek + .text 0x81006f80 0x54 binaries/lflwrite.o + 0x81006f80 lflwrite + .text 0x81006fd4 0x11c binaries/lfsckfmt.o + 0x81006fd4 lfsckfmt + .text 0x810070f0 0x15c binaries/lfscreate.o + 0x810070f0 lfscreate + .text 0x8100724c 0x1e0 binaries/lfsetup.o + 0x8100724c lfsetup + .text 0x8100742c 0x44 binaries/lfsinit.o + 0x8100742c lfsinit + .text 0x81007470 0x304 binaries/lfsopen.o + 0x81007470 lfsopen + .text 0x81007774 0x104 binaries/lftruncate.o + 0x81007774 lftruncate + .text 0x81007878 0x2c binaries/kprintf.o + 0x81007878 kprintf + .text 0x810078a4 0x44 binaries/kvprintf.o + 0x810078a4 kvprintf + .text 0x810078e8 0xc0 binaries/uartControl.o + 0x810078e8 uartControl + .text 0x810079a8 0x28 binaries/uartGetc.o + 0x810079a8 uartGetc + .text 0x810079d0 0xe8 binaries/uartInit.o + 0x810079d0 uartInit + .text 0x81007ab8 0x30 binaries/uartPutc.o + 0x81007ab8 uartPutc + .text 0x81007ae8 0x100 binaries/uartRead.o + 0x81007ae8 uartRead + .text 0x81007be8 0xd0 binaries/uartStat.o + 0x81007be8 uartStat + .text 0x81007cb8 0x114 binaries/uartWrite.o + 0x81007cb8 uartWrite + .text 0x81007dcc 0x50 binaries/kgetc.o + 0x81007dcc kgetc + .text 0x81007e1c 0x4c binaries/kputc.o + 0x81007e1c kputc + .text 0x81007e68 0x94 binaries/uartHwInit.o + 0x81007e68 uartHwInit + .text 0x81007efc 0x8 binaries/uartHwPutc.o + 0x81007efc uartHwPutc + .text 0x81007f04 0x64 binaries/uartHwStat.o + 0x81007f04 uartHwStat + .text 0x81007f68 0x19c binaries/uartInterrupt.o + 0x81007f68 uartInterrupt + .text 0x81008104 0x0 binaries/Doxygroup.o + .text 0x81008104 0x5c binaries/loopbackClose.o + 0x81008104 loopbackClose + .text 0x81008160 0x74 binaries/loopbackControl.o + 0x81008160 loopbackControl + .text 0x810081d4 0x8c binaries/loopbackGetc.o + 0x810081d4 loopbackGetc + .text 0x81008260 0x2c binaries/loopbackInit.o + 0x81008260 loopbackInit + .text 0x8100828c 0x8c binaries/loopbackOpen.o + 0x8100828c loopbackOpen + .text 0x81008318 0x88 binaries/loopbackPutc.o + 0x81008318 loopbackPutc + .text 0x810083a0 0x70 binaries/loopbackRead.o + 0x810083a0 loopbackRead + .text 0x81008410 0x7c binaries/loopbackWrite.o + 0x81008410 loopbackWrite + .text 0x8100848c 0x120 binaries/addargs.o + 0x8100848c addargs + .text 0x810085ac 0x2b4 binaries/lexan.o + 0x810085ac lexan + .text 0x81008860 0x67c binaries/shell.o + 0x81008860 shell + .text 0x81008edc 0x64 binaries/xsh_argecho.o + 0x81008edc xsh_argecho + .text 0x81008f40 0x224 binaries/xsh_cat.o + 0x81008f40 xsh_cat + .text 0x81009164 0x5c binaries/xsh_clear.o + 0x81009164 xsh_clear + .text 0x810091c0 0x270 binaries/xsh_date.o + 0x810091c0 xsh_date + .text 0x81009430 0x98 binaries/xsh_devdump.o + 0x81009430 xsh_devdump + .text 0x810094c8 0x68 binaries/xsh_echo.o + 0x810094c8 xsh_echo + .text 0x81009530 0x8 binaries/xsh_exit.o + 0x81009530 xsh_exit + .text 0x81009538 0x39c binaries/xsh_help.o + 0x81009538 xsh_help + .text 0x810098d4 0x1e0 binaries/xsh_kill.o + 0x810098d4 xsh_kill + .text 0x81009ab4 0x294 binaries/xsh_led.o + 0x81009ab4 xsh_led + .text 0x81009d48 0x420 binaries/xsh_memdump.o + 0x81009e44 xsh_memdump + .text 0x8100a168 0x21c binaries/xsh_memstat.o + 0x8100a168 xsh_memstat + .text 0x8100a384 0xbc binaries/xsh_mmu.o + 0x8100a384 function1 + 0x8100a3b4 xsh_mmu + .text 0x8100a440 0x220 binaries/xsh_ps.o + 0x8100a440 xsh_ps + .text 0x8100a660 0x1bc binaries/xsh_sleep.o + 0x8100a660 xsh_sleep + .text 0x8100a81c 0x1b4 binaries/xsh_uptime.o + 0x8100a81c xsh_uptime + .text 0x8100a9d0 0x4 binaries/consume.o + 0x8100a9d0 consumer + .text 0x8100a9d4 0x4 binaries/produce.o + 0x8100a9d4 producer + .text 0x8100a9d8 0x28 binaries/ctxsw.o + 0x8100a9d8 ctxsw + .text 0x8100aa00 0x100 binaries/intr.o + 0x8100aa00 disable + 0x8100aa0c restore + 0x8100aa30 enable + 0x8100aa38 pause + 0x8100aa38 halt + 0x8100aa40 irq_except + 0x8100aa70 initevec + 0x8100aad0 expjmpinstr + .text 0x8100ab00 0x30 binaries/irq_handler.o + 0x8100ab00 irq_handler + .text 0x8100ab30 0xc binaries/memory_barrier.o + 0x8100ab30 dmb + .text 0x8100ab3c 0x30 binaries/page_fault.o + 0x8100ab3c page_fault + .text 0x8100ab6c 0x114 /l/arm2/devtools/lib/gcc/arm-none-eabi/4.8.4/libgcc.a(_udivsi3.o) + 0x8100ab6c __udivsi3 + 0x8100ab6c __aeabi_uidiv + 0x8100ac60 __aeabi_uidivmod + .text 0x8100ac80 0x148 /l/arm2/devtools/lib/gcc/arm-none-eabi/4.8.4/libgcc.a(_divsi3.o) + 0x8100ac80 __aeabi_idiv + 0x8100ac80 __divsi3 + 0x8100ada8 __aeabi_idivmod + .text 0x8100adc8 0x4 /l/arm2/devtools/lib/gcc/arm-none-eabi/4.8.4/libgcc.a(_dvmd_tls.o) + 0x8100adc8 __aeabi_ldiv0 + 0x8100adc8 __aeabi_idiv0 + *(.rodata .rodata.*) + .rodata.str1.4 + 0x8100adcc 0x78 binaries/ascdate.o + .rodata.str1.4 + 0x8100ae44 0x26 binaries/clkinit.o + 0x28 (size before relaxing) + *fill* 0x8100ae6a 0x2 + .rodata.str1.4 + 0x8100ae6c 0x6e binaries/conf.o + 0x70 (size before relaxing) + *fill* 0x8100aeda 0x2 + .rodata.str1.4 + 0x8100aedc 0x16c binaries/initialize.o + 0x170 (size before relaxing) + .rodata.str1.4 + 0x8100b048 0x42 binaries/main.o + 0x44 (size before relaxing) + *fill* 0x8100b08a 0x2 + .rodata.str1.4 + 0x8100b08c 0x14 binaries/mmu.o + .rodata.str1.4 + 0x8100b0a0 0x10 binaries/panic.o + .rodata.str1.4 + 0x8100b0b0 0x19 binaries/platinit.o + 0x1c (size before relaxing) + *fill* 0x8100b0c9 0x3 + .rodata.str1.4 + 0x8100b0cc 0x1c binaries/ptinit.o + .rodata.str1.4 + 0x8100b0e8 0x25 binaries/ptsend.o + 0x28 (size before relaxing) + *fill* 0x8100b10d 0x3 + .rodata.str1.4 + 0x8100b110 0x27 binaries/xdone.o + 0x28 (size before relaxing) + *fill* 0x8100b137 0x1 + .rodata 0x8100b138 0x84 binaries/ctype_.o + 0x8100b138 _ctype_ + .rodata.str1.4 + 0x8100b1bc 0x2f binaries/doprnt.o + 0x30 (size before relaxing) + .rodata.str1.4 + 0x00000000 0x30 binaries/fdoprnt.o + *fill* 0x8100b1eb 0x1 + .rodata.str1.4 + 0x8100b1ec 0x86 binaries/naminit.o + 0x90 (size before relaxing) + *fill* 0x8100b272 0x2 + .rodata.str1.4 + 0x8100b274 0x9 binaries/raminit.o + 0xc (size before relaxing) + *fill* 0x8100b27d 0x3 + .rodata.str1.4 + 0x8100b280 0x37 binaries/lfdballoc.o + 0x38 (size before relaxing) + *fill* 0x8100b2b7 0x1 + .rodata.str1.4 + 0x8100b2b8 0x14 binaries/lfiballoc.o + .rodata.str1.4 + 0x8100b2cc 0x23 binaries/lflcontrol.o + 0x24 (size before relaxing) + *fill* 0x8100b2ef 0x1 + .rodata.str1.4 + 0x8100b2f0 0xbb binaries/lfsckfmt.o + 0xbc (size before relaxing) + *fill* 0x8100b3ab 0x1 + .rodata.str1.4 + 0x8100b3ac 0xde binaries/uartStat.o + 0xe4 (size before relaxing) + *fill* 0x8100b48a 0x2 + .rodata 0x8100b48c 0x8 binaries/uartHwStat.o + .rodata.str1.4 + 0x8100b494 0x6c binaries/uartHwStat.o + 0x9c (size before relaxing) + .rodata 0x8100b500 0xc0 binaries/shell.o + 0x8100b500 cmdtab + .rodata.str1.4 + 0x8100b5c0 0x2c9 binaries/shell.o + 0x2d4 (size before relaxing) + *fill* 0x8100b889 0x3 + .rodata.str1.4 + 0x8100b88c 0x29 binaries/xsh_argecho.o + 0x30 (size before relaxing) + *fill* 0x8100b8b5 0x3 + .rodata.str1.4 + 0x8100b8b8 0xcd binaries/xsh_cat.o + 0xd4 (size before relaxing) + *fill* 0x8100b985 0x3 + .rodata.str1.4 + 0x8100b988 0x15 binaries/xsh_clear.o + 0x18 (size before relaxing) + *fill* 0x8100b99d 0x3 + .rodata.str1.4 + 0x8100b9a0 0x1af binaries/xsh_date.o + 0x1cc (size before relaxing) + *fill* 0x8100bb4f 0x1 + .rodata.str1.4 + 0x8100bb50 0x61 binaries/xsh_devdump.o + 0x64 (size before relaxing) + *fill* 0x8100bbb1 0x3 + .rodata.str1.4 + 0x8100bbb4 0x8 binaries/xsh_echo.o + 0xc (size before relaxing) + .rodata.str1.4 + 0x8100bbbc 0xe7 binaries/xsh_help.o + 0x17c (size before relaxing) + *fill* 0x8100bca3 0x1 + .rodata.str1.4 + 0x8100bca4 0xc8 binaries/xsh_kill.o + 0x138 (size before relaxing) + .rodata.str1.4 + 0x8100bd6c 0xf7 binaries/xsh_led.o + 0x16c (size before relaxing) + *fill* 0x8100be63 0x1 + .rodata.str1.4 + 0x8100be64 0x1ea binaries/xsh_memdump.o + 0x264 (size before relaxing) + *fill* 0x8100c04e 0x2 + .rodata.str1.4 + 0x8100c050 0x1cc binaries/xsh_memstat.o + 0x234 (size before relaxing) + .rodata.str1.4 + 0x8100c21c 0x33 binaries/xsh_mmu.o + 0x34 (size before relaxing) + *fill* 0x8100c24f 0x1 + .rodata 0x8100c250 0x20 binaries/xsh_ps.o + .rodata.str1.4 + 0x8100c270 0x12a binaries/xsh_ps.o + 0x1d4 (size before relaxing) + *fill* 0x8100c39a 0x2 + .rodata.str1.4 + 0x8100c39c 0x5e binaries/xsh_sleep.o + 0xf8 (size before relaxing) + *fill* 0x8100c3fa 0x2 + .rodata.str1.4 + 0x8100c3fc 0x78 binaries/xsh_uptime.o + 0x114 (size before relaxing) + 0x8100c474 etext = ABSOLUTE (.) + 0x8100d000 . = ALIGN (0x1000) + *fill* 0x8100c474 0xb8c + +.glue_7 0x8100d000 0x0 + .glue_7 0x00000000 0x0 linker stubs + +.glue_7t 0x8100d000 0x0 + .glue_7t 0x00000000 0x0 linker stubs + +.vfp11_veneer 0x8100d000 0x0 + .vfp11_veneer 0x00000000 0x0 linker stubs + +.v4_bx 0x8100d000 0x0 + .v4_bx 0x00000000 0x0 linker stubs + +.iplt 0x8100d000 0x0 + .iplt 0x00000000 0x0 binaries/start.o + +.rel.dyn 0x8100d000 0x0 + .rel.iplt 0x00000000 0x0 binaries/start.o + +.data 0x8100d000 0x1000 + 0x8100d000 data = ABSOLUTE (.) + *(.data .data.*) + .data 0x8100d000 0x0 binaries/start.o + .data 0x8100d000 0x88 binaries/ascdate.o + 0x8100d000 Date + .data 0x8100d088 0x0 binaries/bufinit.o + .data 0x8100d088 0x0 binaries/chprio.o + .data 0x8100d088 0x0 binaries/clkhandler.o + .data 0x8100d088 0x0 binaries/clkinit.o + .data 0x8100d088 0x0 binaries/close.o + .data 0x8100d088 0x30c binaries/conf.o + 0x8100d088 devtab + .data 0x8100d394 0x0 binaries/control.o + .data 0x8100d394 0x4 binaries/create.o + .data 0x8100d398 0x40 binaries/evec.o + 0x8100d398 expmsg2 + 0x8100d3ac expmsg1 + .data 0x8100d3d8 0x0 binaries/exit.o + .data 0x8100d3d8 0x0 binaries/freebuf.o + .data 0x8100d3d8 0x0 binaries/freemem.o + .data 0x8100d3d8 0x0 binaries/getbuf.o + .data 0x8100d3d8 0x0 binaries/getc.o + .data 0x8100d3d8 0x0 binaries/getdev.o + .data 0x8100d3d8 0x0 binaries/getitem.o + .data 0x8100d3d8 0x0 binaries/getmem.o + .data 0x8100d3d8 0x0 binaries/getpid.o + .data 0x8100d3d8 0x0 binaries/getprio.o + .data 0x8100d3d8 0x0 binaries/getstk.o + .data 0x8100d3d8 0x0 binaries/gettime.o + .data 0x8100d3d8 0x0 binaries/init.o + .data 0x8100d3d8 0x0 binaries/initialize.o + .data 0x8100d3d8 0x0 binaries/insert.o + .data 0x8100d3d8 0x0 binaries/insertd.o + .data 0x8100d3d8 0x0 binaries/ioerr.o + .data 0x8100d3d8 0x0 binaries/ionull.o + .data 0x8100d3d8 0x0 binaries/kill.o + .data 0x8100d3d8 0x4 binaries/main.o + 0x8100d3d8 gcounter + .data 0x8100d3dc 0x0 binaries/mark.o + .data 0x8100d3dc 0x0 binaries/meminit.o + .data 0x8100d3dc 0x0 binaries/mkbufpool.o + .data 0x8100d3dc 0x0 binaries/mmu.o + .data 0x8100d3dc 0x2 binaries/newqueue.o + .data 0x8100d3de 0x0 binaries/open.o + .data 0x8100d3de 0x0 binaries/panic.o + .data 0x8100d3de 0x0 binaries/pl190.o + *fill* 0x8100d3de 0x2 + .data 0x8100d3e0 0x4 binaries/platinit.o + 0x8100d3e0 atags_ptr + .data 0x8100d3e4 0x0 binaries/ptclear.o + .data 0x8100d3e4 0x0 binaries/ptcount.o + .data 0x8100d3e4 0x0 binaries/ptcreate.o + .data 0x8100d3e4 0x0 binaries/ptdelete.o + .data 0x8100d3e4 0x0 binaries/ptinit.o + .data 0x8100d3e4 0x0 binaries/ptrecv.o + .data 0x8100d3e4 0x0 binaries/ptreset.o + .data 0x8100d3e4 0x0 binaries/ptsend.o + .data 0x8100d3e4 0x0 binaries/putc.o + .data 0x8100d3e4 0x0 binaries/queue.o + .data 0x8100d3e4 0x0 binaries/read.o + .data 0x8100d3e4 0x0 binaries/ready.o + .data 0x8100d3e4 0x0 binaries/receive.o + .data 0x8100d3e4 0x0 binaries/recvclr.o + .data 0x8100d3e4 0x0 binaries/recvtime.o + .data 0x8100d3e4 0x0 binaries/resched.o + .data 0x8100d3e4 0x0 binaries/resume.o + .data 0x8100d3e4 0x0 binaries/seek.o + .data 0x8100d3e4 0x0 binaries/semcount.o + .data 0x8100d3e4 0x0 binaries/semcreate.o + .data 0x8100d3e4 0x0 binaries/semdelete.o + .data 0x8100d3e4 0x0 binaries/semreset.o + .data 0x8100d3e4 0x0 binaries/send.o + .data 0x8100d3e4 0x0 binaries/signal.o + .data 0x8100d3e4 0x0 binaries/signaln.o + .data 0x8100d3e4 0x0 binaries/sleep.o + .data 0x8100d3e4 0x0 binaries/sp804.o + .data 0x8100d3e4 0x0 binaries/suspend.o + .data 0x8100d3e4 0x0 binaries/udelay.o + .data 0x8100d3e4 0x0 binaries/unsleep.o + .data 0x8100d3e4 0x0 binaries/userret.o + .data 0x8100d3e4 0x0 binaries/wait.o + .data 0x8100d3e4 0x0 binaries/wakeup.o + .data 0x8100d3e4 0x0 binaries/write.o + .data 0x8100d3e4 0x0 binaries/xdone.o + .data 0x8100d3e4 0x0 binaries/yield.o + .data 0x8100d3e4 0x0 binaries/abs.o + .data 0x8100d3e4 0x0 binaries/atoi.o + .data 0x8100d3e4 0x0 binaries/atol.o + .data 0x8100d3e4 0x0 binaries/bzero.o + .data 0x8100d3e4 0x0 binaries/ctype_.o + .data 0x8100d3e4 0x0 binaries/doprnt.o + .data 0x8100d3e4 0x80 binaries/doscan.o + 0x8100d3e4 _sctab + .data 0x8100d464 0x0 binaries/fdoprnt.o + .data 0x8100d464 0x0 binaries/fgetc.o + .data 0x8100d464 0x0 binaries/fgets.o + .data 0x8100d464 0x0 binaries/fprintf.o + .data 0x8100d464 0x0 binaries/fputc.o + .data 0x8100d464 0x0 binaries/fputs.o + .data 0x8100d464 0x0 binaries/fscanf.o + .data 0x8100d464 0x0 binaries/getchar.o + .data 0x8100d464 0x0 binaries/labs.o + .data 0x8100d464 0x0 binaries/memchr.o + .data 0x8100d464 0x0 binaries/memcmp.o + .data 0x8100d464 0x0 binaries/memcpy.o + .data 0x8100d464 0x0 binaries/memset.o + .data 0x8100d464 0x0 binaries/printf.o + .data 0x8100d464 0x0 binaries/putchar.o + .data 0x8100d464 0x0 binaries/qsort.o + .data 0x8100d464 0x4 binaries/rand.o + .data 0x8100d468 0x0 binaries/sprintf.o + .data 0x8100d468 0x0 binaries/sscanf.o + .data 0x8100d468 0x0 binaries/strchr.o + .data 0x8100d468 0x0 binaries/strcmp.o + .data 0x8100d468 0x0 binaries/strcpy.o + .data 0x8100d468 0x0 binaries/strlen.o + .data 0x8100d468 0x0 binaries/strncat.o + .data 0x8100d468 0x0 binaries/strncmp.o + .data 0x8100d468 0x0 binaries/strncpy.o + .data 0x8100d468 0x0 binaries/strnlen.o + .data 0x8100d468 0x0 binaries/strrchr.o + .data 0x8100d468 0x0 binaries/strstr.o + .data 0x8100d468 0x0 binaries/ttycontrol.o + .data 0x8100d468 0x0 binaries/ttygetc.o + .data 0x8100d468 0x0 binaries/ttyhandle_in.o + .data 0x8100d468 0x0 binaries/ttyhandle_out.o + .data 0x8100d468 0x0 binaries/ttyhandler.o + .data 0x8100d468 0x0 binaries/ttyinit.o + .data 0x8100d468 0x0 binaries/ttykickout.o + .data 0x8100d468 0x0 binaries/ttyputc.o + .data 0x8100d468 0x0 binaries/ttyread.o + .data 0x8100d468 0x0 binaries/ttywrite.o + .data 0x8100d468 0x0 binaries/mount.o + .data 0x8100d468 0x0 binaries/naminit.o + .data 0x8100d468 0x0 binaries/nammap.o + .data 0x8100d468 0x0 binaries/namopen.o + .data 0x8100d468 0x0 binaries/ramclose.o + .data 0x8100d468 0x0 binaries/raminit.o + .data 0x8100d468 0x0 binaries/ramopen.o + .data 0x8100d468 0x0 binaries/ramread.o + .data 0x8100d468 0x0 binaries/ramwrite.o + .data 0x8100d468 0x0 binaries/lfdballoc.o + .data 0x8100d468 0x0 binaries/lfdbfree.o + .data 0x8100d468 0x0 binaries/lfflush.o + .data 0x8100d468 0x0 binaries/lfgetmode.o + .data 0x8100d468 0x0 binaries/lfiballoc.o + .data 0x8100d468 0x0 binaries/lfibclear.o + .data 0x8100d468 0x0 binaries/lfibget.o + .data 0x8100d468 0x0 binaries/lfibput.o + .data 0x8100d468 0x0 binaries/lflclose.o + .data 0x8100d468 0x0 binaries/lflcontrol.o + .data 0x8100d468 0x0 binaries/lflgetc.o + .data 0x8100d468 0x0 binaries/lflinit.o + .data 0x8100d468 0x0 binaries/lflputc.o + .data 0x8100d468 0x0 binaries/lflread.o + .data 0x8100d468 0x0 binaries/lflseek.o + .data 0x8100d468 0x0 binaries/lflwrite.o + .data 0x8100d468 0x0 binaries/lfsckfmt.o + .data 0x8100d468 0x0 binaries/lfscreate.o + .data 0x8100d468 0x0 binaries/lfsetup.o + .data 0x8100d468 0x0 binaries/lfsinit.o + .data 0x8100d468 0x0 binaries/lfsopen.o + .data 0x8100d468 0x0 binaries/lftruncate.o + .data 0x8100d468 0x0 binaries/kprintf.o + .data 0x8100d468 0x0 binaries/kvprintf.o + .data 0x8100d468 0x0 binaries/uartControl.o + .data 0x8100d468 0x0 binaries/uartGetc.o + .data 0x8100d468 0x0 binaries/uartInit.o + .data 0x8100d468 0x0 binaries/uartPutc.o + .data 0x8100d468 0x0 binaries/uartRead.o + .data 0x8100d468 0x0 binaries/uartStat.o + .data 0x8100d468 0x0 binaries/uartWrite.o + .data 0x8100d468 0x0 binaries/kgetc.o + .data 0x8100d468 0x0 binaries/kputc.o + .data 0x8100d468 0x0 binaries/uartHwInit.o + .data 0x8100d468 0x0 binaries/uartHwPutc.o + .data 0x8100d468 0x0 binaries/uartHwStat.o + .data 0x8100d468 0x0 binaries/uartInterrupt.o + .data 0x8100d468 0x0 binaries/Doxygroup.o + .data 0x8100d468 0x0 binaries/loopbackClose.o + .data 0x8100d468 0x0 binaries/loopbackControl.o + .data 0x8100d468 0x0 binaries/loopbackGetc.o + .data 0x8100d468 0x0 binaries/loopbackInit.o + .data 0x8100d468 0x0 binaries/loopbackOpen.o + .data 0x8100d468 0x0 binaries/loopbackPutc.o + .data 0x8100d468 0x0 binaries/loopbackRead.o + .data 0x8100d468 0x0 binaries/loopbackWrite.o + .data 0x8100d468 0x0 binaries/addargs.o + .data 0x8100d468 0x0 binaries/lexan.o + .data 0x8100d468 0x4 binaries/shell.o + 0x8100d468 ncmd + .data 0x8100d46c 0x0 binaries/xsh_argecho.o + .data 0x8100d46c 0x0 binaries/xsh_cat.o + .data 0x8100d46c 0x0 binaries/xsh_clear.o + .data 0x8100d46c 0x0 binaries/xsh_date.o + .data 0x8100d46c 0x0 binaries/xsh_devdump.o + .data 0x8100d46c 0x0 binaries/xsh_echo.o + .data 0x8100d46c 0x0 binaries/xsh_exit.o + .data 0x8100d46c 0x0 binaries/xsh_help.o + .data 0x8100d46c 0x0 binaries/xsh_kill.o + .data 0x8100d46c 0x0 binaries/xsh_led.o + .data 0x8100d46c 0x0 binaries/xsh_memdump.o + .data 0x8100d46c 0x0 binaries/xsh_memstat.o + .data 0x8100d46c 0x0 binaries/xsh_mmu.o + .data 0x8100d46c 0x0 binaries/xsh_ps.o + .data 0x8100d46c 0x0 binaries/xsh_sleep.o + .data 0x8100d46c 0x0 binaries/xsh_uptime.o + .data 0x8100d46c 0x0 binaries/consume.o + .data 0x8100d46c 0x0 binaries/produce.o + .data 0x8100d46c 0x0 binaries/ctxsw.o + .data 0x8100d46c 0x0 binaries/intr.o + .data 0x8100d46c 0x0 binaries/irq_handler.o + .data 0x8100d46c 0x0 binaries/memory_barrier.o + .data 0x8100d46c 0x0 binaries/page_fault.o + .data 0x8100d46c 0x0 /l/arm2/devtools/lib/gcc/arm-none-eabi/4.8.4/libgcc.a(_udivsi3.o) + .data 0x8100d46c 0x0 /l/arm2/devtools/lib/gcc/arm-none-eabi/4.8.4/libgcc.a(_divsi3.o) + .data 0x8100d46c 0x0 /l/arm2/devtools/lib/gcc/arm-none-eabi/4.8.4/libgcc.a(_dvmd_tls.o) + 0x8100d46c edata = ABSOLUTE (.) + 0x8100e000 . = ALIGN (0x1000) + *fill* 0x8100d46c 0xb94 + +.igot.plt 0x8100e000 0x0 + .igot.plt 0x00000000 0x0 binaries/start.o + +.bss 0x81010000 0x1b2000 + 0x81010000 bss = ABSOLUTE (.) + *(.bss .bss.*) + .bss 0x81010000 0x0 binaries/start.o + .bss 0x81010000 0x0 binaries/ascdate.o + .bss 0x81010000 0x0 binaries/bufinit.o + .bss 0x81010000 0x0 binaries/chprio.o + .bss 0x81010000 0x0 binaries/clkhandler.o + .bss 0x81010000 0x4 binaries/clkinit.o + 0x81010000 ctr1000 + .bss 0x81010004 0x0 binaries/close.o + .bss 0x81010004 0x0 binaries/conf.o + .bss 0x81010004 0x0 binaries/control.o + .bss 0x81010004 0x0 binaries/create.o + .bss 0x81010004 0x0 binaries/evec.o + .bss 0x81010004 0x0 binaries/exit.o + .bss 0x81010004 0x0 binaries/freebuf.o + .bss 0x81010004 0x0 binaries/freemem.o + .bss 0x81010004 0x0 binaries/getbuf.o + .bss 0x81010004 0x0 binaries/getc.o + .bss 0x81010004 0x0 binaries/getdev.o + .bss 0x81010004 0x0 binaries/getitem.o + .bss 0x81010004 0x0 binaries/getmem.o + .bss 0x81010004 0x0 binaries/getpid.o + .bss 0x81010004 0x0 binaries/getprio.o + .bss 0x81010004 0x0 binaries/getstk.o + .bss 0x81010004 0x4 binaries/gettime.o + .bss 0x81010008 0x0 binaries/init.o + .bss 0x81010008 0x0 binaries/initialize.o + .bss 0x81010008 0x0 binaries/insert.o + .bss 0x81010008 0x0 binaries/insertd.o + .bss 0x81010008 0x0 binaries/ioerr.o + .bss 0x81010008 0x0 binaries/ionull.o + .bss 0x81010008 0x0 binaries/kill.o + .bss 0x81010008 0x0 binaries/main.o + .bss 0x81010008 0x0 binaries/mark.o + .bss 0x81010008 0x0 binaries/meminit.o + .bss 0x81010008 0x0 binaries/mkbufpool.o + .bss 0x81010008 0x0 binaries/mmu.o + .bss 0x81010008 0x0 binaries/newqueue.o + .bss 0x81010008 0x0 binaries/open.o + .bss 0x81010008 0x0 binaries/panic.o + .bss 0x81010008 0x0 binaries/pl190.o + .bss 0x81010008 0x0 binaries/platinit.o + .bss 0x81010008 0x0 binaries/ptclear.o + .bss 0x81010008 0x0 binaries/ptcount.o + .bss 0x81010008 0x0 binaries/ptcreate.o + .bss 0x81010008 0x0 binaries/ptdelete.o + .bss 0x81010008 0x0 binaries/ptinit.o + .bss 0x81010008 0x0 binaries/ptrecv.o + .bss 0x81010008 0x0 binaries/ptreset.o + .bss 0x81010008 0x0 binaries/ptsend.o + .bss 0x81010008 0x0 binaries/putc.o + .bss 0x81010008 0x0 binaries/queue.o + .bss 0x81010008 0x0 binaries/read.o + .bss 0x81010008 0x0 binaries/ready.o + .bss 0x81010008 0x0 binaries/receive.o + .bss 0x81010008 0x0 binaries/recvclr.o + .bss 0x81010008 0x0 binaries/recvtime.o + .bss 0x81010008 0x0 binaries/resched.o + .bss 0x81010008 0x0 binaries/resume.o + .bss 0x81010008 0x0 binaries/seek.o + .bss 0x81010008 0x0 binaries/semcount.o + .bss 0x81010008 0x4 binaries/semcreate.o + .bss 0x8101000c 0x0 binaries/semdelete.o + .bss 0x8101000c 0x0 binaries/semreset.o + .bss 0x8101000c 0x0 binaries/send.o + .bss 0x8101000c 0x0 binaries/signal.o + .bss 0x8101000c 0x0 binaries/signaln.o + .bss 0x8101000c 0x0 binaries/sleep.o + .bss 0x8101000c 0x0 binaries/sp804.o + .bss 0x8101000c 0x0 binaries/suspend.o + .bss 0x8101000c 0x0 binaries/udelay.o + .bss 0x8101000c 0x0 binaries/unsleep.o + .bss 0x8101000c 0x0 binaries/userret.o + .bss 0x8101000c 0x0 binaries/wait.o + .bss 0x8101000c 0x0 binaries/wakeup.o + .bss 0x8101000c 0x0 binaries/write.o + .bss 0x8101000c 0x0 binaries/xdone.o + .bss 0x8101000c 0x0 binaries/yield.o + .bss 0x8101000c 0x0 binaries/abs.o + .bss 0x8101000c 0x0 binaries/atoi.o + .bss 0x8101000c 0x0 binaries/atol.o + .bss 0x8101000c 0x0 binaries/bzero.o + .bss 0x8101000c 0x0 binaries/ctype_.o + .bss 0x8101000c 0x0 binaries/doprnt.o + .bss 0x8101000c 0x0 binaries/doscan.o + .bss 0x8101000c 0x0 binaries/fdoprnt.o + .bss 0x8101000c 0x0 binaries/fgetc.o + .bss 0x8101000c 0x0 binaries/fgets.o + .bss 0x8101000c 0x0 binaries/fprintf.o + .bss 0x8101000c 0x0 binaries/fputc.o + .bss 0x8101000c 0x0 binaries/fputs.o + .bss 0x8101000c 0x0 binaries/fscanf.o + .bss 0x8101000c 0x0 binaries/getchar.o + .bss 0x8101000c 0x0 binaries/labs.o + .bss 0x8101000c 0x0 binaries/memchr.o + .bss 0x8101000c 0x0 binaries/memcmp.o + .bss 0x8101000c 0x0 binaries/memcpy.o + .bss 0x8101000c 0x0 binaries/memset.o + .bss 0x8101000c 0x0 binaries/printf.o + .bss 0x8101000c 0x0 binaries/putchar.o + .bss 0x8101000c 0x8 binaries/qsort.o + .bss 0x81010014 0x0 binaries/rand.o + .bss 0x81010014 0x0 binaries/sprintf.o + .bss 0x81010014 0x0 binaries/sscanf.o + .bss 0x81010014 0x0 binaries/strchr.o + .bss 0x81010014 0x0 binaries/strcmp.o + .bss 0x81010014 0x0 binaries/strcpy.o + .bss 0x81010014 0x0 binaries/strlen.o + .bss 0x81010014 0x0 binaries/strncat.o + .bss 0x81010014 0x0 binaries/strncmp.o + .bss 0x81010014 0x0 binaries/strncpy.o + .bss 0x81010014 0x0 binaries/strnlen.o + .bss 0x81010014 0x0 binaries/strrchr.o + .bss 0x81010014 0x0 binaries/strstr.o + .bss 0x81010014 0x0 binaries/ttycontrol.o + .bss 0x81010014 0x0 binaries/ttygetc.o + .bss 0x81010014 0x0 binaries/ttyhandle_in.o + .bss 0x81010014 0x0 binaries/ttyhandle_out.o + .bss 0x81010014 0x0 binaries/ttyhandler.o + .bss 0x81010014 0x0 binaries/ttyinit.o + .bss 0x81010014 0x0 binaries/ttykickout.o + .bss 0x81010014 0x0 binaries/ttyputc.o + .bss 0x81010014 0x0 binaries/ttyread.o + .bss 0x81010014 0x0 binaries/ttywrite.o + .bss 0x81010014 0x0 binaries/mount.o + .bss 0x81010014 0x0 binaries/naminit.o + .bss 0x81010014 0x0 binaries/nammap.o + .bss 0x81010014 0x0 binaries/namopen.o + .bss 0x81010014 0x0 binaries/ramclose.o + .bss 0x81010014 0x0 binaries/raminit.o + .bss 0x81010014 0x0 binaries/ramopen.o + .bss 0x81010014 0x0 binaries/ramread.o + .bss 0x81010014 0x0 binaries/ramwrite.o + .bss 0x81010014 0x0 binaries/lfdballoc.o + .bss 0x81010014 0x0 binaries/lfdbfree.o + .bss 0x81010014 0x0 binaries/lfflush.o + .bss 0x81010014 0x0 binaries/lfgetmode.o + .bss 0x81010014 0x0 binaries/lfiballoc.o + .bss 0x81010014 0x0 binaries/lfibclear.o + .bss 0x81010014 0x0 binaries/lfibget.o + .bss 0x81010014 0x0 binaries/lfibput.o + .bss 0x81010014 0x0 binaries/lflclose.o + .bss 0x81010014 0x0 binaries/lflcontrol.o + .bss 0x81010014 0x0 binaries/lflgetc.o + .bss 0x81010014 0x0 binaries/lflinit.o + .bss 0x81010014 0x0 binaries/lflputc.o + .bss 0x81010014 0x0 binaries/lflread.o + .bss 0x81010014 0x0 binaries/lflseek.o + .bss 0x81010014 0x0 binaries/lflwrite.o + .bss 0x81010014 0x0 binaries/lfsckfmt.o + .bss 0x81010014 0x0 binaries/lfscreate.o + .bss 0x81010014 0x0 binaries/lfsetup.o + .bss 0x81010014 0x0 binaries/lfsinit.o + .bss 0x81010014 0x0 binaries/lfsopen.o + .bss 0x81010014 0x0 binaries/lftruncate.o + .bss 0x81010014 0x0 binaries/kprintf.o + .bss 0x81010014 0x0 binaries/kvprintf.o + .bss 0x81010014 0x0 binaries/uartControl.o + .bss 0x81010014 0x0 binaries/uartGetc.o + .bss 0x81010014 0x0 binaries/uartInit.o + .bss 0x81010014 0x0 binaries/uartPutc.o + .bss 0x81010014 0x0 binaries/uartRead.o + .bss 0x81010014 0x0 binaries/uartStat.o + .bss 0x81010014 0x0 binaries/uartWrite.o + .bss 0x81010014 0x0 binaries/kgetc.o + .bss 0x81010014 0x0 binaries/kputc.o + .bss 0x81010014 0x0 binaries/uartHwInit.o + .bss 0x81010014 0x0 binaries/uartHwPutc.o + .bss 0x81010014 0x0 binaries/uartHwStat.o + .bss 0x81010014 0x0 binaries/uartInterrupt.o + .bss 0x81010014 0x0 binaries/Doxygroup.o + .bss 0x81010014 0x0 binaries/loopbackClose.o + .bss 0x81010014 0x0 binaries/loopbackControl.o + .bss 0x81010014 0x0 binaries/loopbackGetc.o + .bss 0x81010014 0x0 binaries/loopbackInit.o + .bss 0x81010014 0x0 binaries/loopbackOpen.o + .bss 0x81010014 0x0 binaries/loopbackPutc.o + .bss 0x81010014 0x0 binaries/loopbackRead.o + .bss 0x81010014 0x0 binaries/loopbackWrite.o + .bss 0x81010014 0x0 binaries/addargs.o + .bss 0x81010014 0x0 binaries/lexan.o + .bss 0x81010014 0x0 binaries/shell.o + .bss 0x81010014 0x0 binaries/xsh_argecho.o + .bss 0x81010014 0x0 binaries/xsh_cat.o + .bss 0x81010014 0x0 binaries/xsh_clear.o + .bss 0x81010014 0x0 binaries/xsh_date.o + .bss 0x81010014 0x0 binaries/xsh_devdump.o + .bss 0x81010014 0x0 binaries/xsh_echo.o + .bss 0x81010014 0x0 binaries/xsh_exit.o + .bss 0x81010014 0x0 binaries/xsh_help.o + .bss 0x81010014 0x0 binaries/xsh_kill.o + .bss 0x81010014 0x0 binaries/xsh_led.o + .bss 0x81010014 0x0 binaries/xsh_memdump.o + .bss 0x81010014 0x0 binaries/xsh_memstat.o + .bss 0x81010014 0x0 binaries/xsh_mmu.o + .bss 0x81010014 0x0 binaries/xsh_ps.o + .bss 0x81010014 0x0 binaries/xsh_sleep.o + .bss 0x81010014 0x0 binaries/xsh_uptime.o + .bss 0x81010014 0x0 binaries/consume.o + .bss 0x81010014 0x0 binaries/produce.o + .bss 0x81010014 0x0 binaries/ctxsw.o + .bss 0x81010014 0x0 binaries/intr.o + .bss 0x81010014 0x0 binaries/irq_handler.o + .bss 0x81010014 0x0 binaries/memory_barrier.o + .bss 0x81010014 0x0 binaries/page_fault.o + .bss 0x81010014 0x0 /l/arm2/devtools/lib/gcc/arm-none-eabi/4.8.4/libgcc.a(_udivsi3.o) + .bss 0x81010014 0x0 /l/arm2/devtools/lib/gcc/arm-none-eabi/4.8.4/libgcc.a(_divsi3.o) + .bss 0x81010014 0x0 /l/arm2/devtools/lib/gcc/arm-none-eabi/4.8.4/libgcc.a(_dvmd_tls.o) + *(COMMON) + COMMON 0x81010014 0xf4 binaries/bufinit.o + 0x81010014 buftab + 0x81010104 nbpools + COMMON 0x81010108 0x10 binaries/clkinit.o + 0x81010108 sleepq + 0x8101010c clkticks + 0x81010110 preempt + 0x81010114 clktime + COMMON 0x81010118 0x200 binaries/evec.o + 0x81010118 intc_vector + COMMON 0x81010318 0x1adc binaries/initialize.o + 0x81010318 platform + 0x81010354 currpid + 0x81010358 proctab + 0x81011938 prcount + 0x8101193c semtab + 0x81011dec memlist + COMMON 0x81011df4 0x4 binaries/main.o + 0x81011df4 cpudelay + COMMON 0x81011df8 0x58 binaries/mark.o + 0x81011df8 marks + 0x81011e48 nmarks + 0x81011e4c mkmutex + COMMON 0x81011e50 0x8 binaries/meminit.o + 0x81011e50 minheap + 0x81011e54 maxheap + *fill* 0x81011e58 0x21a8 + COMMON 0x81014000 0x190000 binaries/mmu.o + 0x81014000 page_table + COMMON 0x811a4000 0x80 binaries/pl190.o + 0x811a4000 interruptVector + COMMON 0x811a4080 0x2d8 binaries/ptinit.o + 0x811a4080 porttab + 0x811a4350 ptnextid + 0x811a4354 ptfree + COMMON 0x811a4358 0x980 binaries/queue.o + 0x811a4358 queuetab + COMMON 0x811a4cd8 0x2 binaries/ready.o + 0x811a4cd8 readylist + *fill* 0x811a4cda 0x2 + COMMON 0x811a4cdc 0xc binaries/resched.o + 0x811a4cdc resdefer + 0x811a4ce0 Defer + COMMON 0x811a4ce8 0x10c binaries/ttyinit.o + 0x811a4ce8 ttytab + COMMON 0x811a4df4 0x19a4 binaries/naminit.o + 0x811a4df4 nnames + 0x811a4df8 nametab + COMMON 0x811a6798 0x19000 binaries/raminit.o + 0x811a6798 Ram + COMMON 0x811bf798 0xf00 binaries/lflinit.o + 0x811bf798 lfltab + COMMON 0x811c0698 0x20c binaries/lfsinit.o + 0x811c0698 Lf_data + COMMON 0x811c08a4 0x83c binaries/uartInit.o + 0x811c08a4 uarttab + COMMON 0x811c10e0 0x410 binaries/loopbackInit.o + 0x811c10e0 looptab + 0x811c14f0 ebss = ABSOLUTE (.) + 0x811c2000 . = ALIGN (0x1000) + *fill* 0x811c14f0 0xb10 + */() + 0x811c2000 end = ABSOLUTE (.) + 0x811c2000 _end = ABSOLUTE (.) + 0x811c2000 . = ALIGN (0x1000) +LOAD binaries/start.o +LOAD binaries/ascdate.o +LOAD binaries/bufinit.o +LOAD binaries/chprio.o +LOAD binaries/clkhandler.o +LOAD binaries/clkinit.o +LOAD binaries/close.o +LOAD binaries/conf.o +LOAD binaries/control.o +LOAD binaries/create.o +LOAD binaries/evec.o +LOAD binaries/exit.o +LOAD binaries/freebuf.o +LOAD binaries/freemem.o +LOAD binaries/getbuf.o +LOAD binaries/getc.o +LOAD binaries/getdev.o +LOAD binaries/getitem.o +LOAD binaries/getmem.o +LOAD binaries/getpid.o +LOAD binaries/getprio.o +LOAD binaries/getstk.o +LOAD binaries/gettime.o +LOAD binaries/init.o +LOAD binaries/initialize.o +LOAD binaries/insert.o +LOAD binaries/insertd.o +LOAD binaries/ioerr.o +LOAD binaries/ionull.o +LOAD binaries/kill.o +LOAD binaries/main.o +LOAD binaries/mark.o +LOAD binaries/meminit.o +LOAD binaries/mkbufpool.o +LOAD binaries/mmu.o +LOAD binaries/newqueue.o +LOAD binaries/open.o +LOAD binaries/panic.o +LOAD binaries/pl190.o +LOAD binaries/platinit.o +LOAD binaries/ptclear.o +LOAD binaries/ptcount.o +LOAD binaries/ptcreate.o +LOAD binaries/ptdelete.o +LOAD binaries/ptinit.o +LOAD binaries/ptrecv.o +LOAD binaries/ptreset.o +LOAD binaries/ptsend.o +LOAD binaries/putc.o +LOAD binaries/queue.o +LOAD binaries/read.o +LOAD binaries/ready.o +LOAD binaries/receive.o +LOAD binaries/recvclr.o +LOAD binaries/recvtime.o +LOAD binaries/resched.o +LOAD binaries/resume.o +LOAD binaries/seek.o +LOAD binaries/semcount.o +LOAD binaries/semcreate.o +LOAD binaries/semdelete.o +LOAD binaries/semreset.o +LOAD binaries/send.o +LOAD binaries/signal.o +LOAD binaries/signaln.o +LOAD binaries/sleep.o +LOAD binaries/sp804.o +LOAD binaries/suspend.o +LOAD binaries/udelay.o +LOAD binaries/unsleep.o +LOAD binaries/userret.o +LOAD binaries/wait.o +LOAD binaries/wakeup.o +LOAD binaries/write.o +LOAD binaries/xdone.o +LOAD binaries/yield.o +LOAD binaries/abs.o +LOAD binaries/atoi.o +LOAD binaries/atol.o +LOAD binaries/bzero.o +LOAD binaries/ctype_.o +LOAD binaries/doprnt.o +LOAD binaries/doscan.o +LOAD binaries/fdoprnt.o +LOAD binaries/fgetc.o +LOAD binaries/fgets.o +LOAD binaries/fprintf.o +LOAD binaries/fputc.o +LOAD binaries/fputs.o +LOAD binaries/fscanf.o +LOAD binaries/getchar.o +LOAD binaries/labs.o +LOAD binaries/memchr.o +LOAD binaries/memcmp.o +LOAD binaries/memcpy.o +LOAD binaries/memset.o +LOAD binaries/printf.o +LOAD binaries/putchar.o +LOAD binaries/qsort.o +LOAD binaries/rand.o +LOAD binaries/sprintf.o +LOAD binaries/sscanf.o +LOAD binaries/strchr.o +LOAD binaries/strcmp.o +LOAD binaries/strcpy.o +LOAD binaries/strlen.o +LOAD binaries/strncat.o +LOAD binaries/strncmp.o +LOAD binaries/strncpy.o +LOAD binaries/strnlen.o +LOAD binaries/strrchr.o +LOAD binaries/strstr.o +LOAD binaries/ttycontrol.o +LOAD binaries/ttygetc.o +LOAD binaries/ttyhandle_in.o +LOAD binaries/ttyhandle_out.o +LOAD binaries/ttyhandler.o +LOAD binaries/ttyinit.o +LOAD binaries/ttykickout.o +LOAD binaries/ttyputc.o +LOAD binaries/ttyread.o +LOAD binaries/ttywrite.o +LOAD binaries/mount.o +LOAD binaries/naminit.o +LOAD binaries/nammap.o +LOAD binaries/namopen.o +LOAD binaries/ramclose.o +LOAD binaries/raminit.o +LOAD binaries/ramopen.o +LOAD binaries/ramread.o +LOAD binaries/ramwrite.o +LOAD binaries/lfdballoc.o +LOAD binaries/lfdbfree.o +LOAD binaries/lfflush.o +LOAD binaries/lfgetmode.o +LOAD binaries/lfiballoc.o +LOAD binaries/lfibclear.o +LOAD binaries/lfibget.o +LOAD binaries/lfibput.o +LOAD binaries/lflclose.o +LOAD binaries/lflcontrol.o +LOAD binaries/lflgetc.o +LOAD binaries/lflinit.o +LOAD binaries/lflputc.o +LOAD binaries/lflread.o +LOAD binaries/lflseek.o +LOAD binaries/lflwrite.o +LOAD binaries/lfsckfmt.o +LOAD binaries/lfscreate.o +LOAD binaries/lfsetup.o +LOAD binaries/lfsinit.o +LOAD binaries/lfsopen.o +LOAD binaries/lftruncate.o +LOAD binaries/kprintf.o +LOAD binaries/kvprintf.o +LOAD binaries/uartControl.o +LOAD binaries/uartGetc.o +LOAD binaries/uartInit.o +LOAD binaries/uartPutc.o +LOAD binaries/uartRead.o +LOAD binaries/uartStat.o +LOAD binaries/uartWrite.o +LOAD binaries/kgetc.o +LOAD binaries/kputc.o +LOAD binaries/uartHwInit.o +LOAD binaries/uartHwPutc.o +LOAD binaries/uartHwStat.o +LOAD binaries/uartInterrupt.o +LOAD binaries/Doxygroup.o +LOAD binaries/loopbackClose.o +LOAD binaries/loopbackControl.o +LOAD binaries/loopbackGetc.o +LOAD binaries/loopbackInit.o +LOAD binaries/loopbackOpen.o +LOAD binaries/loopbackPutc.o +LOAD binaries/loopbackRead.o +LOAD binaries/loopbackWrite.o +LOAD binaries/addargs.o +LOAD binaries/lexan.o +LOAD binaries/shell.o +LOAD binaries/xsh_argecho.o +LOAD binaries/xsh_cat.o +LOAD binaries/xsh_clear.o +LOAD binaries/xsh_date.o +LOAD binaries/xsh_devdump.o +LOAD binaries/xsh_echo.o +LOAD binaries/xsh_exit.o +LOAD binaries/xsh_help.o +LOAD binaries/xsh_kill.o +LOAD binaries/xsh_led.o +LOAD binaries/xsh_memdump.o +LOAD binaries/xsh_memstat.o +LOAD binaries/xsh_mmu.o +LOAD binaries/xsh_ps.o +LOAD binaries/xsh_sleep.o +LOAD binaries/xsh_uptime.o +LOAD binaries/consume.o +LOAD binaries/produce.o +LOAD binaries/ctxsw.o +LOAD binaries/intr.o +LOAD binaries/irq_handler.o +LOAD binaries/memory_barrier.o +LOAD binaries/page_fault.o +LOAD /l/arm2/devtools/lib/gcc/arm-none-eabi/4.8.4/libgcc.a +OUTPUT(../compile/xinu elf32-littlearm) + +.ARM.attributes + 0x00000000 0x31 + .ARM.attributes + 0x00000000 0x25 binaries/start.o + .ARM.attributes + 0x00000025 0x35 binaries/ascdate.o + .ARM.attributes + 0x0000005a 0x35 binaries/bufinit.o + .ARM.attributes + 0x0000008f 0x35 binaries/chprio.o + .ARM.attributes + 0x000000c4 0x35 binaries/clkhandler.o + .ARM.attributes + 0x000000f9 0x35 binaries/clkinit.o + .ARM.attributes + 0x0000012e 0x35 binaries/close.o + .ARM.attributes + 0x00000163 0x35 binaries/conf.o + .ARM.attributes + 0x00000198 0x35 binaries/control.o + .ARM.attributes + 0x000001cd 0x35 binaries/create.o + .ARM.attributes + 0x00000202 0x35 binaries/evec.o + .ARM.attributes + 0x00000237 0x35 binaries/exit.o + .ARM.attributes + 0x0000026c 0x35 binaries/freebuf.o + .ARM.attributes + 0x000002a1 0x35 binaries/freemem.o + .ARM.attributes + 0x000002d6 0x35 binaries/getbuf.o + .ARM.attributes + 0x0000030b 0x35 binaries/getc.o + .ARM.attributes + 0x00000340 0x35 binaries/getdev.o + .ARM.attributes + 0x00000375 0x35 binaries/getitem.o + .ARM.attributes + 0x000003aa 0x35 binaries/getmem.o + .ARM.attributes + 0x000003df 0x35 binaries/getpid.o + .ARM.attributes + 0x00000414 0x35 binaries/getprio.o + .ARM.attributes + 0x00000449 0x35 binaries/getstk.o + .ARM.attributes + 0x0000047e 0x35 binaries/gettime.o + .ARM.attributes + 0x000004b3 0x35 binaries/init.o + .ARM.attributes + 0x000004e8 0x35 binaries/initialize.o + .ARM.attributes + 0x0000051d 0x35 binaries/insert.o + .ARM.attributes + 0x00000552 0x35 binaries/insertd.o + .ARM.attributes + 0x00000587 0x35 binaries/ioerr.o + .ARM.attributes + 0x000005bc 0x35 binaries/ionull.o + .ARM.attributes + 0x000005f1 0x35 binaries/kill.o + .ARM.attributes + 0x00000626 0x35 binaries/main.o + .ARM.attributes + 0x0000065b 0x35 binaries/mark.o + .ARM.attributes + 0x00000690 0x35 binaries/meminit.o + .ARM.attributes + 0x000006c5 0x35 binaries/mkbufpool.o + .ARM.attributes + 0x000006fa 0x35 binaries/mmu.o + .ARM.attributes + 0x0000072f 0x35 binaries/newqueue.o + .ARM.attributes + 0x00000764 0x35 binaries/open.o + .ARM.attributes + 0x00000799 0x35 binaries/panic.o + .ARM.attributes + 0x000007ce 0x35 binaries/pl190.o + .ARM.attributes + 0x00000803 0x35 binaries/platinit.o + .ARM.attributes + 0x00000838 0x35 binaries/ptclear.o + .ARM.attributes + 0x0000086d 0x35 binaries/ptcount.o + .ARM.attributes + 0x000008a2 0x35 binaries/ptcreate.o + .ARM.attributes + 0x000008d7 0x35 binaries/ptdelete.o + .ARM.attributes + 0x0000090c 0x35 binaries/ptinit.o + .ARM.attributes + 0x00000941 0x35 binaries/ptrecv.o + .ARM.attributes + 0x00000976 0x35 binaries/ptreset.o + .ARM.attributes + 0x000009ab 0x35 binaries/ptsend.o + .ARM.attributes + 0x000009e0 0x35 binaries/putc.o + .ARM.attributes + 0x00000a15 0x35 binaries/queue.o + .ARM.attributes + 0x00000a4a 0x35 binaries/read.o + .ARM.attributes + 0x00000a7f 0x35 binaries/ready.o + .ARM.attributes + 0x00000ab4 0x35 binaries/receive.o + .ARM.attributes + 0x00000ae9 0x35 binaries/recvclr.o + .ARM.attributes + 0x00000b1e 0x35 binaries/recvtime.o + .ARM.attributes + 0x00000b53 0x35 binaries/resched.o + .ARM.attributes + 0x00000b88 0x35 binaries/resume.o + .ARM.attributes + 0x00000bbd 0x35 binaries/seek.o + .ARM.attributes + 0x00000bf2 0x35 binaries/semcount.o + .ARM.attributes + 0x00000c27 0x35 binaries/semcreate.o + .ARM.attributes + 0x00000c5c 0x35 binaries/semdelete.o + .ARM.attributes + 0x00000c91 0x35 binaries/semreset.o + .ARM.attributes + 0x00000cc6 0x35 binaries/send.o + .ARM.attributes + 0x00000cfb 0x35 binaries/signal.o + .ARM.attributes + 0x00000d30 0x35 binaries/signaln.o + .ARM.attributes + 0x00000d65 0x35 binaries/sleep.o + .ARM.attributes + 0x00000d9a 0x35 binaries/sp804.o + .ARM.attributes + 0x00000dcf 0x35 binaries/suspend.o + .ARM.attributes + 0x00000e04 0x35 binaries/udelay.o + .ARM.attributes + 0x00000e39 0x35 binaries/unsleep.o + .ARM.attributes + 0x00000e6e 0x35 binaries/userret.o + .ARM.attributes + 0x00000ea3 0x35 binaries/wait.o + .ARM.attributes + 0x00000ed8 0x35 binaries/wakeup.o + .ARM.attributes + 0x00000f0d 0x35 binaries/write.o + .ARM.attributes + 0x00000f42 0x35 binaries/xdone.o + .ARM.attributes + 0x00000f77 0x35 binaries/yield.o + .ARM.attributes + 0x00000fac 0x35 binaries/abs.o + .ARM.attributes + 0x00000fe1 0x35 binaries/atoi.o + .ARM.attributes + 0x00001016 0x35 binaries/atol.o + .ARM.attributes + 0x0000104b 0x35 binaries/bzero.o + .ARM.attributes + 0x00001080 0x35 binaries/ctype_.o + .ARM.attributes + 0x000010b5 0x35 binaries/doprnt.o + .ARM.attributes + 0x000010ea 0x35 binaries/doscan.o + .ARM.attributes + 0x0000111f 0x35 binaries/fdoprnt.o + .ARM.attributes + 0x00001154 0x35 binaries/fgetc.o + .ARM.attributes + 0x00001189 0x35 binaries/fgets.o + .ARM.attributes + 0x000011be 0x35 binaries/fprintf.o + .ARM.attributes + 0x000011f3 0x35 binaries/fputc.o + .ARM.attributes + 0x00001228 0x35 binaries/fputs.o + .ARM.attributes + 0x0000125d 0x35 binaries/fscanf.o + .ARM.attributes + 0x00001292 0x35 binaries/getchar.o + .ARM.attributes + 0x000012c7 0x35 binaries/labs.o + .ARM.attributes + 0x000012fc 0x35 binaries/memchr.o + .ARM.attributes + 0x00001331 0x35 binaries/memcmp.o + .ARM.attributes + 0x00001366 0x35 binaries/memcpy.o + .ARM.attributes + 0x0000139b 0x35 binaries/memset.o + .ARM.attributes + 0x000013d0 0x35 binaries/printf.o + .ARM.attributes + 0x00001405 0x35 binaries/putchar.o + .ARM.attributes + 0x0000143a 0x35 binaries/qsort.o + .ARM.attributes + 0x0000146f 0x35 binaries/rand.o + .ARM.attributes + 0x000014a4 0x35 binaries/sprintf.o + .ARM.attributes + 0x000014d9 0x35 binaries/sscanf.o + .ARM.attributes + 0x0000150e 0x35 binaries/strchr.o + .ARM.attributes + 0x00001543 0x35 binaries/strcmp.o + .ARM.attributes + 0x00001578 0x35 binaries/strcpy.o + .ARM.attributes + 0x000015ad 0x35 binaries/strlen.o + .ARM.attributes + 0x000015e2 0x35 binaries/strncat.o + .ARM.attributes + 0x00001617 0x35 binaries/strncmp.o + .ARM.attributes + 0x0000164c 0x35 binaries/strncpy.o + .ARM.attributes + 0x00001681 0x35 binaries/strnlen.o + .ARM.attributes + 0x000016b6 0x35 binaries/strrchr.o + .ARM.attributes + 0x000016eb 0x35 binaries/strstr.o + .ARM.attributes + 0x00001720 0x35 binaries/ttycontrol.o + .ARM.attributes + 0x00001755 0x35 binaries/ttygetc.o + .ARM.attributes + 0x0000178a 0x35 binaries/ttyhandle_in.o + .ARM.attributes + 0x000017bf 0x35 binaries/ttyhandle_out.o + .ARM.attributes + 0x000017f4 0x35 binaries/ttyhandler.o + .ARM.attributes + 0x00001829 0x35 binaries/ttyinit.o + .ARM.attributes + 0x0000185e 0x35 binaries/ttykickout.o + .ARM.attributes + 0x00001893 0x35 binaries/ttyputc.o + .ARM.attributes + 0x000018c8 0x35 binaries/ttyread.o + .ARM.attributes + 0x000018fd 0x35 binaries/ttywrite.o + .ARM.attributes + 0x00001932 0x35 binaries/mount.o + .ARM.attributes + 0x00001967 0x35 binaries/naminit.o + .ARM.attributes + 0x0000199c 0x35 binaries/nammap.o + .ARM.attributes + 0x000019d1 0x35 binaries/namopen.o + .ARM.attributes + 0x00001a06 0x35 binaries/ramclose.o + .ARM.attributes + 0x00001a3b 0x35 binaries/raminit.o + .ARM.attributes + 0x00001a70 0x35 binaries/ramopen.o + .ARM.attributes + 0x00001aa5 0x35 binaries/ramread.o + .ARM.attributes + 0x00001ada 0x35 binaries/ramwrite.o + .ARM.attributes + 0x00001b0f 0x35 binaries/lfdballoc.o + .ARM.attributes + 0x00001b44 0x35 binaries/lfdbfree.o + .ARM.attributes + 0x00001b79 0x35 binaries/lfflush.o + .ARM.attributes + 0x00001bae 0x35 binaries/lfgetmode.o + .ARM.attributes + 0x00001be3 0x35 binaries/lfiballoc.o + .ARM.attributes + 0x00001c18 0x35 binaries/lfibclear.o + .ARM.attributes + 0x00001c4d 0x35 binaries/lfibget.o + .ARM.attributes + 0x00001c82 0x35 binaries/lfibput.o + .ARM.attributes + 0x00001cb7 0x35 binaries/lflclose.o + .ARM.attributes + 0x00001cec 0x35 binaries/lflcontrol.o + .ARM.attributes + 0x00001d21 0x35 binaries/lflgetc.o + .ARM.attributes + 0x00001d56 0x35 binaries/lflinit.o + .ARM.attributes + 0x00001d8b 0x35 binaries/lflputc.o + .ARM.attributes + 0x00001dc0 0x35 binaries/lflread.o + .ARM.attributes + 0x00001df5 0x35 binaries/lflseek.o + .ARM.attributes + 0x00001e2a 0x35 binaries/lflwrite.o + .ARM.attributes + 0x00001e5f 0x35 binaries/lfsckfmt.o + .ARM.attributes + 0x00001e94 0x35 binaries/lfscreate.o + .ARM.attributes + 0x00001ec9 0x35 binaries/lfsetup.o + .ARM.attributes + 0x00001efe 0x35 binaries/lfsinit.o + .ARM.attributes + 0x00001f33 0x35 binaries/lfsopen.o + .ARM.attributes + 0x00001f68 0x35 binaries/lftruncate.o + .ARM.attributes + 0x00001f9d 0x35 binaries/kprintf.o + .ARM.attributes + 0x00001fd2 0x35 binaries/kvprintf.o + .ARM.attributes + 0x00002007 0x35 binaries/uartControl.o + .ARM.attributes + 0x0000203c 0x35 binaries/uartGetc.o + .ARM.attributes + 0x00002071 0x35 binaries/uartInit.o + .ARM.attributes + 0x000020a6 0x35 binaries/uartPutc.o + .ARM.attributes + 0x000020db 0x35 binaries/uartRead.o + .ARM.attributes + 0x00002110 0x35 binaries/uartStat.o + .ARM.attributes + 0x00002145 0x35 binaries/uartWrite.o + .ARM.attributes + 0x0000217a 0x35 binaries/kgetc.o + .ARM.attributes + 0x000021af 0x35 binaries/kputc.o + .ARM.attributes + 0x000021e4 0x35 binaries/uartHwInit.o + .ARM.attributes + 0x00002219 0x35 binaries/uartHwPutc.o + .ARM.attributes + 0x0000224e 0x35 binaries/uartHwStat.o + .ARM.attributes + 0x00002283 0x35 binaries/uartInterrupt.o + .ARM.attributes + 0x000022b8 0x35 binaries/Doxygroup.o + .ARM.attributes + 0x000022ed 0x35 binaries/loopbackClose.o + .ARM.attributes + 0x00002322 0x35 binaries/loopbackControl.o + .ARM.attributes + 0x00002357 0x35 binaries/loopbackGetc.o + .ARM.attributes + 0x0000238c 0x35 binaries/loopbackInit.o + .ARM.attributes + 0x000023c1 0x35 binaries/loopbackOpen.o + .ARM.attributes + 0x000023f6 0x35 binaries/loopbackPutc.o + .ARM.attributes + 0x0000242b 0x35 binaries/loopbackRead.o + .ARM.attributes + 0x00002460 0x35 binaries/loopbackWrite.o + .ARM.attributes + 0x00002495 0x35 binaries/addargs.o + .ARM.attributes + 0x000024ca 0x35 binaries/lexan.o + .ARM.attributes + 0x000024ff 0x35 binaries/shell.o + .ARM.attributes + 0x00002534 0x35 binaries/xsh_argecho.o + .ARM.attributes + 0x00002569 0x35 binaries/xsh_cat.o + .ARM.attributes + 0x0000259e 0x35 binaries/xsh_clear.o + .ARM.attributes + 0x000025d3 0x35 binaries/xsh_date.o + .ARM.attributes + 0x00002608 0x35 binaries/xsh_devdump.o + .ARM.attributes + 0x0000263d 0x35 binaries/xsh_echo.o + .ARM.attributes + 0x00002672 0x35 binaries/xsh_exit.o + .ARM.attributes + 0x000026a7 0x35 binaries/xsh_help.o + .ARM.attributes + 0x000026dc 0x35 binaries/xsh_kill.o + .ARM.attributes + 0x00002711 0x35 binaries/xsh_led.o + .ARM.attributes + 0x00002746 0x35 binaries/xsh_memdump.o + .ARM.attributes + 0x0000277b 0x35 binaries/xsh_memstat.o + .ARM.attributes + 0x000027b0 0x35 binaries/xsh_mmu.o + .ARM.attributes + 0x000027e5 0x35 binaries/xsh_ps.o + .ARM.attributes + 0x0000281a 0x35 binaries/xsh_sleep.o + .ARM.attributes + 0x0000284f 0x35 binaries/xsh_uptime.o + .ARM.attributes + 0x00002884 0x35 binaries/consume.o + .ARM.attributes + 0x000028b9 0x35 binaries/produce.o + .ARM.attributes + 0x000028ee 0x25 binaries/ctxsw.o + .ARM.attributes + 0x00002913 0x25 binaries/intr.o + .ARM.attributes + 0x00002938 0x25 binaries/irq_handler.o + .ARM.attributes + 0x0000295d 0x25 binaries/memory_barrier.o + .ARM.attributes + 0x00002982 0x25 binaries/page_fault.o + .ARM.attributes + 0x000029a7 0x18 /l/arm2/devtools/lib/gcc/arm-none-eabi/4.8.4/libgcc.a(_udivsi3.o) + .ARM.attributes + 0x000029bf 0x18 /l/arm2/devtools/lib/gcc/arm-none-eabi/4.8.4/libgcc.a(_divsi3.o) + .ARM.attributes + 0x000029d7 0x18 /l/arm2/devtools/lib/gcc/arm-none-eabi/4.8.4/libgcc.a(_dvmd_tls.o) + +.comment 0x00000000 0x70 + .comment 0x00000000 0x70 binaries/ascdate.o + 0x71 (size before relaxing) + .comment 0x00000000 0x71 binaries/bufinit.o + .comment 0x00000000 0x71 binaries/chprio.o + .comment 0x00000000 0x71 binaries/clkhandler.o + .comment 0x00000000 0x71 binaries/clkinit.o + .comment 0x00000000 0x71 binaries/close.o + .comment 0x00000000 0x71 binaries/conf.o + .comment 0x00000000 0x71 binaries/control.o + .comment 0x00000000 0x71 binaries/create.o + .comment 0x00000000 0x71 binaries/evec.o + .comment 0x00000000 0x71 binaries/exit.o + .comment 0x00000000 0x71 binaries/freebuf.o + .comment 0x00000000 0x71 binaries/freemem.o + .comment 0x00000000 0x71 binaries/getbuf.o + .comment 0x00000000 0x71 binaries/getc.o + .comment 0x00000000 0x71 binaries/getdev.o + .comment 0x00000000 0x71 binaries/getitem.o + .comment 0x00000000 0x71 binaries/getmem.o + .comment 0x00000000 0x71 binaries/getpid.o + .comment 0x00000000 0x71 binaries/getprio.o + .comment 0x00000000 0x71 binaries/getstk.o + .comment 0x00000000 0x71 binaries/gettime.o + .comment 0x00000000 0x71 binaries/init.o + .comment 0x00000000 0x71 binaries/initialize.o + .comment 0x00000000 0x71 binaries/insert.o + .comment 0x00000000 0x71 binaries/insertd.o + .comment 0x00000000 0x71 binaries/ioerr.o + .comment 0x00000000 0x71 binaries/ionull.o + .comment 0x00000000 0x71 binaries/kill.o + .comment 0x00000000 0x71 binaries/main.o + .comment 0x00000000 0x71 binaries/mark.o + .comment 0x00000000 0x71 binaries/meminit.o + .comment 0x00000000 0x71 binaries/mkbufpool.o + .comment 0x00000000 0x71 binaries/mmu.o + .comment 0x00000000 0x71 binaries/newqueue.o + .comment 0x00000000 0x71 binaries/open.o + .comment 0x00000000 0x71 binaries/panic.o + .comment 0x00000000 0x71 binaries/pl190.o + .comment 0x00000000 0x71 binaries/platinit.o + .comment 0x00000000 0x71 binaries/ptclear.o + .comment 0x00000000 0x71 binaries/ptcount.o + .comment 0x00000000 0x71 binaries/ptcreate.o + .comment 0x00000000 0x71 binaries/ptdelete.o + .comment 0x00000000 0x71 binaries/ptinit.o + .comment 0x00000000 0x71 binaries/ptrecv.o + .comment 0x00000000 0x71 binaries/ptreset.o + .comment 0x00000000 0x71 binaries/ptsend.o + .comment 0x00000000 0x71 binaries/putc.o + .comment 0x00000000 0x71 binaries/queue.o + .comment 0x00000000 0x71 binaries/read.o + .comment 0x00000000 0x71 binaries/ready.o + .comment 0x00000000 0x71 binaries/receive.o + .comment 0x00000000 0x71 binaries/recvclr.o + .comment 0x00000000 0x71 binaries/recvtime.o + .comment 0x00000000 0x71 binaries/resched.o + .comment 0x00000000 0x71 binaries/resume.o + .comment 0x00000000 0x71 binaries/seek.o + .comment 0x00000000 0x71 binaries/semcount.o + .comment 0x00000000 0x71 binaries/semcreate.o + .comment 0x00000000 0x71 binaries/semdelete.o + .comment 0x00000000 0x71 binaries/semreset.o + .comment 0x00000000 0x71 binaries/send.o + .comment 0x00000000 0x71 binaries/signal.o + .comment 0x00000000 0x71 binaries/signaln.o + .comment 0x00000000 0x71 binaries/sleep.o + .comment 0x00000000 0x71 binaries/sp804.o + .comment 0x00000000 0x71 binaries/suspend.o + .comment 0x00000000 0x71 binaries/udelay.o + .comment 0x00000000 0x71 binaries/unsleep.o + .comment 0x00000000 0x71 binaries/userret.o + .comment 0x00000000 0x71 binaries/wait.o + .comment 0x00000000 0x71 binaries/wakeup.o + .comment 0x00000000 0x71 binaries/write.o + .comment 0x00000000 0x71 binaries/xdone.o + .comment 0x00000000 0x71 binaries/yield.o + .comment 0x00000000 0x71 binaries/abs.o + .comment 0x00000000 0x71 binaries/atoi.o + .comment 0x00000000 0x71 binaries/atol.o + .comment 0x00000000 0x71 binaries/bzero.o + .comment 0x00000000 0x71 binaries/ctype_.o + .comment 0x00000000 0x71 binaries/doprnt.o + .comment 0x00000000 0x71 binaries/doscan.o + .comment 0x00000000 0x71 binaries/fdoprnt.o + .comment 0x00000000 0x71 binaries/fgetc.o + .comment 0x00000000 0x71 binaries/fgets.o + .comment 0x00000000 0x71 binaries/fprintf.o + .comment 0x00000000 0x71 binaries/fputc.o + .comment 0x00000000 0x71 binaries/fputs.o + .comment 0x00000000 0x71 binaries/fscanf.o + .comment 0x00000000 0x71 binaries/getchar.o + .comment 0x00000000 0x71 binaries/labs.o + .comment 0x00000000 0x71 binaries/memchr.o + .comment 0x00000000 0x71 binaries/memcmp.o + .comment 0x00000000 0x71 binaries/memcpy.o + .comment 0x00000000 0x71 binaries/memset.o + .comment 0x00000000 0x71 binaries/printf.o + .comment 0x00000000 0x71 binaries/putchar.o + .comment 0x00000000 0x71 binaries/qsort.o + .comment 0x00000000 0x71 binaries/rand.o + .comment 0x00000000 0x71 binaries/sprintf.o + .comment 0x00000000 0x71 binaries/sscanf.o + .comment 0x00000000 0x71 binaries/strchr.o + .comment 0x00000000 0x71 binaries/strcmp.o + .comment 0x00000000 0x71 binaries/strcpy.o + .comment 0x00000000 0x71 binaries/strlen.o + .comment 0x00000000 0x71 binaries/strncat.o + .comment 0x00000000 0x71 binaries/strncmp.o + .comment 0x00000000 0x71 binaries/strncpy.o + .comment 0x00000000 0x71 binaries/strnlen.o + .comment 0x00000000 0x71 binaries/strrchr.o + .comment 0x00000000 0x71 binaries/strstr.o + .comment 0x00000000 0x71 binaries/ttycontrol.o + .comment 0x00000000 0x71 binaries/ttygetc.o + .comment 0x00000000 0x71 binaries/ttyhandle_in.o + .comment 0x00000000 0x71 binaries/ttyhandle_out.o + .comment 0x00000000 0x71 binaries/ttyhandler.o + .comment 0x00000000 0x71 binaries/ttyinit.o + .comment 0x00000000 0x71 binaries/ttykickout.o + .comment 0x00000000 0x71 binaries/ttyputc.o + .comment 0x00000000 0x71 binaries/ttyread.o + .comment 0x00000000 0x71 binaries/ttywrite.o + .comment 0x00000000 0x71 binaries/mount.o + .comment 0x00000000 0x71 binaries/naminit.o + .comment 0x00000000 0x71 binaries/nammap.o + .comment 0x00000000 0x71 binaries/namopen.o + .comment 0x00000000 0x71 binaries/ramclose.o + .comment 0x00000000 0x71 binaries/raminit.o + .comment 0x00000000 0x71 binaries/ramopen.o + .comment 0x00000000 0x71 binaries/ramread.o + .comment 0x00000000 0x71 binaries/ramwrite.o + .comment 0x00000000 0x71 binaries/lfdballoc.o + .comment 0x00000000 0x71 binaries/lfdbfree.o + .comment 0x00000000 0x71 binaries/lfflush.o + .comment 0x00000000 0x71 binaries/lfgetmode.o + .comment 0x00000000 0x71 binaries/lfiballoc.o + .comment 0x00000000 0x71 binaries/lfibclear.o + .comment 0x00000000 0x71 binaries/lfibget.o + .comment 0x00000000 0x71 binaries/lfibput.o + .comment 0x00000000 0x71 binaries/lflclose.o + .comment 0x00000000 0x71 binaries/lflcontrol.o + .comment 0x00000000 0x71 binaries/lflgetc.o + .comment 0x00000000 0x71 binaries/lflinit.o + .comment 0x00000000 0x71 binaries/lflputc.o + .comment 0x00000000 0x71 binaries/lflread.o + .comment 0x00000000 0x71 binaries/lflseek.o + .comment 0x00000000 0x71 binaries/lflwrite.o + .comment 0x00000000 0x71 binaries/lfsckfmt.o + .comment 0x00000000 0x71 binaries/lfscreate.o + .comment 0x00000000 0x71 binaries/lfsetup.o + .comment 0x00000000 0x71 binaries/lfsinit.o + .comment 0x00000000 0x71 binaries/lfsopen.o + .comment 0x00000000 0x71 binaries/lftruncate.o + .comment 0x00000000 0x71 binaries/kprintf.o + .comment 0x00000000 0x71 binaries/kvprintf.o + .comment 0x00000000 0x71 binaries/uartControl.o + .comment 0x00000000 0x71 binaries/uartGetc.o + .comment 0x00000000 0x71 binaries/uartInit.o + .comment 0x00000000 0x71 binaries/uartPutc.o + .comment 0x00000000 0x71 binaries/uartRead.o + .comment 0x00000000 0x71 binaries/uartStat.o + .comment 0x00000000 0x71 binaries/uartWrite.o + .comment 0x00000000 0x71 binaries/kgetc.o + .comment 0x00000000 0x71 binaries/kputc.o + .comment 0x00000000 0x71 binaries/uartHwInit.o + .comment 0x00000000 0x71 binaries/uartHwPutc.o + .comment 0x00000000 0x71 binaries/uartHwStat.o + .comment 0x00000000 0x71 binaries/uartInterrupt.o + .comment 0x00000000 0x71 binaries/Doxygroup.o + .comment 0x00000000 0x71 binaries/loopbackClose.o + .comment 0x00000000 0x71 binaries/loopbackControl.o + .comment 0x00000000 0x71 binaries/loopbackGetc.o + .comment 0x00000000 0x71 binaries/loopbackInit.o + .comment 0x00000000 0x71 binaries/loopbackOpen.o + .comment 0x00000000 0x71 binaries/loopbackPutc.o + .comment 0x00000000 0x71 binaries/loopbackRead.o + .comment 0x00000000 0x71 binaries/loopbackWrite.o + .comment 0x00000000 0x71 binaries/addargs.o + .comment 0x00000000 0x71 binaries/lexan.o + .comment 0x00000000 0x71 binaries/shell.o + .comment 0x00000000 0x71 binaries/xsh_argecho.o + .comment 0x00000000 0x71 binaries/xsh_cat.o + .comment 0x00000000 0x71 binaries/xsh_clear.o + .comment 0x00000000 0x71 binaries/xsh_date.o + .comment 0x00000000 0x71 binaries/xsh_devdump.o + .comment 0x00000000 0x71 binaries/xsh_echo.o + .comment 0x00000000 0x71 binaries/xsh_exit.o + .comment 0x00000000 0x71 binaries/xsh_help.o + .comment 0x00000000 0x71 binaries/xsh_kill.o + .comment 0x00000000 0x71 binaries/xsh_led.o + .comment 0x00000000 0x71 binaries/xsh_memdump.o + .comment 0x00000000 0x71 binaries/xsh_memstat.o + .comment 0x00000000 0x71 binaries/xsh_mmu.o + .comment 0x00000000 0x71 binaries/xsh_ps.o + .comment 0x00000000 0x71 binaries/xsh_sleep.o + .comment 0x00000000 0x71 binaries/xsh_uptime.o + .comment 0x00000000 0x71 binaries/consume.o + .comment 0x00000000 0x71 binaries/produce.o + +.debug_line 0x00000000 0x181c5 + .debug_line 0x00000000 0x75 binaries/start.o + .debug_line 0x00000075 0x2a3 binaries/ascdate.o + .debug_line 0x00000318 0x222 binaries/bufinit.o + .debug_line 0x0000053a 0x230 binaries/chprio.o + .debug_line 0x0000076a 0x24c binaries/clkhandler.o + .debug_line 0x000009b6 0x241 binaries/clkinit.o + .debug_line 0x00000bf7 0x227 binaries/close.o + .debug_line 0x00000e1e 0x20e binaries/conf.o + .debug_line 0x0000102c 0x229 binaries/control.o + .debug_line 0x00001255 0x28b binaries/create.o + .debug_line 0x000014e0 0x231 binaries/evec.o + .debug_line 0x00001711 0x21e binaries/exit.o + .debug_line 0x0000192f 0x234 binaries/freebuf.o + .debug_line 0x00001b63 0x24e binaries/freemem.o + .debug_line 0x00001db1 0x231 binaries/getbuf.o + .debug_line 0x00001fe2 0x226 binaries/getc.o + .debug_line 0x00002208 0x228 binaries/getdev.o + .debug_line 0x00002430 0x234 binaries/getitem.o + .debug_line 0x00002664 0x24b binaries/getmem.o + .debug_line 0x000028af 0x220 binaries/getpid.o + .debug_line 0x00002acf 0x22f binaries/getprio.o + .debug_line 0x00002cfe 0x23a binaries/getstk.o + .debug_line 0x00002f38 0x228 binaries/gettime.o + .debug_line 0x00003160 0x226 binaries/init.o + .debug_line 0x00003386 0x2a2 binaries/initialize.o + .debug_line 0x00003628 0x238 binaries/insert.o + .debug_line 0x00003860 0x251 binaries/insertd.o + .debug_line 0x00003ab1 0x21f binaries/ioerr.o + .debug_line 0x00003cd0 0x220 binaries/ionull.o + .debug_line 0x00003ef0 0x23b binaries/kill.o + .debug_line 0x0000412b 0x23b binaries/main.o + .debug_line 0x00004366 0x236 binaries/mark.o + .debug_line 0x0000459c 0x225 binaries/meminit.o + .debug_line 0x000047c1 0x24f binaries/mkbufpool.o + .debug_line 0x00004a10 0x279 binaries/mmu.o + .debug_line 0x00004c89 0x231 binaries/newqueue.o + .debug_line 0x00004eba 0x226 binaries/open.o + .debug_line 0x000050e0 0x220 binaries/panic.o + .debug_line 0x00005300 0x243 binaries/pl190.o + .debug_line 0x00005543 0x278 binaries/platinit.o + .debug_line 0x000057bb 0x237 binaries/ptclear.o + .debug_line 0x000059f2 0x236 binaries/ptcount.o + .debug_line 0x00005c28 0x244 binaries/ptcreate.o + .debug_line 0x00005e6c 0x234 binaries/ptdelete.o + .debug_line 0x000060a0 0x245 binaries/ptinit.o + .debug_line 0x000062e5 0x244 binaries/ptrecv.o + .debug_line 0x00006529 0x232 binaries/ptreset.o + .debug_line 0x0000675b 0x242 binaries/ptsend.o + .debug_line 0x0000699d 0x226 binaries/putc.o + .debug_line 0x00006bc3 0x241 binaries/queue.o + .debug_line 0x00006e04 0x226 binaries/read.o + .debug_line 0x0000702a 0x231 binaries/ready.o + .debug_line 0x0000725b 0x229 binaries/receive.o + .debug_line 0x00007484 0x228 binaries/recvclr.o + .debug_line 0x000076ac 0x237 binaries/recvtime.o + .debug_line 0x000078e3 0x248 binaries/resched.o + .debug_line 0x00007b2b 0x233 binaries/resume.o + .debug_line 0x00007d5e 0x226 binaries/seek.o + .debug_line 0x00007f84 0x230 binaries/semcount.o + .debug_line 0x000081b4 0x23d binaries/semcreate.o + .debug_line 0x000083f1 0x233 binaries/semdelete.o + .debug_line 0x00008624 0x23b binaries/semreset.o + .debug_line 0x0000885f 0x236 binaries/send.o + .debug_line 0x00008a95 0x22c binaries/signal.o + .debug_line 0x00008cc1 0x231 binaries/signaln.o + .debug_line 0x00008ef2 0x234 binaries/sleep.o + .debug_line 0x00009126 0x232 binaries/sp804.o + .debug_line 0x00009358 0x238 binaries/suspend.o + .debug_line 0x00009590 0x252 binaries/udelay.o + .debug_line 0x000097e2 0x236 binaries/unsleep.o + .debug_line 0x00009a18 0x221 binaries/userret.o + .debug_line 0x00009c39 0x22e binaries/wait.o + .debug_line 0x00009e67 0x22c binaries/wakeup.o + .debug_line 0x0000a093 0x227 binaries/write.o + .debug_line 0x0000a2ba 0x220 binaries/xdone.o + .debug_line 0x0000a4da 0x222 binaries/yield.o + .debug_line 0x0000a6fc 0x3d binaries/abs.o + .debug_line 0x0000a739 0x58 binaries/atoi.o + .debug_line 0x0000a791 0x58 binaries/atol.o + .debug_line 0x0000a7e9 0x4c binaries/bzero.o + .debug_line 0x0000a835 0x46 binaries/ctype_.o + .debug_line 0x0000a87b 0x28a binaries/doprnt.o + .debug_line 0x0000ab05 0x15a binaries/doscan.o + .debug_line 0x0000ac5f 0x22b binaries/fdoprnt.o + .debug_line 0x0000ae8a 0x41 binaries/fgetc.o + .debug_line 0x0000aecb 0x56 binaries/fgets.o + .debug_line 0x0000af21 0x23a binaries/fprintf.o + .debug_line 0x0000b15b 0x41 binaries/fputc.o + .debug_line 0x0000b19c 0x43 binaries/fputs.o + .debug_line 0x0000b1df 0x4f binaries/fscanf.o + .debug_line 0x0000b22e 0x21d binaries/getchar.o + .debug_line 0x0000b44b 0x3e binaries/labs.o + .debug_line 0x0000b489 0x44 binaries/memchr.o + .debug_line 0x0000b4cd 0x46 binaries/memcmp.o + .debug_line 0x0000b513 0x4c binaries/memcpy.o + .debug_line 0x0000b55f 0x4c binaries/memset.o + .debug_line 0x0000b5ab 0x23a binaries/printf.o + .debug_line 0x0000b7e5 0x21d binaries/putchar.o + .debug_line 0x0000ba02 0xab binaries/qsort.o + .debug_line 0x0000baad 0x41 binaries/rand.o + .debug_line 0x0000baee 0x70 binaries/sprintf.o + .debug_line 0x0000bb5e 0x4b binaries/sscanf.o + .debug_line 0x0000bba9 0x45 binaries/strchr.o + .debug_line 0x0000bbee 0x4a binaries/strcmp.o + .debug_line 0x0000bc38 0x45 binaries/strcpy.o + .debug_line 0x0000bc7d 0x45 binaries/strlen.o + .debug_line 0x0000bcc2 0x53 binaries/strncat.o + .debug_line 0x0000bd15 0x51 binaries/strncmp.o + .debug_line 0x0000bd66 0x50 binaries/strncpy.o + .debug_line 0x0000bdb6 0x4d binaries/strnlen.o + .debug_line 0x0000be03 0x49 binaries/strrchr.o + .debug_line 0x0000be4c 0x60 binaries/strstr.o + .debug_line 0x0000beac 0x23b binaries/ttycontrol.o + .debug_line 0x0000c0e7 0x23b binaries/ttygetc.o + .debug_line 0x0000c322 0x2c5 binaries/ttyhandle_in.o + .debug_line 0x0000c5e7 0x274 binaries/ttyhandle_out.o + .debug_line 0x0000c85b 0x23f binaries/ttyhandler.o + .debug_line 0x0000ca9a 0x24b binaries/ttyinit.o + .debug_line 0x0000cce5 0x228 binaries/ttykickout.o + .debug_line 0x0000cf0d 0x234 binaries/ttyputc.o + .debug_line 0x0000d141 0x253 binaries/ttyread.o + .debug_line 0x0000d394 0x23c binaries/ttywrite.o + .debug_line 0x0000d5d0 0x25d binaries/mount.o + .debug_line 0x0000d82d 0x25e binaries/naminit.o + .debug_line 0x0000da8b 0x283 binaries/nammap.o + .debug_line 0x0000dd0e 0x229 binaries/namopen.o + .debug_line 0x0000df37 0x226 binaries/ramclose.o + .debug_line 0x0000e15d 0x234 binaries/raminit.o + .debug_line 0x0000e391 0x225 binaries/ramopen.o + .debug_line 0x0000e5b6 0x233 binaries/ramread.o + .debug_line 0x0000e7e9 0x234 binaries/ramwrite.o + .debug_line 0x0000ea1d 0x231 binaries/lfdballoc.o + .debug_line 0x0000ec4e 0x22a binaries/lfdbfree.o + .debug_line 0x0000ee78 0x236 binaries/lfflush.o + .debug_line 0x0000f0ae 0x24c binaries/lfgetmode.o + .debug_line 0x0000f2fa 0x22e binaries/lfiballoc.o + .debug_line 0x0000f528 0x236 binaries/lfibclear.o + .debug_line 0x0000f75e 0x231 binaries/lfibget.o + .debug_line 0x0000f98f 0x237 binaries/lfibput.o + .debug_line 0x0000fbc6 0x237 binaries/lflclose.o + .debug_line 0x0000fdfd 0x236 binaries/lflcontrol.o + .debug_line 0x00010033 0x233 binaries/lflgetc.o + .debug_line 0x00010266 0x23f binaries/lflinit.o + .debug_line 0x000104a5 0x238 binaries/lflputc.o + .debug_line 0x000106dd 0x23f binaries/lflread.o + .debug_line 0x0001091c 0x231 binaries/lflseek.o + .debug_line 0x00010b4d 0x232 binaries/lflwrite.o + .debug_line 0x00010d7f 0x24e binaries/lfsckfmt.o + .debug_line 0x00010fcd 0x277 binaries/lfscreate.o + .debug_line 0x00011244 0x26a binaries/lfsetup.o + .debug_line 0x000114ae 0x229 binaries/lfsinit.o + .debug_line 0x000116d7 0x28b binaries/lfsopen.o + .debug_line 0x00011962 0x254 binaries/lftruncate.o + .debug_line 0x00011bb6 0x7c binaries/kprintf.o + .debug_line 0x00011c32 0x244 binaries/kvprintf.o + .debug_line 0x00011e76 0x23d binaries/uartControl.o + .debug_line 0x000120b3 0x22b binaries/uartGetc.o + .debug_line 0x000122de 0x247 binaries/uartInit.o + .debug_line 0x00012525 0x22b binaries/uartPutc.o + .debug_line 0x00012750 0x24b binaries/uartRead.o + .debug_line 0x0001299b 0x234 binaries/uartStat.o + .debug_line 0x00012bcf 0x24f binaries/uartWrite.o + .debug_line 0x00012e1e 0x241 binaries/kgetc.o + .debug_line 0x0001305f 0x241 binaries/kputc.o + .debug_line 0x000132a0 0x251 binaries/uartHwInit.o + .debug_line 0x000134f1 0x23a binaries/uartHwPutc.o + .debug_line 0x0001372b 0x241 binaries/uartHwStat.o + .debug_line 0x0001396c 0x27f binaries/uartInterrupt.o + .debug_line 0x00013beb 0x3f binaries/Doxygroup.o + .debug_line 0x00013c2a 0x252 binaries/loopbackClose.o + .debug_line 0x00013e7c 0x24f binaries/loopbackControl.o + .debug_line 0x000140cb 0x248 binaries/loopbackGetc.o + .debug_line 0x00014313 0x24c binaries/loopbackInit.o + .debug_line 0x0001455f 0x256 binaries/loopbackOpen.o + .debug_line 0x000147b5 0x248 binaries/loopbackPutc.o + .debug_line 0x000149fd 0x255 binaries/loopbackRead.o + .debug_line 0x00014c52 0x255 binaries/loopbackWrite.o + .debug_line 0x00014ea7 0x259 binaries/addargs.o + .debug_line 0x00015100 0x299 binaries/lexan.o + .debug_line 0x00015399 0x324 binaries/shell.o + .debug_line 0x000156bd 0x234 binaries/xsh_argecho.o + .debug_line 0x000158f1 0x26a binaries/xsh_cat.o + .debug_line 0x00015b5b 0x228 binaries/xsh_clear.o + .debug_line 0x00015d83 0x252 binaries/xsh_date.o + .debug_line 0x00015fd5 0x238 binaries/xsh_devdump.o + .debug_line 0x0001620d 0x232 binaries/xsh_echo.o + .debug_line 0x0001643f 0x221 binaries/xsh_exit.o + .debug_line 0x00016660 0x285 binaries/xsh_help.o + .debug_line 0x000168e5 0x258 binaries/xsh_kill.o + .debug_line 0x00016b3d 0x253 binaries/xsh_led.o + .debug_line 0x00016d90 0x2bd binaries/xsh_memdump.o + .debug_line 0x0001704d 0x262 binaries/xsh_memstat.o + .debug_line 0x000172af 0x226 binaries/xsh_mmu.o + .debug_line 0x000174d5 0x240 binaries/xsh_ps.o + .debug_line 0x00017715 0x253 binaries/xsh_sleep.o + .debug_line 0x00017968 0x24a binaries/xsh_uptime.o + .debug_line 0x00017bb2 0x22a binaries/consume.o + .debug_line 0x00017ddc 0x22a binaries/produce.o + .debug_line 0x00018006 0x4a binaries/ctxsw.o + .debug_line 0x00018050 0x86 binaries/intr.o + .debug_line 0x000180d6 0x54 binaries/irq_handler.o + .debug_line 0x0001812a 0x4c binaries/memory_barrier.o + .debug_line 0x00018176 0x4f binaries/page_fault.o + +.debug_info 0x00000000 0x21301 + .debug_info 0x00000000 0x80 binaries/start.o + .debug_info 0x00000080 0x309 binaries/ascdate.o + .debug_info 0x00000389 0x11e binaries/bufinit.o + .debug_info 0x000004a7 0x24e binaries/chprio.o + .debug_info 0x000006f5 0x1f4 binaries/clkhandler.o + .debug_info 0x000008e9 0x261 binaries/clkinit.o + .debug_info 0x00000b4a 0x2fb binaries/close.o + .debug_info 0x00000e45 0x22f binaries/conf.o + .debug_info 0x00001074 0x33a binaries/control.o + .debug_info 0x000013ae 0x373 binaries/create.o + .debug_info 0x00001721 0x34e binaries/evec.o + .debug_info 0x00001a6f 0xce binaries/exit.o + .debug_info 0x00001b3d 0x1c4 binaries/freebuf.o + .debug_info 0x00001d01 0x1a9 binaries/freemem.o + .debug_info 0x00001eaa 0x1c4 binaries/getbuf.o + .debug_info 0x0000206e 0x2fb binaries/getc.o + .debug_info 0x00002369 0x312 binaries/getdev.o + .debug_info 0x0000267b 0x1c1 binaries/getitem.o + .debug_info 0x0000283c 0x166 binaries/getmem.o + .debug_info 0x000029a2 0x9f binaries/getpid.o + .debug_info 0x00002a41 0x239 binaries/getprio.o + .debug_info 0x00002c7a 0x16c binaries/getstk.o + .debug_info 0x00002de6 0x12f binaries/gettime.o + .debug_info 0x00002f15 0x2fb binaries/init.o + .debug_info 0x00003210 0x7b7 binaries/initialize.o + .debug_info 0x000039c7 0x262 binaries/insert.o + .debug_info 0x00003c29 0x264 binaries/insertd.o + .debug_info 0x00003e8d 0x94 binaries/ioerr.o + .debug_info 0x00003f21 0x94 binaries/ionull.o + .debug_info 0x00003fb5 0x3d0 binaries/kill.o + .debug_info 0x00004385 0x298 binaries/main.o + .debug_info 0x0000461d 0x17c binaries/mark.o + .debug_info 0x00004799 0xfa binaries/meminit.o + .debug_info 0x00004893 0x233 binaries/mkbufpool.o + .debug_info 0x00004ac6 0x1e9 binaries/mmu.o + .debug_info 0x00004caf 0x10b binaries/newqueue.o + .debug_info 0x00004dba 0x325 binaries/open.o + .debug_info 0x000050df 0xf5 binaries/panic.o + .debug_info 0x000051d4 0x2c5 binaries/pl190.o + .debug_info 0x00005499 0x33e binaries/platinit.o + .debug_info 0x000057d7 0x200 binaries/ptclear.o + .debug_info 0x000059d7 0x226 binaries/ptcount.o + .debug_info 0x00005bfd 0x256 binaries/ptcreate.o + .debug_info 0x00005e53 0x251 binaries/ptdelete.o + .debug_info 0x000060a4 0x213 binaries/ptinit.o + .debug_info 0x000062b7 0x273 binaries/ptrecv.o + .debug_info 0x0000652a 0x239 binaries/ptreset.o + .debug_info 0x00006763 0x2b1 binaries/ptsend.o + .debug_info 0x00006a14 0x30f binaries/putc.o + .debug_info 0x00006d23 0x2a6 binaries/queue.o + .debug_info 0x00006fc9 0x325 binaries/read.o + .debug_info 0x000072ee 0x24e binaries/ready.o + .debug_info 0x0000753c 0x246 binaries/receive.o + .debug_info 0x00007782 0x230 binaries/recvclr.o + .debug_info 0x000079b2 0x2c5 binaries/recvtime.o + .debug_info 0x00007c77 0x34a binaries/resched.o + .debug_info 0x00007fc1 0x28f binaries/resume.o + .debug_info 0x00008250 0x310 binaries/seek.o + .debug_info 0x00008560 0x181 binaries/semcount.o + .debug_info 0x000086e1 0x1db binaries/semcreate.o + .debug_info 0x000088bc 0x231 binaries/semdelete.o + .debug_info 0x00008aed 0x260 binaries/semreset.o + .debug_info 0x00008d4d 0x2d8 binaries/send.o + .debug_info 0x00009025 0x212 binaries/signal.o + .debug_info 0x00009237 0x25b binaries/signaln.o + .debug_info 0x00009492 0x313 binaries/sleep.o + .debug_info 0x000097a5 0x178 binaries/sp804.o + .debug_info 0x0000991d 0x2b8 binaries/suspend.o + .debug_info 0x00009bd5 0x18e binaries/udelay.o + .debug_info 0x00009d63 0x2f0 binaries/unsleep.o + .debug_info 0x0000a053 0xce binaries/userret.o + .debug_info 0x0000a121 0x300 binaries/wait.o + .debug_info 0x0000a421 0x194 binaries/wakeup.o + .debug_info 0x0000a5b5 0x325 binaries/write.o + .debug_info 0x0000a8da 0xc8 binaries/xdone.o + .debug_info 0x0000a9a2 0x101 binaries/yield.o + .debug_info 0x0000aaa3 0x5a binaries/abs.o + .debug_info 0x0000aafd 0x7f binaries/atoi.o + .debug_info 0x0000ab7c 0x86 binaries/atol.o + .debug_info 0x0000ac02 0x8a binaries/bzero.o + .debug_info 0x0000ac8c 0x56 binaries/ctype_.o + .debug_info 0x0000ace2 0x53e binaries/doprnt.o + .debug_info 0x0000b220 0x5d5 binaries/doscan.o + .debug_info 0x0000b7f5 0x513 binaries/fdoprnt.o + .debug_info 0x0000bd08 0x8b binaries/fgetc.o + .debug_info 0x0000bd93 0xbd binaries/fgets.o + .debug_info 0x0000be50 0x167 binaries/fprintf.o + .debug_info 0x0000bfb7 0x9f binaries/fputc.o + .debug_info 0x0000c056 0xb4 binaries/fputs.o + .debug_info 0x0000c10a 0x1cb binaries/fscanf.o + .debug_info 0x0000c2d5 0x1e3 binaries/getchar.o + .debug_info 0x0000c4b8 0x5a binaries/labs.o + .debug_info 0x0000c512 0x97 binaries/memchr.o + .debug_info 0x0000c5a9 0xa9 binaries/memcmp.o + .debug_info 0x0000c652 0xaf binaries/memcpy.o + .debug_info 0x0000c701 0x98 binaries/memset.o + .debug_info 0x0000c799 0x291 binaries/printf.o + .debug_info 0x0000ca2a 0x1fd binaries/putchar.o + .debug_info 0x0000cc27 0x367 binaries/qsort.o + .debug_info 0x0000cf8e 0x78 binaries/rand.o + .debug_info 0x0000d006 0x165 binaries/sprintf.o + .debug_info 0x0000d16b 0x189 binaries/sscanf.o + .debug_info 0x0000d2f4 0x7d binaries/strchr.o + .debug_info 0x0000d371 0x76 binaries/strcmp.o + .debug_info 0x0000d3e7 0x78 binaries/strcpy.o + .debug_info 0x0000d45f 0x76 binaries/strlen.o + .debug_info 0x0000d4d5 0x99 binaries/strncat.o + .debug_info 0x0000d56e 0x81 binaries/strncmp.o + .debug_info 0x0000d5ef 0xa6 binaries/strncpy.o + .debug_info 0x0000d695 0x8b binaries/strnlen.o + .debug_info 0x0000d720 0x8a binaries/strrchr.o + .debug_info 0x0000d7aa 0x92 binaries/strstr.o + .debug_info 0x0000d83c 0x4ca binaries/ttycontrol.o + .debug_info 0x0000dd06 0x45f binaries/ttygetc.o + .debug_info 0x0000e165 0x82d binaries/ttyhandle_in.o + .debug_info 0x0000e992 0x478 binaries/ttyhandle_out.o + .debug_info 0x0000ee0a 0x660 binaries/ttyhandler.o + .debug_info 0x0000f46a 0x60b binaries/ttyinit.o + .debug_info 0x0000fa75 0x1e1 binaries/ttykickout.o + .debug_info 0x0000fc56 0x5e1 binaries/ttyputc.o + .debug_info 0x00010237 0x4ef binaries/ttyread.o + .debug_info 0x00010726 0x284 binaries/ttywrite.o + .debug_info 0x000109aa 0x26b binaries/mount.o + .debug_info 0x00010c15 0x51c binaries/naminit.o + .debug_info 0x00011131 0x36f binaries/nammap.o + .debug_info 0x000114a0 0x30e binaries/namopen.o + .debug_info 0x000117ae 0x23b binaries/ramclose.o + .debug_info 0x000119e9 0x2e7 binaries/raminit.o + .debug_info 0x00011cd0 0x255 binaries/ramopen.o + .debug_info 0x00011f25 0x2ee binaries/ramread.o + .debug_info 0x00012213 0x2ee binaries/ramwrite.o + .debug_info 0x00012501 0x34e binaries/lfdballoc.o + .debug_info 0x0001284f 0x2c7 binaries/lfdbfree.o + .debug_info 0x00012b16 0x3a3 binaries/lfflush.o + .debug_info 0x00012eb9 0xbc binaries/lfgetmode.o + .debug_info 0x00012f75 0x2e3 binaries/lfiballoc.o + .debug_info 0x00013258 0x11b binaries/lfibclear.o + .debug_info 0x00013373 0x1bb binaries/lfibget.o + .debug_info 0x0001352e 0x21b binaries/lfibput.o + .debug_info 0x00013749 0x535 binaries/lflclose.o + .debug_info 0x00013c7e 0x5da binaries/lflcontrol.o + .debug_info 0x00014258 0x499 binaries/lflgetc.o + .debug_info 0x000146f1 0x495 binaries/lflinit.o + .debug_info 0x00014b86 0x55c binaries/lflputc.o + .debug_info 0x000150e2 0x29c binaries/lflread.o + .debug_info 0x0001537e 0x457 binaries/lflseek.o + .debug_info 0x000157d5 0x290 binaries/lflwrite.o + .debug_info 0x00015a65 0x433 binaries/lfsckfmt.o + .debug_info 0x00015e98 0x458 binaries/lfscreate.o + .debug_info 0x000162f0 0x581 binaries/lfsetup.o + .debug_info 0x00016871 0x3e9 binaries/lfsinit.o + .debug_info 0x00016c5a 0x63f binaries/lfsopen.o + .debug_info 0x00017299 0x434 binaries/lftruncate.o + .debug_info 0x000176cd 0x118 binaries/kprintf.o + .debug_info 0x000177e5 0x326 binaries/kvprintf.o + .debug_info 0x00017b0b 0x3c3 binaries/uartControl.o + .debug_info 0x00017ece 0x292 binaries/uartGetc.o + .debug_info 0x00018160 0x42b binaries/uartInit.o + .debug_info 0x0001858b 0x29e binaries/uartPutc.o + .debug_info 0x00018829 0x466 binaries/uartRead.o + .debug_info 0x00018c8f 0x495 binaries/uartStat.o + .debug_info 0x00019124 0x487 binaries/uartWrite.o + .debug_info 0x000195ab 0x4a4 binaries/kgetc.o + .debug_info 0x00019a4f 0x4a2 binaries/kputc.o + .debug_info 0x00019ef1 0x4f1 binaries/uartHwInit.o + .debug_info 0x0001a3e2 0x198 binaries/uartHwPutc.o + .debug_info 0x0001a57a 0x246 binaries/uartHwStat.o + .debug_info 0x0001a7c0 0x50d binaries/uartInterrupt.o + .debug_info 0x0001accd 0x21 binaries/Doxygroup.o + .debug_info 0x0001acee 0x357 binaries/loopbackClose.o + .debug_info 0x0001b045 0x311 binaries/loopbackControl.o + .debug_info 0x0001b356 0x384 binaries/loopbackGetc.o + .debug_info 0x0001b6da 0x2db binaries/loopbackInit.o + .debug_info 0x0001b9b5 0x39b binaries/loopbackOpen.o + .debug_info 0x0001bd50 0x39a binaries/loopbackPutc.o + .debug_info 0x0001c0ea 0x340 binaries/loopbackRead.o + .debug_info 0x0001c42a 0x342 binaries/loopbackWrite.o + .debug_info 0x0001c76c 0x354 binaries/addargs.o + .debug_info 0x0001cac0 0x143 binaries/lexan.o + .debug_info 0x0001cc03 0x935 binaries/shell.o + .debug_info 0x0001d538 0x13b binaries/xsh_argecho.o + .debug_info 0x0001d673 0x442 binaries/xsh_cat.o + .debug_info 0x0001dab5 0x25e binaries/xsh_clear.o + .debug_info 0x0001dd13 0x56c binaries/xsh_date.o + .debug_info 0x0001e27f 0x447 binaries/xsh_devdump.o + .debug_info 0x0001e6c6 0x12f binaries/xsh_echo.o + .debug_info 0x0001e7f5 0xbd binaries/xsh_exit.o + .debug_info 0x0001e8b2 0x553 binaries/xsh_help.o + .debug_info 0x0001ee05 0x3d9 binaries/xsh_kill.o + .debug_info 0x0001f1de 0x4a7 binaries/xsh_led.o + .debug_info 0x0001f685 0x571 binaries/xsh_memdump.o + .debug_info 0x0001fbf6 0x547 binaries/xsh_memstat.o + .debug_info 0x0002013d 0x237 binaries/xsh_mmu.o + .debug_info 0x00020374 0x42a binaries/xsh_ps.o + .debug_info 0x0002079e 0x3a7 binaries/xsh_sleep.o + .debug_info 0x00020b45 0x419 binaries/xsh_uptime.o + .debug_info 0x00020f5e 0x88 binaries/consume.o + .debug_info 0x00020fe6 0x88 binaries/produce.o + .debug_info 0x0002106e 0x80 binaries/ctxsw.o + .debug_info 0x000210ee 0x7f binaries/intr.o + .debug_info 0x0002116d 0x86 binaries/irq_handler.o + .debug_info 0x000211f3 0x89 binaries/memory_barrier.o + .debug_info 0x0002127c 0x85 binaries/page_fault.o + +.debug_abbrev 0x00000000 0xd346 + .debug_abbrev 0x00000000 0x14 binaries/start.o + .debug_abbrev 0x00000014 0x112 binaries/ascdate.o + .debug_abbrev 0x00000126 0x9e binaries/bufinit.o + .debug_abbrev 0x000001c4 0x108 binaries/chprio.o + .debug_abbrev 0x000002cc 0xef binaries/clkhandler.o + .debug_abbrev 0x000003bb 0x132 binaries/clkinit.o + .debug_abbrev 0x000004ed 0x138 binaries/close.o + .debug_abbrev 0x00000625 0xa0 binaries/conf.o + .debug_abbrev 0x000006c5 0x138 binaries/control.o + .debug_abbrev 0x000007fd 0x1b5 binaries/create.o + .debug_abbrev 0x000009b2 0x138 binaries/evec.o + .debug_abbrev 0x00000aea 0x8c binaries/exit.o + .debug_abbrev 0x00000b76 0x129 binaries/freebuf.o + .debug_abbrev 0x00000c9f 0xf8 binaries/freemem.o + .debug_abbrev 0x00000d97 0x129 binaries/getbuf.o + .debug_abbrev 0x00000ec0 0x138 binaries/getc.o + .debug_abbrev 0x00000ff8 0x158 binaries/getdev.o + .debug_abbrev 0x00001150 0xe3 binaries/getitem.o + .debug_abbrev 0x00001233 0xe2 binaries/getmem.o + .debug_abbrev 0x00001315 0x65 binaries/getpid.o + .debug_abbrev 0x0000137a 0x108 binaries/getprio.o + .debug_abbrev 0x00001482 0xe2 binaries/getstk.o + .debug_abbrev 0x00001564 0xdc binaries/gettime.o + .debug_abbrev 0x00001640 0x138 binaries/init.o + .debug_abbrev 0x00001778 0x224 binaries/initialize.o + .debug_abbrev 0x0000199c 0xd2 binaries/insert.o + .debug_abbrev 0x00001a6e 0xc3 binaries/insertd.o + .debug_abbrev 0x00001b31 0x54 binaries/ioerr.o + .debug_abbrev 0x00001b85 0x54 binaries/ionull.o + .debug_abbrev 0x00001bd9 0x19f binaries/kill.o + .debug_abbrev 0x00001d78 0x148 binaries/main.o + .debug_abbrev 0x00001ec0 0xfc binaries/mark.o + .debug_abbrev 0x00001fbc 0xc2 binaries/meminit.o + .debug_abbrev 0x0000207e 0x14d binaries/mkbufpool.o + .debug_abbrev 0x000021cb 0x140 binaries/mmu.o + .debug_abbrev 0x0000230b 0xb1 binaries/newqueue.o + .debug_abbrev 0x000023bc 0x138 binaries/open.o + .debug_abbrev 0x000024f4 0xca binaries/panic.o + .debug_abbrev 0x000025be 0x128 binaries/pl190.o + .debug_abbrev 0x000026e6 0x1a0 binaries/platinit.o + .debug_abbrev 0x00002886 0x108 binaries/ptclear.o + .debug_abbrev 0x0000298e 0x129 binaries/ptcount.o + .debug_abbrev 0x00002ab7 0x147 binaries/ptcreate.o + .debug_abbrev 0x00002bfe 0x132 binaries/ptdelete.o + .debug_abbrev 0x00002d30 0x11e binaries/ptinit.o + .debug_abbrev 0x00002e4e 0x15c binaries/ptrecv.o + .debug_abbrev 0x00002faa 0x132 binaries/ptreset.o + .debug_abbrev 0x000030dc 0x15c binaries/ptsend.o + .debug_abbrev 0x00003238 0x147 binaries/putc.o + .debug_abbrev 0x0000337f 0x111 binaries/queue.o + .debug_abbrev 0x00003490 0x138 binaries/read.o + .debug_abbrev 0x000035c8 0x125 binaries/ready.o + .debug_abbrev 0x000036ed 0x130 binaries/receive.o + .debug_abbrev 0x0000381d 0xf9 binaries/recvclr.o + .debug_abbrev 0x00003916 0x154 binaries/recvtime.o + .debug_abbrev 0x00003a6a 0x16b binaries/resched.o + .debug_abbrev 0x00003bd5 0x132 binaries/resume.o + .debug_abbrev 0x00003d07 0x147 binaries/seek.o + .debug_abbrev 0x00003e4e 0xf6 binaries/semcount.o + .debug_abbrev 0x00003f44 0x13e binaries/semcreate.o + .debug_abbrev 0x00004082 0x162 binaries/semdelete.o + .debug_abbrev 0x000041e4 0x16b binaries/semreset.o + .debug_abbrev 0x0000434f 0x147 binaries/send.o + .debug_abbrev 0x00004496 0x14c binaries/signal.o + .debug_abbrev 0x000045e2 0x17f binaries/signaln.o + .debug_abbrev 0x00004761 0x158 binaries/sleep.o + .debug_abbrev 0x000048b9 0xf8 binaries/sp804.o + .debug_abbrev 0x000049b1 0x162 binaries/suspend.o + .debug_abbrev 0x00004b13 0xcb binaries/udelay.o + .debug_abbrev 0x00004bde 0x157 binaries/unsleep.o + .debug_abbrev 0x00004d35 0x8c binaries/userret.o + .debug_abbrev 0x00004dc1 0x145 binaries/wait.o + .debug_abbrev 0x00004f06 0x112 binaries/wakeup.o + .debug_abbrev 0x00005018 0x138 binaries/write.o + .debug_abbrev 0x00005150 0x94 binaries/xdone.o + .debug_abbrev 0x000051e4 0xc3 binaries/yield.o + .debug_abbrev 0x000052a7 0x4d binaries/abs.o + .debug_abbrev 0x000052f4 0x70 binaries/atoi.o + .debug_abbrev 0x00005364 0x70 binaries/atol.o + .debug_abbrev 0x000053d4 0x93 binaries/bzero.o + .debug_abbrev 0x00005467 0x48 binaries/ctype_.o + .debug_abbrev 0x000054af 0x1d5 binaries/doprnt.o + .debug_abbrev 0x00005684 0x213 binaries/doscan.o + .debug_abbrev 0x00005897 0x1c6 binaries/fdoprnt.o + .debug_abbrev 0x00005a5d 0x8d binaries/fgetc.o + .debug_abbrev 0x00005aea 0xa1 binaries/fgets.o + .debug_abbrev 0x00005b8b 0x103 binaries/fprintf.o + .debug_abbrev 0x00005c8e 0x8b binaries/fputc.o + .debug_abbrev 0x00005d19 0xa1 binaries/fputs.o + .debug_abbrev 0x00005dba 0xf3 binaries/fscanf.o + .debug_abbrev 0x00005ead 0xca binaries/getchar.o + .debug_abbrev 0x00005f77 0x4d binaries/labs.o + .debug_abbrev 0x00005fc4 0x7c binaries/memchr.o + .debug_abbrev 0x00006040 0x7c binaries/memcmp.o + .debug_abbrev 0x000060bc 0x9a binaries/memcpy.o + .debug_abbrev 0x00006156 0x86 binaries/memset.o + .debug_abbrev 0x000061dc 0x132 binaries/printf.o + .debug_abbrev 0x0000630e 0xe5 binaries/putchar.o + .debug_abbrev 0x000063f3 0x108 binaries/qsort.o + .debug_abbrev 0x000064fb 0x74 binaries/rand.o + .debug_abbrev 0x0000656f 0x126 binaries/sprintf.o + .debug_abbrev 0x00006695 0xe4 binaries/sscanf.o + .debug_abbrev 0x00006779 0x68 binaries/strchr.o + .debug_abbrev 0x000067e1 0x61 binaries/strcmp.o + .debug_abbrev 0x00006842 0x61 binaries/strcpy.o + .debug_abbrev 0x000068a3 0x70 binaries/strlen.o + .debug_abbrev 0x00006913 0x77 binaries/strncat.o + .debug_abbrev 0x0000698a 0x61 binaries/strncmp.o + .debug_abbrev 0x000069eb 0x86 binaries/strncpy.o + .debug_abbrev 0x00006a71 0x86 binaries/strnlen.o + .debug_abbrev 0x00006af7 0x77 binaries/strrchr.o + .debug_abbrev 0x00006b6e 0x7b binaries/strstr.o + .debug_abbrev 0x00006be9 0x143 binaries/ttycontrol.o + .debug_abbrev 0x00006d2c 0x12e binaries/ttygetc.o + .debug_abbrev 0x00006e5a 0x1dd binaries/ttyhandle_in.o + .debug_abbrev 0x00007037 0x128 binaries/ttyhandle_out.o + .debug_abbrev 0x0000715f 0x19d binaries/ttyhandler.o + .debug_abbrev 0x000072fc 0x181 binaries/ttyinit.o + .debug_abbrev 0x0000747d 0xb2 binaries/ttykickout.o + .debug_abbrev 0x0000752f 0x172 binaries/ttyputc.o + .debug_abbrev 0x000076a1 0x167 binaries/ttyread.o + .debug_abbrev 0x00007808 0xd6 binaries/ttywrite.o + .debug_abbrev 0x000078de 0x13b binaries/mount.o + .debug_abbrev 0x00007a19 0x15b binaries/naminit.o + .debug_abbrev 0x00007b74 0x12e binaries/nammap.o + .debug_abbrev 0x00007ca2 0x128 binaries/namopen.o + .debug_abbrev 0x00007dca 0xaa binaries/ramclose.o + .debug_abbrev 0x00007e74 0x11c binaries/raminit.o + .debug_abbrev 0x00007f90 0xb9 binaries/ramopen.o + .debug_abbrev 0x00008049 0x12d binaries/ramread.o + .debug_abbrev 0x00008176 0x12d binaries/ramwrite.o + .debug_abbrev 0x000082a3 0x155 binaries/lfdballoc.o + .debug_abbrev 0x000083f8 0x130 binaries/lfdbfree.o + .debug_abbrev 0x00008528 0x12b binaries/lfflush.o + .debug_abbrev 0x00008653 0x8a binaries/lfgetmode.o + .debug_abbrev 0x000086dd 0x140 binaries/lfiballoc.o + .debug_abbrev 0x0000881d 0xba binaries/lfibclear.o + .debug_abbrev 0x000088d7 0x112 binaries/lfibget.o + .debug_abbrev 0x000089e9 0x127 binaries/lfibput.o + .debug_abbrev 0x00008b10 0x156 binaries/lflclose.o + .debug_abbrev 0x00008c66 0x186 binaries/lflcontrol.o + .debug_abbrev 0x00008dec 0x165 binaries/lflgetc.o + .debug_abbrev 0x00008f51 0x154 binaries/lflinit.o + .debug_abbrev 0x000090a5 0x174 binaries/lflputc.o + .debug_abbrev 0x00009219 0xe5 binaries/lflread.o + .debug_abbrev 0x000092fe 0x13d binaries/lflseek.o + .debug_abbrev 0x0000943b 0xe5 binaries/lflwrite.o + .debug_abbrev 0x00009520 0x170 binaries/lfsckfmt.o + .debug_abbrev 0x00009690 0x199 binaries/lfscreate.o + .debug_abbrev 0x00009829 0x173 binaries/lfsetup.o + .debug_abbrev 0x0000999c 0x12d binaries/lfsinit.o + .debug_abbrev 0x00009ac9 0x17d binaries/lfsopen.o + .debug_abbrev 0x00009c46 0x174 binaries/lftruncate.o + .debug_abbrev 0x00009dba 0xf6 binaries/kprintf.o + .debug_abbrev 0x00009eb0 0x177 binaries/kvprintf.o + .debug_abbrev 0x0000a027 0x135 binaries/uartControl.o + .debug_abbrev 0x0000a15c 0xf4 binaries/uartGetc.o + .debug_abbrev 0x0000a250 0x176 binaries/uartInit.o + .debug_abbrev 0x0000a3c6 0xfb binaries/uartPutc.o + .debug_abbrev 0x0000a4c1 0x1d0 binaries/uartRead.o + .debug_abbrev 0x0000a691 0x185 binaries/uartStat.o + .debug_abbrev 0x0000a816 0x1cf binaries/uartWrite.o + .debug_abbrev 0x0000a9e5 0x135 binaries/kgetc.o + .debug_abbrev 0x0000ab1a 0x135 binaries/kputc.o + .debug_abbrev 0x0000ac4f 0x188 binaries/uartHwInit.o + .debug_abbrev 0x0000add7 0xa9 binaries/uartHwPutc.o + .debug_abbrev 0x0000ae80 0x121 binaries/uartHwStat.o + .debug_abbrev 0x0000afa1 0x18b binaries/uartInterrupt.o + .debug_abbrev 0x0000b12c 0x13 binaries/Doxygroup.o + .debug_abbrev 0x0000b13f 0x178 binaries/loopbackClose.o + .debug_abbrev 0x0000b2b7 0x11f binaries/loopbackControl.o + .debug_abbrev 0x0000b3d6 0x18d binaries/loopbackGetc.o + .debug_abbrev 0x0000b563 0x105 binaries/loopbackInit.o + .debug_abbrev 0x0000b668 0x18b binaries/loopbackOpen.o + .debug_abbrev 0x0000b7f3 0x19c binaries/loopbackPutc.o + .debug_abbrev 0x0000b98f 0x149 binaries/loopbackRead.o + .debug_abbrev 0x0000bad8 0x155 binaries/loopbackWrite.o + .debug_abbrev 0x0000bc2d 0x17c binaries/addargs.o + .debug_abbrev 0x0000bda9 0xb9 binaries/lexan.o + .debug_abbrev 0x0000be62 0x1a0 binaries/shell.o + .debug_abbrev 0x0000c002 0xc9 binaries/xsh_argecho.o + .debug_abbrev 0x0000c0cb 0x151 binaries/xsh_cat.o + .debug_abbrev 0x0000c21c 0x100 binaries/xsh_clear.o + .debug_abbrev 0x0000c31c 0x140 binaries/xsh_date.o + .debug_abbrev 0x0000c45c 0x137 binaries/xsh_devdump.o + .debug_abbrev 0x0000c593 0xc9 binaries/xsh_echo.o + .debug_abbrev 0x0000c65c 0x7b binaries/xsh_exit.o + .debug_abbrev 0x0000c6d7 0x156 binaries/xsh_help.o + .debug_abbrev 0x0000c82d 0x131 binaries/xsh_kill.o + .debug_abbrev 0x0000c95e 0x129 binaries/xsh_led.o + .debug_abbrev 0x0000ca87 0x156 binaries/xsh_memdump.o + .debug_abbrev 0x0000cbdd 0x168 binaries/xsh_memstat.o + .debug_abbrev 0x0000cd45 0x126 binaries/xsh_mmu.o + .debug_abbrev 0x0000ce6b 0x140 binaries/xsh_ps.o + .debug_abbrev 0x0000cfab 0x131 binaries/xsh_sleep.o + .debug_abbrev 0x0000d0dc 0x15e binaries/xsh_uptime.o + .debug_abbrev 0x0000d23a 0x54 binaries/consume.o + .debug_abbrev 0x0000d28e 0x54 binaries/produce.o + .debug_abbrev 0x0000d2e2 0x14 binaries/ctxsw.o + .debug_abbrev 0x0000d2f6 0x14 binaries/intr.o + .debug_abbrev 0x0000d30a 0x14 binaries/irq_handler.o + .debug_abbrev 0x0000d31e 0x14 binaries/memory_barrier.o + .debug_abbrev 0x0000d332 0x14 binaries/page_fault.o + +.debug_aranges 0x00000000 0x1948 + .debug_aranges + 0x00000000 0x20 binaries/start.o + .debug_aranges + 0x00000020 0x20 binaries/ascdate.o + .debug_aranges + 0x00000040 0x20 binaries/bufinit.o + .debug_aranges + 0x00000060 0x20 binaries/chprio.o + .debug_aranges + 0x00000080 0x20 binaries/clkhandler.o + .debug_aranges + 0x000000a0 0x20 binaries/clkinit.o + .debug_aranges + 0x000000c0 0x20 binaries/close.o + .debug_aranges + 0x000000e0 0x18 binaries/conf.o + .debug_aranges + 0x000000f8 0x20 binaries/control.o + .debug_aranges + 0x00000118 0x20 binaries/create.o + .debug_aranges + 0x00000138 0x20 binaries/evec.o + .debug_aranges + 0x00000158 0x20 binaries/exit.o + .debug_aranges + 0x00000178 0x20 binaries/freebuf.o + .debug_aranges + 0x00000198 0x20 binaries/freemem.o + .debug_aranges + 0x000001b8 0x20 binaries/getbuf.o + .debug_aranges + 0x000001d8 0x20 binaries/getc.o + .debug_aranges + 0x000001f8 0x20 binaries/getdev.o + .debug_aranges + 0x00000218 0x20 binaries/getitem.o + .debug_aranges + 0x00000238 0x20 binaries/getmem.o + .debug_aranges + 0x00000258 0x20 binaries/getpid.o + .debug_aranges + 0x00000278 0x20 binaries/getprio.o + .debug_aranges + 0x00000298 0x20 binaries/getstk.o + .debug_aranges + 0x000002b8 0x20 binaries/gettime.o + .debug_aranges + 0x000002d8 0x20 binaries/init.o + .debug_aranges + 0x000002f8 0x20 binaries/initialize.o + .debug_aranges + 0x00000318 0x20 binaries/insert.o + .debug_aranges + 0x00000338 0x20 binaries/insertd.o + .debug_aranges + 0x00000358 0x20 binaries/ioerr.o + .debug_aranges + 0x00000378 0x20 binaries/ionull.o + .debug_aranges + 0x00000398 0x20 binaries/kill.o + .debug_aranges + 0x000003b8 0x20 binaries/main.o + .debug_aranges + 0x000003d8 0x20 binaries/mark.o + .debug_aranges + 0x000003f8 0x20 binaries/meminit.o + .debug_aranges + 0x00000418 0x20 binaries/mkbufpool.o + .debug_aranges + 0x00000438 0x20 binaries/mmu.o + .debug_aranges + 0x00000458 0x20 binaries/newqueue.o + .debug_aranges + 0x00000478 0x20 binaries/open.o + .debug_aranges + 0x00000498 0x20 binaries/panic.o + .debug_aranges + 0x000004b8 0x20 binaries/pl190.o + .debug_aranges + 0x000004d8 0x20 binaries/platinit.o + .debug_aranges + 0x000004f8 0x20 binaries/ptclear.o + .debug_aranges + 0x00000518 0x20 binaries/ptcount.o + .debug_aranges + 0x00000538 0x20 binaries/ptcreate.o + .debug_aranges + 0x00000558 0x20 binaries/ptdelete.o + .debug_aranges + 0x00000578 0x20 binaries/ptinit.o + .debug_aranges + 0x00000598 0x20 binaries/ptrecv.o + .debug_aranges + 0x000005b8 0x20 binaries/ptreset.o + .debug_aranges + 0x000005d8 0x20 binaries/ptsend.o + .debug_aranges + 0x000005f8 0x20 binaries/putc.o + .debug_aranges + 0x00000618 0x20 binaries/queue.o + .debug_aranges + 0x00000638 0x20 binaries/read.o + .debug_aranges + 0x00000658 0x20 binaries/ready.o + .debug_aranges + 0x00000678 0x20 binaries/receive.o + .debug_aranges + 0x00000698 0x20 binaries/recvclr.o + .debug_aranges + 0x000006b8 0x20 binaries/recvtime.o + .debug_aranges + 0x000006d8 0x20 binaries/resched.o + .debug_aranges + 0x000006f8 0x20 binaries/resume.o + .debug_aranges + 0x00000718 0x20 binaries/seek.o + .debug_aranges + 0x00000738 0x20 binaries/semcount.o + .debug_aranges + 0x00000758 0x20 binaries/semcreate.o + .debug_aranges + 0x00000778 0x20 binaries/semdelete.o + .debug_aranges + 0x00000798 0x20 binaries/semreset.o + .debug_aranges + 0x000007b8 0x20 binaries/send.o + .debug_aranges + 0x000007d8 0x20 binaries/signal.o + .debug_aranges + 0x000007f8 0x20 binaries/signaln.o + .debug_aranges + 0x00000818 0x20 binaries/sleep.o + .debug_aranges + 0x00000838 0x20 binaries/sp804.o + .debug_aranges + 0x00000858 0x20 binaries/suspend.o + .debug_aranges + 0x00000878 0x20 binaries/udelay.o + .debug_aranges + 0x00000898 0x20 binaries/unsleep.o + .debug_aranges + 0x000008b8 0x20 binaries/userret.o + .debug_aranges + 0x000008d8 0x20 binaries/wait.o + .debug_aranges + 0x000008f8 0x20 binaries/wakeup.o + .debug_aranges + 0x00000918 0x20 binaries/write.o + .debug_aranges + 0x00000938 0x20 binaries/xdone.o + .debug_aranges + 0x00000958 0x20 binaries/yield.o + .debug_aranges + 0x00000978 0x20 binaries/abs.o + .debug_aranges + 0x00000998 0x20 binaries/atoi.o + .debug_aranges + 0x000009b8 0x20 binaries/atol.o + .debug_aranges + 0x000009d8 0x20 binaries/bzero.o + .debug_aranges + 0x000009f8 0x18 binaries/ctype_.o + .debug_aranges + 0x00000a10 0x20 binaries/doprnt.o + .debug_aranges + 0x00000a30 0x20 binaries/doscan.o + .debug_aranges + 0x00000a50 0x20 binaries/fdoprnt.o + .debug_aranges + 0x00000a70 0x20 binaries/fgetc.o + .debug_aranges + 0x00000a90 0x20 binaries/fgets.o + .debug_aranges + 0x00000ab0 0x20 binaries/fprintf.o + .debug_aranges + 0x00000ad0 0x20 binaries/fputc.o + .debug_aranges + 0x00000af0 0x20 binaries/fputs.o + .debug_aranges + 0x00000b10 0x20 binaries/fscanf.o + .debug_aranges + 0x00000b30 0x20 binaries/getchar.o + .debug_aranges + 0x00000b50 0x20 binaries/labs.o + .debug_aranges + 0x00000b70 0x20 binaries/memchr.o + .debug_aranges + 0x00000b90 0x20 binaries/memcmp.o + .debug_aranges + 0x00000bb0 0x20 binaries/memcpy.o + .debug_aranges + 0x00000bd0 0x20 binaries/memset.o + .debug_aranges + 0x00000bf0 0x20 binaries/printf.o + .debug_aranges + 0x00000c10 0x20 binaries/putchar.o + .debug_aranges + 0x00000c30 0x20 binaries/qsort.o + .debug_aranges + 0x00000c50 0x20 binaries/rand.o + .debug_aranges + 0x00000c70 0x20 binaries/sprintf.o + .debug_aranges + 0x00000c90 0x20 binaries/sscanf.o + .debug_aranges + 0x00000cb0 0x20 binaries/strchr.o + .debug_aranges + 0x00000cd0 0x20 binaries/strcmp.o + .debug_aranges + 0x00000cf0 0x20 binaries/strcpy.o + .debug_aranges + 0x00000d10 0x20 binaries/strlen.o + .debug_aranges + 0x00000d30 0x20 binaries/strncat.o + .debug_aranges + 0x00000d50 0x20 binaries/strncmp.o + .debug_aranges + 0x00000d70 0x20 binaries/strncpy.o + .debug_aranges + 0x00000d90 0x20 binaries/strnlen.o + .debug_aranges + 0x00000db0 0x20 binaries/strrchr.o + .debug_aranges + 0x00000dd0 0x20 binaries/strstr.o + .debug_aranges + 0x00000df0 0x20 binaries/ttycontrol.o + .debug_aranges + 0x00000e10 0x20 binaries/ttygetc.o + .debug_aranges + 0x00000e30 0x20 binaries/ttyhandle_in.o + .debug_aranges + 0x00000e50 0x20 binaries/ttyhandle_out.o + .debug_aranges + 0x00000e70 0x20 binaries/ttyhandler.o + .debug_aranges + 0x00000e90 0x20 binaries/ttyinit.o + .debug_aranges + 0x00000eb0 0x20 binaries/ttykickout.o + .debug_aranges + 0x00000ed0 0x20 binaries/ttyputc.o + .debug_aranges + 0x00000ef0 0x20 binaries/ttyread.o + .debug_aranges + 0x00000f10 0x20 binaries/ttywrite.o + .debug_aranges + 0x00000f30 0x20 binaries/mount.o + .debug_aranges + 0x00000f50 0x20 binaries/naminit.o + .debug_aranges + 0x00000f70 0x20 binaries/nammap.o + .debug_aranges + 0x00000f90 0x20 binaries/namopen.o + .debug_aranges + 0x00000fb0 0x20 binaries/ramclose.o + .debug_aranges + 0x00000fd0 0x20 binaries/raminit.o + .debug_aranges + 0x00000ff0 0x20 binaries/ramopen.o + .debug_aranges + 0x00001010 0x20 binaries/ramread.o + .debug_aranges + 0x00001030 0x20 binaries/ramwrite.o + .debug_aranges + 0x00001050 0x20 binaries/lfdballoc.o + .debug_aranges + 0x00001070 0x20 binaries/lfdbfree.o + .debug_aranges + 0x00001090 0x20 binaries/lfflush.o + .debug_aranges + 0x000010b0 0x20 binaries/lfgetmode.o + .debug_aranges + 0x000010d0 0x20 binaries/lfiballoc.o + .debug_aranges + 0x000010f0 0x20 binaries/lfibclear.o + .debug_aranges + 0x00001110 0x20 binaries/lfibget.o + .debug_aranges + 0x00001130 0x20 binaries/lfibput.o + .debug_aranges + 0x00001150 0x20 binaries/lflclose.o + .debug_aranges + 0x00001170 0x20 binaries/lflcontrol.o + .debug_aranges + 0x00001190 0x20 binaries/lflgetc.o + .debug_aranges + 0x000011b0 0x20 binaries/lflinit.o + .debug_aranges + 0x000011d0 0x20 binaries/lflputc.o + .debug_aranges + 0x000011f0 0x20 binaries/lflread.o + .debug_aranges + 0x00001210 0x20 binaries/lflseek.o + .debug_aranges + 0x00001230 0x20 binaries/lflwrite.o + .debug_aranges + 0x00001250 0x20 binaries/lfsckfmt.o + .debug_aranges + 0x00001270 0x20 binaries/lfscreate.o + .debug_aranges + 0x00001290 0x20 binaries/lfsetup.o + .debug_aranges + 0x000012b0 0x20 binaries/lfsinit.o + .debug_aranges + 0x000012d0 0x20 binaries/lfsopen.o + .debug_aranges + 0x000012f0 0x20 binaries/lftruncate.o + .debug_aranges + 0x00001310 0x20 binaries/kprintf.o + .debug_aranges + 0x00001330 0x20 binaries/kvprintf.o + .debug_aranges + 0x00001350 0x20 binaries/uartControl.o + .debug_aranges + 0x00001370 0x20 binaries/uartGetc.o + .debug_aranges + 0x00001390 0x20 binaries/uartInit.o + .debug_aranges + 0x000013b0 0x20 binaries/uartPutc.o + .debug_aranges + 0x000013d0 0x20 binaries/uartRead.o + .debug_aranges + 0x000013f0 0x20 binaries/uartStat.o + .debug_aranges + 0x00001410 0x20 binaries/uartWrite.o + .debug_aranges + 0x00001430 0x20 binaries/kgetc.o + .debug_aranges + 0x00001450 0x20 binaries/kputc.o + .debug_aranges + 0x00001470 0x20 binaries/uartHwInit.o + .debug_aranges + 0x00001490 0x20 binaries/uartHwPutc.o + .debug_aranges + 0x000014b0 0x20 binaries/uartHwStat.o + .debug_aranges + 0x000014d0 0x20 binaries/uartInterrupt.o + .debug_aranges + 0x000014f0 0x18 binaries/Doxygroup.o + .debug_aranges + 0x00001508 0x20 binaries/loopbackClose.o + .debug_aranges + 0x00001528 0x20 binaries/loopbackControl.o + .debug_aranges + 0x00001548 0x20 binaries/loopbackGetc.o + .debug_aranges + 0x00001568 0x20 binaries/loopbackInit.o + .debug_aranges + 0x00001588 0x20 binaries/loopbackOpen.o + .debug_aranges + 0x000015a8 0x20 binaries/loopbackPutc.o + .debug_aranges + 0x000015c8 0x20 binaries/loopbackRead.o + .debug_aranges + 0x000015e8 0x20 binaries/loopbackWrite.o + .debug_aranges + 0x00001608 0x20 binaries/addargs.o + .debug_aranges + 0x00001628 0x20 binaries/lexan.o + .debug_aranges + 0x00001648 0x20 binaries/shell.o + .debug_aranges + 0x00001668 0x20 binaries/xsh_argecho.o + .debug_aranges + 0x00001688 0x20 binaries/xsh_cat.o + .debug_aranges + 0x000016a8 0x20 binaries/xsh_clear.o + .debug_aranges + 0x000016c8 0x20 binaries/xsh_date.o + .debug_aranges + 0x000016e8 0x20 binaries/xsh_devdump.o + .debug_aranges + 0x00001708 0x20 binaries/xsh_echo.o + .debug_aranges + 0x00001728 0x20 binaries/xsh_exit.o + .debug_aranges + 0x00001748 0x20 binaries/xsh_help.o + .debug_aranges + 0x00001768 0x20 binaries/xsh_kill.o + .debug_aranges + 0x00001788 0x20 binaries/xsh_led.o + .debug_aranges + 0x000017a8 0x20 binaries/xsh_memdump.o + .debug_aranges + 0x000017c8 0x20 binaries/xsh_memstat.o + .debug_aranges + 0x000017e8 0x20 binaries/xsh_mmu.o + .debug_aranges + 0x00001808 0x20 binaries/xsh_ps.o + .debug_aranges + 0x00001828 0x20 binaries/xsh_sleep.o + .debug_aranges + 0x00001848 0x20 binaries/xsh_uptime.o + .debug_aranges + 0x00001868 0x20 binaries/consume.o + .debug_aranges + 0x00001888 0x20 binaries/produce.o + .debug_aranges + 0x000018a8 0x20 binaries/ctxsw.o + .debug_aranges + 0x000018c8 0x20 binaries/intr.o + .debug_aranges + 0x000018e8 0x20 binaries/irq_handler.o + .debug_aranges + 0x00001908 0x20 binaries/memory_barrier.o + .debug_aranges + 0x00001928 0x20 binaries/page_fault.o + +.debug_loc 0x00000000 0xbe02 + .debug_loc 0x00000000 0x5c4 binaries/ascdate.o + .debug_loc 0x000005c4 0x9d binaries/chprio.o + .debug_loc 0x00000661 0xb2 binaries/close.o + .debug_loc 0x00000713 0x10c binaries/control.o + .debug_loc 0x0000081f 0x2dd binaries/create.o + .debug_loc 0x00000afc 0x107 binaries/evec.o + .debug_loc 0x00000c03 0xcf binaries/freebuf.o + .debug_loc 0x00000cd2 0x196 binaries/freemem.o + .debug_loc 0x00000e68 0x88 binaries/getbuf.o + .debug_loc 0x00000ef0 0xb2 binaries/getc.o + .debug_loc 0x00000fa2 0x5b binaries/getdev.o + .debug_loc 0x00000ffd 0xd8 binaries/getitem.o + .debug_loc 0x000010d5 0x16e binaries/getmem.o + .debug_loc 0x00001243 0x4a binaries/getprio.o + .debug_loc 0x0000128d 0x133 binaries/getstk.o + .debug_loc 0x000013c0 0x1e binaries/gettime.o + .debug_loc 0x000013de 0xb2 binaries/init.o + .debug_loc 0x00001490 0x122 binaries/initialize.o + .debug_loc 0x000015b2 0xd6 binaries/insert.o + .debug_loc 0x00001688 0x173 binaries/insertd.o + .debug_loc 0x000017fb 0xa8 binaries/kill.o + .debug_loc 0x000018a3 0x4a binaries/mark.o + .debug_loc 0x000018ed 0x184 binaries/mkbufpool.o + .debug_loc 0x00001a71 0xe6 binaries/mmu.o + .debug_loc 0x00001b57 0xee binaries/open.o + .debug_loc 0x00001c45 0x1e binaries/panic.o + .debug_loc 0x00001c63 0x73 binaries/pl190.o + .debug_loc 0x00001cd6 0x78 binaries/platinit.o + .debug_loc 0x00001d4e 0x7b binaries/ptclear.o + .debug_loc 0x00001dc9 0xbf binaries/ptcount.o + .debug_loc 0x00001e88 0xa5 binaries/ptcreate.o + .debug_loc 0x00001f2d 0x8c binaries/ptdelete.o + .debug_loc 0x00001fb9 0xbf binaries/ptinit.o + .debug_loc 0x00002078 0xa4 binaries/ptrecv.o + .debug_loc 0x0000211c 0x95 binaries/ptreset.o + .debug_loc 0x000021b1 0xac binaries/ptsend.o + .debug_loc 0x0000225d 0xd3 binaries/putc.o + .debug_loc 0x00002330 0x10e binaries/queue.o + .debug_loc 0x0000243e 0xee binaries/read.o + .debug_loc 0x0000252c 0x78 binaries/ready.o + .debug_loc 0x000025a4 0x1e binaries/receive.o + .debug_loc 0x000025c2 0x26 binaries/recvclr.o + .debug_loc 0x000025e8 0x86 binaries/recvtime.o + .debug_loc 0x0000266e 0xd7 binaries/resched.o + .debug_loc 0x00002745 0xcd binaries/resume.o + .debug_loc 0x00002812 0xd0 binaries/seek.o + .debug_loc 0x000028e2 0x4a binaries/semcount.o + .debug_loc 0x0000292c 0x9d binaries/semcreate.o + .debug_loc 0x000029c9 0x76 binaries/semdelete.o + .debug_loc 0x00002a3f 0xbb binaries/semreset.o + .debug_loc 0x00002afa 0x116 binaries/send.o + .debug_loc 0x00002c10 0xae binaries/signal.o + .debug_loc 0x00002cbe 0xac binaries/signaln.o + .debug_loc 0x00002d6a 0xb3 binaries/sleep.o + .debug_loc 0x00002e1d 0xab binaries/suspend.o + .debug_loc 0x00002ec8 0x9e binaries/udelay.o + .debug_loc 0x00002f66 0x7b binaries/unsleep.o + .debug_loc 0x00002fe1 0xc1 binaries/wait.o + .debug_loc 0x000030a2 0xee binaries/write.o + .debug_loc 0x00003190 0x1e binaries/yield.o + .debug_loc 0x000031ae 0x2c binaries/abs.o + .debug_loc 0x000031da 0xa4 binaries/atoi.o + .debug_loc 0x0000327e 0xa4 binaries/atol.o + .debug_loc 0x00003322 0x41 binaries/bzero.o + .debug_loc 0x00003363 0xf12 binaries/doprnt.o + .debug_loc 0x00004275 0xab9 binaries/doscan.o + .debug_loc 0x00004d2e 0xd2b binaries/fdoprnt.o + .debug_loc 0x00005a59 0x34 binaries/fgetc.o + .debug_loc 0x00005a8d 0xfe binaries/fgets.o + .debug_loc 0x00005b8b 0x2c binaries/fprintf.o + .debug_loc 0x00005bb7 0x4a binaries/fputc.o + .debug_loc 0x00005c01 0xd5 binaries/fputs.o + .debug_loc 0x00005cd6 0x102 binaries/fscanf.o + .debug_loc 0x00005dd8 0x2c binaries/labs.o + .debug_loc 0x00005e04 0xe3 binaries/memchr.o + .debug_loc 0x00005ee7 0x193 binaries/memcmp.o + .debug_loc 0x0000607a 0x8b binaries/memcpy.o + .debug_loc 0x00006105 0x53 binaries/memset.o + .debug_loc 0x00006158 0x21 binaries/putchar.o + .debug_loc 0x00006179 0x3a0 binaries/qsort.o + .debug_loc 0x00006519 0x6f binaries/sprintf.o + .debug_loc 0x00006588 0xd3 binaries/sscanf.o + .debug_loc 0x0000665b 0x57 binaries/strchr.o + .debug_loc 0x000066b2 0xc3 binaries/strcmp.o + .debug_loc 0x00006775 0x6a binaries/strlen.o + .debug_loc 0x000067df 0xc9 binaries/strncat.o + .debug_loc 0x000068a8 0xe8 binaries/strncmp.o + .debug_loc 0x00006990 0x123 binaries/strncpy.o + .debug_loc 0x00006ab3 0x6a binaries/strnlen.o + .debug_loc 0x00006b1d 0x6a binaries/strrchr.o + .debug_loc 0x00006b87 0xc6 binaries/strstr.o + .debug_loc 0x00006c4d 0x15f binaries/ttycontrol.o + .debug_loc 0x00006dac 0x40 binaries/ttygetc.o + .debug_loc 0x00006dec 0x25c binaries/ttyhandle_in.o + .debug_loc 0x00007048 0x154 binaries/ttyhandle_out.o + .debug_loc 0x0000719c 0xe9 binaries/ttyhandler.o + .debug_loc 0x00007285 0x31 binaries/ttyinit.o + .debug_loc 0x000072b6 0x3f binaries/ttyputc.o + .debug_loc 0x000072f5 0x248 binaries/ttyread.o + .debug_loc 0x0000753d 0xd0 binaries/ttywrite.o + .debug_loc 0x0000760d 0x1f9 binaries/mount.o + .debug_loc 0x00007806 0x19b binaries/naminit.o + .debug_loc 0x000079a1 0x5b2 binaries/nammap.o + .debug_loc 0x00007f53 0x89 binaries/namopen.o + .debug_loc 0x00007fdc 0x21 binaries/ramclose.o + .debug_loc 0x00007ffd 0x21 binaries/raminit.o + .debug_loc 0x0000801e 0x21 binaries/ramopen.o + .debug_loc 0x0000803f 0x95 binaries/ramread.o + .debug_loc 0x000080d4 0x8a binaries/ramwrite.o + .debug_loc 0x0000815e 0x31 binaries/lfdballoc.o + .debug_loc 0x0000818f 0x58 binaries/lfdbfree.o + .debug_loc 0x000081e7 0x34 binaries/lfflush.o + .debug_loc 0x0000821b 0x10c binaries/lfgetmode.o + .debug_loc 0x00008327 0x1e binaries/lfiballoc.o + .debug_loc 0x00008345 0x40 binaries/lfibclear.o + .debug_loc 0x00008385 0xb7 binaries/lfibget.o + .debug_loc 0x0000843c 0x104 binaries/lfibput.o + .debug_loc 0x00008540 0x21 binaries/lflclose.o + .debug_loc 0x00008561 0x9f binaries/lflcontrol.o + .debug_loc 0x00008600 0x41 binaries/lflgetc.o + .debug_loc 0x00008641 0x40 binaries/lflinit.o + .debug_loc 0x00008681 0x55 binaries/lflputc.o + .debug_loc 0x000086d6 0x15e binaries/lflread.o + .debug_loc 0x00008834 0x3f binaries/lflseek.o + .debug_loc 0x00008873 0xea binaries/lflwrite.o + .debug_loc 0x0000895d 0xe1 binaries/lfsckfmt.o + .debug_loc 0x00008a3e 0x2f8 binaries/lfscreate.o + .debug_loc 0x00008d36 0x14f binaries/lfsetup.o + .debug_loc 0x00008e85 0x21 binaries/lfsinit.o + .debug_loc 0x00008ea6 0x46c binaries/lfsopen.o + .debug_loc 0x00009312 0xaa binaries/lftruncate.o + .debug_loc 0x000093bc 0x78 binaries/kvprintf.o + .debug_loc 0x00009434 0x1ac binaries/uartControl.o + .debug_loc 0x000095e0 0x34 binaries/uartGetc.o + .debug_loc 0x00009614 0x1e binaries/uartInit.o + .debug_loc 0x00009632 0x5f binaries/uartPutc.o + .debug_loc 0x00009691 0xfd binaries/uartRead.o + .debug_loc 0x0000978e 0x21 binaries/uartStat.o + .debug_loc 0x000097af 0x134 binaries/uartWrite.o + .debug_loc 0x000098e3 0x34 binaries/kgetc.o + .debug_loc 0x00009917 0x21 binaries/kputc.o + .debug_loc 0x00009938 0x1e binaries/uartHwInit.o + .debug_loc 0x00009956 0x6d binaries/uartHwStat.o + .debug_loc 0x000099c3 0x5d binaries/uartInterrupt.o + .debug_loc 0x00009a20 0x55 binaries/loopbackClose.o + .debug_loc 0x00009a75 0x121 binaries/loopbackControl.o + .debug_loc 0x00009b96 0x70 binaries/loopbackGetc.o + .debug_loc 0x00009c06 0x50 binaries/loopbackInit.o + .debug_loc 0x00009c56 0x55 binaries/loopbackOpen.o + .debug_loc 0x00009cab 0x80 binaries/loopbackPutc.o + .debug_loc 0x00009d2b 0x174 binaries/loopbackRead.o + .debug_loc 0x00009e9f 0x177 binaries/loopbackWrite.o + .debug_loc 0x0000a016 0x1b1 binaries/addargs.o + .debug_loc 0x0000a1c7 0x3cb binaries/lexan.o + .debug_loc 0x0000a592 0x454 binaries/shell.o + .debug_loc 0x0000a9e6 0x76 binaries/xsh_argecho.o + .debug_loc 0x0000aa5c 0x16b binaries/xsh_cat.o + .debug_loc 0x0000abc7 0x7f binaries/xsh_clear.o + .debug_loc 0x0000ac46 0xc9 binaries/xsh_date.o + .debug_loc 0x0000ad0f 0xb6 binaries/xsh_devdump.o + .debug_loc 0x0000adc5 0x76 binaries/xsh_echo.o + .debug_loc 0x0000ae3b 0x21 binaries/xsh_exit.o + .debug_loc 0x0000ae5c 0x2a8 binaries/xsh_help.o + .debug_loc 0x0000b104 0x17e binaries/xsh_kill.o + .debug_loc 0x0000b282 0xd2 binaries/xsh_led.o + .debug_loc 0x0000b354 0x58c binaries/xsh_memdump.o + .debug_loc 0x0000b8e0 0x162 binaries/xsh_memstat.o + .debug_loc 0x0000ba42 0x42 binaries/xsh_mmu.o + .debug_loc 0x0000ba84 0xcc binaries/xsh_ps.o + .debug_loc 0x0000bb50 0x19a binaries/xsh_sleep.o + .debug_loc 0x0000bcea 0x118 binaries/xsh_uptime.o + +.debug_macro 0x00000000 0x112e0 + .debug_macro 0x00000000 0x188 binaries/ascdate.o + .debug_macro 0x00000188 0x838 binaries/ascdate.o + .debug_macro 0x000009c0 0x58 binaries/ascdate.o + .debug_macro 0x00000a18 0xb2 binaries/ascdate.o + .debug_macro 0x00000aca 0x6a binaries/ascdate.o + .debug_macro 0x00000b34 0x52 binaries/ascdate.o + .debug_macro 0x00000b86 0x10 binaries/ascdate.o + .debug_macro 0x00000b96 0x16 binaries/ascdate.o + .debug_macro 0x00000bac 0x1c binaries/ascdate.o + .debug_macro 0x00000bc8 0x1c binaries/ascdate.o + .debug_macro 0x00000be4 0x10 binaries/ascdate.o + .debug_macro 0x00000bf4 0x28 binaries/ascdate.o + .debug_macro 0x00000c1c 0x1c1 binaries/ascdate.o + .debug_macro 0x00000ddd 0xa0 binaries/ascdate.o + .debug_macro 0x00000e7d 0x10 binaries/ascdate.o + .debug_macro 0x00000e8d 0x22 binaries/ascdate.o + .debug_macro 0x00000eaf 0x46 binaries/ascdate.o + .debug_macro 0x00000ef5 0xfa binaries/ascdate.o + .debug_macro 0x00000fef 0xdd binaries/ascdate.o + .debug_macro 0x000010cc 0x91 binaries/ascdate.o + .debug_macro 0x0000115d 0x8e binaries/ascdate.o + .debug_macro 0x000011eb 0x82 binaries/ascdate.o + .debug_macro 0x0000126d 0x2e binaries/ascdate.o + .debug_macro 0x0000129b 0x3a binaries/ascdate.o + .debug_macro 0x000012d5 0x4c binaries/ascdate.o + .debug_macro 0x00001321 0x3a binaries/ascdate.o + .debug_macro 0x0000135b 0xa0 binaries/ascdate.o + .debug_macro 0x000013fb 0x34 binaries/ascdate.o + .debug_macro 0x0000142f 0x7c binaries/ascdate.o + .debug_macro 0x000014ab 0x1c binaries/ascdate.o + .debug_macro 0x000014c7 0xee binaries/ascdate.o + .debug_macro 0x000015b5 0x7c binaries/ascdate.o + .debug_macro 0x00001631 0x20 binaries/ascdate.o + .debug_macro 0x00001651 0x10 binaries/ascdate.o + .debug_macro 0x00001661 0x1c binaries/ascdate.o + .debug_macro 0x0000167d 0x34 binaries/ascdate.o + .debug_macro 0x000016b1 0xeb binaries/ascdate.o + .debug_macro 0x0000179c 0x8e binaries/ascdate.o + .debug_macro 0x0000182a 0x17b binaries/bufinit.o + .debug_macro 0x000019a5 0x17b binaries/chprio.o + .debug_macro 0x00001b20 0x197 binaries/clkhandler.o + .debug_macro 0x00001cb7 0x1c binaries/clkhandler.o + .debug_macro 0x00001cd3 0x5e binaries/clkhandler.o + .debug_macro 0x00001d31 0x197 binaries/clkinit.o + .debug_macro 0x00001ec8 0x17b binaries/close.o + .debug_macro 0x00002043 0x17b binaries/conf.o + .debug_macro 0x000021be 0x17b binaries/control.o + .debug_macro 0x00002339 0x181 binaries/create.o + .debug_macro 0x000024ba 0x184 binaries/evec.o + .debug_macro 0x0000263e 0x17b binaries/exit.o + .debug_macro 0x000027b9 0x17b binaries/freebuf.o + .debug_macro 0x00002934 0x17b binaries/freemem.o + .debug_macro 0x00002aaf 0x17b binaries/getbuf.o + .debug_macro 0x00002c2a 0x17b binaries/getc.o + .debug_macro 0x00002da5 0x17f binaries/getdev.o + .debug_macro 0x00002f24 0x17b binaries/getitem.o + .debug_macro 0x0000309f 0x17b binaries/getmem.o + .debug_macro 0x0000321a 0x17b binaries/getpid.o + .debug_macro 0x00003395 0x17b binaries/getprio.o + .debug_macro 0x00003510 0x17b binaries/getstk.o + .debug_macro 0x0000368b 0x17b binaries/gettime.o + .debug_macro 0x00003806 0x17b binaries/init.o + .debug_macro 0x00003981 0x19b binaries/initialize.o + .debug_macro 0x00003b1c 0x17b binaries/insert.o + .debug_macro 0x00003c97 0x17b binaries/insertd.o + .debug_macro 0x00003e12 0x17b binaries/ioerr.o + .debug_macro 0x00003f8d 0x17b binaries/ionull.o + .debug_macro 0x00004108 0x17b binaries/kill.o + .debug_macro 0x00004283 0x184 binaries/main.o + .debug_macro 0x00004407 0x17b binaries/mark.o + .debug_macro 0x00004582 0x17b binaries/meminit.o + .debug_macro 0x000046fd 0x17b binaries/mkbufpool.o + .debug_macro 0x00004878 0x19d binaries/mmu.o + .debug_macro 0x00004a15 0x17b binaries/newqueue.o + .debug_macro 0x00004b90 0x17b binaries/open.o + .debug_macro 0x00004d0b 0x17b binaries/panic.o + .debug_macro 0x00004e86 0x189 binaries/pl190.o + .debug_macro 0x0000500f 0x1a5 binaries/platinit.o + .debug_macro 0x000051b4 0x17b binaries/ptclear.o + .debug_macro 0x0000532f 0x17b binaries/ptcount.o + .debug_macro 0x000054aa 0x17b binaries/ptcreate.o + .debug_macro 0x00005625 0x17b binaries/ptdelete.o + .debug_macro 0x000057a0 0x17b binaries/ptinit.o + .debug_macro 0x0000591b 0x17b binaries/ptrecv.o + .debug_macro 0x00005a96 0x17b binaries/ptreset.o + .debug_macro 0x00005c11 0x17b binaries/ptsend.o + .debug_macro 0x00005d8c 0x17b binaries/putc.o + .debug_macro 0x00005f07 0x17b binaries/queue.o + .debug_macro 0x00006082 0x17b binaries/read.o + .debug_macro 0x000061fd 0x17b binaries/ready.o + .debug_macro 0x00006378 0x17b binaries/receive.o + .debug_macro 0x000064f3 0x17b binaries/recvclr.o + .debug_macro 0x0000666e 0x17b binaries/recvtime.o + .debug_macro 0x000067e9 0x17b binaries/resched.o + .debug_macro 0x00006964 0x17b binaries/resume.o + .debug_macro 0x00006adf 0x17b binaries/seek.o + .debug_macro 0x00006c5a 0x17b binaries/semcount.o + .debug_macro 0x00006dd5 0x17b binaries/semcreate.o + .debug_macro 0x00006f50 0x17b binaries/semdelete.o + .debug_macro 0x000070cb 0x17b binaries/semreset.o + .debug_macro 0x00007246 0x17b binaries/send.o + .debug_macro 0x000073c1 0x17b binaries/signal.o + .debug_macro 0x0000753c 0x17b binaries/signaln.o + .debug_macro 0x000076b7 0x181 binaries/sleep.o + .debug_macro 0x00007838 0x1b5 binaries/sp804.o + .debug_macro 0x000079ed 0x17b binaries/suspend.o + .debug_macro 0x00007b68 0x19d binaries/udelay.o + .debug_macro 0x00007d05 0x17b binaries/unsleep.o + .debug_macro 0x00007e80 0x17b binaries/userret.o + .debug_macro 0x00007ffb 0x17b binaries/wait.o + .debug_macro 0x00008176 0x17b binaries/wakeup.o + .debug_macro 0x000082f1 0x17b binaries/write.o + .debug_macro 0x0000846c 0x17b binaries/xdone.o + .debug_macro 0x000085e7 0x17b binaries/yield.o + .debug_macro 0x00008762 0x11 binaries/abs.o + .debug_macro 0x00008773 0x11 binaries/atoi.o + .debug_macro 0x00008784 0x11 binaries/atol.o + .debug_macro 0x00008795 0x11 binaries/bzero.o + .debug_macro 0x000087a6 0x1a binaries/ctype_.o + .debug_macro 0x000087c0 0x88 binaries/ctype_.o + .debug_macro 0x00008848 0x26 binaries/doprnt.o + .debug_macro 0x0000886e 0x44 binaries/doscan.o + .debug_macro 0x000088b2 0x26 binaries/fdoprnt.o + .debug_macro 0x000088d8 0x17 binaries/fgetc.o + .debug_macro 0x000088ef 0x17 binaries/fgets.o + .debug_macro 0x00008906 0x184 binaries/fprintf.o + .debug_macro 0x00008a8a 0x1d binaries/fputc.o + .debug_macro 0x00008aa7 0x11 binaries/fputs.o + .debug_macro 0x00008ab8 0x1d binaries/fscanf.o + .debug_macro 0x00008ad5 0x184 binaries/getchar.o + .debug_macro 0x00008c59 0x11 binaries/labs.o + .debug_macro 0x00008c6a 0x11 binaries/memchr.o + .debug_macro 0x00008c7b 0x11 binaries/memcmp.o + .debug_macro 0x00008c8c 0x11 binaries/memcpy.o + .debug_macro 0x00008c9d 0x11 binaries/memset.o + .debug_macro 0x00008cae 0x18d binaries/printf.o + .debug_macro 0x00008e3b 0x184 binaries/putchar.o + .debug_macro 0x00008fbf 0x11 binaries/qsort.o + .debug_macro 0x00008fd0 0x11 binaries/rand.o + .debug_macro 0x00008fe1 0x1a binaries/sprintf.o + .debug_macro 0x00008ffb 0x17 binaries/sscanf.o + .debug_macro 0x00009012 0x11 binaries/strchr.o + .debug_macro 0x00009023 0x11 binaries/strcmp.o + .debug_macro 0x00009034 0x11 binaries/strcpy.o + .debug_macro 0x00009045 0x11 binaries/strlen.o + .debug_macro 0x00009056 0x11 binaries/strncat.o + .debug_macro 0x00009067 0x11 binaries/strncmp.o + .debug_macro 0x00009078 0x11 binaries/strncpy.o + .debug_macro 0x00009089 0x11 binaries/strnlen.o + .debug_macro 0x0000909a 0x11 binaries/strrchr.o + .debug_macro 0x000090ab 0x11 binaries/strstr.o + .debug_macro 0x000090bc 0x17b binaries/ttycontrol.o + .debug_macro 0x00009237 0x17b binaries/ttygetc.o + .debug_macro 0x000093b2 0x17b binaries/ttyhandle_in.o + .debug_macro 0x0000952d 0x17b binaries/ttyhandle_out.o + .debug_macro 0x000096a8 0x17b binaries/ttyhandler.o + .debug_macro 0x00009823 0x17b binaries/ttyinit.o + .debug_macro 0x0000999e 0x17b binaries/ttykickout.o + .debug_macro 0x00009b19 0x17b binaries/ttyputc.o + .debug_macro 0x00009c94 0x17b binaries/ttyread.o + .debug_macro 0x00009e0f 0x17b binaries/ttywrite.o + .debug_macro 0x00009f8a 0x17b binaries/mount.o + .debug_macro 0x0000a105 0x187 binaries/naminit.o + .debug_macro 0x0000a28c 0x17b binaries/nammap.o + .debug_macro 0x0000a407 0x17b binaries/namopen.o + .debug_macro 0x0000a582 0x17b binaries/ramclose.o + .debug_macro 0x0000a6fd 0x184 binaries/raminit.o + .debug_macro 0x0000a881 0x10 binaries/raminit.o + .debug_macro 0x0000a891 0x17b binaries/ramopen.o + .debug_macro 0x0000aa0c 0x184 binaries/ramread.o + .debug_macro 0x0000ab90 0x184 binaries/ramwrite.o + .debug_macro 0x0000ad14 0x181 binaries/lfdballoc.o + .debug_macro 0x0000ae95 0x17b binaries/lfdbfree.o + .debug_macro 0x0000b010 0x17b binaries/lfflush.o + .debug_macro 0x0000b18b 0x17b binaries/lfgetmode.o + .debug_macro 0x0000b306 0x17b binaries/lfiballoc.o + .debug_macro 0x0000b481 0x17b binaries/lfibclear.o + .debug_macro 0x0000b5fc 0x17b binaries/lfibget.o + .debug_macro 0x0000b777 0x17b binaries/lfibput.o + .debug_macro 0x0000b8f2 0x17b binaries/lflclose.o + .debug_macro 0x0000ba6d 0x17b binaries/lflcontrol.o + .debug_macro 0x0000bbe8 0x17b binaries/lflgetc.o + .debug_macro 0x0000bd63 0x17b binaries/lflinit.o + .debug_macro 0x0000bede 0x17b binaries/lflputc.o + .debug_macro 0x0000c059 0x17b binaries/lflread.o + .debug_macro 0x0000c1d4 0x17b binaries/lflseek.o + .debug_macro 0x0000c34f 0x17b binaries/lflwrite.o + .debug_macro 0x0000c4ca 0x184 binaries/lfsckfmt.o + .debug_macro 0x0000c64e 0x184 binaries/lfscreate.o + .debug_macro 0x0000c7d2 0x17b binaries/lfsetup.o + .debug_macro 0x0000c94d 0x17b binaries/lfsinit.o + .debug_macro 0x0000cac8 0x17b binaries/lfsopen.o + .debug_macro 0x0000cc43 0x17b binaries/lftruncate.o + .debug_macro 0x0000cdbe 0x23 binaries/kprintf.o + .debug_macro 0x0000cde1 0x19f binaries/kvprintf.o + .debug_macro 0x0000cf80 0x188 binaries/uartControl.o + .debug_macro 0x0000d108 0x188 binaries/uartGetc.o + .debug_macro 0x0000d290 0x17b binaries/uartInit.o + .debug_macro 0x0000d40b 0x188 binaries/uartPutc.o + .debug_macro 0x0000d593 0x17b binaries/uartRead.o + .debug_macro 0x0000d70e 0x184 binaries/uartStat.o + .debug_macro 0x0000d892 0x17b binaries/uartWrite.o + .debug_macro 0x0000da0d 0x184 binaries/kgetc.o + .debug_macro 0x0000db91 0x25b binaries/kgetc.o + .debug_macro 0x0000ddec 0x184 binaries/kputc.o + .debug_macro 0x0000df70 0x184 binaries/uartHwInit.o + .debug_macro 0x0000e0f4 0x184 binaries/uartHwPutc.o + .debug_macro 0x0000e278 0x18d binaries/uartHwStat.o + .debug_macro 0x0000e405 0x184 binaries/uartInterrupt.o + .debug_macro 0x0000e589 0x11 binaries/Doxygroup.o + .debug_macro 0x0000e59a 0x1a8 binaries/loopbackClose.o + .debug_macro 0x0000e742 0x2e binaries/loopbackClose.o + .debug_macro 0x0000e770 0x1a4 binaries/loopbackControl.o + .debug_macro 0x0000e914 0x1ad binaries/loopbackGetc.o + .debug_macro 0x0000eac1 0x1a8 binaries/loopbackInit.o + .debug_macro 0x0000ec69 0x1a8 binaries/loopbackOpen.o + .debug_macro 0x0000ee11 0x1a4 binaries/loopbackPutc.o + .debug_macro 0x0000efb5 0x1a4 binaries/loopbackRead.o + .debug_macro 0x0000f159 0x1a4 binaries/loopbackWrite.o + .debug_macro 0x0000f2fd 0x17f binaries/addargs.o + .debug_macro 0x0000f47c 0x17b binaries/lexan.o + .debug_macro 0x0000f5f7 0x188 binaries/shell.o + .debug_macro 0x0000f77f 0x184 binaries/xsh_argecho.o + .debug_macro 0x0000f903 0x188 binaries/xsh_cat.o + .debug_macro 0x0000fa8b 0x184 binaries/xsh_clear.o + .debug_macro 0x0000fc0f 0x188 binaries/xsh_date.o + .debug_macro 0x0000fd97 0x184 binaries/xsh_devdump.o + .debug_macro 0x0000ff1b 0x184 binaries/xsh_echo.o + .debug_macro 0x0001009f 0x17b binaries/xsh_exit.o + .debug_macro 0x0001021a 0x188 binaries/xsh_help.o + .debug_macro 0x000103a2 0x188 binaries/xsh_kill.o + .debug_macro 0x0001052a 0x188 binaries/xsh_led.o + .debug_macro 0x000106b2 0x188 binaries/xsh_memdump.o + .debug_macro 0x0001083a 0x188 binaries/xsh_memstat.o + .debug_macro 0x000109c2 0x188 binaries/xsh_mmu.o + .debug_macro 0x00010b4a 0x188 binaries/xsh_ps.o + .debug_macro 0x00010cd2 0x188 binaries/xsh_sleep.o + .debug_macro 0x00010e5a 0x188 binaries/xsh_uptime.o + .debug_macro 0x00010fe2 0x17f binaries/consume.o + .debug_macro 0x00011161 0x17f binaries/produce.o + +.debug_str 0x00000000 0x8e81 + .debug_str 0x00000000 0x5661 binaries/ascdate.o + 0x56df (size before relaxing) + .debug_str 0x00005661 0x54 binaries/bufinit.o + 0x5659 (size before relaxing) + .debug_str 0x000056b5 0xc3 binaries/chprio.o + 0x56e3 (size before relaxing) + .debug_str 0x00005778 0x2f7 binaries/clkhandler.o + 0x5900 (size before relaxing) + .debug_str 0x00005a6f 0x6c binaries/clkinit.o + 0x591c (size before relaxing) + .debug_str 0x00005adb 0xad binaries/close.o + 0x56da (size before relaxing) + .debug_str 0x00005b88 0x11 binaries/conf.o + 0x5693 (size before relaxing) + .debug_str 0x00005b99 0x1e binaries/control.o + 0x56ed (size before relaxing) + .debug_str 0x00005bb7 0x7a binaries/create.o + 0x5748 (size before relaxing) + .debug_str 0x00005c31 0x120 binaries/evec.o + 0x573d (size before relaxing) + .debug_str 0x00005d51 0x11 binaries/exit.o + 0x5627 (size before relaxing) + .debug_str 0x00005d62 0x38 binaries/freebuf.o + 0x5693 (size before relaxing) + .debug_str 0x00005d9a 0x58 binaries/freemem.o + 0x568b (size before relaxing) + .debug_str 0x00005df2 0x21 binaries/getbuf.o + 0x568e (size before relaxing) + .debug_str 0x00005e13 0x11 binaries/getc.o + 0x56d8 (size before relaxing) + .debug_str 0x00005e24 0x2a binaries/getdev.o + 0x56cf (size before relaxing) + .debug_str 0x00005e4e 0x2d binaries/getitem.o + 0x566b (size before relaxing) + .debug_str 0x00005e7b 0x28 binaries/getmem.o + 0x5666 (size before relaxing) + .debug_str 0x00005ea3 0x1b binaries/getpid.o + 0x561f (size before relaxing) + .debug_str 0x00005ebe 0x1c binaries/getprio.o + 0x56dc (size before relaxing) + .debug_str 0x00005eda 0x21 binaries/getstk.o + 0x566b (size before relaxing) + .debug_str 0x00005efb 0x47 binaries/gettime.o + 0x565b (size before relaxing) + .debug_str 0x00005f42 0x11 binaries/init.o + 0x56d8 (size before relaxing) + .debug_str 0x00005f53 0xb7 binaries/initialize.o + 0x5a76 (size before relaxing) + .debug_str 0x0000600a 0x1a binaries/insert.o + 0x56e8 (size before relaxing) + .debug_str 0x00006024 0x1c binaries/insertd.o + 0x56ea (size before relaxing) + .debug_str 0x00006040 0x18 binaries/ioerr.o + 0x5617 (size before relaxing) + .debug_str 0x00006058 0x1a binaries/ionull.o + 0x5619 (size before relaxing) + .debug_str 0x00006072 0x1f binaries/kill.o + 0x573f (size before relaxing) + .debug_str 0x00006091 0x65 binaries/main.o + 0x569f (size before relaxing) + .debug_str 0x000060f6 0x38 binaries/mark.o + 0x5656 (size before relaxing) + .debug_str 0x0000612e 0x14 binaries/meminit.o + 0x5648 (size before relaxing) + .debug_str 0x00006142 0x2f binaries/mkbufpool.o + 0x56a0 (size before relaxing) + .debug_str 0x00006171 0xd2 binaries/mmu.o + 0x56e6 (size before relaxing) + .debug_str 0x00006243 0x1d binaries/newqueue.o + 0x564a (size before relaxing) + .debug_str 0x00006260 0x11 binaries/open.o + 0x56e2 (size before relaxing) + .debug_str 0x00006271 0x18 binaries/panic.o + 0x5628 (size before relaxing) + .debug_str 0x00006289 0x158 binaries/pl190.o + 0x57b1 (size before relaxing) + .debug_str 0x000063e1 0xf5 binaries/platinit.o + 0x59b3 (size before relaxing) + .debug_str 0x000064d6 0xa2 binaries/ptclear.o + 0x56b5 (size before relaxing) + .debug_str 0x00006578 0x3b binaries/ptcount.o + 0x56c6 (size before relaxing) + .debug_str 0x000065b3 0x2d binaries/ptcreate.o + 0x56ca (size before relaxing) + .debug_str 0x000065e0 0x23 binaries/ptdelete.o + 0x56c9 (size before relaxing) + .debug_str 0x00006603 0x22 binaries/ptinit.o + 0x56b3 (size before relaxing) + .debug_str 0x00006625 0x22 binaries/ptrecv.o + 0x56d0 (size before relaxing) + .debug_str 0x00006647 0x1c binaries/ptreset.o + 0x56be (size before relaxing) + .debug_str 0x00006663 0x23 binaries/ptsend.o + 0x56df (size before relaxing) + .debug_str 0x00006686 0x11 binaries/putc.o + 0x56d8 (size before relaxing) + .debug_str 0x00006697 0x22 binaries/queue.o + 0x56f2 (size before relaxing) + .debug_str 0x000066b9 0x11 binaries/read.o + 0x56e5 (size before relaxing) + .debug_str 0x000066ca 0x18 binaries/ready.o + 0x56da (size before relaxing) + .debug_str 0x000066e2 0x14 binaries/receive.o + 0x56e5 (size before relaxing) + .debug_str 0x000066f6 0x14 binaries/recvclr.o + 0x56dd (size before relaxing) + .debug_str 0x0000670a 0x26 binaries/recvtime.o + 0x570b (size before relaxing) + .debug_str 0x00006730 0x3c binaries/resched.o + 0x574d (size before relaxing) + .debug_str 0x0000676c 0x13 binaries/resume.o + 0x56e5 (size before relaxing) + .debug_str 0x0000677f 0x11 binaries/seek.o + 0x56d8 (size before relaxing) + .debug_str 0x00006790 0x1b binaries/semcount.o + 0x5687 (size before relaxing) + .debug_str 0x000067ab 0x25 binaries/semcreate.o + 0x568a (size before relaxing) + .debug_str 0x000067d0 0x16 binaries/semdelete.o + 0x56ad (size before relaxing) + .debug_str 0x000067e6 0x1e binaries/semreset.o + 0x56ba (size before relaxing) + .debug_str 0x00006804 0x11 binaries/send.o + 0x56ec (size before relaxing) + .debug_str 0x00006815 0x13 binaries/signal.o + 0x5699 (size before relaxing) + .debug_str 0x00006828 0x1c binaries/signaln.o + 0x56ae (size before relaxing) + .debug_str 0x00006844 0x2b binaries/sleep.o + 0x5726 (size before relaxing) + .debug_str 0x0000686f 0x13b binaries/sp804.o + 0x5782 (size before relaxing) + .debug_str 0x000069aa 0x1c binaries/suspend.o + 0x56f2 (size before relaxing) + .debug_str 0x000069c6 0x24 binaries/udelay.o + 0x58b3 (size before relaxing) + .debug_str 0x000069ea 0x1c binaries/unsleep.o + 0x5713 (size before relaxing) + .debug_str 0x00006a06 0x14 binaries/userret.o + 0x562d (size before relaxing) + .debug_str 0x00006a1a 0x11 binaries/wait.o + 0x571f (size before relaxing) + .debug_str 0x00006a2b 0x13 binaries/wakeup.o + 0x566d (size before relaxing) + .debug_str 0x00006a3e 0x12 binaries/write.o + 0x56e7 (size before relaxing) + .debug_str 0x00006a50 0x17 binaries/xdone.o + 0x5616 (size before relaxing) + .debug_str 0x00006a67 0x12 binaries/yield.o + 0x5643 (size before relaxing) + .debug_str 0x00006a79 0xd binaries/abs.o + 0x23e7 (size before relaxing) + .debug_str 0x00006a86 0x13 binaries/atoi.o + 0x23f2 (size before relaxing) + .debug_str 0x00006a99 0x13 binaries/atol.o + 0x23fb (size before relaxing) + .debug_str 0x00006aac 0x15 binaries/bzero.o + 0x23f4 (size before relaxing) + .debug_str 0x00006ac1 0x270 binaries/ctype_.o + 0x2660 (size before relaxing) + .debug_str 0x00006d31 0x94 binaries/doprnt.o + 0x254e (size before relaxing) + .debug_str 0x00006dc5 0xb4 binaries/doscan.o + 0x2751 (size before relaxing) + .debug_str 0x00006e79 0x1f binaries/fdoprnt.o + 0x254e (size before relaxing) + .debug_str 0x00006e98 0x1c binaries/fgetc.o + 0x2404 (size before relaxing) + .debug_str 0x00006eb4 0x15 binaries/fgets.o + 0x2400 (size before relaxing) + .debug_str 0x00006ec9 0x19 binaries/fprintf.o + 0x56ea (size before relaxing) + .debug_str 0x00006ee2 0x15 binaries/fputc.o + 0x240e (size before relaxing) + .debug_str 0x00006ef7 0x15 binaries/fputs.o + 0x23f9 (size before relaxing) + .debug_str 0x00006f0c 0x1c binaries/fscanf.o + 0x242f (size before relaxing) + .debug_str 0x00006f28 0x19 binaries/getchar.o + 0x56bd (size before relaxing) + .debug_str 0x00006f41 0x13 binaries/labs.o + 0x23f6 (size before relaxing) + .debug_str 0x00006f54 0x17 binaries/memchr.o + 0x23f6 (size before relaxing) + .debug_str 0x00006f6b 0x17 binaries/memcmp.o + 0x23ff (size before relaxing) + .debug_str 0x00006f82 0x17 binaries/memcpy.o + 0x23f6 (size before relaxing) + .debug_str 0x00006f99 0x17 binaries/memset.o + 0x23f6 (size before relaxing) + .debug_str 0x00006fb0 0x10 binaries/printf.o + 0x578f (size before relaxing) + .debug_str 0x00006fc0 0x19 binaries/putchar.o + 0x56bd (size before relaxing) + .debug_str 0x00006fd9 0x32 binaries/qsort.o + 0x2424 (size before relaxing) + .debug_str 0x0000700b 0x1a binaries/rand.o + 0x240b (size before relaxing) + .debug_str 0x00007025 0x1d binaries/sprintf.o + 0x24cb (size before relaxing) + .debug_str 0x00007042 0x2d binaries/sscanf.o + 0x2422 (size before relaxing) + .debug_str 0x0000706f 0x17 binaries/strchr.o + 0x23f6 (size before relaxing) + .debug_str 0x00007086 0x21 binaries/strcmp.o + 0x2400 (size before relaxing) + .debug_str 0x000070a7 0x10 binaries/strcpy.o + 0x23f6 (size before relaxing) + .debug_str 0x000070b7 0x17 binaries/strlen.o + 0x23f6 (size before relaxing) + .debug_str 0x000070ce 0x19 binaries/strncat.o + 0x23f8 (size before relaxing) + .debug_str 0x000070e7 0x11 binaries/strncmp.o + 0x23f8 (size before relaxing) + .debug_str 0x000070f8 0x11 binaries/strncpy.o + 0x23f8 (size before relaxing) + .debug_str 0x00007109 0x19 binaries/strnlen.o + 0x2405 (size before relaxing) + .debug_str 0x00007122 0x19 binaries/strrchr.o + 0x23f8 (size before relaxing) + .debug_str 0x0000713b 0x17 binaries/strstr.o + 0x23f6 (size before relaxing) + .debug_str 0x00007152 0x12f binaries/ttycontrol.o + 0x57e9 (size before relaxing) + .debug_str 0x00007281 0x20 binaries/ttygetc.o + 0x57c4 (size before relaxing) + .debug_str 0x000072a1 0x9f binaries/ttyhandle_in.o + 0x57ee (size before relaxing) + .debug_str 0x00007340 0x3a binaries/ttyhandle_out.o + 0x57d8 (size before relaxing) + .debug_str 0x0000737a 0x26 binaries/ttyhandler.o + 0x5866 (size before relaxing) + .debug_str 0x000073a0 0x25 binaries/ttyinit.o + 0x585c (size before relaxing) + .debug_str 0x000073c5 0x1b binaries/ttykickout.o + 0x568c (size before relaxing) + .debug_str 0x000073e0 0x20 binaries/ttyputc.o + 0x5836 (size before relaxing) + .debug_str 0x00007400 0x2e binaries/ttyread.o + 0x57ef (size before relaxing) + .debug_str 0x0000742e 0x22 binaries/ttywrite.o + 0x56b7 (size before relaxing) + .debug_str 0x00007450 0x6b binaries/mount.o + 0x56af (size before relaxing) + .debug_str 0x000074bb 0x46 binaries/naminit.o + 0x573d (size before relaxing) + .debug_str 0x00007501 0x70 binaries/nammap.o + 0x56d8 (size before relaxing) + .debug_str 0x00007571 0x20 binaries/namopen.o + 0x56d5 (size before relaxing) + .debug_str 0x00007591 0x22 binaries/ramclose.o + 0x56a4 (size before relaxing) + .debug_str 0x000075b3 0x42 binaries/raminit.o + 0x56d0 (size before relaxing) + .debug_str 0x000075f5 0x20 binaries/ramopen.o + 0x56ac (size before relaxing) + .debug_str 0x00007615 0x25 binaries/ramread.o + 0x56da (size before relaxing) + .debug_str 0x0000763a 0x22 binaries/ramwrite.o + 0x56dc (size before relaxing) + .debug_str 0x0000765c 0xfa binaries/lfdballoc.o + 0x573b (size before relaxing) + .debug_str 0x00007756 0x21 binaries/lfdbfree.o + 0x571d (size before relaxing) + .debug_str 0x00007777 0xc4 binaries/lfflush.o + 0x5797 (size before relaxing) + .debug_str 0x0000783b 0x2a binaries/lfgetmode.o + 0x5626 (size before relaxing) + .debug_str 0x00007865 0x32 binaries/lfiballoc.o + 0x572b (size before relaxing) + .debug_str 0x00007897 0x2a binaries/lfibclear.o + 0x565d (size before relaxing) + .debug_str 0x000078c1 0x1d binaries/lfibget.o + 0x567d (size before relaxing) + .debug_str 0x000078de 0x22 binaries/lfibput.o + 0x5694 (size before relaxing) + .debug_str 0x00007900 0x29 binaries/lflclose.o + 0x5825 (size before relaxing) + .debug_str 0x00007929 0x31 binaries/lflcontrol.o + 0x584a (size before relaxing) + .debug_str 0x0000795a 0x36 binaries/lflgetc.o + 0x57b7 (size before relaxing) + .debug_str 0x00007990 0x20 binaries/lflinit.o + 0x5797 (size before relaxing) + .debug_str 0x000079b0 0x20 binaries/lflputc.o + 0x5829 (size before relaxing) + .debug_str 0x000079d0 0x30 binaries/lflread.o + 0x56c5 (size before relaxing) + .debug_str 0x00007a00 0x20 binaries/lflseek.o + 0x57a1 (size before relaxing) + .debug_str 0x00007a20 0x22 binaries/lflwrite.o + 0x56b7 (size before relaxing) + .debug_str 0x00007a42 0x41 binaries/lfsckfmt.o + 0x574d (size before relaxing) + .debug_str 0x00007a83 0x3d binaries/lfscreate.o + 0x576c (size before relaxing) + .debug_str 0x00007ac0 0x29 binaries/lfsetup.o + 0x5815 (size before relaxing) + .debug_str 0x00007ae9 0x20 binaries/lfsinit.o + 0x576e (size before relaxing) + .debug_str 0x00007b09 0x2d binaries/lfsopen.o + 0x5859 (size before relaxing) + .debug_str 0x00007b36 0x23 binaries/lftruncate.o + 0x57d1 (size before relaxing) + .debug_str 0x00007b59 0x29 binaries/kprintf.o + 0x25c3 (size before relaxing) + .debug_str 0x00007b82 0x1a binaries/kvprintf.o + 0x5791 (size before relaxing) + .debug_str 0x00007b9c 0x8e binaries/uartControl.o + 0x5735 (size before relaxing) + .debug_str 0x00007c2a 0x2c binaries/uartGetc.o + 0x56b5 (size before relaxing) + .debug_str 0x00007c56 0x2e binaries/uartInit.o + 0x573e (size before relaxing) + .debug_str 0x00007c84 0x2d binaries/uartPutc.o + 0x56b6 (size before relaxing) + .debug_str 0x00007cb1 0x1a binaries/uartRead.o + 0x574b (size before relaxing) + .debug_str 0x00007ccb 0x36 binaries/uartStat.o + 0x572a (size before relaxing) + .debug_str 0x00007d01 0x26 binaries/uartWrite.o + 0x574f (size before relaxing) + .debug_str 0x00007d27 0xa3b binaries/kgetc.o + 0x6137 (size before relaxing) + .debug_str 0x00008762 0x23 binaries/kputc.o + 0x6137 (size before relaxing) + .debug_str 0x00008785 0x22 binaries/uartHwInit.o + 0x616d (size before relaxing) + .debug_str 0x000087a7 0x22 binaries/uartHwPutc.o + 0x602e (size before relaxing) + .debug_str 0x000087c9 0x30 binaries/uartHwStat.o + 0x6049 (size before relaxing) + .debug_str 0x000087f9 0x33 binaries/uartInterrupt.o + 0x6157 (size before relaxing) + .debug_str 0x0000882c 0x1f binaries/Doxygroup.o + 0x23f9 (size before relaxing) + .debug_str 0x0000884b 0xdc binaries/loopbackClose.o + 0x57a7 (size before relaxing) + .debug_str 0x00008927 0x35 binaries/loopbackControl.o + 0x5799 (size before relaxing) + .debug_str 0x0000895c 0x2f binaries/loopbackGetc.o + 0x57a9 (size before relaxing) + .debug_str 0x0000898b 0x2f binaries/loopbackInit.o + 0x577b (size before relaxing) + .debug_str 0x000089ba 0x2f binaries/loopbackOpen.o + 0x57a3 (size before relaxing) + .debug_str 0x000089e9 0x2f binaries/loopbackPutc.o + 0x57ab (size before relaxing) + .debug_str 0x00008a18 0x2f binaries/loopbackRead.o + 0x5788 (size before relaxing) + .debug_str 0x00008a47 0x31 binaries/loopbackWrite.o + 0x578a (size before relaxing) + .debug_str 0x00008a78 0x4b binaries/addargs.o + 0x5718 (size before relaxing) + .debug_str 0x00008ac3 0x31 binaries/lexan.o + 0x5640 (size before relaxing) + .debug_str 0x00008af4 0x7b binaries/shell.o + 0x5791 (size before relaxing) + .debug_str 0x00008b6f 0x2c binaries/xsh_argecho.o + 0x5635 (size before relaxing) + .debug_str 0x00008b9b 0x2f binaries/xsh_cat.o + 0x571b (size before relaxing) + .debug_str 0x00008bca 0x1f binaries/xsh_clear.o + 0x56e0 (size before relaxing) + .debug_str 0x00008be9 0x25 binaries/xsh_date.o + 0x5754 (size before relaxing) + .debug_str 0x00008c0e 0x23 binaries/xsh_devdump.o + 0x576a (size before relaxing) + .debug_str 0x00008c31 0x1d binaries/xsh_echo.o + 0x562f (size before relaxing) + .debug_str 0x00008c4e 0x1d binaries/xsh_exit.o + 0x5628 (size before relaxing) + .debug_str 0x00008c6b 0x32 binaries/xsh_help.o + 0x5732 (size before relaxing) + .debug_str 0x00008c9d 0x23 binaries/xsh_kill.o + 0x5700 (size before relaxing) + .debug_str 0x00008cc0 0x4e binaries/xsh_led.o + 0x5717 (size before relaxing) + .debug_str 0x00008d0e 0x38 binaries/xsh_memdump.o + 0x5720 (size before relaxing) + .debug_str 0x00008d46 0x54 binaries/xsh_memstat.o + 0x5745 (size before relaxing) + .debug_str 0x00008d9a 0x2a binaries/xsh_mmu.o + 0x566a (size before relaxing) + .debug_str 0x00008dc4 0x20 binaries/xsh_ps.o + 0x56ef (size before relaxing) + .debug_str 0x00008de4 0x1f binaries/xsh_sleep.o + 0x5702 (size before relaxing) + .debug_str 0x00008e03 0x48 binaries/xsh_uptime.o + 0x571e (size before relaxing) + .debug_str 0x00008e4b 0x1b binaries/consume.o + 0x5612 (size before relaxing) + .debug_str 0x00008e66 0x1b binaries/produce.o + 0x5612 (size before relaxing) + +.debug_frame 0x00000000 0x2490 + .debug_frame 0x00000000 0x38 binaries/ascdate.o + .debug_frame 0x00000038 0x20 binaries/bufinit.o + .debug_frame 0x00000058 0x2c binaries/chprio.o + .debug_frame 0x00000084 0x28 binaries/clkhandler.o + .debug_frame 0x000000ac 0x28 binaries/clkinit.o + .debug_frame 0x000000d4 0x2c binaries/close.o + .debug_frame 0x00000100 0x30 binaries/control.o + .debug_frame 0x00000130 0x38 binaries/create.o + .debug_frame 0x00000168 0x48 binaries/evec.o + .debug_frame 0x000001b0 0x28 binaries/exit.o + .debug_frame 0x000001d8 0x2c binaries/freebuf.o + .debug_frame 0x00000204 0x2c binaries/freemem.o + .debug_frame 0x00000230 0x30 binaries/getbuf.o + .debug_frame 0x00000260 0x2c binaries/getc.o + .debug_frame 0x0000028c 0x30 binaries/getdev.o + .debug_frame 0x000002bc 0x50 binaries/getitem.o + .debug_frame 0x0000030c 0x28 binaries/getmem.o + .debug_frame 0x00000334 0x20 binaries/getpid.o + .debug_frame 0x00000354 0x28 binaries/getprio.o + .debug_frame 0x0000037c 0x2c binaries/getstk.o + .debug_frame 0x000003a8 0x48 binaries/gettime.o + .debug_frame 0x000003f0 0x2c binaries/init.o + .debug_frame 0x0000041c 0x5c binaries/initialize.o + .debug_frame 0x00000478 0x28 binaries/insert.o + .debug_frame 0x000004a0 0x28 binaries/insertd.o + .debug_frame 0x000004c8 0x20 binaries/ioerr.o + .debug_frame 0x000004e8 0x20 binaries/ionull.o + .debug_frame 0x00000508 0x30 binaries/kill.o + .debug_frame 0x00000538 0x44 binaries/main.o + .debug_frame 0x0000057c 0x44 binaries/mark.o + .debug_frame 0x000005c0 0x20 binaries/meminit.o + .debug_frame 0x000005e0 0x38 binaries/mkbufpool.o + .debug_frame 0x00000618 0x80 binaries/mmu.o + .debug_frame 0x00000698 0x20 binaries/newqueue.o + .debug_frame 0x000006b8 0x30 binaries/open.o + .debug_frame 0x000006e8 0x28 binaries/panic.o + .debug_frame 0x00000710 0x50 binaries/pl190.o + .debug_frame 0x00000760 0x30 binaries/platinit.o + .debug_frame 0x00000790 0x30 binaries/ptclear.o + .debug_frame 0x000007c0 0x30 binaries/ptcount.o + .debug_frame 0x000007f0 0x30 binaries/ptcreate.o + .debug_frame 0x00000820 0x2c binaries/ptdelete.o + .debug_frame 0x0000084c 0x2c binaries/ptinit.o + .debug_frame 0x00000878 0x30 binaries/ptrecv.o + .debug_frame 0x000008a8 0x2c binaries/ptreset.o + .debug_frame 0x000008d4 0x30 binaries/ptsend.o + .debug_frame 0x00000904 0x2c binaries/putc.o + .debug_frame 0x00000930 0x40 binaries/queue.o + .debug_frame 0x00000970 0x30 binaries/read.o + .debug_frame 0x000009a0 0x28 binaries/ready.o + .debug_frame 0x000009c8 0x2c binaries/receive.o + .debug_frame 0x000009f4 0x28 binaries/recvclr.o + .debug_frame 0x00000a1c 0x30 binaries/recvtime.o + .debug_frame 0x00000a4c 0x44 binaries/resched.o + .debug_frame 0x00000a90 0x2c binaries/resume.o + .debug_frame 0x00000abc 0x2c binaries/seek.o + .debug_frame 0x00000ae8 0x28 binaries/semcount.o + .debug_frame 0x00000b10 0x2c binaries/semcreate.o + .debug_frame 0x00000b3c 0x2c binaries/semdelete.o + .debug_frame 0x00000b68 0x30 binaries/semreset.o + .debug_frame 0x00000b98 0x2c binaries/send.o + .debug_frame 0x00000bc4 0x2c binaries/signal.o + .debug_frame 0x00000bf0 0x2c binaries/signaln.o + .debug_frame 0x00000c1c 0x44 binaries/sleep.o + .debug_frame 0x00000c60 0x40 binaries/sp804.o + .debug_frame 0x00000ca0 0x30 binaries/suspend.o + .debug_frame 0x00000cd0 0x2c binaries/udelay.o + .debug_frame 0x00000cfc 0x2c binaries/unsleep.o + .debug_frame 0x00000d28 0x28 binaries/userret.o + .debug_frame 0x00000d50 0x2c binaries/wait.o + .debug_frame 0x00000d7c 0x2c binaries/wakeup.o + .debug_frame 0x00000da8 0x30 binaries/write.o + .debug_frame 0x00000dd8 0x28 binaries/xdone.o + .debug_frame 0x00000e00 0x28 binaries/yield.o + .debug_frame 0x00000e28 0x20 binaries/abs.o + .debug_frame 0x00000e48 0x20 binaries/atoi.o + .debug_frame 0x00000e68 0x20 binaries/atol.o + .debug_frame 0x00000e88 0x20 binaries/bzero.o + .debug_frame 0x00000ea8 0x84 binaries/doprnt.o + .debug_frame 0x00000f2c 0x3c binaries/doscan.o + .debug_frame 0x00000f68 0x54 binaries/fdoprnt.o + .debug_frame 0x00000fbc 0x28 binaries/fgetc.o + .debug_frame 0x00000fe4 0x30 binaries/fgets.o + .debug_frame 0x00001014 0x34 binaries/fprintf.o + .debug_frame 0x00001048 0x28 binaries/fputc.o + .debug_frame 0x00001070 0x2c binaries/fputs.o + .debug_frame 0x0000109c 0x50 binaries/fscanf.o + .debug_frame 0x000010ec 0x28 binaries/getchar.o + .debug_frame 0x00001114 0x20 binaries/labs.o + .debug_frame 0x00001134 0x20 binaries/memchr.o + .debug_frame 0x00001154 0x28 binaries/memcmp.o + .debug_frame 0x0000117c 0x20 binaries/memcpy.o + .debug_frame 0x0000119c 0x20 binaries/memset.o + .debug_frame 0x000011bc 0x34 binaries/printf.o + .debug_frame 0x000011f0 0x28 binaries/putchar.o + .debug_frame 0x00001218 0x78 binaries/qsort.o + .debug_frame 0x00001290 0x30 binaries/rand.o + .debug_frame 0x000012c0 0x44 binaries/sprintf.o + .debug_frame 0x00001304 0x48 binaries/sscanf.o + .debug_frame 0x0000134c 0x20 binaries/strchr.o + .debug_frame 0x0000136c 0x20 binaries/strcmp.o + .debug_frame 0x0000138c 0x20 binaries/strcpy.o + .debug_frame 0x000013ac 0x20 binaries/strlen.o + .debug_frame 0x000013cc 0x28 binaries/strncat.o + .debug_frame 0x000013f4 0x28 binaries/strncmp.o + .debug_frame 0x0000141c 0x28 binaries/strncpy.o + .debug_frame 0x00001444 0x20 binaries/strnlen.o + .debug_frame 0x00001464 0x28 binaries/strrchr.o + .debug_frame 0x0000148c 0x2c binaries/strstr.o + .debug_frame 0x000014b8 0x2c binaries/ttycontrol.o + .debug_frame 0x000014e4 0x30 binaries/ttygetc.o + .debug_frame 0x00001514 0x64 binaries/ttyhandle_in.o + .debug_frame 0x00001578 0x30 binaries/ttyhandle_out.o + .debug_frame 0x000015a8 0x2c binaries/ttyhandler.o + .debug_frame 0x000015d4 0x2c binaries/ttyinit.o + .debug_frame 0x00001600 0x20 binaries/ttykickout.o + .debug_frame 0x00001620 0x2c binaries/ttyputc.o + .debug_frame 0x0000164c 0x30 binaries/ttyread.o + .debug_frame 0x0000167c 0x2c binaries/ttywrite.o + .debug_frame 0x000016a8 0x40 binaries/mount.o + .debug_frame 0x000016e8 0x38 binaries/naminit.o + .debug_frame 0x00001720 0x68 binaries/nammap.o + .debug_frame 0x00001788 0x2c binaries/namopen.o + .debug_frame 0x000017b4 0x20 binaries/ramclose.o + .debug_frame 0x000017d4 0x28 binaries/raminit.o + .debug_frame 0x000017fc 0x20 binaries/ramopen.o + .debug_frame 0x0000181c 0x28 binaries/ramread.o + .debug_frame 0x00001844 0x28 binaries/ramwrite.o + .debug_frame 0x0000186c 0x2c binaries/lfdballoc.o + .debug_frame 0x00001898 0x30 binaries/lfdbfree.o + .debug_frame 0x000018c8 0x2c binaries/lfflush.o + .debug_frame 0x000018f4 0x20 binaries/lfgetmode.o + .debug_frame 0x00001914 0x2c binaries/lfiballoc.o + .debug_frame 0x00001940 0x20 binaries/lfibclear.o + .debug_frame 0x00001960 0x30 binaries/lfibget.o + .debug_frame 0x00001990 0x34 binaries/lfibput.o + .debug_frame 0x000019c4 0x2c binaries/lflclose.o + .debug_frame 0x000019f0 0x30 binaries/lflcontrol.o + .debug_frame 0x00001a20 0x2c binaries/lflgetc.o + .debug_frame 0x00001a4c 0x2c binaries/lflinit.o + .debug_frame 0x00001a78 0x30 binaries/lflputc.o + .debug_frame 0x00001aa8 0x30 binaries/lflread.o + .debug_frame 0x00001ad8 0x30 binaries/lflseek.o + .debug_frame 0x00001b08 0x30 binaries/lflwrite.o + .debug_frame 0x00001b38 0x34 binaries/lfsckfmt.o + .debug_frame 0x00001b6c 0x3c binaries/lfscreate.o + .debug_frame 0x00001ba8 0x34 binaries/lfsetup.o + .debug_frame 0x00001bdc 0x28 binaries/lfsinit.o + .debug_frame 0x00001c04 0x34 binaries/lfsopen.o + .debug_frame 0x00001c38 0x38 binaries/lftruncate.o + .debug_frame 0x00001c70 0x34 binaries/kprintf.o + .debug_frame 0x00001ca4 0x2c binaries/kvprintf.o + .debug_frame 0x00001cd0 0x20 binaries/uartControl.o + .debug_frame 0x00001cf0 0x28 binaries/uartGetc.o + .debug_frame 0x00001d18 0x30 binaries/uartInit.o + .debug_frame 0x00001d48 0x28 binaries/uartPutc.o + .debug_frame 0x00001d70 0x34 binaries/uartRead.o + .debug_frame 0x00001da4 0x2c binaries/uartStat.o + .debug_frame 0x00001dd0 0x38 binaries/uartWrite.o + .debug_frame 0x00001e08 0x20 binaries/kgetc.o + .debug_frame 0x00001e28 0x20 binaries/kputc.o + .debug_frame 0x00001e48 0x2c binaries/uartHwInit.o + .debug_frame 0x00001e74 0x20 binaries/uartHwPutc.o + .debug_frame 0x00001e94 0x2c binaries/uartHwStat.o + .debug_frame 0x00001ec0 0x2c binaries/uartInterrupt.o + .debug_frame 0x00001eec 0x30 binaries/loopbackClose.o + .debug_frame 0x00001f1c 0x28 binaries/loopbackControl.o + .debug_frame 0x00001f44 0x2c binaries/loopbackGetc.o + .debug_frame 0x00001f70 0x20 binaries/loopbackInit.o + .debug_frame 0x00001f90 0x30 binaries/loopbackOpen.o + .debug_frame 0x00001fc0 0x30 binaries/loopbackPutc.o + .debug_frame 0x00001ff0 0x30 binaries/loopbackRead.o + .debug_frame 0x00002020 0x30 binaries/loopbackWrite.o + .debug_frame 0x00002050 0x34 binaries/addargs.o + .debug_frame 0x00002084 0x38 binaries/lexan.o + .debug_frame 0x000020bc 0x3c binaries/shell.o + .debug_frame 0x000020f8 0x30 binaries/xsh_argecho.o + .debug_frame 0x00002128 0x38 binaries/xsh_cat.o + .debug_frame 0x00002160 0x28 binaries/xsh_clear.o + .debug_frame 0x00002188 0x30 binaries/xsh_date.o + .debug_frame 0x000021b8 0x2c binaries/xsh_devdump.o + .debug_frame 0x000021e4 0x30 binaries/xsh_echo.o + .debug_frame 0x00002214 0x20 binaries/xsh_exit.o + .debug_frame 0x00002234 0x38 binaries/xsh_help.o + .debug_frame 0x0000226c 0x2c binaries/xsh_kill.o + .debug_frame 0x00002298 0x30 binaries/xsh_led.o + .debug_frame 0x000022c8 0x48 binaries/xsh_memdump.o + .debug_frame 0x00002310 0x2c binaries/xsh_memstat.o + .debug_frame 0x0000233c 0x48 binaries/xsh_mmu.o + .debug_frame 0x00002384 0x30 binaries/xsh_ps.o + .debug_frame 0x000023b4 0x2c binaries/xsh_sleep.o + .debug_frame 0x000023e0 0x30 binaries/xsh_uptime.o + .debug_frame 0x00002410 0x20 binaries/consume.o + .debug_frame 0x00002430 0x20 binaries/produce.o + .debug_frame 0x00002450 0x20 /l/arm2/devtools/lib/gcc/arm-none-eabi/4.8.4/libgcc.a(_udivsi3.o) + .debug_frame 0x00002470 0x20 /l/arm2/devtools/lib/gcc/arm-none-eabi/4.8.4/libgcc.a(_divsi3.o) + +.debug_ranges 0x00000000 0x100 + .debug_ranges 0x00000000 0x20 binaries/create.o + .debug_ranges 0x00000020 0x20 binaries/semcreate.o + .debug_ranges 0x00000040 0x10 binaries/abs.o + .debug_ranges 0x00000050 0x40 binaries/doscan.o + .debug_ranges 0x00000090 0x10 binaries/labs.o + .debug_ranges 0x000000a0 0x10 binaries/strlen.o + .debug_ranges 0x000000b0 0x10 binaries/strnlen.o + .debug_ranges 0x000000c0 0x30 binaries/naminit.o + .debug_ranges 0x000000f0 0x10 binaries/xsh_memdump.o diff --git a/config/Configuration b/config/Configuration new file mode 100644 index 0000000..88c4b57 --- /dev/null +++ b/config/Configuration @@ -0,0 +1,128 @@ +/************************************************************************/ +/* */ +/* Configuration - Xinu device configuration specification file */ +/* */ +/* This file becomes input to the config program, which generates */ +/* conf.h and conf.c */ +/* */ +/* Entries for a device specify the functions that handle each of the */ +/* high-level I/O operations as follows: */ +/* */ +/* -i init -o open -c close */ +/* -r read -w write -s seek */ +/* -g getc -p putc -n control */ +/* -intr int_hndlr -csr csr -irq irq */ +/* */ +/************************************************************************/ + +/* Type Declarations for both real- and pseudo- device types */ + +/* type of a null device */ +null: + on nothing + -i ionull -o ionull -c ionull + -r ionull -g ionull -p ionull + -w ionull -s ioerr + +/* type of a tty device */ +tty: + on uart + -i ttyinit -o ionull -c ionull + -r ttyread -g ttygetc -p ttyputc + -w ttywrite -s ioerr -n ttycontrol + -intr ttyhandler + +/* type of ram disk */ +ram: + on mem + -i raminit -o ramopen -c ramclose + -r ramread -g ioerr -p ioerr + -w ramwrite -s ioerr -n ioerr + -intr ionull + +/* type of a local file system master device */ +lfs: + on ram + -i lfsinit -o lfsopen -c ioerr + -r ioerr -g ioerr -p ioerr + -w ioerr -s ioerr -n ioerr + -intr ionull + +/* type of a local file pseudo-device */ +lfl: + on lfs + -i lflinit -o ioerr -c lflclose + -r lflread -g lflgetc -p lflputc + -w lflwrite -s lflseek -n lflcontrol + -intr ionull + +/* type of namespace device */ +nam: + on top + -i naminit -o namopen -c ioerr + -r ioerr -g ioerr -p ioerr + -w ioerr -s ioerr -n ioerr + -intr ioerr + +/* simple loopback device */ +loopback: + on LOOPBACK + -i loopbackInit -o loopbackOpen -c loopbackClose + -r loopbackRead -g loopbackGetc -p loopbackPutc + -w loopbackWrite -n loopbackControl + +/* physical uart (PL011) device */ +uart: + on HARDWARE + -i uartInit -o ionull -c ionull + -r uartRead -g uartGetc -p uartPutc + -w uartWrite -n uartControl + -intr uartInterrupt + + +%% + +/* Actual device declarations that each give the name of a device that */ +/* will be present in the system */ + + /* Define the console device to be a tty and specify CSR*/ + CONSOLE is tty on uart csr 0x0 -irq 72 + + /* Define a null device */ + NULLDEV is null on nothing + + /* Define a namespace device */ + NAMESPACE is nam on top + + /* Define a ram disk device */ + RAM0 is ram on mem + + /* Define the local file system master device (one per system) */ + + LFILESYS is lfs on ram + + /* Define local file pseudo-devices (multiple per system) */ + + LFILE0 is lfl on lfs + LFILE1 is lfl on lfs + LFILE2 is lfl on lfs + LFILE3 is lfl on lfs + LFILE4 is lfl on lfs + LFILE5 is lfl on lfs + + SERIAL0 is uart on HARDWARE csr 0x101F1000 irq 12 + + /* Loopback device */ + LOOP0 is loopback on LOOPBACK + +%% + +/* Configuration and Size Constants */ + +#define NPROC 100 /* number of user processes */ +#define NSEM 100 /* number of semaphores */ +#define IRQBASE 32 /* base ivec for IRQ0 */ +#define IRQ_TIMER 4 +#define CLKFREQ 200000000 /* 200 MHz clock */ + +#define LF_DISK_DEV RAM0 diff --git a/config/Makefile b/config/Makefile new file mode 100644 index 0000000..68a6a47 --- /dev/null +++ b/config/Makefile @@ -0,0 +1,41 @@ +# +# Make the Xinu configuration program +# + +COMPILER_ROOT = /usr/bin/ + +CC = ${COMPILER_ROOT}gcc +LEX = ${COMPILER_ROOT}flex +YACC = ${COMPILER_ROOT}bison -y # Flag enables yacc-compatible filenames +CFLAGS = +LFLAGS = -lfl + +# +# Name of the configuration program +# + +CONFIG = config + +all: conf.h conf.c + +${CONFIG}: lex.yy.c y.tab.c + $(CC) ${CFLAGS} -o $@ y.tab.c ${LFLAGS} + +lex.yy.c: config.l + $(LEX) config.l + +y.tab.c: config.y + $(YACC) config.y + +clean: + rm -f config lex.yy.c y.tab.c + +conf.h: config Configuration + ./config Configuration conf.c conf.h + +conf.c: config Configuration + ./config Configuration conf.c conf.h + +install: conf.h conf.c + cp -p conf.h ../include + cp -p conf.c ../system diff --git a/config/conf.c b/config/conf.c new file mode 100644 index 0000000..6be7df9 --- /dev/null +++ b/config/conf.c @@ -0,0 +1,112 @@ +/* conf.c (GENERATED FILE; DO NOT EDIT) */ + +#include + + +extern devcall ioerr(void); +extern devcall ionull(void); + +/* Device independent I/O switch */ + +struct dentry devtab[NDEVS] = +{ +/** + * Format of entries is: + * dev-number, minor-number, dev-name, + * init, open, close, + * read, write, seek, + * getc, putc, control, + * dev-csr-address, intr-handler, irq + */ + +/* CONSOLE is tty */ + { 0, 0, "CONSOLE", + (void *)ttyinit, (void *)ionull, (void *)ionull, + (void *)ttyread, (void *)ttywrite, (void *)ioerr, + (void *)ttygetc, (void *)ttyputc, (void *)ttycontrol, + (void *)0x0, (void *)ttyhandler, 72 }, + +/* NULLDEV is null */ + { 1, 0, "NULLDEV", + (void *)ionull, (void *)ionull, (void *)ionull, + (void *)ionull, (void *)ionull, (void *)ioerr, + (void *)ionull, (void *)ionull, (void *)ioerr, + (void *)0x0, (void *)ioerr, 0 }, + +/* NAMESPACE is nam */ + { 2, 0, "NAMESPACE", + (void *)naminit, (void *)namopen, (void *)ioerr, + (void *)ioerr, (void *)ioerr, (void *)ioerr, + (void *)ioerr, (void *)ioerr, (void *)ioerr, + (void *)0x0, (void *)ioerr, 0 }, + +/* RAM0 is ram */ + { 3, 0, "RAM0", + (void *)raminit, (void *)ramopen, (void *)ramclose, + (void *)ramread, (void *)ramwrite, (void *)ioerr, + (void *)ioerr, (void *)ioerr, (void *)ioerr, + (void *)0x0, (void *)ionull, 0 }, + +/* LFILESYS is lfs */ + { 4, 0, "LFILESYS", + (void *)lfsinit, (void *)lfsopen, (void *)ioerr, + (void *)ioerr, (void *)ioerr, (void *)ioerr, + (void *)ioerr, (void *)ioerr, (void *)ioerr, + (void *)0x0, (void *)ionull, 0 }, + +/* LFILE0 is lfl */ + { 5, 0, "LFILE0", + (void *)lflinit, (void *)ioerr, (void *)lflclose, + (void *)lflread, (void *)lflwrite, (void *)lflseek, + (void *)lflgetc, (void *)lflputc, (void *)lflcontrol, + (void *)0x0, (void *)ionull, 0 }, + +/* LFILE1 is lfl */ + { 6, 1, "LFILE1", + (void *)lflinit, (void *)ioerr, (void *)lflclose, + (void *)lflread, (void *)lflwrite, (void *)lflseek, + (void *)lflgetc, (void *)lflputc, (void *)lflcontrol, + (void *)0x0, (void *)ionull, 0 }, + +/* LFILE2 is lfl */ + { 7, 2, "LFILE2", + (void *)lflinit, (void *)ioerr, (void *)lflclose, + (void *)lflread, (void *)lflwrite, (void *)lflseek, + (void *)lflgetc, (void *)lflputc, (void *)lflcontrol, + (void *)0x0, (void *)ionull, 0 }, + +/* LFILE3 is lfl */ + { 8, 3, "LFILE3", + (void *)lflinit, (void *)ioerr, (void *)lflclose, + (void *)lflread, (void *)lflwrite, (void *)lflseek, + (void *)lflgetc, (void *)lflputc, (void *)lflcontrol, + (void *)0x0, (void *)ionull, 0 }, + +/* LFILE4 is lfl */ + { 9, 4, "LFILE4", + (void *)lflinit, (void *)ioerr, (void *)lflclose, + (void *)lflread, (void *)lflwrite, (void *)lflseek, + (void *)lflgetc, (void *)lflputc, (void *)lflcontrol, + (void *)0x0, (void *)ionull, 0 }, + +/* LFILE5 is lfl */ + { 10, 5, "LFILE5", + (void *)lflinit, (void *)ioerr, (void *)lflclose, + (void *)lflread, (void *)lflwrite, (void *)lflseek, + (void *)lflgetc, (void *)lflputc, (void *)lflcontrol, + (void *)0x0, (void *)ionull, 0 }, + +/* SERIAL0 is uart */ + { 11, 0, "SERIAL0", + (void *)uartInit, (void *)ionull, (void *)ionull, + (void *)uartRead, (void *)uartWrite, (void *)ioerr, + (void *)uartGetc, (void *)uartPutc, (void *)uartControl, + (void *)0x101f1000, (void *)uartInterrupt, 12 }, + +/* LOOP0 is loopback */ + { 12, 0, "LOOP0", + (void *)loopbackInit, (void *)loopbackOpen, (void *)loopbackClose, + (void *)loopbackRead, (void *)loopbackWrite, (void *)ioerr, + (void *)loopbackGetc, (void *)loopbackPutc, (void *)loopbackControl, + (void *)0x0, (void *)ioerr, 0 } +}; diff --git a/config/conf.h b/config/conf.h new file mode 100644 index 0000000..2887e55 --- /dev/null +++ b/config/conf.h @@ -0,0 +1,65 @@ +/* conf.h (GENERATED FILE; DO NOT EDIT) */ + +/* Device switch table declarations */ + +/* Device table entry */ +struct dentry { + int32 dvnum; + int32 dvminor; + char *dvname; + devcall (*dvinit) (struct dentry *); + devcall (*dvopen) (struct dentry *, char *, char *); + devcall (*dvclose)(struct dentry *); + devcall (*dvread) (struct dentry *, void *, uint32); + devcall (*dvwrite)(struct dentry *, void *, uint32); + devcall (*dvseek) (struct dentry *, int32); + devcall (*dvgetc) (struct dentry *); + devcall (*dvputc) (struct dentry *, char); + devcall (*dvcntl) (struct dentry *, int32, int32, int32); + void *dvcsr; + void (*dvintr)(void); + byte dvirq; +}; + +extern struct dentry devtab[]; /* one entry per device */ + +/* Device name definitions */ + +#define CONSOLE 0 /* type tty */ +#define NULLDEV 1 /* type null */ +#define NAMESPACE 2 /* type nam */ +#define RAM0 3 /* type ram */ +#define LFILESYS 4 /* type lfs */ +#define LFILE0 5 /* type lfl */ +#define LFILE1 6 /* type lfl */ +#define LFILE2 7 /* type lfl */ +#define LFILE3 8 /* type lfl */ +#define LFILE4 9 /* type lfl */ +#define LFILE5 10 /* type lfl */ +#define SERIAL0 11 /* type uart */ +#define LOOP0 12 /* type loopback */ + +/* Control block sizes */ + +#define Nnull 1 +#define Ntty 1 +#define Nuart 1 +#define Nram 1 +#define Nlfs 1 +#define Nlfl 6 +#define Nnam 1 +#define Nloopback 1 + +#define DEVMAXNAME 24 +#define NDEVS 13 + + +/* Configuration and Size Constants */ + +#define NPROC 100 /* number of user processes */ +#define NSEM 100 /* number of semaphores */ +#define IRQBASE 32 /* base ivec for IRQ0 */ +#define IRQ_TIMER 4 +#define CLKFREQ 200000000 /* 200 MHz clock */ + +#define LF_DISK_DEV RAM0 diff --git a/config/config.l b/config/config.l new file mode 100644 index 0000000..c7d466f --- /dev/null +++ b/config/config.l @@ -0,0 +1,40 @@ +%{ +extern int linectr; +extern int brkcount; +int skipping; +%} +OCT 0[0-7]* +DEC [1-9][0-9]* +HEX 0x[0-9a-fA-F]+ +ID [a-z_A-Z][a-z_A-Z0-9]* +%% +"/*" { skipping = 1; } +"*/" { skipping = 0; } +"%%" { if (! skipping) + if (++brkcount == 2) + { return 0; /* EOF */ } + else + { return DEFBRK; } } +":" { if (! skipping) return COLON; } +{OCT} { if (! skipping) return INTEGER; } +{DEC} { if (! skipping) return INTEGER; } +{HEX} { if (! skipping) return INTEGER; } +is { if (! skipping) return IS; } +on { if (! skipping) return ON; } +"=" ; +-?intr { if (! skipping) return INTR; } +-?csr { if (! skipping) return CSR; } +-?irq { if (! skipping) return IRQ; } +-?i { if (! skipping) return INIT; } +-?o { if (! skipping) return OPEN; } +-?c { if (! skipping) return CLOSE; } +-?r { if (! skipping) return READ; } +-?g { if (! skipping) return GETC; } +-?p { if (! skipping) return PUTC; } +-?w { if (! skipping) return WRITE; } +-?s { if (! skipping) return SEEK; } +-?n { if (! skipping) return CONTROL; } +[ \t]+ ; +"\n" { linectr++; } +{ID} { if (! skipping) return IDENT; } +. { if (! skipping) return yytext[0]; } diff --git a/config/config.y b/config/config.y new file mode 100644 index 0000000..272cd6d --- /dev/null +++ b/config/config.y @@ -0,0 +1,622 @@ +/* config.y - yacc input file for the config program */ + +%token DEFBRK COLON OCTAL INTEGER IDENT CSR IRQ INTR INIT OPEN CLOSE READ + WRITE SEEK CONTROL IS ON GETC PUTC +%{ +#include +#include +#include +#include + +extern char *yytext; +/* + Workaround for type conflict resulting from unmatched versions of flex and + bison (lex and yacc). Force new-style flex output (lex.yy.c) to treat + yyleng as an int (as done by oldest lex versions) instead of a size_t, by + overriding new flex's yy_size_t typedef. +*/ +#ifndef YY_TYPEDEF_YY_SIZE_T +#define YY_TYPEDEF_YY_SIZE_T +typedef int yy_size_t; +#endif +/* end workaround */ +extern int yyleng; + +#define NIL (struct dev_ent *)0x00 + +#define CONFIGC "conf.c" /* name of .c output */ +#define CONFIGH "conf.h" /* name of .h output */ +#define CONFHREF "" /* how conf.h referenced */ +#define CONFIGIN "Configuration" /* name of input file */ +#define CONFMAXNM 24 /* max length of strings */ + +FILE *confc; +FILE *confh; + +char *dbstr; +int ndevs = 0; +int currname = -1; +int currtname = -1; +int currdname = -1; +int brkcount = 0; + +struct sym_ent { /* symbol table */ + char *name; + int occurs; +} symtab[250]; + +int nsym = 0; +int linectr = 1; + +char *doing = "device type declaration"; +char *s; + +struct dev_ent +{ + char *name; /* device name (not used in types) */ + char *tname; /* type name */ + int tnum; /* symbol table index of type */ + char *device; /* device name */ + int csr; /* Control Status Register addr */ + int irq; /* interrupt request */ + char intr[CONFMAXNM]; /* interrupt routine */ + char init[CONFMAXNM]; /* init routine name */ + char open[CONFMAXNM]; /* open routine name */ + char close[CONFMAXNM]; /* close routine name */ + char read[CONFMAXNM]; /* read routine name */ + char write[CONFMAXNM]; /* write routine name */ + char control[CONFMAXNM]; /* control routine name */ + char seek[CONFMAXNM]; /* seek routine name */ + char getc[CONFMAXNM]; /* getc routine name */ + char putc[CONFMAXNM]; /* putc routine name */ + int minor; /* minor device number 0,1,... */ + struct dev_ent *next; /* next node on the list */ +}; + +struct dev_ent *ftypes = NIL; /* linked list of device types */ +struct dev_ent *devs = NIL; /* linked list of device decls. */ +struct dev_ent *lastdv = NIL; +struct dev_ent *currtype = NIL; + +char *devstab[] = +{ + "/* Device table entry */", + "struct\tdentry\t{", + "\tint32 dvnum;", + "\tint32 dvminor;", + "\tchar *dvname;", + "\tdevcall (*dvinit) (struct dentry *);", + "\tdevcall (*dvopen) (struct dentry *, char *, char *);", + "\tdevcall (*dvclose)(struct dentry *);", + "\tdevcall (*dvread) (struct dentry *, void *, uint32);", + "\tdevcall (*dvwrite)(struct dentry *, void *, uint32);", + "\tdevcall (*dvseek) (struct dentry *, int32);", + "\tdevcall (*dvgetc) (struct dentry *);", + "\tdevcall (*dvputc) (struct dentry *, char);", + "\tdevcall (*dvcntl) (struct dentry *, int32, int32, int32);", + "\tvoid *dvcsr;", + "\tvoid (*dvintr)(void);", + "\tbyte dvirq;", + "};\n", + "extern struct dentry devtab[]; /* one entry per device */", + NULL +}; + +/* Prototypes */ +void yyerror(char *s); +int lookup(char *str, int len); +int config_atoi(char *p, int len); +void newattr(int tok, int val); +int cktname(int symid); +void mktype(int deviceid); +void initattr(struct dev_ent *fstr, int tnum, int deviceid); +void mkdev(int nameid, int typid, int deviceid); +int ckdname(int devid); + +%} +%% +configuration: devtypes devdescriptors +; + +devtypes: ftypes DEFBRK { doing = "device definitions"; } +; + +ftypes: /* nothing */ + | ftypes ftype +; + +ftype: tname dev_list +; + +dev_list: devheader attr_list + | dev_list devheader attr_list +; + +devheader: ON id { mktype($2); } +; + +tname: id COLON {$$ = currtname = cktname($1);} +; + +id: IDENT { $$ = currname = lookup(yytext, yyleng); } +; + +attr_list: /* nothing */ + | attr_list attr +; + +attr: CSR number { newattr(CSR, $2); } + | IRQ number { newattr(IRQ, $2); } + | INTR id { newattr(INTR, $2); } + | OPEN id { newattr(OPEN, $2); } + | CLOSE id { newattr(CLOSE, $2); } + | INIT id { newattr(INIT, $2); } + | GETC id { newattr(GETC, $2); } + | PUTC id { newattr(PUTC, $2); } + | READ id { newattr(READ, $2); } + | WRITE id { newattr(WRITE, $2); } + | SEEK id { newattr(SEEK, $2); } + | CONTROL id { newattr(CONTROL, $2); } +; + +number: INTEGER { $$ = config_atoi(yytext, yyleng); } +; + +devdescriptors: /* nothing */ + | devdescriptors descriptor +; + +descriptor: fspec attr_list +; + +fspec: dname IS id optional_on { mkdev($1, $3, $4); } +; + +dname: id { $$ = currdname = ckdname($1); } +; + +optional_on: /* nothing */ { $$ = 0; } + | ON id { $$ = $2; } +; +%% +#include "lex.yy.c" + +int main(int argc, char **argv) +{ + int n, i, j, l, fcount; + struct dev_ent *s; + int verbose = 0; + char *p; + int c; + + if ( argc > 1 && (strncmp("-v", argv[1], 2) == 0) ) { + argc--; + argv++; + verbose++; + } + + if ( argc > 4 ) { + fprintf(stderr, "use: config [-v] [file] [conf.c] [conf.h]\n"); + exit(1); + } + + if (verbose) { printf("Opening input file...\n"); } + + if (argc >= 2) { + if (freopen(argv[1], "r", stdin) == NULL) { + fprintf(stderr, "Can't open %s\n", argv[1]); + exit(1); + } + } + else { /* try to open Configuration file */ + if (freopen(CONFIGIN, "r", stdin) == NULL) { + fprintf(stderr, "Can't open %s\n", CONFIGIN); + exit(1); + } + } + + /* Parse the Configuration file */ + + if (verbose) { printf("Parsing configuration specs...\n"); } + + if ( (n = yyparse()) != 0 ) { exit(n); } + + /* Open conf.h and conf.c for writing */ + + if (verbose) { printf("Opening output files...\n"); } + + if (argc >= 3) { + if ( (confc = fopen(argv[2],"w") ) == NULL) { + fprintf(stderr, "Can't write on %s\n", argv[2]); + exit(1); + } + } + else { /* try to open conf.c file */ + if ( (confc = fopen(CONFIGC,"w") ) == NULL) { + fprintf(stderr, "Can't write on %s\n", CONFIGC); + exit(1); + } + } + + if (argc >= 4) { + if ( (confh = fopen(argv[3],"w") ) == NULL) { + fprintf(stderr, "Can't write on %s\n", argv[3]); + exit(1); + } + } + else { /* try to open conf.h file */ + if ( (confh = fopen(CONFIGH,"w") ) == NULL) { + fprintf(stderr, "Can't write on %s\n", CONFIGH); + exit(1); + } + } + + /** produce conf.h **/ + + fprintf(confh, "/* conf.h (GENERATED FILE; DO NOT EDIT) */\n\n"); + + if (verbose) { printf("Writing output...\n"); } + + fprintf(confh, "/* Device switch table declarations */\n\n"); + + for (i = 0; (p = devstab[i]) != NULL; i++) { + fprintf(confh, "%s\n", p); + } + + fprintf(confh, "\n"); + + /* write device declarations and definitions; count type refs. */ + fprintf(confh, "/* Device name definitions */\n\n"); + for (i = 0, s = devs; s != NIL; i++, s = s->next) { + fprintf(confh, "#define %-12s%d /* type %-8s */\n", + s->name, i, s->tname); + s->minor = symtab[s->tnum].occurs++; + } + fprintf(confh, "\n"); + + /* write count of device types */ + + fprintf(confh, "/* Control block sizes */\n\n"); + for (i = 0; i < nsym; i++) + { + if (symtab[i].occurs > 0) + { + int j; + char name[CONFMAXNM]; + strncpy(name, symtab[i].name, CONFMAXNM); + + name[CONFMAXNM-1] = '\0'; + + fprintf(confh, "#define\tN%s\t%d\n", + name, symtab[i].occurs); + } + } + + fprintf(confh, "\n"); + + fprintf(confh, "#define DEVMAXNAME %d\n", CONFMAXNM); + + if (ndevs > 0) { fprintf(confh, "#define NDEVS %d\n", ndevs); } + + /* Copy definitions to output */ + if (brkcount == 2 && verbose) + { printf("Copying definitions to %s...\n", CONFIGH); } + + if (brkcount == 2 ) + { + while ( (c = input()) > 0) /* lex input routine */ + { putc(c, confh); } + } + + fclose(confh); + + + /** produce conf.c **/ + + fprintf(confc, "/* conf.c (GENERATED FILE; DO NOT EDIT) */\n\n"); + fprintf(confc, "#include \n\n"); + fprintf(confc, "\n"); + + fprintf(confc, "extern\tdevcall\tioerr(void);\n"); + fprintf(confc, "extern\tdevcall\tionull(void);\n\n"); + + /* produce devtab (giant I/O switch table) */ + fprintf(confc, "/* Device independent I/O switch */\n\n"); + if (ndevs > 0) + { + fprintf(confc, "struct dentry devtab[NDEVS] =\n{\n"); + fprintf(confc, "%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n\n", + "/**", + " * Format of entries is:", + " * dev-number, minor-number, dev-name,", + " * init, open, close,", + " * read, write, seek,", + " * getc, putc, control,", + " * dev-csr-address, intr-handler, irq", + " */"); + } + + for (fcount = 0, s = devs; s != NIL; fcount++, s = s->next) + { + fprintf(confc, "/* %s is %s */\n", s->name, s->tname); + fprintf(confc, "\t{ %d, %d, \"%s\",\n", fcount, s->minor, s->name); + fprintf(confc, "\t (void *)%s, (void *)%s, (void *)%s,\n", + s->init, s->open, s->close); + fprintf(confc, "\t (void *)%s, (void *)%s, (void *)%s,\n", + s->read, s->write, s->seek); + fprintf(confc, "\t (void *)%s, (void *)%s, (void *)%s,\n", + s->getc, s->putc, s->control); + fprintf(confc, "\t (void *)0x%x, (void *)%s, %d }", + s->csr, s->intr, s->irq); + + if ( s->next != NIL ) { fprintf(confc, ",\n\n"); } + else { fprintf(confc, "\n};"); } + } + + /* guarantee conf.c written later than conf.c for make */ + fprintf(confc, "\n"); + fclose(confc); + + /* finish up and write report for user if requested */ + if (verbose) + { + printf("Configuration complete. Number of devs=%d:\n", ndevs); + for (s = devs; s != NIL ; s = s->next) + { + printf("Device %s (on %s)\n", s->name, s->device); + printf(" csr=0x%04x, irq=0x%04x, minor=%d\n", + s->csr, s->irq, s->minor); + } + } +} + +void yyerror(char *s) +{ + fprintf(stderr, "Syntax error in %s on line %d\n", doing, linectr); +} + +/* lookup -- lookup a name in the symbol table; return position */ +int lookup(char *str, int len) +{ + int i; + char *s; + + if (len >= CONFMAXNM) + { + len = CONFMAXNM-1; + fprintf(stderr, "warning: name %s truncated\n", str); + } + + s = (char *)malloc(len + 1); + strncpy(s, str, len); + s[len] = '\0'; + + for (i = 0; i < nsym; i++) + { + if ( strncmp(s, symtab[i].name, CONFMAXNM) == 0 ) + { return(i); } + } + + symtab[nsym].name = s; + symtab[nsym].occurs = 0; + + return nsym++; +} + +int config_atoi(char *p, int len) +{ + int base, rv; + + if (*p == '0') + { + ++p; + --len; + if (*p == 'x' || *p == 'X') + { + ++p; --len; /* skip 'x' */ + base = 16; + } + else + { + base = 8; + } + } + else + { + base = 10; + } + + rv = 0; + for (; len > 0; ++p, --len) + { + rv *= base; + if (isdigit(*p)) { rv += *p - '0'; } + else if (isupper(*p)) { rv += *p - 'A' + 10; } + else { rv += *p - 'a' + 10; } + } + + return rv; +} + +/* newattr -- add a new attribute spec to current type/device description */ +/* tok: token type (attribute type) */ +/* val: symbol number of value */ +void newattr(int tok, int val) +{ + struct dev_ent *s; + char *c; + + /* doing types */ + if (devs == NIL) { s = currtype; } + else { s = lastdv; } + + if (val>=0 && valcsr = val; break; + case IRQ: s->irq = val; break; + case INTR: strncpy(s->intr, c, CONFMAXNM); break; + case READ: strncpy(s->read, c, CONFMAXNM); break; + case WRITE: strncpy(s->write, c, CONFMAXNM); break; + case GETC: strncpy(s->getc, c, CONFMAXNM); break; + case PUTC: strncpy(s->putc, c, CONFMAXNM); break; + case OPEN: strncpy(s->open, c, CONFMAXNM); break; + case CLOSE: strncpy(s->close, c, CONFMAXNM); break; + case INIT: strncpy(s->init, c, CONFMAXNM); break; + case SEEK: strncpy(s->seek, c, CONFMAXNM); break; + case CONTROL: strncpy(s->control, c, CONFMAXNM); break; + default: fprintf(stderr, "Internal error 1\n"); + } +} + +/* cktname -- check type name for duplicates */ +int cktname(int symid) +{ + struct dev_ent *s; + char *name; + + name = symtab[symid].name; + for (s = ftypes; s != NIL; s = s->next) + { + if (s->tname == name) + { + fprintf(stderr, "Duplicate type name %s on line %d\n", + name, linectr); + exit(1); + } + } + + return symid; +} + +/* mktype -- make a node in the type list and initialize to defaults */ +void mktype(int deviceid) +{ + struct dev_ent *s, *p; + char *tn, *dn; + + p = NIL; + tn = symtab[currtname].name; + dn = symtab[deviceid].name; + for (s = ftypes; s != NIL ; s = s->next) + { + if (s->tname == tn && s->device==dn) + { + fprintf(stderr, "Duplicate device %s for type %s on line %d\n", + dn, tn, linectr); + exit(1); + } + p = s; + } + + currtype = s = (struct dev_ent *)malloc(sizeof(struct dev_ent)); + if (ftypes != NIL) { p->next = s; } + else { ftypes = s; } + + initattr(s, currtname, deviceid); +} + +/* initialize attributes in a type declaration node to typename... */ +void initattr(struct dev_ent *fstr, int tnum, int deviceid) +{ + fstr->name = NULL; + fstr->tname = symtab[tnum].name; + fstr->tnum = tnum; + fstr->device = symtab[deviceid].name; + fstr->csr = 0; + fstr->irq = 0; + strncpy(fstr->intr, "ioerr", 5); + strncpy(fstr->init, "ioerr", 5); + strncpy(fstr->open, "ioerr", 5); + strncpy(fstr->close, "ioerr", 5); + strncpy(fstr->read, "ioerr", 5); + strncpy(fstr->write, "ioerr", 5); + strncpy(fstr->control, "ioerr", 5); + strncpy(fstr->seek, "ioerr", 5); + strncpy(fstr->getc, "ioerr", 5); + strncpy(fstr->putc, "ioerr", 5); + fstr->minor = 0; +} + +/* mkdev -- make a node on the device list */ +void mkdev(int nameid, int typid, int deviceid) +{ + struct dev_ent *s; + char *devn, *tn, *dn; + int found; + + s = (struct dev_ent *)malloc(sizeof(struct dev_ent)); + s->next = NIL; + if (devs == NIL) + { + devs = s; + lastdv = s; + } + else + { + lastdv->next = s; + lastdv = s; + } + + ndevs++; + tn = symtab[typid].name; + devn = symtab[nameid].name; + + if (deviceid >= 0) { dn = symtab[deviceid].name; } + else { dn = NULL; } + + found = 0; + for (s = ftypes; s != NULL ; s = s->next) + { + if (s->tname == tn && (dn == NULL || s->device == dn)) + { + memcpy(lastdv, s, sizeof(struct dev_ent)); + found = 1; + break; + } + } + + if (found==0) + { + fprintf(stderr, + "Bad type or device name in declaration of %s on line %d\n", + devn, linectr); + exit(1); + } + + lastdv->next = NIL; + lastdv->name = devn; +} + + +/* chdname -- check for duplicate device name */ +int ckdname(int devid) +{ + struct dev_ent *s; + char *name; + + name = symtab[devid].name; + + for (s = devs; s != NIL; s = s->next) + { + if (s->name == name) + { + fprintf(stderr, "Duplicate device name %s on line %d\n", + name, linectr); + exit(1); + } + } + + return devid; +} diff --git a/device/eth/colon2mac.c b/device/eth/colon2mac.c new file mode 100644 index 0000000..c97791a --- /dev/null +++ b/device/eth/colon2mac.c @@ -0,0 +1,58 @@ +/* colon2mac.c - colon2mac */ + +#include +#include + +/*------------------------------------------------------------------------ + * colonmac - parse a colon-hex Ethernet address and convert to binary + *------------------------------------------------------------------------ + */ +int32 colon2mac ( + char *src, /* ptr to Ethernet address in ASCII of */ + /* the form: xx:xx:xx:xx:xx:xx */ + byte *dst /* loc to put binary form of address */ + ) +{ + int32 cnt; /* count output bytes */ + int32 digit = 0; /* next digit in binary */ + int32 ch = 0; /* next digit in ASCII */ + + if (src == NULL || dst == NULL) { + return SYSERR; + } + + /* For each of the six bytes in an Ethernet address */ + + for (cnt = 0; (cnt < ETH_ADDR_LEN) && (src != NULLCH); cnt++) { + + /* Get first hex character and convert to binary */ + + ch = *src++; + if (isdigit(ch)) { + digit = ch - '0'; + } else if (isxdigit(ch)) { + digit = 10 + ch - (isupper(ch) ? 'A' : 'a'); + } else { + digit = 0; + } + dst[cnt] = digit << 4; + + /* Get second hex character and convert to binary */ + + ch = *src++; + + if (isdigit(ch)) { + digit = ch - '0'; + } else if (isxdigit(ch)) { + digit = 10 + ch - (isupper(ch) ? 'A' : 'a'); + } else { + digit = 0; + } + dst[cnt] |= digit; + + if (*src++ != ':') { + break; + } + } + return cnt; +} diff --git a/device/eth/ethcontrol.c b/device/eth/ethcontrol.c new file mode 100644 index 0000000..2de1873 --- /dev/null +++ b/device/eth/ethcontrol.c @@ -0,0 +1,35 @@ +/* ethcontrol.c - ethcontrol */ + +#include + +/*------------------------------------------------------------------------ + * ethcontrol - implement control function for a quark ethernet device + *------------------------------------------------------------------------ + */ +devcall ethcontrol ( + struct dentry *devptr, /* entry in device switch table */ + int32 func, /* control function */ + int32 arg1, /* argument 1, if needed */ + int32 arg2 /* argument 2, if needed */ + ) +{ + struct ethcblk *ethptr; /* Ethertab entry pointer */ + int32 retval = OK; /* Return value of cntl function*/ + + ethptr = ðertab[devptr->dvminor]; + + switch (func) { + + /* Get MAC address */ + + case ETH_CTRL_GET_MAC: + memcpy((byte *)arg1, ethptr->devAddress, + ETH_ADDR_LEN); + break; + + default: + return SYSERR; + } + + return retval; +} diff --git a/device/eth/ethhandler.c b/device/eth/ethhandler.c new file mode 100644 index 0000000..c0d521a --- /dev/null +++ b/device/eth/ethhandler.c @@ -0,0 +1,123 @@ +/* ethhandler.c - ethhandler */ + +#include + +/*------------------------------------------------------------------------ + * ethhandler - TI AM335X Ethernet Interrupt Handler + *------------------------------------------------------------------------ + */ +interrupt ethhandler ( + uint32 xnum /* IRQ number */ + ) +{ + struct eth_a_csreg *csrptr; /* Ethernet CSR pointer */ + struct eth_a_tx_desc *tdescptr; /* Tx desc pointer */ + struct eth_a_rx_desc *rdescptr; /* Rx desc pointer */ + struct ethcblk *ethptr = ðertab[0]; /* Ethernet ctl blk ptr */ + + csrptr = (struct eth_a_csreg *)ethptr->csr; + + if(xnum == ETH_AM335X_TXINT) { /* Transmit interrupt */ + + /* Get pointer to first desc in queue */ + + tdescptr = (struct eth_a_tx_desc *)ethptr->txRing + + ethptr->txHead; + + /* Defer scheduling until all descs are processed */ + + resched_cntl(DEFER_START); + + while(semcount(ethptr->osem) < (int32)ethptr->txRingSize) { + + /* If desc owned by DMA, check if we need to */ + /* Restart the transmission */ + + if(tdescptr->stat & ETH_AM335X_TDS_OWN) { + if(csrptr->stateram->tx_hdp[0] == 0) { + csrptr->stateram->tx_hdp[0] = + (uint32)tdescptr; + } + break; + } + + /* Acknowledge the interrupt */ + + csrptr->stateram->tx_cp[0] = (uint32)tdescptr; + + /* Increment the head index of the queue */ + /* And go to the next descriptor in queue */ + + ethptr->txHead++; + tdescptr++; + if(ethptr->txHead >= ethptr->txRingSize) { + ethptr->txHead = 0; + tdescptr = (struct eth_a_tx_desc *) + ethptr->txRing; + } + + /* Signal the output semaphore */ + + signal(ethptr->osem); + } + + /* Acknowledge the transmit interrupt */ + + csrptr->cpdma->eoi_vector = 0x2; + + /* Resume rescheduling */ + + resched_cntl(DEFER_STOP); + } + else if(xnum == ETH_AM335X_RXINT) { /* Receive interrupt */ + + /* Get the pointer to last desc in the queue */ + + rdescptr = (struct eth_a_rx_desc *)ethptr->rxRing + + ethptr->rxTail; + + /* Defer scheduling until all descriptors are processed */ + + resched_cntl(DEFER_START); + + while(semcount(ethptr->isem) < (int32)ethptr->rxRingSize) { + + /* Check if we need to restart the DMA */ + + if(rdescptr->stat & ETH_AM335X_RDS_OWN) { + if(csrptr->stateram->rx_hdp[0] == 0) { + csrptr->stateram->rx_hdp[0] = + (uint32)rdescptr; + } + break; + } + + /* Acknowledge the interrupt */ + + csrptr->stateram->rx_cp[0] = (uint32)rdescptr; + + /* Increment the tail index of the queue */ + /* And go to the next descriptor in the queue */ + + ethptr->rxTail++; + rdescptr++; + if(ethptr->rxTail >= ethptr->rxRingSize) { + ethptr->rxTail = 0; + rdescptr = (struct eth_a_rx_desc *) + ethptr->rxRing; + } + + /* Signal the input semaphore */ + + signal(ethptr->isem); + } + + /* Acknowledge the receive interrupt */ + + csrptr->cpdma->eoi_vector = 0x1; + + /* Resume rescheduling */ + + resched_cntl(DEFER_STOP); + } +} diff --git a/device/eth/ethinit.c b/device/eth/ethinit.c new file mode 100644 index 0000000..fdbd55d --- /dev/null +++ b/device/eth/ethinit.c @@ -0,0 +1,403 @@ +/* ethinit.c - ethinit, eth_phy_read, eth_phy_write */ + +#include + +struct eth_a_csreg eth_a_regs; + +struct ethcblk ethertab[1]; + +/*----------------------------------------------------------------------- + * eth_phy_read - read a PHY register + *----------------------------------------------------------------------- + */ +int32 eth_phy_read ( + volatile struct eth_a_mdio *mdio,/* MDIO CSR pointer */ + byte regadr, /* PHY Register number */ + byte phyadr, /* PHY address */ + uint32 *value /* Pointer to value */ + ) +{ + + /* Ethernet PHY has only 32 registers */ + + if(regadr > 31) { + return SYSERR; + } + + /* Only 32 possible PHY addresses */ + + if(phyadr > 31) { + return SYSERR; + } + + /* Wait for the previous access to complete */ + + while( (mdio->useraccess0 & ETH_AM335X_MDIOUA_GO) != 0 ); + + /* Start the access */ + + mdio->useraccess0 = (ETH_AM335X_MDIOUA_GO) | + (regadr << 21) | + (phyadr << 16); + + /* Wait until the access is complete */ + + while( (mdio->useraccess0 & ETH_AM335X_MDIOUA_GO) != 0 ); + + /* Check if the access was successful */ + + if( (mdio->useraccess0 & ETH_AM335X_MDIOUA_ACK) == 0 ) { + return SYSERR; + } + + /* Copy the value read */ + + (*value) = mdio->useraccess0 & ETH_AM335X_MDIOUA_DM; + + return OK; +} + +/*----------------------------------------------------------------------- + * eth_phy_write - write a PHY register + *----------------------------------------------------------------------- + */ +int32 eth_phy_write ( + volatile struct eth_a_mdio *mdio, /* MDIO CSR pointer */ + byte regadr, /* PHY register number */ + byte phyadr, /* PHY address */ + uint32 value /* Value to be written */ + ) +{ + + /* There are only 32 PHY registers */ + + if(regadr > 31) { + return SYSERR; + } + + /* There are only 32 possible PHY addresses */ + + if(phyadr > 31) { + return SYSERR; + } + + /* Wait for the previous access to complete */ + + while( (mdio->useraccess0 & ETH_AM335X_MDIOUA_GO) != 0); + + /* Start the access */ + + mdio->useraccess0 = ETH_AM335X_MDIOUA_GO | + ETH_AM335X_MDIOUA_WR | + (regadr << 21) | + (phyadr << 16) | + (value & 0xffff); + + /* Wait for the access to complete */ + + while( (mdio->useraccess0 & ETH_AM335X_MDIOUA_GO) != 0); + + return OK; +} + +/*----------------------------------------------------------------------- + * eth_phy_reset - Reset an Ethernet PHY + *----------------------------------------------------------------------- + */ +int32 eth_phy_reset ( + volatile struct eth_a_mdio *mdio, /* MDIO CSR pointer */ + byte phyadr /* PHY Address */ + ) +{ + uint32 phyreg; /* Variable to hold ETH PHY register value */ + int32 retries;/* Number of retries */ + int32 retval; /* Return value of functions called here */ + + /* Read the PHY Control Register */ + + retval = eth_phy_read(mdio, ETH_PHY_CTLREG, phyadr, &phyreg); + if(retval == SYSERR) { + return SYSERR; + } + + /* Set the Reset bit and write the register */ + + phyreg |= ETH_PHY_CTLREG_RESET; + eth_phy_write(mdio, ETH_PHY_CTLREG, phyadr, phyreg); + + /* Check if Reset operation is complete */ + + for(retries = 0; retries < 10; retries++) { + if(eth_phy_read(mdio, ETH_PHY_CTLREG, phyadr, &phyreg) == SYSERR) { + return SYSERR; + } + if((phyreg & ETH_PHY_CTLREG_RESET) == 0) { + break; + } + else { + retries++; + DELAY(ETH_AM335X_INIT_DELAY); + continue; + } + } + if(retries >= 3) { + return SYSERR; + } + + /* Check if the Link is established */ + + for(retries = 0; retries < 10; retries++) { + if(eth_phy_read(mdio, ETH_PHY_STATREG, phyadr, &phyreg) == SYSERR) { + return SYSERR; + } + if(phyreg & ETH_PHY_STATREG_LINK) { + break; + } + else { + retries++; + DELAY(ETH_AM335X_INIT_DELAY); + continue; + } + } + if(retries >= 3) { + return SYSERR; + } + + return OK; +} + +/*----------------------------------------------------------------------- + * ethinit - initialize the TI AM335X ethernet hardware + *----------------------------------------------------------------------- + */ +int32 ethinit ( + struct dentry *devptr + ) +{ + struct ethcblk *ethptr; /* Ethernet control blk pointer */ + struct eth_a_tx_desc *tdescptr;/* Tx descriptor pointer */ + struct eth_a_rx_desc *rdescptr;/* Rx descriptor pointer */ + struct netpacket *pktptr; /* Packet pointer */ + struct eth_a_csreg *csrptr; /* Ethernet CSR pointer */ + uint32 phyreg; /* Variable to store PHY reg val*/ + int32 retval; /* Return value */ + int32 i; /* Index variable */ + + /* Get the Ethernet control block address */ + /* from the device table entry */ + + ethptr = ðertab[devptr->dvminor]; + + /* Store the address of CSRs in the Ethernet control block */ + + csrptr = ð_a_regs; + ethptr->csr = csrptr; + + /* Initialize the addresses of all the submodules */ + + csrptr->ale = (struct eth_a_ale *)ETH_AM335X_ALE_ADDR; + csrptr->cpdma = (struct eth_a_cpdma *)ETH_AM335X_CPDMA_ADDR; + csrptr->sl = (struct eth_a_sl *)ETH_AM335X_SL1_ADDR; + csrptr->stateram = (struct eth_a_stateram *) + ETH_AM335X_STATERAM_ADDR; + csrptr->ss = (struct eth_a_ss *)ETH_AM335X_SS_ADDR; + csrptr->wr = (struct eth_a_wr *)ETH_AM335X_WR_ADDR; + csrptr->mdio = (struct eth_a_mdio *)ETH_AM335X_MDIO_ADDR; + + /* Reset all the submodules */ + + csrptr->cpdma->reset = 1; + while(csrptr->cpdma->reset == 1); + + csrptr->sl->reset = 1; + while(csrptr->sl->reset == 1); + + csrptr->wr->reset = 1; + while(csrptr->wr->reset == 1) ; + + csrptr->ss->reset = 1; + while(csrptr->ss->reset == 1) ; + + /* Enable MDIO */ + + csrptr->mdio->ctrl |= ETH_AM335X_MDIOCTL_EN; + + /* Reset the PHY */ + + retval = eth_phy_reset(csrptr->mdio, 0); + if(retval == SYSERR) { + kprintf("Cannot reset Ethernet PHY\n"); + return SYSERR; + } + + retval = eth_phy_read(csrptr->mdio, ETH_PHY_CTLREG, 0, &phyreg); + if(retval == SYSERR) { + return SYSERR; + } + + if( (phyreg & ETH_PHY_CTLREG_SM) == ETH_PHY_10M ) { + kprintf("Ethernet Link is Up. Speed is 10Mbps\n"); + } + else if( (phyreg & ETH_PHY_CTLREG_SM) == ETH_PHY_100M ) { + kprintf("Ethernet Link is Up. Speed is 100Mbps\n"); + } + else if( (phyreg & ETH_PHY_CTLREG_SM) == ETH_PHY_1000M ) { + kprintf("Ethernet Link is Up. Speed is 1000Mbps\n"); + } + else { + return SYSERR; + } + + if(phyreg & ETH_PHY_CTLREG_FD) { + kprintf("Link is Full Duplex\n"); + csrptr->sl->macctrl |= ETH_AM335X_SLCTL_FD; + } + else { + kprintf("Link is Half Duplex\n"); + } + + /* Read the device MAC address */ + for(i = 0; i < 2; i++) { + ethptr->devAddress[4+i] = *((byte *)(0x44e10630+i)); + } + for(i = 0; i < 4; i++) { + ethptr->devAddress[i] = *((byte *)(0x44e10634+i)); + } + + kprintf("MAC Address is: "); + for(i = 0; i < 5; i++) { + kprintf("%02X:", ethptr->devAddress[i]); + } + kprintf("%02X\n", ethptr->devAddress[5]); + + /* Initialize the rx ring size field */ + ethptr->rxRingSize = ETH_AM335X_RX_RING_SIZE; + + /* Allocate memory for the rx ring */ + ethptr->rxRing = (void*)getmem(sizeof(struct eth_a_rx_desc)* + ethptr->rxRingSize); + if((int32)ethptr->rxRing == SYSERR) { + return SYSERR; + } + + /* Zero out the rx ring */ + memset((char*)ethptr->rxRing, NULLCH, + sizeof(struct eth_a_rx_desc)*ethptr->rxRingSize); + + /* Allocate memory for rx buffers */ + ethptr->rxBufs = (void*)getmem(sizeof(struct netpacket) * + ethptr->rxRingSize); + if((int32)ethptr->rxBufs == SYSERR) { + return SYSERR; + } + + /* Zero out the rx buffers */ + memset((char *)ethptr->rxBufs, NULLCH, sizeof(struct netpacket) * + ethptr->rxRingSize); + + /* Initialize the rx ring */ + + rdescptr = (struct eth_a_rx_desc *)ethptr->rxRing; + pktptr = (struct netpacket *)ethptr->rxBufs; + + for(i = 0; i < ethptr->rxRingSize; i++) { + rdescptr->next = rdescptr + 1; + rdescptr->buffer = (uint32)pktptr->net_ethdst; + rdescptr->buflen = sizeof(struct netpacket) - 2; + rdescptr->bufoff = 0; + rdescptr->stat = ETH_AM335X_RDS_OWN; + rdescptr++; + pktptr++; + } + (--rdescptr)->next = NULL; + + ethptr->rxHead = 0; + ethptr->rxTail = 0; + ethptr->isem = semcreate(0); + if((int32)ethptr->isem == SYSERR) { + return SYSERR; + } + + /* initialize the tx ring size */ + ethptr->txRingSize = ETH_AM335X_TX_RING_SIZE; + + /* Allocate memory for tx ring */ + ethptr->txRing = (void*)getmem(sizeof(struct eth_a_tx_desc)* + ethptr->txRingSize); + if((int32)ethptr->txRing == SYSERR) { + return SYSERR; + } + + /* Zero out the tx ring */ + memset((char*)ethptr->txRing, NULLCH, + sizeof(struct eth_a_tx_desc)*ethptr->txRingSize); + + /* Allocate memory for tx buffers */ + ethptr->txBufs = (void*)getmem(sizeof(struct netpacket) * + ethptr->txRingSize); + if((int32)ethptr->txBufs == SYSERR) { + return SYSERR; + } + + /* Zero out the tx buffers */ + memset((char*)ethptr->txBufs, NULLCH, sizeof(struct netpacket) * + ethptr->txRingSize); + + /* Initialize the tx ring */ + + tdescptr = (struct eth_a_tx_desc *)ethptr->txRing; + pktptr = (struct netpacket *)ethptr->txBufs; + + for(i = 0; i < ethptr->txRingSize; i++) { + tdescptr->next = NULL; + tdescptr->buffer = (uint32)pktptr->net_ethdst; + tdescptr->buflen = sizeof(struct netpacket) - 2; + tdescptr->bufoff = 0; + tdescptr->stat = (ETH_AM335X_TDS_SOP | + ETH_AM335X_TDS_EOP | + ETH_AM335X_TDS_DIR | + ETH_AM335X_TDS_P1); + tdescptr++; + pktptr++; + } + + ethptr->txHead = 0; + ethptr->txTail = 0; + ethptr->osem = semcreate(ethptr->txRingSize); + if((int32)ethptr->osem == SYSERR) { + return SYSERR; + } + + /* Enable the ALE and put it into bypass mode */ + csrptr->ale->ctrl = (ETH_AM335X_ALECTL_EN | + ETH_AM335X_ALECTL_BY); + + /* Put the ports 0, 1 in forwarding state */ + csrptr->ale->portctl[0] = ETH_AM335X_ALEPCTL_FWD; + csrptr->ale->portctl[1] = ETH_AM335X_ALEPCTL_FWD; + + /* Start the rx and tx processes in DMA */ + csrptr->cpdma->tx_ctrl = 1; + csrptr->cpdma->rx_ctrl = 1; + + /* Initialize the head desc pointers for tx and rx */ + csrptr->stateram->tx_hdp[0] = 0; + csrptr->stateram->rx_hdp[0] = (uint32)ethptr->rxRing; + + /* Enable Rx and Tx in MAC */ + csrptr->sl->macctrl |= ETH_AM335X_SLCTL_EN; + + /* Set interrupt vectors */ + set_evec(ETH_AM335X_TXINT, (uint32)devptr->dvintr); + set_evec(ETH_AM335X_RXINT, (uint32)devptr->dvintr); + + /* Enable the CPDMA interrupts */ + csrptr->cpdma->tx_intmask_set = 0x1; + csrptr->cpdma->rx_intmask_set = 0x1; + + /* Route the interrupts to core 0 */ + csrptr->wr->c0_tx_en = 0x1; + csrptr->wr->c0_rx_en = 0x1; + + return OK; +} diff --git a/device/eth/ethread.c b/device/eth/ethread.c new file mode 100644 index 0000000..1773097 --- /dev/null +++ b/device/eth/ethread.c @@ -0,0 +1,69 @@ +/* ethread.c - ethread */ + +#include + +/*------------------------------------------------------------------------ + * ethread - read an incoming packet on TI AM335X Ethernet + *------------------------------------------------------------------------ + */ +int32 ethread ( + struct dentry *devptr, + void *buf, + uint32 count + ) +{ + struct ethcblk *ethptr; /* Ethernet ctl blk ptr */ + struct eth_a_csreg *csrptr; /* Ethernet CSR pointer */ + struct eth_a_rx_desc *rdescptr;/* Rx Desc. pointer */ + struct eth_a_rx_desc *prev; /* Prev Rx desc pointer */ + uint32 retval; /* Num of bytes returned*/ + + ethptr = ðertab[devptr->dvminor]; + + /* Get the pointer to Ethernet CSR */ + csrptr = (struct eth_a_csreg *)ethptr->csr; + + /* Wait for a packet */ + wait(ethptr->isem); + + /* Get pointer to the descriptor */ + rdescptr = (struct eth_a_rx_desc *)ethptr->rxRing + + ethptr->rxHead; + + /* Read the packet length */ + retval = rdescptr->packlen; + if(retval > count) { + retval = count; + } + + /* Copy the packet into user provided buffer */ + memcpy((char *)buf, (char *)rdescptr->buffer, retval); + + /* Initialize the descriptor for next packet */ + rdescptr->stat = ETH_AM335X_RDS_OWN; + rdescptr->bufoff = 0; + rdescptr->buflen = sizeof(struct netpacket); + rdescptr->packlen = 0; + rdescptr->next = NULL; + + /* Insert the descriptor into Rx queue */ + prev = (struct eth_a_rx_desc *)csrptr->stateram->rx_hdp[0]; + if(prev == NULL) { + kprintf("hdp 0, adding %x\n", rdescptr); + csrptr->stateram->rx_hdp[0] = (uint32)rdescptr; + } + else { + while(prev->next != NULL) { + prev = prev->next; + } + prev->next = rdescptr; + } + + /* Increment the head index of rx ring */ + ethptr->rxHead++; + if(ethptr->rxHead >= ethptr->rxRingSize) { + ethptr->rxHead = 0; + } + + return retval; +} diff --git a/device/eth/ethwrite.c b/device/eth/ethwrite.c new file mode 100644 index 0000000..4866512 --- /dev/null +++ b/device/eth/ethwrite.c @@ -0,0 +1,83 @@ +/* ethwrite.c - ethwrite */ + +#include + +#define MIN_ETHERNET_FRAME 64 + +/*------------------------------------------------------------------------ + * ethwrite - enqueue a packet for transmission on TI AM335X Ethernet + *------------------------------------------------------------------------ + */ +int32 ethwrite ( + struct dentry *devptr, + void *buf, + uint32 count + ) +{ + struct ethcblk *ethptr; /* Ether entry pointer */ + struct eth_a_csreg *csrptr; /* Ethernet CSR pointer */ + struct eth_a_tx_desc *tdescptr;/* Tx Desc. pointer */ + struct eth_a_tx_desc *prev; /* Prev. Desc. pointer */ + + ethptr = ðertab[devptr->dvminor]; + + /* Get the pointer to the Ethernet CSR */ + csrptr = (struct eth_a_csreg *)ethptr->csr; + + /* Wait for an empty slot in the queue */ + wait(ethptr->osem); + + /* Get the pointer to the next descriptor */ + tdescptr = (struct eth_a_tx_desc *)ethptr->txRing + + ethptr->txTail; + + /* Adjust count if greater than max. possible packet size */ + if(count > PACKLEN) { + count = PACKLEN; + } + + /* Copy the packet into the Tx buffer */ + memcpy((char *)tdescptr->buffer, buf, count); + + /* Pad frame to minimum Ethernet frame size */ + if (count < MIN_ETHERNET_FRAME) { + memset((char *)tdescptr->buffer+count, 0, MIN_ETHERNET_FRAME - count); + count = MIN_ETHERNET_FRAME; + } + + /* Initialize the descriptor */ + tdescptr->next = NULL; + tdescptr->buflen = count; + tdescptr->bufoff = 0; + tdescptr->packlen = count; + tdescptr->stat = (ETH_AM335X_TDS_SOP | /* Start of packet */ + ETH_AM335X_TDS_EOP | /* End of packet */ + ETH_AM335X_TDS_OWN | /* Own flag set for DMA */ + ETH_AM335X_TDS_DIR | /* Directed packet */ + ETH_AM335X_TDS_P1); /* Output port is port1 */ + + + /* Insert the descriptor into Tx queue */ + + if(csrptr->stateram->tx_hdp[0] == 0) { + /* Tx queue is empty, this desc. will be the first */ + csrptr->stateram->tx_hdp[0] = (uint32)tdescptr; + } + else { + /* Tx queue not empty, insert at end */ + prev = (struct eth_a_tx_desc *) + csrptr->stateram->tx_hdp[0]; + while(prev->next != NULL) { + prev = prev->next; + } + prev->next = tdescptr; + } + + /* Increment the tail index of the Tx ring */ + ethptr->txTail++; + if(ethptr->txTail >= ethptr->txRingSize) { + ethptr->txTail = 0; + } + + return count; +} diff --git a/device/lfs/lfdballoc.c b/device/lfs/lfdballoc.c new file mode 100644 index 0000000..bafb418 --- /dev/null +++ b/device/lfs/lfdballoc.c @@ -0,0 +1,40 @@ +/* lfdballoc.c - lfdballoc */ + +#include + +#define DFILL '+' /* character used to fill a disk block */ + +/*------------------------------------------------------------------------ + * lfdballoc - Allocate a new data block from free list on disk + * (assumes directory mutex held) + *------------------------------------------------------------------------ + */ +dbid32 lfdballoc ( + struct lfdbfree *dbuff /* Addr. of buffer to hold data block */ + ) +{ + dbid32 dnum; /* ID of next d-block on the free list */ + int32 retval; /* Return value */ + + /* Get the ID of first data block on the free list */ + + dnum = Lf_data.lf_dir.lfd_dfree; + if (dnum == LF_DNULL) { /* Ran out of free data blocks */ + panic("out of data blocks"); + } + retval = read(Lf_data.lf_dskdev, (char *)dbuff, dnum); + if (retval == SYSERR) { + panic("lfdballoc cannot read disk block\n\r"); + } + + /* Unlink d-block from in-memory directory */ + + Lf_data.lf_dir.lfd_dfree = dbuff->lf_nextdb; + write(Lf_data.lf_dskdev, (char *)&Lf_data.lf_dir, LF_AREA_DIR); + Lf_data.lf_dirdirty = FALSE; + + /* Fill data block to erase old data */ + + memset((char *)dbuff, DFILL, LF_BLKSIZ); + return dnum; +} diff --git a/device/lfs/lfdbfree.c b/device/lfs/lfdbfree.c new file mode 100644 index 0000000..d23eadc --- /dev/null +++ b/device/lfs/lfdbfree.c @@ -0,0 +1,25 @@ +/* lfdbfree.c - lfdbfree */ + +#include + +/*------------------------------------------------------------------------ + * lfdbfree - Free a data block given its block number (assumes + * directory mutex is held) + *------------------------------------------------------------------------ + */ +status lfdbfree( + did32 diskdev, /* ID of disk device to use */ + dbid32 dnum /* ID of data block to free */ + ) +{ + struct lfdir *dirptr; /* Pointer to directory */ + struct lfdbfree buf; /* Buffer to hold data block */ + + dirptr = &Lf_data.lf_dir; + buf.lf_nextdb = dirptr->lfd_dfree; + dirptr->lfd_dfree = dnum; + write(diskdev, (char *)&buf, dnum); + write(diskdev, (char *)dirptr, LF_AREA_DIR); + + return OK; +} diff --git a/device/lfs/lfflush.c b/device/lfs/lfflush.c new file mode 100644 index 0000000..89d1ff6 --- /dev/null +++ b/device/lfs/lfflush.c @@ -0,0 +1,42 @@ +/* lfflush.c - lfflush */ + +#include + +/*------------------------------------------------------------------------ + * lfflush - Flush directory, data block, and index block for an open + * file (assumes file mutex is held) + *------------------------------------------------------------------------ + */ +status lfflush ( + struct lflcblk *lfptr /* Ptr to file pseudo device */ + ) +{ + + if (lfptr->lfstate == LF_FREE) { + return SYSERR; + } + + /* Write the directory if it has changed */ + + if (Lf_data.lf_dirdirty) { + write(Lf_data.lf_dskdev, (char *)&Lf_data.lf_dir, + LF_AREA_DIR); + Lf_data.lf_dirdirty = FALSE; + } + + /* Write data block if it has changed */ + + if (lfptr->lfdbdirty) { + write(Lf_data.lf_dskdev, lfptr->lfdblock, lfptr->lfdnum); + lfptr->lfdbdirty = FALSE; + } + + /* Write i-block if it has changed */ + + if (lfptr->lfibdirty) { + lfibput(Lf_data.lf_dskdev, lfptr->lfinum, &lfptr->lfiblock); + lfptr->lfibdirty = FALSE; + } + + return OK; +} diff --git a/device/lfs/lfgetmode.c b/device/lfs/lfgetmode.c new file mode 100644 index 0000000..cf81090 --- /dev/null +++ b/device/lfs/lfgetmode.c @@ -0,0 +1,61 @@ +/* lfgetmode.c - lfgetmode */ + +#include + +/*------------------------------------------------------------------------ + * lfgetmode - Parse mode argument and generate integer of mode bits + *------------------------------------------------------------------------ + */ +int32 lfgetmode ( + char *mode /* String of mode characters */ + ) +{ + int32 mbits; /* Mode bits to return */ + char ch; /* Next char in mode string */ + + mbits = 0; + + /* Mode string specifies: */ + /* r - read */ + /* w - write */ + /* o - old (file must exist) */ + /* n - new (create a new file) */ + + while ( (ch = *mode++) != NULLCH) { + switch (ch) { + + case 'r': if (mbits&LF_MODE_R) { + return SYSERR; + } + mbits |= LF_MODE_R; + continue; + + case 'w': if (mbits&LF_MODE_W) { + return SYSERR; + } + mbits |= LF_MODE_W; + continue; + + case 'o': if (mbits&LF_MODE_O || mbits&LF_MODE_N) { + return SYSERR; + } + mbits |= LF_MODE_O; + break; + + case 'n': if (mbits&LF_MODE_O || mbits&LF_MODE_N) { + return SYSERR; + } + mbits |= LF_MODE_N; + break; + + default: return SYSERR; + } + } + + /* If neither read nor write specified, allow both */ + + if ( (mbits&LF_MODE_RW) == 0 ) { + mbits |= LF_MODE_RW; + } + return mbits; +} diff --git a/device/lfs/lfiballoc.c b/device/lfs/lfiballoc.c new file mode 100644 index 0000000..16eb4c3 --- /dev/null +++ b/device/lfs/lfiballoc.c @@ -0,0 +1,33 @@ +/* lfiballoc.c - lfiballoc */ + +#include + +/*------------------------------------------------------------------------ + * lfiballoc - Allocate a new index block from free list on disk + * (assumes directory mutex held) + *------------------------------------------------------------------------ + */ +ibid32 lfiballoc (void) +{ + ibid32 ibnum; /* ID of next block on the free list */ + struct lfiblk iblock; /* Buffer to hold an index block */ + + /* Get ID of first index block on free list */ + + ibnum = Lf_data.lf_dir.lfd_ifree; + if (ibnum == LF_INULL) { /* Ran out of free index blocks */ + panic("out of index blocks"); + } + lfibget(Lf_data.lf_dskdev, ibnum, &iblock); + + /* Unlink index block from the directory free list */ + + Lf_data.lf_dir.lfd_ifree = iblock.ib_next; + + /* Write a copy of the directory to disk after the change */ + + write(Lf_data.lf_dskdev, (char *) &Lf_data.lf_dir, LF_AREA_DIR); + Lf_data.lf_dirdirty = FALSE; + + return ibnum; +} diff --git a/device/lfs/lfibclear.c b/device/lfs/lfibclear.c new file mode 100644 index 0000000..9d0cf3d --- /dev/null +++ b/device/lfs/lfibclear.c @@ -0,0 +1,22 @@ +/* lfibclear.c - lfibclear */ + +#include + +/*------------------------------------------------------------------------ + * lfibclear -- Clear an in-core copy of an index block + *------------------------------------------------------------------------ + */ +void lfibclear( + struct lfiblk *ibptr, /* Address of i-block in memory */ + int32 offset /* File offset for this i-block */ + ) +{ + int32 i; /* Index for data block array */ + + ibptr->ib_offset = offset; /* Assign specified file offset */ + for (i=0 ; iib_dba[i] = LF_DNULL; + } + ibptr->ib_next = LF_INULL; /* Set next ptr to null */ + return; +} diff --git a/device/lfs/lfibget.c b/device/lfs/lfibget.c new file mode 100644 index 0000000..4e69f1d --- /dev/null +++ b/device/lfs/lfibget.c @@ -0,0 +1,31 @@ +/* lfibget.c - lfibget */ + +#include + +/*------------------------------------------------------------------------ + * lfibget - Get an index block from disk given its number (assumes + * mutex is held) + *------------------------------------------------------------------------ + */ +void lfibget( + did32 diskdev, /* Device ID of disk to use */ + ibid32 inum, /* ID of index block to fetch */ + struct lfiblk *ibuff /* Buffer to hold index block */ + ) +{ + char *from, *to; /* Pointers used in copying */ + int32 i; /* Loop index used during copy */ + char dbuff[LF_BLKSIZ]; /* Buffer to hold disk block */ + + /* Read disk block that contains the specified index block */ + + read(diskdev, dbuff, ib2sect(inum)); + + /* Copy specified index block to caller's ibuff */ + + from = dbuff + ib2disp(inum); + to = (char *)ibuff; + for (i=0 ; i + +/*------------------------------------------------------------------------ + * lfibput - Write an index block to disk given its ID (assumes + * mutex is held) + *------------------------------------------------------------------------ + */ +status lfibput( + did32 diskdev, /* ID of disk device */ + ibid32 inum, /* ID of index block to write */ + struct lfiblk *ibuff /* Buffer holding the index blk */ + ) +{ + dbid32 diskblock; /* ID of disk sector (block) */ + char *from, *to; /* Pointers used in copying */ + int32 i; /* Loop index used during copy */ + char dbuff[LF_BLKSIZ]; /* Temp. buffer to hold d-block */ + + /* Compute disk block number and offset of index block */ + + diskblock = ib2sect(inum); + to = dbuff + ib2disp(inum); + from = (char *)ibuff; + + /* Read disk block */ + + if (read(diskdev, dbuff, diskblock) == SYSERR) { + return SYSERR; + } + + /* Copy index block into place */ + + for (i=0 ; i + +/*------------------------------------------------------------------------ + * lflclose - Close a file by flushing output and freeing device entry + *------------------------------------------------------------------------ + */ +devcall lflclose ( + struct dentry *devptr /* Entry in device switch table */ + ) +{ + struct lflcblk *lfptr; /* Ptr to open file table entry */ + + /* Obtain exclusive use of the file */ + + lfptr = &lfltab[devptr->dvminor]; + wait(lfptr->lfmutex); + + /* If file is not open, return an error */ + + if (lfptr->lfstate != LF_USED) { + signal(lfptr->lfmutex); + return SYSERR; + } + + /* Write index or data blocks to disk if they have changed */ + + if (Lf_data.lf_dirdirty || lfptr->lfdbdirty || lfptr->lfibdirty) { + lfflush(lfptr); + } + + /* Set device state to FREE and return to caller */ + + lfptr->lfstate = LF_FREE; + signal(lfptr->lfmutex); + return OK; +} diff --git a/device/lfs/lflcontrol.c b/device/lfs/lflcontrol.c new file mode 100644 index 0000000..a023098 --- /dev/null +++ b/device/lfs/lflcontrol.c @@ -0,0 +1,47 @@ +/* lflcontrol.c - lflcontrol */ + +#include + +/*------------------------------------------------------------------------ + * lflcontrol - Provide control functions for a local file pseudo-device + *------------------------------------------------------------------------ + */ +devcall lflcontrol ( + struct dentry *devptr, /* Entry in device switch table */ + int32 func, /* A control function */ + int32 arg1, /* Argument #1 */ + int32 arg2 /* Argument #2 */ + ) +{ + struct lflcblk *lfptr; /* Ptr to open file table entry */ + int32 retval; /* Return value from func. call */ + + /* Obtain exclusive use of the file */ + + lfptr = &lfltab[devptr->dvminor]; + wait(lfptr->lfmutex); + + /* If file is not open, return an error */ + + if (lfptr->lfstate != LF_USED) { + signal(lfptr->lfmutex); + return SYSERR; + } + + switch (func) { + + /* Truncate a file */ + + case LF_CTL_TRUNC: + wait(Lf_data.lf_mutex); + retval = lftruncate(lfptr); + signal(Lf_data.lf_mutex); + signal(lfptr->lfmutex); + return retval; + + default: + kprintf("lfcontrol: function %d not valid\n\r", func); + signal(lfptr->lfmutex); + return SYSERR; + } +} diff --git a/device/lfs/lflgetc.c b/device/lfs/lflgetc.c new file mode 100644 index 0000000..822d0c8 --- /dev/null +++ b/device/lfs/lflgetc.c @@ -0,0 +1,52 @@ +/* lflgetc.c - lfgetc */ + +#include + +/*------------------------------------------------------------------------ + * lflgetc - Read the next byte from an open local file + *------------------------------------------------------------------------ + */ +devcall lflgetc ( + struct dentry *devptr /* Entry in device switch table */ + ) +{ + struct lflcblk *lfptr; /* Ptr to open file table entry */ + struct ldentry *ldptr; /* Ptr to file's entry in the */ + /* in-memory directory */ + int32 onebyte; /* Next data byte in the file */ + + /* Obtain exclusive use of the file */ + + lfptr = &lfltab[devptr->dvminor]; + wait(lfptr->lfmutex); + + /* If file is not open, return an error */ + + if (lfptr->lfstate != LF_USED) { + signal(lfptr->lfmutex); + return SYSERR; + } + + /* Return EOF for any attempt to read beyond the end-of-file */ + + ldptr = lfptr->lfdirptr; + if (lfptr->lfpos >= ldptr->ld_size) { + signal(lfptr->lfmutex); + return EOF; + } + + /* If byte pointer is beyond the current data block, set up */ + /* a new data block */ + + if (lfptr->lfbyte >= &lfptr->lfdblock[LF_BLKSIZ]) { + lfsetup(lfptr); + } + + /* Extract the next byte from block, update file position, and */ + /* return the byte to the caller */ + + onebyte = 0xff & *lfptr->lfbyte++; + lfptr->lfpos++; + signal(lfptr->lfmutex); + return onebyte; +} diff --git a/device/lfs/lflinit.c b/device/lfs/lflinit.c new file mode 100644 index 0000000..c3f4e13 --- /dev/null +++ b/device/lfs/lflinit.c @@ -0,0 +1,46 @@ +/* lflinit.c - lflinit */ + +#include + +struct lflcblk lfltab[Nlfl]; /* Pseudo-device control blocks */ + +/*------------------------------------------------------------------------ + * lflinit - Initialize control blocks for local file pseudo-devices + *------------------------------------------------------------------------ + */ +devcall lflinit ( + struct dentry *devptr /* Entry in device switch table */ + ) +{ + struct lflcblk *lfptr; /* Ptr. to control block entry */ + int32 i; /* Walks through name array */ + + lfptr = &lfltab[ devptr->dvminor ]; + + /* Initialize control block entry */ + + lfptr->lfstate = LF_FREE; /* Device is currently unused */ + lfptr->lfdev = devptr->dvnum; /* Set device ID */ + lfptr->lfmutex = semcreate(1); /* Create the mutex semaphore */ + + /* Initialize the directory and file position */ + + lfptr->lfdirptr = (struct ldentry *) NULL; + lfptr->lfpos = 0; + for (i=0; ilfname[i] = NULLCH; + } + + /* Zero the in-memory index block and data block */ + + lfptr->lfinum = LF_INULL; + memset((char *) &lfptr->lfiblock, NULLCH, sizeof(struct lfiblk)); + lfptr->lfdnum = 0; + memset((char *) &lfptr->lfdblock, NULLCH, LF_BLKSIZ); + + /* Start with the byte beyond the current data block */ + + lfptr->lfbyte = &lfptr->lfdblock[LF_BLKSIZ]; + lfptr->lfibdirty = lfptr->lfdbdirty = FALSE; + return OK; +} diff --git a/device/lfs/lflputc.c b/device/lfs/lflputc.c new file mode 100644 index 0000000..8184c5d --- /dev/null +++ b/device/lfs/lflputc.c @@ -0,0 +1,64 @@ +/* lflputc.c - lfputc */ + +#include + +/*------------------------------------------------------------------------ + * lflputc - Write a single byte to an open local file + *------------------------------------------------------------------------ + */ +devcall lflputc ( + struct dentry *devptr, /* Entry in device switch table */ + char ch /* Character (byte) to write */ + ) +{ + struct lflcblk *lfptr; /* Ptr to open file table entry */ + struct ldentry *ldptr; /* Ptr to file's entry in the */ + /* in-memory directory */ + + /* Obtain exclusive use of the file */ + + lfptr = &lfltab[devptr->dvminor]; + wait(lfptr->lfmutex); + + /* If file is not open, return an error */ + + if (lfptr->lfstate != LF_USED) { + signal(lfptr->lfmutex); + return SYSERR; + } + + /* Return SYSERR for an attempt to skip bytes beyond the byte */ + /* that is currently the end of the file */ + + ldptr = lfptr->lfdirptr; + if (lfptr->lfpos > ldptr->ld_size) { + signal(lfptr->lfmutex); + return SYSERR; + } + + /* If pointer is outside current block, set up new block */ + + if (lfptr->lfbyte >= &lfptr->lfdblock[LF_BLKSIZ]) { + + /* Set up block for current file position */ + + lfsetup(lfptr); + } + + /* If appending a byte to the file, increment the file size. */ + /* Note: comparison might be equal, but should not be greater.*/ + + if (lfptr->lfpos >= ldptr->ld_size) { + ldptr->ld_size++; + Lf_data.lf_dirdirty = TRUE; + } + + /* Place byte in buffer and mark buffer "dirty" */ + + *lfptr->lfbyte++ = ch; + lfptr->lfpos++; + lfptr->lfdbdirty = TRUE; + + signal(lfptr->lfmutex); + return OK; +} diff --git a/device/lfs/lflread.c b/device/lfs/lflread.c new file mode 100644 index 0000000..acc9caa --- /dev/null +++ b/device/lfs/lflread.c @@ -0,0 +1,39 @@ +/* lflread.c - lflread */ + +#include + +/*------------------------------------------------------------------------ + * lflread - Read from a previously opened local file + *------------------------------------------------------------------------ + */ +devcall lflread ( + struct dentry *devptr, /* Entry in device switch table */ + char *buff, /* Buffer to hold bytes */ + int32 count /* Max bytes to read */ + ) +{ + uint32 numread; /* Number of bytes read */ + int32 nxtbyte; /* Character or SYSERR/EOF */ + + if (count < 0) { + return SYSERR; + } + + /* Iterate and use lflgetc to read indivdiual bytes */ + + for (numread=0 ; numread < count ; numread++) { + nxtbyte = lflgetc(devptr); + if (nxtbyte == SYSERR) { + return SYSERR; + } else if (nxtbyte == EOF) { /* EOF before finished */ + if (numread == 0) { + return EOF; + } else { + return numread; + } + } else { + *buff++ = (char) (0xff & nxtbyte); + } + } + return numread; +} diff --git a/device/lfs/lflseek.c b/device/lfs/lflseek.c new file mode 100644 index 0000000..e0076c2 --- /dev/null +++ b/device/lfs/lflseek.c @@ -0,0 +1,41 @@ +/* lflseek.c - lflseek */ + +#include + +/*------------------------------------------------------------------------ + * lflseek - Seek to a specified position in a file + *------------------------------------------------------------------------ + */ +devcall lflseek ( + struct dentry *devptr, /* Entry in device switch table */ + uint32 offset /* Byte position in the file */ + ) +{ + struct lflcblk *lfptr; /* Ptr to open file table entry */ + + /* If file is not open, return an error */ + + lfptr = &lfltab[devptr->dvminor]; + wait(lfptr->lfmutex); + if (lfptr->lfstate != LF_USED) { + signal(lfptr->lfmutex); + return SYSERR; + } + + /* Verify offset is within current file size */ + + if (offset > lfptr->lfdirptr->ld_size) { + signal(lfptr->lfmutex); + return SYSERR; + } + + /* Record new offset and invalidate byte pointer (i.e., force */ + /* the index and data blocks to be replaced if a successive */ + /* call is made to read or write) */ + + lfptr->lfpos = offset; + lfptr->lfbyte = &lfptr->lfdblock[LF_BLKSIZ]; + + signal(lfptr->lfmutex); + return OK; +} diff --git a/device/lfs/lflwrite.c b/device/lfs/lflwrite.c new file mode 100644 index 0000000..ce924c4 --- /dev/null +++ b/device/lfs/lflwrite.c @@ -0,0 +1,29 @@ +/* lflwrite.c - lflwrite */ + +#include + +/*------------------------------------------------------------------------ + * lflwrite -- Write data to a previously opened local disk file + *------------------------------------------------------------------------ + */ +devcall lflwrite ( + struct dentry *devptr, /* Entry in device switch table */ + char *buff, /* Buffer holding data to write */ + int32 count /* Number of bytes to write */ + ) +{ + int32 i; /* Number of bytes written */ + + if (count < 0) { + return SYSERR; + } + + /* Iteratate and write one byte at a time */ + + for (i=0; i +#include + +/*------------------------------------------------------------------------ + * lfckfmt - Check the format of an initially-created disk + *------------------------------------------------------------------------ + */ +status lfsckfmt ( + did32 disk /* ID of an open disk device */ + ) +{ + uint32 ibsectors; /* Number of sectors of i-blocks*/ + struct lfdir dir; /* Buffer to hold the directory */ + uint32 dblks; /* Total free data blocks */ + struct lfiblk iblock; /* Space for one i-block */ + struct lfdbfree dblock; /* Data block on the free list */ + int32 lfiblks; /* Total free index blocks */ + int32 retval; + ibid32 nextib; + dbid32 nextdb; + + /* Read directory */ + + retval = read(disk,(char *)&dir, LF_AREA_DIR); + if (retval == SYSERR) { + panic("cannot read directory"); + } + kprintf("Have read directory from disk device %d\n\r", + disk); + + /* Follow index block list */ + + lfiblks = 0; + nextib = dir.lfd_ifree; + kprintf("initial index block is %d\n\r", nextib); + while (nextib != LF_INULL) { + lfiblks++; + lfibget(disk, nextib, &iblock); + nextib = iblock.ib_next; + } + ibsectors = (lfiblks + 6) /7; + kprintf("Found %d index blocks (%d sectors)\n\r", lfiblks, ibsectors); + + /* Follow data block list */ + + dblks = 0; + nextdb = dir.lfd_dfree; + kprintf("initial data block is %d\n\r", nextdb); + while (nextdb != LF_DNULL) { + dblks++; + read(disk, (char *)&dblock, nextdb); + nextdb = dblock.lf_nextdb; + } + kprintf("Found %d data blocks\n\r", dblks); + return OK; +} diff --git a/device/lfs/lfscreate.c b/device/lfs/lfscreate.c new file mode 100644 index 0000000..68ba943 --- /dev/null +++ b/device/lfs/lfscreate.c @@ -0,0 +1,74 @@ +/* lfscreate.c - lfscreate */ + +#include +#include + +/*------------------------------------------------------------------------ + * lfscreate - Create an initially-empty file system on a disk + *------------------------------------------------------------------------ + */ +status lfscreate ( + did32 disk, /* ID of an open disk device */ + ibid32 lfiblks, /* Num. of index blocks on disk */ + uint32 dsiz /* Total size of disk in bytes */ + ) +{ + uint32 sectors; /* Number of sectors to use */ + uint32 ibsectors; /* Number of sectors of i-blocks*/ + uint32 ibpersector; /* Number of i-blocks per sector*/ + struct lfdir dir; /* Buffer to hold the directory */ + uint32 dblks; /* Total free data blocks */ + struct lfiblk iblock; /* Space for one i-block */ + struct lfdbfree dblock; /* Data block on the free list */ + dbid32 dbindex; /* Index for data blocks */ + int32 retval; /* Return value from func call */ + int32 i; /* Loop index */ + + /* Compute total sectors on disk */ + + sectors = dsiz / LF_BLKSIZ; /* Truncate to full sector */ + + /* Compute number of sectors comprising i-blocks */ + + ibpersector = LF_BLKSIZ / sizeof(struct lfiblk); + ibsectors = (lfiblks+(ibpersector-1)) / ibpersector;/* Round up */ + lfiblks = ibsectors * ibpersector; + if (ibsectors > sectors/2) { /* Invalid arguments */ + return SYSERR; + } + + /* Create an initial directory */ + + memset((char *)&dir, NULLCH, sizeof(struct lfdir)); + dir.lfd_nfiles = 0; + dbindex= (dbid32)(ibsectors + 1); + dir.lfd_dfree = dbindex; + dblks = sectors - ibsectors - 1; + retval = write(disk,(char *)&dir, LF_AREA_DIR); + if (retval == SYSERR) { + return SYSERR; + } + + /* Create list of free i-blocks on disk */ + + lfibclear(&iblock, 0); + for (i=0; i + +/*------------------------------------------------------------------------ + * lfsetup - Set a file's index block and data block for the current + * file position (assumes file mutex held) + *------------------------------------------------------------------------ + */ +status lfsetup ( + struct lflcblk *lfptr /* Pointer to slave file device */ + ) +{ + dbid32 dnum; /* Data block to fetch */ + ibid32 ibnum; /* I-block number during search */ + struct ldentry *ldptr; /* Ptr to file entry in dir. */ + struct lfiblk *ibptr; /* Ptr to in-memory index block */ + uint32 newoffset; /* Computed data offset for */ + /* next index block */ + int32 dindex; /* Index into array in an index */ + /* block */ + + + /* Obtain exclusive access to the directory */ + + wait(Lf_data.lf_mutex); + + /* Get pointers to in-memory directory, file's entry in the */ + /* directory, and the in-memory index block */ + + ldptr = lfptr->lfdirptr; + ibptr = &lfptr->lfiblock; + + /* If existing index block or data block changed, write to disk */ + + if (lfptr->lfibdirty || lfptr->lfdbdirty) { + lfflush(lfptr); + } + ibnum = lfptr->lfinum; /* Get ID of curr. index block */ + + /* If there is no index block in memory (e.g., because the file */ + /* was just opened), either load the first index block of */ + /* the file or allocate a new first index block */ + + if (ibnum == LF_INULL) { + + /* Check directory entry to see if index block exists */ + + ibnum = ldptr->ld_ilist; + if (ibnum == LF_INULL) { /* Empty file - get new i-block*/ + ibnum = lfiballoc(); + lfibclear(ibptr, 0); + ldptr->ld_ilist = ibnum; + lfptr->lfibdirty = TRUE; + } else { /* Nonempty - read first i-block*/ + lfibget(Lf_data.lf_dskdev, ibnum, ibptr); + } + lfptr->lfinum = ibnum; + + /* Otherwise, if current file position has been moved to an */ + /* offset before the current index block, start at the */ + /* beginning of the index list for the file */ + + } else if (lfptr->lfpos < ibptr->ib_offset) { + + /* Load initial index block for the file (we know that */ + /* at least one index block exists) */ + + ibnum = ldptr->ld_ilist; + lfibget(Lf_data.lf_dskdev, ibnum, ibptr); + lfptr->lfinum = ibnum; + } + + /* At this point, an index block is in memory, but may cover */ + /* an offset less than the current file position. Loop until */ + /* the index block covers the current file position. */ + + while ((lfptr->lfpos & ~LF_IMASK) > ibptr->ib_offset ) { + ibnum = ibptr->ib_next; + if (ibnum == LF_INULL) { + /* Allocate new index block to extend file */ + ibnum = lfiballoc(); + ibptr->ib_next = ibnum; + lfibput(Lf_data.lf_dskdev, lfptr->lfinum, ibptr); + lfptr->lfinum = ibnum; + newoffset = ibptr->ib_offset + LF_IDATA; + lfibclear(ibptr, newoffset); + lfptr->lfibdirty = TRUE; + } else { + lfibget(Lf_data.lf_dskdev, ibnum, ibptr); + lfptr->lfinum = ibnum; + } + lfptr->lfdnum = LF_DNULL; /* Invalidate old data block */ + } + + /* At this point, the index block in lfiblock covers the */ + /* current file position (i.e., position lfptr->lfpos). The */ + /* next step consists of loading the correct data block. */ + + dindex = (lfptr->lfpos & LF_IMASK) >> 9; + + /* If data block index does not match current data block, read */ + /* the correct data block from disk */ + + dnum = lfptr->lfiblock.ib_dba[dindex]; + if (dnum == LF_DNULL) { /* Allocate new data block */ + dnum = lfdballoc((struct lfdbfree *)&lfptr->lfdblock); + lfptr->lfiblock.ib_dba[dindex] = dnum; + lfptr->lfibdirty = TRUE; + } else if ( dnum != lfptr->lfdnum) { + read(Lf_data.lf_dskdev, (char *)lfptr->lfdblock, dnum); + lfptr->lfdbdirty = FALSE; + } + lfptr->lfdnum = dnum; + + /* Use current file offset to set the pointer to the next byte */ + /* within the data block */ + + lfptr->lfbyte = &lfptr->lfdblock[lfptr->lfpos & LF_DMASK]; + signal(Lf_data.lf_mutex); + return OK; +} diff --git a/device/lfs/lfsinit.c b/device/lfs/lfsinit.c new file mode 100644 index 0000000..d9ab814 --- /dev/null +++ b/device/lfs/lfsinit.c @@ -0,0 +1,32 @@ +/* lfsinit.c - lfsinit */ + +#include + +struct lfdata Lf_data; + +/*------------------------------------------------------------------------ + * lfsinit - Initialize the local file system master device + *------------------------------------------------------------------------ + */ +devcall lfsinit ( + struct dentry *devptr /* Entry in device switch table */ + ) +{ + /* Assign ID of disk device that will be used */ + + Lf_data.lf_dskdev = LF_DISK_DEV; + + /* Create a mutual exclusion semaphore */ + + Lf_data.lf_mutex = semcreate(1); + + /* Zero directory area (for debugging) */ + + memset((char *)&Lf_data.lf_dir, NULLCH, sizeof(struct lfdir)); + + /* Initialize directory to "not present" in memory */ + + Lf_data.lf_dirpresent = Lf_data.lf_dirdirty = FALSE; + + return OK; +} diff --git a/device/lfs/lfsopen.c b/device/lfs/lfsopen.c new file mode 100644 index 0000000..4613ee9 --- /dev/null +++ b/device/lfs/lfsopen.c @@ -0,0 +1,180 @@ +/* lfsopen.c - lfsopen */ + +#include + +/*------------------------------------------------------------------------ + * lfsopen - Open a file and allocate a local file pseudo-device + *------------------------------------------------------------------------ + */ +devcall lfsopen ( + struct dentry *devptr, /* Entry in device switch table */ + char *name, /* Name of file to open */ + char *mode /* Mode chars: 'r' 'w' 'o' 'n' */ + ) +{ + struct lfdir *dirptr; /* Ptr to in-memory directory */ + char *from, *to; /* Ptrs used during copy */ + char *nam, *cmp; /* Ptrs used during comparison */ + int32 i; /* General loop index */ + did32 lfnext; /* Minor number of an unused */ + /* file pseudo-device */ + struct ldentry *ldptr; /* Ptr to an entry in directory */ + struct lflcblk *lfptr; /* Ptr to open file table entry */ + bool8 found; /* Was the name found? */ + int32 retval; /* Value returned from function */ + int32 mbits; /* Mode bits */ + + /* Check length of name file (leaving space for NULLCH */ + + from = name; + for (i=0; i< LF_NAME_LEN; i++) { + if (*from++ == NULLCH) { + break; + } + } + if (i >= LF_NAME_LEN) { /* Name is too long */ + return SYSERR; + } + + /* Parse mode argument and convert to binary */ + + mbits = lfgetmode(mode); + if (mbits == SYSERR) { + return SYSERR; + } + + /* If named file is already open, return SYSERR */ + + lfnext = SYSERR; + for (i=0; ilfstate == LF_FREE) { + if (lfnext == SYSERR) { + lfnext = i; /* Record index */ + } + continue; + } + + /* Compare requested name to name of open file */ + + nam = name; + cmp = lfptr->lfname; + while(*nam != NULLCH) { + if (*nam != *cmp) { + break; + } + nam++; + cmp++; + } + + /* See if comparison succeeded */ + + if ( (*nam==NULLCH) && (*cmp == NULLCH) ) { + return SYSERR; + } + } + if (lfnext == SYSERR) { /* No slave file devices are available */ + return SYSERR; + } + + /* Obtain copy of directory if not already present in memory */ + + dirptr = &Lf_data.lf_dir; + wait(Lf_data.lf_mutex); + if (! Lf_data.lf_dirpresent) { + retval = read(Lf_data.lf_dskdev,(char *)dirptr,LF_AREA_DIR); + if (retval == SYSERR ) { + signal(Lf_data.lf_mutex); + return SYSERR; + } + Lf_data.lf_dirpresent = TRUE; + } + + /* Search directory to see if file exists */ + + found = FALSE; + for (i=0; ilfd_nfiles; i++) { + ldptr = &dirptr->lfd_files[i]; + nam = name; + cmp = ldptr->ld_name; + while(*nam != NULLCH) { + if (*nam != *cmp) { + break; + } + nam++; + cmp++; + } + if ( (*nam==NULLCH) && (*cmp==NULLCH) ) { /* Name found */ + found = TRUE; + break; + } + } + + /* Case #1 - file is not in directory (i.e., does not exist) */ + + if (! found) { + if (mbits & LF_MODE_O) { /* File *must* exist */ + signal(Lf_data.lf_mutex); + return SYSERR; + } + + /* Take steps to create new file and add to directory */ + + /* Verify that space remains in the directory */ + + if (dirptr->lfd_nfiles >= LF_NUM_DIR_ENT) { + signal(Lf_data.lf_mutex); + return SYSERR; + } + + /* Allocate next dir. entry & initialize to empty file */ + + ldptr = &dirptr->lfd_files[dirptr->lfd_nfiles++]; + ldptr->ld_size = 0; + from = name; + to = ldptr->ld_name; + while ( (*to++ = *from++) != NULLCH ) { + ; + } + ldptr->ld_ilist = LF_INULL; + + /* Case #2 - file is in directory (i.e., already exists) */ + + } else if (mbits & LF_MODE_N) { /* File must not exist */ + signal(Lf_data.lf_mutex); + return SYSERR; + } + + /* Initialize the local file pseudo-device */ + + lfptr = &lfltab[lfnext]; + lfptr->lfstate = LF_USED; + lfptr->lfdirptr = ldptr; /* Point to directory entry */ + lfptr->lfmode = mbits & LF_MODE_RW; + + /* File starts at position 0 */ + + lfptr->lfpos = 0; + + to = lfptr->lfname; + from = name; + while ( (*to++ = *from++) != NULLCH ) { + ; + } + + /* Neither index block nor data block are initially valid */ + + lfptr->lfinum = LF_INULL; + lfptr->lfdnum = LF_DNULL; + + /* Initialize byte pointer to address beyond the end of the */ + /* buffer (i.e., invalid pointer triggers setup) */ + + lfptr->lfbyte = &lfptr->lfdblock[LF_BLKSIZ]; + lfptr->lfibdirty = FALSE; + lfptr->lfdbdirty = FALSE; + + signal(Lf_data.lf_mutex); + + return lfptr->lfdev; +} diff --git a/device/lfs/lftruncate.c b/device/lfs/lftruncate.c new file mode 100644 index 0000000..519ad71 --- /dev/null +++ b/device/lfs/lftruncate.c @@ -0,0 +1,104 @@ +/* lftruncate.c - lftruncate */ + +#include + +/*------------------------------------------------------------------------ + * lftruncate - Truncate a file by freeing its index and data blocks + * (assumes directory mutex held) + *------------------------------------------------------------------------ + */ +status lftruncate ( + struct lflcblk *lfptr /* Ptr to file's cntl blk entry */ + ) +{ + struct ldentry *ldptr; /* Pointer to file's dir. entry */ + struct lfiblk iblock; /* Buffer for one index block */ + ibid32 ifree; /* Start of index blk free list */ + ibid32 firstib; /* First index blk of the file */ + ibid32 nextib; /* Walks down list of the */ + /* file's index blocks */ + dbid32 nextdb; /* Next data block to free */ + int32 i; /* Moves through data blocks in */ + /* a given index block */ + + ldptr = lfptr->lfdirptr; /* Get pointer to dir. entry */ + if (ldptr->ld_size == 0) { /* File is already empty */ + return OK; + } + + /* Clean up the open local file first */ + + if ( (lfptr->lfibdirty) || (lfptr->lfdbdirty) ) { + lfflush(lfptr); + } + lfptr->lfpos = 0; + lfptr->lfinum = LF_INULL; + lfptr->lfdnum = LF_DNULL; + lfptr->lfbyte = &lfptr->lfdblock[LF_BLKSIZ]; + + /* Obtain ID of first index block on free list */ + + ifree = Lf_data.lf_dir.lfd_ifree; + + /* Record file's first i-block and clear directory entry */ + + firstib = ldptr->ld_ilist; + ldptr->ld_ilist = LF_INULL; + ldptr->ld_size = 0; + Lf_data.lf_dirdirty = TRUE; + + /* Walk along index block list, disposing of each data block */ + /* and clearing the corresponding pointer. A note on loop */ + /* termination: last pointer is set to ifree below. */ + + for (nextib=firstib; nextib!=ifree; nextib=iblock.ib_next) { + + /* Obtain a copy of current index block from disk */ + + lfibget(Lf_data.lf_dskdev, nextib, &iblock); + + /* Free each data block in the index block */ + + for (i=0; i +#include +#include +#include +#include +#include + +/** + * @ingroup loopback + * + * Close a loopback device. + * @param devptr loopback device table entry + * @return OK if loopback is closed properly, otherwise SYSERR + */ +devcall loopbackClose(struct dentry *devptr) +{ + struct loopback *lbkptr; + intmask im; + + lbkptr = &looptab[devptr->dvminor]; + + im = disable(); + if (LOOP_STATE_ALLOC != lbkptr->state) + { + restore(im); + return SYSERR; + } + + /* free the semaphore */ + semdelete(lbkptr->sem); + lbkptr->state = LOOP_STATE_FREE; + + restore(im); + return OK; +} diff --git a/device/loopback/loopbackClose.d b/device/loopback/loopbackClose.d new file mode 100644 index 0000000..b44b3ca --- /dev/null +++ b/device/loopback/loopbackClose.d @@ -0,0 +1,27 @@ +../device/loopback/loopbackClose.o: ../device/loopback/loopbackClose.c \ + ../include/stddef.h ../include/device.h ../include/conf.h \ + ../include/loopback.h ../include/semaphore.h ../include/queue.h \ + ../include/kernel.h ../include/stdarg.h ../include/compiler.h \ + ../include/stdlib.h ../system/platforms/arm-qemu/interrupt.h + +../include/stddef.h: + +../include/device.h: + +../include/conf.h: + +../include/loopback.h: + +../include/semaphore.h: + +../include/queue.h: + +../include/kernel.h: + +../include/stdarg.h: + +../include/compiler.h: + +../include/stdlib.h: + +../system/platforms/arm-qemu/interrupt.h: diff --git a/device/loopback/loopbackControl.c b/device/loopback/loopbackControl.c new file mode 100644 index 0000000..f54ec55 --- /dev/null +++ b/device/loopback/loopbackControl.c @@ -0,0 +1,51 @@ +/** + * @file loopbackControl.c + * + */ +/* Embedded Xinu, Copyright (C) 2009. All rights reserved. */ +#include +#include +#include +#include + +/** + * @ingroup loopback + * + * Control function for loopback devices. + * @param devptr device table entry + * @param func control function to execute + * @param arg1 first argument for the control function + * @param arg2 second argument for the control function + * @return the result of the control function + */ +devcall loopbackControl(struct dentry *devptr, int func, long arg1, long arg2) +{ + struct loopback *lbkptr = NULL; + int old; + + lbkptr = &looptab[devptr->dvminor]; + + /* Check if loopback is open */ + if (LOOP_STATE_ALLOC != lbkptr->state) + { + return SYSERR; + } + + switch (func) + { + case LOOP_CTRL_SET_FLAG: + old = lbkptr->flags; + lbkptr->flags |= arg1; + return old; + + case LOOP_CTRL_CLR_FLAG: + old = lbkptr->flags & arg1; + lbkptr->flags &= ~(ulong)arg1; + return old; + + default: + return SYSERR; + } + + return OK; +} diff --git a/device/loopback/loopbackControl.d b/device/loopback/loopbackControl.d new file mode 100644 index 0000000..a75c305 --- /dev/null +++ b/device/loopback/loopbackControl.d @@ -0,0 +1,23 @@ +../device/loopback/loopbackControl.o: \ + ../device/loopback/loopbackControl.c ../include/stddef.h \ + ../include/device.h ../include/conf.h ../include/loopback.h \ + ../include/semaphore.h ../include/queue.h ../include/kernel.h \ + ../include/stdarg.h ../include/compiler.h + +../include/stddef.h: + +../include/device.h: + +../include/conf.h: + +../include/loopback.h: + +../include/semaphore.h: + +../include/queue.h: + +../include/kernel.h: + +../include/stdarg.h: + +../include/compiler.h: diff --git a/device/loopback/loopbackGetc.c b/device/loopback/loopbackGetc.c new file mode 100644 index 0000000..ebd1401 --- /dev/null +++ b/device/loopback/loopbackGetc.c @@ -0,0 +1,51 @@ +/** + * @file loopbackGetc.c + * + */ +/* Embedded Xinu, Copyright (C) 2009. All rights reserved. */ +#include +#include +#include +#include +#include +#include + +/** + * @ingroup loopback + * + * Get a character from the loopback buffer, possibly blocking. + * + * @param devptr + * Pointer to the loopback device. + * + * @return + * The resulting @p ch as an unsigned char cast to an @c int + * on success; @c EOF if there is no data available and the device is in + * nonblocking mode. + */ +devcall loopbackGetc(struct dentry *devptr) +{ + intmask im; + struct loopback *lbkptr; + uchar ch; + + lbkptr = &looptab[devptr->dvminor]; + + im = disable(); + + /* wait until the buffer has data */ + if (LOOP_NONBLOCK == (lbkptr->flags & LOOP_NONBLOCK)) { + if (semcount(lbkptr->sem) <= 0) { + restore(im); + return EOF; + } + } + + wait(lbkptr->sem); + + /* Get and return the next character. */ + ch = lbkptr->buffer[lbkptr->index]; + lbkptr->index = (lbkptr->index + 1) % LOOP_BUFFER; + restore(im); + return ch; +} diff --git a/device/loopback/loopbackGetc.d b/device/loopback/loopbackGetc.d new file mode 100644 index 0000000..043a3a3 --- /dev/null +++ b/device/loopback/loopbackGetc.d @@ -0,0 +1,35 @@ +../device/loopback/loopbackGetc.o: ../device/loopback/loopbackGetc.c \ + ../include/stddef.h ../include/device.h ../include/conf.h \ + ../include/semaphore.h ../include/queue.h ../include/kernel.h \ + ../include/stdarg.h ../include/compiler.h ../include/loopback.h \ + ../include/stdio.h ../include/thread.h \ + ../system/platforms/arm-qemu/interrupt.h ../include/debug.h \ + ../include/memory.h + +../include/stddef.h: + +../include/device.h: + +../include/conf.h: + +../include/semaphore.h: + +../include/queue.h: + +../include/kernel.h: + +../include/stdarg.h: + +../include/compiler.h: + +../include/loopback.h: + +../include/stdio.h: + +../include/thread.h: + +../system/platforms/arm-qemu/interrupt.h: + +../include/debug.h: + +../include/memory.h: diff --git a/device/loopback/loopbackInit.c b/device/loopback/loopbackInit.c new file mode 100644 index 0000000..8794d0d --- /dev/null +++ b/device/loopback/loopbackInit.c @@ -0,0 +1,30 @@ +/** + * @file loopbackInit.c + * + */ +/* Embedded Xinu, Copyright (C) 2009. All rights reserved. */ +#include +#include +#include +#include +#include + +struct loopback looptab[NLOOPBACK]; + +/** + * @ingroup loopback + * + * Initialize loopback device + * @param devptr + * @return OK on open + */ +devcall loopbackInit(struct dentry *devptr) +{ + struct loopback *lbkptr = NULL; + + lbkptr = &looptab[devptr->dvminor]; + lbkptr->state = LOOP_STATE_FREE; + lbkptr->index = 0; + + return OK; +} diff --git a/device/loopback/loopbackInit.d b/device/loopback/loopbackInit.d new file mode 100644 index 0000000..a177209 --- /dev/null +++ b/device/loopback/loopbackInit.d @@ -0,0 +1,25 @@ +../device/loopback/loopbackInit.o: ../device/loopback/loopbackInit.c \ + ../include/stddef.h ../include/device.h ../include/conf.h \ + ../include/loopback.h ../include/semaphore.h ../include/queue.h \ + ../include/kernel.h ../include/stdarg.h ../include/compiler.h \ + ../include/stdlib.h + +../include/stddef.h: + +../include/device.h: + +../include/conf.h: + +../include/loopback.h: + +../include/semaphore.h: + +../include/queue.h: + +../include/kernel.h: + +../include/stdarg.h: + +../include/compiler.h: + +../include/stdlib.h: diff --git a/device/loopback/loopbackOpen.c b/device/loopback/loopbackOpen.c new file mode 100644 index 0000000..fa3b010 --- /dev/null +++ b/device/loopback/loopbackOpen.c @@ -0,0 +1,54 @@ +/** + * @file loopbackOpen.c + * + */ +/* Embedded Xinu, Copyright (C) 2009. All rights reserved. */ +#include +#include +#include +#include +#include +#include + +/** + * @ingroup loopback + * + * Open a loopback device. + * @param devptr loopback device table entry + * @return OK if loopback is opened properly, otherwise SYSERR + */ +devcall loopbackOpen(struct dentry *devptr) +{ + struct loopback *lbkptr; + intmask im; + + lbkptr = &looptab[devptr->dvminor]; + + im = disable(); + /* Check if loopback is already open */ + if (LOOP_STATE_FREE != lbkptr->state) + { + restore(im); + return SYSERR; + } + + /* Create new semaphore */ + lbkptr->sem = semcreate(0); + + if (SYSERR == lbkptr->sem) + { + restore(im); + return SYSERR; + } + + /* Zero out the buffer */ + bzero(lbkptr->buffer, LOOP_BUFFER); + + /* Zero out flags */ + lbkptr->flags = 0; + + lbkptr->state = LOOP_STATE_ALLOC; + + restore(im); + return OK; +} diff --git a/device/loopback/loopbackOpen.d b/device/loopback/loopbackOpen.d new file mode 100644 index 0000000..4b4a67e --- /dev/null +++ b/device/loopback/loopbackOpen.d @@ -0,0 +1,27 @@ +../device/loopback/loopbackOpen.o: ../device/loopback/loopbackOpen.c \ + ../include/stddef.h ../include/device.h ../include/conf.h \ + ../include/loopback.h ../include/semaphore.h ../include/queue.h \ + ../include/kernel.h ../include/stdarg.h ../include/compiler.h \ + ../include/stdlib.h ../system/platforms/arm-qemu/interrupt.h + +../include/stddef.h: + +../include/device.h: + +../include/conf.h: + +../include/loopback.h: + +../include/semaphore.h: + +../include/queue.h: + +../include/kernel.h: + +../include/stdarg.h: + +../include/compiler.h: + +../include/stdlib.h: + +../system/platforms/arm-qemu/interrupt.h: diff --git a/device/loopback/loopbackPutc.c b/device/loopback/loopbackPutc.c new file mode 100644 index 0000000..d0e452f --- /dev/null +++ b/device/loopback/loopbackPutc.c @@ -0,0 +1,51 @@ +/** + * @file loopbackPutc.c + */ +/* Embedded Xinu, Copyright (C) 2009, 2013. All rights reserved. */ +#include +#include +#include +#include +#include + +/** + * @ingroup loopback + * + * Put a character onto the loopback buffer + * + * @param devptr + * Loopback device + * @param ch + * character to output + * + * @return + * @p ch as an unsigned char cast to an @c int on success; @c + * SYSERR if there is no room in the buffer. + */ +devcall loopbackPutc(struct dentry *devptr, char ch) +{ + struct loopback *lbkptr; + intmask im; + int i; + + lbkptr = &looptab[devptr->dvminor]; + + im = disable(); + + /* Ensure room in buffer */ + if (LOOP_BUFFER <= semcount(lbkptr->sem)) + { + restore(im); + return SYSERR; + } + + i = (lbkptr->index + semcount(lbkptr->sem)) % LOOP_BUFFER; + lbkptr->buffer[i] = ch; + + /* signal that more data is on the buffer */ + signal(lbkptr->sem); + + restore(im); + + return (uchar)ch; +} diff --git a/device/loopback/loopbackPutc.d b/device/loopback/loopbackPutc.d new file mode 100644 index 0000000..88427a9 --- /dev/null +++ b/device/loopback/loopbackPutc.d @@ -0,0 +1,25 @@ +../device/loopback/loopbackPutc.o: ../device/loopback/loopbackPutc.c \ + ../include/stddef.h ../include/device.h ../include/conf.h \ + ../include/loopback.h ../include/semaphore.h ../include/queue.h \ + ../include/kernel.h ../include/stdarg.h ../include/compiler.h \ + ../system/platforms/arm-qemu/interrupt.h + +../include/stddef.h: + +../include/device.h: + +../include/conf.h: + +../include/loopback.h: + +../include/semaphore.h: + +../include/queue.h: + +../include/kernel.h: + +../include/stdarg.h: + +../include/compiler.h: + +../system/platforms/arm-qemu/interrupt.h: diff --git a/device/loopback/loopbackRead.c b/device/loopback/loopbackRead.c new file mode 100644 index 0000000..ddd3117 --- /dev/null +++ b/device/loopback/loopbackRead.c @@ -0,0 +1,54 @@ +/** + * @file loopbackRead.c + * + */ +/* Embedded Xinu, Copyright (C) 2009. All rights reserved. */ +#include +#include +#include +#include + +/** + * @ingroup loopback + * + * Read up to the specified number of characters from a loopback. + * + * @param devptr + * Loopback device to read from. + * @param buf + * Buffer into which to place the read data. + * @param len + * Maximum number of characters to read. + * + * @return + * Returns the number of characters read, which may be less than @p len if + * @c EOF or a read error occurs. Alternatively, if the loopback device + * is not open, returns @c SYSERR. + */ +devcall loopbackRead(struct dentry *devptr, void *buf, uint len) +{ + struct loopback *lbkptr = NULL; + uint i; + unsigned char *buffer = buf; + int ret; + + lbkptr = &looptab[devptr->dvminor]; + + /* Check if loopback is open */ + if (LOOP_STATE_ALLOC != lbkptr->state) + { + return SYSERR; + } + + for (i = 0; i < len; i++) + { + ret = loopbackGetc(devptr); + if (ret == EOF) + { + break; + } + buffer[i] = ret; + } + + return i; +} diff --git a/device/loopback/loopbackRead.d b/device/loopback/loopbackRead.d new file mode 100644 index 0000000..b9de352 --- /dev/null +++ b/device/loopback/loopbackRead.d @@ -0,0 +1,22 @@ +../device/loopback/loopbackRead.o: ../device/loopback/loopbackRead.c \ + ../include/stddef.h ../include/device.h ../include/conf.h \ + ../include/loopback.h ../include/semaphore.h ../include/queue.h \ + ../include/kernel.h ../include/stdarg.h ../include/compiler.h + +../include/stddef.h: + +../include/device.h: + +../include/conf.h: + +../include/loopback.h: + +../include/semaphore.h: + +../include/queue.h: + +../include/kernel.h: + +../include/stdarg.h: + +../include/compiler.h: diff --git a/device/loopback/loopbackWrite.c b/device/loopback/loopbackWrite.c new file mode 100644 index 0000000..9b0d370 --- /dev/null +++ b/device/loopback/loopbackWrite.c @@ -0,0 +1,56 @@ +/** + * @file loopbackWrite.c + * + */ +/* Embedded Xinu, Copyright (C) 2009. All rights reserved. */ +#include +#include +#include +#include + +/** + * @ingroup loopback + * + * Write data to the loopbock device. + * + * @param devptr + * Pointer to the loopback device to write to. + * @param buf + * Buffer of data to write. + * @param len + * Number of bytes of data to write. + * + * @return + * On success, returns the number of bytes written, which may be less than + * @p len in the event of a write error. Alternatively, @c SYSERR is + * returned if the loopback device is not open or if a write error occurred + * before any data at all was successfully written. + */ +devcall loopbackWrite(struct dentry *devptr, const void *buf, uint len) +{ + struct loopback *lbkptr = NULL; + uint i; + const uchar *buffer = buf; + + lbkptr = &looptab[devptr->dvminor]; + + /* Check if loopback is open */ + if (LOOP_STATE_ALLOC != lbkptr->state) + { + return SYSERR; + } + + for (i = 0; i < len; i++) + { + if (SYSERR == loopbackPutc(devptr, buffer[i])) + { + if (i == 0) + { + i = SYSERR; + } + break; + } + } + + return i; +} diff --git a/device/loopback/loopbackWrite.d b/device/loopback/loopbackWrite.d new file mode 100644 index 0000000..b9a9659 --- /dev/null +++ b/device/loopback/loopbackWrite.d @@ -0,0 +1,22 @@ +../device/loopback/loopbackWrite.o: ../device/loopback/loopbackWrite.c \ + ../include/stddef.h ../include/device.h ../include/conf.h \ + ../include/loopback.h ../include/semaphore.h ../include/queue.h \ + ../include/kernel.h ../include/stdarg.h ../include/compiler.h + +../include/stddef.h: + +../include/device.h: + +../include/conf.h: + +../include/loopback.h: + +../include/semaphore.h: + +../include/queue.h: + +../include/kernel.h: + +../include/stdarg.h: + +../include/compiler.h: diff --git a/device/nam/mount.c b/device/nam/mount.c new file mode 100644 index 0000000..90ac46f --- /dev/null +++ b/device/nam/mount.c @@ -0,0 +1,76 @@ +/* mount.c - mount, namlen */ + +#include + +/*------------------------------------------------------------------------ + * mount - Add a prefix mapping to the name space + *------------------------------------------------------------------------ + */ +syscall mount( + char *prefix, /* Prefix to add */ + char *replace, /* Replacement string */ + did32 device /* Device ID to use */ +) +{ + intmask mask; /* Saved interrupt mask */ + struct nmentry *namptr; /* Pointer to unused table entry*/ + int32 psiz, rsiz; /* Sizes of prefix & replacement*/ + int32 i; /* Counter for copy loop */ + + mask = disable(); + + psiz = namlen(prefix, NM_PRELEN); + rsiz = namlen(replace, NM_REPLLEN); + + /* If arguments are invalid or table is full, return error */ + + if ( (psiz == SYSERR) || (rsiz == SYSERR) || + (isbaddev(device)) || (nnames >= NNAMES) ) { + restore(mask); + return SYSERR; + } + + /* Allocate a slot in the table */ + + namptr = &nametab[nnames]; /* Next unused entry in table */ + + /* copy prefix and replacement strings and record device ID */ + + for (i=0; inprefix[i] = *prefix++; + } + + for (i=0; inreplace[i] = *replace++; + } + + namptr->ndevice = device; /* Record the device ID */ + + nnames++; /* Increment number of names */ + + restore(mask); + return OK; +} + + +/*------------------------------------------------------------------------ + * namlen - Compute the length of a string stopping at maxlen + *------------------------------------------------------------------------ + */ +int32 namlen( + char *name, /* Name to use */ + int32 maxlen /* Maximum length (including a */ + /* NULLCH) */ +) +{ + int32 i; /* Count of characters found */ + + /* Search until a null terminator or length reaches max */ + + for (i=0; i < maxlen; i++) { + if (*name++ == NULLCH) { + return i+1; /* Include NULLCH in length */ + } + } + return SYSERR; +} diff --git a/device/nam/naminit.c b/device/nam/naminit.c new file mode 100644 index 0000000..df8641b --- /dev/null +++ b/device/nam/naminit.c @@ -0,0 +1,91 @@ +/* naminit.c - naminit */ + +#include + +#ifndef RFILESYS +#define RFILESYS SYSERR +#endif + +#ifndef FILESYS +#define FILESYS SYSERR +#endif + +#ifndef LFILESYS +#define LFILESYS SYSERR +#endif + +struct nmentry nametab[NNAMES]; /* Table of name mappings */ +int32 nnames; /* Number of entries allocated */ + +/*------------------------------------------------------------------------ + * naminit - Initialize the syntactic namespace + *------------------------------------------------------------------------ + */ +status naminit(void) +{ + did32 i; /* Index into devtab */ + struct dentry *devptr; /* Pointer to device table entry*/ + char tmpstr[NM_MAXLEN]; /* String to hold a name */ + status retval; /* Return value */ + char *tptr; /* Pointer into tempstring */ + char *nptr; /* Pointer to device name */ + char devprefix[] = "/dev/"; /* Prefix to use for devices */ + int32 len; /* Length of created name */ + char ch; /* Storage for a character */ + + /* Set prefix table to empty */ + + nnames = 0; + + for (i=0; idvname; /* Move to device name */ + + /* Map device name to lower case and append */ + + while(++len < NM_MAXLEN) { + ch = *nptr++; + if ( (ch >= 'A') && (ch <= 'Z')) { + ch += 'a' - 'A'; + } + if ( (*tptr++ = ch) == NULLCH) { + break; + } + } + + if (len > NM_MAXLEN) { + kprintf("namespace: device name %s too long\r\n", + devptr->dvname); + continue; + } + + retval = mount(tmpstr, NULLSTR, devptr->dvnum); + if (retval == SYSERR) { + kprintf("namespace: cannot mount device %d\r\n", + devptr->dvname); + continue; + } + } + + /* Add other prefixes (longest prefix first) */ + + mount("/dev/null", "", NULLDEV); + mount("/remote/", "remote:", RFILESYS); + mount("/local/", NULLSTR, LFILESYS); + mount("/dev/", NULLSTR, SYSERR); + mount("~/", NULLSTR, LFILESYS); + mount("/", "root:", RFILESYS); + mount("", "", LFILESYS); + + return OK; +} diff --git a/device/nam/nammap.c b/device/nam/nammap.c new file mode 100644 index 0000000..be8b255 --- /dev/null +++ b/device/nam/nammap.c @@ -0,0 +1,135 @@ +/* nammap.c - nammap, namrepl, namcpy */ + +#include + +status namcpy(char *, char *, int32); +did32 namrepl(char *, char[]); + +/*------------------------------------------------------------------------ + * nammap - Using namespace, map name to new name and new device + *------------------------------------------------------------------------ + */ +devcall nammap( + char *name, /* The name to map */ + char newname[NM_MAXLEN], /* Buffer for mapped name */ + did32 namdev /* ID of the namespace device */ + ) +{ + did32 newdev; /* Device descriptor to return */ + char tmpname[NM_MAXLEN]; /* Temporary buffer for name */ + int32 iter; /* Number of iterations */ + + /* Place original name in temporary buffer and null terminate */ + + if (namcpy(tmpname, name, NM_MAXLEN) == SYSERR) { + return SYSERR; + } + + /* Repeatedly substitute the name prefix until a non-namespace */ + /* device is reached or an iteration limit is exceeded */ + + for (iter=0; iternprefix; /* Start at beginning of prefix */ + + /* Compare prefix to string and count prefix size */ + + for (plen=0; *pptr != NULLCH ; plen++) { + if (*pptr != *optr) { + break; + } + pptr++; + optr++; + } + if (*pptr != NULLCH) { /* Prefix does not match */ + continue; + } + + /* Found a match - check that replacement string plus */ + /* bytes remaining at the end of the original name will */ + /* fit into new name buffer. Ignore null on replacement*/ + /* string, but keep null on remainder of name. */ + + olen = namlen(name ,NM_MAXLEN); + rlen = namlen(namptr->nreplace,NM_MAXLEN) - 1; + remain = olen - plen; + if ( (rlen + remain) > NM_MAXLEN) { + return (did32)SYSERR; + } + + /* Place replacement string followed by remainder of */ + /* original name (and null) into the new name buffer */ + + + nptr = newname; + rptr = namptr->nreplace; + for (; rlen>0 ; rlen--) { + *nptr++ = *rptr++; + } + for (; remain>0 ; remain--) { + *nptr++ = *optr++; + } + return namptr->ndevice; + } + return (did32)SYSERR; +} + +/*------------------------------------------------------------------------ + * namcpy - Copy a name from one buffer to another, checking length + *------------------------------------------------------------------------ + */ +status namcpy( + char *newname, /* Buffer to hold copy */ + char *oldname, /* Buffer containing name */ + int32 buflen /* Size of buffer for copy */ + ) +{ + char *nptr; /* Point to new name */ + char *optr; /* Point to old name */ + int32 cnt; /* Count of characters copied */ + + nptr = newname; + optr = oldname; + + for (cnt=0; cnt + +/*------------------------------------------------------------------------ + * namopen - Open a file or device based on the name + *------------------------------------------------------------------------ + */ +devcall namopen( + struct dentry *devptr, /* Entry in device switch table */ + char *name, /* Name to open */ + char *mode /* Mode argument */ + ) +{ + char newname[NM_MAXLEN]; /* Name with prefix replaced */ + did32 newdev; /* Device ID after mapping */ + + /* Use namespace to map name to a new name and new descriptor */ + + newdev = nammap(name, newname, devptr->dvnum); + + if (newdev == SYSERR) { + return SYSERR; + } + + /* Open underlying device and return status */ + + return open(newdev, newname, mode); +} diff --git a/device/ram/ramclose.c b/device/ram/ramclose.c new file mode 100644 index 0000000..0580c07 --- /dev/null +++ b/device/ram/ramclose.c @@ -0,0 +1,14 @@ +/* ramclose.c - ramclose */ + +#include + +/*------------------------------------------------------------------------ + * Ramclose - Close a ram disk + *------------------------------------------------------------------------ + */ +devcall ramclose ( + struct dentry *devptr /* Entry in device switch table */ + ) +{ + return OK; +} diff --git a/device/ram/raminit.c b/device/ram/raminit.c new file mode 100644 index 0000000..866140e --- /dev/null +++ b/device/ram/raminit.c @@ -0,0 +1,19 @@ +/* raminit.c - raminit */ + +#include +#include + +struct ramdisk Ram; + +/*------------------------------------------------------------------------ + * raminit - Initialize the remote disk system device + *------------------------------------------------------------------------ + */ +devcall raminit ( + struct dentry *devptr /* Entry in device switch table */ + ) +{ + memcpy(Ram.disk, "hopeless", 8); + memcpy( &Ram.disk[8], Ram.disk, RM_BLKSIZ * RM_BLKS - 8); + return OK; +} diff --git a/device/ram/ramopen.c b/device/ram/ramopen.c new file mode 100644 index 0000000..07ba1ba --- /dev/null +++ b/device/ram/ramopen.c @@ -0,0 +1,19 @@ +/* ramopen.c - ramopen */ + +#include + +/*------------------------------------------------------------------------ + * ramopen - Open a ram disk + *------------------------------------------------------------------------ + */ + +devcall ramopen ( + struct dentry *devptr, /* Entry in device switch table */ + char *name, /* Unused for a ram disk */ + char *mode /* Unused for a ram disk */ + ) +{ + /* No action -- just return the device descriptor */ + + return devptr->dvnum; +} diff --git a/device/ram/ramread.c b/device/ram/ramread.c new file mode 100644 index 0000000..07b8fbf --- /dev/null +++ b/device/ram/ramread.c @@ -0,0 +1,21 @@ +/* ramread.c - ramread */ + +#include +#include + +/*------------------------------------------------------------------------ + * ramread - Read a block from a ram disk + *------------------------------------------------------------------------ + */ +devcall ramread ( + struct dentry *devptr, /* Entry in device switch table */ + char *buff, /* Buffer to hold disk block */ + int32 blk /* Block number of block to read*/ + ) +{ + int32 bpos; /* Byte position of blk */ + + bpos = RM_BLKSIZ * blk; + memcpy(buff, &Ram.disk[bpos], RM_BLKSIZ); + return OK; +} diff --git a/device/ram/ramwrite.c b/device/ram/ramwrite.c new file mode 100644 index 0000000..3b5f19a --- /dev/null +++ b/device/ram/ramwrite.c @@ -0,0 +1,21 @@ +/* ramwrite.c - ramwrite */ + +#include +#include + +/*------------------------------------------------------------------------ + * ramwrite - Write a block to a ram disk + *------------------------------------------------------------------------ + */ +devcall ramwrite ( + struct dentry *devptr, /* Entry in device switch table */ + char *buff, /* Buffer containing a block */ + int32 blk /* Block number to write */ + ) +{ + int32 bpos; /* Byte position of blk */ + + bpos = RM_BLKSIZ * blk; + memcpy(&Ram.disk[bpos], buff, RM_BLKSIZ); + return OK; +} diff --git a/device/rds/TODO b/device/rds/TODO new file mode 100644 index 0000000..d7d0205 --- /dev/null +++ b/device/rds/TODO @@ -0,0 +1,5 @@ + + + +rdsbufalloc.c +rdsprocess.c diff --git a/device/rds/rdsbufalloc.c b/device/rds/rdsbufalloc.c new file mode 100644 index 0000000..b872e07 --- /dev/null +++ b/device/rds/rdsbufalloc.c @@ -0,0 +1,50 @@ +/* rdsbufalloc.c - rdsbufalloc */ + +#include + +/*------------------------------------------------------------------------ + * rdsbufalloc - Allocate a buffer from the free list or the cache + *------------------------------------------------------------------------ + */ +struct rdbuff *rdsbufalloc ( + struct rdscblk *rdptr /* Ptr to device control block */ + ) +{ + struct rdbuff *bptr; /* Pointer to a buffer */ + struct rdbuff *pptr; /* Pointer to previous buffer */ + struct rdbuff *nptr; /* Pointer to next buffer */ + + /* Wait for an available buffer */ + + wait(rdptr->rd_availsem); + + /* If free list contains a buffer, extract it */ + + bptr = rdptr->rd_free; + + if ( bptr != (struct rdbuff *)NULL ) { + rdptr->rd_free = bptr->rd_next; + return bptr; + } + + /* Extract oldest item in cache that has ref count zero (at */ + /* least one such entry must exist because the semaphore */ + /* had a nonzero count) */ + + bptr = rdptr->rd_ctprev; + while (bptr != (struct rdbuff *) &rdptr->rd_chnext) { + if (bptr->rd_refcnt <= 0) { + + /* Remove from cache and return to caller */ + + pptr = bptr->rd_prev; + nptr = bptr->rd_next; + pptr->rd_next = nptr; + nptr->rd_prev = pptr; + return bptr; + } + bptr = bptr->rd_prev; + } + panic("Remote disk cannot find an available buffer"); + return (struct rdbuff *)SYSERR; +} diff --git a/device/rds/rdsclose.c b/device/rds/rdsclose.c new file mode 100644 index 0000000..eeac7e5 --- /dev/null +++ b/device/rds/rdsclose.c @@ -0,0 +1,60 @@ +/* rdsclose.c - rdsclose */ + +#include + +/*------------------------------------------------------------------------ + * rdsclose - Close a remote disk device + *------------------------------------------------------------------------ + */ +devcall rdsclose ( + struct dentry *devptr /* Entry in device switch table */ + ) +{ + struct rdscblk *rdptr; /* Ptr to control block entry */ + struct rdbuff *bptr; /* Ptr to buffer on a list */ + struct rdbuff *nptr; /* Ptr to next buff on the list */ + int32 nmoved; /* Number of buffers moved */ + + /* Device must be open */ + + rdptr = &rdstab[devptr->dvminor]; + if (rdptr->rd_state != RD_OPEN) { + return SYSERR; + } + + /* Request queue must be empty */ + + if (rdptr->rd_rhnext != (struct rdbuff *)&rdptr->rd_rtnext) { + return SYSERR; + } + + /* Move all buffers from the cache to the free list */ + + bptr = rdptr->rd_chnext; + nmoved = 0; + while (bptr != (struct rdbuff *)&rdptr->rd_ctnext) { + nmoved++; + + /* Unlink buffer from cache */ + + nptr = bptr->rd_next; + (bptr->rd_prev)->rd_next = nptr; + nptr->rd_prev = bptr->rd_prev; + + /* Insert buffer into free list */ + + bptr->rd_next = rdptr->rd_free; + + rdptr->rd_free = bptr; + bptr->rd_status = RD_INVALID; + + /* Move to next buffer in the cache */ + + bptr = nptr; + } + + /* Set the state to indicate the device is closed */ + + rdptr->rd_state = RD_FREE; + return OK; +} diff --git a/device/rds/rdscomm.c b/device/rds/rdscomm.c new file mode 100644 index 0000000..d9e13ae --- /dev/null +++ b/device/rds/rdscomm.c @@ -0,0 +1,114 @@ +/* rdscomm.c - rdscomm */ + +#include + +/*------------------------------------------------------------------------ + * rdscomm - handle communication with a remote disk server (send a + * request and receive a reply, including sequencing and + * retries) + *------------------------------------------------------------------------ + */ +status rdscomm ( + struct rd_msg_hdr *msg, /* Message to send */ + int32 mlen, /* Message length */ + struct rd_msg_hdr *reply, /* Buffer for reply */ + int32 rlen, /* Size of reply buffer */ + struct rdscblk *rdptr /* Ptr to device control block */ + ) +{ + int32 i; /* Counts retries */ + int32 retval; /* Return value */ + int32 seq; /* Sequence for this exchange */ + uint32 localip; /* Local IP address */ + int16 rtype; /* Reply type in host byte order*/ + bool8 xmit; /* Should we transmit again? */ + int32 slot; /* UDP slot */ + + /* For the first time after reboot, register the server port */ + + if ( ! rdptr->rd_registered ) { + slot = udp_register(0, rdptr->rd_ser_port, + rdptr->rd_loc_port); + if(slot == SYSERR) { + return SYSERR; + } + rdptr->rd_udpslot = slot; + rdptr->rd_registered = TRUE; + } + + if ( NetData.ipvalid == FALSE ) { + localip = getlocalip(); + if((int32)localip == SYSERR) { + return SYSERR; + } + } + + /* Retrieve the saved UDP slot number */ + + slot = rdptr->rd_udpslot; + + /* Assign message next sequence number */ + + seq = rdptr->rd_seq++; + msg->rd_seq = htonl(seq); + + /* Repeat RD_RETRIES times: send message and receive reply */ + + xmit = TRUE; + for (i=0; ird_ser_ip, rdptr->rd_ser_port, + (char *)msg, mlen); + if (retval == SYSERR) { + kprintf("Cannot send to remote disk server\n\r"); + return SYSERR; + } + } else { + xmit = TRUE; + } + + /* Receive a reply */ + + retval = udp_recv(slot, (char *)reply, rlen, + RD_TIMEOUT); + + if (retval == TIMEOUT) { + continue; + } else if (retval == SYSERR) { + kprintf("Error reading remote disk reply\n\r"); + return SYSERR; + } + + /* Verify that sequence in reply matches request */ + + + if (ntohl(reply->rd_seq) < seq) { + xmit = FALSE; + } else if (ntohl(reply->rd_seq) != seq) { + continue; + } + + /* Verify the type in the reply matches the request */ + + rtype = ntohs(reply->rd_type); + if (rtype != ( ntohs(msg->rd_type) | RD_MSG_RESPONSE) ) { + continue; + } + + /* Check the status */ + + if (ntohs(reply->rd_status) != 0) { + return SYSERR; + } + + return OK; + } + + /* Retries exhausted without success */ + + kprintf("Timeout on exchange with remote disk server\n\r"); + return TIMEOUT; +} diff --git a/device/rds/rdscontrol.c b/device/rds/rdscontrol.c new file mode 100644 index 0000000..41314c9 --- /dev/null +++ b/device/rds/rdscontrol.c @@ -0,0 +1,118 @@ +/* rdscontrol.c - rdscontrol */ + +#include + +/*------------------------------------------------------------------------ + * rdscontrol - Provide control functions for the remote disk + *------------------------------------------------------------------------ + */ +devcall rdscontrol ( + struct dentry *devptr, /* Entry in device switch table */ + int32 func, /* The control function to use */ + int32 arg1, /* Argument #1 */ + int32 arg2 /* Argument #2 */ + ) +{ + struct rdscblk *rdptr; /* Pointer to control block */ + struct rdbuff *bptr; /* Ptr to buffer that will be */ + /* placed on the req. queue */ + struct rdbuff *pptr; /* Ptr to "previous" node on */ + /* a list */ + struct rd_msg_dreq msg; /* Buffer for delete request */ + struct rd_msg_dres resp; /* Buffer for delete response */ + char *to, *from; /* Used during name copy */ + int32 retval; /* Return value */ + + /* Verify that device is currently open */ + + rdptr = &rdstab[devptr->dvminor]; + if (rdptr->rd_state != RD_OPEN) { + return SYSERR; + } + + switch (func) { + + /* Synchronize writes */ + + case RDS_CTL_SYNC: + + /* Allocate a buffer to use for the request list */ + + bptr = rdsbufalloc(rdptr); + if (bptr == (struct rdbuff *)SYSERR) { + return SYSERR; + } + + /* Form a sync request */ + + bptr->rd_op = RD_OP_SYNC; + bptr->rd_refcnt = 1; + bptr->rd_blknum = 0; /* Unused */ + bptr->rd_status = RD_INVALID; + bptr->rd_pid = getpid(); + + /* Insert new request into list just before tail */ + + pptr = rdptr->rd_rtprev; + rdptr->rd_rtprev = bptr; + bptr->rd_next = pptr->rd_next; + bptr->rd_prev = pptr; + pptr->rd_next = bptr; + + /* Prepare to wait until item is processed */ + + recvclr(); + resume(rdptr->rd_comproc); + + /* Block to wait for message */ + + bptr = (struct rdbuff *)receive(); + break; + + /* Delete the remote disk (entirely remove it) */ + + case RDS_CTL_DEL: + + /* Handcraft a message for the server that requests */ + /* deleting the disk with the specified ID */ + + msg.rd_type = htons(RD_MSG_DREQ);/* Request deletion */ + msg.rd_status = htons(0); + msg.rd_seq = 0; /* rdscomm will insert sequence # later */ + to = msg.rd_id; + memset(to, NULLCH, RD_IDLEN); /* Initialize to zeroes */ + from = rdptr->rd_id; + while ( (*to++ = *from++) != NULLCH ) { /* copy ID */ + ; + } + + /* Send message and receive response */ + + retval = rdscomm((struct rd_msg_hdr *)&msg, + sizeof(struct rd_msg_dreq), + (struct rd_msg_hdr *)&resp, + sizeof(struct rd_msg_dres), + rdptr); + + /* Check response */ + + if (retval == SYSERR) { + return SYSERR; + } else if (retval == TIMEOUT) { + kprintf("Timeout during remote file delete\n\r"); + return SYSERR; + } else if (ntohs(resp.rd_status) != 0) { + return SYSERR; + } + + /* Close local device */ + + return rdsclose(devptr); + + default: + kprintf("rfsControl: function %d not valid\n\r", func); + return SYSERR; + } + + return OK; +} diff --git a/device/rds/rdsinit.c b/device/rds/rdsinit.c new file mode 100644 index 0000000..b06533c --- /dev/null +++ b/device/rds/rdsinit.c @@ -0,0 +1,104 @@ +/* rdsinit.c - rdsinit */ + +#include + +struct rdscblk rdstab[Nrds]; + +/*------------------------------------------------------------------------ + * rdsinit - Initialize the remote disk system device + *------------------------------------------------------------------------ + */ +devcall rdsinit ( + struct dentry *devptr /* Entry in device switch table */ + ) +{ + struct rdscblk *rdptr; /* Ptr to device contol block */ + struct rdbuff *bptr; /* Ptr to buffer in memory */ + /* used to form linked list */ + struct rdbuff *pptr; /* Ptr to previous buff on list */ + struct rdbuff *buffend; /* Last address in buffer memory*/ + uint32 size; /* Total size of memory needed */ + /* buffers */ + + /* Obtain address of control block */ + + rdptr = &rdstab[devptr->dvminor]; + + /* Set control block to unused */ + + rdptr->rd_state = RD_FREE; + rdptr->rd_id[0] = NULLCH; + + /* Set initial message sequence number */ + + rdptr->rd_seq = 1; + + /* Initialize request queue and cache to empty */ + + rdptr->rd_rhnext = (struct rdbuff *) &rdptr->rd_rtnext; + rdptr->rd_rhprev = (struct rdbuff *)NULL; + + rdptr->rd_rtnext = (struct rdbuff *)NULL; + rdptr->rd_rtprev = (struct rdbuff *) &rdptr->rd_rhnext; + + + rdptr->rd_chnext = (struct rdbuff *) &rdptr->rd_ctnext; + rdptr->rd_chprev = (struct rdbuff *)NULL; + + rdptr->rd_ctnext = (struct rdbuff *)NULL; + rdptr->rd_ctprev = (struct rdbuff *) &rdptr->rd_chnext; + + /* Allocate memory for a set of buffers (actually request */ + /* blocks and link them to form the initial free list */ + + size = sizeof(struct rdbuff) * RD_BUFFS; + + bptr = (struct rdbuff *)getmem(size); + rdptr->rd_free = bptr; + + if ((int32)bptr == SYSERR) { + panic("Cannot allocate memory for remote disk buffers"); + } + + buffend = (struct rdbuff *) ((char *)bptr + size); + while (bptr < buffend) { /* walk through memory */ + pptr = bptr; + bptr = (struct rdbuff *) + (sizeof(struct rdbuff)+ (char *)bptr); + pptr->rd_status = RD_INVALID; /* Buffer is empty */ + pptr->rd_next = bptr; /* Point to next buffer */ + } + pptr->rd_next = (struct rdbuff *) NULL; /* Last buffer on list */ + + /* Create the request list and available buffer semaphores */ + + rdptr->rd_availsem = semcreate(RD_BUFFS); + rdptr->rd_reqsem = semcreate(0); + + /* Set the server IP address, server port, and local port */ + + if ( dot2ip(RD_SERVER_IP, &rdptr->rd_ser_ip) == SYSERR ) { + panic("invalid IP address for remote disk server"); + } + + /* Set the port numbers */ + + rdptr->rd_ser_port = RD_SERVER_PORT; + rdptr->rd_loc_port = RD_LOC_PORT + devptr->dvminor; + + /* Specify that the server port is not yet registered */ + + rdptr->rd_registered = FALSE; + + /* Create a communication process */ + + rdptr->rd_comproc = create(rdsprocess, RD_STACK, RD_PRIO, + "rdsproc", 1, rdptr); + + if (rdptr->rd_comproc == SYSERR) { + panic("Cannot create remote disk process"); + } + resume(rdptr->rd_comproc); + + return OK; +} diff --git a/device/rds/rdsopen.c b/device/rds/rdsopen.c new file mode 100644 index 0000000..67ee955 --- /dev/null +++ b/device/rds/rdsopen.c @@ -0,0 +1,93 @@ +/* rdsopen.c - rdsopen */ + +#include + +/*------------------------------------------------------------------------ + * rdsopen - Open a remote disk device and specify an ID to use + *------------------------------------------------------------------------ + */ + +devcall rdsopen ( + struct dentry *devptr, /* Entry in device switch table */ + char *diskid, /* Disk ID to use */ + char *mode /* Unused for a remote disk */ + ) +{ + struct rdscblk *rdptr; /* Ptr to control block entry */ + struct rd_msg_oreq msg; /* Message to be sent */ + struct rd_msg_ores resp; /* Buffer to hold response */ + int32 retval; /* Return value from rdscomm */ + int32 len; /* Counts chars in diskid */ + char *idto; /* Ptr to ID string copy */ + char *idfrom; /* Pointer into ID string */ + + rdptr = &rdstab[devptr->dvminor]; + + /* Reject if device is already open */ + + if (rdptr->rd_state != RD_FREE) { + return SYSERR; + } + rdptr->rd_state = RD_PEND; + + /* Copy disk ID into free table slot */ + + idto = rdptr->rd_id; + idfrom = diskid; + len = 0; + while ( (*idto++ = *idfrom++) != NULLCH) { + len++; + if (len >= RD_IDLEN) { /* ID string is too long */ + return SYSERR; + } + } + + /* Verify that name is non-null */ + + if (len == 0) { + return SYSERR; + } + + /* Hand-craft an open request message to be sent to the server */ + + msg.rd_type = htons(RD_MSG_OREQ);/* Request an open */ + msg.rd_status = htons(0); + msg.rd_seq = 0; /* Rdscomm fills in an entry */ + idto = msg.rd_id; + memset(idto, NULLCH, RD_IDLEN);/* initialize ID to zero bytes */ + + idfrom = diskid; + while ( (*idto++ = *idfrom++) != NULLCH ) { /* Copy ID to req. */ + ; + } + + /* Send message and receive response */ + + retval = rdscomm((struct rd_msg_hdr *)&msg, + sizeof(struct rd_msg_oreq), + (struct rd_msg_hdr *)&resp, + sizeof(struct rd_msg_ores), + rdptr ); + + /* Check response */ + + if (retval == SYSERR) { + rdptr->rd_state = RD_FREE; + return SYSERR; + } else if (retval == TIMEOUT) { + kprintf("Timeout during remote file open\n\r"); + rdptr->rd_state = RD_FREE; + return SYSERR; + } else if (ntohs(resp.rd_status) != 0) { + rdptr->rd_state = RD_FREE; + return SYSERR; + } + + /* Change state of device to indicate currently open */ + + rdptr->rd_state = RD_OPEN; + + /* Return device descriptor */ + + return devptr->dvnum; +} diff --git a/device/rds/rdsprocess.c b/device/rds/rdsprocess.c new file mode 100644 index 0000000..33100e5 --- /dev/null +++ b/device/rds/rdsprocess.c @@ -0,0 +1,207 @@ +/* rdsprocess.c - rdsprocess */ + +#include + +/*------------------------------------------------------------------------ + * rdsprocess - High-priority background process to repeatedly extract + * an item from the request queue and send the request to + * the remote disk server + *------------------------------------------------------------------------ + */ +void rdsprocess ( + struct rdscblk *rdptr /* Ptr to device control block */ + ) +{ + struct rd_msg_wreq msg; /* Message to be sent */ + /* (includes data area) */ + struct rd_msg_rres resp; /* Buffer to hold response */ + /* (includes data area) */ + int32 retval; /* Return value from rdscomm */ + char *idto; /* Ptr to ID string copy */ + char *idfrom; /* Ptr into ID string */ + struct rdbuff *bptr; /* Ptr to buffer at the head of */ + /* the request queue */ + struct rdbuff *nptr; /* Ptr to next buffer on the */ + /* request queue */ + struct rdbuff *pptr; /* Ptr to previous buffer */ + struct rdbuff *qptr; /* Ptr that runs along the */ + /* request queue */ + int32 i; /* Loop index */ + + while (TRUE) { /* Do forever */ + + /* Wait until the request queue contains a node */ + wait(rdptr->rd_reqsem); + bptr = rdptr->rd_rhnext; + + /* Use operation in request to determine action */ + + switch (bptr->rd_op) { + + case RD_OP_READ: + + /* Build a read request message for the server */ + + msg.rd_type = htons(RD_MSG_RREQ); /* Read request */ + msg.rd_status = htons(0); + msg.rd_seq = 0; /* Rdscomm fills in an entry */ + idto = msg.rd_id; + memset(idto, NULLCH, RD_IDLEN);/* Initialize ID to zero */ + idfrom = rdptr->rd_id; + while ( (*idto++ = *idfrom++) != NULLCH ) { /* Copy ID */ + ; + } + + /* Send the message and receive a response */ + + retval = rdscomm((struct rd_msg_hdr *)&msg, + sizeof(struct rd_msg_rreq), + (struct rd_msg_hdr *)&resp, + sizeof(struct rd_msg_rres), + rdptr ); + + /* Check response */ + + if ( (retval == SYSERR) || (retval == TIMEOUT) || + (ntohs(resp.rd_status) != 0) ) { + panic("Failed to contact remote disk server"); + } + + /* Copy data from the reply into the buffer */ + + for (i=0; ird_block[i] = resp.rd_data[i]; + } + + /* Unlink buffer from the request queue */ + + nptr = bptr->rd_next; + pptr = bptr->rd_prev; + nptr->rd_prev = bptr->rd_prev; + pptr->rd_next = bptr->rd_next; + + /* Insert buffer in the cache */ + + pptr = (struct rdbuff *) &rdptr->rd_chnext; + nptr = pptr->rd_next; + bptr->rd_next = nptr; + bptr->rd_prev = pptr; + pptr->rd_next = bptr; + nptr->rd_prev = bptr; + + /* Initialize reference count */ + + bptr->rd_refcnt = 1; + + /* Signal the available semaphore */ + + signal(rdptr->rd_availsem); + + /* Send a message to waiting process */ + + send(bptr->rd_pid, (uint32)bptr); + + /* If other processes are waiting to read the */ + /* block, notify them and remove the request */ + + qptr = rdptr->rd_rhnext; + while (qptr != (struct rdbuff *)&rdptr->rd_rtnext) { + if (qptr->rd_blknum == bptr->rd_blknum) { + bptr->rd_refcnt++; + send(qptr->rd_pid,(uint32)bptr); + + /* Unlink request from queue */ + + pptr = qptr->rd_prev; + nptr = qptr->rd_next; + pptr->rd_next = bptr->rd_next; + nptr->rd_prev = bptr->rd_prev; + + /* Move buffer to the free list */ + + qptr->rd_next = rdptr->rd_free; + rdptr->rd_free = qptr; + signal(rdptr->rd_availsem); + break; + } + qptr = qptr->rd_next; + } + break; + + case RD_OP_WRITE: + + /* Build a write request message for the server */ + + msg.rd_type = htons(RD_MSG_WREQ); /* Write request*/ + msg.rd_blk = bptr->rd_blknum; + msg.rd_status = htons(0); + msg.rd_seq = 0; /* Rdscomb fills in an entry */ + idto = msg.rd_id; + memset(idto, NULLCH, RD_IDLEN);/* Initialize ID to zero */ + idfrom = rdptr->rd_id; + while ( (*idto++ = *idfrom++) != NULLCH ) { /* Copy ID */ + ; + } + for (i=0; ird_block[i]; + } + + /* Unlink buffer from request queue */ + + nptr = bptr->rd_next; + pptr = bptr->rd_prev; + pptr->rd_next = nptr; + nptr->rd_prev = pptr; + + /* Insert buffer in the cache */ + + pptr = (struct rdbuff *) &rdptr->rd_chnext; + nptr = pptr->rd_next; + bptr->rd_next = nptr; + bptr->rd_prev = pptr; + pptr->rd_next = bptr; + nptr->rd_prev = bptr; + + /* Declare that buffer is eligible for reuse */ + + bptr->rd_refcnt = 0; + signal(rdptr->rd_availsem); + + /* Send the message and receive a response */ + + retval = rdscomm((struct rd_msg_hdr *)&msg, + sizeof(struct rd_msg_wreq), + (struct rd_msg_hdr *)&resp, + sizeof(struct rd_msg_wres), + rdptr ); + + /* Check response */ + + if ( (retval == SYSERR) || (retval == TIMEOUT) || + (ntohs(resp.rd_status) != 0) ) { + panic("failed to contact remote disk server"); + } + break; + + case RD_OP_SYNC: + + /* Send a message to the waiting process */ + + send(bptr->rd_pid, OK); + + /* Unlink buffer from the request queue */ + + nptr = bptr->rd_next; + pptr = bptr->rd_prev; + nptr->rd_prev = bptr->rd_prev; + pptr->rd_next = bptr->rd_next; + + /* Insert buffer into the free list */ + + bptr->rd_next = rdptr->rd_free; + rdptr->rd_free = bptr; + signal(rdptr->rd_availsem); + break; + } + } +} diff --git a/device/rds/rdsread.c b/device/rds/rdsread.c new file mode 100644 index 0000000..b4c62eb --- /dev/null +++ b/device/rds/rdsread.c @@ -0,0 +1,123 @@ +/* rdsread.c - rdsread */ + +#include + +/*------------------------------------------------------------------------ + * rdsread - Read a block from a remote disk + *------------------------------------------------------------------------ + */ +devcall rdsread ( + struct dentry *devptr, /* Entry in device switch table */ + char *buff, /* Buffer to hold disk block */ + int32 blk /* Block number of block to read*/ + ) +{ + struct rdscblk *rdptr; /* Pointer to control block */ + struct rdbuff *bptr; /* Pointer to buffer possibly */ + /* in the request list */ + struct rdbuff *nptr; /* Pointer to "next" node on a */ + /* list */ + struct rdbuff *pptr; /* Pointer to "previous" node */ + /* on a list */ + struct rdbuff *cptr; /* Pointer that walks the cache */ + + /* If device not currently in use, report an error */ + + rdptr = &rdstab[devptr->dvminor]; + if (rdptr->rd_state != RD_OPEN) { + return SYSERR; + } + + /* Search the cache for specified block */ + + bptr = rdptr->rd_chnext; + while (bptr != (struct rdbuff *)&rdptr->rd_ctnext) { + if (bptr->rd_blknum == blk) { + if (bptr->rd_status == RD_INVALID) { + break; + } + memcpy(buff, bptr->rd_block, RD_BLKSIZ); + return OK; + } + bptr = bptr->rd_next; + } + + /* Search the request list for most recent occurrence of block */ + + bptr = rdptr->rd_rtprev; /* Start at tail of list */ + + while (bptr != (struct rdbuff *)&rdptr->rd_rhnext) { + if (bptr->rd_blknum == blk) { + + /* If most recent request for block is write, copy data */ + + if (bptr->rd_op == RD_OP_WRITE) { + memcpy(buff, bptr->rd_block, RD_BLKSIZ); + return OK; + } + break; + } + bptr = bptr->rd_prev; + } + + /* Allocate a buffer and add read request to tail of req. queue */ + + bptr = rdsbufalloc(rdptr); + bptr->rd_op = RD_OP_READ; + bptr->rd_refcnt = 1; + bptr->rd_blknum = blk; + bptr->rd_status = RD_INVALID; + bptr->rd_pid = getpid(); + + /* Insert new request into list just before tail */ + + pptr = rdptr->rd_rtprev; + rdptr->rd_rtprev = bptr; + bptr->rd_next = pptr->rd_next; + bptr->rd_prev = pptr; + pptr->rd_next = bptr; + + /* Prepare to receive message when read completes */ + + recvclr(); + + /* Signal semaphore to start communication process */ + + signal(rdptr->rd_reqsem); + + /* Block to wait for message */ + + bptr = (struct rdbuff *)receive(); + if (bptr == (struct rdbuff *)SYSERR) { + return SYSERR; + } + memcpy(buff, bptr->rd_block, RD_BLKSIZ); + bptr->rd_refcnt--; + if (bptr->rd_refcnt <= 0) { + + /* Look for previous item in cache with the same block */ + /* number to see if this item was only being kept */ + /* until pending read completed */ + + cptr = rdptr->rd_chnext; + while (cptr != bptr) { + if (cptr->rd_blknum == blk) { + + /* Unlink from cache */ + + pptr = bptr->rd_prev; + nptr = bptr->rd_next; + pptr->rd_next = nptr; + nptr->rd_prev = pptr; + + /* Add to the free list */ + + bptr->rd_next = rdptr->rd_free; + rdptr->rd_free = bptr; + break; + } + cptr = cptr->rd_next; + } + } + return OK; +} diff --git a/device/rds/rdswrite.c b/device/rds/rdswrite.c new file mode 100644 index 0000000..4153a40 --- /dev/null +++ b/device/rds/rdswrite.c @@ -0,0 +1,91 @@ +/* rdswrite.c - rdswrite */ + +#include + +/*------------------------------------------------------------------------ + * rdswrite - Write a block to a remote disk + *------------------------------------------------------------------------ + */ +devcall rdswrite ( + struct dentry *devptr, /* Entry in device switch table */ + char *buff, /* Buffer that holds a disk blk */ + int32 blk /* Block number to write */ + ) +{ + struct rdscblk *rdptr; /* Pointer to control block */ + struct rdbuff *bptr; /* Pointer to buffer on a list */ + struct rdbuff *pptr; /* Ptr to previous buff on list */ + struct rdbuff *nptr; /* Ptr to next buffer on list */ + bool8 found; /* Was buff found during search?*/ + + /* If device not currently in use, report an error */ + + rdptr = &rdstab[devptr->dvminor]; + if (rdptr->rd_state != RD_OPEN) { + return SYSERR; + } + + /* If request queue already contains a write request */ + /* for the block, replace the contents */ + + bptr = rdptr->rd_rhnext; + while (bptr != (struct rdbuff *)&rdptr->rd_rtnext) { + if ( (bptr->rd_blknum == blk) && + (bptr->rd_op == RD_OP_WRITE) ) { + memcpy(bptr->rd_block, buff, RD_BLKSIZ); + return OK; + } + bptr = bptr->rd_next; + } + + + /* Search cache for cached copy of block */ + + bptr = rdptr->rd_chnext; + found = FALSE; + while (bptr != (struct rdbuff *)&rdptr->rd_ctnext) { + if (bptr->rd_blknum == blk) { + if (bptr->rd_refcnt <= 0) { + pptr = bptr->rd_prev; + nptr = bptr->rd_next; + + /* Unlink node from cache list and reset*/ + /* the available semaphore accordingly*/ + + pptr->rd_next = bptr->rd_next; + nptr->rd_prev = bptr->rd_prev; + semreset(rdptr->rd_availsem, + semcount(rdptr->rd_availsem) - 1); + found = TRUE; + } + break; + } + bptr = bptr->rd_next; + } + + if ( !found ) { + bptr = rdsbufalloc(rdptr); + } + + /* Create a write request */ + + memcpy(bptr->rd_block, buff, RD_BLKSIZ); + bptr->rd_op = RD_OP_WRITE; + bptr->rd_refcnt = 0; + bptr->rd_blknum = blk; + bptr->rd_status = RD_VALID; + bptr->rd_pid = getpid(); + + /* Insert new request into list just before tail */ + + pptr = rdptr->rd_rtprev; + rdptr->rd_rtprev = bptr; + bptr->rd_next = pptr->rd_next; + bptr->rd_prev = pptr; + pptr->rd_next = bptr; + + /* Signal semaphore to start communication process */ + + signal(rdptr->rd_reqsem); + return OK; +} diff --git a/device/rfs/rflclose.c b/device/rfs/rflclose.c new file mode 100644 index 0000000..f1f0d87 --- /dev/null +++ b/device/rfs/rflclose.c @@ -0,0 +1,32 @@ +/* rflclose.c - rflclose */ + +#include + +/*------------------------------------------------------------------------ + * rflclose - Close a remote file device + *------------------------------------------------------------------------ + */ +devcall rflclose ( + struct dentry *devptr /* Entry in device switch table */ + ) +{ + struct rflcblk *rfptr; /* Pointer to control block */ + + /* Wait for exclusive access */ + + wait(Rf_data.rf_mutex); + + /* Verify remote file device is open */ + + rfptr = &rfltab[devptr->dvminor]; + if (rfptr->rfstate == RF_FREE) { + signal(Rf_data.rf_mutex); + return SYSERR; + } + + /* Mark device closed */ + + rfptr->rfstate = RF_FREE; + signal(Rf_data.rf_mutex); + return OK; +} diff --git a/device/rfs/rflgetc.c b/device/rfs/rflgetc.c new file mode 100644 index 0000000..3db46c1 --- /dev/null +++ b/device/rfs/rflgetc.c @@ -0,0 +1,23 @@ +/* rflgetc.c - rflgetc */ + +#include + +/*------------------------------------------------------------------------ + * rflgetc - Read one character from a remote file + *------------------------------------------------------------------------ + */ +devcall rflgetc( + struct dentry *devptr /* Entry in device switch table */ + ) +{ + char ch; /* Character to read */ + int32 retval; /* Return value */ + + retval = rflread(devptr, &ch, 1); + + if (retval != 1) { + return SYSERR; + } + + return (devcall)ch; +} diff --git a/device/rfs/rflinit.c b/device/rfs/rflinit.c new file mode 100644 index 0000000..79e43c8 --- /dev/null +++ b/device/rfs/rflinit.c @@ -0,0 +1,29 @@ +/* rflinit.c - rflinit */ + +#include + +struct rflcblk rfltab[Nrfl]; /* Remote file control blocks */ + +/*------------------------------------------------------------------------ + * rflinit - Initialize a remote file device + *------------------------------------------------------------------------ + */ +devcall rflinit( + struct dentry *devptr /* Entry in device switch table */ + ) +{ + struct rflcblk *rflptr; /* Ptr. to control block entry */ + int32 i; /* Walks through name arrary */ + + rflptr = &rfltab[ devptr->dvminor ]; + + /* Initialize entry to unused */ + + rflptr->rfstate = RF_FREE; + rflptr->rfdev = devptr->dvnum; + for (i=0; irfname[i] = NULLCH; + } + rflptr->rfpos = rflptr->rfmode = 0; + return OK; +} diff --git a/device/rfs/rflputc.c b/device/rfs/rflputc.c new file mode 100644 index 0000000..e09290b --- /dev/null +++ b/device/rfs/rflputc.c @@ -0,0 +1,23 @@ +/* rflputc.c - rflputc */ + +#include + +/*------------------------------------------------------------------------ + * rflputc - Write one character to a remote file + *------------------------------------------------------------------------ + */ +devcall rflputc( + struct dentry *devptr, /* Entry in device switch table */ + char ch /* Character to write */ + ) +{ + struct rflcblk *rfptr; /* Pointer to rfl control block */ + + rfptr = &rfltab[devptr->dvminor]; + + if (rflwrite(devptr, &ch, 1) != 1) { + return SYSERR; + } + + return OK; +} diff --git a/device/rfs/rflread.c b/device/rfs/rflread.c new file mode 100644 index 0000000..0f5b265 --- /dev/null +++ b/device/rfs/rflread.c @@ -0,0 +1,100 @@ +/* rflread.c - rflread */ + +#include + +/*------------------------------------------------------------------------ + * rflread - Read data from a remote file + *------------------------------------------------------------------------ + */ +devcall rflread ( + struct dentry *devptr, /* Entry in device switch table */ + char *buff, /* Buffer of bytes */ + int32 count /* Count of bytes to read */ + ) +{ + struct rflcblk *rfptr; /* Pointer to control block */ + int32 retval; /* Return value */ + struct rf_msg_rreq msg; /* Request message to send */ + struct rf_msg_rres resp; /* Buffer for response */ + int32 i; /* Counts bytes copied */ + char *from, *to; /* Used during name copy */ + int32 len; /* Length of name */ + + /* Wait for exclusive access */ + + wait(Rf_data.rf_mutex); + + /* Verify count is legitimate */ + + if ( (count <= 0) || (count > RF_DATALEN) ) { + signal(Rf_data.rf_mutex); + return SYSERR; + } + + /* Verify pseudo-device is in use */ + + rfptr = &rfltab[devptr->dvminor]; + + /* If device not currently in use, report an error */ + + if (rfptr->rfstate == RF_FREE) { + signal(Rf_data.rf_mutex); + return SYSERR; + } + + /* Verify pseudo-device allows reading */ + + if ((rfptr->rfmode & RF_MODE_R) == 0) { + signal(Rf_data.rf_mutex); + return SYSERR; + } + + /* Form read request */ + + msg.rf_type = htons(RF_MSG_RREQ); + msg.rf_status = htons(0); + msg.rf_seq = 0; /* Rfscomm will set sequence */ + from = rfptr->rfname; + to = msg.rf_name; + memset(to, NULLCH, RF_NAMLEN); /* Start name as all zero bytes */ + len = 0; + while ( (*to++ = *from++) ) { /* Copy name to request */ + if (++len >= RF_NAMLEN) { + signal(Rf_data.rf_mutex); + return SYSERR; + } + } + msg.rf_pos = htonl(rfptr->rfpos);/* Set file position */ + msg.rf_len = htonl(count); /* Set count of bytes to read */ + + /* Send message and receive response */ + + retval = rfscomm((struct rf_msg_hdr *)&msg, + sizeof(struct rf_msg_rreq), + (struct rf_msg_hdr *)&resp, + sizeof(struct rf_msg_rres) ); + + /* Check response */ + + if (retval == SYSERR) { + signal(Rf_data.rf_mutex); + return SYSERR; + } else if (retval == TIMEOUT) { + kprintf("Timeout during remote file read\n"); + signal(Rf_data.rf_mutex); + return SYSERR; + } else if (ntohs(resp.rf_status) != 0) { + signal(Rf_data.rf_mutex); + return SYSERR; + } + + /* Copy data to application buffer and update file position */ + + for (i=0; irfpos += htonl(resp.rf_len); + + signal(Rf_data.rf_mutex); + return htonl(resp.rf_len); +} diff --git a/device/rfs/rflseek.c b/device/rfs/rflseek.c new file mode 100644 index 0000000..4a84788 --- /dev/null +++ b/device/rfs/rflseek.c @@ -0,0 +1,33 @@ +/* rflseek.c - rflseek */ + +#include + +/*------------------------------------------------------------------------ + * rflseek - Change the current position in an open file + *------------------------------------------------------------------------ + */ +devcall rflseek ( + struct dentry *devptr, /* Entry in device switch table */ + uint32 pos /* New file position */ + ) +{ + struct rflcblk *rfptr; /* Pointer to control block */ + + /* Wait for exclusive access */ + + wait(Rf_data.rf_mutex); + + /* Verify remote file device is open */ + + rfptr = &rfltab[devptr->dvminor]; + if (rfptr->rfstate == RF_FREE) { + signal(Rf_data.rf_mutex); + return SYSERR; + } + + /* Set the new position */ + + rfptr->rfpos = pos; + signal(Rf_data.rf_mutex); + return OK; +} diff --git a/device/rfs/rflwrite.c b/device/rfs/rflwrite.c new file mode 100644 index 0000000..ec3c2b9 --- /dev/null +++ b/device/rfs/rflwrite.c @@ -0,0 +1,97 @@ +/* rflwrite.c - rflwrite */ + +#include + +/*------------------------------------------------------------------------ + * rflwrite - Write data to a remote file + *------------------------------------------------------------------------ + */ +devcall rflwrite ( + struct dentry *devptr, /* Entry in device switch table */ + char *buff, /* Buffer of bytes */ + int32 count /* Count of bytes to write */ + ) +{ + struct rflcblk *rfptr; /* Pointer to control block */ + int32 retval; /* Return value */ + struct rf_msg_wreq msg; /* Request message to send */ + struct rf_msg_wres resp; /* Buffer for response */ + char *from, *to; /* Used to copy name */ + int i; /* Counts bytes copied into req */ + int32 len; /* Length of name */ + + /* Wait for exclusive access */ + + wait(Rf_data.rf_mutex); + + /* Verify count is legitimate */ + + if ( (count <= 0) || (count > RF_DATALEN) ) { + signal(Rf_data.rf_mutex); + return SYSERR; + } + + /* Verify pseudo-device is in use and mode allows writing */ + + rfptr = &rfltab[devptr->dvminor]; + if ( (rfptr->rfstate == RF_FREE) || + ! (rfptr->rfmode & RF_MODE_W) ) { + signal(Rf_data.rf_mutex); + return SYSERR; + } + + /* Form write request */ + + msg.rf_type = htons(RF_MSG_WREQ); + msg.rf_status = htons(0); + msg.rf_seq = 0; /* Rfscomm will set sequence */ + from = rfptr->rfname; + to = msg.rf_name; + memset(to, NULLCH, RF_NAMLEN); /* Start name as all zero bytes */ + len = 0; + while ( (*to++ = *from++) ) { /* Copy name to request */ + if (++len >= RF_NAMLEN) { + signal(Rf_data.rf_mutex); + return SYSERR; + } + } + while ( (*to++ = *from++) ) { /* Copy name into request */ + ; + } + msg.rf_pos = htonl(rfptr->rfpos);/* Set file position */ + msg.rf_len = htonl(count); /* Set count of bytes to write */ + for (i=0; irfpos += ntohl(resp.rf_len); + + signal(Rf_data.rf_mutex); + return ntohl(resp.rf_len); +} diff --git a/device/rfs/rfscomm.c b/device/rfs/rfscomm.c new file mode 100644 index 0000000..bd48aac --- /dev/null +++ b/device/rfs/rfscomm.c @@ -0,0 +1,85 @@ +/* rfscomm.c - rfscomm */ + +#include + +/*------------------------------------------------------------------------ + * rfscomm - Handle communication with RFS server (send request and + * receive a reply, including sequencing and retries) + *------------------------------------------------------------------------ + */ +int32 rfscomm ( + struct rf_msg_hdr *msg, /* Message to send */ + int32 mlen, /* Message length */ + struct rf_msg_hdr *reply, /* Buffer for reply */ + int32 rlen /* Size of reply buffer */ + ) +{ + int32 i; /* Counts retries */ + int32 retval; /* Return value */ + int32 seq; /* Sequence for this exchange */ + int16 rtype; /* Reply type in host byte order*/ + int32 slot; /* UDP slot */ + + /* For the first time after reboot, register the server port */ + + if ( ! Rf_data.rf_registered ) { + if ( (retval = udp_register(Rf_data.rf_ser_ip, + Rf_data.rf_ser_port, + Rf_data.rf_loc_port)) == SYSERR) { + return SYSERR; + } + Rf_data.rf_udp_slot = retval; + Rf_data.rf_registered = TRUE; + } + + /* Assign message next sequence number */ + + seq = Rf_data.rf_seq++; + msg->rf_seq = htonl(seq); + + /* Repeat RF_RETRIES times: send message and receive reply */ + + for (i=0; irf_seq) != seq) { + continue; + } + + /* Verify the type in the reply matches the request */ + + rtype = ntohs(reply->rf_type); + if (rtype != ( ntohs(msg->rf_type) | RF_MSG_RESPONSE) ) { + continue; + } + + return retval; /* Return length to caller */ + } + + /* Retries exhausted without success */ + + kprintf("Timeout on exchange with remote file server\n"); + return TIMEOUT; +} diff --git a/device/rfs/rfscontrol.c b/device/rfs/rfscontrol.c new file mode 100644 index 0000000..052c5ea --- /dev/null +++ b/device/rfs/rfscontrol.c @@ -0,0 +1,114 @@ +/* rfscontrol.c - rfscontrol */ + +#include + +/*------------------------------------------------------------------------ + * rfscontrol - Provide control functions for the remote file system + *------------------------------------------------------------------------ + */ +devcall rfscontrol ( + struct dentry *devptr, /* Entry in device switch table */ + int32 func, /* A control function */ + int32 arg1, /* Argument #1 */ + int32 arg2 /* Argument #2 */ + ) +{ + int32 len; /* Length of name */ + struct rf_msg_sreq msg; /* Buffer for size request */ + struct rf_msg_sres resp; /* Buffer for size response */ + struct rflcblk *rfptr; /* Pointer to entry in rfltab */ + char *to, *from; /* Used during name copy */ + int32 retval; /* Return value */ + + /* Wait for exclusive access */ + + wait(Rf_data.rf_mutex); + + /* Check length and copy (needed for size) */ + + rfptr = &rfltab[devptr->dvminor]; + from = rfptr->rfname; + to = msg.rf_name; + len = 0; + memset(to, NULLCH, RF_NAMLEN); /* Start name as all zeroes */ + while ( (*to++ = *from++) ) { /* Copy name to message */ + len++; + if (len >= (RF_NAMLEN - 1) ) { + signal(Rf_data.rf_mutex); + return SYSERR; + } + } + + switch (func) { + + /* Delete a file */ + + case RFS_CTL_DEL: + if (rfsndmsg(RF_MSG_DREQ, (char *)arg1) == SYSERR) { + signal(Rf_data.rf_mutex); + return SYSERR; + } + break; + + /* Truncate a file */ + + case RFS_CTL_TRUNC: + if (rfsndmsg(RF_MSG_TREQ, (char *)arg1) == SYSERR) { + signal(Rf_data.rf_mutex); + return SYSERR; + } + break; + + + + /* Make a directory */ + + case RFS_CTL_MKDIR: + if (rfsndmsg(RF_MSG_MREQ, (char *)arg1) == SYSERR) { + signal(Rf_data.rf_mutex); + return SYSERR; + } + break; + + /* Remove a directory */ + + case RFS_CTL_RMDIR: + if (rfsndmsg(RF_MSG_XREQ, (char *)arg1) == SYSERR) { + signal(Rf_data.rf_mutex); + return SYSERR; + } + break; + + /* Obtain current file size (non-standard message size) */ + + case RFS_CTL_SIZE: + + /* Hand-craft a size request message */ + + msg.rf_type = htons(RF_MSG_SREQ); + msg.rf_status = htons(0); + msg.rf_seq = 0; /* Rfscomm will set the seq num */ + + /* Send the request to server and obtain a response */ + + retval = rfscomm( (struct rf_msg_hdr *)&msg, + sizeof(struct rf_msg_sreq), + (struct rf_msg_hdr *)&resp, + sizeof(struct rf_msg_sres) ); + if ( (retval == SYSERR) || (retval == TIMEOUT) ) { + signal(Rf_data.rf_mutex); + return SYSERR; + } else { + signal(Rf_data.rf_mutex); + return ntohl(resp.rf_size); + } + + default: + kprintf("rfscontrol: function %d not valid\n", func); + signal(Rf_data.rf_mutex); + return SYSERR; + } + + signal(Rf_data.rf_mutex); + return OK; +} diff --git a/device/rfs/rfsgetmode.c b/device/rfs/rfsgetmode.c new file mode 100644 index 0000000..e3e82ed --- /dev/null +++ b/device/rfs/rfsgetmode.c @@ -0,0 +1,63 @@ +/* rfsgetmode.c - rfsgetmode */ + +#include + +/*------------------------------------------------------------------------ + * rfsgetmode - Parse mode argument and generate integer of mode bits + *------------------------------------------------------------------------ + */ + +int32 rfsgetmode ( + char *mode /* String of mode characters */ + ) +{ + int32 mbits; /* Mode bits to return (in host */ + /* byte order) */ + char ch; /* Next character in mode string*/ + + mbits = 0; + + /* Mode string specifies: */ + /* r - read */ + /* w - write */ + /* o - old (file must exist) */ + /* n - new (create a new file) */ + + while ( (ch = *mode++) != NULLCH) { + switch (ch) { + + case 'r': if (mbits&RF_MODE_R) { + return SYSERR; + } + mbits |= RF_MODE_R; + continue; + + case 'w': if (mbits&RF_MODE_W) { + return SYSERR; + } + mbits |= RF_MODE_W; + continue; + + case 'o': if (mbits&RF_MODE_O || mbits&RF_MODE_N) { + return SYSERR; + } + mbits |= RF_MODE_O; + break; + + case 'n': if (mbits&RF_MODE_O || mbits&RF_MODE_N) { + return SYSERR; + } + mbits |= RF_MODE_N; + break; + + default: return SYSERR; + } + } + + /* If neither read nor write specified, allow both */ + + if ( (mbits&RF_MODE_RW) == 0 ) { + mbits |= RF_MODE_RW; + } + return mbits; +} diff --git a/device/rfs/rfsinit.c b/device/rfs/rfsinit.c new file mode 100644 index 0000000..9eff0ad --- /dev/null +++ b/device/rfs/rfsinit.c @@ -0,0 +1,39 @@ +/* rfsinit.c - rfsinit */ + +#include + +struct rfdata Rf_data; + +/*------------------------------------------------------------------------ + * rfsinit - Initialize the remote file system master device + *------------------------------------------------------------------------ + */ +devcall rfsinit( + struct dentry *devptr /* Entry in device switch table */ + ) +{ + + /* Choose an initial message sequence number */ + + Rf_data.rf_seq = 1; + + /* Set the server IP address, server port, and local port */ + + if ( dot2ip(RF_SERVER_IP, &Rf_data.rf_ser_ip) == SYSERR ) { + panic("invalid IP address for remote file server"); + } + Rf_data.rf_ser_port = RF_SERVER_PORT; + Rf_data.rf_loc_port = RF_LOC_PORT; + + /* Create a mutual exclusion semaphore */ + + if ( (Rf_data.rf_mutex = semcreate(1)) == SYSERR ) { + panic("Cannot create remote file system semaphore"); + } + + /* Specify that the server port is not yet registered */ + + Rf_data.rf_registered = FALSE; + + return OK; +} diff --git a/device/rfs/rfsndmsg.c b/device/rfs/rfsndmsg.c new file mode 100644 index 0000000..75917ae --- /dev/null +++ b/device/rfs/rfsndmsg.c @@ -0,0 +1,46 @@ +/* rfsndmsg.c - rfsndmsg */ + +#include + +/*------------------------------------------------------------------------ + * rfsndmsg - Create and send a message that only has header fields + *------------------------------------------------------------------------ + */ +status rfsndmsg ( + uint16 type, /* Message type */ + char *name /* Null-terminated file name */ + ) +{ + struct rf_msg_hdr req; /* Request message to send */ + struct rf_msg_hdr resp; /* Buffer for response */ + int32 retval; /* Return value */ + char *to; /* Used during name copy */ + + /* Form a request */ + + req.rf_type = htons(type); + req.rf_status = htons(0); + req.rf_seq = 0; /* Rfscomm will set sequence */ + to = req.rf_name; + while ( (*to++ = *name++) ) { /* Copy name to request */ + ; + } + + /* Send message and receive response */ + + retval = rfscomm(&req, sizeof(struct rf_msg_hdr), + &resp, sizeof(struct rf_msg_hdr) ); + + /* Check response */ + + if (retval == SYSERR) { + return SYSERR; + } else if (retval == TIMEOUT) { + kprintf("Timeout during remote file server access\n"); + return SYSERR; + } else if (ntohl(resp.rf_status) != 0) { + return SYSERR; + } + + return OK; +} diff --git a/device/rfs/rfsopen.c b/device/rfs/rfsopen.c new file mode 100644 index 0000000..bee91a0 --- /dev/null +++ b/device/rfs/rfsopen.c @@ -0,0 +1,114 @@ +/* rfsopen.c - rfsopen */ + +#include + +/*------------------------------------------------------------------------ + * rfsopen - Allocate a remote file pseudo-device for a specific file + *------------------------------------------------------------------------ + */ + +devcall rfsopen ( + struct dentry *devptr, /* Entry in device switch table */ + char *name, /* File name to use */ + char *mode /* Mode chars: 'r' 'w' 'o' 'n' */ + ) +{ + struct rflcblk *rfptr; /* Ptr to control block entry */ + struct rf_msg_oreq msg; /* Message to be sent */ + struct rf_msg_ores resp; /* Buffer to hold response */ + int32 retval; /* Return value from rfscomm */ + int32 len; /* Counts chars in name */ + char *nptr; /* Pointer into name string */ + char *fptr; /* Pointer into file name */ + int32 i; /* General loop index */ + + /* Wait for exclusive access */ + + wait(Rf_data.rf_mutex); + + /* Search control block array to find a free entry */ + + for(i=0; irfstate == RF_FREE) { + break; + } + } + if (i >= Nrfl) { /* No free table slots remain */ + signal(Rf_data.rf_mutex); + return SYSERR; + } + + /* Copy name into free table slot */ + + nptr = name; + fptr = rfptr->rfname; + len = 0; + while ( (*fptr++ = *nptr++) != NULLCH) { + len++; + if (len >= RF_NAMLEN) { /* File name is too long */ + signal(Rf_data.rf_mutex); + return SYSERR; + } + } + + /* Verify that name is non-null */ + + if (len==0) { + signal(Rf_data.rf_mutex); + return SYSERR; + } + + /* Parse mode string */ + + if ( (rfptr->rfmode = rfsgetmode(mode)) == SYSERR ) { + signal(Rf_data.rf_mutex); + return SYSERR; + } + + /* Form an open request to create a new file or open an old one */ + + msg.rf_type = htons(RF_MSG_OREQ);/* Request a file open */ + msg.rf_status = htons(0); + msg.rf_seq = 0; /* Rfscomm fills in seq. number */ + nptr = msg.rf_name; + memset(nptr, NULLCH, RF_NAMLEN);/* Initialize name to zero bytes*/ + while ( (*nptr++ = *name++) != NULLCH ) { /* Copy name to req. */ + ; + } + msg.rf_mode = htonl(rfptr->rfmode); /* Set mode in request */ + + /* Send message and receive response */ + + retval = rfscomm((struct rf_msg_hdr *)&msg, + sizeof(struct rf_msg_oreq), + (struct rf_msg_hdr *)&resp, + sizeof(struct rf_msg_ores) ); + + /* Check response */ + + if (retval == SYSERR) { + signal(Rf_data.rf_mutex); + return SYSERR; + } else if (retval == TIMEOUT) { + kprintf("Timeout during remote file open\n\r"); + signal(Rf_data.rf_mutex); + return SYSERR; + } else if (ntohs(resp.rf_status) != 0) { + signal(Rf_data.rf_mutex); + return SYSERR; + } + + /* Set initial file position */ + + rfptr->rfpos = 0; + + /* Mark state as currently used */ + + rfptr->rfstate = RF_USED; + + /* Return device descriptor of newly created pseudo-device */ + + signal(Rf_data.rf_mutex); + return rfptr->rfdev; +} diff --git a/device/tty/ttycontrol.c b/device/tty/ttycontrol.c new file mode 100644 index 0000000..96b12da --- /dev/null +++ b/device/tty/ttycontrol.c @@ -0,0 +1,57 @@ +/* ttycontrol.c - ttycontrol */ + +#include + +/*------------------------------------------------------------------------ + * ttycontrol - Control a tty device by setting modes + *------------------------------------------------------------------------ + */ +devcall ttycontrol( + struct dentry *devptr, /* Entry in device switch table */ + int32 func, /* Function to perform */ + int32 arg1, /* Argument 1 for request */ + int32 arg2 /* Argument 2 for request */ + ) +{ + struct ttycblk *typtr; /* Pointer to tty control block */ + char ch; /* Character for lookahead */ + + typtr = &ttytab[devptr->dvminor]; + + /* Process the request */ + + switch ( func ) { + + case TC_NEXTC: + wait(typtr->tyisem); + ch = *typtr->tyitail; + signal(typtr->tyisem); + return (devcall)ch; + + case TC_MODER: + typtr->tyimode = TY_IMRAW; + return (devcall)OK; + + case TC_MODEC: + typtr->tyimode = TY_IMCOOKED; + return (devcall)OK; + + case TC_MODEK: + typtr->tyimode = TY_IMCBREAK; + return (devcall)OK; + + case TC_ICHARS: + return(semcount(typtr->tyisem)); + + case TC_ECHO: + typtr->tyiecho = TRUE; + return (devcall)OK; + + case TC_NOECHO: + typtr->tyiecho = FALSE; + return (devcall)OK; + + default: + return (devcall)SYSERR; + } +} diff --git a/device/tty/ttygetc.c b/device/tty/ttygetc.c new file mode 100644 index 0000000..66ad151 --- /dev/null +++ b/device/tty/ttygetc.c @@ -0,0 +1,37 @@ +/* ttygetc.c - ttygetc */ + +#include + +/*------------------------------------------------------------------------ + * ttygetc - Read one character from a tty device (interrupts disabled) + *------------------------------------------------------------------------ + */ +devcall ttygetc( + struct dentry *devptr /* Entry in device switch table */ + ) +{ + char ch; /* Character to return */ + struct ttycblk *typtr; /* Pointer to ttytab entry */ + + typtr = &ttytab[devptr->dvminor]; + + /* Wait for a character in the buffer and extract one character */ + + wait(typtr->tyisem); + ch = *typtr->tyihead++; + + /* Wrap around to beginning of buffer, if needed */ + + if (typtr->tyihead >= &typtr->tyibuff[TY_IBUFLEN]) { + typtr->tyihead = typtr->tyibuff; + } + + /* In cooked mode, check for the EOF character */ + + if ( (typtr->tyimode == TY_IMCOOKED) && (typtr->tyeof) && + (ch == typtr->tyeofch) ) { + return (devcall)EOF; + } + + return (devcall)ch; +} diff --git a/device/tty/ttyhandle_in.c b/device/tty/ttyhandle_in.c new file mode 100644 index 0000000..d2c231b --- /dev/null +++ b/device/tty/ttyhandle_in.c @@ -0,0 +1,265 @@ +/* ttyhandle_in.c - ttyhandle_in, erase1, eputc, echoch */ + +#include + +local void erase1(struct ttycblk *, struct uart_csreg *); +local void echoch(char, struct ttycblk *, struct uart_csreg *); +local void eputc(char, struct ttycblk *, struct uart_csreg *); + +/*------------------------------------------------------------------------ + * ttyhandle_in - Handle one arriving char (interrupts disabled) + *------------------------------------------------------------------------ + */ +void ttyhandle_in ( + struct ttycblk *typtr, /* Pointer to ttytab entry */ + struct uart_csreg *csrptr /* Address of UART's CSR */ + ) +{ + char ch; /* Next char from device */ + int32 avail; /* Chars available in buffer */ + + ch = csrptr->buffer; + + /* Compute chars available */ + + avail = semcount(typtr->tyisem); + if (avail < 0) { /* One or more processes waiting*/ + avail = 0; + } + + /* Handle raw mode */ + + if (typtr->tyimode == TY_IMRAW) { + if (avail >= TY_IBUFLEN) { /* No space => ignore input */ + return; + } + + /* Place char in buffer with no editing */ + + *typtr->tyitail++ = ch; + + /* Wrap buffer pointer */ + + if (typtr->tyotail >= &typtr->tyobuff[TY_OBUFLEN]) { + typtr->tyotail = typtr->tyobuff; + } + + /* Signal input semaphore and return */ + signal(typtr->tyisem); + return; + } + + /* Handle cooked and cbreak modes (common part) */ + + if ( (ch == TY_RETURN) && typtr->tyicrlf ) { + ch = TY_NEWLINE; + } + + /* If flow control is in effect, handle ^S and ^Q */ + + if (typtr->tyoflow) { + if (ch == typtr->tyostart) { /* ^Q starts output */ + typtr->tyoheld = FALSE; + ttykickout(csrptr); + return; + } else if (ch == typtr->tyostop) { /* ^S stops output */ + typtr->tyoheld = TRUE; + return; + } + } + + typtr->tyoheld = FALSE; /* Any other char starts output */ + + if (typtr->tyimode == TY_IMCBREAK) { /* Just cbreak mode */ + + /* If input buffer is full, send bell to user */ + + if (avail >= TY_IBUFLEN) { + eputc(typtr->tyifullc, typtr, csrptr); + } else { /* Input buffer has space for this char */ + *typtr->tyitail++ = ch; + + /* Wrap around buffer */ + + if (typtr->tyitail>=&typtr->tyibuff[TY_IBUFLEN]) { + typtr->tyitail = typtr->tyibuff; + } + if (typtr->tyiecho) { /* Are we echoing chars?*/ + echoch(ch, typtr, csrptr); + } + } + return; + + } else { /* Just cooked mode (see common code above) */ + + /* Line kill character arrives - kill entire line */ + + if (ch == typtr->tyikillc && typtr->tyikill) { + typtr->tyitail -= typtr->tyicursor; + if (typtr->tyitail < typtr->tyibuff) { + typtr->tyihead += TY_IBUFLEN; + } + typtr->tyicursor = 0; + eputc(TY_RETURN, typtr, csrptr); + eputc(TY_NEWLINE, typtr, csrptr); + return; + } + + /* Erase (backspace) character */ + + if ( (ch == typtr->tyierasec) && typtr->tyierase) { + if (typtr->tyicursor > 0) { + typtr->tyicursor--; + erase1(typtr, csrptr); + } + return; + } + + /* End of line */ + + if ( (ch == TY_NEWLINE) || (ch == TY_RETURN) ) { + if (typtr->tyiecho) { + echoch(ch, typtr, csrptr); + } + *typtr->tyitail++ = ch; + if (typtr->tyitail>=&typtr->tyibuff[TY_IBUFLEN]) { + typtr->tyitail = typtr->tyibuff; + } + /* Make entire line (plus \n or \r) available */ + signaln(typtr->tyisem, typtr->tyicursor + 1); + typtr->tyicursor = 0; /* Reset for next line */ + return; + } + + /* Character to be placed in buffer - send bell if */ + /* buffer has overflowed */ + + avail = semcount(typtr->tyisem); + if (avail < 0) { + avail = 0; + } + if ((avail + typtr->tyicursor) >= TY_IBUFLEN-1) { + eputc(typtr->tyifullc, typtr, csrptr); + return; + } + + /* EOF character: recognize at beginning of line, but */ + /* print and ignore otherwise. */ + + if (ch == typtr->tyeofch && typtr->tyeof) { + if (typtr->tyiecho) { + echoch(ch, typtr, csrptr); + } + if (typtr->tyicursor != 0) { + return; + } + *typtr->tyitail++ = ch; + signal(typtr->tyisem); + return; + } + + + /* Echo the character */ + + if (typtr->tyiecho) { + echoch(ch, typtr, csrptr); + } + + /* Insert in the input buffer */ + + typtr->tyicursor++; + *typtr->tyitail++ = ch; + + /* Wrap around if needed */ + + if (typtr->tyitail >= &typtr->tyibuff[TY_IBUFLEN]) { + typtr->tyitail = typtr->tyibuff; + } + return; + } +} + +/*------------------------------------------------------------------------ + * erase1 - Erase one character honoring erasing backspace + *------------------------------------------------------------------------ + */ +local void erase1( + struct ttycblk *typtr, /* Ptr to ttytab entry */ + struct uart_csreg *csrptr /* Address of UART's CSRs */ + ) +{ + char ch; /* Character to erase */ + + if ( (--typtr->tyitail) < typtr->tyibuff) { + typtr->tyitail += TY_IBUFLEN; + } + + /* Pick up char to erase */ + + ch = *typtr->tyitail; + if (typtr->tyiecho) { /* Are we echoing? */ + if (ch < TY_BLANK || ch == 0177) { /* Nonprintable */ + if (typtr->tyevis) { /* Visual cntl chars */ + eputc(TY_BACKSP, typtr, csrptr); + if (typtr->tyieback) { /* Erase char */ + eputc(TY_BLANK, typtr, csrptr); + eputc(TY_BACKSP, typtr, csrptr); + } + } + eputc(TY_BACKSP, typtr, csrptr);/* Bypass up arr*/ + if (typtr->tyieback) { + eputc(TY_BLANK, typtr, csrptr); + eputc(TY_BACKSP, typtr, csrptr); + } + } else { /* A normal character that is printable */ + eputc(TY_BACKSP, typtr, csrptr); + if (typtr->tyieback) { /* erase the character */ + eputc(TY_BLANK, typtr, csrptr); + eputc(TY_BACKSP, typtr, csrptr); + } + } + } + return; +} + +/*------------------------------------------------------------------------ + * echoch - Echo a character with visual and output crlf options + *------------------------------------------------------------------------ + */ +local void echoch( + char ch, /* Character to echo */ + struct ttycblk *typtr, /* Ptr to ttytab entry */ + struct uart_csreg *csrptr /* Address of UART's CSRs */ + ) +{ + if ((ch==TY_NEWLINE || ch==TY_RETURN) && typtr->tyecrlf) { + eputc(TY_RETURN, typtr, csrptr); + eputc(TY_NEWLINE, typtr, csrptr); + } else if ( (chtyevis) { + eputc(TY_UPARROW, typtr, csrptr);/* print ^x */ + eputc(ch+0100, typtr, csrptr); /* Make it printable */ + } else { + eputc(ch, typtr, csrptr); + } +} + +/*------------------------------------------------------------------------ + * eputc - Put one character in the echo queue + *------------------------------------------------------------------------ + */ +local void eputc( + char ch, /* Character to echo */ + struct ttycblk *typtr, /* Ptr to ttytab entry */ + struct uart_csreg *csrptr /* Address of UART's CSRs */ + ) +{ + *typtr->tyetail++ = ch; + + /* Wrap around buffer, if needed */ + + if (typtr->tyetail >= &typtr->tyebuff[TY_EBUFLEN]) { + typtr->tyetail = typtr->tyebuff; + } + ttykickout(csrptr); + return; +} diff --git a/device/tty/ttyhandle_out.c b/device/tty/ttyhandle_out.c new file mode 100644 index 0000000..d9672c5 --- /dev/null +++ b/device/tty/ttyhandle_out.c @@ -0,0 +1,77 @@ +/* ttyhandle_out.c - ttyhandle_out */ + +#include + +/*------------------------------------------------------------------------ + * ttyhandle_out - handle an output on a tty device by sending more + * characters to the device FIFO (interrupts disabled) + *------------------------------------------------------------------------ + */ +void ttyhandle_out( + struct ttycblk *typtr, /* ptr to ttytab entry */ + struct uart_csreg *csrptr /* address of UART's CSRs */ + ) +{ + + int32 ochars; /* number of output chars sent */ + /* to the UART */ + int32 avail; /* available chars in output buf*/ + int32 uspace; /* space left in onboard UART */ + /* output FIFO */ + uint32 ier = 0; + + /* If output is currently held, simply ignore the call */ + + if (typtr->tyoheld) { + return; + } + + /* If echo and output queues empty, turn off interrupts */ + + if ( (typtr->tyehead == typtr->tyetail) && + (semcount(typtr->tyosem) >= TY_OBUFLEN) ) { + ier = csrptr->ier; + csrptr->ier = (ier & ~UART_IER_ETBEI); + return; + } + + /* Initialize uspace to the available space in the Tx FIFO */ + + uspace = UART_FIFO_SIZE - csrptr->txfifo_lvl; + + /* While onboard FIFO is not full and the echo queue is */ + /* nonempty, xmit chars from the echo queue */ + + while ( (uspace>0) && typtr->tyehead != typtr->tyetail) { + csrptr->buffer = *typtr->tyehead++; + if (typtr->tyehead >= &typtr->tyebuff[TY_EBUFLEN]) { + typtr->tyehead = typtr->tyebuff; + } + uspace--; + } + + /* While onboard FIFO is not full and the output queue */ + /* is nonempty, xmit chars from the output queue */ + + ochars = 0; + avail = TY_OBUFLEN - semcount(typtr->tyosem); + while ( (uspace>0) && (avail > 0) ) { + csrptr->buffer = *typtr->tyohead++; + if (typtr->tyohead >= &typtr->tyobuff[TY_OBUFLEN]) { + typtr->tyohead = typtr->tyobuff; + } + avail--; + uspace--; + ochars++; + } + if (ochars > 0) { + signaln(typtr->tyosem, ochars); + } + + if ( (typtr->tyehead == typtr->tyetail) && + (semcount(typtr->tyosem) >= TY_OBUFLEN) ) { + ier = csrptr->ier; + csrptr->ier = (ier & ~UART_IER_ETBEI); + } + return; +} diff --git a/device/tty/ttyhandler.c b/device/tty/ttyhandler.c new file mode 100644 index 0000000..0fa8ed2 --- /dev/null +++ b/device/tty/ttyhandler.c @@ -0,0 +1,83 @@ +/* ttyhandler.c - ttyhandler */ + +#include + +/*------------------------------------------------------------------------ + * ttyhandler - Handle an interrupt for a tty (serial) device + *------------------------------------------------------------------------ + */ +void ttyhandler(uint32 xnum) { + struct dentry *devptr; /* Address of device control blk*/ + struct ttycblk *typtr; /* Pointer to ttytab entry */ + struct uart_csreg *csrptr; /* Address of UART's CSR */ + uint32 iir = 0; /* Interrupt identification */ + uint32 lsr = 0; /* Line status */ + + /* Get CSR address of the device (assume console for now) */ + + devptr = (struct dentry *) &devtab[CONSOLE]; + + csrptr = (struct uart_csreg *) devptr->dvcsr; + + /* Obtain a pointer to the tty control block */ + + typtr = &ttytab[ devptr->dvminor ]; + + /* Decode hardware interrupt request from UART device */ + + /* Check interrupt identification register */ + iir = csrptr->iir; + + if (iir & UART_IIR_IRQ) { + return; + } + + /* Decode the interrupt cause based upon the value extracted */ + /* from the UART interrupt identification register. Clear */ + /* the interrupt source and perform the appropriate handling */ + /* to coordinate with the upper half of the driver */ + + /* Decode the interrupt cause */ + + iir &= UART_IIR_IDMASK; /* Mask off the interrupt ID */ + switch (iir) { + + /* Receiver line status interrupt (error) */ + + case UART_IIR_RLSI: + lsr = csrptr->lsr; + if(lsr & UART_LSR_BI) { /* Break Interrupt */ + lsr = csrptr->buffer; /* Read the RHR register to acknowledge */ + } + return; + + /* Receiver data available or timed out */ + + case UART_IIR_RDA: + case UART_IIR_RTO: + + resched_cntl(DEFER_START); + + /* While chars avail. in UART buffer, call ttyhandle_in */ + + while ( (csrptr->lsr & UART_LSR_DR) != 0) { + ttyhandle_in(typtr, csrptr); + } + + resched_cntl(DEFER_STOP); + + return; + + /* Transmitter output FIFO is empty (i.e., ready for more) */ + + case UART_IIR_THRE: + + ttyhandle_out(typtr, csrptr); + return; + + /* Modem status change (simply ignore) */ + + case UART_IIR_MSC: + return; + } +} diff --git a/device/tty/ttyinit.c b/device/tty/ttyinit.c new file mode 100644 index 0000000..fcb86e8 --- /dev/null +++ b/device/tty/ttyinit.c @@ -0,0 +1,81 @@ +/* ttyinit.c - ttyinit */ + +#include + +struct ttycblk ttytab[Ntty]; + +/*------------------------------------------------------------------------ + * ttyinit - Initialize buffers and modes for a tty line + *------------------------------------------------------------------------ + */ +devcall ttyinit( + struct dentry *devptr /* Entry in device switch table */ + ) +{ + struct ttycblk *typtr; /* Pointer to ttytab entry */ + struct uart_csreg *uptr; /* Address of UART's CSRs */ + + typtr = &ttytab[ devptr->dvminor ]; + + /* Initialize values in the tty control block */ + + typtr->tyihead = typtr->tyitail = /* Set up input queue */ + &typtr->tyibuff[0]; /* as empty */ + typtr->tyisem = semcreate(0); /* Input semaphore */ + typtr->tyohead = typtr->tyotail = /* Set up output queue */ + &typtr->tyobuff[0]; /* as empty */ + typtr->tyosem = semcreate(TY_OBUFLEN); /* Output semaphore */ + typtr->tyehead = typtr->tyetail = /* Set up echo queue */ + &typtr->tyebuff[0]; /* as empty */ + typtr->tyimode = TY_IMCOOKED; /* Start in cooked mode */ + typtr->tyiecho = TRUE; /* Echo console input */ + typtr->tyieback = TRUE; /* Honor erasing bksp */ + typtr->tyevis = TRUE; /* Visual control chars */ + typtr->tyecrlf = TRUE; /* Echo CRLF for NEWLINE*/ + typtr->tyicrlf = TRUE; /* Map CR to NEWLINE */ + typtr->tyierase = TRUE; /* Do erasing backspace */ + typtr->tyierasec = TY_BACKSP; /* Erase char is ^H */ + typtr->tyeof = TRUE; /* Honor eof on input */ + typtr->tyeofch = TY_EOFCH; /* End-of-file character*/ + typtr->tyikill = TRUE; /* Allow line kill */ + typtr->tyikillc = TY_KILLCH; /* Set line kill to ^U */ + typtr->tyicursor = 0; /* Start of input line */ + typtr->tyoflow = TRUE; /* Handle flow control */ + typtr->tyoheld = FALSE; /* Output not held */ + typtr->tyostop = TY_STOPCH; /* Stop char is ^S */ + typtr->tyostart = TY_STRTCH; /* Start char is ^Q */ + typtr->tyocrlf = TRUE; /* Send CRLF for NEWLINE*/ + typtr->tyifullc = TY_FULLCH; /* Send ^G when buffer */ + /* is full */ + + /* Initialize the UART */ + + uptr = (struct uart_csreg *)devptr->dvcsr; + + /* Set baud rate */ + uptr->lcr = UART_LCR_DLAB; + uptr->dlm = UART_DLM; + uptr->dll = UART_DLL; + + uptr->lcr = UART_LCR_8N1; /* 8 bit char, No Parity, 1 Stop*/ + uptr->fcr = 0x00; /* Disable FIFO for now */ + + /* Register the interrupt dispatcher for the tty device */ + + //set_evec( devptr->dvirq, (uint32)devptr->dvintr ); + interruptVector[devptr->dvirq] = devptr->dvintr; + /* Enable interrupts on the device: reset the transmit and */ + /* receive FIFOS, and set the interrupt trigger level */ + + uptr->fcr = UART_FCR_EFIFO | UART_FCR_RRESET | + UART_FCR_TRESET | UART_FCR_TRIG2; + + /* UART must be in 16x mode (TI AM335X specific) */ + + uptr->mdr1 = UART_MDR1_16X; + + /* Start the device */ + + ttykickout(uptr); + return OK; +} diff --git a/device/tty/ttykickout.c b/device/tty/ttykickout.c new file mode 100644 index 0000000..4b4bb77 --- /dev/null +++ b/device/tty/ttykickout.c @@ -0,0 +1,19 @@ +/* ttykickout.c - ttykickout */ + +#include + +/*------------------------------------------------------------------------ + * ttykickout - "Kick" the hardware for a tty device, causing it to + * generate an output interrupt (interrupts disabled) + *------------------------------------------------------------------------ + */ +void ttykickout( + struct uart_csreg *csrptr /* Address of UART's CSRs */ + ) +{ + /* Force the UART hardware generate an output interrupt */ + + csrptr->ier = UART_IER_ERBFI | UART_IER_ETBEI; + + return; +} diff --git a/device/tty/ttyputc.c b/device/tty/ttyputc.c new file mode 100644 index 0000000..f546c18 --- /dev/null +++ b/device/tty/ttyputc.c @@ -0,0 +1,38 @@ +/* ttyputc.c - ttyputc */ + +#include + +/*------------------------------------------------------------------------ + * ttyputc - Write one character to a tty device (interrupts disabled) + *------------------------------------------------------------------------ + */ +devcall ttyputc( + struct dentry *devptr, /* Entry in device switch table */ + char ch /* Character to write */ + ) +{ + struct ttycblk *typtr; /* Pointer to tty control block */ + + typtr = &ttytab[devptr->dvminor]; + + /* Handle output CRLF by sending CR first */ + + if ( ch==TY_NEWLINE && typtr->tyocrlf ) { + ttyputc(devptr, TY_RETURN); + } + + wait(typtr->tyosem); /* Wait for space in queue */ + *typtr->tyotail++ = ch; + + /* Wrap around to beginning of buffer, if needed */ + + if (typtr->tyotail >= &typtr->tyobuff[TY_OBUFLEN]) { + typtr->tyotail = typtr->tyobuff; + } + + /* Start output in case device is idle */ + + ttykickout((struct uart_csreg *)devptr->dvcsr); + + return OK; +} diff --git a/device/tty/ttyread.c b/device/tty/ttyread.c new file mode 100644 index 0000000..88ca170 --- /dev/null +++ b/device/tty/ttyread.c @@ -0,0 +1,66 @@ +/* ttyread.c - ttyread */ + +#include + +/*------------------------------------------------------------------------ + * ttyread - Read character(s) from a tty device (interrupts disabled) + *------------------------------------------------------------------------ + */ +devcall ttyread( + struct dentry *devptr, /* Entry in device switch table */ + char *buff, /* Buffer of characters */ + int32 count /* Count of character to read */ + ) +{ + struct ttycblk *typtr; /* Pointer to tty control block */ + int32 avail; /* Characters available in buff.*/ + int32 nread; /* Number of characters read */ + int32 firstch; /* First input character on line*/ + char ch; /* Next input character */ + + if (count < 0) { + return SYSERR; + } + typtr= &ttytab[devptr->dvminor]; + + if (typtr->tyimode != TY_IMCOOKED) { + + /* For count of zero, return all available characters */ + + if (count == 0) { + avail = semcount(typtr->tyisem); + if (avail == 0) { + return 0; + } else { + count = avail; + } + } + for (nread = 0; nread < count; nread++) { + *buff++ = (char) ttygetc(devptr); + } + return nread; + } + + /* Block until input arrives */ + + firstch = ttygetc(devptr); + + /* Check for End-Of-File */ + + if (firstch == EOF) { + return EOF; + } + + /* Read up to a line */ + + ch = (char) firstch; + *buff++ = ch; + nread = 1; + while ( (nread < count) && (ch != TY_NEWLINE) && + (ch != TY_RETURN) ) { + ch = ttygetc(devptr); + *buff++ = ch; + nread++; + } + return nread; +} diff --git a/device/tty/ttywrite.c b/device/tty/ttywrite.c new file mode 100644 index 0000000..f9f4ada --- /dev/null +++ b/device/tty/ttywrite.c @@ -0,0 +1,29 @@ +/* ttywrite.c - ttywrite */ + +#include + +/*------------------------------------------------------------------------ + * ttywrite - Write character(s) to a tty device (interrupts disabled) + *------------------------------------------------------------------------ + */ +devcall ttywrite( + struct dentry *devptr, /* Entry in device switch table */ + char *buff, /* Buffer of characters */ + int32 count /* Count of character to write */ + ) +{ + /* Handle negative and zero counts */ + + if (count < 0) { + return SYSERR; + } else if (count == 0){ + return OK; + } + + /* Write count characters one at a time */ + + for (; count>0 ; count--) { + ttyputc(devptr, *buff++); + } + return OK; +} diff --git a/device/uart-pl011/Makerules b/device/uart-pl011/Makerules new file mode 100644 index 0000000..981403b --- /dev/null +++ b/device/uart-pl011/Makerules @@ -0,0 +1,25 @@ + +# Name of this component (the directory this file is stored in) +COMP = device/uart-pl011 + +# Source files for this component +C_FILES = kgetc.c \ + kputc.c \ + ../uart/uartControl.c \ + ../uart/uartGetc.c \ + uartHwInit.c \ + uartHwPutc.c \ + uartHwStat.c \ + ../uart/uartInit.c \ + uartInterrupt.c \ + ../uart/uartPutc.c \ + ../uart/uartRead.c \ + ../uart/uartWrite.c \ + ../uart/uartStat.c \ + ../uart/kprintf.c \ + ../uart/kvprintf.c +S_FILES = + +# Add the files to the compile source path +DIR = ${TOPDIR}/${COMP} +COMP_SRC += ${S_FILES:%=${DIR}/%} ${C_FILES:%=${DIR}/%} diff --git a/device/uart-pl011/kgetc.c b/device/uart-pl011/kgetc.c new file mode 100644 index 0000000..3fc19a4 --- /dev/null +++ b/device/uart-pl011/kgetc.c @@ -0,0 +1,55 @@ +/* + * @file kgetc.c + */ +/* Embedded Xinu, Copyright (C) 2009, 2013. All rights reserved. */ +#include +#include +#include "pl011.h" +/** + * @ingroup uarthardware + * + * Synchronously read a character from a UART. This blocks until a character is + * available. The interrupt handler is not used. + * + * @param devptr + * Pointer to the device table entry for a UART. + * + * @return + * The character read from the UART as an unsigned char cast + * to an int. + */ +syscall kgetc(struct dentry *devptr) +{ + volatile struct pl011_uart_csreg *regptr; + struct uart *uartptr; + uint uart_im; + uchar c; + + /* Get pointers to the UART and to its registers. */ + uartptr = &uarttab[devptr->dvminor]; + regptr = devptr->dvcsr; + + /* Save the UART's interrupt state and disable the UART's interrupts. Note: + * we do not need to disable global interrupts here; only UART interrupts + * must be disabled, to prevent race conditions with the UART interrupt + * handler. */ + uart_im = regptr->imsc; + regptr->imsc = 0; + + /* Wait until a character is ready to be received. */ + while ((regptr->fr & PL011_FR_RXFE)) + { + /* Do nothing */ + } + + /* Get the next character from the UART by reading it from the Data + * Register. */ + c = regptr->dr; + + /* Tally one character received. */ + uartptr->cin++; + + /* Restore UART interrupts and return the read character. */ + regptr->imsc = uart_im; + return c; +} diff --git a/device/uart-pl011/kputc.c b/device/uart-pl011/kputc.c new file mode 100644 index 0000000..fb9fa45 --- /dev/null +++ b/device/uart-pl011/kputc.c @@ -0,0 +1,57 @@ +/** + * @file kputc.c + */ +/* Embedded Xinu, Copyright (C) 2009, 2013. All rights reserved. */ +#include +#include +#include "pl011.h" + +/** + * @ingroup uarthardware + * + * Synchronously write a character to a UART. This blocks until the character + * has been written to the hardware. The interrupt handler is not used. + * + * @param c + * The character to write. + * @param devptr + * Pointer to the device table entry for a UART. + * + * @return + * The character written to the UART as an unsigned char cast + * to an int. + */ +syscall kputc(uchar c, struct dentry *devptr) +{ + struct uart *uartptr; + volatile struct pl011_uart_csreg *regptr; + uint uart_im; + + /* Get pointers to the UART and to its registers. */ + uartptr = &uarttab[devptr->dvminor]; + regptr = devptr->dvcsr; + + /* Save the UART's interrupt state and disable the UART's interrupts. Note: + * we do not need to disable global interrupts here; only UART interrupts + * must be disabled, to prevent race conditions with the UART interrupt + * handler. */ + uart_im = regptr->imsc; + regptr->imsc = 0; + + /* Wait until UART is ready for another character */ + while ((regptr->fr & PL011_FR_TXFF)) + { + /* Do nothing */ + } + + /* Put the character to the UART by writing it to the UART's data register. + * */ + regptr->dr = c; + + /* Tally one character sent. */ + uartptr->cout++; + + /* Restore UART interrupts and return the put character. */ + regptr->imsc = uart_im; + return c; +} diff --git a/device/uart-pl011/pl011.h b/device/uart-pl011/pl011.h new file mode 100644 index 0000000..96d4e2c --- /dev/null +++ b/device/uart-pl011/pl011.h @@ -0,0 +1,149 @@ +/** + * @file pl011.h + */ + +/* Embedded Xinu, Copyright (C) 2009, 2013. All rights reserved. */ + +#ifndef _PL011_H_ +#define _PL011_H_ + +/** + * Control and status registers for the PL011 UART. This structure is + * mapped directly to the base address for the CSR. + */ +struct pl011_uart_csreg +{ + volatile unsigned int dr; /**< Data Register */ //0x00 + volatile unsigned int rsrecr; /**< Receive status/error clear register */ //0x04 + volatile unsigned int dont_use_a; /** spacer */ //0x08 + volatile unsigned int dont_use_b; /** spacer */ //0x0C + volatile unsigned int dont_use_c; /** spacer */ //0x10 + volatile unsigned int dont_use_d; /** spacer */ //0x14 + volatile unsigned int fr; /**< Flag Register */ //0x18 + volatile unsigned int dont_use_e; /** spacer */ //0x1C + volatile unsigned int ilpr; /**< Not in use */ //0x20 + volatile unsigned int ibrd; /**< Integer baud rate divisor */ //0x24 + volatile unsigned int fbrd; /**< Fractional baud rate divisor */ //0x28 + volatile unsigned int lcrh; /**< Line Control Register */ //0x2C + volatile unsigned int cr; /**< Control Register */ //0x30 + volatile unsigned int ifls; /**< Interupt FIFO level select register */ //0x34 + volatile unsigned int imsc; /**< Interupt Mask Set Clear Register */ //0x38 + volatile unsigned int ris; /**< Raw Interupt Status Register */ //0x3C + volatile unsigned int mis; /**< Masked Interupt Status Register */ //0x40 + volatile unsigned int icr; /**< Interupt Clear Register */ //0x44 +}; + +/* UART Bit flags for control and status registers */ +#define PL011_DR_OE (1<<11) //set to 1 on overrun error +#define PL011_DR_BE (1<<10) //set to 1 on break condition +#define PL011_DR_PE (1<<9) //set to 1 on parity error +#define PL011_DR_FE (1<<8) //set to 1 on framing error + +#define PL011_RSRECR_OE (1<<3) //set to 1 on overrun error +#define PL011_RSRECR_BE (1<<2) //set to 1 on break condition +#define PL011_RSRECR_PE (1<<1) //set to 1 on parity error +#define PL011_RSRECR_FE (1<<0) //set to 1 on framing error + +#define PL011_FR_RI (1<<8) //set to 1 when ring indicator pin is low +#define PL011_FR_TXFE (1<<7) //set to 1 when TX FIFO/register is empty +#define PL011_FR_RXFF (1<<6) //set to 1 when RX FIFO/register is full +#define PL011_FR_TXFF (1<<5) //set to 1 when TX FIFO/register is full +#define PL011_FR_RXFE (1<<4) //set to 1 when RX FIFO/register is empty +#define PL011_FR_BUSY (1<<3) //set to 1 when UART is transmitting data +#define PL011_FR_DCD (1<<2) //set to 1 when DCD pin is low +#define PL011_FR_DSR (1<<1) //set to 1 when DSR pin is low +#define PL011_FR_CTS (1<<0) //set to 1 when CTS pin is low + +#define PL011_LCRH_SPS (1<<7) // +//word length +#define PL011_LCRH_WLEN_8BIT (0b11<<5) +#define PL011_LCRH_WLEN_7BIT (0b10<<5) +#define PL011_LCRH_WLEN_6BIT (0b01<<5) +#define PL011_LCRH_WLEN_5BIT (0b00<<5) +#define PL011_LCRH_FEN (1<<4) //set to 1 to enable TX and RX FIFOs +#define PL011_LCRH_STP2 (1<<3) //set to 1 to send 2 stop bits +#define PL011_LCRH_EPS (1<<2) //set to 1 for even parity, 0 for odd +#define PL011_LCRH_PEN (1<<1) //set to 1 to enable parity +#define PL011_LCRH_BRK (1<<0) //set to 1 to force the TX pin low + +#define PL011_CR_CTSEN (1<<15) //set to 1 to enable CTS hardware flow control +#define PL011_CR_RTSEN (1<<14) //set to 1 to enable RTS hardware flow control +#define PL011_CR_OUT2 (1<<13) //set to 1 to set out2 to 0 +#define PL011_CR_OUT1 (1<<12) //set to 1 to set out1 to 0 +#define PL011_CR_RTS (1<<11) //set to 1 to set the RTS pin low +#define PL011_CR_DTR (1<<10) //set to 1 to set the DTR pin low +#define PL011_CR_RXE (1<<9) //set to 1 to enable receiving +#define PL011_CR_TXE (1<<8) //set to 1 to enable transmitting +#define PL011_CR_LBE (1<<7) //set to 1 to enable loopback +#define PL011_CR_SIRLP (1<<2) //sets SIR IrDA mode (unused?) +#define PL011_CR_SIREN (1<<1) //enables SIR IrDA mode (unused?) +#define PL011_CR_UARTEN (1<<0) //set to 1 to enable the UART + +//RX FIFO fill interrupt threshold +#define PL011_IFLS_RXIFLSEL_EIGHTH (0b000<<3) +#define PL011_IFLS_RXIFLSEL_QUARTER (0b001<<3) +#define PL011_IFLS_RXIFLSEL_HALF (0b010<<3) +#define PL011_IFLS_RXIFLSEL_THREEQUARTERS (0b011<<3) +#define PL011_IFLS_RXIFLSEL_SEVENEIGHTHS (0b100<<3) +//TX FIFO fill interrupt threshold +#define PL011_IFLS_TXIFLSEL_EIGHTH (0b000<<0) +#define PL011_IFLS_TXIFLSEL_QUARTER (0b001<<0) +#define PL011_IFLS_TXIFLSEL_HALF (0b010<<0) +#define PL011_IFLS_TXIFLSEL_THREEQUARTERS (0b011<<0) +#define PL011_IFLS_TXIFLSEL_SEVENEIGHTHS (0b100<<0) + +#define PL011_IMSC_OEIM (1<<10) //overrun error mask bit, if 1: this interrupt is enabled +#define PL011_IMSC_BEIN (1<<9) //break error mask bit, if 1: this interrupt is enabled +#define PL011_IMSC_PEIM (1<<8) //parity error mask bit, if 1: this interrupt is enabled +#define PL011_IMSC_FEIM (1<<7) //framing error mask bit, if 1: this interrupt is enabled +#define PL011_IMSC_RTIM (1<<6) //receive timeout mask bit, if 1: this interrupt is enabled +#define PL011_IMSC_TXIM (1<<5) //transmit interrupt mask bit, if 1: this interrupt is enabled +#define PL011_IMSC_RXIM (1<<4) //receive interrupt mask bit, if 1: this interrupt is enabled +#define PL011_IMSC_DSRMIM (1<<3) //DSR interrupt mask bit, if 1: this interrupt is enabled +#define PL011_IMSC_DCDMIM (1<<2) //DCD interrupt mask bit, if 1: this interrupt is enabled +#define PL011_IMSC_CTSMIM (1<<1) //CTS interrupt mask bit, if 1: this interrupt is enabled +#define PL011_IMSC_RIMIM (1<<0) //RI interrupt mask bit, if 1: this interrupt is enabled + +#define PL011_RIS_OERIS (1<<10) //overrun error interrupt status +#define PL011_RIS_BERIS (1<<9) //break error interrupt status +#define PL011_RIS_PERIS (1<<8) //parity error interrupt status +#define PL011_RIS_FERIS (1<<7) //framing error interrupt status +#define PL011_RIS_RTRIS (1<<6) //receive timeout interrupt status +#define PL011_RIS_TXRIS (1<<5) //transmit interrupt status +#define PL011_RIS_RXRIS (1<<4) //receive interrupt status +#define PL011_RIS_DSRRMIS (1<<3) //DSR interrupt status +#define PL011_RIS_DCDRMIS (1<<2) //DCD interrupt status +#define PL011_RIS_CTSRMIS (1<<1) //CTS interrupt status +#define PL011_RIS_RIRMIS (1<<0) //RI interrupt status + +//read only +#define PL011_MIS_OEMIS (1<<10) //overrun error interrupt status +#define PL011_MIS_BEMIS (1<<9) //break error interrupt status +#define PL011_MIS_PEMIS (1<<8) //parity error interrupt status +#define PL011_MIS_FEMIS (1<<7) //framing error interrupt status +#define PL011_MIS_RTMIS (1<<6) //receive timeout interrupt status +#define PL011_MIS_TXMIS (1<<5) //transmit interrupt status +#define PL011_MIS_RXMIS (1<<4) //receive interrupt status +#define PL011_MIS_DSRMMIS (1<<3) //DSR interrupt status +#define PL011_MIS_DCDMMIS (1<<2) //DCD interrupt status +#define PL011_MIS_CTSMMIS (1<<1) //CTS interrupt status +#define PL011_MIS_RIMMIS (1<<0) //RI interrupt status + +#define PL011_ICR_OEIC (1<<10) //overrun error interrupt clear +#define PL011_ICR_BEIC (1<<9) //break error interrupt clear +#define PL011_ICR_PEIC (1<<8) //parity error interrupt clear +#define PL011_ICR_FEIC (1<<7) //framing error interrupt clear +#define PL011_ICR_RTIC (1<<6) //receive timeout interrupt clear +#define PL011_ICR_TXIC (1<<5) //transmit interrupt clear +#define PL011_ICR_RXIC (1<<4) //receive interrupt clear +#define PL011_ICR_DSRMIC (1<<3) //DSR interrupt clear +#define PL011_ICR_DCDMIC (1<<2) //DCD interrupt clear +#define PL011_ICR_CTSMIC (1<<1) //CTS interrupt clear +#define PL011_ICR_RIMIC (1<<0) //RI interrupt clear + +#define PL011_FIFO_LEN 8 /**< During testing on a Raspberry Pi, I could only send 8. */ + +#define PL011_BAUD_INT(x) (3000000 / (16 * (x))) +#define PL011_BAUD_FRAC(x) (int)((((3000000.0 / (16.0 * (x)))-PL011_BAUD_INT(x))*64.0)+0.5) //9600 baud may be slightly off with this calcualtion + +#endif /* _PL011_H_ */ diff --git a/device/uart-pl011/uartHwInit.c b/device/uart-pl011/uartHwInit.c new file mode 100644 index 0000000..af20883 --- /dev/null +++ b/device/uart-pl011/uartHwInit.c @@ -0,0 +1,131 @@ +/** + * @file uartHwInit.c + */ +/* Embedded Xinu, Copyright (C) 2009, 2013. All rights reserved. */ +#include +#include +#include +#include "pl011.h" +struct uart uarttab[NUART]; +#ifdef _XINU_PLATFORM_ARM_RPI_ + +/* Offset of UART registers from the starti of the GPIO registers. */ +#define UART_GPIO_OFFSET 0x1000 + +#define GPFSEL1_OFFSET 0x4 + +/* Offset of GPPUD register from the start of the GPIO registers. */ +#define GPPUD_OFFSET 0x94 + +/* Offset of the GPPUDCLK0_OFFSET register from the start of the GPIO registers. + * */ +#define GPPUDCLK0_OFFSET 0x98 + +/* Set up the GPIO (general-purpose IO) pins needed to use the PL011 UART on the + * Raspberry Pi. */ +static void setup_gpio_pins(void *uart_regs) +{ + void *gpio_regs = uart_regs - UART_GPIO_OFFSET; + ulong sel; + + volatile ulong *GPFSEL1_ptr = gpio_regs + GPFSEL1_OFFSET; + volatile ulong *GPPUD_ptr = gpio_regs + GPPUD_OFFSET; + volatile ulong *GPPUDCLK0_ptr = gpio_regs + GPPUDCLK0_OFFSET; + + /* Select alternate function 0 on pins 14 and 15. */ + sel = *GPFSEL1_ptr; + sel &= ~(7 << 12); + sel |= 4 << 12; /* Pin 14 */ + sel &= ~(7 << 15); + sel |= 4 << 15; /* Pin 15 */ + *GPFSEL1_ptr = sel; + + /* Remove pull-up or pull-down on GPIO pins 14 and 15, which will be used + * by the UART. */ + *GPPUD_ptr = 0; + udelay(2); + *GPPUDCLK0_ptr = (1 << 14) | (1 << 15); + udelay(2); + *GPPUDCLK0_ptr = 0; +} +#endif /* _XINU_PLATFORM_ARM_RPI_ */ + +devcall uartHwInit(struct dentry *devptr) +{ + volatile struct pl011_uart_csreg *regptr = devptr->dvcsr; + + /* TODO: It doesn't work without this delay, but why? */ + udelay(1500); + + /* Disable the UART by zeroing the "control register". */ + regptr->cr = 0; + +#ifdef _XINU_PLATFORM_ARM_RPI_ + /* Configure the GPIO pins on the Raspberry Pi correctly. */ + setup_gpio_pins((void*)regptr); +#endif + + /* Poll the "flags register" to wait for the UART to stop transmitting or + * receiving. */ + while (regptr->fr & PL011_FR_BUSY) + { + } + + /* Flush the transmit FIFO by marking FIFOs as disabled in the "line control + * register". */ + regptr->lcrh &= ~PL011_LCRH_FEN; + + /* Clear pending interrupts by writing to the "interrupt clear" register. + * Note: In the documentation for the BCM2835 SoC, several bits are marked + * as "Unsupported; write zero, read as don't care." These are commented + * out below. */ + regptr->icr = (PL011_ICR_OEIC | + PL011_ICR_BEIC | + PL011_ICR_PEIC | + PL011_ICR_FEIC | + PL011_ICR_RTIC | + PL011_ICR_TXIC | + PL011_ICR_RXIC | + 0 /* PL011_ICR_DSRMIC */ | + 0 /* PL011_ICR_DCDMIC */ | + PL011_ICR_CTSMIC | + 0 /* PL011_ICR_RIMIC */); + + /* Set the UART's baud rate. This is done by writing to separate "integer + * baud rate divisor" and "fractional baud rate divisor" registers. */ + regptr->ibrd = PL011_BAUD_INT(115200); + regptr->fbrd = PL011_BAUD_FRAC(115200); + + /* Write the appropriate values to the UART's "line control register" to set + * it to an 8 bit word length, with parity bit and FIFOs disabled. */ + regptr->lcrh = PL011_LCRH_WLEN_8BIT; + + /* Allow the UART to generate interrupts only when receiving or + * transmitting. */ + regptr->imsc = PL011_IMSC_RXIM | PL011_IMSC_TXIM; + + /* We have decided that we are going to leave FIFOs off for now. Since the + * FIFOs are of size 16 and the lowest trigger level you can set for the + * receive FIFO is 1/8, the first interrupt isn't triggered until there are + * at least two bytes in the receive FIFO. We want an interrupt as soon as + * a byte arrives */ +#if 0 + /* Enable UART FIFOs. */ + regptr->lcrh |= PL011_LCRH_FEN; + + /* Set the interrupt FIFO level select register. This configures the amount + * that the receive or transmit FIFOs can fill up before an interrupt is + * generated. */ + regptr->ifls = PL011_IFLS_RXIFLSEL_SEVENEIGHTHS | PL011_IFLS_TXIFLSEL_EIGHTH; +#endif + + /* Enable the UART, with both the receive and transmit functionality, by + * writing to its control register. */ + regptr->cr = PL011_CR_RXE | PL011_CR_TXE | PL011_CR_UARTEN; + + /* Register the UART's interrupt handler with XINU's interrupt vector, then + * actually enable the UART's interrupt line. */ + interruptVector[devptr->dvirq] = devptr->dvintr; + enable_irq(devptr->dvirq); + return OK; +} diff --git a/device/uart-pl011/uartHwPutc.c b/device/uart-pl011/uartHwPutc.c new file mode 100644 index 0000000..228a45e --- /dev/null +++ b/device/uart-pl011/uartHwPutc.c @@ -0,0 +1,14 @@ +/** + * @file uartHwPutc.c + */ +/* Embedded Xinu, Copyright (C) 2009, 2013. All rights reserved. */ +#include +#include +#include "pl011.h" + +void uartHwPutc(void *csr, uchar c) +{ + volatile struct pl011_uart_csreg *regptr = csr; + + regptr->dr = c; +} diff --git a/device/uart-pl011/uartHwStat.c b/device/uart-pl011/uartHwStat.c new file mode 100644 index 0000000..3da205a --- /dev/null +++ b/device/uart-pl011/uartHwStat.c @@ -0,0 +1,24 @@ +/** + * @file uartHwStat.c + */ +/* Embedded Xinu, Copyright (C) 2009, 2013. All rights reserved. */ +#include +#include +#include +#include "pl011.h" + +void uartHwStat(void *csr) +{ + static const char * const label[2] = { "OFF", "ON " }; + uint enabled; + volatile struct pl011_uart_csreg *regptr = csr; + + printf("\n\tINTERRUPT ENABLE:\n"); + printf("\t------------------------------------------\n"); + + enabled = (regptr->imsc & PL011_IMSC_RXIM) ? 1 : 0; + printf("\t%s Receiver FIFO Reached Trigger Level\n", label[enabled]); + + enabled = (regptr->imsc & PL011_IMSC_TXIM) ? 1 : 0; + printf("\t%s Transmitter FIFO Empty\n", label[enabled]); +} diff --git a/device/uart-pl011/uartInterrupt.c b/device/uart-pl011/uartInterrupt.c new file mode 100644 index 0000000..75b2f3b --- /dev/null +++ b/device/uart-pl011/uartInterrupt.c @@ -0,0 +1,149 @@ +/** + * @file uartInterrupt.c + */ + +/* Embedded Xinu, Copyright (C) 2009, 2013. All rights reserved. */ +#include +#include +#include "pl011.h" + +/** + * @ingroup uarthardware + * + * Handle an interrupt request from a PL011 UART. + */ +interrupt uartInterrupt(void) +{ + uint u; + + /* Set resdefer to prevent other threads from being scheduled before this + * interrupt handler finishes. This prevents this interrupt handler from + * being executed re-entrantly. */ + extern int resdefer; + resdefer = 1; + + /* Check for interrupts on each UART. Note: this assumes all the UARTs in + * 'uarttab' are PL011 UARTs. */ + for (u = 0; u < NUART; u++) + { + uint mis, count; + uchar c; + volatile struct pl011_uart_csreg *regptr; + struct uart *uartptr; + + /* Get a pointer to the UART structure and a pointer to the UART's + * hardware registers. */ + uartptr = &uarttab[u]; + regptr = uartptr->csr; + + /* Check the Masked Interrupt Status register to determine which + * interrupts have occurred, then handle them. */ + mis = regptr->mis; + if (mis & PL011_MIS_TXMIS) + { + /* Transmit interrupt is asserted. If FIFOs are enabled, this + * happens when the amount of data in the transmit FIFO is less than + * or equal to the programmed trigger level. If FIFOs are disabled, + * this happens if the Tx holding register is empty. */ + + /* Increment number of transmit interrupts received on this UART. + * */ + uartptr->oirq++; + + /* Explicitly clear the transmit interrupt. This is necessary + * because there may not be enough bytes in the output buffer to + * fill the FIFO greater than the transmit interrupt trigger level. + * If FIFOs are disabled, this applies if there are 0 bytes to + * transmit and therefore nothing to fill the Tx holding register + * with. */ + regptr->icr = PL011_ICR_TXIC; + + /* If there are bytes pending in the output buffer, write them to + * the UART until either there are no bytes remaining or there is no + * space remaining in the transmit FIFO. (If FIFOs are disabled, + * the Tx holding register acts like a FIFO of size 1, so the code + * still works.) Otherwise, the UART is now idle, so set the + * "oidle" flag, which will allow the next call to uartWrite() to + * start transmitting again by writing a byte directly to the + * hardware. */ + if (uartptr->ocount > 0) + { + count = 0; + do + { + regptr->dr = uartptr->out[uartptr->ostart]; + uartptr->ostart = (uartptr->ostart + 1) % UART_OBLEN; + uartptr->ocount--; + count++; + } while (!(regptr->fr & PL011_FR_TXFF) && (uartptr->ocount > 0)); + + /* One or more bytes were successfully removed from the output + * buffer and written to the UART hardware. Increment the total + * number of bytes written to this UART and signal up to @count + * threads waiting in uartWrite() to tell them there is now + * space in the output buffer. */ + uartptr->cout += count; + signaln(uartptr->osema, count); + } + else + { + uartptr->oidle = TRUE; + } + } + if (mis & PL011_MIS_RXMIS) + { + /* Receive interrupt is asserted. If FIFOs are enabled, this + * happens when the amount of data in the receive FIFO is greater + * than or equal to the programmed trigger level. If FIFOs are + * disabled, this happens when the Rx holding register was filled + * with one byte. */ + + /* Increment number of receive interrupts received on this UART. */ + uartptr->iirq++; + + /* Number of bytes successfully buffered so far. */ + count = 0; + + /* Read bytes from the receive FIFO until it is empty again. (If + * FIFOs are disabled, the Rx holding register acts as a FIFO of + * size 1, so the code still works.) */ + do + { + /* Get a byte from the UART's receive FIFO. */ + c = regptr->dr; + if (uartptr->icount < UART_IBLEN) + { + /* There is space for the byte in the input buffer, so add + * it and tally one character received. */ + uartptr->in[(uartptr->istart + + uartptr->icount) % UART_IBLEN] = c; + uartptr->icount++; + count++; + } + else + { + /* There is *not* space for the byte in the input buffer, so + * ignore it and increment the overrun count. */ + uartptr->ovrrn++; + } + } while (!(regptr->fr & PL011_FR_RXFE)); + /* The receive interrupt will have been automatically cleared + * because we read bytes from the receive FIFO until it became + * empty. */ + + /* Increment cin by the number of bytes successfully buffered and + * signal up to that many threads that are currently waiting in + * uartRead() for buffered data to become available. */ + uartptr->cin += count; + signaln(uartptr->isema, count); + } + } + + /* Now that the UART interrupt handler is finished, we can safely wake up + * any threads that were signaled. */ + if (--resdefer > 0) + { + resdefer = 0; + resched(); + } +} diff --git a/device/uart/README b/device/uart/README new file mode 100644 index 0000000..f27ac69 --- /dev/null +++ b/device/uart/README @@ -0,0 +1,2 @@ +The directory contains code shared by all Xinu's UART drivers. +This is not a UART by itself, so do *not* include it in DEVICES in platformVars. diff --git a/device/uart/kprintf.c b/device/uart/kprintf.c new file mode 100644 index 0000000..d52d8cd --- /dev/null +++ b/device/uart/kprintf.c @@ -0,0 +1,34 @@ +/** + * @file kprintf.c + */ + +/* Embedded Xinu, Copyright (C) 2009, 2013. All rights reserved. */ + +#include +#include + +/** + * @ingroup uartgeneric + * + * kernel printf: formatted, synchronous output to SERIAL0. + * + * @param format + * The format string. Not all standard format specifiers are supported by + * this implementation. See _doprnt() for a description of supported + * conversion specifications. + * @param ... + * Arguments matching those in the format string. + * + * @return + * The number of characters written. + */ +syscall kprintf(const char *format, ...) +{ + int retval; + va_list ap; + + va_start(ap, format); + retval = kvprintf(format, ap); + va_end(ap); + return retval; +} diff --git a/device/uart/kvprintf.c b/device/uart/kvprintf.c new file mode 100644 index 0000000..863f274 --- /dev/null +++ b/device/uart/kvprintf.c @@ -0,0 +1,39 @@ +/** + * @file kvprintf.c + */ + +/* Embedded Xinu, Copyright (C) 2009, 2013. All rights reserved. */ +#include +#include +#include +#include +#include + +/** + * @ingroup uartgeneric + * + * kernel printf: formatted, synchronous output to SERIAL0. + * + * @param format + * The format string. Not all standard format specifiers are supported by + * this implementation. See _doprnt() for a description of supported + * conversion specifications. + * @param ap + * Arguments matching those in the format string. + * + * @return + * The number of characters written. + */ +syscall kvprintf(const char *format, va_list ap) +{ + int retval; + intmask im; + + /* Note: it isn't strictly necessary to disable global interrupts here, but + * it prevents kprintf()'s from stepping on each other toes if you happen to + * call kprintf() from an interrupt handler. */ + im = disable(); + retval = _doprnt(format, ap, (int (*)(int, int))kputc, (int)&devtab[SERIAL0]); + restore(im); + return retval; +} diff --git a/device/uart/uartControl.c b/device/uart/uartControl.c new file mode 100644 index 0000000..816a0d0 --- /dev/null +++ b/device/uart/uartControl.c @@ -0,0 +1,76 @@ +/** + * @file uartControl.c + * + */ +/* Embedded Xinu, Copyright (C) 2009. All rights reserved. */ +#include +#include +#include +#include + +/** + * @ingroup uartgeneric + * + * Control parameters to a UART. + * @param devptr pointer to UART device + * @param func index of function to run (defined in uart.h) + * @param arg1 first argument to called function + * @param arg2 second argument to called function + * + * @return + * SYSERR if control function not recognized; otherwise a + * control-function-dependent value. + */ +devcall uartControl(struct dentry *devptr, int func, long arg1, long arg2) +{ + struct uart *uartptr; + char old; + + uartptr = &uarttab[devptr->dvminor]; + + switch (func) + { + + /* Set input mode flags: arg1 = flags to set */ + /* return = old value of flags */ + case UART_CTRL_SET_IFLAG: + old = uartptr->iflags & arg1; + uartptr->iflags |= arg1; + return old; + + /* Clear input mode flags: arg1 = flags to clear */ + /* return = old value of flags */ + case UART_CTRL_CLR_IFLAG: + old = uartptr->iflags & arg1; + uartptr->iflags &= ~(arg1); + return old; + + /* Get input flags: return = current value of flags */ + case UART_CTRL_GET_IFLAG: + return uartptr->iflags; + + /* Set output mode flags: arg1 = flags to set */ + /* return = old value of flags */ + case UART_CTRL_SET_OFLAG: + old = uartptr->oflags & arg1; + uartptr->oflags |= arg1; + return old; + + /* Clear output mode flags: arg1 = flags to clear */ + /* return = old value of flags */ + case UART_CTRL_CLR_OFLAG: + old = uartptr->oflags & arg1; + uartptr->oflags &= ~(arg1); + return old; + + /* Get output flags: return = current value of flags */ + case UART_CTRL_GET_OFLAG: + return uartptr->oflags; + + /* Determine if the UART transmitter is idle, return TRUE if idle */ + case UART_CTRL_OUTPUT_IDLE: + return uartptr->oidle; + + } + return SYSERR; +} diff --git a/device/uart/uartGetc.c b/device/uart/uartGetc.c new file mode 100644 index 0000000..40f9bb0 --- /dev/null +++ b/device/uart/uartGetc.c @@ -0,0 +1,37 @@ +/** + * @file uartGetc.c + */ +/* Embedded Xinu, Copyright (C) 2009, 2013. All rights reserved. */ +#include +#include +#include +#include + +/** + * @ingroup uartgeneric + * + * Read a single character from a UART. + * + * @param devptr + * Pointer to the device table entry for a UART. + * + * @return + * On success, returns the character read as an unsigned char + * cast to an int. On read error, invalid device, or end-of + * file, returns SYSERR. + */ +devcall uartGetc(struct dentry *devptr) +{ + uchar ch; + int retval; + + retval = uartRead(devptr, &ch, 1); + if (retval == 1) + { + return ch; + } + else + { + return SYSERR; + } +} diff --git a/device/uart/uartInit.c b/device/uart/uartInit.c new file mode 100644 index 0000000..3b9c388 --- /dev/null +++ b/device/uart/uartInit.c @@ -0,0 +1,77 @@ +/** + * @file uartInit.c + */ +/* Embedded Xinu, Copyright (C) 2009, 2013. All rights reserved. */ +#include +#include + +/** + * @ingroup uartgeneric + * + * Global table of UART devices that are available in the current Embedded Xinu + * configuration. + */ +struct uart uarttab[NUART]; + +/** + * @ingroup uartgeneric + * + * Initialize a UART, including the entry in Xinu's UART table as well as the + * hardware itself. + * + * @param devptr + * Pointer to the device table entry for the UART. + * + * @return OK on success; SYSERR on failure. + */ +devcall uartInit(struct dentry *devptr) +{ + /* Initialize the entry for this UART in Xinu's UART table. */ + + struct uart *uartptr = &uarttab[devptr->dvminor]; + + /* Initialize statistical counts. */ + uartptr->cout = 0; + uartptr->cin = 0; + uartptr->lserr = 0; + uartptr->ovrrn = 0; + uartptr->iirq = 0; + uartptr->oirq = 0; + + /* Initialize the input buffer, including a semaphore for threads to wait + * on. */ + uartptr->isema = semcreate(0); + uartptr->iflags = UART_IFLAG_ECHO | TTY_ICRNL; + uartptr->istart = 0; + uartptr->icount = 0; + if (isbadsem(uartptr->isema)) + { + return SYSERR; + } + + /* Initialize the output buffer, including a semaphore for threads to wait + * on. */ + uartptr->osema = semcreate(UART_OBLEN); + uartptr->oflags = 0; + uartptr->ostart = 0; + uartptr->ocount = 0; + uartptr->oidle = 1; + if (isbadsem(uartptr->osema)) + { + semdelete(uartptr->isema); + return SYSERR; + } + + /* Initialize the actual hardware. */ + if (OK != uartHwInit(devptr)) + { + semdelete(uartptr->isema); + semdelete(uartptr->osema); + return SYSERR; + } + /* Save pointers to the device and the hardware registers in the UART + * structure. */ + uartptr->dev = devptr; + uartptr->csr = devptr->dvcsr; + return OK; +} diff --git a/device/uart/uartPutc.c b/device/uart/uartPutc.c new file mode 100644 index 0000000..6514ac9 --- /dev/null +++ b/device/uart/uartPutc.c @@ -0,0 +1,37 @@ +/** + * @file uartPutc.c + */ +/* Embedded Xinu, Copyright (C) 2009, 2013. All rights reserved. */ +#include +#include +#include +#include + +/** + * @ingroup uartgeneric + * + * Write a single character to a UART. + * + * @param devptr + * Pointer to the device table entry for a UART. + * @param ch + * The character to write. + * + * @return + * On success, returns the character written as an unsigned + * char cast to an @c int. On failure, returns SYSERR. + */ +devcall uartPutc(struct dentry *devptr, char ch) +{ + int retval; + + retval = uartWrite(devptr, &ch, 1); + if (retval == 1) + { + return (uchar)ch; + } + else + { + return SYSERR; + } +} diff --git a/device/uart/uartRead.c b/device/uart/uartRead.c new file mode 100644 index 0000000..efbc5ed --- /dev/null +++ b/device/uart/uartRead.c @@ -0,0 +1,81 @@ +/** + * @file uartRead.c + */ + +/* Embedded Xinu, Copyright (C) 2009, 2013. All rights reserved. */ +#include +#include +#include + +/** + * @ingroup uartgeneric + * + * Reads data from a UART. + * + * @param devptr + * Pointer to the device table entry for a UART. + * @param buf + * Pointer to a buffer into which to place the read data. + * @param len + * Maximum number of bytes of data to read. + * + * @return + * On success, returns the number of bytes read, which normally is @p len, + * but may be less than @p len if the UART has been set to non-blocking + * mode. Returns SYSERR on other error (currently, only if uartInit() has + * not yet been called). + */ +devcall uartRead(struct dentry *devptr, void *buf, uint len) +{ + intmask im; + struct uart *uartptr; + uint count; + uchar c; + + /* Disable interrupts and get a pointer to the UART structure. */ + im = disable(); + uartptr = &uarttab[devptr->dvminor]; + + /* Make sure uartInit() has run. */ + if (NULL == uartptr->csr) + { + restore(im); + return SYSERR; + } + + /* Attempt to read each byte requested. */ + for (count = 0; count < len; count++) + { + /* If the UART is in non-blocking mode, ensure there is a byte available + * in the input buffer from the lower half (interrupt handler). If not, + * return early with a short count. */ + if ((uartptr->iflags & UART_IFLAG_NOBLOCK) && uartptr->icount == 0) + { + break; + } + + /* Wait for there to be at least one byte in the input buffer from the + * lower half (interrupt handler), then remove it. */ + wait(uartptr->isema); + c = uartptr->in[uartptr->istart]; + if (uartptr->iflags & TTY_ICRNL){ + if(c=='\r') + c = '\n'; + } + ((uchar*)buf)[count] = c; + uartptr->icount--; + uartptr->istart = (uartptr->istart + 1) % UART_IBLEN; + + /* If the UART is in echo mode, echo the byte back to the UART. */ + if (uartptr->iflags & UART_IFLAG_ECHO) + { + uartPutc(uartptr->dev, c); + } + if((c == TY_NEWLINE) || (c == TY_RETURN)) + break; + } + + /* Restore interrupts and return the number of bytes read. */ + restore(im); + return count; +} diff --git a/device/uart/uartStat.c b/device/uart/uartStat.c new file mode 100644 index 0000000..b96549b --- /dev/null +++ b/device/uart/uartStat.c @@ -0,0 +1,45 @@ +/** + * @file uartStat.c + */ + +/* Embedded Xinu, Copyright (C) 2009, 2013. All rights reserved. */ +#include +#include +#include + +/** + * @ingroup uartgeneric + * + * Prints information about the current status of a UART. + * + * @param uartnum + * The minor number of the UART. + */ +void uartStat(ushort uartnum) +{ + struct uart *uartptr = &uarttab[uartnum]; + + if (NULL == uartptr->dev) + { + /* uartInit() not run yet */ + return; + } + + printf("%s:\n", uartptr->dev->dvname); + + printf("\tSTATISTICS:\n"); + printf("\t------------------------------------------\n"); + printf("\t%8d Characters Output\n", uartptr->cout); + printf("\t%8d Characters Input\n", uartptr->cin); + printf("\t%8d Characters Overrun\n", uartptr->ovrrn); + printf("\t%8d Receiver Error Count\n", uartptr->lserr); + printf("\t%8d Output IRQ Count\n", uartptr->oirq); + printf("\t%8d Input IRQ Count\n", uartptr->iirq); + + if (NULL != uartptr->csr) + { + uartHwStat(uartptr->csr); + } + + printf("\n"); +} diff --git a/device/uart/uartWrite.c b/device/uart/uartWrite.c new file mode 100644 index 0000000..9ec31f0 --- /dev/null +++ b/device/uart/uartWrite.c @@ -0,0 +1,87 @@ +/** + * @file uartWrite.c + */ + +/* Embedded Xinu, Copyright (C) 2009, 2013. All rights reserved. */ +#include +#include +#include + +/** + * @ingroup uartgeneric + * + * Write a buffer of data to a UART. + * + * Caveat: this operates asynchronously, so the data written may be held in an + * internal buffer and not yet actually written to the hardware. The UART + * driver's lower half (interrupt handler; see uartInterrupt()) is responsible + * for actually writing the data to the hardware. Exception: when the UART + * transmitter is idle, uartWrite() can directly write one byte to the hardware. + * + * @param devptr + * Pointer to the device table entry for a UART. + * @param buf + * Pointer to the buffer of data to write. + * @param len + * Number of bytes to write. + * + * @return + * On success, returns the number of bytes written, which normally is @p + * len, but may be less than @p len if the UART has been set to + * non-blocking mode. Returns ::SYSERR on other error (currently, only if + * uartInit() has not yet been called). + */ +devcall uartWrite(struct dentry *devptr, const void *buf, uint len) +{ + intmask im; + struct uart *uartptr; + uint count; + + /* Disable interrupts and get a pointer to the UART structure and a pointer + * to the UART's hardware registers. */ + im = disable(); + uartptr = &uarttab[devptr->dvminor]; + + /* Make sure uartInit() has run. */ + if (NULL == uartptr->csr) + { + restore(im); + return SYSERR; + } + + /* Attempt to write each byte in the buffer. */ + for (count = 0; count < len; count++) + { + /* Next byte to write. */ + uchar ch = ((const uchar *)buf)[count]; + + /* If the UART transmitter hardware is idle, write the byte directly to + * the hardware. Otherwise, put the byte in the output buffer for the + * lower half (interrupt handler). This may block if there is no space + * available in the output buffer. */ + if (uartptr->oidle) + { + uartHwPutc(uartptr->csr, ch); + uartptr->oidle = FALSE; + uartptr->cout++; + } + else + { + /* If the UART is in non-blocking mode, ensure there is space for a + * byte in the output buffer for the lower half (interrupt handler). + * If not, return early with a short count. */ + if ((uartptr->oflags & UART_OFLAG_NOBLOCK) && + uartptr->ocount == UART_OBLEN) + { + break; + } + wait(uartptr->osema); + uartptr->out[(uartptr->ostart + uartptr->ocount) % UART_OBLEN] = ch; + uartptr->ocount++; + } + } + + /* Restore interrupts and return the number of bytes written. */ + restore(im); + return count; +} diff --git a/include/am335x_control.h b/include/am335x_control.h new file mode 100644 index 0000000..ba8d3cd --- /dev/null +++ b/include/am335x_control.h @@ -0,0 +1,9 @@ +#define AM335X_PADCTL_PEN 0x00000008 /* Pull up-down enabled */ +#define AM335X_PADCTL_PUP 0x00000010 /* Pull up selected */ +#define AM335X_PADCTL_PDN 0x00000000 /* Pull down selected */ +#define AM335X_PADCTL_RXTX 0x00000020 /* Input or Output mode */ +#define AM335X_PADCTL_TX 0x00000000 /* Output only mode */ +#define AM335X_PADCTL_SS 0x00000040 /* Slew control slow */ +#define AM335X_PADCTL_SF 0x00000000 /* Slew control fast */ + +#define am335x_padctl(addr,val) (*((uint32 *)(addr))) = (val) diff --git a/include/am335x_eth.h b/include/am335x_eth.h new file mode 100644 index 0000000..952f52e --- /dev/null +++ b/include/am335x_eth.h @@ -0,0 +1,198 @@ +/* am335x_eth.h - Ethernet device definitions for AM335X SoC */ + +struct eth_a_ale { + uint32 idver; + uint32 res1; + uint32 ctrl; + uint32 res2; + uint32 prescale; + uint32 res3; + uint32 unknown_vlan; + uint32 res4; + uint32 tblctl; + uint32 res5[4]; + uint32 tblw2; + uint32 tblw1; + uint32 tblw0; + uint32 portctl[6]; +}; + +#define ETH_AM335X_ALECTL_EN 0x80000000 /* Enable ALE */ +#define ETH_AM335X_ALECTL_BY 0x00000010 /* Bypass Mode */ + +#define ETH_AM335X_ALEPCTL_FWD 0x00000003 /* Port Forward state*/ + +struct eth_a_cpdma { + uint32 tx_idver; + uint32 tx_ctrl; + uint32 tx_teardown; + uint32 res0; + uint32 rx_idver; + uint32 rx_ctrl; + uint32 rx_teardown; + uint32 reset; + uint32 dmactrl; + uint32 dmastat; + uint32 rx_buf_off; + uint32 emctrl; + uint32 tx_pri_rate[8]; + byte res1[48]; + uint32 tx_intstat_raw; + uint32 tx_intstat_masked; + uint32 tx_intmask_set; + uint32 tx_intmask_clear; + uint32 in_vector; + uint32 eoi_vector; + byte res2[8]; + uint32 rx_intstat_raw; + uint32 rx_intstat_masked; + uint32 rx_intmask_set; + uint32 rx_intmask_clear; + uint32 dma_intstat_raw; + uint32 dma_intstat_masket; + uint32 dma_intmask_set; + uint32 dma_intmask_clear; + uint32 rx_pendthresh[8]; + uint32 rx_freebuffer[8]; +}; + +struct eth_a_stateram { + uint32 tx_hdp[8]; + uint32 rx_hdp[8]; + uint32 tx_cp[8]; + uint32 rx_cp[8]; +}; + +struct eth_a_sl { + uint32 idver; + uint32 macctrl; + uint32 macstat; + uint32 reset; + uint32 rx_maxlen; + uint32 bofftest; + uint32 rx_pause; + uint32 tx_pause; + uint32 emctrl; + uint32 rx_pri_map; + uint32 tx_gap; +}; + +#define ETH_AM335X_SLCTL_FD 0x00000001 /* Full Duplex */ +#define ETH_AM335X_SLCTL_LB 0x00000002 /* Loopback */ +#define ETH_AM335X_SLCTL_EN 0x00000020 /* Rx/Tx Enable */ +#define ETH_AM335X_SLCTL_GIG 0x00000080 /* Gigabit mode */ + +struct eth_a_ss { + uint32 idver; + uint32 ctrl; + uint32 reset; + uint32 stat_port_en; + uint32 ptype; + uint32 soft_idle; + uint32 thru_rate; + uint32 gap_thresh; + uint32 tx_start_wds; + uint32 flow_ctrl; + uint32 vlan_type; + uint32 ts_ltype; + uint32 dlr_ltype; +}; + +struct eth_a_wr { + uint32 idver; + uint32 reset; + uint32 ctrl; + uint32 int_ctrl; + uint32 c0_rx_thresh_en; + uint32 c0_rx_en; + uint32 c0_tx_en; + uint32 c0_misc_en; + uint32 res1[8]; + uint32 c0_rx_thresh_stat; + uint32 c0_rx_stat; + uint32 c0_tx_stat; + uint32 c0_misc_stat; +}; + +struct eth_a_mdio { + uint32 ver; + uint32 ctrl; + uint32 alive; + uint32 link; + uint32 linkintraw; + uint32 linkintmasked; + byte res1[8]; + uint32 userintraw; + uint32 userintmasked; + uint32 userintmaskset; + uint32 userintmaskclr; + byte res2[80]; + uint32 useraccess0; + uint32 userphysel0; + uint32 useraccess1; + uint32 userphysel1; +}; + +#define ETH_AM335X_MDIOCTL_EN 0x40000000 + +#define ETH_AM335X_MDIOUA_GO 0x80000000 /* Perorm MDIO access*/ +#define ETH_AM335X_MDIOUA_WR 0x40000000 /* Write access */ +#define ETH_AM335X_MDIOUA_ACK 0x20000000 /* Read Ack */ +#define ETH_AM335X_MDIOUA_DM 0x0000ffff /* MDIO Data Mask */ + +struct eth_a_csreg { + volatile struct eth_a_ale *ale; + volatile struct eth_a_cpdma *cpdma; + volatile struct eth_a_stateram *stateram; + volatile struct eth_a_sl *sl; + volatile struct eth_a_ss *ss; + volatile struct eth_a_wr *wr; + volatile struct eth_a_mdio *mdio; +}; + +struct eth_a_rx_desc { + struct eth_a_rx_desc *next; + uint32 buffer; + uint16 buflen; + uint16 bufoff; + uint16 packlen; + uint16 stat; +}; + +#define ETH_AM335X_RDS_SOP 0x8000 /* Start of packet */ +#define ETH_AM335X_RDS_EOP 0x4000 +#define ETH_AM335X_RDS_OWN 0x2000 +#define ETH_AM335X_RDS_EOQ 0x1000 + +#define ETH_AM335X_RX_RING_SIZE 32 + +struct eth_a_tx_desc { + struct eth_a_tx_desc *next; + uint32 buffer; + uint16 buflen; + uint16 bufoff; + uint16 packlen; + uint16 stat; +}; + +#define ETH_AM335X_TDS_SOP 0x8000 +#define ETH_AM335X_TDS_EOP 0x4000 +#define ETH_AM335X_TDS_OWN 0x2000 +#define ETH_AM335X_TDS_EOQ 0x1000 +#define ETH_AM335X_TDS_DIR 0x0010 +#define ETH_AM335X_TDS_P1 0x0001 + +#define ETH_AM335X_TX_RING_SIZE 16 + +#define ETH_AM335X_ALE_ADDR 0x4A100D00 +#define ETH_AM335X_CPDMA_ADDR 0x4A100800 +#define ETH_AM335X_STATERAM_ADDR 0x4A100A00 +#define ETH_AM335X_SL1_ADDR 0x4A100D80 +#define ETH_AM335X_MDIO_ADDR 0x4A101000 +#define ETH_AM335X_SS_ADDR 0x4A100000 +#define ETH_AM335X_WR_ADDR 0x4A101200 + +#define ETH_AM335X_RXINT 41 +#define ETH_AM335X_TXINT 42 + +#define ETH_AM335X_INIT_DELAY 1000000 diff --git a/include/armv7a.h b/include/armv7a.h new file mode 100644 index 0000000..684af33 --- /dev/null +++ b/include/armv7a.h @@ -0,0 +1,34 @@ +/* armv7a.h */ + +/* CPSR bits */ + +#define ARMV7A_CPSR_A 0x00000100 /* Imprecise data abort disable */ +#define ARMV7A_CPSR_I 0x00000080 /* IRQ interrupts disable */ +#define ARMV7A_CPSR_F 0x00000040 /* FIQ interrupts disable */ +#define ARMV7A_CPSR_MM 0x0000001F /* Processor Mode Mask */ +#define ARMV7A_CPSR_USR 0x00000010 /* Processor Mode = User */ +#define ARMV7A_CPSR_FIQ 0x00000011 /* Processor Mode = FIQ */ +#define ARMV7A_CPSR_IRQ 0x00000012 /* Processor Mode = IRQ */ +#define ARMV7A_CPSR_SPR 0x00000013 /* Processor Mode = Supervisor */ +#define ARMV7A_CPSR_ABT 0x00000017 /* Processor Mode = Abort */ +#define ARMV7A_CPSR_UND 0x0000001B /* Processor Mode = Undefined */ +#define ARMV7A_CPSR_SYS 0x0000001F /* Processor Mode = System */ +#define ARMv7A_CPSR_SCM 0x00000016 /* Processor Mode Secure Monitor*/ + +/* Coprocessor c1 - Control Register bits */ + +#define ARMV7A_C1CTL_V 0x00002000 /* Exception base addr control */ +#define ARMV7A_C1CTL_I 0x00001000 /* Instruction Cache enable */ +#define ARMV7A_C1CTL_C 0x00000004 /* Data Cache enable */ +#define ARMV7A_C1CTL_A 0x00000002 /* Strict alignment enable */ +#define ARMV7A_C1CTL_M 0x00000001 /* MMU enable */ + +/* Exception Vector Addresses */ + +#define ARMV7A_EV_START 0x4030CE00 /* Exception vector start addr */ +#define ARMV7A_EV_END 0x4030CE20 /* Exception vector end addr */ +#define ARMV7A_EH_START 0x4030CE24 /* Exception handler start addr */ +#define ARMV7A_EH_END 0x4030CE40 /* Exception handler end addr */ +#define ARMV7A_IRQH_ADDR 0x4030CE38 /* IRQ exp handler address */ + +#define MAXADDR 0xA0000000 /* 512 MB RAM starting from 0x80000000 */ diff --git a/include/arp.h b/include/arp.h new file mode 100644 index 0000000..e2a30b3 --- /dev/null +++ b/include/arp.h @@ -0,0 +1,50 @@ +/* arp.h */ + +/* Items related to ARP - definition of cache and the packet format */ + +#define ARP_HALEN 6 /* Size of Ethernet MAC address */ +#define ARP_PALEN 4 /* Size of IP address */ + +#define ARP_HTYPE 1 /* Ethernet hardware type */ +#define ARP_PTYPE 0x0800 /* IP protocol type */ + +#define ARP_OP_REQ 1 /* Request op code */ +#define ARP_OP_RPLY 2 /* Reply op code */ + +#define ARP_SIZ 16 /* Number of entries in a cache */ + +#define ARP_RETRY 3 /* Num. retries for ARP request */ + +#define ARP_TIMEOUT 300 /* Retry timer in milliseconds */ + +/* State of an ARP cache entry */ + +#define AR_FREE 0 /* Slot is unused */ +#define AR_PENDING 1 /* Resolution in progress */ +#define AR_RESOLVED 2 /* Entry is valid */ + +#pragma pack(2) +struct arppacket { /* ARP packet for IP & Ethernet */ + byte arp_ethdst[ETH_ADDR_LEN];/* Ethernet dest. MAC addr */ + byte arp_ethsrc[ETH_ADDR_LEN];/* Ethernet source MAC address */ + uint16 arp_ethtype; /* Ethernet type field */ + uint16 arp_htype; /* ARP hardware type */ + uint16 arp_ptype; /* ARP protocol type */ + byte arp_hlen; /* ARP hardware address length */ + byte arp_plen; /* ARP protocol address length */ + uint16 arp_op; /* ARP operation */ + byte arp_sndha[ARP_HALEN]; /* ARP sender's Ethernet addr */ + uint32 arp_sndpa; /* ARP sender's IP address */ + byte arp_tarha[ARP_HALEN]; /* ARP target's Ethernet addr */ + uint32 arp_tarpa; /* ARP target's IP address */ +}; +#pragma pack() + +struct arpentry { /* Entry in the ARP cache */ + int32 arstate; /* State of the entry */ + uint32 arpaddr; /* IP address of the entry */ + pid32 arpid; /* Waiting process or -1 */ + byte arhaddr[ARP_HALEN]; /* Ethernet address of the entry*/ +}; + +extern struct arpentry arpcache[]; diff --git a/include/bufpool.h b/include/bufpool.h new file mode 100644 index 0000000..cafd248 --- /dev/null +++ b/include/bufpool.h @@ -0,0 +1,24 @@ +/* bufpool.h */ + +#ifndef NBPOOLS +#define NBPOOLS 20 /* Maximum number of buffer pools */ +#endif + +#ifndef BP_MAXB +#define BP_MAXB 8192 /* Maximum buffer size in bytes */ +#endif + +#define BP_MINB 8 /* Minimum buffer size in bytes */ +#ifndef BP_MAXN +#define BP_MAXN 2048 /* Maximum number of buffers in a pool */ +#endif + +struct bpentry { /* Description of a single buffer pool */ + struct bpentry *bpnext;/* pointer to next free buffer */ + sid32 bpsem; /* semaphore that counts buffers */ + /* currently available in the pool */ + uint32 bpsize; /* size of buffers in this pool */ + }; + +extern struct bpentry buftab[];/* Buffer pool table */ +extern bpid32 nbpools; /* current number of allocated pools */ diff --git a/include/clock.h b/include/clock.h new file mode 100644 index 0000000..6676943 --- /dev/null +++ b/include/clock.h @@ -0,0 +1,23 @@ +/* clock.h */ + +extern uint32 clktime; /* current time in secs since boot */ + +extern qid16 sleepq; /* queue for sleeping processes */ +extern int32 slnonempty; /* nonzero if sleepq is nonempty */ +extern int32 *sltop; /* ptr to key in first item on sleepq */ +extern uint32 preempt; /* preemption counter */ +extern volatile ulong clkticks; + + +void clkinit(void); + +void clkupdate(ulong cycles); + +ulong clkcount(void); + +interrupt clkhandler(void); +void udelay(ulong); +void mdelay(ulong); + + +#define CLKTICKS_PER_SEC 1000 diff --git a/include/ctype.h b/include/ctype.h new file mode 100644 index 0000000..53b2618 --- /dev/null +++ b/include/ctype.h @@ -0,0 +1,33 @@ +/* ctype.h + * + * Includes isalpha, isupper, islower, isdigit, isspace, ispunct, isalnum, + * isprint, iscntrl, toupper, tolower, toascii, iseof +*/ + +#define _U 0x01 +#define _L 0x02 +#define _N 0x04 +#define _S 0x08 +#define _P 0x10 +#define _C 0x20 +#define _X 0x40 + +extern const char _ctype_[]; + +#define isalpha(c) ((_ctype_+1)[(int)c]&(_U|_L)) +#define isupper(c) ((_ctype_+1)[(int)c]&_U) +#define islower(c) ((_ctype_+1)[(int)c]&_L) +#define isdigit(c) ((_ctype_+1)[(int)c]&_N) +#define isxdigit(c) ((_ctype_+1)[(int)c]&(_N|_X)) +#define isspace(c) ((_ctype_+1)[(int)c]&_S) +#define ispunct(c) ((_ctype_+1)[(int)c]&_P) +#define isalnum(c) ((_ctype_+1)[(int)c]&(_U|_L|_N)) +#define isprint(c) ((_ctype_+1)[(int)c]&(_P|_U|_L|_N|_S)) +#define iscntrl(c) ((_ctype_+1)[(int)c]&_C) +#define isascii(c) ((unsigned)((int)(c))<=0x7F) + +#define toupper(c) (((int)(c))-'a'+'A') +#define tolower(c) (((int)(c))-'A'+'a') +#define toascii(c) (((int)(c))&0x7F) + +#define iseof(c) (0x04 == (int)c) diff --git a/include/date.h b/include/date.h new file mode 100644 index 0000000..b680975 --- /dev/null +++ b/include/date.h @@ -0,0 +1,67 @@ +/* date.h - ntim2xtim, xtim2ntim, isleap, utim2ltim */ + +/************************************************************************/ +/* */ +/* Constants and declarations for date storage and conversion */ +/* */ +/* Xinu stores time as seconds past Jan 1, 1970 (UNIX format), with */ +/* 1 being 1 second into Jan. 1, 1970, GMT (universal time). The */ +/* Internet uses seconds past Jan 1, 1900 (also GMT or Universal Time) */ +/* */ +/************************************************************************/ + +/* Conversion between network and local representations */ + +#define ntim2xtim(x) ((x)-2208988800U) /* net-to-xinu time */ +#define xtim2ntim(x) ((x)+2208988800U) /* xinu-to-net time */ + +/* Constants for Daylight Savings Time */ + +#define DATE_DST_OFF 0 /* force DST to be off */ +#define DATE_DST_ON 1 /* force DST to be on */ +#define DATE_DST_AUTO 2 /* compute DST automatically */ + +/* Days in months and month names used to format a date */ + +struct dateinfo { + uint32 dt_boot; /* time when system booted */ + /* add clktime to get the */ + /* current time-of-day */ + bool8 dt_bootvalid; /* is dt_boot field valid? */ + int32 dt_daylight; /* whether to compute daylight */ + /* savings time */ + int32 dt_msize[12]; /* days per month */ + char *dt_mnam[12]; /* month names */ + char *dt_dnam[7]; /* day names */ +}; + +extern struct dateinfo Date; /* Global date information */ + +/* Constants for converting time to month/day/year/hour/minute/second */ + +#define isleap(x) ((x)%4==0) /* leap year? (1970-2099) */ +#define SECPERDY (60*60*24) /* one day in seconds */ +#define SECPERHR (60*60) /* one hour in seconds */ +#define SECPERMN (60) /* one minute in seconds */ + +/* The local time zone can be set to EST, CST, MST,or PST. */ + +#define ZONE_EST 5 /* Eastern Standard time is 5 */ +#define ZONE_CST 6 /* hours west of England */ +#define ZONE_MST 7 +#define ZONE_PST 8 +#define TIMEZONE ZONE_EST /* timezone for this system */ + +/* In-line procedures to convert universal-to-local time and vice versa */ + +#define utim2ltim(x) ((x)-TIMEZONE*SECPERHR) +#define ltim2utim(x) ((x)+TIMEZONE*SECPERHR) + +#define TIMERPORT 37 /* UDP port for time server */ +#define TIMELPORT 42345 /* locl UDP port for time */ + +#ifndef TIMESERVER +#define TIMESERVER "128.10.2.6" /* IP address of time server */ +#endif + +#define TIMETIMEOUT 2000 /* timeout for time server (ms) */ diff --git a/include/debug.h b/include/debug.h new file mode 100644 index 0000000..fa99ece --- /dev/null +++ b/include/debug.h @@ -0,0 +1,8 @@ +/* debug.h */ + +#define DEBUG_ASCII 0x01 +#define DEBUG_HEX 0x02 + +void hexdump(void *buffer, uint32 length, bool8 text); +void debugbreak(void); +void debugret(void); diff --git a/include/delay.h b/include/delay.h new file mode 100644 index 0000000..5ffe34f --- /dev/null +++ b/include/delay.h @@ -0,0 +1,25 @@ +/* delay.h - DELAY */ + +/* + * Delay units are in microseconds. + */ +#define DELAY(n) \ +{ \ + volatile long N = 2*n; \ + \ + while(N > 0) { \ + N--; \ + } \ +} + +/* + * Delay units are in milli-seconds. + */ +#define MDELAY(n) \ +{ \ + register long i; \ + \ + for (i=n;i>0;i--) { \ + DELAY(1000); \ + } \ +} diff --git a/include/device.h b/include/device.h new file mode 100644 index 0000000..14f5c64 --- /dev/null +++ b/include/device.h @@ -0,0 +1,7 @@ +/* device.h - isbaddev */ + +#define DEVNAMLEN 16 /* maximum size of a device name */ + +/* Macro used to verify device ID is valid */ + +#define isbaddev(f) ( ((f) < 0) | ((f) >= NDEVS) ) diff --git a/include/dhcp.h b/include/dhcp.h new file mode 100644 index 0000000..02e0203 --- /dev/null +++ b/include/dhcp.h @@ -0,0 +1,64 @@ +/* dhcp.h - Definitions related to DHCP */ + +#define DHCP + +#define DHCP_RETRY 5 + +#define DHCP_PADDING 0 +#define DHCP_SUBNET_MASK 1 +#define DHCP_ROUTER 3 +#define DHCP_DNS_SERVER 6 +#define DHCP_DOMAIN_NAME 15 +#define DHCP_VENDER_OPTIONS 43 +#define DHCP_REQUESTED_IP 50 +#define DHCP_IP_ADDR_LEASE_TIME 51 +#define DHCP_OPTION_OVERLOAD 52 +#define DHCP_MESSAGE_TYPE 53 +#define DHCP_SERVER_ID 54 +#define DHCP_PARAMETER_REQUEST_LIST 55 +#define DHCP_MESSAGE 56 +#define DHCP_MAXIMUM_DHCP_MESSAGE_SIZE 57 +#define DHCP_RENEWAL_TIME_VALUE 58 +#define DHCP_REBINDING_TIME_VALUE 59 +#define DHCP_VENDOR_CLASS_ID 60 +#define DHCP_CLIENT_ID 61 +#define DHCP_TFTP_SERVER_NAME 66 +#define DHCP_BOOTFILE_NAME 67 +#define DHCP_CLIENT_SYS_ARCH 93 +#define DHCP_CLIENT_NET_ID 94 +#define DHCP_CLIENT_MACHINE_ID 97 +#define DHCP_MESSAGE_END 255 + +#pragma pack(2) +struct dhcpmsg { + byte dc_bop; /* DHCP bootp op 1=req 2=reply */ + byte dc_htype; /* DHCP hardware type */ + byte dc_hlen; /* DHCP hardware address length */ + byte dc_hops; /* DHCP hop count */ + uint32 dc_xid; /* DHCP xid */ + uint16 dc_secs; /* DHCP seconds */ + uint16 dc_flags; /* DHCP flags */ + uint32 dc_cip; /* DHCP client IP address */ + uint32 dc_yip; /* DHCP your IP address */ + uint32 dc_sip; /* DHCP server IP address */ + uint32 dc_gip; /* DHCP gateway IP address */ + byte dc_chaddr[16]; /* DHCP client hardware address */ + union { + byte dc_bootp[192]; /* DHCP bootp area (zero) */ + struct { + byte sname[64]; /* TFTP Server Name */ + byte bootfile[128]; /* TFTP File name */ + }; + }; + uint32 dc_cookie; /* DHCP cookie */ + byte dc_opt[1024]; /* DHCP options area (large */ + /* enough to hold more than */ + /* reasonable options */ +}; +#pragma pack() + +void dump_dhcp_msg(const struct dhcpmsg* dmsg, uint32 dmsg_size); +int32 build_dhcp_discover(struct dhcpmsg* dmsg); +int32 build_dhcp_request(struct dhcpmsg* dmsg, const struct dhcpmsg* dmsg_offer, uint32 dsmg_offer_size); + +extern bpid32 netbufpool; /* ID of net packet buffer pool */ diff --git a/include/dns.h b/include/dns.h new file mode 100644 index 0000000..a13f3f7 --- /dev/null +++ b/include/dns.h @@ -0,0 +1,49 @@ +/* dns.h */ + +/* Format of a DNS Query/Response packet */ +struct dnspkt { + uint16 id; /* DNS Query ID */ + struct { + byte rd:1; /* Recursion Desired */ + byte tc:1; /* Truncation */ + byte aa:1; /* Authoritative Answer */ + byte opcode:4;/* Operation Code */ + byte qr:1; /* Query=0, Response=1 */ + }; + struct { + byte rcode:4;/* Response Code */ + byte z:3; /* Reserved, must be 0 */ + byte ra:1; /* Recursion Available */ + }; + uint16 qdcount; /* No. of Questions */ + uint16 ancount; /* No. of RRs in Answer */ + uint16 nscount; /* No of NS RRs */ + uint16 arcount; /* No. of RRs in Addntl */ + char data[500]; /* DNS Data */ +}; + +/* QType Values */ + +#define DNS_QT_A 1 /* DNS Address Type */ +#define DNS_QT_NS 2 /* DNS Name Server Type */ + +/* QClass values */ + +#define DNS_QC_IN 1 /* DNS QClass Internet */ + +/* Format of a DNS Question */ +struct dns_q { + char *qname; /* Domain Name */ + uint16 *qtype; /* Question Type */ + uint16 *qclass; /* Question Class */ +}; + +/* Format of a DNS Resource Record */ +struct dns_rr { + char *rname; /* Domain Name */ + uint16 *rtype; /* RR Type */ + uint16 *rclass; /* RR Class */ + uint32 *ttl; /* RR Time-to-Live */ + uint16 *rdlen; /* RR RD Length */ + char *rdata; /* RR Data */ +}; diff --git a/include/ether.h b/include/ether.h new file mode 100644 index 0000000..c2c3987 --- /dev/null +++ b/include/ether.h @@ -0,0 +1,118 @@ +/* ether.h */ + +/* Ethernet packet format: + + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + | Dest. MAC (6) | Src. MAC (6) |Type (2)| Data (46-1500)... | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +*/ + +#define ETH_ADDR_LEN 6 /* Length of Ethernet (MAC) address */ +typedef unsigned char Eaddr[ETH_ADDR_LEN];/* a physical Ethernet address*/ + +/* Ethernet packet header */ + +struct etherPkt { + byte dst[ETH_ADDR_LEN]; /* Destination Mac address */ + byte src[ETH_ADDR_LEN]; /* Source Mac address */ + uint16 type; /* Ether type field */ + byte data[1]; /* Packet payload */ +}; + +#define ETH_HDR_LEN 14 /* Length of Ethernet packet */ + /* header */ + +/* Ethernet DMA buffer sizes */ + +#define ETH_MTU 1500 /* Maximum transmission unit */ +#define ETH_VLAN_LEN 4 /* Length of Ethernet vlan tag */ +#define ETH_CRC_LEN 4 /* Length of CRC on Ethernet */ + /* frame */ + +#define ETH_MAX_PKT_LEN ( ETH_HDR_LEN + ETH_VLAN_LEN + ETH_MTU ) + +#define ETH_BUF_SIZE 2048 /* A multiple of 16 greater */ + /* than the max packet */ + /* size(cache alignment) */ + +/* State of the Ethernet interface */ + +#define ETH_STATE_FREE 0 /* control block is unused */ +#define ETH_STATE_DOWN 1 /* interface is currently */ + /* inactive */ +#define ETH_STATE_UP 2 /* interface is currently active*/ + +/* Ethernet device control functions */ + +#define ETH_CTRL_GET_MAC 1 /* Get the MAC for this device */ + +/* Ethernet multicast */ + +#define ETH_NUM_MCAST 32 /* Max number of multicast addresses*/ + +/* Ehternet NIC type */ + +#define ETH_TYPE_3C905C 1 +#define ETH_TYPE_E1000E 2 + +#define ETH_PHY_CTLREG 0 +#define ETH_PHY_STATREG 1 + +#define ETH_PHY_CTLREG_RESET 0x8000 +#define ETH_PHY_CTLREG_SM 0x2040 /* Speed Mask */ +#define ETH_PHY_10M 0x0000 +#define ETH_PHY_100M 0x2000 +#define ETH_PHY_1000M 0x0040 +#define ETH_PHY_CTLREG_FD 0x0100 + +#define ETH_PHY_STATREG_LINK 0x0004 + +struct ethcblk { + byte state; /* ETH_STATE_... as defined above */ + struct dentry *phy; /* physical eth device for Tx DMA */ + byte type; /* NIC type_... as defined above */ + + /* Pointers to associated structures */ + + struct dentry *dev; /* address in device switch table */ + void *csr; /* addr.of control and status regs. */ + uint32 pcidev; /* PCI device number */ + uint32 iobase; /* I/O base from config */ + uint32 flashbase; /* flash base from config */ + uint32 membase; /* memory base for device from config */ + + void *rxRing; /* ptr to array of recv ring descriptors*/ + void *rxBufs; /* ptr to Rx packet buffers in memory */ + uint32 rxHead; /* Index of current head of Rx ring */ + uint32 rxTail; /* Index of current tail of Rx ring */ + uint32 rxRingSize; /* size of Rx ring descriptor array */ + uint32 rxIrq; /* Count of Rx interrupt requests */ + + void *txRing; /* ptr to array of xmit ring descriptors*/ + void *txBufs; /* ptr to Tx packet buffers in memory */ + uint32 txHead; /* Index of current head of Tx ring */ + uint32 txTail; /* Index of current tail of Tx ring */ + uint32 txRingSize; /* size of Tx ring descriptor array */ + uint32 txIrq; /* Count of Tx interrupt requests */ + + byte devAddress[ETH_ADDR_LEN];/* MAC address */ + + uint8 addrLen; /* Hardware address length */ + uint16 mtu; /* Maximum transmission unit (payload) */ + + uint32 errors; /* Number of Ethernet errors */ + sid32 isem; /* Semaphore for Ethernet input */ + sid32 osem; /* Semaphore for Ethernet output */ + uint16 istart; /* Index of next packet in the ring */ + + int16 inPool; /* Buffer pool ID for input buffers */ + int16 outPool; /* Buffer pool ID for output buffers */ + + int16 proms; /* nonzero => promiscuous mode */ + + int16 ed_mcset; /* nonzero => multicast reception set */ + int16 ed_mcc; /* count of multicast addresses */ + Eaddr ed_mca[ETH_NUM_MCAST];/* array of multicast addrs */ +}; + +extern struct ethcblk ethertab[]; /* array of control blocks */ diff --git a/include/ethloop.h b/include/ethloop.h new file mode 100644 index 0000000..b7043b0 --- /dev/null +++ b/include/ethloop.h @@ -0,0 +1,65 @@ +/** + * @file ethloop.h + * + * $Id: ethloop.h 2076 2009-09-24 23:05:39Z brylow $ + */ +/* Embedded Xinu, Copyright (C) 2009. All rights reserved. */ + +#ifndef _ETHLOOP_H_ +#define _ETHLOOP_H_ + + +#define ELOOP_MTU 1500 +#define ELOOP_LINKHDRSIZE ETH_HDR_LEN + +#define ELOOP_BUFSIZE ELOOP_MTU + ELOOP_LINKHDRSIZE +#define ELOOP_NBUF 100 + +#define ELOOP_CTRL_GETHOLD 1 +#define ELOOP_CTRL_SETFLAG 2 +#define ELOOP_CTRL_CLRFLAG 3 + +#define ELOOP_FLAG_HOLDNXT 0x01 /**< place next written pkt in hold */ +#define ELOOP_FLAG_DROPNXT 0x04 /**< drop next written pkt */ +#define ELOOP_FLAG_DROPALL 0x08 /**< drop all written pkts */ + +#define ELOOP_STATE_FREE 0 +#define ELOOP_STATE_ALLOC 1 + +/** + * Loopback device control block + */ +struct ethloop +{ + int state; /**< device state */ + struct dentry *dev; /**< device table entry */ + int poolid; /**< poolid for the buffer pool */ + byte flags; /**< flags */ + + /* Packet queue */ + int index; /**< index of first packet in buffer */ + sid32 sem; /**< number of packets in buffer */ + int count; /**< number of packets in buffer */ + char *buffer[ELOOP_NBUF]; /**< input buffer */ + int pktlen[ELOOP_NBUF]; /**< length of packet in buffer */ + + /* Hold packet */ + sid32 hsem; /**< number of held packets */ + char *hold; /**< hold buffer */ + int holdlen; /**< length of packet in hold buffer */ + + /* Statistics */ + uint32 nout; /**< number of packets written */ +}; + +extern struct ethloop elooptab[]; + +/* Driver functions */ +devcall ethloopInit(struct dentry *); +devcall ethloopOpen(struct dentry *); +devcall ethloopClose(struct dentry *); +devcall ethloopRead(struct dentry *, void *, uint32); +devcall ethloopWrite(struct dentry *, void *, uint32); +devcall ethloopControl(struct dentry *, int, int32, int32); + +#endif /* _ETHLOOP_H_ */ diff --git a/include/file.h b/include/file.h new file mode 100644 index 0000000..533517c --- /dev/null +++ b/include/file.h @@ -0,0 +1,20 @@ +/* file.h - definitions commmon to remote and local file systems */ + +/* Definition of file mode bits */ + +#define F_MODE_R 0x01 /* Bit to grant read access */ +#define F_MODE_W 0x02 /* Bit to grant write access */ +#define F_MODE_RW 0x03 /* Mask for read and write bits */ +#define F_MODE_N 0x04 /* Bit for "new" mode */ +#define F_MODE_O 0x08 /* Bit for "old" mode */ + /* Note: new and old mode bits */ + /* are mutually exclusive */ +#define F_MODE_NO 0x0C /* Mask for "n" and "o" bits */ + +/* Control functions for files */ + +#define F_CTL_DEL 1 /* Delete a file */ +#define F_CTL_TRUNC 2 /* Truncate a file */ +#define F_CTL_MKDIR 3 /* make a directory */ +#define F_CTL_RMDIR 4 /* remove a directory */ +#define F_CTL_SIZE 5 /* Obtain the size of a file */ diff --git a/include/flash.h b/include/flash.h new file mode 100644 index 0000000..3b3371e --- /dev/null +++ b/include/flash.h @@ -0,0 +1,263 @@ +/** + * @file flash.h + * This file provides various definitions and prototypes for the flash + * driver and all its affiliates + * + * $Id: flash.h 2065 2009-09-04 21:44:36Z brylow $ + */ +/* Embedded XINU, Copyright (C) 2007. All rights reserved. */ + + +#ifndef _FLASH_H_ +#define _FLASH_H_ + +/* Disk variables */ +#define MAX_LIVE_BLOCKS 8 /**< number of blocks to keep in memory */ +#define FLASH_BLK_SIZE 512 /**< disk blocks are 512 bytes */ + +#define FLASH_BLOCK_FREE 0 /**< block can be allocated */ +#define FLASH_BLOCK_CLEAN 1 /**< block has been read but not writted */ +#define FLASH_BLOCK_DIRTY 2 /**< block has been changed */ + +/* Important disk block sections */ +#define CFE_MIN_BLOCK 0x0000 /**< Physical addr: 0x000000 */ +#define CFE_MAX_BLOCK 0x01FF /**< Physical addr: 0x03ffff */ +#define KERNEL_MIN_BLOCK 0x0200 /**< Physical addr: 0x040000 */ +#define KERNEL_MAX_BLOCK 0x03FF /**< Physical addr: 0x07ffff */ +#define NVRAM_MIN_BLOCK 0x1FC0 /**< Physical addr: 0x3F8000 */ +#define NVRAM_MAX_BLOCK 0x1FFF /**< Physical addr: 0x3fffff */ + +/* Flash control switch values */ +#define FLASH_BLOCK_SIZE 0x0000 /**< get the size of disk blocks */ +#define FLASH_N_BLOCKS 0x0001 /**< get number of disk blocks */ +#define FLASH_SYNC 0x0002 /**< force sync of disk device */ + +/* Flash variables */ +#define FLASH_WIDEMODE 1 +#define MAX_REGIONS 8 + +/* TRX variables */ +#define TRX_MAGIC 0x30524448 + +/* Structures */ +struct trx_header +{ + uint32 magic; /**< "HDR0" */ + uint32 len; /**< Length of file including header */ + uint32 crc; /**< 32-bit CRC from flag_vers to EOF */ + uint32 flags_vers; /**< 0-15 flags, 16-31 version */ + uint32 offsets[3]; /**< Partition offsets from header start */ +}; + +/* File structure */ +struct file +{ + uint32 len; + char *name; + void *data; +}; + +struct flash_region +{ + uint32 nblocks; /**< number of blocks within region */ + uint32 block_size; /**< size of block in region */ + uint32 region_start; /**< beginning of region in memory */ + uint32 region_size; /**< size of region in bytes */ +}; + +struct flash_block +{ + uint32 start_pos; /**< physical position data starts at */ + uint32 size; /**< size of this block */ + byte state; /**< state of this block */ + void *buffer; /**< buffer for this block */ +}; + +struct flash +{ + struct dentry *device; /**< flash entry in dev structure */ + byte commands; /**< command set the interface uses */ + uint32 base; /**< base address for flash memory */ + sid32 lock; /**< lock for execution flash operations */ + uint32 size; /**< size (in bytes) of flash memory */ + byte mode; /**< current mode of flash */ + uint16 nregions; /**< number of regions on device */ + struct flash_region regions[MAX_REGIONS]; /**< region info. */ + + uint32 log_size; /**< size of logical disk blocks */ + uint32 nlog_blocks; /**< number of logical blocks on disk */ + + /** list of open blocks on flash device */ + struct flash_block erase_blocks[MAX_LIVE_BLOCKS]; + byte curr_block; /**< offset of the oldest block stored */ +}; + +extern struct flash_block bad_block; + +/* + * Common Flash Interface Query commands and macros + */ + +/* put/get 8-bits commands for CFI */ +#define CFI_PUT_8(addr,offset,cmd) \ + *((volatile unsigned char *)((addr)+((offset)<gp_enable |= (n); \ + ((struct gpio_csreg *)GPIO_BASE)->gp_output &= ~(n) + +/** + * Turns an LED off + * @param n GPIO bit for LED (use GPIO_LED_* constants) + */ +#define gpioLEDOff(n) ((struct gpio_csreg *)GPIO_BASE)->gp_enable &= ~(n) diff --git a/include/icmp.h b/include/icmp.h new file mode 100644 index 0000000..87e1474 --- /dev/null +++ b/include/icmp.h @@ -0,0 +1,31 @@ +/* icmp.h - definintions for the Internet Control Message Protocol */ + +#define ICMP_SLOTS 10 /* num. of open ICMP endpoints */ +#define ICMP_QSIZ 8 /* incoming packets per slot */ + +/* Constants for the state of an entry */ + +#define ICMP_FREE 0 /* entry is unused */ +#define ICMP_USED 1 /* entry is being used */ +#define ICMP_RECV 2 /* entry has a process waiting */ + +#define ICMP_HDR_LEN 8 /* bytes in an ICMP header */ + +/* ICMP message types for ping */ + +#define ICMP_ECHOREPLY 0 /* ICMP Echo Reply message */ +#define ICMP_ECHOREQST 8 /* ICMP Echo Request message */ + +/* table of processes that are waiting for ping replies */ + +struct icmpentry { /* entry in the ICMP table */ + int32 icstate; /* state of entry: free/used */ + uint32 icremip; /* remote IP address */ + int32 ichead; /* index of next packet to read */ + int32 ictail; /* index of next slot to insert */ + int32 iccount; /* count of packets enqueued */ + pid32 icpid; /* ID of waiting process */ + struct netpacket *icqueue[ICMP_QSIZ];/* circular packet queue */ +}; + +extern struct icmpentry icmptab[]; /* table of UDP endpoints */ diff --git a/include/icu.h b/include/icu.h new file mode 100644 index 0000000..2e2f5b2 --- /dev/null +++ b/include/icu.h @@ -0,0 +1,9 @@ +/* icu.h */ + +#define ICU1 0x20 /* I/O port address, 8259A #1 */ +#define ICU2 0xA0 /* I/O port address, 8258A #2 */ + +#define OCR ICU1 /* Operation Command Register */ +#define IMR (ICU1+1) /* Interrupt Mask Register */ + +#define EOI 0x20 /* non-specific end of interrupt */ diff --git a/include/interrupt.h b/include/interrupt.h new file mode 100644 index 0000000..19800aa --- /dev/null +++ b/include/interrupt.h @@ -0,0 +1,58 @@ +/* interrupt.h */ + + +#ifndef _INTERRUPT_H_ +#define _INTERRUPT_H_ +extern uint16 girmask; /* mask of interrupts being serviced */ + /* a bit of 1 corresponds to an */ + /* interrupt that is allowed. */ + +struct intc_bank { + uint32 itr; + uint32 mir; + uint32 mir_clear; + uint32 mir_set; + uint32 isr_set; + uint32 isr_clear; + uint32 pending_irq; + uint32 pending_fiq; +}; + +struct intc_csreg { + uint32 revision; + uint32 res1[3]; + uint32 sysconfig; + uint32 sysstatus; + uint32 res2[10]; + uint32 sir_irq; + uint32 sir_fiq; + uint32 control; + uint32 protection; + uint32 idle; + uint32 res3[3]; + uint32 irq_priority; + uint32 fiq_priority; + uint32 threshold; + uint32 res4[5]; + struct intc_bank banks[4]; + uint32 ilr[128]; +}; + +typedef interrupt (*interrupt_handler_t)(void); + +extern interrupt_handler_t interruptVector[]; + +void enable(void); +intmask disable(void); +void restore(intmask); +void enable_irq(intmask); +void disable_irq(intmask); + +#define INTC_SYSCONFIG_SOFTRESET 0x00000002 +#define INTC_SYSSTATUS_RESETDONE 0x00000001 + +#define INTC_SIR_IRQ_MASK 0x0000007F + +#define INTC_CONTROL_NEWIRQAGR 0x00000001 + +#endif diff --git a/include/ip.h b/include/ip.h new file mode 100644 index 0000000..0b2aa0f --- /dev/null +++ b/include/ip.h @@ -0,0 +1,25 @@ +/* ip.h - Constants related to Internet Protocol version 4 (IPv4) */ + +#define IP_BCAST 0xffffffff /* IP local broadcast address */ +#define IP_THIS 0xffffffff /* "this host" src IP address */ +#define IP_ALLZEROS 0x00000000 /* The all-zeros IP address */ + +#define IP_ICMP 1 /* ICMP protocol type for IP */ +#define IP_UDP 17 /* UDP protocol type for IP */ + +#define IP_ASIZE 4 /* Bytes in an IP address */ +#define IP_HDR_LEN 20 /* Bytes in an IP header */ +#define IP_VH 0x45 /* IP version and hdr length */ + +#define IP_OQSIZ 8 /* Size of IP output queue */ + +/* Queue of outgoing IP packets waiting for ipout process */ + +struct iqentry { + int32 iqhead; /* Index of next packet to send */ + int32 iqtail; /* Index of next free slot */ + sid32 iqsem; /* Semaphore that counts pkts */ + struct netpacket *iqbuf[IP_OQSIZ];/* Circular packet queue */ +}; + +extern struct iqentry ipoqueue; /* Network output queue */ diff --git a/include/kernel.h b/include/kernel.h new file mode 100644 index 0000000..5bf6e95 --- /dev/null +++ b/include/kernel.h @@ -0,0 +1,73 @@ +/* kernel.h */ + +/* General type declarations used throughout the kernel */ + +typedef unsigned char byte; +typedef unsigned char uint8; +typedef int int32; +typedef short int16; +typedef unsigned int uint32; +typedef unsigned short uint16; +typedef unsigned long long uint64; + +/* Xinu-specific types */ + +typedef int32 sid32; /* semaphore ID */ +typedef int16 qid16; /* queue ID */ +typedef int32 pid32; /* process ID */ +typedef int32 did32; /* device ID */ +typedef int16 pri16; /* process priority */ +typedef uint32 umsg32; /* message passed among processes */ +typedef int32 bpid32; /* buffer pool ID */ +typedef byte bool8; /* Boolean type */ +typedef uint32 intmask; /* saved interrupt mask */ +typedef int32 ibid32; /* index block ID (used in file system) */ +typedef int32 dbid32; /* data block ID (used in file system) */ +typedef int32 uid32; /* ID for UDP table descriptor */ + +/* Function declaration return types */ + +typedef int32 syscall; /* system call declaration */ +typedef int32 devcall; /* device call declaration */ +typedef int32 shellcmd; /* shell command declaration */ +typedef int32 process; /* top-level function of a process */ +typedef void interrupt; /* interrupt procedure */ +typedef int32 status; /* returned status value (OK/SYSERR) */ + +#define local static /* Local procedure or variable declar. */ + +/* Boolean constants */ + +#define FALSE 0 /* Boolean False */ +#define TRUE 1 /* Boolean True */ + +/* Null pointer, character, and string definintions */ + +#define NULL 0 /* null pointer for linked lists */ +#define NULLCH '\0' /* null character */ +#define NULLSTR "" /* null string */ + +/* Universal return constants */ + +#define OK ( 1) /* normal system call return */ +#define SYSERR (-1) /* system call failed */ +#define EOF (-2) /* End-of-file (usually from read) */ +#define TIMEOUT (-3) /* system call timed out */ + +extern qid16 readylist; /* global ID for list of ready processes*/ + +#define MINSTK 400 /* minimum stack size in bytes */ + +#define CONTEXT 64 /* bytes in a function call context on */ + /* the run-time stack */ +#define QUANTUM 2 /* time slice in milliseconds */ + +/* Size of the stack for the null process */ + +#define NULLSTK 8192 /* stack size for null process */ + +//#define MMU +/* Prototypes of I/O functions used throughout the kernel */ +//syscall kprintf(char *fmt, ...); +//syscall kputc(byte); +//syscall kgetc(void); diff --git a/include/lfilesys.h b/include/lfilesys.h new file mode 100644 index 0000000..82f3a87 --- /dev/null +++ b/include/lfilesys.h @@ -0,0 +1,167 @@ +/* lfilesys.h - ib2sect, ib2disp */ + +/************************************************************************/ +/* */ +/* Local File System Data Structures */ +/* */ +/* A local file system uses a random-access disk composed of 512-byte */ +/* sectors numbered 0 through N-1. We assume disk hardware can read or */ +/* write any sector at random, but must transfer an entire sector. */ +/* Thus, to write a few bytes, the file system must read the sector, */ +/* replace the bytes, and then write the sector back to disk. Xinu's */ +/* local file system divides the disk as follows: sector 0 is a */ +/* directory, the next K sectors constitute an index area, and the */ +/* remaining sectors comprise a data area. The data area is easiest to */ +/* understand: each sector holds one data block (d-block) that stores */ +/* contents from one of the files (or is on a free list of unused data */ +/* blocks). We think of the index area as holding an array of index */ +/* blocks (i-blocks) numbered 0 through I-1. A given sector in the */ +/* index area holds 7 of the index blocks, which are each 72 bytes */ +/* long. Given an i-block number, the file system must calculate the */ +/* disk sector in which the i-block is located and the byte offset */ +/* within the sector at which the i-block resides. Internally, a file */ +/* is known by the i-block index of the first i-block for the file. */ +/* The directory contains a list of file names and the i-block number */ +/* of the first i-block for the file. The directory also holds the */ +/* i-block number for a list of free i-blocks and a data block number */ +/* of the first data block on a list of free data blocks. */ +/* */ +/************************************************************************/ + +#ifndef Nlfl +#define Nlfl 1 +#endif + +/* Use the remote disk device if no disk is defined (file system */ +/* *assumes* the underlying disk has a block size of 512 bytes) */ + +#ifndef LF_DISK_DEV +#define LF_DISK_DEV SYSERR +#endif + +#define LF_MODE_R F_MODE_R /* Mode bit for "read" */ +#define LF_MODE_W F_MODE_W /* Mode bit for "write" */ +#define LF_MODE_RW F_MODE_RW /* Mode bits for "read or write"*/ +#define LF_MODE_O F_MODE_O /* Mode bit for "old" */ +#define LF_MODE_N F_MODE_N /* Mode bit for "new" */ + +#define LF_BLKSIZ 512 /* Assumes 512-byte disk blocks */ +#define LF_NAME_LEN 16 /* Length of name plus null */ +#define LF_NUM_DIR_ENT 20 /* Num. of files in a directory */ + +#define LF_FREE 0 /* Slave device is available */ +#define LF_USED 1 /* Slave device is in use */ + +#define LF_INULL (ibid32) -1 /* Index block null pointer */ +#define LF_DNULL (dbid32) -1 /* Data block null pointer */ +#define LF_IBLEN 16 /* Data block ptrs per i-block */ +#define LF_IDATA 8192 /* Bytes of data indexed by a */ + /* single index block */ +#define LF_IMASK 0x00001fff /* Mask for the data indexed by */ + /* one index block (i.e., */ + /* bytes 0 through 8191). */ +#define LF_DMASK 0x000001ff /* Mask for the data in a data */ + /* block (0 through 511) */ + +#define LF_AREA_IB 1 /* First sector of i-blocks */ +#define LF_AREA_DIR 0 /* First sector of directory */ + +/* Structure of an index block on disk */ + +struct lfiblk { /* Format of index block */ + ibid32 ib_next; /* Address of next index block */ + uint32 ib_offset; /* First data byte of the file */ + /* Indexed by this i-block */ + dbid32 ib_dba[LF_IBLEN];/* Ptrs to data blocks indexed */ +}; + +/* Conversion functions below assume 7 index blocks per disk block */ + +/* Conversion between index block number and disk sector number */ + +#define ib2sect(ib) (((ib)/7)+LF_AREA_IB) + +/* Conversion between index block number and the relative offset within */ +/* a disk sector */ + +#define ib2disp(ib) (((ib)%7)*sizeof(struct lfiblk)) + + +/* Structure used in each directory entry for the local file system */ + +struct ldentry { /* Description of entry for one */ + /* file in the directory */ + uint32 ld_size; /* Curr. size of file in bytes */ + ibid32 ld_ilist; /* ID of first i-block for file */ + /* or IB_NULL for empty file */ + char ld_name[LF_NAME_LEN]; /* Null-terminated file name */ +}; + +/* Structure of a data block when on the free list on disk */ + +struct lfdbfree { + dbid32 lf_nextdb; /* Next data block on the list */ + char lf_unused[LF_BLKSIZ - sizeof(dbid32)]; +}; + +/* Format of the file system directory, either on disk or in memory */ + +#pragma pack(2) +struct lfdir { /* Entire directory on disk */ + dbid32 lfd_dfree; /* List of free d-blocks on disk*/ + ibid32 lfd_ifree; /* List of free i-blocks on disk*/ + int32 lfd_nfiles; /* Current number of files */ + struct ldentry lfd_files[LF_NUM_DIR_ENT]; /* Set of files */ + char padding[20]; /* Unused chars in directory blk*/ +}; +#pragma pack() + +/* Global data used by local file system */ + +struct lfdata { /* Local file system data */ + did32 lf_dskdev; /* Device ID of disk to use */ + sid32 lf_mutex; /* Mutex for the directory and */ + /* index/data free lists */ + struct lfdir lf_dir; /* In-memory copy of directory */ + bool8 lf_dirpresent; /* True when directory is in */ + /* memory (1st file is open) */ + bool8 lf_dirdirty; /* Has the directory changed? */ +}; + +/* Control block for local file pseudo-device */ + +struct lflcblk { /* Local file control block */ + /* (one for each open file) */ + byte lfstate; /* Is entry free or used */ + did32 lfdev; /* Device ID of this device */ + sid32 lfmutex; /* Mutex for this file */ + struct ldentry *lfdirptr; /* Ptr to file's entry in the */ + /* in-memory directory */ + int32 lfmode; /* Mode (read/write/both) */ + uint32 lfpos; /* Byte position of next byte */ + /* to read or write */ + char lfname[LF_NAME_LEN]; /* Name of the file */ + ibid32 lfinum; /* ID of current index block in */ + /* lfiblock or LF_INULL */ + struct lfiblk lfiblock; /* In-mem copy of current index */ + /* block */ + dbid32 lfdnum; /* Number of current data block */ + /* in lfdblock or LF_DNULL */ + char lfdblock[LF_BLKSIZ]; /* In-mem copy of current data */ + /* block */ + char *lfbyte; /* Ptr to byte in lfdblock or */ + /* address one beyond lfdblock*/ + /* if current file pos lies */ + /* outside lfdblock */ + bool8 lfibdirty; /* Has lfiblock changed? */ + bool8 lfdbdirty; /* Has lfdblock changed? */ +}; + +extern struct lfdata Lf_data; +extern struct lflcblk lfltab[]; + +/* Control functions */ + +#define LF_CTL_DEL F_CTL_DEL /* Delete a file */ +#define LF_CTL_TRUNC F_CTL_TRUNC /* Truncate a file */ +#define LF_CTL_SIZE F_CTL_SIZE /* Obtain the size of a file */ diff --git a/include/limits.h b/include/limits.h new file mode 100644 index 0000000..ed3a1cc --- /dev/null +++ b/include/limits.h @@ -0,0 +1,30 @@ +/** + * @file limits.h + * + * $Id: limits.h 2020 2009-08-13 17:50:08Z mschul $ + */ +/* Embedded Xinu, Copyright (C) 2009. All rights reserved. */ + +#ifndef _LIMITS_H_ +#define _LIMITS_H_ + +#define CHAR_BIT 8 /**< bits in a char */ +#define CHAR_MAX 127 /**< maximum value of char */ +#define CHAR_MIN (-128) /**< minimum value of char */ +#define SCHAR_MAX 127 /**< maximum value of signed char */ +#define SCHAR_MIN (-128) /**< minimum value of signed char */ +#define UCHAR_MAX 255 /**< maximum value of unsigned char */ + +#define INT_MAX 2147483647 /**< maximum value of int */ +#define INT_MIN (-INT_MAX-1) /**< minimum value of int */ +#define UINT_MAX (2U*INT_MAX+1) /**< maximum value of unsigned int */ + +#define LONG_MAX 2147483647 /**< maximum value of int32 */ +#define LONG_MIN (-LONG_MAX-1) /**< minimum value of int32 */ +#define ULONG_MAX (2UL*LONG_MAX+1) /**< maximum value of unsigned int32 */ + +#define SHRT_MAX 32767 /**< maximum value of int16 */ +#define SHRT_MIN (-SHRT_MAX-1) /**< minimum value of int16 */ +#define USHRT_MAX 65535 /**< maximum value of unsigned int16 */ + +#endif /* _LIMITS_H_ */ diff --git a/include/loopback.h b/include/loopback.h new file mode 100644 index 0000000..2998ffe --- /dev/null +++ b/include/loopback.h @@ -0,0 +1,50 @@ +/** + * @file loopback.h + * + */ +/* Embedded Xinu, Copyright (C) 2009. All rights reserved. */ + +#ifndef _LOOPBACK_H_ +#define _LOOPBACK_H_ + +#include +#include + +#define LOOP_BUFFER 1024 /**< loopback buffer length */ +#define NLOOPBACK 1 +/* LOOP device states */ +#define LOOP_STATE_FREE 0 +#define LOOP_STATE_ALLOC 1 + +/* loopbackControl() functions */ +#define LOOP_CTRL_SET_FLAG 0x01 /**< set flags */ +#define LOOP_CTRL_CLR_FLAG 0x02 /**< clear flags */ + +/* loopback flags */ +#define LOOP_NONBLOCK 0x01 /**< Reading and writing do not block */ + +/** + * Loopback device control block + */ +struct loopback +{ + int state; /**< LOOP_STATE_*above */ + int index; /**< index of first char in buffer */ + int flags; /**< loopback control flags */ + sid32 sem; /**< number of characters in buffer */ + uchar buffer[LOOP_BUFFER]; /**< input buffer */ +}; + +extern struct loopback looptab[]; + +/* Driver functions */ +devcall loopbackInit(struct dentry *); +devcall loopbackOpen(struct dentry *); +devcall loopbackClose(struct dentry *); +devcall loopbackRead(struct dentry *, void *, uint); +devcall loopbackWrite(struct dentry *, const void *, uint); +devcall loopbackGetc(struct dentry *); +devcall loopbackPutc(struct dentry *, char); +devcall loopbackControl(struct dentry *, int, long, long); + +#endif /* _LOOPBACK_H_ */ diff --git a/include/mark.h b/include/mark.h new file mode 100644 index 0000000..2579015 --- /dev/null +++ b/include/mark.h @@ -0,0 +1,16 @@ +/* mark.h - notmarked */ + +#define MAXMARK 20 /* Maximum number of marked locations */ + +extern int32 *(marks[]); +extern int32 nmarks; +extern sid32 mkmutex; +typedef int32 memmark[1]; /* Declare a memory mark to be an array */ + /* so user can reference the name */ + /* without a leading & */ + +/*------------------------------------------------------------------------ + * notmarked - Return nonzero if a location has not been marked + *------------------------------------------------------------------------ + */ +#define notmarked(L) (L[0]<0 || L[0]>=nmarks || marks[L[0]]!=L) diff --git a/include/memory.h b/include/memory.h new file mode 100644 index 0000000..7916cf9 --- /dev/null +++ b/include/memory.h @@ -0,0 +1,38 @@ +/* memory.h - roundmb, truncmb, freestk */ + +#define PAGE_SIZE 4096 + +/*---------------------------------------------------------------------- + * roundmb, truncmb - Round or truncate address to memory block size + *---------------------------------------------------------------------- + */ +#define roundmb(x) (char *)( (7 + (uint32)(x)) & (~7) ) +#define truncmb(x) (char *)( ((uint32)(x)) & (~7) ) + +/*---------------------------------------------------------------------- + * freestk -- Free stack memory allocated by getstk + *---------------------------------------------------------------------- + */ +#define freestk(p,len) freemem((char *)((uint32)(p) \ + - ((uint32)roundmb(len)) \ + + (uint32)sizeof(uint32)), \ + (uint32)roundmb(len) ) + +struct memblk { /* See roundmb & truncmb */ + struct memblk *mnext; /* Ptr to next free memory blk */ + uint32 mlength; /* Size of blk (includes memblk)*/ + }; +extern struct memblk memlist; /* Head of free memory list */ +extern void *minheap; /* Start of heap */ +extern void *maxheap; /* Highest valid heap address */ + + +/* Added by linker */ + +extern int text; /* Start of text segment */ +extern int etext; /* End of text segment */ +extern int data; /* Start of data segment */ +extern int edata; /* End of data segment */ +extern int bss; /* Start of bss segment */ +extern int ebss; /* End of bss segment */ +extern int end; /* End of program */ diff --git a/include/mmu.h b/include/mmu.h new file mode 100644 index 0000000..8603fbb --- /dev/null +++ b/include/mmu.h @@ -0,0 +1,11 @@ +#ifndef _MMU_H +#define _MMU_H + + +void initializeMMU_mmu(void); +void setPageTable(); +void setAccessControl(); +void enableMMU(); +void FlushTLB(); +void pageFaultHandler(); +#endif diff --git a/include/name.h b/include/name.h new file mode 100644 index 0000000..6dc9e38 --- /dev/null +++ b/include/name.h @@ -0,0 +1,19 @@ +/* name.h */ + +/* Constants that define the namespace mapping table sizes */ + +#define NM_PRELEN 64 /* Max size of a prefix string */ +#define NM_REPLLEN 96 /* Maximum size of a replacement*/ +#define NM_MAXLEN 256 /* Maximum size of a file name */ +#define NNAMES 40 /* Number of prefix definitions */ + +/* Definition of the name prefix table that defines all name mappings */ + +struct nmentry { /* Definition of prefix table */ + char nprefix[NM_PRELEN]; /* Null-terminated prefix */ + char nreplace[NM_REPLLEN]; /* Null-terminated replacement */ + did32 ndevice; /* Device descriptor for prefix */ +}; + +extern struct nmentry nametab[]; /* Table of name mappings */ +extern int32 nnames; /* Number of entries allocated */ diff --git a/include/net.h b/include/net.h new file mode 100644 index 0000000..5a876db --- /dev/null +++ b/include/net.h @@ -0,0 +1,67 @@ +/* net.h */ + +#define NETSTK 8192 /* Stack size for network setup */ +#define NETPRIO 500 /* Network startup priority */ +#define NETBOOTFILE 128 /* Size of the netboot filename */ + +/* Constants used in the networking code */ + +#define ETH_ARP 0x0806 /* Ethernet type for ARP */ +#define ETH_IP 0x0800 /* Ethernet type for IP */ +#define ETH_IPv6 0x86DD /* Ethernet type for IPv6 */ + +/* Format of an Ethernet packet carrying IPv4 and UDP */ + +#pragma pack(2) +struct netpacket { + byte net_ethdst[ETH_ADDR_LEN];/* Ethernet dest. MAC address */ + byte net_ethsrc[ETH_ADDR_LEN];/* Ethernet source MAC address */ + uint16 net_ethtype; /* Ethernet type field */ + byte net_ipvh; /* IP version and hdr length */ + byte net_iptos; /* IP type of service */ + uint16 net_iplen; /* IP total packet length */ + uint16 net_ipid; /* IP datagram ID */ + uint16 net_ipfrag; /* IP flags & fragment offset */ + byte net_ipttl; /* IP time-to-live */ + byte net_ipproto; /* IP protocol (actually type) */ + uint16 net_ipcksum; /* IP checksum */ + uint32 net_ipsrc; /* IP source address */ + uint32 net_ipdst; /* IP destination address */ + union { + struct { + uint16 net_udpsport; /* UDP source protocol port */ + uint16 net_udpdport; /* UDP destination protocol port*/ + uint16 net_udplen; /* UDP total length */ + uint16 net_udpcksum; /* UDP checksum */ + byte net_udpdata[1500-28];/* UDP payload (1500-above)*/ + }; + struct { + byte net_ictype; /* ICMP message type */ + byte net_iccode; /* ICMP code field (0 for ping) */ + uint16 net_iccksum; /* ICMP message checksum */ + uint16 net_icident; /* ICMP identifier */ + uint16 net_icseq; /* ICMP sequence number */ + byte net_icdata[1500-28];/* ICMP payload (1500-above)*/ + }; + }; +}; +#pragma pack() + +#define PACKLEN sizeof(struct netpacket) + +extern bpid32 netbufpool; /* ID of net packet buffer pool */ + +struct network { + uint32 ipucast; + uint32 ipbcast; + uint32 ipmask; + uint32 ipprefix; + uint32 iprouter; + uint32 bootserver; + bool8 ipvalid; + byte ethucast[ETH_ADDR_LEN]; + byte ethbcast[ETH_ADDR_LEN]; + char bootfile[NETBOOTFILE]; +}; + +extern struct network NetData; /* Local Network Interface */ diff --git a/include/platform.h b/include/platform.h new file mode 100644 index 0000000..ad4281f --- /dev/null +++ b/include/platform.h @@ -0,0 +1,92 @@ +/** + * @file platform.h + * + */ +/* Embedded Xinu, Copyright (C) 2009. All rights reserved. */ + +#ifndef _PLATFORM_H_ +#define _PLATFORM_H_ +#include +#include +#include + +/** Maximum length of platform name and family strings, including the + * null-terminator. */ +#define PLT_STRMAX 18 + +/** + * Various platform-specific parameters filled in at boot time by + * platforminit(). When platforminit() is called this structure will initially + * be all 0's. + */ +struct platform +{ + /** Name of the platform as a null-terminated string. It is + * platform-specific what is considered a "name" and what is considered a + * "family". */ + char name[PLT_STRMAX]; + + /** Family of the platform as a null-terminated string. It is + * platform-specific what is considered a "name" and what is considered a + * "family". */ + char family[PLT_STRMAX]; + + /** Minimum physical address available to the CPU. platforminit() can leave + * this value alone if available physical memory starts at 0. */ + void *minaddr; + + /** One byte past the last byte physically addressable by the CPU. Must be + * set by platforminit(). */ + void *maxaddr; + + /** Frequency of the system timer in cycles per second. Must be set by + * platforminit() if RTCLOCK is enabled. This is the frequency at which the + * values returned by clkcount() change. */ + ulong clkfreq; + + /** UART Divisor Latch LS. platforminit() only needs to set this if + * required by the UART driver. */ + uchar uart_dll; + + /** Number of the UART IRQ line. platforminit() only needs to set this if + * required by the UART driver. */ + uchar uart_irqnum; + + /** Low word of the board's serial number. Setting this is optional; it's + * currently only used by the SMSC LAN9512 driver. */ + uint serial_low; + + /** High word of the board's serial number. Setting this is optional; it's + * currently only used by the SMSC LAN9512 driver. */ + uint serial_high; +}; + +extern struct platform platform; + +/* Max RAM addresses */ +#define MAXADDR_DEFAULT 0x00800000 /**< default 8MB RAM */ +#define MAXADDR_WRT54G 0x00800000 /**< G has 8MB RAM */ +#define MAXADDR_WRT54GL 0x01000000 /**< GL has 16MB RAM */ +#define MAXADDR_WRT350N 0x02000000 /**< 350N has 32MB RAM */ +#define MAXADDR_WRT160NL 0x02000000 /**< 160NL has 32MB RAM */ + +/* Time Base Frequency */ +#define CLKFREQ_DEFAULT 100000000 +#define CLKFREQ_WRT54G 120000000 +#define CLKFREQ_WRT54GL 100000000 +#define CLKFREQ_WRT350N 150000000 +#define CLKFREQ_WRT160NL 200000000 + +/* UART DLL (Divisor Latch LS) */ +#define UART_DLL_DEFAULT 0x0B +#define UART_DLL_WRT54G 0x0E +#define UART_DLL_WRT54GL 0x0B +#define UART_DLL_WRT350N 0x29 + +/* Used internally by create() */ +void *setupStack(void *stackaddr, void *procaddr, + void *retaddr, uint nargs, va_list ap); + +int platforminit(void); + +#endif /* _PLATFORM_H_ */ diff --git a/include/ports.h b/include/ports.h new file mode 100644 index 0000000..52848d7 --- /dev/null +++ b/include/ports.h @@ -0,0 +1,29 @@ +/* ports.h - isbadport */ + +#define NPORTS 30 /* Maximum number of ports */ +#define PT_MSGS 100 /* Total messages in system */ +#define PT_FREE 1 /* Port is free */ +#define PT_LIMBO 2 /* Port is being deleted/reset */ +#define PT_ALLOC 3 /* Port is allocated */ + +struct ptnode { /* Node on list of messages */ + uint32 ptmsg; /* A one-word message */ + struct ptnode *ptnext; /* Pointer to next node on list */ +}; + +struct ptentry { /* Entry in the port table */ + sid32 ptssem; /* Sender semaphore */ + sid32 ptrsem; /* Receiver semaphore */ + uint16 ptstate; /* Port state (FREE/LIMBO/ALLOC)*/ + uint16 ptmaxcnt; /* Max messages to be queued */ + int32 ptseq; /* Sequence changed at creation */ + struct ptnode *pthead; /* List of message pointers */ + struct ptnode *pttail; /* Tail of message list */ +}; + +extern struct ptnode *ptfree; /* List of free nodes */ +extern struct ptentry porttab[]; /* Port table */ +extern int32 ptnextid; /* Next port ID to try when */ + /* looking for a free slot */ + +#define isbadport(portid) ( (portid)<0 || (portid)>=NPORTS ) diff --git a/include/process.h b/include/process.h new file mode 100644 index 0000000..a63e71a --- /dev/null +++ b/include/process.h @@ -0,0 +1,63 @@ +/* process.h - isbadpid */ + +/* Maximum number of processes in the system */ +#ifndef NPROC +#define NPROC 8 +#endif + +#define NUM_PAGE_TABLE_ENTRIES 4096 /* 1 entry per 1MB, so this covers 4G address space */ + +/* Process state constants */ + +#define PR_FREE 0 /* Process table entry is unused */ +#define PR_CURR 1 /* Process is currently running */ +#define PR_READY 2 /* Process is on ready queue */ +#define PR_RECV 3 /* Process waiting for message */ +#define PR_SLEEP 4 /* Process is sleeping */ +#define PR_SUSP 5 /* Process is suspended */ +#define PR_WAIT 6 /* Process is on semaphore queue */ +#define PR_RECTIM 7 /* Process is receiving with timeout */ + +/* Miscellaneous process definitions */ + +#define PNMLEN 16 /* Length of process "name" */ +#define NULLPROC 0 /* ID of the null process */ + +/* Process initialization constants */ + +#define INITSTK 65536 /* Initial process stack size */ +#define INITPRIO 20 /* Initial process priority */ +#define INITRET userret /* Address to which process returns */ + +/* Inline code to check process ID (assumes interrupts are disabled) */ + +#define isbadpid(x) ( ((pid32)(x) < 0) || \ + ((pid32)(x) >= NPROC) || \ + (proctab[(x)].prstate == PR_FREE)) + +/* Number of device descriptors a process can have open */ + +#define NDESC 5 /* must be odd to make procent 4N bytes */ + +/* Definition of the process table (multiple of 32 bits) */ + +struct procent { /* Entry in the process table */ + uint16 prstate; /* Process state: PR_CURR, etc. */ + pri16 prprio; /* Process priority */ + char *prstkptr; /* Saved stack pointer */ + char *prstkbase; /* Base of run time stack */ + uint32 prstklen; /* Stack length in bytes */ + char prname[PNMLEN]; /* Process name */ + sid32 prsem; /* Semaphore on which process waits */ + pid32 prparent; /* ID of the creating process */ + umsg32 prmsg; /* Message sent to this process */ + bool8 prhasmsg; /* Nonzero iff msg is valid */ + int16 prdesc[NDESC]; /* Device descriptors for process */ +}; + +/* Marker for the top of a process stack (used to help detect overflow) */ +#define STACKMAGIC 0x0A0AAAA9 +extern uint32 __attribute__((aligned(16384))) page_table[NPROC][NUM_PAGE_TABLE_ENTRIES]; +extern struct procent proctab[]; +extern int32 prcount; /* Currently active processes */ +extern pid32 currpid; /* Currently executing process */ diff --git a/include/prodcons.h b/include/prodcons.h new file mode 100644 index 0000000..e69de29 diff --git a/include/prototypes.h b/include/prototypes.h new file mode 100644 index 0000000..c4dbf2e --- /dev/null +++ b/include/prototypes.h @@ -0,0 +1,632 @@ +/* in file addargs.c */ +extern status addargs(pid32, int32, int32[], int32,char *, void *); + +/* in file am335x_eth_init.c */ +extern int32 am335x_eth_init(struct ethcblk *); + +/* in file arp.c */ + +extern void arp_init(); +extern status arp_resolve(uint32, byte[]); +extern void arp_in(struct arppacket *); +extern int32 arp_alloc(); +extern void arp_ntoh(struct arppacket *); +extern void arp_hton(struct arppacket *); + +/* in file ascdate.c */ + +extern status ascdate(uint32, char *); + +/* in file bufinit.c */ + +extern status bufinit(void); + +/* in file chprio.c */ + +extern pri16 chprio(pid32, pri16); + +/* in file clkupdate.S */ + +extern ulong clkcount(void); + +/* in file clkhandler.c */ + +extern interrupt clkhandler(void); + +/* in file clkinit.c */ + +extern void clkinit(void); + +/* in file clkint.S */ + +extern void clkint(void); + +/* in file close.c */ + +extern syscall close(did32); + +/* in file control.c */ + +extern syscall control(did32, int32, int32, int32); + +/* in file create.c */ + +extern pid32 create(void *, uint32, pri16, char *, uint32, ...); + +/* in file ctxsw.S */ + +extern void ctxsw(void *, void *); + +/* in file dhcp.c */ + +extern uint32 getlocalip(void); + +extern uint32 getlocalip_boot(uint32 *, char *, uint32 *); + +/* in file dot2ip.c */ + +extern uint32 dot2ip(char *, uint32 *); + +/* in file queue.c */ + +extern pid32 enqueue(pid32, qid16); + +/* in file intutils.S */ + +extern intmask disable(void); + +/* in file intutils.S */ + +extern void enable(void); + +/* in file ethcontrol.c */ +extern int32 ethcontrol(struct dentry *, int32, int32, int32); + +/* in file ethinit.c */ +extern int32 ethinit(struct dentry *); + +/* in file ethhandler.c */ +extern interrupt ethhandler(uint32); + +/* in file ethread.c */ +extern int32 ethread(struct dentry *, void *, uint32); + +/* in file ethwrite.c */ +extern int32 ethwrite(struct dentry *, void *, uint32); + +/* in file evec.c */ +extern int32 initevec(void); +extern int32 set_evec(uint32, uint32); +extern void trap(int32); + +/* in file exception.c */ +extern void exception(int32, int32*); + +/* in file freebuf.c */ +extern syscall freebuf(char *); + +/* in file freemem.c */ +extern syscall freemem(char *, uint32); + +/* in file getbuf.c */ +extern char *getbuf(bpid32); + +/* in file getc.c */ +extern syscall getc(did32); + +/* in file getitem.c */ +extern pid32 getfirst(qid16); + +/* in file getmem.c */ +extern char *getmem(uint32); + +/* in file getpid.c */ +extern pid32 getpid(void); + +/* in file getprio.c */ +extern syscall getprio(pid32); + +/* in file getstk.c */ +extern char *getstk(uint32); + +/* in file gettime.c */ +extern status gettime(uint32 *); + +/* in file getutime.c */ +extern status getutime(uint32 *); + +/* in file halt.S */ +extern void halt(void); + +/* in file icmp.c */ + +extern void icmp_init(void); +extern void icmp_in(struct netpacket *); +extern int32 icmp_register(uint32); +extern int32 icmp_recv(int32, char *, int32, uint32); +extern status icmp_send(uint32, uint16, uint16, uint16, char *, int32); +extern struct netpacket *icmp_mkpkt(uint32, uint16, uint16, uint16, char *, int32); +extern status icmp_release(int32); +extern uint16 icmp_cksum(char *, int32); +extern void icmp_hton(struct netpacket *); +extern void icmp_ntoh(struct netpacket *); + +/* in file init.c */ +extern syscall init(did32); + +/* in file initialize.c */ +extern int32 sizmem(void); + +/* in file insert.c */ +extern status insert(pid32, qid16, int32); + +/* in file insertd.c */ +extern status insertd(pid32, qid16, int32); + +/* in file intr.S */ +extern uint16 getirmask(void); + +/* in file ioerr.c */ +extern devcall ioerr(void); + +/* in file ionull.c */ +extern devcall ionull(void); + +/* in file ip.c */ + +extern void ip_in(struct netpacket *); +extern status ip_send(struct netpacket *); +extern void ip_local(struct netpacket *); +extern status ip_out(struct netpacket *); +extern int32 ip_route(uint32); +extern uint16 ipcksum(struct netpacket *); +extern void ip_ntoh(struct netpacket *); +extern void ip_hton(struct netpacket *); +extern process ipout(void); +extern status ip_enqueue(struct netpacket *); + +/* in file net.c */ + +extern void net_init(void); +extern process netin(); +extern process netout(void); +extern process rawin(void); +extern void eth_hton(struct netpacket *); +extern void eth_ntoh(struct netpacket *); + +/* in file netstart.c */ + +extern void netstart(char *,char *); + +/* in file kill.c */ + +extern syscall kill(pid32); + +/* in file lexan.c */ + +extern int32 lexan(char *, int32, char *, int32 *, int32 [], int32 []); + +/* in file lfibclear.c */ + +extern void lfibclear(struct lfiblk *, int32); + +/* in file lfibget.c */ + +extern void lfibget(did32, ibid32, struct lfiblk *); + +/* in file lfibput.c */ +extern status lfibput(did32, ibid32, struct lfiblk *); + +/* in file lfdbfree.c */ +extern status lfdbfree(did32, dbid32); + +/* in file lfdballoc.c */ +extern dbid32 lfdballoc(struct lfdbfree *); + +/* in file lfflush.c */ +extern status lfflush(struct lflcblk *); + +/* in file lfgetmode.c */ +extern int32 lfgetmode(char *); + +/* in file lfiballoc.c */ +extern ibid32 lfiballoc(void); + +/* in file lflclose.c */ +extern devcall lflclose(struct dentry *); + +/* in file lflcontrol.c */ +extern devcall lflcontrol(struct dentry *, int32, int32, int32); + +/* in file lflgetc.c */ +extern devcall lflgetc(struct dentry *); + +/* in file lflinit.c */ +extern devcall lflinit(struct dentry *); + +/* in file lflputc.c */ +extern devcall lflputc(struct dentry *, char); + +/* in file lflread.c */ +extern devcall lflread(struct dentry *, char *, int32); + +/* in file lflseek.c */ +extern devcall lflseek(struct dentry *, uint32); + +/* in file lflwrite.c */ +extern devcall lflwrite(struct dentry *, char *, int32); + +/* in file lfscreate.c */ +extern status lfscreate(did32, ibid32, uint32); + +/* in file lfsinit.c */ +extern devcall lfsinit(struct dentry *); + +/* in file lfsopen.c */ +extern devcall lfsopen(struct dentry *, char *, char *); + +/* in file lfsetup.c */ +extern status lfsetup(struct lflcblk *); + +/* in file lftruncate.c */ +extern status lftruncate(struct lflcblk *); + +/* in file lpgetc.c */ +extern devcall lpgetc(struct dentry *); + +/* in file lpinit.c */ +extern devcall lpinit(struct dentry *); + +/* in file lpopen.c */ +extern devcall lpopen(struct dentry *, char *, char *); + +/* in file lpputc.c */ +extern devcall lpputc(struct dentry *, char); + +/* in file lpread.c */ +extern devcall lpread(struct dentry *, char *, int32); + +/* in file lpwrite.c */ +extern devcall lpwrite(struct dentry *, char *, int32); + +/* in file mark.c */ +extern void _mkinit(void); + +/* in file memcpy.c */ +extern void *memcpy(void *, const void *, int32); + +/* in file memcpy.c */ +extern int32 *memcmp(void *, const void *, int32); + +/* in file memset.c */ +extern void *memset(void *, const int, int32); + +/* in file mkbufpool.c */ +extern bpid32 mkbufpool(int32, int32); + +/* in file mount.c */ +extern syscall mount(char *, char *, did32); +extern int32 namlen(char *, int32); + +/* in file naminit.c */ +extern status naminit(void); + +/* in file nammap.c */ +extern devcall nammap(char *, char[], did32); +extern did32 namrepl(char *, char[]); +extern status namcpy(char *, char *, int32); + +/* in file namopen.c */ +extern devcall namopen(struct dentry *, char *, char *); + +/* in file newqueue.c */ +extern qid16 newqueue(void); + +/* in file open.c */ +extern syscall open(did32, char *, char *); + +/* in file panic.c */ +extern void panic(char *); + +/* in file pci.c */ +extern int32 pci_init(void); + +/* in file pdump.c */ +extern void pdump(struct netpacket *); +extern void pdumph(struct netpacket *); + +/* in file platinit.c */ +extern void platinit(void); + +/* in file ptclear.c */ +extern void _ptclear(struct ptentry *, uint16, int32 (*)(int32)); + +/* in file ptcount.c */ +extern int32 ptcount(int32); + +/* in file ptcreate.c */ +extern syscall ptcreate(int32); + +/* in file ptdelete.c */ +extern syscall ptdelete(int32, int32 (*)(int32)); + +/* in file ptinit.c */ +extern syscall ptinit(int32); + +/* in file ptrecv.c */ +extern uint32 ptrecv(int32); + +/* in file ptreset.c */ +extern syscall ptreset(int32, int32 (*)(int32)); + +/* in file ptsend.c */ +extern syscall ptsend(int32, umsg32); + +/* in file putc.c */ +extern syscall putc(did32, char); + +/* in file ramclose.c */ +extern devcall ramclose(struct dentry *); + +/* in file raminit.c */ +extern devcall raminit(struct dentry *); + +/* in file ramopen.c */ +extern devcall ramopen(struct dentry *, char *, char *); + +/* in file ramread.c */ +extern devcall ramread(struct dentry *, char *, int32); + +/* in file ramwrite.c */ +extern devcall ramwrite(struct dentry *, char *, int32); + +/* in file rdsclose.c */ +extern devcall rdsclose(struct dentry *); + +/* in file rdscontrol.c */ +extern devcall rdscontrol(struct dentry *, int32, int32, int32); + +/* in file rdsinit.c */ +extern devcall rdsinit(struct dentry *); + +/* in file rdsopen.c */ +extern devcall rdsopen(struct dentry *, char *, char *); + +/* in file rdsread.c */ +extern devcall rdsread(struct dentry *, char *, int32); + +/* in file rdswrite.c */ +extern devcall rdswrite(struct dentry *, char *, int32); + +/* in file rdsbufalloc.c */ +extern struct rdbuff * rdsbufalloc(struct rdscblk *); + +/* in file rdscomm.c */ +extern status rdscomm(struct rd_msg_hdr *, int32, struct rd_msg_hdr *, + int32, struct rdscblk *); + +/* in file rdsprocess.c */ +extern void rdsprocess(struct rdscblk *); + +/* in file read.c */ +extern syscall read(did32, char *, uint32); + +/* in file ready.c */ +extern status ready(pid32); + +/* in file receive.c */ +extern umsg32 receive(void); + +/* in file recvclr.c */ +extern umsg32 recvclr(void); + +/* in file recvtime.c */ +extern umsg32 recvtime(int32); + +/* in file resched.c */ +extern void resched(void); + +/* in file intutils.S */ +extern void restore(intmask); + +/* in file resume.c */ +extern pri16 resume(pid32); + +/* in file rfsgetmode.c */ +extern int32 rfsgetmode(char * ); + +/* in file rflclose.c */ +extern devcall rflclose(struct dentry *); + +/* in file rfscontrol.c */ +extern devcall rfscontrol(struct dentry *, int32, int32, int32); + +/* in file rflgetc.c */ +extern devcall rflgetc(struct dentry *); + +/* in file rflinit.c */ +extern devcall rflinit(struct dentry *); + +/* in file rflputc.c */ +extern devcall rflputc(struct dentry *, char ); + +/* in file rflread.c */ +extern devcall rflread(struct dentry *, char *, int32 ); + +/* in file rflseek.c */ +extern devcall rflseek(struct dentry *, uint32 ); + +/* in file rflwrite.c */ +extern devcall rflwrite(struct dentry *, char *, int32 ); + +/* in file rfsndmsg.c */ +extern status rfsndmsg(uint16, char *); + +/* in file rfsinit.c */ +extern devcall rfsinit(struct dentry *); + +/* in file rfsopen.c */ +extern devcall rfsopen(struct dentry *devptr, char *, char *); + +/* in file rfscomm.c */ +extern int32 rfscomm(struct rf_msg_hdr *, int32, struct rf_msg_hdr *, int32); + +/* in file rdsclose.c */ +extern devcall rdsclose(struct dentry *); + +/* in file rdscontrol.c */ +extern devcall rdscontrol(struct dentry *, int32, int32, int32); + +/* in file rdsinit.c */ +extern devcall rdsinit(struct dentry *); + +/* in file rdsopen.c */ +extern devcall rdsopen(struct dentry *, char *, char *); + +/* in file rdsread.c */ +extern devcall rdsread(struct dentry *, char *, int32); + +/* in file rdswrite.c */ +extern devcall rdswrite(struct dentry *, char *, int32); + +/* in file rdsbufalloc.c */ +extern struct rdbuff * rdsbufalloc(struct rdscblk *); + +/* in file rdscomm.c */ +extern status rdscomm(struct rd_msg_hdr *, int32, struct rd_msg_hdr *, int32, struct rdscblk *); + +/* in file rdsprocess.c */ +extern void rdsprocess(struct rdscblk *); + +/* in file resched.c */ +extern status resched_cntl(int32); + +/* in file seek.c */ +extern syscall seek(did32, uint32); + +/* in file semcount.c */ +extern syscall semcount(sid32); + +/* in file semcreate.c */ +extern sid32 semcreate(int32); + +/* in file semdelete.c */ +extern syscall semdelete(sid32); + +/* in file semreset.c */ +extern syscall semreset(sid32, int32); + +/* in file send.c */ +extern syscall send(pid32, umsg32); + +/* in file shell.c */ +extern process shell(did32); + +/* in file signal.c */ +extern syscall signal(sid32); + +/* in file signaln.c */ +extern syscall signaln(sid32, int32); + +/* in file sleep.c */ +extern syscall sleepms(uint32); +extern syscall sleep(uint32); + +/* in file start.S */ +extern int32 inb(int32); +extern int32 inw(int32); +extern int32 inl(int32); +extern int32 outb(int32, int32); +extern int32 outw(int32, int32); +extern int32 outl(int32, int32); +extern int32 outsw(int32, int32, int32); +extern int32 insw(int32, int32 ,int32); + +/* in file suspend.c */ +extern syscall suspend(pid32); + +/* in file ttycontrol.c */ +extern devcall ttycontrol(struct dentry *, int32, int32, int32); + +/* in file ttygetc.c */ +extern devcall ttygetc(struct dentry *); + +/* in file ttyhandle_in.c */ +extern void ttyhandle_in(struct ttycblk *, struct uart_csreg *); + +/* in file ttyhandle_out.c */ +extern void ttyhandle_out(struct ttycblk *, struct uart_csreg *); + +/* in file ttyhandler.c */ +extern void ttyhandler(uint32); + +/* in file ttyinit.c */ +extern devcall ttyinit(struct dentry *); + +/* in file ttykickout.c */ +extern void ttykickout(struct uart_csreg *); + +/* in file ttyputc.c */ +extern devcall ttyputc(struct dentry *, char); + +/* in file ttyread.c */ +extern devcall ttyread(struct dentry *, char *, int32); + +/* in file ttywrite.c */ +extern devcall ttywrite(struct dentry *, char *, int32); + +/* in file udp.c */ + +extern void udp_init(void); +extern void udp_in(struct netpacket *); +extern uid32 udp_register(uint32, uint16, uint16); +extern int32 udp_recv(uid32, char *, int32, uint32); +extern int32 udp_recvaddr(uid32, uint32 *, uint16 *, char *, int32, uint32); +extern status udp_send(uid32, char *, int32); +extern status udp_sendto(uid32, uint32, uint16, char *, int32); +extern status udp_release(uid32); +extern void udp_ntoh(struct netpacket *); +extern void udp_hton(struct netpacket *); + + +/* in file unsleep.c */ +extern syscall unsleep(pid32); + +/* in file userret.c */ +extern void userret(void); + +/* in file wait.c */ +extern syscall wait(sid32); + +/* in file wakeup.c */ +extern void wakeup(void); + +/* in file write.c */ +extern syscall write(did32, char *, uint32); + +/* in file xdone.c */ +extern void xdone(void); + +/* in file yield.c */ +extern syscall yield(void); + +/* NETWORK BYTE ORDER CONVERSION NOT NEEDED ON A BIG-ENDIAN COMPUTER */ +#define htons(x) ( ( 0xff & ((x)>>8) ) | ( (0xff & (x)) << 8 ) ) +#define htonl(x) ( (((x)>>24) & 0x000000ff) | (((x)>> 8) & 0x0000ff00) | \ + (((x)<< 8) & 0x00ff0000) | (((x)<<24) & 0xff000000) ) +#define ntohs(x) ( ( 0xff & ((x)>>8) ) | ( (0xff & (x)) << 8 ) ) +#define ntohl(x) ( (((x)>>24) & 0x000000ff) | (((x)>> 8) & 0x0000ff00) | \ + (((x)<< 8) & 0x00ff0000) | (((x)<<24) & 0xff000000) ) + + +devcall loopbackInit(struct dentry *); +devcall loopbackOpen(struct dentry *); +devcall loopbackClose(struct dentry *); +devcall loopbackRead(struct dentry *, void *, uint); +devcall loopbackWrite(struct dentry *, const void *, uint); +devcall loopbackGetc(struct dentry *); +devcall loopbackPutc(struct dentry *, char); +devcall loopbackControl(struct dentry *, int, long, long); + +syscall kputc(uchar c, struct dentry *devptr); + diff --git a/include/queue.h b/include/queue.h new file mode 100644 index 0000000..956258e --- /dev/null +++ b/include/queue.h @@ -0,0 +1,36 @@ +/* queue.h - firstid, firstkey, isempty, lastkey, nonempty */ + +/* Queue structure declarations, constants, and inline functions */ + +/* Default # of queue entries: 1 per process plus 2 for ready list plus */ +/* 2 for sleep list plus 2 per semaphore */ +#ifndef NQENT +#define NQENT (NPROC + 4 + NSEM + NSEM) +#endif + +#define EMPTY (-1) /* Null value for qnext or qprev index */ +#define MAXKEY 0x7FFFFFFF /* Max key that can be stored in queue */ +#define MINKEY 0x80000000 /* Min key that can be stored in queue */ + +struct qentry { /* One per process plus two per list */ + int32 qkey; /* Key on which the queue is ordered */ + qid16 qnext; /* Index of next process or tail */ + qid16 qprev; /* Index of previous process or head */ +}; + +extern struct qentry queuetab[]; + +/* Inline queue manipulation functions */ + +#define queuehead(q) (q) +#define queuetail(q) ((q) + 1) +#define firstid(q) (queuetab[queuehead(q)].qnext) +#define lastid(q) (queuetab[queuetail(q)].qprev) +#define isempty(q) (firstid(q) >= NPROC) +#define nonempty(q) (firstid(q) < NPROC) +#define firstkey(q) (queuetab[firstid(q)].qkey) +#define lastkey(q) (queuetab[ lastid(q)].qkey) + +/* Inline to check queue id assumes interrupts are disabled */ + +#define isbadqid(x) (((int32)(x) < 0) || (int32)(x) >= NQENT-1) diff --git a/include/ramdisk.h b/include/ramdisk.h new file mode 100644 index 0000000..a5ee9d3 --- /dev/null +++ b/include/ramdisk.h @@ -0,0 +1,12 @@ +/* ramdisk.h - definitions for a ram disk (for testing) */ + +/* Ram disk block size */ + +#define RM_BLKSIZ 512 /* block size */ +#define RM_BLKS 200 /* number of blocks */ + +struct ramdisk { + char disk[RM_BLKSIZ * RM_BLKS]; + }; + +extern struct ramdisk Ram; diff --git a/include/rdisksys.h b/include/rdisksys.h new file mode 100644 index 0000000..21c1f54 --- /dev/null +++ b/include/rdisksys.h @@ -0,0 +1,235 @@ +/* rdisksys.h - definitions for remote disk system pseudo-devices */ + +#ifndef Nrds +#define Nrds 1 +#endif + +/* Remote disk block size */ + +#define RD_BLKSIZ 512 + +/* Global data for the remote disk server */ + +#ifndef RD_SERVER_IP +#define RD_SERVER_IP "255.255.255.255" +#endif + +#ifndef RD_SERVER_PORT +#define RD_SERVER_PORT 33124 +#endif + +#ifndef RD_LOC_PORT +#define RD_LOC_PORT 33124 /* Base port number - minor dev */ + /* number is added to insure */ + /* that each device is unique */ +#endif + +/* Control block for remote disk device */ + +#define RD_IDLEN 64 /* Size of a remote disk ID */ +#define RD_BUFFS 64 /* Number of disk buffers */ +#define RD_STACK 16384 /* Stack size for comm. process */ +#define RD_PRIO 200 /* Priorty of comm. process */ + +/* Constants for state of the device */ + +#define RD_FREE 0 /* Device is available */ +#define RD_OPEN 1 /* Device is open (in use) */ +#define RD_PEND 2 /* Open is pending */ + +/* Operations for request queue */ + +#define RD_OP_READ 1 /* Read operation on req. list */ +#define RD_OP_WRITE 2 /* Write operation on req. list */ +#define RD_OP_SYNC 3 /* Sync operation on req. list */ + +/* Status values for a buffer */ + +#define RD_VALID 0 /* Buffer contains valid data */ +#define RD_INVALID 1 /* Buffer does not contain data */ + +/* Definition of a buffer with a header that allows the same node to be */ +/* used as a request on the request queue, an item in the cache, or a */ +/* node on the free list of buffers */ + +struct rdbuff { /* Request list node */ + struct rdbuff *rd_next; /* Ptr to next node on a list */ + struct rdbuff *rd_prev; /* Ptr to prev node on a list */ + int32 rd_op; /* Operation - read/write/sync */ + int32 rd_refcnt; /* Reference count of processes */ + /* reading the block */ + uint32 rd_blknum; /* Block number of this block */ + int32 rd_status; /* Is buffer currently valid? */ + pid32 rd_pid; /* Process that initiated a */ + /* read request for the block */ + char rd_block[RD_BLKSIZ]; /* Space to hold one disk block */ +}; + +struct rdscblk { + int32 rd_state; /* State of device */ + char rd_id[RD_IDLEN]; /* Disk ID currently being used */ + int32 rd_seq; /* Next sequence number to use */ + /* Request queue head and tail */ + struct rdbuff *rd_rhnext; /* Head of request queue: next */ + struct rdbuff *rd_rhprev; /* and previous */ + struct rdbuff *rd_rtnext; /* Tail of request queue: next */ + struct rdbuff *rd_rtprev; /* (null) and previous */ + + /* Cache head and tail */ + + struct rdbuff *rd_chnext; /* Head of cache: next and */ + struct rdbuff *rd_chprev; /* previous */ + struct rdbuff *rd_ctnext; /* Tail of cache: next (null) */ + struct rdbuff *rd_ctprev; /* and previous */ + + /* Free list head (singly-linked) */ + + struct rdbuff *rd_free; /* Pointer to free list */ + + pid32 rd_comproc; /* Process ID of comm. process */ + bool8 rd_comruns; /* Has comm. process started? */ + sid32 rd_availsem; /* Semaphore ID for avail buffs */ + sid32 rd_reqsem; /* Semaphore ID for requests */ + uint32 rd_ser_ip; /* Server IP address */ + uint16 rd_ser_port; /* Server UDP port */ + uint16 rd_loc_port; /* Local (client) UPD port */ + bool8 rd_registered; /* Has UDP port been registered?*/ + int32 rd_udpslot; /* Registered UDP slot */ +}; + + +extern struct rdscblk rdstab[]; /* Remote disk control block */ + +/* Definitions of parameters used during server access */ + +#define RD_RETRIES 3 /* Times to retry sending a msg */ +#define RD_TIMEOUT 2000 /* Timeout for reply (2 seconds)*/ + +/* Control functions for a remote file pseudo device */ + +#define RDS_CTL_DEL 1 /* Delete (erase) an entire disk*/ +#define RDS_CTL_SYNC 2 /* Write all pending blocks */ + +/************************************************************************/ +/* Definition of messages exchanged with the remote disk server */ +/************************************************************************/ +/* Values for the type field in messages */ + +#define RD_MSG_RESPONSE 0x0100 /* Bit that indicates response */ + +#define RD_MSG_RREQ 0x0010 /* Read request and response */ +#define RD_MSG_RRES (RD_MSG_RREQ | RD_MSG_RESPONSE) + +#define RD_MSG_WREQ 0x0020 /* Write request and response */ +#define RD_MSG_WRES (RD_MSG_WREQ | RD_MSG_RESPONSE) + +#define RD_MSG_OREQ 0x0030 /* Open request and response */ +#define RD_MSG_ORES (RD_MSG_OREQ | RD_MSG_RESPONSE) + +#define RD_MSG_CREQ 0x0040 /* Close request and response */ +#define RD_MSG_CRES (RD_MSG_CREQ | RD_MSG_RESPONSE) + +#define RD_MSG_DREQ 0x0050 /* Delete request and response */ +#define RD_MSG_DRES (RD_MSG_DREQ | RD_MSG_RESPONSE) + +#define RD_MIN_REQ RD_MSG_RREQ /* Minimum request type */ +#define RD_MAX_REQ RD_MSG_DREQ /* Maximum request type */ + +/* Message header fields present in each message */ + +#define RD_MSG_HDR /* Common message fields */\ + uint16 rd_type; /* Message type */\ + uint16 rd_status; /* 0 in req, status in response */\ + uint32 rd_seq; /* Message sequence number */\ + char rd_id[RD_IDLEN]; /* Null-terminated disk ID */ + +/************************************************************************/ +/* Header */ +/************************************************************************/ +/* The standard header present in all messages with no extra fields */ +#pragma pack(2) +struct rd_msg_hdr { /* Header fields present in each*/ + RD_MSG_HDR /* remote file system message */ +}; +#pragma pack() + +/************************************************************************/ +/* Read */ +/************************************************************************/ +#pragma pack(2) +struct rd_msg_rreq { /* Remote file read request */ + RD_MSG_HDR /* Header fields */ + uint32 rd_blk; /* Block number to read */ +}; +#pragma pack() + +#pragma pack(2) +struct rd_msg_rres { /* Remote file read reply */ + RD_MSG_HDR /* Header fields */ + uint32 rd_blk; /* Block number that was read */ + char rd_data[RD_BLKSIZ]; /* Array containing one block */ +}; +#pragma pack() + +/************************************************************************/ +/* Write */ +/************************************************************************/ +#pragma pack(2) +struct rd_msg_wreq { /* Remote file write request */ + RD_MSG_HDR /* Header fields */ + uint32 rd_blk; /* Block number to write */ + char rd_data[RD_BLKSIZ]; /* Array containing one block */ +}; +#pragma pack() + +#pragma pack(2) +struct rd_msg_wres { /* Remote file write response */ + RD_MSG_HDR /* Header fields */ + uint32 rd_blk; /* Block number that was written*/ +}; +#pragma pack() + +/************************************************************************/ +/* Open */ +/************************************************************************/ +#pragma pack(2) +struct rd_msg_oreq { /* Remote file open request */ + RD_MSG_HDR /* Header fields */ +}; +#pragma pack() + +#pragma pack(2) +struct rd_msg_ores { /* Remote file open response */ + RD_MSG_HDR /* Header fields */ +}; +#pragma pack() + +/************************************************************************/ +/* Close */ +/************************************************************************/ +#pragma pack(2) +struct rd_msg_creq { /* Remote file close request */ + RD_MSG_HDR /* Header fields */ +}; +#pragma pack() + +#pragma pack(2) +struct rd_msg_cres { /* Remote file close response */ + RD_MSG_HDR /* Header fields */ +}; +#pragma pack() + +/************************************************************************/ +/* Delete */ +/************************************************************************/ +#pragma pack(2) +struct rd_msg_dreq { /* Remote file delete request */ + RD_MSG_HDR /* Header fields */ +}; +#pragma pack() + +#pragma pack(2) +struct rd_msg_dres { /* Remote file delete response */ + RD_MSG_HDR /* Header fields */ +}; +#pragma pack() diff --git a/include/resched.h b/include/resched.h new file mode 100644 index 0000000..04a9ead --- /dev/null +++ b/include/resched.h @@ -0,0 +1,16 @@ +/* resched.h */ + +/* Constants and variables related to deferred rescheduling */ + +#define DEFER_START 1 /* Start deferred rescehduling */ +#define DEFER_STOP 2 /* Stop deferred rescehduling */ + +/* Structure that collects items related to deferred rescheduling */ + +struct defer { + int32 ndefers; /* Number of outstanding defers */ + bool8 attempt; /* Was resched called during the */ + /* deferral period? */ +}; + +extern struct defer Defer; diff --git a/include/rfilesys.h b/include/rfilesys.h new file mode 100644 index 0000000..4ed7f32 --- /dev/null +++ b/include/rfilesys.h @@ -0,0 +1,292 @@ +/* rfilesys.h - Definitions for remote file system pseudo-devices */ + +#ifndef Nrfl +#define Nrfl 10 +#endif + +/* Control block for a remote file pseudo-device */ + +#define RF_NAMLEN 128 /* Maximum length of file name */ +#define RF_DATALEN 1024 /* Maximum data in read or write*/ +#define RF_MODE_R F_MODE_R /* Bit to grant read access */ +#define RF_MODE_W F_MODE_W /* Bit to grant write access */ +#define RF_MODE_RW F_MODE_RW /* Mask for read and write bits */ +#define RF_MODE_N F_MODE_N /* Bit for "new" mode */ +#define RF_MODE_O F_MODE_O /* Bit for "old" mode */ +#define RF_MODE_NO F_MODE_NO /* Mask for "n" and "o" bits */ + +/* Global data for the remote server */ + +#ifndef RF_SERVER_IP +#define RF_SERVER_IP "128.10.3.51" +#endif + +#ifndef RF_SERVER_PORT +#define RF_SERVER_PORT 33123 +#endif + +#ifndef RF_LOC_PORT +#define RF_LOC_PORT 33123 +#endif + +struct rfdata { + int32 rf_seq; /* Next sequence number to use */ + uint32 rf_ser_ip; /* Server IP address */ + uint16 rf_ser_port; /* Server UDP port */ + uint16 rf_loc_port; /* Local (client) UPD port */ + int32 rf_udp_slot; /* UDP slot to use */ + sid32 rf_mutex; /* Mutual exclusion for access */ + bool8 rf_registered; /* Has UDP port been registered?*/ +}; + +extern struct rfdata Rf_data; + +/* Definition of the control block for a remote file pseudo-device */ + +#define RF_FREE 0 /* Entry is currently unused */ +#define RF_USED 1 /* Entry is currently in use */ + +struct rflcblk { + int32 rfstate; /* Entry is free or used */ + int32 rfdev; /* Device number of this dev. */ + char rfname[RF_NAMLEN]; /* Name of the file */ + uint32 rfpos; /* Current file position */ + uint32 rfmode; /* Mode: read access, write */ + /* access or both */ +}; + +extern struct rflcblk rfltab[]; /* Remote file control blocks */ + +/* Definitions of parameters used when accessing a remote server */ + +#define RF_RETRIES 3 /* Time to retry sending a msg */ +#define RF_TIMEOUT 3000 /* Wait one second for a reply */ + +/* Control functions for a remote file pseudo device */ + +#define RFS_CTL_DEL F_CTL_DEL /* Delete a file */ +#define RFS_CTL_TRUNC F_CTL_TRUNC /* Truncate a file */ +#define RFS_CTL_MKDIR F_CTL_MKDIR /* Make a directory */ +#define RFS_CTL_RMDIR F_CTL_RMDIR /* Remove a directory */ +#define RFS_CTL_SIZE F_CTL_SIZE /* Obtain the size of a file */ + +/************************************************************************/ +/* */ +/* Definition of messages exchanged with the remote server */ +/* */ +/************************************************************************/ + +/* Values for the type field in messages */ + +#define RF_MSG_RESPONSE 0x0100 /* Bit that indicates response */ + +#define RF_MSG_RREQ 0x0001 /* Read Request and response */ +#define RF_MSG_RRES (RF_MSG_RREQ | RF_MSG_RESPONSE) + +#define RF_MSG_WREQ 0x0002 /* Write Request and response */ +#define RF_MSG_WRES (RF_MSG_WREQ | RF_MSG_RESPONSE) + +#define RF_MSG_OREQ 0x0003 /* Open request and response */ +#define RF_MSG_ORES (RF_MSG_OREQ | RF_MSG_RESPONSE) + +#define RF_MSG_DREQ 0x0004 /* Delete request and response */ +#define RF_MSG_DRES (RF_MSG_DREQ | RF_MSG_RESPONSE) + +#define RF_MSG_TREQ 0x0005 /* Truncate request & response */ +#define RF_MSG_TRES (RF_MSG_TREQ | RF_MSG_RESPONSE) + +#define RF_MSG_SREQ 0x0006 /* Size request and response */ +#define RF_MSG_SRES (RF_MSG_SREQ | RF_MSG_RESPONSE) + +#define RF_MSG_MREQ 0x0007 /* Mkdir request and response */ +#define RF_MSG_MRES (RF_MSG_MREQ | RF_MSG_RESPONSE) + +#define RF_MSG_XREQ 0x0008 /* Rmdir request and response */ +#define RF_MSG_XRES (RF_MSG_XREQ | RF_MSG_RESPONSE) + +#define RF_MIN_REQ RF_MSG_RREQ /* Minimum request type */ +#define RF_MAX_REQ RF_MSG_XREQ /* Maximum request type */ + +/* Message header fields present in each message */ + +#define RF_MSG_HDR /* Common message fields */\ + uint16 rf_type; /* Message type */\ + uint16 rf_status; /* 0 in req, status in response */\ + uint32 rf_seq; /* Message sequence number */\ + char rf_name[RF_NAMLEN]; /* Null-terminated file name */ + +/* The standard header present in all messages with no extra fields */ + +/************************************************************************/ +/* */ +/* Header */ +/* */ +/************************************************************************/ + +#pragma pack(2) +struct rf_msg_hdr { /* Header fields present in each*/ + RF_MSG_HDR /* remote file system message */ +}; +#pragma pack() + +/************************************************************************/ +/* */ +/* Read */ +/* */ +/************************************************************************/ + +#pragma pack(2) +struct rf_msg_rreq { /* Remote file read request */ + RF_MSG_HDR /* Header fields */ + uint32 rf_pos; /* Position in file to read */ + uint32 rf_len; /* Number of bytes to read */ + /* (between 1 and 1024) */ +}; +#pragma pack() + +#pragma pack(2) +struct rf_msg_rres { /* Remote file read reply */ + RF_MSG_HDR /* Header fields */ + uint32 rf_pos; /* Position in file */ + uint32 rf_len; /* Number of bytes that follow */ + /* (0 for EOF) */ + char rf_data[RF_DATALEN]; /* Array containing data from */ + /* the file */ +}; +#pragma pack() + +/************************************************************************/ +/* */ +/* Write */ +/* */ +/************************************************************************/ + +#pragma pack(2) +struct rf_msg_wreq { /* Remote file write request */ + RF_MSG_HDR /* Header fields */ + uint32 rf_pos; /* Position in file */ + uint32 rf_len; /* Number of valid bytes in */ + /* array that follows */ + char rf_data[RF_DATALEN]; /* Array containing data to be */ + /* written to the file */ +}; +#pragma pack() + +#pragma pack(2) +struct rf_msg_wres { /* Remote file write response */ + RF_MSG_HDR /* Header fields */ + uint32 rf_pos; /* Original position in file */ + uint32 rf_len; /* Number of bytes written */ +}; +#pragma pack() + +/************************************************************************/ +/* */ +/* Open */ +/* */ +/************************************************************************/ + +#pragma pack(2) +struct rf_msg_oreq { /* Remote file open request */ + RF_MSG_HDR /* Header fields */ + int32 rf_mode; /* Xinu mode bits */ +}; +#pragma pack() + +#pragma pack(2) +struct rf_msg_ores { /* Remote file open response */ + RF_MSG_HDR /* Header fields */ + int32 rf_mode; /* Xinu mode bits */ +}; +#pragma pack() + +/************************************************************************/ +/* */ +/* Size */ +/* */ +/************************************************************************/ + +#pragma pack(2) +struct rf_msg_sreq { /* Remote file size request */ + RF_MSG_HDR /* Header fields */ +}; +#pragma pack() + +#pragma pack(2) +struct rf_msg_sres { /* Remote file status response */ + RF_MSG_HDR /* Header fields */ + uint32 rf_size; /* Size of file in bytes */ +}; +#pragma pack() + +/************************************************************************/ +/* */ +/* Delete */ +/* */ +/************************************************************************/ + +#pragma pack(2) +struct rf_msg_dreq { /* Remote file delete request */ + RF_MSG_HDR /* Header fields */ +}; +#pragma pack() + +#pragma pack(2) +struct rf_msg_dres { /* Remote file delete response */ + RF_MSG_HDR /* Header fields */ +}; +#pragma pack() + +/************************************************************************/ +/* */ +/* Truncate */ +/* */ +/************************************************************************/ + +#pragma pack(2) +struct rf_msg_treq { /* Remote file truncate request */ + RF_MSG_HDR /* Header fields */ +}; +#pragma pack() + +#pragma pack(2) +struct rf_msg_tres { /* Remote file truncate response*/ + RF_MSG_HDR /* Header fields */ +}; +#pragma pack() + +/************************************************************************/ +/* */ +/* Mkdir */ +/* */ +/************************************************************************/ + +#pragma pack(2) +struct rf_msg_mreq { /* Remote file mkdir request */ + RF_MSG_HDR /* Header fields */ +}; +#pragma pack() + +#pragma pack(2) +struct rf_msg_mres { /* Remote file mkdir response */ + RF_MSG_HDR /* Header fields */ +}; +#pragma pack() + +/************************************************************************/ +/* */ +/* Rmdir */ +/* */ +/************************************************************************/ + +#pragma pack(2) +struct rf_msg_xreq { /* Remote file rmdir request */ + RF_MSG_HDR /* Header fields */ +}; +#pragma pack() + +#pragma pack(2) +struct rf_msg_xres { /* Remote file rmdir response */ + RF_MSG_HDR /* Header fields */ +}; +#pragma pack() diff --git a/include/sched.h b/include/sched.h new file mode 100644 index 0000000..ecab377 --- /dev/null +++ b/include/sched.h @@ -0,0 +1,16 @@ +/* sched.h */ + +/* Constants and variables related to deferred rescheduling */ + +#define DEFER_START 1 /* start deferred rescehduling */ +#define DEFER_STOP 2 /* stop deferred rescehduling */ + +/* Structure that collects items related to deferred rescheduling */ + +struct defer { + int32 ndefers; /* number of outstanding defers */ + bool8 attempt; /* was resched called during the */ + /* deferral period? */ +}; + +extern struct defer Defer; diff --git a/include/semaphore.h b/include/semaphore.h new file mode 100644 index 0000000..4be66a0 --- /dev/null +++ b/include/semaphore.h @@ -0,0 +1,22 @@ +/* semaphore.h - isbadsem */ + +#ifndef NSEM +#define NSEM 120 /* Number of semaphores, if not defined */ +#endif + +/* Semaphore state definitions */ + +#define S_FREE 0 /* Semaphore table entry is available */ +#define S_USED 1 /* Semaphore table entry is in use */ + +/* Semaphore table entry */ +struct sentry { + byte sstate; /* Whether entry is S_FREE or S_USED */ + int32 scount; /* Count for the semaphore */ + qid16 squeue; /* Queue of processes that are waiting */ + /* on the semaphore */ +}; + +extern struct sentry semtab[]; + +#define isbadsem(s) ((int32)(s) < 0 || (s) >= NSEM) diff --git a/include/shell.h b/include/shell.h new file mode 100644 index 0000000..2d48e3b --- /dev/null +++ b/include/shell.h @@ -0,0 +1,75 @@ +/* shell.h - Declarations and constants used by the Xinu shell */ + +/* Size constants */ + +#define SHELL_BUFLEN TY_IBUFLEN+1 /* Length of input buffer */ +#define SHELL_MAXTOK 32 /* Maximum tokens per line */ +#define SHELL_CMDSTK 8192 /* Size of stack for process */ + /* that executes command */ +#define SHELL_ARGLEN (SHELL_BUFLEN+SHELL_MAXTOK) /* Argument area */ +#define SHELL_CMDPRIO 20 /* Process priority for command */ + +/* Message constants */ + +/* Shell banner (assumes VT100) */ + +#define SHELL_BAN0 "\033[1;31m" +#define SHELL_BAN1 "------------------------------------------" +#define SHELL_BAN2 " __ __ _____ _ _ _ _ " +#define SHELL_BAN3 " \\ \\ / / |__ __| | \\ | | | | | | " +#define SHELL_BAN4 " \\ \\/ / | | | \\| | | | | | " +#define SHELL_BAN5 " / /\\ \\ _| |_ | \\ | | | | | " +#define SHELL_BAN6 " / / \\ \\ | | | | \\ | \\ -- / " +#define SHELL_BAN7 " -- -- ----- - - ---- " +#define SHELL_BAN8 "------------------------------------------" +#define SHELL_BAN9 "\033[0;39m\n" + +/* Messages shell displays for user */ + +#define SHELL_PROMPT "xsh $ " /* Command prompt */ +#define SHELL_STRTMSG "Welcome to Xinu!\n"/* Welcome message */ +#define SHELL_EXITMSG "Shell closed\n"/* Shell exit message */ +#define SHELL_SYNERRMSG "Syntax error\n"/* Syntax error message */ +#define SHELL_CREATMSG "Cannot create process\n"/* command error */ +#define SHELL_INERRMSG "Cannot open file %s for input\n" /* Input err */ +#define SHELL_OUTERRMSG "Cannot open file %s for output\n"/* Output err */ + /* Builtin cmd error message */ +#define SHELL_BGERRMSG "Cannot redirect I/O or background a builtin\n" + +/* Constants used for lexical analysis */ + +#define SH_NEWLINE '\n' /* New line character */ +#define SH_EOF '\04' /* Control-D is EOF */ +#define SH_AMPER '&' /* Ampersand character */ +#define SH_BLANK ' ' /* Blank character */ +#define SH_TAB '\t' /* Tab character */ +#define SH_SQUOTE '\'' /* Single quote character */ +#define SH_DQUOTE '"' /* Double quote character */ +#define SH_LESS '<' /* Less-than character */ +#define SH_GREATER '>' /* Greater-than character */ + +/* Token types */ + +#define SH_TOK_AMPER 0 /* Ampersand token */ +#define SH_TOK_LESS 1 /* Less-than token */ +#define SH_TOK_GREATER 2 /* Greater-than token */ +#define SH_TOK_OTHER 3 /* Token other than those */ + /* listed above (e.g., an */ + /* alphanumeric string) */ + +/* Shell return constants */ + +#define SHELL_OK 0 +#define SHELL_ERROR 1 +#define SHELL_EXIT -3 + +/* Structure of an entry in the table of shell commands */ + +struct cmdent { /* Entry in command table */ + char *cname; /* Name of command */ + bool8 cbuiltin; /* Is this a builtin command? */ + int32 (*cfunc)(int32,char*[]);/* Function for command */ +}; + +extern uint32 ncmd; +extern const struct cmdent cmdtab[]; diff --git a/include/shprototypes.h b/include/shprototypes.h new file mode 100644 index 0000000..658aedf --- /dev/null +++ b/include/shprototypes.h @@ -0,0 +1,80 @@ +/* in file xsh_argecho.c */ +extern shellcmd xsh_argecho (int32, char *[]); + +/* in file xsh_arp.c */ +extern shellcmd xsh_arp (int32, char *[]); + +/* in file xsh_bingid.c */ +extern shellcmd xsh_bingid (int32, char *[]); + +/* in file xsh_cat.c */ +extern shellcmd xsh_cat (int32, char *[]); + +/* in file xsh_clear.c */ +extern shellcmd xsh_clear (int32, char *[]); + +/* in file xsh_date.c */ +extern shellcmd xsh_date (int32, char *[]); + +/* in file xsh_devdump.c */ +extern shellcmd xsh_devdump (int32, char *[]); + +/* in file xsh_echo.c */ +extern shellcmd xsh_echo (int32, char *[]); + +/* in file xsh_ethstat.c */ +extern shellcmd xsh_ethstat (int32, char *[]); + +/* in file xsh_exit.c */ +extern shellcmd xsh_exit (int32, char *[]); + +/* in file xsh_help.c */ +extern shellcmd xsh_help (int32, char *[]); + +/* in file xsh_ipaddr.c */ +extern shellcmd xsh_ipaddr (int32, char *[]); + +/* in file xsh_kill.c */ +extern shellcmd xsh_kill (int32, char *[]); + +/* in file xsh_led.c */ +extern shellcmd xsh_led (int32, char *[]); + +/* in file xsh_memdump.c */ +extern shellcmd xsh_memdump (int32, char *[]); + +/* in file xsh_memstat.c */ +extern shellcmd xsh_memstat (int32, char *[]); + +/* in file xsh_nvram.c */ +extern shellcmd xsh_nvram (int32, char *[]); + +/* in file xsh_ping.c */ +extern shellcmd xsh_ping (int32, char *[]); + +/* in file xsh_ps.c */ +extern shellcmd xsh_ps (int32, char *[]); + +/* in file xsh_sleep.c */ +extern shellcmd xsh_sleep (int32, char *[]); + +/* in file xsh_udpdump.c */ +extern shellcmd xsh_udpdump (int32, char *[]); + +/* in file xsh_udpecho.c */ +extern shellcmd xsh_udpecho (int32, char *[]); + +/* in file xsh_udpeserver.c */ +extern shellcmd xsh_udpeserver (int32, char *[]); + +/* in file xsh_uptime.c */ +extern shellcmd xsh_uptime (int32, char *[]); + +/* in file xsh_help.c */ +extern shellcmd xsh_help (int32, char *[]); + +/* in file xsh_hello.c */ +extern shellcmd xsh_hello (int32, char *[]); + +/* in file xsh_mmu.c */ +extern shellcmd xsh_mmu (int32, char *[]); diff --git a/include/stdarg.h b/include/stdarg.h new file mode 100644 index 0000000..929d874 --- /dev/null +++ b/include/stdarg.h @@ -0,0 +1,15 @@ +/** + * @file stdarg.h + * @provides va_copy, va_start, va_arg, va_end. + * + * $Id: stdarg.h 2020 2009-08-13 17:50:08Z mschul $ + */ +/* Embedded Xinu, Copyright (C) 2009. All rights reserved. */ + +/* GCC-specific varargs */ +typedef __builtin_va_list va_list; + +#define va_copy(dst, src) __builtin_va_copy(dst, src) +#define va_start(last, va) __builtin_va_start(last, va) +#define va_arg(va, type) __builtin_va_arg(va, type) +#define va_end(va) __builtin_va_end(va) diff --git a/include/stddef.h b/include/stddef.h new file mode 100644 index 0000000..f26e041 --- /dev/null +++ b/include/stddef.h @@ -0,0 +1,12 @@ +/* stddef.h */ + +/* TEMPORARY */ + +/* Function declaration return types */ +typedef void exchandler; /**< exception procedure */ +typedef int message; /**< message passing content */ +typedef unsigned int uint; +typedef unsigned long ulong; +typedef unsigned char uchar; /**< unsigned char type */ +typedef char bool; /**< boolean type */ +typedef unsigned short ushort; /**< unsigned short type */ diff --git a/include/stdint.h b/include/stdint.h new file mode 100644 index 0000000..4327886 --- /dev/null +++ b/include/stdint.h @@ -0,0 +1,21 @@ +/** + * @file stdint.h + * + * Signed and unsigned integer types of exact width. + */ +/* Embedded Xinu, Copyright (C) 2013. All rights reserved. */ + +#ifndef _STDINT_H_ +#define _STDINT_H_ + +typedef signed char int8_t; +typedef short int16_t; +typedef int int32_t; +typedef long long int64_t; + +typedef unsigned char uint8_t; +typedef unsigned short uint16_t; +typedef unsigned int uint32_t; +typedef unsigned long long uint64_t; + +#endif /* _STDINT_H_ */ diff --git a/include/stdio.h b/include/stdio.h new file mode 100644 index 0000000..5f81903 --- /dev/null +++ b/include/stdio.h @@ -0,0 +1,34 @@ +/* stdio.h - definintions and constants for standard I/O functions */ + + +/* Prototypes for formatted input functions */ + +extern int32 _doscan(char *,int32 *, int32 (*)(void), + int32 (*)(char), int32, int32); +extern int32 sscanf(char *, char *, int32); +extern int32 fscanf(int32, char *, int32); +#define scanf(fmt, args) fscanf(CONSOLE, fmt, args) + + +/* Definintion of standard input/ouput/error used with shell commands */ + +#define stdin ((proctab[currpid]).prdesc[0]) +#define stdout ((proctab[currpid]).prdesc[1]) +#define stderr ((proctab[currpid]).prdesc[2]) + + +/* Prototypes for formatted output functions */ + +extern int32 fprintf(int, char *, ...); +extern int32 printf(const char *, ...); +extern int32 sprintf(char *, char *, ...); + + +/* Prototypes for character input and output functions */ + +extern int32 fgetc(int); +extern char *fgets(char *, int32, int32); +extern int32 fputc(int32, int32); +extern int32 fputs(char *, int32); +extern int32 putchar(int32 c); +extern int32 getchar(void); diff --git a/include/stdlib.h b/include/stdlib.h new file mode 100644 index 0000000..51d30ca --- /dev/null +++ b/include/stdlib.h @@ -0,0 +1,17 @@ +/** + * @file stdlib.h + * + * $Id: stdlib.h 2051 2009-08-27 20:55:09Z akoehler $ + */ +/* Embedded Xinu, Copyright (C) 2009. All rights reserved. */ + +int abs(int); +int32 labs(int32); +int atoi(char *); +int32 atol(char *); +void bzero(void *, int); +void qsort(char *, unsigned int, int, int (*)(void)); +uint32 rand(void); +void srand(unsigned int); +void *malloc(unsigned int nbytes); +void free(void *pmem); diff --git a/include/string.h b/include/string.h new file mode 100644 index 0000000..43ba7ec --- /dev/null +++ b/include/string.h @@ -0,0 +1,10 @@ +/* string.h */ + +extern char *strncpy(char *, const char *, int32); +extern char *strncat(char *, const char *, int32); +extern int32 strncmp(const char *, const char *, int32); +extern char *strchr(const char *, int32); +extern char *strrchr(const char *, int32); +extern char *strstr(const char *, const char *); +extern int32 strnlen(const char *, uint32); +extern int strlen(char *str); diff --git a/include/testsuite.h b/include/testsuite.h new file mode 100644 index 0000000..3ce0539 --- /dev/null +++ b/include/testsuite.h @@ -0,0 +1,38 @@ +/* testsuite.h - failif */ + +process test_addargs(bool8); +process test_bigargs(bool8); +process test_schedule(bool8 verbose); +process test_preempt(bool8 verbose); +process test_recursion(bool8 verbose); +process test_semaphore(bool8 verbose); +process test_semaphore2(bool8 verbose); +process test_semaphore3(bool8 verbose); +process test_semaphore4(bool8 verbose); +process test_semaphore5(bool8 verbose); +process test_libStdio(bool8 verbose); + +void testPass(bool8, const char *); +void testFail(bool8, const char *); +void testSkip(bool8, const char *); +void testPrint(bool8, const char *); + +/*------------------------------------------------------------------------ + * failif - report failure by displaying a message is condition is met + *------------------------------------------------------------------------ + */ +#define failif(cond, failmsg) \ + if ( cond ) { testFail(verbose, failmsg); passed = FALSE; } \ + else { testPass(verbose, ""); } + +/* Define the strcuture of an entry in the table of test cases */ + +struct testcase { + char *name; /* Name of test case */ + process (*test) (bool8);/* Test case function */ +}; + +extern int ntests; /* total number of tests */ +extern struct testcase testtab[]; /* table of test cases */ + +#define TESTSTK 8192 /* size of process stack used for test */ diff --git a/include/tftp.h b/include/tftp.h new file mode 100644 index 0000000..184d50a --- /dev/null +++ b/include/tftp.h @@ -0,0 +1,67 @@ +/* tftp.h - definitions for trivial file transfer protocol */ + +/* TFTP Packet Op codes */ +#define TFTP_RRQ 1 /* Read Request */ +#define TFTP_WRQ 2 /* Write Request */ +#define TFTP_DATA 3 /* Data Packet */ +#define TFTP_ACK 4 /* Acknowledgement */ +#define TFTP_ERROR 5 /* Error */ + +/* TFTP Error Codes */ +#define TFTP_ERROR_NOT_DEFINED 0 /* Not defined, see error message (if any). */ +#define TFTP_ERROR_FILE_NOT_FOUND 1 /* File not found. */ +#define TFTP_ERROR_ACCESS_VIOLATION 2 /* Access violation. */ +#define TFTP_ERROR_DISK_FULL 3 /* Disk full or allocation exceeded. */ +#define TFTP_ERROR_ILLEGAL_OP 4 /* Illegal TFTP operation. */ +#define TFTP_ERROR_UNKNOWN_TRANSFER_ID 5 /* Unknown transfer ID. */ +#define TFTP_ERROR_FILE_EXISTS 6 /* File already exists. */ +#define TFTP_ERROR_NO_SUCH_USER 7 /* No such user. */ + +#define TFTP_PORT 69 /* UDP Port for TFTP */ +#define TFTP_MAXNAM 64 /* Max length of a file name */ +#define TFTP_MAXDATA 512 /* Max size of a data packet */ +#define TFTP_MAXRETRIES 3 /* Number of retranmissions */ +#define TFTP_WAIT 5000 /* Time to wait for reply (ms) */ + +/* Xinu Specific Flags */ +#define TFTP_NON_VERBOSE 0 /* Do not use verbose output */ +#define TFTP_VERBOSE 1 /* Use verbose output */ + +/* Format of a TFTP message (items following opcode depend on msg type) */ + +#pragma pack(1) +struct tftp_msg { + uint16 tf_opcode; /* One of the opcodes above */ + union { + + /* Items in a RRQ or WRQ message */ + + struct { + char tf_filemode[TFTP_MAXNAM+10]; /* file name and mode */ + }; + + /* Items in a Data packet */ + + struct { + uint16 tf_dblk; /* Block number of this data */ + char tf_data[TFTP_MAXDATA]; /* Actual data */ + }; + + /* Items in an ACK packet */ + + struct { + uint16 tf_ablk; /* Block number being acked */ + }; + + /* Items in an Error packet */ + + struct { + uint16 tf_ercode; /* Integer error code */ + char tf_ermsg[TFTP_MAXDATA]; /* Error message */ + }; + }; +}; +#pragma pack() + +status tftpget(uint32 serverip, const char* filename, char* rcv_buf, uint32 rcv_buf_size, byte verbose); +status tftpget_mb(uint32 serverip, const char* filename, char** rcv_bufs, uint32* rcv_buf_sizes, uint32 rcv_buf_count, byte verbose); \ No newline at end of file diff --git a/include/tty.h b/include/tty.h new file mode 100644 index 0000000..c9d1bc6 --- /dev/null +++ b/include/tty.h @@ -0,0 +1,82 @@ +/* tty.h */ + +#define TY_OBMINSP 20 /* min space in buffer before */ + /* processes awakened to write */ +#define TY_EBUFLEN 20 /* size of echo queue */ + +/* Size constants */ + +#ifndef Ntty +#define Ntty 1 /* number of serial tty lines */ +#endif +#ifndef TY_IBUFLEN +#define TY_IBUFLEN 128 /* num. chars in input queue */ +#endif +#ifndef TY_OBUFLEN +#define TY_OBUFLEN 64 /* num. chars in output queue */ +#endif + +/* Mode constants for input and output modes */ + +#define TY_IMRAW 'R' /* raw mode => nothing done */ +#define TY_IMCOOKED 'C' /* cooked mode => line editing */ +#define TY_IMCBREAK 'K' /* honor echo, etc, no line edit*/ +#define TY_OMRAW 'R' /* raw mode => normal processing*/ + +struct ttycblk { /* tty line control block */ + char *tyihead; /* next input char to read */ + char *tyitail; /* next slot for arriving char */ + char tyibuff[TY_IBUFLEN]; /* input buffer (holds one line)*/ + sid32 tyisem; /* input semaphore */ + char *tyohead; /* next output char to xmit */ + char *tyotail; /* next slot for outgoing char */ + char tyobuff[TY_OBUFLEN]; /* output buffer */ + sid32 tyosem; /* output semaphore */ + char *tyehead; /* next echo char to xmit */ + char *tyetail; /* next slot to deposit echo ch */ + char tyebuff[TY_EBUFLEN]; /* echo buffer */ + char tyimode; /* input mode raw/cbreak/cooked */ + bool8 tyiecho; /* is input echoed? */ + bool8 tyieback; /* do erasing backspace on echo?*/ + bool8 tyevis; /* echo control chars as ^X ? */ + bool8 tyecrlf; /* echo CR-LF for newline? */ + bool8 tyicrlf; /* map '\r' to '\n' on input? */ + bool8 tyierase; /* honor erase character? */ + char tyierasec; /* erase character (backspace) */ + bool8 tyeof; /* honor EOF character? */ + char tyeofch; /* EOF character (usually ^D) */ + bool8 tyikill; /* honor line kill character? */ + char tyikillc; /* line kill character */ + int32 tyicursor; /* current cursor position */ + bool8 tyoflow; /* honor ostop/ostart? */ + bool8 tyoheld; /* output currently being held? */ + char tyostop; /* character that stops output */ + char tyostart; /* character that starts output */ + bool8 tyocrlf; /* output CR/LF for LF ? */ + char tyifullc; /* char to send when input full */ +}; +extern struct ttycblk ttytab[]; + +/* Characters with meaning to the tty driver */ + +#define TY_BACKSP '\b' /* Backspace character */ +#define TY_BELL '\07' /* Character for audible beep */ +#define TY_EOFCH '\04' /* Control-D is EOF on input */ +#define TY_BLANK ' ' /* Blank */ +#define TY_NEWLINE '\n' /* Newline == line feed */ +#define TY_RETURN '\r' /* Carriage return character */ +#define TY_STOPCH '\023' /* Control-S stops output */ +#define TY_STRTCH '\021' /* Control-Q restarts output */ +#define TY_KILLCH '\025' /* Control-U is line kill */ +#define TY_UPARROW '^' /* Used for control chars (^X) */ +#define TY_FULLCH TY_BELL /* char to echo when buffer full*/ + +/* Tty control function codes */ + +#define TC_NEXTC 3 /* look ahead 1 character */ +#define TC_MODER 4 /* set input mode to raw */ +#define TC_MODEC 5 /* set input mode to cooked */ +#define TC_MODEK 6 /* set input mode to cbreak */ +#define TC_ICHARS 8 /* return number of input chars */ +#define TC_ECHO 9 /* turn on echo */ +#define TC_NOECHO 10 /* turn off echo */ diff --git a/include/uart.h b/include/uart.h new file mode 100644 index 0000000..44d58b5 --- /dev/null +++ b/include/uart.h @@ -0,0 +1,232 @@ +/* uart.h - definintions for the NS16550 uart serial hardware */ +#ifndef _UART_H +#define _UART_H +#include +#define UART_BAUD 115200 /* Default console baud rate. */ +#define UART_OUT_IDLE 0x0016 /* determine if transmit idle */ +#define UART_FIFO_SIZE 64 /* chars in UART onboard output FIFO */ + /* (16 for later UART chips) */ +#define NUART 1 +/* + * Control and Status Register (CSR) definintions for the 16550 UART. + * The code maps the structure structure directly onto the base address + * CSR address for the device. + */ +struct uart_csreg +{ + volatile uint32 buffer; /* receive buffer (when read) */ + /* OR transmit hold (when written) */ + volatile uint32 ier; /* interrupt enable */ + volatile uint32 iir; /* interrupt identification (when read) */ + /* OR FIFO control (when written) */ + volatile uint32 lcr; /* line control register */ + volatile uint32 mcr; /* modem control register */ + volatile uint32 lsr; /* line status register */ + volatile uint32 msr; /* modem status register */ + volatile uint32 spr; /* scratch register */ + volatile uint32 mdr1; + volatile uint32 res[12];/* unused UART registers */ + /*volatile uint32 mdr2; + volatile uint32 res1[4]; + volatile uint32 uasr; + volatile uint32 res2; + volatile uint32 scr; + volatile uint32 ssr; + volatile uint32 res3[2]; + volatile uint32 mvr;*/ + volatile uint32 sysc; /* system configuration register */ + volatile uint32 syss; /* system status register */ + volatile uint32 wer; + volatile uint32 res4; + volatile uint32 rxfifo_lvl; + volatile uint32 txfifo_lvl; + volatile uint32 ier2; + volatile uint32 isr2; + volatile uint32 freq_sel; + volatile uint32 res5[2]; + volatile uint32 mdr3; + volatile uint32 tx_dma_thresh; +}; + +/* Alternative names for control and status registers */ + +#define rbr buffer /* receive buffer (when read) */ +#define thr buffer /* transmit hold (when written) */ +#define fcr iir /* FIFO control (when written) */ +#define dll buffer /* divisor latch (low byte) */ +#define dlm ier /* divisor latch (high byte) */ + +/* Definintion of individual bits in control and status registers */ + +/* Divisor values for baud rate */ + +#define UART_DLL 26 /* value for low byte of divisor latch */ + /* DLAB=0 */ +#define UART_DLM 0 /* value for high byte of divisor latch */ + /* DLAB=1 */ + +/* Line control bits */ + +#define UART_LCR_DLAB 0x80 /* Divisor latch access bit */ +#define UART_LCR_8N1 0x03 /* 8 bits, no parity, 1 stop */ + +/* Interrupt enable bits */ + +#define UART_IER_ERBFI 0x01 /* Received data interrupt mask */ +#define UART_IER_ETBEI 0x02 /* Transmitter buffer empty interrupt */ +#define UART_IER_ELSI 0x04 /* Recv line status interrupt mask */ +#define UART_IER_EMSI 0x08 /* Modem status interrupt mask */ + +/* Interrupt identification masks */ + +#define UART_IIR_IRQ 0x01 /* Interrupt pending bit */ +#define UART_IIR_IDMASK 0x0E /* 3-bit field for interrupt ID */ +#define UART_IIR_MSC 0x00 /* Modem status change */ +#define UART_IIR_THRE 0x02 /* Transmitter holding register empty */ +#define UART_IIR_RDA 0x04 /* Receiver data available */ +#define UART_IIR_RLSI 0x06 /* Receiver line status interrupt */ +#define UART_IIR_RTO 0x0C /* Receiver timed out */ + +/* FIFO control bits */ + +#define UART_FCR_EFIFO 0x01 /* Enable in and out hardware FIFOs */ +#define UART_FCR_RRESET 0x02 /* Reset receiver FIFO */ +#define UART_FCR_TRESET 0x04 /* Reset transmit FIFO */ +#define UART_FCR_TRIG0 0x00 /* RCVR FIFO trigger level one char */ +#define UART_FCR_TRIG1 0x40 /* RCVR FIFO trigger level 1/4 */ +#define UART_FCR_TRIG2 0x80 /* RCVR FIFO trigger level 2/4 */ +#define UART_FCR_TRIG3 0xC0 /* RCVR FIFO trigger level 3/4 */ + +/* Modem control bits */ + +#define UART_MCR_OUT2 0x08 /* User-defined OUT2 */ +#define UART_MCR_RTS 0x02 /* RTS complement */ +#define UART_MCR_DTR 0x01 /* DTR complement */ +#define UART_MCR_LOOP 0x10 /* Enable loopback test mode */ + +/* Line status bits */ + +#define UART_LSR 5 /* Input" Line Status Register */ + +#define UART_LSR_DR 0x01 /* Data ready */ +#define UART_LSR_BI 0x10 /* Break interrupt indicator */ +#define UART_LSR_THRE 0x20 /* Transmit-hold-register empty */ +#define UART_LSR_TEMT 0x40 /* Transmitter empty */ + +#define UART_TX 0 /* offset of transmit buffer */ + +/* MDR1 bits */ +#define UART_MDR1_16X 0x00000000 +#define UART_MDR1_16XAB 0x00000002 +#define UART_MDR1_13X 0x00000003 + +/* SYSC register bits */ + +#define UART_SYSC_SOFTRESET 0x00000002 + +/* SYSS register bits */ + +#define UART_SYSS_RESETDONE 0x00000001 + +/* UART1 Clock control */ +#define UART1_CLKCTRL_ADDR 0x44e0006c +#define UART1_CLKCTRL_EN 0x00000002 + +/* Pad control addresses and modes */ +#define UART0_PADRX_ADDR 0x44E10970 +#define UART0_PADTX_ADDR 0x44E10974 +#define UART0_PADRX_MODE 0 +#define UART0_PADTX_MODE 0 +#define UART1_PADRX_ADDR 0x44E10980 +#define UART1_PADTX_ADDR 0x44E10984 +#define UART1_PADRX_MODE 0 +#define UART1_PADTX_MODE 0 + +/* UART Buffer lengths */ +#define UART_IBLEN 1024 +#define UART_OBLEN 1024 + +#define UART_BAUD 115200 /**< Default console baud rate. */ + +/** + * UART control block + */ +struct uart +{ + /* Pointers to associated structures */ + void *csr; /**< Control & status registers */ + struct dentry *dev; /**< Dev structure */ + + /* Statistical Counts */ + uint cout; /**< Characters output */ + uint cin; /**< Characters input */ + uint lserr; /**< Receiver error count */ + uint ovrrn; /**< Characters overrun */ + uint iirq; /**< Input IRQ count */ + uint oirq; /**< Output IRQ count */ + + /* UART input fields */ + uchar iflags; /**< Input flags */ + sid32 isema; /**< Count of input bytes ready */ + ushort istart; /**< Index of first byte */ + ushort icount; /**< Bytes in buffer */ + uchar in[UART_IBLEN]; /**< Input buffer */ + + /* UART output fields */ + uchar oflags; /**< Output flags */ + sid32 osema; /**< Count of buffer space free */ + ushort ostart; /**< Index of first byte */ + ushort ocount; /**< Bytes in buffer */ + uchar out[UART_OBLEN]; /**< Output buffer */ + volatile bool oidle; /**< UART transmitter idle */ +}; + +extern struct uart uarttab[]; + +/* UART input flags */ +#define UART_IFLAG_NOBLOCK 0x0001 /**< do non-blocking input */ +#define UART_IFLAG_ECHO 0x0002 /**< echo input */ + +/* UART output flags */ +#define UART_OFLAG_NOBLOCK 0x0001 /**< do non-blocking output */ + +/* uartControl() functions */ +#define UART_CTRL_SET_IFLAG 0x0010 /**< set input flags */ +#define UART_CTRL_CLR_IFLAG 0x0011 /**< clear input flags */ +#define UART_CTRL_GET_IFLAG 0x0012 /**< get input flags */ +#define UART_CTRL_SET_OFLAG 0x0013 /**< set output flags */ +#define UART_CTRL_CLR_OFLAG 0x0014 /**< clear output flags */ +#define UART_CTRL_GET_OFLAG 0x0015 /**< get output flags */ +#define UART_CTRL_OUTPUT_IDLE 0x0016 /**< determine if transmit idle */ +#define TTY_ICRNL 0x08 +/* Driver functions */ +devcall uartInit(struct dentry *); +devcall uartRead(struct dentry *, void *, uint); +devcall uartWrite(struct dentry *, const void *, uint); +devcall uartGetc(struct dentry *); +devcall uartPutc(struct dentry *, char); +devcall uartControl(struct dentry *, int, long, long); +interrupt uartInterrupt(void); +void uartStat(ushort); + +/** + * @ingroup uarthardware + * + * Initialize the UART hardware. + */ +devcall uartHwInit(struct dentry *); + +/** + * @ingroup uarthardware + * + * Immediately put a character to the UART. + */ +void uartHwPutc(void *, uchar); + +/** + * @ingroup uarthardware + * + * Print hardware-specific statistics about the UART. + */ +void uartHwStat(void *); +#endif diff --git a/include/udp.h b/include/udp.h new file mode 100644 index 0000000..62302a1 --- /dev/null +++ b/include/udp.h @@ -0,0 +1,33 @@ +/* udp.h - Declarations pertaining to User Datagram Protocol (UDP) */ + +#define UDP_SLOTS 6 /* Number of open UDP endpoints */ +#define UDP_QSIZ 8 /* Packets enqueued per endpoint*/ + +#define UDP_DHCP_CPORT 68 /* Port number for DHCP client */ +#define UDP_DHCP_SPORT 67 /* Port number for DHCP server */ + +/* Constants for the state of an entry */ + +#define UDP_FREE 0 /* Entry is unused */ +#define UDP_USED 1 /* Entry is being used */ +#define UDP_RECV 2 /* Entry has a process waiting */ + +#define UDP_ANYIF -2 /* Register an endpoint for any */ + /* interface on the machine */ + +#define UDP_HDR_LEN 8 /* Bytes in a UDP header */ + +struct udpentry { /* Entry in the UDP endpoint tbl*/ + int32 udstate; /* State of entry: free/used */ + uint32 udremip; /* Remote IP address (zero */ + /* means "don't care") */ + uint16 udremport; /* Remote protocol port number */ + uint16 udlocport; /* Local protocol port number */ + int32 udhead; /* Index of next packet to read */ + int32 udtail; /* Index of next slot to insert */ + int32 udcount; /* Count of packets enqueued */ + pid32 udpid; /* ID of waiting process */ + struct netpacket *udqueue[UDP_QSIZ];/* Circular packet queue */ +}; + +extern struct udpentry udptab[]; diff --git a/include/xinu.h b/include/xinu.h new file mode 100644 index 0000000..d9c727e --- /dev/null +++ b/include/xinu.h @@ -0,0 +1,44 @@ +/* xinu.h - include all system header files */ +#ifndef _XINU_H +#define _XINU_H +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#endif diff --git a/lib/Makefile b/lib/Makefile new file mode 100644 index 0000000..0e69139 --- /dev/null +++ b/lib/Makefile @@ -0,0 +1,45 @@ +# +# Make the Xinu version of the C run-time support library +# + +INCLUDE = -I../../include +LIBNAME = libxc + +CC = ../../arm-2013.11/bin/arm-none-eabi-gcc +AS = ../../arm-2013.11/bin/arm-none-eabi-as +AR = ../../arm-2013.11/bin/arm-none-eabi-ar + +# Make sure the library is optimized for size, if we want any optimization +CFLAGS := ${CFLAGS:-O%=-Os} + +# Update the include flag +CFLAGS := ${CFLAGS:-I%=${INCLUDE}} + +.s.o: + ${AS} -o $@ ${AFLAGS} $< + +.c.o: + ${CC} ${CFLAGS} $< + +CFILES = abs.c atoi.c atol.c bzero.c ctype_.c doprnt.c doscan.c \ + fgetc.c fdoprnt.c fgets.c fprintf.c fputc.c fputs.c \ + fscanf.c getchar.c labs.c memchr.c memcmp.c memcpy.c \ + memset.c printf.c putchar.c qsort.c rand.c sprintf.c \ + sscanf.c strchr.c strrchr.c strstr.c strncat.c \ + strncmp.c strncpy.c strnlen.c strcmp.c strcpy.c \ + strlen.c + +OFILE2 = ${CFILES:%.c=%.o} +OFILES = ${OFILE2:%.s=%.o} + +all: ${LIBNAME}.a + +${LIBNAME}.a: ${OFILES} + rm -f ${LIBNAME}.a + ${AR} cr ${LIBNAME}.a ${OFILES} + +install: ${LIBNAME}.a + cp ${LIBNAME}.a ${LIBDIR}/${LIBNAME}.a + +clean: + rm -f ${OFILES} ${LIBNAME}.a ${LIBDIR}/${LIBNAME}.a diff --git a/lib/abs.c b/lib/abs.c new file mode 100644 index 0000000..f352959 --- /dev/null +++ b/lib/abs.c @@ -0,0 +1,19 @@ +/** + * @file abs.c + * @provides abs. + * + * $Id: abs.c 2020 2009-08-13 17:50:08Z mschul $ + */ +/* Embedded Xinu, Copyright (C) 2009. All rights reserved. */ + +/** + * Calculates the absolute value of a number. + * @param arg number to get absolute value of + * @return absolute value of arg + */ +int abs(int arg) +{ + if (arg < 0) + arg = -arg; + return (arg); +} diff --git a/lib/atoi.c b/lib/atoi.c new file mode 100644 index 0000000..c6e4847 --- /dev/null +++ b/lib/atoi.c @@ -0,0 +1,39 @@ +/** + * @file atoi.c + * @provides atoi. + * + * $Id: atoi.c 2020 2009-08-13 17:50:08Z mschul $ + */ +/* Embedded Xinu, Copyright (C) 2009. All rights reserved. */ + +/** + * Converts an ascii value to an integer. + * @param *p pointer to ascii string + * @return integer + */ +int atoi(char *p) +{ + int n = 0, f = 0; + + for (;; p++) + { + switch (*p) + { + case ' ': + case '\t': + continue; + case '-': + f++; + case '+': + p++; + } + break; + } + + while (*p >= '0' && *p <= '9') + { + n = n * 10 + *p++ - '0'; + } + + return (f ? -n : n); +} diff --git a/lib/atol.c b/lib/atol.c new file mode 100644 index 0000000..c7a2bcd --- /dev/null +++ b/lib/atol.c @@ -0,0 +1,40 @@ +/** + * @file atol.c + * @provides atol. + * + * $Id: atol.c 2020 2009-08-13 17:50:08Z mschul $ + */ +/* Embedded Xinu, Copyright (C) 2009. All rights reserved. */ + +/** + * Converts an ascii value to a long. + * @param *p pointer to ascii string + * @return long + */ +long atol(char *p) +{ + long n; + int f; + + n = 0; + f = 0; + for (;; p++) + { + switch (*p) + { + case ' ': + case '\t': + continue; + case '-': + f++; + case '+': + p++; + } + break; + } + while (*p >= '0' && *p <= '9') + { + n = n * 10 + *p++ - '0'; + } + return (f ? -n : n); +} diff --git a/lib/bzero.c b/lib/bzero.c new file mode 100644 index 0000000..2f2b34d --- /dev/null +++ b/lib/bzero.c @@ -0,0 +1,28 @@ +/** + * @file bzero.c + * @provides bzero. + * + * $Id: bzero.c 2020 2009-08-13 17:50:08Z mschul $ + */ +/* Embedded Xinu, Copyright (C) 2009. All rights reserved. */ + +/** + * Clears a block of characters to 0s + * @param *p pointer to start of block + * @param len length of the block + */ +void bzero(void *p, int len) +{ + int n; + char *pch = (char *)p; + + if ((n = len) <= 0) + { + return; + } + do + { + *pch++ = 0; + } + while (--n); +} diff --git a/lib/ctype_.c b/lib/ctype_.c new file mode 100644 index 0000000..230b24b --- /dev/null +++ b/lib/ctype_.c @@ -0,0 +1,31 @@ +/** + * @file ctype_.c + * @provides _ctype_. + * + * $Id: ctype_.c 2072 2009-09-21 22:26:50Z brylow $ + */ +/* Embedded Xinu, Copyright (C) 2009. All rights reserved. */ + +#include + +const char _ctype_[] = { + 0, + _C, _C, _C, _C, _C, _C, _C, _C, + _C, _S, _S, _S, _S, _S, _C, _C, + _C, _C, _C, _C, _C, _C, _C, _C, + _C, _C, _C, _C, _C, _C, _C, _C, + _S, _P, _P, _P, _P, _P, _P, _P, + _P, _P, _P, _P, _P, _P, _P, _P, + _N, _N, _N, _N, _N, _N, _N, _N, + _N, _N, _P, _P, _P, _P, _P, _P, + _P, _U | _X, _U | _X, _U | _X, _U | _X, _U | _X, _U | _X, + _U, + _U, _U, _U, _U, _U, _U, _U, _U, + _U, _U, _U, _U, _U, _U, _U, _U, + _U, _U, _U, _P, _P, _P, _P, _P, + _P, _L | _X, _L | _X, _L | _X, _L | _X, _L | _X, _L | _X, + _L, + _L, _L, _L, _L, _L, _L, _L, _L, + _L, _L, _L, _L, _L, _L, _L, _L, + _L, _L, _L, _P, _P, _P, _P, _C +}; diff --git a/lib/doprnt.c b/lib/doprnt.c new file mode 100644 index 0000000..37cdcf0 --- /dev/null +++ b/lib/doprnt.c @@ -0,0 +1,388 @@ +/** + * @file doprnt.c + * @provides _doprnt, _prtl2, _prtl8, _prtl10, _prtX16, _prtl16. + * + * $Id: doprnt.c 2020 2009-08-13 17:50:08Z mschul $ + */ +/* Embedded Xinu, Copyright (C) 2009. All rights reserved. */ + +#include + +#define MAXSTR 80 +#define NULL 0 + +static void _prtl10(long num, char *str); +static void _prtl8(long num, char *str); +static void _prtX16(long num, char *str); +static void _prtl16(long num, char *str); +static void _prtl2(long num, char *str); + +/** + * Format and write output using 'func' to write characters. (Patched + * for Sun3 by Shawn Ostermann.) All arguments passed as 4 bytes, long==int. + * @param *fmt format string + * @param ap list of values + * @param *func character output function + * @param farg argument for character output function + */ +void _doprnt(char *fmt, va_list ap, int (*func) (int,void *),void *devptr) +{ + int c; + int i; + int f; /* The format character (comes after %) */ + char *str; /* Running pointer in string */ + char string[20]; /* The string str points to this output */ + + /* from number conversion */ + int length; /* Length of string "str" */ + char fill; /* Fill character (' ' or '0') */ + int leftjust; /* 0 = right-justified, else left-just */ + int fmax, fmin; /* Field specifications % MIN . MAX s */ + int leading; /* No. of leading/trailing fill chars */ + char sign; /* Set to '-' for negative decimals */ + char digit1; /* Offset to add to first numeric digit */ + long larg; + + for (;;) + { + /* Echo characters until '%' or end of fmt string */ + while ((c = *fmt++) != '%') + { + if (c == '\0') + { + return; + } + (*func) (c,devptr); + } + /* Echo "...%%..." as '%' */ + if (*fmt == '%') + { + (*func) (*fmt++,devptr); + continue; + } + /* Check for "%-..." == Left-justified output */ + if ((leftjust = ((*fmt == '-')) ? 1 : 0)) + { + fmt++; + } + /* Allow for zero-filled numeric outputs ("%0...") */ + fill = (*fmt == '0') ? *fmt++ : ' '; + /* Allow for minimum field width specifier for %d,u,x,o,c,s */ + /* Also allow %* for variable width (%0* as well) */ + fmin = 0; + if (*fmt == '*') + { + fmin = va_arg(ap, int); + + ++fmt; + } + else + { + while ('0' <= *fmt && *fmt <= '9') + { + fmin = fmin * 10 + *fmt++ - '0'; + } + } + /* Allow for maximum string width for %s */ + fmax = 0; + if (*fmt == '.') + { + if (*(++fmt) == '*') + { + fmax = va_arg(ap, int); + ++fmt; + } + else + { + while ('0' <= *fmt && *fmt <= '9') + { + fmax = fmax * 10 + *fmt++ - '0'; + } + } + } + + str = string; + if ((f = *fmt++) == '\0') + { + (*func) ('%',devptr); + return; + } + sign = '\0'; /* sign == '-' for negative decimal */ + + switch (f) + { + case 'c': + string[0] = va_arg(ap, int); + string[1] = '\0'; + fmax = 0; + fill = ' '; + break; + + case 's': + str = va_arg(ap, char *); + + if (NULL == str) + { + str = "(null)"; + } + fill = ' '; + break; + + case 'd': + larg = va_arg(ap, long); + + if (larg < 0) + { + sign = '-'; + larg = -larg; + } + _prtl10(larg, str); + break; + + case 'u': + digit1 = '\0'; + /* "negative" longs in unsigned format */ + /* can't be computed with long division */ + /* convert *args to "positive", digit1 */ + /* = how much to add back afterwards */ + larg = va_arg(ap, long); + + while (larg < 0) + { + larg -= 1000000000L; + ++digit1; + } + _prtl10(larg, str); + str[0] += digit1; + fmax = 0; + break; + + case 'o': + larg = va_arg(ap, long); + + _prtl8(larg, str); + fmax = 0; + break; + + case 'X': + larg = va_arg(ap, long); + + _prtX16(larg, str); + fmax = 0; + break; + + case 'x': + larg = va_arg(ap, long); + + _prtl16(larg, str); + fmax = 0; + break; + + case 'H': + larg = va_arg(ap, long); + + _prtX16(larg, str); + + larg = va_arg(ap, long); + + _prtX16(larg, str + 8); + + fmax = 0; + break; + + case 'h': + larg = va_arg(ap, long); + + _prtl16(larg, str); + + larg = va_arg(ap, long); + + _prtl16(larg, str + 8); + + fmax = 0; + break; + + case 'b': + larg = va_arg(ap, long); + + _prtl2(larg, str); + fmax = 0; + break; + + default: + (*func) (f,devptr); + break; + } + for (length = 0; str[length] != '\0'; length++) + {; + } + if (fmin > MAXSTR || fmin < 0) + { + fmin = 0; + } + if (fmax > MAXSTR || fmax < 0) + { + fmax = 0; + } + leading = 0; + if (fmax != 0 || fmin != 0) + { + if (fmax != 0) + { + if (length > fmax) + { + length = fmax; + } + } + if (fmin != 0) + { + leading = fmin - length; + } + if (sign == '-') + { + --leading; + } + } + if (sign == '-' && fill == '0') + { + (*func) (sign,devptr); + } + if (leftjust == 0) + { + for (i = 0; i < leading; i++) + { + (*func) (fill,devptr); + } + } + if (sign == '-' && fill == ' ') + { + (*func) (sign,devptr); + } + for (i = 0; i < length; i++) + { + (*func) (str[i],devptr); + } + if (leftjust != 0) + { + for (i = 0; i < leading; i++) + (*func) (fill,devptr); + } + } + +} + +/** + * Prints + * @param num + * @param *str + */ +static void _prtl10(long num, char *str) +{ + int i; + char temp[11]; + + temp[0] = '\0'; + for (i = 1; i <= 10; i++) + { + temp[i] = num % 10 + '0'; + num /= 10; + } + for (i = 10; temp[i] == '0'; i--); + if (i == 0) + i++; + while (i >= 0) + *str++ = temp[i--]; +} + +/** + * Prints + * @param num + * @param *str + */ +static void _prtl8(long num, char *str) +{ + int i; + char temp[12]; + + temp[0] = '\0'; + for (i = 1; i <= 11; i++) + { + temp[i] = (num & 07) + '0'; + num = num >> 3; + } + temp[11] &= '3'; + for (i = 11; temp[i] == '0'; i--); + if (i == 0) + i++; + while (i >= 0) + *str++ = temp[i--]; +} + +/** + * Prints + * @param num + * @param *str + */ +static void _prtl16(long num, char *str) +{ + int i; + char temp[9]; + + temp[0] = '\0'; + for (i = 1; i <= 8; i++) + { + temp[i] = "0123456789abcdef"[num & 0x0F]; + num = num >> 4; + } + for (i = 8; temp[i] == '0'; i--); + if (i == 0) + i++; + while (i >= 0) + *str++ = temp[i--]; +} + +/** + * Prints + * @param num + * @param *str + */ +static void _prtX16(long num, char *str) +{ + int i; + char temp[9]; + + temp[0] = '\0'; + for (i = 1; i <= 8; i++) + { + temp[i] = "0123456789ABCDEF"[num & 0x0F]; + num = num >> 4; + } + for (i = 8; temp[i] == '0'; i--); + if (i == 0) + i++; + while (i >= 0) + *str++ = temp[i--]; +} + +/** + * Prints + * @param num + * @param *str + */ +static void _prtl2(long num, char *str) +{ + int i; + char temp[35]; + + temp[0] = '\0'; + for (i = 1; i <= 32; i++) + { + temp[i] = ((num % 2) == 0) ? '0' : '1'; + num = num >> 1; + } + for (i = 32; temp[i] == '0'; i--); + if (i == 0) + i++; + while (i >= 0) + *str++ = temp[i--]; +} diff --git a/lib/doscan.c b/lib/doscan.c new file mode 100644 index 0000000..677375f --- /dev/null +++ b/lib/doscan.c @@ -0,0 +1,384 @@ +/** + * @file doscan.c + * @provides _doscan, _innum, _instr, _getccl. + * + * $Id: doscan.c 2020 2009-08-13 17:50:08Z mschul $ + */ +/* Embedded Xinu, Copyright (C) 2009. All rights reserved. */ + +/* Character look-ahead to be implemented as: ch=control(unit,TTY_IOC_NEXTC) */ + +#include + +#define EOF (-2) +#define NULL 0 + +#define SPC 01 +#define STP 02 + +#define SHORT 0 +#define REGULAR 1 +#define LONG 2 + +static int _innum(int **, int, int, int, int (*getc) (int, int), + int (*ungetc) (int, int), int, int, int *); +static int _instr(register char *, int, int, int (*getc) (int, int), + int (*ungetc) (int, int), int, int, int *); +static char *_getccl(char *); + +char _sctab[128] = { + 0, 0, 0, 0, 0, 0, 0, 0, + 0, SPC, SPC, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + SPC, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, +}; + +/** + * Scan and recognize input according to a format + * @param *fmt format string for the scanf + * @param **argp arguments to scanf + * @param getch function to unget a character + * @param ungetch function to unget a character + * @param arg1 1st argument to getch/ungetch + * @param arg2 2nd argument to getch/ungetch + */ +int _doscan(register char *fmt, register int **argp, + int (*getch) (int, int), int (*ungetch) (int, int), + int arg1, int arg2) +{ + register int ch; + int nmatch, len, ch1; + int **ptr, fileended, size; + + nmatch = 0; + fileended = 0; + for (;;) + { + switch (ch = *fmt++) + { + case '\0': + return (nmatch); + case '%': + if ((ch = *fmt++) == '%') + { + goto def; + } + ptr = 0; + if (ch != '*') + { + ptr = argp++; + } + else + { + ch = *fmt++; + } + len = 0; + size = REGULAR; + while (isdigit(ch)) + { + len = len * 10 + ch - '0'; + ch = *fmt++; + } + if (len == 0) + { + len = 30000; + } + if (ch == 'l') + { + ch = *fmt++; + size = LONG; + } + else if (ch == 'h') + { + size = SHORT; + ch = *fmt++; + } + else if (ch == '[') + { + fmt = _getccl(fmt); + } + if (isupper(ch)) + { + ch = tolower(ch); + size = LONG; + } + if (ch == '\0') + { + return (-1); + } + if (_innum + (ptr, ch, len, size, + getch, ungetch, arg1, arg2, &fileended) && ptr) + { + nmatch++; + } + if (fileended) + { + return (nmatch ? nmatch : -1); + } + break; + + case ' ': + case '\n': + case '\t': + while ((ch1 = + (*getch) (arg1, + arg2)) == ' ' || ch1 == '\t' || ch1 == '\n') + {; + } + if (ch1 != EOF) + { + (*ungetch) (arg1, arg2); + } + break; + + default: + def: + ch1 = (*getch) (arg1, arg2); + if (ch1 != ch) + { + if (ch1 == EOF) + { + return (-1); + } + (*ungetch) (arg1, arg2); + return nmatch; + } + } + } +} + +static int _innum(int **ptr, int type, int len, int size, + int (*getch) (int, int), int (*ungetch) (int, int), + int arg1, int arg2, int *eofptr) +{ + extern double atof(char *p); + register char *np; + char numbuf[64]; + register char c, base; + int expseen, negflg, c1, ndigit; + long lcval; + + if (type == 'c' || type == 's' || type == '[') + { + return (_instr + (ptr ? *(char **)ptr : (char *)NULL, type, len, getch, + ungetch, arg1, arg2, eofptr)); + } + lcval = 0; + ndigit = 0; + base = 10; + if (type == 'o') + { + base = 8; + } + else if (type == 'x') + { + base = 16; + } + np = numbuf; + expseen = 0; + negflg = 0; + while ((c = (*getch) (arg1, arg2)) == ' ' || c == '\t' || c == '\n') + {; + } + if (c == '-') + { + negflg++; + *np++ = c; + c = (*getch) (arg1, arg2); + len--; + } + else if (c == '+') + { + len--; + c = (*getch) (arg1, arg2); + } + + for (; --len >= 0; *np++ = c, c = (*getch) (arg1, arg2)) + { + if (((isdigit(c)) || base == 16) + && (('a' <= c && c <= 'f') || ('A' <= c && c <= 'F'))) + { + ndigit++; + if (base == 8) + { + lcval <<= 3; + } + else if (base == 10) + { + lcval = ((lcval << 2) + lcval) << 1; + } + else + { + lcval <<= 4; + } + c1 = c; + if ('0' <= c && c <= '9') + { + c -= '0'; + } + else if ('a' <= c && c <= 'f') + { + c -= 'a' - 10; + } + else + { + c -= 'A' - 10; + } + lcval += c; + c = c1; + continue; + } + else + { + break; + } + } + if (negflg) + { + lcval = -lcval; + } + if (c != EOF) + { + (*ungetch) (arg1, arg2); + *eofptr = 0; + } + else + { + *eofptr = 1; + } + if (ptr == NULL || np == numbuf) + { + return 0; + } + *np++ = 0; + switch (size) + { + case SHORT: + **(short **)ptr = lcval; + break; + + case REGULAR: + **(int **)ptr = lcval; + break; + + case LONG: + **(long **)ptr = lcval; + break; + } + return 1; +} + +static int _instr(register char *ptr, int type, int len, + int (*getch) (int, int), int (*ungetch) (int, int), + int arg1, int arg2, int *eofptr) +{ + register unsigned int ch; + register char *optr; + int ignstp; + + *eofptr = 0; + optr = ptr; + if (type == 'c' && len == 30000) + { + len = 1; + } + ignstp = 0; + if (type == 's') + { + ignstp = SPC; + } + while (_sctab[ch = (*getch) (arg1, arg2)] & ignstp) + { + if (ch == EOF) + { + break; + } + } + ignstp = SPC; + if (type == 'c') + { + ignstp = 0; + } + else if (type == '[') + { + ignstp = STP; + } + while (ch != EOF && (_sctab[ch] & ignstp) == 0) + { + if (ptr) + { + *ptr++ = ch; + } + if (--len <= 0) + { + break; + } + ch = (*getch) (arg1, arg2); + } + if (ch != EOF) + { + if (len > 0) + { + (*ungetch) (arg1, arg2); + } + *eofptr = 0; + } + else + { + *eofptr = 1; + } + if (ptr && ptr != optr) + { + if (type != 'c') + { + *ptr++ = '\0'; + } + return 1; + } + return 0; +} + +static char *_getccl(char *s) +{ + int c, t; + + t = 0; + if (*s == '^') + { + t++; + s++; + } + for (c = 0; c < 128; c++) + { + if (t) + { + _sctab[c] &= ~STP; + } + else + { + _sctab[c] |= STP; + } + } + while (((c = *s++) & 0177) != ']') + { + if (t) + { + _sctab[c++] |= STP; + } + else + { + _sctab[c++] &= ~STP; + } + if (c == 0) + { + return (--s); + } + } + return s; +} diff --git a/lib/fdoprnt.c b/lib/fdoprnt.c new file mode 100644 index 0000000..fab548c --- /dev/null +++ b/lib/fdoprnt.c @@ -0,0 +1,364 @@ +/** + * @file fdoprnt.c + * @provides _fdoprnt, _prtl2, _prtl8, _prtl10, _prtX16, _prtl16. + * + * $Id: fdoprnt.c 2020 2009-08-13 17:50:08Z mschul $ + */ +/* Embedded Xinu, Copyright (C) 2009. All rights reserved. */ + +#include + +#define MAXSTR 80 +#define NULL 0 + +static void _prtl10(long num, char *str); +static void _prtl8(long num, char *str); +static void _prtX16(long num, char *str); +static void _prtl16(long num, char *str); +static void _prtl2(long num, char *str); + +/** + * Format and write output using 'func' to write characters. (Patched + * for Sun3 by Shawn Ostermann.) All arguments passed as 4 bytes, long==int. + * @param *fmt format string + * @param ap list of values + * @param *func character output function + * @param farg argument for character output function + */ +void _fdoprnt(char *fmt, va_list ap, int (*func) (int, int), int farg) +{ + int c; + int i; + int f; /* The format character (comes after %) */ + char *str; /* Running pointer in string */ + char string[20]; /* The string str points to this output */ + + /* from number conversion */ + int length; /* Length of string "str" */ + char fill; /* Fill character (' ' or '0') */ + int leftjust; /* 0 = right-justified, else left-just */ + int fmax, fmin; /* Field specifications % MIN . MAX s */ + int leading; /* No. of leading/trailing fill chars */ + char sign; /* Set to '-' for negative decimals */ + char digit1; /* Offset to add to first numeric digit */ + long larg; + + for (;;) + { + /* Echo characters until '%' or end of fmt string */ + while ((c = *fmt++) != '%') + { + if (c == '\0') + { + return; + } + (*func) (farg, c); + } + /* Echo "...%%..." as '%' */ + if (*fmt == '%') + { + (*func) (farg, *fmt++); + continue; + } + /* Check for "%-..." == Left-justified output */ + if ((leftjust = ((*fmt == '-')) ? 1 : 0)) + { + fmt++; + } + /* Allow for zero-filled numeric outputs ("%0...") */ + fill = (*fmt == '0') ? *fmt++ : ' '; + /* Allow for minimum field width specifier for %d,u,x,o,c,s */ + /* Also allow %* for variable width (%0* as well) */ + fmin = 0; + if (*fmt == '*') + { + fmin = va_arg(ap, int); + + ++fmt; + } + else + { + while ('0' <= *fmt && *fmt <= '9') + { + fmin = fmin * 10 + *fmt++ - '0'; + } + } + /* Allow for maximum string width for %s */ + fmax = 0; + if (*fmt == '.') + { + if (*(++fmt) == '*') + { + fmax = va_arg(ap, int); + ++fmt; + } + else + { + while ('0' <= *fmt && *fmt <= '9') + { + fmax = fmax * 10 + *fmt++ - '0'; + } + } + } + + str = string; + if ((f = *fmt++) == '\0') + { + (*func) (farg, '%'); + return; + } + sign = '\0'; /* sign == '-' for negative decimal */ + + switch (f) + { + case 'c': + string[0] = va_arg(ap, int); + string[1] = '\0'; + fmax = 0; + fill = ' '; + break; + + case 's': + str = va_arg(ap, char *); + + if (NULL == str) + { + str = "(null)"; + } + fill = ' '; + break; + + case 'd': + larg = va_arg(ap, long); + + if (larg < 0) + { + sign = '-'; + larg = -larg; + } + _prtl10(larg, str); + break; + + case 'u': + digit1 = '\0'; + /* "negative" longs in unsigned format */ + /* can't be computed with long division */ + /* convert *args to "positive", digit1 */ + /* = how much to add back afterwards */ + larg = va_arg(ap, long); + + while (larg < 0) + { + larg -= 1000000000L; + ++digit1; + } + _prtl10(larg, str); + str[0] += digit1; + fmax = 0; + break; + + case 'o': + larg = va_arg(ap, long); + + _prtl8(larg, str); + fmax = 0; + break; + + case 'X': + larg = va_arg(ap, long); + + _prtX16(larg, str); + fmax = 0; + break; + + case 'x': + larg = va_arg(ap, long); + + _prtl16(larg, str); + fmax = 0; + break; + + case 'b': + larg = va_arg(ap, long); + + _prtl2(larg, str); + fmax = 0; + break; + + default: + (*func) (farg, f); + break; + } + for (length = 0; str[length] != '\0'; length++) + {; + } + if (fmin > MAXSTR || fmin < 0) + { + fmin = 0; + } + if (fmax > MAXSTR || fmax < 0) + { + fmax = 0; + } + leading = 0; + if (fmax != 0 || fmin != 0) + { + if (fmax != 0) + { + if (length > fmax) + { + length = fmax; + } + } + if (fmin != 0) + { + leading = fmin - length; + } + if (sign == '-') + { + --leading; + } + } + if (sign == '-' && fill == '0') + { + (*func) (farg, sign); + } + if (leftjust == 0) + { + for (i = 0; i < leading; i++) + { + (*func) (farg, fill); + } + } + if (sign == '-' && fill == ' ') + { + (*func) (farg, sign); + } + for (i = 0; i < length; i++) + { + (*func) (farg, str[i]); + } + if (leftjust != 0) + { + for (i = 0; i < leading; i++) + (*func) (farg, fill); + } + } + +} + +/** + * Prints + * @param num + * @param *str + */ +static void _prtl10(long num, char *str) +{ + int i; + char temp[11]; + + temp[0] = '\0'; + for (i = 1; i <= 10; i++) + { + temp[i] = num % 10 + '0'; + num /= 10; + } + for (i = 10; temp[i] == '0'; i--); + if (i == 0) + i++; + while (i >= 0) + *str++ = temp[i--]; +} + +/** + * Prints + * @param num + * @param *str + */ +static void _prtl8(long num, char *str) +{ + int i; + char temp[12]; + + temp[0] = '\0'; + for (i = 1; i <= 11; i++) + { + temp[i] = (num & 07) + '0'; + num = num >> 3; + } + temp[11] &= '3'; + for (i = 11; temp[i] == '0'; i--); + if (i == 0) + i++; + while (i >= 0) + *str++ = temp[i--]; +} + +/** + * Prints + * @param num + * @param *str + */ +static void _prtl16(long num, char *str) +{ + int i; + char temp[9]; + + temp[0] = '\0'; + for (i = 1; i <= 8; i++) + { + temp[i] = "0123456789abcdef"[num & 0x0F]; + num = num >> 4; + } + for (i = 8; temp[i] == '0'; i--); + if (i == 0) + i++; + while (i >= 0) + *str++ = temp[i--]; +} + +/** + * Prints + * @param num + * @param *str + */ +static void _prtX16(long num, char *str) +{ + int i; + char temp[9]; + + temp[0] = '\0'; + for (i = 1; i <= 8; i++) + { + temp[i] = "0123456789ABCDEF"[num & 0x0F]; + num = num >> 4; + } + for (i = 8; temp[i] == '0'; i--); + if (i == 0) + i++; + while (i >= 0) + *str++ = temp[i--]; +} + +/** + * Prints + * @param num + * @param *str + */ +static void _prtl2(long num, char *str) +{ + int i; + char temp[35]; + + temp[0] = '\0'; + for (i = 1; i <= 32; i++) + { + temp[i] = ((num % 2) == 0) ? '0' : '1'; + num = num >> 1; + } + for (i = 32; temp[i] == '0'; i--); + if (i == 0) + i++; + while (i >= 0) + *str++ = temp[i--]; +} diff --git a/lib/fgetc.c b/lib/fgetc.c new file mode 100644 index 0000000..7ae029d --- /dev/null +++ b/lib/fgetc.c @@ -0,0 +1,30 @@ +/** + * @file fgetc.c + * @provides fgetc. + * + * $Id: fgetc.c 2020 2009-08-13 17:50:08Z mschul $ + */ +/* Embedded Xinu, Copyright (C) 2009. All rights reserved. */ + +extern int getc(int); + +#define EOF (-2) + +/** + * Read a character from a device (file) + * @param dev device to read from + * @return character read, EOF if error + */ +int fgetc(int dev) +{ + int result = (int)getc(dev); + + if (0 > result) + { + return EOF; + } + else + { + return result; + } +} diff --git a/lib/fgets.c b/lib/fgets.c new file mode 100644 index 0000000..b3c09ac --- /dev/null +++ b/lib/fgets.c @@ -0,0 +1,45 @@ +/** + * @file fgets.c + * @provides fgets. + * + * $Id: fgets.c 2020 2009-08-13 17:50:08Z mschul $ + */ +/* Embedded Xinu, Copyright (C) 2009. All rights reserved. */ + +#define NULL 0 +extern int getc(int); + +/** + * Read a newline-terminated string from device (file) dev + * @param *s buffer for result + * @param n maximum read length + * @param dev device to read from + */ +char *fgets(char *s, int n, int dev) +{ + int c = 0; + char *cs; + + cs = s; + + /* Read characters until maximum read length, */ + /* end of line, or end of file */ + while ((--n > 0) && ((c = getc(dev)) >= 0)) + { + *cs++ = c; + if (('\n' == c) || ('\r' == c)) + { + break; + } + } + + /* Check for EOF or empty string */ + if ((c < 0) && (cs == s)) + { + return NULL; + } + + /* Terminate string and return */ + *cs++ = '\0'; + return s; +} diff --git a/lib/fprintf.c b/lib/fprintf.c new file mode 100644 index 0000000..81d1837 --- /dev/null +++ b/lib/fprintf.c @@ -0,0 +1,30 @@ +/** + * @file fprintf.c + * @provides fprintf. + * + * $Id: fprintf.c 2020 2009-08-13 17:50:08Z mschul $ + */ +/* Embedded Xinu, Copyright (C) 2009. All rights reserved. */ + +#include +#include + +extern void _fdoprnt(char *, va_list, int (*)(did32, char), int); + +/** + * Print a formatted message on specified device (file) + * @param dev device to write to + * @param *fmt format string + * @return 0 if the output was printed sucessfully, -1 if an error occured + */ +int fprintf(int dev, char *fmt, ...) +{ + va_list ap; + int putc(did32, char); + + va_start(ap, fmt); + _fdoprnt(fmt, ap, putc, dev); + va_end(ap); + + return 0; +} diff --git a/lib/fputc.c b/lib/fputc.c new file mode 100644 index 0000000..2d7f923 --- /dev/null +++ b/lib/fputc.c @@ -0,0 +1,30 @@ +/** + * @file fputc.c + * @provides fputc. + * + * $Id: fputc.c 2020 2009-08-13 17:50:08Z mschul $ + */ +/* Embedded Xinu, Copyright (C) 2009. All rights reserved. */ + +extern int putc(int, char); + +#define SYSERR (-1) +#define EOF (-2) + +/** + * Write a character string to a device (file) + * @param c string to write + * @param dev device to write to + * @return character written, EOF if error + */ +int fputc(int c, int dev) +{ + if (SYSERR == (int)putc(dev, c)) + { + return EOF; + } + else + { + return c; + } +} diff --git a/lib/fputs.c b/lib/fputs.c new file mode 100644 index 0000000..ffb8f2a --- /dev/null +++ b/lib/fputs.c @@ -0,0 +1,26 @@ +/** + * @file fputs.c + * @provides fputs. + * + * $Id: fputs.c 2020 2009-08-13 17:50:08Z mschul $ + */ +/* Embedded Xinu, Copyright (C) 2009. All rights reserved. */ + +extern int putc(int, char); + +/** + * Write a null-terminated string to a device (file) + * @param dev device to write to + * @param *s string to write + * @return result of last putc + */ +int fputs(char *s, int dev) +{ + int r = 0, c; + + while ((c = (*s++))) + { + r = putc(dev, c); + } + return r; +} diff --git a/lib/fscanf.c b/lib/fscanf.c new file mode 100644 index 0000000..1c0c0c7 --- /dev/null +++ b/lib/fscanf.c @@ -0,0 +1,65 @@ +/** + * @file fscanf.c + * @provides fscanf, getch, ungetch. + * + * $Id: fscanf.c 2020 2009-08-13 17:50:08Z mschul $ + */ +/* Embedded Xinu, Copyright (C) 2009. All rights reserved. */ + +#define EMPTY (-1) +#define EOF (-2) + +extern int getc(int); + +static int getch(int, int); +static int ungetch(int, int); +extern int _doscan(register char *, register int **, + int (*getc) (int, int), int (*ungetc) (int, int), int, + int); + +/** + * Read from a device (file) according to a format. + * @param dev device to read from + * @param *fmt format string + * @param args number of arguments in format string + * @return result of _doscan + */ +int fscanf(int dev, char *fmt, int args) +{ + int buf; + + buf = EMPTY; + return (_doscan + (fmt, (int **)&args, getch, ungetch, dev, (int)(int)&buf)); +} + +/** + * Get a character from a device with pushback. + * @param dev device to read from + * @param abuf buffer for reading into + */ +static int getch(int dev, int abuf) +{ + int *buf = (int *)abuf; + + if (*buf != EOF && *buf != EMPTY) + { + *buf = getc(dev); + } +/* if( *buf != EOF ) */ +/* { *buf = control(dev, TTY_IOC_NEXTC, 0, 0); } */ + return (*buf); +} + +/** + * Pushback a character for getch. + * @param dev device to push back to + * @param abuf buffer for pushing back from + */ +static int ungetch(int dev, int abuf) +{ + int *buf = (int *)abuf; + + *buf = EMPTY; + return (*buf); +} diff --git a/lib/getchar.c b/lib/getchar.c new file mode 100644 index 0000000..79736cc --- /dev/null +++ b/lib/getchar.c @@ -0,0 +1,9 @@ +/* getchar.c */ + +#include +#include + +int getchar(void) +{ + return fgetc(stdin); +} diff --git a/lib/labs.c b/lib/labs.c new file mode 100644 index 0000000..b500ecc --- /dev/null +++ b/lib/labs.c @@ -0,0 +1,19 @@ +/** + * @file labs.c + * @provides labs. + * + * $Id: labs.c 2020 2009-08-13 17:50:08Z mschul $ + */ +/* Embedded Xinu, Copyright (C) 2009. All rights reserved. */ + +/** + * Calculates the absolute value of a number. + * @param arg number to get absolute value of + * @return absolute value of arg + */ +long labs(long arg) +{ + if (arg < 0) + arg = -arg; + return (arg); +} diff --git a/lib/memchr.c b/lib/memchr.c new file mode 100644 index 0000000..4479d4d --- /dev/null +++ b/lib/memchr.c @@ -0,0 +1,29 @@ +/** + * @file memchr.c + * @provides memchr. + * + * $Id: memchr.c 2020 2009-08-13 17:50:08Z mschul $ + */ +/* Embedded Xinu, Copyright (C) 2009. All rights reserved. */ + +/** + * Returns a pointer to the location in memory at which which a particular + * character appears. + * @param *cs string to search + * @param c character to locate + * @param n number of bytes to search + * @return the pointer in the string, NULL if character not found + */ +void *memchr(const void *cs, int c, int n) +{ + char *cp = (char *)cs; + + for (; *cp != '\0'; cp++) + { + if (*cp == (unsigned char)c) + { + return (void *)cp; + } + } + return 0; +} diff --git a/lib/memcmp.c b/lib/memcmp.c new file mode 100644 index 0000000..7c2343b --- /dev/null +++ b/lib/memcmp.c @@ -0,0 +1,30 @@ +/** + * @file memcmp.c + * @provides memcmp. + * + * $Id: memcmp.c 2020 2009-08-13 17:50:08Z mschul $ + */ +/* Embedded Xinu, Copyright (C) 2009. All rights reserved. */ + +/** + * Compare memory (ISO C89). + * Assumes memory locations are same length + * @param s1 first memory location + * @param s2 second memory location + * @param n length to compare + * @return s1>s2: >0 s1==s2: 0 s1 0; n--, c1++, c2++) + { + if (*c1 != *c2) + { + return ((int)*c1) - ((int)*c2); + } + } + return 0; +} diff --git a/lib/memcpy.c b/lib/memcpy.c new file mode 100644 index 0000000..8a4606b --- /dev/null +++ b/lib/memcpy.c @@ -0,0 +1,27 @@ +/** + * @file memcpy.c + * @provides memcpy. + * + * $Id: memcpy.c 2020 2009-08-13 17:50:08Z mschul $ + */ +/* Embedded Xinu, Copyright (C) 2009. All rights reserved. */ + +/** + * Memory copy, copy a location in memory from src to dst. + * @param s destination location + * @param ct source location + * @param n amount of data (in bytes) to copy + * @return pointer to destination + */ +void *memcpy(void *s, const void *ct, int n) +{ + register int i; + char *dst = (char *)s; + char *src = (char *)ct; + + for (i = 0; i < n; i++) + { + *dst++ = *src++; + } + return s; +} diff --git a/lib/memset.c b/lib/memset.c new file mode 100644 index 0000000..7fa6c10 --- /dev/null +++ b/lib/memset.c @@ -0,0 +1,27 @@ +/** + * @file memset.c + * @provides memset. + * + * $Id: memset.c 2020 2009-08-13 17:50:08Z mschul $ + */ +/* Embedded Xinu, Copyright (C) 2009. All rights reserved. */ + +/** + * Place a character into first n characters. + * @param s memory to place character into + * @param c character to place + * @param n number of times to place character + * @return the pointer to memory + */ +void *memset(void *s, int c, int n) +{ + register int i; + char *cp = (char *)s; + + for (i = 0; i < n; i++) + { + *cp = (unsigned char)c; + cp++; + } + return s; +} diff --git a/lib/printf.c b/lib/printf.c new file mode 100644 index 0000000..8f2b5b4 --- /dev/null +++ b/lib/printf.c @@ -0,0 +1,19 @@ +/* printf.c */ + +#include +#include +#include + +extern void _fdoprnt(char *, va_list, int (*)(did32, char), int); + +int printf(const char *fmt, ...) +{ + va_list ap; + syscall putc(did32, char); + + va_start(ap, fmt); + _fdoprnt((char *)fmt, ap, putc, stdout); + va_end(ap); + + return 0; +} diff --git a/lib/putchar.c b/lib/putchar.c new file mode 100644 index 0000000..4046ac9 --- /dev/null +++ b/lib/putchar.c @@ -0,0 +1,9 @@ +/* putchar.c */ + +#include +#include + +int putchar(int c) +{ + return fputc(c, stdout); +} diff --git a/lib/qsort.c b/lib/qsort.c new file mode 100644 index 0000000..d6cd658 --- /dev/null +++ b/lib/qsort.c @@ -0,0 +1,144 @@ +/** + * @file qsort.c + * @provides qsort, qs1, qsexc, qstexc. + * + * $Id: qsort.c 2020 2009-08-13 17:50:08Z mschul $ + */ +/* Embedded Xinu, Copyright (C) 2009. All rights reserved. */ + +static int (*qscmp) (char *, char *); +static int qses; +static void qs1(char *, char *); +static void qsexc(char *, char *); +static void qstexc(char *, char *, char *); + +/** + * Performs a quick sort + * @param *a array to sort + * @param n length of the array + * @param es pivot + * @param (*fc)() comparison function + */ +void qsort(char *a, unsigned n, int es, int (*fc) (char *, char *)) +{ + qscmp = fc; + qses = es; + qs1(a, a + n * es); +} + +static void qs1(char *a, char *l) +{ + register char *i, *j; + register int es; + char *lp, *hp; + int c; + unsigned n; + + es = qses; + + start: + if ((n = l - a) <= es) + { + return; + } + n = es * (n / (2 * es)); + hp = lp = a + n; + i = a; + j = l - es; + for (;;) + { + if (i < lp) + { + if ((c = (*qscmp) (i, lp)) == 0) + { + qsexc(i, lp -= es); + continue; + } + if (c < 0) + { + i += es; + continue; + } + } + + loop: + if (j > hp) + { + if ((c = (*qscmp) (hp, j)) == 0) + { + qsexc(hp += es, j); + goto loop; + } + if (c > 0) + { + if (i == lp) + { + qstexc(i, hp += es, j); + i = lp += es; + goto loop; + } + qsexc(i, j); + j -= es; + i += es; + continue; + } + j -= es; + goto loop; + } + + if (i == lp) + { + if (lp - a >= l - hp) + { + qs1(hp + es, l); + l = lp; + } + else + { + qs1(a, lp); + a = hp + es; + } + goto start; + } + + qstexc(j, lp -= es, i); + j = hp -= es; + } +} + +static void qsexc(char *i, char *j) +{ + register char *ri, *rj, c; + int n; + + n = qses; + ri = i; + rj = j; + do + { + c = *ri; + *ri++ = *rj; + *rj++ = c; + } + while (--n); +} + +static void qstexc(char *i, char *j, char *k) +{ + register char *ri, *rj, *rk; + int c; + int n; + + n = qses; + ri = i; + rj = j; + rk = k; + do + { + c = *ri; + *ri++ = *rk; + *rk++ = *rj; + *rj++ = c; + } + while (--n); +} diff --git a/lib/rand.c b/lib/rand.c new file mode 100644 index 0000000..2eda080 --- /dev/null +++ b/lib/rand.c @@ -0,0 +1,27 @@ +/** + * @file rand.c + * @provides srand, rand. + * + * $Id: rand.c 2020 2009-08-13 17:50:08Z mschul $ + */ +/* Embedded Xinu, Copyright (C) 2009. All rights reserved. */ + +static unsigned long randx = 1; + +/** + * Sets the random seed. + * @param x random seed + */ +void srand(unsigned long x) +{ + randx = x; +} + +/** + * Generates a random long. + * @return random long + */ +unsigned long rand(void) +{ + return (((randx = randx * 1103515245 + 12345) >> 16) & 077777); +} diff --git a/lib/sprintf.c b/lib/sprintf.c new file mode 100644 index 0000000..2e132ce --- /dev/null +++ b/lib/sprintf.c @@ -0,0 +1,42 @@ +/** + * @file sprintf.c + * @provides sprintf. + * + * $Id: sprintf.c 2020 2009-08-13 17:50:08Z mschul $ + */ +/* Embedded Xinu, Copyright (C) 2009. All rights reserved. */ + +#include + +static int sprntf(int, int); +extern void _fdoprnt(char *, va_list, int (*func) (int, int), int); + +/** + * Format arguments and place output in a string + * @param *str output string + * @param *fmt format string + */ +int sprintf(char *str, char *fmt, ...) +{ + va_list ap; + char *s; + + s = str; + va_start(ap, fmt); + _fdoprnt(fmt, ap, sprntf, (int)&s); + va_end(ap); + *s++ = '\0'; + + return ((int)str); +} + +/** + * Routine called by _doprnt to handle each character + */ +static int sprntf(int acpp, int ac) +{ + char **cpp = (char **)acpp; + char c = (char)ac; + + return (*(*cpp)++ = c); +} diff --git a/lib/sscanf.c b/lib/sscanf.c new file mode 100644 index 0000000..0222000 --- /dev/null +++ b/lib/sscanf.c @@ -0,0 +1,50 @@ +/** + * @file sscanf.c + * @provides sscanf, sgetch, sungetch. + * + * $Id: sscanf.c 2020 2009-08-13 17:50:08Z mschul $ + */ +/* Embedded Xinu, Copyright (C) 2009. All rights reserved. */ + +#define EOF (-2) + +static int sgetch(int, char **); +static int sungetch(int, char **); +extern int _doscan(register char *, register int **, + int (*getc) (int, char **), + int (*ungetc) (int, char **), int, int); + +/** + * Read from a string according to a format. + * @param *str string to read from + * @param *fmt format string + * @param args number of arguments in format string + * @return result of _doscan + */ +int sscanf(char *str, char *fmt, int args) +{ + char *s; + + s = str; + return (_doscan(fmt, (int **)&args, sgetch, sungetch, 0, (int)&s)); +} + +/** + * Get the next character from a string. + * @param dummy unused variable + * @param cpp string to read next character from + */ +static int sgetch(int dummy, char **cpp) +{ + return (*(*cpp) == '\0' ? EOF : *(*cpp)++); +} + +/** + * Pushback a character in a string. + * @param dummy unused variable + * @param cpp string to pushback character to + */ +static int sungetch(int dummy, char **cpp) +{ + return (*(*cpp)--); +} diff --git a/lib/strchr.c b/lib/strchr.c new file mode 100644 index 0000000..e8d4806 --- /dev/null +++ b/lib/strchr.c @@ -0,0 +1,32 @@ +/** + * @file strchr.c + * @provides strchr. + * + * $Id: strchr.c 2020 2009-08-13 17:50:08Z mschul $ + */ +/* Embedded Xinu, Copyright (C) 2009. All rights reserved. */ + +/** + * Returns a pointer to the location in a string at which which a particular + * character appears. + * @param *s string to search + * @param c character to locate + * @return the pointer in the string, NULL if character not found + */ +char *strchr(const char *s, int c) +{ + for (; *s != '\0'; s++) + { + if (*s == (const char)c) + { + return (char *)s; + } + } + + if ((const char)c == *s) + { + return (char *)s; + } + + return 0; +} diff --git a/lib/strcmp.c b/lib/strcmp.c new file mode 100644 index 0000000..219d1d6 --- /dev/null +++ b/lib/strcmp.c @@ -0,0 +1,25 @@ +/* strcmp.c - strcmp */ + +/*------------------------------------------------------------------------ + * strcmp - compare two strings, returning 0 of they are the same <0 if + * first is lexically less and >0 if first is lexically > + *------------------------------------------------------------------------ + */ +int strcmp( + char *str1, + char *str2 + ) +{ + while (*str1 == *str2) { + if (*str1 == '\0') { + return 0; + } + str1++; + str2++; + } + if (*str1 < *str2) { + return -1; + } else { + return 1; + } +} diff --git a/lib/strcpy.c b/lib/strcpy.c new file mode 100644 index 0000000..b067b86 --- /dev/null +++ b/lib/strcpy.c @@ -0,0 +1,16 @@ +/* strcpy.c - strcpy */ + +/*------------------------------------------------------------------------ + * strcpy - copy the string given my the second argument into the first + *------------------------------------------------------------------------ + */ +int strcpy( + char *tar, /* target string */ + char *src /* source string */ + ) +{ + while ( (*tar++ = *src++) != '\0') { + ; + } + return 0; +} diff --git a/lib/strlen.c b/lib/strlen.c new file mode 100644 index 0000000..48ff26d --- /dev/null +++ b/lib/strlen.c @@ -0,0 +1,20 @@ +/* strlen.c - strlen */ + +/*------------------------------------------------------------------------ + * strlen - compute the length of a null-terminated character string, not + * counting the null byte + *------------------------------------------------------------------------ + */ +int strlen( + char *str /* string to use */ + ) +{ + int len; + + len = 0; + + while(*str++ != '\0') { + len++; + } + return len; +} diff --git a/lib/strncat.c b/lib/strncat.c new file mode 100644 index 0000000..6d01d4c --- /dev/null +++ b/lib/strncat.c @@ -0,0 +1,32 @@ +/** + * @file strncat.c + * @provides strncat. + * + * $Id: strncat.c 2020 2009-08-13 17:50:08Z mschul $ + */ +/* Embedded Xinu, Copyright (C) 2009. All rights reserved. */ + +/** + * Concatenate s2 on the end of s1. S1's space must be large enough. + * At most n characters are moved. + * @param *s1 first string + * @param *s2 second string + * @param n length to concatenate + * @return s1 + */ +char *strncat(char *s1, const char *s2, int n) +{ + char *os1; + + os1 = s1; + while (*s1++) + ; + --s1; + while ((*s1++ = *s2++)) + if (--n < 0) + { + *--s1 = '\0'; + break; + } + return (os1); +} diff --git a/lib/strncmp.c b/lib/strncmp.c new file mode 100644 index 0000000..66b3f6e --- /dev/null +++ b/lib/strncmp.c @@ -0,0 +1,27 @@ +/** + * @file strncmp.c + * @provides sstrncmp. + * + * $Id: strncmp.c 2020 2009-08-13 17:50:08Z mschul $ + */ +/* Embedded Xinu, Copyright (C) 2009. All rights reserved. */ + +/** + * Compare strings (at most n bytes). + * @param *s1 first memory location + * @param *s2 second memory location + * @param n length to compare + * @return s1>s2: >0 s1==s2: 0 s1= 0 && *s1 == *s2++) + { + if (*s1++ == '\0') + { + return 0; + } + } + return (n < 0 ? 0 : *s1 - *--s2); +} diff --git a/lib/strncpy.c b/lib/strncpy.c new file mode 100644 index 0000000..8c10f3e --- /dev/null +++ b/lib/strncpy.c @@ -0,0 +1,34 @@ +/** + * @file strncpy.c + * @provides strncpy. + * + * $Id: strncpy.c 2020 2009-08-13 17:50:08Z mschul $ + */ +/* Embedded Xinu, Copyright (C) 2009. All rights reserved. */ + +/** + * Copy string s2 to s1, truncating or null-padding to always copy n bytes. + * @param s1 first string + * @param s2 second string + * @param n length of s2 to copy + * @return s1 + */ +char *strncpy(char *s1, const char *s2, int n) +{ + register int i; + register char *os1; + + os1 = s1; + for (i = 0; i < n; i++) + { + if (((*s1++) = (*s2++)) == '\0') + { + while (++i < n) + { + *s1++ = '\0'; + } + return os1; + } + } + return os1; +} diff --git a/lib/strnlen.c b/lib/strnlen.c new file mode 100644 index 0000000..b481bf6 --- /dev/null +++ b/lib/strnlen.c @@ -0,0 +1,24 @@ +/** + * @file strnlen.c + * @provides strnlen. + * + * $Id: strnlen.c 2020 2009-08-13 17:50:08Z mschul $ + */ +/* Embedded Xinu, Copyright (C) 2009. All rights reserved. */ + +/** + * Returns the number of non-NULL bytes in a string or len. + * @param *s string + * @param len length you wish to scan s too + * @return length of the string up to user specified length + */ +int strnlen(const char *s, unsigned int len) +{ + int n; + + n = 0; + while (*s++ && n < len) + n++; + + return (n); +} diff --git a/lib/strrchr.c b/lib/strrchr.c new file mode 100644 index 0000000..6f770ad --- /dev/null +++ b/lib/strrchr.c @@ -0,0 +1,34 @@ +/** + * @file strrchr.c + * @provides strrchr. + * + * $Id: strrchr.c 2020 2009-08-13 17:50:08Z mschul $ + */ +/* Embedded Xinu, Copyright (C) 2009. All rights reserved. */ + +/** + * Returns a pointer to the location in a string at which which a particular + * character last appears. + * @param *s string to search + * @param c character to locate + * @return the pointer in the string, NULL if character not found + */ +char *strrchr(const char *s, int c) +{ + char *r = 0; + + for (; *s != '\0'; s++) + { + if (*s == (const char)c) + { + r = (char *)s; + } + } + + if ((const char)c == *s) + { + return (char *)s; + } + + return r; +} diff --git a/lib/strstr.c b/lib/strstr.c new file mode 100644 index 0000000..f7366cb --- /dev/null +++ b/lib/strstr.c @@ -0,0 +1,43 @@ +/** + * @file strstr.c + * @provides strstr. + * + * $Id: strstr.c 2020 2009-08-13 17:50:08Z mschul $ + */ +/* Embedded Xinu, Copyright (C) 2009. All rights reserved. */ + +/** + * Returns a pointer to the location in a string at which a particular + * string appears. + * @param cs string to search + * @param ct string to locate + * @return the pointer in the string, NULL if string not found + */ +char *strstr(const char *cs, const char *ct) +{ + char *cq; + char *cr; + + for (; *cs != '\0'; cs++) + { + if (*cs == *ct) + { + cq = (char *)cs; + cr = (char *)ct; + while ((*cq != '\0') && (*cr != '\0')) + { + if (*cq != *cr) + { + break; + } + cq++; + cr++; + } + if ('\0' == *cr) + { + return (char *)cs; + } + } + } + return 0; +} diff --git a/net/arp.c b/net/arp.c new file mode 100644 index 0000000..2073317 --- /dev/null +++ b/net/arp.c @@ -0,0 +1,357 @@ +/* arp.c - arp_init, arp_resolve, arp_in, arp_alloc, arp_ntoh, arp_hton */ + +#include + +struct arpentry arpcache[ARP_SIZ]; /* ARP cache */ + +/*------------------------------------------------------------------------ + * arp_init - Initialize ARP cache for an Ethernet interface + *------------------------------------------------------------------------ + */ +void arp_init(void) +{ + int32 i; /* ARP cache index */ + + for (i=1; iarstate == AR_FREE) { + continue; + } + if (arptr->arpaddr == nxthop) { /* Adddress is in cache */ + break; + } + } + + if (i < ARP_SIZ) { /* Entry was found */ + + /* If entry is resolved - handle and return */ + + if (arptr->arstate == AR_RESOLVED) { + memcpy(mac, arptr->arhaddr, ARP_HALEN); + restore(mask); + return OK; + } + + /* Entry is already pending - return error because */ + /* only one process can be waiting at a time */ + + if (arptr->arstate == AR_PENDING) { + restore(mask); + return SYSERR; + } + } + + /* IP address not in cache - allocate a new cache entry and */ + /* send an ARP request to obtain the answer */ + + slot = arp_alloc(); + if (slot == SYSERR) { + restore(mask); + return SYSERR; + } + + arptr = &arpcache[slot]; + arptr->arstate = AR_PENDING; + arptr->arpaddr = nxthop; + arptr->arpid = currpid; + + /* Hand-craft an ARP Request packet */ + + memcpy(apkt.arp_ethdst, NetData.ethbcast, ETH_ADDR_LEN); + memcpy(apkt.arp_ethsrc, NetData.ethucast, ETH_ADDR_LEN); + apkt.arp_ethtype = ETH_ARP; /* Packet type is ARP */ + apkt.arp_htype = ARP_HTYPE; /* Hardware type is Ethernet */ + apkt.arp_ptype = ARP_PTYPE; /* Protocol type is IP */ + apkt.arp_hlen = 0xff & ARP_HALEN; /* Ethernet MAC size in bytes */ + apkt.arp_plen = 0xff & ARP_PALEN; /* IP address size in bytes */ + apkt.arp_op = 0xffff & ARP_OP_REQ;/* ARP type is Request */ + memcpy(apkt.arp_sndha, NetData.ethucast, ARP_HALEN); + apkt.arp_sndpa = NetData.ipucast; /* IP address of interface */ + memset(apkt.arp_tarha, '\0', ARP_HALEN); /* Target HA is unknown*/ + apkt.arp_tarpa = nxthop; /* Target protocol address */ + + /* Convert ARP packet from host to net byte order */ + + arp_hton(&apkt); + + /* Convert Ethernet header from host to net byte order */ + + eth_hton((struct netpacket *)&apkt); + + /* Send the packet ARP_RETRY times and await response */ + + msg = recvclr(); + for (i=0; iarstate = AR_FREE; /* Invalidate cache entry */ + restore(mask); + return TIMEOUT; + } + + /* Return hardware address */ + + memcpy(mac, arptr->arhaddr, ARP_HALEN); + restore(mask); + return OK; +} + + +/*------------------------------------------------------------------------ + * arp_in - Handle an incoming ARP packet + *------------------------------------------------------------------------ + */ +void arp_in ( + struct arppacket *pktptr /* Ptr to incoming packet */ + ) +{ + intmask mask; /* Saved interrupt mask */ + struct arppacket apkt; /* Local packet buffer */ + int32 slot; /* Slot in cache */ + struct arpentry *arptr; /* Ptr to ARP cache entry */ + bool8 found; /* Is the sender's address in */ + /* the cache? */ + + /* Convert packet from network order to host order */ + + arp_ntoh(pktptr); + + /* Verify ARP is for IPv4 and Ethernet */ + + if ( (pktptr->arp_htype != ARP_HTYPE) || + (pktptr->arp_ptype != ARP_PTYPE) ) { + freebuf((char *)pktptr); + return; + } + + /* Ensure only one process uses ARP at a time */ + + mask = disable(); + + /* Search cache for sender's IP address */ + + found = FALSE; + + for (slot=0; slot < ARP_SIZ; slot++) { + arptr = &arpcache[slot]; + + /* Skip table entries that are unused */ + + if (arptr->arstate == AR_FREE) { + continue; + } + + /* If sender's address matches, we've found it */ + + if (arptr->arpaddr == pktptr->arp_sndpa) { + found = TRUE; + break; + } + } + + if (found) { + + /* Update sender's hardware address */ + + memcpy(arptr->arhaddr, pktptr->arp_sndha, ARP_HALEN); + + /* If a process was waiting, inform the process */ + + if (arptr->arstate == AR_PENDING) { + /* Mark resolved and notify waiting process */ + arptr->arstate = AR_RESOLVED; + send(arptr->arpid, OK); + } + } + + /* For an ARP reply, processing is complete */ + + if (pktptr->arp_op == ARP_OP_RPLY) { + freebuf((char *)pktptr); + restore(mask); + return; + } + + /* The following is for an ARP request packet: if the local */ + /* machine is not the target or the local IP address is not */ + /* yet known, ignore the request (i.e., processing is complete)*/ + + if ((!NetData.ipvalid) || + (pktptr->arp_tarpa != NetData.ipucast)) { + freebuf((char *)pktptr); + restore(mask); + return; + } + + /* Request has been sent to the local machine's address. So, */ + /* add sender's info to cache, if not already present */ + + if (!found) { + slot = arp_alloc(); + if (slot == SYSERR) { /* Cache is full */ + kprintf("ARP cache overflow on interface\n"); + freebuf((char *)pktptr); + restore(mask); + return; + } + arptr = &arpcache[slot]; + arptr->arpaddr = pktptr->arp_sndpa; + memcpy(arptr->arhaddr, pktptr->arp_sndha, ARP_HALEN); + arptr->arstate = AR_RESOLVED; + } + + /* Hand-craft an ARP reply packet and send back to requester */ + + memcpy(apkt.arp_ethdst, pktptr->arp_sndha, ARP_HALEN); + memcpy(apkt.arp_ethsrc, NetData.ethucast, ARP_HALEN); + apkt.arp_ethtype= ETH_ARP; /* Frame carries ARP */ + apkt.arp_htype = ARP_HTYPE; /* Hardware is Ethernet */ + apkt.arp_ptype = ARP_PTYPE; /* Protocol is IP */ + apkt.arp_hlen = ARP_HALEN; /* Ethernet address size*/ + apkt.arp_plen = ARP_PALEN; /* IP address size */ + apkt.arp_op = ARP_OP_RPLY; /* Type is Reply */ + + /* Insert local Ethernet and IP address in sender fields */ + + memcpy(apkt.arp_sndha, NetData.ethucast, ARP_HALEN); + apkt.arp_sndpa = NetData.ipucast; + + /* Copy target Ethernet and IP addresses from request packet */ + + memcpy(apkt.arp_tarha, pktptr->arp_sndha, ARP_HALEN); + apkt.arp_tarpa = pktptr->arp_sndpa; + + /* Convert ARP packet from host to network byte order */ + + arp_hton(&apkt); + + /* Convert the Ethernet header to network byte order */ + + eth_hton((struct netpacket *)&apkt); + + /* Send the reply */ + + write(ETHER0, (char *)&apkt, sizeof(struct arppacket)); + freebuf((char *)pktptr); + restore(mask); + return; +} + +/*------------------------------------------------------------------------ + * arp_alloc - Find a free slot or kick out an entry to create one + *------------------------------------------------------------------------ + */ +int32 arp_alloc () +{ + int32 slot; /* Slot in ARP cache */ + + /* Search for a free slot */ + + for (slot=0; slot < ARP_SIZ; slot++) { + if (arpcache[slot].arstate == AR_FREE) { + memset((char *)&arpcache[slot], + NULLCH, sizeof(struct arpentry)); + return slot; + } + } + + /* Search for a resolved entry */ + + for (slot=0; slot < ARP_SIZ; slot++) { + if (arpcache[slot].arstate == AR_RESOLVED) { + memset((char *)&arpcache[slot], + NULLCH, sizeof(struct arpentry)); + return slot; + } + } + + /* At this point, all slots are pending (should not happen) */ + + kprintf("ARP cache size exceeded\n"); + + return SYSERR; +} + +/*------------------------------------------------------------------------ + * arp_ntoh - Convert ARP packet fields from net to host byte order + *------------------------------------------------------------------------ + */ +void arp_ntoh( + struct arppacket *pktptr + ) +{ + pktptr->arp_htype = ntohs(pktptr->arp_htype); + pktptr->arp_ptype = ntohs(pktptr->arp_ptype); + pktptr->arp_op = ntohs(pktptr->arp_op); + pktptr->arp_sndpa = ntohl(pktptr->arp_sndpa); + pktptr->arp_tarpa = ntohl(pktptr->arp_tarpa); +} + +/*------------------------------------------------------------------------ + * arp_hton - Convert ARP packet fields from net to host byte order + *------------------------------------------------------------------------ + */ +void arp_hton( + struct arppacket *pktptr + ) +{ + pktptr->arp_htype = htons(pktptr->arp_htype); + pktptr->arp_ptype = htons(pktptr->arp_ptype); + pktptr->arp_op = htons(pktptr->arp_op); + pktptr->arp_sndpa = htonl(pktptr->arp_sndpa); + pktptr->arp_tarpa = htonl(pktptr->arp_tarpa); +} diff --git a/net/arp_dump.c b/net/arp_dump.c new file mode 100644 index 0000000..f7ebf9f --- /dev/null +++ b/net/arp_dump.c @@ -0,0 +1,23 @@ +/* arp_dump.c - arp_dump */ + +#include + +/*------------------------------------------------------------------------ + * arp_dump - Display the contents of an RP cache entry + *------------------------------------------------------------------------ + */ +void arp_dump( + struct arpentry *arptr /* Pointer to ARP cache entry */ + ) +{ + int32 i; /* Index for a MAC address */ + + kprintf("State=%d, PID=%d IP=%08x, HW=", arptr->arstate, + arptr->arpid, arptr->arpaddr); + kprintf(" %02X", arptr->arhaddr[0]); + for (i = 1; i < ARP_HALEN; i++) { + printf(":%02X", arptr->arhaddr[i]); + } + kprintf("\n"); + return; +} diff --git a/net/dhcp.c b/net/dhcp.c new file mode 100644 index 0000000..c7bc700 --- /dev/null +++ b/net/dhcp.c @@ -0,0 +1,416 @@ +/* dhcp.c - getlocalip */ + +#include +#include + +/*------------------------------------------------------------------------ + * dump_dhcp_msg - Print out a DHCP message + *------------------------------------------------------------------------ + */ +void dump_dhcp_msg(const struct dhcpmsg* dmsg, uint32 dmsg_size) +{ + uint32 i,j; + unsigned char* opt_tmp; /* Pointer to current DHCP option */ + unsigned char* eom; /* Pointer to the end of the message */ + + kprintf("DHCP Message Dump\n"); + kprintf("OP: %d (0x%02X)\n", dmsg->dc_bop, (uint8)dmsg->dc_bop); + kprintf("HTYPE: %d (0x%02X)\n", dmsg->dc_htype, (uint8)dmsg->dc_htype); + kprintf("HLEN: %d (0x%02X)\n", dmsg->dc_hlen, (uint8)dmsg->dc_hlen); + kprintf("HOPS: %d (0x%02X)\n", dmsg->dc_hops, (uint8)dmsg->dc_hops); + kprintf("XID: %d (0x%08X)\n", ntohl(dmsg->dc_xid), ntohl((uint32)dmsg->dc_xid)); + kprintf("SECS: %d (0x%04X)\n", dmsg->dc_secs, (uint16)dmsg->dc_secs); + kprintf("FLAGS: %d (0x%04X)\n", dmsg->dc_flags, (uint16)dmsg->dc_flags); + kprintf("Client IP: %d (0x%08X)\n", ntohl(dmsg->dc_cip), ntohl((uint32)dmsg->dc_cip)); + kprintf("Your IP: %d (0x%08X)\n", ntohl(dmsg->dc_yip), ntohl((uint32)dmsg->dc_yip)); + kprintf("Server IP: %d (0x%08X)\n", ntohl(dmsg->dc_sip), ntohl((uint32)dmsg->dc_sip)); + kprintf("Gateway IP: %d (0x%08X)\n", ntohl(dmsg->dc_gip), ntohl((uint32)dmsg->dc_gip)); + kprintf("Client Hardware Address:\n "); + for(i = 0; i < sizeof(dmsg->dc_chaddr); i++) { + kprintf("%02X", (uint8)dmsg->dc_chaddr[i]); + } + kprintf("\n"); + kprintf("BOOTP Server Name: %.64s\n", dmsg->sname); + kprintf("BOOTP File Name: %.128s\n", dmsg->bootfile); + kprintf("Magic Cookie: %d (0x%08X)\n", dmsg->dc_cookie, (uint32)dmsg->dc_cookie); + + eom = (unsigned char*)dmsg + dmsg_size - 1; + opt_tmp = (unsigned char*)dmsg->dc_opt; + + while(opt_tmp < eom) { + + switch(*opt_tmp) { + + case DHCP_PADDING: + case DHCP_MESSAGE_END: + opt_tmp++; + continue; + break; + + case DHCP_SUBNET_MASK: + kprintf("DHCP Subnet Mask: %d (0x%08X)\n", ntohl(*(uint32*)(opt_tmp+2)), ntohl(*(uint32*)(opt_tmp+2))); + break; + + case DHCP_ROUTER: + j = *(uint8*)(opt_tmp+1); + for(i = 0; i < j/4; i++) { + kprintf("DHCP Router: %d (0x%08X)\n", ntohl(*(uint32*)(opt_tmp+2+4*i)), ntohl(*(uint32*)(opt_tmp+2+4*i))); + } + break; + + case DHCP_DNS_SERVER: + j = *(uint8*)(opt_tmp+1); + for(i = 0; i < j/4; i++) { + kprintf("DHCP DNS Server: %d (0x%08X)\n", ntohl(*(uint32*)(opt_tmp+2+4*i)), ntohl(*(uint32*)(opt_tmp+2+4*i))); + } + break; + + case DHCP_DOMAIN_NAME: + kprintf("DHCP Domain Name: "); + j = *(uint8*)(opt_tmp+1); + for(i = 0; i < j; i++) { + kprintf("%c", *((char*)(opt_tmp + 2 + i))); + } + kprintf("\n"); + break; + + case DHCP_IP_ADDR_LEASE_TIME: + kprintf("DHCP IP Lease Time: %d (0x%08X)\n", ntohl(*(uint32*)(opt_tmp+2)), ntohl(*(uint32*)(opt_tmp+2))); + break; + + case DHCP_RENEWAL_TIME_VALUE: + kprintf("DHCP Renewal (T1) Time: %d (0x%08X)\n", ntohl(*(uint32*)(opt_tmp+2)), ntohl(*(uint32*)(opt_tmp+2))); + break; + + case DHCP_REBINDING_TIME_VALUE: + kprintf("DHCP Rebinding (T2) Time: %d (0x%08X)\n", ntohl(*(uint32*)(opt_tmp+2)), ntohl(*(uint32*)(opt_tmp+2))); + break; + + case DHCP_MESSAGE_TYPE: + kprintf("DHCP Message Type: %d\n", *(uint8*)(opt_tmp+2)); + break; + + case DHCP_REQUESTED_IP: + kprintf("DHCP Requested IP: %d (0x%08X)\n", ntohl(*(uint32*)(opt_tmp+2)), ntohl(*(uint32*)(opt_tmp+2))); + break; + + case DHCP_SERVER_ID: + kprintf("DHCP Server ID: %d (0x%08X)\n", ntohl(*(uint32*)(opt_tmp+2)), ntohl(*(uint32*)(opt_tmp+2))); + break; + + case DHCP_VENDER_OPTIONS: + kprintf("DHCP Vender Options List:\n"); + j = *(uint8*)(opt_tmp+1); + for(i = 0; i < j; i++) { + kprintf(" %d\n", *(uint8*)(opt_tmp+i+2)); + } + break; + + case DHCP_PARAMETER_REQUEST_LIST: + kprintf("DHCP Parameter List:\n"); + j = *(uint8*)(opt_tmp+1); + for(i = 0; i < j; i++) { + kprintf(" %d\n", *(uint8*)(opt_tmp+i+2)); + } + break; + + case DHCP_VENDOR_CLASS_ID: + kprintf("DHCP Class Identifier: %.32s\n", (char*)(opt_tmp+2)); + break; + + default: + kprintf("Unknown DHCP option: %d\n", (unsigned char)(*opt_tmp)); + break; + + } + + opt_tmp++; /* move to length octet */ + opt_tmp += *(uint8*)opt_tmp + 1; + } + kprintf("\n"); +} + + +/*------------------------------------------------------------------------ + * get_dhcp_option_value - Retrieve a pointer to the value for a particular + * DHCP options key + *------------------------------------------------------------------------ + */ +char* get_dhcp_option_value(const struct dhcpmsg* dmsg, uint32 dmsg_size, uint8 option_key) +{ + unsigned char* opt_tmp; + unsigned char* eom; + + eom = (unsigned char*)dmsg + dmsg_size - 1; + opt_tmp = (unsigned char*)dmsg->dc_opt; + + while(opt_tmp < eom) { + + /* If the option value matches return the value */ + if((*opt_tmp) == option_key) { + + /* Offset past the option value and the size (2 bytes) */ + return (char*)(opt_tmp+2); + } + + opt_tmp++; /* move to length octet */ + opt_tmp += *(uint8*)opt_tmp + 1; + } + + /* Option value not found */ + return NULL; +} + +/*------------------------------------------------------------------------ + * build_dhcp_discover - handcraft a DHCP Discover message in dmsg + *------------------------------------------------------------------------ + */ +int32 build_dhcp_discover(struct dhcpmsg* dmsg) +{ + uint32 j; + uint32 xid; /* xid used for the exchange */ + + memcpy(&xid, NetData.ethucast, 4); /* use 4 bytes from MAC as XID */ + memset(dmsg, 0x00, sizeof(struct dhcpmsg)); + + dmsg->dc_bop = 0x01; /* Outgoing request */ + dmsg->dc_htype = 0x01; /* hardware type is Ethernet */ + dmsg->dc_hlen = 0x06; /* hardware address length */ + dmsg->dc_hops = 0x00; /* Hop count */ + dmsg->dc_xid = htonl(xid); /* xid (unique ID) */ + dmsg->dc_secs = 0x0000; /* seconds */ + dmsg->dc_flags = 0x0000; /* flags */ + dmsg->dc_cip = 0x00000000; /* Client IP address */ + dmsg->dc_yip = 0x00000000; /* Your IP address */ + dmsg->dc_sip = 0x00000000; /* Server IP address */ + dmsg->dc_gip = 0x00000000; /* Gateway IP address */ + memset(&dmsg->dc_chaddr,'\0',16);/* Client hardware address */ + memcpy(&dmsg->dc_chaddr, NetData.ethucast, ETH_ADDR_LEN); + memset(&dmsg->dc_bootp,'\0',192);/* zero the bootp area */ + dmsg->dc_cookie = htonl(0x63825363); /* Magic cookie for DHCP */ + + j = 0; + dmsg->dc_opt[j++] = 0xff & 53; /* DHCP message type option */ + dmsg->dc_opt[j++] = 0xff & 1; /* option length */ + dmsg->dc_opt[j++] = 0xff & 1; /* DHCP Dicover message */ + dmsg->dc_opt[j++] = 0xff & 0; /* Options padding */ + + dmsg->dc_opt[j++] = 0xff & 55; /* DHCP parameter request list */ + dmsg->dc_opt[j++] = 0xff & 2; /* option length */ + dmsg->dc_opt[j++] = 0xff & 1; /* request subnet mask */ + dmsg->dc_opt[j++] = 0xff & 3; /* request default router addr-> */ + + return (uint32)((char *)&dmsg->dc_opt[j] - (char *)dmsg + 1); +} + +/*------------------------------------------------------------------------ + * build_dhcp_request - handcraft a DHCP request message in dmsg + *------------------------------------------------------------------------ + */ +int32 build_dhcp_request(struct dhcpmsg* dmsg, const struct dhcpmsg* dmsg_offer, uint32 dsmg_offer_size) +{ + uint32 j; + uint32 xid; /* xid used for the exchange */ + uint32* server_ip; /* DHCP server IP from DHCP offer message */ + + memcpy(&xid, NetData.ethucast, 4); /* use 4 bytes from MAC as XID */ + memset(dmsg, 0x00, sizeof(struct dhcpmsg)); + + dmsg->dc_bop = 0x01; /* Outgoing request */ + dmsg->dc_htype = 0x01; /* hardware type is Ethernet */ + dmsg->dc_hlen = 0x06; /* hardware address length */ + dmsg->dc_hops = 0x00; /* Hop count */ + dmsg->dc_xid = htonl(xid); /* xid (unique ID) */ + dmsg->dc_secs = 0x0000; /* seconds */ + dmsg->dc_flags = 0x0000; /* flags */ + dmsg->dc_cip = 0x00000000; /* Client IP address */ + dmsg->dc_yip = 0x00000000; /* Your IP address */ + dmsg->dc_sip = dmsg_offer->dc_sip; /* Server IP address */ + dmsg->dc_gip = 0x00000000; /* Gateway IP address */ + memset(&dmsg->dc_chaddr,'\0',16);/* Client hardware address */ + memcpy(&dmsg->dc_chaddr, NetData.ethucast, ETH_ADDR_LEN); + memset(&dmsg->dc_bootp,'\0',192);/* zero the bootp area */ + dmsg->dc_cookie = htonl(0x63825363); /* Magic cookie for DHCP */ + + j = 0; + dmsg->dc_opt[j++] = 0xff & 53; /* DHCP message type option */ + dmsg->dc_opt[j++] = 0xff & 1; /* option length */ + dmsg->dc_opt[j++] = 0xff & 3; /* DHCP Request message */ + dmsg->dc_opt[j++] = 0xff & 0; /* Options padding */ + dmsg->dc_opt[j++] = 0; + dmsg->dc_opt[j++] = 0; + dmsg->dc_opt[j++] = 0xff & 50; /* Requested IP */ + dmsg->dc_opt[j++] = 0xff & 4; /* option length */ + //*((uint32*)&dmsg->dc_opt[j]) = dmsg_offer->dc_yip; + memcpy(&dmsg->dc_opt[j], &dmsg_offer->dc_yip, 4); + j += 4; + + /* Retrieve the DHCP server IP from the DHCP options */ + server_ip = (uint32*)get_dhcp_option_value(dmsg_offer, dsmg_offer_size, DHCP_SERVER_ID); + + if(server_ip == 0) { + kprintf("Unable to retrieve DHCP server IP address from DHCP Offer\n"); + dump_dhcp_msg(dmsg_offer, dsmg_offer_size); + return SYSERR; + } + dmsg->dc_opt[j++] = 0; + dmsg->dc_opt[j++] = 0; + dmsg->dc_opt[j++] = 0xff & 54; /* Server IP */ + dmsg->dc_opt[j++] = 0xff & 4; /* option length */ + //*((uint32*)&dmsg->dc_opt[j]) = *server_ip; + memcpy(&dmsg->dc_opt[j], server_ip, 4); + j += 4; + + return (uint32)((char *)&dmsg->dc_opt[j] - (char *)dmsg + 1); +} + +/*------------------------------------------------------------------------ + * getlocalip - use DHCP to obtain an IP address + *------------------------------------------------------------------------ + */ +uint32 getlocalip(void) +{ + if (NetData.ipvalid == TRUE) { + return NetData.ipucast; + } + + return getlocalip_boot(NULL, NULL, NULL); +} + +/*------------------------------------------------------------------------ + * getlocalip_boot - use DHCP to obtain an IP address + *------------------------------------------------------------------------ + */ +uint32 getlocalip_boot(uint32* boot_server, char* boot_file, uint32* size) +{ + int32 slot; /* UDP slot to use */ + struct dhcpmsg dmsg_snd; /* holds outgoing DHCP messages */ + struct dhcpmsg dmsg_rvc; /* holds incoming DHCP messages */ + + int32 i, j; /* retry counters */ + int32 len; /* length of data sent */ + int32 inlen; /* length of data received */ + char *optptr; /* pointer to options area */ + char *eop; /* address of end of packet */ + int32 msgtype; /* type of DCHP message */ + uint32 addrmask; /* address mask for network */ + uint32 routeraddr; /* default router address */ + uint32 tmp; /* used for byte conversion */ + uint32* tmp_server_ip; /* temp DHCP server pointer */ + + slot = udp_register(0, UDP_DHCP_SPORT, UDP_DHCP_CPORT); + if (slot == SYSERR) { + kprintf("getlocalip: cannot register with UDP\r\n"); + return SYSERR; + } + + len = build_dhcp_discover(&dmsg_snd); + if(len == SYSERR) { + kprintf("getlocalip: Unable to build DHCP discover\r\n"); + return SYSERR; + } + + for (i = 0; i < DHCP_RETRY; i++) { + udp_sendto(slot, IP_BCAST, UDP_DHCP_SPORT, (char *)&dmsg_snd, len); + + /* Read 3 incoming DHCP messages and check for an offer */ + /* or wait for three timeout periods if no message */ + /* arrives. */ + + for (j=0; j<3; j++) { + inlen = udp_recv(slot, (char *)&dmsg_rvc, sizeof(struct dhcpmsg),2000); + if (inlen == TIMEOUT) { + continue; + } else if (inlen == SYSERR) { + return SYSERR; + } + /* Check that incoming message is a valid */ + /* response (ID matches our request) */ + + if ( (ntohl(dmsg_rvc.dc_xid) != ntohl(dmsg_snd.dc_xid)) ) { + continue; + } + + eop = (char *)&dmsg_rvc + inlen - 1; + optptr = (char *)&dmsg_rvc.dc_opt; + msgtype = addrmask = routeraddr = 0; + + while (optptr < eop) { + + switch (*optptr) { + case 53: /* message type */ + msgtype = 0xff & *(optptr+2); + break; + + case 1: /* subnet mask */ + memcpy((void *)&tmp, optptr+2, 4); + addrmask = ntohl(tmp); + break; + + case 3: /* router address */ + memcpy((void *)&tmp, optptr+2, 4); + routeraddr = ntohl(tmp); + break; + } + optptr++; /* move to length octet */ + optptr += (0xff & *optptr) + 1; + } + + if (msgtype == 0x02) { /* offer - send request */ + kprintf("dhcp: got offer send req\n"); + len = build_dhcp_request(&dmsg_snd, &dmsg_rvc, inlen); + if(len == SYSERR) { + kprintf("getlocalip: Unable to build DHCP request\r\n"); + return SYSERR; + } + kprintf("calling udp_sendto\n"); + udp_sendto(slot, IP_BCAST, UDP_DHCP_SPORT, + (char *)&dmsg_snd, len); + continue; + + } else if (dmsg_rvc.dc_opt[2] != 0x05) { + /* if not an ack skip it */ + continue; + } + if (addrmask != 0) { + NetData.ipmask = addrmask; + } + if (routeraddr != 0) { + NetData.iprouter = routeraddr; + } + NetData.ipucast = ntohl(dmsg_rvc.dc_yip); + NetData.ipprefix = NetData.ipucast & NetData.ipmask; + NetData.ipbcast = NetData.ipprefix | ~NetData.ipmask; + NetData.ipvalid = TRUE; + udp_release(slot); + + if(boot_server != NULL && + size != NULL && + boot_file != NULL) { + + /* Retrieve the boot server IP */ + if(dot2ip((char*)dmsg_rvc.sname, boot_server) != OK) { + + /* Could not retrieve the boot server from the BOOTP fields */ + /* Assume the boot server is the DHCP server */ + /* Retrieve the DHCP server IP from the DHCP options */ + tmp_server_ip = (uint32*)get_dhcp_option_value(&dmsg_rvc, len, DHCP_SERVER_ID); + if(tmp_server_ip == 0) { + kprintf("Unable to retrieve boot server IP\n"); + dump_dhcp_msg(&dmsg_rvc, len); + return (uint32)SYSERR; + } + (*boot_server) = ntohl(*tmp_server_ip); + } + (*size) = (*size) < sizeof(dmsg_rvc.bootfile) ? (*size) : sizeof(dmsg_rvc.bootfile); + memcpy(boot_file, dmsg_rvc.bootfile, *size); + } + + return NetData.ipucast; + } + } + + kprintf("DHCP failed to get response\r\n"); + udp_release(slot); + return (uint32)SYSERR; +} diff --git a/net/dns.c b/net/dns.c new file mode 100644 index 0000000..23c8770 --- /dev/null +++ b/net/dns.c @@ -0,0 +1,268 @@ +/* dns.c - dns_qa, dns_bldq, dns_geta, dns_getrname */ + +#include +#include +#include + +uint32 nsaddr; + +uint32 dns_bldq(char *, char *); +uint32 dns_geta(char *, struct dnspkt *); +uint32 dns_getrname(char *, char *, char *); + +/*------------------------------------------------------------------------ + * dns_qa - Send a DNS Address Query and wait for the Response + *------------------------------------------------------------------------ + */ +uint32 dns_qa ( + char *dname /* Domain name to be resolved */ + ) +{ + struct dnspkt *qpkt; /* Query Packet */ + struct dnspkt *rpkt; /* Response Pkt */ + uint32 qlen; /* Query length */ + uid32 slot; /* UDP Slot */ + int32 rlen; /* Response len */ + uint32 ipaddr; /* IP address */ + int32 i; + + /* Check if we have a valid name pointer */ + + if(dname == NULL) { + return (uint32)SYSERR; + } + + /* Register a UDP Slot */ + + slot = udp_register(nsaddr, 53, 12345); + if(slot == SYSERR) { + return (uint32)SYSERR; + } + + /* Allocate memory for Query and Response messages */ + + qpkt = (struct dnspkt *)getmem(sizeof(struct dnspkt)); + if((int32)qpkt == SYSERR) { + udp_release(slot); + return (uint32)SYSERR; + } + + rpkt = (struct dnspkt *)getmem(sizeof(struct dnspkt)); + if((int32)rpkt == SYSERR) { + udp_release(slot); + freemem((char*)qpkt, sizeof(struct dnspkt)); + return (uint32)SYSERR; + } + + /* Build the Query message */ + + memset((char *)qpkt, 0, sizeof(struct dnspkt)); + + qpkt->id = currpid; + qpkt->rd = 1; + qpkt->qdcount = htons(1); + + //kprintf("building question\n"); + qlen = dns_bldq(dname, qpkt->data); + /*for(i = 0; i < qlen; i++) { + kprintf("%x ", qpkt->data[i]); + }*/ + + ipaddr = (uint32)SYSERR; + for(i = 0; i < 3; i++) { + + /* Send the Query message */ + + udp_send(slot, (char*)qpkt, 12 + qlen); + + /* Wait for the response */ + + rlen = udp_recv(slot, (char*)rpkt, 512, 3000); + if(rlen == SYSERR) { + continue; + } + else if(rlen == TIMEOUT) { + continue; + } + else { + /*kprintf("Response header: \n"); + uint16 *ptr = (uint16 *)rpkt; + for(i = 0; i < 4; i++) { + kprintf("%04X\n", *ptr); + ptr++; + }*/ + ipaddr = dns_geta(dname, rpkt); + } + } + + udp_release(slot); + freemem((char *)qpkt, sizeof(struct dnspkt)); + freemem((char *)rpkt, sizeof(struct dnspkt)); + return ntohl(ipaddr); +} + +/*------------------------------------------------------------------------ + * dns_bldq - Build a DNS Question and return the length + *------------------------------------------------------------------------ + */ +uint32 dns_bldq ( + char *dname, /* Domain Name */ + char *data /* Dest pointer */ + ) +{ + uint32 qlen; /* Length of Question */ + uint32 dlen; /* Length of domain name*/ + byte *llptr; /* Label length pointer */ + int32 i; + + /* Get length of the domain name */ + + dlen = strlen(dname); + + llptr = (byte*)(data++); + *llptr = 0; + qlen = 1; + for(i = 0; i < dlen; i++) { + + if(qlen >= 512) { + return (uint32)SYSERR; + } + if(dname[i] != '.') { + *data++ = dname[i]; + *llptr = *llptr + 1; + } + else { + llptr = (byte*)(data++); + *llptr = 0; + } + qlen++; + } + + *data++ = 0; + qlen++; + + /* Qtype = Address */ + *((uint16 *)data) = htons(DNS_QT_A); + data += 2; + qlen += 2; + + /* QClass = Internet */ + *((uint16 *)data) = htons(DNS_QC_IN); + qlen += 2; + + return qlen; +} + +/*------------------------------------------------------------------------ + * dns_geta - returns the first IP address in the Answer Section + *------------------------------------------------------------------------ + */ +uint32 dns_geta ( + char *dname, /* Domain Name */ + struct dnspkt *rpkt /* Response packet */ + ) +{ + uint16 qdcount; /* No. of Questions */ + uint16 ancount; /* No. of Answers */ + char *dptr; /* Data pointer */ + int32 i; + + qdcount = ntohs(rpkt->qdcount); + dptr = rpkt->data; + + //kprintf("skipping %d questions\n", qdcount); + for(i = 0; i < qdcount; i++) { + + byte llen; + + llen = *((byte *)dptr); + + while(llen != 0) { + + if(llen > 63) { + dptr += 2; + break; + } + + dptr += (1 + llen); + llen = *((byte *)dptr); + } + + if(llen == 0) { + dptr += 1; + } + dptr += (2 + 2); + } + + ancount = ntohs(rpkt->ancount); + //kprintf("we have %d answers\n", ancount); + + for(i = 0; i < ancount; i++) { + + char rname[256]; + uint32 dlen; + + dlen = dns_getrname((char *)rpkt, dptr, rname); + //kprintf("name %s\n", rname); + dptr += dlen; + + if(strncmp(rname, dname, strlen(dname)) == 0) { + if(ntohs(*((uint16 *)dptr)) == DNS_QT_A) { + dptr += 10; + return *((uint32 *)dptr); + } + } + + dptr += 8; + dptr += (2 + ntohs(*((uint16 *)dptr))); + } + + return (uint32)SYSERR; +} + +/*------------------------------------------------------------------------ + * dns_getrname - Create a C string from Resource Record + *------------------------------------------------------------------------ + */ +uint32 dns_getrname ( + char *sop, /* Start of Packet */ + char *son, /* Start of Name */ + char *dst /* Destination address */ + ) +{ + byte llen; + char *sson = son; + int32 i; + + llen = *((byte *)son++); + + while(llen != 0) { + + //kprintf("llen %d\n", llen); + if(llen <= 63) { + for(i = 0; i < llen; i++) { + *dst++ = *son++; + } + *dst++ = '.'; + llen = *((byte *)son++); + } + else { + uint16 offset; + + son--; + (*son) = (*son) & 0x3f; + + offset = (uint16)(*son++) * 256; + offset += (uint16)(*son++); + + dns_getrname(sop, sop+offset, dst); + + return (son-sson); + + } + } + + *dst = NULLCH; + + return (uint32)(son-sson); +} diff --git a/net/dot2ip.c b/net/dot2ip.c new file mode 100644 index 0000000..9598a89 --- /dev/null +++ b/net/dot2ip.c @@ -0,0 +1,59 @@ +/* dot2ip.c - dot2ip */ + +#include + +/*------------------------------------------------------------------------ + * dot2ip - Convert a string of dotted decimal to an unsigned integer + *------------------------------------------------------------------------ + */ +uint32 dot2ip ( + char *dotted, /* IP address in dotted decimal */ + uint32 *result /* Location to which binary IP */ + /* address will be stored */ + /* (host byte order) */ + ) +{ + int32 seg; /* Counts segments */ + int32 nch; /* Counts chars within segment */ + char ch; /* Next character */ + uint32 ipaddr; /* IP address in binary */ + int32 val; /* Binary value of one segment */ + + /* Input must have the form X.X.X.X, where X is 1 to 3 digits */ + + ipaddr = 0; + for (seg=0 ; seg<4 ; seg++) { /* For each segment */ + val = 0; + for (nch=0 ; nch<4; nch++) { /* Up to four chars per segment*/ + ch = *dotted++; + if ( (ch==NULLCH) || (ch == '.') ) { + if (nch == 0) { + return SYSERR; + } else { + break; + } + } + + /* Too many digits or non-digit is an error */ + + if ( (nch>=3) || (ch<'0') || (ch>'9') ) { + return SYSERR; + } + val = 10*val + (ch-'0'); + } + + if (val > 255) { /* Out of valid range */ + return SYSERR; + } + ipaddr = (ipaddr << 8) | val; + + if (ch == NULLCH) { + break; + } + } + if ( (seg >= 4) || (ch != NULLCH) ) { + return SYSERR; + } + *result = ipaddr; + return OK; +} diff --git a/net/hexdump.c b/net/hexdump.c new file mode 100644 index 0000000..e860c85 --- /dev/null +++ b/net/hexdump.c @@ -0,0 +1,119 @@ +/* hexdump.c - hexdump */ + +#include + +/*------------------------------------------------------------------------ + * hexdump - dump an Ethernet/IP/UDP packet in hexadecimal + *------------------------------------------------------------------------ + */ +void hexdump ( + char *p, int32 len /* ptr to packet and length of */ + /* payload (IP datagram) */ + ) +{ + int32 i; /* counts bytes */ + int32 word; /* counts 32 bits words */ + + for (i=0; i<6; i++) { + kprintf("%02x", 0xff & *p++); + } + kprintf(" "); + + for (i=0; i<6; i++) { + kprintf("%02x", 0xff & *p++); + } + kprintf(" "); + + for (i=0; i<2; i++) { + kprintf("%02x", 0xff & *p++); + } + kprintf("\t\tEnd Ethernet header\n"); + + for (word=0,i=0; i + +struct icmpentry icmptab[ICMP_SLOTS]; /* Table of processes using ping*/ + +/*------------------------------------------------------------------------ + * icmp_init - Initialize icmp table + *------------------------------------------------------------------------ + */ +void icmp_init(void) { + + int32 i; /* table index */ + + for(i=0; inet_ictype != ICMP_ECHOREPLY) && + (pkt->net_ictype != ICMP_ECHOREQST) ) { + freebuf((char *)pkt); + restore(mask); + return; + } + + /* Handle Echo Request message */ + + if (pkt->net_ictype == ICMP_ECHOREQST) { + + /* Send echo reply message */ + + replypkt = icmp_mkpkt(pkt->net_ipsrc,ICMP_ECHOREPLY, + pkt->net_icident, pkt->net_icseq, + (char *) &pkt->net_icdata, + pkt->net_iplen-IP_HDR_LEN-ICMP_HDR_LEN); + if ((int32)replypkt != SYSERR) { + ip_enqueue(replypkt); + } + freebuf((char *)pkt); + restore(mask); + return; + } + + /* Handle Echo Reply message: verify that ID is valid */ + + slot = pkt->net_icident; + if ( (slot < 0) || (slot >= ICMP_SLOTS) ) { + freebuf((char *)pkt); + restore(mask); + return; + } + + /* Verify that slot in table is in use and IP address */ + /* in incomming packet matches IP address in table */ + + icmptr = &icmptab[slot]; + if ( (icmptr->icstate == ICMP_FREE) || + (pkt->net_ipsrc != icmptr->icremip) ) { + freebuf((char *)pkt); /* discard packet */ + restore(mask); + return; + } + + /* Add packet to queue */ + + icmptr->iccount++; + icmptr->icqueue[icmptr->ictail++] = pkt; + if (icmptr->ictail >= ICMP_QSIZ) { + icmptr->ictail = 0; + } + if (icmptr->icstate == ICMP_RECV) { + icmptr->icstate = ICMP_USED; + send (icmptr->icpid, OK); + } + restore(mask); + return; +} + +/*------------------------------------------------------------------------ + * icmp_register - Register a remote IP address for ping replies + *------------------------------------------------------------------------ + */ +int32 icmp_register ( + uint32 remip /* Remote IP address */ + ) +{ + intmask mask; /* Saved interrupt mask */ + int32 i; /* Index into icmptab */ + int32 freeslot; /* Index of slot to use */ + struct icmpentry *icmptr; /* Pointer to icmptab entry */ + + mask = disable(); + + /* Find a free slot in the table */ + + freeslot = -1; + for (i=0; iicstate == ICMP_FREE) { + if (freeslot == -1) { + freeslot = i; + } + } else if (icmptr->icremip == remip) { + restore(mask); + return SYSERR; /* Already registered */ + } + } + if (freeslot == -1) { /* No free entries in table */ + + restore(mask); + return SYSERR; + } + + /* Fill in table entry */ + + icmptr = &icmptab[freeslot]; + icmptr->icstate = ICMP_USED; + icmptr->icremip = remip; + icmptr->iccount = 0; + icmptr->ichead = icmptr->ictail = 0; + icmptr->icpid = -1; + restore(mask); + return freeslot; +} + +/*------------------------------------------------------------------------ + * icmp_recv - Receive an icmp echo reply packet + *------------------------------------------------------------------------ + */ +int32 icmp_recv ( + int32 icmpid, /* ICMP slot identifier */ + char *buff, /* Buffer to ICMP data */ + int32 len, /* Length of buffer */ + uint32 timeout /* Time to wait in msec */ + ) +{ + intmask mask; /* Saved interrupt mask */ + struct icmpentry *icmptr; /* Pointer to icmptab entry */ + umsg32 msg; /* Message from recvtime() */ + struct netpacket *pkt; /* Pointer to packet being read */ + int32 datalen; /* Length of ICMP data area */ + char *icdataptr; /* Pointer to icmp data */ + int32 i; /* Counter for data copy */ + + /* Verify that the ID is valid */ + + if ( (icmpid < 0) || (icmpid >= ICMP_SLOTS) ) { + return SYSERR; + } + + /* Insure only one process touches the table at a time */ + + mask = disable(); + + /* Verify that the ID has been registered and is idle */ + + icmptr = &icmptab[icmpid]; + if (icmptr->icstate != ICMP_USED) { + restore(mask); + return SYSERR; + } + + if (icmptr->iccount == 0) { /* No packet is waiting */ + icmptr->icstate = ICMP_RECV; + icmptr->icpid = currpid; + msg = recvclr(); + msg = recvtime(timeout); /* Wait for a reply */ + icmptr->icstate = ICMP_USED; + if (msg == TIMEOUT) { + restore(mask); + return TIMEOUT; + } else if (msg != OK) { + restore(mask); + return SYSERR; + } + } + + /* Packet has arrived -- dequeue it */ + + pkt = icmptr->icqueue[icmptr->ichead++]; + if (icmptr->ichead >= ICMP_SLOTS) { + icmptr->ichead = 0; + } + icmptr->iccount--; + + /* Copy data from ICMP message into caller's buffer */ + + datalen = pkt->net_iplen - IP_HDR_LEN - ICMP_HDR_LEN; + icdataptr = (char *) &pkt->net_icdata; + for (i=0; i= len) { + break; + } + *buff++ = *icdataptr++; + } + freebuf((char *)pkt); + restore(mask); + return i; +} + +/*------------------------------------------------------------------------ + * icmp_send - Send an icmp packet + *------------------------------------------------------------------------ + */ +status icmp_send ( + uint32 remip, /* Remote IP address to use */ + uint16 type, /* ICMP type (req. or reply) */ + uint16 ident, /* ICMP identifier value */ + uint16 seq, /* ICMP sequence number */ + char *buf, /* pointer to data buffer */ + int32 len /* Length of data in buffer */ + ) +{ + intmask mask; /* Saved interrupt mask */ + struct netpacket *pkt; /* Packet returned by icmp_mkpkt*/ + int32 retval; /* Value returned by ip_send */ + + mask = disable(); + + /* Form a packet to send */ + + pkt = icmp_mkpkt(remip, type, ident, seq, buf, len); + if ((int32)pkt == SYSERR) { + return SYSERR; + } + + /* Send the packet */ + + retval = ip_send(pkt); + restore(mask); + return retval; +} + + +/*------------------------------------------------------------------------ + * icmp_mkpkt - Make an icmp packet by filling in fields + *------------------------------------------------------------------------ + */ +struct netpacket *icmp_mkpkt ( + uint32 remip, /* Remote IP address to use */ + uint16 type, /* ICMP type (req. or reply) */ + uint16 ident, /* ICMP identifier value */ + uint16 seq, /* ICMP sequence number */ + char *buf, /* Pointer to data buffer */ + int32 len /* Length of data in buffer */ + ) +{ + struct netpacket *pkt; /* pointer to packet buffer */ + static uint32 ipident=32767; /* IP ident field */ + + /* Allocate packet */ + + pkt = (struct netpacket *)getbuf(netbufpool); + + if ((int32)pkt == SYSERR) { + panic("icmp_mkpkt: cannot get a network buffer\n"); + } + + /* Create icmp packet in pkt */ + + memcpy(pkt->net_ethsrc, NetData.ethucast, ETH_ADDR_LEN); + pkt->net_ethtype = 0x800; /* Type is IP */ + pkt->net_ipvh = 0x45; /* IP version and hdr length */ + pkt->net_iptos = 0x00; /* Type of service */ + pkt->net_iplen= IP_HDR_LEN+ICMP_HDR_LEN+len;/* datagram length */ + pkt->net_ipid = ipident++; /* Datagram gets next IDENT */ + pkt->net_ipfrag = 0x0000; /* IP flags & fragment offset */ + pkt->net_ipttl = 0xff; /* IP time-to-live */ + pkt->net_ipproto = IP_ICMP; /* Datagram carries icmp */ + pkt->net_ipcksum = 0x0000; /* Initial checksum */ + pkt->net_ipsrc = NetData.ipucast; /* IP source address */ + pkt->net_ipdst = remip; /* IP destination address */ + + + pkt->net_ictype = type; /* ICMP type */ + pkt->net_iccode = 0; /* Code is zero for ping */ + pkt->net_iccksum = 0x0000; /* Temporarily zero the cksum */ + pkt->net_icident = ident; /* ICMP identification */ + pkt->net_icseq = seq; /* ICMP sequence number */ + memcpy(pkt->net_icdata, buf, len); + + /* Return packet to caller */ + + return pkt; +} + + +/*------------------------------------------------------------------------ + * icmp_release - Release a previously-registered ICMP icmpid + *------------------------------------------------------------------------ + */ +status icmp_release ( + int32 icmpid /* Slot in icmptab to release */ + ) +{ + intmask mask; /* Saved interrupt mask */ + struct icmpentry *icmptr; /* Pointer to icmptab entry */ + struct netpacket *pkt; /* Pointer to packet */ + + mask = disable(); + + /* Check arg and insure entry in table is in use */ + + if ( (icmpid < 0) || (icmpid >= ICMP_SLOTS) ) { + restore(mask); + return SYSERR; + } + icmptr = &icmptab[icmpid]; + if (icmptr->icstate != ICMP_USED) { + restore(mask); + return SYSERR; + } + + /* Remove each packet from the queue and free the buffer */ + + resched_cntl(DEFER_START); + while (icmptr->iccount > 0) { + pkt = icmptr->icqueue[icmptr->ichead++]; + if (icmptr->ichead >= ICMP_SLOTS) { + icmptr->ichead = 0; + + } + freebuf((char *)pkt); + icmptr->iccount--; + } + + /* Mark the entry free */ + + icmptr->icstate = ICMP_FREE; + resched_cntl(DEFER_STOP); + restore(mask); + return OK; +} + +/*------------------------------------------------------------------------ + * icmp_cksum - Compute a checksum for a specified set of data bytes + *------------------------------------------------------------------------ + */ +uint16 icmp_cksum ( + char *buf, /* Buffer of items for checksum */ + int32 buflen /* Size of buffer in bytes */ + ) +{ + int32 scount; /* Number of 16-bit values buf */ + uint32 cksum; /* Checksum being computed */ + uint16 *sptr; /* Walks along buffer */ + uint16 word; /* One 16-bit word */ + + /* Walk along buffer and sum all 16-bit values */ + + scount = buflen >> 1; /* Divide by 2 and round down */ + sptr = (uint16 *)buf; + cksum = 0; + for (; scount > 0; scount--) { + word = (uint32) *sptr++; + cksum += ntohs(word); + } + + /* If buffer lenght is odd, add last byte */ + + if ( (buflen & 0x01) !=0 ) { + cksum += (uint32) (*((char *)sptr) << 8); + } + cksum += (cksum >> 16); + cksum = 0xffff & ~cksum; + return (uint16) (0xffff & cksum); +} + + +/*------------------------------------------------------------------------ + * icmp_hton - Convert ICMP ping fields to network byte order + *------------------------------------------------------------------------ + */ +void icmp_hton ( + struct netpacket *pktptr + ) +{ + pktptr->net_iccksum = htons(pktptr->net_iccksum); + pktptr->net_icident = htons(pktptr->net_icident); + pktptr->net_icseq = htons(pktptr->net_icseq); +} + + +/*------------------------------------------------------------------------ + * icmp_ntoh - Convert ICMP ping fields to host byte order + *------------------------------------------------------------------------ + */ +void icmp_ntoh ( + struct netpacket *pktptr + ) +{ + pktptr->net_iccksum = ntohs(pktptr->net_iccksum); + pktptr->net_icident = ntohs(pktptr->net_icident); + pktptr->net_icseq = ntohs(pktptr->net_icseq); +} diff --git a/net/ip.c b/net/ip.c new file mode 100644 index 0000000..7bb29a2 --- /dev/null +++ b/net/ip.c @@ -0,0 +1,466 @@ +/* ip.c - ip_in, ip_send, ip_local, ip_out, ipcksum, ip_hton, ip_ntoh, */ +/* ipout, ip_enqueue */ + +#include + +struct iqentry ipoqueue; /* Queue of outgoing packets */ + +/*------------------------------------------------------------------------ + * ip_in - Handle an IP packet that has arrived over a network + *------------------------------------------------------------------------ + */ + +void ip_in( + struct netpacket *pktptr /* Pointer to the packet */ + ) +{ + int32 icmplen; /* Length of ICMP message */ + + /* Verify checksum */ + + if (ipcksum(pktptr) != 0) { + // kprintf("IP header checksum failed\n\r"); + freebuf((char *)pktptr); + return; + } + + /* Convert IP header fields to host order */ + + ip_ntoh(pktptr); + + /* Ensure version and length are valid */ + + if (pktptr->net_ipvh != 0x45) { + kprintf("IP version failed\n\r"); + freebuf((char *)pktptr); + return; + } + + /* Verify encapsulated prototcol checksums and then convert */ + /* the encapsulated headers to host byte order */ + + switch (pktptr->net_ipproto) { + + case IP_UDP: + /* Skipping UDP checksum for now */ + udp_ntoh(pktptr); + break; + + case IP_ICMP: + icmplen = pktptr->net_iplen - IP_HDR_LEN; + if (icmp_cksum((char *)&pktptr->net_ictype,icmplen) != 0){ + freebuf((char *)pktptr); + return; + } + icmp_ntoh(pktptr); + break; + + default: + break; + } + + /* Deliver 255.255.255.255 to local stack */ + + if (pktptr->net_ipdst == IP_BCAST) { + ip_local(pktptr); + return; + } + + /* If we do not yet have a valid address, accept UDP packets */ + /* (to get DHCP replies) and drop others */ + + if (!NetData.ipvalid) { + if (pktptr->net_ipproto == IP_UDP) { + ip_local(pktptr); + return; + } else { + freebuf((char *)pktptr); + return; + } + } + + /* If packet is destined for us, accept it; otherwise, drop it */ + + if ( (pktptr->net_ipdst == NetData.ipucast) || + (pktptr->net_ipdst == NetData.ipbcast) || + (pktptr->net_ipdst == IP_BCAST) ) { + ip_local(pktptr); + return; + } else { + + /* Drop the packet */ + freebuf((char *)pktptr); + return; + } +} + + +/*------------------------------------------------------------------------ + * ip_send - Send an outgoing IP datagram from the local stack + *------------------------------------------------------------------------ + */ + +status ip_send( + struct netpacket *pktptr /* Pointer to the packet */ + ) +{ + intmask mask; /* Saved interrupt mask */ + uint32 dest; /* Destination of the datagram */ + int32 retval; /* Return value from functions */ + uint32 nxthop; /* Next-hop address */ + + mask = disable(); + + /* Pick up the IP destination address from the packet */ + + dest = pktptr->net_ipdst; + + /* Loop back to local stack if destination 127.0.0.0/8 */ + + if ((dest&0xff000000) == 0x7f000000) { + ip_local(pktptr); + restore(mask); + return OK; + } + + /* Loop back if the destination matches our IP unicast address */ + + if (dest == NetData.ipucast) { + ip_local(pktptr); + restore(mask); + return OK; + } + + /* Broadcast if destination is 255.255.255.255 */ + + if ( (dest == IP_BCAST) || + (dest == NetData.ipbcast) ) { + memcpy(pktptr->net_ethdst, NetData.ethbcast, + ETH_ADDR_LEN); + retval = ip_out(pktptr); + restore(mask); + return retval; + } + + /* If destination is on the local network, next hop is the */ + /* destination; otherwise, next hop is default router */ + + + if ( (dest & NetData.ipmask) == NetData.ipprefix) { + + /* Next hop is the destination itself */ + nxthop = dest; + + } else { + + /* Next hop is default router on the network */ + nxthop = NetData.iprouter; + + } + + if (nxthop == 0) { /* Dest. invalid or no default route */ + freebuf((char *)pktptr); + return SYSERR; + } + + /* Resolve the next-hop address to get a MAC address */ + + retval = arp_resolve(nxthop, pktptr->net_ethdst); + if (retval != OK) { + freebuf((char *)pktptr); + return SYSERR; + } + + /* Send the packet */ + + retval = ip_out(pktptr); + restore(mask); + return retval; +} + + +/*------------------------------------------------------------------------ + * ip_local - Deliver an IP datagram to the local stack + *------------------------------------------------------------------------ + */ +void ip_local( + struct netpacket *pktptr /* Pointer to the packet */ + ) +{ + /* Use datagram contents to determine how to process */ + + switch (pktptr->net_ipproto) { + + case IP_UDP: + udp_in(pktptr); + return; + + case IP_ICMP: + icmp_in(pktptr); + return; + + default: + freebuf((char *)pktptr); + return; + } +} + + +/*------------------------------------------------------------------------ + * ip_out - Transmit an outgoing IP datagram + *------------------------------------------------------------------------ + */ +status ip_out( + struct netpacket *pktptr /* Pointer to the packet */ + ) +{ + uint16 cksum; /* Checksum in host byte order */ + int32 len; /* Length of ICMP message */ + int32 pktlen; /* Length of entire packet */ + int32 retval; /* Value returned by write */ + + /* Compute total packet length */ + + pktlen = pktptr->net_iplen + ETH_HDR_LEN; + + /* Convert encapsulated protocol to network byte order */ + + switch (pktptr->net_ipproto) { + + case IP_UDP: + + pktptr->net_udpcksum = 0; + udp_hton(pktptr); + + /* ...skipping UDP checksum computation */ + + break; + + case IP_ICMP: + icmp_hton(pktptr); + + /* Compute ICMP checksum */ + + pktptr->net_iccksum = 0; + len = pktptr->net_iplen-IP_HDR_LEN; + cksum = icmp_cksum((char *)&pktptr->net_ictype, + len); + pktptr->net_iccksum = 0xffff & htons(cksum); + break; + + default: + break; + } + + /* Convert IP fields to network byte order */ + + ip_hton(pktptr); + + /* Compute IP header checksum */ + + pktptr->net_ipcksum = 0; + cksum = ipcksum(pktptr); + pktptr->net_ipcksum = 0xffff & htons(cksum); + + /* Convert Ethernet fields to network byte order */ + + eth_hton(pktptr); + + /* Send packet over the Ethernet */ + + retval = write(ETHER0, (char*)pktptr, pktlen); + freebuf((char *)pktptr); + + if (retval == SYSERR) { + return SYSERR; + } else { + return OK; + } +} + +/*------------------------------------------------------------------------ + * ipcksum - Compute the IP header checksum for a datagram + *------------------------------------------------------------------------ + */ + +uint16 ipcksum( + struct netpacket *pkt /* Pointer to the packet */ + ) +{ + uint16 *hptr; /* Ptr to 16-bit header values */ + int32 i; /* Counts 16-bit values in hdr */ + uint16 word; /* One 16-bit word */ + uint32 cksum; /* Computed value of checksum */ + + hptr= (uint16 *) &pkt->net_ipvh; + + /* Sum 16-bit words in the packet */ + + cksum = 0; + for (i=0; i<10; i++) { + word = *hptr++; + cksum += (uint32) htons(word); + } + + /* Add in carry, and take the ones-complement */ + + cksum += (cksum >> 16); + cksum = 0xffff & ~cksum; + + /* Use all-1s for zero */ + + if (cksum == 0xffff) { + cksum = 0; + } + return (uint16) (0xffff & cksum); +} + + +/*------------------------------------------------------------------------ + * ip_ntoh - Convert IP header fields to host byte order + *------------------------------------------------------------------------ + */ +void ip_ntoh( + struct netpacket *pktptr + ) +{ + pktptr->net_iplen = ntohs(pktptr->net_iplen); + pktptr->net_ipid = ntohs(pktptr->net_ipid); + pktptr->net_ipfrag = ntohs(pktptr->net_ipfrag); + pktptr->net_ipsrc = ntohl(pktptr->net_ipsrc); + pktptr->net_ipdst = ntohl(pktptr->net_ipdst); +} + +/*------------------------------------------------------------------------ + * ip_hton - Convert IP header fields to network byte order + *------------------------------------------------------------------------ + */ +void ip_hton( + struct netpacket *pktptr + + ) +{ + pktptr->net_iplen = htons(pktptr->net_iplen); + pktptr->net_ipid = htons(pktptr->net_ipid); + pktptr->net_ipfrag = htons(pktptr->net_ipfrag); + pktptr->net_ipsrc = htonl(pktptr->net_ipsrc); + pktptr->net_ipdst = htonl(pktptr->net_ipdst); +} + + +/*------------------------------------------------------------------------ + * ipout - Process that transmits IP packets from the IP output queue + *------------------------------------------------------------------------ + */ + +process ipout(void) +{ + struct netpacket *pktptr; /* Pointer to next the packet */ + struct iqentry *ipqptr; /* Pointer to IP output queue */ + uint32 destip; /* Destination IP address */ + uint32 nxthop; /* Next hop IP address */ + int32 retval; /* Value returned by functions */ + + ipqptr = &ipoqueue; + + while(1) { + + /* Obtain next packet from the IP output queue */ + + wait(ipqptr->iqsem); + pktptr = ipqptr->iqbuf[ipqptr->iqhead++]; + if (ipqptr->iqhead >= IP_OQSIZ) { + ipqptr->iqhead= 0; + } + + /* Fill in the MAC source address */ + + memcpy(pktptr->net_ethsrc, NetData.ethucast, ETH_ADDR_LEN); + + /* Extract destination address from packet */ + + destip = pktptr->net_ipdst; + + + /* Sanity check: packets sent to ioout should *not* */ + /* contain a broadcast address. */ + + if ((destip == IP_BCAST)||(destip == NetData.ipbcast)) { + kprintf("ipout: encountered a broadcast\n"); + freebuf((char *)pktptr); + continue; + } + + /* Check whether destination is the local computer */ + + if (destip == NetData.ipucast) { + ip_local(pktptr); + continue; + } + + /* Check whether destination is on the local net */ + + if ( (destip & NetData.ipmask) == NetData.ipprefix) { + + /* Next hop is the destination itself */ + + nxthop = destip; + } else { + + /* Next hop is default router on the network */ + + nxthop = NetData.iprouter; + } + + if (nxthop == 0) { /* Dest. invalid or no default route*/ + freebuf((char *)pktptr); + continue; + } + + /* Use ARP to resolve next-hop address */ + + retval = arp_resolve(nxthop, pktptr->net_ethdst); + if (retval != OK) { + freebuf((char *)pktptr); + continue; + } + + /* Use ipout to Convert byte order and send */ + + ip_out(pktptr); + } +} + + +/*------------------------------------------------------------------------ + * ip_enqueue - Deposit an outgoing IP datagram on the IP output queue + *------------------------------------------------------------------------ + */ +status ip_enqueue( + struct netpacket *pktptr /* Pointer to the packet */ + ) +{ + intmask mask; /* Saved interrupt mask */ + struct iqentry *iptr; /* Ptr. to network output queue */ + + /* Ensure only one process accesses output queue at a time */ + + mask = disable(); + + /* Enqueue packet on network output queue */ + + iptr = &ipoqueue; + if (semcount(iptr->iqsem) >= IP_OQSIZ) { + kprintf("ipout: output queue overflow\n"); + freebuf((char *)pktptr); + restore(mask); + return SYSERR; + } + iptr->iqbuf[iptr->iqtail++] = pktptr; + if (iptr->iqtail >= IP_OQSIZ) { + iptr->iqtail = 0; + } + signal(iptr->iqsem); + restore(mask); + return OK; +} diff --git a/net/net.c b/net/net.c new file mode 100644 index 0000000..1093740 --- /dev/null +++ b/net/net.c @@ -0,0 +1,139 @@ +/* net.c - net_init, netin, eth_hton */ + +#include +#include + +struct network NetData; +bpid32 netbufpool; + +/*------------------------------------------------------------------------ + * net_init - Initialize network data structures and processes + *------------------------------------------------------------------------ + */ + +void net_init (void) +{ + int32 nbufs; /* Total no of buffers */ + + /* Initialize the network data structure */ + + memset((char *)&NetData, NULLCH, sizeof(struct network)); + + /* Obtain the Ethernet MAC address */ + + control(ETHER0, ETH_CTRL_GET_MAC, (int32)NetData.ethucast, 0); + + memset((char *)NetData.ethbcast, 0xFF, ETH_ADDR_LEN); + + /* Create the network buffer pool */ + + nbufs = UDP_SLOTS * UDP_QSIZ + ICMP_SLOTS * ICMP_QSIZ + 1; + + netbufpool = mkbufpool(PACKLEN, nbufs); + + /* Initialize the ARP cache */ + + arp_init(); + + /* Initialize UDP */ + + udp_init(); + + /* Initialize ICMP */ + + icmp_init(); + + /* Initialize the IP output queue */ + + ipoqueue.iqhead = 0; + ipoqueue.iqtail = 0; + ipoqueue.iqsem = semcreate(0); + if((int32)ipoqueue.iqsem == SYSERR) { + panic("Cannot create ip output queue semaphore"); + return; + } + + /* Create the IP output process */ + + resume(create(ipout, NETSTK, NETPRIO, "ipout", 0, NULL)); + + /* Create a network input process */ + + resume(create(netin, NETSTK, NETPRIO, "netin", 0, NULL)); +} + + +/*------------------------------------------------------------------------ + * netin - Repeatedly read and process the next incoming packet + *------------------------------------------------------------------------ + */ + +process netin () +{ + struct netpacket *pkt; /* Ptr to current packet */ + int32 retval; /* Return value from read */ + + /* Do forever: read a packet from the network and process */ + + while(1) { + + /* Allocate a buffer */ + + pkt = (struct netpacket *)getbuf(netbufpool); + + /* Obtain next packet that arrives */ + + retval = read(ETHER0, (char *)pkt, PACKLEN); + if(retval == SYSERR) { + panic("Cannot read from Ethernet\n"); + } + + /* Convert Ethernet Type to host order */ + + eth_ntoh(pkt); + + /* Demultiplex on Ethernet type */ + + switch (pkt->net_ethtype) { + + case ETH_ARP: /* Handle ARP */ + arp_in((struct arppacket *)pkt); + continue; + + case ETH_IP: /* Handle IP */ + ip_in(pkt); + continue; + + case ETH_IPv6: /* Handle IPv6 */ + freebuf((char *)pkt); + continue; + + default: /* Ignore all other incoming packets */ + freebuf((char *)pkt); + continue; + } + } +} + +/*------------------------------------------------------------------------ + * eth_hton - Convert Ethernet type field to network byte order + *------------------------------------------------------------------------ + */ +void eth_hton( + struct netpacket *pktptr + ) +{ + pktptr->net_ethtype = htons(pktptr->net_ethtype); +} + + +/*------------------------------------------------------------------------ + * eth_ntoh - Convert Ethernet type field to host byte order + *------------------------------------------------------------------------ + */ +void eth_ntoh( + struct netpacket *pktptr + ) +{ + pktptr->net_ethtype = ntohs(pktptr->net_ethtype); +} diff --git a/net/netstart.c b/net/netstart.c new file mode 100644 index 0000000..5628955 --- /dev/null +++ b/net/netstart.c @@ -0,0 +1,42 @@ +/* netstart.c - netstart */ + +#include + +/*------------------------------------------------------------------------ + * netstart - Initialize network and run DHCP to get an IP address + *------------------------------------------------------------------------ + */ + +void netstart (char *bbb_ipaddr, char *bbb_router) { + uint32 ipaddr; /* IP address */ + uint32 router; /* Router */ + uint32 mask; /* Subnet Mask */ + + /* Initialize the network stack */ + + kprintf("...initializing network stack\n"); + net_init(); + + dot2ip(bbb_ipaddr,&ipaddr); + NetData.ipucast = ipaddr; + + kprintf("\nIP address is %d.%d.%d.%d (0x%08x)\n\r", + (ipaddr>>24)&0xff, (ipaddr>>16)&0xff, (ipaddr>>8)&0xff, + ipaddr&0xff,ipaddr); + + dot2ip("255.255.255.0",&mask); + NetData.ipmask = 0xFFFFFF00; + dot2ip(bbb_router,&router); + NetData.iprouter = router; + NetData.ipprefix = NetData.ipucast & NetData.ipmask; + NetData.ipbcast = NetData.ipprefix | ~NetData.ipmask; + NetData.ipvalid = TRUE; + + kprintf("Subnet mask is %d.%d.%d.%d and router is %d.%d.%d.%d\n\r", + (NetData.ipmask>>24)&0xff, (NetData.ipmask>>16)&0xff, + (NetData.ipmask>> 8)&0xff, NetData.ipmask&0xff, + (NetData.iprouter>>24)&0xff, (NetData.iprouter>>16)&0xff, + (NetData.iprouter>> 8)&0xff, NetData.iprouter&0xff); + + return; +} diff --git a/net/pdump.c b/net/pdump.c new file mode 100644 index 0000000..1985fe2 --- /dev/null +++ b/net/pdump.c @@ -0,0 +1,316 @@ +/* pdump.c - packet dump function */ + +#include + +/*------------------------------------------------------------------------ + * pdump - dump a packet assuming all fields are in network byte order + *------------------------------------------------------------------------ + */ +void pdump(struct netpacket *pptr) +{ + struct arppacket *aptr; + + kprintf("%02x:%02x:%02x:%02x:%02x:%02x >", + pptr->net_ethsrc[0], + pptr->net_ethsrc[1], + pptr->net_ethsrc[2], + pptr->net_ethsrc[3], + pptr->net_ethsrc[4], + pptr->net_ethsrc[5] + ); + kprintf(" %02x:%02x:%02x:%02x:%02x:%02x, ", + pptr->net_ethdst[0], + pptr->net_ethdst[1], + pptr->net_ethdst[2], + pptr->net_ethdst[3], + pptr->net_ethdst[4], + pptr->net_ethdst[5] + ); + + kprintf("ethertype "); + + switch (ntohs(pptr->net_ethtype)) { + + case 0x0806: + kprintf("ARP (0x%04x), length %d: ", + ntohs(pptr->net_ethtype), + sizeof(struct arppacket)); + aptr = (struct arppacket *)pptr; + + if ( (ntohs(aptr->arp_htype) != ARP_HTYPE) || + (ntohs(aptr->arp_ptype) != ARP_PTYPE) ) { + break; + } + + kprintf("hard addr len=%d), proto addr len=%d), ", + aptr->arp_hlen, + aptr->arp_plen); + + if (ntohs(aptr->arp_op) == ARP_OP_REQ) { + kprintf("Request who-has %d.%d.%d.%d tell %d.%d.%d.%d, ", + (ntohl(aptr->arp_tarpa)>>24)&0xff, + (ntohl(aptr->arp_tarpa)>>16)&0xff, + (ntohl(aptr->arp_tarpa)>>8)&0xff, + ntohl(aptr->arp_tarpa)&0xff, + (ntohl(aptr->arp_sndpa)>>24)&0xff, + (ntohl(aptr->arp_sndpa)>>16)&0xff, + (ntohl(aptr->arp_sndpa)>>8)&0xff, + ntohl(aptr->arp_sndpa)&0xff); + } else if (ntohs(aptr->arp_op) == ARP_OP_RPLY) { + kprintf("Reply %d.%d.%d.%d is-at %02x:%02x:%02x:%02x:%02x:%02x, ", + (ntohl(aptr->arp_sndpa)>>24)&0xff, + (ntohl(aptr->arp_sndpa)>>16)&0xff, + (ntohl(aptr->arp_sndpa)>>8)&0xff, + ntohl(aptr->arp_sndpa)&0xff, + aptr->arp_sndha[0], + aptr->arp_sndha[1], + aptr->arp_sndha[2], + aptr->arp_sndha[3], + aptr->arp_sndha[4], + aptr->arp_sndha[5]); + } else { + break; + } + + kprintf("length %d\n", sizeof(struct arppacket) - ETH_HDR_LEN); + break; + + case 0x0800: + kprintf("IPv4 (0x%04x), length %d: ", + ntohs(pptr->net_ethtype), + ntohs(pptr->net_iplen) + ETH_HDR_LEN); + + kprintf("("); + kprintf("tos 0x%01x, ttl %d, id %d, offset %d ", + pptr->net_iptos, + pptr->net_ipttl, + ntohs(pptr->net_ipid), + (ntohs(pptr->net_ipfrag) & 0x1fff)); + + kprintf("flags "); + if (ntohs(pptr->net_ipfrag) & 0x4000) + kprintf("[DF], "); + else if (ntohs(pptr->net_ipfrag) & 0x2000) + kprintf("[MF], " ); + else + kprintf("[none], "); + + kprintf("[ip checksum %s], ", + ipcksum(pptr) == 0 ? "ok" : "fail"); + + if (pptr->net_ipproto == IP_UDP) { + kprintf("proto UDP (%d), length %d", + pptr->net_ipproto, ntohs(pptr->net_iplen)); + kprintf(")\n"); + kprintf("\t%d.%d.%d.%d > ", + (ntohl(pptr->net_ipsrc)>>24)&0xff, + (ntohl(pptr->net_ipsrc)>>16)&0xff, + (ntohl(pptr->net_ipsrc)>>8)&0xff, + (ntohl(pptr->net_ipsrc)&0xff)); + kprintf("%d.%d.%d.%d: ", + (ntohl(pptr->net_ipdst)>>24)&0xff, + (ntohl(pptr->net_ipdst)>>16)&0xff, + (ntohl(pptr->net_ipdst)>>8)&0xff, + (ntohl(pptr->net_ipdst)&0xff)); + kprintf("[udp checksum none] "); + kprintf("UDP, src port %d, dst port %d, length %d\n", + ntohs(pptr->net_udpsport), + ntohs(pptr->net_udpdport), + ntohs(pptr->net_udplen) - UDP_HDR_LEN); + break; + } else if (pptr->net_ipproto == IP_ICMP) { + kprintf("proto ICMP (%d), length %d", + pptr->net_ipproto, ntohs(pptr->net_iplen)); + kprintf(")\n"); + kprintf("\t%d.%d.%d.%d > ", + (ntohl(pptr->net_ipsrc)>>24)&0xff, + (ntohl(pptr->net_ipsrc)>>16)&0xff, + (ntohl(pptr->net_ipsrc)>>8)&0xff, + (ntohl(pptr->net_ipsrc)&0xff)); + kprintf("%d.%d.%d.%d: ", + (ntohl(pptr->net_ipdst)>>24)&0xff, + (ntohl(pptr->net_ipdst)>>16)&0xff, + (ntohl(pptr->net_ipdst)>>8)&0xff, + (ntohl(pptr->net_ipdst)&0xff)); + + if (pptr->net_ictype == ICMP_ECHOREQST) + kprintf("ICMP echo request, "); + else if (pptr->net_ictype == ICMP_ECHOREPLY) + kprintf("ICMP echo reply, "); + else + break; + + kprintf("id %d, seq %d\n", + ntohs(pptr->net_icident), + ntohs(pptr->net_icseq)); + + break; + } + else + break; + default: + kprintf("unknown\n"); + break; + + } + + return; +} + +/*------------------------------------------------------------------------ + * pdumph - dump a packet assuming all fields are in host byte order + *------------------------------------------------------------------------ + */ +void pdumph(struct netpacket *pptr) +{ + struct arppacket *aptr; + + kprintf("%02x:%02x:%02x:%02x:%02x:%02x >", + pptr->net_ethsrc[0], + pptr->net_ethsrc[1], + pptr->net_ethsrc[2], + pptr->net_ethsrc[3], + pptr->net_ethsrc[4], + pptr->net_ethsrc[5] + ); + kprintf(" %02x:%02x:%02x:%02x:%02x:%02x, ", + pptr->net_ethdst[0], + pptr->net_ethdst[1], + pptr->net_ethdst[2], + pptr->net_ethdst[3], + pptr->net_ethdst[4], + pptr->net_ethdst[5] + ); + + kprintf("ethertype "); + + switch (pptr->net_ethtype) { + + case 0x0806: + kprintf("ARP (0x%04x), length %d: ", + pptr->net_ethtype, + sizeof(struct arppacket)); + aptr = (struct arppacket *)pptr; + + if ( (aptr->arp_htype != ARP_HTYPE) || + (aptr->arp_ptype != ARP_PTYPE) ) { + break; + } + + kprintf("hard addr len=%d), proto addr len=%d), ", + aptr->arp_hlen, + aptr->arp_plen); + + if (aptr->arp_op == ARP_OP_REQ) { + kprintf("Request who-has %d.%d.%d.%d tell %d.%d.%d.%d, ", + (aptr->arp_tarpa>>24)&0xff, + (aptr->arp_tarpa>>16)&0xff, + (aptr->arp_tarpa>>8)&0xff, + aptr->arp_tarpa&0xff, + (aptr->arp_sndpa>>24)&0xff, + (aptr->arp_sndpa>>16)&0xff, + (aptr->arp_sndpa>>8)&0xff, + aptr->arp_sndpa&0xff); + } else if (aptr->arp_op == ARP_OP_RPLY) { + kprintf("Reply %d.%d.%d.%d is-at %02x:%02x:%02x:%02x:%02x:%02x, ", + (aptr->arp_sndpa>>24)&0xff, + (aptr->arp_sndpa>>16)&0xff, + (aptr->arp_sndpa>>8)&0xff, + aptr->arp_sndpa&0xff, + aptr->arp_sndha[0], + aptr->arp_sndha[1], + aptr->arp_sndha[2], + aptr->arp_sndha[3], + aptr->arp_sndha[4], + aptr->arp_sndha[5]); + } else { + break; + } + + kprintf("length %d\n", sizeof(struct arppacket) - ETH_HDR_LEN); + break; + + case 0x0800: + kprintf("IPv4 (0x%04x), length %d: ", + pptr->net_ethtype, + pptr->net_iplen + ETH_HDR_LEN); + + kprintf("("); + kprintf("tos 0x%01x, ttl %d, id %d, offset %d ", + pptr->net_iptos, + pptr->net_ipttl, + pptr->net_ipid, + pptr->net_ipfrag & 0x1fff); + + kprintf("flags "); + if (pptr->net_ipfrag & 0x4000) + kprintf("[DF], "); + else if (pptr->net_ipfrag & 0x2000) + kprintf("[MF], " ); + else + kprintf("[none], "); + + kprintf("[ip checksum %s], ", + ipcksum(pptr) == 0 ? "ok" : "fail"); + + if (pptr->net_ipproto == IP_UDP) { + kprintf("proto UDP (%d), length %d", + pptr->net_ipproto, pptr->net_iplen); + kprintf(")\n"); + kprintf("\t%d.%d.%d.%d > ", + (pptr->net_ipsrc>>24)&0xff, + (pptr->net_ipsrc>>16)&0xff, + (pptr->net_ipsrc>>8)&0xff, + (pptr->net_ipsrc&0xff)); + kprintf("%d.%d.%d.%d: ", + (pptr->net_ipdst>>24)&0xff, + (pptr->net_ipdst>>16)&0xff, + (pptr->net_ipdst>>8)&0xff, + (pptr->net_ipdst&0xff)); + kprintf("[udp checksum none] "); + kprintf("UDP, src port %d, dst port %d, length %d\n", + pptr->net_udpsport, + pptr->net_udpdport, + pptr->net_udplen - UDP_HDR_LEN); + break; + } else if (pptr->net_ipproto == IP_ICMP) { + kprintf("proto ICMP (%d), length %d", + pptr->net_ipproto, pptr->net_iplen); + kprintf(")\n"); + kprintf("\t%d.%d.%d.%d > ", + (pptr->net_ipsrc>>24)&0xff, + (pptr->net_ipsrc>>16)&0xff, + (pptr->net_ipsrc>>8)&0xff, + (pptr->net_ipsrc&0xff)); + kprintf("%d.%d.%d.%d: ", + (pptr->net_ipsrc>>24)&0xff, + (pptr->net_ipsrc>>16)&0xff, + (pptr->net_ipsrc>>8)&0xff, + (pptr->net_ipsrc&0xff)); + + if (pptr->net_ictype == ICMP_ECHOREQST) + kprintf("ICMP echo request, "); + else if (pptr->net_ictype == ICMP_ECHOREPLY) + kprintf("ICMP echo reply, "); + else + break; + + kprintf("id %d, seq %d\n", + pptr->net_icident, + pptr->net_icseq); + kprintf("icmp ckeckcum %s\n", + icmp_cksum((char *)&pptr->net_ictype, + ntohs(pptr->net_iplen)-IP_HDR_LEN)==0? + "OK":"failed"); + break; + } + else + break; + default: + kprintf("unknown\n"); + break; + + } + + return; +} diff --git a/net/tftp.c b/net/tftp.c new file mode 100644 index 0000000..debf4b7 --- /dev/null +++ b/net/tftp.c @@ -0,0 +1,289 @@ +/* tftp.c - trivial file transfer protocol */ + +#include +#include +#include + +/*------------------------------------------------------------------------ + * + * tftp_send1 - internal function to send one outgoing request (RRQ or + * ACK) message during a read sequence and get a matching + * response (ignoring duplicates and nonsense packets) + * + *------------------------------------------------------------------------ + */ + +status tftp_send1 ( + int32 sock, /* UDP socket to use */ + uint32 remip, /* Remote IP address */ + uint16 *remport, /* Remote port to use/set */ + struct tftp_msg *msg, /* Pointer to outgoing message */ + int32 mlen, /* Size of ougoing message */ + struct tftp_msg *inmsg, /* Pointer to buffer for */ + /* an incoming message */ + uint16 expected /* Block number expected */ + ) +{ + int32 ret; /* Return value for udp_send */ + int32 n; /* Number of bytes in response */ + uint32 tmp; /* Holds IP address on receive */ + + /* TFTP RRQ/WRQ Packet */ + /* 2 bytes string 1 byte string 1 byte */ + /* ------------------------------------------------ */ + /* | Opcode | Filename | 0 | Mode | 0 | */ + /* ------------------------------------------------ */ + + /* TFTP ACK Packet */ + /* 2 bytes 2 bytes */ + /* --------------------- */ + /* | Opcode | Block # | */ + /* --------------------- */ + + /* Send the outgoing message */ + + ret = udp_sendto(sock, remip, *remport, (char *) msg, mlen); + + if (ret == SYSERR) { + return SYSERR; + } + + /* Repeatedly read incoming messages, discarding packets that */ + /* are not valid or do not match the expected block number */ + /* (i.e., duplicates of previous packets) */ + + while(1) { + + /* Read next incoming message */ + + n = udp_recvaddr(sock, &tmp, remport, (char *)inmsg, + sizeof(struct tftp_msg), TFTP_WAIT); + if (n == SYSERR) { + return SYSERR; + } else if (n == TIMEOUT) { + kprintf("\n[tftp_send1] UDP Receive Timeout\n"); + return TIMEOUT; + } + + if (n < 4) { /* too small to be a valid packet */ + continue; + } + + /* If Error came back, give up */ + + if (ntohs(inmsg->tf_opcode) == TFTP_ERROR) { + kprintf("\n[tftp_send1] TFTP Error %d, %s\n", + ntohs(inmsg->tf_ercode), + inmsg->tf_ermsg ); + return SYSERR; + } + + /* If data packet matches expected block, return */ + + if ( (ntohs(inmsg->tf_opcode) == TFTP_DATA) && + (ntohs(inmsg->tf_dblk) == expected)) { + return n; + } + + /* As this point, incoming message is either invalid or */ + /* a duplicate, so ignore and try again */ + } +} + + +/*------------------------------------------------------------------------ + * + * tftpget - use TFTP to download a specified file from a server + * + *------------------------------------------------------------------------ + */ +status tftpget( + uint32 serverip, /* IP address of server in binary */ + const char* filename, /* Name of the file to download */ + char* rcv_buf, /* Buffer to hold the file */ + uint32 rcv_buf_size, /* Size of the buffer */ + byte verbose /* Verbose level */ + ) +{ + return tftpget_mb(serverip, filename, &rcv_buf, &rcv_buf_size, 1, verbose); +} + + /*------------------------------------------------------------------------ + * + * tftpget_mb - multibuffer version of TFPT + * + *------------------------------------------------------------------------ + */ +status tftpget_mb( + uint32 serverip, /* IP address of server in binary */ + const char* filename, /* Name of the file to download */ + char** rcv_bufs, /* Buffer array to hold the file */ + uint32* rcv_buf_sizes, /* Size of each buffer */ + uint32 rcv_buf_count, /* Number of buffers */ + byte verbose /* Verbose level */ + ) +{ + int32 nlen; /* Length of file name */ + uint16 localport; /* Local UDP port to use */ + uint16 remport=TFTP_PORT;/* Local UDP port to use */ + int32 sock; /* socket descriptor to use */ + uint16 expected = 1; /* Next data block we expect */ + int32 i; /* Loop index */ + int32 n; /* Number of octets in incoming message */ + int32 ret; /* Return value */ + int32 filesiz; /* Total size of downloaded file */ + struct tftp_msg outmsg;/* Outgoing message */ + int32 mlen; /* Length of outgoing mesage */ + struct tftp_msg inmsg; /* Buffer for response message */ + int32 dlen; /* Size of data in a response */ + uint32 now; /* Current time (used to generate a */ + /* "random" port number */ + char* curr_buf; /* Current buffer being used */ + uint32 curr_buf_ind; /* Index of current buffer */ + uint32 curr_used; /* Amount used in current buffer */ + + /* check args */ + + if(NULL == filename || 0 == serverip || NULL == rcv_bufs || NULL == rcv_buf_sizes || 0 == rcv_buf_count) { + kprintf("[TFTP GET] ERROR: Invalid argument\n"); + return SYSERR; + } + for(i = 0; i < rcv_buf_count; i++) { + if(NULL == rcv_bufs[i] || 0 == rcv_buf_sizes[i]) { + kprintf("[TFTP GET] ERROR: Invalid argument\n"); + return SYSERR; + } + } + + nlen = strnlen(filename, TFTP_MAXNAM+1); + if ( (nlen <= 0) || (nlen > TFTP_MAXNAM) ) { + return SYSERR; + } + + if(verbose & TFTP_VERBOSE) { + kprintf("[TFTP Get] Server: %08X File: %s\n", serverip, filename); + } + + /* Generate a local port */ + + if (getutime(&now) == SYSERR) { + return SYSERR; + } + localport = (uint16) ( 50000 + (now & 0xfff) ); + + if(verbose & TFTP_VERBOSE) { + kprintf("[TFTP Get] Using local port %u\n", 0xffff & localport); + } + + /* Register a UDP socket */ + + sock = udp_register(serverip, 0, localport); + if (sock == SYSERR) { + kprintf("[TFTP Get] ERROR: udp_register failed\n"); + return SYSERR; + } + + /* Clear the message buffer */ + + memset((char*)&outmsg, NULLCH, sizeof(outmsg)); + + /* Initialize the total file size to zero */ + + filesiz = 0; + curr_buf_ind = 0; + curr_buf = (char*)rcv_bufs[curr_buf_ind]; + curr_used = 0; + + /* Form the first message and compute length (a Read Request) */ + + outmsg.tf_opcode = htons(TFTP_RRQ); + strncpy(outmsg.tf_filemode, filename, nlen+1); + /* set mode to 'octet' */ + strncpy(outmsg.tf_filemode+nlen+1, "octet", sizeof("octet")+1); + + /* length is 2 opcode octets, name length, "octet" length, */ + /* and two NULLs */ + + mlen = nlen + strnlen("octet", 6) + 4; + + /* Repeatedly send the next request and get a response, */ + /* retransmitting a request up to TFTP_MAXRETRIES times */ + + while(1) { + for (i=0; i < TFTP_MAXRETRIES; i++) { + n = tftp_send1(sock, serverip, &remport, &outmsg, + mlen, &inmsg, expected); + if (n > 0) { + break; + } else if (n == SYSERR) { + kprintf("\n[TFTP Get] ERROR: Failure received from TFTP Send\n"); + udp_release(sock); + return SYSERR; + } else if (n == TIMEOUT) { + continue; + + } + } + if (i >= TFTP_MAXRETRIES) { + kprintf("\n[TFTP Get] ERROR: Max retries %d exceeded\n", TFTP_MAXRETRIES); + udp_release(sock); + return SYSERR; + } + + if(verbose & TFTP_VERBOSE) { + kprintf("."); + } + + /* Compute size of data in the message */ + + dlen = n - sizeof(inmsg.tf_opcode) - sizeof(inmsg.tf_dblk); + + /* Move the contents of this block into the file buffer */ + + for (i=0; i= rcv_buf_sizes[curr_buf_ind]) { + curr_buf_ind++; + if(curr_buf_ind >= rcv_buf_count) { + udp_release(sock); + if(verbose & TFTP_VERBOSE) { + kprintf("\n"); + } + return filesiz; + } + curr_buf = (char*)rcv_bufs[curr_buf_ind]; + curr_used = 0; + } + *curr_buf++ = inmsg.tf_data[i]; + curr_used++; + filesiz++; + } + + /* Form an ACK */ + + outmsg.tf_opcode = htons(TFTP_ACK); + outmsg.tf_ablk = htons(expected); + mlen = sizeof(outmsg.tf_opcode) + sizeof(outmsg.tf_ablk); + + /* If this was the last packet, send final ACK */ + + if (dlen < 512) { + ret = udp_sendto(sock, serverip, remport, + (char *) &outmsg, mlen); + udp_release(sock); + + if(verbose & TFTP_VERBOSE) { + kprintf("\n"); + } + + if (ret == SYSERR) { + kprintf("\n[TFTP GET] Error sending final acknowledgement\n"); + return SYSERR; + } + return filesiz; + } + + /* Move to next block and continue */ + + expected++; + } +} diff --git a/net/udp.c b/net/udp.c new file mode 100644 index 0000000..e1ccb1d --- /dev/null +++ b/net/udp.c @@ -0,0 +1,575 @@ +/* udp.c - udp_init, udp_in, udp_register, udp_send, udp_sendto, */ +/* udp_recv, udp_recvaddr, udp_release, udp_ntoh, udp_hton */ + +#include + +struct udpentry udptab[UDP_SLOTS]; /* Table of UDP endpoints */ + +/*------------------------------------------------------------------------ + * udp_init - Initialize all entries in the UDP endpoint table + *------------------------------------------------------------------------ + */ +void udp_init(void) +{ + + int32 i; /* Index into the UDP table */ + + for(i=0; iudstate == UDP_FREE) { + continue; + } + + if ((pktptr->net_udpdport == udptr->udlocport) && + ((udptr->udremport == 0) || + (pktptr->net_udpsport == udptr->udremport)) && + ( ((udptr->udremip==0) || + (pktptr->net_ipsrc == udptr->udremip))) ) { + + /* Entry matches incoming packet */ + + if (udptr->udcount < UDP_QSIZ) { + udptr->udcount++; + udptr->udqueue[udptr->udtail++] = pktptr; + if (udptr->udtail >= UDP_QSIZ) { + udptr->udtail = 0; + } + if (udptr->udstate == UDP_RECV) { + udptr->udstate = UDP_USED; + send (udptr->udpid, OK); + } + restore(mask); + return; + } + } + } + + /* No match - simply discard packet */ + + freebuf((char *) pktptr); + restore(mask); + return; +} + +/*------------------------------------------------------------------------ + * udp_register - Register a remote IP, remote port & local port to + * receive incoming UDP messages from the specified + * remote site sent to the specified local port + *------------------------------------------------------------------------ + */ +uid32 udp_register ( + uint32 remip, /* Remote IP address or zero */ + uint16 remport, /* Remote UDP protocol port */ + uint16 locport /* Local UDP protocol port */ + ) +{ + intmask mask; /* Saved interrupt mask */ + int32 slot; /* Index into udptab */ + struct udpentry *udptr; /* Pointer to udptab entry */ + + /* Ensure only one process can access the UDP table at a time */ + + mask = disable(); + + /* See if request already registered */ + + for (slot=0; slotudstate == UDP_FREE) { + continue; + } + + /* Look at this entry in table */ + + if ( (remport == udptr->udremport) && + (locport == udptr->udlocport) && + (remip == udptr->udremip ) ) { + + /* Request is already in the table */ + + restore(mask); + return SYSERR; + } + } + + /* Find a free slot and allocate it */ + + for (slot=0; slotudstate != UDP_FREE) { + continue; + } + udptr->udlocport = locport; + udptr->udremport = remport; + udptr->udremip = remip; + udptr->udcount = 0; + udptr->udhead = udptr->udtail = 0; + udptr->udpid = -1; + udptr->udstate = UDP_USED; + restore(mask); + return slot; + } + + restore(mask); + return SYSERR; +} + +/*------------------------------------------------------------------------ + * udp_recv - Receive a UDP packet + *------------------------------------------------------------------------ + */ +int32 udp_recv ( + uid32 slot, /* Slot in table to use */ + char *buff, /* Buffer to hold UDP data */ + int32 len, /* Length of buffer */ + uint32 timeout /* Read timeout in msec */ + ) +{ + intmask mask; /* Saved interrupt mask */ + struct udpentry *udptr; /* Pointer to udptab entry */ + umsg32 msg; /* Message from recvtime() */ + struct netpacket *pkt; /* Pointer to packet being read */ + int32 i; /* Counts bytes copied */ + int32 msglen; /* Length of UDP data in packet */ + char *udataptr; /* Pointer to UDP data */ + + /* Ensure only one process can access the UDP table at a time */ + + mask = disable(); + + /* Verify that the slot is valid */ + + if ((slot < 0) || (slot >= UDP_SLOTS)) { + restore(mask); + return SYSERR; + } + + /* Get pointer to table entry */ + + udptr = &udptab[slot]; + + /* Verify that the slot has been registered and is valid */ + + if (udptr->udstate != UDP_USED) { + restore(mask); + return SYSERR; + } + + /* Wait for a packet to arrive */ + + if (udptr->udcount == 0) { /* No packet is waiting */ + udptr->udstate = UDP_RECV; + udptr->udpid = currpid; + msg = recvclr(); + msg = recvtime(timeout); /* Wait for a packet */ + udptr->udstate = UDP_USED; + if (msg == TIMEOUT) { + restore(mask); + return TIMEOUT; + } else if (msg != OK) { + restore(mask); + return SYSERR; + } + } + + /* Packet has arrived -- dequeue it */ + + pkt = udptr->udqueue[udptr->udhead++]; + if (udptr->udhead >= UDP_QSIZ) { + udptr->udhead = 0; + } + udptr->udcount--; + + /* Copy UDP data from packet into caller's buffer */ + + msglen = pkt->net_udplen - UDP_HDR_LEN; + udataptr = (char *)pkt->net_udpdata; + if (len < msglen) { + msglen = len; + } + for (i=0; i= UDP_SLOTS)) { + restore(mask); + return SYSERR; + } + + /* Get pointer to table entry */ + + udptr = &udptab[slot]; + + /* Verify that the slot has been registered and is valid */ + + if (udptr->udstate != UDP_USED) { + restore(mask); + return SYSERR; + } + + /* Wait for a packet to arrive */ + + if (udptr->udcount == 0) { /* No packet is waiting */ + udptr->udstate = UDP_RECV; + udptr->udpid = currpid; + msg = recvclr(); + msg = recvtime(timeout); /* Wait for a packet */ + udptr->udstate = UDP_USED; + if (msg == TIMEOUT) { + restore(mask); + return TIMEOUT; + } else if (msg != OK) { + restore(mask); + return SYSERR; + } + } + + /* Packet has arrived -- dequeue it */ + + pkt = udptr->udqueue[udptr->udhead++]; + if (udptr->udhead >= UDP_QSIZ) { + udptr->udhead = 0; + } + + /* Record sender's IP address and UDP port number */ + + *remip = pkt->net_ipsrc; + *remport = pkt->net_udpsport; + + udptr->udcount--; + + /* Copy UDP data from packet into caller's buffer */ + + msglen = pkt->net_udplen - UDP_HDR_LEN; + udataptr = (char *)pkt->net_udpdata; + if (len < msglen) { + msglen = len; + } + for (i=0; i= UDP_SLOTS) ) { + restore(mask); + return SYSERR; + } + + /* Get pointer to table entry */ + + udptr = &udptab[slot]; + + /* Verify that the slot has been registered and is valid */ + + if (udptr->udstate == UDP_FREE) { + restore(mask); + return SYSERR; + } + + /* Verify that the slot has a specified remote address */ + + remip = udptr->udremip; + if (remip == 0) { + restore(mask); + return SYSERR; + } + + locip = NetData.ipucast; + remport = udptr->udremport; + locport = udptr->udlocport; + + /* Allocate a network buffer to hold the packet */ + + pkt = (struct netpacket *)getbuf(netbufpool); + + if ((int32)pkt == SYSERR) { + restore(mask); + return SYSERR; + } + + /* Compute packet length as UDP data size + fixed header size */ + + pktlen = ((char *)&pkt->net_udpdata - (char *)pkt) + len; + + /* Create a UDP packet in pkt */ + + memcpy((char *)pkt->net_ethsrc,NetData.ethucast,ETH_ADDR_LEN); + pkt->net_ethtype = 0x0800; /* Type is IP */ + pkt->net_ipvh = 0x45; /* IP version and hdr length */ + pkt->net_iptos = 0x00; /* Type of service */ + pkt->net_iplen= pktlen - ETH_HDR_LEN;/* Total IP datagram length*/ + pkt->net_ipid = ident++; /* Datagram gets next IDENT */ + pkt->net_ipfrag = 0x0000; /* IP flags & fragment offset */ + pkt->net_ipttl = 0xff; /* IP time-to-live */ + pkt->net_ipproto = IP_UDP; /* Datagram carries UDP */ + pkt->net_ipcksum = 0x0000; /* initial checksum */ + pkt->net_ipsrc = locip; /* IP source address */ + pkt->net_ipdst = remip; /* IP destination address */ + + pkt->net_udpsport = locport; /* Local UDP protocol port */ + pkt->net_udpdport = remport; /* Remote UDP protocol port */ + pkt->net_udplen = (uint16)(UDP_HDR_LEN+len); /* UDP length */ + pkt->net_udpcksum = 0x0000; /* Ignore UDP checksum */ + udataptr = (char *) pkt->net_udpdata; + for (; len>0; len--) { + *udataptr++ = *buff++; + } + + /* Call ipsend to send the datagram */ + + ip_send(pkt); + restore(mask); + return OK; +} + + +/*------------------------------------------------------------------------ + * udp_sendto - Send a UDP packet to a specified destination + *------------------------------------------------------------------------ + */ +status udp_sendto ( + uid32 slot, /* UDP table slot to use */ + uint32 remip, /* Remote IP address to use */ + uint16 remport, /* Remote protocol port to use */ + char *buff, /* Buffer of UDP data */ + int32 len /* Length of data in buffer */ + ) +{ + intmask mask; /* Saved interrupt mask */ + struct netpacket *pkt; /* Pointer to a packet buffer */ + int32 pktlen; /* Total packet length */ + static uint16 ident = 1; /* Datagram IDENT field */ + struct udpentry *udptr; /* Pointer to a UDP table entry */ + char *udataptr; /* Pointer to UDP data */ + + /* Ensure only one process can access the UDP table at a time */ + + mask = disable(); + + /* Verify that the slot is valid */ + + if ( (slot < 0) || (slot >= UDP_SLOTS) ) { + restore(mask); + return SYSERR; + } + + /* Get pointer to table entry */ + + udptr = &udptab[slot]; + + /* Verify that the slot has been registered and is valid */ + + if (udptr->udstate == UDP_FREE) { + restore(mask); + return SYSERR; + } + + /* Allocate a network buffer to hold the packet */ + + pkt = (struct netpacket *)getbuf(netbufpool); + + if ((int32)pkt == SYSERR) { + restore(mask); + return SYSERR; + } + + /* Compute packet length as UDP data size + fixed header size */ + + pktlen = ((char *)&pkt->net_udpdata - (char *)pkt) + len; + + /* Create UDP packet in pkt */ + + memcpy((char *)pkt->net_ethsrc,NetData.ethucast,ETH_ADDR_LEN); + pkt->net_ethtype = 0x0800; /* Type is IP */ + pkt->net_ipvh = 0x45; /* IP version and hdr length */ + pkt->net_iptos = 0x00; /* Type of service */ + pkt->net_iplen= pktlen - ETH_HDR_LEN;/* total IP datagram length*/ + pkt->net_ipid = ident++; /* Datagram gets next IDENT */ + pkt->net_ipfrag = 0x0000; /* IP flags & fragment offset */ + pkt->net_ipttl = 0xff; /* IP time-to-live */ + pkt->net_ipproto = IP_UDP; /* Datagram carries UDP */ + pkt->net_ipcksum = 0x0000; /* Initial checksum */ + pkt->net_ipsrc = NetData.ipucast;/* IP source address */ + pkt->net_ipdst = remip; /* IP destination address */ + pkt->net_udpsport = udptr->udlocport;/* local UDP protocol port */ + pkt->net_udpdport = remport; /* Remote UDP protocol port */ + pkt->net_udplen = (uint16)(UDP_HDR_LEN+len); /* UDP length */ + pkt->net_udpcksum = 0x0000; /* Ignore UDP checksum */ + udataptr = (char *) pkt->net_udpdata; + for (; len>0; len--) { + *udataptr++ = *buff++; + } + + /* Call ipsend to send the datagram */ + + ip_send(pkt); + restore(mask); + return OK; +} + + +/*------------------------------------------------------------------------ + * udp_release - Release a previously-registered UDP slot + *------------------------------------------------------------------------ + */ +status udp_release ( + uid32 slot /* Table slot to release */ + ) +{ + intmask mask; /* Saved interrupt mask */ + struct udpentry *udptr; /* Pointer to udptab entry */ + struct netpacket *pkt; /* pointer to packet being read */ + + /* Ensure only one process can access the UDP table at a time */ + + mask = disable(); + + /* Verify that the slot is valid */ + + if ( (slot < 0) || (slot >= UDP_SLOTS) ) { + restore(mask); + return SYSERR; + } + + /* Get pointer to table entry */ + + udptr = &udptab[slot]; + + /* Verify that the slot has been registered and is valid */ + + if (udptr->udstate == UDP_FREE) { + restore(mask); + return SYSERR; + } + + /* Defer rescheduling to prevent freebuf from switching context */ + + resched_cntl(DEFER_START); + while (udptr->udcount > 0) { + pkt = udptr->udqueue[udptr->udhead++]; + if (udptr->udhead >= UDP_QSIZ) { + udptr->udhead = 0; + } + freebuf((char *)pkt); + udptr->udcount--; + } + udptr->udstate = UDP_FREE; + resched_cntl(DEFER_STOP); + restore(mask); + return OK; +} + +/*------------------------------------------------------------------------ + * udp_ntoh - Convert UDP header fields from net to host byte order + *------------------------------------------------------------------------ + */ +void udp_ntoh( + struct netpacket *pktptr + ) +{ + pktptr->net_udpsport = ntohs(pktptr->net_udpsport); + pktptr->net_udpdport = ntohs(pktptr->net_udpdport); + pktptr->net_udplen = ntohs(pktptr->net_udplen); + return; +} + +/*------------------------------------------------------------------------ + * udp_hton - Convert packet header fields from host to net byte order + *------------------------------------------------------------------------ + */ +void udp_hton( + struct netpacket *pktptr + ) +{ + pktptr->net_udpsport = htons(pktptr->net_udpsport); + pktptr->net_udpdport = htons(pktptr->net_udpdport); + pktptr->net_udplen = htons(pktptr->net_udplen); + return; +} diff --git a/shell/.xsh_udpecho.c.swp b/shell/.xsh_udpecho.c.swp new file mode 100644 index 0000000000000000000000000000000000000000..0ebfde7e68c54bda901eadd872f058486e180001 GIT binary patch literal 12288 zcmeI2J!~9B6vxLDkP9T?qe5vOmpDE<=exbL9Vd1i5jmD(ATq=W`LdO)cjxX_x&6@0 zuI*EB(o!HHf)G6o5)BAS5EUQ_>NH3QQXvW?6lg#}{AYGAx0hU^q@aj2EB&;)Z|A+4 z_n$X&vOH_nn~NuCx>9Gjo@Fe$dG57W-Wp={b;j02ryXvn4-dY0TY5n#c*U2FtoTWV zyU8Grt7*XMSuaScYhie~TDNLeHM7bVZ?~(PvUM?WBkr`qiZdvPu^9!70*|gh5;w*V z?qC!3nx&lg6knnjodhqkvJsDDc=S5JyAo8b<#_mcg0q zK6KYTdo?$sfKk9GU=%P47zK<1MggOMQNSo*6fg=H1s+2MY?rYYpJeR4r!aW@|G)e9 z|Lt9j-2~r*Z^1j@ZLkQAg9Bg>*adci?cn#FjC~0{1TMG)>c9deup4XxzwBV_XYeub zK@-e@-Qc%p82bTS2iHIcY=Yxp3RJ-#Pc!x@_yAl5n_vT+0dIhv;P35>{RwV?8{lj3 z36S6%SO(95A@END?ZL0$2KWYi4gzoqoCmwW?QM+x1%3iQg0H|A;4^R?ybIQW1P6cx zZb8@Yz(?SHpme?lT;PB+palNK9GJ@}U=%P47zO@s1-2OB61;nl6A{qTtFzi12``8n zrDAprjhxVr+7I87$9!um-@NbTu3qx((ogqVFw%iTLPxT)5)?;gS)p3ZHMuBx;37Mf zm84;JC0G%~GTzticG@_7ra3~6x^+o#Ka9B-l_w@F%PRXFFS1=%lqc1j7px_Xa?OG> z218q{aIaq)APPm?bM`y>J$3K(5C1}UxWi5{4S&H~Rb#ut3XM=u$;05RS@P(xN(2MP z^Zxy#te~9N1h+4v@tr7YID$Ltw0v%P;pE9o6vXlxgw&Kj&CO+B5u~8fPyy5(A5JZv zSXerJYLuz>!bZz$b1L0&)GDd)J(c>h%_Uizf?PGr8cjo8(E+n~wba%f&H(NEqGl7& zr{QEa16t7w6RUG0$w)dUsih7}&}XT^;`Lc9SkA(tho;ojBBb4@8Bh{5vgwhr%Y`UY zaY2Ys%wQ=bZI^;D#-vCt);YC92ihtHbfFc?q~oTE4_04w&?kc6O;5&LJV4$o?{t(Z z0Lo)J&AcZXY^r+edAk?sw$|pnb@ZThz&hGXTt&e+)Y4DO=An}h*J9fX$PQ@nbyCZO zOSvM_s#8&W**AHt74o9eXublOYL+f_^>o)TlqrANqA4#}YJGIA_e{_!(V>xHN#o-< zMjMTgT0}n1;m}A=93A~-GY_5yF;wRX-+G#>&d8XcPMUo zl2n?Q0hjou7x$#kdoD#PYdJIc>q>kqjVI~Y@%h(ju}`R+*4=>|D0v*KEa9njfXQWgV&z z9YyEbC?T!hLfuNLk=AMNqC1lpw&K8XdRlvrTZhK$lT@FWnL0Q#HF=(J+`g5xX)n@B b#Sr1T=W^K>K!0hdA2fC4<_yQ{t7GgxVj&Qz literal 0 HcmV?d00001 diff --git a/shell/addargs.c b/shell/addargs.c new file mode 100644 index 0000000..ba3b7f1 --- /dev/null +++ b/shell/addargs.c @@ -0,0 +1,93 @@ +/* addargs.c - addargs */ + +#include +#include "shprototypes.h" + +/*------------------------------------------------------------------------ + * addargs - Add local copy of argv-style arguments to the stack of + * a command process that has been created by the shell + *------------------------------------------------------------------------ + */ +status addargs( + pid32 pid, /* ID of process to use */ + int32 ntok, /* Count of arguments */ + int32 tok[], /* Index of tokens in tokbuf */ + int32 tlen, /* Length of data in tokbuf */ + char *tokbuf, /* Array of null-term. tokens */ + void *dummy /* Dummy argument that was */ + /* used at creation and must */ + /* be replaced by a pointer */ + /* to an argument vector */ + ) +{ + intmask mask; /* Saved interrupt mask */ + struct procent *prptr; /* Ptr to process' table entry */ + uint32 aloc; /* Argument location in process */ + /* stack as an integer */ + uint32 *argloc; /* Location in process's stack */ + /* to place args vector */ + char *argstr; /* Location in process's stack */ + /* to place arg strings */ + uint32 *search; /* pointer that searches for */ + /* dummy argument on stack */ + uint32 *aptr; /* Walks through args array */ + int32 i; /* Index into tok array */ + + mask = disable(); + + /* Check argument count and data length */ + + if ( (ntok <= 0) || (tlen < 0) ) { + restore(mask); + return SYSERR; + } + + prptr = &proctab[pid]; + + /* Compute lowest location in the process stack where the */ + /* args array will be stored followed by the argument */ + /* strings */ + + aloc = (uint32) (prptr->prstkbase + - prptr->prstklen + sizeof(uint32)); + argloc = (uint32*) ((aloc + 3) & ~0x3); /* round multiple of 4 */ + + /* Compute the first location beyond args array for the strings */ + + argstr = (char *) (argloc + (ntok+1)); /* +1 for a null ptr */ + + /* Set each location in the args vector to be the address of */ + /* string area plus the offset of this argument */ + + for (aptr=argloc, i=0; i < ntok; i++) { + *aptr++ = (uint32) (argstr + tok[i]); + } + + /* Add a null pointer to the args array */ + + *aptr++ = (uint32)NULL; + + /* Copy the argument strings from tokbuf into process's stack */ + /* just beyond the args vector */ + + memcpy(aptr, tokbuf, tlen); + + /* Find the second argument in process's stack */ + + for (search = (uint32 *)prptr->prstkptr; + search < (uint32 *)prptr->prstkbase; search++) { + + /* If found, replace with the address of the args vector*/ + + if (*search == (uint32)dummy) { + *search = (uint32)argloc; + restore(mask); + return OK; + } + } + + /* Argument value not found on the stack - report an error */ + + restore(mask); + return SYSERR; +} diff --git a/shell/lexan.c b/shell/lexan.c new file mode 100644 index 0000000..4e0cb8b --- /dev/null +++ b/shell/lexan.c @@ -0,0 +1,148 @@ +/* lexan.c - lexan */ + +#include + +/*------------------------------------------------------------------------ + * lexan - Ad hoc lexical analyzer to divide command line into tokens + *------------------------------------------------------------------------ + */ + +int32 lexan ( + char *line, /* Input line terminated with */ + /* NEWLINE or NULLCH */ + int32 len, /* Length of the input line, */ + /* including NEWLINE */ + char *tokbuf, /* Buffer into which tokens are */ + /* stored with a null */ + /* following each token */ + int32 *tlen, /* Place to store number of */ + /* chars in tokbuf */ + int32 tok[], /* Array of pointers to the */ + /* start of each token */ + int32 toktyp[] /* Array that gives the type */ + /* of each token */ + ) +{ + char quote; /* Character for quoted string */ + uint32 ntok; /* Number of tokens found */ + char *p; /* Pointer that walks along the */ + /* input line */ + int32 tbindex; /* Index into tokbuf */ + char ch; /* Next char from input line */ + + /* Start at the beginning of the line with no tokens */ + + ntok = 0; + p = line; + tbindex = 0; + + /* While not yet at end of line, get next token */ + + while ( (*p != NULLCH) && (*p != SH_NEWLINE) ) { + + /* If too many tokens, return error */ + + if (ntok >= SHELL_MAXTOK) { + return SYSERR; + } + + /* Skip whitespace before token */ + + while ( (*p == SH_BLANK) || (*p == SH_TAB) ) { + p++; + } + + /* Stop parsing at end of line (or end of string) */ + + ch = *p; + if ( (ch==SH_NEWLINE) || (ch==NULLCH) ) { + *tlen = tbindex; + return ntok; + } + + /* Set next entry in tok array to be an index to the */ + /* current location in the token buffer */ + + tok[ntok] = tbindex; /* the start of the token */ + + /* Set the token type */ + + switch (ch) { + + case SH_AMPER: toktyp[ntok] = SH_TOK_AMPER; + tokbuf[tbindex++] = ch; + tokbuf[tbindex++] = NULLCH; + ntok++; + p++; + continue; + + case SH_LESS: toktyp[ntok] = SH_TOK_LESS; + tokbuf[tbindex++] = ch; + tokbuf[tbindex++] = NULLCH; + ntok++; + p++; + continue; + + case SH_GREATER: toktyp[ntok] = SH_TOK_GREATER; + tokbuf[tbindex++] = ch; + tokbuf[tbindex++] = NULLCH; + ntok++; + p++; + continue; + + default: toktyp[ntok] = SH_TOK_OTHER; + }; + + /* Handle quoted string (single or double quote) */ + + if ( (ch==SH_SQUOTE) || (ch==SH_DQUOTE) ) { + quote = ch; /* remember opening quote */ + + /* Copy quoted string to arg area */ + + p++; /* Move past starting quote */ + + while ( ((ch=*p++) != quote) && (ch != SH_NEWLINE) + && (ch != NULLCH) ) { + tokbuf[tbindex++] = ch; + } + if (ch != quote) { /* string missing end quote */ + return SYSERR; + } + + /* Finished string - count token and go on */ + + tokbuf[tbindex++] = NULLCH; /* terminate token */ + ntok++; /* count string as one token */ + continue; /* go to next token */ + } + + /* Handle a token other than a quoted string */ + + tokbuf[tbindex++] = ch; /* put first character in buffer*/ + p++; + + while ( ((ch = *p) != SH_NEWLINE) && (ch != NULLCH) + && (ch != SH_LESS) && (ch != SH_GREATER) + && (ch != SH_BLANK) && (ch != SH_TAB) + && (ch != SH_AMPER) && (ch != SH_SQUOTE) + && (ch != SH_DQUOTE) ) { + tokbuf[tbindex++] = ch; + p++; + } + + /* Report error if other token is appended */ + + if ( (ch == SH_SQUOTE) || (ch == SH_DQUOTE) + || (ch == SH_LESS) || (ch == SH_GREATER) ) { + return SYSERR; + } + + tokbuf[tbindex++] = NULLCH; /* terminate the token */ + + ntok++; /* count valid token */ + + } + *tlen = tbindex; + return ntok; +} diff --git a/shell/shell.c b/shell/shell.c new file mode 100644 index 0000000..a7bc8d0 --- /dev/null +++ b/shell/shell.c @@ -0,0 +1,308 @@ +/* shell.c - shell */ + +#include +#include +#include "shprototypes.h" + +/************************************************************************/ +/* Table of Xinu shell commands and the function associated with each */ +/************************************************************************/ +const struct cmdent cmdtab[] = { + {"argecho", TRUE, xsh_argecho}, + {"cat", FALSE, xsh_cat}, + {"clear", TRUE, xsh_clear}, + {"date", FALSE, xsh_date}, + {"devdump", FALSE, xsh_devdump}, + {"echo", FALSE, xsh_echo}, + {"exit", TRUE, xsh_exit}, + {"help", FALSE, xsh_help}, + {"kill", TRUE, xsh_kill}, + {"memdump", FALSE, xsh_memdump}, + {"memstat", FALSE, xsh_memstat}, + {"ps", FALSE, xsh_ps}, + {"sleep", FALSE, xsh_sleep}, + {"uptime", FALSE, xsh_uptime}, + {"?", FALSE, xsh_help}, + {"test_mmu", FALSE, xsh_mmu} + +}; + +uint32 ncmd = sizeof(cmdtab) / sizeof(struct cmdent); + +/************************************************************************/ +/* shell - Provide an interactive user interface that executes */ +/* commands. Each command begins with a command name, has */ +/* a set of optional arguments, has optional input or */ +/* output redirection, and an optional specification for */ +/* background execution (ampersand). The syntax is: */ +/* */ +/* command_name [args*] [redirection] [&] */ +/* */ +/* Redirection is either or both of: */ +/* */ +/* < input_file */ +/* or */ +/* > output_file */ +/* */ +/************************************************************************/ + +process shell ( + did32 dev /* ID of tty device from which */ + ) /* to accept commands */ +{ + char buf[SHELL_BUFLEN]; /* Input line (large enough for */ + /* one line from a tty device */ + int32 len; /* Length of line read */ + char tokbuf[SHELL_BUFLEN + /* Buffer to hold a set of */ + SHELL_MAXTOK]; /* Contiguous null-terminated */ + /* Strings of tokens */ + int32 tlen; /* Current length of all data */ + /* in array tokbuf */ + int32 tok[SHELL_MAXTOK]; /* Index of each token in */ + /* array tokbuf */ + int32 toktyp[SHELL_MAXTOK]; /* Type of each token in tokbuf */ + int32 ntok; /* Number of tokens on line */ + pid32 child; /* Process ID of spawned child */ + bool8 backgnd; /* Run command in background? */ + char *outname, *inname; /* Pointers to strings for file */ + /* names that follow > and < */ + did32 stdinput, stdoutput; /* Descriptors for redirected */ + /* input and output */ + int32 i; /* Index into array of tokens */ + int32 j; /* Index into array of commands */ + int32 msg; /* Message from receive() for */ + /* child termination */ + int32 tmparg; /* Address of this var is used */ + /* when first creating child */ + /* process, but is replaced */ + char *src, *cmp; /* Pointers used during name */ + /* comparison */ + bool8 diff; /* Was difference found during */ + /* comparison */ + char *args[SHELL_MAXTOK]; /* Argument vector passed to */ + /* builtin commands */ + + /* Print shell banner and startup message */ + + fprintf(dev, "\n\n%s%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n", + SHELL_BAN0,SHELL_BAN1,SHELL_BAN2,SHELL_BAN3,SHELL_BAN4, + SHELL_BAN5,SHELL_BAN6,SHELL_BAN7,SHELL_BAN8,SHELL_BAN9); + + fprintf(dev, "%s\n\n", SHELL_STRTMSG); + + /* Continually prompt the user, read input, and execute command */ + + while (TRUE) { + + /* Display prompt */ + + fprintf(dev, SHELL_PROMPT); + + /* Read a command */ + + len = read(dev, buf, sizeof(buf)); + + /* Exit gracefully on end-of-file */ + + if (len == EOF) { + break; + } + + /* If line contains only NEWLINE, go to next line */ + + if (len <= 1) { + continue; + } + + buf[len] = SH_NEWLINE; /* terminate line */ + + /* Parse input line and divide into tokens */ + + ntok = lexan(buf, len, tokbuf, &tlen, tok, toktyp); + + /* Handle parsing error */ + + if (ntok == SYSERR) { + fprintf(dev,"%s\n", SHELL_SYNERRMSG); + continue; + } + + /* If line is empty, go to next input line */ + + if (ntok == 0) { + fprintf(dev, "\n"); + continue; + } + + /* If last token is '&', set background */ + + if (toktyp[ntok-1] == SH_TOK_AMPER) { + ntok-- ; + tlen-= 2; + backgnd = TRUE; + } else { + backgnd = FALSE; + } + + + /* Check for input/output redirection (default is none) */ + + outname = inname = NULL; + if ( (ntok >=3) && ( (toktyp[ntok-2] == SH_TOK_LESS) + ||(toktyp[ntok-2] == SH_TOK_GREATER))){ + if (toktyp[ntok-1] != SH_TOK_OTHER) { + fprintf(dev,"%s\n", SHELL_SYNERRMSG); + continue; + } + if (toktyp[ntok-2] == SH_TOK_LESS) { + inname = &tokbuf[tok[ntok-1]]; + } else { + outname = &tokbuf[tok[ntok-1]]; + } + ntok -= 2; + tlen = tok[ntok]; + } + + + if ( (ntok >=3) && ( (toktyp[ntok-2] == SH_TOK_LESS) + ||(toktyp[ntok-2] == SH_TOK_GREATER))){ + if (toktyp[ntok-1] != SH_TOK_OTHER) { + fprintf(dev,"%s\n", SHELL_SYNERRMSG); + continue; + } + if (toktyp[ntok-2] == SH_TOK_LESS) { + if (inname != NULL) { + fprintf(dev,"%s\n", SHELL_SYNERRMSG); + continue; + } + inname = &tokbuf[tok[ntok-1]]; + } else { + if (outname != NULL) { + fprintf(dev,"%s\n", SHELL_SYNERRMSG); + continue; + } + outname = &tokbuf[tok[ntok-1]]; + } + ntok -= 2; + tlen = tok[ntok]; + } + + /* Verify remaining tokens are type "other" */ + + for (i=0; i= ncmd) { + fprintf(dev, "command %s not found\n", tokbuf); + continue; + } + + /* Handle built-in command */ + + if (cmdtab[j].cbuiltin) { /* No background or redirect. */ + if (inname != NULL || outname != NULL || backgnd){ + fprintf(dev, SHELL_BGERRMSG); + continue; + } else { + /* Set up arg vector for call */ + + for (i=0; i +#include + +/*------------------------------------------------------------------------ + * xhs_argecho - display argecho message that lists shell commands + *------------------------------------------------------------------------ + */ +shellcmd xsh_argecho(int nargs, char *args[]) +{ + int32 i; + + printf("\n\nThe %d arguments are:\n", nargs); + for (i = 0; i < nargs; i++) { + printf(" %2d: %s\n", i, args[i]); + } + printf("\n"); + + return 0; +} diff --git a/shell/xsh_cat.c b/shell/xsh_cat.c new file mode 100644 index 0000000..13b3af1 --- /dev/null +++ b/shell/xsh_cat.c @@ -0,0 +1,59 @@ +/* xsh_cat.c - xsh_cat */ + +#include +#include +#include + +/*------------------------------------------------------------------------ + * xsh_cat - shell command to cat one or more files + *------------------------------------------------------------------------ + */ +shellcmd xsh_cat(int nargs, char *args[]) +{ + int32 i; /* index into proctabl */ + int32 nextch; /* character read from file */ + did32 descr; /* descriptor for a file */ + char *argptr; /* pointer to next arg string */ + + + /* For argument '--help', emit help about the 'cat' command */ + + if (nargs == 2 && strncmp(args[1], "--help", 7) == 0) { + printf("Use: %s [file...]\n\n", args[0]); + printf("Description:\n"); + printf("\twrites contents of files or stdin to stdout\n"); + printf("Options:\n"); + printf("\tfile...\tzero or more file names\n"); + printf("\t--help\t display this help and exit\n"); + return 0; + } + + if (nargs == 1) { + nextch = getc(stdin); + while (nextch != EOF) { + putc(stdout, nextch); + nextch = getc(stdin); + } + return 0; + } + for (i = 1; i < nargs; i++) { + argptr = args[i]; + if ( (argptr[0] == '-') && (argptr[1] == NULLCH) ) { + descr = stdin; + } else { + descr = open(NAMESPACE, argptr, "ro"); + if (descr == (did32)SYSERR) { + fprintf(stderr, "%s: cannot open file %s\n", + args[0], argptr); + return 1; + } + } + nextch = getc(descr); + while (nextch != EOF) { + putc(stdout, nextch); + nextch = getc(descr); + } + close(descr); + } + return 0; +} diff --git a/shell/xsh_clear.c b/shell/xsh_clear.c new file mode 100644 index 0000000..0ee1edf --- /dev/null +++ b/shell/xsh_clear.c @@ -0,0 +1,22 @@ +/* xsh_clear.c - xsh_clear */ + +#include +#include + +/*------------------------------------------------------------------------ + * xsh_clear - clear the display window (assumes xterm / VT100) + *------------------------------------------------------------------------ + */ +shellcmd xsh_clear(int nargs, char *args[]) +{ + + /* Insure no arguments were passed */ + + if (nargs > 1) { + fprintf(stderr,"use is: %s\n", args[0]); + return 1; + } + + printf("\033[2J\033[H\n"); + return 0; +} diff --git a/shell/xsh_date.c b/shell/xsh_date.c new file mode 100644 index 0000000..2f27822 --- /dev/null +++ b/shell/xsh_date.c @@ -0,0 +1,69 @@ +/* xsh_date.c - xsh_date */ + +#include +#include +#include + +/*------------------------------------------------------------------------ + * xsh_date - obtain and print the current month, day, year, and time + *------------------------------------------------------------------------ + */ +shellcmd xsh_date(int nargs, char *args[]) { + + int32 retval; /* return value */ + uint32 now; /* current local time */ + char datestr[64]; /* printable date in ascii */ + + /* Output info for '--help' argument */ + + if (nargs == 2 && strncmp(args[1], "--help", 7) == 0) { + printf("Usage: %s\n\n", args[0]); + printf("Description:\n"); + printf("\tDisplays the current date and time\n"); + printf("Options (one per invocation):\n"); + printf("\t-f\tforce a time server request to be sent\n"); + printf("\t-d\tset daylight savings time on\n"); + printf("\t-s\tset standard time (not daylight savings)\n"); + printf("\t-a\tset daylight savings to automatic\n"); + printf("\t--help\tdisplay this help and exit\n"); + return 0; + } + + /* Check argument count */ + + if (nargs > 2) { + fprintf(stderr, "%s: too many arguments\n", args[0]); + fprintf(stderr, "Try '%s --help' for more information\n", + args[0]); + return 1; + } + + if (nargs == 2) { + if (strncmp(args[1], "-f", 3) == 0) { + Date.dt_bootvalid = FALSE; + } else if (strncmp(args[1], "-d", 3) == 0) { + Date.dt_daylight = DATE_DST_ON; + } else if (strncmp(args[1], "-s", 3) == 0) { + Date.dt_daylight = DATE_DST_OFF; + } else if (strncmp(args[1], "-a", 3) == 0) { + Date.dt_daylight = DATE_DST_AUTO; + } else { + fprintf(stderr, "%s: invalid argument\n", args[0]); + fprintf(stderr, + "Try '%s --help' for more information\n", + args[0]); + return 1; + } + } + + retval = gettime(&now); + if (retval == SYSERR) { + fprintf(stderr, + "%s: could not obtain the current date\n", + args[0]); + return 1; + } + ascdate(now, datestr); + printf("%s\n", datestr); + return 0; +} diff --git a/shell/xsh_devdump.c b/shell/xsh_devdump.c new file mode 100644 index 0000000..1e41454 --- /dev/null +++ b/shell/xsh_devdump.c @@ -0,0 +1,36 @@ +/* xsh_devdump.c - xsh_devdump */ + +#include +#include + +/*------------------------------------------------------------------------ + * xsh_devdump - shell command to print info from the device switch table + *------------------------------------------------------------------------ + */ +shellcmd xsh_devdump ( + int nargs, /* number of arguments */ + char *args[] /* list of arguments */ + ) +{ + struct dentry *devptr; /* pointer to device entry */ + int32 i; /* walks through device table */ + + /* No arguments are expected */ + + if (nargs > 1) { + fprintf(stderr, "No arguments allowed\n"); + return 1; + } + + /* Walk through device table */ + + printf("Device Name Minor\n"); + printf("------ ------------ -----\n"); + + for (i = 0; i < NDEVS; i++) { + devptr = &devtab[i]; + printf("%4d %-12s %3d\n", i, devptr->dvname, + devptr->dvminor); + } + return 0; +} diff --git a/shell/xsh_echo.c b/shell/xsh_echo.c new file mode 100644 index 0000000..393c81a --- /dev/null +++ b/shell/xsh_echo.c @@ -0,0 +1,24 @@ +/* xsh_echo.c - xsh_echo */ + +#include +#include + +/*------------------------------------------------------------------------ + * xhs_echo - write argument strings to stdout + *------------------------------------------------------------------------ + */ +shellcmd xsh_echo(int nargs, char *args[]) +{ + int32 i; /* walks through args array */ + + if (nargs > 1) { + printf("%s", args[1]); + + for (i = 2; i < nargs; i++) { + printf(" %s", args[i]); + } + } + printf("\n"); + + return 0; +} diff --git a/shell/xsh_exit.c b/shell/xsh_exit.c new file mode 100644 index 0000000..a4a77cd --- /dev/null +++ b/shell/xsh_exit.c @@ -0,0 +1,13 @@ +/* xsh_exit.c - xshexit */ + +#include + +/*------------------------------------------------------------------------ + * xsh_exit - shell command returns the exit code causing shell exit + *------------------------------------------------------------------------ + */ + +shellcmd xsh_exit(int nargs, char *args[]) +{ + return SHELL_EXIT; +} diff --git a/shell/xsh_help.c b/shell/xsh_help.c new file mode 100644 index 0000000..0ebfece --- /dev/null +++ b/shell/xsh_help.c @@ -0,0 +1,124 @@ +/* xsh_help.c - xsh_help */ + +#include +#include +#include + +/*------------------------------------------------------------------------ + * xhs_help - display help message that lists shell commands + *------------------------------------------------------------------------ + */ +shellcmd xsh_help(int nargs, char *args[]) +{ + int32 i; + char *argv[2]; /* argument vector for call */ + char *src, *cmp; /* used for string compare */ + int32 len; /* length of a command name */ + int32 maxlen; /* maximum length of all */ + /* command names */ + int32 cols; /* number of columns in the */ + /* formatted command list */ + int32 spac; /* space per column in the */ + /* formatted command list */ + int32 lines; /* total lines of output in the */ + /* formatted command list */ + int32 j; /* index of commands across one */ + /* line of formatted output */ + + /* For argument '--help', emit help about the 'help' command */ + + if (nargs == 2 && strncmp(args[1], "--help", 7) == 0) { + + printf("Use:\n"); + printf("\t%s [command]\n", args[0]); + printf("Description:\n"); + printf("\tProvides a list of shell commands or\n"); + printf("\thelp information for a specific command\n"); + printf("Options:\n"); + printf("\tcommand\tspecific command for which to\n"); + printf("\t\tdisplay help information\n"); + printf("\t--help\tdisplay this help and exit\n"); + return 0; + } + + /* Check for valid number of arguments */ + + if (nargs > 2) { + fprintf(stderr, "%s: too many arguments\n", args[0]); + fprintf(stderr, "Try '%s --help' for more information\n", + args[0]); + return 1; + } + + /* Output help for specific command given as an argument */ + + if (nargs == 2) { + for (i = 0; i < ncmd; i++) { + src = cmdtab[i].cname; + cmp = args[1]; + while (*src != NULLCH) { + if (*src != *cmp) { + break; + } + src++; + cmp++; + } + if ( (*src != NULLCH) || (*cmp != NULLCH) ) { + continue; + } + + /* prepare args for shell command */ + + argv[0] = args[1]; + argv[1] = "--help"; + (*cmdtab[i].cfunc) (2, argv); + return 0; + } + printf("%s: no such command as '%s'\n", args[0], args[1]); + return 1; + } + + /* No arguments -- print a list of shell commands */ + + printf("\nshell commands are:\n\n"); + + /* Calculate the maximum length of a command name */ + + maxlen = 0; + for (i = 0; i < ncmd; i++) { + len = strnlen(cmdtab[i].cname, 80); + if (len > maxlen) { + maxlen = len; + } + } + + /* Calculate the number of command names per line */ + + cols = 80/(maxlen+1); + if (cols > 6) { + cols = 6; + } + + /* Calculate the width of a column */ + + spac = 80/cols; + + /* Calculate the number of lines of output */ + + lines = (ncmd+(cols-1))/cols; + + /* print the lines of command names */ + + for (i=0; i +#include +#include + +/*------------------------------------------------------------------------ + * xsh_kill - obtain and print the current month, day, year, and time + *------------------------------------------------------------------------ + */ +shellcmd xsh_kill(int nargs, char *args[]) { + + int32 retval; /* return value */ + pid32 pid; /* ID of process to kill */ + char ch; /* next character of argument */ + char *chptr; /* walks along argument string */ + + /* Output info for '--help' argument */ + + if (nargs == 2 && strncmp(args[1], "--help", 7) == 0) { + printf("Usage: %s PID\n\n", args[0]); + printf("Description:\n"); + printf("\tterminates a process\n"); + printf("Options:\n"); + printf("\tPID \tthe ID of a process to terminate\n"); + printf("\t--help\tdisplay this help and exit\n"); + return OK; + } + + /* Check argument count */ + + if (nargs != 2) { + fprintf(stderr, "%s: incorrect argument\n", args[0]); + fprintf(stderr, "Try '%s --help' for more information\n", + args[0]); + return SYSERR; + } + + /* compute process ID from argument string */ + + chptr = args[1]; + ch = *chptr++; + pid = 0; + while(ch != NULLCH) { + if ( (ch < '0') || (ch > '9') ) { + fprintf(stderr, "%s: non-digit in process ID\n", + args[0]); + return 1; + } + pid = 10*pid + (ch - '0'); + ch = *chptr++; + } + if (pid == 0) { + fprintf(stderr, "%s: cannot kill the null process\n", + args[0]); + return 1; + } + + retval = kill(pid); + if (retval == SYSERR) { + fprintf(stderr, "%s: cannot kill process %d\n", + args[0], pid); + return 1; + } + return 0; +} diff --git a/shell/xsh_led.c b/shell/xsh_led.c new file mode 100644 index 0000000..d5ed519 --- /dev/null +++ b/shell/xsh_led.c @@ -0,0 +1,72 @@ +/* xsh_led.c - xsh_led */ + +#include +#include +#include + +/*------------------------------------------------------------------------ + * xsh_led - shell command to turn LEDs on or off + *------------------------------------------------------------------------ + */ +shellcmd xsh_led(int nargs, char *args[]) +{ + uint32 led; /* specific LED to control */ + + /* For argument '--help', emit help about the 'led' command */ + + if (nargs == 2 && strncmp(args[1], "--help", 7) == 0) { + printf("Use: %s LED_name state\n\n", args[0]); + printf("Description:\n"); + printf("\tTurns a front-panel LED on or off\n"); + printf("Options:\n"); + printf("\tLED_name:\tdmz, wlan, power, ciscow, ciscoo\n"); + printf("\tState:\t\ton, off\n"); + + printf("\t--help\t display this help and exit\n"); + return 0; + } + + /* Check for valid number of arguments */ + + if (nargs != 3) { + fprintf(stderr, "%s: error in arguments\n", args[0]); + fprintf(stderr, "Try '%s --help' for more information\n", + args[0]); + return 1; + } + + led = 0; + + /* cfind led to change */ + + if (strncmp(args[1], "dmz", 3) == 0) { + led = GPIO_LED_DMZ; + } else if (strncmp(args[1], "wlan", 4) == 0) { + led = GPIO_LED_WLAN; + } else if (strncmp(args[1], "power", 5) == 0) { + led = GPIO1; + } else if (strncmp(args[1], "ciscow", 6) == 0) { + led = GPIO_LED_CISCOWHT; + } else if (strncmp(args[1], "ciscoo", 6) == 0) { + led = GPIO_LED_CISCOONG; + } else { + fprintf(stderr, "%s: LED name %s is invalid\n", + args[0], args[1]); + fprintf(stderr, "Try '%s --help' for more information\n", + args[0]); + return 1; + } + + /* Change led state */ + + if (strncmp(args[2], "on", 2) == 0) { + gpioLEDOn(led); + } else if (strncmp(args[2], "off", 3) == 0) { + gpioLEDOff(led); + } else { + fprintf(stderr, "%s: invalid state\n", args[0]); + fprintf(stderr, "Try '%s --help' for more information\n", + args[0]); + } + return 0; +} diff --git a/shell/xsh_memdump.c b/shell/xsh_memdump.c new file mode 100644 index 0000000..14fedca --- /dev/null +++ b/shell/xsh_memdump.c @@ -0,0 +1,157 @@ +/* xsh_memdump.c - xsh_memdump */ + +#include +#include +#include + +static uint32 parseval(char *); + +/*------------------------------------------------------------------------ + * xsh_memdump - dump a region of memory by displaying values in hex + * and ascii + *------------------------------------------------------------------------ + */ +shellcmd xsh_memdump(int nargs, char *args[]) +{ + bool8 force = FALSE; /* ignore address sanity checks */ + uint32 start; /* starting address */ + uint32 length; /* length of region to dump */ + int32 arg; /* index into args array */ + uint32 l; /* counts length during dump */ + int32 i; /* counts words during dump */ + uint32 *addr; /* address to dump */ + char *chptr; /* character address to dump */ + char ch; /* next character to print */ + + /* For argument '--help', emit help about the 'memdump' command */ + + if (nargs == 2 && strncmp(args[1], "--help", 7) == 0) { + printf("Use: %s [-f] START LENGTH\n\n", args[0]); + printf("Description:\n"); + printf("\tDumps a LENGTH bytes of memory starting at\n"); + printf("\tthe specified START address (both START and\n"); + printf("\tLENGTH can be specified in decimal or hex)\n"); + printf("Options:\n"); + printf("\t-f\t\tignore sanity checks for addresses\n"); + printf("\tSTART\t\tmemory address at which to start\n"); + printf("\tLENGTH\tnumber of bytes to dump\n"); + printf("\t--help\t display this help and exit\n"); + return 0; + } + + /* Check for valid number of arguments */ + + if (nargs < 3 || nargs > 4) { + fprintf(stderr, "%s: incorrect number of arguments\n", + args[0]); + fprintf(stderr, "Try '%s --help' for more information\n", + args[0]); + return 1; + } + + arg = 1; + if (strncmp(args[arg], "-f", 2) == 0) { + force = TRUE; + arg++; + nargs --; + } + + if (nargs != 3) { + fprintf(stderr, "%s: too few arguments\n", args[0]); + fprintf(stderr, "Try '%s --help' for more information\n", + args[0]); + return 1; + } + + if ( (start=parseval(args[arg])) == 0 ) { + fprintf(stderr, "%s: invalid starting address\n", + args[0]); + return 1; + } + if ( (length =parseval(args[arg+1])) == 0 ) { + fprintf(stderr, "%s: invalid length address\n", + args[0]); + return 1; + } + + /* Round starting address down to multiple of four and round */ + /* length up to a multiple of four */ + + start &= ~0x3; + length = (length + 3) & ~0x3; + + /* verify that the address and length are reasonable */ + + if (force) { + + /* values are valid; perform dump */ + + chptr = (char *)start; + for (l=0; l= 0x20) && (ch <= 0x7e) ) { + printf("%c",ch); + } else { + printf("."); + } + } + printf("*\n"); + start += 16; + } + return 0; + } + printf("Values are out of range; use -f to force\n"); + return 1; +} + +/*------------------------------------------------------------------------ + * parse - parse an argument that is either a decimal or hex value + *------------------------------------------------------------------------ + */ +static uint32 parseval( + char *string /* argument string to parse */ + ) +{ + uint32 value; /* value to return */ + char ch; /* next character */ + + + value = 0; + + /* argument string must consists of decimal digits or */ + /* 0x followed by hex digits */ + + ch = *string++; + if (ch == '0') { /* hexadecimal */ + if (*string++ != 'x') { + return 0; + } + for (ch = *string++; ch != NULLCH; ch = *string++) { + if ((ch >= '0') && (ch <= '9') ) { + value = 16*value + (ch - '0'); + } else if ((ch >= 'a') && (ch <= 'f') ) { + value = 16*value + 10 + (ch - 'a'); + } else if ((ch >= 'A') && (ch <= 'F') ) { + value = 16*value + 10 + (ch - 'A'); + } else { + return 0; + } + } + } else { /* decimal */ + while (ch != NULLCH) { + if ( (ch < '0') || (ch > '9') ) { + return 0; + } + value = 10*value + (ch - '0'); + ch = *string++; + } + } + return value; +} diff --git a/shell/xsh_memstat.c b/shell/xsh_memstat.c new file mode 100644 index 0000000..50bc03b --- /dev/null +++ b/shell/xsh_memstat.c @@ -0,0 +1,113 @@ +/* xsh_memstat.c - xsh_memstat */ + +#include +#include +#include + +static void printMemUse(void); +static void printFreeList(void); + +/*------------------------------------------------------------------------ + * xsh_memstat - Print statistics about memory use and dump the free list + *------------------------------------------------------------------------ + */ +shellcmd xsh_memstat(int nargs, char *args[]) +{ + + /* For argument '--help', emit help about the 'memstat' command */ + + if (nargs == 2 && strncmp(args[1], "--help", 7) == 0) { + printf("use: %s \n\n", args[0]); + printf("Description:\n"); + printf("\tDisplays the current memory use and prints the\n"); + printf("\tfree list.\n"); + printf("Options:\n"); + printf("\t--help\t\tdisplay this help and exit\n"); + return 0; + } + + /* Check for valid number of arguments */ + + if (nargs > 1) { + fprintf(stderr, "%s: too many arguments\n", args[0]); + fprintf(stderr, "Try '%s --help' for more information\n", + args[0]); + return 1; + } + + printMemUse(); + printFreeList(); + + return 0; +} + + +/*------------------------------------------------------------------------ + * printFreeList - Walk the list of free memory blocks and print the + * location and size of each + *------------------------------------------------------------------------ + */ +static void printFreeList(void) +{ + struct memblk *block; + + /* Output a heading for the free list */ + + printf("Free List:\n"); + printf("Block address Length (dec) Length (hex)\n"); + printf("------------- ------------ ------------\n"); + + for (block = memlist.mnext; block != NULL; block = block->mnext) { + printf(" 0x%08x %9d 0x%08x\n", block, + block->mlength, block->mlength); + } + printf("\n"); +} + +extern void start(void); +extern void *_end; + +/*------------------------------------------------------------------------ + * printMemUse - Print statistics about memory use + *------------------------------------------------------------------------ + */ +static void printMemUse(void) +{ + int i; /* Index into process table */ + uint32 code = 0; /* Total Xinu code memory */ + uint32 stack = 0; /* Total used stack memory */ + uint32 kheap = 0; /* Free kernel heap memory */ + uint32 kfree = 0; /* Total free memory */ + struct memblk *block; /* Ptr to memory block */ + + /* Calculate amount of text memory */ + + code = (uint32)&_end - (uint32)start; + + /* Calculate amount of allocated stack memory */ + /* Skip the NULL process since it has a private stack */ + + for (i = 1; i < NPROC; i++) { + if (proctab[i].prstate != PR_FREE) { + stack += (uint32)proctab[i].prstklen; + } + } + + /* Calculate the amount of memory on the free list */ + + for (block = memlist.mnext; block != NULL; block = block->mnext) { + kfree += block->mlength; + } + + /* Calculate the amount of free kernel heap memory */ + + kheap = kfree - stack; + + /* Output statistics on current memory use */ + + printf("Current system memory statistics:\n"); + printf("---------------------------------\n"); + printf("%10d bytes (0x%08x) of Xinu code\n", code, code); + printf("%10d bytes (0x%08x) of allocated stack space\n", stack, stack); + printf("%10d bytes (0x%08x) of available kernel heap space\n\n", kheap, kheap); +} diff --git a/shell/xsh_mmu.c b/shell/xsh_mmu.c new file mode 100644 index 0000000..6aad89e --- /dev/null +++ b/shell/xsh_mmu.c @@ -0,0 +1,22 @@ +/* xsh_mmu.c - xsh_mmu*/ + +#include +#include +#include + +void function1(){ + int *num = 0x10900000; + *num = 300; + printf("[process ID=%d]Value at address 0x%x is %d\n",currpid,num,*num); +} + +shellcmd xsh_mmu(int32 args,char *argv[]) { + int *num = 0x10900000; + int *num1 = 0x11C00000; + *num = 100; + *num1 = 200; + printf("[process ID=%d]Value at address 0x%x is %d\n",currpid,num,*num); + resume(create(function1,1024,20,"Parent",0)); + printf("[process ID=%d]Value at address 0x%x is %d\n",currpid,num,*num); + return 0; +} diff --git a/shell/xsh_ps.c b/shell/xsh_ps.c new file mode 100644 index 0000000..9d5738f --- /dev/null +++ b/shell/xsh_ps.c @@ -0,0 +1,62 @@ +/* xsh_ps.c - xsh_ps */ + +#include +#include +#include + +/*------------------------------------------------------------------------ + * xsh_ps - shell command to print the process table + *------------------------------------------------------------------------ + */ +shellcmd xsh_ps(int nargs, char *args[]) +{ + struct procent *prptr; /* pointer to process */ + int32 i; /* index into proctabl */ + char *pstate[] = { /* names for process states */ + "free ", "curr ", "ready", "recv ", "sleep", "susp ", + "wait ", "rtime"}; + + /* For argument '--help', emit help about the 'ps' command */ + + if (nargs == 2 && strncmp(args[1], "--help", 7) == 0) { + printf("Use: %s\n\n", args[0]); + printf("Description:\n"); + printf("\tDisplays information about running processes\n"); + printf("Options:\n"); + printf("\t--help\t display this help and exit\n"); + return 0; + } + + /* Check for valid number of arguments */ + + if (nargs > 1) { + fprintf(stderr, "%s: too many arguments\n", args[0]); + fprintf(stderr, "Try '%s --help' for more information\n", + args[0]); + return 1; + } + + /* Print header for items from the process table */ + + printf("%3s %-16s %5s %4s %4s %10s %-10s %10s\n", + "Pid", "Name", "State", "Prio", "Ppid", "Stack Base", + "Stack Ptr", "Stack Size"); + + printf("%3s %-16s %5s %4s %4s %10s %-10s %10s\n", + "---", "----------------", "-----", "----", "----", + "----------", "----------", "----------"); + + /* Output information for each process */ + + for (i = 0; i < NPROC; i++) { + prptr = &proctab[i]; + if (prptr->prstate == PR_FREE) { /* skip unused slots */ + continue; + } + printf("%3d %-16s %s %4d %4d 0x%08X 0x%08X %8d\n", + i, prptr->prname, pstate[(int)prptr->prstate], + prptr->prprio, prptr->prparent, prptr->prstkbase, + prptr->prstkptr, prptr->prstklen); + } + return 0; +} diff --git a/shell/xsh_rdstest.c b/shell/xsh_rdstest.c new file mode 100644 index 0000000..949e2e9 --- /dev/null +++ b/shell/xsh_rdstest.c @@ -0,0 +1,118 @@ +/* xsh_rdstest.c - xsh_rdstest */ +#include +#include + +/*------------------------------------------------------------------------ + * xsh_rdstest - shell to print the time the system has been up + *------------------------------------------------------------------------ + */ +shellcmd xsh_rdstest(int nargs, char *args[]) +{ + bool8 err; + int32 retval; + int32 i, j; + char dskname[] = "TestDisk"; + + char buff[2048]; + char buff2[2048]; + + retval = open(RDISK,dskname,"rw"); + + if (retval < 0) { + kprintf("xsh_rdstest: open %s returns %s, stopping\r\n", + dskname, retval==SYSERR?"SYSERR":"TIMEOUT"); + close( RDISK ); + return 1; + } else { + kprintf("xsh_rdstest: open %s returns %d\r\n", + dskname, retval); + } + + kprintf("writing eight blocks to the disk\r\n"); + for (i=7; i>=0; i--) { + memset(buff, (char)(i&0xff), RD_BLKSIZ); + kprintf("\n\r*** writing block %d\n\r",i); + retval = write(RDISK, buff, i); + if (retval < 0) { + kprintf("write to block %d returns %d\r\n", i, retval); + } + } + kprintf("reading block 1\n\r"); + retval = read(RDISK, buff, 1); + kprintf("read from block 1 has return value %d\r\n", retval); + + err = 0; + for (i=0; i +#include +#include + +/*------------------------------------------------------------------------ + * xsh_sleep - Shell command to delay for a specified number of seconds + *------------------------------------------------------------------------ + */ +shellcmd xsh_sleep(int nargs, char *args[]) +{ + int32 delay; /* Delay in seconds */ + char *chptr; /* Walks through argument */ + char ch; /* Next character of argument */ + + /* For argument '--help', emit help about the 'sleep' command */ + + if (nargs == 2 && strncmp(args[1], "--help", 7) == 0) { + printf("Use: %s\n\n", args[0]); + printf("Description:\n"); + printf("\tDelay for a specified number of seconds\n"); + printf("Options:\n"); + printf("\t--help\t display this help and exit\n"); + return 0; + } + + /* Check for valid number of arguments */ + + if (nargs > 2) { + fprintf(stderr, "%s: too many arguments\n", args[0]); + fprintf(stderr, "Try '%s --help' for more information\n", + args[0]); + return 1; + } + + if (nargs != 2) { + fprintf(stderr, "%s: argument in error\n", args[0]); + fprintf(stderr, "Try '%s --help' for more information\n", + args[0]); + return 1; + } + + chptr = args[1]; + ch = *chptr++; + delay = 0; + while (ch != NULLCH) { + if ( (ch < '0') || (ch > '9') ) { + fprintf(stderr, "%s: nondigit in argument\n", + args[0]); + return 1; + } + delay = 10*delay + (ch - '0'); + ch = *chptr++; + } + sleep(delay); + return 0; +} diff --git a/shell/xsh_uptime.c b/shell/xsh_uptime.c new file mode 100644 index 0000000..bceb8f5 --- /dev/null +++ b/shell/xsh_uptime.c @@ -0,0 +1,75 @@ +/* xsh_uptime.c - xsh_uptime */ + +#include +#include +#include + +/*------------------------------------------------------------------------ + * xsh_uptime - shell to print the time the system has been up + *------------------------------------------------------------------------ + */ +shellcmd xsh_uptime(int nargs, char *args[]) +{ + uint32 days, hrs, mins, secs; /* days, hours, minutes, and */ + /* seconds since system boot */ + uint32 secperday = 86400; /* seconds in a day */ + uint32 secperhr = 3600; /* seconds in an hour */ + uint32 secpermin = 60; /* seconds in a minute */ + + /* For argument '--help', emit help about the 'uptime' command */ + + if (nargs == 2 && strncmp(args[1], "--help", 7) == 0) { + printf("Use: %s\n\n", args[0]); + printf("Description:\n"); + printf("\tDisplays time since the system booted\n"); + printf("Options:\n"); + printf("\t--help\t display this help and exit\n"); + return 0; + } + + /* Check for valid number of arguments */ + + if (nargs > 1) { + fprintf(stderr, "%s: too many arguments\n", args[0]); + fprintf(stderr, "Try '%s --help' for more information\n", + args[0]); + return 1; + } + + secs = clktime; /* total seconds since boot */ + + /* subtract number of whole days */ + + days = secs/secperday; + secs -= days*secperday; + + /* subtract number of hours */ + + hrs = secs/secperhr; + secs -= hrs*secperhr; + + /* subtract number of minutes */ + + mins = secs/secpermin; + secs -= mins*secpermin; + + printf("Xinu has been up "); + if (days > 0) { + printf(" %d day(s) ", days); + } + + if (hrs > 0) { + printf(" %d hour(s) ", hrs); + } + + if (mins > 0) { + printf(" %d minute(s) ", mins); + } + + if (secs > 0) { + printf(" %d second(s) ", secs); + } + printf("\n"); + + return 0; +} diff --git a/system/ascdate.c b/system/ascdate.c new file mode 100644 index 0000000..5a39e1b --- /dev/null +++ b/system/ascdate.c @@ -0,0 +1,226 @@ +/* ascdate.c - ascdate */ + +#include +#include +#include +struct dateinfo Date = {0, FALSE, DATE_DST_AUTO, + {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}, + {"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", + "Aug", "Sep","Oct","Nov","Dec"}, + {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"}}; + +/*------------------------------------------------------------------------ + * ascdate - Format a date in ascii including day, year hours:mins:secs + *------------------------------------------------------------------------ + */ +status ascdate ( + uint32 now, /* Date and time in xinu format */ + char *str /* String ( >= 20 chars long) */ + ) +{ + uint32 tmp; /* Counts remaining seconds */ + /* during computations */ + int32 year, month, day, /* Values for various parts of */ + hour, minute, second; /* the date */ + uint32 days; /* Number of days in a year */ + uint32 leapyrs; /* Number of leap years between */ + /* 1970 and now */ + uint32 shift; /* Number of times the calendar */ + /* shifted by a day */ + uint32 dayofweek; /* Day of the week (0 - 6) */ + /* For DST, day of the week for:*/ + int32 jan1; /* January 1 this year */ + int32 mar1; /* March 1 this year */ + int32 nov1; /* November 1 this year */ + int32 marss; /* Day of second sunday in march*/ + int32 novfs; /* Day of second sunday in march*/ + bool8 dst; /* Should we adjust for DST? */ + int32 i; /* Indexes through months */ + + char *zones[] = {"EST", "CST", "MST", "PST"}; + char *dzones[] = {"EDT", "CDT", "MDT", "PDT"}; + + /* Compute the year (1970-2099) */ + + for (year=1970 ; TRUE ; year++) { + days = isleap(year) ? 366 : 365; + tmp = days * SECPERDY; + if (tmp > now) + break; + now -= tmp; + } + + /* Compute the number of whole days that have already passed */ + /* during the current year (0 through 365) */ + + days = now / SECPERDY; + + /* Compute the month (0-11) */ + + for (month=0 ; month<12 ; month++) { + tmp = Date.dt_msize[month] * SECPERDY; + if ((month == 1) && isleap(year)) { + tmp += SECPERDY; + } + if (tmp > now) + break; + now -= tmp; + } + + /* Compute the day of month (1-31) */ + + day = (int32)( now/SECPERDY ) + 1; + now %= SECPERDY; + + /* Compute the hour (0-23) */ + + hour = (int32) ( now/SECPERHR ); + now %= SECPERHR; + + /* Compute the minutes (0-59) */ + + minute = now / SECPERMN; + now %= SECPERMN; + + /* Compute the seconds (0-59) */ + second = (int32) now; + + /* Compute the day of the week (0-6) */ + /* */ + /* Note: Jan 1, 1970 was a Thursday (4 on a 0 to 6 range) */ + /* Add one day of the week each full year (365%7 == 1) plus */ + /* one extra day for each leap year */ + + /* Compute number of leap years prior to current year */ + + leapyrs = (year-1969)/4; + + /* Compute shift for all previous years (i.e., day of week of */ + /* Jan 1 of the current year) */ + + shift = 4 + (year - 1970) + leapyrs; + + /* Remember day of the week for Jan 1 this year (for DST) */ + + jan1 = shift % 7; + + /* Add the number of days so far this year */ + + shift += days; + + /* Convert to integer from 0 through 6 */ + + dayofweek = shift % 7; + + /* */ + /* Handle daylight savings time */ + /* */ + /* Date.dt_daylight specifies whether to set it on, off, */ + /* or automatically compute the setting */ + /* */ + + dst = FALSE; + if (Date.dt_daylight == DATE_DST_ON) { + dst = TRUE; + } else if (Date.dt_daylight == DATE_DST_AUTO) { + + /* Automatic DST calculation: DST is on between 2:00 AM */ + /* the second Sunday of March and 2:00 AM the first */ + /* sunday in November */ + + /* Calculate day of the week for March 1 */ + + mar1 = (jan1 + Date.dt_msize[0] + Date.dt_msize[1] + + isleap(year)) % 7; + + /* Caculate day (1-31) of the second sunday in March */ + + if (mar1 == 0) { /* Mar. 1 is a Sunday */ + marss = 8; + } else { /* Mar. 1 is Monday - Saturday */ + marss = 15 - mar1; + } + + /* Calculate day of the week for November 1 */ + + nov1 = jan1; + for (i=0; i<10; i++) { + nov1 += Date.dt_msize[i]; + } + if (isleap(year)) { + nov1++; + } + nov1 = nov1 % 7; + if (nov1 == 0) { /* Nov. 1 is a Sunday */ + novfs = 1; + } else { /* Nov. 1 is Monday - Saturday */ + novfs = 8 - nov1; + } + + /* Set dst based on time of the year */ + + /* DST is off during December, January, and Feburary */ + + if ( (month == 11) || (month == 0) || (month == 1) ) { + dst = FALSE; + + /* DST is on from April through October */ + + } else if ( (month>2) && (month<10) ) { + dst = TRUE; + + /* DST is on in March past 2 AM on the second Sunday */ + + } else if (month == 2) { + + dst = FALSE; + if (day > marss) { + dst = TRUE; + } else if ( (day == marss) && (hour >= 2) ) { + dst = TRUE; + } + + /* DST is on in November until 2 am on first Sunday */ + + + } else if (month == 10) { + + dst = TRUE; + if (day > novfs) { + dst = FALSE; + } else if ( (day == novfs) && (hour >= 1) ) { + dst = FALSE; + } + } + } + + /* If we are doing DST, move ahead one hour and handle the */ + /* case where we move to the next day or the next month */ + + if (dst) { + hour++; + + /* If day exceeded, move to next day */ + + if (hour > 23) { + hour = 0; + day++; + + /* If month exceeded, move to next month */ + + if (day > Date.dt_msize[month]) { + day = 1; + month++; + + /* Stop here because DST does not occur */ + /* during the year boundary */ + } + } + } + + sprintf(str, "%3s %3s %2d %2d:%02d:%02d %s %d", + Date.dt_dnam[dayofweek], Date.dt_mnam[month], + day, hour, minute, second, dst? dzones[TIMEZONE-5]: + zones[TIMEZONE-5], year); + return OK; +} diff --git a/system/bufinit.c b/system/bufinit.c new file mode 100644 index 0000000..537f0be --- /dev/null +++ b/system/bufinit.c @@ -0,0 +1,16 @@ +/* bufinit.c - bufinit */ + +#include + +struct bpentry buftab[NBPOOLS]; /* Buffer pool table */ +bpid32 nbpools; + +/*------------------------------------------------------------------------ + * bufinit - Initialize the buffer pool data structure + *------------------------------------------------------------------------ + */ +status bufinit(void) +{ + nbpools = 0; + return OK; +} diff --git a/system/chprio.c b/system/chprio.c new file mode 100644 index 0000000..634bbe5 --- /dev/null +++ b/system/chprio.c @@ -0,0 +1,28 @@ +/* chprio.c - chprio */ + +#include + +/*------------------------------------------------------------------------ + * chprio - Change the scheduling priority of a process + *------------------------------------------------------------------------ + */ +pri16 chprio( + pid32 pid, /* ID of process to change */ + pri16 newprio /* New priority */ + ) +{ + intmask mask; /* Saved interrupt mask */ + struct procent *prptr; /* Ptr to process' table entry */ + pri16 oldprio; /* Priority to return */ + + mask = disable(); + if (isbadpid(pid)) { + restore(mask); + return (pri16) SYSERR; + } + prptr = &proctab[pid]; + oldprio = prptr->prprio; + prptr->prprio = newprio; + restore(mask); + return oldprio; +} diff --git a/system/clkhandler.c b/system/clkhandler.c new file mode 100644 index 0000000..f3d2fc5 --- /dev/null +++ b/system/clkhandler.c @@ -0,0 +1,39 @@ +/* clkhandler.c - clkhandler */ + +#include +#include +void wakeup(void); +/** + * @ingroup timer + * + * Interrupt handler function for the timer interrupt. This schedules a new + * timer interrupt to occur at some point in the future, then updates ::clktime + * and ::clkticks, then wakes sleeping threads if there are any, otherwise + * reschedules the processor. + */ +interrupt clkhandler(void) +{ + clkupdate(platform.clkfreq / CLKTICKS_PER_SEC); + + /* Another clock tick passes. */ + clkticks++; + + /* Update global second counter. */ + if (CLKTICKS_PER_SEC == clkticks) + { + clktime++; + clkticks = 0; + } + + /* If sleepq is not empty, decrement first key. */ + /* If key reaches zero, call wakeup. */ + if (nonempty(sleepq) && (--firstkey(sleepq) <= 0)) + { + wakeup(); + } + else + { + resched(); + } +} + diff --git a/system/clkinit.c b/system/clkinit.c new file mode 100644 index 0000000..2d0163b --- /dev/null +++ b/system/clkinit.c @@ -0,0 +1,32 @@ +/* clkinit.c - clkinit (BeagleBone Black) */ + +#include +#include +uint32 clktime; /* Seconds since boot */ +uint32 ctr1000 = 0; /* Milliseconds since boot */ +qid16 sleepq; /* Queue of sleeping processes */ +uint32 preempt; /* Preemption counter */ +volatile ulong clkticks; +/*------------------------------------------------------------------------ + * clkinit - Initialize the clock and sleep queue at startup + *------------------------------------------------------------------------ + */ +void clkinit(void) +{ + + kprintf("Time base %dHz, Clock ticks at %dHz\r\n", + platform.clkfreq, CLKTICKS_PER_SEC); + interruptVector[IRQ_TIMER] = clkhandler; + enable_irq(IRQ_TIMER); + clkupdate(platform.clkfreq / CLKTICKS_PER_SEC); + sleepq = newqueue(); /* Allocate a queue to hold the delta */ + /* list of sleeping processes */ + + preempt = QUANTUM; /* Set the preemption time */ + + clktime = 0; /* Start counting seconds */ + + return; +} + + diff --git a/system/close.c b/system/close.c new file mode 100644 index 0000000..52a701e --- /dev/null +++ b/system/close.c @@ -0,0 +1,26 @@ +/* close.c - close */ + +#include + +/*------------------------------------------------------------------------ + * close - Close a device + *------------------------------------------------------------------------ + */ +syscall close( + did32 descrp /* Descriptor for device */ + ) +{ + intmask mask; /* Saved interrupt mask */ + struct dentry *devptr; /* Entry in device switch table */ + int32 retval; /* Value to return to caller */ + + mask = disable(); + if (isbaddev(descrp)) { + restore(mask); + return SYSERR; + } + devptr = (struct dentry *) &devtab[descrp]; + retval = (*devptr->dvclose) (devptr); + restore(mask); + return retval; +} diff --git a/system/control.c b/system/control.c new file mode 100644 index 0000000..7581177 --- /dev/null +++ b/system/control.c @@ -0,0 +1,29 @@ +/* control.c - control */ + +#include + +/*------------------------------------------------------------------------ + * control - Control a device or a driver (e.g., set the driver mode) + *------------------------------------------------------------------------ + */ +syscall control( + did32 descrp, /* Descriptor for device */ + int32 func, /* Specific control function */ + int32 arg1, /* Specific argument for func */ + int32 arg2 /* Specific argument for func */ + ) +{ + intmask mask; /* Saved interrupt mask */ + struct dentry *devptr; /* Entry in device switch table */ + int32 retval; /* Value to return to caller */ + + mask = disable(); + if (isbaddev(descrp)) { + restore(mask); + return SYSERR; + } + devptr = (struct dentry *) &devtab[descrp]; + retval = (*devptr->dvcntl) (devptr, func, arg1, arg2); + restore(mask); + return retval; +} diff --git a/system/create.c b/system/create.c new file mode 100644 index 0000000..ef5747e --- /dev/null +++ b/system/create.c @@ -0,0 +1,138 @@ +/* create.c - create, newpid */ + +#include + +local int newpid(); + +#define roundew(x) ( (x+3)& ~0x3) + +/*------------------------------------------------------------------------ + * create - create a process to start running a procedure + *------------------------------------------------------------------------ + */ +pid32 create( + void *procaddr, /* procedure address */ + uint32 ssize, /* stack size in words */ + pri16 priority, /* process priority > 0 */ + char *name, /* name (for debugging) */ + uint32 nargs, /* number of args that follow */ + ... + ) +{ + uint32 savsp, *pushsp; + intmask mask; /* interrupt mask */ + pid32 pid; /* stores new process id */ + struct procent *prptr; /* pointer to proc. table entry */ + int32 i; + uint32 *a; /* points to list of args */ + uint32 *saddr; /* stack address */ + + mask = disable(); + if (ssize < MINSTK) + ssize = MINSTK; + ssize = (uint32) roundew(ssize); + if (((saddr = (uint32 *)getstk(ssize)) == + (uint32 *)SYSERR ) || + (pid=newpid()) == SYSERR || priority < 1 ) { + restore(mask); + return SYSERR; + } + + prcount++; + prptr = &proctab[pid]; + + /* initialize process table entry for new process */ + prptr->prstate = PR_SUSP; /* initial state is suspended */ + prptr->prprio = priority; + prptr->prstkbase = (char *)saddr; + prptr->prstklen = ssize; + prptr->prname[PNMLEN-1] = NULLCH; + for (i=0 ; iprname[i]=name[i])!=NULLCH; i++) + ; + prptr->prsem = -1; + prptr->prparent = (pid32)getpid(); + prptr->prhasmsg = FALSE; + + /* set up initial device descriptors for the shell */ + prptr->prdesc[0] = SERIAL0; /* stdin is CONSOLE device */ + prptr->prdesc[1] = SERIAL0; /* stdout is CONSOLE device */ + prptr->prdesc[2] = SERIAL0; /* stderr is CONSOLE device */ + + /* Initialize stack as if the process was called */ + + *saddr = STACKMAGIC; + savsp = (uint32)saddr; + + /* push arguments */ + a = (uint32 *)(&nargs + 1); /* start of args */ + a += nargs -1; /* last argument */ + for ( ; nargs > 4 ; nargs--) /* machine dependent; copy args */ + *--saddr = *a--; /* onto created process' stack */ + *--saddr = (long)procaddr; + for(i = 11; i >= 4; i--) + *--saddr = 0; + for(i = 4; i > 0; i--) { + if(i <= nargs) + *--saddr = *a--; + else + *--saddr = 0; + } + *--saddr = (long)INITRET; /* push on return address */ + *--saddr = (long)0x00000053; /* CPSR, A, F bits set, */ + /* Supervisor mode */ + prptr->prstkptr = (char *)saddr; + restore(mask); + return pid; + + /* The following entries on the stack must match what ctxsw */ + /* expects a saved process state to contain: ret address, */ + /* ebp, interrupt mask, flags, registerss, and an old SP */ + + *--saddr = (long)procaddr; /* Make the stack look like it's*/ + /* half-way through a call to */ + /* ctxsw that "returns" to the */ + /* new process */ + *--saddr = savsp; /* This will be register ebp */ + /* for process exit */ + savsp = (uint32) saddr; /* start of frame for ctxsw */ + *--saddr = 0x00000200; /* New process runs with */ + /* interrupts enabled */ + + /* Basically, the following emulates a x86 "pushal" instruction */ + + *--saddr = 0; /* %eax */ + *--saddr = 0; /* %ecx */ + *--saddr = 0; /* %edx */ + *--saddr = 0; /* %ebx */ + *--saddr = 0; /* %esp; value filled in below */ + pushsp = saddr; /* remember this location */ + *--saddr = savsp; /* %ebp (while finishing ctxsw) */ + *--saddr = 0; /* %esi */ + *--saddr = 0; /* %edi */ + *pushsp = (unsigned long) (prptr->prstkptr = (char *)saddr); + restore(mask); + return pid; +} + +/*------------------------------------------------------------------------ + * newpid - Obtain a new (free) process ID + *------------------------------------------------------------------------ + */ +local pid32 newpid(void) +{ + uint32 i; /* iterate through all processes*/ + static pid32 nextpid = 1; /* position in table to try or */ + /* one beyond end of table */ + + /* check all NPROC slots */ + + for (i = 0; i < NPROC; i++) { + nextpid %= NPROC; /* wrap around to beginning */ + if (proctab[nextpid].prstate == PR_FREE) { + return nextpid++; + } else { + nextpid++; + } + } + return (pid32) SYSERR; +} diff --git a/system/ctxsw.S b/system/ctxsw.S new file mode 100644 index 0000000..20b0e71 --- /dev/null +++ b/system/ctxsw.S @@ -0,0 +1,22 @@ +/* ctxsw.S - ctxsw (for ARM) */ + + .text + .globl ctxsw + +/*------------------------------------------------------------------------ + * ctxsw - ARM context switch; the call is ctxsw(&old_sp, &new_sp) + *------------------------------------------------------------------------ + */ + +ctxsw: + push {r0-r11, lr} /* Push regs 0 - 11 and lr */ + push {lr} /* Push return address */ + mrs r2, cpsr /* Obtain status from coprocess.*/ + push {r2} /* and push onto stack */ + str sp, [r0] /* Save old process's SP */ + ldr sp, [r1] /* Pick up new process's SP */ + pop {r0} /* Use status as argument and */ + //bl restore /* call restore to restore it */ + pop {lr} /* Pick up the return address */ + pop {r0-r12} /* Restore other registere */ + mov pc, r12 /* Return to the new process */ diff --git a/system/debug.c b/system/debug.c new file mode 100644 index 0000000..55cf538 --- /dev/null +++ b/system/debug.c @@ -0,0 +1,78 @@ +/* debug.c - hexdump_print, hexdump */ + +#include +#include +#include + +static void hexdump_print(byte, byte); + +/*------------------------------------------------------------------------ + * hexdump_print - Print a byte in ASCII or hex + *------------------------------------------------------------------------ + */ +static void hexdump_print( + byte data, /* Item to print */ + byte mode /* ASCII or hex mode */ + ) +{ + switch (mode) + { + case DEBUG_ASCII: + data = (' ' <= data && data <= '~') ? data : '.'; + fprintf(stdout, "%c", data); + break; + case DEBUG_HEX: + fprintf(stdout, "%02x ", data); + break; + default: + break; + } +} + + +/*------------------------------------------------------------------------ + * hexdump - Dump a region of memory + *------------------------------------------------------------------------ + */ +void hexdump( + void *buffer, /* Addresss of memory area */ + uint32 length, /* Length in bytes */ + bool8 canon /* Print in ASCII or hex */ + ) +{ + uint32 m, n, remain; + + byte *b = (byte *)buffer; + + for (n = 0; n < length; n += 0x10) { + fprintf(stdout, "%08x ", (uint32)buffer + n); + + remain = length - n; + + for (m = 0; m < remain && m < 0x10; m++) { + if (m % 0x08 == 0) { + fprintf(stdout, " "); + } + hexdump_print(b[n + m], DEBUG_HEX); + } + + /* Pad the rest if needed */ + if (remain < 0x10) { + for (m = 0; m < 0x10 - remain; m++) { + if ((0 != m) && (0 == m % 0x08)) { + fprintf(stdout, " "); + } + fprintf(stdout, " "); + } + } + + if (canon == TRUE) { + fprintf(stdout, " |"); + for (m = 0; m < remain && m < 0x10; m++) { + hexdump_print(b[n + m], DEBUG_ASCII); + } + fprintf(stdout, "|"); + } + fprintf(stdout, "\n"); + } +} diff --git a/system/evec.c b/system/evec.c new file mode 100644 index 0000000..b1d61b9 --- /dev/null +++ b/system/evec.c @@ -0,0 +1,154 @@ +/* evec.c -- initintc, set_evec, irq_dispatch */ + +#include +#include + +/*#define STKTRACE*/ +/*#define REGDUMP*/ + +extern void userret(void); + +uint32 intc_vector[128]; /* Interrupt vector */ +char expmsg1[] = "Unhandled exception. Link Register: 0x%x"; +char expmsg2[] = "**** EXCEPTION ****"; +/*------------------------------------------------------------------------ + * initintc - Initialize the Interrupt Controller + *------------------------------------------------------------------------ + */ +int32 initintc() +{ + struct intc_csreg *csrptr = (struct intc_csreg *)0x48200000; + + /* Reset the interrupt controller */ + + csrptr->sysconfig |= (INTC_SYSCONFIG_SOFTRESET); + + /* Wait until reset is complete */ + + while((csrptr->sysstatus & INTC_SYSSTATUS_RESETDONE) == 0); + + return OK; +} + +/*------------------------------------------------------------------------ + * set_evec - set exception vector to point to an exception handler + *------------------------------------------------------------------------ + */ +int32 set_1evec(uint32 xnum, uint32 handler) +{ + struct intc_csreg *csrptr = (struct intc_csreg *)0x48200000; + uint32 bank; /* bank number in int controller */ + uint32 mask; /* used to set bits in bank */ + + /* There are only 127 interrupts allowed 0-126 */ + + if(xnum > 127) { + return SYSERR; + } + + /* Install the handler */ + + intc_vector[xnum] = handler; + + /* Get the bank number based on interrupt number */ + + bank = (xnum/32); + + /* Get the bit inside the bank */ + + mask = (0x00000001 << (xnum%32)); + + /* Reset the bit to enable that interrupt number */ + + csrptr->banks[bank].mir &= (~mask); + + return OK; +} + +/*------------------------------------------------------------------------- + * irq_dispatch - call the handler for specific interrupt + *------------------------------------------------------------------------- + */ +void irq_dispatch() +{ + struct intc_csreg *csrptr = (struct intc_csreg *)0x48200000; + uint32 xnum; /* Interrupt number of device */ + interrupt (*handler)(); /* Pointer to handler function */ + + /* Get the interrupt number from the Interrupt controller */ + + xnum = csrptr->sir_irq & 0x7F; + + /* If a handler is set for the interrupt, call it */ + + if(intc_vector[xnum]) { + handler = intc_vector[xnum]; + handler(xnum); + } + + /* Acknowledge the interrupt */ + + csrptr->control |= (INTC_CONTROL_NEWIRQAGR); +} + +#if 0 +static long *fp; +/*------------------------------------------------------------------------ + * trap -- print some debugging info when a trap occurred + * Note: Need some more work. + *------------------------------------------------------------------------ +*/ +#define REGDUMP + +void trap(int inum) +{ + long *sp; + intmask mask; + + mask = disable(); + kprintf("TRAP\n"); + //asm("movl %ebp,fp"); + sp = fp + 15; /* eflags/CS/eip/ebp/regs/trap#/Xtrap/ebp */ + kprintf("Xinu trap!\n"); + if (inum < 16) + kprintf("exception %d (%s) currpid %d (%s)\n", inum, + inames[inum], currpid, proctab[currpid].prname); + else + kprintf("exception %d currpid %d (%s)\n", inum, currpid, + proctab[currpid].prname); +#ifdef REGDUMP + kprintf("eflags %X ", *sp--); + sp--; /* skip OLD CS */ + kprintf("eip %X ", *sp); + sp--; + if (inum == 8 || (inum >= 10 && inum <= 14)) { + kprintf("error code %08x (%u)\n", *sp, *sp); + sp--; + } + sp--; /* skip FP for Xint call */ + kprintf("register dump:\n"); + kprintf("eax %08X (%u)\n", *sp, *sp); + sp--; + kprintf("ecx %08X (%u)\n", *sp, *sp); + sp--; + kprintf("edx %08X (%u)\n", *sp, *sp); + sp--; + kprintf("ebx %08X (%u)\n", *sp, *sp); + sp--; + kprintf("esp %08X (%u)\n", *sp, *sp); + sp--; + kprintf("ebp %08X (%u)\n", *sp, *sp); + fp = sp; + sp--; + kprintf("esi %08X (%u)\n", *sp, *sp); + sp--; + kprintf("edi %08X (%u)\n", *sp, *sp); + sp--; +#endif // REGDUMP +#ifdef STKTRACE + stacktrace(currpid); +#endif // STKTRACE + + panic("Trap processing complete...\n"); +} +#endif diff --git a/system/exit.c b/system/exit.c new file mode 100644 index 0000000..e648c3e --- /dev/null +++ b/system/exit.c @@ -0,0 +1,12 @@ +/* exit.c - exit */ + +#include + +/*------------------------------------------------------------------------ + * exit - Cause the calling process to exit + *------------------------------------------------------------------------ + */ +void exit(void) +{ + kill(getpid()); /* Kill the current process */ +} diff --git a/system/freebuf.c b/system/freebuf.c new file mode 100644 index 0000000..44fd542 --- /dev/null +++ b/system/freebuf.c @@ -0,0 +1,39 @@ +/* freebuf.c - freebuf */ + +#include + +/*------------------------------------------------------------------------ + * freebuf - Free a buffer that was allocated from a pool by getbuf + *------------------------------------------------------------------------ + */ +syscall freebuf( + char *bufaddr /* Address of buffer to return */ + ) +{ + intmask mask; /* Saved interrupt mask */ + struct bpentry *bpptr; /* Pointer to entry in buftab */ + bpid32 poolid; /* ID of buffer's pool */ + + mask = disable(); + + /* Extract pool ID from integer prior to buffer address */ + + bufaddr -= sizeof(bpid32); + poolid = *(bpid32 *)bufaddr; + if (poolid < 0 || poolid >= nbpools) { + restore(mask); + return SYSERR; + } + + /* Get address of correct pool entry in table */ + + bpptr = &buftab[poolid]; + + /* Insert buffer into list and signal semaphore */ + + ((struct bpentry *)bufaddr)->bpnext = bpptr->bpnext; + bpptr->bpnext = (struct bpentry *)bufaddr; + signal(bpptr->bpsem); + restore(mask); + return OK; +} diff --git a/system/freemem.c b/system/freemem.c new file mode 100644 index 0000000..afd697a --- /dev/null +++ b/system/freemem.c @@ -0,0 +1,70 @@ +/* freemem.c - freemem */ + +#include + +/*------------------------------------------------------------------------ + * freemem - Free a memory block, returning the block to the free list + *------------------------------------------------------------------------ + */ +syscall freemem( + char *blkaddr, /* Pointer to memory block */ + uint32 nbytes /* Size of block in bytes */ + ) +{ + intmask mask; /* Saved interrupt mask */ + struct memblk *next, *prev, *block; + uint32 top; + + mask = disable(); + if ((nbytes == 0) || ((uint32) blkaddr < (uint32) minheap) + || ((uint32) blkaddr > (uint32) maxheap)) { + restore(mask); + return SYSERR; + } + + nbytes = (uint32) roundmb(nbytes); /* Use memblk multiples */ + block = (struct memblk *)blkaddr; + + prev = &memlist; /* Walk along free list */ + next = memlist.mnext; + while ((next != NULL) && (next < block)) { + prev = next; + next = next->mnext; + } + + if (prev == &memlist) { /* Compute top of previous block*/ + top = (uint32) NULL; + } else { + top = (uint32) prev + prev->mlength; + } + + /* Ensure new block does not overlap previous or next blocks */ + + if (((prev != &memlist) && (uint32) block < top) + || ((next != NULL) && (uint32) block+nbytes>(uint32)next)) { + restore(mask); + return SYSERR; + } + + memlist.mlength += nbytes; + + /* Either coalesce with previous block or add to free list */ + + if (top == (uint32) block) { /* Coalesce with previous block */ + prev->mlength += nbytes; + block = prev; + } else { /* Link into list as new node */ + block->mnext = next; + block->mlength = nbytes; + prev->mnext = block; + } + + /* Coalesce with next block if adjacent */ + + if (((uint32) block + block->mlength) == (uint32) next) { + block->mlength += next->mlength; + block->mnext = next->mnext; + } + restore(mask); + return OK; +} diff --git a/system/getbuf.c b/system/getbuf.c new file mode 100644 index 0000000..844f8da --- /dev/null +++ b/system/getbuf.c @@ -0,0 +1,43 @@ +/* getbuf.c - getbuf */ + +#include + +/*------------------------------------------------------------------------ + * getbuf - Get a buffer from a preestablished buffer pool + *------------------------------------------------------------------------ + */ +char *getbuf( + bpid32 poolid /* Index of pool in buftab */ + ) +{ + intmask mask; /* Saved interrupt mask */ + struct bpentry *bpptr; /* Pointer to entry in buftab */ + struct bpentry *bufptr; /* Pointer to a buffer */ + + mask = disable(); + + /* Check arguments */ + + if ( (poolid < 0 || poolid >= nbpools) ) { + restore(mask); + return (char *)SYSERR; + + } + bpptr = &buftab[poolid]; + + /* Wait for pool to have > 0 buffers and allocate a buffer */ + + wait(bpptr->bpsem); + bufptr = bpptr->bpnext; + + /* Unlink buffer from pool */ + + bpptr->bpnext = bufptr->bpnext; + + /* Record pool ID in first four bytes of buffer and skip */ + + *(bpid32 *)bufptr = poolid; + bufptr = (struct bpentry *)(sizeof(bpid32) + (char *)bufptr); + restore(mask); + return (char *)bufptr; +} diff --git a/system/getc.c b/system/getc.c new file mode 100644 index 0000000..bed57c3 --- /dev/null +++ b/system/getc.c @@ -0,0 +1,26 @@ +/* getc.c - getc */ + +#include + +/*------------------------------------------------------------------------ + * getc - Obtain one byte from a device + *------------------------------------------------------------------------ + */ +syscall getc( + did32 descrp /* Descriptor for device */ + ) +{ + intmask mask; /* Saved interrupt mask */ + struct dentry *devptr; /* Entry in device switch table */ + int32 retval; /* Value to return to caller */ + + mask = disable(); + if (isbaddev(descrp)) { + restore(mask); + return SYSERR; + } + devptr = (struct dentry *) &devtab[descrp]; + retval = (*devptr->dvgetc) (devptr); + restore(mask); + return retval; +} diff --git a/system/getdev.c b/system/getdev.c new file mode 100644 index 0000000..a92d8dc --- /dev/null +++ b/system/getdev.c @@ -0,0 +1,26 @@ +/* getdev.c - getdev */ + +#include +#include + +/*------------------------------------------------------------------------ + * getdev - Convert a device name to a device ID + *------------------------------------------------------------------------ + */ +did32 getdev( + char *devname /* Name of the device */ + ) +{ + intmask mask; /* Saved interrupt mask */ + did32 id; /* Value to return to caller */ + + mask = disable(); + for (id = 0; id < NDEVS; id++) { + if (strncmp(devname, devtab[id].dvname, DEVNAMLEN)) { + restore(mask); + return id; + } + } + restore(mask); + return (did32) SYSERR; +} diff --git a/system/getitem.c b/system/getitem.c new file mode 100644 index 0000000..801f505 --- /dev/null +++ b/system/getitem.c @@ -0,0 +1,58 @@ +/* getitem.c - getfirst, getlast, getitem */ + +#include + +/*------------------------------------------------------------------------ + * getfirst - Remove a process from the front of a queue + *------------------------------------------------------------------------ + */ +pid32 getfirst( + qid16 q /* ID of queue from which to */ + ) /* Remove a process (assumed */ + /* valid with no check) */ +{ + pid32 head; + + if (isempty(q)) { + return EMPTY; + } + + head = queuehead(q); + return getitem(queuetab[head].qnext); +} + +/*------------------------------------------------------------------------ + * getlast - Remove a process from end of queue + *------------------------------------------------------------------------ + */ +pid32 getlast( + qid16 q /* ID of queue from which to */ + ) /* Remove a process (assumed */ + /* valid with no check) */ +{ + pid32 tail; + + if (isempty(q)) { + return EMPTY; + } + + tail = queuetail(q); + return getitem(queuetab[tail].qprev); +} + +/*------------------------------------------------------------------------ + * getitem - Remove a process from an arbitrary point in a queue + *------------------------------------------------------------------------ + */ +pid32 getitem( + pid32 pid /* ID of process to remove */ + ) +{ + pid32 prev, next; + + next = queuetab[pid].qnext; /* Following node in list */ + prev = queuetab[pid].qprev; /* Previous node in list */ + queuetab[prev].qnext = next; + queuetab[next].qprev = prev; + return pid; +} diff --git a/system/getmem.c b/system/getmem.c new file mode 100644 index 0000000..dd0d593 --- /dev/null +++ b/system/getmem.c @@ -0,0 +1,50 @@ +/* getmem.c - getmem */ + +#include + +/*------------------------------------------------------------------------ + * getmem - Allocate heap storage, returning lowest word address + *------------------------------------------------------------------------ + */ +char *getmem( + uint32 nbytes /* Size of memory requested */ + ) +{ + intmask mask; /* Saved interrupt mask */ + struct memblk *prev, *curr, *leftover; + + mask = disable(); + if (nbytes == 0) { + restore(mask); + return (char *)SYSERR; + } + + nbytes = (uint32) roundmb(nbytes); /* Use memblk multiples */ + + prev = &memlist; + curr = memlist.mnext; + while (curr != NULL) { /* Search free list */ + + if (curr->mlength == nbytes) { /* Block is exact match */ + prev->mnext = curr->mnext; + memlist.mlength -= nbytes; + restore(mask); + return (char *)(curr); + + } else if (curr->mlength > nbytes) { /* Split big block */ + leftover = (struct memblk *)((uint32) curr + + nbytes); + prev->mnext = leftover; + leftover->mnext = curr->mnext; + leftover->mlength = curr->mlength - nbytes; + memlist.mlength -= nbytes; + restore(mask); + return (char *)(curr); + } else { /* Move to next block */ + prev = curr; + curr = curr->mnext; + } + } + restore(mask); + return (char *)SYSERR; +} diff --git a/system/getpid.c b/system/getpid.c new file mode 100644 index 0000000..77a5ba9 --- /dev/null +++ b/system/getpid.c @@ -0,0 +1,12 @@ +/* getpid.c - getpid */ + +#include + +/*------------------------------------------------------------------------ + * getpid - Return the ID of the currently executing process + *------------------------------------------------------------------------ + */ +pid32 getpid(void) +{ + return (currpid); +} diff --git a/system/getprio.c b/system/getprio.c new file mode 100644 index 0000000..43f86af --- /dev/null +++ b/system/getprio.c @@ -0,0 +1,24 @@ +/* getprio.c - getprio */ + +#include + +/*------------------------------------------------------------------------ + * getprio - Return the scheduling priority of a process + *------------------------------------------------------------------------ + */ +syscall getprio( + pid32 pid /* Process ID */ + ) +{ + intmask mask; /* Saved interrupt mask */ + uint32 prio; /* Priority to return */ + + mask = disable(); + if (isbadpid(pid)) { + restore(mask); + return SYSERR; + } + prio = proctab[pid].prprio; + restore(mask); + return prio; +} diff --git a/system/getstk.c b/system/getstk.c new file mode 100644 index 0000000..860416e --- /dev/null +++ b/system/getstk.c @@ -0,0 +1,52 @@ +/* getstk.c - getstk */ + +#include + +/*------------------------------------------------------------------------ + * getstk - Allocate stack memory, returning highest word address + *------------------------------------------------------------------------ + */ +char *getstk( + uint32 nbytes /* Size of memory requested */ + ) +{ + intmask mask; /* Saved interrupt mask */ + struct memblk *prev, *curr; /* Walk through memory list */ + struct memblk *fits, *fitsprev; /* Record block that fits */ + + mask = disable(); + if (nbytes == 0) { + restore(mask); + return (char *)SYSERR; + } + + nbytes = (uint32) roundmb(nbytes); /* Use mblock multiples */ + + prev = &memlist; + curr = memlist.mnext; + fits = NULL; + fitsprev = NULL; /* Just to avoid a compiler warning */ + + while (curr != NULL) { /* Scan entire list */ + if (curr->mlength >= nbytes) { /* Record block address */ + fits = curr; /* when request fits */ + fitsprev = prev; + } + prev = curr; + curr = curr->mnext; + } + + if (fits == NULL) { /* No block was found */ + restore(mask); + return (char *)SYSERR; + } + if (nbytes == fits->mlength) { /* Block is exact match */ + fitsprev->mnext = fits->mnext; + } else { /* Remove top section */ + fits->mlength -= nbytes; + fits = (struct memblk *)((uint32)fits + fits->mlength); + } + memlist.mlength -= nbytes; + restore(mask); + return (char *)((uint32) fits + nbytes - sizeof(uint32)); +} diff --git a/system/gettime.c b/system/gettime.c new file mode 100644 index 0000000..34c3c0c --- /dev/null +++ b/system/gettime.c @@ -0,0 +1,39 @@ +/* gettime.c - gettime */ + +#include + +static uint date_time = 0; + +uint get_datetime(void) +{ + return (date_time + clktime); +} + +uint set_datetime(uint dt) +{ + date_time = dt - clktime; + return (date_time + clktime); +} +/*------------------------------------------------------------------------ + * gettime - Get xinu time in seconds past Jan 1, 1970 + *------------------------------------------------------------------------ + */ +status gettime( + uint32 *timvar /* Location to store the result */ + ) +{ + uint32 now; /* Current time (UCT) */ + int32 retval; /* Return value from call */ + + /* Get current time in UCT representation (GMT) */ + + //retval = getutime(&now); + //if (retval == SYSERR) { + // return SYSERR; + //} + + /* Adjust to xinu time and store result */ + + *timvar = get_datetime(); + return OK; +} diff --git a/system/init.c b/system/init.c new file mode 100644 index 0000000..535bdd3 --- /dev/null +++ b/system/init.c @@ -0,0 +1,26 @@ +/* init.c - init */ + +#include + +/*------------------------------------------------------------------------ + * init - Initialize a device and its driver + *------------------------------------------------------------------------ + */ +syscall init( + did32 descrp /* Descriptor for device */ + ) +{ + intmask mask; /* Saved interrupt mask */ + struct dentry *devptr; /* Entry in device switch table */ + int32 retval; /* Value to return to caller */ + + mask = disable(); + if (isbaddev(descrp)) { + restore(mask); + return SYSERR; + } + devptr = (struct dentry *) &devtab[descrp]; + retval = (*devptr->dvinit) (devptr); + restore(mask); + return retval; +} diff --git a/system/initialize.c b/system/initialize.c new file mode 100644 index 0000000..f8bff29 --- /dev/null +++ b/system/initialize.c @@ -0,0 +1,201 @@ +/* initialize.c - nulluser, sysinit, sizmem */ + +/* Handle system initialization and become the null process */ + +#include +#include +#include +extern void start(void); /* Start of Xinu code */ +extern void *_end; /* End of Xinu code */ + +/* Function prototypes */ + +extern void main(void); /* Main is the first process created */ +extern void xdone(void); /* System "shutdown" procedure */ +static void sysinit(); /* Internal system initialization */ +extern void meminit(void); /* Initializes the free memory list */ + +/* Declarations of major kernel variables */ + +struct procent proctab[NPROC]; /* Process table */ +struct sentry semtab[NSEM]; /* Semaphore table */ +struct memblk memlist; /* List of free memory blocks */ + +/* Active system status */ + +int prcount; /* Total number of live processes */ +pid32 currpid; /* ID of currently executing process */ +struct platform platform; +/*------------------------------------------------------------------------ + * nulluser - initialize the system and become the null process + * + * Note: execution begins here after the C run-time environment has been + * established. Interrupts are initially DISABLED, and must eventually + * be enabled explicitly. The code turns itself into the null process + * after initialization. Because it must always remain ready to execute, + * the null process cannot execute code that might cause it to be + * suspended, wait for a semaphore, put to sleep, or exit. In + * particular, the code must not perform I/O except for polled versions + * such as kprintf. + *------------------------------------------------------------------------ + */ + +void nulluser() +{ + struct memblk *memptr; /* Ptr to memory block */ + uint32 free_mem; /* Total amount of free memory */ + volatile uint32 *wspr = (volatile uint32 *) 0x44E35048; + volatile uint32 *wwps = (volatile uint32 *) 0x44E35034; + + /* Initialize the system */ + sysinit(); + + kprintf("\n\r%s\n\n\r", VERSION); + + kprintf("Disable AM335x watchdog timer 1: "); + *wspr = 0x0000AAAA; + while (*wwps&0x00000010); // Delay while the first write completes + *wspr = 0x00005555; + while (*wwps&0x00000010); // Delay while the second write completes + kprintf("Complete\n\r"); + + + /* Output Xinu memory layout */ + free_mem = 0; + for (memptr = memlist.mnext; memptr != NULL; + memptr = memptr->mnext) { + free_mem += memptr->mlength; + } + kprintf("%10d bytes of free memory. Free list:\n", free_mem); + for (memptr=memlist.mnext; memptr!=NULL;memptr = memptr->mnext) { + kprintf(" [0x%08X to 0x%08X]\r\n", + (uint32)memptr, ((uint32)memptr) + memptr->mlength - 1); + } + + kprintf("%10d bytes of Xinu code.\n", + (uint32)&etext - (uint32)&text); + kprintf(" [0x%08X to 0x%08X]\n", + (uint32)&text, (uint32)&etext - 1); + kprintf("%10d bytes of data.\n", + (uint32)&ebss - (uint32)&data); + kprintf(" [0x%08X to 0x%08X]\n\n", + (uint32)&data, (uint32)&ebss - 1); + + /* Enable interrupts */ + + enable(); + #ifdef MMU + /* Initialize MMU(Paging) */ + initializeMMU(); + #endif /*MMU*/ + + /* Create a process to execute function main() */ + + resume ( + create((void *)main, INITSTK, INITPRIO, "Main process", 0, + NULL)); + + /* Become the Null process (i.e., guarantee that the CPU has */ + /* something to run when no other process is ready to execute) */ + + while (TRUE) { + ; /* Do nothing */ + } + +} + +/*------------------------------------------------------------------------ + * + * sysinit - intialize all Xinu data structures and devices + * + *------------------------------------------------------------------------ + */ +static void sysinit() +{ + int32 i; + struct procent *prptr; /* Ptr to process table entry */ + struct sentry *semptr; /* Prr to semaphore table entry */ + + /* Platform Specific Initialization */ + + platinit(); + + /* Initialize the interrupt vectors */ + + //initevec(); + + /* Initialize free memory list */ + + meminit(); + + /* Initialize system variables */ + + /* Count the Null process as the first process in the system */ + + prcount = 1; + + /* Scheduling is not currently blocked */ + + Defer.ndefers = 0; + + /* Initialize process table entries free */ + + for (i = 0; i < NPROC; i++) { + prptr = &proctab[i]; + prptr->prstate = PR_FREE; + prptr->prname[0] = NULLCH; + prptr->prstkbase = NULL; + prptr->prprio = 0; + } + + /* Initialize the Null process entry */ + + prptr = &proctab[NULLPROC]; + prptr->prstate = PR_CURR; + prptr->prprio = 0; + strncpy(prptr->prname, "prnull", 7); + prptr->prstkbase = getstk(NULLSTK); + prptr->prstklen = NULLSTK; + prptr->prstkptr = 0; + currpid = NULLPROC; + + /* Initialize semaphores */ + + for (i = 0; i < NSEM; i++) { + semptr = &semtab[i]; + semptr->sstate = S_FREE; + semptr->scount = 0; + semptr->squeue = newqueue(); + } + + /* Initialize buffer pools */ + + bufinit(); + + /* Create a ready list for processes */ + + readylist = newqueue(); + + /* Initialize the real time clock */ + + clkinit(); + + for (i = 0; i < NDEVS; i++) { + init(i); + } + return; +} + +int32 stop(char *s) +{ + kprintf("%s\n", s); + kprintf("looping... press reset\n"); + while(1) + /* Empty */; +} + +int32 delay(int n) +{ + DELAY(n); + return OK; +} diff --git a/system/insert.c b/system/insert.c new file mode 100644 index 0000000..e311e82 --- /dev/null +++ b/system/insert.c @@ -0,0 +1,36 @@ +/* insert.c - insert */ + +#include + +/*------------------------------------------------------------------------ + * insert - Insert a process into a queue in descending key order + *------------------------------------------------------------------------ + */ +status insert( + pid32 pid, /* ID of process to insert */ + qid16 q, /* ID of queue to use */ + int32 key /* Key for the inserted process */ + ) +{ + int16 curr; /* Runs through items in a queue*/ + int16 prev; /* Holds previous node index */ + + if (isbadqid(q) || isbadpid(pid)) { + return SYSERR; + } + + curr = firstid(q); + while (queuetab[curr].qkey >= key) { + curr = queuetab[curr].qnext; + } + + /* Insert process between curr node and previous node */ + + prev = queuetab[curr].qprev; /* Get index of previous node */ + queuetab[pid].qnext = curr; + queuetab[pid].qprev = prev; + queuetab[pid].qkey = key; + queuetab[prev].qnext = pid; + queuetab[curr].qprev = pid; + return OK; +} diff --git a/system/insertd.c b/system/insertd.c new file mode 100644 index 0000000..8f5e700 --- /dev/null +++ b/system/insertd.c @@ -0,0 +1,42 @@ +/* insertd.c - insertd */ + +#include + +/*------------------------------------------------------------------------ + * insertd - Insert a process in delta list using delay as the key + *------------------------------------------------------------------------ + */ +status insertd( /* Assumes interrupts disabled */ + pid32 pid, /* ID of process to insert */ + qid16 q, /* ID of queue to use */ + int32 key /* Delay from "now" (in ms.) */ + ) +{ + int32 next; /* Runs through the delta list */ + int32 prev; /* Follows next through the list*/ + + if (isbadqid(q) || isbadpid(pid)) { + return SYSERR; + } + + prev = queuehead(q); + next = queuetab[queuehead(q)].qnext; + while ((next != queuetail(q)) && (queuetab[next].qkey <= key)) { + key -= queuetab[next].qkey; + prev = next; + next = queuetab[next].qnext; + } + + /* Insert new node between prev and next nodes */ + + queuetab[pid].qnext = next; + queuetab[pid].qprev = prev; + queuetab[pid].qkey = key; + queuetab[prev].qnext = pid; + queuetab[next].qprev = pid; + if (next != queuetail(q)) { + queuetab[next].qkey -= key; + } + + return OK; +} diff --git a/system/intr.S b/system/intr.S new file mode 100644 index 0000000..8f0b152 --- /dev/null +++ b/system/intr.S @@ -0,0 +1,118 @@ +/* intr.S - enable, disable, restore, halt, pause, irq_except (ARM) */ + +#include + + .text + .globl disable + .globl restore + .globl enable + .globl pause + .globl halt + .globl irq_except + .globl irq_dispatch + .globl initevec + .globl expjmpinstr + +/*------------------------------------------------------------------------ + * disable - Disable interrupts and return the previous state + *------------------------------------------------------------------------ + */ +disable: + mrs r0, cpsr /* Copy the CPSR into r0 */ + cpsid i /* Disable interrupts */ + mov pc, lr /* Return the CPSR */ + +/*------------------------------------------------------------------------ + * restore - Restore interrupts to value given by mask argument + *------------------------------------------------------------------------ + */ +restore: + push {r1, r2} /* Save r1, r2 on stack */ + mrs r1, cpsr /* Copy CPSR into r1 */ + ldr r2, =0x01F00220 + and r1, r1, r2 /* Extract flags and other important */ + bic r0, r0, r2 /* bits from the mask */ + orr r1, r1, r0 + msr cpsr_cfsx, r1 /* Restore the CPSR */ + pop {r1, r2} /* Restore r1, r2 */ + mov pc, lr /* Return to caller */ + +/*------------------------------------------------------------------------ + * enable - Enable interrupts + *------------------------------------------------------------------------ + */ +enable: + cpsie i /* Enable interrupts */ + mov pc, lr /* Return */ + +/*------------------------------------------------------------------------ + * pause or halt - Place the processor in a hard loop + *------------------------------------------------------------------------ + */ +halt: +pause: + cpsid i /* Disable interrupts */ +dloop: b dloop /* Dead loop */ + +/*------------------------------------------------------------------------ + * irq_except - Dispatch an IRQ exception to higher level IRQ dispatcher + *------------------------------------------------------------------------ + */ +irq_except: + sub lr, lr, #4 /* Correct the return address */ + srsdb sp!, #19 /* Save return state on the supervisor */ + /* mode stack */ + cps #19 /* Change to supervisor mode */ + push {r0-r12, lr} /* Save all registers */ + bl irq_dispatch /* Call IRQ dispatch */ + pop {r0-r12, lr} /* Restore all registers */ + rfeia sp! /* Return from the exception using info */ + /* stored on the stack */ + +/*------------------------------------------------------------------------ + * defexp_handler - Default Exception handler + *------------------------------------------------------------------------ + */ +defexp_handler: + ldr r0, =expmsg1 + mov r1, lr + bl kprintf + ldr r0, =expmsg2 + bl panic + +/*------------------------------------------------------------------------ + * initevec - Initialize the exception vector + *------------------------------------------------------------------------ + */ +initevec: + mrc p15, 0, r0, c1, c0, 0 /* Read the c1-control register */ + bic r0, r0, #ARMV7A_C1CTL_V/* V bit = 0, normal exp. base */ + mcr p15, 0, r0, c1, c0, 0 /* Write the c1-control register */ + ldr r0, =ARMV7A_EV_START /* Exception base address */ + mcr p15, 0, r0, c12, c0, 0/* Store excp. base addr. in c12 */ + ldr r0, =ARMV7A_EV_START /* Start address of exp. vector */ + ldr r1, =ARMV7A_EV_END /* End address of exp. vector */ + ldr r2, =expjmpinstr /* Copy the exp jump instr */ + ldr r2, [r2] /* into register r2 */ +expvec: str r2, [r0] /* Store the jump instruction */ + add r0, r0, #4 /* in the exception vector */ + cmp r0, r1 + bne expvec + ldr r0, =ARMV7A_EH_START /* Install the default exception */ + ldr r1, =ARMV7A_EH_END /* handler for all exceptions */ + ldr r2, =defexp_handler +exphnd: str r2, [r0] + add r0, r0, #4 + cmp r0, r1 + bne exphnd + ldr r0, =ARMV7A_IRQH_ADDR /* Install the IRQ handler to */ + ldr r1, =irq_except /* override the default */ + str r1, [r0] /* exception handler */ + mov pc, lr + +/*------------------------------------------------------------------------ + * expjmpinstr - A PC relative jump instruction, copied into exp. vector + *------------------------------------------------------------------------ + */ +expjmpinstr: + ldr pc, [pc, #24] diff --git a/system/ioerr.c b/system/ioerr.c new file mode 100644 index 0000000..4bbfbef --- /dev/null +++ b/system/ioerr.c @@ -0,0 +1,12 @@ +/* ioerr.c - ioerr */ + +#include + +/*------------------------------------------------------------------------ + * ioerr - Return an error status (used for "error" entries in devtab) + *------------------------------------------------------------------------ + */ +devcall ioerr(void) +{ + return SYSERR; +} diff --git a/system/ionull.c b/system/ionull.c new file mode 100644 index 0000000..ea67864 --- /dev/null +++ b/system/ionull.c @@ -0,0 +1,12 @@ +/* ionull.c - ionull */ + +#include + +/*------------------------------------------------------------------------ + * ionull - Do nothing (used for "don't care" entries in devtab) + *------------------------------------------------------------------------ + */ +devcall ionull(void) +{ + return OK; +} diff --git a/system/irq_handler.S b/system/irq_handler.S new file mode 100644 index 0000000..547fdd2 --- /dev/null +++ b/system/irq_handler.S @@ -0,0 +1,77 @@ +/** + * @file irq_handler.S + */ +/* Embedded Xinu, Copyright (C) 2013. All rights reserved. */ + +#include /* Needed for ARM_MODE_SYS definition. */ + +.globl irq_handler + +/** + * Entry point for Xinu's interrupt handler (ARM version). Note: we don't + * actually use the IRQ mode provided by the ARM; instead we switch the + * processor to SYS mode and use the SYS mode stack instead. This makes the ARM + * more similar to other CPUs and removes special cases in the context switch + * code. However, a caveat with this method is that the IRQ handler will use + * the stack of the currently running thread (the one that was interrupted). + * This requires that the stack size of any thread that executes with interrupts + * enabled be set to at least the stack space needed by the thread itself plus + * the maximum stack space needed by any IRQ handler. + */ +irq_handler: + .func irq_handler + + /* Correct LR_irq; this is a quirk of how the ARM processor calls the + * IRQ handler. */ + sub lr, lr, #4 + + /* [Store Return State Decrement Before] */ + /* Store the return state on the SYS mode stack. This includes + * SPSR_irq, which is the CPSR from SYS mode before we were interrupted, + * and LR_irq, which is the address to which we must return to continue + * execution of the interrupted thread. */ + srsdb #ARMV7A_CPSR_SYS! + + /* [Change Program State Interrupt Disable] */ + /* Change to SYS mode, with IRQs and FIQs still disabled. */ + cpsid if, #ARMV7A_CPSR_SYS + + /* Save on the SYS mode stack any registers that may be clobbered, + * namely the SYS mode LR and all other caller-save general purpose + * registers. Also save r4 so we can use it to store the amount we + * decremented the stack pointer by to align it to an 8-byte boundary + * (see comment below). */ + push {r0-r4, r12, lr} + + /* According to the document "Procedure Call Standard for the ARM + * Architecture", the stack pointer is 4-byte aligned at all times, but + * it must be 8-byte aligned when calling an externally visible + * function. This is important because this code is reached from an IRQ + * and therefore the stack currently may only be 4-byte aligned. If + * this is the case, the stack must be padded to an 8-byte boundary + * before calling dispatch(). */ + and r4, sp, #4 + sub sp, sp, r4 + + /* Execute a data memory barrier, as per the BCM2835 documentation. */ + bl dmb + + /* Call the C interrupt dispatching code. */ + bl dispatch + + /* Execute a data memory barrier, as per the BCM2835 documentation. */ + bl dmb + + /* Restore the original stack alignment (see note about 8-byte alignment + * above). */ + add sp, sp, r4 + + /* Restore the above-mentioned registers from the SYS mode stack. */ + pop {r0-r4, r12, lr} + + /* [Return From Exception Increment After] */ + /* Load the original SYS-mode CPSR and PC that were saved on the SYS + * mode stack. */ + rfeia sp! + .endfunc + diff --git a/system/kill.c b/system/kill.c new file mode 100644 index 0000000..fbcab99 --- /dev/null +++ b/system/kill.c @@ -0,0 +1,59 @@ +/* kill.c - kill */ + +#include + +/*------------------------------------------------------------------------ + * kill - Kill a process and remove it from the system + *------------------------------------------------------------------------ + */ +syscall kill( + pid32 pid /* ID of process to kill */ + ) +{ + intmask mask; /* Saved interrupt mask */ + struct procent *prptr; /* Ptr to process' table entry */ + int32 i; /* Index into descriptors */ + + mask = disable(); + if (isbadpid(pid) || (pid == NULLPROC) + || ((prptr = &proctab[pid])->prstate) == PR_FREE) { + restore(mask); + return SYSERR; + } + + if (--prcount <= 1) { /* Last user process completes */ + xdone(); + } + + send(prptr->prparent, pid); + for (i=0; i<3; i++) { + close(prptr->prdesc[i]); + } + freestk(prptr->prstkbase, prptr->prstklen); + + switch (prptr->prstate) { + case PR_CURR: + prptr->prstate = PR_FREE; /* Suicide */ + resched(); + + case PR_SLEEP: + case PR_RECTIM: + unsleep(pid); + prptr->prstate = PR_FREE; + break; + + case PR_WAIT: + semtab[prptr->prsem].scount++; + /* Fall through */ + + case PR_READY: + getitem(pid); /* Remove from queue */ + /* Fall through */ + + default: + prptr->prstate = PR_FREE; + } + + restore(mask); + return OK; +} diff --git a/system/main.c b/system/main.c new file mode 100644 index 0000000..b7d18d7 --- /dev/null +++ b/system/main.c @@ -0,0 +1,35 @@ +/* main.c - main */ + +#include +#include +int32 cpudelay; +volatile uint32 gcounter = 400000000; +process counterproc() { + + while(gcounter > 0) { + gcounter--; + } + return OK; +} + +process main(void) +{ + char bbb_ipaddr[] = "192.168.1.101"; + char bbb_router[] = "192.168.1.255"; + + /* Start the network */ + //netstart(bbb_ipaddr,bbb_router); + kprintf("\n...creating a shell\n"); + recvclr(); + resume(create(shell, 8192, 50, "shell", 1, SERIAL0)); + + /* Wait for shell to exit and recreate it */ + + while (TRUE) { + receive(); + sleepms(200); + kprintf("\n\nMain process recreating shell\n\n"); + resume(create(shell, 4096, 20, "shell", 1, SERIAL0)); + } + return OK; +} diff --git a/system/mark.c b/system/mark.c new file mode 100644 index 0000000..f20a304 --- /dev/null +++ b/system/mark.c @@ -0,0 +1,47 @@ +/* mark.c - markinit, mark */ + +#include + +int32 *marks[MAXMARK]; /* Pointers to marked locations */ +int32 nmarks; /* Number of marked locations */ +sid32 mkmutex; /* Mutual exclusion semaphore */ + +/*------------------------------------------------------------------------ + * markinit - Called once at system startup + *------------------------------------------------------------------------ + */ +void markinit(void) +{ + nmarks = 0; + mkmutex = semcreate(1); +} + + +/*------------------------------------------------------------------------ + * mark - Mark a specified memory location + *------------------------------------------------------------------------ + */ +status mark( + int32 *loc /* Location to mark */ + ) +{ + + /* If location is already marked, do nothing */ + + if ( (*loc>=0) && (*loc= MAXMARK) { + return SYSERR; + } + + /* Obtain exclusive access and mark the specified location */ + + wait(mkmutex); + marks[ (*loc) = nmarks++ ] = loc; + signal(mkmutex); + return OK; +} diff --git a/system/meminit.c b/system/meminit.c new file mode 100644 index 0000000..c262e57 --- /dev/null +++ b/system/meminit.c @@ -0,0 +1,28 @@ +/* meminit.c - meminit */ + +#include + +void *minheap; /* Start address of heap */ +void *maxheap; /* End address of heap */ + +/*------------------------------------------------------------------------ + * meminit - Initialize the free memory list for BeagleBone Black + *------------------------------------------------------------------------ + */ +void meminit(void) +{ + struct memblk *memptr; /* Memory block pointer */ + + /* Initialize the minheap and maxheap variables */ + + minheap = (void *)&end; + maxheap = (void *)MAXADDR; + + /* Initialize the memory list as one big block */ + + memlist.mnext = (struct memblk *)minheap; + memptr = memlist.mnext; + + memptr->mnext = (struct memblk *)NULL; + memptr->mlength = (uint32)maxheap - (uint32)minheap; +} diff --git a/system/memory_barrier.S b/system/memory_barrier.S new file mode 100644 index 0000000..646f318 --- /dev/null +++ b/system/memory_barrier.S @@ -0,0 +1,34 @@ +/** + * @file memory_barrier.S + */ +/* Embedded Xinu, Copyright (C) 2013. All rights reserved. */ + +.globl dmb + +/** + * @fn void dmb(void) + * + * Executes a data memory barrier operation using the c7 (Cache Operations) + * register of system control coprocessor CP15. + * + * All explicit memory accesses occurring in program order before this operation + * will be globally observed before any memory accesses occurring in program + * order after this operation. This includes both read and write accesses. + * + * This differs from a "data synchronization barrier" in that a data + * synchronization barrier will ensure that all previous explicit memory + * accesses occurring in program order have fully completed before continuing + * and that no subsequent instructions will be executed until that point, even + * if they do not access memory. This is unnecessary for what we need this for. + * + * On the BCM2835 (Raspberry Pi), this is needed before and after accessing + * peripherals, as documented on page 7 of the "BCM2835 ARM Peripherals" + * document. As documented, it is only needed when switching between + * _different_ peripherals. + */ +dmb: + .func dmb + mov r12, #0 + mcr p15, 0, r12, c7, c10, 5 + mov pc, lr + .endfunc diff --git a/system/mkbufpool.c b/system/mkbufpool.c new file mode 100644 index 0000000..7f49c06 --- /dev/null +++ b/system/mkbufpool.c @@ -0,0 +1,54 @@ +/* mkbufpool.c - mkbufpool */ + +#include + +/*------------------------------------------------------------------------ + * mkbufpool - Allocate memory for a buffer pool and link the buffers + *------------------------------------------------------------------------ + */ +bpid32 mkbufpool( + int32 bufsiz, /* Size of a buffer in the pool */ + int32 numbufs /* Number of buffers in the pool*/ + ) +{ + intmask mask; /* Saved interrupt mask */ + bpid32 poolid; /* ID of pool that is created */ + struct bpentry *bpptr; /* Pointer to entry in buftab */ + char *buf; /* Pointer to memory for buffer */ + + mask = disable(); + if (bufsizBP_MAXB + || numbufs<1 || numbufs>BP_MAXN + || nbpools >= NBPOOLS) { + restore(mask); + return (bpid32)SYSERR; + } + /* Round request to a multiple of 4 bytes */ + + bufsiz = ( (bufsiz + 3) & (~3) ); + + buf = (char *)getmem( numbufs * (bufsiz+sizeof(bpid32)) ); + if ((int32)buf == SYSERR) { + restore(mask); + return (bpid32)SYSERR; + } + poolid = nbpools++; + bpptr = &buftab[poolid]; + bpptr->bpnext = (struct bpentry *)buf; + bpptr->bpsize = bufsiz; + if ( (bpptr->bpsem = semcreate(numbufs)) == SYSERR) { + nbpools--; + restore(mask); + return (bpid32)SYSERR; + } + bufsiz+=sizeof(bpid32); + for (numbufs-- ; numbufs>0 ; numbufs-- ) { + bpptr = (struct bpentry *)buf; + buf += bufsiz; + bpptr->bpnext = (struct bpentry *)buf; + } + bpptr = (struct bpentry *)buf; + bpptr->bpnext = (struct bpentry *)NULL; + restore(mask); + return poolid; +} diff --git a/system/mmu.c b/system/mmu.c new file mode 100644 index 0000000..cad6d03 --- /dev/null +++ b/system/mmu.c @@ -0,0 +1,64 @@ +#include +#include + +#define CACHE_DISABLED 0x12 +#define SDRAM_START 0x80000000 +#define SDRAM_END 0x8fffffff +#define CACHE_WRITEBACK 0x1e + +uint32 __attribute__((aligned(16384))) page_table[NPROC][NUM_PAGE_TABLE_ENTRIES]; + +void initializeMMU(void) { + + int i,j,k=0; + for (i = 0; i < 264; i++){ // 258 + for (j = 0; j < NPROC; j++){ + page_table[j][i] = i << 20 | (3 << 10) | CACHE_DISABLED; + } + } + + for (j = 264; j <264+(2064-264)/NPROC; j++){ + for (i=264,k = 2; k < NPROC;i++, k++){ + page_table[k][j] = i << 20 | (3 << 10) | CACHE_DISABLED; + } + } + for (i = 2064; i < NUM_PAGE_TABLE_ENTRIES; i++){ + for (j = 0; j < NPROC; j++){ + page_table[j][i] = i << 20 | (3 << 10) | CACHE_DISABLED; + } + } + setPageTable(); + FlushTLB(); + setAccessControl(); + enableMMU(); +} + + +void setPageTable(){ + uint32 pagetable =(uint32) page_table[currpid]; + /* Copy the page table address to cp15 */ + asm volatile("mcr p15, 0, %0, c2, c0, 0" : : "r" (pagetable) : "memory"); +} + +void setAccessControl(){ +/* Set the access control to all-supervisor */ + asm volatile("mcr p15, 0, %0, c3, c0, 0" : : "r" (~0)); +} + +void FlushTLB(){ +/* Set the access control to all-supervisor */ + asm volatile("mcr p15, 0, %0, c8, c7, 0" : : "r" (0)); +} + +void enableMMU(){ + uint32 reg; +/* Enable the MMU */ + asm("mrc p15, 0, %0, c1, c0, 0" : "=r" (reg) : : "cc"); + reg|=0x1; + asm volatile("mcr p15, 0, %0, c1, c0, 0" : : "r" (reg) : "cc"); +} + +void pageFaultHandler(){ + kprintf("Segmentation Fault\n"); +} + diff --git a/system/newqueue.c b/system/newqueue.c new file mode 100644 index 0000000..7e0356f --- /dev/null +++ b/system/newqueue.c @@ -0,0 +1,30 @@ +/* newqueue.c - newqueue */ + +#include + +/*------------------------------------------------------------------------ + * newqueue - Allocate and initialize a queue in the global queue table + *------------------------------------------------------------------------ + */ +qid16 newqueue(void) +{ + static qid16 nextqid=NPROC; /* Next list in queuetab to use */ + qid16 q; /* ID of allocated queue */ + + q = nextqid; + if (q > NQENT) { /* Check for table overflow */ + return SYSERR; + } + + nextqid += 2; /* Increment index for next call*/ + + /* Initialize head and tail nodes to form an empty queue */ + + queuetab[queuehead(q)].qnext = queuetail(q); + queuetab[queuehead(q)].qprev = EMPTY; + queuetab[queuehead(q)].qkey = MAXKEY; + queuetab[queuetail(q)].qnext = EMPTY; + queuetab[queuetail(q)].qprev = queuehead(q); + queuetab[queuetail(q)].qkey = MINKEY; + return q; +} diff --git a/system/open.c b/system/open.c new file mode 100644 index 0000000..c3b3517 --- /dev/null +++ b/system/open.c @@ -0,0 +1,28 @@ +/* open.c - open */ + +#include + +/*------------------------------------------------------------------------ + * open - Open a device (some devices ignore name and mode parameters) + *------------------------------------------------------------------------ + */ +syscall open( + did32 descrp, /* Descriptor for device */ + char *name, /* Name to use, if any */ + char *mode /* Mode for device, if any */ + ) +{ + intmask mask; /* Saved interrupt mask */ + struct dentry *devptr; /* Entry in device switch table */ + int32 retval; /* Value to return to caller */ + + mask = disable(); + if (isbaddev(descrp)) { + restore(mask); + return SYSERR; + } + devptr = (struct dentry *) &devtab[descrp]; + retval = (*devptr->dvopen) (devptr, name, mode); + restore(mask); + return retval; +} diff --git a/system/page_fault.S b/system/page_fault.S new file mode 100644 index 0000000..bb93ef7 --- /dev/null +++ b/system/page_fault.S @@ -0,0 +1,20 @@ +#include +.globl page_fault + +page_fault: + .func page_fault + + sub lr, lr, #4 + srsdb #ARMV7A_CPSR_SYS! + cpsid if, #ARMV7A_CPSR_SYS + push {r0-r4, r12, lr} + and r4, sp, #4 + sub sp, sp, r4 + bl dmb + bl pageFaultHandler + bl dmb + add sp, sp, r4 + pop {r0-r4, r12, lr} + rfeia sp! + .endfunc + diff --git a/system/panic.c b/system/panic.c new file mode 100644 index 0000000..f296fdb --- /dev/null +++ b/system/panic.c @@ -0,0 +1,16 @@ +/* panic.c - panic */ + +#include + +/*------------------------------------------------------------------------ + * panic - Display a message and stop all processing + *------------------------------------------------------------------------ + */ +void panic ( + char *msg /* Message to display */ + ) +{ + disable(); /* Disable interrupts */ + kprintf("\n\n\rpanic: %s\n\n\r", msg); + while(TRUE) {;} /* Busy loop forever */ +} diff --git a/system/pl190.c b/system/pl190.c new file mode 100644 index 0000000..ca0936e --- /dev/null +++ b/system/pl190.c @@ -0,0 +1,85 @@ +/** + * @file pl190.c + * + * Driver for the PrimeCell Vectored Interrupt Controller (VIC) (PL190). + * + * This was written using the official manual from ARM Ltd.: + * + * "PrimeCell Vectored Interrupt Controller (PL190) Technical Reference + * Manual", revision r1p2. + * + * Note: this simple driver currently does not actually use vectored interrupts + * (where the controller provides the address of the interrupt service routine + * in VICVECTADDR so that software doesn't have to check VICIRQSTATUS). Nor + * does it allow setting anything as a FIQ (Fast Interrupt Request) rather than + * a regular IRQ. + */ +/* Embedded Xinu, Copyright (C) 2014. All rights reserved. */ + +#include +#include +#include + +static volatile struct { + uint32_t VICIRQSTATUS; /* +0x000 */ + uint32_t VICFIQSTATUS; /* +0x004 */ + uint32_t VICRAWINTR; /* +0x008 */ + uint32_t VICINTSELECT; /* +0x00C */ + uint32_t VICINTENABLE; /* +0x010 */ + uint32_t VICINTENCLEAR; /* +0x014 */ + uint32_t VICSOFTINT; /* +0x018 */ + uint32_t VICSOFTINTCLEAR; /* +0x01C */ + uint32_t VICPROTECTION; /* +0x020 */ + uint32_t VIC_0x024_reserved[3]; /* +0x024 */ + uint32_t VICVECTADDR; /* +0x030 */ + uint32_t VICDEFVECTADDR; /* +0x034 */ + uint32_t VIC_0x038_reserved[50]; /* +0x038 */ + uint32_t VICVECTADDR_REGS[16]; /* +0x100 */ + uint32_t VIC_0x140_reserved[48]; /* +0x140 */ + uint32_t VICVECTCNTL_REGS[16]; /* +0x200 */ + uint32_t VIC_0x240_reserved[872]; /* +0x240 */ + uint32_t VICPERIPHID_REGS[4]; /* +0xFE0 */ + uint32_t VICPCELLID_REGS[4]; /* +0xFF0 */ +} * const regs = (void*)0x10140000; + +interrupt_handler_t interruptVector[32]; + +/** + * Enable an interrupt request line. + * + * @param irq + * Number of the IRQ to enable, which on this platform must be in the + * range [0, 31]. + */ +void enable_irq(intmask irq) +{ + regs->VICINTENABLE = 1U << irq; +} + +/** + * Disable an interrupt request line. + * + * @param irq + * Number of the IRQ to disable, which on this platform must be in the + * range [0, 31]. + */ +void disable_irq(intmask irq) +{ + regs->VICINTENCLEAR = 1U << irq; +} + +/** + * Call the service routine for each pending IRQ. + */ +void dispatch(void) +{ + uint32_t status = regs->VICIRQSTATUS; + + do + { + uint irq = 31 - __builtin_clz(status); + interruptVector[irq](); + status ^= 1U << irq; + } + while (status); +} diff --git a/system/platinit.c b/system/platinit.c new file mode 100644 index 0000000..4aba587 --- /dev/null +++ b/system/platinit.c @@ -0,0 +1,140 @@ +/* platinit.c - platinit */ + + +#include +#include +#include +/* Definitions of ARM boot tags. */ +enum { + ATAG_NONE = 0x00000000, + ATAG_CORE = 0x54410001, + ATAG_MEM = 0x54410002, + ATAG_VIDEOTEXT = 0x54410003, + ATAG_RAMDISK = 0x54410004, + ATAG_INITRD2 = 0x54410005, + ATAG_SERIAL = 0x54410006, + ATAG_REVISION = 0x54410007, + ATAG_VIDEOLFB = 0x54410008, + ATAG_CMDLINE = 0x54410009, +}; + + +/* Below we only define structures for tags we actually use. */ + +/* ARM boot tag header. */ +struct atag_header { + uint32_t size; /* Size of tag, in words, including the header. */ + uint32_t tag; /* One of the ATAG_* values from above. */ +}; + +/* Description of memory region (ATAG_MEM) */ +struct atag_mem { + uint32_t size; + uint32_t start; +}; + +/* Board serial number (ATAG_SERIAL) */ +struct atag_serialnr { + uint32_t low; + uint32_t high; +}; + +/* Format of ARM boot tag */ +struct atag { + struct atag_header hdr; + union { + struct atag_mem mem; + struct atag_serialnr serialnr; + }; +}; + +/** Physical memory address at which the bootloader placed the ARM boot tags. + * This is set by the code in start.S. Here, initialize it to a dummy value to + * prevent it from being placed in .bss. */ +const struct atag *atags_ptr = (void*)-1; + +/* End of kernel (used for sanity check) */ +extern void *_end; + +/* Extract some information from the ARM boot tag list and place it in the + * 'platform' structure. */ +static void parse_atag_list(void) +{ + const struct atag *atag; + bool parse_again; + ulong maxaddr = 0; + + /* We may parse the atags more than once to try to coalesce memory specified + * as multiple contiguous chunks. */ + do + { + parse_again = FALSE; + for (atag = atags_ptr; + atag->hdr.size > 2 && atag->hdr.tag != ATAG_NONE; + atag = (const struct atag*)((const uint*)atag + atag->hdr.size)) + { + switch (atag->hdr.tag) + { + case ATAG_MEM: + if (maxaddr == atag->mem.start && atag->mem.size != 0) + { + maxaddr += atag->mem.size; + parse_again = TRUE; + } + break; + case ATAG_SERIAL: + platform.serial_low = atag->serialnr.low; + platform.serial_high = atag->serialnr.high; + break; + default: + break; + } + } + } while (parse_again); + + /* Set platform maximum address if calculated value is not insane. */ + if (maxaddr >= (ulong)&_end) + { + platform.maxaddr = (void*)maxaddr; + } +} + +extern void sp804_init(void); + +/*------------------------------------------------------------------------ + * platinit - platform specific initialization for BeagleBone Black + *------------------------------------------------------------------------ + */ +void platinit(void) +{ + + + /*struct uart_csreg *uptr; // address of UART's CSRs + + // Initialize the Interrupt Controller + + initintc(); + + // Pad control for CONSOLE + + am335x_padctl(UART0_PADRX_ADDR, + AM335X_PADCTL_RXTX | UART0_PADRX_MODE); + am335x_padctl(UART0_PADTX_ADDR, + AM335X_PADCTL_TX | UART0_PADTX_MODE); + + // Reset the UART device + + uptr = (struct uart_csreg *)devtab[CONSOLE].dvcsr; + uptr->sysc |= UART_SYSC_SOFTRESET; + while((uptr->syss & UART_SYSS_RESETDONE) == 0); + */ + + strcpy(platform.family, "ARM VersatilePB"); + strcpy(platform.name, "ARM QEMU"); + platform.maxaddr = (void *)0xBFFFFFF; + platform.clkfreq = 1000000; + platform.serial_low = 0; + platform.serial_high = 0; + parse_atag_list(); + sp804_init(); +} diff --git a/system/ptclear.c b/system/ptclear.c new file mode 100644 index 0000000..8ea1384 --- /dev/null +++ b/system/ptclear.c @@ -0,0 +1,50 @@ +/* ptclear.c - _ptclear */ + +#include + +/*------------------------------------------------------------------------ + * _ptclear - Used by ptdelete and ptreset to clear or reset a port + * (internal function assumes interrupts disabled and + * arguments have been checked for validity) + *------------------------------------------------------------------------ + */ +void _ptclear( + struct ptentry *ptptr, /* Table entry to clear */ + uint16 newstate, /* New state for port */ + int32 (*dispose)(int32)/* Disposal function to call */ + ) +{ + struct ptnode *walk; /* Pointer to walk message list */ + + /* Place port in limbo state while waiting processes are freed */ + + ptptr->ptstate = PT_LIMBO; + + ptptr->ptseq++; /* Reset accession number */ + walk = ptptr->pthead; /* First item on msg list */ + + if ( walk != NULL ) { /* If message list nonempty */ + + /* Walk message list and dispose of each message */ + + for( ; walk!=NULL ; walk=walk->ptnext) { + (*dispose)( walk->ptmsg ); + } + + /* Link entire message list into the free list */ + + (ptptr->pttail)->ptnext = ptfree; + ptfree = ptptr->pthead; + } + + if (newstate == PT_ALLOC) { + ptptr->pttail = ptptr->pthead = NULL; + semreset(ptptr->ptssem, ptptr->ptmaxcnt); + semreset(ptptr->ptrsem, 0); + } else { + semdelete(ptptr->ptssem); + semdelete(ptptr->ptrsem); + } + ptptr->ptstate = newstate; + return; +} diff --git a/system/ptcount.c b/system/ptcount.c new file mode 100644 index 0000000..12076a4 --- /dev/null +++ b/system/ptcount.c @@ -0,0 +1,44 @@ +/* ptcount.c - ptcount */ + +#include + +/*------------------------------------------------------------------------ + * ptcount - Return the count of messages currently waiting in a port + * (a non-negative count K means the port contains K + * K messages, including messages from senders that + * are blocked waiting to send a message; a count of + * negative K means a port is empty and K processes + * are blocked waiting to receive a message) + *------------------------------------------------------------------------ + */ +int32 ptcount( + int32 portid /* ID of a port to use */ + ) +{ + intmask mask; /* Saved interrupt mask */ + int32 count; /* Count of messages available */ + int32 sndcnt; /* Count of sender semaphore */ + struct ptentry *ptptr; /* Pointer to port table entry */ + + mask = disable(); + if ( isbadport(portid) || + (ptptr= &porttab[portid])->ptstate != PT_ALLOC ) { + restore(mask); + return SYSERR; + } + + /* Get count of messages available */ + + count = semcount(ptptr->ptrsem); + + /* If messages are waiting, check for blocked senders */ + + if (count >= 0) { + sndcnt = semcount(ptptr->ptssem); + if (sndcnt < 0) { /* -sndcnt senders blocked */ + count += -sndcnt; + } + } + restore(mask); + return count; +} diff --git a/system/ptcreate.c b/system/ptcreate.c new file mode 100644 index 0000000..c020876 --- /dev/null +++ b/system/ptcreate.c @@ -0,0 +1,46 @@ +/* ptcreate.c - ptcreate */ + +#include + +/*------------------------------------------------------------------------ + * ptcreate - Create a port that allows "count" outstanding messages + *------------------------------------------------------------------------ + */ +syscall ptcreate( + int32 count /* Size of port */ + ) +{ + intmask mask; /* Saved interrupt mask */ + int32 i; /* Counts all possible ports */ + int32 ptnum; /* Candidate port number to try */ + struct ptentry *ptptr; /* Pointer to port table entry */ + + mask = disable(); + if (count < 0) { + restore(mask); + return SYSERR; + } + + for (i=0 ; i= NPORTS) { + ptnextid = 0; /* Reset for next iteration */ + } + + /* Check table entry that corresponds to ID ptnum */ + + ptptr= &porttab[ptnum]; + if (ptptr->ptstate == PT_FREE) { + ptptr->ptstate = PT_ALLOC; + ptptr->ptssem = semcreate(count); + ptptr->ptrsem = semcreate(0); + ptptr->pthead = ptptr->pttail = NULL; + ptptr->ptseq++; + ptptr->ptmaxcnt = count; + restore(mask); + return ptnum; + } + } + restore(mask); + return SYSERR; +} diff --git a/system/ptdelete.c b/system/ptdelete.c new file mode 100644 index 0000000..4fc51d2 --- /dev/null +++ b/system/ptdelete.c @@ -0,0 +1,27 @@ +/* ptdelete.c - ptdelete */ + +#include + +/*------------------------------------------------------------------------ + * ptdelete - Delete a port, freeing waiting processes and messages + *------------------------------------------------------------------------ + */ +syscall ptdelete( + int32 portid, /* ID of port to delete */ + int32 (*disp)(int32) /* Function to call to dispose */ + ) /* of waiting messages */ +{ + intmask mask; /* Saved interrupt mask */ + struct ptentry *ptptr; /* Pointer to port table entry */ + + mask = disable(); + if ( isbadport(portid) || + (ptptr= &porttab[portid])->ptstate != PT_ALLOC ) { + restore(mask); + return SYSERR; + } + _ptclear(ptptr, PT_FREE, disp); + ptnextid = portid; + restore(mask); + return OK; +} diff --git a/system/ptinit.c b/system/ptinit.c new file mode 100644 index 0000000..058f02e --- /dev/null +++ b/system/ptinit.c @@ -0,0 +1,45 @@ +/* ptinit.c - ptinit */ + +#include + +struct ptnode *ptfree; /* List of free message nodes */ +struct ptentry porttab[NPORTS]; /* Port table */ +int32 ptnextid; /* Next table entry to try */ + +/*------------------------------------------------------------------------ + * ptinit - Initialize all ports + *------------------------------------------------------------------------ + */ +syscall ptinit( + int32 maxmsgs /* Total messages in all ports */ + ) +{ + int32 i; /* Runs through the port table */ + struct ptnode *next, *curr; /* Used to build a free list */ + + /* Allocate memory for all messages on all ports */ + + ptfree = (struct ptnode *)getmem(maxmsgs*sizeof(struct ptnode)); + if (ptfree == (struct ptnode *)SYSERR) { + panic("pinit - insufficient memory"); + } + + /* Initialize all port table entries to free */ + + for (i=0 ; i 0 ; curr=next ) { + curr->ptnext = ++next; + } + + /* Set the pointer in the final node to NULL */ + + curr->ptnext = NULL; + return OK; +} diff --git a/system/ptrecv.c b/system/ptrecv.c new file mode 100644 index 0000000..bcfc9b2 --- /dev/null +++ b/system/ptrecv.c @@ -0,0 +1,48 @@ +/* ptrecv.c - ptrecv */ + +#include + +/*------------------------------------------------------------------------ + * ptrecv - Receive a message from a port, blocking if port empty + *------------------------------------------------------------------------ + */ +uint32 ptrecv( + int32 portid /* ID of port to use */ + ) +{ + intmask mask; /* Saved interrupt mask */ + struct ptentry *ptptr; /* Pointer to table entry */ + int32 seq; /* Local copy of sequence num. */ + umsg32 msg; /* Message to return */ + struct ptnode *msgnode; /* First node on message list */ + + mask = disable(); + if ( isbadport(portid) || + (ptptr= &porttab[portid])->ptstate != PT_ALLOC ) { + restore(mask); + return (uint32)SYSERR; + } + + /* Wait for message and verify that the port is still allocated */ + + seq = ptptr->ptseq; /* Record orignal sequence */ + if (wait(ptptr->ptrsem) == SYSERR || ptptr->ptstate != PT_ALLOC + || ptptr->ptseq != seq) { + restore(mask); + return (uint32)SYSERR; + } + + /* Dequeue first message that is waiting in the port */ + + msgnode = ptptr->pthead; + msg = msgnode->ptmsg; + if (ptptr->pthead == ptptr->pttail) /* Delete last item */ + ptptr->pthead = ptptr->pttail = NULL; + else + ptptr->pthead = msgnode->ptnext; + msgnode->ptnext = ptfree; /* Return to free list */ + ptfree = msgnode; + signal(ptptr->ptssem); + restore(mask); + return msg; +} diff --git a/system/ptreset.c b/system/ptreset.c new file mode 100644 index 0000000..607a499 --- /dev/null +++ b/system/ptreset.c @@ -0,0 +1,27 @@ +/* ptreset.c - ptreset */ + +#include + +/*------------------------------------------------------------------------ + * ptreset - Reset a port, freeing waiting processes and messages and + leaving the port ready for further use + *------------------------------------------------------------------------ + */ +syscall ptreset( + int32 portid, /* ID of port to reset */ + int32 (*disp)(int32) /* Function to call to dispose */ + ) /* of waiting messages */ +{ + intmask mask; /* Saved interrupt mask */ + struct ptentry *ptptr; /* Pointer to port table entry */ + + mask = disable(); + if ( isbadport(portid) || + (ptptr= &porttab[portid])->ptstate != PT_ALLOC ) { + restore(mask); + return SYSERR; + } + _ptclear(ptptr, PT_ALLOC, disp); + restore(mask); + return OK; +} diff --git a/system/ptsend.c b/system/ptsend.c new file mode 100644 index 0000000..de0ccc0 --- /dev/null +++ b/system/ptsend.c @@ -0,0 +1,59 @@ +/* ptsend.c - ptsend */ + +#include + +/*------------------------------------------------------------------------ + * ptsend - Send a message to a port by adding it to the queue + *------------------------------------------------------------------------ + */ +syscall ptsend( + int32 portid, /* ID of port to use */ + umsg32 msg /* Message to send */ + ) +{ + intmask mask; /* Saved interrupt mask */ + struct ptentry *ptptr; /* Pointer to table entry */ + int32 seq; /* Local copy of sequence num. */ + struct ptnode *msgnode; /* Allocated message node */ + struct ptnode *tailnode; /* Last node in port or NULL */ + + mask = disable(); + if ( isbadport(portid) || + (ptptr= &porttab[portid])->ptstate != PT_ALLOC ) { + restore(mask); + return SYSERR; + } + + /* Wait for space and verify port has not been reset */ + + seq = ptptr->ptseq; /* Record orignal sequence */ + if (wait(ptptr->ptssem) == SYSERR + || ptptr->ptstate != PT_ALLOC + || ptptr->ptseq != seq) { + restore(mask); + return SYSERR; + } + if (ptfree == NULL) { + panic("Port system ran out of message nodes"); + } + + /* Obtain node from free list by unlinking */ + + msgnode = ptfree; /* Point to first free node */ + ptfree = msgnode->ptnext; /* Unlink from the free list */ + msgnode->ptnext = NULL; /* Set fields in the node */ + msgnode->ptmsg = msg; + + /* Link into queue for the specified port */ + + tailnode = ptptr->pttail; + if (tailnode == NULL) { /* Queue for port was empty */ + ptptr->pttail = ptptr->pthead = msgnode; + } else { /* Insert new node at tail */ + tailnode->ptnext = msgnode; + ptptr->pttail = msgnode; + } + signal(ptptr->ptrsem); + restore(mask); + return OK; +} diff --git a/system/putc.c b/system/putc.c new file mode 100644 index 0000000..f94b526 --- /dev/null +++ b/system/putc.c @@ -0,0 +1,27 @@ +/* putc.c - putc */ + +#include + +/*------------------------------------------------------------------------ + * putc - Send one character of data (byte) to a device + *------------------------------------------------------------------------ + */ +syscall putc( + did32 descrp, /* Descriptor for device */ + char ch /* Character to send */ + ) +{ + intmask mask; /* Saved interrupt mask */ + struct dentry *devptr; /* Entry in device switch table */ + int32 retval; /* Value to return to caller */ + + mask = disable(); + if (isbaddev(descrp)) { + restore(mask); + return SYSERR; + } + devptr = (struct dentry *) &devtab[descrp]; + retval = (*devptr->dvputc) (devptr, ch); + restore(mask); + return retval; +} diff --git a/system/queue.c b/system/queue.c new file mode 100644 index 0000000..64beb65 --- /dev/null +++ b/system/queue.c @@ -0,0 +1,52 @@ +/* queue.c - enqueue, dequeue */ + +#include + +struct qentry queuetab[NQENT]; /* Table of process queues */ + +/*------------------------------------------------------------------------ + * enqueue - Insert a process at the tail of a queue + *------------------------------------------------------------------------ + */ +pid32 enqueue( + pid32 pid, /* ID of process to insert */ + qid16 q /* ID of queue to use */ + ) +{ + qid16 tail, prev; /* Tail & previous node indexes */ + + if (isbadqid(q) || isbadpid(pid)) { + return SYSERR; + } + + tail = queuetail(q); + prev = queuetab[tail].qprev; + + queuetab[pid].qnext = tail; /* Insert just before tail node */ + queuetab[pid].qprev = prev; + queuetab[prev].qnext = pid; + queuetab[tail].qprev = pid; + return pid; +} + +/*------------------------------------------------------------------------ + * dequeue - Remove and return the first process on a list + *------------------------------------------------------------------------ + */ +pid32 dequeue( + qid16 q /* ID queue to use */ + ) +{ + pid32 pid; /* ID of process removed */ + + if (isbadqid(q)) { + return SYSERR; + } else if (isempty(q)) { + return EMPTY; + } + + pid = getfirst(q); + queuetab[pid].qprev = EMPTY; + queuetab[pid].qnext = EMPTY; + return pid; +} diff --git a/system/read.c b/system/read.c new file mode 100644 index 0000000..fd3caaf --- /dev/null +++ b/system/read.c @@ -0,0 +1,28 @@ +/* read.c - read */ + +#include + +/*------------------------------------------------------------------------ + * read - Read one or more bytes from a device + *------------------------------------------------------------------------ + */ +syscall read( + did32 descrp, /* Descriptor for device */ + char *buffer, /* Address of buffer */ + uint32 count /* Length of buffer */ + ) +{ + intmask mask; /* Saved interrupt mask */ + struct dentry *devptr; /* Entry in device switch table */ + int32 retval; /* Value to return to caller */ + + mask = disable(); + if (isbaddev(descrp)) { + restore(mask); + return SYSERR; + } + devptr = (struct dentry *) &devtab[descrp]; + retval = (*devptr->dvread) (devptr, buffer, count); + restore(mask); + return retval; +} diff --git a/system/ready.c b/system/ready.c new file mode 100644 index 0000000..b64cbbb --- /dev/null +++ b/system/ready.c @@ -0,0 +1,29 @@ +/* ready.c - ready */ + +#include + +qid16 readylist; /* Index of ready list */ + +/*------------------------------------------------------------------------ + * ready - Make a process eligible for CPU service + *------------------------------------------------------------------------ + */ +status ready( + pid32 pid /* ID of process to make ready */ + ) +{ + register struct procent *prptr; + + if (isbadpid(pid)) { + return SYSERR; + } + + /* Set process state to indicate ready and add to ready list */ + + prptr = &proctab[pid]; + prptr->prstate = PR_READY; + insert(pid, readylist, prptr->prprio); + resched(); + + return OK; +} diff --git a/system/receive.c b/system/receive.c new file mode 100644 index 0000000..8a1795f --- /dev/null +++ b/system/receive.c @@ -0,0 +1,25 @@ +/* receive.c - receive */ + +#include + +/*------------------------------------------------------------------------ + * receive - Wait for a message and return the message to the caller + *------------------------------------------------------------------------ + */ +umsg32 receive(void) +{ + intmask mask; /* Saved interrupt mask */ + struct procent *prptr; /* Ptr to process' table entry */ + umsg32 msg; /* Message to return */ + + mask = disable(); + prptr = &proctab[currpid]; + if (prptr->prhasmsg == FALSE) { + prptr->prstate = PR_RECV; + resched(); /* Block until message arrives */ + } + msg = prptr->prmsg; /* Retrieve message */ + prptr->prhasmsg = FALSE; /* Reset message flag */ + restore(mask); + return msg; +} diff --git a/system/recvclr.c b/system/recvclr.c new file mode 100644 index 0000000..346d51f --- /dev/null +++ b/system/recvclr.c @@ -0,0 +1,25 @@ +/* recvclr.c - recvclr */ + +#include + +/*------------------------------------------------------------------------ + * recvclr - Clear incoming message, and return message if one waiting + *------------------------------------------------------------------------ + */ +umsg32 recvclr(void) +{ + intmask mask; /* Saved interrupt mask */ + struct procent *prptr; /* Ptr to process' table entry */ + umsg32 msg; /* Message to return */ + + mask = disable(); + prptr = &proctab[currpid]; + if (prptr->prhasmsg == TRUE) { + msg = prptr->prmsg; /* Retrieve message */ + prptr->prhasmsg = FALSE;/* Reset message flag */ + } else { + msg = OK; + } + restore(mask); + return msg; +} diff --git a/system/recvtime.c b/system/recvtime.c new file mode 100644 index 0000000..b2cdceb --- /dev/null +++ b/system/recvtime.c @@ -0,0 +1,44 @@ +/* recvtime.c - recvtime */ + +#include + +/*------------------------------------------------------------------------ + * recvtime - Wait specified time to receive a message and return + *------------------------------------------------------------------------ + */ +umsg32 recvtime( + int32 maxwait /* Ticks to wait before timeout */ + ) +{ + intmask mask; /* Saved interrupt mask */ + struct procent *prptr; /* Tbl entry of current process */ + umsg32 msg; /* Message to return */ + + if (maxwait < 0) { + return SYSERR; + } + mask = disable(); + + /* Schedule wakeup and place process in timed-receive state */ + + prptr = &proctab[currpid]; + if (prptr->prhasmsg == FALSE) { /* If message waiting, no delay */ + if (insertd(currpid,sleepq,maxwait) == SYSERR) { + restore(mask); + return SYSERR; + } + prptr->prstate = PR_RECTIM; + resched(); + } + + /* Either message arrived or timer expired */ + + if (prptr->prhasmsg) { + msg = prptr->prmsg; /* Retrieve message */ + prptr->prhasmsg = FALSE;/* Reset message indicator */ + } else { + msg = TIMEOUT; + } + restore(mask); + return msg; +} diff --git a/system/resched.c b/system/resched.c new file mode 100644 index 0000000..34540fa --- /dev/null +++ b/system/resched.c @@ -0,0 +1,85 @@ +/* resched.c - resched, resched_cntl */ + +#include + +struct defer Defer; +int resdefer; +/*------------------------------------------------------------------------ + * resched - Reschedule processor to highest priority eligible process + *------------------------------------------------------------------------ + */ +void resched(void) /* Assumes interrupts are disabled */ +{ + struct procent *ptold; /* Ptr to table entry for old process */ + struct procent *ptnew; /* Ptr to table entry for new process */ + + /* If rescheduling is deferred, record attempt and return */ + + if (Defer.ndefers > 0) { + Defer.attempt = TRUE; + return; + } + + /* Point to process table entry for the current (old) process */ + + ptold = &proctab[currpid]; + + if (ptold->prstate == PR_CURR) { /* Process remains eligible */ + if (ptold->prprio > firstkey(readylist)) { + return; + } + + /* Old process will no longer remain current */ + + ptold->prstate = PR_READY; + insert(currpid, readylist, ptold->prprio); + } + + /* Force context switch to highest priority ready process */ + + currpid = dequeue(readylist); + ptnew = &proctab[currpid]; + ptnew->prstate = PR_CURR; + preempt = QUANTUM; /* Reset time slice for process */ + #ifdef MMU + FlushTLB(); + setPageTable(); + #endif/*MMU*/ + + ctxsw(&ptold->prstkptr, &ptnew->prstkptr); + + /* Old process returns here when resumed */ + //restore(); + return; +} + +/*------------------------------------------------------------------------ + * resched_cntl - Control whether rescheduling is deferred or allowed + *------------------------------------------------------------------------ + */ +status resched_cntl( /* Assumes interrupts are disabled */ + int32 defer /* Either DEFER_START or DEFER_STOP */ + ) +{ + switch (defer) { + + case DEFER_START: /* Handle a deferral request */ + + if (Defer.ndefers++ == 0) { + Defer.attempt = FALSE; + } + return OK; + + case DEFER_STOP: /* Handle end of deferral */ + if (Defer.ndefers <= 0) { + return SYSERR; + } + if ( (--Defer.ndefers == 0) && Defer.attempt ) { + resched(); + } + return OK; + + default: + return SYSERR; + } +} diff --git a/system/resume.c b/system/resume.c new file mode 100644 index 0000000..7f33fbd --- /dev/null +++ b/system/resume.c @@ -0,0 +1,31 @@ +/* resume.c - resume */ + +#include + +/*------------------------------------------------------------------------ + * resume - Unsuspend a process, making it ready + *------------------------------------------------------------------------ + */ +pri16 resume( + pid32 pid /* ID of process to unsuspend */ + ) +{ + intmask mask; /* Saved interrupt mask */ + struct procent *prptr; /* Ptr to process' table entry */ + pri16 prio; /* Priority to return */ + + mask = disable(); + if (isbadpid(pid)) { + restore(mask); + return (pri16)SYSERR; + } + prptr = &proctab[pid]; + if (prptr->prstate != PR_SUSP) { + restore(mask); + return (pri16)SYSERR; + } + prio = prptr->prprio; /* Record priority to return */ + ready(pid); + restore(mask); + return prio; +} diff --git a/system/seek.c b/system/seek.c new file mode 100644 index 0000000..38cd6b7 --- /dev/null +++ b/system/seek.c @@ -0,0 +1,27 @@ +/* seek.c - seek */ + +#include + +/*------------------------------------------------------------------------ + * seek - Position a random access device + *------------------------------------------------------------------------ + */ +syscall seek( + did32 descrp, /* Descriptor for device */ + uint32 pos /* Position */ + ) +{ + intmask mask; /* Saved interrupt mask */ + struct dentry *devptr; /* Entry in device switch table */ + int32 retval; /* Value to return to caller */ + + mask = disable(); + if (isbaddev(descrp)) { + restore(mask); + return SYSERR; + } + devptr = (struct dentry *) &devtab[descrp]; + retval = (*devptr->dvseek) (devptr, pos); + restore(mask); + return retval; +} diff --git a/system/semcount.c b/system/semcount.c new file mode 100644 index 0000000..d993206 --- /dev/null +++ b/system/semcount.c @@ -0,0 +1,26 @@ +/* semcount.c - semcount */ + +#include + +/*------------------------------------------------------------------------ + * semcount - Return the count of a semaphore (because any integer is + * possible, return of SYSERR may be ambiguous) + *------------------------------------------------------------------------ + */ +syscall semcount( + sid32 semid /* ID of semaphore to use */ + ) +{ + intmask mask; /* Saved interrupt mask */ + int32 count; /* Current sempahore count */ + + mask = disable(); + + if (isbadsem(semid) || semtab[semid].sstate == S_FREE) { + restore(mask); + return SYSERR; + } + count = semtab[semid].scount; + restore(mask); + return count; +} diff --git a/system/semcreate.c b/system/semcreate.c new file mode 100644 index 0000000..32401b4 --- /dev/null +++ b/system/semcreate.c @@ -0,0 +1,50 @@ +/* semcreate.c - semcreate, newsem */ + +#include + +local sid32 newsem(void); + +/*------------------------------------------------------------------------ + * semcreate - Create a new semaphore and return the ID to the caller + *------------------------------------------------------------------------ + */ +sid32 semcreate( + int32 count /* Initial semaphore count */ + ) +{ + intmask mask; /* Saved interrupt mask */ + sid32 sem; /* Semaphore ID to return */ + + mask = disable(); + + if (count < 0 || ((sem=newsem())==SYSERR)) { + restore(mask); + return SYSERR; + } + semtab[sem].scount = count; /* Initialize table entry */ + + restore(mask); + return sem; +} + +/*------------------------------------------------------------------------ + * newsem - Allocate an unused semaphore and return its index + *------------------------------------------------------------------------ + */ +local sid32 newsem(void) +{ + static sid32 nextsem = 0; /* Next semaphore index to try */ + sid32 sem; /* Semaphore ID to return */ + int32 i; /* Iterate through # entries */ + + for (i=0 ; i= NSEM) + nextsem = 0; + if (semtab[sem].sstate == S_FREE) { + semtab[sem].sstate = S_USED; + return sem; + } + } + return SYSERR; +} diff --git a/system/semdelete.c b/system/semdelete.c new file mode 100644 index 0000000..5990652 --- /dev/null +++ b/system/semdelete.c @@ -0,0 +1,36 @@ +/* semdelete.c - semdelete */ + +#include + +/*------------------------------------------------------------------------ + * semdelete - Delete a semaphore by releasing its table entry + *------------------------------------------------------------------------ + */ +syscall semdelete( + sid32 sem /* ID of semaphore to delete */ + ) +{ + intmask mask; /* Saved interrupt mask */ + struct sentry *semptr; /* Ptr to semaphore table entry */ + + mask = disable(); + if (isbadsem(sem)) { + restore(mask); + return SYSERR; + } + + semptr = &semtab[sem]; + if (semptr->sstate == S_FREE) { + restore(mask); + return SYSERR; + } + semptr->sstate = S_FREE; + + resched_cntl(DEFER_START); + while (semptr->scount++ < 0) { /* Free all waiting processes */ + ready(getfirst(semptr->squeue)); + } + resched_cntl(DEFER_STOP); + restore(mask); + return OK; +} diff --git a/system/semreset.c b/system/semreset.c new file mode 100644 index 0000000..9331312 --- /dev/null +++ b/system/semreset.c @@ -0,0 +1,35 @@ +/* semreset.c - semreset */ + +#include + +/*------------------------------------------------------------------------ + * semreset - Reset a semaphore's count and release waiting processes + *------------------------------------------------------------------------ + */ +syscall semreset( + sid32 sem, /* ID of semaphore to reset */ + int32 count /* New count (must be >= 0) */ + ) +{ + intmask mask; /* Saved interrupt mask */ + struct sentry *semptr; /* Ptr to semaphore table entry */ + qid16 semqueue; /* Semaphore's process queue ID */ + pid32 pid; /* ID of a waiting process */ + + mask = disable(); + + if (count < 0 || isbadsem(sem) || semtab[sem].sstate==S_FREE) { + restore(mask); + return SYSERR; + } + + semptr = &semtab[sem]; + semqueue = semptr->squeue; /* Free any waiting processes */ + resched_cntl(DEFER_START); + while ((pid=getfirst(semqueue)) != EMPTY) + ready(pid); + semptr->scount = count; /* Reset count as specified */ + resched_cntl(DEFER_STOP); + restore(mask); + return OK; +} diff --git a/system/send.c b/system/send.c new file mode 100644 index 0000000..0e71bd8 --- /dev/null +++ b/system/send.c @@ -0,0 +1,41 @@ +/* send.c - send */ + +#include + +/*------------------------------------------------------------------------ + * send - Pass a message to a process and start recipient if waiting + *------------------------------------------------------------------------ + */ +syscall send( + pid32 pid, /* ID of recipient process */ + umsg32 msg /* Contents of message */ + ) +{ + intmask mask; /* Saved interrupt mask */ + struct procent *prptr; /* Ptr to process' table entry */ + + mask = disable(); + if (isbadpid(pid)) { + restore(mask); + return SYSERR; + } + + prptr = &proctab[pid]; + if (prptr->prhasmsg) { + restore(mask); + return SYSERR; + } + prptr->prmsg = msg; /* Deliver message */ + prptr->prhasmsg = TRUE; /* Indicate message is waiting */ + + /* If recipient waiting or in timed-wait make it ready */ + + if (prptr->prstate == PR_RECV) { + ready(pid); + } else if (prptr->prstate == PR_RECTIM) { + unsleep(pid); + ready(pid); + } + restore(mask); /* Restore interrupts */ + return OK; +} diff --git a/system/signal.c b/system/signal.c new file mode 100644 index 0000000..94c2179 --- /dev/null +++ b/system/signal.c @@ -0,0 +1,31 @@ +/* signal.c - signal */ + +#include + +/*------------------------------------------------------------------------ + * signal - Signal a semaphore, releasing a process if one is waiting + *------------------------------------------------------------------------ + */ +syscall signal( + sid32 sem /* ID of semaphore to signal */ + ) +{ + intmask mask; /* Saved interrupt mask */ + struct sentry *semptr; /* Ptr to sempahore table entry */ + + mask = disable(); + if (isbadsem(sem)) { + restore(mask); + return SYSERR; + } + semptr= &semtab[sem]; + if (semptr->sstate == S_FREE) { + restore(mask); + return SYSERR; + } + if ((semptr->scount++) < 0) { /* Release a waiting process */ + ready(dequeue(semptr->squeue)); + } + restore(mask); + return OK; +} diff --git a/system/signaln.c b/system/signaln.c new file mode 100644 index 0000000..7b0e316 --- /dev/null +++ b/system/signaln.c @@ -0,0 +1,37 @@ +/* signaln.c - signaln */ + +#include + +/*------------------------------------------------------------------------ + * signaln - Signal a semaphore n times, releasing n waiting processes + *------------------------------------------------------------------------ + */ +syscall signaln( + sid32 sem, /* ID of semaphore to signal */ + int32 count /* Number of times to signal */ + ) +{ + intmask mask; /* Saved interrupt mask */ + struct sentry *semptr; /* Ptr to sempahore table entry */ + + mask = disable(); + if (isbadsem(sem) || (count < 0)) { + restore(mask); + return SYSERR; + } + semptr = &semtab[sem]; + if (semptr->sstate == S_FREE) { + restore(mask); + return SYSERR; + } + + resched_cntl(DEFER_START); + for (; count > 0; count--) { + if ((semptr->scount++) < 0) { + ready(dequeue(semptr->squeue)); + } + } + resched_cntl(DEFER_STOP); + restore(mask); + return OK; +} diff --git a/system/sleep.c b/system/sleep.c new file mode 100644 index 0000000..d784005 --- /dev/null +++ b/system/sleep.c @@ -0,0 +1,50 @@ +/* sleep.c - sleep sleepms */ + +#include + +#define MAXSECONDS 4294967 /* Max seconds per 32-bit msec */ + +/*------------------------------------------------------------------------ + * sleep - Delay the calling process n seconds + *------------------------------------------------------------------------ + */ +syscall sleep( + uint32 delay /* Time to delay in seconds */ + ) +{ + if (delay > MAXSECONDS) { + return SYSERR; + } + sleepms(1000*delay); + return OK; +} + +/*------------------------------------------------------------------------ + * sleepms - Delay the calling process n milliseconds + *------------------------------------------------------------------------ + */ +syscall sleepms( + uint32 delay /* Time to delay in msec. */ + ) +{ + intmask mask; /* Saved interrupt mask */ + + mask = disable(); + if (delay == 0) { + yield(); + restore(mask); + return OK; + } + + /* Delay calling process */ + + if (insertd(currpid, sleepq, delay) == SYSERR) { + restore(mask); + return SYSERR; + } + + proctab[currpid].prstate = PR_SLEEP; + resched(); + restore(mask); + return OK; +} diff --git a/system/sp804.c b/system/sp804.c new file mode 100644 index 0000000..6e3aa04 --- /dev/null +++ b/system/sp804.c @@ -0,0 +1,74 @@ +/** + * @file sp804.c + * + * Driver for the ARM Dual Timer Module (SP804). + * + * This was written using the official manual from ARM Ltd.: + * + * "ARM Dual Timer Module (SP804) Technical Reference Manual", revision r1p0 + * + * This driver uses the first timer in the duo as a oneshot timer for + * clkupdate() and the second timer in the duo as a free-running counter for + * clkcount(). + * + * Although Embedded Xinu could make use of the periodic timer mode that is + * available on the SP804 to eliminate the need to call clkupdate() every timer + * interrupt, this driver uses the oneshot timer mode to be consistent with + * other platforms which don't have periodic timers. + */ +/* Embedded Xinu, Copyright (C) 2014. All rights reserved. */ +#include +#include + +static volatile struct { + struct { + uint32_t Load; /* +0x00 */ + uint32_t Value; /* +0x04 */ + uint32_t Control; /* +0x08 */ + uint32_t IntClr; /* +0x0C */ + uint32_t RIS; /* +0x10 */ + uint32_t MIS; /* +0x14 */ + uint32_t BGLoad; /* +0x18 */ + uint32_t Reserved; /* +0x1C */ + } timers[2]; +} * const regs = (void*)0x101E2000; +/* On the Versatile PB, there's another SP804 at 0x101E3000. That is, another + * dual timer, for a total of *four* timers. But this driver doesn't use the + * second SP804. */ + +/* Flags for the timer control registers */ +#define SP804_TIMER_ENABLE (1 << 7) +#define SP804_TIMER_PERIODIC (1 << 6) +#define SP804_TIMER_INT_ENABLE (1 << 5) +#define SP804_TIMER_PRESCALE_1 (0 << 2) +#define SP804_TIMER_PRESCALE_16 (1 << 2) +#define SP804_TIMER_PRESCALE_256 (2 << 2) +#define SP804_TIMER_32BIT (1 << 1) +#define SP804_TIMER_ONESHOT (1 << 0) + +void sp804_init(void) +{ + /* Enable the second timer (free-running, no IRQ) */ + regs->timers[1].Control = SP804_TIMER_ENABLE | SP804_TIMER_32BIT; +} + +/* clkcount() interface is documented in clock.h */ +ulong clkcount(void) +{ + /* The timer counts down, hence the inversion. */ + return ~regs->timers[1].Value; +} + +/* clkupdate() interface is documented in clock.h */ +void clkupdate(ulong cycles) +{ + /* Clear the timer IRQ if pending. */ + regs->timers[0].IntClr = 0; + + /* Set the timer interval. */ + regs->timers[0].Load = cycles; + + /* Enable the timer (oneshot, with IRQ) */ + regs->timers[0].Control = SP804_TIMER_ENABLE | SP804_TIMER_32BIT | + SP804_TIMER_ONESHOT | SP804_TIMER_INT_ENABLE; +} diff --git a/system/start.S b/system/start.S new file mode 100644 index 0000000..c44c103 --- /dev/null +++ b/system/start.S @@ -0,0 +1,113 @@ +/* start.S - start, bzero */ + +#include + +#define NULLSTK 8192 +/*------------------------------------------------------------------------ + * start - Initial entry point for a Xinu image (ARM) + *------------------------------------------------------------------------ + */ + .text + .globl start /* Declare entry point global */ + + .func start +start: + /* Save the pointer to the atags (ARM boot tags). The bootloader should + * pass this in r2, but override 0 with 0x100 to deal with old + * bootloaders that assume Linux's default behavior. */ + ldr r3, =atags_ptr + cmp r2, #0 + moveq r2, #0x100 + str r2, [r3] + + /* Continue execution at reset_handler. */ + b reset_handler + .endfunc + +/* ARM exception vector table. This is copied to address 0. See A2.6 + * "Exceptions" of the ARM Architecture Reference Manual. */ +_vectors: + ldr pc, reset_addr /* Reset handler */ + ldr pc, undef_addr /* Undefined instruction handler */ + ldr pc, swi_addr /* Software interrupt handler */ + ldr pc, prefetch_addr /* Prefetch abort handler */ + ldr pc, abort_addr /* Data abort handler */ + ldr pc, reserved_addr /* Reserved */ + ldr pc, irq_addr /* IRQ (Interrupt request) handler */ + ldr pc, fiq_addr /* FIQ (Fast interrupt request) handler */ + +reset_addr: .word reset_handler +undef_addr: .word reset_handler +swi_addr: .word reset_handler +prefetch_addr: .word reset_handler +abort_addr: .word page_fault +reserved_addr: .word reset_handler +irq_addr: .word irq_handler +fiq_addr: .word reset_handler + +_endvectors: + +.section .text + + /* reset_handler: Reset handler routine executed to start up the kernel, + * when the ARM processor is reset, or (currently) when an unhandled + * exception occurs. */ + .func reset_handler +reset_handler: + + /* Enter SYS mode with all interrupts disabled so the ARM processor is + * in a known state. */ + cpsid if, #ARMV7A_CPSR_SYS + + /* Copy the ARM exception table from .init section to address 0, + * including the absolute address table. Here we assume it is exactly + * 16 words. */ + mov r0, #0 + ldr r1, =_vectors + ldmia r1!, {r2-r9} + stmia r0!, {r2-r9} + ldmia r1!, {r2-r9} + stmia r0!, {r2-r9} + + /* Enable the following features by modifying the ARM processor's + * Control Register: + * + * - unaligned memory accesses (bit 22) + * + * Note: Xinu shouldn't do any unaligned memory accesses on purpose, but + * we found that gcc can still generate unaligned memory accesses for + * tasks such as copying character strings. (An alternative would be to + * pass -mno-unaligned-access to gcc to prevent it from doing so.) */ + mrc p15, 0, r0, c1, c0, 0 + orr r0, #1 << 22 + mcr p15, 0, r0, c1, c0, 0 + + /* Clear the .bss section of the kernel. */ + ldr r0, =edata + ldr r1, =_end + mov r2, #0 + mov r3, #0 + mov r4, #0 + mov r5, #0 + b bssloopa +bssloopb: + stmia r0!, {r2-r5} +bssloopa: + cmp r0, r1 /* check that we still haven't hit the end of bss yet */ + blo bssloopb /* if still below, go backwards and loop */ + + /* Put the null thread's stack directly after the kernel image. */ + add sp, r1, #NULLSTK + + /* The remaining memory available to the ARM will be Xinu's "memheap" + * region, which is used for dynamic memory allocation. Set its + * starting address. */ + ldr r0, =MAXADDR + str sp, [r0] + + /* Branch to the platform-independent C startup code, which takes no + * parameters and never returns. */ + b nulluser + .endfunc + + diff --git a/system/suspend.c b/system/suspend.c new file mode 100644 index 0000000..2b74206 --- /dev/null +++ b/system/suspend.c @@ -0,0 +1,41 @@ +/* suspend.c - suspend */ + +#include + +/*------------------------------------------------------------------------ + * suspend - Suspend a process, placing it in hibernation + *------------------------------------------------------------------------ + */ +syscall suspend( + pid32 pid /* ID of process to suspend */ + ) +{ + intmask mask; /* Saved interrupt mask */ + struct procent *prptr; /* Ptr to process' table entry */ + pri16 prio; /* Priority to return */ + + mask = disable(); + if (isbadpid(pid) || (pid == NULLPROC)) { + restore(mask); + return SYSERR; + } + + /* Only suspend a process that is current or ready */ + + prptr = &proctab[pid]; + if ((prptr->prstate != PR_CURR) && (prptr->prstate != PR_READY)) { + restore(mask); + return SYSERR; + } + if (prptr->prstate == PR_READY) { + getitem(pid); /* Remove a ready process */ + /* from the ready list */ + prptr->prstate = PR_SUSP; + } else { + prptr->prstate = PR_SUSP; /* Mark the current process */ + resched(); /* suspended and resched. */ + } + prio = prptr->prprio; + restore(mask); + return prio; +} diff --git a/system/tmpdecls b/system/tmpdecls new file mode 100644 index 0000000..2051f1e --- /dev/null +++ b/system/tmpdecls @@ -0,0 +1,56 @@ +extern void *uartInit(void); +extern void *uartRead(void); +extern void *uartWrite(void); +extern void *uartGetc(void); +extern void *uartPutc(void); +extern void *uartControl(void); +extern void *uartInterrupt(void); +extern void *ttyInit(void); +extern void *ttyOpen(void); +extern void *ttyClose(void); +extern void *ttyRead(void); +extern void *ttyWrite(void); +extern void *ttyGetc(void); +extern void *ttyPutc(void); +extern void *ttyControl(void); +extern void *etherInit(void); +extern void *etherOpen(void); +extern void *etherClose(void); +extern void *etherRead(void); +extern void *etherWrite(void); +extern void *etherControl(void); +extern void *etherInterrupt(void); +extern void *ethloopInit(void); +extern void *ethloopOpen(void); +extern void *ethloopClose(void); +extern void *ethloopRead(void); +extern void *ethloopWrite(void); +extern void *ethloopControl(void); +extern void *rawInit(void); +extern void *rawOpen(void); +extern void *rawClose(void); +extern void *rawRead(void); +extern void *rawWrite(void); +extern void *rawControl(void); +extern void *udpInit(void); +extern void *udpOpen(void); +extern void *udpClose(void); +extern void *udpRead(void); +extern void *udpWrite(void); +extern void *udpControl(void); +extern void *tcpInit(void); +extern void *tcpOpen(void); +extern void *tcpClose(void); +extern void *tcpRead(void); +extern void *tcpWrite(void); +extern void *tcpGetc(void); +extern void *tcpPutc(void); +extern void *tcpControl(void); +extern void *telnetInit(void); +extern void *telnetOpen(void); +extern void *telnetClose(void); +extern void *telnetRead(void); +extern void *telnetWrite(void); +extern void *telnetGetc(void); +extern void *telnetPutc(void); +extern void *telnetControl(void); diff --git a/system/udelay.c b/system/udelay.c new file mode 100644 index 0000000..1859f69 --- /dev/null +++ b/system/udelay.c @@ -0,0 +1,58 @@ +/** + * @file udelay.c + */ +/* Embedded Xinu, Copyright (C) 2009, 2013. All rights reserved. */ + +#include +#define RTCLOCK 1 +#if RTCLOCK + +#include + +/* The below udelay() implementation is platform-independent and only depends on + * clkcount() being implemented by the platform-specific code. However it does + * assume that the platform clock frequency is an even multiple of 1000000. */ + +/** + * @ingroup timer + * + * Busy-waits for a number of microseconds. + * Only use this function if absolutely necessary. Normally you should call + * sleep() so that other threads can use the processor immediately. + * + * @param us + * Number of microseconds to wait for. + */ +void udelay(ulong us) +{ + /* delay = Number of timer ticks to wait for */ + ulong delay = (platform.clkfreq / 1000000) * us; + + /* start = Starting tick count */ + ulong start = clkcount(); + + /* end = Ending tick count (may have wrapped around) */ + ulong target = start + delay; + + /* temporary variable */ + ulong count; + + if (target >= start) + { + /* Normal case: Wait until tick count is greater than target or has + * wrapped around to less than start. */ + while (((count = clkcount()) < target) && (count >= start)) + ; + } + else + { + /* Wrap around case: Wait for tick count to wrap around, then wait for + * tick count to reach target. */ + while ((count = clkcount()) > start) + ; + while ((count = clkcount()) < target) + ; + } +} + +#endif /* RTCLOCK */ diff --git a/system/unsleep.c b/system/unsleep.c new file mode 100644 index 0000000..a051405 --- /dev/null +++ b/system/unsleep.c @@ -0,0 +1,47 @@ +/* unsleep.c - unsleep */ + +#include + +/*------------------------------------------------------------------------ + * unsleep - Internal function to remove a process from the sleep + * queue prematurely. The caller must adjust the delay + * of successive processes. + *------------------------------------------------------------------------ + */ +status unsleep( + pid32 pid /* ID of process to remove */ + ) +{ + intmask mask; /* Saved interrupt mask */ + struct procent *prptr; /* Ptr to process' table entry */ + + pid32 pidnext; /* ID of process on sleep queue */ + /* that follows the process */ + /* which is being removed */ + + mask = disable(); + + if (isbadpid(pid)) { + restore(mask); + return SYSERR; + } + + /* Verify that candidate process is on the sleep queue */ + + prptr = &proctab[pid]; + if ((prptr->prstate!=PR_SLEEP) && (prptr->prstate!=PR_RECTIM)) { + restore(mask); + return SYSERR; + } + + /* Increment delay of next process if such a process exists */ + + pidnext = queuetab[pid].qnext; + if (pidnext < NPROC) { + queuetab[pidnext].qkey += queuetab[pid].qkey; + } + + getitem(pid); /* Unlink process from queue */ + restore(mask); + return OK; +} diff --git a/system/userret.c b/system/userret.c new file mode 100644 index 0000000..5e7a975 --- /dev/null +++ b/system/userret.c @@ -0,0 +1,12 @@ +/* userret.c - userret */ + +#include + +/*------------------------------------------------------------------------ + * userret - Called when a process returns from the top-level function + *------------------------------------------------------------------------ + */ +void userret(void) +{ + kill(getpid()); /* Force process to exit */ +} diff --git a/system/wait.c b/system/wait.c new file mode 100644 index 0000000..e138c37 --- /dev/null +++ b/system/wait.c @@ -0,0 +1,39 @@ +/* wait.c - wait */ + +#include + +/*------------------------------------------------------------------------ + * wait - Cause current process to wait on a semaphore + *------------------------------------------------------------------------ + */ +syscall wait( + sid32 sem /* Semaphore on which to wait */ + ) +{ + intmask mask; /* Saved interrupt mask */ + struct procent *prptr; /* Ptr to process' table entry */ + struct sentry *semptr; /* Ptr to sempahore table entry */ + + mask = disable(); + if (isbadsem(sem)) { + restore(mask); + return SYSERR; + } + + semptr = &semtab[sem]; + if (semptr->sstate == S_FREE) { + restore(mask); + return SYSERR; + } + + if (--(semptr->scount) < 0) { /* If caller must block */ + prptr = &proctab[currpid]; + prptr->prstate = PR_WAIT; /* Set state to waiting */ + prptr->prsem = sem; /* Record semaphore ID */ + enqueue(currpid,semptr->squeue);/* Enqueue on semaphore */ + resched(); /* and reschedule */ + } + + restore(mask); + return OK; +} diff --git a/system/wakeup.c b/system/wakeup.c new file mode 100644 index 0000000..1c1bf3b --- /dev/null +++ b/system/wakeup.c @@ -0,0 +1,20 @@ +/* wakeup.c - wakeup */ + +#include + +/*------------------------------------------------------------------------ + * wakeup - Called by clock interrupt handler to awaken processes + *------------------------------------------------------------------------ + */ +void wakeup(void) +{ + /* Awaken all processes that have no more time to sleep */ + + resched_cntl(DEFER_START); + while (nonempty(sleepq) && (firstkey(sleepq) <= 0)) { + ready(dequeue(sleepq)); + } + + resched_cntl(DEFER_STOP); + return; +} diff --git a/system/write.c b/system/write.c new file mode 100644 index 0000000..0cbcb78 --- /dev/null +++ b/system/write.c @@ -0,0 +1,28 @@ +/* write.c - write */ + +#include + +/*------------------------------------------------------------------------ + * write - Write one or more bytes to a device + *------------------------------------------------------------------------ + */ +syscall write( + did32 descrp, /* Descriptor for device */ + char *buffer, /* Address of buffer */ + uint32 count /* Length of buffer */ + ) +{ + intmask mask; /* Saved interrupt mask */ + struct dentry *devptr; /* Entry in device switch table */ + int32 retval; /* Value to return to caller */ + + mask = disable(); + if (isbaddev(descrp)) { + restore(mask); + return SYSERR; + } + devptr = (struct dentry *) &devtab[descrp]; + retval = (*devptr->dvwrite) (devptr, buffer, count); + restore(mask); + return retval; +} diff --git a/system/xdone.c b/system/xdone.c new file mode 100644 index 0000000..e640709 --- /dev/null +++ b/system/xdone.c @@ -0,0 +1,13 @@ +/* xdone.c - xdone */ + +#include + +/*------------------------------------------------------------------------ + * xdone - Print system completion message as last process exits + *------------------------------------------------------------------------ + */ +void xdone(void) +{ + kprintf("\n\nAll user processes have completed.\n\n"); + halt(); /* Halt the processor */ +} diff --git a/system/yield.c b/system/yield.c new file mode 100644 index 0000000..7e062fc --- /dev/null +++ b/system/yield.c @@ -0,0 +1,17 @@ +/* yield.c - yield */ + +#include + +/*------------------------------------------------------------------------ + * yield - Voluntarily relinquish the CPU (end a timeslice) + *------------------------------------------------------------------------ + */ +syscall yield(void) +{ + intmask mask; /* Saved interrupt mask */ + + mask = disable(); + resched(); + restore(mask); + return OK; +} diff --git a/xtra/getutime.c b/xtra/getutime.c new file mode 100644 index 0000000..517b8cd --- /dev/null +++ b/xtra/getutime.c @@ -0,0 +1,64 @@ +/* getutime.c - getutime */ + +#include +#include + +/*------------------------------------------------------------------------ + * getutime - Obtain time in seconds past Jan 1, 1970, UCT (GMT) + *------------------------------------------------------------------------ + */ +status getutime( + uint32 *timvar /* Location to store the result */ + ) +{ + uint32 nnow; /* Current time in network fmt */ + uint32 now; /* Current time in xinu format */ + int32 retval; /* Return value from call */ + uid32 slot; /* Slot in UDP table */ + uint32 serverip; /* IP address of a time server */ + char prompt[2] = "xx"; /* Message to prompt time server*/ + + if (Date.dt_bootvalid) { /* Return time from local info */ + *timvar = Date.dt_boot + clktime; + return OK; + } + + /* Convert time server IP address to binary */ + + if (dot2ip(TIMESERVER, &serverip) == SYSERR) { + return SYSERR; + } + + /* Contact the time server to get the date and time */ + + slot = udp_register(serverip, TIMERPORT, TIMELPORT); + if (slot == SYSERR) { + fprintf(stderr,"getutime: cannot register a udp port %d\n", + TIMERPORT); + return SYSERR; + } + + /* Send arbitrary message to prompt time server */ + + if (getlocalip() == SYSERR) { + return SYSERR; + } retval = udp_send(slot, prompt, 2); + if (retval == SYSERR) { + fprintf(stderr,"getutime: cannot send a udp message %d\n", + TIMERPORT); + udp_release(slot); + return SYSERR; + } + + retval = udp_recv(slot, (char *) &nnow, 4, TIMETIMEOUT); + if ( (retval == SYSERR) || (retval == TIMEOUT) ) { + udp_release(slot); + return SYSERR; + } + udp_release(slot); + now = ntim2xtim( ntohl(nnow) ); + Date.dt_boot = now - clktime; + Date.dt_bootvalid = TRUE; + *timvar = now; + return OK; +} diff --git a/xtra/irq_handler.S b/xtra/irq_handler.S new file mode 100644 index 0000000..547fdd2 --- /dev/null +++ b/xtra/irq_handler.S @@ -0,0 +1,77 @@ +/** + * @file irq_handler.S + */ +/* Embedded Xinu, Copyright (C) 2013. All rights reserved. */ + +#include /* Needed for ARM_MODE_SYS definition. */ + +.globl irq_handler + +/** + * Entry point for Xinu's interrupt handler (ARM version). Note: we don't + * actually use the IRQ mode provided by the ARM; instead we switch the + * processor to SYS mode and use the SYS mode stack instead. This makes the ARM + * more similar to other CPUs and removes special cases in the context switch + * code. However, a caveat with this method is that the IRQ handler will use + * the stack of the currently running thread (the one that was interrupted). + * This requires that the stack size of any thread that executes with interrupts + * enabled be set to at least the stack space needed by the thread itself plus + * the maximum stack space needed by any IRQ handler. + */ +irq_handler: + .func irq_handler + + /* Correct LR_irq; this is a quirk of how the ARM processor calls the + * IRQ handler. */ + sub lr, lr, #4 + + /* [Store Return State Decrement Before] */ + /* Store the return state on the SYS mode stack. This includes + * SPSR_irq, which is the CPSR from SYS mode before we were interrupted, + * and LR_irq, which is the address to which we must return to continue + * execution of the interrupted thread. */ + srsdb #ARMV7A_CPSR_SYS! + + /* [Change Program State Interrupt Disable] */ + /* Change to SYS mode, with IRQs and FIQs still disabled. */ + cpsid if, #ARMV7A_CPSR_SYS + + /* Save on the SYS mode stack any registers that may be clobbered, + * namely the SYS mode LR and all other caller-save general purpose + * registers. Also save r4 so we can use it to store the amount we + * decremented the stack pointer by to align it to an 8-byte boundary + * (see comment below). */ + push {r0-r4, r12, lr} + + /* According to the document "Procedure Call Standard for the ARM + * Architecture", the stack pointer is 4-byte aligned at all times, but + * it must be 8-byte aligned when calling an externally visible + * function. This is important because this code is reached from an IRQ + * and therefore the stack currently may only be 4-byte aligned. If + * this is the case, the stack must be padded to an 8-byte boundary + * before calling dispatch(). */ + and r4, sp, #4 + sub sp, sp, r4 + + /* Execute a data memory barrier, as per the BCM2835 documentation. */ + bl dmb + + /* Call the C interrupt dispatching code. */ + bl dispatch + + /* Execute a data memory barrier, as per the BCM2835 documentation. */ + bl dmb + + /* Restore the original stack alignment (see note about 8-byte alignment + * above). */ + add sp, sp, r4 + + /* Restore the above-mentioned registers from the SYS mode stack. */ + pop {r0-r4, r12, lr} + + /* [Return From Exception Increment After] */ + /* Load the original SYS-mode CPSR and PC that were saved on the SYS + * mode stack. */ + rfeia sp! + .endfunc + diff --git a/xtra/kprintf.c b/xtra/kprintf.c new file mode 100644 index 0000000..815f478 --- /dev/null +++ b/xtra/kprintf.c @@ -0,0 +1,94 @@ +/* kprintf.c - kputc, kgetc, kprintf */ + +#include +#include + +/*------------------------------------------------------------------------ + * kputc - use polled I/O to write a character to the console serial line + *------------------------------------------------------------------------ + */ +syscall kputc( + byte c /* character to write */ + ) +{ + struct dentry *devptr; + struct uart_csreg *csrptr; + + /* Get CSR address of the console */ + + devptr = (struct dentry *) &devtab[CONSOLE]; + csrptr = (struct uart_csreg *) devptr->dvcsr; + + /* wait for UART transmit queue to empty */ + + //while ( (inb( (int)&csrptr->lsr) & UART_LSR_THRE) == 0 ) { + // ; /* reepatedly poll the device */ + //} + while ( (csrptr->lsr & UART_LSR_THRE) == 0 ) { + ; + } + + /* write the character */ + + //outb( (int) &csrptr->buffer, c); + csrptr->buffer = c; + + /* Honor CRLF - when writing NEWLINE also send CARRIAGE RETURN */ + + if (c == '\n') { + //while ( (inb( (int)&csrptr->lsr) & UART_LSR_THRE) == 0 ) { + // ; /* poll until transmitter queue to empty */ + //} + while ( (csrptr->lsr & UART_LSR_THRE) == 0 ) { + ; + } + //outb( (int) &csrptr->buffer, '\r'); + csrptr->buffer = '\r'; + } + return OK; +} + +/** + * perform a synchronous kernel read from a serial device + * @param *devptr pointer to device on which to write character + * @return character read on success, SYSERR on failure + */ +syscall kgetc(void) +{ + int irmask; + volatile struct uart_csreg *regptr; + byte c; + struct dentry *devptr; + + devptr = (struct dentry *) &devtab[CONSOLE]; + regptr = (struct uart_csreg *)devptr->dvcsr; + + irmask = regptr->ier; /* Save UART interrupt state. */ + regptr->ier = 0; /* Disable UART interrupts. */ + + while (0 == (regptr->lsr & UART_LSR_DR)) + { /* Do Nothing */ + } + + /* read character from Receive Holding Register */ + c = regptr->rbr; + regptr->ier = irmask; /* Restore UART interrupts. */ + return c; +} + +extern void _doprnt(char *, va_list, int (*)(int), int); + +/** + * kernel printf: formatted, unbuffered output to CONSOLE + * @param *fmt pointer to string being printed + * @return OK on success + */ +syscall kprintf(char *fmt, ...) +{ + va_list ap; + + va_start(ap, fmt); + _doprnt(fmt, ap, (int (*)(int))kputc, (int)&devtab[CONSOLE]); + va_end(ap); + return OK; +} diff --git a/xtra/memory_barrier.S b/xtra/memory_barrier.S new file mode 100644 index 0000000..646f318 --- /dev/null +++ b/xtra/memory_barrier.S @@ -0,0 +1,34 @@ +/** + * @file memory_barrier.S + */ +/* Embedded Xinu, Copyright (C) 2013. All rights reserved. */ + +.globl dmb + +/** + * @fn void dmb(void) + * + * Executes a data memory barrier operation using the c7 (Cache Operations) + * register of system control coprocessor CP15. + * + * All explicit memory accesses occurring in program order before this operation + * will be globally observed before any memory accesses occurring in program + * order after this operation. This includes both read and write accesses. + * + * This differs from a "data synchronization barrier" in that a data + * synchronization barrier will ensure that all previous explicit memory + * accesses occurring in program order have fully completed before continuing + * and that no subsequent instructions will be executed until that point, even + * if they do not access memory. This is unnecessary for what we need this for. + * + * On the BCM2835 (Raspberry Pi), this is needed before and after accessing + * peripherals, as documented on page 7 of the "BCM2835 ARM Peripherals" + * document. As documented, it is only needed when switching between + * _different_ peripherals. + */ +dmb: + .func dmb + mov r12, #0 + mcr p15, 0, r12, c7, c10, 5 + mov pc, lr + .endfunc diff --git a/xtra/xsh_arp.c b/xtra/xsh_arp.c new file mode 100644 index 0000000..a6bb23b --- /dev/null +++ b/xtra/xsh_arp.c @@ -0,0 +1,75 @@ +/* xsh_arp.c - xsh_arp */ + +#include +#include +#include + +static void arp_dmp(); +/*------------------------------------------------------------------------ + * xsh_arp - display the current ARP cache for an interface + *------------------------------------------------------------------------ + */ +shellcmd xsh_arp(int nargs, char *args[]) +{ + /* For argument '--help', emit help about the 'arp' command */ + + if (nargs == 2 && strncmp(args[1], "--help", 7) == 0) { + printf("Use: %s\n\n", args[0]); + printf("Description:\n"); + printf("\tDisplays information from the ARP cache\n"); + printf("Options:\n"); + printf("\t--help\t display this help and exit\n"); + return 0; + } + + /* Dump the Entire ARP cache */ + printf("\n"); + arp_dmp(); + + return 0; +} + + +/*------------------------------------------------------------------------ + * arp_dmp - dump the ARP cache + *------------------------------------------------------------------------ + */ +static void arp_dmp () +{ + int32 i, j; /* index into the ARP table */ + struct arpentry *arptr; /* pointer to entry in cache */ + + /* Print entries from the ARP table */ + + printf("ARP cache:\n"); + printf(" State Pid IP Address Hardware Address\n"); + printf(" ----- --- --------------- -----------------\n"); + for (i = 0; i < ARP_SIZ; i++) { + arptr = &arpcache[i]; + if (arptr->arstate == AR_FREE) { + continue; + } + switch(arptr->arstate) { + case AR_PENDING: printf(" PEND "); break; + case AR_RESOLVED: printf(" RESLV"); break; + default: printf(" ?????"); break; + } + if (arptr->arstate == AR_PENDING) { + printf("%4d ", arptr->arpid); + } else { + printf(" "); + } + printf("%3d.", (arptr->arpaddr & 0xFF000000) >> 24); + printf("%3d.", (arptr->arpaddr & 0x00FF0000) >> 16); + printf("%3d.", (arptr->arpaddr & 0x0000FF00) >> 8); + printf("%3d", (arptr->arpaddr & 0x000000FF)); + + printf(" %02X", arptr->arhaddr[0]); + for (j = 1; j < ARP_HALEN; j++) { + printf(":%02X", arptr->arhaddr[j]); + } + printf("\n"); + } + printf("\n"); + return; +} diff --git a/xtra/xsh_ipaddr.c b/xtra/xsh_ipaddr.c new file mode 100644 index 0000000..27bcf89 --- /dev/null +++ b/xtra/xsh_ipaddr.c @@ -0,0 +1,124 @@ +/* xsh_ipaddr.c - xsh_ipaddr */ + +#include +#include +#include + +/*------------------------------------------------------------------------ + * xsh_ipaddr - obtain and print the IP address, subnet mask and default + * router address for each interface that's up + *------------------------------------------------------------------------ + */ +shellcmd xsh_ipaddr(int nargs, char *args[]) { + + uint32 ipaddr; /* an IP address in binary */ + uint32 ipbcast; /* IP broadcast addr. in binary */ + uint32 ipprefix; /* IP network prefix in binary */ + uint32 router; /* address of router in binary */ + char str[40]; /* temporary used for formatting*/ + uint32 ipmask; /* subnet mask in binary */ + + /* Output info for '--help' argument */ + + if (nargs == 2 && strncmp(args[1], "--help", 7) == 0) { + printf("Usage: %s\n\n", args[0]); + printf("Description:\n"); + printf("\tDisplays IP address information\n"); + printf("Options:\n"); + printf("\t-f\tforce a new DHCP request"); + printf("\t--help\tdisplay this help and exit\n"); + return OK; + } + + /* Check argument count */ + + if (nargs > 2) { + fprintf(stderr, "%s: too many arguments\n", args[0]); + fprintf(stderr, "Try '%s --help' for more information\n", + args[0]); + return SYSERR; + } + + if (nargs == 2) { + if (strncmp(args[1], "-f", 3) != 0) { + fprintf(stderr, "%s: invalid argument\n", args[0]); + fprintf(stderr, + "Try '%s --help' for more information\n", + args[0]); + return 1; + } + NetData.ipvalid = FALSE; + getlocalip(); + } + + + /* IP unicast address in dotted decimal and hex */ + + ipaddr = NetData.ipucast; + sprintf(str, "%d.%d.%d.%d", + (ipaddr>>24)&0xff, (ipaddr>>16)&0xff, + (ipaddr>>8)&0xff, ipaddr&0xff); + printf(" %-15s %-15s 0x%08x\n", + "IP address:", str, ipaddr); + + /* IP network broadcast address in dotted decimal & hex */ + + ipbcast = NetData.ipbcast; + sprintf(str, "%d.%d.%d.%d", + (ipbcast>>24)&0xff, (ipbcast>>16)&0xff, + (ipbcast>>8)&0xff, ipbcast&0xff); + printf(" %-15s %-15s 0x%08x\n", + "IP broadcast:", str, ipbcast); + + /* IP network prefix in dotted decimal & hex */ + + ipprefix = NetData.ipprefix; + sprintf(str, "%d.%d.%d.%d", + (ipprefix>>24)&0xff, (ipprefix>>16)&0xff, + (ipprefix>>8)&0xff, ipprefix&0xff); + printf(" %-15s %-15s 0x%08x\n", + "IP prefix:", str, ipprefix); + + /* IP network mask in dotted decimal & hex */ + + ipmask = NetData.ipmask; + ipaddr = NetData.ipucast; + sprintf(str, "%d.%d.%d.%d", + (ipmask>>24)&0xff, (ipmask>>16)&0xff, + (ipmask>>8)&0xff, ipmask&0xff); + printf(" %-15s %-15s 0x%08x\n", + "Address mask:", str, ipmask); + + /* Default router in dotted decimal & hex */ + + router = NetData.iprouter; + sprintf(str, "%d.%d.%d.%d", + (router>>24)&0xff, (router>>16)&0xff, + (router>>8)&0xff, router&0xff); + printf(" %-15s %-15s 0x%08x\n", + "IP router:", str, router); + + + printf(" %-15s %02x:%02x:%02x:%02x:%02x:%02x\n", + "MAC unicast:", + 0xff & NetData.ethucast[0], + 0xff & NetData.ethucast[1], + 0xff & NetData.ethucast[2], + 0xff & NetData.ethucast[3], + 0xff & NetData.ethucast[4], + 0xff & NetData.ethucast[5]); + + printf(" %-15s %02x:%02x:%02x:%02x:%02x:%02x\n", + "MAC broadcast:", + 0xff & NetData.ethbcast[0], + 0xff & NetData.ethbcast[1], + 0xff & NetData.ethbcast[2], + 0xff & NetData.ethbcast[3], + 0xff & NetData.ethbcast[4], + 0xff & NetData.ethbcast[5]); + + + + + return OK; +} diff --git a/xtra/xsh_ping.c b/xtra/xsh_ping.c new file mode 100644 index 0000000..a678c9b --- /dev/null +++ b/xtra/xsh_ping.c @@ -0,0 +1,114 @@ +/* xsh_ping.c - xsh_ping */ + +#include +#include +#include + +/*------------------------------------------------------------------------ + * xsh_ping - shell command to ping a remote host + *------------------------------------------------------------------------ + */ +shellcmd xsh_ping(int nargs, char *args[]) +{ + uint32 ipaddr; /* IP address in binary */ + int32 retval; /* return value */ + int32 slot; /* Slot in ICMP to use */ + static int32 seq = 0; /* sequence number */ + char buf[56]; /* buffer of chars */ + int32 i; /* index into buffer */ + int32 nextval; /* next value to use */ + bool8 dname; + + /* For argument '--help', emit help about the 'ping' command */ + + if (nargs == 2 && strncmp(args[1], "--help", 7) == 0) { + printf("Use: %s address\n\n", args[0]); + printf("Description:\n"); + printf("\tUse ICMP Echo to ping a remote host\n"); + printf("Options:\n"); + printf("\t--help\t display this help and exit\n"); + printf("\taddress\t an IP address in dotted decimal\n"); + return 0; + } + + /* Check for valid number of arguments */ + + if (nargs != 2) { + fprintf(stderr, "%s: invalid arguments\n", args[0]); + fprintf(stderr, "Try '%s --help' for more information\n", + args[0]); + return 1; + } + + dname = FALSE; + for(i = 0; i < strlen(args[1]); i++) { + if( ( (args[1][i] >= 65) && (args[1][i] <= 90) ) || + ( (args[1][i] >= 97) && (args[1][i] <= 122)) ) { + dname = TRUE; + break; + } + } + + if(dname == TRUE) { + ipaddr = dns_qa(args[1]); + if((int32)ipaddr == SYSERR) { + fprintf(stderr, "DNS cannot resolve %s\n", args[1]); + return 1; + } + printf("Pinging %d.%d.%d.%d\n", (ipaddr>>24)&0xff, + (ipaddr>>16)&0xff, + (ipaddr>>8)&0xff, + (ipaddr)&0xff); + } + else { + /* convert argument to binary */ + + retval = dot2ip(args[1], &ipaddr); + if ((int32)retval == SYSERR) { + fprintf(stderr, "%s: invalid IP address\n", args[0]); + return 1; + } + } + + /* Register to receive an ICMP Echo Reply */ + + slot = icmp_register(ipaddr); + if (slot == SYSERR) { + fprintf(stderr,"%s: ICMP registration failed\n", args[0]); + return 1; + } + + /* Fill the buffer with values - start with low-order byte of */ + /* the sequence number and increment */ + + nextval = seq; + for (i = 0; i +#include +#include + +/*------------------------------------------------------------------------ + * xsh_udpdump - shell command to dump the UDP registered ports + *------------------------------------------------------------------------ + */ +shellcmd xsh_udpdump(int nargs, char *args[]) +{ + int32 i; /* index into udptab */ + char *udpstate[] = { /* names for entry states */ + "free ", "used ", "recv "}; + struct udpentry *uptr; /* ptr to entry in udptab */ + uint32 remip; /* variables to hold the info */ + int32 r1,r2,r3,r4; /* from an entry for printing */ + int32 remprt, locprt; + int32 state; + pid32 pid; + + + /* For argument '--help', emit help about the 'udpdump' command */ + + if (nargs == 2 && strncmp(args[1], "--help", 7) == 0) { + printf("Use: %s\n\n", args[0]); + printf("Description:\n"); + printf("\tDisplays registerd UDP ports\n"); + printf("Options:\n"); + printf("\t--help\t display this help and exit\n"); + return 0; + } + + /* Check for valid number of arguments */ + + if (nargs > 1) { + fprintf(stderr, "%s: no argumentd expected\n", args[0]); + fprintf(stderr, "Try '%s --help' for more information\n", + args[0]); + return 1; + } + + /* Print header for items from UDP table */ + + printf("%5s %5s %5s %9s %8s %8s %3s %4s\n", + "Entry", "Iface", "State", "Remote IP", "Rem Port", + "Loc Port", "Pid", "Pkts"); + printf("%5s %5s %5s %15s %8s %8s %3s %4s\n", + "-----", "-----", "-----", "---------------", "--------", + "--------", "---", "----"); + + /* Output information for each valid entry in udptab */ + for (i = 0; i < UDP_SLOTS; i++) { + uptr = &udptab[i]; + if (uptr->udstate == UDP_FREE) { /* skip unused slots */ + printf("%3d ---- slot is free ---\n", i); + continue; + } + remip = uptr->udremip; + r1 = (remip >> 24) & 0xff; + r2 = (remip >> 16) & 0xff; + r3 = (remip >> 8) & 0xff; + r4 = (remip ) & 0xff; + remprt = uptr->udremport; + locprt = uptr->udlocport; + pid = uptr->udpid; + state = uptr->udstate; + printf( + " %4s %3d.%3d.%3d.%3d %5d %6d%5d%6d\n", + udpstate[state], r1, r2, r3, r4, remprt, locprt, pid, + uptr->udcount); + } + return 0; +} diff --git a/xtra/xsh_udpecho.c b/xtra/xsh_udpecho.c new file mode 100644 index 0000000..d1f67ab --- /dev/null +++ b/xtra/xsh_udpecho.c @@ -0,0 +1,120 @@ +/* xsh_udpecho.c - xsh_udpecho */ + +#include +#include +#include + +/*------------------------------------------------------------------------ + * xsh_udpecho - shell command that can send a message to a remote UDP + * echo server and receive a reply + *------------------------------------------------------------------------ + */ +shellcmd xsh_udpecho(int nargs, char *args[]) +{ + int i; /* index into buffer */ + int retval; /* return value */ + char msg[] = "Xinu testing UDP echo"; /* message to send */ + char inbuf[1500]; /* buffer for incoming reply */ + int32 slot; /* UDP slot to use */ + int32 msglen; /* length of outgoing message */ + uint32 remoteip; /* remote IP address to use */ + //uint32 localip; /* local IP address to use */ + uint16 echoport= 7; /* port number for UDP echo */ + uint16 locport = 52743; /* local port to use */ + int32 retries = 3; /* number of retries */ + int32 delay = 2000; /* reception delay in ms */ + + /* For argument '--help', emit help about the 'udpecho' command */ + + if (nargs == 2 && strncmp(args[1], "--help", 7) == 0) { + printf("Use: %s REMOTEIP\n\n", args[0]); + printf("Description:\n"); + printf("\tBounce a message off a remote UDP echo server\n"); + printf("Options:\n"); + printf("\tREMOTEIP:\tIP address in dotted decimal\n"); + printf("\t--help\t display this help and exit\n"); + return 0; + } + + /* Check for valid IP address argument */ + + if (nargs != 2) { + fprintf(stderr, "%s: invalid argument(s)\n", args[0]); + fprintf(stderr, "Try '%s --help' for more information\n", + args[0]); + return 1; + } + + if (dot2ip(args[1], &remoteip) == SYSERR) { + fprintf(stderr, "%s: invalid IP address argument\r\n", + args[0]); + return 1; + } + /* + localip = getlocalip(); + if (localip == SYSERR) { + fprintf(stderr, + "%s: could not obtain a local IP address\n", + args[0]); + return 1; + } + */ + + /* register local UDP port */ + + slot = udp_register(remoteip, echoport, locport); + if (slot == SYSERR) { + fprintf(stderr, "%s: could not reserve UDP port %d\n", + args[0], locport); + return 1; + } + + /* Retry sending outgoing datagram and getting response */ + + msglen = strnlen(msg, 1200); + for (i=0; i +#include +#include + +/*------------------------------------------------------------------------ + * xsh_udpeserver - shell command that acts as a UDP echo server (is + * usually run in background) + *------------------------------------------------------------------------ + */ +shellcmd xsh_udpeserver(int nargs, char *args[]) +{ + int32 retval; /* return value from sys calls */ + uint32 localip; /* local IP address */ + uint32 remip; /* remote sender's IP address */ + uint16 remport; /* remote sender's UDP port */ + char buff[1500]; /* buffer for incoming reply */ + int32 msglen; /* length of outgoing message */ + int32 slot; /* slot in UDP table */ + uint16 echoserverport= 7; /* port number for UDP echo */ + + /* For argument '--help', emit a help message */ + + if (nargs == 2 && strncmp(args[1], "--help", 7) == 0) { + printf("Use: %s\n\n", args[0]); + printf("Description:\n"); + printf("\tBecome a UDP echo server\n"); + printf("Options:\n"); + printf("\t--help\t display this help and exit\n"); + return 0; + } + + /* Check for valid IP address argument */ + + if (nargs != 1) { + fprintf(stderr, "%s: no arguments expected\n", args[0]); + fprintf(stderr, "Try '%s --help' for more information\n", + args[0]); + return 1; + } + + localip = getlocalip(); + if (localip == SYSERR) { + fprintf(stderr, + "%s: could not obtain a local IP address\n", + args[0]); + return 1; + } + + /* register local UDP port */ + + slot = udp_register(0, 0, echoserverport); + if (slot == SYSERR) { + fprintf(stderr, "%s: could not reserve UDP port %d\n", + args[0], echoserverport); + return 1; + } + + /* Do forever: read an incoming datagram and send it back */ + + while (TRUE) { + retval = udp_recvaddr(slot, &remip, &remport, buff, + sizeof(buff), 600000); + + if (retval == TIMEOUT) { + continue; + } else if (retval == SYSERR) { + fprintf(stderr, "%s: error receiving UDP\n", + args[0]); + return 1; + } + msglen = retval; + retval = udp_sendto(slot, remip, remport, buff, msglen); + if (retval == SYSERR) { + fprintf(stderr, "%s: udp_sendto failed\n", + args[0]); + return 1; + } + } + return 0; +}