[BACK]Return to HACKS CVS log [TXT][DIR] Up to [cvs.NetBSD.org] / src / doc

Annotation of src/doc/HACKS, Revision 1.6

1.6     ! uwe         1: # $NetBSD: HACKS,v 1.5 2003/07/26 17:24:48 salo Exp $
1.1       lukem       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 2.95/vax cannot handle __builtin_ffs()
                     31: cdate  Fri Aug 23 21:31:15 CEST 2002
                     32: who    ragge
                     33: port   vax
                     34: file   sys/lib/libkern/libkern.h : 1.42
                     35: descr
                     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.
                     38: kcah
                     39:
                     40: hack   gcc 2.95.3 -O2 bug
                     41: cdate  Sun Jan  6 23:17:28 UTC 2002
                     42: who    lukem
                     43: port   alpha
                     44: file   sbin/newfs/mkfs.c : (all?)
                     45: pr     15156
                     46: descr
                     47:        newfs built with gcc -O2 dumps core part-way through.
                     48:        using -O1 avoids the problem
                     49: kcah
                     50:
                     51: hack   binutil-2.11-sparc64-pltrela
                     52: mdate  14 Aug 2001
                     53: who    eeh
                     54: port   sparc64
                     55: file   libexec/ld.elf_so/reloc.c: 1.41 : 597 : 619
                     56: descr
                     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.
                     68: kcah
                     69:
                     70: hack   gcc-arm32-schedule
                     71: mdate  04 May 2000
                     72: who    is
                     73: file   lib/libc/stdlib/strtoull.c      : 1.3 : 78 : 81
                     74: file   lib/libc/stdlib/strtouq.c       : 1.15 : 73 : 76
                     75: pr     9613
                     76: descr
                     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.
                     80: kcah
                     81:
                     82: hack   gcc-sparc64-memorysize
                     83: mdate  17 Sep 2000
                     84: who    mrg
                     85: port   sparc64
                     86: file   lib/libc/hash/sha1.c            : 1.6 : 78 : 129 : 162 : 189
                     87: file   sys/lib/libkern/sha1.c          : 1.6 : 78 : 129 : 162 : 189
                     88: file   usr.sbin/bind/lib/Makefile      : 1.14 : 87 : 91
                     89: descr
                     90:        the normal SHA1Transform() function causes the sparc64 compiler to
                     91:        use excessive amounts of memory attempting to optimise this function.
                     92:        using no optimisation allows the function to build.  this hack
                     93:        splits the mathematical functions inside SHA1Transform() into 4
                     94:        separate functions, which avoids the optimiser explosion.
                     95: kcah
                     96:
                     97: hack   gcc-sparc64-double-arguments
                     98: mdate  18 Sep 2000
                     99: who    mrg
                    100: port   sparc64
                    101: file   xsrc/xc/lib/fonts/Type1/type1.c         : 1.2 : 1461 : 1507 : 1702 : 1709
                    102: descr
                    103:        in passing 17 "double" arguments to a function, gcc incorrectly tries
                    104:        to use a register that doesn't exist, causing an internal error.  this
                    105:        hack changes the way arguments are passed to the function, such that
                    106:        a pointer to a "double" (really an array) is passed, and the old
                    107:        arguments are assigned within the function.
                    108: kcah
                    109:
                    110: hack   gcc-sparc64-gawk
                    111: mdate  28 Oct 2000
                    112: who    mrg
                    113: port   sparc64
                    114: file   gnu/usr.bin/gawk/Makefile               : 1.11 : 21 : 24
                    115: descr
                    116:        gcc fails to build gawk properly, due to double floating point bugs.
                    117:        this simple test program will fail to print ``ab'':
                    118:                BEGIN { f = "abc"; print substr(f, 1, 2); exit }
                    119:        the work around is simple: use -msoft-quad-float.
                    120: kcah
                    121:
                    122: hack    gcc-sparc64-libgcc
                    123: mdate   01 Dec 2001
                    124: who    jmc
                    125: port   sparc64
                    126: file   gnu/lib/libgcc/Makefile                 : 1.29 : 24 : 27
                    127: descr
                    128:        gcc fails to do double -> int conversions correctly without
                    129:        soft-quad-float. Add it in there for the internal conversion
                    130:        routines. This appears to be more than likely emulations bugs than
                    131:        compiler bugs as the assembly looks correct on the surface.
                    132:
                    133: kcah
                    134:
                    135: hack   gcc-sparc64-iostat-systat
                    136: mdate  04 Feb 2001
                    137: who    mrg
                    138: port   sparc64
                    139: file   usr.sbin/iostat/Makefile        : 1.17 : 7 : 10
                    140: file   usr.bin/systat/Makefile         : 1.23 : 6 : 9
                    141: descr
                    142:        gcc fails to build iostat properly, due to double floating point bugs.
                    143:        results will include "Inf" and other garbage.
                    144:        the work around is simple: use -msoft-quad-float.
                    145: kcah
                    146:
                    147: hack   gcc-sparc64-nawk
                    148: mdate  25 Oct 2001
                    149: who    martin
                    150: port   sparc64
                    151: file   usr.bin/awk/Makefile            : 1.3 : 13 : 15
                    152: descr
                    153:        Don't use long double on sparc64.
                    154: kcah
                    155:
                    156: hack   gcc-sparc64-ntp
                    157: mdate  12 Nov 2000
                    158: who    martin
                    159: port   sparc64
                    160: file   usr.sbin/ntp/Makefile.inc       : 1.5 : 17 : 19
                    161: descr
                    162:        gcc fails to build ntpd properly, due to double floating point bugs.
                    163:        Ntpd will fail to decode incoming packets; ntpdc -s will report
                    164:        a delay, offset and dispersion of 0.0000 for all peers.
                    165:        the work around is simple: use -msoft-quad-float.
                    166: kcah
                    167:
                    168: hack   gcc-sparc64-x_dhclient
                    169: mdate  27 Dec 2000
                    170: who    mrg
                    171: port   sparc64
                    172: file   distrib/utils/x_dhclient/Makefile       : 1.6 : 28 : 30
                    173: descr
                    174:        gcc fails with an ICE while building dhclient's parse.c with -O2
                    175:        and -Os.  the work around is simple: don't use -Os.
                    176: kcah
                    177:
                    178: hack   lint-no-long-double
                    179: mdate  17 Aug 2001
                    180: who    eeh
                    181: port   sparc64
                    182: file   usr.bin/xlint/lint1/param.h: 1.14 :
                    183: descr
                    184:        Don't use long double on sparc64.
                    185: kcah
                    186:
                    187: hack   netstat ieee1394 address printing.
                    188: mdate  14 Nov 2000
                    189: who    matt
                    190: file   lib/libc/net/getnameinfo.c      : 1.32 : 497 : 503
                    191: descr
                    192:        Because the current implementation of IP over IEEE1394, the
                    193:        fw device address contains more than just the IEEE1394 EUI-64.
                    194:        So when printing out IEEE1394 addresses, ignore the extra stuff.
                    195: kcah
                    196:
                    197: hack   xterm vs. libterm
                    198: mdate  01 Aug 2000
                    199: who    jdc
                    200: file   xsrc/xc/programs/xterm/main.c   : 1.2 : 3609 : 3614
                    201: pr     10383
                    202: descr
                    203:        In order to extend the termcap string over 1023 bytes, a ZZ entry was
                    204:        introduced to point to a memory location containing the full entry.
                    205:        Without this hack, xterm will export a termcap containing the ZZ
                    206:        entry, which will then be ignored by libterm.  As xterm modifies the
                    207:        exported termcap, this would cause those modifications to be ignored.
                    208: kcah
                    209:
                    210: hack   gcc-sh3-sed
                    211: mdate  23 Apr 2002
                    212: who    thorpej
                    213: file   usr.bin/sed/Makefile    : 1.9 : 9 : 13
                    214: descr
                    215:        The in-tree GCC 2.95.3-based compiler ICEs when building
                    216:        with optimization for SuperH.  Hack is to biuld with -O0.
                    217: kcah
                    218:
                    219: hack   gcc-unsigned-compare
                    220: cdate  09 Mar 2002
                    221: mdate  18 Mar 2002
                    222: who    bjh21
                    223: port   arm
                    224: file   dist/bind/lib/nameser/ns_parse.c : 1.3
                    225: file   dist/dhcp/minires/ns_parse.c : 1.3
                    226: file   dist/dhcp/omapip/result.c : 1.2
                    227: file   dist/dhcp/server/failover.c : 1.3
                    228: file   gnu/dist/gawk/eval.c : 1.4
                    229: file   gnu/dist/toolchain/bfd/bfd.c : 1.2
                    230: file   gnu/dist/toolchain/bfd/format.c : 1.2
                    231: file   gnu/dist/toolchain/gdb/target.c : 1.2
                    232: file   sys/kern/vfs_subr.c : 1.172
                    233: descr  When checking that a potentially-unsigned enum is >= 0, assign it
                    234:        to an int first.  This is necessary to avoid "comparison is always
                    235:        true" warnings with -fshort-enums.  Casting to an int really should
                    236:        be enough, but turns out not to be.
                    237: kcah
                    238:
                    239: hack   wi-at-big-endian-bus
                    240: cdate  15 Mar 2002
                    241: who    martin
                    242: file   dev/ic/wireg.h
                    243: descr  Add an option to access the underlying bus in big endian byte order
                    244:        to work around deficiencies in bus_space_{read,write}_* macros.
                    245:        Those don't allow the implementation of a proper pcmcia bus space
                    246:        tag.
                    247: kcah
                    248:
                    249: hack   gcc 2.95.3 -O2 (-fgcse) bug
                    250: cdate  Sun May  5 18:36:04 UTC 2002
                    251: who    tsutsui
                    252: port   macppc
                    253: file   sys/arch/macppc/dev/adb_direct.c:       1.24 : 1895 : 1896
                    254: pr     16678
                    255: descr
                    256:        gcc-2.95.3 does generates wrong code on optimization
                    257:        by gcc -O2 (-fgcse), and adb_read_date_time() returns
                    258:        wrong value on cuda system.
                    259:        A null asm statement has been added to avoid this for workaround.
                    260: kcah
                    261:
                    262: hack   gcc-vax-libbz2
                    263: mdate  27 Jun 2002
                    264: who    thorpej
                    265: port   vax
                    266: file   lib/libbz2/Makefile
                    267: descr
                    268:        libbz2 is mis-compiled with optimization with GCC 2.95.3
                    269:        on VAX.  -O0 works around this problem.
                    270: kcah
                    271:
                    272: hack   egcs-pc532-ip6_mroute
                    273: cdate  09 Jul 2002
                    274: who    simonb
                    275: port   pc532
                    276: file   sys/arch/pc532/conf/Makefile.pc532 : 1.70
                    277: file   sys/arch/pc532/conf/files.pc532 : 1.47
                    278: descr
                    279:        egcs 1.1.2 gets an "internal error--insn does not satisfy its
                    280:        constraints" error compiling ip6_mroute.c with -O2 or greater.
                    281:        -O1 works around this problem.
                    282: kcah
                    283:
                    284: hack   SuperH SH5 Toolchain Bugs
                    285: cdate  11 Jul 2002
                    286: who    scw
                    287: port   sh5
                    288: file   usr.sbin/ndbootd/ndbootd.c : 1.6
                    289: file   usr.sbin/traceroute/traceroute.c : 1.48
                    290: descr
                    291:        The SuperH SH5 toolchain (2.97-sh5-010522) gets an internal
                    292:        compiler error when assigning a bit-wise inverted value
                    293:        under some circumstances.
                    294:        Work around it by splitting the statement into two.
1.2       he        295: kcah
                    296:
                    297: hack   vax Toolchain bug
                    298: cdate  28 Mar 2003
                    299: who    he
                    300: port   vax
                    301: file   sys/arch/vax/vax/intvec.S : 1.5
                    302: descr
                    303:        Workaround for PR toolchain/20924.  The assembler apparently
                    304:        tries to range-check byte offsets when it doesn't have
                    305:        sufficient information to make that decision.
                    306:        Workaround uses `brw' instead of `brb' instruction.
1.3       jdc       307: kcah
                    308:
                    309: hack   specific knowledge of colours in curses code
                    310: cdate  Sun Apr  6 11:05:24 BST 2003
                    311: who    jdc
                    312: port   all
                    313: file   lib/libcurses/color.c : r1.24
                    314: descr
                    315:        Swap red/blue and yellow/cyan colours for COLOR_OTHER.
                    316:        Fix is to enhance libtermcap to understand terminfo-style % sequences.
                    317:        See also:
1.5       salo      318:            http://mail-index.NetBSD.org/tech-userlevel/2003/04/06/0000.html
1.4       scw       319: kcah
                    320:
                    321: hack   SuperH SH5 Toolchain Bugs
                    322: cdate  17 May 2003
                    323: who    scw
                    324: port   sh5
                    325: file   lib/libpthread/pthread_lock.c : 1.7
                    326: descr
                    327:        The SuperH SH5 toolchain generates incorrect PIC code when faced
                    328:        with a symbol which is declared extern, but has local scope due
                    329:        to being defined within an asm() statement (without being declared
                    330:        .globl in that statement). Work around it by adding the .globl.
1.1       lukem     331: kcah

CVSweb <webmaster@jp.NetBSD.org>