From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Google-Smtp-Source: AH8x225DZqrJfpueF7tvuaAJ94mSWtLQHA/qbyrm7APWCywCdt4C+CZf/bgYgqsF86z1xn4XBSIO ARC-Seal: i=1; a=rsa-sha256; t=1516721589; cv=none; d=google.com; s=arc-20160816; b=bkxwG0VVfeTJGXGQtD/OaH43KGQe4/0xjKoU7U6pWdw8Z6hnIrd0NgndLZE3Uc4ULL sFzG8CnNeZ+J8KLlTFY+a8b0hrJyi0wTgawidqMJfVFDWusEFcqhOJY7PlAFpn6ffjbF y513qM/YZo/Ea0nSshCS4+cElvDdrMHTkv0lm0avRad5nNSUGa3V8SJHskwHIYmK2lGI gybaZ1U/Lt92Pl8ZHoLhSuOeDjXbLGS0gpuErhbMNwiZr1ToMumT7RlgKjWNUOXXfk4G hUlMMJmq3pLTFTyWJs0suRxoDM2szVR8siiJXWCbfov7TG6SfH6Lx6Wdw9hMBgBAuYHN diJA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-disposition:mime-version:references:subject:cc:to:from:date :user-agent:message-id:dkim-signature:arc-authentication-results; bh=NKV8MtJ6z50CabQzR3XO8SxG4J7v43BCAMOOB1d9n9o=; b=FUkaqaVs25nQ4wov0qx8ISIe0BnX2C+6jYFrMiketo8CWb7PZhyT1d+YE8bWilgDCK 9mQB3r2P1VXf2S2IvWHIX8ZF6UZiJjVDMTHcdRIfL1GeYZ7MJxj4L/BtEcfbI06ch+sp cf3kq/n5aBBCO+scIg/hhGUPVk4Gv/xGl0+WnMOwmcUOL50nuYHrxip8d1XUVQhimgM6 skuHWdzylfiH7l7iP+jtNTKQLCzr6ZMIjhe0/3kQTR2456emkSwuSKQZ3BFlyKlH7Vws T2jkOQZ8QdCj+lc/vzyF+1SupWQYXkQNHR/BDi/dOCGpagQTDSyADAdnSm8iYpaQqmrJ il3w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@infradead.org header.s=merlin.20170209 header.b=b4/dXeN+; spf=pass (google.com: best guess record for domain of peterz@infradead.org designates 205.233.59.134 as permitted sender) smtp.mailfrom=peterz@infradead.org Authentication-Results: mx.google.com; dkim=pass header.i=@infradead.org header.s=merlin.20170209 header.b=b4/dXeN+; spf=pass (google.com: best guess record for domain of peterz@infradead.org designates 205.233.59.134 as permitted sender) smtp.mailfrom=peterz@infradead.org Message-Id: <20180123152638.993261209@infradead.org> User-Agent: quilt/0.63-1 Date: Tue, 23 Jan 2018 16:25:56 +0100 From: Peter Zijlstra To: David Woodhouse , Thomas Gleixner , Josh Poimboeuf Cc: linux-kernel@vger.kernel.org, Dave Hansen , Ashok Raj , Tim Chen , Andy Lutomirski , Linus Torvalds , Greg KH , Andrea Arcangeli , Andi Kleen , Arjan Van De Ven , Dan Williams , Paolo Bonzini , Jun Nakajima , Asit Mallick , Jason Baron , Peter Zijlstra Subject: [PATCH 17/24] objtool: Introduce special_type References: <20180123152539.374360046@infradead.org> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Disposition: inline; filename=peterz-objtool-special-type.patch X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: =?utf-8?q?1590397857991588646?= X-GMAIL-MSGID: =?utf-8?q?1590397857991588646?= X-Mailing-List: linux-kernel@vger.kernel.org List-ID: Use an enum for the special_alt entries instead of a collection of booleans. Signed-off-by: Peter Zijlstra (Intel) --- tools/objtool/check.c | 14 +++++++++++--- tools/objtool/special.c | 14 +++++++------- tools/objtool/special.h | 10 ++++++++-- 3 files changed, 26 insertions(+), 12 deletions(-) --- a/tools/objtool/check.c +++ b/tools/objtool/check.c @@ -773,7 +773,7 @@ static int add_special_section_alts(stru continue; new_insn = NULL; - if (!special_alt->group || special_alt->new_len) { + if (special_alt->type != alternative || special_alt->new_len) { new_insn = find_insn(file, special_alt->new_sec, special_alt->new_off); if (!new_insn) { @@ -785,16 +785,24 @@ static int add_special_section_alts(stru } } - if (special_alt->group) { + switch (special_alt->type) { + case alternative: ret = handle_group_alt(file, special_alt, orig_insn, &new_insn); if (ret) goto out; - } else if (special_alt->jump_or_nop) { + break; + + case jump_label: ret = handle_jump_alt(file, special_alt, orig_insn, &new_insn); if (ret) goto out; + + break; + + default: + break; } alt = malloc(sizeof(*alt)); --- a/tools/objtool/special.c +++ b/tools/objtool/special.c @@ -49,7 +49,7 @@ struct special_entry { const char *sec; - bool group, jump_or_nop; + enum special_type type; unsigned char size, orig, new; unsigned char orig_len, new_len; /* group only */ }; @@ -57,7 +57,7 @@ struct special_entry { struct special_entry entries[] = { { .sec = ".altinstructions", - .group = true, + .type = alternative, .size = ALT_ENTRY_SIZE, .orig = ALT_ORIG_OFFSET, .orig_len = ALT_ORIG_LEN_OFFSET, @@ -66,13 +66,14 @@ struct special_entry entries[] = { }, { .sec = "__jump_table", - .jump_or_nop = true, + .type = jump_label, .size = JUMP_ENTRY_SIZE, .orig = JUMP_ORIG_OFFSET, .new = JUMP_NEW_OFFSET, }, { .sec = "__ex_table", + .type = exception, .size = EX_ENTRY_SIZE, .orig = EX_ORIG_OFFSET, .new = EX_NEW_OFFSET, @@ -91,10 +92,9 @@ static int get_alt_entry(struct elf *elf offset = idx * entry->size; data = sec->data->d_buf + offset; - alt->group = entry->group; - alt->jump_or_nop = entry->jump_or_nop; + alt->type = entry->type; - if (alt->group) { + if (alt->type == alternative) { unsigned short feature; unsigned char type; @@ -130,7 +130,7 @@ static int get_alt_entry(struct elf *elf alt->orig_sec = orig_rela->sym->sec; alt->orig_off = orig_rela->addend; - if (!entry->group || alt->new_len) { + if (entry->type != alternative || alt->new_len) { new_rela = find_rela_by_dest(sec, offset + entry->new); if (!new_rela) { WARN_FUNC("can't find new rela", --- a/tools/objtool/special.h +++ b/tools/objtool/special.h @@ -21,12 +21,18 @@ #include #include "elf.h" +enum special_type { + alternative, + jump_label, + exception, +}; + struct special_alt { struct list_head list; - bool group; + enum special_type type; + bool skip_orig; - bool jump_or_nop; bool static_cpu_has; struct section *orig_sec;