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