HACKS revision 1.49
1# $NetBSD: HACKS,v 1.49 2005/06/02 10:25:22 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 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 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 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. 145 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 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 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. 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. 186 kcah 187 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 197 198 hack vax gcc 2.95.3 needs -I. to build nslexer.c 199 cdat 6 Jun 2004 200 who mhitch 201 file lib/libc/arch/vax/Makefile.inc : 1.6 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 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 217port 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 224 The first four PLT entries are reserved. There is some 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 238port 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 262 pr 23044 263 file sys/arch/arm/conf/Makefile.arm : 1.19 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 272port pc532 273 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 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 309 310port 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 318 with optimization for SuperH. Hack is to build with -O0. 319 kcah 320 321 322port 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. 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 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 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 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 384 descr 385 Gcc3 for sh5 gets an ICE compiling these files at -O2. 386 Drop to -O1 for now when building for sh5. 387 kcah 388 389 hack gcc 3.3.3 nb3 on sh5 - ICE compiling bsd-comp.c 390 cdate Thu May 25 23:05:20 UTC 2005 391 who he 392 file sys/lkm/net/bsdcomp/Makefile : 1.3 393 descr 394 Gcc3 for sh5 gets an ICE compiling this at -O2, 395 "could not split insn". Drop to -O1 for sh5. 396 kcah 397 398port sun2 399 400 hack gcc 3.3.2/mdsetimage 401 cdate Tue Oct 28 18:43:05 EST 2003 402 who fredette 403 file gnu/usr.sbin/mdsetimage/Makefile : 1.15 404 descr 405 mdsetimage.c causes cc1 to barf for as-yet unknown reasons. 406 this hack uses -O0 to avoid the problem. 407 kcah 408 409 hack gcc 3.3.2/installboot/ffs.c 410 cdate Tue Oct 28 18:43:05 EST 2003 411 who fredette 412 file usr.sbin/installboot/Makefile : 1.26 413 descr 414 ffs.c causes cc1 to barf for as-yet unknown reasons. this 415 hack uses -O0 to avoid the problem. 416 kcah 417 418 419port sun2 m68k 420 421 hack gcc 3.3.2/gcc/ra-colorize.c 422 cdate Wed Nov 5 11:03:13 EST 2003 423 who mrg 424 file gnu/usr.bin/gcc3/backend/Makefile : 1.11 425 descr 426 ra-colorize.c causes a whole spew of unreferenced .L* local 427 symbols. using -O0 (or even -O2 reportedly) avoids the problem. 428 kcah 429 430port sparc64 431 432 hack disable optimzations for uvm_bio.c on 32 bit kernels 433 cdate Sun Mar 21 14:14:04 MET 2004 434 who martin 435 file sys/arch/sparc64/conf/Makefile.sparc64 : 1.53-1.54 436 file sys/arch/sparc64/conf/files.sparc64 : 1.93 437 descr 438 The sparc compiler miscompiles uvm_bio.c when using 439 any optimization. This results in ubc_release panics. 440 kcah 441 442port macppc 443 444 hack remove inline from rotate_{left,right} 445 cdate Tue Feb 22 13:43:25 EST 2005 446 who christos 447 file src/dist/bind/lib/dns/rbt.c 448 descr 449 The macppc gcc-3.3 compiler miscompiles rbt.c when these 450 functions are inlined. The error is: 451 .* named[368]: rbt.c:1584: INSIST(child != (void *)0) >failed 452 .* named[368]: exiting (due to assertion failure) 453 This is reportedly fixed in gcc-3.4 454 kcah 455 456port hppa 457 458 hack hppa-gcc-3.3.3/grep/dfa.c 459 cdate Sun Aug 8 08:34:32 PDT 2004 460 who chs 461 file gnu/usr.bin/grep/grep/Makefile : 1.4 462 descr 463 gcc 3.3.3 generates bad code for dfa.c with -O2, 464 reduce optimization to -O1 to avoid the bug. 465 kcah 466 467 hack hppa boot-from-disk memory corruption 468 cdate Wed May 18 06:56:07 PDT 2005 469 who chs 470 file src/sys/dev/scsipi/scsipiconf.h : 1.98 471 descr 472 There is some bug with DMA on hppa that corrupts scsipi_xfer 473 structures, but it only shows up when booting from disk. 474 For now, we'll add some padding to scsipi_xfer so that 475 the corrupted memory is not otherwise used. 476 kcah 477 478port powerpc 479 480 hack add -Wno-cast-qual to pmap.c 481 cdate Thu Jun 2 12:18:53 CEST 2005 482 who he 483 file sys/arch/powerpc/conf/Makefile.powerpc : 1.34 484 file sys/arch/powerpc/conf/files.powerpc : 1.59 485 descr 486 sys/arch/powerpc/oea/pmap.c cannot be compiled with 487 -Wcast-qual because "volatile struct pteg *pmap_pteg_table" 488 is being passed to memset(), and the only obvious 489 alternative to adding -Wno-cast-qual I could see would 490 be to open-code memset(), which I think would be worse 491 than this fix. 492 kcah 493