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