1# $NetBSD: HACKS,v 1.174 2016/06/15 14:11:15 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/hprop/Makefile : 1.13 257file usr.sbin/installboot/Makefile : 1.35 258file usr.sbin/ipf/ipftest/Makefile : 1.32 259file usr.sbin/isdn/isdnd/Makefile : 1.6 260file usr.sbin/isdn/isdnmonitor/Makefile : 1.3 261file usr.sbin/isdn/isdntel/Makefile : 1.2 262file usr.sbin/isdn/isdntrace/Makefile : 126 263file usr.sbin/mopd/common/Makefile : 1.10 264file usr.sbin/mopd/mopd/Makefile : 1.9 265file usr.sbin/mopd/mopprobe/Makefile : 1.7 266file usr.sbin/makefs/Makefile : 1.17 267file usr.sbin/mscdlabel/Makefile : 1.5 268file usr.sbin/pkg_install/add/Makefile : 1.7 269file usr.sbin/pkg_install/create/Makefile : 1.5 270file usr.sbin/pkg_install/lib/Makefile : 1.28 271file usr.sbin/ntp/ntpd/Makefile : 1.10/1.11 272file usr.sbin/ntp/ntptime/Makefile : 1.4/1.5 273file usr.sbin/pppd/Makefile.inc : 1.3 274file usr.sbin/pppd/pppd/Makefile : 1.38 275file usr.sbin/rarpd/Makefile : 1.10 276file usr.sbin/rbootd/Makefile : 1.10 277file usr.sbin/rpc.pcnfsd/Makefile : 1.17 278file usr.sbin/tcpdump/Makefile : 1.42 279descr 280 GCC 4.1 warns on pointer sign comparision/assignments and lots of 281 code does not conform. For now we use -Wno-pointer-sign and 282 -fno-strict-aliasing. 283kcah 284 285hack disable ctf for gcc-4.8 build 286mdate April 3 2014 287who christos 288file external/gpl3/gcc/usr.bin/Makefile.frontend : 1.4 289file external/gpl3/gcc/usr.bin/Makefile.backend : 1.5 290descr 291 nbctfconvert -g -L VERSION -g fold-const.o 292 ERROR: fold-const.c: failed to get mapping for tid 79154 \ 293 ((null)) <13532> 294kcak 295 296hack emacs aborting on exit (libgcc issue) 297mdate 7 November 2011 298who christos 299file external/gpl3/gcc/dist/gcc/unwind-dw2-fde.c : 1.2 300descr 301 GCC 4.5.3 now calls __unregister_frame_info_bases() on unloading/exit 302 to do just that. If the symbol requested is not found, then it aborts. 303 emacs 23.3 triggers this assertion. For now disable aborting, and 304 silently ignore. 305kcah 306 307hack cross-building hack on Darwin 308mdate 20 July 2008 309who agc 310file src/distrib/common/Makefile.mdset : 1.33 311descr 312 Darwin has problems with getopt() when used in mdsetimage -v, 313 due to the difference between BSD and libiberty() getopt 314 implementations, more fully described in 315 http://mail-index.netbsd.org/current-users/2008/06/27/msg003242.html 316 and the subsequent thread. For just now, we just have an ugly 317 workaround not to call mdsetimage with the -v argument on Darwin 318kcah 319 320hack avoid rebuilding asn1 libraries 321mdate 03 August 2008 322who veego 323file src/crypto/dist/heimdal/lib/asn1/gen.c : 1.10 324file src/lib/libasn1/Makefile : 1.32 325file src/lib/libhdb/Makefile : 1.23 326file src/lib/libgssapi/Makefile : 1.20 327file src/lib/libhx509/Makefile : 1.3 328pr 9702 39185 329descr 330 asn1_compile does not check if generated header files do not have to 331 be rebuild. 332 Generate .hx files and copy it in the Makefiles if they changed. 333kcah 334 335hack avoid gcc4 -O1 bug in loop optimize 336cdate 29 November 2008 337who tsutsui 338file src/sbin/ifconfig/Makefile : 1.39 339pr 40036 40066 340descr 341 gcc -O1 seems to generate wrong code in loop optimize so that 342 ifconfig lo0 inet6 doesn't return error even if a kernel 343 doesn't have IPv6 support. (see the above PRs for details) 344 For workaround, specify -fno-loop-optimize on m68000, 345 which uses -O1 by default. 346kcah 347 348hack MKPIE ldscript for /usr.sbin/crash 349cdate 22 April 2010 350who christos 351file src/usr.sbin/crash/Makefile : 1.5 352file src/usr.sbin/crash/ldscript.crash : 1.1 353pr N/A 354descr 355 fixed in binutils-2.20.1. Linking with MKPIE=yes causes overlapping 356 sections 357kcah 358 359hack Disable fortification for /usr/bin/makeinfo 360cdata 24 Mar 2014 361who tron 362file src/gnu/usr.bin/texinfo/makeinfo/Makefile : 1.8 363pr N/A 364descr 365 If "makeinfo" is compiled with "-D_FORTIFY_SOURCE=2" using GCC 4.8.3 366 it fails to process certain texinfo files, e.g. "cl.texi" 367 included in the Emacs 24.3 distribution. 368kcah 369 370hack Disable Stack Smash Protection for /usr/X11R7/bin/xauth 371cdata 05 Apr 2014 372who tron 373file src/external/mit/xorg/bin/xauth/Makefile : 1.4 374pr N/A 375descr 376 If "xauth" is compile with "USE_SSP" set to "yes" it fails 377 mysteriously with an error message like this: 378 379 /usr/X11R7/bin/xauth: file /foo/bar/.Xauthority does not exist 380 /usr/X11R7/bin/xauth: unable to link authority file /foo/bar/.Xauthority, use /foo/bar/.Xauthority 381 382 The compiler seems to get confused about the two filename variables 383 used in the link(2) system call. 384kcah 385 386hack g++ 5.x barfs on volatile in constexpr initializers 387cdata 27 Aug 2015 388who pooka 389file src/lib/libpthread/pthread_types.h : 1.17 390pr lib/49989 391descr 392 Trying to use e.g. pthread_mutex_t m = PTHREAD_MUTEX_INITIALIZER 393 in C++ results in: 394 error: temporary of non-literal type '__pthread_mutex_st' 395 in a constant expression 396 constexpr mutex() _NOEXCEPT : __m_(PTHREAD_MUTEX_INITIALIZER) {} 397 [...] 398 include/pthread_types.h:101:8: note: '__pthread_mutex_st' is 399 not literal because: 400 struct __pthread_mutex_st { 401 ^ 402 include/pthread_types.h:103:17: note: non-static data 403 member '__pthread_mutex_st::ptm_errorcheck' has volatile type 404 pthread_spin_t ptm_errorcheck; 405kcah 406 407hack libm cabs{,f,l} and g++ 408cdata 11 Jan 2016 409who christos 410pr lib/50646 411file src/external/gpl3/gcc.old/dist/libstdc++-v3/include/std/complex : 1.2 412file src/external/gpl3/gcc/dist/libstdc++-v3/include/std/complex : 1.2 413descr 414 Our cabs and cabsf have a different argument format on some architectures 415 and for that we have created in libm/compat_cabs{,f}.c. The standard 416 versions in libc are __c99_cabs{,f,l} and there are __RENAME()'s in 417 <complex.h>. G++ uses __builtin_cabs{,f,l} to implement those and they 418 translate by default to cabs{,f,l} which gets defined to cabs{,f} (the 419 wrong function) and an undefined cabsl. I've changed <complex> to use 420 the __c99_cabs{,f,l} directly. Using the __builtin_cabs{,f,l} in gcc is 421 still broken. 422kcah 423 424port vax 425 426 hack gcc4/vax ICE 427 cdate 428 who tsutsui 429 file sys/arch/vax/conf/Makefile.vax 430 descr 431 GCC4 on vax gets ICE on compiling sys/ddb/db_command.c. 432 -fno-tree-ter prevents it so add it to COPTS. 433 kcah 434 435 hack gcc4/vax compiler crash 436 cdate Fri Jun 30 22:39:12 PDT 2006 437 who mrg 438 file bin/csh/Makefile : 1.27 439 file lib/i18n_module/UTF7/Makefile : 1.2 440 descr 441 GCC4 on vax crashes. -O0 stops it happening so far... 442 kcah 443 444 hack vax Toolchain bug 445 cdate 28 Mar 2003 446 who he 447 file sys/arch/vax/vax/intvec.S : 1.5 448 descr 449 Workaround for PR toolchain/20924. The assembler apparently 450 tries to range-check byte offsets when it doesn't have 451 sufficient information to make that decision. 452 Workaround uses `brw' instead of `brb' instruction. 453 kcah 454 455 hack declare boolean_t in two IPF user-mode programs 456 cdate Tue Mar 7 19:19:20 CET 2006 457 who he 458 file dist/ipf/ipsend/iptests.c : 1.8 459 dist/ipf/ipsend/sock.c : 1.7 460 descr 461 The IPF user-mode programs ipsend and iptest first 462 include <sys/types.h> without _KERNEL defined, and 463 later include <sys/file.h> with _KERNEL defined. 464 This causes a build failure when building for vax, 465 since <sys/device.h> ends up being included without 466 bollean_t being defined by <sys/types.h>. 467 Build failure and further details documented in 468 PR#32907. 469 kcah 470 471 hack pcc 0.9.9 large string literals 472 cdat 8 July 2008 473 who gmcgarry 474 file sys/conf/param.c : 1.58 475 descr 476 Workaround for pcc 0.9.9 not handling large string literals 477 which causes kernels with 'options INCLUDE_CONFIG_FILE' to 478 fail compilation. 479 There is a proposal on the pcc mailing list to stuff config 480 file in ELF section. 481 kcah 482 483 hack xorg warnings 484 cdat 30 July 2008, 3 June, 2013 485 who mrg 486 file external/mit/xorg/lib/libSM/Makefile : 1.2 487 external/mit/xorg/lib/libX11/Makefile.libx11 : 1.10 488 external/mit/xorg/lib/libXext/Makefile : 1.2 489 external/mit/xorg/lib/libXfont/Makefile : 1.2 490 descr 491 Disable several warnings or use -Wno-error across Xorg sources 492 while we get them working 493 kcah 494 495 hack 32 bit time leftovers 496 cdat 11 January 2009 497 who christos 498 file lib/libc/time/localtime.c : 1.41 499 lib/libc/time/zic.c : 1.23 500 descr 501 The timezone compiled files still contain 32 bit time_t 502 quantities. I did not want to version the files because 503 the ``parser'' is too ugly for words. What needs to be 504 done, is to rewrite the parser from scratch also to avoid 505 potential core-dumps from parsing invalid files. 506 kcah 507 508 hack 32 bit time leftovers 509 cdat 11 January 2009 510 who christos 511 file various 512 descr 513 Many filesystem on-disk formats have 32 bit times. 514 kcah 515 516 hack gcc 4.5 fsdb miscompile 517 date Sat Nov 9 11:03:02 EST 2013 518 who christos 519 file src/sbin/fsdb/Makefile : 1.36 (and earlier) 520 descr 521 src/sbin/fsdb/fsdb.c: In function 'findblk': 522 src/sbin/fsdb/fsdb.c:610:1: error: unrecognizable insn: 523 (insn 941 940 942 134 src/sbin/fsdb/fsdb.c:589 (set (reg:SI 604) 524 (subreg:SI (mem/s/j:DI (plus:SI (mult:SI (reg:SI 602) 525 (const_int 8 [0x8])) 526 (reg/f:SI 601)) [0 curinode.99_378->dp2.di_ib S8 A32]) 4)) \ 527 -1 (nil)) 528 src/sbin/fsdb/fsdb.c:610:1: internal compiler error: in \ 529 extract_insn, at recog.c:2103 530 kcah 531 532 hack gcc 4.8 gcc miscompiles 533 date Sat Nov 9 16:35:18 EST 2013 534 who christos 535 file distrib/utils/x_ping/Makefile 536 file distrib/vax/miniroot/Makefile.inc 537 file distrib/vax/ramdisk/Makefile 538 file external/gpl3/gdb/lib/libdecnumber/Makefile 539 file sbin/fsdb/Makefile 540 file sbin/newfs_ext2fs/Makefile 541 file sbin/ping/Makefile 542 file usr.sbin/lmcconfig/Makefile 543 file usr.sbin/mtrace/Makefile 544 descr 545 external/gpl3/gcc/dist/gcc/expmed.c:2781:1: 546 internal compiler error: in change_address_1, at emit-rtl.c:2019 547 external/gpl3/gcc/dist/gcc/recog.c:770:1: 548 internal compiler error: in change_address_1, at emit-rtl.c:2019 549 external/gpl3/gcc/dist/libdecnumber/decNumber.c:7214:3: 550 internal compiler error: in change_address_1, at emit-rtl.c:2019 551 sbin/ping/ping.c:679:1: 552 internal compiler error: in change_address_1, at emit-rtl.c:2019 553 sbin/newfs_ext2fs/mke2fs.c:681:1: 554 internal compiler error: in reload_combine_note_use, 555 at postreload.c:1561 556 external/gpl3/gdb/dist/libdecnumber/decNumber.c:7214:3: 557 internal compiler error: in change_address_1, at emit-rtl.c:2019 558 usr.sbin/lmcconfig/lmcconfig.c:939:3: 559 internal compiler error: in reload_combine_note_use, 560 at postreload.c:1561 561 usr.sbin/mtrace/mtrace.c:1655:1: 562 internal compiler error: in change_address_1, at emit-rtl.c:2019 563 kcah 564 565port arm 566 567 hack gcc-unsigned-compare 568 cdate 09 Mar 2002 569 mdate 18 Mar 2002 570 who bjh21 571 file dist/bind/lib/nameser/ns_parse.c : 1.3 572 file dist/dhcp/minires/ns_parse.c : 1.3 573 file dist/dhcp/omapip/result.c : 1.2 574 file dist/dhcp/server/failover.c : 1.3 575 file gnu/dist/toolchain/bfd/bfd.c : 1.2 576 file gnu/dist/toolchain/bfd/format.c : 1.2 577 file gnu/dist/toolchain/gdb/target.c : 1.2 578 file sys/kern/vfs_subr.c : 1.172 579 descr When checking that a potentially-unsigned enum is >= 0, assign 580 it to an int first. This is necessary to avoid "comparison is 581 always true" warnings with -fshort-enums. Casting to an int 582 really should be enough, but turns out not to be. 583 kcah 584 585 hack gcc-4.5 arm CNAME hostname lookup failure on 586 certain DNS environment (probably -ftree-ter problem) 587 cdate Sat Dec 24 04:59:00 UTC 2011 588 mdate 589 who tsutsui 590 file lib/libc/net/Makefile.inc 1.79 591 descr Hostname lookup against CNAMEs by some commands fails 592 on certain DNS environments if lib/libc/net/gethnamaddr.c 593 (ping(8) etc) and lib/libc/net/getaddrinfo.c (ftp(1) etc) 594 are compiled with -O2, even though nslookup(1) against 595 the same CNAME returns proper hostname. 596 They works properly if compiled with -O2 -fno-tree-ter. 597 Also -O2 fails but -O2 -fno-tree-ter works on the following 598 test case in gcc bugzilla: 599 http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48863#c4 600 kcah 601 602 hack gcc-4.5 arm without -fno-tree-vrp generate broken code 603 cdate Wed Nov 14 13:02:02 JST 2012 604 who msaitoh 605 file lib/libc/softfloat/Makefile.inc 606 pr 46953 607 regress src/tests/lib/libm/t_cbrt 608 regress src/tests/lib/libm/t_ceil 609 regress src/tests/lib/libm/t_exp 610 regress src/tests/lib/libm/t_log 611 regress src/tests/lib/libm/t_scalbn 612 regress src/tests/lib/libm/t_sinh 613 regress src/tests/lib/libm/t_sqrt 614 descr Gcc has a bug in tree optimization. For adddf3, 615 -INF + -INF returns 0 without -fno-tree-vrp. 616 Debugging with -fdump-tree-all shows that 617 softfloat.c.021t.cleanup_cfg is ok but softfloat.c.023t.ssa 618 is broken. 619 kcah 620 621port sh3 622 623 hack gcc4-sh3-bz2 624 cdate Sun May 21 03:34:57 UTC 2006 625 mdate Fri May 16 13:13:00 UTC 2008 626 who mrg, tsutsui 627 file lib/libbz2/Makefile : 1.10 628 descr 629 The in-tree GCC 4.1-based compiler generated too-far 630 pc-relative addresses. Hack is to build with 631 -fno-loop-optimize. 632 kcah 633 634port sh3eb 635 hack gcc4.8.1 636 cdate Thu Nov 7 16:31:23 EST 2013 637 who christos 638 file src/sys/rump/net/lib/libnetbt/Makefile : 1.2 639 desrc 640 for profiling 641 compile l2cap_signal.c with -O0 to avoid: 642 ./netbt/l2cap_signal.c:36: 643 /p/netbsd/cvsroot/src/sys/rump/net/lib/libnetbt/../../../../\ 644 netbt/l2cap_signal.c: In function 'l2cap_recv_signal': 645 ./sh3/byte_swap.h:20:2: error: 'asm' operand requires \ 646 impossible reload 647 __asm volatile ("swap.b %1,%0" : "=r"(rval) : "r"(x)); 648 kcah 649 650port sh3el 651 hack gcc4.8.1 652 cdate Fri Nov 8 19:27:01 EST 2013 653 who christos 654 file src/external/bsd/libevent/lib/libevent/Makefile : 1.2 655 desrc 656 for profiling 657 compile evdns.c with -O0 to avoid: 658 ./sh3/byte_swap.h:20:2: error: 'asm' operand requires \ 659 impossible reload 660 __asm volatile ("swap.b %1,%0" : "=r"(rval) : "r"(x)); 661 kcah 662 663 hack gcc4.8.1 664 cdate Fri Nov 8 19:34:48 EST 2013 665 who christos 666 file src/usr.sbin/racoon/Makefile : 1.27 667 desrc 668 for profiling 669 compile ipsec_doi.c with -O0 to avoid: 670 ./sh3/byte_swap.h:20:2: error: 'asm' operand requires \ 671 impossible reload 672 __asm volatile ("swap.b %1,%0" : "=r"(rval) : "r"(x)); 673 kcah 674 675port m68000 676 677 hack gcc4-m68000 678 cdate Fri Feb 8 10:29:37 PST 2008 679 mdate Sun May 4 15:37:19 UTC 2008 680 who mrg, tsutsui 681 file rescue/Makefile : 1.21 682 file sbin/dump_lfs/Makefile : 1.9 683 file sbin/fsck_ffs/Makefile : 1.35 684 file sbin/fsdb/Makefile : 1.22 685 file share/mk/sys.mk : 1.96 686 file usr.sbin/ndbootd/Makefile : 1.5 687 descr 688 Several internal compiler errors with gcc -O1 689 around 64bit integer arithmetic. 690 This hack uses -O1 and adds some -fno-tree-foo options 691 to avoid the problem. 692 This might be related with GCC Bugzilla Bug 32424. 693 kcah 694 695port m68k,sh3,vax 696 697 hack gcc-4.8.1 698 cdate Wed Nov 6 20:41:35 EST 2013 699 who christos 700 file src/external/gpl3/gcc/libstdc++-v3/Makefile : 1.6 701 descr 702 compile hashtable_c++0x.cc with -O2 instead of -Os to 703 produce missing instantiation of std::lower_bound expansion 704 for unsigned long. 705 kcah 706 707port sparc 708 709 hack avoid NULL pointer derefs in savefpstate IPIs and GCC 4.5.3 710 cdate Sun Aug 14 19:26:48 PDT 2011 711 who mrg 712 file sys/arch/sparc64/sparc/cpu.c : 1.234 713 file sys/arch/sparc64/sparc/cpuvar.h : 1.90 714 file sys/arch/sparc64/sparc/genassym.cf : 1.67 715 file sys/arch/sparc64/sparc/locore.s : 1.265 716 descr 717 Something is wrong with GCC 4.5.3 and the savefpstate IPI. 718 Post newlock2 there was a bug where a lock was reduced from 719 IPL_SCHED to IPL_VM (?) and occasionally savefpstate IPI 720 would crash due to NULL IPI. This was fixed by re-using the 721 right IPL value. However, GCC 4.5.3 build kernels have the 722 same problems. For now, the hack is re-instated. 723 kcah 724 725 726port mips 727 728 hack mips-shared-linker-load-address 729 cdate Fri Oct 7 08:33:10 UTC 2005 730 who simonb 731 file src/sys/kern/exec_elf32.c : 1.107 732 descr 733 With COMPAT_16 or previous enabled (which enables 734 ELF_INTERP_NON_RELOCATABLE) a recent ld.elf_so will 735 load and run at address 0. The check to fix this in 736 rev 1.107 only checks the first psection of the ELF 737 executable, which may not be loadable. A more correct 738 fix is to check the first loadable psection instead of 739 just the first psection. 740 kcah 741 742 hack mips-duplicate-ras-end-label 743 cdate Sat Sep 2 23:29:42 2006 744 who martin 745 file src/regress/sys/kern/ras/ras3/Makefile : 1.3 746 descr 747 Add -fno-reorder-blocks to CFLAGS to avoid duplicate 748 labels by duplicated __asm output from RAS_END() 749 macro. 750 kcah 751 752 hack mips-mcount-assembler-warning 753 cdate Tue Jul 29 14:16:52 UTC 2008 754 who lukem 755 file src/lib/libc/gmon/Makefile.inc : 1.8 756 descr 757 Workaround for PR port-mips/39192. 758 common/lib/libc/gmon/mcount.c generates a (fatal) 759 assembler warning on MIPS: 760 Warning: No .cprestore pseudo-op used in PIC code 761 Add COPTS.count.c+=-Wa,--no-warn to avoid -Wa,--fatal-warnings 762 kcah 763 764port i386 765 766 hack use volatile intermediate variable to enforce rounding 767 cdate Tue Aug 1 22:15:55 MEST 2006 768 who drochner 769 file src/lib/libm/src/lrintf.c : 1.4 770 file src/lib/libm/src/s_rintf.c : 1.8 771 descr 772 gcc-4 does subsequent operations on "float" values within 773 the i387 FPU without rounding the intermediate results 774 kcah 775 776port x86 777 hack turn off optimization for biosdisk_ll.c because otherwise 778 we are pass the wrong arguments to biosdisk_read(). 779 $ cd /usr/src/sys/arch/i386/floppies/bootflopp-com 780 $ qemu-system-i386 -nographic -fda boot-com1.fs -boot a 781 who christos 782 file src/sys/arch/i386/stand/lib/Makefile : 1.38 783 descr 784 Turning on DISK_DEBUG shows the problem. We should find 785 out which option is causing this. 786 hcah 787 788port powerpc 789 790 hack avoid using __builtin_return_address(0) because it fails in 791 Xorg's module loader 792 cdate Sat Sep 27 03:52:05 UTC 2008 793 who macallan 794 file src/libexec/ld.elf_so/rtld.c : 1.121 795 descr 796 workaround for PR port-macppc/37812 797 kcah 798 799 hack define TARGET_SECURE_PLT and HAVE_AS_TLS because when 800 building the native compiler via build.sh those don't defined 801 properly. 802 cdate Sat Mar 12 08:00:00 UTC 2011 803 who matt 804 file src/gnu/dist/gcc4/gcc/config/rs6000/netbsd.h 805 descr 806 see above 807 kcah 808 809port powerpc64 810 811 hack include _errno.c in libposix so that __errno resolves. It 812 should resolve from libc's errno, but somehow it does not. 813 Linker bug? 814 cdate Thu Oct 27 13:19:47 EDT 2011 815 who christos 816 file src/lib/libposix/Makefile: 1.15 817 file src/lib/librt/Makefile: 1.14 818 descr 819 workaround for: 820 libposix_pic.a(cerror.pico)(.text+0x14): unresolvable \ 821 R_PPC64_REL24 relocation against symbol `.__errno' 822 kcah 823 824 hack rename data() function in mdocml to avoid redefined error. 825 Compiler/Assembler bug? 826 cdate Sat Oct 29 11:16:01 EDT 2011 827 who christos 828 file src/external/bsd/mdocml/tbl_data.c: 1.2 829 descr 830 workaround for: 831 {standard input}: Assembler messages: 832 {standard input}:105: Error: symbol `.data' is already \ 833 defined 834 kcah 835 836port emips 837 838 hack Add nop between ctc1 and mtc0 to avoid assembler internal 839 error 840 cdate Sat Oct 29 16:57:34 EDT 2011 841 who christos 842 file src/sys/arch/mips/mips/mips_fpu.c: 1.7 843 descr 844 workaround for: 845 {standard input}: Assembler messages: 846 {standard input}:730: Internal error! 847 Assertion failure in append_insn at /usr/src/external/gpl3/\ 848 binutils/dist/gas/config/tc-mips.c line 2910. 849 kcah 850 851port ia64 852 853 hack libc hesiod.c file does not compile with -O2 (internal 854 compiler error in gcc 4.5.3) 855 cdate Thu Dec 27 08:05:43 CET 2012 856 who martin 857 file src/lib/libc/net/Makefile.inc: 1.82 858 descr 859 workaround for: 860 {standard input}: Assembler messages: 861 {standard input}:1507: Warning: Use of 'mov' may violate WAW dependency 'GR%, % in 1 - 127' (impliedf), specific resource number is 15 862 {standard input}:1506: Warning: This is the location of the conflicting usage 863 {standard input}: Error: 2 warnings, treating warnings as errors 864 kcah 865 866 hack libelf libelf_extended.c compiler error in gcc 4.5.3 867 cdate Thu Dec 27 09:05:51 CET 2012 868 who martin 869 file src/external/bsd/libelf/lib/Makefile: 1.3 870 descr 871 workaround for: 872 {standard input}: Assembler messages: 873 {standard input}:87: Warning: Use of 'adds' may violate RAW dependency 'GR%, % in 1 - 127' (impliedf), specific resource number is 33 874 {standard input}:87: Warning: Only the first path encountering the conflict is reported 875 {standard input}:85: Warning: This is the location of the conflicting usage 876 kcah 877 878 hack compiler error with gcc 4.5.x 879 cdate Thu Dec 27 15:15:25 CET 2012 880 who martin 881 file src/crypto/external/bsd/netpgp/lib/verify/Makefile: 1.5 882 descr 883 workaround for: 884 {standard input}: Assembler messages: 885 {standard input}:22979: Warning: Use of 'mov' may violate WAW dependency 'GR%, % in 1 - 127' (impliedf), specific resource number is 8 886 {standard input}:22978: Warning: This is the location of the conflicting usage 887 kcah 888 889 hack libgcc unwind dummy function 890 cdate Fri Apr 17 14:31:03 CEST 2015 891 who martin 892 file src/external/gpl3/gcc/dist/libgcc/config/ia64/unwind-ia64.c: 1.4 893 descr 894 Add an empty _Unwind_FindTableEntry() implementation. 895 In the end we will use our libc stuff, and this should 896 go away again. 897 kcah 898 899port x68k 900 901 hack compiler error with gcc 4.5.x 902 cdate Fri May 24 13:23:01 EDT 2013 903 who christos 904 file src/external/gpl3/gcc/usr.bin/bakend/Makefile: 1.17 905 xsrc/external/mit/xorg/lib/libGLU/Makefile: 1.11 906 descr 907 workaround for: 908 internal compiler error: in cselib_record_set, at cselib.c:1999 909 kcah 910 911hack fallback to /usr/bin/clang-cpp in rpcgen 912cdate Wed Jun 5 15:49:27 CEST 2013 913who joerg 914file src/usr.bin/rpcgen/rpc_main.c 915descr 916 It is undecided which compiler owns /usr/bin/cpp and whether it should 917 exist in a MKGCC=no world. To allow rpcgen to work out-of-the-box, 918 if either gcc or clang is installed, use /usr/bin/clang-cpp as fallback. 919 This applies only if RPCGEN_CPP is not set and /usr/bin/cpp is not executable. 920kcah 921 922port hppa 923 924 hack compiler error with gcc 4.5.x 925 cdate Tue Jul 23 07:42:28 BST 2013 926 who skrll 927 file src/sys/lib/libkern/Makefile.libkern: 1.26 928 descr 929 workaround for unanalysed codegen bug affecting md5c.c. 930 kcah 931 932 hack gdb vs _rtld_debug_state problem 933 cdate Thu Mar 5 09:49:53 UTC 2015 934 who skrll 935 file src/libexec/ld.elf_so/rtld.c: 1.175 936 descr 937 workaround for problem where gdb misses the breakpoint on 938 _rtld_debug_state when the function is only the 939 bv,n %r0(%rp) instruction - the nullify seems to 940 confuse something 941 kcah 942 943port mips64* 944hack compiler crashes on mips64* with optimization enabled 945cdate Tue May 13 18:46:48 UTC 2014 946who macallan 947file src/external/lgpl3/gmp/lib/libgmp/arch/mips64eb/Makefile.inc: 1.6 948 src/external/lgpl3/gmp/lib/libgmp/arch/mips64eb/config.h: 1.5 949 src/external/lgpl3/gmp/lib/libgmp/arch/mips64el/Makefile.inc: 1.6 950 src/external/lgpl3/gmp/lib/libgmp/arch/mips64el/config.h: 1.5 951descr workaround for n32 gcc doing unaligned 64bit accesses when optimizing 952pr 48696 953kcah 954 955port vax 956hack compile boot with -O1 957cdate Sat May 24 09:40:58 CEST 2014 958who martin 959file src/sys/arch/vax/boot/boot/Makefile: 1.41 960descr /boot does not work when compiled with -O2 and gcc 4.8 961kcah 962 963port arm 964hack avoid using labels in a 12-bit constant. 965who matt 966file crypto/external/bsd/openssl/lib/libcrypto/arch/arm/aes-armv4.S: 1.2 967descr workaround for clang misassembling an instruction 968kcah 969