Patrick Welche <prlw1@cam.ac.uk>
[netbsd-mini2440.git] / doc / HACKS
blobceddc78d0b1415df8efe33e18e623d12449154cf
1 # $NetBSD: HACKS,v 1.112 2009/01/11 18:25:17 christos Exp $
3 # This file is intended to document workarounds for currently unsolved
4 # (mostly) compiler bugs.
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.
28 # this is a comment.
30 hack    netstat ieee1394 address printing.
31 mdate   14 Nov 2000
32 who     matt
33 file    lib/libc/net/getnameinfo.c      : 1.32 : 497 : 503
34 descr
35         Because the current implementation of IP over IEEE1394, the
36         fw device address contains more than just the IEEE1394 EUI-64.
37         So when printing out IEEE1394 addresses, ignore the extra stuff.
38 kcah
40 hack    xterm vs. libterm
41 mdate   01 Aug 2000
42 who     jdc
43 file    xsrc/xc/programs/xterm/main.c   : 1.2 : 3609 : 3614
44 pr      10383
45 descr
46         In order to extend the termcap string over 1023 bytes, a ZZ entry was
47         introduced to point to a memory location containing the full entry.
48         Without this hack, xterm will export a termcap containing the ZZ
49         entry, which will then be ignored by libterm.  As xterm modifies the
50         exported termcap, this would cause those modifications to be ignored.
51 kcah
53 hack    wi-at-big-endian-bus
54 cdate   15 Mar 2002
55 who     martin
56 file    dev/ic/wireg.h
57 descr   Add an option to access the underlying bus in big endian byte order
58         to work around deficiencies in bus_space_{read,write}_* macros.
59         Those don't allow the implementation of a proper pcmcia bus space
60         tag.
61 kcah
63 hack    specific knowledge of colours in curses code
64 cdate   Sun Apr  6 11:05:24 BST 2003
65 who     jdc
66 file    lib/libcurses/color.c : r1.24
67 descr
68         Swap red/blue and yellow/cyan colours for COLOR_OTHER.
69         Fix is to enhance libtermcap to understand terminfo-style % sequences.
70         See also:
71             http://mail-index.NetBSD.org/tech-userlevel/2003/04/06/0000.html
72 kcah
74 hack    Compensation for differing types of LINUX_USRSTACK and USRSTACK
75 cdate   21 Aug 2003
76 who     he
77 file    sys/miscfs/procfs/procfs_linux.c : 1.14
78 descr
79         Not all ports have LINUX_USRSTACK and/or USRSTACK defined as
80         literals/constants, but refer to variables of a type which is
81         not "unsigned long", causing compilation of procfs_linux.c to
82         fail with "makes integer from pointer without a cast".  This
83         is observed on e.g. the sun3 port.  Ideally the "types" for
84         symbols should be consistent across all ports.
85 kcah
87 hack    gcc-strict-aliasing
88 cdate   6 August 2004
89 who     junyoung
90 pr      26516
91 file    src/usr.sbin/racoon/racoon/Makefile : 1.21
92 descr
93         GCC issues a warning "dereferencing type-punned pointer will break
94         strict-aliasing rules" when compiling
95         crypto/dist/kame/racoon/crypto/openssl.c with -O[23s]. Note that this
96         is due to use of type casting in a non-standard way in the code and
97         not a compiler bug. Once a new release of KAME with a proper fix
98         applied is imported this should be backed out.
99 kcah
101 hack    gcc4 wrong uninitialized variable
102 mdate   10 May 2006
103 who     mrg
104 file    bin/ksh/eval.c                  : 1.6
105 file    bin/sh/histedit.c               : 1.39
106 file    bin/sh/parser.c                 : 1.60
107 file    crypto/dist/heimdal/kdc/524.c   : 1.10
108 file    crypto/dist/ssh/sftp.c          : 1.20
109 file    crypto/dist/ssh/ssh-keysign.c   : 1.11
110 file    dist/ipf/lib/hostname.c         : 1.2
111 file    dist/ipf/tools/ipmon.c          : 1.8
112 file    dist/ntp/ntpd/ntp_request.c     : 1.4
113 file    dist/ntp/ntpd/refclock_shm.c    : 1.4
114 file    dist/ntp/sntp/timing.c          : 1.3
115 file    dist/pppd/pppstats/pppstats.c   : 1.3
116 file    dist/smbfs/lib/smb/rap.c        : 1.6
117 file    dist/tcpdump/print-zephyr.c     : 1.5
118 file    distrib/utils/sysinst/aout2elf.c : 1.12
119 file    gnu/libexec/uucp/uucico/uucico.c : 1.6
120 file    lib/libc/citrus/citrus_csmapper.c : 1.6
121 file    lib/libc/citrus/citrus_pivot_factory.c : 1.5
122 file    lib/libc/inet/inet_cidr_ntop.c  : 1.3
123 file    lib/libc/inet/inet_ntop.c       : 1.3
124 file    lib/libc/stdio/vfwprintf.c      : 1.8
125 file    libexec/ld.elf_so/arch/m68k/mdreloc.c : 1.20
126 file    libexec/ld.elf_so/arch/powerpc/ppc_reloc.c : 1.40
127 file    libexec/ld.elf_so/arch/sh3/mdreloc.c : 1.22
128 file    libexec/ld.elf_so/arch/sparc/mdreloc.c : 1.39
129 file    libexec/ld.elf_so/arch/sparc64/mdreloc.c : 1.39
130 file    libexec/ld.elf_so/arch/vax/mdreloc.c    : 1.21
131 file    libexec/ld.elf_so/arch/x86_64/mdreloc.c : 1.27
132 file    sbin/fsck_ext2fs/dir.c          : 1.19
133 file    sbin/routed/rtquery/rtquery.c   : 1.18
134 file    sys/arch/amd64/amd64/pmap.c     : 1.26
135 file    sys/arch/i386/pci/piixpcib.c    : 1.4
136 file    sys/arch/m68k/m68k/pmap_motorola.c      : 1.4
137 file    sys/crypto/cast128/cast128.c    : 1.9
138 file    sys/ddb/db_command.c            : 1.86
139 file    sys/dev/cardbus/cardbus_map.c   : 1.21
140 file    sys/dev/fss.c                   : 1.25
141 file    sys/dev/ic/igsfb.c              : 1.39
142 file    sys/dev/ic/mb86950.c            : 1.5
143 file    sys/dev/ic/midway.c             : 1.71
144 file    sys/dev/kttcp.c                 : 1.18
145 file    sys/dev/rasops/rasops_bitops.h  : 1.9
146 file    sys/dev/pci/cmpci.c             : 1.31
147 file    sys/dev/pci/machfb.c            : 1.45
148 file    sys/dev/usb/ohci.c              : 1.174
149 file    sys/dev/usb/uhci.c              : 1.196
150 file    sys/dev/rasops/rasops_bitops.h  : 1.9
151 file    sys/dist/ipf/netinet/ip_nat.c   : 1.10
152 file    sys/dist/ipf/netinet/ip_rpcb_pxy.c : 1.8
153 file    sys/dist/pf/net/pf.c            : 1.22
154 file    sys/fs/udf/udf_vnops.c          : 1.4
155 file    sys/kern/kern_sig.c             : 1.219
156 file    sys/kern/tty.c                  : 1.181
157 file    sys/net/bpf.c                   : 1.116
158 file    sys/net/zlib.c                  : 1.26
159 file    sys/netccitt/if_x25subr.c       : 1.37
160 file    sys/netinet/in.c                : 1.107
161 file    sys/netsmb/smb_smb.c            : 1.27
162 file    sys/netsmb/smb_trantcp.c        : 1.22
163 file    sys/nfs/nfs_serv.c              : 1.108
164 file    sys/nfs/nfs_socket.c            : 1.129
165 file    sys/nfs/nfs_syscalls.c          : 1.91
166 file    sys/ufs/lfs/lfs_vfsops.c        : 1.207 [also (char *)]
167 file    usr.bin/ftp/ftp.c               : 1.140
168 file    usr.bin/find/function.c         : 1.54
169 file    usr.bin/mail/tty.c              : 1.20
170 file    usr.bin/msgc/msg_sys.def        : 1.33-1.34
171 file    usr.bin/nl/nl.c                 : 1.7
172 file    usr.bin/systat/keyboard.c       : 1.23
173 file    usr.bin/usbhidctl/usbhid.c      : 1.29
174 file    usr.bin/vi/cl/cl_read.c         : 1.5
175 file    usr.bin/vi/ex/ex_cscope.c       : 1.12
176 file    usr.bin/vi/ex/ex_tag.c          : 1.19
177 file    usr.bin/vi/vi/v_txt.c           : 1.15
178 file    usr.sbin/altq/altqstat/qdisc_rio.c : 1.4
179 file    usr.sbin/cron/do_command.c      : 1.19
180 file    usr.sbin/timed/timed/slave.c    : 1.15
181 descr
182         GCC 4.1 gets many uninitialised variable warnings wrong.  We should
183         really audit all the old hacks like this when older compilers are
184         removed from the tree, as many are probably no longer required.
185         The problem is that it does not recognize initialization via function
186         call pointer. I.e.
187                 int p;
188                 foo(&p);
189         does not mark p as initialized.
190 kcah
192 hack    gcc4 pointer sign and strict aliasing problems
193 mdate   10 May 2006
194 who     mrg
195 file    bin/ed/Makefile                 : 1.33
196 file    distrib/utils/sysinst/Makefile.inc : 1.44
197 file    distrib/utils/x_dhclient/Makefile : 1.15
198 file    games/bcd/Makefile              : 1.5
199 file    games/dab/Makefile              : 1.5
200 file    games/larn/Makefile             : 1.17
201 file    games/pom/Makefile              : 1.5
202 file    lib/libasn1/Makefile            : 1.26
203 file    lib/libcrypt/Makefile           : 1.17
204 file    lib/libgssapi/Makefile          : 1.16
205 file    lib/libhdb/Makefile             : 1.20
206 file    lib/libkadm5clnt/Makefile       : 1.21
207 file    lib/libkadm5srv/Makefile        : 1.25
208 file    lib/libkrb5/Makefile            : 1.35
209 file    lib/libssh/Makefile             : 1.6
210 file    lib/libtelnet/Makefile          : 1.26
211 file    libexec/getty/Makefile          : 1.14
212 file    libexec/kadmind/Makefile        : 1.19
213 file    libexec/kpasswdd/Makefile       : 1.14
214 file    sbin/atactl/Makefile            : 1.3
215 file    sbin/cgdconfig/Makefile         : 1.7
216 file    sbin/clri/Makefile              : 1.13
217 file    sbin/dkctl/Makefile             : 1.4
218 file    sbin/dump/Makefile              : 1.33
219 file    sbin/fdisk/Makefile             : 1.35
220 file    sbin/fsck_ext2fs/Makefile       : 1.11
221 file    sbin/fsck_ffs/Makefile          : 1.29
222 file    sbin/fsdb/Makefile              : 1.18
223 file    sbin/mount_smbfs/Makefile       : 1.4
224 file    sbin/newfs/Makefile             : 1.30
225 file    sbin/newfs_sysvbfs/Makefile     : 1.2
226 file    sbin/restore/Makefile           : 1.23
227 file    sbin/veriexecctl/Makefile       : 1.11
228 file    sys/lib/libsa/Makefile          : 1.59
229 file    sys/arch/evbarm/adi_brh/brh_machdep.c : 1.24
230 file    usr.bin/awk/Makefile            : 1.9
231 file    usr.bin/crontab/Makefile        : 1.24
232 file    usr.bin/ctags/Makefile          : 1.8
233 file    usr.bin/gzip/Makefile           : 1.10
234 file    usr.bin/ssh/sftp/Makefile       : 1.10
235 file    usr.bin/ssh/ssh/Makefile        : 1.25
236 file    usr.bin/vi/build/Makefile       : 1.26
237 file    usr.bin/telnet/Makefile         : 1.40
238 file    usr.bin/tn3270/tn3270/Makefile  : 1.36
239 file    usr.bin/tr/Makefile             : 1.4
240 file    usr.sbin/amd/amd/Makefile       : 1.27
241 file    usr.sbin/amd/amq/Makefile       : 1.14
242 file    usr.sbin/amd/libamu/Makefile    : 1.20
243 file    usr.sbin/amd/pawd/Makefile      : 1.5
244 file    usr.sbin/bind/Makefile.inc      : 1.22
245 file    usr.sbin/bind/libdns/Makefile   : 1.3
246 file    usr.sbin/bind/named/Makefile    : 1.17
247 file    usr.sbin/bootp/bootptest/Makefile : 1.2
248 file    usr.sbin/chrtbl/Makefile        : 1.6
249 file    usr.sbin/cron/Makefile          : 1.12
250 file    usr.sbin/dhcp/Makefile.inc      : 1.20
251 file    usr.sbin/dumplfs/Makefile       : 1.11
252 file    usr.sbin/hprop/Makefile         : 1.13
253 file    usr.sbin/installboot/Makefile   : 1.35
254 file    usr.sbin/ipf/ipftest/Makefile   : 1.32
255 file    usr.sbin/isdn/isdnd/Makefile    : 1.6
256 file    usr.sbin/isdn/isdnmonitor/Makefile : 1.3
257 file    usr.sbin/isdn/isdntel/Makefile  : 1.2
258 file    usr.sbin/isdn/isdntrace/Makefile : 126
259 file    usr.sbin/mopd/common/Makefile   : 1.10
260 file    usr.sbin/mopd/mopd/Makefile     : 1.9
261 file    usr.sbin/mopd/mopprobe/Makefile : 1.7
262 file    usr.sbin/makefs/Makefile        : 1.17
263 file    usr.sbin/mscdlabel/Makefile     : 1.5
264 file    usr.sbin/pkg_install/add/Makefile : 1.7
265 file    usr.sbin/pkg_install/create/Makefile : 1.5
266 file    usr.sbin/pkg_install/lib/Makefile : 1.28
267 file    usr.sbin/ntp/ntpd/Makefile      : 1.10/1.11
268 file    usr.sbin/ntp/ntptime/Makefile   : 1.4/1.5
269 file    usr.sbin/pppd/Makefile.inc      : 1.3
270 file    usr.sbin/pppd/pppd/Makefile     : 1.38
271 file    usr.sbin/rarpd/Makefile         : 1.10
272 file    usr.sbin/rbootd/Makefile        : 1.10
273 file    usr.sbin/rpc.pcnfsd/Makefile    : 1.17
274 file    usr.sbin/rtadvd/Makefile        : 1.9
275 file    usr.sbin/tcpdump/Makefile       : 1.42
276 file    usr.sbin/wiconfig/Makefile      : 1.3
277 descr
278         GCC 4.1 warns on pointer sign comparision/assignments and lots of
279         code does not conform.  For now we use -Wno-pointer-sign and
280         -fno-strict-aliasing.
281 kcah
283 hack    cross-building hack on Darwin
284 mdate   20 July 2008
285 who     agc
286 file    src/distrib/common/Makefile.mdset       : 1.33
287 descr
288         Darwin has problems with getopt() when used in mdsetimage -v,
289         due to the difference between BSD and libiberty() getopt
290         implementations, more fully described in
291         http://mail-index.netbsd.org/current-users/2008/06/27/msg003242.html
292         and the subsequent thread.  For just now, we just have an ugly
293         workaround not to call mdsetimage with the -v argument on Darwin
294 kcah
296 hack    avoid rebuilding asn1 libraries
297 mdate   03 August 2008
298 who     veego
299 file    src/crypto/dist/heimdal/lib/asn1/gen.c  : 1.10
300 file    src/lib/libasn1/Makefile        : 1.32
301 file    src/lib/libhdb/Makefile : 1.23
302 file    src/lib/libgssapi/Makefile      : 1.20
303 file    src/lib/libhx509/Makefile       : 1.3
304 pr      9702 39185
305 descr
306         asn1_compile does not check if generated header files do not have to
307         be rebuild.
308         Generate .hx files and copy it in the Makefiles if they changed.
309 kcah
311 hack    avoid gcc4 -O1 bug in loop optimize
312 cdate   29 November 2008
313 who     tsutsui
314 file    src/sbin/ifconfig/Makefile      : 1.39
315 pr      40036 40066
316 descr
317         gcc -O1 seems to generate wrong code in loop optimize so that
318         ifconfig lo0 inet6 doesn't return error even if a kernel
319         doesn't have IPv6 support. (see the above PRs for details)
320         For workaround, specify -fno-loop-optimize on m68000,
321         which uses -O1 by default.
322 kcah
324 port    vax
326         hack    gcc4/vax ICE
327         cdate   
328         who     tsutsui
329         file    sys/arch/vax/conf/Makefile.vax
330         descr
331                 GCC4 on vax gets ICE on compiling sys/ddb/db_command.c.
332                 -fno-tree-ter prevents it so add it to COPTS.
333         kcah
335         hack    gcc4/vax compiler crash
336         cdate   Fri Jun 30 22:39:12 PDT 2006
337         who     mrg
338         file    bin/csh/Makefile        : 1.27
339         file    lib/i18n_module/UTF7/Makefile   : 1.2
340         descr
341                 GCC4 on vax crashes.  -O0 stops it happening so far...
342         kcah
344         hack    gcc 2.95/vax doesn't like abort being used as function pointer
345         cdate   Tue Dec 13 05:54:50 GMT 2005
346         who     jmc
347         file    lib/libc/rpc/svc_vc.c 1.15
348         descr
349                 Provide a local definition for abort which doesn't include
350                 the noreturn attribute which trips up gcc 2.95 on vax.
351         kcah
352         
353         hack    gcc 2.95/vax doesn't have stdbool.h and gettext needs it
354         cdate   Mon May  9 12:16:22 CDT 2005
355         who     jmc
356         file    gnu/usr.bin/gettext/Makefile.inc.prog 1.5
357                 gnu/usr.bin/gettext/libgrep/Makefile 1.3
358                 gnu/usr.bin/gettext/libnlspr/Makefile 1.5
359                 gnu/usr.bin/gettext/libnlsut/Makefile 1.3   
360         descr
361                 The latest gettext assumes a C99 environment or at least
362                 configure checks to work around this. As we don't use configure
363                 provide a stdbool.h for vax builds locally in directories from
364                 the template provided by the gettext code.
365         kcah
366         
367         hack    gcc 2.95/vax cannot handle __builtin_ffs()
368         cdate   Fri Aug 23 21:31:15 CEST 2002
369         who     ragge
370         file    sys/lib/libkern/libkern.h : 1.42
371         descr
372                 __builtin_ffs() is ifdef'd away if __vax__. Matt Thomas has
373                 added this feature to GCC 3 so it can be removed when switching.
374         kcah
376         hack    gcc 2.95/vax libbz2
377         mdate   27 Jun 2002
378         who     thorpej
379         file    lib/libbz2/Makefile
380         descr
381                 libbz2 is mis-compiled with optimization with GCC 2.95.3
382                 on VAX.  -O0 works around this problem.
383         kcah
385         hack    vax Toolchain bug
386         cdate   28 Mar 2003
387         who     he
388         file    sys/arch/vax/vax/intvec.S : 1.5
389         descr
390                 Workaround for PR toolchain/20924.  The assembler apparently
391                 tries to range-check byte offsets when it doesn't have
392                 sufficient information to make that decision.
393                 Workaround uses `brw' instead of `brb' instruction.
394         kcah
396         hack    vax gcc 2.95.3 -Wuninitialized workarounds
397         cdate   6 Nov 2003
398         who     he
399         file    sys/dev/bi/if_ni.c : 1.22
400         file    sys/arch/vax/vax/ctu.c : 1.20
401         descr
402                 Workaround for gcc 2.95.3 failing to detect that certain
403                 variables will be initialized; so that this code compiles
404                 with -Wuninitialized.  Should be reviewed and possibly
405                 reverted when gcc 3.3.2 is ready for vax.
406         kcah
408         hack    vax gcc 2.95.3 structure initialization
409         cdat    13 May 2004
410         who     cl
411         file    sys/miscfs/kernfs/kernfs_vnops.c : 1.104
412         descr
413                 Workaround for gcc 2.95.3 failing to initialize structures
414                 and/or unions inside structures using nested designators.
415                 Should be reverted when gcc >=3.3.3 is ready for vax.
416         kcah
418         hack    vax gcc 2.95.3 needs -I. to build nslexer.c
419         cdat    6 Jun 2004
420         who     mhitch
421         file    lib/libc/arch/vax/Makefile.inc : 1.6
422         descr
423                 It appears necessary to add -I. to CPPFLAGS when building
424                 nslesxer.c.  This may be caused by gcc 2.95.3 being used.
425                 Should be reverted when a newer gcc is ready for vax.
426         kcah
428         hack    vax gcc 2.95.3 doesn't understand "-std=c99"
429         cdat    5 April 2005
430         who     tron
431         file    src/share/mk/bsd.sys.mk
432         descr
433                 We cannot use "-std=c99" for compiler warning level 4 and above
434                 because gcc 2.95.3 doesn't support that option.
435         kcah
437         hack    declare boolean_t in two IPF user-mode programs
438         cdate   Tue Mar  7 19:19:20 CET 2006
439         who     he
440         file    dist/ipf/ipsend/iptests.c : 1.8
441                 dist/ipf/ipsend/sock.c : 1.7
442         descr
443                 The IPF user-mode programs ipsend and iptest first
444                 include <sys/types.h> without _KERNEL defined, and
445                 later include <sys/file.h> with _KERNEL defined.
446                 This causes a build failure when building for vax,
447                 since <sys/device.h> ends up being included without
448                 bollean_t being defined by <sys/types.h>.
449                 Build failure and further details documented in
450                 PR#32907.
451         kcah
453         hack    pcc 0.9.9 large string literals
454         cdat    8 July 2008
455         who     gmcgarry
456         file    sys/conf/param.c : 1.58
457         descr
458                 Workaround for pcc 0.9.9 not handling large string literals
459                 which causes kernels with 'options INCLUDE_CONFIG_FILE' to
460                 fail compilation.
461                 There is a proposal on the pcc mailing list to stuff config
462                 file in ELF section.
463         kcah
465         hack    xorg warnings
466         cdat    30 July 2008
467         who     mrg
468         file    external/mit/xorg/lib/libSM/Makefile : 1.2
469                 external/mit/xorg/lib/libX11/Makefile.libx11 : 1.2
470                 external/mit/xorg/lib/libXext/Makefile : 1.2
471                 external/mit/xorg/lib/libXfont/Makefile : 1.2
472         descr
473                 Disable several warnings or use -Wno-error across Xorg sources
474                 while we get them working
475         kcah
477         hack    32 bit time leftovers
478         cdat    11 January 2009
479         who     christos
480         file    lib/libc/time/localtime.c : 1.41
481                 lib/libc/time/zic.c : 1.23
482         descr
483                 The timezone compiled files still contain 32 bit time_t
484                 quantities. I did not want to version the files because
485                 the ``parser'' is too ugly for words. What needs to be
486                 done, is to rewrite the parser from scratch also to avoid
487                 potential core-dumps from parsing invalid files.
488         kcah
490         hack    32 bit time leftovers
491         cdat    11 January 2009
492         who     christos
493         file    various
494         descr
495                 Many filesystem on-disk formats have 32 bit times.
496         kcah
498 port    arm
500         hack    gcc-unsigned-compare
501         cdate   09 Mar 2002
502         mdate   18 Mar 2002
503         who     bjh21
504         file    dist/bind/lib/nameser/ns_parse.c : 1.3
505         file    dist/dhcp/minires/ns_parse.c : 1.3
506         file    dist/dhcp/omapip/result.c : 1.2
507         file    dist/dhcp/server/failover.c : 1.3
508         file    gnu/dist/toolchain/bfd/bfd.c : 1.2
509         file    gnu/dist/toolchain/bfd/format.c : 1.2
510         file    gnu/dist/toolchain/gdb/target.c : 1.2
511         file    sys/kern/vfs_subr.c : 1.172
512         descr   When checking that a potentially-unsigned enum is >= 0, assign
513                 it to an int first.  This is necessary to avoid "comparison is
514                 always true" warnings with -fshort-enums.  Casting to an int
515                 really should be enough, but turns out not to be.
516         kcah
519 port    sh3
521         hack    gcc4-sh3-bz2
522         cdate   Sun May 21 03:34:57 UTC 2006
523         mdate   Fri May 16 13:13:00 UTC 2008
524         who     mrg, tsutsui
525         file    lib/libbz2/Makefile     : 1.10
526         descr
527                 The in-tree GCC 4.1-based compiler generated too-far
528                 pc-relative addresses.  Hack is to build with
529                 -fno-loop-optimize.
530         kcah
533 port    m68000
535         hack    gcc4-m68000
536         cdate   Fri Feb  8 10:29:37 PST 2008
537         mdate   Sun May  4 15:37:19 UTC 2008
538         who     mrg, tsutsui
539         file    rescue/Makefile : 1.21
540         file    sbin/dump_lfs/Makefile  : 1.9
541         file    sbin/fsck_ffs/Makefile  : 1.35
542         file    sbin/fsdb/Makefile      : 1.22
543         file    share/mk/sys.mk : 1.96
544         file    usr.sbin/ndbootd/Makefile       : 1.5
545         descr
546                 Several internal compiler errors with gcc -O1
547                 around 64bit integer arithmetic.
548                 This hack uses -O1 and adds some -fno-tree-foo options
549                 to avoid the problem.
550                 This might be related with GCC Bugzilla Bug 32424.
551         kcah
554 port    sparc64
556         hack    disable optimzations for uvm_bio.c on 32 bit kernels
557         cdate   Sun Mar 21 14:14:04 MET 2004
558         who     martin
559         file    sys/arch/sparc64/conf/Makefile.sparc64 : 1.53-1.54
560         file    sys/arch/sparc64/conf/files.sparc64 : 1.93
561         descr
562                 The sparc compiler miscompiles uvm_bio.c when using
563                 any optimization. This results in ubc_release panics.
564         kcah
566 port    mips
568         hack    mips-shared-linker-load-address
569         cdate   Fri Oct  7 08:33:10 UTC 2005
570         who     simonb
571         file    src/sys/kern/exec_elf32.c : 1.107
572         descr
573                 With COMPAT_16 or previous enabled (which enables
574                 ELF_INTERP_NON_RELOCATABLE) a recent ld.elf_so will
575                 load and run at address 0.  The check to fix this in
576                 rev 1.107 only checks the first psection of the ELF
577                 executable, which may not be loadable.  A more correct
578                 fix is to check the first loadable psection instead of
579                 just the first psection.
580         kcah
582         hack    mips-duplicate-ras-end-label
583         cdate   Sat Sep  2 23:29:42 2006
584         who     martin
585         file    src/regress/sys/kern/ras/ras3/Makefile : 1.3
586         descr
587                 Add -fno-reorder-blocks to CFLAGS to avoid duplicate
588                 labels by duplicated __asm output from RAS_END()
589                 macro.
590         kcah
592         hack    mips-mcount-assembler-warning
593         cdate   Tue Jul 29 14:16:52 UTC 2008
594         who     lukem
595         file    src/lib/libc/gmon/Makefile.inc : 1.8
596         descr
597                 Workaround for PR port-mips/39192.
598                 common/lib/libc/gmon/mcount.c generates a (fatal)
599                 assembler warning on MIPS:
600                         Warning: No .cprestore pseudo-op used in PIC code
601                 Add COPTS.count.c+=-Wa,--no-warn to avoid -Wa,--fatal-warnings
602         kcah
604 port    i386
606         hack    use volatile intermediate variable to enforce rounding
607         cdate   Tue Aug  1 22:15:55 MEST 2006
608         who     drochner
609         file    src/lib/libm/src/lrintf.c : 1.4
610         file    src/lib/libm/src/s_rintf.c : 1.8
611         descr
612                 gcc-4 does subsequent operations on "float" values within
613                 the i387 FPU without rounding the intermediate results
614         kcah
616 port    powerpc
618         hack    avoid using __builtin_return_address(0) because it fails in
619                 Xorg's module loader
620         cdate   Sat Sep 27 03:52:05 UTC 2008
621         who     macallan
622         file    src/libexec/ld.elf_so/rtld.c : 1.121
623         descr
624                 workaround for PR port-macppc/37812
625         kcah