[R-sig-Debian] Error building and installing with GCC ASAN in a Docker container

Joshua Ulrich jo@h@m@u|r|ch @end|ng |rom gm@||@com
Thu Feb 15 19:44:46 CET 2024


Hi Brent,

In case you aren't aware, Winston Chang has some Docker images that
build R with ASAN and UBSAN, using gcc and clang:
https://github.com/wch/r-debug

This doesn't directly address your question, but I hope it might be helpful.

Best,
Josh

On Thu, Feb 15, 2024 at 12:15 PM Brent G Ewing <bge using uw.edu> wrote:
>
> Hi,
>
> I want to build a Docker container with R and various R packages built and
> installed with the gcc address sanitizer enabled. I am working on a Debian
> Bookworm system running on an x86_64 architecture.
>
> I start with the Docker file at
>
> https://github.com/rocker-org/r-devel-san/blob/master/Dockerfile
>
> I added -fsanitize=address to compiler and linker variables in the
> Dockerfile. I also import into the image a Makevars file with the contents
>
> CC=gcc -std=gnu99 -fsanitize=address -fno-omit-frame-pointer
> CXX=g++ -fsanitize=address -fno-omit-frame-pointer
> FC=gfortran -fsanitize=address
> LDFLAGS=-fsanitize=address
>
> Finally, the Docker file installs additional Debian object libraries and R
> packages that I want to test.
>
> When the package build gets to testing whether the package can be
> installed, an error message appears saying
>
> ==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.
>
> For example,
>
> ESC[0mESC[91m** building package indices
> ESC[0mESC[91m** installing vignettes
> ESC[0mESC[91m** testing if installed package can be loaded from temporary
> location
> ESC[0m==684==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.
> ESC[91mERROR: loading failed
> ESC[0mESC[91m* removing ‘/usr/local/lib/R/site-library/utf8’
> ESC[0mESC[91m* installing *source* package ‘isoband’ ...
> ESC[0mESC[91m** package ‘isoband’ successfully unpacked and MD5 sums checked
> ESC[0mESC[91m** using staged installation
> ESC[0mESC[91m** libs
>
> I've tried preloading various libasan.so files that I find on the system
> but the loader says that it cannot load them.
>
> My questions are
>
> 1. is it possible to build and install R and packages (in a container) with
> the gcc address sanitizer enabled?
> 2. if it is, how do I do it?
> 3. is this ld_preload message relevant? If so, to which file does it refer?
> Is there an ASAN runtime library file that I need to specify, and if so,
> what is the path to it?
>
> I appreciate your consideration and assistance.
>
> Thank you.
> Brent
>
> P.S. The build-related commands in the Docker file (including my address
> sanitizer additions) are
>
> RUN cd /tmp/R-devel \
>         && R_PAPERSIZE=letter \
>            R_BATCHSAVE="--no-save --no-restore" \
>            R_BROWSER=xdg-open \
>            PAGER=/usr/bin/pager \
>            PERL=/usr/bin/perl \
>            R_UNZIPCMD=/usr/bin/unzip \
>            R_ZIPCMD=/usr/bin/zip \
>            R_PRINTCMD=/usr/bin/lpr \
>            LIBnn=lib \
>            AWK=/usr/bin/awk \
>            CC="gcc -std=gnu99 -fsanitize=address -fsanitize=undefined
> -fno-omit-frame-pointer" \
>        CFLAGS="-fno-omit-frame-pointer -g -O2 -Wall -pedantic
> -mtune=native" \
>            FFLAGS="-g -O2 -mtune=native" \
>            FCFLAGS="-g -O2 -mtune=native" \
>            CXX="g++ -fsanitize=address -fsanitize=undefined,bounds-strict
> -fno-omit-frame-pointer" \
>            CXXFLAGS="-fsanitize=address -g -O2 -Wall -pedantic
> -mtune=native" \
>            CXX11FLAGS="-fsanitize=address -g -O2 -Wall -pedantic
> -mtune=native" \
>            CXX14FLAGS="-fsanitize=address -g -O2 -Wall -pedantic
> -mtune=native" \
>            CXX17FLAGS="-fsanitize=address -g -O2 -Wall -pedantic
> -mtune=native" \
>        LDFLAGS="-fsanitize=address" \
>            MAIN_LDFLAGS="-fsanitize=address -fsanitize=undefined -pthread" \
>            F77="gfortran -fsanitize=undefined" \
>            FC="gfortran -fsanitize=undefined" \
>            FCFLAGS="-g -O2 -mtune=native" \
>            FFLAGS="-g -O2 -mtune=native" \
>            ./configure --enable-R-shlib \
>                --without-blas \
>                --without-lapack \
>                --with-readline \
>                --without-recommended-packages \
>                --program-suffix=dev \
>                --disable-openmp \
>         && make \
>         && make install \
>         && make clean
>
>         [[alternative HTML version deleted]]
>
> _______________________________________________
> R-SIG-Debian mailing list
> R-SIG-Debian using r-project.org
> https://stat.ethz.ch/mailman/listinfo/r-sig-debian



-- 
Joshua Ulrich  |  about.me/joshuaulrich
FOSS Trading  |  www.fosstrading.com



More information about the R-SIG-Debian mailing list