菜園状況。トマトは芽が出ました。ナスはまだ。ナスの種は有効期限を半年過
ぎてしまっている。結構この期限って効くような気がしている。

ネジ穴をもう一度タップ入れて塗装を落として、後は完全硬化を待って組み立て。

マイOSはgcc-4.6.0/binutils-2.11化終了。俺V7mallocも完成。

ネジ穴をもう一度タップ入れて塗装を落として、後は完全硬化を待って組み立て。

マイOSはgcc-4.6.0/binutils-2.11化終了。俺V7mallocも完成。





$ tip hmon
connected
SIO@
stack_start: 0x9fffc
ROM data: 0x3d11c-0x3d694
RAM data: 0x9e000-0x9e578 1400byte
bss: 0x9e580-0x9fa38 5304byte
NMI return address|CCR: 0x80008646
delay_div=40
calibrated. delay_div=40
delay_div=40
calibrated. delay_div=40
H8/3052 ud01 Monitor Build Mar 30 2011 09:00:26
[ VIRTUAL VECTOR TABLE *OFF* ]
OFF: overlay module, ON: standalone module.
>> l
~>Local file name? a.mot
808 lines transferred in 1 second
!
Read 18065 byte. success
Start address: 0x813f0
stack_start: 0x9dffc
RAM data: 0x8181c-0x81820 4byte
bss: 0x81820-0x81828 8byte
NMI return address|CCR: 0x81408
ohayo0
->lua
sbrk:base=0x81828 size=8
sbrk:base=0x81830 size=1024
sbrk:base=0x81c30 size=1024
sbrk:base=0x82030 size=1024
sbrk:base=0x82430 size=1024
sbrk:base=0x82830 size=1024
sbrk:base=0x82c30 size=1024
sbrk:base=0x83030 size=1024
sbrk:base=0x83430 size=2048
sbrk:base=0x83c30 size=1024
sbrk:base=0x84030 size=1024
sbrk:base=0x84430 size=1024
sbrk:base=0x84830 size=2048
sbrk:base=0x85030 size=1024
Lua 5.1.4 Copyright (C) 1994-2008 Lua.org, PUC-Rio
>
> x=4
> y=3
sbrk:base=0x85430 size=1024
> z=4+x*y
> io.write ("hello",z,z,x,y,"world\n");
sbrk:base=0x85830 size=1024
stdin:1: ')' expected near '0'
> io.write ("hello",z,x,y,"world\n")
sbrk:base=0x85c30 size=1024
fwrite
hello1643fwrite
world
>
次はLPC2388。これはsetjmp/longjmpを実装するくらいで終わり。
$ tip umon230400
connected
0x4000fff0
ROM data: 0x20f90-0x211bc
RAM data: 0x40000000-0x4000022c 556byte
bss: 0x4000022c-0x40000344 280byte
current stack=0x4000ffe4
Clock: IRC, PLL NOT connected, PLL MSEL:0 NSEL:0, CCLKCFG 0
Clock: MAIN, PLL connected, PLL MSEL:11 NSEL:0, CCLKCFG 3
sysclock:288000000Hz cpuclock:72000000Hz
PCLK0: 0, PCLK1: 0 PCONP: 4280ffe
bss RAM check passed.
user> elp
user> help
avaliable command: help reset test
user> test
sbrk:base=0x40000344 size=8
sbrk:base=0x4000034c size=1024
sbrk:base=0x4000074c size=1024
sbrk:base=0x40000b4c size=1024
sbrk:base=0x40000f4c size=1024
sbrk:base=0x4000134c size=1024
sbrk:base=0x4000174c size=1024
sbrk:base=0x40001b4c size=1024
sbrk:base=0x40001f4c size=2048
sbrk:base=0x4000274c size=1024
sbrk:base=0x40002b4c size=1024
sbrk:base=0x40002f4c size=1024
sbrk:base=0x4000334c size=2048
sbrk:base=0x40003b4c size=1024
Lua 5.1.4 Copyright (C) 1994-2008 Lua.org, PUC-Rio
>
> x=3
sbrk:base=0x40003f4c size=1024
stdin:1: unexpected symbol near 'char(8)'
> x=3
> print "hello"
hello
> y=12
sbrk:base=0x4000434c size=1024
> z=y/x
> io.write ("hello",x,y,z,"world\n");
sbrk:base=0x4000474c size=1024
fwrite
hello3124fwrite
world
>

libtool: compile: /home/uch/os/w/tools/work/gcc-4.6.0/.objs.h8300-elf/./gcc/xgcc -shared-libgcc -B/home/uch/os/w/tools/work/gcc-4.6.0/.objs.h8300-elf/./gcc -nostdinc++ -L/home/uch/os/w/tools/work/gcc-4.6.0/.objs.h8300-elf/h8300-elf/libstdc++-v3/src -L/home/uch/os/w/tools/work/gcc-4.6.0/.objs.h8300-elf/h8300-elf/libstdc++-v3/src/.libs -B/usr/home/uch/os/w/tools/h8300-elf/bin/ -B/usr/home/uch/os/w/tools/h8300-elf/lib/ -isystem /usr/home/uch/os/w/tools/h8300-elf/include -isystem /usr/home/uch/os/w/tools/h8300-elf/sys-include -I/home/uch/os/w/tools/work/gcc-4.6.0/.objs.h8300-elf/h8300-elf/libstdc++-v3/include/h8300-elf -I/home/uch/os/w/tools/work/gcc-4.6.0/.objs.h8300-elf/h8300-elf/libstdc++-v3/include -I/home/uch/os/w/tools/work/gcc-4.6.0/libstdc++-v3/libsupc++ -fno-implicit-templates -Wall -Wextra -Wwrite-strings -Wcast-qual -fdiagnostics-show-location=once -ffunction-sections -fdata-sections -g -O2 -c ../../../../libstdc++-v3/src/locale-inst.cc -o locale-inst.o /tmp/cccyeTXf.s: Assembler messages: /tmp/cccyeTXf.s:976: Warning: operand #0xffffffffffffffe2 out of range. /tmp/cccyeTXf.s:1006: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:1028: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:1057: Warning: operand #0xffffffffffffffe2 out of range. /tmp/cccyeTXf.s:1087: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:1109: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:1512: Warning: operand #0xffffffffffffffe0 out of range. /tmp/cccyeTXf.s:1568: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:1589: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:2190: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:2350: Warning: operand #0xffffffffffffffe2 out of range. /tmp/cccyeTXf.s:2383: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:2412: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:2444: Warning: operand #0xffffffffffffffe2 out of range. /tmp/cccyeTXf.s:2479: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:2514: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:2548: Warning: operand #0xffffffffffffffe2 out of range. /tmp/cccyeTXf.s:2580: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:2607: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:2638: Warning: operand #0xffffffffffffffca out of range. /tmp/cccyeTXf.s:2666: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:2803: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:2935: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:2965: Warning: operand #0xffffffffffffffcc out of range. /tmp/cccyeTXf.s:3364: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:3532: Warning: operand #0xffffffffffffffe0 out of range. /tmp/cccyeTXf.s:3589: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:3628: Warning: operand #0xffffffffffffffde out of range. /tmp/cccyeTXf.s:3687: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:3726: Warning: operand #0xffffffffffffffde out of range. /tmp/cccyeTXf.s:3785: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:4040: Warning: operand #0xffffffffffffffe0 out of range. /tmp/cccyeTXf.s:4097: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:4136: Warning: operand #0xffffffffffffffde out of range. /tmp/cccyeTXf.s:4195: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:4234: Warning: operand #0xffffffffffffffde out of range. /tmp/cccyeTXf.s:4293: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:4669: Warning: operand #0xffffffffffffffdc out of range. /tmp/cccyeTXf.s:4729: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:4792: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:4833: Warning: operand #0xffffffffffffffdc out of range. /tmp/cccyeTXf.s:4893: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:4956: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:5251: Warning: operand #0xffffffffffffffe0 out of range. /tmp/cccyeTXf.s:5307: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:5346: Warning: operand #0xffffffffffffffde out of range. /tmp/cccyeTXf.s:5404: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:5443: Warning: operand #0xffffffffffffffde out of range. /tmp/cccyeTXf.s:5501: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:5706: Warning: operand #0xffffffffffffffdc out of range. /tmp/cccyeTXf.s:5765: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:5827: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:6568: Warning: operand #0xfffffffffffffff8 out of range. /tmp/cccyeTXf.s:6617: Warning: operand #0xfffffffffffffff8 out of range. /tmp/cccyeTXf.s:6787: Warning: operand #0xffffffffffffffe0 out of range. /tmp/cccyeTXf.s:6847: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:6886: Warning: operand #0xffffffffffffffde out of range. /tmp/cccyeTXf.s:6948: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:6987: Warning: operand #0xffffffffffffffd4 out of range. /tmp/cccyeTXf.s:7056: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:7158: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:8067: Warning: operand #0xffffffffffffffe0 out of range. /tmp/cccyeTXf.s:8130: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:8159: Warning: operand #0xffffffffffffffe2 out of range. /tmp/cccyeTXf.s:8221: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:8393: Warning: operand #0xffffffffffffffdc out of range. /tmp/cccyeTXf.s:8417: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:8460: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:8499: Warning: operand #0xffffffffffffffdc out of range. /tmp/cccyeTXf.s:8523: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:8566: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:8605: Warning: operand #0xffffffffffffffe0 out of range. /tmp/cccyeTXf.s:8668: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:8833: Warning: operand #0xffffffffffffffdc out of range. /tmp/cccyeTXf.s:8902: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:8944: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:9054: Warning: operand #0xfffffffffffffff2 out of range. /tmp/cccyeTXf.s:9163: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:9582: Warning: operand #0xffffffffffffffb0 out of range. /tmp/cccyeTXf.s:9608: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:10396: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:10742: Warning: operand #0xffffffffffffffa8 out of range. /tmp/cccyeTXf.s:10768: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:11760: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:11997: Warning: operand #0xffffffffffffffa8 out of range. /tmp/cccyeTXf.s:12023: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:13015: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:13386: Warning: operand #0xffffffffffffff74 out of range. /tmp/cccyeTXf.s:14557: Warning: operand #0xfffffffffffffff4 out of range. /tmp/cccyeTXf.s:14964: Warning: operand #0xffffffffffffff9a out of range. /tmp/cccyeTXf.s:14973: Warning: operand #0xfffffffffffffffc out of range. /tmp/cccyeTXf.s:15004: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:15101: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:15143: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:15690: Warning: operand #0xfffffffffffffff2 out of range. /tmp/cccyeTXf.s:16184: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:16235: Warning: operand #0xffffffffffffff9a out of range. /tmp/cccyeTXf.s:16244: Warning: operand #0xfffffffffffffffc out of range. /tmp/cccyeTXf.s:16275: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:16372: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:16414: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:16961: Warning: operand #0xfffffffffffffff2 out of range. /tmp/cccyeTXf.s:17455: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:17568: Warning: operand #0xffffffffffffffc8 out of range. /tmp/cccyeTXf.s:17613: Warning: operand #0xffffffffffffffd6 out of range. /tmp/cccyeTXf.s:17886: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:18325: Warning: operand #0xffffffffffffffa4 out of range. /tmp/cccyeTXf.s:18451: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:18498: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:18576: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:18651: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:18663: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:18808: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:18859: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:18904: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:19028: Warning: operand #0xffffffffffffffa4 out of range. /tmp/cccyeTXf.s:19154: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:19201: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:19279: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:19354: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:19366: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:19511: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:19562: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:19607: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:19735: Warning: operand #0xfffffffffffffffa out of range. /tmp/cccyeTXf.s:19948: Warning: operand #0xffffffffffffffb6 out of range. /tmp/cccyeTXf.s:19970: Warning: operand #0xfffffffffffffffc out of range. /tmp/cccyeTXf.s:20065: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:20091: Warning: operand #0xffffffffffffffea out of range. /tmp/cccyeTXf.s:20150: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:20203: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:20404: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:20449: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:20533: Warning: operand #0xfffffffffffffff8 out of range. /tmp/cccyeTXf.s:20674: Warning: operand #0xffffffffffffffb6 out of range. /tmp/cccyeTXf.s:20692: Warning: operand #0xfffffffffffffffc out of range. /tmp/cccyeTXf.s:20787: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:20813: Warning: operand #0xffffffffffffffea out of range. /tmp/cccyeTXf.s:20872: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:20957: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:21206: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:21251: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:21370: Warning: operand #0xffffffffffffff90 out of range. /tmp/cccyeTXf.s:21422: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:21526: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:21567: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:21704: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:21759: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:21817: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:21872: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:21940: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:22039: Warning: operand #0xffffffffffffffe6 out of range. /tmp/cccyeTXf.s:22077: Warning: operand #0xfffffffffffffff0 out of range. /tmp/cccyeTXf.s:22193: Warning: operand #0xfffffffffffffff8 out of range. /tmp/cccyeTXf.s:22280: Warning: operand #0xfffffffffffffff8 out of range. /tmp/cccyeTXf.s:22344: Warning: operand #0xffffffffffffffb2 out of range. /tmp/cccyeTXf.s:22370: Warning: operand #0xfffffffffffffffc out of range. /tmp/cccyeTXf.s:22465: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:22491: Warning: operand #0xffffffffffffffd6 out of range. /tmp/cccyeTXf.s:22551: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:22604: Warning: operand #0xfffffffffffffff8 out of range. /tmp/cccyeTXf.s:22615: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:22817: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:22862: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:22946: Warning: operand #0xfffffffffffffff8 out of range. /tmp/cccyeTXf.s:22991: Warning: operand #0xffffffffffffffa8 out of range. /tmp/cccyeTXf.s:23017: Warning: operand #0xfffffffffffffffc out of range. /tmp/cccyeTXf.s:23112: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:23139: Warning: operand #0xffffffffffffffd6 out of range. /tmp/cccyeTXf.s:23200: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:23334: Warning: operand #0xfffffffffffffff8 out of range. /tmp/cccyeTXf.s:23340: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:23592: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:23636: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:23720: Warning: operand #0xfffffffffffffff8 out of range. /tmp/cccyeTXf.s:23778: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:23869: Warning: operand #0xfffffffffffffff6 out of range. /tmp/cccyeTXf.s:24018: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:24166: Warning: operand #0xfffffffffffffff4 out of range. /tmp/cccyeTXf.s:24200: Warning: operand #0xfffffffffffffffa out of range. /tmp/cccyeTXf.s:24344: Warning: operand #0xffffffffffffffa2 out of range. /tmp/cccyeTXf.s:24382: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:24478: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:24515: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:24747: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:24931: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:25019: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:25391: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:25552: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:25613: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:25767: Warning: operand #0xfffffffffffffff6 out of range. /tmp/cccyeTXf.s:25857: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:25961: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:26085: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:26386: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:26530: Warning: operand #0xffffffffffffffa2 out of range. /tmp/cccyeTXf.s:26568: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:26664: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:26701: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:26933: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:27117: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:27205: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:27577: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:27738: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:27799: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:27953: Warning: operand #0xfffffffffffffff6 out of range. /tmp/cccyeTXf.s:28043: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:28147: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:28271: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:28572: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:28716: Warning: operand #0xffffffffffffffce out of range. /tmp/cccyeTXf.s:28738: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:29004: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:29045: Warning: operand #0xffffffffffffffd6 out of range. /tmp/cccyeTXf.s:29221: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:29266: Warning: operand #0xffffffffffffffee out of range. /tmp/cccyeTXf.s:29424: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:29647: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:29777: Warning: operand #0xffffffffffffffc0 out of range. /tmp/cccyeTXf.s:29925: Warning: operand #0xfffffffffffffffa out of range. /tmp/cccyeTXf.s:30063: Warning: operand #0xffffffffffffffd4 out of range. /tmp/cccyeTXf.s:30171: Warning: operand #0xfffffffffffffffa out of range. /tmp/cccyeTXf.s:30309: Warning: operand #0xffffffffffffffec out of range. /tmp/cccyeTXf.s:30534: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:30690: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:30775: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:30913: Warning: operand #0xffffffffffffff90 out of range. /tmp/cccyeTXf.s:31524: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:31949: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:32171: Warning: operand #0xfffffffffffffffa out of range. /tmp/cccyeTXf.s:32327: Warning: operand #0xfffffffffffffffa out of range. /tmp/cccyeTXf.s:32360: Warning: operand #0xfffffffffffffffa out of range. /tmp/cccyeTXf.s:32443: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:32611: Warning: operand #0xfffffffffffffff8 out of range. /tmp/cccyeTXf.s:32748: Warning: operand #0xfffffffffffffff8 out of range. /tmp/cccyeTXf.s:32881: Warning: operand #0xffffffffffffffb0 out of range. /tmp/cccyeTXf.s:32984: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:33002: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:33036: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:33069: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:33132: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:33167: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:33175: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:33185: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:33295: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:33403: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:33411: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:33421: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:33447: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:33892: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:34151: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:34783: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:34965: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:35191: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:35260: Warning: operand #0xffffffffffffffd4 out of range. /tmp/cccyeTXf.s:35453: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:35494: Warning: operand #0xffffffffffffffd4 out of range. /tmp/cccyeTXf.s:35687: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:35728: Warning: operand #0xffffffffffffffd4 out of range. /tmp/cccyeTXf.s:35921: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:35967: Warning: operand #0xffffffffffffff9e out of range. /tmp/cccyeTXf.s:35976: Warning: operand #0xfffffffffffffffc out of range. /tmp/cccyeTXf.s:36070: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:36117: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:36172: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:36274: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:36282: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:36292: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:36502: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:36510: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:36520: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:36546: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:36897: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:37139: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:37493: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:37618: Warning: operand #0xffffffffffffffc6 out of range. /tmp/cccyeTXf.s:37675: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:37717: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:37847: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:37917: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:37950: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:38049: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:38057: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:38113: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:38327: Warning: operand #0xffffffffffffffb0 out of range. /tmp/cccyeTXf.s:38428: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:38475: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:38531: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:38633: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:38641: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:38651: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:38861: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:38869: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:38879: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:38905: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:38990: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:39205: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:39421: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:39598: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:39737: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:39860: Warning: operand #0xffffffffffffffb0 out of range. /tmp/cccyeTXf.s:39961: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:40008: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:40064: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:40166: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:40174: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:40184: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:40394: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:40402: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:40412: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:40438: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:40523: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:40738: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:40954: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:41131: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:41270: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:41397: Warning: operand #0xffffffffffffffa2 out of range. /tmp/cccyeTXf.s:41406: Warning: operand #0xfffffffffffffffc out of range. /tmp/cccyeTXf.s:41500: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:41547: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:41602: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:41704: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:41712: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:41722: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:41932: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:41940: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:41950: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:41976: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:42313: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:42550: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:42884: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:42972: Warning: operand #0xfffffffffffffff4 out of range. /tmp/cccyeTXf.s:43124: Warning: operand #0xffffffffffffff4e out of range. /tmp/cccyeTXf.s:43133: Warning: operand #0xfffffffffffffffc out of range. /tmp/cccyeTXf.s:43227: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:43274: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:43329: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:43433: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:43441: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:43451: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:43660: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:43668: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:43678: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:43704: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:43792: Warning: operand #0xffffffffffff8000 out of range. /tmp/cccyeTXf.s:43804: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:43824: Warning: operand #0xfffffffffffffff0 out of range. /tmp/cccyeTXf.s:44022: Warning: operand #0xfffffffffffffff0 out of range. /tmp/cccyeTXf.s:44257: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:44415: Warning: operand #0xfffffffffffffff0 out of range. /tmp/cccyeTXf.s:44668: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:44864: Warning: operand #0xffffffffffff8000 out of range. /tmp/cccyeTXf.s:44877: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:45077: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:45206: Warning: operand #0xffffffffffffff76 out of range. /tmp/cccyeTXf.s:45215: Warning: operand #0xfffffffffffffffc out of range. /tmp/cccyeTXf.s:45309: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:45356: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:45412: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:45516: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:45524: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:45534: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:45742: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:45750: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:45760: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:45786: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:45884: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:45885: Warning: operand #0xfffffffffffffff0 out of range. /tmp/cccyeTXf.s:46078: Warning: operand #0xfffffffffffffff0 out of range. /tmp/cccyeTXf.s:46251: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:46409: Warning: operand #0xfffffffffffffff0 out of range. /tmp/cccyeTXf.s:46600: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:46780: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:46982: Warning: operand #0xffffffffffffffff out of range. /tmp/cccyeTXf.s:83815: Error: value of 65765 too large for field of 2 bytes at 65807 /tmp/cccyeTXf.s:85608: Error: value of 68541 too large for field of 2 bytes at 70376 /tmp/cccyeTXf.s:86580: Error: value of 71027 too large for field of 2 bytes at 72862 /tmp/cccyeTXf.s:87655: Error: value of 75490 too large for field of 2 bytes at 75531 /tmp/cccyeTXf.s:87694: Error: value of 75207 too large for field of 2 bytes at 75626 /tmp/cccyeTXf.s:88125: Error: value of 76616 too large for field of 2 bytes at 76657 /tmp/cccyeTXf.s:88164: Error: value of 76333 too large for field of 2 bytes at 76752 /tmp/cccyeTXf.s:88644: Error: value of 77678 too large for field of 2 bytes at 77903 /tmp/cccyeTXf.s:88809: Error: value of 78274 too large for field of 2 bytes at 78313 /tmp/cccyeTXf.s:89160: Error: value of 78904 too large for field of 2 bytes at 79122 /tmp/cccyeTXf.s:89338: Error: value of 79527 too large for field of 2 bytes at 79566 /tmp/cccyeTXf.s:90195: Error: value of 81486 too large for field of 2 bytes at 81721 /tmp/cccyeTXf.s:90360: Error: value of 82092 too large for field of 2 bytes at 82131 /tmp/cccyeTXf.s:90593: Error: value of 82465 too large for field of 2 bytes at 82683 /tmp/cccyeTXf.s:90771: Error: value of 83088 too large for field of 2 bytes at 83127 /tmp/cccyeTXf.s:92424: Error: value of 84873 too large for field of 2 bytes at 87134 /tmp/cccyeTXf.s:94047: Error: value of 88931 too large for field of 2 bytes at 91192 /tmp/cccyeTXf.s:98044: Error: value of 100674 too large for field of 2 bytes at 100884 /tmp/cccyeTXf.s:100723: Error: value of 107162 too large for field of 2 bytes at 107534 /tmp/cccyeTXf.s:101926: Error: value of 110194 too large for field of 2 bytes at 110566 /tmp/cccyeTXf.s:102785: Error: value of 112348 too large for field of 2 bytes at 112720 /tmp/cccyeTXf.s:103644: Error: value of 114502 too large for field of 2 bytes at 114874 /tmp/cccyeTXf.s:104645: Error: value of 116966 too large for field of 2 bytes at 117338 /tmp/cccyeTXf.s:105503: Error: value of 119122 too large for field of 2 bytes at 119494 /tmp/cccyeTXf.s:122420: Error: value of 68805 too large for field of 2 bytes at 20484 /tmp/cccyeTXf.s:123584: Error: value of 71291 too large for field of 2 bytes at 22202 /tmp/cccyeTXf.s:127434: Error: value of 79957 too large for field of 2 bytes at 28052 /tmp/cccyeTXf.s:127651: Error: value of 80402 too large for field of 2 bytes at 28383 /tmp/cccyeTXf.s:127791: Error: value of 80537 too large for field of 2 bytes at 28605 /tmp/cccyeTXf.s:127870: Error: value of 80672 too large for field of 2 bytes at 28721 /tmp/cccyeTXf.s:127954: Error: value of 80803 too large for field of 2 bytes at 28847 /tmp/cccyeTXf.s:128052: Error: value of 80980 too large for field of 2 bytes at 28989 /tmp/cccyeTXf.s:135776: Error: value of 97910 too large for field of 2 bytes at 40654 /tmp/cccyeTXf.s:136170: Error: value of 97927 too large for field of 2 bytes at 41264 /tmp/cccyeTXf.s:136187: Error: value of 97944 too large for field of 2 bytes at 41291 /tmp/cccyeTXf.s:141301: Error: value of 109496 too large for field of 2 bytes at 49039 /tmp/cccyeTXf.s:141307: Error: value of 109496 too large for field of 2 bytes at 49049 /usr/home/uch/os/w/tools/h8300-elf/bin/as: BFD (GNU Binutils) 2.21 ???????? ../../bfd/elf.c:2795 xgcc: コンパイラ内部エラー: Segmentation fault (プログラム as) 完全なバグ報告を送って下さい。 適切ならば前処理後のソースをつけてください。 <http://gcc.gnu.org/bugs.html> を見れば方法が書いてあります。 gmake[4]: *** [locale-inst.lo] エラー 1 gmake[4]: ディレクトリ `/usr/home/uch/os/w/tools/work/gcc-4.6.0/.objs.h8300-elf/h8300-elf/libstdc++-v3/src' から出ます gmake[3]: *** [all-recursive] エラー 1 gmake[3]: ディレクトリ `/usr/home/uch/os/w/tools/work/gcc-4.6.0/.objs.h8300-elf/h8300-elf/libstdc++-v3' から出ます gmake[2]: *** [all] エラー 2 gmake[2]: ディレクトリ `/usr/home/uch/os/w/tools/work/gcc-4.6.0/.objs.h8300-elf/h8300-elf/libstdc++-v3' から出ます gmake[1]: *** [all-target-libstdc++-v3] エラー 2 gmake[1]: ディレクトリ `/usr/home/uch/os/w/tools/work/gcc-4.6.0/.objs.h8300-elf' から出ます gmake: *** [all] エラー 2 $実際gcc-4.6.0を使ってみると、またちょっと厳しくなってますね
void
a ()
{
int a;
a = 10;
}
こんなのを見つけてくれます。
main.c: 関数 ‘a’ 内: main.c:71:7: エラー: 変数 ‘a’ が設定されましたが使用されていません [-Werror=unused-but-set-variable]ここ数日、読んでいた2.10BSDのmalloc.c(実際はV7そのまま)を読み終えました。 今後のデバッグのためにこのアルゴリズムのまま俺流に書き起こします。
V7 malloc
コントロールブロックは最低でポインタサイズ。なので最低でも下1ビットは0
なので、この1ビットをブロックが使用中か、開放されているかのフラグに使う。
なのでアロケート単位は最低でもsizeof (void *)
ブロックのリンクは必ずポインタの値が上昇する方向にする。そうすることで
次のリンクのポインタが現在よりも小さいということをループ条件とできる。
リンクの一番下と上は(積荷はないけれど)常に使用中の特別の役割にすること
でリンクのつけかえの面倒さを廃している。
sbrkの返り値は不連続でもかまわない。その場合、開放されたブロックの結合
ができなくなるので空間効率は悪くなる。
リンクのどこから場所を探すか。
+ mallocの後は今回確保した場所の次のブロックをスタート地点とするよ
うに設定する。
+ freeの後は、今回開放した場所をスタート地点とする。
ブロックの結合はどこで行うか。
mallocの度に設定されたスタート地点からリンクを辿りながら結合する。その
最中に、指定されたバイト数のある領域があれば、そこで結合は終了。どこにも
なかった場合には最低でも一周、最悪で二周する。
ブロックの伸張は必ず、一番上に追加する。追加する場合1KB単位に丸めて追加
する。
reallocは現在の領域を開放し、新しくmallocする。freeの後のmallocはfreeし
た場所から取得しようとするので、後に開放のブロックがあり、十分な領域が
とれれば、内容のコピーは不要になる。
新しくmallocした領域にfreeした領域のポインタからコピーする。
freeした場所の前方に開放のブロックがあり、そこと結合した場合には、新し
い場所と古い場所が重なり、mallocの段階で古い場所の途中にコントロールブ
ロックが置かれる場合がある。この場合、上記のコピーの内容がコントロール
ブロックで上書きされてしまっているので、mallocの段階でコントロールブロッ
クを書きこむ前にそこの内容を保存しておき、reallocの段階でそれを元に戻す。
その値がallocx
pがreallocに渡された場所
qが新しく確保された場所
q->nextの場所はコントロールブロックになる。
+ overwrited by control block.
p p->next
old | p-q | * |
/ /| /
/ / | /
/ / |/
/ / /
/ / /|
/ / / |
/ / / |
new | | p-q |
q ^ q->next (q+nw)
| nw |
^ここは q->next - (p -q)
q->next = q+nwなので q+nw - (p -q) = q + (q + nw - p)
/* @(#)malloc.c 2.1 SCCS id keyword */
#ifdef debug
#define ASSERT(p) if(!(p))botch("p");else
botch(s)
char *s;
{
printf("assertion botched: %s\n",s);
abort();
}
#else
#define ASSERT(p)
#endif
/* avoid break bug */
#ifdef pdp11
#define GRANULE 64
#else
#define GRANULE 0
#endif
/* C storage allocator
* circular first-fit strategy
* works with noncontiguous, but monotonically linked, arena
* each block is preceded by a ptr to the (pointer of)
* the next following block
* blocks are exact number of words long
* aligned to the data type requirements of ALIGN
* pointers to blocks must have BUSY bit 0
* bit in ptr is 1 for busy, 0 for idle
* gaps in arena are merely noted as busy blocks
* last block of arena (pointed to by alloct) is empty and
* has a pointer to first
* idle blocks are coalesced during space search
*
* a different implementation may need to redefine
* ALIGN, NALIGN, BLOCK, BUSY, INT
* where INT is integer type to which a pointer can be cast
*/
#define INT int
#define ALIGN int
#define NALIGN 1
#define WORD sizeof(union store)
#define BLOCK 1024 /* a multiple of WORD*/
#define BUSY 1
#define NULL 0
#define testbusy(p) ((INT)(p)&BUSY)
#define setbusy(p) (union store *)((INT)(p)|BUSY)
#define clearbusy(p) (union store *)((INT)(p)&~BUSY)
union store { union store *ptr;
ALIGN dummy[NALIGN];
int calloc; /*calloc clears an array of integers*/
};
static union store allocs[2]; /*initial arena*/
ここでallocsをデータセクションにとっているのはデータセクション < bssを
仮定している
static union store *allocp; /*search ptr*/
static union store *alloct; /*arena top*/
static union store *allocx; /*for benefit of realloc*/
char *sbrk();
char *
malloc(nbytes)
unsigned nbytes;
{
register union store *p, *q;
register nw;
static temp; /*coroutines assume no auto*/
if(allocs[0].ptr==0) { /*first time*/
allocs[0].ptr = setbusy(&allocs[1]);
allocs[1].ptr = setbusy(&allocs[0]);
alloct = &allocs[1];
allocp = &allocs[0];
底辺とてっぺんを双方向リンクし、ここからは領域をとらないようにビジーと設定。
}
nw = (nbytes+WORD+WORD-1)/WORD;
コントロールブロック(union store)の領域を追加してユニットに丸める。
ASSERT(allocp>=allocs && allocp<=alloct);
ASSERT(allock());
for(p=allocp; ; ) {
for(temp=0; ; ) {
if(!testbusy(p->ptr)) {
開放ブロックが続く限りつなげる
while(!testbusy((q=p->ptr)->ptr)) {
ASSERT(q>p&&q<alloct);
p->ptr = q->ptr;
}
if(q>=p+nw && p+nw>=p)
goto found;
その途中で場所があればそこを使う。
}
開放ブロックの連続が切れた。
q = p;
p = clearbusy(p->ptr);
ポインタと使用中のフラグを共用しているのでポインタを取り出すには
BUSYを落とさないといけない。ここでqがBUSY、pがその次のブロック
if(p>q) 登り
ASSERT(p<=alloct);
登りならそれはてっぺんより下
else if(q!=alloct || p!=allocs) {
下りならqはてっぺんで、pは一番下じゃないといけない。(ここはデバッグ用)
ASSERT(q==alloct&&p==allocs);
return(NULL);
} else if(++temp>1)
二回下りを検出することで全部のリンクを廻ったことになる。
break;
}
メモリがなかった時にはalloc_topの上に新しく拾ってきたメモリをつけたす。
temp = ((nw+BLOCK/WORD)/(BLOCK/WORD))*(BLOCK/WORD);
BLOCKに丸める。
q = (union store *)sbrk(0);
if(q+temp+GRANULE < q) {
return(NULL);
}
q = (union store *)sbrk(temp*WORD);
if((INT)q == -1) {
return(NULL);
}
ASSERT(q>alloct);
alloct->ptr = q;
てっぺんにつなげる。
if(q!=alloct+1)
alloct->ptr = setbusy(alloct->ptr);
sbrkが前回から連続したアドレスじゃなかった場合このブロックを越して
結合しないようにbusyにしておく。
sbrk連続
alloct
||
q
これはalloctとqを結合できる。
sbrk不連続
alloct
|
|
q
これは結合できないのでalloctはBUSYにする。
alloct = q->ptr = q+temp-1;
alloct->ptr = setbusy(allocs);
新しくてっぺん(alloct)を設定し、それは一番下にリンクし、メモリ獲得に
使われない(BUSY)ようにする。
}
found:
allocp = p + nw;
次のmallocのスタートは(allocp)は今回確保した領域の次にする。
ASSERT(allocp<=alloct);
if(q>allocp) {
獲得した領域よりも、必要な領域が小さい時はそこを分割する。
allocx = allocp->ptr;
reallocで直前に開放した領域(まだコピー前)と領域が重なってしまった時の
ためにコントロールブロックを設定する前にそこの値を保存しておく。
allocp->ptr = p->ptr;
コントロールブロックを設定
}
p->ptr = setbusy(allocp);
この領域は使用中。
return((char *)(p+1));
コントロールブロックの後が実際の積荷。
}
/* freeing strategy tuned for LIFO allocation
*/
free(ap)
register char *ap;
{
register union store *p = (union store *)ap;
ASSERT(p>clearbusy(allocs[1].ptr)&&p<=alloct);
clearbusy(allocs[1].ptr)なので(これは一番下のポインタ)一番下よりも上ということ。
ASSERT(allock());
allocp = --p;
コントロールブロックはその一つ下で、次にmallocする時はここから探すようにする。
ASSERT(testbusy(p->ptr));
そしてここは使用中
p->ptr = clearbusy(p->ptr);
このブロックを開放。
ASSERT(p->ptr > allocp && p->ptr <= alloct);
このブロックの次のポインタが登りであり(てっぺんじゃない)、それがてっぺん
以下である。(てっぺんなら、そこは積荷を持たないし、次のブロックは一番下(下り))
}
/* realloc(p, nbytes) reallocates a block obtained from malloc()
* and freed since last call of malloc()
* to have new size nbytes, and old content
* returns new location, or 0 on failure
*/
char *
realloc(p, nbytes)
register union store *p;
unsigned nbytes;
{
register union store *q;
union store *s, *t;
register unsigned nw;
unsigned onw;
if(testbusy(p[-1].ptr))
free((char *)p);
まずは場所を開放する。
onw = p[-1].ptr - p;
q = (union store *)malloc(nbytes);
新しく場所をとる。
if(q==NULL || q==p)
return((char *)q);
とれなかったり、運よく次のブロックから結合できたらそのまま終了。
s = p;
t = q;
nw = (nbytes+WORD-1)/WORD;
if(nw<onw)
onw = nw;
while(onw--!=0)
*t++ = *s++;
場所が変更されたのでコピーする。
if(q<p && q+nw>=p)
(q+(q+nw-p))->ptr = allocx;
前回の場所の途中に、今回の領域の次のコントロールブロックが設定されてし
まった場合は、それがコピーされてしまっているので、とっておいた元の値を
戻す。
return((char *)q);
}
#ifdef debug
allock()
{
#ifdef longdebug
register union store *p;
int x;
x = 0;
for(p= &allocs[0]; clearbusy(p->ptr) > p; p=clearbusy(p->ptr)) {
全部のリンクをまわる。
if(p==allocp)
x++;
}
ASSERT(p==alloct);
return(x==1|p==allocp);
mallocの場所探しの位置(allocp)は一つだけであり、なかったとしたら、それは
てっぺん(alloct)に設定されている。
#else
return(1);
#endif
}
#endif


TEXINFO=texinfo-4.8 #MPFR=mpfr-2.3.2 MPFR=mpfr-3.0.0 #GMP=gmp-4.2.4 GMP=gmp-4.3.2 MPC=mpc-0.9 #BINUTILS=binutils-2.18 BINUTILS=binutils-2.21 #GCC=gcc-4.3.2 GCC=gcc-4.6.0 #NEWLIB=newlib-1.17.0 NEWLIB=newlib-1.19.0こんな感じの更新でツールチェーンはOKっぽい。これに手を出す程暇もないの だが...。はやく腰を落ちつけてサーボモータの制御をやりたいのに。
$ rx-elf-gcc --target-help
このオプションはターゲット固有のものです:
-fpu RX FPU 命令の使用を有効にする
(デフォルト)。
-m32bit-doubles double を 32 ビットで保存する
(デフォルト)。
-m64bit-doubles double を 64 ビットで保存する。
-mas100-syntax Generate assembler output that is compatible with
the Renesas AS100 assembler. This may restrict
some of the compiler's capabilities. The default
is to generate GAS compatable syntax.
-mbig-endian-data ビッグエンディアン形式でデータを保存する。
-mcpu= ターゲット RX CPU 型を設定する。
-mint-register= 割り込みハンドラ用に予約されるレジスタサイズを指定する
-mlittle-endian-data リトルエンディアン形式でデータを保存する
(デフォルト)。
-mmax-constant-size= 被演算子として許可される定数値のバイト単位での最大サイズ
-mrelax リンカの緩和を有効にする。
-msave-acc-in-interrupts Specifies whether interrupt functions should save
and restore the accumulator register.
-msim シミュレータランタイムを使用する。
-msmall-data-limit= Maximum size of global and static variables which
can be placed into the small data area.
-nofpu RX FPU 命令の使用を無効にする。
アセンブラオプション
=================
"OPTION" をアセンブラに渡すには "-Wa,OPTION" を使用してください
RX specific command line options:
--mbig-endian-data
--mlittle-endian-data [default]
--m32bit-doubles [default]
--m64bit-doubles
--muse-conventional-section-names
--muse-renesas-section-names [default]
--msmall-data-limit
リンカオプション
==============
"OPTION" をリンカに渡すには "-Wl,OPTION" を使用してください
rx-elf-gcc: エラー: ライブラリ探索パス内にデフォルトリンカスクリプト ‘rx.ld’ の位置確認ができません
elf32rx:
--build-id[=STYLE] Generate build ID note
--audit=AUDITLIB Specify a library to use for auditing
-P AUDITLIB, --depaudit=AUDITLIB
Specify a library to use for auditing dependencies
--no-flag-mismatch-warnings Don't warn about objects with incompatible endian or dsp settings
$










SIO@
stack_start: 0xffc000
ROM data: 0x2dbe8-0x2dd34
RAM data: 0xff2000-0xff214c 332byte
bss: 0xff214c-0xff2244 248byte
VBR: 0x0 (0x0)
PA7 clock output: On
Input clock: 12000000Hz, MDCLK=0
System clock: x4 (48000000Hz)
Peripheral clock: x2 (24000000Hz)
External clock: x4 (48000000Hz)
user> lua
->lua
sbrk:base=0xff2244 size=0
sbrk:base=0xff2244 size=1024
sbrk:base=0xff2644 size=0
sbrk:base=0xff2644 size=1024
sbrk:base=0xff2a44 size=0
sbrk:base=0xff2a44 size=1024
sbrk:base=0xff2e44 size=0
openlib start: heap 0xff2244-0xff2e44 (3072), stack 0xffbd48-0xffc000 (696) remain 36612
sbrk:base=0xff2e44 size=0
: heap 0xff2244-0xff2e44 (3072), stack 0xffbd3c-0xffc000 (708) remain 36600
sbrk:base=0xff2e44 size=0
sbrk:base=0xff2e44 size=0
sbrk:base=0xff2e44 size=1024
sbrk:base=0xff3244 size=0
sbrk:base=0xff3244 size=1024
sbrk:base=0xff3644 size=0
sbrk:base=0xff3644 size=1024
sbrk:base=0xff3a44 size=0
package: heap 0xff2244-0xff3a44 (6144), stack 0xffbac0-0xffc000 (1344) remain 32892
sbrk:base=0xff3a44 size=0
sbrk:base=0xff3a44 size=1024
sbrk:base=0xff3e44 size=0
sbrk:base=0xff3e44 size=2048
sbrk:base=0xff4644 size=0
table: heap 0xff2244-0xff4644 (9216), stack 0xffbac0-0xffc000 (1344) remain 29820
sbrk:base=0xff4644 size=0
io: heap 0xff2244-0xff4644 (9216), stack 0xffbac0-0xffc000 (1344) remain 29820
sbrk:base=0xff4644 size=0
sbrk:base=0xff4644 size=1024
sbrk:base=0xff4a44 size=0
sbrk:base=0xff4a44 size=1024
sbrk:base=0xff4e44 size=0
os: heap 0xff2244-0xff4e44 (11264), stack 0xffbac0-0xffc000 (1344) remain 27772
sbrk:base=0xff4e44 size=0
sbrk:base=0xff4e44 size=1024
sbrk:base=0xff5244 size=0
sbrk:base=0xff5244 size=2048
sbrk:base=0xff5a44 size=0
string: heap 0xff2244-0xff5a44 (14336), stack 0xffbac0-0xffc000 (1344) remain 24700
sbrk:base=0xff5a44 size=0
debug: heap 0xff2244-0xff5a44 (14336), stack 0xffbac0-0xffc000 (1344) remain 24700
sbrk:base=0xff5a44 size=0
sbrk:base=0xff5a44 size=1024
Lua 5.1.4 Copyright (C) 1994-2008 Lua.org, PUC-Rio
> io.write ("hello", _VERSION,"\n")
sbrk:base=0xff5e44 size=0
sbrk:base=0xff5e44 size=1024
fwrite
hellofwrite
Lua 5.1fwrite
sbrk:base=0xff6244 size=0
lua_pcall: heap 0xff2244-0xff6244 (16384), stack 0xffb648-0xffc000 (2488) remain 21508
> x=3
sbrk:base=0xff6244 size=0
lua_pcall: heap 0xff2244-0xff6244 (16384), stack 0xffb648-0xffc000 (2488) remain 21508
> y=4
sbrk:base=0xff6244 size=0
lua_pcall: heap 0xff2244-0xff6244 (16384), stack 0xffb648-0xffc000 (2488) remain 21508
> z=x*y
sbrk:base=0xff6244 size=0
sbrk:base=0xff6244 size=1024
sbrk:base=0xff6644 size=0
lua_pcall: heap 0xff2244-0xff6644 (17408), stack 0xffb648-0xffc000 (2488) remain 20484
> io.write ("ohayo",x,y,z)
fwrite
ohayo3412sbrk:base=0xff6644 size=0
lua_pcall: heap 0xff2244-0xff6644 (17408), stack 0xffb648-0xffc000 (2488) remain 20484
>




#define LUA_NUMBER_SCAN "%d" #define LUA_NUMBER_FMT "%d" #define lua_number2str(s,n) sprintf((s), LUA_NUMBER_FMT, (n)) #define LUAI_MAXNUMBER2STR 32 /* 16 digits, sign, point, and \0 */ #define lua_str2number(s,p) strtol((s), (p), 10)こんな感じにすればいい。いわゆるdoprntは必要な部分だけ、きっちり書いて みたのだけど、doscanは面倒くさくなって2.10BSDからひっぱってきました。 2.10BSD、その清廉快活で無駄な気配りのない実装には、心洗われます...。 malloc、これもマイOSになかった部分なのだけど、同じく2.10BSDからもってき てみた。当時のmalloc,free,reallocというのは本当単純でfree(0)したらだめ。 realloc(0,x)したらだめという仕様だった。
> SH7262 Simple Monitor Build Jun 6 2010 16:50:45
mon> l
CCR1=0 CCR2=0
~>Local file name? a.mot
30676 lines transferred in 3 minutes 7 seconds
!
Read 720810 byte. success
Start address: 0x1c02f968
mon>
mon> g
Start address: 0x1c02f968
SIO@
stack_start: 0x1c080400
RAM data: 0x1c03be18-0x1c03bf60 328byte
bss: 0x1c03bf60-0x1c03c064 260byte
VBR: 0x1c000000 (0x1c000000)
FRQCR=104
PLL: x12, Internal x1/1, Peripheral x1/6
Ick=144MHz, Pck=24MHz, Bck=48MHz
STBCR2: ........ [0x0] 0
STBCR3: ......|. [0x2] 2
STBCR4: ........ [0x0] 0
STBCR5: ...|.... [0x10] 16
STBCR6: ........ [0x0] 0
STBCR7: ..|.|.|. [0x2a] 42
STBCR8: ........ [0x0] 0
user> test
->lua
Lua 5.1.4 Copyright (C) 1994-2008 Lua.org, PUC-Rio
> print "hello world"
hello world
> io.write("Hello world, from ",_VERSION,"!\n")
Hello world, from Lua 5.1!
> x=3
> y=5
> z=x-y
> io.write (x,"-",y,"=",z,"desu\n")
3-5=-2desu
>


















#define printf(fmt, args...) fprintf (stdout, fmt, ##args)にする改修。これ、大変...。マイOS、サポートアーキテクチャがH8/300H, H8/300, H8SX, SH2A, SH4A, ARM7, x86と無闇に多い故...。おまけにH8/3664に なるとRAM2KBだからね。ちょっとデバッグプリントが多くなるとメモリに入ら ないんだ。


















8:20 -404m 3.5℃→5.6℃ 34.7% 1013.1hPa 晴れ 5.5枚65℃ 10:20 -174m 9.3℃→10.7℃ 38.5% 1011.8hPa 晴れ 4枚65℃












9:25 晴 -184m 9.7℃→10.5℃ 57.8% 1001.6hPa 4枚60℃ 5枚68℃ 11:25 晴 49m 12.0℃ 49.1% 1000.7hPa 3.5枚 65〜68℃
最近のコメント