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

Annotation of src/doc/HACKS, Revision 1.46

1.46    ! chs         1: # $NetBSD: HACKS,v 1.45 2005/05/09 17:19:06 jmc 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   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
                     39:
                     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
                     52:
                     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
                     62:
1.3       jdc        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:
1.5       salo       71:            http://mail-index.NetBSD.org/tech-userlevel/2003/04/06/0000.html
1.4       scw        72: kcah
                     73:
1.7       he         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.
1.25      mrg        85: kcah
                     86:
                     87: hack   GCC2 isn't C99
                     88: cdate  5 December 2003
                     89: who    mrg
                     90: file   gnu/dist/binutils/ld/ldlex.c: r1.2
                     91: descr
                     92:        ldlex.c is generated from ldlex.l and we get macro redefinition
                     93:        errors from it if __STDC_VERSION__ is not C99 compliant.  This
                     94:        hack forces NetBSD 1.6 and later systems to also include <stdint.h>
                     95:        to get the relevant definitions.  This hack should be backed out
                     96:        when all platforms have switched away from GCC2.
1.11      lukem      97: kcah
                     98:
1.37      junyoung   99: hack   gcc-strict-aliasing
                    100: cdate  6 August 2004
                    101: who    junyoung
                    102: pr     26516
                    103: file   src/usr.sbin/racoon/racoon/Makefile : 1.21
                    104: descr
                    105:        GCC issues a warning "dereferencing type-punned pointer will break
                    106:        strict-aliasing rules" when compiling
                    107:        crypto/dist/kame/racoon/crypto/openssl.c with -O[23s]. Note that this
1.38      junyoung  108:        is due to use of type casting in a non-standard way in the code and
                    109:        not a compiler bug. Once a new release of KAME with a proper fix
                    110:        applied is imported this should be backed out.
1.37      junyoung  111: kcah
                    112:
1.13      simonb    113:
1.21      mycroft   114: port   vax
                    115:
1.45      jmc       116:        hack    gcc 2.95/vax doesn't have stdbool.h and gettext needs it
                    117:        cdate   Mon May  9 12:16:22 CDT 2005
                    118:        who     jmc
                    119:        file    gnu/usr.bin/gettext/Makefile.inc.prog 1.5
                    120:                gnu/usr.bin/gettext/libgrep/Makefile 1.3
                    121:                gnu/usr.bin/gettext/libnlspr/Makefile 1.5
                    122:                gnu/usr.bin/gettext/libnlsut/Makefile 1.3
                    123:        descr
                    124:                The latest gettext assumes a C99 environment or at least
                    125:                configure checks to work around this. As we don't use configure
                    126:                provide a stdbool.h for vax builds locally in directories from
                    127:                the template provided by the gettext code.
                    128:
1.44      jmc       129:        hack    gcc 2.95/vax can't handle __used__ in mcount.c
                    130:        cdate   Fri May  6 14:30:53 CDT 2005
                    131:        who     jmc
                    132:        file    src/lib/libc/gmon/mcount.c 1.17
                    133:        descr
                    134:                 Recent changes to mark this as __used__ to prevent optimization
                    135:                 away on sparc64 don't work on 2.95 vax. Ifdef'd back in the
                    136:                 old __unused__ if on vax.
                    137:
1.21      mycroft   138:        hack    gcc 2.95/vax cannot handle __builtin_ffs()
                    139:        cdate   Fri Aug 23 21:31:15 CEST 2002
                    140:        who     ragge
                    141:        file    sys/lib/libkern/libkern.h : 1.42
                    142:        descr
                    143:                __builtin_ffs() is ifdef'd away if __vax__. Matt Thomas has
                    144:                added this feature to GCC 3 so it can be removed when switching.
1.44      jmc       145:
1.21      mycroft   146:
                    147:        hack    gcc-vax-libbz2
                    148:        mdate   27 Jun 2002
                    149:        who     thorpej
                    150:        file    lib/libbz2/Makefile
                    151:        descr
                    152:                libbz2 is mis-compiled with optimization with GCC 2.95.3
1.24      ragge     153:                on VAX.  -O0 works around this problem.
                    154:        kcah
                    155:
                    156:        hack    gawk
                    157:        mdate   8 Nov 2003
                    158:        who     ragge
                    159:        file    gnu/usr.bin/gawk/Makefile
                    160:        descr
                    161:                gawk is mis-compiled with optimization with GCC 2.95.3
1.21      mycroft   162:                on VAX.  -O0 works around this problem.
                    163:        kcah
                    164:
                    165:        hack    vax Toolchain bug
                    166:        cdate   28 Mar 2003
                    167:        who     he
                    168:        file    sys/arch/vax/vax/intvec.S : 1.5
                    169:        descr
                    170:                Workaround for PR toolchain/20924.  The assembler apparently
                    171:                tries to range-check byte offsets when it doesn't have
                    172:                sufficient information to make that decision.
                    173:                Workaround uses `brw' instead of `brb' instruction.
1.23      he        174:        kcah
                    175:
                    176:        hack    vax gcc 2.95.3 -Wuninitialized workarounds
                    177:        cdate   6 Nov 2003
                    178:        who     he
                    179:        file    sys/dev/bi/if_ni.c : 1.22
                    180:        file    sys/arch/vax/vax/ctu.c : 1.20
                    181:        descr
                    182:                Workaround for gcc 2.95.3 failing to detect that certain
                    183:                variables will be initialized; so that this code compiles
                    184:                with -Wuninitialized.  Should be reviewed and possibly
                    185:                reverted when gcc 3.3.2 is ready for vax.
1.21      mycroft   186:        kcah
                    187:
1.34      cl        188:        hack    vax gcc 2.95.3 structure initialization
                    189:        cdat    13 May 2004
                    190:        who     cl
                    191:        file    sys/miscfs/kernfs/kernfs_vnops.c : 1.104
                    192:        descr
                    193:                Workaround for gcc 2.95.3 failing to initialize structures
                    194:                and/or unions inside structures using nested designators.
                    195:                Should be reverted when gcc >=3.3.3 is ready for vax.
                    196:        kcah
1.21      mycroft   197:
1.35      he        198:        hack    vax gcc 2.95.3 needs -I. to build nslexer.c
                    199:        cdat    6 Jun 2004
1.36      he        200:        who     mhitch
                    201:        file    lib/libc/arch/vax/Makefile.inc : 1.6
1.35      he        202:        descr
                    203:                It appears necessary to add -I. to CPPFLAGS when building
                    204:                nslesxer.c.  This may be caused by gcc 2.95.3 being used.
                    205:                Should be reverted when a newer gcc is ready for vax.
                    206:        kcah
                    207:
1.43      tron      208:        hack    vax gcc 2.95.3 doesn't understand "-std=c99"
                    209:        cdat    5 April 2005
                    210:        who     tron
                    211:        file    src/share/mk/bsd.sys.mk
                    212:        descr
                    213:                We cannot use "-std=c99" for compiler warning level 4 and above
                    214:                because gcc 2.95.3 doesn't support that option.
                    215:        kcah
                    216:
1.21      mycroft   217: port   sparc64
                    218:
                    219:        hack    binutil-2.11-sparc64-pltrela
                    220:        mdate   14 Aug 2001
                    221:        who     eeh
                    222:        file    libexec/ld.elf_so/arch/sparc64/mdreloc.c
                    223:        descr
1.39      skrll     224:                The first four PLT entries are reserved.  There is some
1.21      mycroft   225:                disagreement whether they should have associated relocation
                    226:                entries.  Both the SPARC 32-bit and 64-bit ELF specifications
                    227:                say that they should have relocation entries, but the 32-bit
                    228:                SPARC binutils do not generate them, and now the 64-bit SPARC
                    229:                binutils have stopped generating them too.
                    230:
                    231:                To provide binary compatibility, we will check the first entry,
                    232:                if it is reserved it should not be of the type JMP_SLOT.  If it
                    233:                is JMP_SLOT, then the 4 reserved entries were not generated and
                    234:                our index is 4 entries too far, so we frob the rela pointer.
                    235:        kcah
                    236:
                    237:
                    238: port   arm
                    239:
                    240:        hack    gcc-unsigned-compare
                    241:        cdate   09 Mar 2002
                    242:        mdate   18 Mar 2002
                    243:        who     bjh21
                    244:        file    dist/bind/lib/nameser/ns_parse.c : 1.3
                    245:        file    dist/dhcp/minires/ns_parse.c : 1.3
                    246:        file    dist/dhcp/omapip/result.c : 1.2
                    247:        file    dist/dhcp/server/failover.c : 1.3
                    248:        file    gnu/dist/gawk/eval.c : 1.4
                    249:        file    gnu/dist/toolchain/bfd/bfd.c : 1.2
                    250:        file    gnu/dist/toolchain/bfd/format.c : 1.2
                    251:        file    gnu/dist/toolchain/gdb/target.c : 1.2
                    252:        file    sys/kern/vfs_subr.c : 1.172
                    253:        descr   When checking that a potentially-unsigned enum is >= 0, assign
                    254:                it to an int first.  This is necessary to avoid "comparison is
                    255:                always true" warnings with -fshort-enums.  Casting to an int
                    256:                really should be enough, but turns out not to be.
                    257:        kcah
                    258:
                    259:        hack    gcc 3.3.2/arm sys/kern/uipc_socket.c
                    260:        cdate   Tue Oct 28 18:02:16 GMT 2003
                    261:        who     skrll
1.41      bjh21     262:        pr      23044
                    263:        file    sys/arch/arm/conf/Makefile.arm : 1.19
1.21      mycroft   264:        descr
                    265:                Performing a build.sh tools on a CATS with NFS mounted
                    266:                obj and src directories results in "panic: receive 1"
                    267:                The hack is to compile sys/kern/uipc_socket.c with
                    268:                -fno-strict-aliasing
                    269:        kcah
                    270:
                    271:
1.13      simonb    272: port   pc532
1.16      cl        273:
1.21      mycroft   274:        hack    egcs-pc532-ip6_mroute
                    275:        cdate   09 Jul 2002
                    276:        who     simonb
                    277:        file    sys/arch/pc532/conf/Makefile.pc532 : 1.70
                    278:        file    sys/arch/pc532/conf/files.pc532 : 1.47
                    279:        descr
                    280:                egcs 1.1.2 gets an "internal error--insn does not satisfy its
                    281:                constraints" error compiling ip6_mroute.c with -O2 or greater.
                    282:                -O1 works around this problem.
                    283:        kcah
                    284:
                    285:        hack    gcc-pc532-duffs_device
                    286:        cdate   Mon Oct 27 07:23:05 UTC 2003
                    287:        who     simonb
                    288:        file    sys/arch/pc532/conf/Makefile.pc532 : 1.71
                    289:        file    sys/arch/pc532/conf/files.pc532 : 1.52
                    290:        pr      GCC PR optimization/5230
                    291:        descr
                    292:                gcc incorrectly gives an "unreachable code at beginning of
                    293:                switch statement" for a Duff's device construct in
                    294:                arch/pc532/dev/ncr.c.  There is no way to disable just this
                    295:                warning, so -Wno-error is turned on for this file.
                    296:        kcah
                    297:
1.26      simonb    298:        hack    gcc332-cppmacro-ice
                    299:        cdate   Sun Dec  7 12:48:33 UTC 2003
                    300:        who     simonb
                    301:        file    gnu/usr.bin/gcc3/libcpp/Makefile : 1.2
                    302:        descr
                    303:                gcc 3.3.2 gets an ICE when compiling cppmacro.c with -O2.
                    304:                The hack is to use -O1 for this file.  Fixed in gcc
                    305:                -current mainline, unable to work out where the fix is
                    306:                right now.
                    307:        kcah
                    308:
1.21      mycroft   309:
                    310: port   sh3
                    311:
                    312:        hack    gcc-sh3-sed
                    313:        mdate   23 Apr 2002
                    314:        who     thorpej
                    315:        file    usr.bin/sed/Makefile    : 1.9 : 9 : 13
                    316:        descr
                    317:                The in-tree GCC 2.95.3-based compiler ICEs when building
1.26      simonb    318:                with optimization for SuperH.  Hack is to build with -O0.
1.21      mycroft   319:        kcah
                    320:
                    321:
                    322: port   sh5
                    323:
                    324:        hack    SuperH SH5 Toolchain Bugs
                    325:        cdate   11 Jul 2002
                    326:        who     scw
                    327:        file    usr.sbin/ndbootd/ndbootd.c : 1.6
                    328:        file    usr.sbin/traceroute/traceroute.c : 1.48
                    329:        descr
                    330:                The SuperH SH5 toolchain (2.97-sh5-010522) gets an internal
                    331:                compiler error when assigning a bit-wise inverted value
                    332:                under some circumstances.
                    333:                Work around it by splitting the statement into two.
                    334:        kcah
                    335:
                    336:        hack    SuperH SH5 Toolchain Bugs
                    337:        cdate   17 May 2003
                    338:        who     scw
                    339:        file    lib/libpthread/pthread_lock.c : 1.7
                    340:        descr
                    341:                The SuperH SH5 toolchain generates incorrect PIC code when
                    342:                faced with a symbol which is declared extern, but has local
                    343:                scope due to being defined within an asm() statement (without
                    344:                being declared .globl in that statement). Work around it by
                    345:                adding the .globl.
1.27      scw       346:        kcah
                    347:
                    348:        hack    gcc 3.3.2 on sh5 - ICE compiling reload1.c at -O2
                    349:        cdate   Sun Dec  7 19:44:05 GMT 2003
                    350:        who     scw
                    351:        file    gnu/usr.bin/gcc3/backend/Makefile : 1.13
                    352:        descr
                    353:                Gcc3 for sh5 gets an ICE compiling reload1.c at -O2.
                    354:                Drop to -O1 for now when building for sh5.
                    355:        kcah
1.28      scw       356:
                    357:        hack    gcc 3.3.2 on sh5 - ICE compiling elf32.c/elf64.c at -O2
                    358:        cdate   Sun Dec  7 21:10:46 GMT 2003
                    359:        who     scw
                    360:        file    gnu/lib/libbfd/Makefile : 1.39
                    361:        descr
                    362:                Gcc3 for sh5 gets an ICE compiling libbfd's elf32.c
                    363:                and elf64.c at -O2.
                    364:                Drop to -O1 for now when building for sh5.
                    365:        kcah
                    366:
1.27      scw       367:
                    368:        hack    gcc 3.3.2 on sh5 - fatal warning compiling function.c
                    369:        cdate   Sun Dec  7 19:44:05 GMT 2003
                    370:        who     scw
                    371:        file    gnu/usr.bin/gcc3/backend/Makefile : 1.13
                    372:        descr
                    373:                Gcc3 for sh5 issues a warning:
                    374:                .../gnu/dist/gcc/gcc/function.c:4742: warning: `and' of
                    375:                    mutually exclusive equal-tests is always 0.
                    376:                This causes the build to fail because of -Werror.
                    377:                Work-around by defining NOGCCERROR when building for sh5.
                    378:        kcah
                    379:
1.40      he        380:        hack    gcc 3.3.3 on sh5 - ICE compiling rbtdb.c and rbtdb64.c
                    381:        cdate   Thu Nov 11 00:35:33 UTC 2004
                    382:        who     he
                    383:        file    usr.sbin/bind/libdns/Makefile/1.2
1.27      scw       384:        descr
1.40      he        385:                Gcc3 for sh5 gets an ICE compiling these files at -O2.
1.27      scw       386:                Drop to -O1 for now when building for sh5.
1.21      mycroft   387:        kcah
1.17      mrg       388:
                    389:
                    390: port   sun2
1.20      skrll     391:
1.21      mycroft   392:        hack    gcc 3.3.2/mdsetimage
                    393:        cdate   Tue Oct 28 18:43:05 EST 2003
                    394:        who     fredette
                    395:        file    gnu/usr.sbin/mdsetimage/Makefile : 1.15
                    396:        descr
                    397:                mdsetimage.c causes cc1 to barf for as-yet unknown reasons.
1.26      simonb    398:                this hack uses -O0 to avoid the problem.
1.21      mycroft   399:        kcah
                    400:
                    401:        hack    gcc 3.3.2/installboot/ffs.c
                    402:        cdate   Tue Oct 28 18:43:05 EST 2003
                    403:        who     fredette
                    404:        file    usr.sbin/installboot/Makefile : 1.26
                    405:        descr
                    406:                ffs.c causes cc1 to barf for as-yet unknown reasons.  this
1.26      simonb    407:                hack uses -O0 to avoid the problem.
1.22      mrg       408:        kcah
                    409:
                    410:
1.46    ! chs       411: port   sun2 m68k
1.22      mrg       412:
                    413:        hack    gcc 3.3.2/gcc/ra-colorize.c
                    414:        cdate   Wed Nov  5 11:03:13 EST 2003
                    415:        who     mrg
1.46    ! chs       416:        file    gnu/usr.bin/gcc3/backend/Makefile : 1.11
1.22      mrg       417:        descr
                    418:                ra-colorize.c causes a whole spew of unreferenced .L* local
                    419:                symbols.  using -O0 (or even -O2 reportedly) avoids the problem.
1.21      mycroft   420:        kcah
1.31      martin    421:
                    422: port   sparc64
                    423:
                    424:        hack    disable optimzations for uvm_bio.c on 32 bit kernels
                    425:        cdate   Sun Mar 21 14:14:04 MET 2004
                    426:        who     martin
1.32      martin    427:        file    sys/arch/sparc64/conf/Makefile.sparc64 : 1.53-1.54
                    428:        file    sys/arch/sparc64/conf/files.sparc64 : 1.93
1.31      martin    429:        descr
                    430:                The sparc compiler miscompiles uvm_bio.c when using
                    431:                any optimization. This results in ubc_release panics.
                    432:        kcah
1.42      christos  433:
                    434: port   macppc
                    435:
                    436:        hack    remove inline from rotate_{left,right}
                    437:        cdate   Tue Feb 22 13:43:25 EST 2005
                    438:        who     christos
                    439:        file    src/dist/bind/lib/dns/rbt.c
                    440:        descr
                    441:                The macppc gcc-3.3 compiler miscompiles rbt.c when these
                    442:                functions are inlined. The error is:
                    443:                .* named[368]: rbt.c:1584: INSIST(child != (void *)0) >failed
                    444:                .* named[368]: exiting (due to assertion failure)
                    445:                This is reportedly fixed in gcc-3.4
                    446:        kcah
1.46    ! chs       447:
        !           448: port   hppa
        !           449:
        !           450:        hack    hppa-gcc-3.3.3/grep/dfa.c
        !           451:        cdate   Sun Aug  8 08:34:32 PDT 2004
        !           452:        who     chs
        !           453:        file    gnu/usr.bin/grep/grep/Makefile : 1.4
        !           454:        descr
        !           455:                gcc 3.3.3 generates bad code for dfa.c with -O2,
        !           456:                reduce optimization to -O1 to avoid the bug.
        !           457:        kcah

CVSweb <webmaster@jp.NetBSD.org>