HACKS revision 1.54
1# $NetBSD: HACKS,v 1.54 2006/03/07 18:24:13 he 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 30hack netstat ieee1394 address printing. 31mdate 14 Nov 2000 32who matt 33file lib/libc/net/getnameinfo.c : 1.32 : 497 : 503 34descr 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. 38kcah 39 40hack xterm vs. libterm 41mdate 01 Aug 2000 42who jdc 43file xsrc/xc/programs/xterm/main.c : 1.2 : 3609 : 3614 44pr 10383 45descr 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. 51kcah 52 53hack wi-at-big-endian-bus 54cdate 15 Mar 2002 55who martin 56file dev/ic/wireg.h 57descr 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. 61kcah 62 63hack specific knowledge of colours in curses code 64cdate Sun Apr 6 11:05:24 BST 2003 65who jdc 66file lib/libcurses/color.c : r1.24 67descr 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 72kcah 73 74hack Compensation for differing types of LINUX_USRSTACK and USRSTACK 75cdate 21 Aug 2003 76who he 77file sys/miscfs/procfs/procfs_linux.c : 1.14 78descr 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. 85kcah 86 87hack GCC2 isn't C99 88cdate 5 December 2003 89who mrg 90file gnu/dist/binutils/ld/ldlex.c: r1.2 91descr 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. 97kcah 98 99hack gcc-strict-aliasing 100cdate 6 August 2004 101who junyoung 102pr 26516 103file src/usr.sbin/racoon/racoon/Makefile : 1.21 104descr 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. 111kcah 112 113 114port vax 115 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 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 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 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. 153 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 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 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. 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. 194 kcah 195 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 205 206 hack vax gcc 2.95.3 needs -I. to build nslexer.c 207 cdat 6 Jun 2004 208 who mhitch 209 file lib/libc/arch/vax/Makefile.inc : 1.6 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 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 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 241port 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 248 The first four PLT entries are reserved. There is some 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 262port 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 286 pr 23044 287 file sys/arch/arm/conf/Makefile.arm : 1.19 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 296port pc532 297 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 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 333 334port 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 342 with optimization for SuperH. Hack is to build with -O0. 343 kcah 344 345 346port 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. 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 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 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 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 408 descr 409 Gcc3 for sh5 gets an ICE compiling these files at -O2. 410 Drop to -O1 for now when building for sh5. 411 kcah 412 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 421 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 431port sun2 432 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. 439 this hack uses -O0 to avoid the problem. 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 448 hack uses -O0 to avoid the problem. 449 kcah 450 451 452port sun2 m68k 453 454 hack gcc 3.3.2/gcc/ra-colorize.c 455 cdate Wed Nov 5 11:03:13 EST 2003 456 who mrg 457 file gnu/usr.bin/gcc3/backend/Makefile : 1.11 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. 461 kcah 462 463port sparc64 464 465 hack disable optimzations for uvm_bio.c on 32 bit kernels 466 cdate Sun Mar 21 14:14:04 MET 2004 467 who martin 468 file sys/arch/sparc64/conf/Makefile.sparc64 : 1.53-1.54 469 file sys/arch/sparc64/conf/files.sparc64 : 1.93 470 descr 471 The sparc compiler miscompiles uvm_bio.c when using 472 any optimization. This results in ubc_release panics. 473 kcah 474 475port macppc 476 477 hack remove inline from rotate_{left,right} 478 cdate Tue Feb 22 13:43:25 EST 2005 479 who christos 480 file src/dist/bind/lib/dns/rbt.c 481 descr 482 The macppc gcc-3.3 compiler miscompiles rbt.c when these 483 functions are inlined. The error is: 484 .* named[368]: rbt.c:1584: INSIST(child != (void *)0) >failed 485 .* named[368]: exiting (due to assertion failure) 486 This is reportedly fixed in gcc-3.4 487 kcah 488 489port hppa 490 491 hack hppa-gcc-3.3.3/grep/dfa.c 492 cdate Sun Aug 8 08:34:32 PDT 2004 493 who chs 494 file gnu/usr.bin/grep/grep/Makefile : 1.4 495 descr 496 gcc 3.3.3 generates bad code for dfa.c with -O2, 497 reduce optimization to -O1 to avoid the bug. 498 kcah 499 500 hack hppa boot-from-disk memory corruption 501 cdate Wed May 18 06:56:07 PDT 2005 502 who chs 503 file src/sys/dev/scsipi/scsipiconf.h : 1.98 504 descr 505 There is some bug with DMA on hppa that corrupts scsipi_xfer 506 structures, but it only shows up when booting from disk. 507 For now, we'll add some padding to scsipi_xfer so that 508 the corrupted memory is not otherwise used. 509 kcah 510 511port mips 512 513 hack mips-shared-linker-load-address 514 cdate Fri Oct 7 08:33:10 UTC 2005 515 who simonb 516 file src/sys/kern/exec_elf32.c : 1.107 517 descr 518 With COMPAT_16 or previous enabled (which enables 519 ELF_INTERP_NON_RELOCATABLE) a recent ld.elf_so will 520 load and run at address 0. The check to fix this in 521 rev 1.107 only checks the first psection of the ELF 522 executable, which may not be loadable. A more correct 523 fix is to check the first loadable psection instead of 524 just the first psection. 525 kcah 526 527