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