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

Support compilation, instrumentation, and linking from within seec-trace-view. #13

Closed
mheinsen opened this issue Dec 1, 2016 · 8 comments
Assignees
Milestone

Comments

@mheinsen
Copy link
Contributor

mheinsen commented Dec 1, 2016

From @mheinsen on May 27, 2013 4:11

For the use trials, seec-trace-view should be a complete interface to using the SeeC system. Users should be able to compile (with instrumentation) their source code directly to an executable file (from the user's perspective) from within seec-trace-view. Don't rely on the clang binary to perform linking for us, as there may be a version mismatch between the installed binary and our Clang libraries.

Copied from original issue: mheinsen#26

@mheinsen mheinsen self-assigned this Dec 1, 2016
@mheinsen
Copy link
Contributor Author

mheinsen commented Dec 1, 2016

The first step of this should be to turn seec-cc (seec-clang-test) into a transparent replacement for gcc/clang that performs instrumentation at the appropriate stage. Hopefully we can leverage the Clang driver to do this.

Update: at the moment it seems unlikely that we'll be able to custom Clang's driver for this. A nice solution would have been to insert "-emit-llvm" and "-O0" into the command line arguments, run them through the driver, replaced "clang" with "seec-cc", and finally used a LTO pass to add the SeeC instrumentation. Unfortunately it seems that LTO uses a fixed libLTO at the moment (i.e. /usr/lib/libLTO.dylib on OS X), and we don't want to replace the system's libLTO with SeeC's. If it becomes simple to use custom passes with libLTO, then we should investigate this further. For now, we'll have to create a simpler tool.

@mheinsen
Copy link
Contributor Author

mheinsen commented Dec 1, 2016

Perhaps we can make a simple command line tool that takes a list of object files, links all the LLVM modules together, instruments them, then passes this new object file along with any previously specified native object files to the standard linker to generate the final executable. This might server as a suitable alternative to the above.

@mheinsen
Copy link
Contributor Author

mheinsen commented Dec 1, 2016

We now have the tool described above, named seec-ld. The next step is to make seec-cc a little bit smarter. Essentially it should use the Clang Driver to generate a compilation, but make compile actions use seec-cc and linking actions use seec-ld. This isn't going to magically work for all situations, but it should handle the compile process used by students.

@mheinsen
Copy link
Contributor Author

mheinsen commented Dec 1, 2016

08b6504 implements the next major piece of this, but we still need to wire up the serialization of the SeeC-Clang mapping metadata.

@mheinsen
Copy link
Contributor Author

mheinsen commented Dec 1, 2016

All the major changes to seec-cc are done now. If we want to add compilation to seec-trace-view, it should be trivial to call out to seec-cc with the appropriate arguments.

@mheinsen
Copy link
Contributor Author

mheinsen commented Dec 1, 2016

Dropping this from 13.08 as using seec-cc should be sufficient for the trial run.

@mheinsen
Copy link
Contributor Author

seec-view now has a basic source code editor with support for correctly invoking seec-cc to compile the current source code file. At the moment it only works for single source file programs, and hasn't been tested on OS X, but it's a good start for a more novice-friendly system.

@mheinsen
Copy link
Contributor Author

The original extent of this issue is now complete. Further work is listed in #28 and #29

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant