HACKS revision 1.205 1 # $NetBSD: HACKS,v 1.205 2020/04/30 12:44:41 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 port sh3
608
609 hack gcc4-sh3-bz2
610 cdate Sun May 21 03:34:57 UTC 2006
611 mdate Fri May 16 13:13:00 UTC 2008
612 who mrg, tsutsui
613 file lib/libbz2/Makefile : 1.10
614 descr
615 The in-tree GCC 4.1-based compiler generated too-far
616 pc-relative addresses. Hack is to build with
617 -fno-loop-optimize.
618 kcah
619
620 port m68000
621
622 hack gcc4-m68000
623 cdate Fri Feb 8 10:29:37 PST 2008
624 mdate Sun May 4 15:37:19 UTC 2008
625 who mrg, tsutsui
626 file rescue/Makefile : 1.21
627 file sbin/dump_lfs/Makefile : 1.9
628 file sbin/fsck_ffs/Makefile : 1.35
629 file sbin/fsdb/Makefile : 1.22
630 file share/mk/sys.mk : 1.96
631 file usr.sbin/ndbootd/Makefile : 1.5
632 descr
633 Several internal compiler errors with gcc -O1
634 around 64bit integer arithmetic.
635 This hack uses -O1 and adds some -fno-tree-foo options
636 to avoid the problem.
637 This might be related with GCC Bugzilla Bug 32424.
638 kcah
639
640 port m68k,sh3,vax
641
642 hack gcc-4.8.1
643 cdate Wed Nov 6 20:41:35 EST 2013
644 who christos
645 file src/external/gpl3/gcc/libstdc++-v3/Makefile : 1.6
646 descr
647 compile hashtable_c++0x.cc with -O2 instead of -Os to
648 produce missing instantiation of std::lower_bound expansion
649 for unsigned long.
650 kcah
651
652 port sparc
653
654 hack avoid NULL pointer derefs in savefpstate IPIs and GCC 4.5.3
655 cdate Sun Aug 14 19:26:48 PDT 2011
656 who mrg
657 file sys/arch/sparc64/sparc/cpu.c : 1.234
658 file sys/arch/sparc64/sparc/cpuvar.h : 1.90
659 file sys/arch/sparc64/sparc/genassym.cf : 1.67
660 file sys/arch/sparc64/sparc/locore.s : 1.265
661 descr
662 Something is wrong with GCC 4.5.3 and the savefpstate IPI.
663 Post newlock2 there was a bug where a lock was reduced from
664 IPL_SCHED to IPL_VM (?) and occasionally savefpstate IPI
665 would crash due to NULL IPI. This was fixed by re-using the
666 right IPL value. However, GCC 4.5.3 build kernels have the
667 same problems. For now, the hack is re-instated.
668 kcah
669
670
671 port mips
672
673 hack mips-shared-linker-load-address
674 cdate Fri Oct 7 08:33:10 UTC 2005
675 who simonb
676 file src/sys/kern/exec_elf32.c : 1.107
677 descr
678 With COMPAT_16 or previous enabled (which enables
679 ELF_INTERP_NON_RELOCATABLE) a recent ld.elf_so will
680 load and run at address 0. The check to fix this in
681 rev 1.107 only checks the first psection of the ELF
682 executable, which may not be loadable. A more correct
683 fix is to check the first loadable psection instead of
684 just the first psection.
685 kcah
686
687 hack mips-duplicate-ras-end-label
688 cdate Sat Sep 2 23:29:42 2006
689 who martin
690 file src/regress/sys/kern/ras/ras3/Makefile : 1.3
691 descr
692 Add -fno-reorder-blocks to CFLAGS to avoid duplicate
693 labels by duplicated __asm output from RAS_END()
694 macro.
695 kcah
696
697 hack mips-mcount-assembler-warning
698 cdate Tue Jul 29 14:16:52 UTC 2008
699 who lukem
700 file src/lib/libc/gmon/Makefile.inc : 1.8
701 descr
702 Workaround for PR port-mips/39192.
703 common/lib/libc/gmon/mcount.c generates a (fatal)
704 assembler warning on MIPS:
705 Warning: No .cprestore pseudo-op used in PIC code
706 Add COPTS.count.c+=-Wa,--no-warn to avoid -Wa,--fatal-warnings
707 kcah
708
709 port i386
710
711 hack use volatile intermediate variable to enforce rounding
712 cdate Tue Aug 1 22:15:55 MEST 2006
713 who drochner
714 file src/lib/libm/src/lrintf.c : 1.4
715 file src/lib/libm/src/s_rintf.c : 1.8
716 descr
717 gcc-4 does subsequent operations on "float" values within
718 the i387 FPU without rounding the intermediate results
719 kcah
720
721 port x86
722 hack turn off optimization for biosdisk_ll.c because otherwise
723 we are pass the wrong arguments to biosdisk_read().
724 $ cd /usr/src/sys/arch/i386/floppies/bootflopp-com
725 $ qemu-system-i386 -nographic -fda boot-com1.fs -boot a
726 cdate Mon Apr 7 21:09:55 2014 UTC
727 who christos
728 file src/sys/arch/i386/stand/lib/Makefile : 1.38
729 descr
730 Turning on DISK_DEBUG shows the problem. We should find
731 out which option is causing this.
732 hcah
733
734 port powerpc
735
736 hack avoid using __builtin_return_address(0) because it fails in
737 Xorg's module loader
738 cdate Sat Sep 27 03:52:05 UTC 2008
739 who macallan
740 file src/libexec/ld.elf_so/rtld.c : 1.121
741 descr
742 workaround for PR port-macppc/37812
743 kcah
744
745 hack define TARGET_SECURE_PLT and HAVE_AS_TLS because when
746 building the native compiler via build.sh those don't defined
747 properly.
748 cdate Sat Mar 12 08:00:00 UTC 2011
749 who matt
750 file src/gnu/dist/gcc4/gcc/config/rs6000/netbsd.h : 1.7
751 descr
752 see above
753 kcah
754
755 port powerpc64
756
757 hack include _errno.c in libposix so that __errno resolves. It
758 should resolve from libc's errno, but somehow it does not.
759 Linker bug?
760 cdate Thu Oct 27 13:19:47 EDT 2011
761 who christos
762 file src/lib/libposix/Makefile: 1.15
763 file src/lib/librt/Makefile: 1.14
764 descr
765 workaround for:
766 libposix_pic.a(cerror.pico)(.text+0x14): unresolvable \
767 R_PPC64_REL24 relocation against symbol `.__errno'
768 kcah
769
770 hack rename data() function in mdocml to avoid redefined error.
771 Compiler/Assembler bug?
772 cdate Sat Oct 29 11:16:01 EDT 2011
773 who christos
774 file src/external/bsd/mdocml/tbl_data.c: 1.2
775 descr
776 workaround for:
777 {standard input}: Assembler messages:
778 {standard input}:105: Error: symbol `.data' is already \
779 defined
780 kcah
781
782 port emips
783
784 hack Add nop between ctc1 and mtc0 to avoid assembler internal
785 error
786 cdate Sat Oct 29 16:57:34 EDT 2011
787 who christos
788 file src/sys/arch/mips/mips/mips_fpu.c: 1.7
789 descr
790 workaround for:
791 {standard input}: Assembler messages:
792 {standard input}:730: Internal error!
793 Assertion failure in append_insn at /usr/src/external/gpl3/\
794 binutils/dist/gas/config/tc-mips.c line 2910.
795 kcah
796
797 port ia64
798
799 hack libgcc unwind dummy function
800 cdate Fri Apr 17 14:31:03 CEST 2015
801 who martin
802 file src/external/gpl3/gcc/dist/libgcc/config/ia64/unwind-ia64.c: 1.4
803 descr
804 Add an empty _Unwind_FindTableEntry() implementation.
805 In the end we will use our libc stuff, and this should
806 go away again.
807 kcah
808
809 port x68k
810
811 hack compiler error with gcc 4.5.x
812 cdate Fri May 24 13:23:01 EDT 2013
813 who christos
814 file src/external/gpl3/gcc/usr.bin/bakend/Makefile: 1.17
815 xsrc/external/mit/xorg/lib/libGLU/Makefile: 1.11
816 descr
817 workaround for:
818 internal compiler error: in cselib_record_set, at cselib.c:1999
819 kcah
820
821 hack fallback to /usr/bin/clang-cpp in rpcgen
822 cdate Wed Jun 5 15:49:27 CEST 2013
823 who joerg
824 file src/usr.bin/rpcgen/rpc_main.c : 1.35
825 descr
826 It is undecided which compiler owns /usr/bin/cpp and whether it should
827 exist in a MKGCC=no world. To allow rpcgen to work out-of-the-box,
828 if either gcc or clang is installed, use /usr/bin/clang-cpp as fallback.
829 This applies only if RPCGEN_CPP is not set and /usr/bin/cpp is not executable.
830 kcah
831
832 port hppa
833
834 hack compiler error with gcc 4.5.x
835 cdate Tue Jul 23 07:42:28 BST 2013
836 who skrll
837 file src/sys/lib/libkern/Makefile.libkern: 1.26
838 descr
839 workaround for unanalysed codegen bug affecting md5c.c.
840 kcah
841
842 hack gdb vs _rtld_debug_state problem
843 cdate Thu Mar 5 09:49:53 UTC 2015
844 who skrll
845 file src/libexec/ld.elf_so/rtld.c: 1.175
846 descr
847 workaround for problem where gdb misses the breakpoint on
848 _rtld_debug_state when the function is only the
849 bv,n %r0(%rp) instruction - the nullify seems to
850 confuse something
851 kcah
852
853 port mips64*
854 hack compiler crashes on mips64* with optimization enabled
855 cdate Tue May 13 18:46:48 UTC 2014
856 who macallan
857 file src/external/lgpl3/gmp/lib/libgmp/arch/mips64eb/Makefile.inc: 1.6
858 src/external/lgpl3/gmp/lib/libgmp/arch/mips64eb/config.h: 1.5
859 src/external/lgpl3/gmp/lib/libgmp/arch/mips64el/Makefile.inc: 1.6
860 src/external/lgpl3/gmp/lib/libgmp/arch/mips64el/config.h: 1.5
861 descr workaround for n32 gcc doing unaligned 64bit accesses when optimizing
862 pr 48696
863 kcah
864
865 port vax
866 hack compile boot with -O1
867 cdate Sat May 24 09:40:58 CEST 2014
868 who martin
869 file src/sys/arch/vax/boot/boot/Makefile: 1.41
870 descr /boot does not work when compiled with -O2 and gcc 4.8
871 kcah
872
873 port vax
874 hack compile nir.c in gallium with -O1
875 cdate Mon Oct 28 14:39:35 EDT 2019
876 who christos
877 file /cvsroot/src/external/mit/xorg/lib/gallium/Makefile 1.36
878 descr gallium does not compile.
879 kcah
880
881 port sh3
882 hack compile parse.c in battlestar with -Wno-restrict
883 cdate Mon Oct 28 14:39:35 EDT 2019
884 who christos
885 file /cvsroot/src/games/battlestar/Makefile 1.11
886 descr fails to compile, confused by char words[][];
887 strcpy(words[n - 1], words[n + 1]);
888 kcah
889
890 port sh3
891 hack compile ddns.c in dhcpcd with no-stringop-overflow
892 cdate Tue Oct 29 20:25:59 EDT 2019
893 who christos
894 file /cvsroot/src/external/mpl/dhcp/bin/server/Makefile 1.2
895 descr fails to compile, confused by builtin_object_size in strcat(p, ".in..")
896 kcah
897
898 port arm
899 hack avoid using labels in a 12-bit constant.
900 cdate Mon Mar 30 05:26:47 2015 UTC
901 who matt
902 file crypto/external/bsd/openssl/lib/libcrypto/arch/arm/aes-armv4.S: 1.2
903 descr workaround for clang misassembling an instruction
904 kcah
905
906 port sparc64
907 hack during profiling with -m32 (and ASLR) labels are not generated
908 consistently
909 cdate Sat Feb 11 04:56:37 2017 UTC
910 who christos
911 file /cvsroot/src/crypto/external/bsd/heimdal/lib/libasn1/Makefile: 1.4
912 desc asn1_krb5_asn1.po does not produce the same results during successive
913 compilation runs; it is bimodal. Turning optimization to -O0 fixes
914 the issue
915 kcah
916
917 port ia64
918 hack ski emulator crashes
919 cdate Sat Apr 8 18:10:43 2017 UTC
920 who scole
921 file /cvsroot/src/sys/external/bsd/acpica/dist/tables/tbxfload.c: 1.6
922 desc
923 ski emulator crashes during acpi detection. Added a check for
924 uninitialized index. Submitted a request for change with upstream
925 mailing list, but never got a response
926 kcah
927
928 port vax
929 hack compile rtld.c with -O0
930 cdate Wed Apr 3 17:38:38 EDT 2019
931 who christos
932 file src/libexec/ld.elf_so/Makefile: 1.141
933 descr Disable optimization for rtld.c on the vax with gcc-7. Crashes on the
934 second pass loop with elm == 0xffffffff
935 kcah
936
937 port alpha
938 hack GCC 7.4/8.3: userland binaries crash randomly (port-alpha/54307)
939 cdate Fri Nov 1 20:43:35 UTC 2019
940 who rin
941 file src/external/bsd/jemalloc/lib/Makefile.inc: 1.11
942 descr rtree.c and tcache.c need to be compiled with -O0, alternatively,
943 you can compile whole jemalloc with -DJEMALLOC_DEBUG.
944 kcah
945
946 port powerpc
947 hack compile tc.c, logerr.c, ubsan.c with -O0 for clang
948 cdate Wed Jan 29 17:40:19 EST 2020
949 who christos
950 file src/external/bsd/atf/lib/libatf-c/Makefile: 1.22
951 file src/external/bsd/dhcpcd/sbin/dhcpcd/Makefile: 1.49
952 file src/tests/lib/libc/misc/Makefile: 1.5
953
954 descr Disable optimization on tc.c, logerr.c, ubsan.c crashes:
955 lib/libLLVMCodeGen/../../llvm/../../external/apache2/llvm/lib/..\
956 /dist/llvm/include/llvm/CodeGen/MachineFrameInfo.h", line 495, \
957 function "__int64_t llvm::MachineFrameInfo::getObjectOffset(int) const"
958 kcah
959
960 port earmv7hf*
961 hack compile gdb/dwarf2expr.c with -O0 for GCC8 (toolchain/54820 and 54877)
962 cdate Wed Apr 29 11:04:58 UTC 2020
963 who rin
964 file src/external/gpl3/gdb/lib/libgdb/Makefile: 1.22
965 descr GCC 8.4 miscompiles dwarf2expr.c with -O2 or -O1, which results in
966 crashes with 'gdb_exception_RETURN_MASK_ERROR'. Note that this occurs
967 only for earmv7hf{,eb} as far as I can see. Neither earmv6hf{,eb} nor
968 earmv7{,eb} (softfloat) are affected.
969 kcah
970