Annotation of src/doc/HACKS, Revision 1.56
1.56 ! tsutsui 1: # $NetBSD: HACKS,v 1.55 2006/05/08 11:09:01 he 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.52 jmc 116: hack gcc 2.95/vax doesn't like abort being used as function pointer
117: cdate Tue Dec 13 05:54:50 GMT 2005
118: who jmc
119: file lib/libc/rpc/svc_vc.c 1.15
120: descr
121: Provide a local definition for abort which doesn't include
122: the noreturn attribute which trips up gcc 2.95 on vax.
123:
1.45 jmc 124: hack gcc 2.95/vax doesn't have stdbool.h and gettext needs it
125: cdate Mon May 9 12:16:22 CDT 2005
126: who jmc
127: file gnu/usr.bin/gettext/Makefile.inc.prog 1.5
128: gnu/usr.bin/gettext/libgrep/Makefile 1.3
129: gnu/usr.bin/gettext/libnlspr/Makefile 1.5
130: gnu/usr.bin/gettext/libnlsut/Makefile 1.3
131: descr
132: The latest gettext assumes a C99 environment or at least
133: configure checks to work around this. As we don't use configure
134: provide a stdbool.h for vax builds locally in directories from
135: the template provided by the gettext code.
136:
1.44 jmc 137: hack gcc 2.95/vax can't handle __used__ in mcount.c
138: cdate Fri May 6 14:30:53 CDT 2005
139: who jmc
140: file src/lib/libc/gmon/mcount.c 1.17
141: descr
142: Recent changes to mark this as __used__ to prevent optimization
143: away on sparc64 don't work on 2.95 vax. Ifdef'd back in the
144: old __unused__ if on vax.
145:
1.21 mycroft 146: hack gcc 2.95/vax cannot handle __builtin_ffs()
147: cdate Fri Aug 23 21:31:15 CEST 2002
148: who ragge
149: file sys/lib/libkern/libkern.h : 1.42
150: descr
151: __builtin_ffs() is ifdef'd away if __vax__. Matt Thomas has
152: added this feature to GCC 3 so it can be removed when switching.
1.44 jmc 153:
1.21 mycroft 154:
155: hack gcc-vax-libbz2
156: mdate 27 Jun 2002
157: who thorpej
158: file lib/libbz2/Makefile
159: descr
160: libbz2 is mis-compiled with optimization with GCC 2.95.3
1.24 ragge 161: on VAX. -O0 works around this problem.
162: kcah
163:
164: hack gawk
165: mdate 8 Nov 2003
166: who ragge
167: file gnu/usr.bin/gawk/Makefile
168: descr
169: gawk is mis-compiled with optimization with GCC 2.95.3
1.21 mycroft 170: on VAX. -O0 works around this problem.
171: kcah
172:
173: hack vax Toolchain bug
174: cdate 28 Mar 2003
175: who he
176: file sys/arch/vax/vax/intvec.S : 1.5
177: descr
178: Workaround for PR toolchain/20924. The assembler apparently
179: tries to range-check byte offsets when it doesn't have
180: sufficient information to make that decision.
181: Workaround uses `brw' instead of `brb' instruction.
1.23 he 182: kcah
183:
184: hack vax gcc 2.95.3 -Wuninitialized workarounds
185: cdate 6 Nov 2003
186: who he
187: file sys/dev/bi/if_ni.c : 1.22
188: file sys/arch/vax/vax/ctu.c : 1.20
189: descr
190: Workaround for gcc 2.95.3 failing to detect that certain
191: variables will be initialized; so that this code compiles
192: with -Wuninitialized. Should be reviewed and possibly
193: reverted when gcc 3.3.2 is ready for vax.
1.21 mycroft 194: kcah
195:
1.34 cl 196: hack vax gcc 2.95.3 structure initialization
197: cdat 13 May 2004
198: who cl
199: file sys/miscfs/kernfs/kernfs_vnops.c : 1.104
200: descr
201: Workaround for gcc 2.95.3 failing to initialize structures
202: and/or unions inside structures using nested designators.
203: Should be reverted when gcc >=3.3.3 is ready for vax.
204: kcah
1.21 mycroft 205:
1.35 he 206: hack vax gcc 2.95.3 needs -I. to build nslexer.c
207: cdat 6 Jun 2004
1.36 he 208: who mhitch
209: file lib/libc/arch/vax/Makefile.inc : 1.6
1.35 he 210: descr
211: It appears necessary to add -I. to CPPFLAGS when building
212: nslesxer.c. This may be caused by gcc 2.95.3 being used.
213: Should be reverted when a newer gcc is ready for vax.
214: kcah
215:
1.43 tron 216: hack vax gcc 2.95.3 doesn't understand "-std=c99"
217: cdat 5 April 2005
218: who tron
219: file src/share/mk/bsd.sys.mk
220: descr
221: We cannot use "-std=c99" for compiler warning level 4 and above
222: because gcc 2.95.3 doesn't support that option.
223: kcah
224:
1.54 he 225: hack declare boolean_t in two IPF user-mode programs
226: cdate Tue Mar 7 19:19:20 CET 2006
227: who he
228: file dist/ipf/ipsend/iptests.c : 1.8
229: dist/ipf/ipsend/sock.c : 1.7
230: descr
231: The IPF user-mode programs ipsend and iptest first
232: include <sys/types.h> without _KERNEL defined, and
233: later include <sys/file.h> with _KERNEL defined.
234: This causes a build failure when building for vax,
235: since <sys/device.h> ends up being included without
236: bollean_t being defined by <sys/types.h>.
237: Build failure and further details documented in
238: PR#32907.
239: kcah
240:
1.21 mycroft 241: port sparc64
242:
243: hack binutil-2.11-sparc64-pltrela
244: mdate 14 Aug 2001
245: who eeh
246: file libexec/ld.elf_so/arch/sparc64/mdreloc.c
247: descr
1.39 skrll 248: The first four PLT entries are reserved. There is some
1.21 mycroft 249: disagreement whether they should have associated relocation
250: entries. Both the SPARC 32-bit and 64-bit ELF specifications
251: say that they should have relocation entries, but the 32-bit
252: SPARC binutils do not generate them, and now the 64-bit SPARC
253: binutils have stopped generating them too.
254:
255: To provide binary compatibility, we will check the first entry,
256: if it is reserved it should not be of the type JMP_SLOT. If it
257: is JMP_SLOT, then the 4 reserved entries were not generated and
258: our index is 4 entries too far, so we frob the rela pointer.
259: kcah
260:
261:
262: port arm
263:
264: hack gcc-unsigned-compare
265: cdate 09 Mar 2002
266: mdate 18 Mar 2002
267: who bjh21
268: file dist/bind/lib/nameser/ns_parse.c : 1.3
269: file dist/dhcp/minires/ns_parse.c : 1.3
270: file dist/dhcp/omapip/result.c : 1.2
271: file dist/dhcp/server/failover.c : 1.3
272: file gnu/dist/gawk/eval.c : 1.4
273: file gnu/dist/toolchain/bfd/bfd.c : 1.2
274: file gnu/dist/toolchain/bfd/format.c : 1.2
275: file gnu/dist/toolchain/gdb/target.c : 1.2
276: file sys/kern/vfs_subr.c : 1.172
277: descr When checking that a potentially-unsigned enum is >= 0, assign
278: it to an int first. This is necessary to avoid "comparison is
279: always true" warnings with -fshort-enums. Casting to an int
280: really should be enough, but turns out not to be.
281: kcah
282:
283: hack gcc 3.3.2/arm sys/kern/uipc_socket.c
284: cdate Tue Oct 28 18:02:16 GMT 2003
285: who skrll
1.41 bjh21 286: pr 23044
287: file sys/arch/arm/conf/Makefile.arm : 1.19
1.21 mycroft 288: descr
289: Performing a build.sh tools on a CATS with NFS mounted
290: obj and src directories results in "panic: receive 1"
291: The hack is to compile sys/kern/uipc_socket.c with
292: -fno-strict-aliasing
293: kcah
294:
295:
1.13 simonb 296: port pc532
1.16 cl 297:
1.21 mycroft 298: hack egcs-pc532-ip6_mroute
299: cdate 09 Jul 2002
300: who simonb
301: file sys/arch/pc532/conf/Makefile.pc532 : 1.70
302: file sys/arch/pc532/conf/files.pc532 : 1.47
303: descr
304: egcs 1.1.2 gets an "internal error--insn does not satisfy its
305: constraints" error compiling ip6_mroute.c with -O2 or greater.
306: -O1 works around this problem.
307: kcah
308:
309: hack gcc-pc532-duffs_device
310: cdate Mon Oct 27 07:23:05 UTC 2003
311: who simonb
312: file sys/arch/pc532/conf/Makefile.pc532 : 1.71
313: file sys/arch/pc532/conf/files.pc532 : 1.52
314: pr GCC PR optimization/5230
315: descr
316: gcc incorrectly gives an "unreachable code at beginning of
317: switch statement" for a Duff's device construct in
318: arch/pc532/dev/ncr.c. There is no way to disable just this
319: warning, so -Wno-error is turned on for this file.
320: kcah
321:
1.26 simonb 322: hack gcc332-cppmacro-ice
323: cdate Sun Dec 7 12:48:33 UTC 2003
324: who simonb
325: file gnu/usr.bin/gcc3/libcpp/Makefile : 1.2
326: descr
327: gcc 3.3.2 gets an ICE when compiling cppmacro.c with -O2.
328: The hack is to use -O1 for this file. Fixed in gcc
329: -current mainline, unable to work out where the fix is
330: right now.
331: kcah
332:
1.21 mycroft 333:
334: port sh3
335:
336: hack gcc-sh3-sed
337: mdate 23 Apr 2002
338: who thorpej
339: file usr.bin/sed/Makefile : 1.9 : 9 : 13
340: descr
341: The in-tree GCC 2.95.3-based compiler ICEs when building
1.26 simonb 342: with optimization for SuperH. Hack is to build with -O0.
1.21 mycroft 343: kcah
344:
345:
346: port sh5
347:
348: hack SuperH SH5 Toolchain Bugs
349: cdate 11 Jul 2002
350: who scw
351: file usr.sbin/ndbootd/ndbootd.c : 1.6
352: file usr.sbin/traceroute/traceroute.c : 1.48
353: descr
354: The SuperH SH5 toolchain (2.97-sh5-010522) gets an internal
355: compiler error when assigning a bit-wise inverted value
356: under some circumstances.
357: Work around it by splitting the statement into two.
358: kcah
359:
360: hack SuperH SH5 Toolchain Bugs
361: cdate 17 May 2003
362: who scw
363: file lib/libpthread/pthread_lock.c : 1.7
364: descr
365: The SuperH SH5 toolchain generates incorrect PIC code when
366: faced with a symbol which is declared extern, but has local
367: scope due to being defined within an asm() statement (without
368: being declared .globl in that statement). Work around it by
369: adding the .globl.
1.27 scw 370: kcah
371:
372: hack gcc 3.3.2 on sh5 - ICE compiling reload1.c at -O2
373: cdate Sun Dec 7 19:44:05 GMT 2003
374: who scw
375: file gnu/usr.bin/gcc3/backend/Makefile : 1.13
376: descr
377: Gcc3 for sh5 gets an ICE compiling reload1.c at -O2.
378: Drop to -O1 for now when building for sh5.
379: kcah
1.28 scw 380:
381: hack gcc 3.3.2 on sh5 - ICE compiling elf32.c/elf64.c at -O2
382: cdate Sun Dec 7 21:10:46 GMT 2003
383: who scw
384: file gnu/lib/libbfd/Makefile : 1.39
385: descr
386: Gcc3 for sh5 gets an ICE compiling libbfd's elf32.c
387: and elf64.c at -O2.
388: Drop to -O1 for now when building for sh5.
389: kcah
390:
1.27 scw 391:
392: hack gcc 3.3.2 on sh5 - fatal warning compiling function.c
393: cdate Sun Dec 7 19:44:05 GMT 2003
394: who scw
395: file gnu/usr.bin/gcc3/backend/Makefile : 1.13
396: descr
397: Gcc3 for sh5 issues a warning:
398: .../gnu/dist/gcc/gcc/function.c:4742: warning: `and' of
399: mutually exclusive equal-tests is always 0.
400: This causes the build to fail because of -Werror.
401: Work-around by defining NOGCCERROR when building for sh5.
402: kcah
403:
1.40 he 404: hack gcc 3.3.3 on sh5 - ICE compiling rbtdb.c and rbtdb64.c
405: cdate Thu Nov 11 00:35:33 UTC 2004
406: who he
407: file usr.sbin/bind/libdns/Makefile/1.2
1.27 scw 408: descr
1.40 he 409: Gcc3 for sh5 gets an ICE compiling these files at -O2.
1.27 scw 410: Drop to -O1 for now when building for sh5.
1.21 mycroft 411: kcah
1.17 mrg 412:
1.48 he 413: hack gcc 3.3.3 nb3 on sh5 - ICE compiling bsd-comp.c
414: cdate Thu May 25 23:05:20 UTC 2005
415: who he
416: file sys/lkm/net/bsdcomp/Makefile : 1.3
417: descr
418: Gcc3 for sh5 gets an ICE compiling this at -O2,
419: "could not split insn". Drop to -O1 for sh5.
420: kcah
1.17 mrg 421:
1.53 scw 422: hack gcc 3.3.3 nb3 on sh5 - ICE compiling strtod.c
423: cdate Tue Jan 31 10:51:52 GMT 2006
424: who scw
425: file lib/libc/gdtoa/Makefile.inc : 1.2
426: descr
427: Gcc3 for sh5 gets an ICE compiling this at -O2,
428: "could not split insn". Drop to -O1 for sh5.
429: kcah
430:
1.17 mrg 431: port sun2
1.20 skrll 432:
1.21 mycroft 433: hack gcc 3.3.2/mdsetimage
434: cdate Tue Oct 28 18:43:05 EST 2003
435: who fredette
436: file gnu/usr.sbin/mdsetimage/Makefile : 1.15
437: descr
438: mdsetimage.c causes cc1 to barf for as-yet unknown reasons.
1.26 simonb 439: this hack uses -O0 to avoid the problem.
1.21 mycroft 440: kcah
441:
442: hack gcc 3.3.2/installboot/ffs.c
443: cdate Tue Oct 28 18:43:05 EST 2003
444: who fredette
445: file usr.sbin/installboot/Makefile : 1.26
446: descr
447: ffs.c causes cc1 to barf for as-yet unknown reasons. this
1.26 simonb 448: hack uses -O0 to avoid the problem.
1.22 mrg 449: kcah
450:
451:
1.56 ! tsutsui 452: port m68000
1.22 mrg 453:
454: hack gcc 3.3.2/gcc/ra-colorize.c
455: cdate Wed Nov 5 11:03:13 EST 2003
456: who mrg
1.46 chs 457: file gnu/usr.bin/gcc3/backend/Makefile : 1.11
1.22 mrg 458: descr
459: ra-colorize.c causes a whole spew of unreferenced .L* local
460: symbols. using -O0 (or even -O2 reportedly) avoids the problem.
1.56 ! tsutsui 461: Note this has been fixed in 3.3.3 at least on m68k,
! 462: but it hasn't been confirmed on sun2/m68000.
! 463: (it's too slow even on emulator and unlikely to build
! 464: toolchains on sun2 with its maximum 4MB RAM)
1.21 mycroft 465: kcah
1.31 martin 466:
467: port sparc64
468:
469: hack disable optimzations for uvm_bio.c on 32 bit kernels
470: cdate Sun Mar 21 14:14:04 MET 2004
471: who martin
1.32 martin 472: file sys/arch/sparc64/conf/Makefile.sparc64 : 1.53-1.54
473: file sys/arch/sparc64/conf/files.sparc64 : 1.93
1.31 martin 474: descr
475: The sparc compiler miscompiles uvm_bio.c when using
476: any optimization. This results in ubc_release panics.
477: kcah
1.42 christos 478:
479: port macppc
480:
481: hack remove inline from rotate_{left,right}
482: cdate Tue Feb 22 13:43:25 EST 2005
483: who christos
484: file src/dist/bind/lib/dns/rbt.c
485: descr
486: The macppc gcc-3.3 compiler miscompiles rbt.c when these
487: functions are inlined. The error is:
488: .* named[368]: rbt.c:1584: INSIST(child != (void *)0) >failed
489: .* named[368]: exiting (due to assertion failure)
490: This is reportedly fixed in gcc-3.4
491: kcah
1.46 chs 492:
493: port hppa
494:
495: hack hppa-gcc-3.3.3/grep/dfa.c
496: cdate Sun Aug 8 08:34:32 PDT 2004
497: who chs
498: file gnu/usr.bin/grep/grep/Makefile : 1.4
499: descr
500: gcc 3.3.3 generates bad code for dfa.c with -O2,
501: reduce optimization to -O1 to avoid the bug.
502: kcah
1.47 chs 503:
1.55 he 504: hack hppa-gcc-3.3.3 / make/buf.c
505: cdate Mon May 8 13:02:36 CEST 2006
506: who he
507: file usr.bin/make/Makefile : 1.34
508: descr
509: gcc 3.3.3 nb3 gets an "unrecognized insn" internal
510: compiler error when building this file with -O2,
511: reduce optimization to -O1 to avoid the bug.
512: kcah
513:
1.47 chs 514: hack hppa boot-from-disk memory corruption
515: cdate Wed May 18 06:56:07 PDT 2005
516: who chs
517: file src/sys/dev/scsipi/scsipiconf.h : 1.98
518: descr
519: There is some bug with DMA on hppa that corrupts scsipi_xfer
520: structures, but it only shows up when booting from disk.
521: For now, we'll add some padding to scsipi_xfer so that
522: the corrupted memory is not otherwise used.
523: kcah
1.51 simonb 524:
525: port mips
526:
527: hack mips-shared-linker-load-address
528: cdate Fri Oct 7 08:33:10 UTC 2005
529: who simonb
530: file src/sys/kern/exec_elf32.c : 1.107
531: descr
532: With COMPAT_16 or previous enabled (which enables
533: ELF_INTERP_NON_RELOCATABLE) a recent ld.elf_so will
534: load and run at address 0. The check to fix this in
535: rev 1.107 only checks the first psection of the ELF
536: executable, which may not be loadable. A more correct
537: fix is to check the first loadable psection instead of
538: just the first psection.
539: kcah
1.54 he 540:
CVSweb <webmaster@jp.NetBSD.org>