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