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