NetBSD Problem Report #57115

From rhialto@falu.nl  Sat Dec 17 19:46:41 2022
Return-Path: <rhialto@falu.nl>
Received: from mail.netbsd.org (mail.netbsd.org [199.233.217.200])
	(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits))
	(Client CN "mail.NetBSD.org", Issuer "mail.NetBSD.org CA" (not verified))
	by mollari.NetBSD.org (Postfix) with ESMTPS id 0CFFF1A9239
	for <gnats-bugs@gnats.NetBSD.org>; Sat, 17 Dec 2022 19:46:41 +0000 (UTC)
Message-Id: <202212171946.2BHJkaCr025083@murthe.falu.nl>
Date: Sat, 17 Dec 2022 20:46:36 +0100 (CET)
From: rhialto@falu.nl
Reply-To: rhialto@falu.nl
To: gnats-bugs@NetBSD.org
Cc: rhialto@falu.nl
Subject: lang/gcc10 regression: no sanitizers
X-Send-Pr-Version: 3.95

>Number:         57115
>Category:       pkg
>Synopsis:       lang/gcc10 has no sanitizers (this is a regression)
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    pkg-manager
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Sat Dec 17 19:50:00 +0000 2022
>Last-Modified:  Sun Dec 18 12:55:01 +0000 2022
>Originator:     Rhialto
>Release:        NetBSD 9.3
>Organization:

>Environment:


System: NetBSD murthe.falu.nl 9.3 NetBSD 9.3 (MAXLWP8192) #0: Sat Aug 6 22:25:06 CEST 2022 rhialto@murthe.falu.nl:/mnt/scratch/scratch/NetBSD/NetBSD-9.3/source/sets/x/usr/src/sys/arch/amd64/compile/MAXLWP8192 amd64
Architecture: x86_64
Machine: amd64
>Description:
	Package lang/gcc10 does not build the libraries for asan and ubsan.

        See https://mail-index.netbsd.org/pkgsrc-users/2022/12/16/msg036629.html
        for a mail tread.
>How-To-Repeat:
	Try to use -fsanitizer=address
>Fix:
	I added some patches to the package, partly adapted from lang/gcc8.
        That still ended up with the dreaded

        ==19445==ASan runtime does not come first in initial library list; you
        should either link runtime to your application or manually preload it
        with LD_PRELOAD.

        which seems unfixable by the user (at least I never found how).
        At this point I gave up.

        Patches so far:

==== patch-libsanitizer_configure.tgt ====
$NetBSD: patch-libsanitizer_configure.tgt,v 1.1 2018/05/05 04:08:36 maya Exp $

--- libsanitizer/configure.tgt.orig	2022-06-28 08:54:31.000000000 +0000
+++ libsanitizer/configure.tgt
@@ -68,6 +68,10 @@ case "${target}" in
 	;;
   riscv64-*-linux*)
 	;;
+  x86_64-*-netbsd*)
+	TSAN_SUPPORTED=no
+	LSAN_SUPPORTED=no
+	;;
   *)
 	UNSUPPORTED=1
 	;;
==== patch-libsanitizer_sanitizer__common_Makefile.am ====
$NetBSD: patch-libsanitizer_sanitizer__common_Makefile.am,v 1.1 2018/05/05 04:08:36 maya Exp $

Enable building libasan and libubsan.

--- libsanitizer/sanitizer_common/Makefile.am.orig	2022-06-28 08:54:31.000000000 +0000
+++ libsanitizer/sanitizer_common/Makefile.am
@@ -45,6 +45,7 @@ sanitizer_common_files = \
 	sanitizer_openbsd.cpp \
 	sanitizer_persistent_allocator.cpp \
 	sanitizer_platform_limits_linux.cpp \
+	sanitizer_platform_limits_netbsd.cpp \
 	sanitizer_platform_limits_openbsd.cpp \
 	sanitizer_platform_limits_posix.cpp \
 	sanitizer_platform_limits_solaris.cpp \
@@ -66,6 +67,7 @@ sanitizer_common_files = \
 	sanitizer_symbolizer_report.cpp \
 	sanitizer_stacktrace_printer.cpp \
 	sanitizer_stoptheworld_linux_libcdep.cpp \
+	sanitizer_stoptheworld_netbsd_libcdep.cpp \
 	sanitizer_stoptheworld_mac.cpp \
 	sanitizer_suppressions.cpp \
 	sanitizer_symbolizer.cpp \
==== patch-libsanitizer_sanitizer__common_Makefile.in ====
$NetBSD: patch-libsanitizer_sanitizer__common_Makefile.in,v 1.1 2018/05/05 04:08:36 maya Exp $

Enable building libasan and libubsan.

--- libsanitizer/sanitizer_common/Makefile.in.orig	2022-06-28 08:55:09.000000000 +0000
+++ libsanitizer/sanitizer_common/Makefile.in
@@ -131,6 +131,7 @@ am__objects_1 = sancov_flags.lo sanitize
 	sanitizer_mac.lo sanitizer_mac_libcdep.lo sanitizer_netbsd.lo \
 	sanitizer_openbsd.lo sanitizer_persistent_allocator.lo \
 	sanitizer_platform_limits_linux.lo \
+	sanitizer_platform_limits_netbsd.lo \
 	sanitizer_platform_limits_openbsd.lo \
 	sanitizer_platform_limits_posix.lo \
 	sanitizer_platform_limits_solaris.lo sanitizer_posix.lo \
@@ -143,6 +144,7 @@ am__objects_1 = sancov_flags.lo sanitize
 	sanitizer_stacktrace_sparc.lo sanitizer_symbolizer_mac.lo \
 	sanitizer_symbolizer_report.lo sanitizer_stacktrace_printer.lo \
 	sanitizer_stoptheworld_linux_libcdep.lo \
+	sanitizer_stoptheworld_netbsd_libcdep.lo \
 	sanitizer_stoptheworld_mac.lo sanitizer_suppressions.lo \
 	sanitizer_symbolizer.lo sanitizer_symbolizer_libbacktrace.lo \
 	sanitizer_symbolizer_libcdep.lo \
@@ -402,6 +404,7 @@ sanitizer_common_files = \
 	sanitizer_openbsd.cpp \
 	sanitizer_persistent_allocator.cpp \
 	sanitizer_platform_limits_linux.cpp \
+	sanitizer_platform_limits_netbsd.cpp \
 	sanitizer_platform_limits_openbsd.cpp \
 	sanitizer_platform_limits_posix.cpp \
 	sanitizer_platform_limits_solaris.cpp \
@@ -423,6 +426,7 @@ sanitizer_common_files = \
 	sanitizer_symbolizer_report.cpp \
 	sanitizer_stacktrace_printer.cpp \
 	sanitizer_stoptheworld_linux_libcdep.cpp \
+	sanitizer_stoptheworld_netbsd_libcdep.cpp \
 	sanitizer_stoptheworld_mac.cpp \
 	sanitizer_suppressions.cpp \
 	sanitizer_symbolizer.cpp \
@@ -558,6 +562,7 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sanitizer_openbsd.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sanitizer_persistent_allocator.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sanitizer_platform_limits_linux.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sanitizer_platform_limits_netbsd.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sanitizer_platform_limits_openbsd.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sanitizer_platform_limits_posix.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sanitizer_platform_limits_solaris.Plo@am__quote@
@@ -577,6 +582,7 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sanitizer_stacktrace_printer.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sanitizer_stacktrace_sparc.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sanitizer_stoptheworld_linux_libcdep.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sanitizer_stoptheworld_netbsd_libcdep.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sanitizer_stoptheworld_mac.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sanitizer_suppressions.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sanitizer_symbolizer.Plo@am__quote@
==== patch-libsanitizer_sanitizer__common_sanitizer__platform__limits__netbsd.cpp ====
$NetBSD$

Enable building libasan and libubsan.

Somehow MD5_CTX and MD5_DIGEST_STRING_LENGTH are unknown even after including
<md5.h>. Somehow it works better with <sys/md5.h>. This smells like a gcc bug.

--- libsanitizer/sanitizer_common/sanitizer_platform_limits_netbsd.cpp.orig	2022-06-28 08:54:31.000000000 +0000
+++ libsanitizer/sanitizer_common/sanitizer_platform_limits_netbsd.cpp
@@ -203,7 +203,7 @@
 #include <stddef.h>
 #include <md2.h>
 #include <md4.h>
-#include <md5.h>
+#include <sys/md5.h>
 #include <rmd160.h>
 #include <soundcard.h>
 #include <term.h>

-Olaf.
-- 
___ "Buying carbon credits is a bit like a serial killer paying someone else to
\X/  have kids to make his activity cost neutral." -The BOFH    falu.nl@rhialto

>Audit-Trail:
From: Rhialto <rhialto@falu.nl>
To: gnats-bugs@netbsd.org
Cc: rhialto@falu.nl
Subject: Re: pkg/57115: lang/gcc10 regression: no sanitizers
Date: Sun, 18 Dec 2022 13:52:39 +0100

 Some further experimenting with a test program (I use
 https://gitlab.com/Rhialto/macro11; it has sanitizer options commented
 out in the Makefile) shows that the base compiler from NetBSD/amd64 9.3
 (gcc version 7.5.0 (nb4 20200810)) works fine. It doesn't require me to
 disable ASLR with paxctl. It also detects the memory leak in
 __cxa_atexit_internal.

 lang/gcc8 and lang/gcc10 (with the patches from this PR) seem to work
 about equally well, which is to say they don't work but fail with

 ==19445==ASan runtime does not come first in initial library list; you          
 should either link runtime to your application or manually preload it           
 with LD_PRELOAD.                                                                

 and following the suggestion about LD_PRELOAD doesn't help.
 -lasan is definitely linked, just not first.

>Unformatted:

NetBSD Home
NetBSD PR Database Search

(Contact us) $NetBSD: query-full-pr,v 1.47 2022/09/11 19:34:41 kim Exp $
$NetBSD: gnats_config.sh,v 1.9 2014/08/02 14:16:04 spz Exp $
Copyright © 1994-2022 The NetBSD Foundation, Inc. ALL RIGHTS RESERVED.