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