HACKS revision 1.172
1# $NetBSD: HACKS,v 1.172 2016/06/15 13:47:26 riastradh 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 gcc-5.3 optimizes memset+malloc -> calloc inside calloc 31mdate 4 May 2016 32who christos 33file external/gpl2/lib/libmalloc/lib/Makefile 1.3 -> 1.5 34descr 35 resulting in infinite recursion; we prevent this with 36 -fno-builtin-malloc 37kcah 38 39hack turn off tree-vrp for parts of ufs_lookup.c 40mdate 28 April 2016 41who mrg christos 42file src/sys/ufs/ufs/ufs_lookup.c : 1.144 43pr 51094 44descr 45 with -ftree-vrp enabled in ufs_lookup.c sometimes bad dir 46 panicks are see. 47hcah 48 49hack netstat ieee1394 address printing. 50mdate 14 Nov 2000 51who matt 52file lib/libc/net/getnameinfo.c : 1.32 : 497 : 503 53descr 54 Because the current implementation of IP over IEEE1394, the 55 fw device address contains more than just the IEEE1394 EUI-64. 56 So when printing out IEEE1394 addresses, ignore the extra stuff. 57kcah 58 59hack xterm vs. libterm 60mdate 01 Aug 2000 61who jdc 62file xsrc/xc/programs/xterm/main.c : 1.2 : 3609 : 3614 63pr 10383 64descr 65 In order to extend the termcap string over 1023 bytes, a ZZ entry was 66 introduced to point to a memory location containing the full entry. 67 Without this hack, xterm will export a termcap containing the ZZ 68 entry, which will then be ignored by libterm. As xterm modifies the 69 exported termcap, this would cause those modifications to be ignored. 70kcah 71 72hack wi-at-big-endian-bus 73cdate 15 Mar 2002 74who martin 75file dev/ic/wireg.h 76descr Add an option to access the underlying bus in big endian byte order 77 to work around deficiencies in bus_space_{read,write}_* macros. 78 Those don't allow the implementation of a proper pcmcia bus space 79 tag. 80kcah 81 82hack specific knowledge of colours in curses code 83cdate Sun Apr 6 11:05:24 BST 2003 84who jdc 85file lib/libcurses/color.c : r1.24 86descr 87 Swap red/blue and yellow/cyan colours for COLOR_OTHER. 88 Fix is to enhance libtermcap to understand terminfo-style % sequences. 89 See also: 90 http://mail-index.NetBSD.org/tech-userlevel/2003/04/06/0000.html 91kcah 92 93hack Compensation for differing types of LINUX_USRSTACK and USRSTACK 94cdate 21 Aug 2003 95who he 96file sys/miscfs/procfs/procfs_linux.c : 1.14 97descr 98 Not all ports have LINUX_USRSTACK and/or USRSTACK defined as 99 literals/constants, but refer to variables of a type which is 100 not "unsigned long", causing compilation of procfs_linux.c to 101 fail with "makes integer from pointer without a cast". This 102 is observed on e.g. the sun3 port. Ideally the "types" for 103 symbols should be consistent across all ports. 104kcah 105 106hack gcc4 wrong uninitialized variable 107mdate 10 May 2006 108who mrg 109file bin/ksh/eval.c : 1.6 110file bin/sh/histedit.c : 1.39 111file bin/sh/parser.c : 1.60 112file crypto/dist/heimdal/kdc/524.c : 1.10 113file crypto/dist/ssh/sftp.c : 1.20 114file crypto/dist/ssh/ssh-keysign.c : 1.11 115file dist/ipf/lib/hostname.c : 1.2 116file dist/ipf/tools/ipmon.c : 1.8 117file dist/ntp/ntpd/ntp_request.c : 1.4 118file dist/ntp/ntpd/refclock_shm.c : 1.4 119file dist/ntp/sntp/timing.c : 1.3 120file dist/pppd/pppstats/pppstats.c : 1.3 121file dist/smbfs/lib/smb/rap.c : 1.6 122file dist/tcpdump/print-zephyr.c : 1.5 123file distrib/utils/sysinst/aout2elf.c : 1.12 124file gnu/libexec/uucp/uucico/uucico.c : 1.6 125file lib/libc/citrus/citrus_csmapper.c : 1.6 126file lib/libc/citrus/citrus_pivot_factory.c : 1.5 127file lib/libc/inet/inet_cidr_ntop.c : 1.3 128file lib/libc/inet/inet_ntop.c : 1.3 129file lib/libc/stdio/vfwprintf.c : 1.8 130file libexec/ld.elf_so/arch/m68k/mdreloc.c : 1.20 131file libexec/ld.elf_so/arch/powerpc/ppc_reloc.c : 1.40 132file libexec/ld.elf_so/arch/sh3/mdreloc.c : 1.22 133file libexec/ld.elf_so/arch/sparc/mdreloc.c : 1.39 134file libexec/ld.elf_so/arch/sparc64/mdreloc.c : 1.39 135file libexec/ld.elf_so/arch/vax/mdreloc.c : 1.21 136file libexec/ld.elf_so/arch/x86_64/mdreloc.c : 1.27 137file sbin/fsck_ext2fs/dir.c : 1.19 138file sbin/routed/rtquery/rtquery.c : 1.18 139file sys/arch/amd64/amd64/pmap.c : 1.26 140file sys/arch/i386/pci/piixpcib.c : 1.4 141file sys/arch/m68k/m68k/pmap_motorola.c : 1.4 142file sys/crypto/cast128/cast128.c : 1.9 143file sys/ddb/db_command.c : 1.86 144file sys/dev/cardbus/cardbus_map.c : 1.21 145file sys/dev/fss.c : 1.25 146file sys/dev/ic/igsfb.c : 1.39 147file sys/dev/ic/mb86950.c : 1.5 148file sys/dev/ic/midway.c : 1.71 149file sys/dev/kttcp.c : 1.18 150file sys/dev/rasops/rasops_bitops.h : 1.9 151file sys/dev/pci/cmpci.c : 1.31 152file sys/dev/pci/machfb.c : 1.45 153file sys/dev/usb/ohci.c : 1.174 154file sys/dev/usb/uhci.c : 1.196 155file sys/dev/rasops/rasops_bitops.h : 1.9 156file sys/dist/ipf/netinet/ip_nat.c : 1.10 157file sys/dist/ipf/netinet/ip_rpcb_pxy.c : 1.8 158file sys/dist/pf/net/pf.c : 1.22 159file sys/fs/udf/udf_vnops.c : 1.4 160file sys/kern/kern_sig.c : 1.219 161file sys/kern/tty.c : 1.181 162file sys/net/bpf.c : 1.116 163file sys/net/zlib.c : 1.26 164file sys/netccitt/if_x25subr.c : 1.37 165file sys/netinet/in.c : 1.107 166file sys/netsmb/smb_smb.c : 1.27 167file sys/netsmb/smb_trantcp.c : 1.22 168file sys/nfs/nfs_serv.c : 1.108 169file sys/nfs/nfs_socket.c : 1.129 170file sys/nfs/nfs_syscalls.c : 1.91 171file sys/ufs/lfs/lfs_vfsops.c : 1.207 [also (char *)] 172file usr.bin/ftp/ftp.c : 1.140 173file usr.bin/find/function.c : 1.54 174file usr.bin/mail/tty.c : 1.20 175file usr.bin/msgc/msg_sys.def : 1.33-1.34 176file usr.bin/nl/nl.c : 1.7 177file usr.bin/systat/keyboard.c : 1.23 178file usr.bin/usbhidctl/usbhid.c : 1.29 179file usr.bin/vi/cl/cl_read.c : 1.5 180file usr.bin/vi/ex/ex_cscope.c : 1.12 181file usr.bin/vi/ex/ex_tag.c : 1.19 182file usr.bin/vi/vi/v_txt.c : 1.15 183file usr.sbin/altq/altqstat/qdisc_rio.c : 1.4 184file usr.sbin/cron/do_command.c : 1.19 185file usr.sbin/timed/timed/slave.c : 1.15 186descr 187 GCC 4.1 gets many uninitialised variable warnings wrong. We should 188 really audit all the old hacks like this when older compilers are 189 removed from the tree, as many are probably no longer required. 190 The problem is that it does not recognize initialization via function 191 call pointer. I.e. 192 int p; 193 foo(&p); 194 does not mark p as initialized. 195kcah 196 197hack gcc4 pointer sign and strict aliasing problems 198mdate 10 May 2006 199who mrg 200file bin/ed/Makefile : 1.33 201file distrib/utils/sysinst/Makefile.inc : 1.44 202file distrib/utils/x_dhclient/Makefile : 1.15 203file games/bcd/Makefile : 1.5 204file games/dab/Makefile : 1.5 205file games/larn/Makefile : 1.17 206file games/pom/Makefile : 1.5 207file lib/libasn1/Makefile : 1.26 208file lib/libcrypt/Makefile : 1.17 209file lib/libgssapi/Makefile : 1.16 210file lib/libhdb/Makefile : 1.20 211file lib/libkadm5clnt/Makefile : 1.21 212file lib/libkadm5srv/Makefile : 1.25 213file lib/libkrb5/Makefile : 1.35 214file lib/libssh/Makefile : 1.6 215file lib/libtelnet/Makefile : 1.26 216file libexec/getty/Makefile : 1.14 217file libexec/kadmind/Makefile : 1.19 218file libexec/kpasswdd/Makefile : 1.14 219file sbin/atactl/Makefile : 1.3 220file sbin/cgdconfig/Makefile : 1.7 221file sbin/clri/Makefile : 1.13 222file sbin/dkctl/Makefile : 1.4 223file sbin/dump/Makefile : 1.33 224file sbin/fdisk/Makefile : 1.35 225file sbin/fsck_ext2fs/Makefile : 1.11 226file sbin/fsck_ffs/Makefile : 1.29 227file sbin/fsdb/Makefile : 1.18 228file sbin/mount_smbfs/Makefile : 1.4 229file sbin/newfs/Makefile : 1.30 230file sbin/newfs_sysvbfs/Makefile : 1.2 231file sbin/restore/Makefile : 1.23 232file sbin/veriexecctl/Makefile : 1.11 233file sys/lib/libsa/Makefile : 1.59 234file sys/arch/evbarm/adi_brh/brh_machdep.c : 1.24 235file usr.bin/awk/Makefile : 1.9 236file usr.bin/crontab/Makefile : 1.24 237file usr.bin/ctags/Makefile : 1.8 238file usr.bin/gzip/Makefile : 1.10 239file usr.bin/ssh/sftp/Makefile : 1.10 240file usr.bin/ssh/ssh/Makefile : 1.25 241file usr.bin/vi/build/Makefile : 1.26 242file usr.bin/telnet/Makefile : 1.40 243file usr.bin/tn3270/tn3270/Makefile : 1.36 244file usr.bin/tr/Makefile : 1.4 245file usr.sbin/amd/amd/Makefile : 1.27 246file usr.sbin/amd/amq/Makefile : 1.14 247file usr.sbin/amd/libamu/Makefile : 1.20 248file usr.sbin/amd/pawd/Makefile : 1.5 249file usr.sbin/bind/Makefile.inc : 1.22 250file usr.sbin/bind/libdns/Makefile : 1.3 251file usr.sbin/bind/named/Makefile : 1.17 252file usr.sbin/bootp/bootptest/Makefile : 1.2 253file usr.sbin/chrtbl/Makefile : 1.6 254file usr.sbin/cron/Makefile : 1.12 255file usr.sbin/dhcp/Makefile.inc : 1.20 256file usr.sbin/dumplfs/Makefile : 1.11 257file usr.sbin/hprop/Makefile : 1.13 258file usr.sbin/installboot/Makefile : 1.35 259file usr.sbin/ipf/ipftest/Makefile : 1.32 260file usr.sbin/isdn/isdnd/Makefile : 1.6 261file usr.sbin/isdn/isdnmonitor/Makefile : 1.3 262file usr.sbin/isdn/isdntel/Makefile : 1.2 263file usr.sbin/isdn/isdntrace/Makefile : 126 264file usr.sbin/mopd/common/Makefile : 1.10 265file usr.sbin/mopd/mopd/Makefile : 1.9 266file usr.sbin/mopd/mopprobe/Makefile : 1.7 267file usr.sbin/makefs/Makefile : 1.17 268file usr.sbin/mscdlabel/Makefile : 1.5 269file usr.sbin/pkg_install/add/Makefile : 1.7 270file usr.sbin/pkg_install/create/Makefile : 1.5 271file usr.sbin/pkg_install/lib/Makefile : 1.28 272file usr.sbin/ntp/ntpd/Makefile : 1.10/1.11 273file usr.sbin/ntp/ntptime/Makefile : 1.4/1.5 274file usr.sbin/pppd/Makefile.inc : 1.3 275file usr.sbin/pppd/pppd/Makefile : 1.38 276file usr.sbin/rarpd/Makefile : 1.10 277file usr.sbin/rbootd/Makefile : 1.10 278file usr.sbin/rpc.pcnfsd/Makefile : 1.17 279file usr.sbin/rtadvd/Makefile : 1.9 280file usr.sbin/tcpdump/Makefile : 1.42 281descr 282 GCC 4.1 warns on pointer sign comparision/assignments and lots of 283 code does not conform. For now we use -Wno-pointer-sign and 284 -fno-strict-aliasing. 285kcah 286 287hack disable ctf for gcc-4.8 build 288mdate April 3 2014 289who christos 290file external/gpl3/gcc/usr.bin/Makefile.frontend : 1.4 291file external/gpl3/gcc/usr.bin/Makefile.backend : 1.5 292descr 293 nbctfconvert -g -L VERSION -g fold-const.o 294 ERROR: fold-const.c: failed to get mapping for tid 79154 \ 295 ((null)) <13532> 296kcak 297 298hack emacs aborting on exit (libgcc issue) 299mdate 7 November 2011 300who christos 301file external/gpl3/gcc/dist/gcc/unwind-dw2-fde.c : 1.2 302descr 303 GCC 4.5.3 now calls __unregister_frame_info_bases() on unloading/exit 304 to do just that. If the symbol requested is not found, then it aborts. 305 emacs 23.3 triggers this assertion. For now disable aborting, and 306 silently ignore. 307kcah 308 309hack cross-building hack on Darwin 310mdate 20 July 2008 311who agc 312file src/distrib/common/Makefile.mdset : 1.33 313descr 314 Darwin has problems with getopt() when used in mdsetimage -v, 315 due to the difference between BSD and libiberty() getopt 316 implementations, more fully described in 317 http://mail-index.netbsd.org/current-users/2008/06/27/msg003242.html 318 and the subsequent thread. For just now, we just have an ugly 319 workaround not to call mdsetimage with the -v argument on Darwin 320kcah 321 322hack avoid rebuilding asn1 libraries 323mdate 03 August 2008 324who veego 325file src/crypto/dist/heimdal/lib/asn1/gen.c : 1.10 326file src/lib/libasn1/Makefile : 1.32 327file src/lib/libhdb/Makefile : 1.23 328file src/lib/libgssapi/Makefile : 1.20 329file src/lib/libhx509/Makefile : 1.3 330pr 9702 39185 331descr 332 asn1_compile does not check if generated header files do not have to 333 be rebuild. 334 Generate .hx files and copy it in the Makefiles if they changed. 335kcah 336 337hack avoid gcc4 -O1 bug in loop optimize 338cdate 29 November 2008 339who tsutsui 340file src/sbin/ifconfig/Makefile : 1.39 341pr 40036 40066 342descr 343 gcc -O1 seems to generate wrong code in loop optimize so that 344 ifconfig lo0 inet6 doesn't return error even if a kernel 345 doesn't have IPv6 support. (see the above PRs for details) 346 For workaround, specify -fno-loop-optimize on m68000, 347 which uses -O1 by default. 348kcah 349 350hack MKPIE ldscript for /usr.sbin/crash 351cdate 22 April 2010 352who christos 353file src/usr.sbin/crash/Makefile : 1.5 354file src/usr.sbin/crash/ldscript.crash : 1.1 355pr N/A 356descr 357 fixed in binutils-2.20.1. Linking with MKPIE=yes causes overlapping 358 sections 359kcah 360 361hack Disable fortification for /usr/bin/makeinfo 362cdata 24 Mar 2014 363who tron 364file src/gnu/usr.bin/texinfo/makeinfo/Makefile : 1.8 365pr N/A 366descr 367 If "makeinfo" is compiled with "-D_FORTIFY_SOURCE=2" using GCC 4.8.3 368 it fails to process certain texinfo files, e.g. "cl.texi" 369 included in the Emacs 24.3 distribution. 370kcah 371 372hack Disable Stack Smash Protection for /usr/X11R7/bin/xauth 373cdata 05 Apr 2014 374who tron 375file src/external/mit/xorg/bin/xauth/Makefile : 1.4 376pr N/A 377descr 378 If "xauth" is compile with "USE_SSP" set to "yes" it fails 379 mysteriously with an error message like this: 380 381 /usr/X11R7/bin/xauth: file /foo/bar/.Xauthority does not exist 382 /usr/X11R7/bin/xauth: unable to link authority file /foo/bar/.Xauthority, use /foo/bar/.Xauthority 383 384 The compiler seems to get confused about the two filename variables 385 used in the link(2) system call. 386kcah 387 388hack g++ 5.x barfs on volatile in constexpr initializers 389cdata 27 Aug 2015 390who pooka 391file src/lib/libpthread/pthread_types.h : 1.17 392pr lib/49989 393descr 394 Trying to use e.g. pthread_mutex_t m = PTHREAD_MUTEX_INITIALIZER 395 in C++ results in: 396 error: temporary of non-literal type '__pthread_mutex_st' 397 in a constant expression 398 constexpr mutex() _NOEXCEPT : __m_(PTHREAD_MUTEX_INITIALIZER) {} 399 [...] 400 include/pthread_types.h:101:8: note: '__pthread_mutex_st' is 401 not literal because: 402 struct __pthread_mutex_st { 403 ^ 404 include/pthread_types.h:103:17: note: non-static data 405 member '__pthread_mutex_st::ptm_errorcheck' has volatile type 406 pthread_spin_t ptm_errorcheck; 407kcah 408 409hack libm cabs{,f,l} and g++ 410cdata 11 Jan 2016 411who christos 412pr lib/50646 413file src/external/gpl3/gcc.old/dist/libstdc++-v3/include/std/complex : 1.2 414file src/external/gpl3/gcc/dist/libstdc++-v3/include/std/complex : 1.2 415descr 416 Our cabs and cabsf have a different argument format on some architectures 417 and for that we have created in libm/compat_cabs{,f}.c. The standard 418 versions in libc are __c99_cabs{,f,l} and there are __RENAME()'s in 419 <complex.h>. G++ uses __builtin_cabs{,f,l} to implement those and they 420 translate by default to cabs{,f,l} which gets defined to cabs{,f} (the 421 wrong function) and an undefined cabsl. I've changed <complex> to use 422 the __c99_cabs{,f,l} directly. Using the __builtin_cabs{,f,l} in gcc is 423 still broken. 424kcah 425 426port vax 427 428 hack gcc4/vax ICE 429 cdate 430 who tsutsui 431 file sys/arch/vax/conf/Makefile.vax 432 descr 433 GCC4 on vax gets ICE on compiling sys/ddb/db_command.c. 434 -fno-tree-ter prevents it so add it to COPTS. 435 kcah 436 437 hack gcc4/vax compiler crash 438 cdate Fri Jun 30 22:39:12 PDT 2006 439 who mrg 440 file bin/csh/Makefile : 1.27 441 file lib/i18n_module/UTF7/Makefile : 1.2 442 descr 443 GCC4 on vax crashes. -O0 stops it happening so far... 444 kcah 445 446 hack vax Toolchain bug 447 cdate 28 Mar 2003 448 who he 449 file sys/arch/vax/vax/intvec.S : 1.5 450 descr 451 Workaround for PR toolchain/20924. The assembler apparently 452 tries to range-check byte offsets when it doesn't have 453 sufficient information to make that decision. 454 Workaround uses `brw' instead of `brb' instruction. 455 kcah 456 457 hack declare boolean_t in two IPF user-mode programs 458 cdate Tue Mar 7 19:19:20 CET 2006 459 who he 460 file dist/ipf/ipsend/iptests.c : 1.8 461 dist/ipf/ipsend/sock.c : 1.7 462 descr 463 The IPF user-mode programs ipsend and iptest first 464 include <sys/types.h> without _KERNEL defined, and 465 later include <sys/file.h> with _KERNEL defined. 466 This causes a build failure when building for vax, 467 since <sys/device.h> ends up being included without 468 bollean_t being defined by <sys/types.h>. 469 Build failure and further details documented in 470 PR#32907. 471 kcah 472 473 hack pcc 0.9.9 large string literals 474 cdat 8 July 2008 475 who gmcgarry 476 file sys/conf/param.c : 1.58 477 descr 478 Workaround for pcc 0.9.9 not handling large string literals 479 which causes kernels with 'options INCLUDE_CONFIG_FILE' to 480 fail compilation. 481 There is a proposal on the pcc mailing list to stuff config 482 file in ELF section. 483 kcah 484 485 hack xorg warnings 486 cdat 30 July 2008, 3 June, 2013 487 who mrg 488 file external/mit/xorg/lib/libSM/Makefile : 1.2 489 external/mit/xorg/lib/libX11/Makefile.libx11 : 1.10 490 external/mit/xorg/lib/libXext/Makefile : 1.2 491 external/mit/xorg/lib/libXfont/Makefile : 1.2 492 descr 493 Disable several warnings or use -Wno-error across Xorg sources 494 while we get them working 495 kcah 496 497 hack 32 bit time leftovers 498 cdat 11 January 2009 499 who christos 500 file lib/libc/time/localtime.c : 1.41 501 lib/libc/time/zic.c : 1.23 502 descr 503 The timezone compiled files still contain 32 bit time_t 504 quantities. I did not want to version the files because 505 the ``parser'' is too ugly for words. What needs to be 506 done, is to rewrite the parser from scratch also to avoid 507 potential core-dumps from parsing invalid files. 508 kcah 509 510 hack 32 bit time leftovers 511 cdat 11 January 2009 512 who christos 513 file various 514 descr 515 Many filesystem on-disk formats have 32 bit times. 516 kcah 517 518 hack gcc 4.5 fsdb miscompile 519 date Sat Nov 9 11:03:02 EST 2013 520 who christos 521 file src/sbin/fsdb/Makefile : 1.36 (and earlier) 522 descr 523 src/sbin/fsdb/fsdb.c: In function 'findblk': 524 src/sbin/fsdb/fsdb.c:610:1: error: unrecognizable insn: 525 (insn 941 940 942 134 src/sbin/fsdb/fsdb.c:589 (set (reg:SI 604) 526 (subreg:SI (mem/s/j:DI (plus:SI (mult:SI (reg:SI 602) 527 (const_int 8 [0x8])) 528 (reg/f:SI 601)) [0 curinode.99_378->dp2.di_ib S8 A32]) 4)) \ 529 -1 (nil)) 530 src/sbin/fsdb/fsdb.c:610:1: internal compiler error: in \ 531 extract_insn, at recog.c:2103 532 kcah 533 534 hack gcc 4.8 gcc miscompiles 535 date Sat Nov 9 16:35:18 EST 2013 536 who christos 537 file distrib/utils/x_ping/Makefile 538 file distrib/vax/miniroot/Makefile.inc 539 file distrib/vax/ramdisk/Makefile 540 file external/gpl3/gdb/lib/libdecnumber/Makefile 541 file sbin/fsdb/Makefile 542 file sbin/newfs_ext2fs/Makefile 543 file sbin/ping/Makefile 544 file usr.sbin/lmcconfig/Makefile 545 file usr.sbin/mtrace/Makefile 546 descr 547 external/gpl3/gcc/dist/gcc/expmed.c:2781:1: 548 internal compiler error: in change_address_1, at emit-rtl.c:2019 549 external/gpl3/gcc/dist/gcc/recog.c:770:1: 550 internal compiler error: in change_address_1, at emit-rtl.c:2019 551 external/gpl3/gcc/dist/libdecnumber/decNumber.c:7214:3: 552 internal compiler error: in change_address_1, at emit-rtl.c:2019 553 sbin/ping/ping.c:679:1: 554 internal compiler error: in change_address_1, at emit-rtl.c:2019 555 sbin/newfs_ext2fs/mke2fs.c:681:1: 556 internal compiler error: in reload_combine_note_use, 557 at postreload.c:1561 558 external/gpl3/gdb/dist/libdecnumber/decNumber.c:7214:3: 559 internal compiler error: in change_address_1, at emit-rtl.c:2019 560 usr.sbin/lmcconfig/lmcconfig.c:939:3: 561 internal compiler error: in reload_combine_note_use, 562 at postreload.c:1561 563 usr.sbin/mtrace/mtrace.c:1655:1: 564 internal compiler error: in change_address_1, at emit-rtl.c:2019 565 kcah 566 567port arm 568 569 hack gcc-unsigned-compare 570 cdate 09 Mar 2002 571 mdate 18 Mar 2002 572 who bjh21 573 file dist/bind/lib/nameser/ns_parse.c : 1.3 574 file dist/dhcp/minires/ns_parse.c : 1.3 575 file dist/dhcp/omapip/result.c : 1.2 576 file dist/dhcp/server/failover.c : 1.3 577 file gnu/dist/toolchain/bfd/bfd.c : 1.2 578 file gnu/dist/toolchain/bfd/format.c : 1.2 579 file gnu/dist/toolchain/gdb/target.c : 1.2 580 file sys/kern/vfs_subr.c : 1.172 581 descr When checking that a potentially-unsigned enum is >= 0, assign 582 it to an int first. This is necessary to avoid "comparison is 583 always true" warnings with -fshort-enums. Casting to an int 584 really should be enough, but turns out not to be. 585 kcah 586 587 hack gcc-4.5 arm CNAME hostname lookup failure on 588 certain DNS environment (probably -ftree-ter problem) 589 cdate Sat Dec 24 04:59:00 UTC 2011 590 mdate 591 who tsutsui 592 file lib/libc/net/Makefile.inc 1.79 593 descr Hostname lookup against CNAMEs by some commands fails 594 on certain DNS environments if lib/libc/net/gethnamaddr.c 595 (ping(8) etc) and lib/libc/net/getaddrinfo.c (ftp(1) etc) 596 are compiled with -O2, even though nslookup(1) against 597 the same CNAME returns proper hostname. 598 They works properly if compiled with -O2 -fno-tree-ter. 599 Also -O2 fails but -O2 -fno-tree-ter works on the following 600 test case in gcc bugzilla: 601 http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48863#c4 602 kcah 603 604 hack gcc-4.5 arm without -fno-tree-vrp generate broken code 605 cdate Wed Nov 14 13:02:02 JST 2012 606 who msaitoh 607 file lib/libc/softfloat/Makefile.inc 608 pr 46953 609 regress src/tests/lib/libm/t_cbrt 610 regress src/tests/lib/libm/t_ceil 611 regress src/tests/lib/libm/t_exp 612 regress src/tests/lib/libm/t_log 613 regress src/tests/lib/libm/t_scalbn 614 regress src/tests/lib/libm/t_sinh 615 regress src/tests/lib/libm/t_sqrt 616 descr Gcc has a bug in tree optimization. For adddf3, 617 -INF + -INF returns 0 without -fno-tree-vrp. 618 Debugging with -fdump-tree-all shows that 619 softfloat.c.021t.cleanup_cfg is ok but softfloat.c.023t.ssa 620 is broken. 621 kcah 622 623port sh3 624 625 hack gcc4-sh3-bz2 626 cdate Sun May 21 03:34:57 UTC 2006 627 mdate Fri May 16 13:13:00 UTC 2008 628 who mrg, tsutsui 629 file lib/libbz2/Makefile : 1.10 630 descr 631 The in-tree GCC 4.1-based compiler generated too-far 632 pc-relative addresses. Hack is to build with 633 -fno-loop-optimize. 634 kcah 635 636port sh3eb 637 hack gcc4.8.1 638 cdate Thu Nov 7 16:31:23 EST 2013 639 who christos 640 file src/sys/rump/net/lib/libnetbt/Makefile : 1.2 641 desrc 642 for profiling 643 compile l2cap_signal.c with -O0 to avoid: 644 ./netbt/l2cap_signal.c:36: 645 /p/netbsd/cvsroot/src/sys/rump/net/lib/libnetbt/../../../../\ 646 netbt/l2cap_signal.c: In function 'l2cap_recv_signal': 647 ./sh3/byte_swap.h:20:2: error: 'asm' operand requires \ 648 impossible reload 649 __asm volatile ("swap.b %1,%0" : "=r"(rval) : "r"(x)); 650 kcah 651 652port sh3el 653 hack gcc4.8.1 654 cdate Fri Nov 8 19:27:01 EST 2013 655 who christos 656 file src/external/bsd/libevent/lib/libevent/Makefile : 1.2 657 desrc 658 for profiling 659 compile evdns.c with -O0 to avoid: 660 ./sh3/byte_swap.h:20:2: error: 'asm' operand requires \ 661 impossible reload 662 __asm volatile ("swap.b %1,%0" : "=r"(rval) : "r"(x)); 663 kcah 664 665 hack gcc4.8.1 666 cdate Fri Nov 8 19:34:48 EST 2013 667 who christos 668 file src/usr.sbin/racoon/Makefile : 1.27 669 desrc 670 for profiling 671 compile ipsec_doi.c with -O0 to avoid: 672 ./sh3/byte_swap.h:20:2: error: 'asm' operand requires \ 673 impossible reload 674 __asm volatile ("swap.b %1,%0" : "=r"(rval) : "r"(x)); 675 kcah 676 677port m68000 678 679 hack gcc4-m68000 680 cdate Fri Feb 8 10:29:37 PST 2008 681 mdate Sun May 4 15:37:19 UTC 2008 682 who mrg, tsutsui 683 file rescue/Makefile : 1.21 684 file sbin/dump_lfs/Makefile : 1.9 685 file sbin/fsck_ffs/Makefile : 1.35 686 file sbin/fsdb/Makefile : 1.22 687 file share/mk/sys.mk : 1.96 688 file usr.sbin/ndbootd/Makefile : 1.5 689 descr 690 Several internal compiler errors with gcc -O1 691 around 64bit integer arithmetic. 692 This hack uses -O1 and adds some -fno-tree-foo options 693 to avoid the problem. 694 This might be related with GCC Bugzilla Bug 32424. 695 kcah 696 697port m68k,sh3,vax 698 699 hack gcc-4.8.1 700 cdate Wed Nov 6 20:41:35 EST 2013 701 who christos 702 file src/external/gpl3/gcc/libstdc++-v3/Makefile : 1.6 703 descr 704 compile hashtable_c++0x.cc with -O2 instead of -Os to 705 produce missing instantiation of std::lower_bound expansion 706 for unsigned long. 707 kcah 708 709port sparc 710 711 hack avoid NULL pointer derefs in savefpstate IPIs and GCC 4.5.3 712 cdate Sun Aug 14 19:26:48 PDT 2011 713 who mrg 714 file sys/arch/sparc64/sparc/cpu.c : 1.234 715 file sys/arch/sparc64/sparc/cpuvar.h : 1.90 716 file sys/arch/sparc64/sparc/genassym.cf : 1.67 717 file sys/arch/sparc64/sparc/locore.s : 1.265 718 descr 719 Something is wrong with GCC 4.5.3 and the savefpstate IPI. 720 Post newlock2 there was a bug where a lock was reduced from 721 IPL_SCHED to IPL_VM (?) and occasionally savefpstate IPI 722 would crash due to NULL IPI. This was fixed by re-using the 723 right IPL value. However, GCC 4.5.3 build kernels have the 724 same problems. For now, the hack is re-instated. 725 kcah 726 727 728port mips 729 730 hack mips-shared-linker-load-address 731 cdate Fri Oct 7 08:33:10 UTC 2005 732 who simonb 733 file src/sys/kern/exec_elf32.c : 1.107 734 descr 735 With COMPAT_16 or previous enabled (which enables 736 ELF_INTERP_NON_RELOCATABLE) a recent ld.elf_so will 737 load and run at address 0. The check to fix this in 738 rev 1.107 only checks the first psection of the ELF 739 executable, which may not be loadable. A more correct 740 fix is to check the first loadable psection instead of 741 just the first psection. 742 kcah 743 744 hack mips-duplicate-ras-end-label 745 cdate Sat Sep 2 23:29:42 2006 746 who martin 747 file src/regress/sys/kern/ras/ras3/Makefile : 1.3 748 descr 749 Add -fno-reorder-blocks to CFLAGS to avoid duplicate 750 labels by duplicated __asm output from RAS_END() 751 macro. 752 kcah 753 754 hack mips-mcount-assembler-warning 755 cdate Tue Jul 29 14:16:52 UTC 2008 756 who lukem 757 file src/lib/libc/gmon/Makefile.inc : 1.8 758 descr 759 Workaround for PR port-mips/39192. 760 common/lib/libc/gmon/mcount.c generates a (fatal) 761 assembler warning on MIPS: 762 Warning: No .cprestore pseudo-op used in PIC code 763 Add COPTS.count.c+=-Wa,--no-warn to avoid -Wa,--fatal-warnings 764 kcah 765 766port i386 767 768 hack use volatile intermediate variable to enforce rounding 769 cdate Tue Aug 1 22:15:55 MEST 2006 770 who drochner 771 file src/lib/libm/src/lrintf.c : 1.4 772 file src/lib/libm/src/s_rintf.c : 1.8 773 descr 774 gcc-4 does subsequent operations on "float" values within 775 the i387 FPU without rounding the intermediate results 776 kcah 777 778port x86 779 hack turn off optimization for biosdisk_ll.c because otherwise 780 we are pass the wrong arguments to biosdisk_read(). 781 $ cd /usr/src/sys/arch/i386/floppies/bootflopp-com 782 $ qemu-system-i386 -nographic -fda boot-com1.fs -boot a 783 who christos 784 file src/sys/arch/i386/stand/lib/Makefile : 1.38 785 descr 786 Turning on DISK_DEBUG shows the problem. We should find 787 out which option is causing this. 788 hcah 789 790port powerpc 791 792 hack avoid using __builtin_return_address(0) because it fails in 793 Xorg's module loader 794 cdate Sat Sep 27 03:52:05 UTC 2008 795 who macallan 796 file src/libexec/ld.elf_so/rtld.c : 1.121 797 descr 798 workaround for PR port-macppc/37812 799 kcah 800 801 hack define TARGET_SECURE_PLT and HAVE_AS_TLS because when 802 building the native compiler via build.sh those don't defined 803 properly. 804 cdate Sat Mar 12 08:00:00 UTC 2011 805 who matt 806 file src/gnu/dist/gcc4/gcc/config/rs6000/netbsd.h 807 descr 808 see above 809 kcah 810 811port powerpc64 812 813 hack include _errno.c in libposix so that __errno resolves. It 814 should resolve from libc's errno, but somehow it does not. 815 Linker bug? 816 cdate Thu Oct 27 13:19:47 EDT 2011 817 who christos 818 file src/lib/libposix/Makefile: 1.15 819 file src/lib/librt/Makefile: 1.14 820 descr 821 workaround for: 822 libposix_pic.a(cerror.pico)(.text+0x14): unresolvable \ 823 R_PPC64_REL24 relocation against symbol `.__errno' 824 kcah 825 826 hack rename data() function in mdocml to avoid redefined error. 827 Compiler/Assembler bug? 828 cdate Sat Oct 29 11:16:01 EDT 2011 829 who christos 830 file src/external/bsd/mdocml/tbl_data.c: 1.2 831 descr 832 workaround for: 833 {standard input}: Assembler messages: 834 {standard input}:105: Error: symbol `.data' is already \ 835 defined 836 kcah 837 838port emips 839 840 hack Add nop between ctc1 and mtc0 to avoid assembler internal 841 error 842 cdate Sat Oct 29 16:57:34 EDT 2011 843 who christos 844 file src/sys/arch/mips/mips/mips_fpu.c: 1.7 845 descr 846 workaround for: 847 {standard input}: Assembler messages: 848 {standard input}:730: Internal error! 849 Assertion failure in append_insn at /usr/src/external/gpl3/\ 850 binutils/dist/gas/config/tc-mips.c line 2910. 851 kcah 852 853port ia64 854 855 hack libc hesiod.c file does not compile with -O2 (internal 856 compiler error in gcc 4.5.3) 857 cdate Thu Dec 27 08:05:43 CET 2012 858 who martin 859 file src/lib/libc/net/Makefile.inc: 1.82 860 descr 861 workaround for: 862 {standard input}: Assembler messages: 863 {standard input}:1507: Warning: Use of 'mov' may violate WAW dependency 'GR%, % in 1 - 127' (impliedf), specific resource number is 15 864 {standard input}:1506: Warning: This is the location of the conflicting usage 865 {standard input}: Error: 2 warnings, treating warnings as errors 866 kcah 867 868 hack libelf libelf_extended.c compiler error in gcc 4.5.3 869 cdate Thu Dec 27 09:05:51 CET 2012 870 who martin 871 file src/external/bsd/libelf/lib/Makefile: 1.3 872 descr 873 workaround for: 874 {standard input}: Assembler messages: 875 {standard input}:87: Warning: Use of 'adds' may violate RAW dependency 'GR%, % in 1 - 127' (impliedf), specific resource number is 33 876 {standard input}:87: Warning: Only the first path encountering the conflict is reported 877 {standard input}:85: Warning: This is the location of the conflicting usage 878 kcah 879 880 hack compiler error with gcc 4.5.x 881 cdate Thu Dec 27 15:15:25 CET 2012 882 who martin 883 file src/crypto/external/bsd/netpgp/lib/verify/Makefile: 1.5 884 descr 885 workaround for: 886 {standard input}: Assembler messages: 887 {standard input}:22979: Warning: Use of 'mov' may violate WAW dependency 'GR%, % in 1 - 127' (impliedf), specific resource number is 8 888 {standard input}:22978: Warning: This is the location of the conflicting usage 889 kcah 890 891 hack libgcc unwind dummy function 892 cdate Fri Apr 17 14:31:03 CEST 2015 893 who martin 894 file src/external/gpl3/gcc/dist/libgcc/config/ia64/unwind-ia64.c: 1.4 895 descr 896 Add an empty _Unwind_FindTableEntry() implementation. 897 In the end we will use our libc stuff, and this should 898 go away again. 899 kcah 900 901port x68k 902 903 hack compiler error with gcc 4.5.x 904 cdate Fri May 24 13:23:01 EDT 2013 905 who christos 906 file src/external/gpl3/gcc/usr.bin/bakend/Makefile: 1.17 907 xsrc/external/mit/xorg/lib/libGLU/Makefile: 1.11 908 descr 909 workaround for: 910 internal compiler error: in cselib_record_set, at cselib.c:1999 911 kcah 912 913hack fallback to /usr/bin/clang-cpp in rpcgen 914cdate Wed Jun 5 15:49:27 CEST 2013 915who joerg 916file src/usr.bin/rpcgen/rpc_main.c 917descr 918 It is undecided which compiler owns /usr/bin/cpp and whether it should 919 exist in a MKGCC=no world. To allow rpcgen to work out-of-the-box, 920 if either gcc or clang is installed, use /usr/bin/clang-cpp as fallback. 921 This applies only if RPCGEN_CPP is not set and /usr/bin/cpp is not executable. 922kcah 923 924port hppa 925 926 hack compiler error with gcc 4.5.x 927 cdate Tue Jul 23 07:42:28 BST 2013 928 who skrll 929 file src/sys/lib/libkern/Makefile.libkern: 1.26 930 descr 931 workaround for unanalysed codegen bug affecting md5c.c. 932 kcah 933 934 hack gdb vs _rtld_debug_state problem 935 cdate Thu Mar 5 09:49:53 UTC 2015 936 who skrll 937 file src/libexec/ld.elf_so/rtld.c: 1.175 938 descr 939 workaround for problem where gdb misses the breakpoint on 940 _rtld_debug_state when the function is only the 941 bv,n %r0(%rp) instruction - the nullify seems to 942 confuse something 943 kcah 944 945port mips64* 946hack compiler crashes on mips64* with optimization enabled 947cdate Tue May 13 18:46:48 UTC 2014 948who macallan 949file src/external/lgpl3/gmp/lib/libgmp/arch/mips64eb/Makefile.inc: 1.6 950 src/external/lgpl3/gmp/lib/libgmp/arch/mips64eb/config.h: 1.5 951 src/external/lgpl3/gmp/lib/libgmp/arch/mips64el/Makefile.inc: 1.6 952 src/external/lgpl3/gmp/lib/libgmp/arch/mips64el/config.h: 1.5 953descr workaround for n32 gcc doing unaligned 64bit accesses when optimizing 954pr 48696 955kcah 956 957port vax 958hack compile boot with -O1 959cdate Sat May 24 09:40:58 CEST 2014 960who martin 961file src/sys/arch/vax/boot/boot/Makefile: 1.41 962descr /boot does not work when compiled with -O2 and gcc 4.8 963kcah 964 965port arm 966hack avoid using labels in a 12-bit constant. 967who matt 968file crypto/external/bsd/openssl/lib/libcrypto/arch/arm/aes-armv4.S: 1.2 969descr workaround for clang misassembling an instruction 970kcah 971