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