mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-19 17:18:24 +08:00
bpf: fix error conversion from long unsigned int to unsigned int [-Werror=overflow]
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.
This commit is contained in:
@ -768,7 +768,7 @@
|
|||||||
"call"
|
"call"
|
||||||
(endian-isas x-endian)
|
(endian-isas x-endian)
|
||||||
"call $disp32"
|
"call $disp32"
|
||||||
(+ disp32 (f-offset16 0) (f-regs 0)
|
(+ disp32 (f-offset16 0) (.sym src x-endian) ((.sym f-dst x-endian) 0)
|
||||||
OP_CLASS_JMP OP_SRC_K OP_CODE_CALL)
|
OP_CLASS_JMP OP_SRC_K OP_CODE_CALL)
|
||||||
(c-call VOID
|
(c-call VOID
|
||||||
"bpfbf_call" disp32 (ifield (.sym f-src x-endian)))
|
"bpfbf_call" disp32 (ifield (.sym f-src x-endian)))
|
||||||
|
@ -914,7 +914,7 @@ typedef struct
|
|||||||
Each insn's value is stored with the insn.
|
Each insn's value is stored with the insn.
|
||||||
The first step in recognizing an insn for disassembly is
|
The first step in recognizing an insn for disassembly is
|
||||||
(opcode & mask) == value. */
|
(opcode & mask) == value. */
|
||||||
CGEN_INSN_INT mask;
|
CGEN_INSN_LGUINT mask;
|
||||||
#define CGEN_IFMT_MASK(ifmt) ((ifmt)->mask)
|
#define CGEN_IFMT_MASK(ifmt) ((ifmt)->mask)
|
||||||
|
|
||||||
/* Instruction fields.
|
/* Instruction fields.
|
||||||
|
@ -50,99 +50,103 @@ static const CGEN_IFMT ifmt_empty ATTRIBUTE_UNUSED = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
static const CGEN_IFMT ifmt_addile ATTRIBUTE_UNUSED = {
|
static const CGEN_IFMT ifmt_addile ATTRIBUTE_UNUSED = {
|
||||||
64, 64, 0xff, { { 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 } }
|
64, 64, 0xfffff0ff, { { 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 } }
|
||||||
};
|
};
|
||||||
|
|
||||||
static const CGEN_IFMT ifmt_addrle ATTRIBUTE_UNUSED = {
|
static const CGEN_IFMT ifmt_addrle ATTRIBUTE_UNUSED = {
|
||||||
64, 64, 0xff, { { 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 } }
|
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 } }
|
||||||
};
|
};
|
||||||
|
|
||||||
static const CGEN_IFMT ifmt_negle ATTRIBUTE_UNUSED = {
|
static const CGEN_IFMT ifmt_negle ATTRIBUTE_UNUSED = {
|
||||||
64, 64, 0xff, { { 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 } }
|
64, 64, 0xfffffffffffff0ff, { { 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 } }
|
||||||
};
|
};
|
||||||
|
|
||||||
static const CGEN_IFMT ifmt_addibe ATTRIBUTE_UNUSED = {
|
static const CGEN_IFMT ifmt_addibe ATTRIBUTE_UNUSED = {
|
||||||
64, 64, 0xff, { { F (F_IMM32) }, { F (F_OFFSET16) }, { F (F_DSTBE) }, { F (F_OP_CODE) }, { F (F_SRCBE) }, { F (F_OP_SRC) }, { F (F_OP_CLASS) }, { 0 } }
|
64, 64, 0xffff0fff, { { F (F_IMM32) }, { F (F_OFFSET16) }, { F (F_DSTBE) }, { F (F_OP_CODE) }, { F (F_SRCBE) }, { F (F_OP_SRC) }, { F (F_OP_CLASS) }, { 0 } }
|
||||||
};
|
};
|
||||||
|
|
||||||
static const CGEN_IFMT ifmt_addrbe ATTRIBUTE_UNUSED = {
|
static const CGEN_IFMT ifmt_addrbe ATTRIBUTE_UNUSED = {
|
||||||
64, 64, 0xff, { { F (F_IMM32) }, { F (F_OFFSET16) }, { F (F_DSTBE) }, { F (F_OP_CODE) }, { F (F_SRCBE) }, { F (F_OP_SRC) }, { F (F_OP_CLASS) }, { 0 } }
|
64, 64, 0xffffffffffff00ff, { { F (F_IMM32) }, { F (F_OFFSET16) }, { F (F_DSTBE) }, { F (F_OP_CODE) }, { F (F_SRCBE) }, { F (F_OP_SRC) }, { F (F_OP_CLASS) }, { 0 } }
|
||||||
};
|
};
|
||||||
|
|
||||||
static const CGEN_IFMT ifmt_negbe ATTRIBUTE_UNUSED = {
|
static const CGEN_IFMT ifmt_negbe ATTRIBUTE_UNUSED = {
|
||||||
64, 64, 0xff, { { F (F_IMM32) }, { F (F_OFFSET16) }, { F (F_DSTBE) }, { F (F_OP_CODE) }, { F (F_SRCBE) }, { F (F_OP_SRC) }, { F (F_OP_CLASS) }, { 0 } }
|
64, 64, 0xffffffffffff0fff, { { F (F_IMM32) }, { F (F_OFFSET16) }, { F (F_DSTBE) }, { F (F_OP_CODE) }, { F (F_SRCBE) }, { F (F_OP_SRC) }, { F (F_OP_CLASS) }, { 0 } }
|
||||||
};
|
};
|
||||||
|
|
||||||
static const CGEN_IFMT ifmt_endlele ATTRIBUTE_UNUSED = {
|
static const CGEN_IFMT ifmt_endlele ATTRIBUTE_UNUSED = {
|
||||||
64, 64, 0xff, { { 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 } }
|
64, 64, 0xfffff0ff, { { 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 } }
|
||||||
};
|
};
|
||||||
|
|
||||||
static const CGEN_IFMT ifmt_endlebe ATTRIBUTE_UNUSED = {
|
static const CGEN_IFMT ifmt_endlebe ATTRIBUTE_UNUSED = {
|
||||||
64, 64, 0xff, { { F (F_IMM32) }, { F (F_OFFSET16) }, { F (F_DSTBE) }, { F (F_OP_CODE) }, { F (F_SRCBE) }, { F (F_OP_SRC) }, { F (F_OP_CLASS) }, { 0 } }
|
64, 64, 0xffff0fff, { { F (F_IMM32) }, { F (F_OFFSET16) }, { F (F_DSTBE) }, { F (F_OP_CODE) }, { F (F_SRCBE) }, { F (F_OP_SRC) }, { F (F_OP_CLASS) }, { 0 } }
|
||||||
};
|
};
|
||||||
|
|
||||||
static const CGEN_IFMT ifmt_lddwle ATTRIBUTE_UNUSED = {
|
static const CGEN_IFMT ifmt_lddwle ATTRIBUTE_UNUSED = {
|
||||||
64, 128, 0xff, { { F (F_IMM64) }, { F (F_OFFSET16) }, { F (F_SRCLE) }, { F (F_OP_MODE) }, { F (F_OP_SIZE) }, { F (F_DSTLE) }, { F (F_OP_CLASS) }, { 0 } }
|
64, 128, 0xfffff0ff, { { F (F_IMM64) }, { F (F_OFFSET16) }, { F (F_SRCLE) }, { F (F_OP_MODE) }, { F (F_OP_SIZE) }, { F (F_DSTLE) }, { F (F_OP_CLASS) }, { 0 } }
|
||||||
};
|
};
|
||||||
|
|
||||||
static const CGEN_IFMT ifmt_lddwbe ATTRIBUTE_UNUSED = {
|
static const CGEN_IFMT ifmt_lddwbe ATTRIBUTE_UNUSED = {
|
||||||
64, 128, 0xff, { { F (F_IMM64) }, { F (F_OFFSET16) }, { F (F_DSTBE) }, { F (F_OP_MODE) }, { F (F_OP_SIZE) }, { F (F_SRCBE) }, { F (F_OP_CLASS) }, { 0 } }
|
64, 128, 0xffff0fff, { { F (F_IMM64) }, { F (F_OFFSET16) }, { F (F_DSTBE) }, { F (F_OP_MODE) }, { F (F_OP_SIZE) }, { F (F_SRCBE) }, { F (F_OP_CLASS) }, { 0 } }
|
||||||
};
|
};
|
||||||
|
|
||||||
static const CGEN_IFMT ifmt_ldabsw ATTRIBUTE_UNUSED = {
|
static const CGEN_IFMT ifmt_ldabsw ATTRIBUTE_UNUSED = {
|
||||||
64, 64, 0xff, { { F (F_IMM32) }, { F (F_OFFSET16) }, { F (F_REGS) }, { F (F_OP_MODE) }, { F (F_OP_SIZE) }, { F (F_OP_CLASS) }, { 0 } }
|
64, 64, 0xffffffff, { { F (F_IMM32) }, { F (F_OFFSET16) }, { F (F_REGS) }, { F (F_OP_MODE) }, { F (F_OP_SIZE) }, { F (F_OP_CLASS) }, { 0 } }
|
||||||
};
|
};
|
||||||
|
|
||||||
static const CGEN_IFMT ifmt_ldindwle ATTRIBUTE_UNUSED = {
|
static const CGEN_IFMT ifmt_ldindwle ATTRIBUTE_UNUSED = {
|
||||||
64, 64, 0xff, { { F (F_IMM32) }, { F (F_OFFSET16) }, { F (F_SRCLE) }, { F (F_OP_MODE) }, { F (F_OP_SIZE) }, { F (F_DSTLE) }, { F (F_OP_CLASS) }, { 0 } }
|
64, 64, 0xffff0fff, { { F (F_IMM32) }, { F (F_OFFSET16) }, { F (F_SRCLE) }, { F (F_OP_MODE) }, { F (F_OP_SIZE) }, { F (F_DSTLE) }, { F (F_OP_CLASS) }, { 0 } }
|
||||||
};
|
};
|
||||||
|
|
||||||
static const CGEN_IFMT ifmt_ldindwbe ATTRIBUTE_UNUSED = {
|
static const CGEN_IFMT ifmt_ldindwbe ATTRIBUTE_UNUSED = {
|
||||||
64, 64, 0xff, { { F (F_IMM32) }, { F (F_OFFSET16) }, { F (F_DSTBE) }, { F (F_OP_MODE) }, { F (F_OP_SIZE) }, { F (F_SRCBE) }, { F (F_OP_CLASS) }, { 0 } }
|
64, 64, 0xfffff0ff, { { F (F_IMM32) }, { F (F_OFFSET16) }, { F (F_DSTBE) }, { F (F_OP_MODE) }, { F (F_OP_SIZE) }, { F (F_SRCBE) }, { F (F_OP_CLASS) }, { 0 } }
|
||||||
};
|
};
|
||||||
|
|
||||||
static const CGEN_IFMT ifmt_ldxwle ATTRIBUTE_UNUSED = {
|
static const CGEN_IFMT ifmt_ldxwle ATTRIBUTE_UNUSED = {
|
||||||
64, 64, 0xff, { { F (F_IMM32) }, { F (F_OFFSET16) }, { F (F_SRCLE) }, { F (F_OP_MODE) }, { F (F_OP_SIZE) }, { F (F_DSTLE) }, { F (F_OP_CLASS) }, { 0 } }
|
64, 64, 0xffffffff000000ff, { { F (F_IMM32) }, { F (F_OFFSET16) }, { F (F_SRCLE) }, { F (F_OP_MODE) }, { F (F_OP_SIZE) }, { F (F_DSTLE) }, { F (F_OP_CLASS) }, { 0 } }
|
||||||
};
|
};
|
||||||
|
|
||||||
static const CGEN_IFMT ifmt_ldxwbe ATTRIBUTE_UNUSED = {
|
static const CGEN_IFMT ifmt_ldxwbe ATTRIBUTE_UNUSED = {
|
||||||
64, 64, 0xff, { { F (F_IMM32) }, { F (F_OFFSET16) }, { F (F_DSTBE) }, { F (F_OP_MODE) }, { F (F_OP_SIZE) }, { F (F_SRCBE) }, { F (F_OP_CLASS) }, { 0 } }
|
64, 64, 0xffffffff000000ff, { { F (F_IMM32) }, { F (F_OFFSET16) }, { F (F_DSTBE) }, { F (F_OP_MODE) }, { F (F_OP_SIZE) }, { F (F_SRCBE) }, { F (F_OP_CLASS) }, { 0 } }
|
||||||
};
|
};
|
||||||
|
|
||||||
static const CGEN_IFMT ifmt_stble ATTRIBUTE_UNUSED = {
|
static const CGEN_IFMT ifmt_stble ATTRIBUTE_UNUSED = {
|
||||||
64, 64, 0xff, { { F (F_IMM32) }, { F (F_OFFSET16) }, { F (F_SRCLE) }, { F (F_OP_MODE) }, { F (F_OP_SIZE) }, { F (F_DSTLE) }, { F (F_OP_CLASS) }, { 0 } }
|
64, 64, 0xf0ff, { { F (F_IMM32) }, { F (F_OFFSET16) }, { F (F_SRCLE) }, { F (F_OP_MODE) }, { F (F_OP_SIZE) }, { F (F_DSTLE) }, { F (F_OP_CLASS) }, { 0 } }
|
||||||
};
|
};
|
||||||
|
|
||||||
static const CGEN_IFMT ifmt_stbbe ATTRIBUTE_UNUSED = {
|
static const CGEN_IFMT ifmt_stbbe ATTRIBUTE_UNUSED = {
|
||||||
64, 64, 0xff, { { F (F_IMM32) }, { F (F_OFFSET16) }, { F (F_DSTBE) }, { F (F_OP_MODE) }, { F (F_OP_SIZE) }, { F (F_SRCBE) }, { F (F_OP_CLASS) }, { 0 } }
|
64, 64, 0xfff, { { F (F_IMM32) }, { F (F_OFFSET16) }, { F (F_DSTBE) }, { F (F_OP_MODE) }, { F (F_OP_SIZE) }, { F (F_SRCBE) }, { F (F_OP_CLASS) }, { 0 } }
|
||||||
};
|
};
|
||||||
|
|
||||||
static const CGEN_IFMT ifmt_jeqile ATTRIBUTE_UNUSED = {
|
static const CGEN_IFMT ifmt_jeqile ATTRIBUTE_UNUSED = {
|
||||||
64, 64, 0xff, { { 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 } }
|
64, 64, 0xf0ff, { { 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 } }
|
||||||
};
|
};
|
||||||
|
|
||||||
static const CGEN_IFMT ifmt_jeqrle ATTRIBUTE_UNUSED = {
|
static const CGEN_IFMT ifmt_jeqrle ATTRIBUTE_UNUSED = {
|
||||||
64, 64, 0xff, { { 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 } }
|
64, 64, 0xffffffff000000ff, { { 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 } }
|
||||||
};
|
};
|
||||||
|
|
||||||
static const CGEN_IFMT ifmt_jeqibe ATTRIBUTE_UNUSED = {
|
static const CGEN_IFMT ifmt_jeqibe ATTRIBUTE_UNUSED = {
|
||||||
64, 64, 0xff, { { F (F_IMM32) }, { F (F_OFFSET16) }, { F (F_DSTBE) }, { F (F_OP_CODE) }, { F (F_SRCBE) }, { F (F_OP_SRC) }, { F (F_OP_CLASS) }, { 0 } }
|
64, 64, 0xfff, { { F (F_IMM32) }, { F (F_OFFSET16) }, { F (F_DSTBE) }, { F (F_OP_CODE) }, { F (F_SRCBE) }, { F (F_OP_SRC) }, { F (F_OP_CLASS) }, { 0 } }
|
||||||
};
|
};
|
||||||
|
|
||||||
static const CGEN_IFMT ifmt_jeqrbe ATTRIBUTE_UNUSED = {
|
static const CGEN_IFMT ifmt_jeqrbe ATTRIBUTE_UNUSED = {
|
||||||
64, 64, 0xff, { { F (F_IMM32) }, { F (F_OFFSET16) }, { F (F_DSTBE) }, { F (F_OP_CODE) }, { F (F_SRCBE) }, { F (F_OP_SRC) }, { F (F_OP_CLASS) }, { 0 } }
|
64, 64, 0xffffffff000000ff, { { F (F_IMM32) }, { F (F_OFFSET16) }, { F (F_DSTBE) }, { F (F_OP_CODE) }, { F (F_SRCBE) }, { F (F_OP_SRC) }, { F (F_OP_CLASS) }, { 0 } }
|
||||||
};
|
};
|
||||||
|
|
||||||
static const CGEN_IFMT ifmt_callle ATTRIBUTE_UNUSED = {
|
static const CGEN_IFMT ifmt_callle ATTRIBUTE_UNUSED = {
|
||||||
64, 64, 0xff, { { F (F_IMM32) }, { F (F_OFFSET16) }, { F (F_REGS) }, { F (F_OP_CODE) }, { F (F_OP_SRC) }, { F (F_OP_CLASS) }, { 0 } }
|
64, 64, 0xffff0fff, { { 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 } }
|
||||||
|
};
|
||||||
|
|
||||||
|
static const CGEN_IFMT ifmt_callbe ATTRIBUTE_UNUSED = {
|
||||||
|
64, 64, 0xfffff0ff, { { F (F_IMM32) }, { F (F_OFFSET16) }, { F (F_DSTBE) }, { F (F_OP_CODE) }, { F (F_SRCBE) }, { F (F_OP_SRC) }, { F (F_OP_CLASS) }, { 0 } }
|
||||||
};
|
};
|
||||||
|
|
||||||
static const CGEN_IFMT ifmt_ja ATTRIBUTE_UNUSED = {
|
static const CGEN_IFMT ifmt_ja ATTRIBUTE_UNUSED = {
|
||||||
64, 64, 0xff, { { F (F_IMM32) }, { F (F_OFFSET16) }, { F (F_REGS) }, { F (F_OP_CODE) }, { F (F_OP_SRC) }, { F (F_OP_CLASS) }, { 0 } }
|
64, 64, 0xffffffff0000ffff, { { F (F_IMM32) }, { F (F_OFFSET16) }, { F (F_REGS) }, { F (F_OP_CODE) }, { F (F_OP_SRC) }, { F (F_OP_CLASS) }, { 0 } }
|
||||||
};
|
};
|
||||||
|
|
||||||
static const CGEN_IFMT ifmt_exit ATTRIBUTE_UNUSED = {
|
static const CGEN_IFMT ifmt_exit ATTRIBUTE_UNUSED = {
|
||||||
64, 64, 0xff, { { F (F_IMM32) }, { F (F_OFFSET16) }, { F (F_REGS) }, { F (F_OP_CODE) }, { F (F_OP_SRC) }, { F (F_OP_CLASS) }, { 0 } }
|
64, 64, 0xffffffffffffffff, { { F (F_IMM32) }, { F (F_OFFSET16) }, { F (F_REGS) }, { F (F_OP_CODE) }, { F (F_OP_SRC) }, { F (F_OP_CLASS) }, { 0 } }
|
||||||
};
|
};
|
||||||
|
|
||||||
#undef F
|
#undef F
|
||||||
@ -1646,7 +1650,7 @@ static const CGEN_OPCODE bpf_cgen_insn_opcode_table[MAX_INSNS] =
|
|||||||
{
|
{
|
||||||
{ 0, 0, 0, 0 },
|
{ 0, 0, 0, 0 },
|
||||||
{ { MNEM, ' ', OP (DISP32), 0 } },
|
{ { MNEM, ' ', OP (DISP32), 0 } },
|
||||||
& ifmt_callle, { 0x85 }
|
& ifmt_callbe, { 0x85 }
|
||||||
},
|
},
|
||||||
/* call $dstle */
|
/* call $dstle */
|
||||||
{
|
{
|
||||||
|
@ -39,7 +39,7 @@ static void add_insn_to_hash_chain (CGEN_INSN_LIST *,
|
|||||||
static int
|
static int
|
||||||
count_decodable_bits (const CGEN_INSN *insn)
|
count_decodable_bits (const CGEN_INSN *insn)
|
||||||
{
|
{
|
||||||
unsigned mask = CGEN_INSN_BASE_MASK (insn);
|
CGEN_INSN_LGUINT mask = CGEN_INSN_BASE_MASK (insn);
|
||||||
#if GCC_VERSION >= 3004
|
#if GCC_VERSION >= 3004
|
||||||
return __builtin_popcount (mask);
|
return __builtin_popcount (mask);
|
||||||
#else
|
#else
|
||||||
|
Reference in New Issue
Block a user