[PATCH] D65258: fix CO-RE incorrect index access string

Yonghong Song via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Wed Jul 24 19:33:05 PDT 2019


yonghong-song created this revision.
yonghong-song added a reviewer: ast.
Herald added subscribers: llvm-commits, arphaman.
Herald added a project: LLVM.

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.


Repository:
  rL LLVM

https://reviews.llvm.org/D65258

Files:
  lib/Target/BPF/BPFAbstractMemberAccess.cpp
  lib/Target/BPF/BTFDebug.cpp
  test/CodeGen/BPF/CORE/offset-reloc-access-str.ll

-------------- next part --------------
A non-text attachment was scrubbed...
Name: D65258.211659.patch
Type: text/x-patch
Size: 10976 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20190725/8b080fe2/attachment.bin>


More information about the llvm-commits mailing list