diff options
author | Alexei Starovoitov <alexei.starovoitov@gmail.com> | 2015-10-06 04:00:53 +0000 |
---|---|---|
committer | Alexei Starovoitov <alexei.starovoitov@gmail.com> | 2015-10-06 04:00:53 +0000 |
commit | 4e01a38da08cb2eb1556fe52614f4dd926d4f555 (patch) | |
tree | cc449c134a8afa86e8ac2f0fe46057ff1928c190 /compiler-rt/lib/builtins/int_util.c | |
parent | 79dd1bf09441fc62e959c08d7146d94b282691ba (diff) | |
download | bcm5719-llvm-4e01a38da08cb2eb1556fe52614f4dd926d4f555.tar.gz bcm5719-llvm-4e01a38da08cb2eb1556fe52614f4dd926d4f555.zip |
[bpf] Avoid extra pointer arithmetic for stack access
For the program like below
struct key_t {
int pid;
char name[16];
};
extern void test1(char *);
int test() {
struct key_t key = {};
test1(key.name);
return 0;
}
For key.name, the llc/bpf may generate the below code:
R1 = R10 // R10 is the frame pointer
R1 += -24 // framepointer adjustment
R1 |= 4 // R1 is then used as the first parameter of test1
OR operation is not recognized by in-kernel verifier.
This patch introduces an intermediate FI_ri instruction and
generates the following code that can be properly verified:
R1 = R10
R1 += -20
Patch by Yonghong Song <yhs@plumgrid.com>
llvm-svn: 249371
Diffstat (limited to 'compiler-rt/lib/builtins/int_util.c')
0 files changed, 0 insertions, 0 deletions