458 lines
14 KiB
Plaintext
458 lines
14 KiB
Plaintext
# $NetBSD: HACKS,v 1.46 2005/05/11 13:10:21 chs Exp $
|
|
#
|
|
# This file is intended to document workarounds for currently unsolved
|
|
# (mostly) compiler bugs.
|
|
#
|
|
# Format:
|
|
# hack title
|
|
# cdate creation date
|
|
# mdate mod date
|
|
# who responsible developer
|
|
# port ...
|
|
# affected ports, space separated, if not "all"
|
|
# file affected file : revision : line from : line to
|
|
# affected files and revision and line numbers describing hack
|
|
# multiple lines if necessary.
|
|
# pr NNNN ...
|
|
# problem reports this hack works around, if known. Space
|
|
# separated.
|
|
# regress src/regress/directory/where/test/found
|
|
# regression test directories, if available.
|
|
# descr
|
|
# insert short informal description (multi-line). (Longer ones
|
|
# should be in the PR database. More formal descriptions might
|
|
# be in the regress tree. See above).
|
|
# kcah
|
|
# closing bracket.
|
|
#
|
|
# this is a comment.
|
|
|
|
hack netstat ieee1394 address printing.
|
|
mdate 14 Nov 2000
|
|
who matt
|
|
file lib/libc/net/getnameinfo.c : 1.32 : 497 : 503
|
|
descr
|
|
Because the current implementation of IP over IEEE1394, the
|
|
fw device address contains more than just the IEEE1394 EUI-64.
|
|
So when printing out IEEE1394 addresses, ignore the extra stuff.
|
|
kcah
|
|
|
|
hack xterm vs. libterm
|
|
mdate 01 Aug 2000
|
|
who jdc
|
|
file xsrc/xc/programs/xterm/main.c : 1.2 : 3609 : 3614
|
|
pr 10383
|
|
descr
|
|
In order to extend the termcap string over 1023 bytes, a ZZ entry was
|
|
introduced to point to a memory location containing the full entry.
|
|
Without this hack, xterm will export a termcap containing the ZZ
|
|
entry, which will then be ignored by libterm. As xterm modifies the
|
|
exported termcap, this would cause those modifications to be ignored.
|
|
kcah
|
|
|
|
hack wi-at-big-endian-bus
|
|
cdate 15 Mar 2002
|
|
who martin
|
|
file dev/ic/wireg.h
|
|
descr Add an option to access the underlying bus in big endian byte order
|
|
to work around deficiencies in bus_space_{read,write}_* macros.
|
|
Those don't allow the implementation of a proper pcmcia bus space
|
|
tag.
|
|
kcah
|
|
|
|
hack specific knowledge of colours in curses code
|
|
cdate Sun Apr 6 11:05:24 BST 2003
|
|
who jdc
|
|
file lib/libcurses/color.c : r1.24
|
|
descr
|
|
Swap red/blue and yellow/cyan colours for COLOR_OTHER.
|
|
Fix is to enhance libtermcap to understand terminfo-style % sequences.
|
|
See also:
|
|
http://mail-index.NetBSD.org/tech-userlevel/2003/04/06/0000.html
|
|
kcah
|
|
|
|
hack Compensation for differing types of LINUX_USRSTACK and USRSTACK
|
|
cdate 21 Aug 2003
|
|
who he
|
|
file sys/miscfs/procfs/procfs_linux.c : 1.14
|
|
descr
|
|
Not all ports have LINUX_USRSTACK and/or USRSTACK defined as
|
|
literals/constants, but refer to variables of a type which is
|
|
not "unsigned long", causing compilation of procfs_linux.c to
|
|
fail with "makes integer from pointer without a cast". This
|
|
is observed on e.g. the sun3 port. Ideally the "types" for
|
|
symbols should be consistent across all ports.
|
|
kcah
|
|
|
|
hack GCC2 isn't C99
|
|
cdate 5 December 2003
|
|
who mrg
|
|
file gnu/dist/binutils/ld/ldlex.c: r1.2
|
|
descr
|
|
ldlex.c is generated from ldlex.l and we get macro redefinition
|
|
errors from it if __STDC_VERSION__ is not C99 compliant. This
|
|
hack forces NetBSD 1.6 and later systems to also include <stdint.h>
|
|
to get the relevant definitions. This hack should be backed out
|
|
when all platforms have switched away from GCC2.
|
|
kcah
|
|
|
|
hack gcc-strict-aliasing
|
|
cdate 6 August 2004
|
|
who junyoung
|
|
pr 26516
|
|
file src/usr.sbin/racoon/racoon/Makefile : 1.21
|
|
descr
|
|
GCC issues a warning "dereferencing type-punned pointer will break
|
|
strict-aliasing rules" when compiling
|
|
crypto/dist/kame/racoon/crypto/openssl.c with -O[23s]. Note that this
|
|
is due to use of type casting in a non-standard way in the code and
|
|
not a compiler bug. Once a new release of KAME with a proper fix
|
|
applied is imported this should be backed out.
|
|
kcah
|
|
|
|
|
|
port vax
|
|
|
|
hack gcc 2.95/vax doesn't have stdbool.h and gettext needs it
|
|
cdate Mon May 9 12:16:22 CDT 2005
|
|
who jmc
|
|
file gnu/usr.bin/gettext/Makefile.inc.prog 1.5
|
|
gnu/usr.bin/gettext/libgrep/Makefile 1.3
|
|
gnu/usr.bin/gettext/libnlspr/Makefile 1.5
|
|
gnu/usr.bin/gettext/libnlsut/Makefile 1.3
|
|
descr
|
|
The latest gettext assumes a C99 environment or at least
|
|
configure checks to work around this. As we don't use configure
|
|
provide a stdbool.h for vax builds locally in directories from
|
|
the template provided by the gettext code.
|
|
|
|
hack gcc 2.95/vax can't handle __used__ in mcount.c
|
|
cdate Fri May 6 14:30:53 CDT 2005
|
|
who jmc
|
|
file src/lib/libc/gmon/mcount.c 1.17
|
|
descr
|
|
Recent changes to mark this as __used__ to prevent optimization
|
|
away on sparc64 don't work on 2.95 vax. Ifdef'd back in the
|
|
old __unused__ if on vax.
|
|
|
|
hack gcc 2.95/vax cannot handle __builtin_ffs()
|
|
cdate Fri Aug 23 21:31:15 CEST 2002
|
|
who ragge
|
|
file sys/lib/libkern/libkern.h : 1.42
|
|
descr
|
|
__builtin_ffs() is ifdef'd away if __vax__. Matt Thomas has
|
|
added this feature to GCC 3 so it can be removed when switching.
|
|
|
|
|
|
hack gcc-vax-libbz2
|
|
mdate 27 Jun 2002
|
|
who thorpej
|
|
file lib/libbz2/Makefile
|
|
descr
|
|
libbz2 is mis-compiled with optimization with GCC 2.95.3
|
|
on VAX. -O0 works around this problem.
|
|
kcah
|
|
|
|
hack gawk
|
|
mdate 8 Nov 2003
|
|
who ragge
|
|
file gnu/usr.bin/gawk/Makefile
|
|
descr
|
|
gawk is mis-compiled with optimization with GCC 2.95.3
|
|
on VAX. -O0 works around this problem.
|
|
kcah
|
|
|
|
hack vax Toolchain bug
|
|
cdate 28 Mar 2003
|
|
who he
|
|
file sys/arch/vax/vax/intvec.S : 1.5
|
|
descr
|
|
Workaround for PR toolchain/20924. The assembler apparently
|
|
tries to range-check byte offsets when it doesn't have
|
|
sufficient information to make that decision.
|
|
Workaround uses `brw' instead of `brb' instruction.
|
|
kcah
|
|
|
|
hack vax gcc 2.95.3 -Wuninitialized workarounds
|
|
cdate 6 Nov 2003
|
|
who he
|
|
file sys/dev/bi/if_ni.c : 1.22
|
|
file sys/arch/vax/vax/ctu.c : 1.20
|
|
descr
|
|
Workaround for gcc 2.95.3 failing to detect that certain
|
|
variables will be initialized; so that this code compiles
|
|
with -Wuninitialized. Should be reviewed and possibly
|
|
reverted when gcc 3.3.2 is ready for vax.
|
|
kcah
|
|
|
|
hack vax gcc 2.95.3 structure initialization
|
|
cdat 13 May 2004
|
|
who cl
|
|
file sys/miscfs/kernfs/kernfs_vnops.c : 1.104
|
|
descr
|
|
Workaround for gcc 2.95.3 failing to initialize structures
|
|
and/or unions inside structures using nested designators.
|
|
Should be reverted when gcc >=3.3.3 is ready for vax.
|
|
kcah
|
|
|
|
hack vax gcc 2.95.3 needs -I. to build nslexer.c
|
|
cdat 6 Jun 2004
|
|
who mhitch
|
|
file lib/libc/arch/vax/Makefile.inc : 1.6
|
|
descr
|
|
It appears necessary to add -I. to CPPFLAGS when building
|
|
nslesxer.c. This may be caused by gcc 2.95.3 being used.
|
|
Should be reverted when a newer gcc is ready for vax.
|
|
kcah
|
|
|
|
hack vax gcc 2.95.3 doesn't understand "-std=c99"
|
|
cdat 5 April 2005
|
|
who tron
|
|
file src/share/mk/bsd.sys.mk
|
|
descr
|
|
We cannot use "-std=c99" for compiler warning level 4 and above
|
|
because gcc 2.95.3 doesn't support that option.
|
|
kcah
|
|
|
|
port sparc64
|
|
|
|
hack binutil-2.11-sparc64-pltrela
|
|
mdate 14 Aug 2001
|
|
who eeh
|
|
file libexec/ld.elf_so/arch/sparc64/mdreloc.c
|
|
descr
|
|
The first four PLT entries are reserved. There is some
|
|
disagreement whether they should have associated relocation
|
|
entries. Both the SPARC 32-bit and 64-bit ELF specifications
|
|
say that they should have relocation entries, but the 32-bit
|
|
SPARC binutils do not generate them, and now the 64-bit SPARC
|
|
binutils have stopped generating them too.
|
|
|
|
To provide binary compatibility, we will check the first entry,
|
|
if it is reserved it should not be of the type JMP_SLOT. If it
|
|
is JMP_SLOT, then the 4 reserved entries were not generated and
|
|
our index is 4 entries too far, so we frob the rela pointer.
|
|
kcah
|
|
|
|
|
|
port arm
|
|
|
|
hack gcc-unsigned-compare
|
|
cdate 09 Mar 2002
|
|
mdate 18 Mar 2002
|
|
who bjh21
|
|
file dist/bind/lib/nameser/ns_parse.c : 1.3
|
|
file dist/dhcp/minires/ns_parse.c : 1.3
|
|
file dist/dhcp/omapip/result.c : 1.2
|
|
file dist/dhcp/server/failover.c : 1.3
|
|
file gnu/dist/gawk/eval.c : 1.4
|
|
file gnu/dist/toolchain/bfd/bfd.c : 1.2
|
|
file gnu/dist/toolchain/bfd/format.c : 1.2
|
|
file gnu/dist/toolchain/gdb/target.c : 1.2
|
|
file sys/kern/vfs_subr.c : 1.172
|
|
descr When checking that a potentially-unsigned enum is >= 0, assign
|
|
it to an int first. This is necessary to avoid "comparison is
|
|
always true" warnings with -fshort-enums. Casting to an int
|
|
really should be enough, but turns out not to be.
|
|
kcah
|
|
|
|
hack gcc 3.3.2/arm sys/kern/uipc_socket.c
|
|
cdate Tue Oct 28 18:02:16 GMT 2003
|
|
who skrll
|
|
pr 23044
|
|
file sys/arch/arm/conf/Makefile.arm : 1.19
|
|
descr
|
|
Performing a build.sh tools on a CATS with NFS mounted
|
|
obj and src directories results in "panic: receive 1"
|
|
The hack is to compile sys/kern/uipc_socket.c with
|
|
-fno-strict-aliasing
|
|
kcah
|
|
|
|
|
|
port pc532
|
|
|
|
hack egcs-pc532-ip6_mroute
|
|
cdate 09 Jul 2002
|
|
who simonb
|
|
file sys/arch/pc532/conf/Makefile.pc532 : 1.70
|
|
file sys/arch/pc532/conf/files.pc532 : 1.47
|
|
descr
|
|
egcs 1.1.2 gets an "internal error--insn does not satisfy its
|
|
constraints" error compiling ip6_mroute.c with -O2 or greater.
|
|
-O1 works around this problem.
|
|
kcah
|
|
|
|
hack gcc-pc532-duffs_device
|
|
cdate Mon Oct 27 07:23:05 UTC 2003
|
|
who simonb
|
|
file sys/arch/pc532/conf/Makefile.pc532 : 1.71
|
|
file sys/arch/pc532/conf/files.pc532 : 1.52
|
|
pr GCC PR optimization/5230
|
|
descr
|
|
gcc incorrectly gives an "unreachable code at beginning of
|
|
switch statement" for a Duff's device construct in
|
|
arch/pc532/dev/ncr.c. There is no way to disable just this
|
|
warning, so -Wno-error is turned on for this file.
|
|
kcah
|
|
|
|
hack gcc332-cppmacro-ice
|
|
cdate Sun Dec 7 12:48:33 UTC 2003
|
|
who simonb
|
|
file gnu/usr.bin/gcc3/libcpp/Makefile : 1.2
|
|
descr
|
|
gcc 3.3.2 gets an ICE when compiling cppmacro.c with -O2.
|
|
The hack is to use -O1 for this file. Fixed in gcc
|
|
-current mainline, unable to work out where the fix is
|
|
right now.
|
|
kcah
|
|
|
|
|
|
port sh3
|
|
|
|
hack gcc-sh3-sed
|
|
mdate 23 Apr 2002
|
|
who thorpej
|
|
file usr.bin/sed/Makefile : 1.9 : 9 : 13
|
|
descr
|
|
The in-tree GCC 2.95.3-based compiler ICEs when building
|
|
with optimization for SuperH. Hack is to build with -O0.
|
|
kcah
|
|
|
|
|
|
port sh5
|
|
|
|
hack SuperH SH5 Toolchain Bugs
|
|
cdate 11 Jul 2002
|
|
who scw
|
|
file usr.sbin/ndbootd/ndbootd.c : 1.6
|
|
file usr.sbin/traceroute/traceroute.c : 1.48
|
|
descr
|
|
The SuperH SH5 toolchain (2.97-sh5-010522) gets an internal
|
|
compiler error when assigning a bit-wise inverted value
|
|
under some circumstances.
|
|
Work around it by splitting the statement into two.
|
|
kcah
|
|
|
|
hack SuperH SH5 Toolchain Bugs
|
|
cdate 17 May 2003
|
|
who scw
|
|
file lib/libpthread/pthread_lock.c : 1.7
|
|
descr
|
|
The SuperH SH5 toolchain generates incorrect PIC code when
|
|
faced with a symbol which is declared extern, but has local
|
|
scope due to being defined within an asm() statement (without
|
|
being declared .globl in that statement). Work around it by
|
|
adding the .globl.
|
|
kcah
|
|
|
|
hack gcc 3.3.2 on sh5 - ICE compiling reload1.c at -O2
|
|
cdate Sun Dec 7 19:44:05 GMT 2003
|
|
who scw
|
|
file gnu/usr.bin/gcc3/backend/Makefile : 1.13
|
|
descr
|
|
Gcc3 for sh5 gets an ICE compiling reload1.c at -O2.
|
|
Drop to -O1 for now when building for sh5.
|
|
kcah
|
|
|
|
hack gcc 3.3.2 on sh5 - ICE compiling elf32.c/elf64.c at -O2
|
|
cdate Sun Dec 7 21:10:46 GMT 2003
|
|
who scw
|
|
file gnu/lib/libbfd/Makefile : 1.39
|
|
descr
|
|
Gcc3 for sh5 gets an ICE compiling libbfd's elf32.c
|
|
and elf64.c at -O2.
|
|
Drop to -O1 for now when building for sh5.
|
|
kcah
|
|
|
|
|
|
hack gcc 3.3.2 on sh5 - fatal warning compiling function.c
|
|
cdate Sun Dec 7 19:44:05 GMT 2003
|
|
who scw
|
|
file gnu/usr.bin/gcc3/backend/Makefile : 1.13
|
|
descr
|
|
Gcc3 for sh5 issues a warning:
|
|
.../gnu/dist/gcc/gcc/function.c:4742: warning: `and' of
|
|
mutually exclusive equal-tests is always 0.
|
|
This causes the build to fail because of -Werror.
|
|
Work-around by defining NOGCCERROR when building for sh5.
|
|
kcah
|
|
|
|
hack gcc 3.3.3 on sh5 - ICE compiling rbtdb.c and rbtdb64.c
|
|
cdate Thu Nov 11 00:35:33 UTC 2004
|
|
who he
|
|
file usr.sbin/bind/libdns/Makefile/1.2
|
|
descr
|
|
Gcc3 for sh5 gets an ICE compiling these files at -O2.
|
|
Drop to -O1 for now when building for sh5.
|
|
kcah
|
|
|
|
|
|
port sun2
|
|
|
|
hack gcc 3.3.2/mdsetimage
|
|
cdate Tue Oct 28 18:43:05 EST 2003
|
|
who fredette
|
|
file gnu/usr.sbin/mdsetimage/Makefile : 1.15
|
|
descr
|
|
mdsetimage.c causes cc1 to barf for as-yet unknown reasons.
|
|
this hack uses -O0 to avoid the problem.
|
|
kcah
|
|
|
|
hack gcc 3.3.2/installboot/ffs.c
|
|
cdate Tue Oct 28 18:43:05 EST 2003
|
|
who fredette
|
|
file usr.sbin/installboot/Makefile : 1.26
|
|
descr
|
|
ffs.c causes cc1 to barf for as-yet unknown reasons. this
|
|
hack uses -O0 to avoid the problem.
|
|
kcah
|
|
|
|
|
|
port sun2 m68k
|
|
|
|
hack gcc 3.3.2/gcc/ra-colorize.c
|
|
cdate Wed Nov 5 11:03:13 EST 2003
|
|
who mrg
|
|
file gnu/usr.bin/gcc3/backend/Makefile : 1.11
|
|
descr
|
|
ra-colorize.c causes a whole spew of unreferenced .L* local
|
|
symbols. using -O0 (or even -O2 reportedly) avoids the problem.
|
|
kcah
|
|
|
|
port sparc64
|
|
|
|
hack disable optimzations for uvm_bio.c on 32 bit kernels
|
|
cdate Sun Mar 21 14:14:04 MET 2004
|
|
who martin
|
|
file sys/arch/sparc64/conf/Makefile.sparc64 : 1.53-1.54
|
|
file sys/arch/sparc64/conf/files.sparc64 : 1.93
|
|
descr
|
|
The sparc compiler miscompiles uvm_bio.c when using
|
|
any optimization. This results in ubc_release panics.
|
|
kcah
|
|
|
|
port macppc
|
|
|
|
hack remove inline from rotate_{left,right}
|
|
cdate Tue Feb 22 13:43:25 EST 2005
|
|
who christos
|
|
file src/dist/bind/lib/dns/rbt.c
|
|
descr
|
|
The macppc gcc-3.3 compiler miscompiles rbt.c when these
|
|
functions are inlined. The error is:
|
|
.* named[368]: rbt.c:1584: INSIST(child != (void *)0) >failed
|
|
.* named[368]: exiting (due to assertion failure)
|
|
This is reportedly fixed in gcc-3.4
|
|
kcah
|
|
|
|
port hppa
|
|
|
|
hack hppa-gcc-3.3.3/grep/dfa.c
|
|
cdate Sun Aug 8 08:34:32 PDT 2004
|
|
who chs
|
|
file gnu/usr.bin/grep/grep/Makefile : 1.4
|
|
descr
|
|
gcc 3.3.3 generates bad code for dfa.c with -O2,
|
|
reduce optimization to -O1 to avoid the bug.
|
|
kcah
|