1 1.258 christos # $NetBSD: HACKS,v 1.258 2025/09/20 12:35:00 christos Exp $ 2 1.1 lukem # 3 1.1 lukem # This file is intended to document workarounds for currently unsolved 4 1.1 lukem # (mostly) compiler bugs. 5 1.1 lukem # 6 1.1 lukem # Format: 7 1.1 lukem # hack title 8 1.1 lukem # cdate creation date 9 1.1 lukem # mdate mod date 10 1.1 lukem # who responsible developer 11 1.1 lukem # port ... 12 1.1 lukem # affected ports, space separated, if not "all" 13 1.1 lukem # file affected file : revision : line from : line to 14 1.1 lukem # affected files and revision and line numbers describing hack 15 1.1 lukem # multiple lines if necessary. 16 1.1 lukem # pr NNNN ... 17 1.1 lukem # problem reports this hack works around, if known. Space 18 1.1 lukem # separated. 19 1.1 lukem # regress src/regress/directory/where/test/found 20 1.1 lukem # regression test directories, if available. 21 1.1 lukem # descr 22 1.1 lukem # insert short informal description (multi-line). (Longer ones 23 1.1 lukem # should be in the PR database. More formal descriptions might 24 1.1 lukem # be in the regress tree. See above). 25 1.1 lukem # kcah 26 1.1 lukem # closing bracket. 27 1.1 lukem # 28 1.1 lukem # this is a comment. 29 1.1 lukem 30 1.207 maxv hack llvm needs no-unused-command-line-argument 31 1.207 maxv mdate 10 May 2020 32 1.207 maxv who maxv 33 1.207 maxv file share/mk/bsd.lib.mk 1.380 -> 1.381 34 1.207 maxv descr 35 1.207 maxv To avoid LLVM warnings when compiling the kernel with special 36 1.207 maxv CFLAGS such as KASAN on amd64 or ARMV83_PAC on aarch64, pass 37 1.207 maxv -Wno-unused-command-line-argument. 38 1.207 maxv kcah 39 1.207 maxv 40 1.190 maya hack static linking with libpthread 41 1.190 maya mdate 7 May 2019 42 1.190 maya who maya 43 1.209 christos file src/lib/libpthread/Makefile 1.92 -> 1.94 44 1.190 maya descr 45 1.190 maya To avoid some libc thread stub functions being picked up 46 1.190 maya in static builds, link pthread as one section. 47 1.190 maya kcah 48 1.190 maya 49 1.209 christos hack disable optimization for gcc-9.3 in src/lib/libc/gdtoa/strtod.c 50 1.209 christos mdate 18 Sep 2020 51 1.209 christos who christos 52 1.209 christos file src/lib/libc/gdtoa/strtod.c 1.15 -> 1.16 53 1.209 christos descr 54 1.209 christos See PR/55668, the program there causes infinite loop 55 1.209 christos kcah 56 1.209 christos 57 1.166 christos hack gcc-5.3 optimizes memset+malloc -> calloc inside calloc 58 1.166 christos mdate 4 May 2016 59 1.166 christos who christos 60 1.166 christos file external/gpl2/lib/libmalloc/lib/Makefile 1.3 -> 1.5 61 1.166 christos descr 62 1.166 christos resulting in infinite recursion; we prevent this with 63 1.166 christos -fno-builtin-malloc 64 1.166 christos kcah 65 1.166 christos 66 1.167 mrg hack turn off tree-vrp for parts of ufs_lookup.c 67 1.167 mrg mdate 28 April 2016 68 1.167 mrg who mrg christos 69 1.167 mrg file src/sys/ufs/ufs/ufs_lookup.c : 1.144 70 1.167 mrg pr 51094 71 1.167 mrg descr 72 1.167 mrg with -ftree-vrp enabled in ufs_lookup.c sometimes bad dir 73 1.167 mrg panicks are see. 74 1.167 mrg hcah 75 1.167 mrg 76 1.1 lukem hack netstat ieee1394 address printing. 77 1.1 lukem mdate 14 Nov 2000 78 1.1 lukem who matt 79 1.1 lukem file lib/libc/net/getnameinfo.c : 1.32 : 497 : 503 80 1.1 lukem descr 81 1.1 lukem Because the current implementation of IP over IEEE1394, the 82 1.1 lukem fw device address contains more than just the IEEE1394 EUI-64. 83 1.1 lukem So when printing out IEEE1394 addresses, ignore the extra stuff. 84 1.1 lukem kcah 85 1.1 lukem 86 1.1 lukem hack xterm vs. libterm 87 1.1 lukem mdate 01 Aug 2000 88 1.1 lukem who jdc 89 1.1 lukem file xsrc/xc/programs/xterm/main.c : 1.2 : 3609 : 3614 90 1.1 lukem pr 10383 91 1.1 lukem descr 92 1.1 lukem In order to extend the termcap string over 1023 bytes, a ZZ entry was 93 1.1 lukem introduced to point to a memory location containing the full entry. 94 1.1 lukem Without this hack, xterm will export a termcap containing the ZZ 95 1.1 lukem entry, which will then be ignored by libterm. As xterm modifies the 96 1.1 lukem exported termcap, this would cause those modifications to be ignored. 97 1.1 lukem kcah 98 1.1 lukem 99 1.1 lukem hack wi-at-big-endian-bus 100 1.1 lukem cdate 15 Mar 2002 101 1.1 lukem who martin 102 1.203 rin file dev/ic/wireg.h : 1.20 103 1.1 lukem descr Add an option to access the underlying bus in big endian byte order 104 1.1 lukem to work around deficiencies in bus_space_{read,write}_* macros. 105 1.1 lukem Those don't allow the implementation of a proper pcmcia bus space 106 1.1 lukem tag. 107 1.1 lukem kcah 108 1.1 lukem 109 1.3 jdc hack specific knowledge of colours in curses code 110 1.3 jdc cdate Sun Apr 6 11:05:24 BST 2003 111 1.3 jdc who jdc 112 1.3 jdc file lib/libcurses/color.c : r1.24 113 1.3 jdc descr 114 1.3 jdc Swap red/blue and yellow/cyan colours for COLOR_OTHER. 115 1.3 jdc Fix is to enhance libtermcap to understand terminfo-style % sequences. 116 1.3 jdc See also: 117 1.5 salo http://mail-index.NetBSD.org/tech-userlevel/2003/04/06/0000.html 118 1.4 scw kcah 119 1.4 scw 120 1.7 he hack Compensation for differing types of LINUX_USRSTACK and USRSTACK 121 1.7 he cdate 21 Aug 2003 122 1.7 he who he 123 1.7 he file sys/miscfs/procfs/procfs_linux.c : 1.14 124 1.7 he descr 125 1.7 he Not all ports have LINUX_USRSTACK and/or USRSTACK defined as 126 1.7 he literals/constants, but refer to variables of a type which is 127 1.7 he not "unsigned long", causing compilation of procfs_linux.c to 128 1.7 he fail with "makes integer from pointer without a cast". This 129 1.7 he is observed on e.g. the sun3 port. Ideally the "types" for 130 1.7 he symbols should be consistent across all ports. 131 1.25 mrg kcah 132 1.25 mrg 133 1.80 tsutsui hack gcc4 wrong uninitialized variable 134 1.58 mrg mdate 10 May 2006 135 1.58 mrg who mrg 136 1.58 mrg file bin/ksh/eval.c : 1.6 137 1.58 mrg file bin/sh/histedit.c : 1.39 138 1.58 mrg file bin/sh/parser.c : 1.60 139 1.58 mrg file crypto/dist/heimdal/kdc/524.c : 1.10 140 1.58 mrg file crypto/dist/ssh/sftp.c : 1.20 141 1.58 mrg file crypto/dist/ssh/ssh-keysign.c : 1.11 142 1.58 mrg file dist/ipf/lib/hostname.c : 1.2 143 1.58 mrg file dist/ipf/tools/ipmon.c : 1.8 144 1.72 mrg file dist/ntp/ntpd/ntp_request.c : 1.4 145 1.58 mrg file dist/ntp/ntpd/refclock_shm.c : 1.4 146 1.58 mrg file dist/ntp/sntp/timing.c : 1.3 147 1.58 mrg file dist/pppd/pppstats/pppstats.c : 1.3 148 1.58 mrg file dist/tcpdump/print-zephyr.c : 1.5 149 1.68 mrg file distrib/utils/sysinst/aout2elf.c : 1.12 150 1.58 mrg file gnu/libexec/uucp/uucico/uucico.c : 1.6 151 1.58 mrg file lib/libc/citrus/citrus_csmapper.c : 1.6 152 1.58 mrg file lib/libc/citrus/citrus_pivot_factory.c : 1.5 153 1.58 mrg file lib/libc/inet/inet_cidr_ntop.c : 1.3 154 1.58 mrg file lib/libc/inet/inet_ntop.c : 1.3 155 1.58 mrg file lib/libc/stdio/vfwprintf.c : 1.8 156 1.69 mrg file libexec/ld.elf_so/arch/m68k/mdreloc.c : 1.20 157 1.76 mrg file libexec/ld.elf_so/arch/powerpc/ppc_reloc.c : 1.40 158 1.74 mrg file libexec/ld.elf_so/arch/sh3/mdreloc.c : 1.22 159 1.69 mrg file libexec/ld.elf_so/arch/sparc/mdreloc.c : 1.39 160 1.58 mrg file libexec/ld.elf_so/arch/sparc64/mdreloc.c : 1.39 161 1.74 mrg file libexec/ld.elf_so/arch/vax/mdreloc.c : 1.21 162 1.71 dan file libexec/ld.elf_so/arch/x86_64/mdreloc.c : 1.27 163 1.58 mrg file sbin/fsck_ext2fs/dir.c : 1.19 164 1.58 mrg file sbin/routed/rtquery/rtquery.c : 1.18 165 1.73 dan file sys/arch/amd64/amd64/pmap.c : 1.26 166 1.79 mrg file sys/arch/i386/pci/piixpcib.c : 1.4 167 1.80 tsutsui file sys/arch/m68k/m68k/pmap_motorola.c : 1.4 168 1.58 mrg file sys/crypto/cast128/cast128.c : 1.9 169 1.58 mrg file sys/ddb/db_command.c : 1.86 170 1.68 mrg file sys/dev/cardbus/cardbus_map.c : 1.21 171 1.58 mrg file sys/dev/fss.c : 1.25 172 1.69 mrg file sys/dev/ic/igsfb.c : 1.39 173 1.68 mrg file sys/dev/ic/mb86950.c : 1.5 174 1.58 mrg file sys/dev/ic/midway.c : 1.71 175 1.68 mrg file sys/dev/kttcp.c : 1.18 176 1.68 mrg file sys/dev/rasops/rasops_bitops.h : 1.9 177 1.68 mrg file sys/dev/pci/cmpci.c : 1.31 178 1.58 mrg file sys/dev/pci/machfb.c : 1.45 179 1.68 mrg file sys/dev/usb/ohci.c : 1.174 180 1.68 mrg file sys/dev/usb/uhci.c : 1.196 181 1.68 mrg file sys/dev/rasops/rasops_bitops.h : 1.9 182 1.58 mrg file sys/dist/ipf/netinet/ip_nat.c : 1.10 183 1.58 mrg file sys/dist/ipf/netinet/ip_rpcb_pxy.c : 1.8 184 1.58 mrg file sys/dist/pf/net/pf.c : 1.22 185 1.59 mrg file sys/fs/udf/udf_vnops.c : 1.4 186 1.58 mrg file sys/kern/kern_sig.c : 1.219 187 1.58 mrg file sys/kern/tty.c : 1.181 188 1.58 mrg file sys/net/bpf.c : 1.116 189 1.58 mrg file sys/net/zlib.c : 1.26 190 1.68 mrg file sys/netccitt/if_x25subr.c : 1.37 191 1.58 mrg file sys/netinet/in.c : 1.107 192 1.58 mrg file sys/nfs/nfs_serv.c : 1.108 193 1.58 mrg file sys/nfs/nfs_socket.c : 1.129 194 1.58 mrg file sys/nfs/nfs_syscalls.c : 1.91 195 1.58 mrg file sys/ufs/lfs/lfs_vfsops.c : 1.207 [also (char *)] 196 1.58 mrg file usr.bin/ftp/ftp.c : 1.140 197 1.58 mrg file usr.bin/find/function.c : 1.54 198 1.58 mrg file usr.bin/mail/tty.c : 1.20 199 1.100 tsutsui file usr.bin/msgc/msg_sys.def : 1.33-1.34 200 1.58 mrg file usr.bin/nl/nl.c : 1.7 201 1.58 mrg file usr.bin/systat/keyboard.c : 1.23 202 1.58 mrg file usr.bin/usbhidctl/usbhid.c : 1.29 203 1.58 mrg file usr.bin/vi/cl/cl_read.c : 1.5 204 1.58 mrg file usr.bin/vi/ex/ex_cscope.c : 1.12 205 1.58 mrg file usr.bin/vi/ex/ex_tag.c : 1.19 206 1.58 mrg file usr.bin/vi/vi/v_txt.c : 1.15 207 1.58 mrg file usr.sbin/altq/altqstat/qdisc_rio.c : 1.4 208 1.58 mrg file usr.sbin/cron/do_command.c : 1.19 209 1.58 mrg file usr.sbin/timed/timed/slave.c : 1.15 210 1.58 mrg descr 211 1.58 mrg GCC 4.1 gets many uninitialised variable warnings wrong. We should 212 1.58 mrg really audit all the old hacks like this when older compilers are 213 1.58 mrg removed from the tree, as many are probably no longer required. 214 1.65 christos The problem is that it does not recognize initialization via function 215 1.65 christos call pointer. I.e. 216 1.65 christos int p; 217 1.65 christos foo(&p); 218 1.65 christos does not mark p as initialized. 219 1.58 mrg kcah 220 1.58 mrg 221 1.59 mrg hack gcc4 pointer sign and strict aliasing problems 222 1.59 mrg mdate 10 May 2006 223 1.59 mrg who mrg 224 1.59 mrg file bin/ed/Makefile : 1.33 225 1.68 mrg file distrib/utils/sysinst/Makefile.inc : 1.44 226 1.91 martin file distrib/utils/x_dhclient/Makefile : 1.15 227 1.60 mrg file games/bcd/Makefile : 1.5 228 1.60 mrg file games/dab/Makefile : 1.5 229 1.60 mrg file games/larn/Makefile : 1.17 230 1.60 mrg file games/pom/Makefile : 1.5 231 1.60 mrg file lib/libasn1/Makefile : 1.26 232 1.60 mrg file lib/libcrypt/Makefile : 1.17 233 1.60 mrg file lib/libgssapi/Makefile : 1.16 234 1.60 mrg file lib/libhdb/Makefile : 1.20 235 1.60 mrg file lib/libkadm5clnt/Makefile : 1.21 236 1.60 mrg file lib/libkadm5srv/Makefile : 1.25 237 1.60 mrg file lib/libkrb5/Makefile : 1.35 238 1.60 mrg file lib/libssh/Makefile : 1.6 239 1.60 mrg file lib/libtelnet/Makefile : 1.26 240 1.60 mrg file libexec/getty/Makefile : 1.14 241 1.60 mrg file libexec/kadmind/Makefile : 1.19 242 1.60 mrg file libexec/kpasswdd/Makefile : 1.14 243 1.60 mrg file sbin/atactl/Makefile : 1.3 244 1.60 mrg file sbin/cgdconfig/Makefile : 1.7 245 1.60 mrg file sbin/clri/Makefile : 1.13 246 1.60 mrg file sbin/dkctl/Makefile : 1.4 247 1.60 mrg file sbin/dump/Makefile : 1.33 248 1.60 mrg file sbin/fdisk/Makefile : 1.35 249 1.60 mrg file sbin/fsck_ext2fs/Makefile : 1.11 250 1.60 mrg file sbin/fsck_ffs/Makefile : 1.29 251 1.60 mrg file sbin/fsdb/Makefile : 1.18 252 1.60 mrg file sbin/newfs/Makefile : 1.30 253 1.60 mrg file sbin/newfs_sysvbfs/Makefile : 1.2 254 1.60 mrg file sbin/restore/Makefile : 1.23 255 1.60 mrg file sbin/veriexecctl/Makefile : 1.11 256 1.64 mrg file sys/lib/libsa/Makefile : 1.59 257 1.68 mrg file sys/arch/evbarm/adi_brh/brh_machdep.c : 1.24 258 1.59 mrg file usr.bin/awk/Makefile : 1.9 259 1.64 mrg file usr.bin/crontab/Makefile : 1.24 260 1.60 mrg file usr.bin/ctags/Makefile : 1.8 261 1.61 mrg file usr.bin/gzip/Makefile : 1.10 262 1.60 mrg file usr.bin/ssh/sftp/Makefile : 1.10 263 1.60 mrg file usr.bin/ssh/ssh/Makefile : 1.25 264 1.59 mrg file usr.bin/vi/build/Makefile : 1.26 265 1.60 mrg file usr.bin/telnet/Makefile : 1.40 266 1.60 mrg file usr.bin/tn3270/tn3270/Makefile : 1.36 267 1.60 mrg file usr.bin/tr/Makefile : 1.4 268 1.59 mrg file usr.sbin/amd/amd/Makefile : 1.27 269 1.59 mrg file usr.sbin/amd/amq/Makefile : 1.14 270 1.59 mrg file usr.sbin/amd/libamu/Makefile : 1.20 271 1.59 mrg file usr.sbin/amd/pawd/Makefile : 1.5 272 1.59 mrg file usr.sbin/bind/Makefile.inc : 1.22 273 1.60 mrg file usr.sbin/bind/libdns/Makefile : 1.3 274 1.60 mrg file usr.sbin/bind/named/Makefile : 1.17 275 1.60 mrg file usr.sbin/bootp/bootptest/Makefile : 1.2 276 1.60 mrg file usr.sbin/chrtbl/Makefile : 1.6 277 1.60 mrg file usr.sbin/cron/Makefile : 1.12 278 1.59 mrg file usr.sbin/dhcp/Makefile.inc : 1.20 279 1.60 mrg file usr.sbin/hprop/Makefile : 1.13 280 1.60 mrg file usr.sbin/installboot/Makefile : 1.35 281 1.59 mrg file usr.sbin/ipf/ipftest/Makefile : 1.32 282 1.59 mrg file usr.sbin/isdn/isdnd/Makefile : 1.6 283 1.59 mrg file usr.sbin/isdn/isdnmonitor/Makefile : 1.3 284 1.59 mrg file usr.sbin/isdn/isdntel/Makefile : 1.2 285 1.59 mrg file usr.sbin/isdn/isdntrace/Makefile : 126 286 1.61 mrg file usr.sbin/mopd/common/Makefile : 1.10 287 1.61 mrg file usr.sbin/mopd/mopd/Makefile : 1.9 288 1.61 mrg file usr.sbin/mopd/mopprobe/Makefile : 1.7 289 1.60 mrg file usr.sbin/makefs/Makefile : 1.17 290 1.60 mrg file usr.sbin/mscdlabel/Makefile : 1.5 291 1.60 mrg file usr.sbin/pkg_install/add/Makefile : 1.7 292 1.60 mrg file usr.sbin/pkg_install/create/Makefile : 1.5 293 1.60 mrg file usr.sbin/pkg_install/lib/Makefile : 1.28 294 1.59 mrg file usr.sbin/ntp/ntpd/Makefile : 1.10/1.11 295 1.59 mrg file usr.sbin/ntp/ntptime/Makefile : 1.4/1.5 296 1.59 mrg file usr.sbin/pppd/Makefile.inc : 1.3 297 1.59 mrg file usr.sbin/pppd/pppd/Makefile : 1.38 298 1.60 mrg file usr.sbin/rarpd/Makefile : 1.10 299 1.59 mrg file usr.sbin/rbootd/Makefile : 1.10 300 1.60 mrg file usr.sbin/rpc.pcnfsd/Makefile : 1.17 301 1.60 mrg file usr.sbin/tcpdump/Makefile : 1.42 302 1.59 mrg descr 303 1.215 wiz GCC 4.1 warns on pointer sign comparison/assignments and lots of 304 1.59 mrg code does not conform. For now we use -Wno-pointer-sign and 305 1.59 mrg -fno-strict-aliasing. 306 1.59 mrg kcah 307 1.59 mrg 308 1.145 christos hack disable ctf for gcc-4.8 build 309 1.145 christos mdate April 3 2014 310 1.146 wiz who christos 311 1.145 christos file external/gpl3/gcc/usr.bin/Makefile.frontend : 1.4 312 1.145 christos file external/gpl3/gcc/usr.bin/Makefile.backend : 1.5 313 1.145 christos descr 314 1.145 christos nbctfconvert -g -L VERSION -g fold-const.o 315 1.145 christos ERROR: fold-const.c: failed to get mapping for tid 79154 \ 316 1.145 christos ((null)) <13532> 317 1.145 christos kcak 318 1.145 christos 319 1.121 christos hack emacs aborting on exit (libgcc issue) 320 1.121 christos mdate 7 November 2011 321 1.121 christos who christos 322 1.121 christos file external/gpl3/gcc/dist/gcc/unwind-dw2-fde.c : 1.2 323 1.121 christos descr 324 1.121 christos GCC 4.5.3 now calls __unregister_frame_info_bases() on unloading/exit 325 1.121 christos to do just that. If the symbol requested is not found, then it aborts. 326 1.121 christos emacs 23.3 triggers this assertion. For now disable aborting, and 327 1.121 christos silently ignore. 328 1.121 christos kcah 329 1.121 christos 330 1.105 agc hack cross-building hack on Darwin 331 1.105 agc mdate 20 July 2008 332 1.105 agc who agc 333 1.105 agc file src/distrib/common/Makefile.mdset : 1.33 334 1.105 agc descr 335 1.105 agc Darwin has problems with getopt() when used in mdsetimage -v, 336 1.105 agc due to the difference between BSD and libiberty() getopt 337 1.105 agc implementations, more fully described in 338 1.105 agc http://mail-index.netbsd.org/current-users/2008/06/27/msg003242.html 339 1.105 agc and the subsequent thread. For just now, we just have an ugly 340 1.105 agc workaround not to call mdsetimage with the -v argument on Darwin 341 1.105 agc kcah 342 1.105 agc 343 1.109 veego hack avoid rebuilding asn1 libraries 344 1.109 veego mdate 03 August 2008 345 1.109 veego who veego 346 1.109 veego file src/crypto/dist/heimdal/lib/asn1/gen.c : 1.10 347 1.109 veego file src/lib/libasn1/Makefile : 1.32 348 1.109 veego file src/lib/libhdb/Makefile : 1.23 349 1.109 veego file src/lib/libgssapi/Makefile : 1.20 350 1.109 veego file src/lib/libhx509/Makefile : 1.3 351 1.109 veego pr 9702 39185 352 1.109 veego descr 353 1.109 veego asn1_compile does not check if generated header files do not have to 354 1.109 veego be rebuild. 355 1.109 veego Generate .hx files and copy it in the Makefiles if they changed. 356 1.109 veego kcah 357 1.109 veego 358 1.144 tron hack Disable fortification for /usr/bin/makeinfo 359 1.144 tron cdata 24 Mar 2014 360 1.144 tron who tron 361 1.186 maya file src/external/gpl2/texinfo/bin/makeinfo/Makefile : 1.1 362 1.144 tron pr N/A 363 1.144 tron descr 364 1.144 tron If "makeinfo" is compiled with "-D_FORTIFY_SOURCE=2" using GCC 4.8.3 365 1.144 tron it fails to process certain texinfo files, e.g. "cl.texi" 366 1.144 tron included in the Emacs 24.3 distribution. 367 1.144 tron kcah 368 1.144 tron 369 1.147 tron hack Disable Stack Smash Protection for /usr/X11R7/bin/xauth 370 1.147 tron cdata 05 Apr 2014 371 1.147 tron who tron 372 1.147 tron file src/external/mit/xorg/bin/xauth/Makefile : 1.4 373 1.147 tron pr N/A 374 1.147 tron descr 375 1.147 tron If "xauth" is compile with "USE_SSP" set to "yes" it fails 376 1.147 tron mysteriously with an error message like this: 377 1.147 tron 378 1.147 tron /usr/X11R7/bin/xauth: file /foo/bar/.Xauthority does not exist 379 1.147 tron /usr/X11R7/bin/xauth: unable to link authority file /foo/bar/.Xauthority, use /foo/bar/.Xauthority 380 1.147 tron 381 1.147 tron The compiler seems to get confused about the two filename variables 382 1.147 tron used in the link(2) system call. 383 1.147 tron kcah 384 1.147 tron 385 1.162 pooka hack g++ 5.x barfs on volatile in constexpr initializers 386 1.162 pooka cdata 27 Aug 2015 387 1.160 pooka who pooka 388 1.162 pooka file src/lib/libpthread/pthread_types.h : 1.17 389 1.160 pooka pr lib/49989 390 1.160 pooka descr 391 1.160 pooka Trying to use e.g. pthread_mutex_t m = PTHREAD_MUTEX_INITIALIZER 392 1.160 pooka in C++ results in: 393 1.160 pooka error: temporary of non-literal type '__pthread_mutex_st' 394 1.160 pooka in a constant expression 395 1.160 pooka constexpr mutex() _NOEXCEPT : __m_(PTHREAD_MUTEX_INITIALIZER) {} 396 1.160 pooka [...] 397 1.160 pooka include/pthread_types.h:101:8: note: '__pthread_mutex_st' is 398 1.160 pooka not literal because: 399 1.160 pooka struct __pthread_mutex_st { 400 1.160 pooka ^ 401 1.160 pooka include/pthread_types.h:103:17: note: non-static data 402 1.160 pooka member '__pthread_mutex_st::ptm_errorcheck' has volatile type 403 1.160 pooka pthread_spin_t ptm_errorcheck; 404 1.160 pooka kcah 405 1.160 pooka 406 1.163 christos hack libm cabs{,f,l} and g++ 407 1.163 christos cdata 11 Jan 2016 408 1.163 christos who christos 409 1.163 christos pr lib/50646 410 1.163 christos file src/external/gpl3/gcc.old/dist/libstdc++-v3/include/std/complex : 1.2 411 1.163 christos file src/external/gpl3/gcc/dist/libstdc++-v3/include/std/complex : 1.2 412 1.163 christos descr 413 1.163 christos Our cabs and cabsf have a different argument format on some architectures 414 1.163 christos and for that we have created in libm/compat_cabs{,f}.c. The standard 415 1.163 christos versions in libc are __c99_cabs{,f,l} and there are __RENAME()'s in 416 1.163 christos <complex.h>. G++ uses __builtin_cabs{,f,l} to implement those and they 417 1.163 christos translate by default to cabs{,f,l} which gets defined to cabs{,f} (the 418 1.163 christos wrong function) and an undefined cabsl. I've changed <complex> to use 419 1.163 christos the __c99_cabs{,f,l} directly. Using the __builtin_cabs{,f,l} in gcc is 420 1.163 christos still broken. 421 1.163 christos kcah 422 1.163 christos 423 1.249 rin hack xorg warnings 424 1.249 rin cdate 30 July 2008, 3 June, 2013 425 1.249 rin who mrg 426 1.249 rin file external/mit/xorg/lib/libSM/Makefile : 1.2 427 1.249 rin external/mit/xorg/lib/libX11/Makefile.libx11 : 1.10 428 1.249 rin external/mit/xorg/lib/libXext/Makefile : 1.2 429 1.249 rin external/mit/xorg/lib/libXfont/Makefile : 1.2 430 1.249 rin descr 431 1.249 rin Disable several warnings or use -Wno-error across Xorg sources 432 1.249 rin while we get them working 433 1.249 rin kcah 434 1.249 rin 435 1.249 rin hack 32 bit time leftovers 436 1.249 rin cdate 11 January 2009 437 1.249 rin who christos 438 1.249 rin file lib/libc/time/localtime.c : 1.41 439 1.249 rin lib/libc/time/zic.c : 1.23 440 1.249 rin descr 441 1.249 rin The timezone compiled files still contain 32 bit time_t 442 1.249 rin quantities. I did not want to version the files because 443 1.249 rin the ``parser'' is too ugly for words. What needs to be 444 1.249 rin done, is to rewrite the parser from scratch also to avoid 445 1.249 rin potential core-dumps from parsing invalid files. 446 1.249 rin kcah 447 1.249 rin 448 1.249 rin hack 32 bit time leftovers 449 1.249 rin cdate 11 January 2009 450 1.249 rin who christos 451 1.249 rin file various 452 1.249 rin descr 453 1.249 rin Many filesystem on-disk formats have 32 bit times. 454 1.249 rin kcah 455 1.249 rin 456 1.249 rin 457 1.21 mycroft port vax 458 1.21 mycroft 459 1.235 christos hack gcc10/vax ICE 460 1.235 christos cdate Sun Jan 22 15:37:56 EST 2023 461 1.235 christos who christos 462 1.235 christos file external/mit/xorg/lib/fontconfig/src/Makefile : 1.28 463 1.235 christos descr 464 1.235 christos Disable optimization on some files 465 1.235 christos kcah 466 1.235 christos 467 1.54 he hack declare boolean_t in two IPF user-mode programs 468 1.54 he cdate Tue Mar 7 19:19:20 CET 2006 469 1.54 he who he 470 1.54 he file dist/ipf/ipsend/iptests.c : 1.8 471 1.54 he dist/ipf/ipsend/sock.c : 1.7 472 1.54 he descr 473 1.54 he The IPF user-mode programs ipsend and iptest first 474 1.54 he include <sys/types.h> without _KERNEL defined, and 475 1.54 he later include <sys/file.h> with _KERNEL defined. 476 1.54 he This causes a build failure when building for vax, 477 1.54 he since <sys/device.h> ends up being included without 478 1.54 he bollean_t being defined by <sys/types.h>. 479 1.54 he Build failure and further details documented in 480 1.54 he PR#32907. 481 1.54 he kcah 482 1.54 he 483 1.104 gmcgarry hack pcc 0.9.9 large string literals 484 1.104 gmcgarry cdat 8 July 2008 485 1.104 gmcgarry who gmcgarry 486 1.104 gmcgarry file sys/conf/param.c : 1.58 487 1.104 gmcgarry descr 488 1.104 gmcgarry Workaround for pcc 0.9.9 not handling large string literals 489 1.104 gmcgarry which causes kernels with 'options INCLUDE_CONFIG_FILE' to 490 1.104 gmcgarry fail compilation. 491 1.104 gmcgarry There is a proposal on the pcc mailing list to stuff config 492 1.104 gmcgarry file in ELF section. 493 1.104 gmcgarry kcah 494 1.104 gmcgarry 495 1.250 rin hack Sprinkle -O0 to avoid ICE for GCC10/12 496 1.250 rin cdate Mon Sep 30 02:55:44 UTC 2024 497 1.250 rin mdate Sun Apr 13 08:29:42 UTC 2025 498 1.250 rin mdate 2025/04/13 08:31:12 499 1.250 rin who kalvisd, rin 500 1.250 rin file external/mit/xorg/lib/gallium/Makefile : 1.57 - 501 1.250 rin file external/mit/xorg/lib/gallium.old/Makefile : 1.10 - 502 1.250 rin descr 503 1.250 rin We have ICE for -O[21] even for GCC10/12. 504 1.250 rin Affected files varies b/w GCC and gallium versions. 505 1.250 rin 506 1.250 rin Note that compiled binary does not work anyway on vax; 507 1.250 rin they manipulate floating-point numbers as binary, assuming 508 1.250 rin IEEE 754 format. 509 1.250 rin kcah 510 1.250 rin 511 1.21 mycroft port arm 512 1.21 mycroft 513 1.21 mycroft hack gcc-unsigned-compare 514 1.21 mycroft cdate 09 Mar 2002 515 1.21 mycroft mdate 18 Mar 2002 516 1.21 mycroft who bjh21 517 1.21 mycroft file dist/bind/lib/nameser/ns_parse.c : 1.3 518 1.21 mycroft file dist/dhcp/minires/ns_parse.c : 1.3 519 1.21 mycroft file dist/dhcp/omapip/result.c : 1.2 520 1.21 mycroft file dist/dhcp/server/failover.c : 1.3 521 1.21 mycroft file gnu/dist/toolchain/bfd/bfd.c : 1.2 522 1.21 mycroft file gnu/dist/toolchain/bfd/format.c : 1.2 523 1.21 mycroft file gnu/dist/toolchain/gdb/target.c : 1.2 524 1.21 mycroft file sys/kern/vfs_subr.c : 1.172 525 1.21 mycroft descr When checking that a potentially-unsigned enum is >= 0, assign 526 1.21 mycroft it to an int first. This is necessary to avoid "comparison is 527 1.21 mycroft always true" warnings with -fshort-enums. Casting to an int 528 1.21 mycroft really should be enough, but turns out not to be. 529 1.21 mycroft kcah 530 1.21 mycroft 531 1.122 tsutsui hack gcc-4.5 arm CNAME hostname lookup failure on 532 1.122 tsutsui certain DNS environment (probably -ftree-ter problem) 533 1.122 tsutsui cdate Sat Dec 24 04:59:00 UTC 2011 534 1.122 tsutsui mdate 535 1.122 tsutsui who tsutsui 536 1.122 tsutsui file lib/libc/net/Makefile.inc 1.79 537 1.122 tsutsui descr Hostname lookup against CNAMEs by some commands fails 538 1.122 tsutsui on certain DNS environments if lib/libc/net/gethnamaddr.c 539 1.122 tsutsui (ping(8) etc) and lib/libc/net/getaddrinfo.c (ftp(1) etc) 540 1.122 tsutsui are compiled with -O2, even though nslookup(1) against 541 1.122 tsutsui the same CNAME returns proper hostname. 542 1.122 tsutsui They works properly if compiled with -O2 -fno-tree-ter. 543 1.122 tsutsui Also -O2 fails but -O2 -fno-tree-ter works on the following 544 1.122 tsutsui test case in gcc bugzilla: 545 1.122 tsutsui http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48863#c4 546 1.122 tsutsui kcah 547 1.122 tsutsui 548 1.21 mycroft port sh3 549 1.21 mycroft 550 1.74 mrg hack gcc4-sh3-bz2 551 1.103 tsutsui cdate Sun May 21 03:34:57 UTC 2006 552 1.103 tsutsui mdate Fri May 16 13:13:00 UTC 2008 553 1.103 tsutsui who mrg, tsutsui 554 1.74 mrg file lib/libbz2/Makefile : 1.10 555 1.74 mrg descr 556 1.74 mrg The in-tree GCC 4.1-based compiler generated too-far 557 1.103 tsutsui pc-relative addresses. Hack is to build with 558 1.103 tsutsui -fno-loop-optimize. 559 1.74 mrg kcah 560 1.74 mrg 561 1.96 mrg port m68000 562 1.79 mrg 563 1.96 mrg hack gcc4-m68000 564 1.102 tsutsui cdate Fri Feb 8 10:29:37 PST 2008 565 1.102 tsutsui mdate Sun May 4 15:37:19 UTC 2008 566 1.99 tsutsui who mrg, tsutsui 567 1.96 mrg file rescue/Makefile : 1.21 568 1.99 tsutsui file sbin/dump_lfs/Makefile : 1.9 569 1.101 tsutsui file sbin/fsck_ffs/Makefile : 1.35 570 1.101 tsutsui file sbin/fsdb/Makefile : 1.22 571 1.101 tsutsui file share/mk/sys.mk : 1.96 572 1.99 tsutsui file usr.sbin/ndbootd/Makefile : 1.5 573 1.95 mrg descr 574 1.101 tsutsui Several internal compiler errors with gcc -O1 575 1.101 tsutsui around 64bit integer arithmetic. 576 1.99 tsutsui This hack uses -O1 and adds some -fno-tree-foo options 577 1.99 tsutsui to avoid the problem. 578 1.101 tsutsui This might be related with GCC Bugzilla Bug 32424. 579 1.95 mrg kcah 580 1.95 mrg 581 1.141 christos port m68k,sh3,vax 582 1.135 christos 583 1.135 christos hack gcc-4.8.1 584 1.135 christos cdate Wed Nov 6 20:41:35 EST 2013 585 1.249 rin mdate 2014/05/16 09:36:51 586 1.135 christos who christos 587 1.249 rin file src/external/gpl3/gcc/lib/libstdc++-v3/Makefile : 1.11 588 1.135 christos descr 589 1.249 rin compile the followings with -fimplicit-templates to 590 1.135 christos produce missing instantiation of std::lower_bound expansion 591 1.249 rin for unsigned long: 592 1.249 rin - concept-inst.cc 593 1.249 rin - hashtable_c++0x.cc 594 1.249 rin - bitmap_allocator.cc 595 1.135 christos kcah 596 1.22 mrg 597 1.116 mrg port sparc 598 1.116 mrg 599 1.116 mrg hack avoid NULL pointer derefs in savefpstate IPIs and GCC 4.5.3 600 1.116 mrg cdate Sun Aug 14 19:26:48 PDT 2011 601 1.116 mrg who mrg 602 1.116 mrg file sys/arch/sparc64/sparc/cpu.c : 1.234 603 1.116 mrg file sys/arch/sparc64/sparc/cpuvar.h : 1.90 604 1.116 mrg file sys/arch/sparc64/sparc/genassym.cf : 1.67 605 1.116 mrg file sys/arch/sparc64/sparc/locore.s : 1.265 606 1.116 mrg descr 607 1.116 mrg Something is wrong with GCC 4.5.3 and the savefpstate IPI. 608 1.116 mrg Post newlock2 there was a bug where a lock was reduced from 609 1.116 mrg IPL_SCHED to IPL_VM (?) and occasionally savefpstate IPI 610 1.116 mrg would crash due to NULL IPI. This was fixed by re-using the 611 1.116 mrg right IPL value. However, GCC 4.5.3 build kernels have the 612 1.116 mrg same problems. For now, the hack is re-instated. 613 1.116 mrg kcah 614 1.116 mrg 615 1.116 mrg 616 1.51 simonb port mips 617 1.51 simonb 618 1.51 simonb hack mips-shared-linker-load-address 619 1.51 simonb cdate Fri Oct 7 08:33:10 UTC 2005 620 1.51 simonb who simonb 621 1.51 simonb file src/sys/kern/exec_elf32.c : 1.107 622 1.51 simonb descr 623 1.51 simonb With COMPAT_16 or previous enabled (which enables 624 1.51 simonb ELF_INTERP_NON_RELOCATABLE) a recent ld.elf_so will 625 1.51 simonb load and run at address 0. The check to fix this in 626 1.51 simonb rev 1.107 only checks the first psection of the ELF 627 1.51 simonb executable, which may not be loadable. A more correct 628 1.51 simonb fix is to check the first loadable psection instead of 629 1.51 simonb just the first psection. 630 1.51 simonb kcah 631 1.54 he 632 1.85 martin hack mips-duplicate-ras-end-label 633 1.85 martin cdate Sat Sep 2 23:29:42 2006 634 1.85 martin who martin 635 1.92 chs file src/regress/sys/kern/ras/ras3/Makefile : 1.3 636 1.85 martin descr 637 1.85 martin Add -fno-reorder-blocks to CFLAGS to avoid duplicate 638 1.85 martin labels by duplicated __asm output from RAS_END() 639 1.85 martin macro. 640 1.85 martin kcah 641 1.85 martin 642 1.106 lukem hack mips-mcount-assembler-warning 643 1.106 lukem cdate Tue Jul 29 14:16:52 UTC 2008 644 1.106 lukem who lukem 645 1.106 lukem file src/lib/libc/gmon/Makefile.inc : 1.8 646 1.106 lukem descr 647 1.106 lukem Workaround for PR port-mips/39192. 648 1.106 lukem common/lib/libc/gmon/mcount.c generates a (fatal) 649 1.106 lukem assembler warning on MIPS: 650 1.106 lukem Warning: No .cprestore pseudo-op used in PIC code 651 1.106 lukem Add COPTS.count.c+=-Wa,--no-warn to avoid -Wa,--fatal-warnings 652 1.106 lukem kcah 653 1.106 lukem 654 1.236 martin hack mips-use-binutils-old 655 1.236 martin cdate Sun May 7 14:28:55 CEST 2023 656 1.236 martin who martin 657 1.236 martin file src/share/mk/bsd.own.mk : 1.1311, 1.1308 658 1.236 martin descr 659 1.236 martin Use binutils.old for 64bit mips with 32bit userland. 660 1.236 martin Version 2.39 causes random (cross-) build failures 661 1.236 martin that are hard to reproduce or analyze. 662 1.236 martin kcah 663 1.236 martin 664 1.82 christos port i386 665 1.82 christos 666 1.84 drochner hack use volatile intermediate variable to enforce rounding 667 1.84 drochner cdate Tue Aug 1 22:15:55 MEST 2006 668 1.84 drochner who drochner 669 1.84 drochner file src/lib/libm/src/lrintf.c : 1.4 670 1.84 drochner file src/lib/libm/src/s_rintf.c : 1.8 671 1.84 drochner descr 672 1.84 drochner gcc-4 does subsequent operations on "float" values within 673 1.84 drochner the i387 FPU without rounding the intermediate results 674 1.84 drochner kcah 675 1.110 macallan 676 1.148 christos port x86 677 1.148 christos hack turn off optimization for biosdisk_ll.c because otherwise 678 1.148 christos we are pass the wrong arguments to biosdisk_read(). 679 1.148 christos $ cd /usr/src/sys/arch/i386/floppies/bootflopp-com 680 1.148 christos $ qemu-system-i386 -nographic -fda boot-com1.fs -boot a 681 1.203 rin cdate Mon Apr 7 21:09:55 2014 UTC 682 1.148 christos who christos 683 1.148 christos file src/sys/arch/i386/stand/lib/Makefile : 1.38 684 1.148 christos descr 685 1.148 christos Turning on DISK_DEBUG shows the problem. We should find 686 1.148 christos out which option is causing this. 687 1.148 christos hcah 688 1.148 christos 689 1.110 macallan port powerpc 690 1.110 macallan 691 1.110 macallan hack avoid using __builtin_return_address(0) because it fails in 692 1.110 macallan Xorg's module loader 693 1.110 macallan cdate Sat Sep 27 03:52:05 UTC 2008 694 1.110 macallan who macallan 695 1.110 macallan file src/libexec/ld.elf_so/rtld.c : 1.121 696 1.110 macallan descr 697 1.110 macallan workaround for PR port-macppc/37812 698 1.110 macallan kcah 699 1.110 macallan 700 1.115 matt hack define TARGET_SECURE_PLT and HAVE_AS_TLS because when 701 1.115 matt building the native compiler via build.sh those don't defined 702 1.115 matt properly. 703 1.115 matt cdate Sat Mar 12 08:00:00 UTC 2011 704 1.115 matt who matt 705 1.203 rin file src/gnu/dist/gcc4/gcc/config/rs6000/netbsd.h : 1.7 706 1.115 matt descr 707 1.115 matt see above 708 1.115 matt kcah 709 1.117 christos 710 1.117 christos port powerpc64 711 1.117 christos 712 1.117 christos hack include _errno.c in libposix so that __errno resolves. It 713 1.117 christos should resolve from libc's errno, but somehow it does not. 714 1.117 christos Linker bug? 715 1.117 christos cdate Thu Oct 27 13:19:47 EDT 2011 716 1.117 christos who christos 717 1.117 christos file src/lib/libposix/Makefile: 1.15 718 1.118 christos file src/lib/librt/Makefile: 1.14 719 1.117 christos descr 720 1.117 christos workaround for: 721 1.117 christos libposix_pic.a(cerror.pico)(.text+0x14): unresolvable \ 722 1.117 christos R_PPC64_REL24 relocation against symbol `.__errno' 723 1.117 christos kcah 724 1.119 christos 725 1.119 christos hack rename data() function in mdocml to avoid redefined error. 726 1.119 christos Compiler/Assembler bug? 727 1.119 christos cdate Sat Oct 29 11:16:01 EDT 2011 728 1.119 christos who christos 729 1.119 christos file src/external/bsd/mdocml/tbl_data.c: 1.2 730 1.119 christos descr 731 1.119 christos workaround for: 732 1.119 christos {standard input}: Assembler messages: 733 1.119 christos {standard input}:105: Error: symbol `.data' is already \ 734 1.119 christos defined 735 1.119 christos kcah 736 1.120 christos 737 1.120 christos port emips 738 1.120 christos 739 1.120 christos hack Add nop between ctc1 and mtc0 to avoid assembler internal 740 1.120 christos error 741 1.120 christos cdate Sat Oct 29 16:57:34 EDT 2011 742 1.120 christos who christos 743 1.120 christos file src/sys/arch/mips/mips/mips_fpu.c: 1.7 744 1.120 christos descr 745 1.120 christos workaround for: 746 1.120 christos {standard input}: Assembler messages: 747 1.120 christos {standard input}:730: Internal error! 748 1.120 christos Assertion failure in append_insn at /usr/src/external/gpl3/\ 749 1.120 christos binutils/dist/gas/config/tc-mips.c line 2910. 750 1.120 christos kcah 751 1.125 martin 752 1.125 martin port ia64 753 1.125 martin 754 1.157 martin hack libgcc unwind dummy function 755 1.157 martin cdate Fri Apr 17 14:31:03 CEST 2015 756 1.157 martin who martin 757 1.157 martin file src/external/gpl3/gcc/dist/libgcc/config/ia64/unwind-ia64.c: 1.4 758 1.157 martin descr 759 1.157 martin Add an empty _Unwind_FindTableEntry() implementation. 760 1.157 martin In the end we will use our libc stuff, and this should 761 1.157 martin go away again. 762 1.157 martin kcah 763 1.157 martin 764 1.128 christos port x68k 765 1.127 martin 766 1.128 christos hack compiler error with gcc 4.5.x 767 1.128 christos cdate Fri May 24 13:23:01 EDT 2013 768 1.128 christos who christos 769 1.128 christos file src/external/gpl3/gcc/usr.bin/bakend/Makefile: 1.17 770 1.128 christos xsrc/external/mit/xorg/lib/libGLU/Makefile: 1.11 771 1.128 christos descr 772 1.128 christos workaround for: 773 1.128 christos internal compiler error: in cselib_record_set, at cselib.c:1999 774 1.128 christos kcah 775 1.130 joerg 776 1.130 joerg hack fallback to /usr/bin/clang-cpp in rpcgen 777 1.130 joerg cdate Wed Jun 5 15:49:27 CEST 2013 778 1.130 joerg who joerg 779 1.203 rin file src/usr.bin/rpcgen/rpc_main.c : 1.35 780 1.130 joerg descr 781 1.136 joerg It is undecided which compiler owns /usr/bin/cpp and whether it should 782 1.130 joerg exist in a MKGCC=no world. To allow rpcgen to work out-of-the-box, 783 1.130 joerg if either gcc or clang is installed, use /usr/bin/clang-cpp as fallback. 784 1.130 joerg This applies only if RPCGEN_CPP is not set and /usr/bin/cpp is not executable. 785 1.130 joerg kcah 786 1.131 skrll 787 1.155 skrll port hppa 788 1.131 skrll 789 1.131 skrll hack compiler error with gcc 4.5.x 790 1.131 skrll cdate Tue Jul 23 07:42:28 BST 2013 791 1.131 skrll who skrll 792 1.133 skrll file src/sys/lib/libkern/Makefile.libkern: 1.26 793 1.133 skrll descr 794 1.133 skrll workaround for unanalysed codegen bug affecting md5c.c. 795 1.133 skrll kcah 796 1.149 macallan 797 1.155 skrll hack gdb vs _rtld_debug_state problem 798 1.155 skrll cdate Thu Mar 5 09:49:53 UTC 2015 799 1.155 skrll who skrll 800 1.155 skrll file src/libexec/ld.elf_so/rtld.c: 1.175 801 1.155 skrll descr 802 1.155 skrll workaround for problem where gdb misses the breakpoint on 803 1.155 skrll _rtld_debug_state when the function is only the 804 1.155 skrll bv,n %r0(%rp) instruction - the nullify seems to 805 1.155 skrll confuse something 806 1.155 skrll kcah 807 1.155 skrll 808 1.149 macallan port mips64* 809 1.149 macallan hack compiler crashes on mips64* with optimization enabled 810 1.149 macallan cdate Tue May 13 18:46:48 UTC 2014 811 1.149 macallan who macallan 812 1.149 macallan file src/external/lgpl3/gmp/lib/libgmp/arch/mips64eb/Makefile.inc: 1.6 813 1.149 macallan src/external/lgpl3/gmp/lib/libgmp/arch/mips64eb/config.h: 1.5 814 1.149 macallan src/external/lgpl3/gmp/lib/libgmp/arch/mips64el/Makefile.inc: 1.6 815 1.149 macallan src/external/lgpl3/gmp/lib/libgmp/arch/mips64el/config.h: 1.5 816 1.149 macallan descr workaround for n32 gcc doing unaligned 64bit accesses when optimizing 817 1.149 macallan pr 48696 818 1.149 macallan kcah 819 1.150 martin 820 1.193 christos port sh3 821 1.193 christos hack compile parse.c in battlestar with -Wno-restrict 822 1.193 christos cdate Mon Oct 28 14:39:35 EDT 2019 823 1.193 christos who christos 824 1.193 christos file /cvsroot/src/games/battlestar/Makefile 1.11 825 1.193 christos descr fails to compile, confused by char words[][]; 826 1.193 christos strcpy(words[n - 1], words[n + 1]); 827 1.193 christos kcah 828 1.193 christos 829 1.194 christos port sh3 830 1.194 christos hack compile ddns.c in dhcpcd with no-stringop-overflow 831 1.194 christos cdate Tue Oct 29 20:25:59 EDT 2019 832 1.194 christos who christos 833 1.194 christos file /cvsroot/src/external/mpl/dhcp/bin/server/Makefile 1.2 834 1.194 christos descr fails to compile, confused by builtin_object_size in strcat(p, ".in..") 835 1.194 christos kcah 836 1.194 christos 837 1.156 matt port arm 838 1.156 matt hack avoid using labels in a 12-bit constant. 839 1.203 rin cdate Mon Mar 30 05:26:47 2015 UTC 840 1.156 matt who matt 841 1.156 matt file crypto/external/bsd/openssl/lib/libcrypto/arch/arm/aes-armv4.S: 1.2 842 1.156 matt descr workaround for clang misassembling an instruction 843 1.156 matt kcah 844 1.177 christos 845 1.177 christos port sparc64 846 1.177 christos hack during profiling with -m32 (and ASLR) labels are not generated 847 1.177 christos consistently 848 1.203 rin cdate Sat Feb 11 04:56:37 2017 UTC 849 1.177 christos who christos 850 1.177 christos file /cvsroot/src/crypto/external/bsd/heimdal/lib/libasn1/Makefile: 1.4 851 1.177 christos desc asn1_krb5_asn1.po does not produce the same results during successive 852 1.177 christos compilation runs; it is bimodal. Turning optimization to -O0 fixes 853 1.177 christos the issue 854 1.177 christos kcah 855 1.187 scole 856 1.187 scole port ia64 857 1.187 scole hack ski emulator crashes 858 1.203 rin cdate Sat Apr 8 18:10:43 2017 UTC 859 1.187 scole who scole 860 1.187 scole file /cvsroot/src/sys/external/bsd/acpica/dist/tables/tbxfload.c: 1.6 861 1.187 scole desc 862 1.187 scole ski emulator crashes during acpi detection. Added a check for 863 1.187 scole uninitialized index. Submitted a request for change with upstream 864 1.187 scole mailing list, but never got a response 865 1.187 scole kcah 866 1.189 christos 867 1.197 christos port powerpc 868 1.199 christos hack compile tc.c, logerr.c, ubsan.c with -O0 for clang 869 1.197 christos cdate Wed Jan 29 17:40:19 EST 2020 870 1.197 christos who christos 871 1.197 christos file src/external/bsd/atf/lib/libatf-c/Makefile: 1.22 872 1.198 christos file src/external/bsd/dhcpcd/sbin/dhcpcd/Makefile: 1.49 873 1.199 christos file src/tests/lib/libc/misc/Makefile: 1.5 874 1.199 christos 875 1.199 christos descr Disable optimization on tc.c, logerr.c, ubsan.c crashes: 876 1.197 christos lib/libLLVMCodeGen/../../llvm/../../external/apache2/llvm/lib/..\ 877 1.197 christos /dist/llvm/include/llvm/CodeGen/MachineFrameInfo.h", line 495, \ 878 1.197 christos function "__int64_t llvm::MachineFrameInfo::getObjectOffset(int) const" 879 1.197 christos kcah 880 1.202 rin 881 1.208 rin port m68k 882 1.230 rin hack compile aes_ccm_tag() with -O0 883 1.208 rin cdate Mon Aug 10 06:27:29 UTC 2020 884 1.230 rin mdate Wed Aug 10 00:00:00 UTC 2022 885 1.208 rin who rin 886 1.208 rin file src/sys/crypto/aes/aes_ccm.c: 1.5 887 1.211 rin descr GCC 9.4 and 8.3 miscompile aes_ccm_tag() for m68k with optimization 888 1.211 rin level -O[12], which results in failure in aes_ccm_selftest(). 889 1.211 rin For 9.4, -O0 and -O1 work but -O2 fails for amiga (A1200, 68060) and 890 1.211 rin mac68k (Quadra 840AV, 68040). Whereas -O0 and -O2 work but -O1 fails 891 1.211 rin for sun3 (TME, 68020 emulator) and sun2 (TME, 68010 emulator). 892 1.230 rin aes_ccm_selftest() still fails with GCC 10.4 and -O2. 893 1.208 rin kcah 894 1.217 christos 895 1.219 martin port sh3 896 1.219 martin 897 1.219 martin hack gcc9-sh3-lint 898 1.219 martin cdate Tue Jun 22 14:59:52 CEST 2021 899 1.221 hgutch mdate Mon Jul 5 12:34:57 CEST 2021 900 1.221 hgutch who hgutch 901 1.221 hgutch file external/gpl3/gcc/dist/gcc/config/sh/sh.md 1.2 902 1.221 hgutch external/gpl3/gcc.old/dist/gcc/config/sh/sh.md 1.11 903 1.221 hgutch descr 904 1.221 hgutch The in-tree gcc 9/gcc 10 crashes with an internal 905 1.221 hgutch invalid opcode exception when using any kind of 906 1.221 hgutch optimization on lex.c in usr.bin/xlint/lint . This 907 1.221 hgutch was introduced apparently unintendedly in gcc when 908 1.221 hgutch addressing a different issue. Rather than disabling 909 1.221 hgutch optimization for lex.c, instead revert the change to 910 1.221 hgutch gcc. The bug report upstream has been updated to 911 1.221 hgutch reflect the exact breakage. 912 1.221 hgutch 913 1.220 rillig https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101177 914 1.219 martin kcah 915 1.223 rin 916 1.226 thorpej port arm 917 1.226 thorpej hack compile t_sig_backtrace with -fno-omit-frame-pointer for arm 918 1.226 thorpej cdate Tue Nov 23 23:24:37 UTC 2021 919 1.226 thorpej mdate Tue Nov 23 23:24:37 UTC 2021 920 1.226 thorpej who thorpej 921 1.226 thorpej file src/tests/lib/libexecinfo/Makefile: 1.8 922 1.226 thorpej file src/tests/lib/libexecinfo/t_sig_backtrace: 1.2 923 1.226 thorpej descr Unit test fails to pass unless t_sig_backtrace.c is compiled 924 1.226 thorpej with -fno-omit-frame-pointer and -DNOINLINE_HACK. 925 1.226 thorpej kcah 926 1.227 martin 927 1.227 martin hack alpha gcc error in lint 928 1.227 martin cdate 2022/04/10 13:21:34 929 1.227 martin who martin 930 1.241 martin port alpha, vax 931 1.241 martin file usr.bin/xlint/Makefile.inc: 1.23, 1.25 932 1.227 martin pr 56789 933 1.227 martin descr 934 1.227 martin Compiling lint with -ftrapv fails with an internal 935 1.227 martin gcc compiler error. 936 1.228 rillig 937 1.228 rillig https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105209 938 1.241 martin 939 1.241 martin Supposedly fixed in gcc 11 or newer. 940 1.227 martin kcah 941 1.231 rin 942 1.231 rin hack compile copy{in,out}() for ibm4xx with -O0 for clang 943 1.231 rin cdate Mon Sep 12 08:06:36 UTC 2022 944 1.231 rin who rin 945 1.231 rin port evbppc 946 1.231 rin file sys/arch/powerpc/ibm4xx/trap.c: 1.99 947 1.231 rin descr 948 1.231 rin clang 13.0.0 miscompiles copy{in,out}() with -O[12]. As a result, 949 1.231 rin kernel cannot execute /sbin/init. 950 1.231 rin kcah 951 1.237 rin 952 1.238 rin hack openssl: Disable ec_nistp_64_gcc_128 on aarch64eb 953 1.238 rin cdate Sat Jul 8 23:54:27 UTC 2023 954 1.238 rin who rin 955 1.238 rin port aarch64eb 956 1.238 rin file src/crypto/external/bsd/openssl/lib/libcrypto/arch/aarch64/ec.inc : 1.4 957 1.238 rin descr 958 1.238 rin As described in upstream document: 959 1.238 rin https://github.com/openssl/openssl/blob/master/INSTALL.md#enable-ec_nistp_64_gcc_128 960 1.238 rin This feature (for LP64) does not support big-endian machines. 961 1.238 rin Note that sparc64 does not use this (port-sparc64/57472). 962 1.238 rin kcah 963 1.240 mrg 964 1.240 mrg hack GCC: Disable "-Warray-bounds" for x86 curcpu() and curlwp() 965 1.240 mrg cdate Mon Sep 4 13:59:32 PDT 2023 966 1.240 mrg who mrg 967 1.240 mrg port i386 amd64 968 1.240 mrg file src/sys/arch/amd64/include/cpu.h : 1.71 969 1.240 mrg file src/sys/arch/i386/include/cpu.h : 1.184 970 1.240 mrg descr 971 1.240 mrg These functions trigger eg: 972 1.240 mrg ./machine/cpu.h:57:9: error: array subscript 0 is outside array bounds of 'struct cpu_info * const[0]' [-Werror=array-bounds] 973 1.240 mrg 56 | __asm("movq %%gs:%1, %0" : 974 1.240 mrg and can't easily be worked around. 975 1.240 mrg kcah 976 1.242 christos 977 1.242 christos hack ctfconvert/gcc: disable gcc dwarf-4 generation 978 1.242 christos cdate Thu Apr 4 19:51:05 EDT 2024 979 1.242 christos who christos 980 1.242 christos file src/external/mit/xorg/lib/gallium.old/Makefile : 1.9 981 1.242 christos descr 982 1.242 christos Some files create dwarf info that our ctfmerge can't handle. 983 1.242 christos We downgrade dwarf generation to version 3 which works. 984 1.242 christos kcah 985 1.243 riastrad 986 1.243 riastrad hack ia64: work around feclearexcept/fetestexcept compiler bug 987 1.243 riastrad cdate Sun May 5 23:06:10 UTC 2024 988 1.243 riastrad who riastradh 989 1.243 riastrad file tests/lib/libm/t_fe_round.c 990 1.243 riastrad descr 991 1.243 riastrad Without judiciously placed __insn_barrier, we get: 992 1.243 riastrad /tmp//ccJayu9g.s:2793: Warning: Use of 'mov.m' violates RAW dependency 'AR[FPSR].sf0.flags' (impliedf) 993 1.243 riastrad /tmp//ccJayu9g.s:2793: Warning: Only the first path encountering the conflict is reported 994 1.243 riastrad /tmp//ccJayu9g.s:2757: Warning: This is the location of the conflicting usage 995 1.243 riastrad kcah 996 1.245 mrg 997 1.245 mrg hack m68k: work around stack protector m68k compiler bug 998 1.245 mrg cdate Thu Jun 6 15:53:21 PDT 2024 999 1.253 rin udate Tue May 6 13:00:40 UTC 2025 1000 1.245 mrg port m68k 1001 1.247 rin who mrg, rin 1002 1.245 mrg file lib/libc/stdlib/strsuftoll.c : 1.10 1003 1.245 mrg file lib/libc/citrus/citrus_module.c : 1.14 1004 1.245 mrg file crypto/external/bsd/openssl/lib/libcrypto/blake2.inc : 1.3 1005 1.247 rin file crypto/external/bsd/openssl/lib/libcrypto/sha.inc : 1.8 1006 1.247 rin file external/mit/xorg/lib/freetype/Makefile : 1.26 1007 1.247 rin file external/mit/xorg/lib/gallium/Makefile : 1.56 1008 1.253 rin file external/mit/xorg/lib/libXfont2/Makefile : 1.13 1009 1.245 mrg descr 1010 1.245 mrg With GCC 12, strsuftoll() triggers an stack protector issue 1011 1.245 mrg that does not appear to be valid. _citrus_find_getops() does 1012 1.245 mrg the same. They both have minimal stack usage themselves and 1013 1.245 mrg I suspect a GCC bug. 1014 1.247 rin Other cases are less well studied. 1015 1.245 mrg kcah 1016 1.246 riastrad 1017 1.246 riastrad hack gcc: work around alignment limitations in ld.elf_so 1018 1.246 riastrad cdate Mon Jun 17 23:35:52 UTC 2024 1019 1.246 riastrad who riastradh 1020 1.246 riastrad file external/gpl3/gcc/dist/libsanitizer/tsan/tsan_interceptors_posix.cpp : 1.4 1021 1.246 riastrad file src/external/gpl3/gcc/dist/libsanitizer/tsan/tsan_rtl.cpp : 1.4 1022 1.246 riastrad file external/gpl3/gcc/dist/libsanitizer/tsan/tsan_rtl.h : 1.5 1023 1.246 riastrad descr 1024 1.246 riastrad ld.elf_so only supports 2*pointer-aligned objects (typically 1025 1.246 riastrad 8- or 16-byte) in thread-local storage, but tsan expects 1026 1.246 riastrad cacheline-aligned objects (typically >=64-byte). To work 1027 1.246 riastrad around this, allocate n + 63 bytes and pick whichever pointer 1028 1.246 riastrad in that interval is aligned (PR lib/58349). 1029 1.246 riastrad kcah 1030 1.254 christos 1031 1.254 christos hack ia64: work around bogus compiler warning 1032 1.254 christos cdate Thu Aug 28 11:46:54 EDT 2025 1033 1.254 christos who christos 1034 1.254 christos file src/external/bsd/acpica/bin/iasl/Makefile : 1.28 1035 1.254 christos descr 1036 1.254 christos after a pointer cast from with a member of size 4 to another 1037 1.254 christos struct with a member of size 8, the compiler thinks still that 1038 1.254 christos the size is 4 in the strncmp expression, but it also thinks 1039 1.254 christos it is 8 everywhere else. 1040 1.254 christos kcah 1041 1.255 rin 1042 1.255 rin hack ld 2.45: Put back .note sections to segment same as .interp 1043 1.255 rin cdate Tue Sep 2 08:11:49 UTC 2025 1044 1.255 rin who rin 1045 1.255 rin file src/external/gpl3/binutils/dist/ld/scripttempl/elf.sc : 1.15 1046 1.255 rin descr 1047 1.255 rin Effectively reverts the following upstream commits: 1048 1.255 rin 1049 1.255 rin (1) https://sourceware.org/git/?p=binutils-gdb.git;a=commit;h=7ecf0250f7f 1050 1.255 rin (2) https://sourceware.org/git/?p=binutils-gdb.git;a=commit;h=023e60ced0c 1051 1.255 rin 1052 1.255 rin Otherwise, .note lies behind .eh_frame section, and the latter 1053 1.255 rin cannot be removed by strip(1). This results in regression for 1054 1.255 rin sizes of crunched binaries. 1055 1.255 rin 1056 1.255 rin The problem has been reported to upstream: 1057 1.255 rin 1058 1.255 rin https://sourceware.org/bugzilla/show_bug.cgi?id=33344 1059 1.255 rin kcah 1060 1.258 christos 1061 1.258 christos hack libxft: gcc-14 bogus error diagnostic 1062 1.258 christos cdate Sat Sep 20 08:33:22 EDT 2025 1063 1.258 christos who christos 1064 1.258 christos file xsrc/external/mit/libXft/dist/src/xftrender.c : 1.2 1065 1.258 christos descr 1066 1.258 christos gcc-14 thinks that the needed size for malloc is 1067 1.258 christos 0x7fffffffffffffff. Add a conditional before that to bail 1068 1.258 christos if it is larger than UINT_MAX / 2, so teach it that it is not. 1069 1.258 christos kcah 1070