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