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