[cfe-dev] (no subject)

Alexander Potapenko glider at google.com
Fri Nov 25 00:17:42 PST 2011


Hi everyone,

While adding AddressSanitizer support to
tools/clang/lib/Driver/Tools.cpp I've ran into the following problem.

On Darwin ASan does not play well with the binaries having the MH_PIE bit set.
Because of it we need to add the -no_pie flag to the list of flags
passed to ld (otherwise we'll have MH_PIE on OS X Lion)
as well as remove the -pie flag from the list of options (if both -pie
and -no_pie are passed to ld, the results depend on their order).

However the arguments are passed everywhere as a constant ArgList:

3501 void darwin::Link::ConstructJob(Compilation &C, const JobAction &JA,
3502                                 const InputInfo &Output,
3503                                 const InputInfoList &Inputs,
3504                                 const ArgList &Args,
3505                                 const char *LinkingOutput) const {

, so it's not a good idea to just call Args.eraseArg().

What's the preferred way of not letting an argument make it into the
final CmdArgs of a link job?
Should I copy the input ArgList and filter it, or remove the "-pie"
string directly from CmdArgs?

TIA,
Alexander Potapenko
Software Engineer
Google Moscow



More information about the cfe-dev mailing list