Skip to content
Snippets Groups Projects
  1. Feb 03, 2023
    • Guillermo E. Martinez's avatar
      bpf: fix error conversion from long unsigned int to unsigned int [-Werror=overflow] · 7f6ebecd
      Guillermo E. Martinez authored
      Regenerating BPF target using the maintainer mode emits:
      .../opcodes/bpf-opc.c:57:11: error: conversion from ‘long unsigned int’ to ‘unsigned int’ changes value from ‘18446744073709486335’ to ‘4294902015’ [-Werror=overflow]
        57 |   64, 64, 0xffffffffffff00ff, { { F (F_IMM32) }, { F (F_OFFSET16) }, { F (F_SRCLE) }, { F (F_OP_CODE) }, { F (F_DSTLE) }, { F (F_OP_SRC) }, { F (F_OP_CLASS) }, { 0 } }
      
      The use of a narrow size to handle the mask CGEN in instruction format
      is causing this error.  Additionally eBPF `call' instructions
      constructed by expressions using symbols (BPF_PSEUDO_CALL) emits
      annotations in `src' field of the instruction, used to identify BPF
      target endianness.
      
      cpu/
      	* bpf.cpu (define-call-insn): Remove `src' field from
      	instruction mask.
      
      include/
      	*opcode/cge.h (CGEN_IFMT): Adjust mask bit width.
      
      opcodes/
      	* bpf-opc.c: Regenerate.
      7f6ebecd
  2. Sep 18, 2020
    • David Faust's avatar
      bpf: xBPF SDIV, SMOD instructions · 6e25f888
      David Faust authored
      Add gas and opcodes support for two xBPF-exclusive ALU operations:
      SDIV (signed division) and SMOD (signed modulo), and add tests for
      them in gas.
      
      cpu/
      	* bpf.cpu (insn-op-code-alu): Add SDIV and SMOD.
      	(define-alu-insn-bin, daib): Take ISAs as an argument.
      	(define-alu-instructions): Update calls to daib pmacro with
      	ISAs; add sdiv and smod.
      
      gas/
      	* testsuite/gas/bpf/alu-xbpf.d: New file.
      	* testsuite/gas/bpf/alu-xbpf.s: Likewise.
      	* testsuite/gas/bpf/alu32-xbpf.d: Likewise.
      	* testsuite/gas/bpf/alu32-xbpf.d: Likewise.
      	* testuiste/gas/bpf/bpf.exp: Run new tests.
      
      opcodes/
      	* bpf-desc.c: Regenerate.
      	* bpf-desc.h: Likewise.
      	* bpf-opc.c: Likewise.
      	* bpf-opc.h: Likewise.
      6e25f888
  3. Sep 08, 2020
    • David Faust's avatar
      bpf: simulator: correct div, mod insn semantics · 3ad6c194
      David Faust authored
      The div and mod eBPF instructions are unsigned, but the semantic
      specification for the simulator incorrectly used signed operators.
      Correct them to unsigned versions, and correct the ALU tests in
      the simulator (which incorrectly assumed signed semantics).
      
      Tested in bpf-unknown-none.
      
      cpu/ChangeLog:
      2020-09-08  David Faust  <david.faust@oracle.com>
      
      	* bpf.cpu (define-alu-instructions): Correct semantic operators
      	for div, mod to unsigned versions.
      
      sim/ChangeLog:
      2020-09-08  David Faust  <david.faust@oracle.com>
      
      	* bpf/sem-be.c: Regenerate.
      	* bpf/sem-le.c: Likewise.
      
      sim/testsuite/ChangeLog:
      2020-09-08  David Faust  <david.faust@oracle.com>
      
      	* sim/bpf/alu.s: Correct div and mod tests.
      	* sim/bpf/alu32.s: Likewise.
      3ad6c194
  4. Aug 26, 2020
    • David Faust's avatar
      bpf: add xBPF ISA · 4449c81a
      David Faust authored
      This patch adds support for xBPF, another ISA targetting the BPF
      virtual architecture. For now, the primary difference between eBPF
      and xBPF is that xBPF supports indirect calls through the
      'call %reg' form of the call instruction.
      
      bfd/
      	* archures.c (bfd_mach_xbpf): Define.
      	* bfd-in2.h: Regenerate.
      	* cpu-bpf.c (bfd_xbpf_arch) New.
      	(bfd_bpf_arch) Update next in list field to point to xbpf arch.
      
      cpu/
      	* bpf.cpu (arch bpf): Add xbpf mach and isas.
      	(define-xbpf-isa) New pmacro.
      	(all-isas) Add xbpfle,xbpfbe.
      	(endian-isas): New pmacro.
      	(mach xbpf): New.
      	(model xbpf-def): Likewise.
      	(h-gpr): Add xbpf mach.
      	(f-dstle, f-srcle, dstle, srcle): Add xbpfle isa.
      	(f-dstbe, f-srcbe, dstbe, srcbe): Add xbpfbe isa.
      	(define-alu-insn-un): Use new endian-isas pmacro.
      	(define-alu-insn-bin, define-alu-insn-mov): Likewise.
      	(define-endian-insn, define-lddw): Likewise.
      	(dlind, dxli, dxsi, dsti): Likewise.
      	(define-cond-jump-insn, define-call-insn): Likewise.
      	(define-atomic-insns): Likewise.
      
      gas/
      	* config/tc-bpf.c: Add option -mxbpf to select xbpf isa.
      	* testsuite/gas/bpf/indcall-1.d: New file.
      	* testsuite/gas/bpf/indcall-1.s: Likewise.
      	* testsuite/gas/bpf/indcall-bad-1.l: Likewise.
      	* testsuite/gas/bpf/indcall-bad-1.s: Likewise.
      	* testsuite/gas/bpf/bpf.exp: Run new tests.
      
      opcodes/
      	* bpf-desc.c: Regenerate.
      	* bpf-desc.h: Likewise.
      	* bpf-opc.c: Likewise.
      	* bpf-opc.h: Likewise.
      	* disassemble.c (disassemble_init_for_target): Set bits for xBPF
      	ISA when appropriate.
      4449c81a
  5. Jun 25, 2020
    • David Faust's avatar
      cpu: fix offset16 type, update c-calls in bpf.cpu · d73be611
      David Faust authored
      Correct the type of the offset16 field to HI, and simplify memory
      accesses which use it. Also update c-calls in semantics for a
      few instructions.
      
      cpu/ChangeLog:
      
      2020-06-25 David Faust  <david.faust@oracle.com>
      
      	* bpf.cpu (f-offset16): Change type from INT to HI.
      	(dxli): Simplify memory access.
      	(dxsi): Likewise.
      	(define-endian-insn): Update c-call in semantics.
      	(dlabs) Likewise.
      	(dlind) Likewise.
      d73be611
  6. Jun 04, 2020
    • Jose E. Marchesi's avatar
      cpu,gas,opcodes: remove no longer needed workaround from the BPF port · d8740be1
      Jose E. Marchesi authored
      cpu/ChangeLog:
      
      2020-06-02  Jose E. Marchesi  <jose.marchesi@oracle.com>
      
      	* bpf.cpu (define-bpf-isa): Set base-insn-bitsize to 64.
      	* bpf.opc (bpf_print_insn): Do not set endian_code here.
      
      gas/ChangeLog:
      
      2020-06-04  Jose E. Marchesi  <jose.marchesi@oracle.com>
      
      	* config/tc-bpf.c (md_begin): Pass CGEN_CPU_OPEN_INSN_ENDIAN to
      	bpf_cgen_cpu_open.
      	(md_assemble): Remove no longer needed hack.
      
      opcodes/ChangeLog:
      
      2020-06-04  Jose E. Marchesi  <jose.marchesi@oracle.com>
      
      	* disassemble.c (disassemble_init_for_target): Set endian_code for
      	bpf targets.
      	* bpf-desc.c: Regenerate.
      	* bpf-opc.c: Likewise.
      	* bpf-dis.c: Likewise.
      d8740be1
  7. May 28, 2020
    • Jose E. Marchesi's avatar
      cpu,opcodes: add instruction semantics to bpf.cpu and minor fixes · 78c1c354
      Jose E. Marchesi authored
      This patch adds semantic RTL descriptions to the eBPF instructions
      defined in cpu/bpf.cpu.  It also contains a couple of minor
      improvements.
      
      Tested in bpf-unknown-none targets.
      No regressions.
      
      cpu/ChangeLog:
      
      2020-05-28  Jose E. Marchesi  <jose.marchesi@oracle.com>
      	    David Faust <david.faust@oracle.com>
      
      	* bpf.cpu (define-alu-insn-un): Add definitions of semantics.
      	(define-alu-insn-mov): Likewise.
      	(daib): Likewise.
      	(define-alu-instructions): Likewise.
      	(define-endian-insn): Likewise.
      	(define-lddw): Likewise.
      	(dlabs): Likewise.
      	(dlind): Likewise.
      	(dxli): Likewise.
      	(dxsi): Likewise.
      	(dsti): Likewise.
      	(define-ldstx-insns): Likewise.
      	(define-st-insns): Likewise.
      	(define-cond-jump-insn): Likewise.
      	(dcji): Likewise.
      	(define-condjump-insns): Likewise.
      	(define-call-insn): Likewise.
      	(ja): Likewise.
      	("exit"): Likewise.
      	(define-atomic-insns): Likewise.
      	(sem-exchange-and-add): New macro.
      	* bpf.cpu ("brkpt"): New instruction.
      	(bpfbf): Set word-bitsize to 32 and insn-endian big.
      	(h-gpr): Prefer r0 to `a' and r6 to `ctx'.
      	(h-pc): Expand definition.
      	* bpf.opc (bpf_print_insn): Set endian_code to BIG.
      
      opcodes/ChangeLog:
      
      2020-05-28  Jose E. Marchesi  <jose.marchesi@oracle.com>
      	    David Faust <david.faust@oracle.com>
      
      	* bpf-desc.c: Regenerate.
      	* bpf-opc.h: Likewise.
      	* bpf-opc.c: Likewise.
      	* bpf-dis.c: Likewise.
      78c1c354
  8. Apr 16, 2020
    • David Faust's avatar
      cpu,gas,opcodes: support for eBPF JMP32 instruction class · c54a9b56
      David Faust authored
      Add support for the JMP32 class of eBPF instructions.
      
      cpu/ChangeLog
      
      	* bpf.cpu (define-cond-jump-insn): Renamed from djci.
      	(dcji) New version with support for JMP32
      
      gas/ChangeLog
      
      	* testsuite/gas/bpf/bpf.exp: Run jump32 tests.
      	* testsuite/gas/bpf/jump32.s: New file.
      	* testsuite/gas/bpf/jump32.d: Likewise.
      
      opcodes/ChangeLog
      
      	* bpf-desc.c: Regenerate.
      	* bpf-desc.h: Likewise.
      	* bpf-opc.c: Regenerate.
      	* bpf-opc.h: Likewise.
      c54a9b56
  9. Jan 30, 2020
    • Jose E. Marchesi's avatar
      cpu,opcodes,gas: fix neg and neg32 instructions in BPF · bd434cc4
      Jose E. Marchesi authored
      This patch fixes the neg/neg32 BPF instructions, which have K (=0)
      instead of X (=1) in their header source bit, despite operating on
      registes.
      
      cpu/ChangeLog:
      
      2020-01-30  Jose E. Marchesi  <jose.marchesi@oracle.com>
      
      	* bpf.cpu (define-alu-insn-un): The unary BPF instructions
      	(neg and neg32) use OP_SRC_K even if they operate only in
      	registers.
      
      opcodes/ChangeLog:
      
      2020-01-30  Jose E. Marchesi  <jose.marchesi@oracle.com>
      
      	* bpf-opc.c: Regenerate.
      
      gas/ChangeLog:
      
      2020-01-30  Jose E. Marchesi  <jose.marchesi@oracle.com>
      
      	* testsuite/gas/bpf/alu.d: Update expected opcode for `neg'.
      	* testsuite/gas/bpf/alu-be.d: Likewise.
      	* testsuite/gas/bpf/alu32.d: Likewise for `neg32'.
      	* testsuite/gas/bpf/alu32-be.d: Likewise.
      bd434cc4
  10. Dec 17, 2019
  11. Nov 20, 2019
  12. Jul 19, 2019
    • Jose E. Marchesi's avatar
      cpu,opcodes,gas: use %r0 and %r6 instead of %a and %ctf in eBPF disassembler · 231097b0
      Jose E. Marchesi authored
      This patch changes the eBPF CPU description to prefer the register
      names %r0 and %r6 instead of %a and %ctx when disassembling.  This
      matches better with the current practice, vs. cBPF.
      
      It also updates the GAS tests in order to reflect this change.
      Tested in a x86_64 host.
      
      cpu/ChangeLog:
      
      2019-07-19  Jose E. Marchesi  <jose.marchesi@oracle.com>
      
      	* bpf.cpu (h-gpr): when disassembling, use %r0 and %r6 instead of
      	%a and %ctx.
      
      opcodes/ChangeLog:
      
      2019-07-19  Jose E. Marchesi  <jose.marchesi@oracle.com>
      
      	* bpf-desc.c: Regenerated.
      
      gas/ChangeLog:
      
      2019-07-19  Jose E. Marchesi  <jose.marchesi@oracle.com>
      
      	* testsuite/gas/bpf/alu.d: Use %r6 instead of %ctx.
      	* testsuite/gas/bpf/lddw-be.d: Likewise.
      	* testsuite/gas/bpf/lddw.d: Likewise.
      	* testsuite/gas/bpf/alu-be.d: Likewise.
      	* testsuite/gas/bpf/alu32.d: Likewise.
      231097b0
  13. Jul 15, 2019
    • Jose E. Marchesi's avatar
      cpu,opcodes,gas: fix explicit arguments to eBPF ldabs instructions · 3719fd55
      Jose E. Marchesi authored
      This patch fixes the eBPF CPU description in order to reflect the
      right explicit arguments passed to the ldabs{b,h,w,dw} instructions,
      updates the corresponding GAS tests, and updates the BPF section of
      the GAS manual.
      
      cpu/ChangeLog:
      
      2019-07-15  Jose E. Marchesi  <jose.marchesi@oracle.com>
      
      	* bpf.cpu (dlabs): New pmacro.
      	(dlind): Likewise.
      
      opcodes/ChangeLog:
      
      2019-07-15  Jose E. Marchesi  <jose.marchesi@oracle.com>
      
      	* bpf-desc.c: Regenerate.
      	* bpf-opc.c: Likewise.
      	* bpf-opc.h: Likewise.
      
      gas/ChangeLog:
      
      2019-07-15  Jose E. Marchesi  <jose.marchesi@oracle.com>
      
      	* testsuite/gas/bpf/mem.s: ldabs instructions do not take a `src'
      	register as an argument.
      	* testsuite/gas/bpf/mem.d: Updated accordingly.
      	* testsuite/gas/bpf/mem-be.d: Likewise.
      	* doc/c-bpf.texi (BPF Opcodes): Update to reflect the correct
      	explicit arguments to ldabs and ldind instructions.
      3719fd55
  14. Jul 14, 2019
    • Jose E. Marchesi's avatar
      cpu,opcodes,gas: fix arguments to ldabs and ldind eBPF instructions · 92434a14
      Jose E. Marchesi authored
      The eBPF non-generic load instructions ldind{b,h,w,dw} and
      ldabs{b,h,w,dw} do not take an explicit destination register as an
      argument.  Instead, they put the loaded value in %r0, implicitly.
      
      This patch fixes the CPU BPF description to not expect a 'dst'
      argument in these arguments, regenerates the corresponding files in
      opcodes, and updates the impacted GAS tests.
      
      Tested in a x86-64 host.
      
      cpu/ChangeLog:
      
      2019-07-14  Jose E. Marchesi  <jose.marchesi@oracle.com>
      
      	* bpf.cpu (dlsi): ldabs and ldind instructions do not take an
      	explicit 'dst' argument.
      
      opcodes/ChangeLog:
      
      2019-07-14  Jose E. Marchesi  <jose.marchesi@oracle.com>
      
      	* bpf-desc.c: Regenerate.
      	* bpf-opc.c: Likewise.
      
      gas/ChangeLog:
      
      2019-07-14  Jose E. Marchesi  <jose.marchesi@oracle.com>
      
      	* testsuite/gas/bpf/mem.s: Do not use explicit arguments for
      	ldabs and ldind instructions.
      	* testsuite/gas/bpf/mem.d: Updated accordingly.
      	* testsuite/gas/bpf/mem-be.d: Likewise.
      92434a14
  15. May 23, 2019
    • Jose E. Marchesi's avatar
      cpu: add eBPF cpu description · ea195bb0
      Jose E. Marchesi authored
      This patch adds a CPU description for the Linux kernel eBPF virtual
      machine, plus supporting code for disassembler and assembler.
      
      cpu/ChangeLog:
      
      2019-05-23  Jose E. Marchesi  <jose.marchesi@oracle.com>
      
      	* bpf.cpu: New file.
      	* bpf.opc: Likewise.
      ea195bb0
Loading