Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Enable AddressSanitizer on CI builds #770

Merged
merged 1 commit into from
Jun 30, 2021
Merged

Conversation

Joshua-Anderson
Copy link
Contributor

Originating Project/Creator
Affected Component
Affected Architectures(s)
Related Issue(s)
Has Unit Tests (y/n)
Builds Without Errors (y/n)
Unit Tests Pass (y/n)
Documentation Included (y/n)

Change Description

AddressSanitizer has been built into clang and gcc for some time and tracks out of bounds and use after free accesses. It has some overlap with valgrind, but its ability to track stack out of bounds is a valuable tool and has been a source of F' issues in the past. Comparison with valgrind here. It has a ~2x runtime performance hit, but in my experience testing locally it was even less than that.

The only people who should be using the root project are F' framework developers and CI, so we should be able to safely enable AddressSanitizer for all unit tests built by the project.

@github-actions
Copy link

Misspellings found, please review:

  • ASAN
  • fsanitize
To accept these changes, run the following commands from this repository on this branch
pushd $(git rev-parse --show-toplevel)
perl -e '
my @expect_files=qw('".github/actions/spelling/expect.txt"');
@ARGV=@expect_files;
my @stale=qw('"ALOG ANOTHEREVENT aquat BADCHECKSUM BINDERROR BUFFERACCEPTED BUFFERACCUMULATOR BUFFERLOGGER BUFFERTOOSMALL BYTESRECEIVED BYTESRECV BYTESSENT CANCELCOMMANDS CMDRESPONSE CMDRESPONSEIN CMDSEQIN CMDSEQUENCER CMDSTARTED CMDSTEPPED COMMANDCOMPLETE COMMANDERROR COMMANDSEXECUTED CONFIGERROR CYCLEIN Cyg czf Dbtestut decodeerror DIRECTORYCREATEERROR DIRECTORYREMOVEERROR DROPPEDPACKET enumchanarg FILECLOSED FILECRCFAILURE FILEINVALID FILEMOVEERROR FILENOTFOUND FILEOPENERROR FILEREADERROR FILERECEIVED FILEREMOVEERROR FILESIZEERROR FILESRECEIVED FILEUPLINK FILEVALIDATIONERROR FILEWRITEERROR FLUSHFILE Imm INTSTARTERROR Inttype INTWAITERROR INVALIDMODE INVALIDRECEIVEMODE llu LOADCOMMANDS LOGFILECLOSED LOGFILEOPENERROR LOGFILEVALIDATIONERROR LOGFILEWRITEERROR LOQQUEUE MODESWITCHED NOBUFFERS NOLOGFILEOPENINITERROR NOSEQUENCEACTIVE NUMLOGGEDBUFFERS NUMQUEUEDBUFFERS OPENERROR OPENFILE PACKETOUTOFBOUNDS PACKETOUTOFORDER PACKETSDROPPED PACKETSRECEIVED PACKETSSENT PINGIN PINGLATEWARNINGS PINGRETURN PORTOPENED PORTSEQUENCESTARTED PRMDBFULL PRMFILELOADCOMPLETE PRMFILEREADERROR PRMFILESAVECOMPLETE PRMFILEWRITEERROR PRMIDADDED PRMIDNOTFOUND PRMIDUPDATED PRMSET QUEUEFULL RATEGROUPCYCLESLIP RATEGROUPSTARTED READERROR RECORDINVALID RECORDMISMATCH RECVERROR RGCYCLESLIPS RGMAXTIME SCHEDIN SENDERROR SEQRUNIN SEQUENCECANCELED SEQUENCECOMPLETE SEQUENCELOADED Sequencertestut SEQUENCESCOMPLETED SEQUENCETIMEOUT SEQUENCEVALID SETMODE SETPRM SHELLCOMMANDFAILED SHELLCOMMANDSUCCEEDED SOCKETERROR somechanarg someenumchan someenumchanarg Someother SOMEOTHEREVENT stringop TIMEBASEMISMATCH TIMECONTEXTMISMATCH UNEXPECTEDCOMPLETION UPLINKCANCELED WRITEERROR Wstrict Wstringop "');
my $re=join "|", @stale;
my $suffix=".".time();
my $previous="";
sub maybe_unlink { unlink($_[0]) if $_[0]; }
while (<>) {
  if ($ARGV ne $old_argv) { maybe_unlink($previous); $previous="$ARGV$suffix"; rename($ARGV, $previous); open(ARGV_OUT, ">$ARGV"); select(ARGV_OUT); $old_argv = $ARGV; }
  next if /^(?:$re)(?:(?:\r|\n)*$| .*)/; print;
}; maybe_unlink($previous);'
perl -e '
my $new_expect_file=".github/actions/spelling/expect.txt";
use File::Path qw(make_path);
make_path ".github/actions/spelling";
open FILE, q{<}, $new_expect_file; chomp(my @words = <FILE>); close FILE;
my @add=qw('"AQuat ASAN fsanitize inttype "');
my %items; @items{@words} = @words x (1); @items{@add} = @add x (1);
@words = sort {lc($a) cmp lc($b)} keys %items;
open FILE, q{>}, $new_expect_file; for my $word (@words) { print FILE "$word\n" if $word =~ /\w/; };
close FILE;'
popd

@LeStarch LeStarch merged commit dd01a48 into nasa:devel Jun 30, 2021
@Joshua-Anderson Joshua-Anderson deleted the add-asan branch June 30, 2021 15:54
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants