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