How to build gas with ASAN/UBSAN?

Nick Clifton nickc@redhat.com
Wed Aug 19 16:00:08 GMT 2020


Hi Martin,

> One can't do that with CFLAGS="..." ../configure as it would
> build all .a file with that as well. And test would fail then due to unresolved
> sanitizer-related symbols.

Err, I use that particular method and it works for me.  You just need to
add in a definition of LDFLAGS so that the appropriate library is included
as well.  For example:

  % $BINUTILS_SRCDIR/configure \
			--enable-targets=all \
			--enable-64-bit-bfd \
			CFLAGS='-g -O2 -fsanitize=address' \
			CXXFLAGS='-g -O2 -fsanitize=address' \
			LDFLAGS='-ldl' \
	

> ./as-new /home/marxin/Programming/binutils/gas/testsuite/gas/all/org-1.s
> /home/marxin/Programming/binutils/gas/symbols.c:1818:3: runtime error: null pointer passed as argument 1, which is declared to never be null
>     #0 0x406021 in colon /home/marxin/Programming/binutils/gas/symbols.c:1818
>     #1 0x4946da in read_a_source_file /home/marxin/Programming/binutils/gas/read.c:1020
>     #2 0x40bba2 in perform_an_assembly_pass /home/marxin/Programming/binutils/gas/as.c:1253
>     #3 0x40bba2 in main /home/marxin/Programming/binutils/gas/as.c:1417
>     #4 0x7ffff6aa5cc9 in __libc_start_main ../csu/libc-start.c:308
>     #5 0x40d1b9 in _start (/home/marxin/Programming/binutils/objdir/gas/as-new+0x40d1b9)

So, is this a bug that you have discovered using sanitization ?
If so, please can you file a bug report for it ?



> /home/marxin/Programming/binutils/gas/config/tc-arm.c:23588:32: runtime error: left shift of 14 by 28 places cannot be represented in type 'int'
>     #0 0x408c41 in md_assemble /home/marxin/Programming/binutils/gas/config/tc-arm.c:23588
>     #1 0x493aaa in assemble_one /home/marxin/Programming/binutils/gas/read.c:713
>     #2 0x493aaa in read_a_source_file /home/marxin/Programming/binutils/gas/read.c:1182
>     #3 0x40bba2 in perform_an_assembly_pass /home/marxin/Programming/binutils/gas/as.c:1253
>     #4 0x40bba2 in main /home/marxin/Programming/binutils/gas/as.c:1417
>     #5 0x7ffff6aa5cc9 in __libc_start_main ../csu/libc-start.c:308
>     #6 0x40d1b9 in _start (/home/marxin/Programming/binutils/objdir/gas/as-new+0x40d1b9)

This looks like a case of an 'int' field which needs to be an 'unsigned int' field.
But please file a bug report anyway...

Cheers
  Nick




More information about the Binutils mailing list