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