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