log
These are notable or amusing bugs and patches I dealt with in the past.
2025
8 Oct: binutils ld performance bug: ld.bfd has non-linear slowdown on section count, triggered on ghc binaries
8 Oct: nix bug: ca-derivations builds are failing on 2.32
23 Sep: cmake bug: gcc-16 exposed uncompilable code via devirtualization
21 Sep: chromium bug: on sway chromium lost detection of video acceleration
7 Sep: isl bug: make --shuffle failed occasionally
8 Aug: nixpkgs bug: isMachO magic detector incorrectly read file header
5 Aug: ed bug: Test suite fails intermittently due to pipe to true: ed ... | true
19 July: assimp bug: Test suite regression
24 May: elfutils bug: include header was clobbered by local binary
22 May: nixpkgs bug: a bunch of unstable sort predicates
20 May: libdeflate bug: gcc-16 dropped evex512 support
1 May: libconfig bug: test failure when prints binary integers on 32-bit systems
29 April: nix bug: xterm-style OSC 8 was stripped incorrectly
19 April: swig bug: bison is called too many times at build
18 April: nix bug: json deserialization uses incorrect accessors
31 Mar: duperemove bug: infinite looping on NoCOW files
30 Mar: doxygen bug: missing LFS support
29 Mar: graphviz bug: missing LFS support
20 Mar: nixd bug: meson.build had incomplete dependencies, build failed sometimes
27 Feb: man-pages bug: Makefile failed to escape # properly
23 Feb: libtool bug: clang c++ libraries don’t pull in required compiler-rt
27 Jan: vim bug: make install sometimes fails in parallel mode.
2024
3 Dec: guix bug: libgcrypt linking order problem.
26 Nov: nix bug: bz2 meson detection failure.
6 Nov: pixman bug: rvv riscv64 extension is not fully detected.
31 Oct: swtpm bug: 32-bit file API use on filesystem with 64-bit inodes.
24 Oct: gcc bug: -flto fails on array initializers.
28 Oct: unbound bug: make --shuffle found multiple targets rule error.
13 Oct: gcc bug: false positive warnings on overrides for multiple inheritance.
29 Sep: gcc bug: coroutine waiter destroyed wait object too early.
18 Sep: nixpkgs bug: /etc/wpa_supplicant.conf is zeroed out.
6 Sep: nix bug: toml parser changes timestamp parsing/printing rules.
24 Aug: warzone bug: use-after-free detected by gcc warning.
24 Aug: diffoscope bug: crash when attempt to diff a symlink to the directory.
29 July: less bug: PageUp / PageDown keys don’t work anymore.
16 July: gcc bug: saturated truncation works incorrectly on bitfields.
4 June: nixpkgs: stdenv fails on sourceRoot with dashes.
1 June: nixpkgs: gcc.libgcc on musl is not stripped.
14 April: linux bug: eevdf scheduler sometimes crashes kernel.
1 April: nixpkgs: fix pcre2 to enable jit.
14 Mar: gentoo bug: eautoreconf does not handle AC_CONF_AUX_DIR.
9 Mar: nix bug: nix does not handle root flakes.
16 February: waf bug: i686-linux does not fit into 3GB.
30 January: binutils bug: .arch i386 is no accepted by gas anymore.
28 January: nixpkgs: document bootstrap seed update procedure.
13 January: mikmod: “buffer overflow” detected at startup.
13 January: nixpkgs: autoconf: 2.71 -> 2.72 update.
2023
26 December: ofborg: map modified files according to .meta.position.
16 December: iwd: fix data corruption in aarch64.
8 December: libbpf: report nature of ELF section corruption.
3 December: tracker: tracker used invalid code to test strftime() features.
1 December: nixpkgs bug: nixpkgs uses very old libelf library where one would expect elfutils.
28 November: php: Fix build on gcc-14 C11 atomics.
14 November: libglgnd: Enable 64-bit file APIs.
11 November: nixpkgs: Fix broken SUID binary in pam package.
10 November: duperemove: Fix quadratic slowdown for partial mode.
9 November: duperemove: Fix file sharing accounting.
7 November: duperemove: Fix quadratic slowdown of small inline files.
5 November: btrfs-progs: Fix accidental SCAN mapped to FORGET ioctl.
4 November: nixpkgs: one-liner to reduce meld closure.
1 November: duperemove: one-liner to speed deduping up 2x.
31 October: duperemove bug: hang up on 1 million of small files.
23 October: gcc: libgcc: make heap-based trampolines conditional on libc presence.
20 October: acme-rs Fix non-standalone challenge paths.
28 September: gcc: ggc: do not wipe out unrelated data via gt_ggc_rtab.
27 September: gcc: ipa-utils: avoid uninitialized probabilities on ICF.
16 September: nixpkgs: disable bash malloc() implementation.
14 September: nixpkgs: always mangle out __FILE__ paths to shrink closure.
31 July: nixpkgs: fix file corruption caused by parallel strip.
15 March: nixpkgs: enable parallel installs for pa rallel builds.
20 February: libomxil-bellagio: fix stack overread.
5 February: xmms2: fix UPD visualization server on dual-stack IPv6.
11 January: nix-olde: started a new project to find outdated nixpkgs packages.
2022
30 December: xmms2: fix stuck FLAC playback.
1 December: AoC: started participating in Advent of Code.
Turned it into rust learning exercise.
13 September: glibc: fix MAKEFLAGS assignment for upcoming make-4.4.
11 September: make: fix --shuffle crash on SECONDEXPANSION prerequisites.
16 August: gcc: add build dependencies on i386-builtin-types.inc.
Exposed by make --shuffle.
16 August: gcc: driver: fix environ corruption after putenv().
11 August: nixpkgs: don’t inhibit stripping when debuginfo splitter is enabled.
28 July: nixpkgs: enable stripping of cross-compilers.
27 June: gcc: c++: avoid <memory> poisoning on musl.
25 June: ghc: add missing order-only .hs-boot dependencies.
4 June: make: add --shuffle mode.
4 June: nixpkgs bug: unzip unpacked different files on linux/darwin.
23 May: glibc: fix build against ancient gcc-4.7.
15 April: gcc: gcov-profile: Allow negative counts of indirect calls.
14 April: binutils: m68k fix quadratic slowdown of label alignment check.
7 April: gcc: ia64 libgcc: don’t compile glibc-based unwinder without libc headers.
22 February: nixpkgs: fix crt file poisoning in bootstrap.
20 March: vim: fix tutor parallel install.
12 March: gcc: avoid TEXTRELs in shared library.
17 March: nix: fix nix store gc quadratic behaviour.
13 March: nix: fix nix store gc optimized store.
13 January: rustc bug: lto = "thin" causes bad code generation.
2021
21 November: flatbuffers: fix undefined evaluation order of function parameters.
10 November: nix: fix quadratic slowdown of lookup and deletion of realizations for CA derivations.
7 November: espeak-ng: fix SIGSEGV on parallel builds.
Build rules shared temporary file names.
9 September: nixpkgs: add s390x cross-compilation target.
21 August: guix: fix guix pull hang up due to po4a bug.
6 August gcc: c++: fix ptrmemfunc template instantiation.
23 July: linux: mm fix page_poison=1 data corruption.
Without the change freeing a page always triggered assertions.
27 June: libffi: configure.ac: add --disable-exec-static-tramp flag.
13 June: ccache bug: PWD=. seems to trigger asserts in ccache.
29 April: linux: mm fix data corruption caused by debug_pagealloc=1.
Without the fix zero-initialized pages were returned as 0xaa-initialized.
29 April: linux: mm fix endless recursion tracking page_owner.
29 April: linux: ia64 fix symbolizer crash.
2 April: linux: ia64 fix ptrace() stack pointer fetch.
30 March: linux: hpsa fix ia64 boot failure for unaligned SCSI commands.
12 March: linux: ia64 fix ptrace(PTRACE_SYSCALL_INFO_EXIT) sign.
12 March: linux: ia64 fix tracing of break-based syscalls.
5 February: glibc: nsswitch: return result when nss database is locked.
3 February: mc: fix shadow render crash.
11 January: gcc: fix modref analysis on RVO statements.
2020
6 September: gcc: gcov: fix TOPN streaming from shared libraries.
25 July: gcc: don’t crash on unoptimized lto functions.
21 July: wrote https://wiki.gentoo.org/wiki/Stack_smashing_debugging_guide article to aid in stack smashing debugging.
14 July: gcc: sparc fix PIE destructors.
11 July: glibc: ia64 fix build against -fno-common toolchain.
31 May: proftpd: fix SIGSEGV on pstrcat() call without a sentinel NULL.
And a follow up change
to turn such bugs into compile-time errors.
21 April: ccache bug: ccache does not handle directories in -fprofile-use=.
15 April: qemu: alpha target fix for epoll_create() emulation.
16 March: ccache bug: another attempt by ccache to delete /dev/null.
18 January: seekwatcher: forked and fixed minor bugs in a project by Chris Mason.
3 January: binutils: ia64 fix for binary ld merge.
2019
25 November: nix-guix-gentoo: moved nix and guix ebuilds to an external overlay.
28 April: ccache bug: ccache tried to rename /dev/null.
27 April: libffi: hppa avoid TEXTREL in .eh_frame section.
20 March: ghc: fix 64-bit comparisons on ppc32.
10 March: linux: tty/vt race condition crash fix write/write race in ioctl(KDSKBSENT) handler
2018
31 Dec: linux: alpha fix page fault handling for r16-r18 registers.
Without the change page fault handler corrupted wrong register.
21 September: ski: started the fork of HP’s ski to adapt to modern systems.
3 August: gcc: sh avoid TEXTRELs in PIC code.
16 July: ghc: skip -Bsymbolic on unregisterised targets.
This fixed sh4 build on ghc.
19 May: libressl: hppa fix assembly syntax around semicolons.
16 May: goircbot: set bot status before channel joins, not after.
17 February: libffi: ia64 fix small struct return.
11 February: libffi: ia64 fix variadic function closures with FP arguments.
2017
21 December: glibc: m68k fix clobbering a5 in setjmp().
18 December: glibc: mips32 fix clobbering s0 in setjmp().
18 December: glibc: mips64 fix clobbering s0 in setjmp().
17 October: libffi: ia64 unbreak small struct handling.
3 October: fish-shell: fix printf "%o" on big-endian systems.
19 August: pax-utils: fixed crash on ia64 binaries.
18 July: found nettle data corruption on sparc due to reuse of local
variable. It was fixed upstream with this commit.
14 July: libunwind: ia64 disable unimplemented dwarf support.
10 July: ruby: ia64: fix garbage collector scanning of RBS area.
24 June: binutils: ia64 fix for strip crash with broken hint.
30 May: openrc: fix buffer overflow in openrc-init.
1 May: linux: ia64 fix module loading on gcc-5.4+.
24 April: ghc: put const objects into .rodata.
2016
2 September: ghc: extend worker/wrapper limit to specializers.
1 September: ghc: restore limit on worker/wrapper transform.
Without the change ghc spent a lot of time to generate large slow functions.
30 August: ghc: enable parallel GC scan for large nurseries.
10 March: ghc: fix Float and Double cross-compilation.
6 March: ghc: fix closure alignment on m68k.
Without it garbage collector crashed with assertion failures.
6 March: qemu bug: m68k generated invalid TCG.
5 January: gcc: ia64 don’t use dynamic relocations for local symbols.
2015
7 August: mtpfs: open device=0, not a random one.
7 July: ghc: fix wake up on bad file descriptors in select() backend.
23 June: ghc: fix PLT relocation support on powerpc ghci.
2014
14 December: ghc: fix shared library support on ppc.
4 September: ghc: fix code/data pointer type confusion in CMM.
Without the change on ia64 function pointers were incorrect due to
missing function descriptor indirection.
26 August: ghc: fix large literal emission for unregisterised builds.
28 July: ghc: fix openTempFiles linear slowdown
due to predictable temp files.
23 May: ghc: fix CPU hangs of threaded runtime on bad file descriptors.
This fixed battery drain by xmobar on my laptop.
19 April: dars: corrupted fetcher due to temp file collision.
7 April: linux: fix crash on thread pool remount.
4 March: lambdabot: add CODEPAGE command.
2013
13 December: cabal: use ByteString instead of String.
This allowed me to upload raincat release on hackage.
25 November: trofi.github.io: moved the blog to GitHub pages.
3 July: uselex: started new uselex project
and unused code in many projects with it.
13 September: linux: enable -Werror=implicit-int by default.
23 January: ghc: fix cross-compilation of integer-gmp.
Instead of runtime-detection of structure layout we now use autoconf macros.
2012
31 October: bdelta: 25% speed up of --all-in-ram option.
29 October: xmms2: fix infinite loop on broken .cue files.
26 September: bdelta: add --all-in-ram option to get 3x speed up.
24 April: linux: btrfs feature to change thread pool sizes.
16 April: linux: btrfs fix for remount data corruption.
Without the fix btrfs always triggered restore code if
mount -oremount fails for any reason.
2011
16 October: chua: started a toy strange attractor render.
My favourite OpenGL app. This allowed me to pass the exam in uni :)
25 August: linux: alpha fix for osf_setsysinfo()
obscure interface.
20 May: linux: btrfs performance fix
caused by spinning shrinker without a chance of progress.
11 April: linux: btrfs data corruption fix
caused by use of memcpy() on overlapping areas.
2010
29 August: ghc: fix ppc crashes on foreign import wrapper.
9 July: ghc: fix ia64 crashes on foreign import wrapper.
9 July: ghc: fix ia64 GC pointer chasing.
On ia64 pointers use higher bits of 64-bit pattern which broke garbage
collector assumptions.
8 July: ghc: fix alpha build of foreign import wrapper.
2009
20 January: mc: added ebuild.syntax highlighter.
5 January: hichi: started haskell implementation of an Intranet Chat protocol library.
I think I managed to implement a minimal bot. But never expanded it.
2007
24 November: valgrind: found a bug in rep lodsb instruction emulation.
4 June: ichatd: started a linux implementation of Intranet Chat.
Managed to use it successfully in LAN against Windows clients.