1.3.82 include/asm/system.h:213: inconsistent operand constraints in an `asm'

(ulmo@q.net)
02 Apr 1996 11:44:42 -0500


The only assembler I know is 6502, so I can't debug it :(
This is just a post without fix :)

While compiling 1.3.82:

make[2]: Entering directory `/usr/src/linux/net/core'
make all_targets
make[3]: Entering directory `/usr/src/linux/net/core'
[...]
gcc -D__KERNEL__ -I/usr/src/linux/include -Wall -Wstrict-prototypes -O3 -fomit-frame-pointer -pipe -m486 -malign-loops=2 -malign-jumps=2 -malign-functions=2 -DCPU=586 -c -o firewall.o firewall.c
/usr/src/linux/include/asm/system.h: In function `unregister_firewall':
/usr/src/linux/include/asm/system.h:213: inconsistent operand constraints in an `asm'
make[3]: *** [firewall.o] Error 1
make[3]: Leaving directory `/usr/src/linux/net/core'
make[2]: *** [first_rule] Error 2
make[2]: Leaving directory `/usr/src/linux/net/core'
make[1]: *** [sub_dirs] Error 2
make[1]: Leaving directory `/usr/src/linux/net'
make: *** [linuxsubdirs] Error 2
Q:~$ uname -a
Linux Q.Net 1.3.81 #19 Sat Mar 30 12:56:45 EST 1996 i586
^^^
[That's right, I did a make mrproper recently (I had it to around 250 :) )
(the make mrproper was a workaround as posted here recently)]
Q:~$ gcc -v
Reading specs from /usr/lib/gcc-lib/i586-unknown-linux/2.7.2/specs
gcc version 2.7.2
Q:~$ as -v [isn't this irrelevent?]
GNU assembler version cygnus/linux-2.5.2l.15 (i486-linux), using BFD version cygnus/linux-2.5.2l.11

The code piece (from /usr/src/linux/include/asm/system.h):

197 static inline unsigned long __xchg(unsigned long x, void * ptr, int size)
198 {
199 switch (size) {
200 case 1:
201 __asm__("xchgb %b0,%1"
202 :"=q" (x), "=m" (*__xg(ptr))
203 :"0" (x), "m" (*__xg(ptr)));
204 break;
205 case 2:
206 __asm__("xchgw %w0,%1"
207 :"=r" (x), "=m" (*__xg(ptr))
208 :"0" (x), "m" (*__xg(ptr)));
209 break;
210 case 4:
211 __asm__("xchgl %0,%1"
212 :"=r" (x), "=m" (*__xg(ptr))
**>213 :"0" (x), "m" (*__xg(ptr)));
214 break;
215 }
216 return x;
217 }

I can tell that b is 8bit, w 16bit, l 32bit; %0 must be 32bit. Or
must it be %l0? No because lines 169-170 imply %1/%0 is correct. I'm
baffled.

Irrelevent?:

Q:~$ grep '=[ym]' /usr/src/linux/.config
CONFIG_MODULES=y
CONFIG_MODVERSIONS=y
CONFIG_KERNELD=y
CONFIG_NET=y
CONFIG_PCI=y
CONFIG_PCI_OPTIMIZE=y
CONFIG_SYSVIPC=y
CONFIG_BINFMT_AOUT=y
CONFIG_BINFMT_ELF=y
CONFIG_KERNEL_ELF=y
CONFIG_M586=y
CONFIG_BLK_DEV_FD=m
CONFIG_BLK_DEV_IDE=y
CONFIG_BLK_DEV_IDECD=y
CONFIG_BLK_DEV_TRITON=y
CONFIG_BLK_DEV_RAM=m
CONFIG_BLK_DEV_LOOP=y
CONFIG_BLK_DEV_MD=y
CONFIG_MD_LINEAR=y
CONFIG_MD_STRIPED=y
CONFIG_FIREWALL=y
CONFIG_NET_ALIAS=y
CONFIG_INET=y
CONFIG_IP_FORWARD=y
CONFIG_IP_MULTICAST=y
CONFIG_IP_FIREWALL=y
CONFIG_IP_ACCT=y
CONFIG_IP_ROUTER=y
CONFIG_NET_IPIP=y
CONFIG_IP_FIREWALL_VERBOSE=y
CONFIG_IP_MASQUERADE=y
CONFIG_IP_MROUTE=y
CONFIG_IP_ALIAS=y
CONFIG_INET_PCTCP=y
CONFIG_INET_RARP=m
CONFIG_SKB_LARGE=y
CONFIG_IPX=y
CONFIG_ATALK=m
CONFIG_NETLINK=y
CONFIG_RTNETLINK=y
CONFIG_SCSI=y
CONFIG_BLK_DEV_SD=y
CONFIG_CHR_DEV_ST=m
CONFIG_BLK_DEV_SR=m
CONFIG_CHR_DEV_SG=m
CONFIG_SCSI_CONSTANTS=y
CONFIG_SCSI_AUTO_BIOSP=y
CONFIG_SCSI_NCR53C7xx=y
CONFIG_NETDEVICES=y
CONFIG_DUMMY=m
CONFIG_SLIP=y
CONFIG_SLIP_COMPRESSED=y
CONFIG_SLIP_SMART=y
CONFIG_PPP=y
CONFIG_PLIP=m
CONFIG_EQUALIZER=m
CONFIG_NET_ALPHA=y
CONFIG_NET_VENDOR_3COM=y
CONFIG_EL3=m
CONFIG_ISDN=m
CONFIG_ISDN_PPP=y
CONFIG_ISDN_PPP_VJ=y
CONFIG_ISDN_MPP=y
CONFIG_ISDN_DRV_TELES=m
CONFIG_ISDN_DRV_ICN=m
CONFIG_QUOTA=y
CONFIG_MINIX_FS=y
CONFIG_EXT2_FS=y
CONFIG_FAT_FS=y
CONFIG_MSDOS_FS=y
CONFIG_VFAT_FS=y
CONFIG_UMSDOS_FS=y
CONFIG_PROC_FS=y
CONFIG_NFS_FS=y
CONFIG_SMB_FS=m
CONFIG_NCP_FS=m
CONFIG_ISO9660_FS=y
CONFIG_HPFS_FS=m
CONFIG_SYSV_FS=m
CONFIG_SERIAL=y
CONFIG_PRINTER=m
CONFIG_PSMOUSE=y
CONFIG_WATCHDOG=y
CONFIG_SOFT_WATCHDOG=y
CONFIG_SOUND=y
CONFIG_SB=y
CONFIG_UART6850=y
CONFIG_AUDIO=y
CONFIG_MIDI=y
CONFIG_YM3812=y
^^^^^^^^^^^^^^^^^^^^^^
I only use half of what I said y/m to.

(The reason my prompt says ~ is that I *am* in my home directory --
I use a nifty script that automatically checks for new kernels
and does a full installation with only one or two button presses.)