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