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