<html>
<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
</head>
<body bgcolor="#FFFFFF" text="#000000">
<div class="moz-cite-prefix">On 3/3/16 12:25 PM, Abhinav Tripathi
via llvm-dev wrote:<br>
</div>
<blockquote
cite="mid:CAPtLh44KECeWSU8Q2vETEmwKrUTOGU+v24_oQbTmq1yh3Yh0Ag@mail.gmail.com"
type="cite">
<meta http-equiv="Context-Type" content="text/html; charset=UTF-8">
<div dir="ltr">Hello,
<div>I am Abhinav Tripathi, B.Tech 3rd Year student from IIT
Indore, India. I was looking on the projects ideas page of
llvm and saw that I could also propose to work on the SAFECode
Open projects. As I found no mailing list on their site, I am
sending this message here. Please redirect me to some other
list, if required.</div>
</div>
</blockquote>
<br>
The most useful project for SAFECode right now is to update its code
to work with either LLVM 3.7 or LLVM 3.8. I had a student work on
this last summer (code is at
<a class="moz-txt-link-freetext" href="https://github.com/jtcriswell/safecode-llvm37">https://github.com/jtcriswell/safecode-llvm37</a>), but it needs to be
completed and tested. On my end, I'm interested in getting SAFECode
dusted off because I'd like to use it for research projects that
need to attach metadata to memory objects.<br>
<br>
Until SAFECode is updated to a newer version of LLVM, its utility is
pretty limited, and any projects to enhance it will basically
require that it be updated to a newer version of LLVM.<br>
<br>
<blockquote
cite="mid:CAPtLh44KECeWSU8Q2vETEmwKrUTOGU+v24_oQbTmq1yh3Yh0Ag@mail.gmail.com"
type="cite">
<div dir="ltr">
<div>.</div>
<div>I found most of the projects quite alluring as I have been
working on a similar project (in terms of tasks) since the
last GSoC. It is CPPSharp (<a moz-do-not-send="true"
href="https://github.com/genuinelucifer/CppSharp">https://github.com/genuinelucifer/CppSharp</a>).</div>
<div>.</div>
<div>The ones that I found most interesting were:</div>
<div>1 - Improve Static Array Bounds Checking -- Because I have
done a lot of array related tasks while writing marshalling
code for CppSharp. I think I can really contribute into this
project.</div>
</div>
</blockquote>
<br>
Static Array Bounds Checking requires that you understand static
analysis. Multiple static analysis methods are applicable: range
analysis, integer linear programming, SMT solvers, etc. For a
successful proposal for static array bounds checking, you should
know which algorithm you will implement and be able to explain why
you think it will work well. For SAFECode, the algorithm must be
sound with respect to two's complement arithmetic (i.e., the
algorithm must take into account that integers in C can experience
underflow or overflow when used in arithmetic).<br>
<br>
<blockquote
cite="mid:CAPtLh44KECeWSU8Q2vETEmwKrUTOGU+v24_oQbTmq1yh3Yh0Ag@mail.gmail.com"
type="cite">
<div dir="ltr">
<div>.</div>
<div>2 - Create a simpler CompleteChecks pass -- Although I
admit, I didn't quite understand what simpler would mean here.
But it seems fairly challenging (if it's regarding
optimisation) or involving understanding of a large part of
codebase (in which case too it intrigues me). I would love to
work on this one too.</div>
</div>
</blockquote>
<br>
The CompleteChecks pass currently uses the DSA points-to analysis
(which is large and complicated). There are simpler analyses that
one could do to determine whether a memory object is read or written
by external code. For example, a simple intra-procedural analysis
could determine if a memory object is allocated and only used by the
current function, and a simple inter-procedural analysis could
create a very simple heap abstraction and perform data-flow analysis
on the pointers contained within heap objects to determine if they
are influenced by external library code. Basically, there are some
simple quick analyses that would be imprecise but could probably
find memory objects that are not manipulated by external code.<br>
<br>
<blockquote
cite="mid:CAPtLh44KECeWSU8Q2vETEmwKrUTOGU+v24_oQbTmq1yh3Yh0Ag@mail.gmail.com"
type="cite">
<div dir="ltr">
<div>.</div>
<div>If the mentor(s) or anyone else would like to state a few
proficiency tests to prove my aptness for the projects, I
would love to submit a couple of patches before applying for
GSoC.</div>
</div>
</blockquote>
<br>
I think the only proficiency test is whether you can show in your
proposal that you have the necessary programming skills and
background information to be able to do what you propose. In both
of these projects, if you're not familiar with static analysis
(e.g., Kam/Ulman data-flow analysis), then you're likely not ready
for these projects. For the two projects you mentioned, I would
also expect existing familiarity with LLVM.<br>
<br>
Again, though, the best project is probably to update SAFECode to a
modern version of LLVM.<br>
<br>
Regards,<br>
<br>
John Criswell<br>
<br>
<blockquote
cite="mid:CAPtLh44KECeWSU8Q2vETEmwKrUTOGU+v24_oQbTmq1yh3Yh0Ag@mail.gmail.com"
type="cite">
<div dir="ltr">
<div>.</div>
<div>Regards,</div>
<div>Abhinav</div>
</div>
<br>
<fieldset class="mimeAttachmentHeader"></fieldset>
<br>
<pre wrap="">_______________________________________________
LLVM Developers mailing list
<a class="moz-txt-link-abbreviated" href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a>
<a class="moz-txt-link-freetext" href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a>
</pre>
</blockquote>
<br>
<br>
<pre class="moz-signature" cols="72">--
John Criswell
Assistant Professor
Department of Computer Science, University of Rochester
<a class="moz-txt-link-freetext" href="http://www.cs.rochester.edu/u/criswell">http://www.cs.rochester.edu/u/criswell</a></pre>
</body>
</html>