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