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