> Here are two examples of the challenging RTL instructions:
>
> (call (mem:QI (symbol_ref:SI (\"stpcpy\") [flags 0x41] <function_decl
> 0x401f000 0 __builtin_stpcpy>) [0 S1 A8])
>         (const_int 8 [0x8]))
>
> Q: does this instruction call the function stpcpy or __builtin_stpcpy ?

The compiler will emit a call to stpcpy in the assembly file (modulo further 
symbol mangling).  You cannot really call __builtin_stpcpy anyway since it's 
a builtin.

>  (call (mem:QI (symbol_ref:SI (\"check_match.7758\") [flags 0x3]
> <function_decl 0x404a3e80 check_match>) [0 S1 A8])
>         (const_int 0 [0x0]))
>
> Q: does this instruction call the function check_match.7758 or check_match
> ?

Same as above, the pure RTL part gives the symbol name.

> In general, why do we have somtimes calls like that which (seemingly) have
> different callee targets ?

In the former case, because it's a builtin.  More generally, the RTL back-end 
is allowed to mangle symbol names at its pleasure.  You can display the RTL 
associated with a FUNCTION_DECL by invoking debug_tree on it from within GDB.

-- 
Eric Botcazou

Reply via email to