|
Namazu for hns による簡易全文検索 詳しくは 詳細指定/ヘルプを参照して下さい |
||||||||||||||||||||||||||||||||||||||||||||||||||
2002年06月07日(金) 旧暦 [n年日記]#1 [NetBSD] objdump を初めて(意味のあることに)使って見たwd0: drive supports PIO mode 4, DMA mode 2, Ultra-DMA mode 5 (Ultra/100) trap type 200 at 91c9dcから、objdump -d ./INSTALL/netbsd 0091c914 <pdc202xx_setup_channel>: ... 91c9bc: 40 82 01 e4 bne 91cba0 <pdc202xx_setup_channel+0x28c> 91c9c0: 80 1d 00 a8 lwz r0,168(r29) 91c9c4: 39 20 00 11 li r9,17 91c9c8: 54 00 07 3e clrlwi r0,r0,28 91c9cc: 81 7d 00 ac lwz r11,172(r29) 91c9d0: 7d 29 00 30 slw r9,r9,r0 91c9d4: 7f 6b 48 ae lbzx r27,r11,r9 91c9d8: 7c 00 06 ac eieio > 91c9dc: 7c 00 04 ac sync 91c9e0: 80 7d 00 98 lwz r3,152(r29) 91c9e4: 80 9d 00 9c lwz r4,156(r29) 91c9e8: 38 a0 00 50 li r5,80 91c9ec: 4b ff 04 0d bl 90cdf8 <pci_conf_read>view sys/dev/pci/pciide.c 3657 void 3658 pdc202xx_setup_channel(chp) 3659 struct channel_softc *chp; .... 3678 /* Per channel settings */ 3679 if (PDC_IS_262(sc)) { 3680 scr = bus_space_read_1(sc->sc_dma_iot, sc->sc_dma_ioh, 3681 PDC262_U66); 3682 st = pci_conf_read(sc->sc_pc, sc->sc_tag, PDC2xx_STATE);sys/arch/macppc/include/bus.h より 84 #define MACPPC_BUS_STRIDE_MASK 0x0000000f 88 #define __BA(t, h, o) ((void *)((h) + ((o) << ((t) & MACPPC_BUS_STRIDE_MASK)))) 223 #define bus_space_read_1(t, h, o) (in8(__BA(t, h, o)))sys/dev/pci/pciide_pdc202xx_reg.h: #define PDC262_U66 0x11 #define PDC2xx_STATE 0x50手で少し書加えて見ると: bne 91cba0 <pdc202xx_setup_channel+0x28c> if (PDC_IS_262(sc)) { lwz r0,168(r29) sc->sc_dma_ioh ; (h) li r9,17 PDC262_U66 ; (o) clrlwi r0,r0,28 lwz r11,172(r29) sc->sc_dma_iot ; (t) slw r9,r9,r0 shift left word ; (o) << lbzx r27,r11,r9 bus_space_read_1 eieio sync lwz r3,152(r29) sc->sc_pc lwz r4,156(r29) sc->sc_tag li r5,80 PDC2xx_STATE bl 90cdf8 <pci_conf_read>以上 gcc-2.95.3 の場合。gcc-3.x で作って見ようとしているが.. stdarg.h, varargs.h が混乱していて... __builtin_saveregs not supported by this target structure has no member named `__va'と思ったけれど、既に作ってあるものでも同じだったので、gcc-3.2 で: 34cb60: 40 82 01 e4 bne 34cd44 <pdc202xx_setup_channel+0x2cc> 34cb64: 80 1c 00 a8 lwz r0,168(r28) 34cb68: 39 20 00 11 li r9,17 34cb6c: 54 00 07 3e clrlwi r0,r0,28 34cb70: 81 7c 00 ac lwz r11,172(r28) 34cb74: 7d 29 00 30 slw r9,r9,r0 34cb78: 7f 6b 48 ae lbzx r27,r11,r9 34cb7c: 7c 00 06 ac eieio 34cb80: 7c 00 04 ac sync 34cb84: 80 7c 00 98 lwz r3,152(r28) 34cb88: 80 9c 00 9c lwz r4,156(r28) 34cb8c: 38 a0 00 50 li r5,80 34cb90: 4b fe bf 21 bl 338ab0 <pci_conf_read>r29 -> r28 は違うのはいいとして、全く同じ。 603e 問題かなぁ。 ;the sync operation is not broadcast onto the 603e bus interface.って書いてあるものがあるので。 The Enforce In-Order Execution of I/O (eieio) instruction is used to ensure memory reordering of noncacheable memory acess. Since the 603e does not reroder noncacheable memory access, the eieio instruction is treated as a no-op.ともある。最適化を変えて make した方がいいのかな。 何も考えないと -O2 になっている。 -O だと (pciide.o だけ -O ね。gcc-2.95.3) wd0: drive supports PIO mode 4, DMA mode 2, Ultra-DMA mode 5 (Ultra/100) trap type 200 at 34d47c Press a key to panic. panic: trapやはりだめのよう。しかし少し先に行っている 34d458: 80 1c 00 a8 lwz r0,168(r28) 34d45c: 54 00 07 3e clrlwi r0,r0,28 34d460: 39 20 00 11 li r9,17 34d464: 7d 29 00 30 slw r9,r9,r0 34d468: 81 7c 00 ac lwz r11,172(r28) 34d46c: 7c 00 06 ac eieio 34d470: 7c 00 04 ac sync 34d474: 7f e9 58 ae lbzx r31,r9,r11 34d478: 80 7c 00 98 lwz r3,152(r28) > 34d47c: 80 9c 00 9c lwz r4,156(r28)単に順が入替っているためか。-O 無でやって見よう。 wd0: drive supports PIO mode 4, DMA mode 2, Ultra-DMA mode 5 (Ultra/100) trap type 200 at 353d90 Press a key to panic.ちょっと違うところになっている。 00353d78 <__inb>: 353d78: 94 21 ff e0 stwu r1,-32(r1) 353d7c: 93 e1 00 1c stw r31,28(r1) 353d80: 7c 3f 0b 78 mr r31,r1 353d84: 7c 69 1b 78 mr r9,r3 353d88: 88 09 00 00 lbz r0,0(r9) 353d8c: 98 1f 00 08 stb r0,8(r31) >353d90: 7c 00 06 ac eieio 353d94: 7c 00 04 ac sync 353d98: 89 7f 00 08 lbz r11,8(r31) 353d9c: 55 60 06 3e clrlwi r0,r11,24 353da0: 7c 03 03 78 mr r3,r0 353da4: 48 00 00 04 b 353da8 <__inb+0x30> 353da8: 81 61 00 00 lwz r11,0(r1) 353dac: 83 eb ff fc lwz r31,-4(r11) 353db0: 7d 61 5b 78 mr r1,r11 353db4: 4e 80 00 20 blr ( つっこみ )
|
最近の日記 2024年07月03日 ・kicad oddity 2024年05月08日 ・comparison on ./buildsh tools 2024年05月06日 ・py-setuptools (python 3.11.9) ・make release took 1 hours and 10 min ・qemu invocation for 10.99.10 2024年05月05日 ・Windows 10 version ・serial connection ・bc bench 2024年05月04日 ・Trial on 10.99.10 ・another version (later trial) to succeed | ||