HACKS revision 1.22
1# $NetBSD: HACKS,v 1.22 2003/11/05 00:50:05 mrg 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
87
88port	vax
89
90	hack	gcc 2.95/vax cannot handle __builtin_ffs()
91	cdate	Fri Aug 23 21:31:15 CEST 2002
92	who	ragge
93	file	sys/lib/libkern/libkern.h : 1.42
94	descr
95		__builtin_ffs() is ifdef'd away if __vax__. Matt Thomas has
96		added this feature to GCC 3 so it can be removed when switching.
97	kcah
98
99	hack	gcc-vax-libbz2
100	mdate	27 Jun 2002
101	who	thorpej
102	file	lib/libbz2/Makefile
103	descr
104		libbz2 is mis-compiled with optimization with GCC 2.95.3
105		on VAX.  -O0 works around this problem.
106	kcah
107
108	hack	vax Toolchain bug
109	cdate	28 Mar 2003
110	who	he
111	file	sys/arch/vax/vax/intvec.S : 1.5
112	descr
113		Workaround for PR toolchain/20924.  The assembler apparently
114		tries to range-check byte offsets when it doesn't have
115		sufficient information to make that decision.
116		Workaround uses `brw' instead of `brb' instruction.
117	kcah
118
119
120port	sparc64
121
122	hack	binutil-2.11-sparc64-pltrela
123	mdate	14 Aug 2001
124	who	eeh
125	file	libexec/ld.elf_so/arch/sparc64/mdreloc.c
126	descr
127		The first for PLT entries are reserved.  There is some
128		disagreement whether they should have associated relocation
129		entries.  Both the SPARC 32-bit and 64-bit ELF specifications
130		say that they should have relocation entries, but the 32-bit
131		SPARC binutils do not generate them, and now the 64-bit SPARC
132		binutils have stopped generating them too.
133
134		To provide binary compatibility, we will check the first entry,
135		if it is reserved it should not be of the type JMP_SLOT.  If it
136		is JMP_SLOT, then the 4 reserved entries were not generated and
137		our index is 4 entries too far, so we frob the rela pointer.
138	kcah
139
140
141port	arm
142
143	hack	gcc-unsigned-compare
144	cdate	09 Mar 2002
145	mdate	18 Mar 2002
146	who	bjh21
147	file	dist/bind/lib/nameser/ns_parse.c : 1.3
148	file	dist/dhcp/minires/ns_parse.c : 1.3
149	file	dist/dhcp/omapip/result.c : 1.2
150	file	dist/dhcp/server/failover.c : 1.3
151	file	gnu/dist/gawk/eval.c : 1.4
152	file	gnu/dist/toolchain/bfd/bfd.c : 1.2
153	file	gnu/dist/toolchain/bfd/format.c : 1.2
154	file	gnu/dist/toolchain/gdb/target.c : 1.2
155	file	sys/kern/vfs_subr.c : 1.172
156	descr	When checking that a potentially-unsigned enum is >= 0, assign
157		it to an int first.  This is necessary to avoid "comparison is
158		always true" warnings with -fshort-enums.  Casting to an int
159		really should be enough, but turns out not to be.
160	kcah
161
162	hack	gcc 3.3.x bug
163	cdate	Sun Oct 26 01:50:16 UTC 2003
164	who	lukem
165	file	usr.bin/newsyslog/newsyslog.c
166	pr	22986 23002 23217
167	descr
168		newsyslog fails with
169			newsyslog: config line 7: bad flags
170		solved when compiled with -fno-gcse-lm
171	kcah
172
173	hack	gcc 3.3.2/arm sys/kern/uipc_socket.c
174	cdate	Tue Oct 28 18:02:16 GMT 2003
175	who	skrll
176	file	sys/conf/arm/Makefile.arm : 1.19
177	descr
178		Performing a build.sh tools on a CATS with NFS mounted 
179		obj and src directories results in "panic: receive 1"
180		The hack is to compile sys/kern/uipc_socket.c with
181		-fno-strict-aliasing
182	kcah
183
184
185port	pc532
186
187	hack	egcs-pc532-ip6_mroute
188	cdate	09 Jul 2002
189	who	simonb
190	file	sys/arch/pc532/conf/Makefile.pc532 : 1.70
191	file	sys/arch/pc532/conf/files.pc532 : 1.47
192	descr
193		egcs 1.1.2 gets an "internal error--insn does not satisfy its
194		constraints" error compiling ip6_mroute.c with -O2 or greater.
195		-O1 works around this problem.
196	kcah
197
198	hack	gcc-pc532-duffs_device
199	cdate	Mon Oct 27 07:23:05 UTC 2003
200	who	simonb
201	file	sys/arch/pc532/conf/Makefile.pc532 : 1.71
202	file	sys/arch/pc532/conf/files.pc532 : 1.52
203	pr	GCC PR optimization/5230
204	descr
205		gcc incorrectly gives an "unreachable code at beginning of
206		switch statement" for a Duff's device construct in
207		arch/pc532/dev/ncr.c.  There is no way to disable just this
208		warning, so -Wno-error is turned on for this file.
209	kcah
210
211
212port	sh3
213
214	hack	gcc-sh3-sed
215	mdate	23 Apr 2002
216	who	thorpej
217	file	usr.bin/sed/Makefile	: 1.9 : 9 : 13
218	descr
219		The in-tree GCC 2.95.3-based compiler ICEs when building
220		with optimization for SuperH.  Hack is to biuld with -O0.
221	kcah
222
223
224port	sh5
225
226	hack	SuperH SH5 Toolchain Bugs
227	cdate	11 Jul 2002
228	who	scw
229	file	usr.sbin/ndbootd/ndbootd.c : 1.6
230	file	usr.sbin/traceroute/traceroute.c : 1.48
231	descr
232		The SuperH SH5 toolchain (2.97-sh5-010522) gets an internal
233		compiler error when assigning a bit-wise inverted value
234		under some circumstances.
235		Work around it by splitting the statement into two.
236	kcah
237
238	hack	SuperH SH5 Toolchain Bugs
239	cdate	17 May 2003
240	who	scw
241	file	lib/libpthread/pthread_lock.c : 1.7
242	descr
243		The SuperH SH5 toolchain generates incorrect PIC code when
244		faced with a symbol which is declared extern, but has local
245		scope due to being defined within an asm() statement (without
246		being declared .globl in that statement). Work around it by
247		adding the .globl.
248	kcah
249
250
251port	sun2
252
253	hack	gcc 3.3.2/mdsetimage
254	cdate	Tue Oct 28 18:43:05 EST 2003
255	who	fredette
256	file	gnu/usr.sbin/mdsetimage/Makefile : 1.15
257	descr
258		mdsetimage.c causes cc1 to barf for as-yet unknown reasons.
259		this hack ues -O0 to avoid the problem.
260	kcah
261
262	hack	gcc 3.3.2/installboot/ffs.c
263	cdate	Tue Oct 28 18:43:05 EST 2003
264	who	fredette
265	file	usr.sbin/installboot/Makefile : 1.26
266	descr
267		ffs.c causes cc1 to barf for as-yet unknown reasons.  this
268		hack ues -O0 to avoid the problem.
269	kcah
270
271
272port	sun2, m68k
273
274	hack	gcc 3.3.2/gcc/ra-colorize.c
275	cdate	Wed Nov  5 11:03:13 EST 2003
276	who	mrg
277	file	gnu/usr.bin/gcc/backend/Makefile : 1.11
278	descr
279		ra-colorize.c causes a whole spew of unreferenced .L* local
280		symbols.  using -O0 (or even -O2 reportedly) avoids the problem.
281	kcah
282