[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: -current sun4c weirdness
筒井です。
<200104190746.f3J7kUS07875@h053n005.iij.ad.jp>の記事において
masanobu@iij.ad.jpさんは書きました。
> sparc は gnu/dist/gcc/config/sparc/netbsd.h が
>
> #define CPP_PREDEFINES "-Dsparc -D__NetBSD__ -D__KPRINTF_ATTRIBUTE__ -Asystem(unix) -Asystem(NetBSD) -Acpu(sparc) -Amachine(sparc)"
>
> なので #define sparc 1 されているはず。
これなんですが、ところがどっこいというやつで sparc/netbsdelf.h だと
---
#define NETBSD_ELF
#include <netbsd.h>
#undef CPP_PREDEFINES
#define CPP_PREDEFINES "\
-D__sparc__ -D__sparc -D__NetBSD__ -D__ELF__ -D__KPRINTF_ATTRIBUTE__ \
-Asystem(unix) -Asystem(NetBSD) -Acpu(sparc) -Amachine(sparc)"
---
になってるので #ifdef sparc だとやっぱりまずいような…。
> しかも、カーネルであれば、${MACHINE}/conf/Makefile.${MACHINE} で
> -D${MACHINE} すれば解決できる。カーネルだからやってもいいし。
むかーし、 #ifdef sun3 とかを #ifdef __sun3__ とかに
直されてしまったことがあって、そのときに
#ifdef __${MACHINE_ARCH}__ は gcc が predefine してるもので
CPU specific なものに使い、 #ifdef ${MACHINE} は
kernel の Makefile で define して port specific なものに使うべき
とか書いたことがあるんですが sparc っていまだに
Makefile では -Dsparc してないんですよねえ。
(昔の) netbsd.h には書いてあったからなんですね。
...
もとの話題の isp_sbus.c ですが、 BUS_DMAMEM_COHERENT を
bus_dmamap_load() に渡すのは API 違反だという話がありました。
結局 sparc64 では IOMMU も cache を持っているという事情があって、
そのような cache を無効にしたい時に COHERENT を指定するのではなくて
有効にしたい時に BUS_DMA_STREAMING を指定する、って方向に
なったはずです。なのでどっちみちこの COHERENT の指定は消しとくべき
なんですが、どうしたもんだか。
#持ってないマシン/デバイスの件を(英語で)やり合うのはしんどくて…
---
Izumi Tsutsui
tsutsui@ceres.dti.ne.jp