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