]> granicus.if.org Git - llvm/commit
Merging r367030:
authorHans Wennborg <hans@hanshq.net>
Mon, 29 Jul 2019 08:59:09 +0000 (08:59 +0000)
committerHans Wennborg <hans@hanshq.net>
Mon, 29 Jul 2019 08:59:09 +0000 (08:59 +0000)
commit50d67a2d298303b051f644bbbbf8e9eb7b2dd66e
tree4512ec740d32b7c773c1f81c43c74f0527c1f4cc
parentcba7a9111e8787ffbe869072bf6e4bc53ff5c788
Merging r367030:
------------------------------------------------------------------------
r367030 | yhs | 2019-07-25 18:01:26 +0200 (Thu, 25 Jul 2019) | 38 lines

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/branches/release_90@367210 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Target/BPF/BPFAbstractMemberAccess.cpp
lib/Target/BPF/BTFDebug.cpp
test/CodeGen/BPF/CORE/offset-reloc-access-str.ll [new file with mode: 0644]