HACKS revision 1.56
1# $NetBSD: HACKS,v 1.56 2006/05/08 14:48:59 tsutsui 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
113
114port	vax
115
116	hack	gcc 2.95/vax doesn't like abort being used as function pointer
117	cdate	Tue Dec 13 05:54:50 GMT 2005
118	who	jmc
119	file	lib/libc/rpc/svc_vc.c 1.15
120	descr
121		Provide a local definition for abort which doesn't include
122		the noreturn attribute which trips up gcc 2.95 on vax.
123	
124	hack	gcc 2.95/vax doesn't have stdbool.h and gettext needs it
125	cdate	Mon May  9 12:16:22 CDT 2005
126	who	jmc
127	file	gnu/usr.bin/gettext/Makefile.inc.prog 1.5
128		gnu/usr.bin/gettext/libgrep/Makefile 1.3
129		gnu/usr.bin/gettext/libnlspr/Makefile 1.5
130		gnu/usr.bin/gettext/libnlsut/Makefile 1.3   
131	descr
132		The latest gettext assumes a C99 environment or at least
133		configure checks to work around this. As we don't use configure
134		provide a stdbool.h for vax builds locally in directories from
135		the template provided by the gettext code.
136	
137	hack	gcc 2.95/vax can't handle __used__ in mcount.c
138	cdate	Fri May  6 14:30:53 CDT 2005
139	who	jmc
140	file	src/lib/libc/gmon/mcount.c 1.17
141	descr
142                Recent changes to mark this as __used__ to prevent optimization
143                away on sparc64 don't work on 2.95 vax. Ifdef'd back in the
144                old __unused__ if on vax.
145	
146	hack	gcc 2.95/vax cannot handle __builtin_ffs()
147	cdate	Fri Aug 23 21:31:15 CEST 2002
148	who	ragge
149	file	sys/lib/libkern/libkern.h : 1.42
150	descr
151		__builtin_ffs() is ifdef'd away if __vax__. Matt Thomas has
152		added this feature to GCC 3 so it can be removed when switching.
153	
154
155	hack	gcc-vax-libbz2
156	mdate	27 Jun 2002
157	who	thorpej
158	file	lib/libbz2/Makefile
159	descr
160		libbz2 is mis-compiled with optimization with GCC 2.95.3
161		on VAX.  -O0 works around this problem.
162	kcah
163
164	hack	gawk
165	mdate	8 Nov 2003
166	who	ragge
167	file	gnu/usr.bin/gawk/Makefile
168	descr
169		gawk is mis-compiled with optimization with GCC 2.95.3
170		on VAX.  -O0 works around this problem.
171	kcah
172
173	hack	vax Toolchain bug
174	cdate	28 Mar 2003
175	who	he
176	file	sys/arch/vax/vax/intvec.S : 1.5
177	descr
178		Workaround for PR toolchain/20924.  The assembler apparently
179		tries to range-check byte offsets when it doesn't have
180		sufficient information to make that decision.
181		Workaround uses `brw' instead of `brb' instruction.
182	kcah
183
184	hack	vax gcc 2.95.3 -Wuninitialized workarounds
185	cdate	6 Nov 2003
186	who	he
187	file	sys/dev/bi/if_ni.c : 1.22
188	file	sys/arch/vax/vax/ctu.c : 1.20
189	descr
190		Workaround for gcc 2.95.3 failing to detect that certain
191		variables will be initialized; so that this code compiles
192		with -Wuninitialized.  Should be reviewed and possibly
193		reverted when gcc 3.3.2 is ready for vax.
194	kcah
195
196	hack	vax gcc 2.95.3 structure initialization
197	cdat	13 May 2004
198	who	cl
199	file	sys/miscfs/kernfs/kernfs_vnops.c : 1.104
200	descr
201		Workaround for gcc 2.95.3 failing to initialize structures
202		and/or unions inside structures using nested designators.
203		Should be reverted when gcc >=3.3.3 is ready for vax.
204	kcah
205
206	hack	vax gcc 2.95.3 needs -I. to build nslexer.c
207	cdat	6 Jun 2004
208	who	mhitch
209	file	lib/libc/arch/vax/Makefile.inc : 1.6
210	descr
211		It appears necessary to add -I. to CPPFLAGS when building
212		nslesxer.c.  This may be caused by gcc 2.95.3 being used.
213		Should be reverted when a newer gcc is ready for vax.
214	kcah
215
216	hack	vax gcc 2.95.3 doesn't understand "-std=c99"
217	cdat	5 April 2005
218	who	tron
219	file	src/share/mk/bsd.sys.mk
220	descr
221		We cannot use "-std=c99" for compiler warning level 4 and above
222		because gcc 2.95.3 doesn't support that option.
223	kcah
224
225	hack	declare boolean_t in two IPF user-mode programs
226	cdate	Tue Mar  7 19:19:20 CET 2006
227	who	he
228	file	dist/ipf/ipsend/iptests.c : 1.8
229		dist/ipf/ipsend/sock.c : 1.7
230	descr
231		The IPF user-mode programs ipsend and iptest first
232		include <sys/types.h> without _KERNEL defined, and
233		later include <sys/file.h> with _KERNEL defined.
234		This causes a build failure when building for vax,
235		since <sys/device.h> ends up being included without
236		bollean_t being defined by <sys/types.h>.
237		Build failure and further details documented in
238		PR#32907.
239	kcah
240
241port	sparc64
242
243	hack	binutil-2.11-sparc64-pltrela
244	mdate	14 Aug 2001
245	who	eeh
246	file	libexec/ld.elf_so/arch/sparc64/mdreloc.c
247	descr
248		The first four PLT entries are reserved.  There is some
249		disagreement whether they should have associated relocation
250		entries.  Both the SPARC 32-bit and 64-bit ELF specifications
251		say that they should have relocation entries, but the 32-bit
252		SPARC binutils do not generate them, and now the 64-bit SPARC
253		binutils have stopped generating them too.
254
255		To provide binary compatibility, we will check the first entry,
256		if it is reserved it should not be of the type JMP_SLOT.  If it
257		is JMP_SLOT, then the 4 reserved entries were not generated and
258		our index is 4 entries too far, so we frob the rela pointer.
259	kcah
260
261
262port	arm
263
264	hack	gcc-unsigned-compare
265	cdate	09 Mar 2002
266	mdate	18 Mar 2002
267	who	bjh21
268	file	dist/bind/lib/nameser/ns_parse.c : 1.3
269	file	dist/dhcp/minires/ns_parse.c : 1.3
270	file	dist/dhcp/omapip/result.c : 1.2
271	file	dist/dhcp/server/failover.c : 1.3
272	file	gnu/dist/gawk/eval.c : 1.4
273	file	gnu/dist/toolchain/bfd/bfd.c : 1.2
274	file	gnu/dist/toolchain/bfd/format.c : 1.2
275	file	gnu/dist/toolchain/gdb/target.c : 1.2
276	file	sys/kern/vfs_subr.c : 1.172
277	descr	When checking that a potentially-unsigned enum is >= 0, assign
278		it to an int first.  This is necessary to avoid "comparison is
279		always true" warnings with -fshort-enums.  Casting to an int
280		really should be enough, but turns out not to be.
281	kcah
282
283	hack	gcc 3.3.2/arm sys/kern/uipc_socket.c
284	cdate	Tue Oct 28 18:02:16 GMT 2003
285	who	skrll
286	pr	23044
287	file	sys/arch/arm/conf/Makefile.arm : 1.19
288	descr
289		Performing a build.sh tools on a CATS with NFS mounted 
290		obj and src directories results in "panic: receive 1"
291		The hack is to compile sys/kern/uipc_socket.c with
292		-fno-strict-aliasing
293	kcah
294
295
296port	pc532
297
298	hack	egcs-pc532-ip6_mroute
299	cdate	09 Jul 2002
300	who	simonb
301	file	sys/arch/pc532/conf/Makefile.pc532 : 1.70
302	file	sys/arch/pc532/conf/files.pc532 : 1.47
303	descr
304		egcs 1.1.2 gets an "internal error--insn does not satisfy its
305		constraints" error compiling ip6_mroute.c with -O2 or greater.
306		-O1 works around this problem.
307	kcah
308
309	hack	gcc-pc532-duffs_device
310	cdate	Mon Oct 27 07:23:05 UTC 2003
311	who	simonb
312	file	sys/arch/pc532/conf/Makefile.pc532 : 1.71
313	file	sys/arch/pc532/conf/files.pc532 : 1.52
314	pr	GCC PR optimization/5230
315	descr
316		gcc incorrectly gives an "unreachable code at beginning of
317		switch statement" for a Duff's device construct in
318		arch/pc532/dev/ncr.c.  There is no way to disable just this
319		warning, so -Wno-error is turned on for this file.
320	kcah
321
322	hack	gcc332-cppmacro-ice
323	cdate	Sun Dec  7 12:48:33 UTC 2003
324	who	simonb
325	file	gnu/usr.bin/gcc3/libcpp/Makefile : 1.2
326	descr
327		gcc 3.3.2 gets an ICE when compiling cppmacro.c with -O2.
328		The hack is to use -O1 for this file.  Fixed in gcc
329		-current mainline, unable to work out where the fix is
330		right now.
331	kcah
332
333
334port	sh3
335
336	hack	gcc-sh3-sed
337	mdate	23 Apr 2002
338	who	thorpej
339	file	usr.bin/sed/Makefile	: 1.9 : 9 : 13
340	descr
341		The in-tree GCC 2.95.3-based compiler ICEs when building
342		with optimization for SuperH.  Hack is to build with -O0.
343	kcah
344
345
346port	sh5
347
348	hack	SuperH SH5 Toolchain Bugs
349	cdate	11 Jul 2002
350	who	scw
351	file	usr.sbin/ndbootd/ndbootd.c : 1.6
352	file	usr.sbin/traceroute/traceroute.c : 1.48
353	descr
354		The SuperH SH5 toolchain (2.97-sh5-010522) gets an internal
355		compiler error when assigning a bit-wise inverted value
356		under some circumstances.
357		Work around it by splitting the statement into two.
358	kcah
359
360	hack	SuperH SH5 Toolchain Bugs
361	cdate	17 May 2003
362	who	scw
363	file	lib/libpthread/pthread_lock.c : 1.7
364	descr
365		The SuperH SH5 toolchain generates incorrect PIC code when
366		faced with a symbol which is declared extern, but has local
367		scope due to being defined within an asm() statement (without
368		being declared .globl in that statement). Work around it by
369		adding the .globl.
370	kcah
371
372	hack	gcc 3.3.2 on sh5 - ICE compiling reload1.c at -O2
373	cdate	Sun Dec  7 19:44:05 GMT 2003
374	who	scw
375	file	gnu/usr.bin/gcc3/backend/Makefile : 1.13
376	descr
377		Gcc3 for sh5 gets an ICE compiling reload1.c at -O2.
378		Drop to -O1 for now when building for sh5.
379	kcah
380
381	hack	gcc 3.3.2 on sh5 - ICE compiling elf32.c/elf64.c at -O2
382	cdate	Sun Dec  7 21:10:46 GMT 2003
383	who	scw
384	file	gnu/lib/libbfd/Makefile : 1.39
385	descr
386		Gcc3 for sh5 gets an ICE compiling libbfd's elf32.c
387		and elf64.c at -O2.
388		Drop to -O1 for now when building for sh5.
389	kcah
390
391
392	hack	gcc 3.3.2 on sh5 - fatal warning compiling function.c
393	cdate	Sun Dec  7 19:44:05 GMT 2003
394	who	scw
395	file	gnu/usr.bin/gcc3/backend/Makefile : 1.13
396	descr
397		Gcc3 for sh5 issues a warning:
398		.../gnu/dist/gcc/gcc/function.c:4742: warning: `and' of
399		    mutually exclusive equal-tests is always 0.
400		This causes the build to fail because of -Werror.
401		Work-around by defining NOGCCERROR when building for sh5.
402	kcah
403
404	hack	gcc 3.3.3 on sh5 - ICE compiling rbtdb.c and rbtdb64.c
405	cdate	Thu Nov 11 00:35:33 UTC 2004
406	who	he
407	file	usr.sbin/bind/libdns/Makefile/1.2
408	descr
409		Gcc3 for sh5 gets an ICE compiling these files at -O2.
410		Drop to -O1 for now when building for sh5.
411	kcah
412
413	hack	gcc 3.3.3 nb3 on sh5 - ICE compiling bsd-comp.c
414	cdate	Thu May 25 23:05:20 UTC 2005
415	who	he
416	file	sys/lkm/net/bsdcomp/Makefile : 1.3
417	descr
418		Gcc3 for sh5 gets an ICE compiling this at -O2,
419		"could not split insn".  Drop to -O1 for sh5.
420	kcah
421
422	hack	gcc 3.3.3 nb3 on sh5 - ICE compiling strtod.c
423	cdate	Tue Jan 31 10:51:52 GMT 2006
424	who	scw
425	file	lib/libc/gdtoa/Makefile.inc : 1.2
426	descr
427		Gcc3 for sh5 gets an ICE compiling this at -O2,
428		"could not split insn".  Drop to -O1 for sh5.
429	kcah
430
431port	sun2
432
433	hack	gcc 3.3.2/mdsetimage
434	cdate	Tue Oct 28 18:43:05 EST 2003
435	who	fredette
436	file	gnu/usr.sbin/mdsetimage/Makefile : 1.15
437	descr
438		mdsetimage.c causes cc1 to barf for as-yet unknown reasons.
439		this hack uses -O0 to avoid the problem.
440	kcah
441
442	hack	gcc 3.3.2/installboot/ffs.c
443	cdate	Tue Oct 28 18:43:05 EST 2003
444	who	fredette
445	file	usr.sbin/installboot/Makefile : 1.26
446	descr
447		ffs.c causes cc1 to barf for as-yet unknown reasons.  this
448		hack uses -O0 to avoid the problem.
449	kcah
450
451
452port	m68000
453
454	hack	gcc 3.3.2/gcc/ra-colorize.c
455	cdate	Wed Nov  5 11:03:13 EST 2003
456	who	mrg
457	file	gnu/usr.bin/gcc3/backend/Makefile : 1.11
458	descr
459		ra-colorize.c causes a whole spew of unreferenced .L* local
460		symbols.  using -O0 (or even -O2 reportedly) avoids the problem.
461		Note this has been fixed in 3.3.3 at least on m68k,
462		but it hasn't been confirmed on sun2/m68000.
463		(it's too slow even on emulator and unlikely to build
464		 toolchains on sun2 with its maximum 4MB RAM)
465	kcah
466
467port	sparc64
468
469	hack	disable optimzations for uvm_bio.c on 32 bit kernels
470	cdate	Sun Mar 21 14:14:04 MET 2004
471	who	martin
472	file	sys/arch/sparc64/conf/Makefile.sparc64 : 1.53-1.54
473	file	sys/arch/sparc64/conf/files.sparc64 : 1.93
474	descr
475		The sparc compiler miscompiles uvm_bio.c when using
476		any optimization. This results in ubc_release panics.
477	kcah
478
479port	macppc
480
481	hack	remove inline from rotate_{left,right}
482	cdate	Tue Feb 22 13:43:25 EST 2005
483	who	christos
484	file	src/dist/bind/lib/dns/rbt.c
485	descr
486		The macppc gcc-3.3 compiler miscompiles rbt.c when these
487		functions are inlined. The error is:
488		.* named[368]: rbt.c:1584: INSIST(child != (void *)0) >failed
489		.* named[368]: exiting (due to assertion failure)
490		This is reportedly fixed in gcc-3.4
491	kcah
492
493port	hppa
494
495	hack	hppa-gcc-3.3.3/grep/dfa.c
496	cdate	Sun Aug  8 08:34:32 PDT 2004
497	who	chs
498	file	gnu/usr.bin/grep/grep/Makefile : 1.4
499	descr
500		gcc 3.3.3 generates bad code for dfa.c with -O2,
501		reduce optimization to -O1 to avoid the bug.
502	kcah
503
504	hack	hppa-gcc-3.3.3 / make/buf.c
505	cdate	Mon May  8 13:02:36 CEST 2006
506	who	he
507	file	usr.bin/make/Makefile : 1.34
508	descr
509		gcc 3.3.3 nb3 gets an "unrecognized insn" internal
510		compiler error when building this file with -O2,
511		reduce optimization to -O1 to avoid the bug.
512	kcah
513
514	hack	hppa boot-from-disk memory corruption
515	cdate	Wed May 18 06:56:07 PDT 2005
516	who	chs
517	file	src/sys/dev/scsipi/scsipiconf.h : 1.98
518	descr
519		There is some bug with DMA on hppa that corrupts scsipi_xfer
520		structures, but it only shows up when booting from disk.
521		For now, we'll add some padding to scsipi_xfer so that
522		the corrupted memory is not otherwise used.
523	kcah
524
525port	mips
526
527	hack	mips-shared-linker-load-address
528	cdate	Fri Oct  7 08:33:10 UTC 2005
529	who	simonb
530	file	src/sys/kern/exec_elf32.c : 1.107
531	descr
532		With COMPAT_16 or previous enabled (which enables
533		ELF_INTERP_NON_RELOCATABLE) a recent ld.elf_so will
534		load and run at address 0.  The check to fix this in
535		rev 1.107 only checks the first psection of the ELF
536		executable, which may not be loadable.  A more correct
537		fix is to check the first loadable psection instead of
538		just the first psection.
539	kcah
540
541