HACKS revision 1.60
1# $NetBSD: HACKS,v 1.60 2006/05/11 23:51:06 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/ssh/sftp/Makefile	: 1.10
222file	usr.bin/ssh/ssh/Makefile	: 1.25
223file	usr.bin/vi/build/Makefile	: 1.26
224file	usr.bin/telnet/Makefile		: 1.40
225file	usr.bin/tn3270/tn3270/Makefile	: 1.36
226file	usr.bin/tr/Makefile		: 1.4
227file	usr.sbin/amd/amd/Makefile	: 1.27
228file	usr.sbin/amd/amq/Makefile	: 1.14
229file	usr.sbin/amd/libamu/Makefile	: 1.20
230file	usr.sbin/amd/pawd/Makefile	: 1.5
231file	usr.sbin/bind/Makefile.inc	: 1.22
232file	usr.sbin/bind/libdns/Makefile	: 1.3
233file	usr.sbin/bind/named/Makefile	: 1.17
234file	usr.sbin/bootp/bootptest/Makefile : 1.2
235file	usr.sbin/chrtbl/Makefile	: 1.6
236file	usr.sbin/cron/Makefile		: 1.12
237file	usr.sbin/dhcp/Makefile.inc	: 1.20
238file	usr.sbin/dumplfs/Makefile	: 1.11
239file	usr.sbin/hprop/Makefile		: 1.13
240file	usr.sbin/installboot/Makefile	: 1.35
241file	usr.sbin/ipf/ipftest/Makefile	: 1.32
242file	usr.sbin/isdn/isdnd/Makefile	: 1.6
243file	usr.sbin/isdn/isdnmonitor/Makefile : 1.3
244file	usr.sbin/isdn/isdntel/Makefile	: 1.2
245file	usr.sbin/isdn/isdntrace/Makefile : 126
246file	usr.sbin/makefs/Makefile	: 1.17
247file	usr.sbin/mscdlabel/Makefile	: 1.5
248file	usr.sbin/pkg_install/add/Makefile : 1.7
249file	usr.sbin/pkg_install/create/Makefile : 1.5
250file	usr.sbin/pkg_install/lib/Makefile : 1.28
251file	usr.sbin/ntp/ntpd/Makefile	: 1.10/1.11
252file	usr.sbin/ntp/ntptime/Makefile	: 1.4/1.5
253file	usr.sbin/pppd/Makefile.inc	: 1.3
254file	usr.sbin/pppd/pppd/Makefile	: 1.38
255file	usr.sbin/rarpd/Makefile		: 1.10
256file	usr.sbin/rbootd/Makefile	: 1.10
257file	usr.sbin/rpc.pcnfsd/Makefile	: 1.17
258file	usr.sbin/rtadvd/Makefile	: 1.9
259file	usr.sbin/tcpdump/Makefile	: 1.42
260file	usr.sbin/wiconfig/Makefile	: 1.3
261file	usr.sbin/ypserv/ypserv/Makefile	: 1.16
262descr
263	GCC 4.1 warns on pointer sign comparision/assignments and lots of
264	code does not conform.  For now we use -Wno-pointer-sign and
265	-fno-strict-aliasing.
266kcah
267
268
269port	vax
270
271	hack	gcc 2.95/vax doesn't like abort being used as function pointer
272	cdate	Tue Dec 13 05:54:50 GMT 2005
273	who	jmc
274	file	lib/libc/rpc/svc_vc.c 1.15
275	descr
276		Provide a local definition for abort which doesn't include
277		the noreturn attribute which trips up gcc 2.95 on vax.
278	
279	hack	gcc 2.95/vax doesn't have stdbool.h and gettext needs it
280	cdate	Mon May  9 12:16:22 CDT 2005
281	who	jmc
282	file	gnu/usr.bin/gettext/Makefile.inc.prog 1.5
283		gnu/usr.bin/gettext/libgrep/Makefile 1.3
284		gnu/usr.bin/gettext/libnlspr/Makefile 1.5
285		gnu/usr.bin/gettext/libnlsut/Makefile 1.3   
286	descr
287		The latest gettext assumes a C99 environment or at least
288		configure checks to work around this. As we don't use configure
289		provide a stdbool.h for vax builds locally in directories from
290		the template provided by the gettext code.
291	
292	hack	gcc 2.95/vax can't handle __used__ in mcount.c
293	cdate	Fri May  6 14:30:53 CDT 2005
294	who	jmc
295	file	src/lib/libc/gmon/mcount.c 1.17
296	descr
297                Recent changes to mark this as __used__ to prevent optimization
298                away on sparc64 don't work on 2.95 vax. Ifdef'd back in the
299                old __unused__ if on vax.
300	
301	hack	gcc 2.95/vax cannot handle __builtin_ffs()
302	cdate	Fri Aug 23 21:31:15 CEST 2002
303	who	ragge
304	file	sys/lib/libkern/libkern.h : 1.42
305	descr
306		__builtin_ffs() is ifdef'd away if __vax__. Matt Thomas has
307		added this feature to GCC 3 so it can be removed when switching.
308	
309
310	hack	gcc-vax-libbz2
311	mdate	27 Jun 2002
312	who	thorpej
313	file	lib/libbz2/Makefile
314	descr
315		libbz2 is mis-compiled with optimization with GCC 2.95.3
316		on VAX.  -O0 works around this problem.
317	kcah
318
319	hack	gawk
320	mdate	8 Nov 2003
321	who	ragge
322	file	gnu/usr.bin/gawk/Makefile
323	descr
324		gawk is mis-compiled with optimization with GCC 2.95.3
325		on VAX.  -O0 works around this problem.
326	kcah
327
328	hack	vax Toolchain bug
329	cdate	28 Mar 2003
330	who	he
331	file	sys/arch/vax/vax/intvec.S : 1.5
332	descr
333		Workaround for PR toolchain/20924.  The assembler apparently
334		tries to range-check byte offsets when it doesn't have
335		sufficient information to make that decision.
336		Workaround uses `brw' instead of `brb' instruction.
337	kcah
338
339	hack	vax gcc 2.95.3 -Wuninitialized workarounds
340	cdate	6 Nov 2003
341	who	he
342	file	sys/dev/bi/if_ni.c : 1.22
343	file	sys/arch/vax/vax/ctu.c : 1.20
344	descr
345		Workaround for gcc 2.95.3 failing to detect that certain
346		variables will be initialized; so that this code compiles
347		with -Wuninitialized.  Should be reviewed and possibly
348		reverted when gcc 3.3.2 is ready for vax.
349	kcah
350
351	hack	vax gcc 2.95.3 structure initialization
352	cdat	13 May 2004
353	who	cl
354	file	sys/miscfs/kernfs/kernfs_vnops.c : 1.104
355	descr
356		Workaround for gcc 2.95.3 failing to initialize structures
357		and/or unions inside structures using nested designators.
358		Should be reverted when gcc >=3.3.3 is ready for vax.
359	kcah
360
361	hack	vax gcc 2.95.3 needs -I. to build nslexer.c
362	cdat	6 Jun 2004
363	who	mhitch
364	file	lib/libc/arch/vax/Makefile.inc : 1.6
365	descr
366		It appears necessary to add -I. to CPPFLAGS when building
367		nslesxer.c.  This may be caused by gcc 2.95.3 being used.
368		Should be reverted when a newer gcc is ready for vax.
369	kcah
370
371	hack	vax gcc 2.95.3 doesn't understand "-std=c99"
372	cdat	5 April 2005
373	who	tron
374	file	src/share/mk/bsd.sys.mk
375	descr
376		We cannot use "-std=c99" for compiler warning level 4 and above
377		because gcc 2.95.3 doesn't support that option.
378	kcah
379
380	hack	declare boolean_t in two IPF user-mode programs
381	cdate	Tue Mar  7 19:19:20 CET 2006
382	who	he
383	file	dist/ipf/ipsend/iptests.c : 1.8
384		dist/ipf/ipsend/sock.c : 1.7
385	descr
386		The IPF user-mode programs ipsend and iptest first
387		include <sys/types.h> without _KERNEL defined, and
388		later include <sys/file.h> with _KERNEL defined.
389		This causes a build failure when building for vax,
390		since <sys/device.h> ends up being included without
391		bollean_t being defined by <sys/types.h>.
392		Build failure and further details documented in
393		PR#32907.
394	kcah
395
396port	sparc64
397
398	hack	binutil-2.11-sparc64-pltrela
399	mdate	14 Aug 2001
400	who	eeh
401	file	libexec/ld.elf_so/arch/sparc64/mdreloc.c
402	descr
403		The first four PLT entries are reserved.  There is some
404		disagreement whether they should have associated relocation
405		entries.  Both the SPARC 32-bit and 64-bit ELF specifications
406		say that they should have relocation entries, but the 32-bit
407		SPARC binutils do not generate them, and now the 64-bit SPARC
408		binutils have stopped generating them too.
409
410		To provide binary compatibility, we will check the first entry,
411		if it is reserved it should not be of the type JMP_SLOT.  If it
412		is JMP_SLOT, then the 4 reserved entries were not generated and
413		our index is 4 entries too far, so we frob the rela pointer.
414	kcah
415
416
417port	arm
418
419	hack	gcc-unsigned-compare
420	cdate	09 Mar 2002
421	mdate	18 Mar 2002
422	who	bjh21
423	file	dist/bind/lib/nameser/ns_parse.c : 1.3
424	file	dist/dhcp/minires/ns_parse.c : 1.3
425	file	dist/dhcp/omapip/result.c : 1.2
426	file	dist/dhcp/server/failover.c : 1.3
427	file	gnu/dist/gawk/eval.c : 1.4
428	file	gnu/dist/toolchain/bfd/bfd.c : 1.2
429	file	gnu/dist/toolchain/bfd/format.c : 1.2
430	file	gnu/dist/toolchain/gdb/target.c : 1.2
431	file	sys/kern/vfs_subr.c : 1.172
432	descr	When checking that a potentially-unsigned enum is >= 0, assign
433		it to an int first.  This is necessary to avoid "comparison is
434		always true" warnings with -fshort-enums.  Casting to an int
435		really should be enough, but turns out not to be.
436	kcah
437
438	hack	gcc 3.3.2/arm sys/kern/uipc_socket.c
439	cdate	Tue Oct 28 18:02:16 GMT 2003
440	who	skrll
441	pr	23044
442	file	sys/arch/arm/conf/Makefile.arm : 1.19
443	descr
444		Performing a build.sh tools on a CATS with NFS mounted 
445		obj and src directories results in "panic: receive 1"
446		The hack is to compile sys/kern/uipc_socket.c with
447		-fno-strict-aliasing
448	kcah
449
450
451port	pc532
452
453	hack	egcs-pc532-ip6_mroute
454	cdate	09 Jul 2002
455	who	simonb
456	file	sys/arch/pc532/conf/Makefile.pc532 : 1.70
457	file	sys/arch/pc532/conf/files.pc532 : 1.47
458	descr
459		egcs 1.1.2 gets an "internal error--insn does not satisfy its
460		constraints" error compiling ip6_mroute.c with -O2 or greater.
461		-O1 works around this problem.
462	kcah
463
464	hack	gcc-pc532-duffs_device
465	cdate	Mon Oct 27 07:23:05 UTC 2003
466	who	simonb
467	file	sys/arch/pc532/conf/Makefile.pc532 : 1.71
468	file	sys/arch/pc532/conf/files.pc532 : 1.52
469	pr	GCC PR optimization/5230
470	descr
471		gcc incorrectly gives an "unreachable code at beginning of
472		switch statement" for a Duff's device construct in
473		arch/pc532/dev/ncr.c.  There is no way to disable just this
474		warning, so -Wno-error is turned on for this file.
475	kcah
476
477	hack	gcc332-cppmacro-ice
478	cdate	Sun Dec  7 12:48:33 UTC 2003
479	who	simonb
480	file	gnu/usr.bin/gcc3/libcpp/Makefile : 1.2
481	descr
482		gcc 3.3.2 gets an ICE when compiling cppmacro.c with -O2.
483		The hack is to use -O1 for this file.  Fixed in gcc
484		-current mainline, unable to work out where the fix is
485		right now.
486	kcah
487
488
489port	sh3
490
491	hack	gcc-sh3-sed
492	mdate	23 Apr 2002
493	who	thorpej
494	file	usr.bin/sed/Makefile	: 1.9 : 9 : 13
495	descr
496		The in-tree GCC 2.95.3-based compiler ICEs when building
497		with optimization for SuperH.  Hack is to build with -O0.
498	kcah
499
500
501port	sh5
502
503	hack	SuperH SH5 Toolchain Bugs
504	cdate	11 Jul 2002
505	who	scw
506	file	usr.sbin/ndbootd/ndbootd.c : 1.6
507	file	usr.sbin/traceroute/traceroute.c : 1.48
508	descr
509		The SuperH SH5 toolchain (2.97-sh5-010522) gets an internal
510		compiler error when assigning a bit-wise inverted value
511		under some circumstances.
512		Work around it by splitting the statement into two.
513	kcah
514
515	hack	SuperH SH5 Toolchain Bugs
516	cdate	17 May 2003
517	who	scw
518	file	lib/libpthread/pthread_lock.c : 1.7
519	descr
520		The SuperH SH5 toolchain generates incorrect PIC code when
521		faced with a symbol which is declared extern, but has local
522		scope due to being defined within an asm() statement (without
523		being declared .globl in that statement). Work around it by
524		adding the .globl.
525	kcah
526
527	hack	gcc 3.3.2 on sh5 - ICE compiling reload1.c at -O2
528	cdate	Sun Dec  7 19:44:05 GMT 2003
529	who	scw
530	file	gnu/usr.bin/gcc3/backend/Makefile : 1.13
531	descr
532		Gcc3 for sh5 gets an ICE compiling reload1.c at -O2.
533		Drop to -O1 for now when building for sh5.
534	kcah
535
536	hack	gcc 3.3.2 on sh5 - ICE compiling elf32.c/elf64.c at -O2
537	cdate	Sun Dec  7 21:10:46 GMT 2003
538	who	scw
539	file	gnu/lib/libbfd/Makefile : 1.39
540	descr
541		Gcc3 for sh5 gets an ICE compiling libbfd's elf32.c
542		and elf64.c at -O2.
543		Drop to -O1 for now when building for sh5.
544	kcah
545
546
547	hack	gcc 3.3.2 on sh5 - fatal warning compiling function.c
548	cdate	Sun Dec  7 19:44:05 GMT 2003
549	who	scw
550	file	gnu/usr.bin/gcc3/backend/Makefile : 1.13
551	descr
552		Gcc3 for sh5 issues a warning:
553		.../gnu/dist/gcc/gcc/function.c:4742: warning: `and' of
554		    mutually exclusive equal-tests is always 0.
555		This causes the build to fail because of -Werror.
556		Work-around by defining NOGCCERROR when building for sh5.
557	kcah
558
559	hack	gcc 3.3.3 on sh5 - ICE compiling rbtdb.c and rbtdb64.c
560	cdate	Thu Nov 11 00:35:33 UTC 2004
561	who	he
562	file	usr.sbin/bind/libdns/Makefile/1.2
563	descr
564		Gcc3 for sh5 gets an ICE compiling these files at -O2.
565		Drop to -O1 for now when building for sh5.
566	kcah
567
568	hack	gcc 3.3.3 nb3 on sh5 - ICE compiling bsd-comp.c
569	cdate	Thu May 25 23:05:20 UTC 2005
570	who	he
571	file	sys/lkm/net/bsdcomp/Makefile : 1.3
572	descr
573		Gcc3 for sh5 gets an ICE compiling this at -O2,
574		"could not split insn".  Drop to -O1 for sh5.
575	kcah
576
577	hack	gcc 3.3.3 nb3 on sh5 - ICE compiling strtod.c
578	cdate	Tue Jan 31 10:51:52 GMT 2006
579	who	scw
580	file	lib/libc/gdtoa/Makefile.inc : 1.2
581	descr
582		Gcc3 for sh5 gets an ICE compiling this at -O2,
583		"could not split insn".  Drop to -O1 for sh5.
584	kcah
585
586port	sun2
587
588	hack	gcc 3.3.2/mdsetimage
589	cdate	Tue Oct 28 18:43:05 EST 2003
590	who	fredette
591	file	gnu/usr.sbin/mdsetimage/Makefile : 1.15
592	descr
593		mdsetimage.c causes cc1 to barf for as-yet unknown reasons.
594		this hack uses -O0 to avoid the problem.
595	kcah
596
597	hack	gcc 3.3.2/installboot/ffs.c
598	cdate	Tue Oct 28 18:43:05 EST 2003
599	who	fredette
600	file	usr.sbin/installboot/Makefile : 1.26
601	descr
602		ffs.c causes cc1 to barf for as-yet unknown reasons.  this
603		hack uses -O0 to avoid the problem.
604	kcah
605
606
607port	m68000
608
609	hack	gcc 3.3.2/gcc/ra-colorize.c
610	cdate	Wed Nov  5 11:03:13 EST 2003
611	who	mrg
612	file	gnu/usr.bin/gcc3/backend/Makefile : 1.11
613	descr
614		ra-colorize.c causes a whole spew of unreferenced .L* local
615		symbols.  using -O0 (or even -O2 reportedly) avoids the problem.
616		Note this has been fixed in 3.3.3 at least on m68k,
617		but it hasn't been confirmed on sun2/m68000.
618		(it's too slow even on emulator and unlikely to build
619		 toolchains on sun2 with its maximum 4MB RAM)
620	kcah
621
622port	sparc64
623
624	hack	disable optimzations for uvm_bio.c on 32 bit kernels
625	cdate	Sun Mar 21 14:14:04 MET 2004
626	who	martin
627	file	sys/arch/sparc64/conf/Makefile.sparc64 : 1.53-1.54
628	file	sys/arch/sparc64/conf/files.sparc64 : 1.93
629	descr
630		The sparc compiler miscompiles uvm_bio.c when using
631		any optimization. This results in ubc_release panics.
632	kcah
633
634port	macppc
635
636	hack	remove inline from rotate_{left,right}
637	cdate	Tue Feb 22 13:43:25 EST 2005
638	who	christos
639	file	src/dist/bind/lib/dns/rbt.c
640	descr
641		The macppc gcc-3.3 compiler miscompiles rbt.c when these
642		functions are inlined. The error is:
643		.* named[368]: rbt.c:1584: INSIST(child != (void *)0) >failed
644		.* named[368]: exiting (due to assertion failure)
645		This is reportedly fixed in gcc-3.4
646	kcah
647
648port	hppa
649
650	hack	hppa-gcc-3.3.3/grep/dfa.c
651	cdate	Sun Aug  8 08:34:32 PDT 2004
652	who	chs
653	file	gnu/usr.bin/grep/grep/Makefile : 1.4
654	descr
655		gcc 3.3.3 generates bad code for dfa.c with -O2,
656		reduce optimization to -O1 to avoid the bug.
657	kcah
658
659	hack	hppa-gcc-3.3.3 / make/buf.c
660	cdate	Mon May  8 13:02:36 CEST 2006
661	who	he
662	file	usr.bin/make/Makefile : 1.34
663	descr
664		gcc 3.3.3 nb3 gets an "unrecognized insn" internal
665		compiler error when building this file with -O2,
666		reduce optimization to -O1 to avoid the bug.
667	kcah
668
669	hack	hppa boot-from-disk memory corruption
670	cdate	Wed May 18 06:56:07 PDT 2005
671	who	chs
672	file	src/sys/dev/scsipi/scsipiconf.h : 1.98
673	descr
674		There is some bug with DMA on hppa that corrupts scsipi_xfer
675		structures, but it only shows up when booting from disk.
676		For now, we'll add some padding to scsipi_xfer so that
677		the corrupted memory is not otherwise used.
678	kcah
679
680port	mips
681
682	hack	mips-shared-linker-load-address
683	cdate	Fri Oct  7 08:33:10 UTC 2005
684	who	simonb
685	file	src/sys/kern/exec_elf32.c : 1.107
686	descr
687		With COMPAT_16 or previous enabled (which enables
688		ELF_INTERP_NON_RELOCATABLE) a recent ld.elf_so will
689		load and run at address 0.  The check to fix this in
690		rev 1.107 only checks the first psection of the ELF
691		executable, which may not be loadable.  A more correct
692		fix is to check the first loadable psection instead of
693		just the first psection.
694	kcah
695
696