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