From patchwork Sun Jul 23 10:04:43 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Masahiro Yamada X-Patchwork-Id: 124446 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:9010:0:b0:3e4:2afc:c1 with SMTP id l16csp1191421vqg; Sun, 23 Jul 2023 03:24:23 -0700 (PDT) X-Google-Smtp-Source: APBJJlHux+MgcoP8VVCUbv08X2JZZDdY//a1Dn50g8suUu2dz+Baaxy8DBGQP3lj6m/VS81rdIQU X-Received: by 2002:a17:902:bf02:b0:1b8:92fc:7429 with SMTP id bi2-20020a170902bf0200b001b892fc7429mr7358581plb.53.1690107863393; Sun, 23 Jul 2023 03:24:23 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1690107863; cv=none; d=google.com; s=arc-20160816; b=NYbQXs4i4z80oni8Ssz+5EL/7ERBEaDd6Ban4RjfF1CSWcoSwNI/egDy592SoHfPe0 59ooDbD8tFdZ0n2FkZSv9YSb8kAHQS7KBMY6e4Aajsl07mUiACdnXca8JPFFPFQakg3c K96KEV6wCNDT+tMqGB1Zd7jc6MPGatb7+Dpv7InHz4Wzs/AMXYXuYjHcPyphgjUBo0tt jxcdOMU+Y1hZtDOBiLeKKBazcS3bY1cKMf6Lsq78nAQl+B0gBeVAZUai+rNUCp92Kt3y 8hnzg73U3abSlh023B9izQ8L41VHkztnVZiB6nC1KIE+7eLPCFRRVIL9O7OdU3xj4ycY 1wUA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from:dkim-signature; bh=rsclaKu6nalzc6kmZWZA6s/HBneKnC2ajcYYNPEa7jU=; fh=rliOZr6Fz5JmnSfKOt6v3ZHxXv/lQ1TnqU77+ZCO3og=; b=qlQ3RCTIE7tzy34RmKG4mpry0Yh2pjEz+HClBZkIsZZ58UdNc0RvBuJukNHixEom1X fbYtg5bUznKNTB01EKXa+zoGXISi5Cvx7nib/6hvVN0k4dgJR8bAMvw8oRn0HA+GHLDT 0j252fFPXLzU3c6vROk5MQvcBIp1V8UTfu5w8V2E0NjdpaXSe79PwIF58cpeWEytv1r8 ivgWgYZuE5+jv/n7VP2NLUXZ1HSGxDtNygJjxbbsxPqGaEaHUl+ExmOj+p5e94xeSKXp Nf7KyAlDOj8lhiN6ms8u0j46/2ak4kGJd377VsyDrtv+UMpxiPvaEEvhPOugLsd0QDzM qQrw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b="tTD+6JH/"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id n17-20020a170902e55100b001b86671b3f1si638510plf.190.2023.07.23.03.24.10; Sun, 23 Jul 2023 03:24:23 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b="tTD+6JH/"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229847AbjGWKEz (ORCPT + 99 others); Sun, 23 Jul 2023 06:04:55 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46444 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229551AbjGWKEy (ORCPT ); Sun, 23 Jul 2023 06:04:54 -0400 Received: from dfw.source.kernel.org (dfw.source.kernel.org [IPv6:2604:1380:4641:c500::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id BDB7D10FD; Sun, 23 Jul 2023 03:04:52 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id 5423C60C6F; Sun, 23 Jul 2023 10:04:52 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 7FBBEC433CA; Sun, 23 Jul 2023 10:04:50 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1690106691; bh=BXNbfiZP5SgJnQHebcdaUHLbFi7ieRXqurAcsahENjA=; h=From:To:Cc:Subject:Date:From; b=tTD+6JH/7ul6Ifwh50RkuI1LvXkaai9hDPASKsNgEc6BkY/Hs+Q/DTk0PBSjKNNJe SG2iensEe2SfhWlHZXjw8mkdwcFVPbBT5qeLvW2OyRdCV3/jZ++Hm3tVtgdhzJ+Fa7 bbcygyLt3+OsJgEooZPYyH3QlXZ/qIcUTcb9lO6nsILJxk81b/rOsOgg48E1i8jOR7 FohZbyWahj4dp8Q5ghXBLHkUvtHCf4BFZmmvu3PgXQ6fCMRFrPmDW1PJOl3FScsBpO 1eQKMG6n/iThmRLwbmWSavQtTONXscpucNIKVY6xLDxMHjLBo0ekbSVKmdopFq15B7 7YL/kAHJ2LfyA== From: Masahiro Yamada To: linux-kbuild@vger.kernel.org Cc: linux-kernel@vger.kernel.org, Masahiro Yamada , Nathan Chancellor , Nick Desaulniers , Nicolas Schier Subject: [PATCH 1/4] modpost: change return type of addend_*_rel() Date: Sun, 23 Jul 2023 19:04:43 +0900 Message-Id: <20230723100446.3062358-1-masahiroy@kernel.org> X-Mailer: git-send-email 2.39.2 MIME-Version: 1.0 X-Spam-Status: No, score=-4.4 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_MED, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1772206542869155673 X-GMAIL-MSGID: 1772206542869155673 Now that none of addend_*_rel() returns a meaningful value (the return value is always 0), change all of them to return the value of r_addend. Signed-off-by: Masahiro Yamada --- scripts/mod/modpost.c | 63 +++++++++++++++++-------------------------- 1 file changed, 24 insertions(+), 39 deletions(-) diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c index 8227641dd087..a8e85b7cc0da 100644 --- a/scripts/mod/modpost.c +++ b/scripts/mod/modpost.c @@ -1257,21 +1257,18 @@ static void check_section_mismatch(struct module *mod, struct elf_info *elf, tosec, taddr); } -static int addend_386_rel(uint32_t *location, Elf_Rela *r) +static Elf_Addr addend_386_rel(uint32_t *location, Elf_Rela *r) { unsigned int r_typ = ELF_R_TYPE(r->r_info); switch (r_typ) { case R_386_32: - r->r_addend = TO_NATIVE(*location); - break; + return TO_NATIVE(*location); case R_386_PC32: - r->r_addend = TO_NATIVE(*location) + 4; - break; - default: - r->r_addend = (Elf_Addr)(-1); + return TO_NATIVE(*location) + 4; } - return 0; + + return (Elf_Addr)(-1); } #ifndef R_ARM_CALL @@ -1315,7 +1312,7 @@ static int32_t sign_extend32(int32_t value, int index) return (int32_t)(value << shift) >> shift; } -static int addend_arm_rel(void *loc, Elf_Sym *sym, Elf_Rela *r) +static Elf_Addr addend_arm_rel(void *loc, Elf_Sym *sym, Elf_Rela *r) { unsigned int r_typ = ELF_R_TYPE(r->r_info); uint32_t inst, upper, lower, sign, j1, j2; @@ -1325,22 +1322,19 @@ static int addend_arm_rel(void *loc, Elf_Sym *sym, Elf_Rela *r) case R_ARM_ABS32: case R_ARM_REL32: inst = TO_NATIVE(*(uint32_t *)loc); - r->r_addend = inst + sym->st_value; - break; + return inst + sym->st_value; case R_ARM_MOVW_ABS_NC: case R_ARM_MOVT_ABS: inst = TO_NATIVE(*(uint32_t *)loc); offset = sign_extend32(((inst & 0xf0000) >> 4) | (inst & 0xfff), 15); - r->r_addend = offset + sym->st_value; - break; + return offset + sym->st_value; case R_ARM_PC24: case R_ARM_CALL: case R_ARM_JUMP24: inst = TO_NATIVE(*(uint32_t *)loc); offset = sign_extend32((inst & 0x00ffffff) << 2, 25); - r->r_addend = offset + sym->st_value + 8; - break; + return offset + sym->st_value + 8; case R_ARM_THM_MOVW_ABS_NC: case R_ARM_THM_MOVT_ABS: upper = TO_NATIVE(*(uint16_t *)loc); @@ -1350,8 +1344,7 @@ static int addend_arm_rel(void *loc, Elf_Sym *sym, Elf_Rela *r) ((lower & 0x7000) >> 4) | (lower & 0x00ff), 15); - r->r_addend = offset + sym->st_value; - break; + return offset + sym->st_value; case R_ARM_THM_JUMP19: /* * Encoding T3: @@ -1372,8 +1365,7 @@ static int addend_arm_rel(void *loc, Elf_Sym *sym, Elf_Rela *r) ((upper & 0x03f) << 12) | ((lower & 0x07ff) << 1), 20); - r->r_addend = offset + sym->st_value + 4; - break; + return offset + sym->st_value + 4; case R_ARM_THM_CALL: case R_ARM_THM_JUMP24: /* @@ -1399,15 +1391,13 @@ static int addend_arm_rel(void *loc, Elf_Sym *sym, Elf_Rela *r) ((upper & 0x03ff) << 12) | ((lower & 0x07ff) << 1), 24); - r->r_addend = offset + sym->st_value + 4; - break; - default: - r->r_addend = (Elf_Addr)(-1); + return offset + sym->st_value + 4; } - return 0; + + return (Elf_Addr)(-1); } -static int addend_mips_rel(uint32_t *location, Elf_Rela *r) +static Elf_Addr addend_mips_rel(uint32_t *location, Elf_Rela *r) { unsigned int r_typ = ELF_R_TYPE(r->r_info); uint32_t inst; @@ -1415,18 +1405,13 @@ static int addend_mips_rel(uint32_t *location, Elf_Rela *r) inst = TO_NATIVE(*location); switch (r_typ) { case R_MIPS_LO16: - r->r_addend = inst & 0xffff; - break; + return inst & 0xffff; case R_MIPS_26: - r->r_addend = (inst & 0x03ffffff) << 2; - break; + return (inst & 0x03ffffff) << 2; case R_MIPS_32: - r->r_addend = inst; - break; - default: - r->r_addend = (Elf_Addr)(-1); + return inst; } - return 0; + return (Elf_Addr)(-1); } #ifndef EM_RISCV @@ -1513,6 +1498,7 @@ static void section_rel(struct module *mod, struct elf_info *elf, for (rel = start; rel < stop; rel++) { Elf_Sym *tsym; + Elf_Addr taddr = 0; void *loc; r.r_offset = TO_NATIVE(rel->r_offset); @@ -1531,27 +1517,26 @@ static void section_rel(struct module *mod, struct elf_info *elf, r.r_info = TO_NATIVE(rel->r_info); r_sym = ELF_R_SYM(r.r_info); #endif - r.r_addend = 0; loc = sym_get_data_by_offset(elf, fsecndx, r.r_offset); tsym = elf->symtab_start + r_sym; switch (elf->hdr->e_machine) { case EM_386: - addend_386_rel(loc, &r); + taddr = addend_386_rel(loc, &r); break; case EM_ARM: - addend_arm_rel(loc, tsym, &r); + taddr = addend_arm_rel(loc, tsym, &r); break; case EM_MIPS: - addend_mips_rel(loc, &r); + taddr = addend_mips_rel(loc, &r); break; default: fatal("Please add code to calculate addend for this architecture\n"); } check_section_mismatch(mod, elf, tsym, - fsecndx, fromsec, r.r_offset, r.r_addend); + fsecndx, fromsec, r.r_offset, taddr); } } From patchwork Sun Jul 23 10:04:44 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Masahiro Yamada X-Patchwork-Id: 124447 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:9010:0:b0:3e4:2afc:c1 with SMTP id l16csp1191431vqg; Sun, 23 Jul 2023 03:24:25 -0700 (PDT) X-Google-Smtp-Source: APBJJlGVUdjGs24HpVd7KCpjD4yl04B1j4hLrjNtXGvJepY8JW6KML7Lf9FzNmCDm+yE0AVk9GF8 X-Received: by 2002:a05:6a20:4321:b0:138:1a36:4eab with SMTP id h33-20020a056a20432100b001381a364eabmr10197139pzk.3.1690107864666; Sun, 23 Jul 2023 03:24:24 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1690107864; cv=none; d=google.com; s=arc-20160816; b=nkP3PsZgJNgOS3Nzo7EX+5Rafs+O2dG180RoR6MBMo+VfPic0R04NwaONm7Wd2tVaE AeCDrXw617Fos+AMWmrnsIlHt7Q57g15MjRW8ii3+tg6/2GeKZpwQpH0hgh631zs9NWU onb7OGxvILcqASQDWdr2BYXnpeYdsuEAFqYhW1RTYtzH4Vb4sIm361ZDG+0wrKSgDUGg tmoSvkqLJWUFxT9K8cTsBT20oTtxORpAcWeha7//CLIUfIZJ/PUHYe6AjfeOhO/pBg6J yk0r12FsxFKBClDLLDaEXhbjUP74laZoLshuNygKR1MEK7Us2GCOZwI8Erpx15Rgvxcy mGVg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=hivrJYLf8YZhHxb6McMw0TP1ctO/9GvqkzJeilJe5zE=; fh=rliOZr6Fz5JmnSfKOt6v3ZHxXv/lQ1TnqU77+ZCO3og=; b=wEpaG3eyeOz+LmoUxdxHKoujuMfbTuVwpoS7M5CCS5jBCw3Yh5F0wf7qPaozScwEWt xt499nPPaUvUMjI9X1V+WV35BpblHCT+P8X5GFX/WwP7TPw9WRw2hszlLvuDHq5gsJK6 3nw4ASMLKPBcTzSJJTVuojLhls9mFssZo40hbDSmaJ4pQ2O4nO6cpfoWIvxqovCMNcQJ 6RU8TPhahA2o1nvR1pSviJkF05nsIO9aCAqIy2QuCA1H+i27p9UXOW65TKAIzV/WliGD 2uoj1nzpQg8fWjduIOJtUo719vqzbymJkRLjgYbd2ZtYYQmy6+r7jpYBw3f17xFr0V8d USkA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b="pqJJX/7b"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id b9-20020a63d809000000b0055391572218si6268584pgh.26.2023.07.23.03.24.12; Sun, 23 Jul 2023 03:24:24 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b="pqJJX/7b"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229941AbjGWKE4 (ORCPT + 99 others); Sun, 23 Jul 2023 06:04:56 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46450 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229836AbjGWKEz (ORCPT ); Sun, 23 Jul 2023 06:04:55 -0400 Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 3F8991700; Sun, 23 Jul 2023 03:04:54 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id D1C7160C4D; Sun, 23 Jul 2023 10:04:53 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 293D2C433C9; Sun, 23 Jul 2023 10:04:52 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1690106693; bh=UiQB6Q+u02aPXjGF4YJytujOiAQWjDqnNFi9tEQ8cUk=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=pqJJX/7bg7b0E4wiPkh/N95OF9mwwuRN1Wa6aS9YHWFE8pQpawXz7MHOX+FbsmZ/w leVX55FGVI4n/uhpOU3uE59IGFNYp1Bmt3pHwyz/tcYUinwiOiU7Vl8XHvWG84Ib3F PvNxQRzjh1PPZxw/ib9LyEBkjdDj+SmK1R/X4uPDyAi3JPTaeZYpO4kgVPX78PO8Aq rQJBH85M4UuDLANTMcMPTnpOBdTRujVoQqDamlS2Eghru2gS357SWZIdEwQpkxgDq0 XQExhiBeFwdjjUtbXa/Va5+sYIWva1SblPyam0wdSzi3SqqEVsT+tPlKzJ7oRKs3Zp HBhvOfv5BSPGA== From: Masahiro Yamada To: linux-kbuild@vger.kernel.org Cc: linux-kernel@vger.kernel.org, Masahiro Yamada , Nathan Chancellor , Nick Desaulniers , Nicolas Schier Subject: [PATCH 2/4] modpost: pass r_type to addend_*_rel() Date: Sun, 23 Jul 2023 19:04:44 +0900 Message-Id: <20230723100446.3062358-2-masahiroy@kernel.org> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230723100446.3062358-1-masahiroy@kernel.org> References: <20230723100446.3062358-1-masahiroy@kernel.org> MIME-Version: 1.0 X-Spam-Status: No, score=-7.1 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_HI, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1772206544414637759 X-GMAIL-MSGID: 1772206544414637759 All of addend_*_rel() need the Elf_Rela pointer just for calculating ELF_R_TYPE(r->r_info). You can do it on the caller to de-duplicate the code. Signed-off-by: Masahiro Yamada --- scripts/mod/modpost.c | 24 +++++++++++------------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c index a8e85b7cc0da..570a6cb6dd00 100644 --- a/scripts/mod/modpost.c +++ b/scripts/mod/modpost.c @@ -1257,11 +1257,9 @@ static void check_section_mismatch(struct module *mod, struct elf_info *elf, tosec, taddr); } -static Elf_Addr addend_386_rel(uint32_t *location, Elf_Rela *r) +static Elf_Addr addend_386_rel(uint32_t *location, unsigned int r_type) { - unsigned int r_typ = ELF_R_TYPE(r->r_info); - - switch (r_typ) { + switch (r_type) { case R_386_32: return TO_NATIVE(*location); case R_386_PC32: @@ -1312,13 +1310,12 @@ static int32_t sign_extend32(int32_t value, int index) return (int32_t)(value << shift) >> shift; } -static Elf_Addr addend_arm_rel(void *loc, Elf_Sym *sym, Elf_Rela *r) +static Elf_Addr addend_arm_rel(void *loc, Elf_Sym *sym, unsigned int r_type) { - unsigned int r_typ = ELF_R_TYPE(r->r_info); uint32_t inst, upper, lower, sign, j1, j2; int32_t offset; - switch (r_typ) { + switch (r_type) { case R_ARM_ABS32: case R_ARM_REL32: inst = TO_NATIVE(*(uint32_t *)loc); @@ -1397,13 +1394,12 @@ static Elf_Addr addend_arm_rel(void *loc, Elf_Sym *sym, Elf_Rela *r) return (Elf_Addr)(-1); } -static Elf_Addr addend_mips_rel(uint32_t *location, Elf_Rela *r) +static Elf_Addr addend_mips_rel(uint32_t *location, unsigned int r_type) { - unsigned int r_typ = ELF_R_TYPE(r->r_info); uint32_t inst; inst = TO_NATIVE(*location); - switch (r_typ) { + switch (r_type) { case R_MIPS_LO16: return inst & 0xffff; case R_MIPS_26: @@ -1500,6 +1496,7 @@ static void section_rel(struct module *mod, struct elf_info *elf, Elf_Sym *tsym; Elf_Addr taddr = 0; void *loc; + unsigned int r_type; r.r_offset = TO_NATIVE(rel->r_offset); #if KERNEL_ELFCLASS == ELFCLASS64 @@ -1520,16 +1517,17 @@ static void section_rel(struct module *mod, struct elf_info *elf, loc = sym_get_data_by_offset(elf, fsecndx, r.r_offset); tsym = elf->symtab_start + r_sym; + r_type = ELF_R_TYPE(r.r_info); switch (elf->hdr->e_machine) { case EM_386: - taddr = addend_386_rel(loc, &r); + taddr = addend_386_rel(loc, r_type); break; case EM_ARM: - taddr = addend_arm_rel(loc, tsym, &r); + taddr = addend_arm_rel(loc, tsym, r_type); break; case EM_MIPS: - taddr = addend_mips_rel(loc, &r); + taddr = addend_mips_rel(loc, r_type); break; default: fatal("Please add code to calculate addend for this architecture\n"); From patchwork Sun Jul 23 10:04:45 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Masahiro Yamada X-Patchwork-Id: 124445 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:9010:0:b0:3e4:2afc:c1 with SMTP id l16csp1191285vqg; Sun, 23 Jul 2023 03:24:05 -0700 (PDT) X-Google-Smtp-Source: APBJJlGfDPT9BPdsNWkeyEnDOl1RVge2TvVgYqcRL4X6yT/PmG+yJQ4wiTKIQcAdPzpAAopx9mcT X-Received: by 2002:a9d:6c84:0:b0:6b7:539f:d1b0 with SMTP id c4-20020a9d6c84000000b006b7539fd1b0mr5993206otr.31.1690107844945; Sun, 23 Jul 2023 03:24:04 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1690107844; cv=none; d=google.com; s=arc-20160816; b=fXkkPSLsUC4S6z6e3FEj2/ZWvn44qUuxgT3K+qTGRkGF3M+hmGp3SVbOLSHcZCYVbb rdwRw/X436qf0RyhnmN1QY+bqXJR/XnnZQPZiGZsslOvVtAakcA8YIHreyW450GDOrDx jk/0sIdbGJilWL3IpxT5lUA/1uTaA79xFRyf7dfFcFy5FDnHXVguxPQMvaDLl1QJXGjQ S9fXSUSOXhdVP/wi6Oj4h+FJtlXMHqridYczsQBtFp8wvDUQnjHlOdTQfIAN2xYrxqnH ba3HGsxsq/v/DD2aZj7ceSFBra3tGTaxgasuSgPFmD4e4XAulW52RFBSoSaEjz1fIMIv aa3g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=OSliV05rNNOBRXQRqo7QI5IIUgMc44iuYngLazsv3FQ=; fh=rliOZr6Fz5JmnSfKOt6v3ZHxXv/lQ1TnqU77+ZCO3og=; b=YioD+XypW03hSWx9GMSY1sbhsdcCrWEeYy3ubsmPKoNqDFw0h3KM+bAm9jjUEApyPS YG4PMZ7FWf1Pv5KbWaIX4hOPev1TLaQFX2S37NlIS8ZMuG+BJFDUUd4FTzQP947+/xhh MUklUYWJM3pUgElFY+4YhKxWK1lli/uWC4Op+qG9iJfZllG8sKAsb8oDAabxtG3+lcda oYYV/EI6S1Z2ZKIyZZmOQEZ+mWKXCNoMEiaMRU5h45qG1+S1salLm0mDBBXT7P4s+wDf 0lSTYGSc/9pylhZhKg4vati11nxCL9KFcgB4ow1RgWltPCqnBsBMVa589AadWMn+p+GO IVxA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=p9Oiizfi; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id o11-20020a170902d4cb00b001b69ede5b79si7238585plg.470.2023.07.23.03.23.51; Sun, 23 Jul 2023 03:24:04 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=p9Oiizfi; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229973AbjGWKE7 (ORCPT + 99 others); Sun, 23 Jul 2023 06:04:59 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46456 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229936AbjGWKE4 (ORCPT ); Sun, 23 Jul 2023 06:04:56 -0400 Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id CBF1910FD; Sun, 23 Jul 2023 03:04:55 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id 694EC60C83; Sun, 23 Jul 2023 10:04:55 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id B0EE0C433CA; Sun, 23 Jul 2023 10:04:53 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1690106694; bh=0d38BDz13wpDqB6CjBtTocdL2VBkxIJFEtETsaCSyQ8=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=p9OiizfiJV/r6359v+TPHiE7iOS2q3RulsDyneJfh5yjUuMd4myurP1bmyJQmkZnH 1G4SaBxeegBNL1ahPctN3YvRhKfGVuR8r+zMhLWouKKEujMHvHzCLcrZVXtub2pwie XLKU9xKz0OfeyeMAqkzmLdbvZFortLX+On/4h6JvMOrYPcAez5RPnuORhcHsr2iUo7 jo5PX3f2ibJ7RNgWcttVGLWRIwJ8dIhr/JZJ1tELaH8Vx5K8m06sNh2UQC1oWdK7yF fsQ4d7AOWdWdnPYI6mT0+5rGZMmaTl2v9yB2fhUcp0SS28dOhKg/jUY1YXZSej6yRD TAG91rpf3M5Ug== From: Masahiro Yamada To: linux-kbuild@vger.kernel.org Cc: linux-kernel@vger.kernel.org, Masahiro Yamada , Nathan Chancellor , Nick Desaulniers , Nicolas Schier Subject: [PATCH 3/4] modpost: clean up MIPS64 little endian relocation code Date: Sun, 23 Jul 2023 19:04:45 +0900 Message-Id: <20230723100446.3062358-3-masahiroy@kernel.org> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230723100446.3062358-1-masahiroy@kernel.org> References: <20230723100446.3062358-1-masahiroy@kernel.org> MIME-Version: 1.0 X-Spam-Status: No, score=-7.1 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_HI, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1772206523404731864 X-GMAIL-MSGID: 1772206523404731864 MIPS64 little endian target has an odd encoding of r_info. This commit makes the special handling less ugly. It is still ugly, but #if conditionals will go away, at least. Signed-off-by: Masahiro Yamada --- scripts/mod/modpost.c | 76 ++++++++++++++++++++++++------------------- scripts/mod/modpost.h | 22 ------------- 2 files changed, 43 insertions(+), 55 deletions(-) diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c index 570a6cb6dd00..ca04b87c1679 100644 --- a/scripts/mod/modpost.c +++ b/scripts/mod/modpost.c @@ -1426,6 +1426,41 @@ static Elf_Addr addend_mips_rel(uint32_t *location, unsigned int r_type) #define R_LARCH_SUB32 55 #endif +static void get_rel_type_and_sym(struct elf_info *elf, uint64_t r_info, + unsigned int *r_type, unsigned int *r_sym) +{ + typedef struct { + Elf64_Word r_sym; /* Symbol index */ + unsigned char r_ssym; /* Special symbol for 2nd relocation */ + unsigned char r_type3; /* 3rd relocation type */ + unsigned char r_type2; /* 2nd relocation type */ + unsigned char r_type; /* 1st relocation type */ + } Elf64_Mips_R_Info; + + bool is_64bit = (elf->hdr->e_ident[EI_CLASS] == ELFCLASS64); + + if (elf->hdr->e_machine == EM_MIPS && is_64bit) { + Elf64_Mips_R_Info *mips64_r_info = (void *)&r_info; + + *r_type = mips64_r_info->r_type; + *r_sym = TO_NATIVE(mips64_r_info->r_sym); + return; + } + + if (is_64bit) { + Elf64_Xword r_info64 = r_info; + + r_info = TO_NATIVE(r_info64); + } else { + Elf32_Word r_info32 = r_info; + + r_info = TO_NATIVE(r_info32); + } + + *r_type = ELF_R_TYPE(r_info); + *r_sym = ELF_R_SYM(r_info); +} + static void section_rela(struct module *mod, struct elf_info *elf, Elf_Shdr *sechdr) { @@ -1442,32 +1477,21 @@ static void section_rela(struct module *mod, struct elf_info *elf, return; for (rela = start; rela < stop; rela++) { + unsigned int r_type; + r.r_offset = TO_NATIVE(rela->r_offset); -#if KERNEL_ELFCLASS == ELFCLASS64 - if (elf->hdr->e_machine == EM_MIPS) { - unsigned int r_typ; - r_sym = ELF64_MIPS_R_SYM(rela->r_info); - r_sym = TO_NATIVE(r_sym); - r_typ = ELF64_MIPS_R_TYPE(rela->r_info); - r.r_info = ELF64_R_INFO(r_sym, r_typ); - } else { - r.r_info = TO_NATIVE(rela->r_info); - r_sym = ELF_R_SYM(r.r_info); - } -#else - r.r_info = TO_NATIVE(rela->r_info); - r_sym = ELF_R_SYM(r.r_info); -#endif + get_rel_type_and_sym(elf, rela->r_info, &r_type, &r_sym); + r.r_addend = TO_NATIVE(rela->r_addend); switch (elf->hdr->e_machine) { case EM_RISCV: if (!strcmp("__ex_table", fromsec) && - ELF_R_TYPE(r.r_info) == R_RISCV_SUB32) + r_type == R_RISCV_SUB32) continue; break; case EM_LOONGARCH: if (!strcmp("__ex_table", fromsec) && - ELF_R_TYPE(r.r_info) == R_LARCH_SUB32) + r_type == R_LARCH_SUB32) continue; break; } @@ -1499,25 +1523,11 @@ static void section_rel(struct module *mod, struct elf_info *elf, unsigned int r_type; r.r_offset = TO_NATIVE(rel->r_offset); -#if KERNEL_ELFCLASS == ELFCLASS64 - if (elf->hdr->e_machine == EM_MIPS) { - unsigned int r_typ; - r_sym = ELF64_MIPS_R_SYM(rel->r_info); - r_sym = TO_NATIVE(r_sym); - r_typ = ELF64_MIPS_R_TYPE(rel->r_info); - r.r_info = ELF64_R_INFO(r_sym, r_typ); - } else { - r.r_info = TO_NATIVE(rel->r_info); - r_sym = ELF_R_SYM(r.r_info); - } -#else - r.r_info = TO_NATIVE(rel->r_info); - r_sym = ELF_R_SYM(r.r_info); -#endif + + get_rel_type_and_sym(elf, rel->r_info, &r_type, &r_sym); loc = sym_get_data_by_offset(elf, fsecndx, r.r_offset); tsym = elf->symtab_start + r_sym; - r_type = ELF_R_TYPE(r.r_info); switch (elf->hdr->e_machine) { case EM_386: diff --git a/scripts/mod/modpost.h b/scripts/mod/modpost.h index dfdb9484e325..5f94c2c9f2d9 100644 --- a/scripts/mod/modpost.h +++ b/scripts/mod/modpost.h @@ -50,28 +50,6 @@ #define ELF_R_TYPE ELF64_R_TYPE #endif -/* The 64-bit MIPS ELF ABI uses an unusual reloc format. */ -typedef struct -{ - Elf32_Word r_sym; /* Symbol index */ - unsigned char r_ssym; /* Special symbol for 2nd relocation */ - unsigned char r_type3; /* 3rd relocation type */ - unsigned char r_type2; /* 2nd relocation type */ - unsigned char r_type1; /* 1st relocation type */ -} _Elf64_Mips_R_Info; - -typedef union -{ - Elf64_Xword r_info_number; - _Elf64_Mips_R_Info r_info_fields; -} _Elf64_Mips_R_Info_union; - -#define ELF64_MIPS_R_SYM(i) \ - ((__extension__ (_Elf64_Mips_R_Info_union)(i)).r_info_fields.r_sym) - -#define ELF64_MIPS_R_TYPE(i) \ - ((__extension__ (_Elf64_Mips_R_Info_union)(i)).r_info_fields.r_type1) - #if KERNEL_ELFDATA != HOST_ELFDATA static inline void __endian(const void *src, void *dest, unsigned int size) From patchwork Sun Jul 23 10:04:46 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Masahiro Yamada X-Patchwork-Id: 124444 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:9010:0:b0:3e4:2afc:c1 with SMTP id l16csp1190344vqg; Sun, 23 Jul 2023 03:20:27 -0700 (PDT) X-Google-Smtp-Source: APBJJlHq3oYnrs0IfuoeVHCq4mIq4T68gRgIYVqVbYn5BTWhdNquTn96lQW7zca53zxej7c5Y9Zm X-Received: by 2002:a05:6830:1103:b0:6af:95f9:7adc with SMTP id w3-20020a056830110300b006af95f97adcmr5261244otq.14.1690107627304; Sun, 23 Jul 2023 03:20:27 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1690107627; cv=none; d=google.com; s=arc-20160816; b=t+yOEuEoqI/XCHep2MVb4RYgW5bfVgtD4zeegg6C613P7857ahrk0q/nUqU5Y/qElk 5L3uGg+XMKM7II8Bbd5ogoxJM3c4T2WTONvmgnIhi+b+Y/PwKXZFz7z8Vl3CEIXFEZc1 kzYw4C40eP4gd2BYvL6BgCstwfL58QBK/jsR0fi40gdNuaxCTZZILM9N/lsdxYMmZfsI 0z4IiArPKTMCza/ZE9cu9EhquOkJaZ7egUg5l9AHg2htl+PhWn17a1Z2xYR23BQoZv8B o2687BiNN1M6SzN3PY3Uy9KMyI6oBS+iyj/Ncyb9Ta3pyLjhCRHe9Os5VH12hANTXmOd yp8g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=iqYHmfni2UvzcM+Y4K/g9xuVFXwCsz1IIULy8F6aqKY=; fh=rliOZr6Fz5JmnSfKOt6v3ZHxXv/lQ1TnqU77+ZCO3og=; b=XM74ij/Tly9Uxub5hrIZlmCZ4mbSce4l1B8cVVdeISBbgQIrZWjDNcJJ+vuA0CDPJ0 ZP4w531Z6F7K2ncw+xa9Erky6L+rtGGGGtMBgo1gpM2b4o6eA7SM1mDDqLVBRD2MUYa9 nqnU1J9XFfEq3OSFNPyeHf1EjdsQmyamJArhAEBLvJf2eTTwNNakMKAuU+2Wg5sPEN/3 3x/I7oKlKmqOlSVAcwobSDJvaWg2Gta2gsLMcgwZapRL1KQZEUJy5H5Fj1SyEwiW0w8E 8fbIDcdayZeU7Jk9n1utnJ4ym9xC2XvuUpZpOdSAy4dKm9K7WHrJQFkjfyK6iZMr2Kpv +R5Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=qPjKNyaZ; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id o12-20020a655bcc000000b0055c881a2c18si6617914pgr.284.2023.07.23.03.20.14; Sun, 23 Jul 2023 03:20:27 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=qPjKNyaZ; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229991AbjGWKFE (ORCPT + 99 others); Sun, 23 Jul 2023 06:05:04 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46468 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229962AbjGWKE6 (ORCPT ); Sun, 23 Jul 2023 06:04:58 -0400 Received: from dfw.source.kernel.org (dfw.source.kernel.org [IPv6:2604:1380:4641:c500::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 5E4D710FD; Sun, 23 Jul 2023 03:04:57 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id E778C60C85; Sun, 23 Jul 2023 10:04:56 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 3CB3EC433C8; Sun, 23 Jul 2023 10:04:55 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1690106696; bh=mkPBv8kLdnRfYxcYlj3UPW+Mclfkhj7WW4z0JfDd0ww=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=qPjKNyaZ4XAjt58yoGipfGQpvEDbZ654wQHRPEBcP2uzoRZRnXTOhGAVAP3iCDd69 Jaatzn89i/fiA6lHNym3WV7lYlOiuQrwGKlp23qI6KaKm82qF9FljqStOLXo5LPvrL hfyuXSgfsiCnO1B/IUSll627bcEpj9pbe8AxZ9h4yVx8uz1eOaUOVeUNCTF38R1wIo JMLJGtbOaGwzWhYQmkheFlLf8dCkZ0XLRx4/KnZvKhf2oxVsXhSMpf9//JOKpuRO3T /2vlkdtsWnYoKAcEEUyJ7Sa71k3C0XvOaigLo70h7dcZ7KyJeSOdFUr/uAQVz3Br5G 3lcaCyhu9wXbQ== From: Masahiro Yamada To: linux-kbuild@vger.kernel.org Cc: linux-kernel@vger.kernel.org, Masahiro Yamada , Nathan Chancellor , Nick Desaulniers , Nicolas Schier Subject: [PATCH 4/4] modpost: remove ElF_Rela variables from for-loop in section_rel(a) Date: Sun, 23 Jul 2023 19:04:46 +0900 Message-Id: <20230723100446.3062358-4-masahiroy@kernel.org> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230723100446.3062358-1-masahiroy@kernel.org> References: <20230723100446.3062358-1-masahiroy@kernel.org> MIME-Version: 1.0 X-Spam-Status: No, score=-4.4 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_MED, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1772206295552012271 X-GMAIL-MSGID: 1772206295552012271 Remove the Elf_Rela variables used in the for-loop in section_rel(). This makes the code consistent; section_rel() only uses Elf_Rel, section_rela() only uses Elf_Rela. Signed-off-by: Masahiro Yamada --- scripts/mod/modpost.c | 25 +++++++++++-------------- 1 file changed, 11 insertions(+), 14 deletions(-) diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c index ca04b87c1679..9761f9d0eec0 100644 --- a/scripts/mod/modpost.c +++ b/scripts/mod/modpost.c @@ -1465,8 +1465,6 @@ static void section_rela(struct module *mod, struct elf_info *elf, Elf_Shdr *sechdr) { Elf_Rela *rela; - Elf_Rela r; - unsigned int r_sym; unsigned int fsecndx = sechdr->sh_info; const char *fromsec = sec_name(elf, fsecndx); Elf_Rela *start = (void *)elf->hdr + sechdr->sh_offset; @@ -1477,12 +1475,14 @@ static void section_rela(struct module *mod, struct elf_info *elf, return; for (rela = start; rela < stop; rela++) { - unsigned int r_type; + Elf_Addr taddr, r_offset; + unsigned int r_type, r_sym; - r.r_offset = TO_NATIVE(rela->r_offset); + r_offset = TO_NATIVE(rela->r_offset); get_rel_type_and_sym(elf, rela->r_info, &r_type, &r_sym); - r.r_addend = TO_NATIVE(rela->r_addend); + taddr = TO_NATIVE(rela->r_addend); + switch (elf->hdr->e_machine) { case EM_RISCV: if (!strcmp("__ex_table", fromsec) && @@ -1497,7 +1497,7 @@ static void section_rela(struct module *mod, struct elf_info *elf, } check_section_mismatch(mod, elf, elf->symtab_start + r_sym, - fsecndx, fromsec, r.r_offset, r.r_addend); + fsecndx, fromsec, r_offset, taddr); } } @@ -1505,8 +1505,6 @@ static void section_rel(struct module *mod, struct elf_info *elf, Elf_Shdr *sechdr) { Elf_Rel *rel; - Elf_Rela r; - unsigned int r_sym; unsigned int fsecndx = sechdr->sh_info; const char *fromsec = sec_name(elf, fsecndx); Elf_Rel *start = (void *)elf->hdr + sechdr->sh_offset; @@ -1518,15 +1516,14 @@ static void section_rel(struct module *mod, struct elf_info *elf, for (rel = start; rel < stop; rel++) { Elf_Sym *tsym; - Elf_Addr taddr = 0; + Elf_Addr taddr = 0, r_offset; + unsigned int r_type, r_sym; void *loc; - unsigned int r_type; - - r.r_offset = TO_NATIVE(rel->r_offset); + r_offset = TO_NATIVE(rel->r_offset); get_rel_type_and_sym(elf, rel->r_info, &r_type, &r_sym); - loc = sym_get_data_by_offset(elf, fsecndx, r.r_offset); + loc = sym_get_data_by_offset(elf, fsecndx, r_offset); tsym = elf->symtab_start + r_sym; switch (elf->hdr->e_machine) { @@ -1544,7 +1541,7 @@ static void section_rel(struct module *mod, struct elf_info *elf, } check_section_mismatch(mod, elf, tsym, - fsecndx, fromsec, r.r_offset, taddr); + fsecndx, fromsec, r_offset, taddr); } }