xref: /netbsd-src/doc/HACKS (revision 181254a7b1bdde6873432bffef2d2decc4b5c22f)
1# $NetBSD: HACKS,v 1.208 2020/08/10 06:46:27 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
30hack	llvm needs no-unused-command-line-argument
31mdate	10 May 2020
32who	maxv
33file	share/mk/bsd.lib.mk 1.380 -> 1.381
34descr
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.
38kcah
39
40hack	static linking with libpthread
41mdate	7 May 2019
42who	maya
43file	lib/libpthread/Makefile 1.92 -> 1.94
44descr
45	To avoid some libc thread stub functions being picked up
46	in static builds, link pthread as one section.
47kcah
48
49hack	gcc-5.3 optimizes memset+malloc -> calloc inside calloc
50mdate	4 May 2016
51who	christos
52file	external/gpl2/lib/libmalloc/lib/Makefile 1.3 -> 1.5
53descr
54	resulting in infinite recursion; we prevent this with
55	-fno-builtin-malloc
56kcah
57
58hack	turn off tree-vrp for parts of ufs_lookup.c
59mdate	28 April 2016
60who	mrg christos
61file	src/sys/ufs/ufs/ufs_lookup.c : 1.144
62pr	51094
63descr
64	with -ftree-vrp enabled in ufs_lookup.c sometimes bad dir
65	panicks are see.
66hcah
67
68hack	netstat ieee1394 address printing.
69mdate	14 Nov 2000
70who	matt
71file	lib/libc/net/getnameinfo.c	: 1.32 : 497 : 503
72descr
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.
76kcah
77
78hack	xterm vs. libterm
79mdate	01 Aug 2000
80who	jdc
81file	xsrc/xc/programs/xterm/main.c	: 1.2 : 3609 : 3614
82pr	10383
83descr
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.
89kcah
90
91hack	wi-at-big-endian-bus
92cdate	15 Mar 2002
93who	martin
94file	dev/ic/wireg.h : 1.20
95descr	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.
99kcah
100
101hack	specific knowledge of colours in curses code
102cdate	Sun Apr  6 11:05:24 BST 2003
103who	jdc
104file	lib/libcurses/color.c : r1.24
105descr
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
110kcah
111
112hack	Compensation for differing types of LINUX_USRSTACK and USRSTACK
113cdate	21 Aug 2003
114who	he
115file	sys/miscfs/procfs/procfs_linux.c : 1.14
116descr
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.
123kcah
124
125hack	gcc4 wrong uninitialized variable
126mdate	10 May 2006
127who	mrg
128file	bin/ksh/eval.c			: 1.6
129file	bin/sh/histedit.c		: 1.39
130file	bin/sh/parser.c			: 1.60
131file	crypto/dist/heimdal/kdc/524.c	: 1.10
132file	crypto/dist/ssh/sftp.c		: 1.20
133file	crypto/dist/ssh/ssh-keysign.c	: 1.11
134file	dist/ipf/lib/hostname.c		: 1.2
135file	dist/ipf/tools/ipmon.c		: 1.8
136file	dist/ntp/ntpd/ntp_request.c	: 1.4
137file	dist/ntp/ntpd/refclock_shm.c	: 1.4
138file	dist/ntp/sntp/timing.c		: 1.3
139file	dist/pppd/pppstats/pppstats.c	: 1.3
140file	dist/tcpdump/print-zephyr.c	: 1.5
141file	distrib/utils/sysinst/aout2elf.c : 1.12
142file	gnu/libexec/uucp/uucico/uucico.c : 1.6
143file	lib/libc/citrus/citrus_csmapper.c : 1.6
144file	lib/libc/citrus/citrus_pivot_factory.c : 1.5
145file	lib/libc/inet/inet_cidr_ntop.c	: 1.3
146file	lib/libc/inet/inet_ntop.c	: 1.3
147file	lib/libc/stdio/vfwprintf.c	: 1.8
148file	libexec/ld.elf_so/arch/m68k/mdreloc.c : 1.20
149file	libexec/ld.elf_so/arch/powerpc/ppc_reloc.c : 1.40
150file	libexec/ld.elf_so/arch/sh3/mdreloc.c : 1.22
151file	libexec/ld.elf_so/arch/sparc/mdreloc.c : 1.39
152file	libexec/ld.elf_so/arch/sparc64/mdreloc.c : 1.39
153file	libexec/ld.elf_so/arch/vax/mdreloc.c	: 1.21
154file	libexec/ld.elf_so/arch/x86_64/mdreloc.c	: 1.27
155file	sbin/fsck_ext2fs/dir.c		: 1.19
156file	sbin/routed/rtquery/rtquery.c	: 1.18
157file	sys/arch/amd64/amd64/pmap.c	: 1.26
158file	sys/arch/i386/pci/piixpcib.c	: 1.4
159file	sys/arch/m68k/m68k/pmap_motorola.c	: 1.4
160file	sys/crypto/cast128/cast128.c	: 1.9
161file	sys/ddb/db_command.c		: 1.86
162file	sys/dev/cardbus/cardbus_map.c	: 1.21
163file	sys/dev/fss.c			: 1.25
164file	sys/dev/ic/igsfb.c		: 1.39
165file	sys/dev/ic/mb86950.c		: 1.5
166file	sys/dev/ic/midway.c		: 1.71
167file	sys/dev/kttcp.c			: 1.18
168file	sys/dev/rasops/rasops_bitops.h	: 1.9
169file	sys/dev/pci/cmpci.c		: 1.31
170file	sys/dev/pci/machfb.c		: 1.45
171file	sys/dev/usb/ohci.c		: 1.174
172file	sys/dev/usb/uhci.c		: 1.196
173file	sys/dev/rasops/rasops_bitops.h	: 1.9
174file	sys/dist/ipf/netinet/ip_nat.c	: 1.10
175file	sys/dist/ipf/netinet/ip_rpcb_pxy.c : 1.8
176file	sys/dist/pf/net/pf.c		: 1.22
177file	sys/fs/udf/udf_vnops.c		: 1.4
178file	sys/kern/kern_sig.c		: 1.219
179file	sys/kern/tty.c			: 1.181
180file	sys/net/bpf.c			: 1.116
181file	sys/net/zlib.c			: 1.26
182file	sys/netccitt/if_x25subr.c	: 1.37
183file	sys/netinet/in.c		: 1.107
184file	sys/nfs/nfs_serv.c		: 1.108
185file	sys/nfs/nfs_socket.c		: 1.129
186file	sys/nfs/nfs_syscalls.c		: 1.91
187file	sys/ufs/lfs/lfs_vfsops.c	: 1.207 [also (char *)]
188file	usr.bin/ftp/ftp.c		: 1.140
189file	usr.bin/find/function.c		: 1.54
190file	usr.bin/mail/tty.c		: 1.20
191file	usr.bin/msgc/msg_sys.def	: 1.33-1.34
192file	usr.bin/nl/nl.c			: 1.7
193file	usr.bin/systat/keyboard.c	: 1.23
194file	usr.bin/usbhidctl/usbhid.c	: 1.29
195file	usr.bin/vi/cl/cl_read.c		: 1.5
196file	usr.bin/vi/ex/ex_cscope.c	: 1.12
197file	usr.bin/vi/ex/ex_tag.c		: 1.19
198file	usr.bin/vi/vi/v_txt.c		: 1.15
199file	usr.sbin/altq/altqstat/qdisc_rio.c : 1.4
200file	usr.sbin/cron/do_command.c	: 1.19
201file	usr.sbin/timed/timed/slave.c	: 1.15
202descr
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.
211kcah
212
213hack	gcc4 pointer sign and strict aliasing problems
214mdate	10 May 2006
215who	mrg
216file	bin/ed/Makefile			: 1.33
217file	distrib/utils/sysinst/Makefile.inc : 1.44
218file	distrib/utils/x_dhclient/Makefile : 1.15
219file	games/bcd/Makefile		: 1.5
220file	games/dab/Makefile		: 1.5
221file	games/larn/Makefile		: 1.17
222file	games/pom/Makefile		: 1.5
223file	lib/libasn1/Makefile		: 1.26
224file	lib/libcrypt/Makefile		: 1.17
225file	lib/libgssapi/Makefile		: 1.16
226file	lib/libhdb/Makefile		: 1.20
227file	lib/libkadm5clnt/Makefile	: 1.21
228file	lib/libkadm5srv/Makefile	: 1.25
229file	lib/libkrb5/Makefile		: 1.35
230file	lib/libssh/Makefile		: 1.6
231file	lib/libtelnet/Makefile		: 1.26
232file	libexec/getty/Makefile		: 1.14
233file	libexec/kadmind/Makefile	: 1.19
234file	libexec/kpasswdd/Makefile	: 1.14
235file	sbin/atactl/Makefile		: 1.3
236file	sbin/cgdconfig/Makefile		: 1.7
237file	sbin/clri/Makefile		: 1.13
238file	sbin/dkctl/Makefile		: 1.4
239file	sbin/dump/Makefile		: 1.33
240file	sbin/fdisk/Makefile		: 1.35
241file	sbin/fsck_ext2fs/Makefile	: 1.11
242file	sbin/fsck_ffs/Makefile		: 1.29
243file	sbin/fsdb/Makefile		: 1.18
244file	sbin/newfs/Makefile		: 1.30
245file	sbin/newfs_sysvbfs/Makefile	: 1.2
246file	sbin/restore/Makefile		: 1.23
247file	sbin/veriexecctl/Makefile	: 1.11
248file	sys/lib/libsa/Makefile		: 1.59
249file	sys/arch/evbarm/adi_brh/brh_machdep.c : 1.24
250file	usr.bin/awk/Makefile		: 1.9
251file	usr.bin/crontab/Makefile	: 1.24
252file	usr.bin/ctags/Makefile		: 1.8
253file	usr.bin/gzip/Makefile		: 1.10
254file	usr.bin/ssh/sftp/Makefile	: 1.10
255file	usr.bin/ssh/ssh/Makefile	: 1.25
256file	usr.bin/vi/build/Makefile	: 1.26
257file	usr.bin/telnet/Makefile		: 1.40
258file	usr.bin/tn3270/tn3270/Makefile	: 1.36
259file	usr.bin/tr/Makefile		: 1.4
260file	usr.sbin/amd/amd/Makefile	: 1.27
261file	usr.sbin/amd/amq/Makefile	: 1.14
262file	usr.sbin/amd/libamu/Makefile	: 1.20
263file	usr.sbin/amd/pawd/Makefile	: 1.5
264file	usr.sbin/bind/Makefile.inc	: 1.22
265file	usr.sbin/bind/libdns/Makefile	: 1.3
266file	usr.sbin/bind/named/Makefile	: 1.17
267file	usr.sbin/bootp/bootptest/Makefile : 1.2
268file	usr.sbin/chrtbl/Makefile	: 1.6
269file	usr.sbin/cron/Makefile		: 1.12
270file	usr.sbin/dhcp/Makefile.inc	: 1.20
271file	usr.sbin/hprop/Makefile		: 1.13
272file	usr.sbin/installboot/Makefile	: 1.35
273file	usr.sbin/ipf/ipftest/Makefile	: 1.32
274file	usr.sbin/isdn/isdnd/Makefile	: 1.6
275file	usr.sbin/isdn/isdnmonitor/Makefile : 1.3
276file	usr.sbin/isdn/isdntel/Makefile	: 1.2
277file	usr.sbin/isdn/isdntrace/Makefile : 126
278file	usr.sbin/mopd/common/Makefile	: 1.10
279file	usr.sbin/mopd/mopd/Makefile	: 1.9
280file	usr.sbin/mopd/mopprobe/Makefile	: 1.7
281file	usr.sbin/makefs/Makefile	: 1.17
282file	usr.sbin/mscdlabel/Makefile	: 1.5
283file	usr.sbin/pkg_install/add/Makefile : 1.7
284file	usr.sbin/pkg_install/create/Makefile : 1.5
285file	usr.sbin/pkg_install/lib/Makefile : 1.28
286file	usr.sbin/ntp/ntpd/Makefile	: 1.10/1.11
287file	usr.sbin/ntp/ntptime/Makefile	: 1.4/1.5
288file	usr.sbin/pppd/Makefile.inc	: 1.3
289file	usr.sbin/pppd/pppd/Makefile	: 1.38
290file	usr.sbin/rarpd/Makefile		: 1.10
291file	usr.sbin/rbootd/Makefile	: 1.10
292file	usr.sbin/rpc.pcnfsd/Makefile	: 1.17
293file	usr.sbin/tcpdump/Makefile	: 1.42
294descr
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.
298kcah
299
300hack	disable ctf for gcc-4.8 build
301mdate	April 3 2014
302who	christos
303file	external/gpl3/gcc/usr.bin/Makefile.frontend	: 1.4
304file	external/gpl3/gcc/usr.bin/Makefile.backend	: 1.5
305descr
306	nbctfconvert -g -L VERSION -g fold-const.o
307	ERROR: fold-const.c: failed to get mapping for tid 79154 \
308		((null)) <13532>
309kcak
310
311hack	emacs aborting on exit (libgcc issue)
312mdate	7 November 2011
313who	christos
314file	external/gpl3/gcc/dist/gcc/unwind-dw2-fde.c : 1.2
315descr
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.
320kcah
321
322hack	cross-building hack on Darwin
323mdate	20 July 2008
324who	agc
325file	src/distrib/common/Makefile.mdset	: 1.33
326descr
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
333kcah
334
335hack	avoid rebuilding asn1 libraries
336mdate	03 August 2008
337who	veego
338file	src/crypto/dist/heimdal/lib/asn1/gen.c	: 1.10
339file	src/lib/libasn1/Makefile	: 1.32
340file	src/lib/libhdb/Makefile	: 1.23
341file	src/lib/libgssapi/Makefile	: 1.20
342file	src/lib/libhx509/Makefile	: 1.3
343pr	9702 39185
344descr
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.
348kcah
349
350hack	Disable fortification for /usr/bin/makeinfo
351cdata	24 Mar 2014
352who	tron
353file	src/external/gpl2/texinfo/bin/makeinfo/Makefile	: 1.1
354pr	N/A
355descr
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.
359kcah
360
361hack	Disable Stack Smash Protection for /usr/X11R7/bin/xauth
362cdata	05 Apr 2014
363who	tron
364file	src/external/mit/xorg/bin/xauth/Makefile	: 1.4
365pr	N/A
366descr
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.
375kcah
376
377hack	g++ 5.x barfs on volatile in constexpr initializers
378cdata	27 Aug 2015
379who	pooka
380file	src/lib/libpthread/pthread_types.h	: 1.17
381pr	lib/49989
382descr
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;
396kcah
397
398hack	libm cabs{,f,l} and g++
399cdata	11 Jan 2016
400who	christos
401pr	lib/50646
402file	src/external/gpl3/gcc.old/dist/libstdc++-v3/include/std/complex : 1.2
403file	src/external/gpl3/gcc/dist/libstdc++-v3/include/std/complex : 1.2
404descr
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.
413kcah
414
415port	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
578port	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
615port	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
628port	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
648port	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
660port	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
679port	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
717port	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
729port	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
742port	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
763port	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
790port	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
805port	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
817port	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
829hack	fallback to /usr/bin/clang-cpp in rpcgen
830cdate	Wed Jun  5 15:49:27 CEST 2013
831who	joerg
832file	src/usr.bin/rpcgen/rpc_main.c : 1.35
833descr
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.
838kcah
839
840port	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
861port	mips64*
862hack	compiler crashes on mips64* with optimization enabled
863cdate	Tue May 13 18:46:48 UTC 2014
864who	macallan
865file	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
869descr	workaround for n32 gcc doing unaligned 64bit accesses when optimizing
870pr	48696
871kcah
872
873port	vax
874hack	compile boot with -O1
875cdate	Sat May 24 09:40:58 CEST 2014
876who	martin
877file	src/sys/arch/vax/boot/boot/Makefile: 1.41
878descr	/boot does not work when compiled with -O2 and gcc 4.8
879kcah
880
881port	vax
882hack	compile nir.c in gallium with -O1
883cdate	Mon Oct 28 14:39:35 EDT 2019
884who	christos
885file	/cvsroot/src/external/mit/xorg/lib/gallium/Makefile 1.36
886descr	gallium does not compile.
887kcah
888
889port	sh3
890hack	compile parse.c in battlestar with -Wno-restrict
891cdate	Mon Oct 28 14:39:35 EDT 2019
892who	christos
893file	/cvsroot/src/games/battlestar/Makefile 1.11
894descr	fails to compile, confused by char words[][];
895	strcpy(words[n - 1], words[n + 1]);
896kcah
897
898port	sh3
899hack	compile ddns.c in dhcpcd with no-stringop-overflow
900cdate	Tue Oct 29 20:25:59 EDT 2019
901who	christos
902file	/cvsroot/src/external/mpl/dhcp/bin/server/Makefile 1.2
903descr	fails to compile, confused by builtin_object_size in strcat(p, ".in..")
904kcah
905
906port	arm
907hack	avoid using labels in a 12-bit constant.
908cdate	Mon Mar 30 05:26:47 2015 UTC
909who	matt
910file	crypto/external/bsd/openssl/lib/libcrypto/arch/arm/aes-armv4.S: 1.2
911descr	workaround for clang misassembling an instruction
912kcah
913
914port	sparc64
915hack	during profiling with -m32 (and ASLR) labels are not generated
916	consistently
917cdate	Sat Feb 11 04:56:37 2017 UTC
918who	christos
919file	/cvsroot/src/crypto/external/bsd/heimdal/lib/libasn1/Makefile: 1.4
920desc 	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
923kcah
924
925port	ia64
926hack	ski emulator crashes
927cdate	Sat Apr 8 18:10:43 2017 UTC
928who	scole
929file	/cvsroot/src/sys/external/bsd/acpica/dist/tables/tbxfload.c: 1.6
930desc
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
934kcah
935
936port	vax
937hack	compile rtld.c with -O0
938cdate	Wed Apr  3 17:38:38 EDT 2019
939who	christos
940file	src/libexec/ld.elf_so/Makefile: 1.141
941descr	Disable optimization for rtld.c on the vax with gcc-7. Crashes on the
942	second pass loop with elm == 0xffffffff
943kcah
944
945port	alpha
946hack	GCC 7.4/8.3: userland binaries crash randomly (port-alpha/54307)
947cdate	Fri Nov  1 20:43:35 UTC 2019
948who	rin
949file	src/external/bsd/jemalloc/lib/Makefile.inc: 1.11
950descr	rtree.c and tcache.c need to be compiled with -O0, alternatively,
951	you can compile whole jemalloc with -DJEMALLOC_DEBUG.
952kcah
953
954port	powerpc
955hack	compile tc.c, logerr.c, ubsan.c with -O0 for clang
956cdate	Wed Jan 29 17:40:19 EST 2020
957who	christos
958file	src/external/bsd/atf/lib/libatf-c/Makefile: 1.22
959file	src/external/bsd/dhcpcd/sbin/dhcpcd/Makefile: 1.49
960file	src/tests/lib/libc/misc/Makefile: 1.5
961
962descr	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"
966kcah
967
968port	earmv7hf*
969hack	compile gdb/dwarf2expr.c with -O0 for GCC8 (toolchain/54820 and 54877)
970cdate	Wed Apr 29 11:04:58 UTC 2020
971who	rin
972file	src/external/gpl3/gdb/lib/libgdb/Makefile: 1.22
973descr	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.
977kcah
978
979port	m68k
980hack	compile aes_ccm_tag() with -O0 for GCC8
981cdate	Mon Aug 10 06:27:29 UTC 2020
982who	rin
983file	src/sys/crypto/aes/aes_ccm.c: 1.5
984descr	GCC 8.4 miscompiles aes_ccm_tag() for m68k with optimization level
985	-O[12], which results in failure in aes_ccm_selftest().
986	This is observed for amiga (A1200, 68060), mac68k (Quadra 840AV,
987	68040), and luna68k (nono, 68030 emulator). However, it is not for
988	sun3 (TME, 68020 emulator) and sun2 (TME, 68010 emulator).
989	At the moment, it is unclear whether this is due to differences b/w
990	68010-20 vs 68030-60, or something wrong with TME.
991kcah
992
993port	sun2
994hack	compile kernel with -fno-omit-frame-pointer for GCC8
995cdate	Mon Aug 10 06:28:42 UTC 2020
996who	rin
997file	src/sys/arch/sun2/conf/Makefile.sun2: 1.25
998descr	Work around for reproducible kernel freezes just after ``Starting
999	postfix.'', where I cannot even enter DDB nor obtain crash dump.
1000	I still haven't figured out why. Possibly something wrong with -Os
1001	optimization level for GCC/m68k, cf.,
1002	http://mail-index.netbsd.org/port-sun3/2020/07/19/msg000166.html
1003kcah
1004