HACKS revision 1.9
1# $NetBSD: HACKS,v 1.9 2003/09/19 16:41:58 martin 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	gcc 2.95/vax cannot handle __builtin_ffs()
31cdate	Fri Aug 23 21:31:15 CEST 2002
32who	ragge
33port	vax
34file	sys/lib/libkern/libkern.h : 1.42
35descr
36	__builtin_ffs() is ifdef'd away if __vax__. Matt Thomas has added
37	this feature to GCC 3 so it can be removed when switching.
38kcah
39
40hack	gcc 2.95.3 -O2 bug
41cdate	Sun Jan  6 23:17:28 UTC 2002
42who	lukem
43port	alpha
44file	sbin/newfs/mkfs.c : (all?)
45pr	15156
46descr
47	newfs built with gcc -O2 dumps core part-way through.
48	using -O1 avoids the problem
49kcah
50
51hack	binutil-2.11-sparc64-pltrela
52mdate	14 Aug 2001
53who	eeh
54port	sparc64
55file	libexec/ld.elf_so/reloc.c: 1.41 : 597 : 619
56descr
57	The first for PLT entries are reserved.  There is some disagreement
58	whether they should have associated relocation entries.  Both the
59	SPARC 32-bit and 64-bit ELF specifications say that they should have
60	relocation entries, but the 32-bit SPARC binutils do not generate
61	them, and now the 64-bit SPARC binutils have stopped generating them
62	too.
63
64	To provide binary compatibility, we will check the first entry, if it
65	is reserved it should not be of the type JMP_SLOT.  If it is JMP_SLOT,
66	then the 4 reserved entries were not generated and our index is 4
67	entries too far, so we frob the rela pointer.
68kcah
69
70hack	gcc-arm32-schedule
71mdate	04 May 2000
72who	is
73file	lib/libc/stdlib/strtoull.c	: 1.3 : 78 : 81
74file	lib/libc/stdlib/strtouq.c	: 1.15 : 73 : 76
75pr	9613
76descr
77	strtoull() was returning a wrong result for small numbers with bit 31
78	set. This is a gcc/arm32 compiler bug in gcc < 2.95.2. Adding
79	(void)&acc; works around it.
80kcah
81
82hack	netstat ieee1394 address printing.
83mdate	14 Nov 2000
84who	matt
85file	lib/libc/net/getnameinfo.c	: 1.32 : 497 : 503
86descr
87	Because the current implementation of IP over IEEE1394, the
88	fw device address contains more than just the IEEE1394 EUI-64.
89	So when printing out IEEE1394 addresses, ignore the extra stuff.
90kcah
91
92hack	xterm vs. libterm
93mdate	01 Aug 2000
94who	jdc
95file	xsrc/xc/programs/xterm/main.c	: 1.2 : 3609 : 3614
96pr	10383
97descr
98	In order to extend the termcap string over 1023 bytes, a ZZ entry was
99	introduced to point to a memory location containing the full entry.
100	Without this hack, xterm will export a termcap containing the ZZ
101	entry, which will then be ignored by libterm.  As xterm modifies the
102	exported termcap, this would cause those modifications to be ignored.
103kcah
104
105hack	gcc-sh3-sed
106mdate	23 Apr 2002
107who	thorpej
108file	usr.bin/sed/Makefile	: 1.9 : 9 : 13
109descr
110	The in-tree GCC 2.95.3-based compiler ICEs when building
111	with optimization for SuperH.  Hack is to biuld with -O0.
112kcah
113
114hack	gcc-unsigned-compare
115cdate	09 Mar 2002
116mdate	18 Mar 2002
117who	bjh21
118port	arm
119file	dist/bind/lib/nameser/ns_parse.c : 1.3
120file	dist/dhcp/minires/ns_parse.c : 1.3
121file	dist/dhcp/omapip/result.c : 1.2
122file	dist/dhcp/server/failover.c : 1.3
123file	gnu/dist/gawk/eval.c : 1.4
124file	gnu/dist/toolchain/bfd/bfd.c : 1.2
125file	gnu/dist/toolchain/bfd/format.c : 1.2
126file	gnu/dist/toolchain/gdb/target.c : 1.2
127file	sys/kern/vfs_subr.c : 1.172
128descr	When checking that a potentially-unsigned enum is >= 0, assign it
129	to an int first.  This is necessary to avoid "comparison is always
130	true" warnings with -fshort-enums.  Casting to an int really should
131	be enough, but turns out not to be.
132kcah
133
134hack	wi-at-big-endian-bus
135cdate	15 Mar 2002
136who	martin
137file	dev/ic/wireg.h
138descr	Add an option to access the underlying bus in big endian byte order
139	to work around deficiencies in bus_space_{read,write}_* macros.
140	Those don't allow the implementation of a proper pcmcia bus space
141	tag.
142kcah
143
144hack	gcc 2.95.3 -O2 (-fgcse) bug
145cdate	Sun May  5 18:36:04 UTC 2002
146who	tsutsui
147port	macppc
148file	sys/arch/macppc/dev/adb_direct.c:	1.24 : 1895 : 1896
149pr	16678
150descr
151	gcc-2.95.3 does generates wrong code on optimization
152	by gcc -O2 (-fgcse), and adb_read_date_time() returns
153	wrong value on cuda system.
154	A null asm statement has been added to avoid this for workaround.
155kcah
156
157hack	gcc-vax-libbz2
158mdate	27 Jun 2002
159who	thorpej
160port	vax
161file	lib/libbz2/Makefile
162descr
163	libbz2 is mis-compiled with optimization with GCC 2.95.3
164	on VAX.  -O0 works around this problem.
165kcah
166
167hack	egcs-pc532-ip6_mroute
168cdate	09 Jul 2002
169who	simonb
170port	pc532
171file	sys/arch/pc532/conf/Makefile.pc532 : 1.70
172file	sys/arch/pc532/conf/files.pc532 : 1.47
173descr
174	egcs 1.1.2 gets an "internal error--insn does not satisfy its
175	constraints" error compiling ip6_mroute.c with -O2 or greater.
176	-O1 works around this problem.
177kcah
178
179hack	SuperH SH5 Toolchain Bugs
180cdate	11 Jul 2002
181who	scw
182port	sh5
183file	usr.sbin/ndbootd/ndbootd.c : 1.6
184file	usr.sbin/traceroute/traceroute.c : 1.48
185descr
186	The SuperH SH5 toolchain (2.97-sh5-010522) gets an internal
187	compiler error when assigning a bit-wise inverted value
188	under some circumstances.
189	Work around it by splitting the statement into two.
190kcah
191
192hack	vax Toolchain bug
193cdate	28 Mar 2003
194who	he
195port	vax
196file	sys/arch/vax/vax/intvec.S : 1.5
197descr
198	Workaround for PR toolchain/20924.  The assembler apparently
199	tries to range-check byte offsets when it doesn't have
200	sufficient information to make that decision.
201	Workaround uses `brw' instead of `brb' instruction.
202kcah
203
204hack	specific knowledge of colours in curses code
205cdate	Sun Apr  6 11:05:24 BST 2003
206who	jdc
207port	all
208file	lib/libcurses/color.c : r1.24
209descr
210	Swap red/blue and yellow/cyan colours for COLOR_OTHER.
211	Fix is to enhance libtermcap to understand terminfo-style % sequences.
212	See also:
213	    http://mail-index.NetBSD.org/tech-userlevel/2003/04/06/0000.html
214kcah
215
216hack	SuperH SH5 Toolchain Bugs
217cdate	17 May 2003
218who	scw
219port	sh5
220file	lib/libpthread/pthread_lock.c : 1.7
221descr
222	The SuperH SH5 toolchain generates incorrect PIC code when faced
223	with a symbol which is declared extern, but has local scope due
224	to being defined within an asm() statement (without being declared
225	.globl in that statement). Work around it by adding the .globl.
226kcah
227
228hack	Compensation for differing types of LINUX_USRSTACK and USRSTACK
229cdate	21 Aug 2003
230who	he
231file	sys/miscfs/procfs/procfs_linux.c : 1.14
232descr
233	Not all ports have LINUX_USRSTACK and/or USRSTACK defined as
234	literals/constants, but refer to variables of a type which is
235	not "unsigned long", causing compilation of procfs_linux.c to
236	fail with "makes integer from pointer without a cast".  This
237	is observed on e.g. the sun3 port.  Ideally the "types" for
238	symbols should be consistent across all ports.
239kcah
240
241hack	i386 / sparc default debugging type in GCC 3.3.1
242cdate	19 Sept 2003
243who	mrg
244file	gnu/dist/gcc/gcc/config/{i386,sparc}/netbsd-elf.h
245descr
246	Until i386 & sparc* switch to GDB 5.3, the default debugging
247	format needs to be stabs not DWARF.
248kcah
249