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