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