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