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