[cfe-dev] How do I prevent cloning of code?

Chris Lattner clattner at apple.com
Fri Oct 5 09:29:47 PDT 2012


Hi Markus,

The best way to do this is with a file scope inline asm blob.  This is half way between a function asm and a .s file.

-Chris

On Oct 4, 2012, at 6:22 PM, Markus Gutschke (顧孟勤) <markus at google.com> wrote:

> I am writing some low-level sandboxing code on Linux, and an unusual
> problem came up. I need to write an assembly function that has a
> "magic" instruction; and the kernel needs to know about the location
> of this instruction.
> 
> This is relatively simple to do from an "asm()" instruction; I can
> just make it return the address of this instruction. But all of that
> fails, if the C/C++ compiler decides to duplicate my assembly code.
> The kernel wouldn't know what to do, if there are suddenly multiple of
> these "magic" instructions all over the source code.
> 
> In gcc, I believe I can put my "asm()" code into a function, and then
> mark the function as "noinline" and "noclone". For good measure, I
> also mark the assembly as "volatile", but I am not sure that is
> strictly necessary.
> 
> clang doesn't appear to have a "noclone" attribute. This causes two
> problems: a) unconditionally setting the "noclone" attribute results
> in a warning, which fails because of -Werror in our build scripts, and
> b) I am worried that clang might actually decide to clone my function.
> 
> I currently put the function into a separate compilation unit, so
> things might turn out OK anyway. But I'd much rather tell the compiler
> what I want it to do.
> 
> As a last resort, I could move the code into a *.S file (or more
> likely, one *.S file per architecture). But since it deals with
> variadic arguments, that's a little awkward and probably needs some C
> glue anyway. Having everything in a single *.c or *.cc file would be
> my preference.
> 
> 
> Markus
> _______________________________________________
> cfe-dev mailing list
> cfe-dev at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev




More information about the cfe-dev mailing list