HACKS revision 1.205
1# $NetBSD: HACKS,v 1.205 2020/04/30 12:44:41 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/mtrace/Makefile : 1.11
515	descr
516		external/gpl3/gcc/dist/gcc/expmed.c:2781:1:
517		internal compiler error: in change_address_1, at emit-rtl.c:2019
518		external/gpl3/gcc/dist/gcc/recog.c:770:1:
519		internal compiler error: in change_address_1, at emit-rtl.c:2019
520		external/gpl3/gcc/dist/libdecnumber/decNumber.c:7214:3:
521		internal compiler error: in change_address_1, at emit-rtl.c:2019
522		sbin/ping/ping.c:679:1:
523		internal compiler error: in change_address_1, at emit-rtl.c:2019
524		sbin/newfs_ext2fs/mke2fs.c:681:1:
525		internal compiler error: in reload_combine_note_use,
526		at postreload.c:1561
527		external/gpl3/gdb/dist/libdecnumber/decNumber.c:7214:3:
528		internal compiler error: in change_address_1, at emit-rtl.c:2019
529		usr.sbin/mtrace/mtrace.c:1655:1:
530		internal compiler error: in change_address_1, at emit-rtl.c:2019
531	kcah
532
533	hack	gcc 5.4 cc1 miscompile
534	date	Tue Feb 14 07:19:57 JST 2017
535	who	rin
536	pr	port-vax/51967
537	file	external/gpl3/gcc/usr.bin/backend/Makefile : 1.35
538	descr
539		cc1 aborts due to SIGILL when compiling the sample code attached
540		to the PR. As a workaround, compile dse.c with -O0.
541	kcah
542
543	hack	libssh miscompile
544	cdate	Tue Feb 14 17:58:06 JST 2017
545	mdate	Tue Feb 14 18:57:39 JST 2017
546	who	rin
547	file	crypto/external/bsd/openssh/lib/Makefile : 1.20
548	descr
549		poly1305.c and umac.c are miscompiled, which results in login
550		failure to/from external hosts via ssh.
551	kcah
552
553	hack	mandoc miscompile
554	date	Tue Feb 14 18:03:05 JST 2017
555	who	rin
556	file	external/bsd/mdocml/lib/libmandoc/Makefile : 1.8
557	descr
558		mandoc(1) receives SIGILL in in_line_argn() from mdoc_macro.c.
559	kcah
560
561	hack	libX11 miscompile
562	date	Thu Feb 16 10:00:22 JST 2017
563	who	rin
564	file	src/external/mit/xorg/lib/libX11/Makefile.libx11 : 1.18
565	descr
566		lcWrap.c is miscompiled, which results in input failure via XIM.
567		Besides, some clients, e.g., pkgsrc/x11/kterm, receive SIGSEGV.
568	kcah
569
570port	arm
571
572	hack	gcc-unsigned-compare
573	cdate	09 Mar 2002
574	mdate	18 Mar 2002
575	who	bjh21
576	file	dist/bind/lib/nameser/ns_parse.c : 1.3
577	file	dist/dhcp/minires/ns_parse.c : 1.3
578	file	dist/dhcp/omapip/result.c : 1.2
579	file	dist/dhcp/server/failover.c : 1.3
580	file	gnu/dist/toolchain/bfd/bfd.c : 1.2
581	file	gnu/dist/toolchain/bfd/format.c : 1.2
582	file	gnu/dist/toolchain/gdb/target.c : 1.2
583	file	sys/kern/vfs_subr.c : 1.172
584	descr	When checking that a potentially-unsigned enum is >= 0, assign
585		it to an int first.  This is necessary to avoid "comparison is
586		always true" warnings with -fshort-enums.  Casting to an int
587		really should be enough, but turns out not to be.
588	kcah
589
590	hack	gcc-4.5 arm CNAME hostname lookup failure on
591		certain DNS environment (probably -ftree-ter problem)
592	cdate	Sat Dec 24 04:59:00 UTC 2011
593	mdate	
594	who	tsutsui
595	file	lib/libc/net/Makefile.inc 1.79
596	descr	Hostname lookup against CNAMEs by some commands fails
597		on certain DNS environments if lib/libc/net/gethnamaddr.c
598		(ping(8) etc) and lib/libc/net/getaddrinfo.c (ftp(1) etc)
599		are compiled with -O2, even though nslookup(1) against
600		the same CNAME returns proper hostname.
601		They works properly if compiled with -O2 -fno-tree-ter.
602		Also -O2 fails but -O2 -fno-tree-ter works on the following
603		test case in gcc bugzilla:
604		http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48863#c4
605	kcah
606
607port	sh3
608
609	hack	gcc4-sh3-bz2
610	cdate	Sun May 21 03:34:57 UTC 2006
611	mdate	Fri May 16 13:13:00 UTC 2008
612	who	mrg, tsutsui
613	file	lib/libbz2/Makefile	: 1.10
614	descr
615		The in-tree GCC 4.1-based compiler generated too-far
616		pc-relative addresses.  Hack is to build with
617		-fno-loop-optimize.
618	kcah
619
620port	m68000
621
622	hack	gcc4-m68000
623	cdate	Fri Feb  8 10:29:37 PST 2008
624	mdate	Sun May  4 15:37:19 UTC 2008
625	who	mrg, tsutsui
626	file	rescue/Makefile	: 1.21
627	file	sbin/dump_lfs/Makefile	: 1.9
628	file	sbin/fsck_ffs/Makefile	: 1.35
629	file	sbin/fsdb/Makefile	: 1.22
630	file	share/mk/sys.mk	: 1.96
631	file	usr.sbin/ndbootd/Makefile	: 1.5
632	descr
633		Several internal compiler errors with gcc -O1
634		around 64bit integer arithmetic.
635		This hack uses -O1 and adds some -fno-tree-foo options
636		to avoid the problem.
637		This might be related with GCC Bugzilla Bug 32424.
638	kcah
639
640port	m68k,sh3,vax
641
642	hack	gcc-4.8.1
643	cdate	Wed Nov  6 20:41:35 EST 2013
644	who	christos
645	file	src/external/gpl3/gcc/libstdc++-v3/Makefile : 1.6
646	descr
647		compile hashtable_c++0x.cc with -O2 instead of -Os to
648		produce missing instantiation of std::lower_bound expansion
649		for unsigned long.
650	kcah
651
652port	sparc
653
654	hack	avoid NULL pointer derefs in savefpstate IPIs and GCC 4.5.3
655	cdate	Sun Aug 14 19:26:48 PDT 2011
656	who	mrg
657	file	sys/arch/sparc64/sparc/cpu.c : 1.234
658	file	sys/arch/sparc64/sparc/cpuvar.h : 1.90
659	file	sys/arch/sparc64/sparc/genassym.cf : 1.67
660	file	sys/arch/sparc64/sparc/locore.s : 1.265
661	descr
662		Something is wrong with GCC 4.5.3 and the savefpstate IPI.
663		Post newlock2 there was a bug where a lock was reduced from
664		IPL_SCHED to IPL_VM (?) and occasionally savefpstate IPI
665		would crash due to NULL IPI.  This was fixed by re-using the
666		right IPL value.  However, GCC 4.5.3 build kernels have the
667		same problems.  For now, the hack is re-instated.
668	kcah
669
670
671port	mips
672
673	hack	mips-shared-linker-load-address
674	cdate	Fri Oct  7 08:33:10 UTC 2005
675	who	simonb
676	file	src/sys/kern/exec_elf32.c : 1.107
677	descr
678		With COMPAT_16 or previous enabled (which enables
679		ELF_INTERP_NON_RELOCATABLE) a recent ld.elf_so will
680		load and run at address 0.  The check to fix this in
681		rev 1.107 only checks the first psection of the ELF
682		executable, which may not be loadable.  A more correct
683		fix is to check the first loadable psection instead of
684		just the first psection.
685	kcah
686
687	hack	mips-duplicate-ras-end-label
688	cdate	Sat Sep  2 23:29:42 2006
689	who	martin
690	file	src/regress/sys/kern/ras/ras3/Makefile : 1.3
691	descr
692		Add -fno-reorder-blocks to CFLAGS to avoid duplicate
693		labels by duplicated __asm output from RAS_END()
694		macro.
695	kcah
696
697	hack	mips-mcount-assembler-warning
698	cdate	Tue Jul 29 14:16:52 UTC 2008
699	who	lukem
700	file	src/lib/libc/gmon/Makefile.inc : 1.8
701	descr
702		Workaround for PR port-mips/39192.
703		common/lib/libc/gmon/mcount.c generates a (fatal)
704		assembler warning on MIPS:
705			Warning: No .cprestore pseudo-op used in PIC code
706		Add COPTS.count.c+=-Wa,--no-warn to avoid -Wa,--fatal-warnings
707	kcah
708
709port	i386
710
711	hack	use volatile intermediate variable to enforce rounding
712	cdate	Tue Aug  1 22:15:55 MEST 2006
713	who	drochner
714	file	src/lib/libm/src/lrintf.c : 1.4
715	file	src/lib/libm/src/s_rintf.c : 1.8
716	descr
717		gcc-4 does subsequent operations on "float" values within
718		the i387 FPU without rounding the intermediate results
719	kcah
720
721port	x86
722	hack	turn off optimization for biosdisk_ll.c because otherwise
723		we are pass the wrong arguments to biosdisk_read(). 
724		$ cd /usr/src/sys/arch/i386/floppies/bootflopp-com
725		$ qemu-system-i386 -nographic -fda boot-com1.fs -boot a
726	cdate	Mon Apr 7 21:09:55 2014 UTC
727	who	christos
728	file	src/sys/arch/i386/stand/lib/Makefile : 1.38
729	descr
730		Turning on DISK_DEBUG shows the problem. We should find
731		out which option is causing this.
732	hcah
733
734port	powerpc
735
736	hack	avoid using __builtin_return_address(0) because it fails in
737		Xorg's module loader
738	cdate	Sat Sep 27 03:52:05 UTC 2008
739	who	macallan
740	file	src/libexec/ld.elf_so/rtld.c : 1.121
741	descr
742		workaround for PR port-macppc/37812
743	kcah
744
745	hack	define TARGET_SECURE_PLT and HAVE_AS_TLS because when
746		building the native compiler via build.sh those don't defined
747		properly.
748	cdate	Sat Mar 12 08:00:00 UTC 2011
749	who	matt
750	file	src/gnu/dist/gcc4/gcc/config/rs6000/netbsd.h : 1.7
751	descr
752		see above
753	kcah
754
755port	powerpc64
756
757	hack	include _errno.c in libposix so that __errno resolves. It
758		should resolve from libc's errno, but somehow it does not.
759		Linker bug?
760	cdate	Thu Oct 27 13:19:47 EDT 2011
761	who	christos
762	file	src/lib/libposix/Makefile: 1.15
763	file	src/lib/librt/Makefile: 1.14
764	descr
765		workaround for:
766		    libposix_pic.a(cerror.pico)(.text+0x14): unresolvable \
767		    R_PPC64_REL24 relocation against symbol `.__errno'
768	kcah
769
770	hack	rename data() function in mdocml to avoid redefined error.
771		Compiler/Assembler bug?
772	cdate	Sat Oct 29 11:16:01 EDT 2011
773	who	christos
774	file	src/external/bsd/mdocml/tbl_data.c: 1.2
775	descr
776		workaround for:
777		    {standard input}: Assembler messages:
778		    {standard input}:105: Error: symbol `.data' is already \
779		    defined
780	kcah
781
782port	emips
783
784	hack	Add nop between ctc1 and mtc0 to avoid assembler internal
785		error
786	cdate	Sat Oct 29 16:57:34 EDT 2011
787	who	christos
788	file	src/sys/arch/mips/mips/mips_fpu.c: 1.7
789	descr
790		workaround for:
791		    {standard input}: Assembler messages:
792		    {standard input}:730: Internal error!
793		    Assertion failure in append_insn at /usr/src/external/gpl3/\
794		    binutils/dist/gas/config/tc-mips.c line 2910.
795	kcah
796
797port	ia64
798
799	hack	libgcc unwind dummy function
800	cdate	Fri Apr 17 14:31:03 CEST 2015
801	who	martin
802	file	src/external/gpl3/gcc/dist/libgcc/config/ia64/unwind-ia64.c: 1.4
803	descr
804		Add an empty _Unwind_FindTableEntry() implementation.
805		In the end we will use our libc stuff, and this should
806		go away again.
807	kcah
808
809port	x68k
810
811	hack	compiler error with gcc 4.5.x
812	cdate	Fri May 24 13:23:01 EDT 2013
813	who	christos
814	file	src/external/gpl3/gcc/usr.bin/bakend/Makefile: 1.17
815		xsrc/external/mit/xorg/lib/libGLU/Makefile: 1.11
816	descr
817		workaround for:
818		internal compiler error: in cselib_record_set, at cselib.c:1999
819	kcah
820
821hack	fallback to /usr/bin/clang-cpp in rpcgen
822cdate	Wed Jun  5 15:49:27 CEST 2013
823who	joerg
824file	src/usr.bin/rpcgen/rpc_main.c : 1.35
825descr
826	It is undecided which compiler owns /usr/bin/cpp and whether it should
827	exist in a MKGCC=no world. To allow rpcgen to work out-of-the-box,
828	if either gcc or clang is installed, use /usr/bin/clang-cpp as fallback.
829	This applies only if RPCGEN_CPP is not set and /usr/bin/cpp is not executable.
830kcah
831
832port	hppa
833
834	hack	compiler error with gcc 4.5.x
835	cdate	Tue Jul 23 07:42:28 BST 2013
836	who	skrll
837	file	src/sys/lib/libkern/Makefile.libkern: 1.26
838	descr
839		workaround for unanalysed codegen bug affecting md5c.c.
840	kcah
841
842	hack	gdb vs _rtld_debug_state problem
843	cdate	Thu Mar  5 09:49:53 UTC 2015
844	who	skrll
845	file	src/libexec/ld.elf_so/rtld.c: 1.175
846	descr
847		workaround for problem where gdb misses the breakpoint on
848		_rtld_debug_state when the function is only the
849		bv,n %r0(%rp) instruction - the nullify seems to
850		confuse something
851	kcah
852
853port	mips64*
854hack	compiler crashes on mips64* with optimization enabled
855cdate	Tue May 13 18:46:48 UTC 2014
856who	macallan
857file	src/external/lgpl3/gmp/lib/libgmp/arch/mips64eb/Makefile.inc: 1.6
858	src/external/lgpl3/gmp/lib/libgmp/arch/mips64eb/config.h: 1.5
859	src/external/lgpl3/gmp/lib/libgmp/arch/mips64el/Makefile.inc: 1.6
860	src/external/lgpl3/gmp/lib/libgmp/arch/mips64el/config.h: 1.5
861descr	workaround for n32 gcc doing unaligned 64bit accesses when optimizing
862pr	48696
863kcah
864
865port	vax
866hack	compile boot with -O1
867cdate	Sat May 24 09:40:58 CEST 2014
868who	martin
869file	src/sys/arch/vax/boot/boot/Makefile: 1.41
870descr	/boot does not work when compiled with -O2 and gcc 4.8
871kcah
872
873port	vax
874hack	compile nir.c in gallium with -O1
875cdate	Mon Oct 28 14:39:35 EDT 2019
876who	christos
877file	/cvsroot/src/external/mit/xorg/lib/gallium/Makefile 1.36
878descr	gallium does not compile.
879kcah
880
881port	sh3
882hack	compile parse.c in battlestar with -Wno-restrict
883cdate	Mon Oct 28 14:39:35 EDT 2019
884who	christos
885file	/cvsroot/src/games/battlestar/Makefile 1.11
886descr	fails to compile, confused by char words[][];
887	strcpy(words[n - 1], words[n + 1]);
888kcah
889
890port	sh3
891hack	compile ddns.c in dhcpcd with no-stringop-overflow
892cdate	Tue Oct 29 20:25:59 EDT 2019
893who	christos
894file	/cvsroot/src/external/mpl/dhcp/bin/server/Makefile 1.2
895descr	fails to compile, confused by builtin_object_size in strcat(p, ".in..")
896kcah
897
898port	arm
899hack	avoid using labels in a 12-bit constant.
900cdate	Mon Mar 30 05:26:47 2015 UTC
901who	matt
902file	crypto/external/bsd/openssl/lib/libcrypto/arch/arm/aes-armv4.S: 1.2
903descr	workaround for clang misassembling an instruction
904kcah
905
906port	sparc64
907hack	during profiling with -m32 (and ASLR) labels are not generated
908	consistently
909cdate	Sat Feb 11 04:56:37 2017 UTC
910who	christos
911file	/cvsroot/src/crypto/external/bsd/heimdal/lib/libasn1/Makefile: 1.4
912desc 	asn1_krb5_asn1.po does not produce the same results during successive
913	compilation runs; it is bimodal. Turning optimization to -O0 fixes
914	the issue
915kcah
916
917port	ia64
918hack	ski emulator crashes
919cdate	Sat Apr 8 18:10:43 2017 UTC
920who	scole
921file	/cvsroot/src/sys/external/bsd/acpica/dist/tables/tbxfload.c: 1.6
922desc
923	ski emulator crashes during acpi detection.  Added a check for
924	uninitialized index.  Submitted a request for change with upstream
925	mailing list, but never got a response
926kcah
927
928port	vax
929hack	compile rtld.c with -O0
930cdate	Wed Apr  3 17:38:38 EDT 2019
931who	christos
932file	src/libexec/ld.elf_so/Makefile: 1.141
933descr	Disable optimization for rtld.c on the vax with gcc-7. Crashes on the
934	second pass loop with elm == 0xffffffff
935kcah
936
937port	alpha
938hack	GCC 7.4/8.3: userland binaries crash randomly (port-alpha/54307)
939cdate	Fri Nov  1 20:43:35 UTC 2019
940who	rin
941file	src/external/bsd/jemalloc/lib/Makefile.inc: 1.11
942descr	rtree.c and tcache.c need to be compiled with -O0, alternatively,
943	you can compile whole jemalloc with -DJEMALLOC_DEBUG.
944kcah
945
946port	powerpc
947hack	compile tc.c, logerr.c, ubsan.c with -O0 for clang
948cdate	Wed Jan 29 17:40:19 EST 2020
949who	christos
950file	src/external/bsd/atf/lib/libatf-c/Makefile: 1.22
951file	src/external/bsd/dhcpcd/sbin/dhcpcd/Makefile: 1.49
952file	src/tests/lib/libc/misc/Makefile: 1.5
953
954descr	Disable optimization on tc.c, logerr.c, ubsan.c crashes:
955	lib/libLLVMCodeGen/../../llvm/../../external/apache2/llvm/lib/..\
956	/dist/llvm/include/llvm/CodeGen/MachineFrameInfo.h", line 495, \
957	function "__int64_t llvm::MachineFrameInfo::getObjectOffset(int) const"
958kcah
959
960port	earmv7hf*
961hack	compile gdb/dwarf2expr.c with -O0 for GCC8 (toolchain/54820 and 54877)
962cdate	Wed Apr 29 11:04:58 UTC 2020
963who	rin
964file	src/external/gpl3/gdb/lib/libgdb/Makefile: 1.22
965descr	GCC 8.4 miscompiles dwarf2expr.c with -O2 or -O1, which results in
966	crashes with 'gdb_exception_RETURN_MASK_ERROR'. Note that this occurs
967	only for earmv7hf{,eb} as far as I can see. Neither earmv6hf{,eb} nor
968	earmv7{,eb} (softfloat) are affected.
969kcah
970