Annotation of src/doc/HACKS, Revision 1.46
1.46 ! chs 1: # $NetBSD: HACKS,v 1.45 2005/05/09 17:19:06 jmc 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 netstat ieee1394 address printing.
31: mdate 14 Nov 2000
32: who matt
33: file lib/libc/net/getnameinfo.c : 1.32 : 497 : 503
34: descr
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.
38: kcah
39:
40: hack xterm vs. libterm
41: mdate 01 Aug 2000
42: who jdc
43: file xsrc/xc/programs/xterm/main.c : 1.2 : 3609 : 3614
44: pr 10383
45: descr
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.
51: kcah
52:
53: hack wi-at-big-endian-bus
54: cdate 15 Mar 2002
55: who martin
56: file dev/ic/wireg.h
57: descr 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.
61: kcah
62:
1.3 jdc 63: hack specific knowledge of colours in curses code
64: cdate Sun Apr 6 11:05:24 BST 2003
65: who jdc
66: file lib/libcurses/color.c : r1.24
67: descr
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:
1.5 salo 71: http://mail-index.NetBSD.org/tech-userlevel/2003/04/06/0000.html
1.4 scw 72: kcah
73:
1.7 he 74: hack Compensation for differing types of LINUX_USRSTACK and USRSTACK
75: cdate 21 Aug 2003
76: who he
77: file sys/miscfs/procfs/procfs_linux.c : 1.14
78: descr
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.
1.25 mrg 85: kcah
86:
87: hack GCC2 isn't C99
88: cdate 5 December 2003
89: who mrg
90: file gnu/dist/binutils/ld/ldlex.c: r1.2
91: descr
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.
1.11 lukem 97: kcah
98:
1.37 junyoung 99: hack gcc-strict-aliasing
100: cdate 6 August 2004
101: who junyoung
102: pr 26516
103: file src/usr.sbin/racoon/racoon/Makefile : 1.21
104: descr
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
1.38 junyoung 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.
1.37 junyoung 111: kcah
112:
1.13 simonb 113:
1.21 mycroft 114: port vax
115:
1.45 jmc 116: hack gcc 2.95/vax doesn't have stdbool.h and gettext needs it
117: cdate Mon May 9 12:16:22 CDT 2005
118: who jmc
119: file gnu/usr.bin/gettext/Makefile.inc.prog 1.5
120: gnu/usr.bin/gettext/libgrep/Makefile 1.3
121: gnu/usr.bin/gettext/libnlspr/Makefile 1.5
122: gnu/usr.bin/gettext/libnlsut/Makefile 1.3
123: descr
124: The latest gettext assumes a C99 environment or at least
125: configure checks to work around this. As we don't use configure
126: provide a stdbool.h for vax builds locally in directories from
127: the template provided by the gettext code.
128:
1.44 jmc 129: hack gcc 2.95/vax can't handle __used__ in mcount.c
130: cdate Fri May 6 14:30:53 CDT 2005
131: who jmc
132: file src/lib/libc/gmon/mcount.c 1.17
133: descr
134: Recent changes to mark this as __used__ to prevent optimization
135: away on sparc64 don't work on 2.95 vax. Ifdef'd back in the
136: old __unused__ if on vax.
137:
1.21 mycroft 138: hack gcc 2.95/vax cannot handle __builtin_ffs()
139: cdate Fri Aug 23 21:31:15 CEST 2002
140: who ragge
141: file sys/lib/libkern/libkern.h : 1.42
142: descr
143: __builtin_ffs() is ifdef'd away if __vax__. Matt Thomas has
144: added this feature to GCC 3 so it can be removed when switching.
1.44 jmc 145:
1.21 mycroft 146:
147: hack gcc-vax-libbz2
148: mdate 27 Jun 2002
149: who thorpej
150: file lib/libbz2/Makefile
151: descr
152: libbz2 is mis-compiled with optimization with GCC 2.95.3
1.24 ragge 153: on VAX. -O0 works around this problem.
154: kcah
155:
156: hack gawk
157: mdate 8 Nov 2003
158: who ragge
159: file gnu/usr.bin/gawk/Makefile
160: descr
161: gawk is mis-compiled with optimization with GCC 2.95.3
1.21 mycroft 162: on VAX. -O0 works around this problem.
163: kcah
164:
165: hack vax Toolchain bug
166: cdate 28 Mar 2003
167: who he
168: file sys/arch/vax/vax/intvec.S : 1.5
169: descr
170: Workaround for PR toolchain/20924. The assembler apparently
171: tries to range-check byte offsets when it doesn't have
172: sufficient information to make that decision.
173: Workaround uses `brw' instead of `brb' instruction.
1.23 he 174: kcah
175:
176: hack vax gcc 2.95.3 -Wuninitialized workarounds
177: cdate 6 Nov 2003
178: who he
179: file sys/dev/bi/if_ni.c : 1.22
180: file sys/arch/vax/vax/ctu.c : 1.20
181: descr
182: Workaround for gcc 2.95.3 failing to detect that certain
183: variables will be initialized; so that this code compiles
184: with -Wuninitialized. Should be reviewed and possibly
185: reverted when gcc 3.3.2 is ready for vax.
1.21 mycroft 186: kcah
187:
1.34 cl 188: hack vax gcc 2.95.3 structure initialization
189: cdat 13 May 2004
190: who cl
191: file sys/miscfs/kernfs/kernfs_vnops.c : 1.104
192: descr
193: Workaround for gcc 2.95.3 failing to initialize structures
194: and/or unions inside structures using nested designators.
195: Should be reverted when gcc >=3.3.3 is ready for vax.
196: kcah
1.21 mycroft 197:
1.35 he 198: hack vax gcc 2.95.3 needs -I. to build nslexer.c
199: cdat 6 Jun 2004
1.36 he 200: who mhitch
201: file lib/libc/arch/vax/Makefile.inc : 1.6
1.35 he 202: descr
203: It appears necessary to add -I. to CPPFLAGS when building
204: nslesxer.c. This may be caused by gcc 2.95.3 being used.
205: Should be reverted when a newer gcc is ready for vax.
206: kcah
207:
1.43 tron 208: hack vax gcc 2.95.3 doesn't understand "-std=c99"
209: cdat 5 April 2005
210: who tron
211: file src/share/mk/bsd.sys.mk
212: descr
213: We cannot use "-std=c99" for compiler warning level 4 and above
214: because gcc 2.95.3 doesn't support that option.
215: kcah
216:
1.21 mycroft 217: port sparc64
218:
219: hack binutil-2.11-sparc64-pltrela
220: mdate 14 Aug 2001
221: who eeh
222: file libexec/ld.elf_so/arch/sparc64/mdreloc.c
223: descr
1.39 skrll 224: The first four PLT entries are reserved. There is some
1.21 mycroft 225: disagreement whether they should have associated relocation
226: entries. Both the SPARC 32-bit and 64-bit ELF specifications
227: say that they should have relocation entries, but the 32-bit
228: SPARC binutils do not generate them, and now the 64-bit SPARC
229: binutils have stopped generating them too.
230:
231: To provide binary compatibility, we will check the first entry,
232: if it is reserved it should not be of the type JMP_SLOT. If it
233: is JMP_SLOT, then the 4 reserved entries were not generated and
234: our index is 4 entries too far, so we frob the rela pointer.
235: kcah
236:
237:
238: port arm
239:
240: hack gcc-unsigned-compare
241: cdate 09 Mar 2002
242: mdate 18 Mar 2002
243: who bjh21
244: file dist/bind/lib/nameser/ns_parse.c : 1.3
245: file dist/dhcp/minires/ns_parse.c : 1.3
246: file dist/dhcp/omapip/result.c : 1.2
247: file dist/dhcp/server/failover.c : 1.3
248: file gnu/dist/gawk/eval.c : 1.4
249: file gnu/dist/toolchain/bfd/bfd.c : 1.2
250: file gnu/dist/toolchain/bfd/format.c : 1.2
251: file gnu/dist/toolchain/gdb/target.c : 1.2
252: file sys/kern/vfs_subr.c : 1.172
253: descr When checking that a potentially-unsigned enum is >= 0, assign
254: it to an int first. This is necessary to avoid "comparison is
255: always true" warnings with -fshort-enums. Casting to an int
256: really should be enough, but turns out not to be.
257: kcah
258:
259: hack gcc 3.3.2/arm sys/kern/uipc_socket.c
260: cdate Tue Oct 28 18:02:16 GMT 2003
261: who skrll
1.41 bjh21 262: pr 23044
263: file sys/arch/arm/conf/Makefile.arm : 1.19
1.21 mycroft 264: descr
265: Performing a build.sh tools on a CATS with NFS mounted
266: obj and src directories results in "panic: receive 1"
267: The hack is to compile sys/kern/uipc_socket.c with
268: -fno-strict-aliasing
269: kcah
270:
271:
1.13 simonb 272: port pc532
1.16 cl 273:
1.21 mycroft 274: hack egcs-pc532-ip6_mroute
275: cdate 09 Jul 2002
276: who simonb
277: file sys/arch/pc532/conf/Makefile.pc532 : 1.70
278: file sys/arch/pc532/conf/files.pc532 : 1.47
279: descr
280: egcs 1.1.2 gets an "internal error--insn does not satisfy its
281: constraints" error compiling ip6_mroute.c with -O2 or greater.
282: -O1 works around this problem.
283: kcah
284:
285: hack gcc-pc532-duffs_device
286: cdate Mon Oct 27 07:23:05 UTC 2003
287: who simonb
288: file sys/arch/pc532/conf/Makefile.pc532 : 1.71
289: file sys/arch/pc532/conf/files.pc532 : 1.52
290: pr GCC PR optimization/5230
291: descr
292: gcc incorrectly gives an "unreachable code at beginning of
293: switch statement" for a Duff's device construct in
294: arch/pc532/dev/ncr.c. There is no way to disable just this
295: warning, so -Wno-error is turned on for this file.
296: kcah
297:
1.26 simonb 298: hack gcc332-cppmacro-ice
299: cdate Sun Dec 7 12:48:33 UTC 2003
300: who simonb
301: file gnu/usr.bin/gcc3/libcpp/Makefile : 1.2
302: descr
303: gcc 3.3.2 gets an ICE when compiling cppmacro.c with -O2.
304: The hack is to use -O1 for this file. Fixed in gcc
305: -current mainline, unable to work out where the fix is
306: right now.
307: kcah
308:
1.21 mycroft 309:
310: port sh3
311:
312: hack gcc-sh3-sed
313: mdate 23 Apr 2002
314: who thorpej
315: file usr.bin/sed/Makefile : 1.9 : 9 : 13
316: descr
317: The in-tree GCC 2.95.3-based compiler ICEs when building
1.26 simonb 318: with optimization for SuperH. Hack is to build with -O0.
1.21 mycroft 319: kcah
320:
321:
322: port sh5
323:
324: hack SuperH SH5 Toolchain Bugs
325: cdate 11 Jul 2002
326: who scw
327: file usr.sbin/ndbootd/ndbootd.c : 1.6
328: file usr.sbin/traceroute/traceroute.c : 1.48
329: descr
330: The SuperH SH5 toolchain (2.97-sh5-010522) gets an internal
331: compiler error when assigning a bit-wise inverted value
332: under some circumstances.
333: Work around it by splitting the statement into two.
334: kcah
335:
336: hack SuperH SH5 Toolchain Bugs
337: cdate 17 May 2003
338: who scw
339: file lib/libpthread/pthread_lock.c : 1.7
340: descr
341: The SuperH SH5 toolchain generates incorrect PIC code when
342: faced with a symbol which is declared extern, but has local
343: scope due to being defined within an asm() statement (without
344: being declared .globl in that statement). Work around it by
345: adding the .globl.
1.27 scw 346: kcah
347:
348: hack gcc 3.3.2 on sh5 - ICE compiling reload1.c at -O2
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 gets an ICE compiling reload1.c at -O2.
354: Drop to -O1 for now when building for sh5.
355: kcah
1.28 scw 356:
357: hack gcc 3.3.2 on sh5 - ICE compiling elf32.c/elf64.c at -O2
358: cdate Sun Dec 7 21:10:46 GMT 2003
359: who scw
360: file gnu/lib/libbfd/Makefile : 1.39
361: descr
362: Gcc3 for sh5 gets an ICE compiling libbfd's elf32.c
363: and elf64.c at -O2.
364: Drop to -O1 for now when building for sh5.
365: kcah
366:
1.27 scw 367:
368: hack gcc 3.3.2 on sh5 - fatal warning compiling function.c
369: cdate Sun Dec 7 19:44:05 GMT 2003
370: who scw
371: file gnu/usr.bin/gcc3/backend/Makefile : 1.13
372: descr
373: Gcc3 for sh5 issues a warning:
374: .../gnu/dist/gcc/gcc/function.c:4742: warning: `and' of
375: mutually exclusive equal-tests is always 0.
376: This causes the build to fail because of -Werror.
377: Work-around by defining NOGCCERROR when building for sh5.
378: kcah
379:
1.40 he 380: hack gcc 3.3.3 on sh5 - ICE compiling rbtdb.c and rbtdb64.c
381: cdate Thu Nov 11 00:35:33 UTC 2004
382: who he
383: file usr.sbin/bind/libdns/Makefile/1.2
1.27 scw 384: descr
1.40 he 385: Gcc3 for sh5 gets an ICE compiling these files at -O2.
1.27 scw 386: Drop to -O1 for now when building for sh5.
1.21 mycroft 387: kcah
1.17 mrg 388:
389:
390: port sun2
1.20 skrll 391:
1.21 mycroft 392: hack gcc 3.3.2/mdsetimage
393: cdate Tue Oct 28 18:43:05 EST 2003
394: who fredette
395: file gnu/usr.sbin/mdsetimage/Makefile : 1.15
396: descr
397: mdsetimage.c causes cc1 to barf for as-yet unknown reasons.
1.26 simonb 398: this hack uses -O0 to avoid the problem.
1.21 mycroft 399: kcah
400:
401: hack gcc 3.3.2/installboot/ffs.c
402: cdate Tue Oct 28 18:43:05 EST 2003
403: who fredette
404: file usr.sbin/installboot/Makefile : 1.26
405: descr
406: ffs.c causes cc1 to barf for as-yet unknown reasons. this
1.26 simonb 407: hack uses -O0 to avoid the problem.
1.22 mrg 408: kcah
409:
410:
1.46 ! chs 411: port sun2 m68k
1.22 mrg 412:
413: hack gcc 3.3.2/gcc/ra-colorize.c
414: cdate Wed Nov 5 11:03:13 EST 2003
415: who mrg
1.46 ! chs 416: file gnu/usr.bin/gcc3/backend/Makefile : 1.11
1.22 mrg 417: descr
418: ra-colorize.c causes a whole spew of unreferenced .L* local
419: symbols. using -O0 (or even -O2 reportedly) avoids the problem.
1.21 mycroft 420: kcah
1.31 martin 421:
422: port sparc64
423:
424: hack disable optimzations for uvm_bio.c on 32 bit kernels
425: cdate Sun Mar 21 14:14:04 MET 2004
426: who martin
1.32 martin 427: file sys/arch/sparc64/conf/Makefile.sparc64 : 1.53-1.54
428: file sys/arch/sparc64/conf/files.sparc64 : 1.93
1.31 martin 429: descr
430: The sparc compiler miscompiles uvm_bio.c when using
431: any optimization. This results in ubc_release panics.
432: kcah
1.42 christos 433:
434: port macppc
435:
436: hack remove inline from rotate_{left,right}
437: cdate Tue Feb 22 13:43:25 EST 2005
438: who christos
439: file src/dist/bind/lib/dns/rbt.c
440: descr
441: The macppc gcc-3.3 compiler miscompiles rbt.c when these
442: functions are inlined. The error is:
443: .* named[368]: rbt.c:1584: INSIST(child != (void *)0) >failed
444: .* named[368]: exiting (due to assertion failure)
445: This is reportedly fixed in gcc-3.4
446: kcah
1.46 ! chs 447:
! 448: port hppa
! 449:
! 450: hack hppa-gcc-3.3.3/grep/dfa.c
! 451: cdate Sun Aug 8 08:34:32 PDT 2004
! 452: who chs
! 453: file gnu/usr.bin/grep/grep/Makefile : 1.4
! 454: descr
! 455: gcc 3.3.3 generates bad code for dfa.c with -O2,
! 456: reduce optimization to -O1 to avoid the bug.
! 457: kcah
CVSweb <webmaster@jp.NetBSD.org>