[cfe-dev] output metadata for extern declared functions?

Lewis Burns lewisurn at gmail.com
Fri Nov 8 23:56:29 PST 2013


Hi,

I haven't worked on Clang before and have a simple question (supposedly) 
for those who are familiar with metadata and LLVM bitcode generation. 
Assume that I have a function which is declared as extern as the following:

extern int convert(unsigned u);

I want to have Clang generate metadata nodes for it by adding a metadata 
node of subprogram into the list of subprograms defined in the current 
compilation unit. The subprogram metadata node and its associated nodes 
should have the info of the type signature. For example, I get the 
following set of metadata nodes for function

int convert(unsigned u) {return 0;}

!3 = metadata !{metadata !4, metadata !10, metadata !33}
!4 = metadata !{i32 786478, metadata !1, metadata !5, metadata 
!"convert", metadata !"convert", metadata !"", i32 23, metadata !6, i1 
false, i1 true, i32 0, i32 0, null, i32 256, i1 false, i32 (i32)* 
@convert, null, null, metadata !2, i32 23} ; [ DW_TAG_subprogram ] [line 
23] [def] [convert]
!7 = metadata !{metadata !8, metadata !9}
!8 = metadata !{i32 786468, null, null, metadata !"int", i32 0, i64 32, 
i64 32, i64 0, i32 0, i32 5} ; [ DW_TAG_base_type ] [int] [line 0, size 
32, align 32, offset 0, enc DW_ATE_signed]
!9 = metadata !{i32 786468, null, null, metadata !"unsigned int", i32 0, 
i64 32, i64 32, i64 0, i32 0, i32 7} ; [ DW_TAG_base_type ] [unsigned 
int] [line 0, size 32, align 32, offset 0, enc DW_ATE_unsigned]

which allows me to extract the source-level type signature for the 
function by using LLVM debug info APIs. I'd like to get the source-level 
type signature of the extern declared function, but Clang does not 
produce metadata for it.

By looking at the Clang AST for the extern declared function

|-FunctionDecl 0x70598c0 <line:23:1, col:30> convert 'int (unsigned 
int)' extern
| |-ParmVarDecl 0x7059800 <col:20, col:29> u 'unsigned int'

I know that Clang has the information I need, and I just need to turn 
off or remove the filter that ignores functions whose bodies are not 
available during metadata node or/and code generation. Are there simple 
switches that do this? If not, can anyone please explain how to do it by 
pointing me to the right code snippets?

Thanks very much,

-- 
Lewis

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20131109/6b8e89b0/attachment.html>


More information about the cfe-dev mailing list