Home | History | Annotate | Line # | Download | only in doc
HACKS revision 1.167
      1 # $NetBSD: HACKS,v 1.167 2016/05/10 19:32:47 mrg Exp $
      2 #
      3 # This file is intended to document workarounds for currently unsolved
      4 # (mostly) compiler bugs.
      5 #
      6 # Format:
      7 #   hack		title
      8 #   cdate		creation date
      9 #   mdate		mod date
     10 #   who			responsible developer
     11 #   port		...
     12 #  	  affected ports, space separated, if not "all"
     13 #   file		affected file : revision : line from : line to
     14 #  	  affected files and revision and line numbers describing hack
     15 #  	  multiple lines if necessary.
     16 #   pr			NNNN ...
     17 #  	  problem reports this hack works around, if known. Space
     18 #  	  separated.
     19 #   regress		src/regress/directory/where/test/found
     20 #  	  regression test directories, if available.
     21 #   descr
     22 #  	  insert short informal description (multi-line). (Longer ones
     23 #  	  should be in the PR database. More formal descriptions might
     24 #  	  be in the regress tree. See above).
     25 #   kcah
     26 #  	  closing bracket.
     27 #
     28 # this is a comment.
     29 
     30 hack	gcc-5.3 miscompiles crt* leading to ctor/dtor related crashes
     31 mdate	10 May 2016
     32 who	mrg martin
     33 file	lib/csu/common/Makefile.inc : 1.26, 1.27, 1.31
     34 descr
     35 	GCC assumes non-constant data is constant and assumes that it
     36 	can generate direct calls out of the ctor/dtor space, which
     37 	generally breaks their usage.  On SPARC, an explicit call to
     38 	0 is generated as "clr %g1; call %g1", for example.
     39 
     40 	Compiling with -O1 fixes this problem.
     41 pr	51121
     42 kcah
     43 
     44 hack	gcc-5.3 optimizes memset+malloc -> calloc inside calloc
     45 mdate	4 May 2016
     46 who	christos
     47 file	external/gpl2/lib/libmalloc/lib/Makefile 1.3 -> 1.5
     48 descr
     49 	resulting in infinite recursion; we prevent this with
     50 	-fno-builtin-malloc
     51 kcah
     52 
     53 hack	turn off tree-vrp for parts of ufs_lookup.c
     54 mdate	28 April 2016
     55 who	mrg christos
     56 file	src/sys/ufs/ufs/ufs_lookup.c : 1.144
     57 pr	51094
     58 descr
     59 	with -ftree-vrp enabled in ufs_lookup.c sometimes bad dir
     60 	panicks are see.
     61 hcah
     62 
     63 hack	netstat ieee1394 address printing.
     64 mdate	14 Nov 2000
     65 who	matt
     66 file	lib/libc/net/getnameinfo.c	: 1.32 : 497 : 503
     67 descr
     68 	Because the current implementation of IP over IEEE1394, the
     69 	fw device address contains more than just the IEEE1394 EUI-64.
     70 	So when printing out IEEE1394 addresses, ignore the extra stuff.
     71 kcah
     72 
     73 hack	xterm vs. libterm
     74 mdate	01 Aug 2000
     75 who	jdc
     76 file	xsrc/xc/programs/xterm/main.c	: 1.2 : 3609 : 3614
     77 pr	10383
     78 descr
     79 	In order to extend the termcap string over 1023 bytes, a ZZ entry was
     80 	introduced to point to a memory location containing the full entry.
     81 	Without this hack, xterm will export a termcap containing the ZZ
     82 	entry, which will then be ignored by libterm.  As xterm modifies the
     83 	exported termcap, this would cause those modifications to be ignored.
     84 kcah
     85 
     86 hack	wi-at-big-endian-bus
     87 cdate	15 Mar 2002
     88 who	martin
     89 file	dev/ic/wireg.h
     90 descr	Add an option to access the underlying bus in big endian byte order
     91 	to work around deficiencies in bus_space_{read,write}_* macros.
     92 	Those don't allow the implementation of a proper pcmcia bus space
     93 	tag.
     94 kcah
     95 
     96 hack	specific knowledge of colours in curses code
     97 cdate	Sun Apr  6 11:05:24 BST 2003
     98 who	jdc
     99 file	lib/libcurses/color.c : r1.24
    100 descr
    101 	Swap red/blue and yellow/cyan colours for COLOR_OTHER.
    102 	Fix is to enhance libtermcap to understand terminfo-style % sequences.
    103 	See also:
    104 	    http://mail-index.NetBSD.org/tech-userlevel/2003/04/06/0000.html
    105 kcah
    106 
    107 hack	Compensation for differing types of LINUX_USRSTACK and USRSTACK
    108 cdate	21 Aug 2003
    109 who	he
    110 file	sys/miscfs/procfs/procfs_linux.c : 1.14
    111 descr
    112 	Not all ports have LINUX_USRSTACK and/or USRSTACK defined as
    113 	literals/constants, but refer to variables of a type which is
    114 	not "unsigned long", causing compilation of procfs_linux.c to
    115 	fail with "makes integer from pointer without a cast".  This
    116 	is observed on e.g. the sun3 port.  Ideally the "types" for
    117 	symbols should be consistent across all ports.
    118 kcah
    119 
    120 hack	gcc-strict-aliasing
    121 cdate	6 August 2004
    122 who	junyoung
    123 pr	26516
    124 file	src/usr.sbin/racoon/racoon/Makefile : 1.21
    125 descr
    126 	GCC issues a warning "dereferencing type-punned pointer will break
    127 	strict-aliasing rules" when compiling
    128 	crypto/dist/kame/racoon/crypto/openssl.c with -O[23s]. Note that this
    129 	is due to use of type casting in a non-standard way in the code and
    130 	not a compiler bug. Once a new release of KAME with a proper fix
    131 	applied is imported this should be backed out.
    132 kcah
    133 
    134 hack	gcc4 wrong uninitialized variable
    135 mdate	10 May 2006
    136 who	mrg
    137 file	bin/ksh/eval.c			: 1.6
    138 file	bin/sh/histedit.c		: 1.39
    139 file	bin/sh/parser.c			: 1.60
    140 file	crypto/dist/heimdal/kdc/524.c	: 1.10
    141 file	crypto/dist/ssh/sftp.c		: 1.20
    142 file	crypto/dist/ssh/ssh-keysign.c	: 1.11
    143 file	dist/ipf/lib/hostname.c		: 1.2
    144 file	dist/ipf/tools/ipmon.c		: 1.8
    145 file	dist/ntp/ntpd/ntp_request.c	: 1.4
    146 file	dist/ntp/ntpd/refclock_shm.c	: 1.4
    147 file	dist/ntp/sntp/timing.c		: 1.3
    148 file	dist/pppd/pppstats/pppstats.c	: 1.3
    149 file	dist/smbfs/lib/smb/rap.c	: 1.6
    150 file	dist/tcpdump/print-zephyr.c	: 1.5
    151 file	distrib/utils/sysinst/aout2elf.c : 1.12
    152 file	gnu/libexec/uucp/uucico/uucico.c : 1.6
    153 file	lib/libc/citrus/citrus_csmapper.c : 1.6
    154 file	lib/libc/citrus/citrus_pivot_factory.c : 1.5
    155 file	lib/libc/inet/inet_cidr_ntop.c	: 1.3
    156 file	lib/libc/inet/inet_ntop.c	: 1.3
    157 file	lib/libc/stdio/vfwprintf.c	: 1.8
    158 file	libexec/ld.elf_so/arch/m68k/mdreloc.c : 1.20
    159 file	libexec/ld.elf_so/arch/powerpc/ppc_reloc.c : 1.40
    160 file	libexec/ld.elf_so/arch/sh3/mdreloc.c : 1.22
    161 file	libexec/ld.elf_so/arch/sparc/mdreloc.c : 1.39
    162 file	libexec/ld.elf_so/arch/sparc64/mdreloc.c : 1.39
    163 file	libexec/ld.elf_so/arch/vax/mdreloc.c	: 1.21
    164 file	libexec/ld.elf_so/arch/x86_64/mdreloc.c	: 1.27
    165 file	sbin/fsck_ext2fs/dir.c		: 1.19
    166 file	sbin/routed/rtquery/rtquery.c	: 1.18
    167 file	sys/arch/amd64/amd64/pmap.c	: 1.26
    168 file	sys/arch/i386/pci/piixpcib.c	: 1.4
    169 file	sys/arch/m68k/m68k/pmap_motorola.c	: 1.4
    170 file	sys/crypto/cast128/cast128.c	: 1.9
    171 file	sys/ddb/db_command.c		: 1.86
    172 file	sys/dev/cardbus/cardbus_map.c	: 1.21
    173 file	sys/dev/fss.c			: 1.25
    174 file	sys/dev/ic/igsfb.c		: 1.39
    175 file	sys/dev/ic/mb86950.c		: 1.5
    176 file	sys/dev/ic/midway.c		: 1.71
    177 file	sys/dev/kttcp.c			: 1.18
    178 file	sys/dev/rasops/rasops_bitops.h	: 1.9
    179 file	sys/dev/pci/cmpci.c		: 1.31
    180 file	sys/dev/pci/machfb.c		: 1.45
    181 file	sys/dev/usb/ohci.c		: 1.174
    182 file	sys/dev/usb/uhci.c		: 1.196
    183 file	sys/dev/rasops/rasops_bitops.h	: 1.9
    184 file	sys/dist/ipf/netinet/ip_nat.c	: 1.10
    185 file	sys/dist/ipf/netinet/ip_rpcb_pxy.c : 1.8
    186 file	sys/dist/pf/net/pf.c		: 1.22
    187 file	sys/fs/udf/udf_vnops.c		: 1.4
    188 file	sys/kern/kern_sig.c		: 1.219
    189 file	sys/kern/tty.c			: 1.181
    190 file	sys/net/bpf.c			: 1.116
    191 file	sys/net/zlib.c			: 1.26
    192 file	sys/netccitt/if_x25subr.c	: 1.37
    193 file	sys/netinet/in.c		: 1.107
    194 file	sys/netsmb/smb_smb.c		: 1.27
    195 file	sys/netsmb/smb_trantcp.c	: 1.22
    196 file	sys/nfs/nfs_serv.c		: 1.108
    197 file	sys/nfs/nfs_socket.c		: 1.129
    198 file	sys/nfs/nfs_syscalls.c		: 1.91
    199 file	sys/ufs/lfs/lfs_vfsops.c	: 1.207 [also (char *)]
    200 file	usr.bin/ftp/ftp.c		: 1.140
    201 file	usr.bin/find/function.c		: 1.54
    202 file	usr.bin/mail/tty.c		: 1.20
    203 file	usr.bin/msgc/msg_sys.def	: 1.33-1.34
    204 file	usr.bin/nl/nl.c			: 1.7
    205 file	usr.bin/systat/keyboard.c	: 1.23
    206 file	usr.bin/usbhidctl/usbhid.c	: 1.29
    207 file	usr.bin/vi/cl/cl_read.c		: 1.5
    208 file	usr.bin/vi/ex/ex_cscope.c	: 1.12
    209 file	usr.bin/vi/ex/ex_tag.c		: 1.19
    210 file	usr.bin/vi/vi/v_txt.c		: 1.15
    211 file	usr.sbin/altq/altqstat/qdisc_rio.c : 1.4
    212 file	usr.sbin/cron/do_command.c	: 1.19
    213 file	usr.sbin/timed/timed/slave.c	: 1.15
    214 descr
    215 	GCC 4.1 gets many uninitialised variable warnings wrong.  We should
    216 	really audit all the old hacks like this when older compilers are
    217 	removed from the tree, as many are probably no longer required.
    218 	The problem is that it does not recognize initialization via function
    219 	call pointer. I.e.
    220 		int p;
    221 		foo(&p);
    222 	does not mark p as initialized.
    223 kcah
    224 
    225 hack	gcc4 pointer sign and strict aliasing problems
    226 mdate	10 May 2006
    227 who	mrg
    228 file	bin/ed/Makefile			: 1.33
    229 file	distrib/utils/sysinst/Makefile.inc : 1.44
    230 file	distrib/utils/x_dhclient/Makefile : 1.15
    231 file	games/bcd/Makefile		: 1.5
    232 file	games/dab/Makefile		: 1.5
    233 file	games/larn/Makefile		: 1.17
    234 file	games/pom/Makefile		: 1.5
    235 file	lib/libasn1/Makefile		: 1.26
    236 file	lib/libcrypt/Makefile		: 1.17
    237 file	lib/libgssapi/Makefile		: 1.16
    238 file	lib/libhdb/Makefile		: 1.20
    239 file	lib/libkadm5clnt/Makefile	: 1.21
    240 file	lib/libkadm5srv/Makefile	: 1.25
    241 file	lib/libkrb5/Makefile		: 1.35
    242 file	lib/libssh/Makefile		: 1.6
    243 file	lib/libtelnet/Makefile		: 1.26
    244 file	libexec/getty/Makefile		: 1.14
    245 file	libexec/kadmind/Makefile	: 1.19
    246 file	libexec/kpasswdd/Makefile	: 1.14
    247 file	sbin/atactl/Makefile		: 1.3
    248 file	sbin/cgdconfig/Makefile		: 1.7
    249 file	sbin/clri/Makefile		: 1.13
    250 file	sbin/dkctl/Makefile		: 1.4
    251 file	sbin/dump/Makefile		: 1.33
    252 file	sbin/fdisk/Makefile		: 1.35
    253 file	sbin/fsck_ext2fs/Makefile	: 1.11
    254 file	sbin/fsck_ffs/Makefile		: 1.29
    255 file	sbin/fsdb/Makefile		: 1.18
    256 file	sbin/mount_smbfs/Makefile	: 1.4
    257 file	sbin/newfs/Makefile		: 1.30
    258 file	sbin/newfs_sysvbfs/Makefile	: 1.2
    259 file	sbin/restore/Makefile		: 1.23
    260 file	sbin/veriexecctl/Makefile	: 1.11
    261 file	sys/lib/libsa/Makefile		: 1.59
    262 file	sys/arch/evbarm/adi_brh/brh_machdep.c : 1.24
    263 file	usr.bin/awk/Makefile		: 1.9
    264 file	usr.bin/crontab/Makefile	: 1.24
    265 file	usr.bin/ctags/Makefile		: 1.8
    266 file	usr.bin/gzip/Makefile		: 1.10
    267 file	usr.bin/ssh/sftp/Makefile	: 1.10
    268 file	usr.bin/ssh/ssh/Makefile	: 1.25
    269 file	usr.bin/vi/build/Makefile	: 1.26
    270 file	usr.bin/telnet/Makefile		: 1.40
    271 file	usr.bin/tn3270/tn3270/Makefile	: 1.36
    272 file	usr.bin/tr/Makefile		: 1.4
    273 file	usr.sbin/amd/amd/Makefile	: 1.27
    274 file	usr.sbin/amd/amq/Makefile	: 1.14
    275 file	usr.sbin/amd/libamu/Makefile	: 1.20
    276 file	usr.sbin/amd/pawd/Makefile	: 1.5
    277 file	usr.sbin/bind/Makefile.inc	: 1.22
    278 file	usr.sbin/bind/libdns/Makefile	: 1.3
    279 file	usr.sbin/bind/named/Makefile	: 1.17
    280 file	usr.sbin/bootp/bootptest/Makefile : 1.2
    281 file	usr.sbin/chrtbl/Makefile	: 1.6
    282 file	usr.sbin/cron/Makefile		: 1.12
    283 file	usr.sbin/dhcp/Makefile.inc	: 1.20
    284 file	usr.sbin/dumplfs/Makefile	: 1.11
    285 file	usr.sbin/hprop/Makefile		: 1.13
    286 file	usr.sbin/installboot/Makefile	: 1.35
    287 file	usr.sbin/ipf/ipftest/Makefile	: 1.32
    288 file	usr.sbin/isdn/isdnd/Makefile	: 1.6
    289 file	usr.sbin/isdn/isdnmonitor/Makefile : 1.3
    290 file	usr.sbin/isdn/isdntel/Makefile	: 1.2
    291 file	usr.sbin/isdn/isdntrace/Makefile : 126
    292 file	usr.sbin/mopd/common/Makefile	: 1.10
    293 file	usr.sbin/mopd/mopd/Makefile	: 1.9
    294 file	usr.sbin/mopd/mopprobe/Makefile	: 1.7
    295 file	usr.sbin/makefs/Makefile	: 1.17
    296 file	usr.sbin/mscdlabel/Makefile	: 1.5
    297 file	usr.sbin/pkg_install/add/Makefile : 1.7
    298 file	usr.sbin/pkg_install/create/Makefile : 1.5
    299 file	usr.sbin/pkg_install/lib/Makefile : 1.28
    300 file	usr.sbin/ntp/ntpd/Makefile	: 1.10/1.11
    301 file	usr.sbin/ntp/ntptime/Makefile	: 1.4/1.5
    302 file	usr.sbin/pppd/Makefile.inc	: 1.3
    303 file	usr.sbin/pppd/pppd/Makefile	: 1.38
    304 file	usr.sbin/rarpd/Makefile		: 1.10
    305 file	usr.sbin/rbootd/Makefile	: 1.10
    306 file	usr.sbin/rpc.pcnfsd/Makefile	: 1.17
    307 file	usr.sbin/rtadvd/Makefile	: 1.9
    308 file	usr.sbin/tcpdump/Makefile	: 1.42
    309 file	usr.sbin/wiconfig/Makefile	: 1.3
    310 descr
    311 	GCC 4.1 warns on pointer sign comparision/assignments and lots of
    312 	code does not conform.  For now we use -Wno-pointer-sign and
    313 	-fno-strict-aliasing.
    314 kcah
    315 
    316 hack	disable ctf for gcc-4.8 build
    317 mdate	April 3 2014
    318 who	christos
    319 file	external/gpl3/gcc/usr.bin/Makefile.frontend	: 1.4
    320 file	external/gpl3/gcc/usr.bin/Makefile.backend	: 1.5
    321 descr
    322 	nbctfconvert -g -L VERSION -g fold-const.o
    323 	ERROR: fold-const.c: failed to get mapping for tid 79154 \
    324 		((null)) <13532>
    325 kcak
    326 
    327 hack	emacs aborting on exit (libgcc issue)
    328 mdate	7 November 2011
    329 who	christos
    330 file	external/gpl3/gcc/dist/gcc/unwind-dw2-fde.c : 1.2
    331 descr
    332 	GCC 4.5.3 now calls __unregister_frame_info_bases() on unloading/exit
    333 	to do just that. If the symbol requested is not found, then it aborts.
    334 	emacs 23.3 triggers this assertion. For now disable aborting, and
    335 	silently ignore.
    336 kcah
    337 
    338 hack	cross-building hack on Darwin
    339 mdate	20 July 2008
    340 who	agc
    341 file	src/distrib/common/Makefile.mdset	: 1.33
    342 descr
    343 	Darwin has problems with getopt() when used in mdsetimage -v,
    344 	due to the difference between BSD and libiberty() getopt
    345 	implementations, more fully described in
    346 	http://mail-index.netbsd.org/current-users/2008/06/27/msg003242.html
    347 	and the subsequent thread.  For just now, we just have an ugly
    348 	workaround not to call mdsetimage with the -v argument on Darwin
    349 kcah
    350 
    351 hack	avoid rebuilding asn1 libraries
    352 mdate	03 August 2008
    353 who	veego
    354 file	src/crypto/dist/heimdal/lib/asn1/gen.c	: 1.10
    355 file	src/lib/libasn1/Makefile	: 1.32
    356 file	src/lib/libhdb/Makefile	: 1.23
    357 file	src/lib/libgssapi/Makefile	: 1.20
    358 file	src/lib/libhx509/Makefile	: 1.3
    359 pr	9702 39185
    360 descr
    361 	asn1_compile does not check if generated header files do not have to
    362 	be rebuild.
    363 	Generate .hx files and copy it in the Makefiles if they changed.
    364 kcah
    365 
    366 hack	avoid gcc4 -O1 bug in loop optimize
    367 cdate	29 November 2008
    368 who	tsutsui
    369 file	src/sbin/ifconfig/Makefile	: 1.39
    370 pr	40036 40066
    371 descr
    372 	gcc -O1 seems to generate wrong code in loop optimize so that
    373 	ifconfig lo0 inet6 doesn't return error even if a kernel
    374 	doesn't have IPv6 support. (see the above PRs for details)
    375 	For workaround, specify -fno-loop-optimize on m68000,
    376 	which uses -O1 by default.
    377 kcah
    378 
    379 hack	MKPIE ldscript for /usr.sbin/crash
    380 cdate	22 April 2010
    381 who	christos
    382 file	src/usr.sbin/crash/Makefile	: 1.5
    383 file	src/usr.sbin/crash/ldscript.crash	: 1.1
    384 pr	N/A
    385 descr
    386 	fixed in binutils-2.20.1. Linking with MKPIE=yes causes overlapping
    387 	sections
    388 kcah
    389 
    390 hack	Disable fortification for /usr/bin/makeinfo
    391 cdata	24 Mar 2014
    392 who	tron
    393 file	src/gnu/usr.bin/texinfo/makeinfo/Makefile	: 1.8
    394 pr	N/A
    395 descr
    396 	If "makeinfo" is compiled with "-D_FORTIFY_SOURCE=2" using GCC 4.8.3
    397 	it fails to process certain texinfo files, e.g. "cl.texi"
    398 	included in the Emacs 24.3 distribution.
    399 kcah
    400 
    401 hack	Disable Stack Smash Protection for /usr/X11R7/bin/xauth
    402 cdata	05 Apr 2014
    403 who	tron
    404 file	src/external/mit/xorg/bin/xauth/Makefile	: 1.4
    405 pr	N/A
    406 descr
    407 	If "xauth" is compile with "USE_SSP" set to "yes" it fails
    408 	mysteriously with an error message like this:
    409 
    410 	/usr/X11R7/bin/xauth:  file /foo/bar/.Xauthority does not exist
    411 	/usr/X11R7/bin/xauth:  unable to link authority file /foo/bar/.Xauthority, use /foo/bar/.Xauthority
    412 
    413 	The compiler seems to get confused about the two filename variables
    414 	used in the link(2) system call.
    415 kcah
    416 
    417 hack	g++ 5.x barfs on volatile in constexpr initializers
    418 cdata	27 Aug 2015
    419 who	pooka
    420 file	src/lib/libpthread/pthread_types.h	: 1.17
    421 pr	lib/49989
    422 descr
    423 	Trying to use e.g. pthread_mutex_t m = PTHREAD_MUTEX_INITIALIZER
    424 	in C++ results in:
    425 		error: temporary of non-literal type '__pthread_mutex_st'
    426 		in a constant expression
    427 		constexpr mutex() _NOEXCEPT : __m_(PTHREAD_MUTEX_INITIALIZER) {}
    428 		[...]
    429 		include/pthread_types.h:101:8: note: '__pthread_mutex_st' is
    430 		not literal because:
    431 		struct __pthread_mutex_st {
    432 		^
    433 		include/pthread_types.h:103:17: note:   non-static data
    434 		member '__pthread_mutex_st::ptm_errorcheck' has volatile type
    435 		pthread_spin_t ptm_errorcheck;
    436 kcah
    437 
    438 hack	libm cabs{,f,l} and g++
    439 cdata	11 Jan 2016
    440 who	christos
    441 pr	lib/50646
    442 file	src/external/gpl3/gcc.old/dist/libstdc++-v3/include/std/complex : 1.2
    443 file	src/external/gpl3/gcc/dist/libstdc++-v3/include/std/complex : 1.2
    444 descr
    445 	Our cabs and cabsf have a different argument format on some architectures
    446 	and for that we have created in libm/compat_cabs{,f}.c. The standard
    447 	versions in libc are __c99_cabs{,f,l} and there are __RENAME()'s in
    448 	<complex.h>. G++ uses __builtin_cabs{,f,l} to implement those and they
    449 	translate by default to cabs{,f,l} which gets defined to cabs{,f} (the
    450 	wrong function) and an undefined cabsl. I've changed <complex> to use
    451 	the __c99_cabs{,f,l} directly. Using the __builtin_cabs{,f,l} in gcc is
    452 	still broken.
    453 kcah
    454 
    455 port	vax
    456 
    457 	hack	gcc4/vax ICE
    458 	cdate	
    459 	who	tsutsui
    460 	file	sys/arch/vax/conf/Makefile.vax
    461 	descr
    462 		GCC4 on vax gets ICE on compiling sys/ddb/db_command.c.
    463 		-fno-tree-ter prevents it so add it to COPTS.
    464 	kcah
    465 
    466 	hack	gcc4/vax compiler crash
    467 	cdate	Fri Jun 30 22:39:12 PDT 2006
    468 	who	mrg
    469 	file	bin/csh/Makefile	: 1.27
    470 	file	lib/i18n_module/UTF7/Makefile	: 1.2
    471 	descr
    472 		GCC4 on vax crashes.  -O0 stops it happening so far...
    473 	kcah
    474 
    475 	hack	vax Toolchain bug
    476 	cdate	28 Mar 2003
    477 	who	he
    478 	file	sys/arch/vax/vax/intvec.S : 1.5
    479 	descr
    480 		Workaround for PR toolchain/20924.  The assembler apparently
    481 		tries to range-check byte offsets when it doesn't have
    482 		sufficient information to make that decision.
    483 		Workaround uses `brw' instead of `brb' instruction.
    484 	kcah
    485 
    486 	hack	declare boolean_t in two IPF user-mode programs
    487 	cdate	Tue Mar  7 19:19:20 CET 2006
    488 	who	he
    489 	file	dist/ipf/ipsend/iptests.c : 1.8
    490 		dist/ipf/ipsend/sock.c : 1.7
    491 	descr
    492 		The IPF user-mode programs ipsend and iptest first
    493 		include <sys/types.h> without _KERNEL defined, and
    494 		later include <sys/file.h> with _KERNEL defined.
    495 		This causes a build failure when building for vax,
    496 		since <sys/device.h> ends up being included without
    497 		bollean_t being defined by <sys/types.h>.
    498 		Build failure and further details documented in
    499 		PR#32907.
    500 	kcah
    501 
    502 	hack	pcc 0.9.9 large string literals
    503 	cdat	8 July 2008
    504 	who	gmcgarry
    505 	file	sys/conf/param.c : 1.58
    506 	descr
    507 		Workaround for pcc 0.9.9 not handling large string literals
    508 		which causes kernels with 'options INCLUDE_CONFIG_FILE' to
    509 		fail compilation.
    510 		There is a proposal on the pcc mailing list to stuff config
    511 		file in ELF section.
    512 	kcah
    513 
    514 	hack	xorg warnings
    515 	cdat	30 July 2008, 3 June, 2013
    516 	who	mrg
    517 	file	external/mit/xorg/lib/libSM/Makefile : 1.2
    518 		external/mit/xorg/lib/libX11/Makefile.libx11 : 1.10
    519 		external/mit/xorg/lib/libXext/Makefile : 1.2
    520 		external/mit/xorg/lib/libXfont/Makefile : 1.2
    521 	descr
    522 		Disable several warnings or use -Wno-error across Xorg sources
    523 		while we get them working
    524 	kcah
    525 
    526 	hack	32 bit time leftovers
    527 	cdat	11 January 2009
    528 	who	christos
    529 	file	lib/libc/time/localtime.c : 1.41
    530 		lib/libc/time/zic.c : 1.23
    531 	descr
    532 		The timezone compiled files still contain 32 bit time_t
    533 		quantities. I did not want to version the files because
    534 		the ``parser'' is too ugly for words. What needs to be
    535 		done, is to rewrite the parser from scratch also to avoid
    536 		potential core-dumps from parsing invalid files.
    537 	kcah
    538 
    539 	hack	32 bit time leftovers
    540 	cdat	11 January 2009
    541 	who	christos
    542 	file	various
    543 	descr
    544 		Many filesystem on-disk formats have 32 bit times.
    545 	kcah
    546 
    547 	hack	gcc 4.5 fsdb miscompile
    548 	date	Sat Nov  9 11:03:02 EST 2013
    549 	who	christos
    550 	file	src/sbin/fsdb/Makefile : 1.36 (and earlier)
    551 	descr
    552 		src/sbin/fsdb/fsdb.c: In function 'findblk':
    553 		src/sbin/fsdb/fsdb.c:610:1: error: unrecognizable insn:
    554 		(insn 941 940 942 134 src/sbin/fsdb/fsdb.c:589 (set (reg:SI 604)
    555 		    (subreg:SI (mem/s/j:DI (plus:SI (mult:SI (reg:SI 602)
    556                         (const_int 8 [0x8]))
    557                     (reg/f:SI 601)) [0 curinode.99_378->dp2.di_ib S8 A32]) 4)) \
    558 			-1 (nil))
    559 		src/sbin/fsdb/fsdb.c:610:1: internal compiler error: in \
    560 		extract_insn, at recog.c:2103
    561 	kcah
    562 
    563 	hack	gcc 4.8 gcc miscompiles
    564 	date	Sat Nov  9 16:35:18 EST 2013
    565 	who	christos
    566 	file	distrib/utils/x_ping/Makefile
    567 	file	distrib/vax/miniroot/Makefile.inc
    568 	file	distrib/vax/ramdisk/Makefile
    569 	file	external/gpl3/gdb/lib/libdecnumber/Makefile
    570 	file	sbin/fsdb/Makefile
    571 	file	sbin/newfs_ext2fs/Makefile
    572 	file	sbin/ping/Makefile
    573 	file	usr.sbin/lmcconfig/Makefile
    574 	file	usr.sbin/mtrace/Makefile
    575 	descr
    576 		external/gpl3/gcc/dist/gcc/expmed.c:2781:1:
    577 		internal compiler error: in change_address_1, at emit-rtl.c:2019
    578 		external/gpl3/gcc/dist/gcc/recog.c:770:1:
    579 		internal compiler error: in change_address_1, at emit-rtl.c:2019
    580 		external/gpl3/gcc/dist/libdecnumber/decNumber.c:7214:3:
    581 		internal compiler error: in change_address_1, at emit-rtl.c:2019
    582 		sbin/ping/ping.c:679:1:
    583 		internal compiler error: in change_address_1, at emit-rtl.c:2019
    584 		sbin/newfs_ext2fs/mke2fs.c:681:1:
    585 		internal compiler error: in reload_combine_note_use,
    586 		at postreload.c:1561
    587 		external/gpl3/gdb/dist/libdecnumber/decNumber.c:7214:3:
    588 		internal compiler error: in change_address_1, at emit-rtl.c:2019
    589 		usr.sbin/lmcconfig/lmcconfig.c:939:3:
    590 		internal compiler error: in reload_combine_note_use,
    591 		at postreload.c:1561
    592 		usr.sbin/mtrace/mtrace.c:1655:1:
    593 		internal compiler error: in change_address_1, at emit-rtl.c:2019
    594 	kcah
    595 
    596 port	arm
    597 
    598 	hack	gcc-unsigned-compare
    599 	cdate	09 Mar 2002
    600 	mdate	18 Mar 2002
    601 	who	bjh21
    602 	file	dist/bind/lib/nameser/ns_parse.c : 1.3
    603 	file	dist/dhcp/minires/ns_parse.c : 1.3
    604 	file	dist/dhcp/omapip/result.c : 1.2
    605 	file	dist/dhcp/server/failover.c : 1.3
    606 	file	gnu/dist/toolchain/bfd/bfd.c : 1.2
    607 	file	gnu/dist/toolchain/bfd/format.c : 1.2
    608 	file	gnu/dist/toolchain/gdb/target.c : 1.2
    609 	file	sys/kern/vfs_subr.c : 1.172
    610 	descr	When checking that a potentially-unsigned enum is >= 0, assign
    611 		it to an int first.  This is necessary to avoid "comparison is
    612 		always true" warnings with -fshort-enums.  Casting to an int
    613 		really should be enough, but turns out not to be.
    614 	kcah
    615 
    616 	hack	gcc-4.5 arm CNAME hostname lookup failure on
    617 		certain DNS environment (probably -ftree-ter problem)
    618 	cdate	Sat Dec 24 04:59:00 UTC 2011
    619 	mdate	
    620 	who	tsutsui
    621 	file	lib/libc/net/Makefile.inc 1.79
    622 	descr	Hostname lookup against CNAMEs by some commands fails
    623 		on certain DNS environments if lib/libc/net/gethnamaddr.c
    624 		(ping(8) etc) and lib/libc/net/getaddrinfo.c (ftp(1) etc)
    625 		are compiled with -O2, even though nslookup(1) against
    626 		the same CNAME returns proper hostname.
    627 		They works properly if compiled with -O2 -fno-tree-ter.
    628 		Also -O2 fails but -O2 -fno-tree-ter works on the following
    629 		test case in gcc bugzilla:
    630 		http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48863#c4
    631 	kcah
    632 
    633 	hack	gcc-4.5 arm without -fno-tree-vrp generate broken code
    634 	cdate	Wed Nov 14 13:02:02 JST 2012
    635 	who	msaitoh
    636 	file	lib/libc/softfloat/Makefile.inc
    637 	pr	46953
    638 	regress	src/tests/lib/libm/t_cbrt
    639 	regress	src/tests/lib/libm/t_ceil
    640 	regress	src/tests/lib/libm/t_exp
    641 	regress	src/tests/lib/libm/t_log
    642 	regress	src/tests/lib/libm/t_scalbn
    643 	regress	src/tests/lib/libm/t_sinh
    644 	regress	src/tests/lib/libm/t_sqrt
    645 	descr	Gcc has a bug in tree optimization. For adddf3,
    646 		-INF + -INF returns 0 without -fno-tree-vrp.
    647 		Debugging with -fdump-tree-all shows that
    648 		softfloat.c.021t.cleanup_cfg is ok but softfloat.c.023t.ssa
    649 		is broken.
    650 	kcah
    651 
    652 port	sh3
    653 
    654 	hack	gcc4-sh3-bz2
    655 	cdate	Sun May 21 03:34:57 UTC 2006
    656 	mdate	Fri May 16 13:13:00 UTC 2008
    657 	who	mrg, tsutsui
    658 	file	lib/libbz2/Makefile	: 1.10
    659 	descr
    660 		The in-tree GCC 4.1-based compiler generated too-far
    661 		pc-relative addresses.  Hack is to build with
    662 		-fno-loop-optimize.
    663 	kcah
    664 
    665 port	sh3eb
    666 	hack	gcc4.8.1
    667 	cdate	Thu Nov  7 16:31:23 EST 2013
    668 	who	christos
    669 	file	src/sys/rump/net/lib/libnetbt/Makefile	: 1.2
    670 	desrc
    671 		for profiling
    672 		compile l2cap_signal.c with -O0 to avoid:
    673 		./netbt/l2cap_signal.c:36:
    674 		/p/netbsd/cvsroot/src/sys/rump/net/lib/libnetbt/../../../../\
    675 		netbt/l2cap_signal.c: In function 'l2cap_recv_signal':
    676 		./sh3/byte_swap.h:20:2: error: 'asm' operand requires \
    677 		impossible reload
    678 		  __asm volatile ("swap.b %1,%0" : "=r"(rval) : "r"(x));
    679 	kcah
    680 
    681 port	sh3el
    682 	hack	gcc4.8.1
    683 	cdate	Fri Nov  8 19:27:01 EST 2013
    684 	who	christos
    685 	file	src/external/bsd/libevent/lib/libevent/Makefile	: 1.2
    686 	desrc
    687 		for profiling
    688 		compile evdns.c with -O0 to avoid:
    689 		./sh3/byte_swap.h:20:2: error: 'asm' operand requires \
    690 		impossible reload
    691 		  __asm volatile ("swap.b %1,%0" : "=r"(rval) : "r"(x));
    692 	kcah
    693 	
    694 	hack	gcc4.8.1
    695 	cdate	Fri Nov  8 19:34:48 EST 2013
    696 	who	christos
    697 	file	src/usr.sbin/racoon/Makefile	: 1.27
    698 	desrc
    699 		for profiling
    700 		compile ipsec_doi.c with -O0 to avoid:
    701 		./sh3/byte_swap.h:20:2: error: 'asm' operand requires \
    702 		impossible reload
    703 		  __asm volatile ("swap.b %1,%0" : "=r"(rval) : "r"(x));
    704 	kcah
    705 
    706 port	m68000
    707 
    708 	hack	gcc4-m68000
    709 	cdate	Fri Feb  8 10:29:37 PST 2008
    710 	mdate	Sun May  4 15:37:19 UTC 2008
    711 	who	mrg, tsutsui
    712 	file	rescue/Makefile	: 1.21
    713 	file	sbin/dump_lfs/Makefile	: 1.9
    714 	file	sbin/fsck_ffs/Makefile	: 1.35
    715 	file	sbin/fsdb/Makefile	: 1.22
    716 	file	share/mk/sys.mk	: 1.96
    717 	file	usr.sbin/ndbootd/Makefile	: 1.5
    718 	descr
    719 		Several internal compiler errors with gcc -O1
    720 		around 64bit integer arithmetic.
    721 		This hack uses -O1 and adds some -fno-tree-foo options
    722 		to avoid the problem.
    723 		This might be related with GCC Bugzilla Bug 32424.
    724 	kcah
    725 
    726 port	m68k,sh3,vax
    727 
    728 	hack	gcc-4.8.1
    729 	cdate	Wed Nov  6 20:41:35 EST 2013
    730 	who	christos
    731 	file	src/external/gpl3/gcc/libstdc++-v3/Makefile : 1.6
    732 	descr
    733 		compile hashtable_c++0x.cc with -O2 instead of -Os to
    734 		produce missing instantiation of std::lower_bound expansion
    735 		for unsigned long.
    736 	kcah
    737 
    738 port	sparc
    739 
    740 	hack	avoid NULL pointer derefs in savefpstate IPIs and GCC 4.5.3
    741 	cdate	Sun Aug 14 19:26:48 PDT 2011
    742 	who	mrg
    743 	file	sys/arch/sparc64/sparc/cpu.c : 1.234
    744 	file	sys/arch/sparc64/sparc/cpuvar.h : 1.90
    745 	file	sys/arch/sparc64/sparc/genassym.cf : 1.67
    746 	file	sys/arch/sparc64/sparc/locore.s : 1.265
    747 	descr
    748 		Something is wrong with GCC 4.5.3 and the savefpstate IPI.
    749 		Post newlock2 there was a bug where a lock was reduced from
    750 		IPL_SCHED to IPL_VM (?) and occasionally savefpstate IPI
    751 		would crash due to NULL IPI.  This was fixed by re-using the
    752 		right IPL value.  However, GCC 4.5.3 build kernels have the
    753 		same problems.  For now, the hack is re-instated.
    754 	kcah
    755 
    756 
    757 port	mips
    758 
    759 	hack	mips-shared-linker-load-address
    760 	cdate	Fri Oct  7 08:33:10 UTC 2005
    761 	who	simonb
    762 	file	src/sys/kern/exec_elf32.c : 1.107
    763 	descr
    764 		With COMPAT_16 or previous enabled (which enables
    765 		ELF_INTERP_NON_RELOCATABLE) a recent ld.elf_so will
    766 		load and run at address 0.  The check to fix this in
    767 		rev 1.107 only checks the first psection of the ELF
    768 		executable, which may not be loadable.  A more correct
    769 		fix is to check the first loadable psection instead of
    770 		just the first psection.
    771 	kcah
    772 
    773 	hack	mips-duplicate-ras-end-label
    774 	cdate	Sat Sep  2 23:29:42 2006
    775 	who	martin
    776 	file	src/regress/sys/kern/ras/ras3/Makefile : 1.3
    777 	descr
    778 		Add -fno-reorder-blocks to CFLAGS to avoid duplicate
    779 		labels by duplicated __asm output from RAS_END()
    780 		macro.
    781 	kcah
    782 
    783 	hack	mips-mcount-assembler-warning
    784 	cdate	Tue Jul 29 14:16:52 UTC 2008
    785 	who	lukem
    786 	file	src/lib/libc/gmon/Makefile.inc : 1.8
    787 	descr
    788 		Workaround for PR port-mips/39192.
    789 		common/lib/libc/gmon/mcount.c generates a (fatal)
    790 		assembler warning on MIPS:
    791 			Warning: No .cprestore pseudo-op used in PIC code
    792 		Add COPTS.count.c+=-Wa,--no-warn to avoid -Wa,--fatal-warnings
    793 	kcah
    794 
    795 port	i386
    796 
    797 	hack	use volatile intermediate variable to enforce rounding
    798 	cdate	Tue Aug  1 22:15:55 MEST 2006
    799 	who	drochner
    800 	file	src/lib/libm/src/lrintf.c : 1.4
    801 	file	src/lib/libm/src/s_rintf.c : 1.8
    802 	descr
    803 		gcc-4 does subsequent operations on "float" values within
    804 		the i387 FPU without rounding the intermediate results
    805 	kcah
    806 
    807 port	x86
    808 	hack	turn off optimization for biosdisk_ll.c because otherwise
    809 		we are pass the wrong arguments to biosdisk_read(). 
    810 		$ cd /usr/src/sys/arch/i386/floppies/bootflopp-com
    811 		$ qemu-system-i386 -nographic -fda boot-com1.fs -boot a
    812 	who	christos
    813 	file	src/sys/arch/i386/stand/lib/Makefile : 1.38
    814 	descr
    815 		Turning on DISK_DEBUG shows the problem. We should find
    816 		out which option is causing this.
    817 	hcah
    818 
    819 port	powerpc
    820 
    821 	hack	avoid using __builtin_return_address(0) because it fails in
    822 		Xorg's module loader
    823 	cdate	Sat Sep 27 03:52:05 UTC 2008
    824 	who	macallan
    825 	file	src/libexec/ld.elf_so/rtld.c : 1.121
    826 	descr
    827 		workaround for PR port-macppc/37812
    828 	kcah
    829 
    830 	hack	define TARGET_SECURE_PLT and HAVE_AS_TLS because when
    831 		building the native compiler via build.sh those don't defined
    832 		properly.
    833 	cdate	Sat Mar 12 08:00:00 UTC 2011
    834 	who	matt
    835 	file	src/gnu/dist/gcc4/gcc/config/rs6000/netbsd.h
    836 	descr
    837 		see above
    838 	kcah
    839 
    840 port	powerpc64
    841 
    842 	hack	include _errno.c in libposix so that __errno resolves. It
    843 		should resolve from libc's errno, but somehow it does not.
    844 		Linker bug?
    845 	cdate	Thu Oct 27 13:19:47 EDT 2011
    846 	who	christos
    847 	file	src/lib/libposix/Makefile: 1.15
    848 	file	src/lib/librt/Makefile: 1.14
    849 	descr
    850 		workaround for:
    851 		    libposix_pic.a(cerror.pico)(.text+0x14): unresolvable \
    852 		    R_PPC64_REL24 relocation against symbol `.__errno'
    853 	kcah
    854 
    855 	hack	rename data() function in mdocml to avoid redefined error.
    856 		Compiler/Assembler bug?
    857 	cdate	Sat Oct 29 11:16:01 EDT 2011
    858 	who	christos
    859 	file	src/external/bsd/mdocml/tbl_data.c: 1.2
    860 	descr
    861 		workaround for:
    862 		    {standard input}: Assembler messages:
    863 		    {standard input}:105: Error: symbol `.data' is already \
    864 		    defined
    865 	kcah
    866 
    867 port	emips
    868 
    869 	hack	Add nop between ctc1 and mtc0 to avoid assembler internal
    870 		error
    871 	cdate	Sat Oct 29 16:57:34 EDT 2011
    872 	who	christos
    873 	file	src/sys/arch/mips/mips/mips_fpu.c: 1.7
    874 	descr
    875 		workaround for:
    876 		    {standard input}: Assembler messages:
    877 		    {standard input}:730: Internal error!
    878 		    Assertion failure in append_insn at /usr/src/external/gpl3/\
    879 		    binutils/dist/gas/config/tc-mips.c line 2910.
    880 	kcah
    881 
    882 port	ia64
    883 
    884 	hack	libc hesiod.c file does not compile with -O2 (internal
    885 		compiler error in gcc 4.5.3)
    886 	cdate	Thu Dec 27 08:05:43 CET 2012
    887 	who	martin
    888 	file	src/lib/libc/net/Makefile.inc: 1.82
    889 	descr
    890 		workaround for:
    891 		{standard input}: Assembler messages:
    892 		{standard input}:1507: Warning: Use of 'mov' may violate WAW dependency 'GR%, % in 1 - 127' (impliedf), specific resource number is 15
    893 		{standard input}:1506: Warning: This is the location of the conflicting usage
    894 		{standard input}: Error: 2 warnings, treating warnings as errors
    895 	kcah
    896 
    897 	hack	libelf libelf_extended.c compiler error in gcc 4.5.3
    898 	cdate	Thu Dec 27 09:05:51 CET 2012
    899 	who	martin
    900 	file	src/external/bsd/libelf/lib/Makefile: 1.3
    901 	descr
    902 		workaround for:
    903 		{standard input}: Assembler messages:
    904 		{standard input}:87: Warning: Use of 'adds' may violate RAW dependency 'GR%, % in 1 - 127' (impliedf), specific resource number is 33
    905 		{standard input}:87: Warning: Only the first path encountering the conflict is reported
    906 		{standard input}:85: Warning: This is the location of the conflicting usage
    907 	kcah
    908 
    909 	hack	compiler error with gcc 4.5.x
    910 	cdate	Thu Dec 27 15:15:25 CET 2012
    911 	who	martin
    912 	file	src/crypto/external/bsd/netpgp/lib/verify/Makefile: 1.5
    913 	descr
    914 		workaround for:
    915 		{standard input}: Assembler messages:
    916 		{standard input}:22979: Warning: Use of 'mov' may violate WAW dependency 'GR%, % in 1 - 127' (impliedf), specific resource number is 8
    917 		{standard input}:22978: Warning: This is the location of the conflicting usage
    918 	kcah
    919 
    920 	hack	libgcc unwind dummy function
    921 	cdate	Fri Apr 17 14:31:03 CEST 2015
    922 	who	martin
    923 	file	src/external/gpl3/gcc/dist/libgcc/config/ia64/unwind-ia64.c: 1.4
    924 	descr
    925 		Add an empty _Unwind_FindTableEntry() implementation.
    926 		In the end we will use our libc stuff, and this should
    927 		go away again.
    928 	kcah
    929 
    930 port	x68k
    931 
    932 	hack	compiler error with gcc 4.5.x
    933 	cdate	Fri May 24 13:23:01 EDT 2013
    934 	who	christos
    935 	file	src/external/gpl3/gcc/usr.bin/bakend/Makefile: 1.17
    936 		xsrc/external/mit/xorg/lib/libGLU/Makefile: 1.11
    937 	descr
    938 		workaround for:
    939 		internal compiler error: in cselib_record_set, at cselib.c:1999
    940 	kcah
    941 
    942 hack	fallback to /usr/bin/clang-cpp in rpcgen
    943 cdate	Wed Jun  5 15:49:27 CEST 2013
    944 who	joerg
    945 file	src/usr.bin/rpcgen/rpc_main.c
    946 descr
    947 	It is undecided which compiler owns /usr/bin/cpp and whether it should
    948 	exist in a MKGCC=no world. To allow rpcgen to work out-of-the-box,
    949 	if either gcc or clang is installed, use /usr/bin/clang-cpp as fallback.
    950 	This applies only if RPCGEN_CPP is not set and /usr/bin/cpp is not executable.
    951 kcah
    952 
    953 port	hppa
    954 
    955 	hack	compiler error with gcc 4.5.x
    956 	cdate	Tue Jul 23 07:42:28 BST 2013
    957 	who	skrll
    958 	file	src/sys/lib/libkern/Makefile.libkern: 1.26
    959 	descr
    960 		workaround for unanalysed codegen bug affecting md5c.c.
    961 	kcah
    962 
    963 	hack	gdb vs _rtld_debug_state problem
    964 	cdate	Thu Mar  5 09:49:53 UTC 2015
    965 	who	skrll
    966 	file	src/libexec/ld.elf_so/rtld.c: 1.175
    967 	descr
    968 		workaround for problem where gdb misses the breakpoint on
    969 		_rtld_debug_state when the function is only the
    970 		bv,n %r0(%rp) instruction - the nullify seems to
    971 		confuse something
    972 	kcah
    973 
    974 port	mips64*
    975 hack	compiler crashes on mips64* with optimization enabled
    976 cdate	Tue May 13 18:46:48 UTC 2014
    977 who	macallan
    978 file	src/external/lgpl3/gmp/lib/libgmp/arch/mips64eb/Makefile.inc: 1.6
    979 	src/external/lgpl3/gmp/lib/libgmp/arch/mips64eb/config.h: 1.5
    980 	src/external/lgpl3/gmp/lib/libgmp/arch/mips64el/Makefile.inc: 1.6
    981 	src/external/lgpl3/gmp/lib/libgmp/arch/mips64el/config.h: 1.5
    982 descr	workaround for n32 gcc doing unaligned 64bit accesses when optimizing
    983 pr	48696
    984 kcah
    985 
    986 port	vax
    987 hack	compile boot with -O1
    988 cdate	Sat May 24 09:40:58 CEST 2014
    989 who	martin
    990 file	src/sys/arch/vax/boot/boot/Makefile: 1.41
    991 descr	/boot does not work when compiled with -O2 and gcc 4.8
    992 kcah
    993 
    994 port	arm
    995 hack	avoid using labels in a 12-bit constant.
    996 who	matt
    997 file	crypto/external/bsd/openssl/lib/libcrypto/arch/arm/aes-armv4.S: 1.2
    998 descr	workaround for clang misassembling an instruction
    999 kcah
   1000