HomePhabricator

Merging r249371:

Description

Merging r249371:

r249371 | ast | 2015-10-05 21:00:53 -0700 (Mon, 05 Oct 2015) | 25 lines

[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>

Details

Committed
astOct 23 2015, 6:58 PM
Parents
rL251174: Merging r247951:
Branches
Unknown
Tags
Unknown