summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Support
diff options
context:
space:
mode:
authorYonghong Song <yhs@fb.com>2019-07-25 16:01:26 +0000
committerYonghong Song <yhs@fb.com>2019-07-25 16:01:26 +0000
commitd8efec97bebd24a3fd12169d9613efc839ba5280 (patch)
tree762b953f0475111dea8f0f7193c784f78bb26bc6 /llvm/lib/Support
parent5d5a58317cb2512d18d608a97a3a948e708c59e0 (diff)
downloadbcm5719-llvm-d8efec97bebd24a3fd12169d9613efc839ba5280.tar.gz
bcm5719-llvm-d8efec97bebd24a3fd12169d9613efc839ba5280.zip
[BPF] fix CO-RE incorrect index access string
Currently, we expect the CO-RE offset relocation records a string encoding the original getelementptr access index, so kernel bpf loader can decode it correctly. For example, struct s { int a; int b; }; struct t { int c; int d; }; #define _(x) (__builtin_preserve_access_index(x)) int get_value(const void *addr1, const void *addr2); int test(struct s *arg1, struct t *arg2) { return get_value(_(&arg1->b), _(&arg2->d)); } We expect two offset relocations: reloc 1: type s, access index 0, 1 reloc 2: type t, access index 0, 1 Two globals are created to retain access indexes for the above two relocations with global variable names. The first global has a name "0:1:". Unfortunately, the second global has the name "0:1:.1" as the llvm internals automatically add suffix ".1" to a global with the same name. Later on, the BPF peels the last character and record "0:1" and "0:1:." in the relocation table. This is not desirable. BPF backend could use the global variable suffix knowledge to generate correct access str. This patch rather took an approach not relying on that knowledge. It generates "s:0:1:" and "t:0:1:" to avoid global variable suffixes and later on generate correct index access string "0:1" for both records. Signed-off-by: Yonghong Song <yhs@fb.com> Differential Revision: https://reviews.llvm.org/D65258 llvm-svn: 367030
Diffstat (limited to 'llvm/lib/Support')
0 files changed, 0 insertions, 0 deletions
OpenPOWER on IntegriCloud