HomePhabricator

[bpf] Avoid extra pointer arithmetic for stack access
AuditedrL249371

Description

[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

Auditors
tstellarAMD
llvm-commits
Group Auditors
Restricted Project
Committed
astOct 5 2015, 9:00 PM
Parents
rL249370: [X86] Teach constant hoisting that ANDs with 64-bit immediates in the range…
Branches
Unknown
Tags
Unknown

Event Timeline

ast added auditors: Restricted Project, llvm-commits, tstellarAMD.Oct 8 2015, 7:09 PM

bug fix

tstellarAMD added a subscriber: tstellarAMD.

LGTM. Go ahead and merge this to the 3.7 branch. Please use the merge.sh script in utils/release to get a consistent commit message.

tstellarAMD added a project: Restricted Project.Nov 9 2015, 8:40 AM