HACKS revision 1.57 1 # $NetBSD: HACKS,v 1.57 2006/05/10 21:54:58 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
30 hack gcc4 wrong uninitialised variable
31 mdate 10 May 2006
32 who mrg
33 file bin/ksh/eval.c : 1.6
34 file bin/sh/histedit.c : 1.39
35 file bin/sh/parser.c : 1.60
36 file bin/systrace/systrace.c : 1.33
37 file crypto/dist/heimdal/kdc/524.c : 1.10
38 file crypto/dist/ssh/sftp.c : 1.20
39 file crypto/dist/ssh/ssh-keysign.c : 1.11
40 file dist/ipf/lib/hostname.c : 1.2
41 file dist/ipf/tools/ipmon.c : 1.8
42 file dist/ntp/ntpd/refclock_shm.c : 1.4
43 file dist/ntp/sntp/timing.c : 1.3
44 file dist/pppd/pppstats/pppstats.c : 1.3
45 file dist/smbfs/lib/smb/rap.c : 1.6
46 file dist/tcpdump/print-zephyr.c : 1.5
47 file gnu/libexec/uucp/uucico/uucico.c : 1.6
48 file lib/libc/citrus/citrus_csmapper.c : 1.6
49 file lib/libc/citrus/citrus_pivot_factory.c : 1.5
50 file lib/libc/inet/inet_cidr_ntop.c : 1.3
51 file lib/libc/inet/inet_ntop.c : 1.3
52 file lib/libc/stdio/vfwprintf.c : 1.8
53 file libexec/ld.elf_so/arch/sparc64/mdreloc.c : 1.39
54 file sbin/fsck_ext2fs/dir.c : 1.19
55 file sbin/routed/rtquery/rtquery.c : 1.18
56 file sys/crypto/cast128/cast128.c : 1.9
57 file sys/ddb/db_command.c : 1.86
58 file sys/dev/fss.c : 1.25
59 file sys/dev/ic/midway.c : 1.71
60 file sys/dev/pci/machfb.c : 1.45
61 file sys/dist/ipf/netinet/ip_nat.c : 1.10
62 file sys/dist/ipf/netinet/ip_rpcb_pxy.c : 1.8
63 file sys/kern/kern_sig.c : 1.219
64 file sys/kern/tty.c : 1.181
65 file sys/net/bpf.c : 1.116
66 file sys/net/zlib.c : 1.26
67 file sys/netinet/in.c : 1.107
68 file sys/netsmb/smb_smb.c : 1.27
69 file sys/netsmb/smb_trantcp.c : 1.22
70 file sys/nfs/nfs_serv.c : 1.108
71 file sys/nfs/nfs_socket.c : 1.129
72 file sys/nfs/nfs_syscalls.c : 1.91
73 file sys/ufs/lfs/lfs_vfsops.c : 1.207 [also (char *)]
74 file usr.bin/ftp/ftp.c : 1.140
75 file usr.bin/find/function.c : 1.54
76 file usr.bin/mail/tty.c : 1.20
77 file usr.bin/nl/nl.c : 1.7
78 file usr.bin/systat/keyboard.c : 1.23
79 file usr.bin/usbhidctl/usbhid.c : 1.29
80 file usr.bin/vi/cl/cl_read.c : 1.5
81 file usr.bin/vi/ex/ex_cscope.c : 1.12
82 file usr.bin/vi/ex/ex_tag.c : 1.19
83 file usr.bin/vi/vi/v_txt.c : 1.15
84 file usr.sbin/altq/altqstat/qdisc_rio.c : 1.4
85 file usr.sbin/cron/do_command.c : 1.19
86 file usr.sbin/timed/timed/slave.c : 1.15
87 descr
88 GCC 4.1 gets many uninitialised variable warnings wrong. We should
89 really audit all the old hacks like this when older compilers are
90 removed from the tree, as many are probably no longer required.
91 kcah
92
93 hack netstat ieee1394 address printing.
94 mdate 14 Nov 2000
95 who matt
96 file lib/libc/net/getnameinfo.c : 1.32 : 497 : 503
97 descr
98 Because the current implementation of IP over IEEE1394, the
99 fw device address contains more than just the IEEE1394 EUI-64.
100 So when printing out IEEE1394 addresses, ignore the extra stuff.
101 kcah
102
103 hack xterm vs. libterm
104 mdate 01 Aug 2000
105 who jdc
106 file xsrc/xc/programs/xterm/main.c : 1.2 : 3609 : 3614
107 pr 10383
108 descr
109 In order to extend the termcap string over 1023 bytes, a ZZ entry was
110 introduced to point to a memory location containing the full entry.
111 Without this hack, xterm will export a termcap containing the ZZ
112 entry, which will then be ignored by libterm. As xterm modifies the
113 exported termcap, this would cause those modifications to be ignored.
114 kcah
115
116 hack wi-at-big-endian-bus
117 cdate 15 Mar 2002
118 who martin
119 file dev/ic/wireg.h
120 descr Add an option to access the underlying bus in big endian byte order
121 to work around deficiencies in bus_space_{read,write}_* macros.
122 Those don't allow the implementation of a proper pcmcia bus space
123 tag.
124 kcah
125
126 hack specific knowledge of colours in curses code
127 cdate Sun Apr 6 11:05:24 BST 2003
128 who jdc
129 file lib/libcurses/color.c : r1.24
130 descr
131 Swap red/blue and yellow/cyan colours for COLOR_OTHER.
132 Fix is to enhance libtermcap to understand terminfo-style % sequences.
133 See also:
134 http://mail-index.NetBSD.org/tech-userlevel/2003/04/06/0000.html
135 kcah
136
137 hack Compensation for differing types of LINUX_USRSTACK and USRSTACK
138 cdate 21 Aug 2003
139 who he
140 file sys/miscfs/procfs/procfs_linux.c : 1.14
141 descr
142 Not all ports have LINUX_USRSTACK and/or USRSTACK defined as
143 literals/constants, but refer to variables of a type which is
144 not "unsigned long", causing compilation of procfs_linux.c to
145 fail with "makes integer from pointer without a cast". This
146 is observed on e.g. the sun3 port. Ideally the "types" for
147 symbols should be consistent across all ports.
148 kcah
149
150 hack GCC2 isn't C99
151 cdate 5 December 2003
152 who mrg
153 file gnu/dist/binutils/ld/ldlex.c: r1.2
154 descr
155 ldlex.c is generated from ldlex.l and we get macro redefinition
156 errors from it if __STDC_VERSION__ is not C99 compliant. This
157 hack forces NetBSD 1.6 and later systems to also include <stdint.h>
158 to get the relevant definitions. This hack should be backed out
159 when all platforms have switched away from GCC2.
160 kcah
161
162 hack gcc-strict-aliasing
163 cdate 6 August 2004
164 who junyoung
165 pr 26516
166 file src/usr.sbin/racoon/racoon/Makefile : 1.21
167 descr
168 GCC issues a warning "dereferencing type-punned pointer will break
169 strict-aliasing rules" when compiling
170 crypto/dist/kame/racoon/crypto/openssl.c with -O[23s]. Note that this
171 is due to use of type casting in a non-standard way in the code and
172 not a compiler bug. Once a new release of KAME with a proper fix
173 applied is imported this should be backed out.
174 kcah
175
176
177 port vax
178
179 hack gcc 2.95/vax doesn't like abort being used as function pointer
180 cdate Tue Dec 13 05:54:50 GMT 2005
181 who jmc
182 file lib/libc/rpc/svc_vc.c 1.15
183 descr
184 Provide a local definition for abort which doesn't include
185 the noreturn attribute which trips up gcc 2.95 on vax.
186
187 hack gcc 2.95/vax doesn't have stdbool.h and gettext needs it
188 cdate Mon May 9 12:16:22 CDT 2005
189 who jmc
190 file gnu/usr.bin/gettext/Makefile.inc.prog 1.5
191 gnu/usr.bin/gettext/libgrep/Makefile 1.3
192 gnu/usr.bin/gettext/libnlspr/Makefile 1.5
193 gnu/usr.bin/gettext/libnlsut/Makefile 1.3
194 descr
195 The latest gettext assumes a C99 environment or at least
196 configure checks to work around this. As we don't use configure
197 provide a stdbool.h for vax builds locally in directories from
198 the template provided by the gettext code.
199
200 hack gcc 2.95/vax can't handle __used__ in mcount.c
201 cdate Fri May 6 14:30:53 CDT 2005
202 who jmc
203 file src/lib/libc/gmon/mcount.c 1.17
204 descr
205 Recent changes to mark this as __used__ to prevent optimization
206 away on sparc64 don't work on 2.95 vax. Ifdef'd back in the
207 old __unused__ if on vax.
208
209 hack gcc 2.95/vax cannot handle __builtin_ffs()
210 cdate Fri Aug 23 21:31:15 CEST 2002
211 who ragge
212 file sys/lib/libkern/libkern.h : 1.42
213 descr
214 __builtin_ffs() is ifdef'd away if __vax__. Matt Thomas has
215 added this feature to GCC 3 so it can be removed when switching.
216
217
218 hack gcc-vax-libbz2
219 mdate 27 Jun 2002
220 who thorpej
221 file lib/libbz2/Makefile
222 descr
223 libbz2 is mis-compiled with optimization with GCC 2.95.3
224 on VAX. -O0 works around this problem.
225 kcah
226
227 hack gawk
228 mdate 8 Nov 2003
229 who ragge
230 file gnu/usr.bin/gawk/Makefile
231 descr
232 gawk is mis-compiled with optimization with GCC 2.95.3
233 on VAX. -O0 works around this problem.
234 kcah
235
236 hack vax Toolchain bug
237 cdate 28 Mar 2003
238 who he
239 file sys/arch/vax/vax/intvec.S : 1.5
240 descr
241 Workaround for PR toolchain/20924. The assembler apparently
242 tries to range-check byte offsets when it doesn't have
243 sufficient information to make that decision.
244 Workaround uses `brw' instead of `brb' instruction.
245 kcah
246
247 hack vax gcc 2.95.3 -Wuninitialized workarounds
248 cdate 6 Nov 2003
249 who he
250 file sys/dev/bi/if_ni.c : 1.22
251 file sys/arch/vax/vax/ctu.c : 1.20
252 descr
253 Workaround for gcc 2.95.3 failing to detect that certain
254 variables will be initialized; so that this code compiles
255 with -Wuninitialized. Should be reviewed and possibly
256 reverted when gcc 3.3.2 is ready for vax.
257 kcah
258
259 hack vax gcc 2.95.3 structure initialization
260 cdat 13 May 2004
261 who cl
262 file sys/miscfs/kernfs/kernfs_vnops.c : 1.104
263 descr
264 Workaround for gcc 2.95.3 failing to initialize structures
265 and/or unions inside structures using nested designators.
266 Should be reverted when gcc >=3.3.3 is ready for vax.
267 kcah
268
269 hack vax gcc 2.95.3 needs -I. to build nslexer.c
270 cdat 6 Jun 2004
271 who mhitch
272 file lib/libc/arch/vax/Makefile.inc : 1.6
273 descr
274 It appears necessary to add -I. to CPPFLAGS when building
275 nslesxer.c. This may be caused by gcc 2.95.3 being used.
276 Should be reverted when a newer gcc is ready for vax.
277 kcah
278
279 hack vax gcc 2.95.3 doesn't understand "-std=c99"
280 cdat 5 April 2005
281 who tron
282 file src/share/mk/bsd.sys.mk
283 descr
284 We cannot use "-std=c99" for compiler warning level 4 and above
285 because gcc 2.95.3 doesn't support that option.
286 kcah
287
288 hack declare boolean_t in two IPF user-mode programs
289 cdate Tue Mar 7 19:19:20 CET 2006
290 who he
291 file dist/ipf/ipsend/iptests.c : 1.8
292 dist/ipf/ipsend/sock.c : 1.7
293 descr
294 The IPF user-mode programs ipsend and iptest first
295 include <sys/types.h> without _KERNEL defined, and
296 later include <sys/file.h> with _KERNEL defined.
297 This causes a build failure when building for vax,
298 since <sys/device.h> ends up being included without
299 bollean_t being defined by <sys/types.h>.
300 Build failure and further details documented in
301 PR#32907.
302 kcah
303
304 port sparc64
305
306 hack binutil-2.11-sparc64-pltrela
307 mdate 14 Aug 2001
308 who eeh
309 file libexec/ld.elf_so/arch/sparc64/mdreloc.c
310 descr
311 The first four PLT entries are reserved. There is some
312 disagreement whether they should have associated relocation
313 entries. Both the SPARC 32-bit and 64-bit ELF specifications
314 say that they should have relocation entries, but the 32-bit
315 SPARC binutils do not generate them, and now the 64-bit SPARC
316 binutils have stopped generating them too.
317
318 To provide binary compatibility, we will check the first entry,
319 if it is reserved it should not be of the type JMP_SLOT. If it
320 is JMP_SLOT, then the 4 reserved entries were not generated and
321 our index is 4 entries too far, so we frob the rela pointer.
322 kcah
323
324
325 port arm
326
327 hack gcc-unsigned-compare
328 cdate 09 Mar 2002
329 mdate 18 Mar 2002
330 who bjh21
331 file dist/bind/lib/nameser/ns_parse.c : 1.3
332 file dist/dhcp/minires/ns_parse.c : 1.3
333 file dist/dhcp/omapip/result.c : 1.2
334 file dist/dhcp/server/failover.c : 1.3
335 file gnu/dist/gawk/eval.c : 1.4
336 file gnu/dist/toolchain/bfd/bfd.c : 1.2
337 file gnu/dist/toolchain/bfd/format.c : 1.2
338 file gnu/dist/toolchain/gdb/target.c : 1.2
339 file sys/kern/vfs_subr.c : 1.172
340 descr When checking that a potentially-unsigned enum is >= 0, assign
341 it to an int first. This is necessary to avoid "comparison is
342 always true" warnings with -fshort-enums. Casting to an int
343 really should be enough, but turns out not to be.
344 kcah
345
346 hack gcc 3.3.2/arm sys/kern/uipc_socket.c
347 cdate Tue Oct 28 18:02:16 GMT 2003
348 who skrll
349 pr 23044
350 file sys/arch/arm/conf/Makefile.arm : 1.19
351 descr
352 Performing a build.sh tools on a CATS with NFS mounted
353 obj and src directories results in "panic: receive 1"
354 The hack is to compile sys/kern/uipc_socket.c with
355 -fno-strict-aliasing
356 kcah
357
358
359 port pc532
360
361 hack egcs-pc532-ip6_mroute
362 cdate 09 Jul 2002
363 who simonb
364 file sys/arch/pc532/conf/Makefile.pc532 : 1.70
365 file sys/arch/pc532/conf/files.pc532 : 1.47
366 descr
367 egcs 1.1.2 gets an "internal error--insn does not satisfy its
368 constraints" error compiling ip6_mroute.c with -O2 or greater.
369 -O1 works around this problem.
370 kcah
371
372 hack gcc-pc532-duffs_device
373 cdate Mon Oct 27 07:23:05 UTC 2003
374 who simonb
375 file sys/arch/pc532/conf/Makefile.pc532 : 1.71
376 file sys/arch/pc532/conf/files.pc532 : 1.52
377 pr GCC PR optimization/5230
378 descr
379 gcc incorrectly gives an "unreachable code at beginning of
380 switch statement" for a Duff's device construct in
381 arch/pc532/dev/ncr.c. There is no way to disable just this
382 warning, so -Wno-error is turned on for this file.
383 kcah
384
385 hack gcc332-cppmacro-ice
386 cdate Sun Dec 7 12:48:33 UTC 2003
387 who simonb
388 file gnu/usr.bin/gcc3/libcpp/Makefile : 1.2
389 descr
390 gcc 3.3.2 gets an ICE when compiling cppmacro.c with -O2.
391 The hack is to use -O1 for this file. Fixed in gcc
392 -current mainline, unable to work out where the fix is
393 right now.
394 kcah
395
396
397 port sh3
398
399 hack gcc-sh3-sed
400 mdate 23 Apr 2002
401 who thorpej
402 file usr.bin/sed/Makefile : 1.9 : 9 : 13
403 descr
404 The in-tree GCC 2.95.3-based compiler ICEs when building
405 with optimization for SuperH. Hack is to build with -O0.
406 kcah
407
408
409 port sh5
410
411 hack SuperH SH5 Toolchain Bugs
412 cdate 11 Jul 2002
413 who scw
414 file usr.sbin/ndbootd/ndbootd.c : 1.6
415 file usr.sbin/traceroute/traceroute.c : 1.48
416 descr
417 The SuperH SH5 toolchain (2.97-sh5-010522) gets an internal
418 compiler error when assigning a bit-wise inverted value
419 under some circumstances.
420 Work around it by splitting the statement into two.
421 kcah
422
423 hack SuperH SH5 Toolchain Bugs
424 cdate 17 May 2003
425 who scw
426 file lib/libpthread/pthread_lock.c : 1.7
427 descr
428 The SuperH SH5 toolchain generates incorrect PIC code when
429 faced with a symbol which is declared extern, but has local
430 scope due to being defined within an asm() statement (without
431 being declared .globl in that statement). Work around it by
432 adding the .globl.
433 kcah
434
435 hack gcc 3.3.2 on sh5 - ICE compiling reload1.c at -O2
436 cdate Sun Dec 7 19:44:05 GMT 2003
437 who scw
438 file gnu/usr.bin/gcc3/backend/Makefile : 1.13
439 descr
440 Gcc3 for sh5 gets an ICE compiling reload1.c at -O2.
441 Drop to -O1 for now when building for sh5.
442 kcah
443
444 hack gcc 3.3.2 on sh5 - ICE compiling elf32.c/elf64.c at -O2
445 cdate Sun Dec 7 21:10:46 GMT 2003
446 who scw
447 file gnu/lib/libbfd/Makefile : 1.39
448 descr
449 Gcc3 for sh5 gets an ICE compiling libbfd's elf32.c
450 and elf64.c at -O2.
451 Drop to -O1 for now when building for sh5.
452 kcah
453
454
455 hack gcc 3.3.2 on sh5 - fatal warning compiling function.c
456 cdate Sun Dec 7 19:44:05 GMT 2003
457 who scw
458 file gnu/usr.bin/gcc3/backend/Makefile : 1.13
459 descr
460 Gcc3 for sh5 issues a warning:
461 .../gnu/dist/gcc/gcc/function.c:4742: warning: `and' of
462 mutually exclusive equal-tests is always 0.
463 This causes the build to fail because of -Werror.
464 Work-around by defining NOGCCERROR when building for sh5.
465 kcah
466
467 hack gcc 3.3.3 on sh5 - ICE compiling rbtdb.c and rbtdb64.c
468 cdate Thu Nov 11 00:35:33 UTC 2004
469 who he
470 file usr.sbin/bind/libdns/Makefile/1.2
471 descr
472 Gcc3 for sh5 gets an ICE compiling these files at -O2.
473 Drop to -O1 for now when building for sh5.
474 kcah
475
476 hack gcc 3.3.3 nb3 on sh5 - ICE compiling bsd-comp.c
477 cdate Thu May 25 23:05:20 UTC 2005
478 who he
479 file sys/lkm/net/bsdcomp/Makefile : 1.3
480 descr
481 Gcc3 for sh5 gets an ICE compiling this at -O2,
482 "could not split insn". Drop to -O1 for sh5.
483 kcah
484
485 hack gcc 3.3.3 nb3 on sh5 - ICE compiling strtod.c
486 cdate Tue Jan 31 10:51:52 GMT 2006
487 who scw
488 file lib/libc/gdtoa/Makefile.inc : 1.2
489 descr
490 Gcc3 for sh5 gets an ICE compiling this at -O2,
491 "could not split insn". Drop to -O1 for sh5.
492 kcah
493
494 port sun2
495
496 hack gcc 3.3.2/mdsetimage
497 cdate Tue Oct 28 18:43:05 EST 2003
498 who fredette
499 file gnu/usr.sbin/mdsetimage/Makefile : 1.15
500 descr
501 mdsetimage.c causes cc1 to barf for as-yet unknown reasons.
502 this hack uses -O0 to avoid the problem.
503 kcah
504
505 hack gcc 3.3.2/installboot/ffs.c
506 cdate Tue Oct 28 18:43:05 EST 2003
507 who fredette
508 file usr.sbin/installboot/Makefile : 1.26
509 descr
510 ffs.c causes cc1 to barf for as-yet unknown reasons. this
511 hack uses -O0 to avoid the problem.
512 kcah
513
514
515 port m68000
516
517 hack gcc 3.3.2/gcc/ra-colorize.c
518 cdate Wed Nov 5 11:03:13 EST 2003
519 who mrg
520 file gnu/usr.bin/gcc3/backend/Makefile : 1.11
521 descr
522 ra-colorize.c causes a whole spew of unreferenced .L* local
523 symbols. using -O0 (or even -O2 reportedly) avoids the problem.
524 Note this has been fixed in 3.3.3 at least on m68k,
525 but it hasn't been confirmed on sun2/m68000.
526 (it's too slow even on emulator and unlikely to build
527 toolchains on sun2 with its maximum 4MB RAM)
528 kcah
529
530 port sparc64
531
532 hack disable optimzations for uvm_bio.c on 32 bit kernels
533 cdate Sun Mar 21 14:14:04 MET 2004
534 who martin
535 file sys/arch/sparc64/conf/Makefile.sparc64 : 1.53-1.54
536 file sys/arch/sparc64/conf/files.sparc64 : 1.93
537 descr
538 The sparc compiler miscompiles uvm_bio.c when using
539 any optimization. This results in ubc_release panics.
540 kcah
541
542 port macppc
543
544 hack remove inline from rotate_{left,right}
545 cdate Tue Feb 22 13:43:25 EST 2005
546 who christos
547 file src/dist/bind/lib/dns/rbt.c
548 descr
549 The macppc gcc-3.3 compiler miscompiles rbt.c when these
550 functions are inlined. The error is:
551 .* named[368]: rbt.c:1584: INSIST(child != (void *)0) >failed
552 .* named[368]: exiting (due to assertion failure)
553 This is reportedly fixed in gcc-3.4
554 kcah
555
556 port hppa
557
558 hack hppa-gcc-3.3.3/grep/dfa.c
559 cdate Sun Aug 8 08:34:32 PDT 2004
560 who chs
561 file gnu/usr.bin/grep/grep/Makefile : 1.4
562 descr
563 gcc 3.3.3 generates bad code for dfa.c with -O2,
564 reduce optimization to -O1 to avoid the bug.
565 kcah
566
567 hack hppa-gcc-3.3.3 / make/buf.c
568 cdate Mon May 8 13:02:36 CEST 2006
569 who he
570 file usr.bin/make/Makefile : 1.34
571 descr
572 gcc 3.3.3 nb3 gets an "unrecognized insn" internal
573 compiler error when building this file with -O2,
574 reduce optimization to -O1 to avoid the bug.
575 kcah
576
577 hack hppa boot-from-disk memory corruption
578 cdate Wed May 18 06:56:07 PDT 2005
579 who chs
580 file src/sys/dev/scsipi/scsipiconf.h : 1.98
581 descr
582 There is some bug with DMA on hppa that corrupts scsipi_xfer
583 structures, but it only shows up when booting from disk.
584 For now, we'll add some padding to scsipi_xfer so that
585 the corrupted memory is not otherwise used.
586 kcah
587
588 port mips
589
590 hack mips-shared-linker-load-address
591 cdate Fri Oct 7 08:33:10 UTC 2005
592 who simonb
593 file src/sys/kern/exec_elf32.c : 1.107
594 descr
595 With COMPAT_16 or previous enabled (which enables
596 ELF_INTERP_NON_RELOCATABLE) a recent ld.elf_so will
597 load and run at address 0. The check to fix this in
598 rev 1.107 only checks the first psection of the ELF
599 executable, which may not be loadable. A more correct
600 fix is to check the first loadable psection instead of
601 just the first psection.
602 kcah
603
604