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