Skip to content
  1. Mar 10, 2017
  2. Feb 16, 2017
  3. Feb 09, 2017
  4. Feb 08, 2017
  5. Dec 02, 2016
  6. Nov 30, 2016
  7. Nov 12, 2016
  8. Nov 08, 2016
  9. Nov 01, 2016
  10. Sep 15, 2016
  11. Sep 05, 2016
  12. Aug 02, 2016
  13. Jul 23, 2016
  14. Jul 21, 2016
  15. Jul 05, 2016
  16. May 27, 2016
  17. May 26, 2016
  18. May 20, 2016
  19. May 10, 2016
  20. Apr 01, 2016
  21. Mar 28, 2016
  22. Mar 08, 2016
  23. Jan 30, 2016
  24. Dec 19, 2015
  25. Dec 03, 2015
  26. Oct 28, 2015
  27. Oct 27, 2015
  28. Sep 07, 2015
  29. Aug 13, 2015
  30. Jun 30, 2015
  31. May 05, 2015
  32. Apr 21, 2015
  33. Mar 16, 2015
  34. Mar 05, 2015
  35. Jan 28, 2015
  36. Jan 24, 2015
    • Alexei Starovoitov's avatar
      BPF backend · e4c8c807
      Alexei Starovoitov authored
      Summary:
      V8->V9:
      - cleanup tests
      
      V7->V8:
      - addressed feedback from David:
      - switched to range-based 'for' loops
      - fixed formatting of tests
      
      V6->V7:
      - rebased and adjusted AsmPrinter args
      - CamelCased .td, fixed formatting, cleaned up names, removed unused patterns
      - diffstat: 3 files changed, 203 insertions(+), 227 deletions(-)
      
      V5->V6:
      - addressed feedback from Chandler:
      - reinstated full verbose standard banner in all files
      - fixed variables that were not in CamelCase
      - fixed names of #ifdef in header files
      - removed redundant braces in if/else chains with single statements
      - fixed comments
      - removed trailing empty line
      - dropped debug annotations from tests
      - diffstat of these changes:
        46 files changed, 456 insertions(+), 469 deletions(-)
      
      V4->V5:
      - fix setLoadExtAction() interface
      - clang-formated all where it made sense
      
      V3->V4:
      - added CODE_OWNERS entry for BPF backend
      
      V2->V3:
      - fix metadata in tests
      
      V1->V2:
      - addressed feedback from Tom and Matt
      - removed top level change to configure (now everything via 'experimental-backend')
      - reworked error reporting via DiagnosticInfo (similar to R600)
      - added few more tests
      - added cmake build
      - added Triple::bpf
      - tested on linux and darwin
      
      V1 cover letter:
      ---------------------
      recently linux gained "universal in-kernel virtual machine" which is called
      eBPF or extended BPF. The name comes from "Berkeley Packet Filter", since
      new instruction set is based on it.
      This patch adds a new backend that emits extended BPF instruction set.
      
      The concept and development are covered by the following articles:
      http://lwn.net/Articles/599755/
      http://lwn.net/Articles/575531/
      http://lwn.net/Articles/603983/
      http://lwn.net/Articles/606089/
      http://lwn.net/Articles/612878/
      
      One of use cases: dtrace/systemtap alternative.
      
      bpf syscall manpage:
      https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=b4fc1a460f3017e958e6a8ea560ea0afd91bf6fe
      
      instruction set description and differences vs classic BPF:
      http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/Documentation/networking/filter.txt
      
      
      
      Short summary of instruction set:
      - 64-bit registers
        R0      - return value from in-kernel function, and exit value for BPF program
        R1 - R5 - arguments from BPF program to in-kernel function
        R6 - R9 - callee saved registers that in-kernel function will preserve
        R10     - read-only frame pointer to access stack
      - two-operand instructions like +, -, *, mov, load/store
      - implicit prologue/epilogue (invisible stack pointer)
      - no floating point, no simd
      
      Short history of extended BPF in kernel:
      interpreter in 3.15, x64 JIT in 3.16, arm64 JIT, verifier, bpf syscall in 3.18, more to come in the future.
      
      It's a very small and simple backend.
      There is no support for global variables, arbitrary function calls, floating point, varargs,
      exceptions, indirect jumps, arbitrary pointer arithmetic, alloca, etc.
      From C front-end point of view it's very restricted. It's done on purpose, since kernel
      rejects all programs that it cannot prove safe. It rejects programs with loops
      and with memory accesses via arbitrary pointers. When kernel accepts the program it is
      guaranteed that program will terminate and will not crash the kernel.
      
      This patch implements all 'must have' bits. There are several things on TODO list,
      so this is not the end of development.
      Most of the code is a boiler plate code, copy-pasted from other backends.
      Only odd things are lack or < and <= instructions, specialized load_byte intrinsics
      and 'compare and goto' as single instruction.
      Current instruction set is fixed, but more instructions can be added in the future.
      
      Signed-off-by: default avatarAlexei Starovoitov <alexei.starovoitov@gmail.com>
      
      Subscribers: majnemer, chandlerc, echristo, joerg, pete, rengolin, kristof.beyls, arsenm, t.p.northover, tstellarAMD, aemerson, llvm-commits
      
      Differential Revision: http://reviews.llvm.org/D6494
      
      llvm-svn: 227008
      e4c8c807
  37. Dec 18, 2014
  38. Dec 12, 2014
  39. Dec 11, 2014
Loading