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