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