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