Annotation of src/doc/HACKS, Revision 1.6
1.6 ! uwe 1: # $NetBSD: HACKS,v 1.5 2003/07/26 17:24:48 salo Exp $
1.1 lukem 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:
30: hack gcc 2.95/vax cannot handle __builtin_ffs()
31: cdate Fri Aug 23 21:31:15 CEST 2002
32: who ragge
33: port vax
34: file sys/lib/libkern/libkern.h : 1.42
35: descr
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.
38: kcah
39:
40: hack gcc 2.95.3 -O2 bug
41: cdate Sun Jan 6 23:17:28 UTC 2002
42: who lukem
43: port alpha
44: file sbin/newfs/mkfs.c : (all?)
45: pr 15156
46: descr
47: newfs built with gcc -O2 dumps core part-way through.
48: using -O1 avoids the problem
49: kcah
50:
51: hack binutil-2.11-sparc64-pltrela
52: mdate 14 Aug 2001
53: who eeh
54: port sparc64
55: file libexec/ld.elf_so/reloc.c: 1.41 : 597 : 619
56: descr
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.
68: kcah
69:
70: hack gcc-arm32-schedule
71: mdate 04 May 2000
72: who is
73: file lib/libc/stdlib/strtoull.c : 1.3 : 78 : 81
74: file lib/libc/stdlib/strtouq.c : 1.15 : 73 : 76
75: pr 9613
76: descr
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.
80: kcah
81:
82: hack gcc-sparc64-memorysize
83: mdate 17 Sep 2000
84: who mrg
85: port sparc64
86: file lib/libc/hash/sha1.c : 1.6 : 78 : 129 : 162 : 189
87: file sys/lib/libkern/sha1.c : 1.6 : 78 : 129 : 162 : 189
88: file usr.sbin/bind/lib/Makefile : 1.14 : 87 : 91
89: descr
90: the normal SHA1Transform() function causes the sparc64 compiler to
91: use excessive amounts of memory attempting to optimise this function.
92: using no optimisation allows the function to build. this hack
93: splits the mathematical functions inside SHA1Transform() into 4
94: separate functions, which avoids the optimiser explosion.
95: kcah
96:
97: hack gcc-sparc64-double-arguments
98: mdate 18 Sep 2000
99: who mrg
100: port sparc64
101: file xsrc/xc/lib/fonts/Type1/type1.c : 1.2 : 1461 : 1507 : 1702 : 1709
102: descr
103: in passing 17 "double" arguments to a function, gcc incorrectly tries
104: to use a register that doesn't exist, causing an internal error. this
105: hack changes the way arguments are passed to the function, such that
106: a pointer to a "double" (really an array) is passed, and the old
107: arguments are assigned within the function.
108: kcah
109:
110: hack gcc-sparc64-gawk
111: mdate 28 Oct 2000
112: who mrg
113: port sparc64
114: file gnu/usr.bin/gawk/Makefile : 1.11 : 21 : 24
115: descr
116: gcc fails to build gawk properly, due to double floating point bugs.
117: this simple test program will fail to print ``ab'':
118: BEGIN { f = "abc"; print substr(f, 1, 2); exit }
119: the work around is simple: use -msoft-quad-float.
120: kcah
121:
122: hack gcc-sparc64-libgcc
123: mdate 01 Dec 2001
124: who jmc
125: port sparc64
126: file gnu/lib/libgcc/Makefile : 1.29 : 24 : 27
127: descr
128: gcc fails to do double -> int conversions correctly without
129: soft-quad-float. Add it in there for the internal conversion
130: routines. This appears to be more than likely emulations bugs than
131: compiler bugs as the assembly looks correct on the surface.
132:
133: kcah
134:
135: hack gcc-sparc64-iostat-systat
136: mdate 04 Feb 2001
137: who mrg
138: port sparc64
139: file usr.sbin/iostat/Makefile : 1.17 : 7 : 10
140: file usr.bin/systat/Makefile : 1.23 : 6 : 9
141: descr
142: gcc fails to build iostat properly, due to double floating point bugs.
143: results will include "Inf" and other garbage.
144: the work around is simple: use -msoft-quad-float.
145: kcah
146:
147: hack gcc-sparc64-nawk
148: mdate 25 Oct 2001
149: who martin
150: port sparc64
151: file usr.bin/awk/Makefile : 1.3 : 13 : 15
152: descr
153: Don't use long double on sparc64.
154: kcah
155:
156: hack gcc-sparc64-ntp
157: mdate 12 Nov 2000
158: who martin
159: port sparc64
160: file usr.sbin/ntp/Makefile.inc : 1.5 : 17 : 19
161: descr
162: gcc fails to build ntpd properly, due to double floating point bugs.
163: Ntpd will fail to decode incoming packets; ntpdc -s will report
164: a delay, offset and dispersion of 0.0000 for all peers.
165: the work around is simple: use -msoft-quad-float.
166: kcah
167:
168: hack gcc-sparc64-x_dhclient
169: mdate 27 Dec 2000
170: who mrg
171: port sparc64
172: file distrib/utils/x_dhclient/Makefile : 1.6 : 28 : 30
173: descr
174: gcc fails with an ICE while building dhclient's parse.c with -O2
175: and -Os. the work around is simple: don't use -Os.
176: kcah
177:
178: hack lint-no-long-double
179: mdate 17 Aug 2001
180: who eeh
181: port sparc64
182: file usr.bin/xlint/lint1/param.h: 1.14 :
183: descr
184: Don't use long double on sparc64.
185: kcah
186:
187: hack netstat ieee1394 address printing.
188: mdate 14 Nov 2000
189: who matt
190: file lib/libc/net/getnameinfo.c : 1.32 : 497 : 503
191: descr
192: Because the current implementation of IP over IEEE1394, the
193: fw device address contains more than just the IEEE1394 EUI-64.
194: So when printing out IEEE1394 addresses, ignore the extra stuff.
195: kcah
196:
197: hack xterm vs. libterm
198: mdate 01 Aug 2000
199: who jdc
200: file xsrc/xc/programs/xterm/main.c : 1.2 : 3609 : 3614
201: pr 10383
202: descr
203: In order to extend the termcap string over 1023 bytes, a ZZ entry was
204: introduced to point to a memory location containing the full entry.
205: Without this hack, xterm will export a termcap containing the ZZ
206: entry, which will then be ignored by libterm. As xterm modifies the
207: exported termcap, this would cause those modifications to be ignored.
208: kcah
209:
210: hack gcc-sh3-sed
211: mdate 23 Apr 2002
212: who thorpej
213: file usr.bin/sed/Makefile : 1.9 : 9 : 13
214: descr
215: The in-tree GCC 2.95.3-based compiler ICEs when building
216: with optimization for SuperH. Hack is to biuld with -O0.
217: kcah
218:
219: hack gcc-unsigned-compare
220: cdate 09 Mar 2002
221: mdate 18 Mar 2002
222: who bjh21
223: port arm
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 it
234: to an int first. This is necessary to avoid "comparison is always
235: true" warnings with -fshort-enums. Casting to an int really should
236: be enough, but turns out not to be.
237: kcah
238:
239: hack wi-at-big-endian-bus
240: cdate 15 Mar 2002
241: who martin
242: file dev/ic/wireg.h
243: descr Add an option to access the underlying bus in big endian byte order
244: to work around deficiencies in bus_space_{read,write}_* macros.
245: Those don't allow the implementation of a proper pcmcia bus space
246: tag.
247: kcah
248:
249: hack gcc 2.95.3 -O2 (-fgcse) bug
250: cdate Sun May 5 18:36:04 UTC 2002
251: who tsutsui
252: port macppc
253: file sys/arch/macppc/dev/adb_direct.c: 1.24 : 1895 : 1896
254: pr 16678
255: descr
256: gcc-2.95.3 does generates wrong code on optimization
257: by gcc -O2 (-fgcse), and adb_read_date_time() returns
258: wrong value on cuda system.
259: A null asm statement has been added to avoid this for workaround.
260: kcah
261:
262: hack gcc-vax-libbz2
263: mdate 27 Jun 2002
264: who thorpej
265: port vax
266: file lib/libbz2/Makefile
267: descr
268: libbz2 is mis-compiled with optimization with GCC 2.95.3
269: on VAX. -O0 works around this problem.
270: kcah
271:
272: hack egcs-pc532-ip6_mroute
273: cdate 09 Jul 2002
274: who simonb
275: port pc532
276: file sys/arch/pc532/conf/Makefile.pc532 : 1.70
277: file sys/arch/pc532/conf/files.pc532 : 1.47
278: descr
279: egcs 1.1.2 gets an "internal error--insn does not satisfy its
280: constraints" error compiling ip6_mroute.c with -O2 or greater.
281: -O1 works around this problem.
282: kcah
283:
284: hack SuperH SH5 Toolchain Bugs
285: cdate 11 Jul 2002
286: who scw
287: port sh5
288: file usr.sbin/ndbootd/ndbootd.c : 1.6
289: file usr.sbin/traceroute/traceroute.c : 1.48
290: descr
291: The SuperH SH5 toolchain (2.97-sh5-010522) gets an internal
292: compiler error when assigning a bit-wise inverted value
293: under some circumstances.
294: Work around it by splitting the statement into two.
1.2 he 295: kcah
296:
297: hack vax Toolchain bug
298: cdate 28 Mar 2003
299: who he
300: port vax
301: file sys/arch/vax/vax/intvec.S : 1.5
302: descr
303: Workaround for PR toolchain/20924. The assembler apparently
304: tries to range-check byte offsets when it doesn't have
305: sufficient information to make that decision.
306: Workaround uses `brw' instead of `brb' instruction.
1.3 jdc 307: kcah
308:
309: hack specific knowledge of colours in curses code
310: cdate Sun Apr 6 11:05:24 BST 2003
311: who jdc
312: port all
313: file lib/libcurses/color.c : r1.24
314: descr
315: Swap red/blue and yellow/cyan colours for COLOR_OTHER.
316: Fix is to enhance libtermcap to understand terminfo-style % sequences.
317: See also:
1.5 salo 318: http://mail-index.NetBSD.org/tech-userlevel/2003/04/06/0000.html
1.4 scw 319: kcah
320:
321: hack SuperH SH5 Toolchain Bugs
322: cdate 17 May 2003
323: who scw
324: port sh5
325: file lib/libpthread/pthread_lock.c : 1.7
326: descr
327: The SuperH SH5 toolchain generates incorrect PIC code when faced
328: with a symbol which is declared extern, but has local scope due
329: to being defined within an asm() statement (without being declared
330: .globl in that statement). Work around it by adding the .globl.
1.1 lukem 331: kcah
CVSweb <webmaster@jp.NetBSD.org>