On Mon, 16 Nov 2020 12:10:10 -0800 Sami Tolvanen <[email protected]> wrote:
> On Mon, Nov 16, 2020 at 8:39 AM Steven Rostedt <[email protected]> wrote: > > > > On Fri, 13 Nov 2020 10:34:14 -0800 > > Sami Tolvanen <[email protected]> wrote: > > > > > my_tramp[12]? are declared as global functions in C, but they are not > > > marked global in the inline assembly definition. This mismatch confuses > > > Clang's Control-Flow Integrity checking. Fix the definitions by adding > > > .globl. > > > > > > > Actually, since that function is not really global, would it work if you > > removed the "extern" from the my_tramp declaration? > > Unfortunately not, removing the "extern" doesn't seem to change anything. > > > In other words, is there a way to tell C that a function is declared in an > > inline assembly block? > > I'm not sure if there's a way to tell C that a static function is > declared in inline assembly. At least I couldn't find a way that would > make the compiler happy. I'm trying to see the warning. What option makes clang trigger a warning on this? >From user space, I'm just using the following file: #include <stdio.h> void my_direct_func(char *str) { printf("%s\n", str); } int test(char *str); asm ( " .pushsection .text, \"ax\", @progbits\n" " .type test, @function\n" " test:" " pushq %rbp\n" " movq %rsp, %rbp\n" " pushq %rdi\n" " call my_direct_func\n" " popq %rdi\n" " leave\n" " ret\n" " .size test, .-test\n" " .popsection\n" ); int main (int argc, char **argv) { test("hello"); return 0; }

