HACKS revision 1.201 1 # $NetBSD: HACKS,v 1.201 2020/04/12 17:49:00 leot 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
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
411 who tsutsui
412 file sys/arch/vax/conf/Makefile.vax
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
508 file distrib/vax/miniroot/Makefile.inc
509 file distrib/vax/ramdisk/Makefile
510 file external/gpl3/gdb/lib/libdecnumber/Makefile
511 file sbin/fsdb/Makefile
512 file sbin/newfs_ext2fs/Makefile
513 file sbin/ping/Makefile
514 file usr.sbin/lmcconfig/Makefile
515 file usr.sbin/mtrace/Makefile
516 descr
517 external/gpl3/gcc/dist/gcc/expmed.c:2781:1:
518 internal compiler error: in change_address_1, at emit-rtl.c:2019
519 external/gpl3/gcc/dist/gcc/recog.c:770:1:
520 internal compiler error: in change_address_1, at emit-rtl.c:2019
521 external/gpl3/gcc/dist/libdecnumber/decNumber.c:7214:3:
522 internal compiler error: in change_address_1, at emit-rtl.c:2019
523 sbin/ping/ping.c:679:1:
524 internal compiler error: in change_address_1, at emit-rtl.c:2019
525 sbin/newfs_ext2fs/mke2fs.c:681:1:
526 internal compiler error: in reload_combine_note_use,
527 at postreload.c:1561
528 external/gpl3/gdb/dist/libdecnumber/decNumber.c:7214:3:
529 internal compiler error: in change_address_1, at emit-rtl.c:2019
530 usr.sbin/lmcconfig/lmcconfig.c:939:3:
531 internal compiler error: in reload_combine_note_use,
532 at postreload.c:1561
533 usr.sbin/mtrace/mtrace.c:1655:1:
534 internal compiler error: in change_address_1, at emit-rtl.c:2019
535 kcah
536
537 hack gcc 5.4 cc1 miscompile
538 date Tue Feb 14 07:19:57 JST 2017
539 who rin
540 pr port-vax/51967
541 file external/gpl3/gcc/usr.bin/backend/Makefile : 1.35
542 descr
543 cc1 aborts due to SIGILL when compiling the sample code attached
544 to the PR. As a workaround, compile dse.c with -O0.
545 kcah
546
547 hack libssh miscompile
548 cdate Tue Feb 14 17:58:06 JST 2017
549 mdate Tue Feb 14 18:57:39 JST 2017
550 who rin
551 file crypto/external/bsd/openssh/lib/Makefile : 1.20
552 descr
553 poly1305.c and umac.c are miscompiled, which results in login
554 failure to/from external hosts via ssh.
555 kcah
556
557 hack mandoc miscompile
558 date Tue Feb 14 18:03:05 JST 2017
559 who rin
560 file external/bsd/mdocml/lib/libmandoc/Makefile : 1.8
561 descr
562 mandoc(1) receives SIGILL in in_line_argn() from mdoc_macro.c.
563 kcah
564
565 hack libX11 miscompile
566 date Thu Feb 16 10:00:22 JST 2017
567 who rin
568 file src/external/mit/xorg/lib/libX11/Makefile.libx11 : 1.18
569 descr
570 lcWrap.c is miscompiled, which results in input failure via XIM.
571 Besides, some clients, e.g., pkgsrc/x11/kterm, receive SIGSEGV.
572 kcah
573
574 port arm
575
576 hack gcc-unsigned-compare
577 cdate 09 Mar 2002
578 mdate 18 Mar 2002
579 who bjh21
580 file dist/bind/lib/nameser/ns_parse.c : 1.3
581 file dist/dhcp/minires/ns_parse.c : 1.3
582 file dist/dhcp/omapip/result.c : 1.2
583 file dist/dhcp/server/failover.c : 1.3
584 file gnu/dist/toolchain/bfd/bfd.c : 1.2
585 file gnu/dist/toolchain/bfd/format.c : 1.2
586 file gnu/dist/toolchain/gdb/target.c : 1.2
587 file sys/kern/vfs_subr.c : 1.172
588 descr When checking that a potentially-unsigned enum is >= 0, assign
589 it to an int first. This is necessary to avoid "comparison is
590 always true" warnings with -fshort-enums. Casting to an int
591 really should be enough, but turns out not to be.
592 kcah
593
594 hack gcc-4.5 arm CNAME hostname lookup failure on
595 certain DNS environment (probably -ftree-ter problem)
596 cdate Sat Dec 24 04:59:00 UTC 2011
597 mdate
598 who tsutsui
599 file lib/libc/net/Makefile.inc 1.79
600 descr Hostname lookup against CNAMEs by some commands fails
601 on certain DNS environments if lib/libc/net/gethnamaddr.c
602 (ping(8) etc) and lib/libc/net/getaddrinfo.c (ftp(1) etc)
603 are compiled with -O2, even though nslookup(1) against
604 the same CNAME returns proper hostname.
605 They works properly if compiled with -O2 -fno-tree-ter.
606 Also -O2 fails but -O2 -fno-tree-ter works on the following
607 test case in gcc bugzilla:
608 http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48863#c4
609 kcah
610
611 hack gcc-4.5 arm without -fno-tree-vrp generate broken code
612 cdate Wed Nov 14 13:02:02 JST 2012
613 who msaitoh
614 file lib/libc/softfloat/Makefile.inc
615 pr 46953
616 regress src/tests/lib/libm/t_cbrt
617 regress src/tests/lib/libm/t_ceil
618 regress src/tests/lib/libm/t_exp
619 regress src/tests/lib/libm/t_log
620 regress src/tests/lib/libm/t_scalbn
621 regress src/tests/lib/libm/t_sinh
622 regress src/tests/lib/libm/t_sqrt
623 descr Gcc has a bug in tree optimization. For adddf3,
624 -INF + -INF returns 0 without -fno-tree-vrp.
625 Debugging with -fdump-tree-all shows that
626 softfloat.c.021t.cleanup_cfg is ok but softfloat.c.023t.ssa
627 is broken.
628 kcah
629
630 port sh3
631
632 hack gcc4-sh3-bz2
633 cdate Sun May 21 03:34:57 UTC 2006
634 mdate Fri May 16 13:13:00 UTC 2008
635 who mrg, tsutsui
636 file lib/libbz2/Makefile : 1.10
637 descr
638 The in-tree GCC 4.1-based compiler generated too-far
639 pc-relative addresses. Hack is to build with
640 -fno-loop-optimize.
641 kcah
642
643 port m68000
644
645 hack gcc4-m68000
646 cdate Fri Feb 8 10:29:37 PST 2008
647 mdate Sun May 4 15:37:19 UTC 2008
648 who mrg, tsutsui
649 file rescue/Makefile : 1.21
650 file sbin/dump_lfs/Makefile : 1.9
651 file sbin/fsck_ffs/Makefile : 1.35
652 file sbin/fsdb/Makefile : 1.22
653 file share/mk/sys.mk : 1.96
654 file usr.sbin/ndbootd/Makefile : 1.5
655 descr
656 Several internal compiler errors with gcc -O1
657 around 64bit integer arithmetic.
658 This hack uses -O1 and adds some -fno-tree-foo options
659 to avoid the problem.
660 This might be related with GCC Bugzilla Bug 32424.
661 kcah
662
663 port m68k,sh3,vax
664
665 hack gcc-4.8.1
666 cdate Wed Nov 6 20:41:35 EST 2013
667 who christos
668 file src/external/gpl3/gcc/libstdc++-v3/Makefile : 1.6
669 descr
670 compile hashtable_c++0x.cc with -O2 instead of -Os to
671 produce missing instantiation of std::lower_bound expansion
672 for unsigned long.
673 kcah
674
675 port sparc
676
677 hack avoid NULL pointer derefs in savefpstate IPIs and GCC 4.5.3
678 cdate Sun Aug 14 19:26:48 PDT 2011
679 who mrg
680 file sys/arch/sparc64/sparc/cpu.c : 1.234
681 file sys/arch/sparc64/sparc/cpuvar.h : 1.90
682 file sys/arch/sparc64/sparc/genassym.cf : 1.67
683 file sys/arch/sparc64/sparc/locore.s : 1.265
684 descr
685 Something is wrong with GCC 4.5.3 and the savefpstate IPI.
686 Post newlock2 there was a bug where a lock was reduced from
687 IPL_SCHED to IPL_VM (?) and occasionally savefpstate IPI
688 would crash due to NULL IPI. This was fixed by re-using the
689 right IPL value. However, GCC 4.5.3 build kernels have the
690 same problems. For now, the hack is re-instated.
691 kcah
692
693
694 port mips
695
696 hack mips-shared-linker-load-address
697 cdate Fri Oct 7 08:33:10 UTC 2005
698 who simonb
699 file src/sys/kern/exec_elf32.c : 1.107
700 descr
701 With COMPAT_16 or previous enabled (which enables
702 ELF_INTERP_NON_RELOCATABLE) a recent ld.elf_so will
703 load and run at address 0. The check to fix this in
704 rev 1.107 only checks the first psection of the ELF
705 executable, which may not be loadable. A more correct
706 fix is to check the first loadable psection instead of
707 just the first psection.
708 kcah
709
710 hack mips-duplicate-ras-end-label
711 cdate Sat Sep 2 23:29:42 2006
712 who martin
713 file src/regress/sys/kern/ras/ras3/Makefile : 1.3
714 descr
715 Add -fno-reorder-blocks to CFLAGS to avoid duplicate
716 labels by duplicated __asm output from RAS_END()
717 macro.
718 kcah
719
720 hack mips-mcount-assembler-warning
721 cdate Tue Jul 29 14:16:52 UTC 2008
722 who lukem
723 file src/lib/libc/gmon/Makefile.inc : 1.8
724 descr
725 Workaround for PR port-mips/39192.
726 common/lib/libc/gmon/mcount.c generates a (fatal)
727 assembler warning on MIPS:
728 Warning: No .cprestore pseudo-op used in PIC code
729 Add COPTS.count.c+=-Wa,--no-warn to avoid -Wa,--fatal-warnings
730 kcah
731
732 port i386
733
734 hack use volatile intermediate variable to enforce rounding
735 cdate Tue Aug 1 22:15:55 MEST 2006
736 who drochner
737 file src/lib/libm/src/lrintf.c : 1.4
738 file src/lib/libm/src/s_rintf.c : 1.8
739 descr
740 gcc-4 does subsequent operations on "float" values within
741 the i387 FPU without rounding the intermediate results
742 kcah
743
744 port x86
745 hack turn off optimization for biosdisk_ll.c because otherwise
746 we are pass the wrong arguments to biosdisk_read().
747 $ cd /usr/src/sys/arch/i386/floppies/bootflopp-com
748 $ qemu-system-i386 -nographic -fda boot-com1.fs -boot a
749 who christos
750 file src/sys/arch/i386/stand/lib/Makefile : 1.38
751 descr
752 Turning on DISK_DEBUG shows the problem. We should find
753 out which option is causing this.
754 hcah
755
756 port powerpc
757
758 hack avoid using __builtin_return_address(0) because it fails in
759 Xorg's module loader
760 cdate Sat Sep 27 03:52:05 UTC 2008
761 who macallan
762 file src/libexec/ld.elf_so/rtld.c : 1.121
763 descr
764 workaround for PR port-macppc/37812
765 kcah
766
767 hack define TARGET_SECURE_PLT and HAVE_AS_TLS because when
768 building the native compiler via build.sh those don't defined
769 properly.
770 cdate Sat Mar 12 08:00:00 UTC 2011
771 who matt
772 file src/gnu/dist/gcc4/gcc/config/rs6000/netbsd.h
773 descr
774 see above
775 kcah
776
777 port powerpc64
778
779 hack include _errno.c in libposix so that __errno resolves. It
780 should resolve from libc's errno, but somehow it does not.
781 Linker bug?
782 cdate Thu Oct 27 13:19:47 EDT 2011
783 who christos
784 file src/lib/libposix/Makefile: 1.15
785 file src/lib/librt/Makefile: 1.14
786 descr
787 workaround for:
788 libposix_pic.a(cerror.pico)(.text+0x14): unresolvable \
789 R_PPC64_REL24 relocation against symbol `.__errno'
790 kcah
791
792 hack rename data() function in mdocml to avoid redefined error.
793 Compiler/Assembler bug?
794 cdate Sat Oct 29 11:16:01 EDT 2011
795 who christos
796 file src/external/bsd/mdocml/tbl_data.c: 1.2
797 descr
798 workaround for:
799 {standard input}: Assembler messages:
800 {standard input}:105: Error: symbol `.data' is already \
801 defined
802 kcah
803
804 port emips
805
806 hack Add nop between ctc1 and mtc0 to avoid assembler internal
807 error
808 cdate Sat Oct 29 16:57:34 EDT 2011
809 who christos
810 file src/sys/arch/mips/mips/mips_fpu.c: 1.7
811 descr
812 workaround for:
813 {standard input}: Assembler messages:
814 {standard input}:730: Internal error!
815 Assertion failure in append_insn at /usr/src/external/gpl3/\
816 binutils/dist/gas/config/tc-mips.c line 2910.
817 kcah
818
819 port ia64
820
821 hack libgcc unwind dummy function
822 cdate Fri Apr 17 14:31:03 CEST 2015
823 who martin
824 file src/external/gpl3/gcc/dist/libgcc/config/ia64/unwind-ia64.c: 1.4
825 descr
826 Add an empty _Unwind_FindTableEntry() implementation.
827 In the end we will use our libc stuff, and this should
828 go away again.
829 kcah
830
831 port x68k
832
833 hack compiler error with gcc 4.5.x
834 cdate Fri May 24 13:23:01 EDT 2013
835 who christos
836 file src/external/gpl3/gcc/usr.bin/bakend/Makefile: 1.17
837 xsrc/external/mit/xorg/lib/libGLU/Makefile: 1.11
838 descr
839 workaround for:
840 internal compiler error: in cselib_record_set, at cselib.c:1999
841 kcah
842
843 hack fallback to /usr/bin/clang-cpp in rpcgen
844 cdate Wed Jun 5 15:49:27 CEST 2013
845 who joerg
846 file src/usr.bin/rpcgen/rpc_main.c
847 descr
848 It is undecided which compiler owns /usr/bin/cpp and whether it should
849 exist in a MKGCC=no world. To allow rpcgen to work out-of-the-box,
850 if either gcc or clang is installed, use /usr/bin/clang-cpp as fallback.
851 This applies only if RPCGEN_CPP is not set and /usr/bin/cpp is not executable.
852 kcah
853
854 port hppa
855
856 hack compiler error with gcc 4.5.x
857 cdate Tue Jul 23 07:42:28 BST 2013
858 who skrll
859 file src/sys/lib/libkern/Makefile.libkern: 1.26
860 descr
861 workaround for unanalysed codegen bug affecting md5c.c.
862 kcah
863
864 hack gdb vs _rtld_debug_state problem
865 cdate Thu Mar 5 09:49:53 UTC 2015
866 who skrll
867 file src/libexec/ld.elf_so/rtld.c: 1.175
868 descr
869 workaround for problem where gdb misses the breakpoint on
870 _rtld_debug_state when the function is only the
871 bv,n %r0(%rp) instruction - the nullify seems to
872 confuse something
873 kcah
874
875 port mips64*
876 hack compiler crashes on mips64* with optimization enabled
877 cdate Tue May 13 18:46:48 UTC 2014
878 who macallan
879 file src/external/lgpl3/gmp/lib/libgmp/arch/mips64eb/Makefile.inc: 1.6
880 src/external/lgpl3/gmp/lib/libgmp/arch/mips64eb/config.h: 1.5
881 src/external/lgpl3/gmp/lib/libgmp/arch/mips64el/Makefile.inc: 1.6
882 src/external/lgpl3/gmp/lib/libgmp/arch/mips64el/config.h: 1.5
883 descr workaround for n32 gcc doing unaligned 64bit accesses when optimizing
884 pr 48696
885 kcah
886
887 port vax
888 hack compile boot with -O1
889 cdate Sat May 24 09:40:58 CEST 2014
890 who martin
891 file src/sys/arch/vax/boot/boot/Makefile: 1.41
892 descr /boot does not work when compiled with -O2 and gcc 4.8
893 kcah
894
895 port vax
896 hack compile nir.c in gallium with -O1
897 cdate Mon Oct 28 14:39:35 EDT 2019
898 who christos
899 file /cvsroot/src/external/mit/xorg/lib/gallium/Makefile 1.36
900 descr gallium does not compile.
901 kcah
902
903 port sh3
904 hack compile parse.c in battlestar with -Wno-restrict
905 cdate Mon Oct 28 14:39:35 EDT 2019
906 who christos
907 file /cvsroot/src/games/battlestar/Makefile 1.11
908 descr fails to compile, confused by char words[][];
909 strcpy(words[n - 1], words[n + 1]);
910 kcah
911
912 port sh3
913 hack compile ddns.c in dhcpcd with no-stringop-overflow
914 cdate Tue Oct 29 20:25:59 EDT 2019
915 who christos
916 file /cvsroot/src/external/mpl/dhcp/bin/server/Makefile 1.2
917 descr fails to compile, confused by builtin_object_size in strcat(p, ".in..")
918 kcah
919
920 port arm
921 hack avoid using labels in a 12-bit constant.
922 who matt
923 file crypto/external/bsd/openssl/lib/libcrypto/arch/arm/aes-armv4.S: 1.2
924 descr workaround for clang misassembling an instruction
925 kcah
926
927 port sparc64
928 hack during profiling with -m32 (and ASLR) labels are not generated
929 consistently
930 who christos
931 file /cvsroot/src/crypto/external/bsd/heimdal/lib/libasn1/Makefile: 1.4
932 desc asn1_krb5_asn1.po does not produce the same results during successive
933 compilation runs; it is bimodal. Turning optimization to -O0 fixes
934 the issue
935 kcah
936
937 port ia64
938 hack ski emulator crashes
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