Subject: Re: More acorn32 breakage (was Re: Issues with new i2c framework)
To: Mike Pumford <mpumford@black-star.demon.co.uk>
From: Richard Earnshaw <rearnsha@arm.com>
List: port-arm
Date: 10/09/2003 10:46:45
> 
> Problem 2:
> /usr/tools//bin/arm--netbsdelf-gcc   -ffreestanding  -O2 -march=armv3m
> -mtune=strongarm -Wcomment -Werror -Wall -Wno-main
> -Wno-format-zero-length -Wpointer-arith -Wmissing-prototypes
> -Wstrict-prototypes -Wno-sign-compare -Wno-uninitialized  -Darm32 -I. 
> -I/work/src/sys/arch -I/work/src/sys -nostdinc -DNMBCLUSTERS="0x800"
> -DNBUF="0x800" -DLKM -DARM32_PMAP_NEW -DMAXUSERS=32 -D_KERNEL
> -D_KERNEL_OPT   -c
> /work/src/sys/arch/arm/arm32/fault.c/var/tmp//ccKPl5KD.s: Assembler
> messages:/var/tmp//ccKPl5KD.s:184: Error: selected processor does not
> support `ldrh r1,[r5]'
> 
> *** Failed target:  fault.o
> 
> 
> 
> fault.c contains an ARMV4 specific instruction ldrh. Which is not
> available on ARM6/7 and even StrongARM on acorn32 due to limitations of
> the CPU bus. I'm not sure what the correct fix for this is. Looking at
> CVS this has been in the code since revision 1.3 of this file but the
> new tools are being more strict and complaining about the problem.
> 

Well, the bad instruction is in badaddr_read, which is currently only 
needed for PCI support.   And PCI support is going to be unlikely on any 
machine that doesn't support ldrh.  So why not just include "opt_pci.h and 
wrap the entire badaddr_read function in

#if NPCI > 0

That way we don't get a dead function on other machines that don't have 
PCI either (eg on a Shark).

R.