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