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

Annotation of src/doc/HACKS, Revision 1.43

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

CVSweb <webmaster@jp.NetBSD.org>