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