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