HACKS revision 1.61
1# $NetBSD: HACKS,v 1.61 2006/05/12 03:26:54 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	netstat ieee1394 address printing.
31mdate	14 Nov 2000
32who	matt
33file	lib/libc/net/getnameinfo.c	: 1.32 : 497 : 503
34descr
35	Because the current implementation of IP over IEEE1394, the
36	fw device address contains more than just the IEEE1394 EUI-64.
37	So when printing out IEEE1394 addresses, ignore the extra stuff.
38kcah
39
40hack	xterm vs. libterm
41mdate	01 Aug 2000
42who	jdc
43file	xsrc/xc/programs/xterm/main.c	: 1.2 : 3609 : 3614
44pr	10383
45descr
46	In order to extend the termcap string over 1023 bytes, a ZZ entry was
47	introduced to point to a memory location containing the full entry.
48	Without this hack, xterm will export a termcap containing the ZZ
49	entry, which will then be ignored by libterm.  As xterm modifies the
50	exported termcap, this would cause those modifications to be ignored.
51kcah
52
53hack	wi-at-big-endian-bus
54cdate	15 Mar 2002
55who	martin
56file	dev/ic/wireg.h
57descr	Add an option to access the underlying bus in big endian byte order
58	to work around deficiencies in bus_space_{read,write}_* macros.
59	Those don't allow the implementation of a proper pcmcia bus space
60	tag.
61kcah
62
63hack	specific knowledge of colours in curses code
64cdate	Sun Apr  6 11:05:24 BST 2003
65who	jdc
66file	lib/libcurses/color.c : r1.24
67descr
68	Swap red/blue and yellow/cyan colours for COLOR_OTHER.
69	Fix is to enhance libtermcap to understand terminfo-style % sequences.
70	See also:
71	    http://mail-index.NetBSD.org/tech-userlevel/2003/04/06/0000.html
72kcah
73
74hack	Compensation for differing types of LINUX_USRSTACK and USRSTACK
75cdate	21 Aug 2003
76who	he
77file	sys/miscfs/procfs/procfs_linux.c : 1.14
78descr
79	Not all ports have LINUX_USRSTACK and/or USRSTACK defined as
80	literals/constants, but refer to variables of a type which is
81	not "unsigned long", causing compilation of procfs_linux.c to
82	fail with "makes integer from pointer without a cast".  This
83	is observed on e.g. the sun3 port.  Ideally the "types" for
84	symbols should be consistent across all ports.
85kcah
86
87hack	GCC2 isn't C99
88cdate	5 December 2003
89who	mrg
90file	gnu/dist/binutils/ld/ldlex.c: r1.2
91descr
92	ldlex.c is generated from ldlex.l and we get macro redefinition
93	errors from it if __STDC_VERSION__ is not C99 compliant.  This
94	hack forces NetBSD 1.6 and later systems to also include <stdint.h>
95	to get the relevant definitions.  This hack should be backed out
96	when all platforms have switched away from GCC2.
97kcah
98
99hack	gcc-strict-aliasing
100cdate	6 August 2004
101who	junyoung
102pr	26516
103file	src/usr.sbin/racoon/racoon/Makefile : 1.21
104descr
105	GCC issues a warning "dereferencing type-punned pointer will break
106	strict-aliasing rules" when compiling
107	crypto/dist/kame/racoon/crypto/openssl.c with -O[23s]. Note that this
108	is due to use of type casting in a non-standard way in the code and
109	not a compiler bug. Once a new release of KAME with a proper fix
110	applied is imported this should be backed out.
111kcah
112
113hack	gcc4 wrong uninitialised variable
114mdate	10 May 2006
115who	mrg
116file	bin/ksh/eval.c			: 1.6
117file	bin/sh/histedit.c		: 1.39
118file	bin/sh/parser.c			: 1.60
119file	bin/systrace/systrace.c		: 1.33
120file	crypto/dist/heimdal/kdc/524.c	: 1.10
121file	crypto/dist/ssh/sftp.c		: 1.20
122file	crypto/dist/ssh/ssh-keysign.c	: 1.11
123file	dist/ipf/lib/hostname.c		: 1.2
124file	dist/ipf/tools/ipmon.c		: 1.8
125file	dist/ntp/ntpd/refclock_shm.c	: 1.4
126file	dist/ntp/sntp/timing.c		: 1.3
127file	dist/pppd/pppstats/pppstats.c	: 1.3
128file	dist/smbfs/lib/smb/rap.c	: 1.6
129file	dist/tcpdump/print-zephyr.c	: 1.5
130file	gnu/libexec/uucp/uucico/uucico.c : 1.6
131file	lib/libc/citrus/citrus_csmapper.c : 1.6
132file	lib/libc/citrus/citrus_pivot_factory.c : 1.5
133file	lib/libc/inet/inet_cidr_ntop.c	: 1.3
134file	lib/libc/inet/inet_ntop.c	: 1.3
135file	lib/libc/stdio/vfwprintf.c	: 1.8
136file	libexec/ld.elf_so/arch/sparc64/mdreloc.c : 1.39
137file	sbin/fsck_ext2fs/dir.c		: 1.19
138file	sbin/routed/rtquery/rtquery.c	: 1.18
139file	sys/crypto/cast128/cast128.c	: 1.9
140file	sys/ddb/db_command.c		: 1.86
141file	sys/dev/cardbus/cardbus_map.c	: 1.xxx
142file	sys/dev/fss.c			: 1.25
143file	sys/dev/ic/mb86950.c		: 1.xxx
144file	sys/dev/ic/midway.c		: 1.71
145file	sys/dev/usb/ohci.c		: 1.xxx
146file	sys/dev/usb/uhci.c		: 1.xxx
147file	sys/dev/pci/cmpci.c		: 1.xxx
148file	sys/dev/pci/machfb.c		: 1.45
149file	sys/dist/ipf/netinet/ip_nat.c	: 1.10
150file	sys/dist/ipf/netinet/ip_rpcb_pxy.c : 1.8
151file	sys/dist/pf/net/pf.c		: 1.22
152file	sys/fs/udf/udf_vnops.c		: 1.4
153file	sys/kern/kern_sig.c		: 1.219
154file	sys/kern/tty.c			: 1.181
155file	sys/net/bpf.c			: 1.116
156file	sys/net/zlib.c			: 1.26
157file	sys/netccitt/if_x25subr.c	: 1.xxx
158file	sys/netinet/in.c		: 1.107
159file	sys/netsmb/smb_smb.c		: 1.27
160file	sys/netsmb/smb_trantcp.c	: 1.22
161file	sys/nfs/nfs_serv.c		: 1.108
162file	sys/nfs/nfs_socket.c		: 1.129
163file	sys/nfs/nfs_syscalls.c		: 1.91
164file	sys/ufs/lfs/lfs_vfsops.c	: 1.207 [also (char *)]
165file	usr.bin/ftp/ftp.c		: 1.140
166file	usr.bin/find/function.c		: 1.54
167file	usr.bin/mail/tty.c		: 1.20
168file	usr.bin/nl/nl.c			: 1.7
169file	usr.bin/systat/keyboard.c	: 1.23
170file	usr.bin/usbhidctl/usbhid.c	: 1.29
171file	usr.bin/vi/cl/cl_read.c		: 1.5
172file	usr.bin/vi/ex/ex_cscope.c	: 1.12
173file	usr.bin/vi/ex/ex_tag.c		: 1.19
174file	usr.bin/vi/vi/v_txt.c		: 1.15
175file	usr.sbin/altq/altqstat/qdisc_rio.c : 1.4
176file	usr.sbin/cron/do_command.c	: 1.19
177file	usr.sbin/timed/timed/slave.c	: 1.15
178descr
179	GCC 4.1 gets many uninitialised variable warnings wrong.  We should
180	really audit all the old hacks like this when older compilers are
181	removed from the tree, as many are probably no longer required.
182kcah
183
184hack	gcc4 pointer sign and strict aliasing problems
185mdate	10 May 2006
186who	mrg
187file	bin/ed/Makefile			: 1.33
188file	bin/systrace/Makefile		: 1.12
189file	games/bcd/Makefile		: 1.5
190file	games/dab/Makefile		: 1.5
191file	games/larn/Makefile		: 1.17
192file	games/pom/Makefile		: 1.5
193file	lib/libasn1/Makefile		: 1.26
194file	lib/libcrypt/Makefile		: 1.17
195file	lib/libgssapi/Makefile		: 1.16
196file	lib/libhdb/Makefile		: 1.20
197file	lib/libkadm5clnt/Makefile	: 1.21
198file	lib/libkadm5srv/Makefile	: 1.25
199file	lib/libkrb5/Makefile		: 1.35
200file	lib/libssh/Makefile		: 1.6
201file	lib/libtelnet/Makefile		: 1.26
202file	libexec/getty/Makefile		: 1.14
203file	libexec/kadmind/Makefile	: 1.19
204file	libexec/kpasswdd/Makefile	: 1.14
205file	sbin/atactl/Makefile		: 1.3
206file	sbin/cgdconfig/Makefile		: 1.7
207file	sbin/clri/Makefile		: 1.13
208file	sbin/dkctl/Makefile		: 1.4
209file	sbin/dump/Makefile		: 1.33
210file	sbin/fdisk/Makefile		: 1.35
211file	sbin/fsck_ext2fs/Makefile	: 1.11
212file	sbin/fsck_ffs/Makefile		: 1.29
213file	sbin/fsdb/Makefile		: 1.18
214file	sbin/mount_smbfs/Makefile	: 1.4
215file	sbin/newfs/Makefile		: 1.30
216file	sbin/newfs_sysvbfs/Makefile	: 1.2
217file	sbin/restore/Makefile		: 1.23
218file	sbin/veriexecctl/Makefile	: 1.11
219file	usr.bin/awk/Makefile		: 1.9
220file	usr.bin/ctags/Makefile		: 1.8
221file	usr.bin/gzip/Makefile		: 1.10
222file	usr.bin/ssh/sftp/Makefile	: 1.10
223file	usr.bin/ssh/ssh/Makefile	: 1.25
224file	usr.bin/vi/build/Makefile	: 1.26
225file	usr.bin/telnet/Makefile		: 1.40
226file	usr.bin/tn3270/tn3270/Makefile	: 1.36
227file	usr.bin/tr/Makefile		: 1.4
228file	usr.sbin/amd/amd/Makefile	: 1.27
229file	usr.sbin/amd/amq/Makefile	: 1.14
230file	usr.sbin/amd/libamu/Makefile	: 1.20
231file	usr.sbin/amd/pawd/Makefile	: 1.5
232file	usr.sbin/bind/Makefile.inc	: 1.22
233file	usr.sbin/bind/libdns/Makefile	: 1.3
234file	usr.sbin/bind/named/Makefile	: 1.17
235file	usr.sbin/bootp/bootptest/Makefile : 1.2
236file	usr.sbin/chrtbl/Makefile	: 1.6
237file	usr.sbin/cron/Makefile		: 1.12
238file	usr.sbin/dhcp/Makefile.inc	: 1.20
239file	usr.sbin/dumplfs/Makefile	: 1.11
240file	usr.sbin/hprop/Makefile		: 1.13
241file	usr.sbin/installboot/Makefile	: 1.35
242file	usr.sbin/ipf/ipftest/Makefile	: 1.32
243file	usr.sbin/isdn/isdnd/Makefile	: 1.6
244file	usr.sbin/isdn/isdnmonitor/Makefile : 1.3
245file	usr.sbin/isdn/isdntel/Makefile	: 1.2
246file	usr.sbin/isdn/isdntrace/Makefile : 126
247file	usr.sbin/mopd/common/Makefile	: 1.10
248file	usr.sbin/mopd/mopd/Makefile	: 1.9
249file	usr.sbin/mopd/mopprobe/Makefile	: 1.7
250file	usr.sbin/makefs/Makefile	: 1.17
251file	usr.sbin/mscdlabel/Makefile	: 1.5
252file	usr.sbin/pkg_install/add/Makefile : 1.7
253file	usr.sbin/pkg_install/create/Makefile : 1.5
254file	usr.sbin/pkg_install/lib/Makefile : 1.28
255file	usr.sbin/ntp/ntpd/Makefile	: 1.10/1.11
256file	usr.sbin/ntp/ntptime/Makefile	: 1.4/1.5
257file	usr.sbin/pppd/Makefile.inc	: 1.3
258file	usr.sbin/pppd/pppd/Makefile	: 1.38
259file	usr.sbin/rarpd/Makefile		: 1.10
260file	usr.sbin/rbootd/Makefile	: 1.10
261file	usr.sbin/rpc.pcnfsd/Makefile	: 1.17
262file	usr.sbin/rtadvd/Makefile	: 1.9
263file	usr.sbin/tcpdump/Makefile	: 1.42
264file	usr.sbin/wiconfig/Makefile	: 1.3
265file	usr.sbin/ypserv/ypserv/Makefile	: 1.16
266descr
267	GCC 4.1 warns on pointer sign comparision/assignments and lots of
268	code does not conform.  For now we use -Wno-pointer-sign and
269	-fno-strict-aliasing.
270kcah
271
272
273port	vax
274
275	hack	gcc 2.95/vax doesn't like abort being used as function pointer
276	cdate	Tue Dec 13 05:54:50 GMT 2005
277	who	jmc
278	file	lib/libc/rpc/svc_vc.c 1.15
279	descr
280		Provide a local definition for abort which doesn't include
281		the noreturn attribute which trips up gcc 2.95 on vax.
282	
283	hack	gcc 2.95/vax doesn't have stdbool.h and gettext needs it
284	cdate	Mon May  9 12:16:22 CDT 2005
285	who	jmc
286	file	gnu/usr.bin/gettext/Makefile.inc.prog 1.5
287		gnu/usr.bin/gettext/libgrep/Makefile 1.3
288		gnu/usr.bin/gettext/libnlspr/Makefile 1.5
289		gnu/usr.bin/gettext/libnlsut/Makefile 1.3   
290	descr
291		The latest gettext assumes a C99 environment or at least
292		configure checks to work around this. As we don't use configure
293		provide a stdbool.h for vax builds locally in directories from
294		the template provided by the gettext code.
295	
296	hack	gcc 2.95/vax can't handle __used__ in mcount.c
297	cdate	Fri May  6 14:30:53 CDT 2005
298	who	jmc
299	file	src/lib/libc/gmon/mcount.c 1.17
300	descr
301                Recent changes to mark this as __used__ to prevent optimization
302                away on sparc64 don't work on 2.95 vax. Ifdef'd back in the
303                old __unused__ if on vax.
304	
305	hack	gcc 2.95/vax cannot handle __builtin_ffs()
306	cdate	Fri Aug 23 21:31:15 CEST 2002
307	who	ragge
308	file	sys/lib/libkern/libkern.h : 1.42
309	descr
310		__builtin_ffs() is ifdef'd away if __vax__. Matt Thomas has
311		added this feature to GCC 3 so it can be removed when switching.
312	
313
314	hack	gcc-vax-libbz2
315	mdate	27 Jun 2002
316	who	thorpej
317	file	lib/libbz2/Makefile
318	descr
319		libbz2 is mis-compiled with optimization with GCC 2.95.3
320		on VAX.  -O0 works around this problem.
321	kcah
322
323	hack	gawk
324	mdate	8 Nov 2003
325	who	ragge
326	file	gnu/usr.bin/gawk/Makefile
327	descr
328		gawk is mis-compiled with optimization with GCC 2.95.3
329		on VAX.  -O0 works around this problem.
330	kcah
331
332	hack	vax Toolchain bug
333	cdate	28 Mar 2003
334	who	he
335	file	sys/arch/vax/vax/intvec.S : 1.5
336	descr
337		Workaround for PR toolchain/20924.  The assembler apparently
338		tries to range-check byte offsets when it doesn't have
339		sufficient information to make that decision.
340		Workaround uses `brw' instead of `brb' instruction.
341	kcah
342
343	hack	vax gcc 2.95.3 -Wuninitialized workarounds
344	cdate	6 Nov 2003
345	who	he
346	file	sys/dev/bi/if_ni.c : 1.22
347	file	sys/arch/vax/vax/ctu.c : 1.20
348	descr
349		Workaround for gcc 2.95.3 failing to detect that certain
350		variables will be initialized; so that this code compiles
351		with -Wuninitialized.  Should be reviewed and possibly
352		reverted when gcc 3.3.2 is ready for vax.
353	kcah
354
355	hack	vax gcc 2.95.3 structure initialization
356	cdat	13 May 2004
357	who	cl
358	file	sys/miscfs/kernfs/kernfs_vnops.c : 1.104
359	descr
360		Workaround for gcc 2.95.3 failing to initialize structures
361		and/or unions inside structures using nested designators.
362		Should be reverted when gcc >=3.3.3 is ready for vax.
363	kcah
364
365	hack	vax gcc 2.95.3 needs -I. to build nslexer.c
366	cdat	6 Jun 2004
367	who	mhitch
368	file	lib/libc/arch/vax/Makefile.inc : 1.6
369	descr
370		It appears necessary to add -I. to CPPFLAGS when building
371		nslesxer.c.  This may be caused by gcc 2.95.3 being used.
372		Should be reverted when a newer gcc is ready for vax.
373	kcah
374
375	hack	vax gcc 2.95.3 doesn't understand "-std=c99"
376	cdat	5 April 2005
377	who	tron
378	file	src/share/mk/bsd.sys.mk
379	descr
380		We cannot use "-std=c99" for compiler warning level 4 and above
381		because gcc 2.95.3 doesn't support that option.
382	kcah
383
384	hack	declare boolean_t in two IPF user-mode programs
385	cdate	Tue Mar  7 19:19:20 CET 2006
386	who	he
387	file	dist/ipf/ipsend/iptests.c : 1.8
388		dist/ipf/ipsend/sock.c : 1.7
389	descr
390		The IPF user-mode programs ipsend and iptest first
391		include <sys/types.h> without _KERNEL defined, and
392		later include <sys/file.h> with _KERNEL defined.
393		This causes a build failure when building for vax,
394		since <sys/device.h> ends up being included without
395		bollean_t being defined by <sys/types.h>.
396		Build failure and further details documented in
397		PR#32907.
398	kcah
399
400port	sparc64
401
402	hack	binutil-2.11-sparc64-pltrela
403	mdate	14 Aug 2001
404	who	eeh
405	file	libexec/ld.elf_so/arch/sparc64/mdreloc.c
406	descr
407		The first four PLT entries are reserved.  There is some
408		disagreement whether they should have associated relocation
409		entries.  Both the SPARC 32-bit and 64-bit ELF specifications
410		say that they should have relocation entries, but the 32-bit
411		SPARC binutils do not generate them, and now the 64-bit SPARC
412		binutils have stopped generating them too.
413
414		To provide binary compatibility, we will check the first entry,
415		if it is reserved it should not be of the type JMP_SLOT.  If it
416		is JMP_SLOT, then the 4 reserved entries were not generated and
417		our index is 4 entries too far, so we frob the rela pointer.
418	kcah
419
420
421port	arm
422
423	hack	gcc-unsigned-compare
424	cdate	09 Mar 2002
425	mdate	18 Mar 2002
426	who	bjh21
427	file	dist/bind/lib/nameser/ns_parse.c : 1.3
428	file	dist/dhcp/minires/ns_parse.c : 1.3
429	file	dist/dhcp/omapip/result.c : 1.2
430	file	dist/dhcp/server/failover.c : 1.3
431	file	gnu/dist/gawk/eval.c : 1.4
432	file	gnu/dist/toolchain/bfd/bfd.c : 1.2
433	file	gnu/dist/toolchain/bfd/format.c : 1.2
434	file	gnu/dist/toolchain/gdb/target.c : 1.2
435	file	sys/kern/vfs_subr.c : 1.172
436	descr	When checking that a potentially-unsigned enum is >= 0, assign
437		it to an int first.  This is necessary to avoid "comparison is
438		always true" warnings with -fshort-enums.  Casting to an int
439		really should be enough, but turns out not to be.
440	kcah
441
442	hack	gcc 3.3.2/arm sys/kern/uipc_socket.c
443	cdate	Tue Oct 28 18:02:16 GMT 2003
444	who	skrll
445	pr	23044
446	file	sys/arch/arm/conf/Makefile.arm : 1.19
447	descr
448		Performing a build.sh tools on a CATS with NFS mounted 
449		obj and src directories results in "panic: receive 1"
450		The hack is to compile sys/kern/uipc_socket.c with
451		-fno-strict-aliasing
452	kcah
453
454
455port	pc532
456
457	hack	egcs-pc532-ip6_mroute
458	cdate	09 Jul 2002
459	who	simonb
460	file	sys/arch/pc532/conf/Makefile.pc532 : 1.70
461	file	sys/arch/pc532/conf/files.pc532 : 1.47
462	descr
463		egcs 1.1.2 gets an "internal error--insn does not satisfy its
464		constraints" error compiling ip6_mroute.c with -O2 or greater.
465		-O1 works around this problem.
466	kcah
467
468	hack	gcc-pc532-duffs_device
469	cdate	Mon Oct 27 07:23:05 UTC 2003
470	who	simonb
471	file	sys/arch/pc532/conf/Makefile.pc532 : 1.71
472	file	sys/arch/pc532/conf/files.pc532 : 1.52
473	pr	GCC PR optimization/5230
474	descr
475		gcc incorrectly gives an "unreachable code at beginning of
476		switch statement" for a Duff's device construct in
477		arch/pc532/dev/ncr.c.  There is no way to disable just this
478		warning, so -Wno-error is turned on for this file.
479	kcah
480
481	hack	gcc332-cppmacro-ice
482	cdate	Sun Dec  7 12:48:33 UTC 2003
483	who	simonb
484	file	gnu/usr.bin/gcc3/libcpp/Makefile : 1.2
485	descr
486		gcc 3.3.2 gets an ICE when compiling cppmacro.c with -O2.
487		The hack is to use -O1 for this file.  Fixed in gcc
488		-current mainline, unable to work out where the fix is
489		right now.
490	kcah
491
492
493port	sh3
494
495	hack	gcc-sh3-sed
496	mdate	23 Apr 2002
497	who	thorpej
498	file	usr.bin/sed/Makefile	: 1.9 : 9 : 13
499	descr
500		The in-tree GCC 2.95.3-based compiler ICEs when building
501		with optimization for SuperH.  Hack is to build with -O0.
502	kcah
503
504
505port	sh5
506
507	hack	SuperH SH5 Toolchain Bugs
508	cdate	11 Jul 2002
509	who	scw
510	file	usr.sbin/ndbootd/ndbootd.c : 1.6
511	file	usr.sbin/traceroute/traceroute.c : 1.48
512	descr
513		The SuperH SH5 toolchain (2.97-sh5-010522) gets an internal
514		compiler error when assigning a bit-wise inverted value
515		under some circumstances.
516		Work around it by splitting the statement into two.
517	kcah
518
519	hack	SuperH SH5 Toolchain Bugs
520	cdate	17 May 2003
521	who	scw
522	file	lib/libpthread/pthread_lock.c : 1.7
523	descr
524		The SuperH SH5 toolchain generates incorrect PIC code when
525		faced with a symbol which is declared extern, but has local
526		scope due to being defined within an asm() statement (without
527		being declared .globl in that statement). Work around it by
528		adding the .globl.
529	kcah
530
531	hack	gcc 3.3.2 on sh5 - ICE compiling reload1.c at -O2
532	cdate	Sun Dec  7 19:44:05 GMT 2003
533	who	scw
534	file	gnu/usr.bin/gcc3/backend/Makefile : 1.13
535	descr
536		Gcc3 for sh5 gets an ICE compiling reload1.c at -O2.
537		Drop to -O1 for now when building for sh5.
538	kcah
539
540	hack	gcc 3.3.2 on sh5 - ICE compiling elf32.c/elf64.c at -O2
541	cdate	Sun Dec  7 21:10:46 GMT 2003
542	who	scw
543	file	gnu/lib/libbfd/Makefile : 1.39
544	descr
545		Gcc3 for sh5 gets an ICE compiling libbfd's elf32.c
546		and elf64.c at -O2.
547		Drop to -O1 for now when building for sh5.
548	kcah
549
550
551	hack	gcc 3.3.2 on sh5 - fatal warning compiling function.c
552	cdate	Sun Dec  7 19:44:05 GMT 2003
553	who	scw
554	file	gnu/usr.bin/gcc3/backend/Makefile : 1.13
555	descr
556		Gcc3 for sh5 issues a warning:
557		.../gnu/dist/gcc/gcc/function.c:4742: warning: `and' of
558		    mutually exclusive equal-tests is always 0.
559		This causes the build to fail because of -Werror.
560		Work-around by defining NOGCCERROR when building for sh5.
561	kcah
562
563	hack	gcc 3.3.3 on sh5 - ICE compiling rbtdb.c and rbtdb64.c
564	cdate	Thu Nov 11 00:35:33 UTC 2004
565	who	he
566	file	usr.sbin/bind/libdns/Makefile/1.2
567	descr
568		Gcc3 for sh5 gets an ICE compiling these files at -O2.
569		Drop to -O1 for now when building for sh5.
570	kcah
571
572	hack	gcc 3.3.3 nb3 on sh5 - ICE compiling bsd-comp.c
573	cdate	Thu May 25 23:05:20 UTC 2005
574	who	he
575	file	sys/lkm/net/bsdcomp/Makefile : 1.3
576	descr
577		Gcc3 for sh5 gets an ICE compiling this at -O2,
578		"could not split insn".  Drop to -O1 for sh5.
579	kcah
580
581	hack	gcc 3.3.3 nb3 on sh5 - ICE compiling strtod.c
582	cdate	Tue Jan 31 10:51:52 GMT 2006
583	who	scw
584	file	lib/libc/gdtoa/Makefile.inc : 1.2
585	descr
586		Gcc3 for sh5 gets an ICE compiling this at -O2,
587		"could not split insn".  Drop to -O1 for sh5.
588	kcah
589
590port	sun2
591
592	hack	gcc 3.3.2/mdsetimage
593	cdate	Tue Oct 28 18:43:05 EST 2003
594	who	fredette
595	file	gnu/usr.sbin/mdsetimage/Makefile : 1.15
596	descr
597		mdsetimage.c causes cc1 to barf for as-yet unknown reasons.
598		this hack uses -O0 to avoid the problem.
599	kcah
600
601	hack	gcc 3.3.2/installboot/ffs.c
602	cdate	Tue Oct 28 18:43:05 EST 2003
603	who	fredette
604	file	usr.sbin/installboot/Makefile : 1.26
605	descr
606		ffs.c causes cc1 to barf for as-yet unknown reasons.  this
607		hack uses -O0 to avoid the problem.
608	kcah
609
610
611port	m68000
612
613	hack	gcc 3.3.2/gcc/ra-colorize.c
614	cdate	Wed Nov  5 11:03:13 EST 2003
615	who	mrg
616	file	gnu/usr.bin/gcc3/backend/Makefile : 1.11
617	descr
618		ra-colorize.c causes a whole spew of unreferenced .L* local
619		symbols.  using -O0 (or even -O2 reportedly) avoids the problem.
620		Note this has been fixed in 3.3.3 at least on m68k,
621		but it hasn't been confirmed on sun2/m68000.
622		(it's too slow even on emulator and unlikely to build
623		 toolchains on sun2 with its maximum 4MB RAM)
624	kcah
625
626port	sparc64
627
628	hack	disable optimzations for uvm_bio.c on 32 bit kernels
629	cdate	Sun Mar 21 14:14:04 MET 2004
630	who	martin
631	file	sys/arch/sparc64/conf/Makefile.sparc64 : 1.53-1.54
632	file	sys/arch/sparc64/conf/files.sparc64 : 1.93
633	descr
634		The sparc compiler miscompiles uvm_bio.c when using
635		any optimization. This results in ubc_release panics.
636	kcah
637
638port	macppc
639
640	hack	remove inline from rotate_{left,right}
641	cdate	Tue Feb 22 13:43:25 EST 2005
642	who	christos
643	file	src/dist/bind/lib/dns/rbt.c
644	descr
645		The macppc gcc-3.3 compiler miscompiles rbt.c when these
646		functions are inlined. The error is:
647		.* named[368]: rbt.c:1584: INSIST(child != (void *)0) >failed
648		.* named[368]: exiting (due to assertion failure)
649		This is reportedly fixed in gcc-3.4
650	kcah
651
652port	hppa
653
654	hack	hppa-gcc-3.3.3/grep/dfa.c
655	cdate	Sun Aug  8 08:34:32 PDT 2004
656	who	chs
657	file	gnu/usr.bin/grep/grep/Makefile : 1.4
658	descr
659		gcc 3.3.3 generates bad code for dfa.c with -O2,
660		reduce optimization to -O1 to avoid the bug.
661	kcah
662
663	hack	hppa-gcc-3.3.3 / make/buf.c
664	cdate	Mon May  8 13:02:36 CEST 2006
665	who	he
666	file	usr.bin/make/Makefile : 1.34
667	descr
668		gcc 3.3.3 nb3 gets an "unrecognized insn" internal
669		compiler error when building this file with -O2,
670		reduce optimization to -O1 to avoid the bug.
671	kcah
672
673	hack	hppa boot-from-disk memory corruption
674	cdate	Wed May 18 06:56:07 PDT 2005
675	who	chs
676	file	src/sys/dev/scsipi/scsipiconf.h : 1.98
677	descr
678		There is some bug with DMA on hppa that corrupts scsipi_xfer
679		structures, but it only shows up when booting from disk.
680		For now, we'll add some padding to scsipi_xfer so that
681		the corrupted memory is not otherwise used.
682	kcah
683
684port	mips
685
686	hack	mips-shared-linker-load-address
687	cdate	Fri Oct  7 08:33:10 UTC 2005
688	who	simonb
689	file	src/sys/kern/exec_elf32.c : 1.107
690	descr
691		With COMPAT_16 or previous enabled (which enables
692		ELF_INTERP_NON_RELOCATABLE) a recent ld.elf_so will
693		load and run at address 0.  The check to fix this in
694		rev 1.107 only checks the first psection of the ELF
695		executable, which may not be loadable.  A more correct
696		fix is to check the first loadable psection instead of
697		just the first psection.
698	kcah
699
700