HACKS revision 1.200
1# $NetBSD: HACKS,v 1.200 2020/04/04 16:25:17 jdolecek 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
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	
411	who	tsutsui
412	file	sys/arch/vax/conf/Makefile.vax
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
508	file	distrib/vax/miniroot/Makefile.inc
509	file	distrib/vax/ramdisk/Makefile
510	file	external/gpl3/gdb/lib/libdecnumber/Makefile
511	file	sbin/fsdb/Makefile
512	file	sbin/newfs_ext2fs/Makefile
513	file	sbin/ping/Makefile
514	file	usr.sbin/lmcconfig/Makefile
515	file	usr.sbin/mtrace/Makefile
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
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	who	christos
750	file	src/sys/arch/i386/stand/lib/Makefile : 1.38
751	descr
752		Turning on DISK_DEBUG shows the problem. We should find
753		out which option is causing this.
754	hcah
755
756port	powerpc
757
758	hack	avoid using __builtin_return_address(0) because it fails in
759		Xorg's module loader
760	cdate	Sat Sep 27 03:52:05 UTC 2008
761	who	macallan
762	file	src/libexec/ld.elf_so/rtld.c : 1.121
763	descr
764		workaround for PR port-macppc/37812
765	kcah
766
767	hack	define TARGET_SECURE_PLT and HAVE_AS_TLS because when
768		building the native compiler via build.sh those don't defined
769		properly.
770	cdate	Sat Mar 12 08:00:00 UTC 2011
771	who	matt
772	file	src/gnu/dist/gcc4/gcc/config/rs6000/netbsd.h
773	descr
774		see above
775	kcah
776
777port	powerpc64
778
779	hack	include _errno.c in libposix so that __errno resolves. It
780		should resolve from libc's errno, but somehow it does not.
781		Linker bug?
782	cdate	Thu Oct 27 13:19:47 EDT 2011
783	who	christos
784	file	src/lib/libposix/Makefile: 1.15
785	file	src/lib/librt/Makefile: 1.14
786	descr
787		workaround for:
788		    libposix_pic.a(cerror.pico)(.text+0x14): unresolvable \
789		    R_PPC64_REL24 relocation against symbol `.__errno'
790	kcah
791
792	hack	rename data() function in mdocml to avoid redefined error.
793		Compiler/Assembler bug?
794	cdate	Sat Oct 29 11:16:01 EDT 2011
795	who	christos
796	file	src/external/bsd/mdocml/tbl_data.c: 1.2
797	descr
798		workaround for:
799		    {standard input}: Assembler messages:
800		    {standard input}:105: Error: symbol `.data' is already \
801		    defined
802	kcah
803
804port	emips
805
806	hack	Add nop between ctc1 and mtc0 to avoid assembler internal
807		error
808	cdate	Sat Oct 29 16:57:34 EDT 2011
809	who	christos
810	file	src/sys/arch/mips/mips/mips_fpu.c: 1.7
811	descr
812		workaround for:
813		    {standard input}: Assembler messages:
814		    {standard input}:730: Internal error!
815		    Assertion failure in append_insn at /usr/src/external/gpl3/\
816		    binutils/dist/gas/config/tc-mips.c line 2910.
817	kcah
818
819port	ia64
820
821	hack	libgcc unwind dummy function
822	cdate	Fri Apr 17 14:31:03 CEST 2015
823	who	martin
824	file	src/external/gpl3/gcc/dist/libgcc/config/ia64/unwind-ia64.c: 1.4
825	descr
826		Add an empty _Unwind_FindTableEntry() implementation.
827		In the end we will use our libc stuff, and this should
828		go away again.
829	kcah
830
831port	x68k
832
833	hack	compiler error with gcc 4.5.x
834	cdate	Fri May 24 13:23:01 EDT 2013
835	who	christos
836	file	src/external/gpl3/gcc/usr.bin/bakend/Makefile: 1.17
837		xsrc/external/mit/xorg/lib/libGLU/Makefile: 1.11
838	descr
839		workaround for:
840		internal compiler error: in cselib_record_set, at cselib.c:1999
841	kcah
842
843hack	fallback to /usr/bin/clang-cpp in rpcgen
844cdate	Wed Jun  5 15:49:27 CEST 2013
845who	joerg
846file	src/usr.bin/rpcgen/rpc_main.c
847descr
848	It is undecided which compiler owns /usr/bin/cpp and whether it should
849	exist in a MKGCC=no world. To allow rpcgen to work out-of-the-box,
850	if either gcc or clang is installed, use /usr/bin/clang-cpp as fallback.
851	This applies only if RPCGEN_CPP is not set and /usr/bin/cpp is not executable.
852kcah
853
854port	hppa
855
856	hack	compiler error with gcc 4.5.x
857	cdate	Tue Jul 23 07:42:28 BST 2013
858	who	skrll
859	file	src/sys/lib/libkern/Makefile.libkern: 1.26
860	descr
861		workaround for unanalysed codegen bug affecting md5c.c.
862	kcah
863
864	hack	gdb vs _rtld_debug_state problem
865	cdate	Thu Mar  5 09:49:53 UTC 2015
866	who	skrll
867	file	src/libexec/ld.elf_so/rtld.c: 1.175
868	descr
869		workaround for problem where gdb misses the breakpoint on
870		_rtld_debug_state when the function is only the
871		bv,n %r0(%rp) instruction - the nullify seems to
872		confuse something
873	kcah
874
875port	mips64*
876hack	compiler crashes on mips64* with optimization enabled
877cdate	Tue May 13 18:46:48 UTC 2014
878who	macallan
879file	src/external/lgpl3/gmp/lib/libgmp/arch/mips64eb/Makefile.inc: 1.6
880	src/external/lgpl3/gmp/lib/libgmp/arch/mips64eb/config.h: 1.5
881	src/external/lgpl3/gmp/lib/libgmp/arch/mips64el/Makefile.inc: 1.6
882	src/external/lgpl3/gmp/lib/libgmp/arch/mips64el/config.h: 1.5
883descr	workaround for n32 gcc doing unaligned 64bit accesses when optimizing
884pr	48696
885kcah
886
887port	vax
888hack	compile boot with -O1
889cdate	Sat May 24 09:40:58 CEST 2014
890who	martin
891file	src/sys/arch/vax/boot/boot/Makefile: 1.41
892descr	/boot does not work when compiled with -O2 and gcc 4.8
893kcah
894
895port	vax
896hack	compile nir.c in gallium with -O1
897cdate	Mon Oct 28 14:39:35 EDT 2019
898who	christos
899file	/cvsroot/src/external/mit/xorg/lib/gallium/Makefile 1.36
900descr	gallium does not compile.
901kcah
902
903port	aarch64
904hack	compile ex_filter.c in vi with -O0
905cdate	Mon Oct 28 14:39:35 EDT 2019
906who	christos
907file	/cvsroot/src/external/bsd/nvi/usr.bin/nvi/Makefile 1.20
908descr	":%! sort" core-dumps, tm is NULL but was not NULL on entry.
909kcah
910
911port	sh3
912hack	compile parse.c in battlestar with -Wno-restrict
913cdate	Mon Oct 28 14:39:35 EDT 2019
914who	christos
915file	/cvsroot/src/games/battlestar/Makefile 1.11
916descr	fails to compile, confused by char words[][];
917	strcpy(words[n - 1], words[n + 1]);
918kcah
919
920port	sh3
921hack	compile ddns.c in dhcpcd with no-stringop-overflow
922cdate	Tue Oct 29 20:25:59 EDT 2019
923who	christos
924file	/cvsroot/src/external/mpl/dhcp/bin/server/Makefile 1.2
925descr	fails to compile, confused by builtin_object_size in strcat(p, ".in..")
926kcah
927
928port	arm
929hack	avoid using labels in a 12-bit constant.
930who	matt
931file	crypto/external/bsd/openssl/lib/libcrypto/arch/arm/aes-armv4.S: 1.2
932descr	workaround for clang misassembling an instruction
933kcah
934
935port	sparc64
936hack	during profiling with -m32 (and ASLR) labels are not generated
937	consistently
938who	christos
939file	/cvsroot/src/crypto/external/bsd/heimdal/lib/libasn1/Makefile: 1.4
940desc 	asn1_krb5_asn1.po does not produce the same results during successive
941	compilation runs; it is bimodal. Turning optimization to -O0 fixes
942	the issue
943kcah
944
945port	ia64
946hack	ski emulator crashes
947who	scole
948file	/cvsroot/src/sys/external/bsd/acpica/dist/tables/tbxfload.c: 1.6
949desc
950	ski emulator crashes during acpi detection.  Added a check for
951	uninitialized index.  Submitted a request for change with upstream
952	mailing list, but never got a response
953kcah
954
955port	vax
956hack	compile rtld.c with -O0
957cdate	Wed Apr  3 17:38:38 EDT 2019
958who	christos
959file	src/libexec/ld.elf_so/Makefile: 1.141
960descr	Disable optimization for rtld.c on the vax with gcc-7. Crashes on the
961	second pass loop with elm == 0xffffffff
962kcah
963
964port	alpha
965hack	GCC 7.4/8.3: userland binaries crash randomly (port-alpha/54307)
966cdate	Fri Nov  1 20:43:35 UTC 2019
967who	rin
968file	src/external/bsd/jemalloc/lib/Makefile.inc: 1.11
969descr	rtree.c and tcache.c need to be compiled with -O0, alternatively,
970	you can compile whole jemalloc with -DJEMALLOC_DEBUG.
971kcah
972
973port	powerpc
974hack	compile tc.c, logerr.c, ubsan.c with -O0 for clang
975cdate	Wed Jan 29 17:40:19 EST 2020
976who	christos
977file	src/external/bsd/atf/lib/libatf-c/Makefile: 1.22
978file	src/external/bsd/dhcpcd/sbin/dhcpcd/Makefile: 1.49
979file	src/tests/lib/libc/misc/Makefile: 1.5
980
981descr	Disable optimization on tc.c, logerr.c, ubsan.c crashes:
982	lib/libLLVMCodeGen/../../llvm/../../external/apache2/llvm/lib/..\
983	/dist/llvm/include/llvm/CodeGen/MachineFrameInfo.h", line 495, \
984	function "__int64_t llvm::MachineFrameInfo::getObjectOffset(int) const"
985kcah
986