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