HACKS revision 1.9
1# $NetBSD: HACKS,v 1.9 2003/09/19 16:41:58 martin 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 30hack gcc 2.95/vax cannot handle __builtin_ffs() 31cdate Fri Aug 23 21:31:15 CEST 2002 32who ragge 33port vax 34file sys/lib/libkern/libkern.h : 1.42 35descr 36 __builtin_ffs() is ifdef'd away if __vax__. Matt Thomas has added 37 this feature to GCC 3 so it can be removed when switching. 38kcah 39 40hack gcc 2.95.3 -O2 bug 41cdate Sun Jan 6 23:17:28 UTC 2002 42who lukem 43port alpha 44file sbin/newfs/mkfs.c : (all?) 45pr 15156 46descr 47 newfs built with gcc -O2 dumps core part-way through. 48 using -O1 avoids the problem 49kcah 50 51hack binutil-2.11-sparc64-pltrela 52mdate 14 Aug 2001 53who eeh 54port sparc64 55file libexec/ld.elf_so/reloc.c: 1.41 : 597 : 619 56descr 57 The first for PLT entries are reserved. There is some disagreement 58 whether they should have associated relocation entries. Both the 59 SPARC 32-bit and 64-bit ELF specifications say that they should have 60 relocation entries, but the 32-bit SPARC binutils do not generate 61 them, and now the 64-bit SPARC binutils have stopped generating them 62 too. 63 64 To provide binary compatibility, we will check the first entry, if it 65 is reserved it should not be of the type JMP_SLOT. If it is JMP_SLOT, 66 then the 4 reserved entries were not generated and our index is 4 67 entries too far, so we frob the rela pointer. 68kcah 69 70hack gcc-arm32-schedule 71mdate 04 May 2000 72who is 73file lib/libc/stdlib/strtoull.c : 1.3 : 78 : 81 74file lib/libc/stdlib/strtouq.c : 1.15 : 73 : 76 75pr 9613 76descr 77 strtoull() was returning a wrong result for small numbers with bit 31 78 set. This is a gcc/arm32 compiler bug in gcc < 2.95.2. Adding 79 (void)&acc; works around it. 80kcah 81 82hack netstat ieee1394 address printing. 83mdate 14 Nov 2000 84who matt 85file lib/libc/net/getnameinfo.c : 1.32 : 497 : 503 86descr 87 Because the current implementation of IP over IEEE1394, the 88 fw device address contains more than just the IEEE1394 EUI-64. 89 So when printing out IEEE1394 addresses, ignore the extra stuff. 90kcah 91 92hack xterm vs. libterm 93mdate 01 Aug 2000 94who jdc 95file xsrc/xc/programs/xterm/main.c : 1.2 : 3609 : 3614 96pr 10383 97descr 98 In order to extend the termcap string over 1023 bytes, a ZZ entry was 99 introduced to point to a memory location containing the full entry. 100 Without this hack, xterm will export a termcap containing the ZZ 101 entry, which will then be ignored by libterm. As xterm modifies the 102 exported termcap, this would cause those modifications to be ignored. 103kcah 104 105hack gcc-sh3-sed 106mdate 23 Apr 2002 107who thorpej 108file usr.bin/sed/Makefile : 1.9 : 9 : 13 109descr 110 The in-tree GCC 2.95.3-based compiler ICEs when building 111 with optimization for SuperH. Hack is to biuld with -O0. 112kcah 113 114hack gcc-unsigned-compare 115cdate 09 Mar 2002 116mdate 18 Mar 2002 117who bjh21 118port arm 119file dist/bind/lib/nameser/ns_parse.c : 1.3 120file dist/dhcp/minires/ns_parse.c : 1.3 121file dist/dhcp/omapip/result.c : 1.2 122file dist/dhcp/server/failover.c : 1.3 123file gnu/dist/gawk/eval.c : 1.4 124file gnu/dist/toolchain/bfd/bfd.c : 1.2 125file gnu/dist/toolchain/bfd/format.c : 1.2 126file gnu/dist/toolchain/gdb/target.c : 1.2 127file sys/kern/vfs_subr.c : 1.172 128descr When checking that a potentially-unsigned enum is >= 0, assign it 129 to an int first. This is necessary to avoid "comparison is always 130 true" warnings with -fshort-enums. Casting to an int really should 131 be enough, but turns out not to be. 132kcah 133 134hack wi-at-big-endian-bus 135cdate 15 Mar 2002 136who martin 137file dev/ic/wireg.h 138descr Add an option to access the underlying bus in big endian byte order 139 to work around deficiencies in bus_space_{read,write}_* macros. 140 Those don't allow the implementation of a proper pcmcia bus space 141 tag. 142kcah 143 144hack gcc 2.95.3 -O2 (-fgcse) bug 145cdate Sun May 5 18:36:04 UTC 2002 146who tsutsui 147port macppc 148file sys/arch/macppc/dev/adb_direct.c: 1.24 : 1895 : 1896 149pr 16678 150descr 151 gcc-2.95.3 does generates wrong code on optimization 152 by gcc -O2 (-fgcse), and adb_read_date_time() returns 153 wrong value on cuda system. 154 A null asm statement has been added to avoid this for workaround. 155kcah 156 157hack gcc-vax-libbz2 158mdate 27 Jun 2002 159who thorpej 160port vax 161file lib/libbz2/Makefile 162descr 163 libbz2 is mis-compiled with optimization with GCC 2.95.3 164 on VAX. -O0 works around this problem. 165kcah 166 167hack egcs-pc532-ip6_mroute 168cdate 09 Jul 2002 169who simonb 170port pc532 171file sys/arch/pc532/conf/Makefile.pc532 : 1.70 172file sys/arch/pc532/conf/files.pc532 : 1.47 173descr 174 egcs 1.1.2 gets an "internal error--insn does not satisfy its 175 constraints" error compiling ip6_mroute.c with -O2 or greater. 176 -O1 works around this problem. 177kcah 178 179hack SuperH SH5 Toolchain Bugs 180cdate 11 Jul 2002 181who scw 182port sh5 183file usr.sbin/ndbootd/ndbootd.c : 1.6 184file usr.sbin/traceroute/traceroute.c : 1.48 185descr 186 The SuperH SH5 toolchain (2.97-sh5-010522) gets an internal 187 compiler error when assigning a bit-wise inverted value 188 under some circumstances. 189 Work around it by splitting the statement into two. 190kcah 191 192hack vax Toolchain bug 193cdate 28 Mar 2003 194who he 195port vax 196file sys/arch/vax/vax/intvec.S : 1.5 197descr 198 Workaround for PR toolchain/20924. The assembler apparently 199 tries to range-check byte offsets when it doesn't have 200 sufficient information to make that decision. 201 Workaround uses `brw' instead of `brb' instruction. 202kcah 203 204hack specific knowledge of colours in curses code 205cdate Sun Apr 6 11:05:24 BST 2003 206who jdc 207port all 208file lib/libcurses/color.c : r1.24 209descr 210 Swap red/blue and yellow/cyan colours for COLOR_OTHER. 211 Fix is to enhance libtermcap to understand terminfo-style % sequences. 212 See also: 213 http://mail-index.NetBSD.org/tech-userlevel/2003/04/06/0000.html 214kcah 215 216hack SuperH SH5 Toolchain Bugs 217cdate 17 May 2003 218who scw 219port sh5 220file lib/libpthread/pthread_lock.c : 1.7 221descr 222 The SuperH SH5 toolchain generates incorrect PIC code when faced 223 with a symbol which is declared extern, but has local scope due 224 to being defined within an asm() statement (without being declared 225 .globl in that statement). Work around it by adding the .globl. 226kcah 227 228hack Compensation for differing types of LINUX_USRSTACK and USRSTACK 229cdate 21 Aug 2003 230who he 231file sys/miscfs/procfs/procfs_linux.c : 1.14 232descr 233 Not all ports have LINUX_USRSTACK and/or USRSTACK defined as 234 literals/constants, but refer to variables of a type which is 235 not "unsigned long", causing compilation of procfs_linux.c to 236 fail with "makes integer from pointer without a cast". This 237 is observed on e.g. the sun3 port. Ideally the "types" for 238 symbols should be consistent across all ports. 239kcah 240 241hack i386 / sparc default debugging type in GCC 3.3.1 242cdate 19 Sept 2003 243who mrg 244file gnu/dist/gcc/gcc/config/{i386,sparc}/netbsd-elf.h 245descr 246 Until i386 & sparc* switch to GDB 5.3, the default debugging 247 format needs to be stabs not DWARF. 248kcah 249