forked from bpftrace/bpftrace
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add macro definition support as a bpftrace "preprocessor"-like feature. This is implemented by running our Bison parser stage to collect preprocessor stuff, structs, enums, etc., then we run our clang parser stage, and then we run our parser stage again, replacing all occurrences of macros with their literal values. This will work for multi-level macro definitions, because Bison will keep parsing and replacing until there's no macro left in its cursor. Macro expressions (`#define MACRO()`) are not supported, but we can consider adding support for those in the future. The downside (maybe it is not a downside) is that macros defining things that bpftrace can't parse will throw. Fixes: bpftrace#153
- Loading branch information
Showing
16 changed files
with
158 additions
and
25 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,45 @@ | ||
#include "common.h" | ||
|
||
namespace bpftrace { | ||
namespace test { | ||
namespace codegen { | ||
|
||
TEST(codegen, macro_definition) | ||
{ | ||
test("#define FOO 100\nk:f { @ = FOO }", | ||
|
||
R"EXPECTED(; Function Attrs: nounwind | ||
declare i64 @llvm.bpf.pseudo(i64, i64) #0 | ||
; Function Attrs: argmemonly nounwind | ||
declare void @llvm.lifetime.start.p0i8(i64, i8* nocapture) #1 | ||
define i64 @"kprobe:f"(i8* nocapture readnone) local_unnamed_addr section "s_kprobe:f_1" { | ||
entry: | ||
%"@_val" = alloca i64, align 8 | ||
%"@_key" = alloca i64, align 8 | ||
%1 = bitcast i64* %"@_key" to i8* | ||
call void @llvm.lifetime.start.p0i8(i64 -1, i8* nonnull %1) | ||
store i64 0, i64* %"@_key", align 8 | ||
%2 = bitcast i64* %"@_val" to i8* | ||
call void @llvm.lifetime.start.p0i8(i64 -1, i8* nonnull %2) | ||
store i64 100, i64* %"@_val", align 8 | ||
%pseudo = tail call i64 @llvm.bpf.pseudo(i64 1, i64 1) | ||
%update_elem = call i64 inttoptr (i64 2 to i64 (i8*, i8*, i8*, i64)*)(i64 %pseudo, i64* nonnull %"@_key", i64* nonnull %"@_val", i64 0) | ||
call void @llvm.lifetime.end.p0i8(i64 -1, i8* nonnull %1) | ||
call void @llvm.lifetime.end.p0i8(i64 -1, i8* nonnull %2) | ||
ret i64 0 | ||
} | ||
; Function Attrs: argmemonly nounwind | ||
declare void @llvm.lifetime.end.p0i8(i64, i8* nocapture) #1 | ||
attributes #0 = { nounwind } | ||
attributes #1 = { argmemonly nounwind } | ||
)EXPECTED"); | ||
} | ||
|
||
} // namespace codegen | ||
} // namespace test | ||
} // namespace bpftrace | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.