From patchwork Fri Oct 28 13:43:49 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Shahab Vahedi X-Patchwork-Id: 59580 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 35F04384D149 for ; Fri, 28 Oct 2022 13:44:11 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 35F04384D149 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1666964651; bh=gu6/U5YXsV7KYErCzpLYCAREok3Azzbw1ab0awwtdFo=; h=To:Subject:Date:List-Id:List-Unsubscribe:List-Archive:List-Help: List-Subscribe:From:Reply-To:Cc:From; b=To/bY+o3eLRj49QeNS3CSPylZomFEin08y9B8RLKoQ3yFBsT7D6C3ETHqcwjx6HRs ycLQ/vBahusiSyng2b0rLjjsoQZgW5KtOS7J8liyzCUHA+x/4JC443wbC+Wboa66+D Dx2i4nWTANUigHJ7iVjzKpvdHXm8GvMNh42JczU8= X-Original-To: elfutils-devel@sourceware.org Delivered-To: elfutils-devel@sourceware.org Received: from mx0a-00230701.pphosted.com (mx0a-00230701.pphosted.com [148.163.156.19]) by sourceware.org (Postfix) with ESMTPS id B8EE73851506 for ; Fri, 28 Oct 2022 13:43:56 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org B8EE73851506 Received: from pps.filterd (m0297266.ppops.net [127.0.0.1]) by mx0a-00230701.pphosted.com (8.17.1.5/8.17.1.5) with ESMTP id 29SCjjQM031172 for ; Fri, 28 Oct 2022 06:43:55 -0700 Received: from smtprelay-out1.synopsys.com (smtprelay-out1.synopsys.com [149.117.87.133]) by mx0a-00230701.pphosted.com (PPS) with ESMTPS id 3kfagdb2k2-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT) for ; Fri, 28 Oct 2022 06:43:55 -0700 Received: from mailhost.synopsys.com (sv1-mailhost1.synopsys.com [10.205.2.131]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) (Client CN "mailhost.synopsys.com", Issuer "SNPSica2" (verified OK)) by smtprelay-out1.synopsys.com (Postfix) with ESMTPS id 25518C00F4 for ; Fri, 28 Oct 2022 13:43:54 +0000 (UTC) Received: from o365relay-in.synopsys.com (sv2-o365relay3.synopsys.com [10.202.1.139]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) (Client CN "o365relay-in.synopsys.com", Issuer "Entrust Certification Authority - L1K" (verified OK)) by mailhost.synopsys.com (Postfix) with ESMTPS id 94CAAA0069 for ; Fri, 28 Oct 2022 13:43:54 +0000 (UTC) Received: from NAM10-MW2-obe.outbound.protection.outlook.com (mail-mw2nam10lp2100.outbound.protection.outlook.com [104.47.55.100]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mail.protection.outlook.com", Issuer "DigiCert Cloud Services CA-1" (verified OK)) by o365relay-in.synopsys.com (Postfix) with ESMTPS id 1AD6E40103 for ; Fri, 28 Oct 2022 13:43:53 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=TjtJyRDMN29fLiMz6jJ67ist3/Of7frWQAql32Pz8DiXMAS/dNe0QjSbcciVr/iBV6zOYtf3YenQ9DZuyPXVI5F7qZ/yDO6gMd/JqpGbqQo6yrkRDrX3X4VyaKc8jjOVpm0ZLktC3wwlveARJb14Avjs5SMx27V4eeqteC6gQEEElm2BWRp4P+1+AvyjY5dZNTSGjUrWMgc86qam1TKBwTQRkxu557McBRN1xsAPY4Kjcnv1w6rHupUiHyH3ZmjOYtKaUKQHYiNLh29YV2gavBS/p2XrtFl8GflPlD86X5PcH6o7SW4M+ZtMhLM4EPu2qJsrG19zikInLx2JMY2Udg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=gu6/U5YXsV7KYErCzpLYCAREok3Azzbw1ab0awwtdFo=; b=L/qyQuXpO108DxsZvA3QOtDo8C4+FPrCsUDohB93EgH7nssd6Sk/F+ZVwlxCRJCvWLDnqqAHRfddqNoUkTAhHBgzU3ZlTo59FC82hCO6nC2W9aF6WcvykilWlAcW+JxMzQ7yWTLORmVBqoK8ChUV6RtICK/qxZSQih+PocHAb/sqfA5FxnQtfDTH18HFYVbTq4Dk6DVoNA3acYUz1ZyEPmFATC1la1xVAAQWZZ5mgZld91NgY8fgf6trY3UR0esgxcrzJc6lJewMTRMW5Sus5bFkrtJejfLe7NbmO54W3wMPlhhcsoX+NxSSG9QYDnE+5gT5zk2ra2a5k1HD5BZZRA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=synopsys.com; dmarc=pass action=none header.from=synopsys.com; dkim=pass header.d=synopsys.com; arc=none Received: from SN6PR12MB2782.namprd12.prod.outlook.com (2603:10b6:805:73::19) by CY5PR12MB6131.namprd12.prod.outlook.com (2603:10b6:930:25::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5769.15; Fri, 28 Oct 2022 13:43:50 +0000 Received: from SN6PR12MB2782.namprd12.prod.outlook.com ([fe80::5ccb:2741:4da4:452d]) by SN6PR12MB2782.namprd12.prod.outlook.com ([fe80::5ccb:2741:4da4:452d%4]) with mapi id 15.20.5769.015; Fri, 28 Oct 2022 13:43:50 +0000 X-SNPS-Relay: synopsys.com To: "elfutils-devel@sourceware.org" Subject: [PATCH] Add support for ARCv2 Thread-Topic: [PATCH] Add support for ARCv2 Thread-Index: AQHY6tNP4ohPFO4CpE+Jcdv3fMEqFQ== Date: Fri, 28 Oct 2022 13:43:49 +0000 Message-ID: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ms-publictraffictype: Email x-ms-traffictypediagnostic: SN6PR12MB2782:EE_|CY5PR12MB6131:EE_ x-ms-office365-filtering-correlation-id: 3ed0b225-a713-45c9-32a5-08dab8ea71e7 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: huhoXL2Lwo9ZOOPiJLrXzH4gZQFiOJSbfFltUl261TESqhoeq0o33O1g1EiNl4N36LKgadaAgme+A4gaajHygyBAnpsr/II2/l1vpiE2oI1v8nGKjSMUHKhQk8HMe5F10KK85TCn9DRp1k9yioRwuFHb6mtZsgEjP9MQJuGwV6zyNTD9oTo7DHfG/l+ibMn8o7mTdGC+m8at4CIku028e9GpwpvyIWrEnueaT6cMAwURbIIVYuFHHOnnF9zCBCLE5f5yDDiP9Y0qKfcjQcsQ1qUL1aPE31bpveHB6XMX+DqOdGL+fvISKT+u6aJiyWDXXVjZSzk4gEJT1X3yhOoZhXqHELC0xIdgxyPyH7qO2GJSTVqagfxE3ZgWhA1T6a2P/gf80KLfdLaH+Wqf49LQZl1DxxUP0bZMifcL8Fm0ob3zeiQO5qVxixWS0hJs4yNOu81zRlIh6EQL0RgJgDtXry7vCOwD7BB1q91ChCrGQ+jUgX4S8Q3UCsoJ8DQJQrQknW46gbgbVKU3Ss3S6ifAC34B9L/bgxbnsyfVYupUHOVY/6sWS9wsID+esgSJntTHKC4MtWiExZzyT8phnpVZw9JSvnMN7dGTiKKDCmhzkTbY7sT9wcLUg3nDTElbXW6uXzgIpszpgAPWUrPY8DeMvfxep7M8N32swJMo4S484DxzmZwg+/zjf0+AVh3kgLjoY5+KIRMc1MgkOsF1rLUBDEzh4iUS4+zjC2CZSxQXI8T5DW9LrrpmfDSVJr8GmyV1Wm8Cd+pmWY5iMbLMXDUNj/lxSCV7Jav8hGbWGVe0DHGBjDrXLPv7Gz5b7WuUqcGkx9mlee7+3yAt2go6Hwvm+ANkk5fK9lATh0jGJa6Kzg4= x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:SN6PR12MB2782.namprd12.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230022)(346002)(136003)(366004)(39860400002)(396003)(376002)(451199015)(31686004)(71200400001)(36756003)(30864003)(38100700002)(5660300002)(2906002)(122000001)(31696002)(83380400001)(478600001)(38070700005)(86362001)(186003)(2616005)(26005)(6512007)(6506007)(107886003)(6486002)(91956017)(316002)(6916009)(8936002)(41300700001)(76116006)(66446008)(4326008)(8676002)(64756008)(66476007)(66556008)(66946007)(2004002)(45980500001); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?q?kENG6R3DVPfEyPbnDOqmuDvZK3II?= =?utf-8?q?rm9UesZmbLkyNTvkHRvH1hJ/OPIM79cTWBztXsLWq8NviG6cq5fRIE07BTzbrKBaz?= =?utf-8?q?fKTuiPLeD1mDNsxFtruaP1H62UFewVUcVoArAiHrT6YCj5Zou3K9joBGCg0hYabEu?= =?utf-8?q?lz4ip3ykCjr9iX1mPk48jPmAs42vqveiUL84On3piEth1HL7B6FLQ1ZkTLDDuBthF?= =?utf-8?q?I6BkCoy9JLfEzl08euVHeCNdPZtaTGOFFYeD+N8BnMJp6nDM8nf8lFuAcuOSanPbP?= =?utf-8?q?LUEK0IssVcQ0dQCA/m5YcZG1E2I+2Ux1kX2YjsDOkcVljPI5/pi6p5wr+d9Zn7SCU?= =?utf-8?q?yHyTqqPCxCvRC0Zb/Wu7I8T1fDhw5BBHLIM9h5guNwQDBepkbYW0cVsMR3EIjgxoR?= =?utf-8?q?yN/rIa11DneFpbryyHuJpS06pvw7HcuEb1a/1ooTA2kYmMZfxJx5iziCrBuhU16/3?= =?utf-8?q?i5oHacmWckqikmOQHIO5XbV8p0dSNVPLfQp5KntBeCvAw8mfVGcUQAdsi/ohAkdz6?= =?utf-8?q?BFt+gULdvlOO7vK91bimkyFDxWJGB4+OHm5v58wywTSjMrggDzQJSk5mnlIR6tDEJ?= =?utf-8?q?VDe9HkhQRhtfkK7fqmFPUiWPXDobSNZewKZQkP1+QJcE0CCkw82/lhte7IjbeOom+?= =?utf-8?q?76ZEeOfC181gODyLyRSf7al9ufZZnFDjuBodorf/PW3PfGdgX0HdC+oBpW35OCkNk?= =?utf-8?q?e2G3O/5NWY1LU92t2mu/37e1sFMeY9Hiwqfz/WA8jH25HKGSrxaqOzNhlBD957L9Z?= =?utf-8?q?iLO8CjpwVOvMe2Ck/EsY42cgMVm2qboxMippafYsMPibyMG7yplVHfSxX74mlOboJ?= =?utf-8?q?eNaMKYYePZ1rtyjOk23GT+6VAMHvNViOw7/bl8oUDYZTgkrMGjTxO+3qgMT3THqxi?= =?utf-8?q?F5NoizBFeCYeNrfWYTPoWlVU/wiaXuUitzPIIRWZn2Zh/PfbHoqwTwYGAj1e2KMnm?= =?utf-8?q?RjUJfFYKygsxbYBI40ny3kLUtgh1e1zILNHr/huesd+iRs/+HOIGMY20aH0H0kB/U?= =?utf-8?q?osZDt+gR8diuJ118ZVLOhh2twqlWwsi/SeZYhKisf/BeeOSYR8u3MFNaiCHr+rwxE?= =?utf-8?q?LGqaiPDyxn13I8TvObN80VxPG3OTdc3vkpwl4Ws+/9Xi5+YFs2Oe6ORd85ggQHjVH?= =?utf-8?q?xKwB1J/BsBPwcoJQTZ0IqKUmx0AbgmHGbNryJfGnZW/mihl3le1jZap8klOt5o1uI?= =?utf-8?q?Hg0LiWAesChwOJOM7z6QLxsrIgmi4SSf3i/EKi7oCT1a38AS/O6r54F+POdIHY8dc?= =?utf-8?q?n2Yh6ogksEYMsiMm2qxLIh8GB5pCQxWFIQ7g4rxW0EM7pN8Z4zEq8fkQliddp5UF0?= =?utf-8?q?QLzvwkreR3rWK+iKW6tbm6RY6cn6jzq2+tlIZkEpIYAeQCpyqCMDKZKsWWKQ7wEIX?= =?utf-8?q?+Hhi68xobg5j2WQPngSY7Q5sPd4hIFsQfVxK8OCO6k6lLCl4fZeMUQu9QPLK5H2Ue?= =?utf-8?q?IJ4L8QGbKrZRhGvn3M+jb2j2xt076gbP5WzWsmhUtRw7aDl8kcLVZvqKrtYFTMxOR?= =?utf-8?q?rfSMUKymM7C/?= Content-ID: <15646695538D5E4E8D007B5183838552@namprd12.prod.outlook.com> MIME-Version: 1.0 X-OriginatorOrg: synopsys.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: SN6PR12MB2782.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 3ed0b225-a713-45c9-32a5-08dab8ea71e7 X-MS-Exchange-CrossTenant-originalarrivaltime: 28 Oct 2022 13:43:49.8556 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: c33c9f88-1eb7-4099-9700-16013fd9e8aa X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: DwOpuhJBct7w+c2r6F9d61WMDPAiCwJlAHMMElH7/6veAMluqMDBftsCWCnSfFWDlL/K9xi8DrR6hZ/by1minQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY5PR12MB6131 X-Proofpoint-ORIG-GUID: 9oZJSUNZE3hLVbMVAWlX3GTJNGBZ9xw3 X-Proofpoint-GUID: 9oZJSUNZE3hLVbMVAWlX3GTJNGBZ9xw3 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.205,Aquarius:18.0.895,Hydra:6.0.545,FMLib:17.11.122.1 definitions=2022-10-28_07,2022-10-27_01,2022-06-22_01 X-Proofpoint-Spam-Details: rule=outbound_active_cloned_notspam policy=outbound_active_cloned score=0 phishscore=0 suspectscore=0 impostorscore=0 mlxscore=0 bulkscore=0 adultscore=0 mlxlogscore=977 clxscore=1011 spamscore=0 priorityscore=1501 malwarescore=0 lowpriorityscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2210170000 definitions=main-2210280085 X-Spam-Status: No, score=-9.6 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, KAM_ASCII_DIVIDERS, KAM_NUMSUBJECT, KAM_SHORT, SPF_HELO_NONE, SPF_NONE, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: elfutils-devel@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Elfutils-devel mailing list List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-Patchwork-Original-From: Shahab Vahedi via Elfutils-devel From: Shahab Vahedi Reply-To: Shahab Vahedi Cc: "\"Shahab Vahedi , Claudiu Zissulescu Errors-To: elfutils-devel-bounces+patchwork=sourceware.org@sourceware.org Sender: "Elfutils-devel" This adds support for Synopsys ARCv2 processors. ARC target related macros has been added to libelf/elf.h. However, there a few changes on existing ARC macros to correct them and be in sync with binutils. There are no regressions in tests for an x86_64 build. ========================================== elfutils 0.187: tests/test-suite.log ========================================== .. contents:: :depth: 2 FAIL: run-backtrace-native-core.sh ================================== backtrace: No modules recognized in core file backtrace-child-core.8740: no main rmdir: failed to remove 'test-8732': Directory not empty FAIL run-backtrace-native-core.sh (exit status: 1) FAIL: run-backtrace-native-core-biarch.sh ========================================= backtrace: No modules recognized in core file backtrace-child-biarch-core.8763: no main rmdir: failed to remove 'test-8755': Directory not empty FAIL run-backtrace-native-core-biarch.sh (exit status: 1) SKIP: run-lfs-symbols.sh ======================== LFS testing is irrelevant on this system SKIP run-lfs-symbols.sh (exit status: 77) Signed-off-by: Shahab Vahedi --- backends/Makefile.am | 7 +++- backends/arc_init.c | 55 ++++++++++++++++++++++++++ backends/arc_reloc.def | 87 ++++++++++++++++++++++++++++++++++++++++ backends/arc_symbol.c | 81 +++++++++++++++++++++++++++++++++++++ libebl/eblopenbackend.c | 2 + libelf/elf.h | 88 +++++++++++++++++++++++++---------------- src/elflint.c | 2 +- 7 files changed, 286 insertions(+), 36 deletions(-) create mode 100644 backends/arc_init.c create mode 100644 backends/arc_reloc.def create mode 100644 backends/arc_symbol.c -- 2.38.1 diff --git a/backends/Makefile.am b/backends/Makefile.am index 9566377f..7f8e47a0 100644 --- a/backends/Makefile.am +++ b/backends/Makefile.am @@ -37,7 +37,7 @@ AM_CPPFLAGS += -I$(top_srcdir)/libebl -I$(top_srcdir)/libasm \ noinst_LIBRARIES = libebl_backends.a libebl_backends_pic.a modules = i386 sh x86_64 ia64 alpha arm aarch64 sparc ppc ppc64 s390 \ - m68k bpf riscv csky + m68k bpf riscv csky arc i386_SRCS = i386_init.c i386_symbol.c i386_corenote.c i386_cfi.c \ i386_retval.c i386_regs.c i386_auxv.c \ @@ -96,11 +96,14 @@ riscv_SRCS = riscv_init.c riscv_symbol.c riscv_cfi.c riscv_regs.c \ csky_SRCS = csky_attrs.c csky_init.c csky_symbol.c csky_cfi.c \ csky_regs.c csky_initreg.c csky_corenote.c +arc_SRCS = arc_init.c arc_symbol.c + libebl_backends_a_SOURCES = $(i386_SRCS) $(sh_SRCS) $(x86_64_SRCS) \ $(ia64_SRCS) $(alpha_SRCS) $(arm_SRCS) \ $(aarch64_SRCS) $(sparc_SRCS) $(ppc_SRCS) \ $(ppc64_SRCS) $(s390_SRCS) \ - $(m68k_SRCS) $(bpf_SRCS) $(riscv_SRCS) $(csky_SRCS) + $(m68k_SRCS) $(bpf_SRCS) $(riscv_SRCS) \ + $(csky_SRCS) $(arc_SRCS) libebl_backends_pic_a_SOURCES = am_libebl_backends_pic_a_OBJECTS = $(libebl_backends_a_SOURCES:.c=.os) diff --git a/backends/arc_init.c b/backends/arc_init.c new file mode 100644 index 00000000..a013bc4e --- /dev/null +++ b/backends/arc_init.c @@ -0,0 +1,55 @@ +/* Initialization of ARC specific backend library. + Copyright (C) 2022 Synopsys Inc. + This file is part of elfutils. + + This file is free software; you can redistribute it and/or modify + it under the terms of either + + * the GNU Lesser General Public License as published by the Free + Software Foundation; either version 3 of the License, or (at + your option) any later version + + or + + * the GNU General Public License as published by the Free + Software Foundation; either version 2 of the License, or (at + your option) any later version + + or both in parallel, as here. + + elfutils is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received copies of the GNU General Public License and + the GNU Lesser General Public License along with this program. If + not, see . */ + +#ifdef HAVE_CONFIG_H +# include +#endif + +#define BACKEND arc_ +#define RELOC_PREFIX R_ARC_ +#include "libebl_CPU.h" + +/* This defines the common reloc hooks based on arc_reloc.def. */ +#include "common-reloc.c" + +Ebl * +arc_init (Elf *elf __attribute__ ((unused)), + GElf_Half machine __attribute__ ((unused)), + Ebl *eh) +{ + arc_init_reloc (eh); + HOOK (eh, machine_flag_check); + HOOK (eh, reloc_simple_type); + HOOK (eh, section_type_name); + + /* /bld/gcc-stage2/arc-snps-linux-gnu/libgcc/libgcc.map.in + #define __LIBGCC_DWARF_FRAME_REGISTERS__. */ + eh->frame_nregs = 146; + + return eh; +} diff --git a/backends/arc_reloc.def b/backends/arc_reloc.def new file mode 100644 index 00000000..dfa30629 --- /dev/null +++ b/backends/arc_reloc.def @@ -0,0 +1,87 @@ +/* List the relocation types for ARC. -*- C -*- + This file is part of elfutils. + + This file is free software; you can redistribute it and/or modify + it under the terms of either + + * the GNU Lesser General Public License as published by the Free + Software Foundation; either version 3 of the License, or (at + your option) any later version + + or + + * the GNU General Public License as published by the Free + Software Foundation; either version 2 of the License, or (at + your option) any later version + + or both in parallel, as here. + + elfutils is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received copies of the GNU General Public License and + the GNU Lesser General Public License along with this program. If + not, see . */ + +/* NAME, REL|EXEC|DYN */ + +RELOC_TYPE (NONE, EXEC|DYN) +RELOC_TYPE (8, REL|EXEC|DYN) +RELOC_TYPE (16, REL|EXEC|DYN) +RELOC_TYPE (24, REL|EXEC|DYN) +RELOC_TYPE (32, REL|EXEC|DYN) +RELOC_TYPE (N8, REL|EXEC|DYN) +RELOC_TYPE (N16, REL|EXEC|DYN) +RELOC_TYPE (N24, REL|EXEC|DYN) +RELOC_TYPE (N32, REL|EXEC|DYN) +RELOC_TYPE (SDA, REL) +RELOC_TYPE (SECTOFF, REL) +RELOC_TYPE (S21H_PCREL, REL) +RELOC_TYPE (S21W_PCREL, REL) +RELOC_TYPE (S25H_PCREL, REL) +RELOC_TYPE (S25W_PCREL, REL) +RELOC_TYPE (SDA32, REL) +RELOC_TYPE (SDA_LDST, REL) +RELOC_TYPE (SDA_LDST1, REL) +RELOC_TYPE (SDA_LDST2, REL) +RELOC_TYPE (SDA16_LD, REL) +RELOC_TYPE (SDA16_LD1, REL) +RELOC_TYPE (SDA16_LD2, REL) +RELOC_TYPE (S13_PCREL, REL) +RELOC_TYPE (W, REL) +RELOC_TYPE (32_ME, REL) +RELOC_TYPE (N32_ME, REL) +RELOC_TYPE (SECTOFF_ME, REL) +RELOC_TYPE (SDA32_ME, REL) +RELOC_TYPE (W_ME, REL) +RELOC_TYPE (SDA_12, REL) +RELOC_TYPE (SDA16_ST2, REL) +RELOC_TYPE (32_PCREL, REL) +RELOC_TYPE (PC32, REL) +RELOC_TYPE (GOTPC32, REL) +RELOC_TYPE (PLT32, REL) +RELOC_TYPE (COPY, EXEC|DYN) +RELOC_TYPE (GLOB_DAT, EXEC|DYN) +RELOC_TYPE (JMP_SLOT, EXEC|DYN) +RELOC_TYPE (RELATIVE, EXEC|DYN) +RELOC_TYPE (GOTOFF, REL) +RELOC_TYPE (GOTPC, REL) +RELOC_TYPE (GOT32, REL) +RELOC_TYPE (S21W_PCREL_PLT, REL) +RELOC_TYPE (S25H_PCREL_PLT, REL) +RELOC_TYPE (JLI_SECTOFF, REL) +RELOC_TYPE (TLS_DTPMOD, REL) +RELOC_TYPE (TLS_DTPOFF, REL) +RELOC_TYPE (TLS_TPOFF, REL) +RELOC_TYPE (TLS_GD_GOT, REL) +RELOC_TYPE (TLS_GD_LD, REL) +RELOC_TYPE (TLS_GD_CALL, REL) +RELOC_TYPE (TLS_IE_GOT, REL) +RELOC_TYPE (TLS_DTPOFF_S9, REL) +RELOC_TYPE (TLS_LE_S9, REL) +RELOC_TYPE (TLS_LE_32, REL) +RELOC_TYPE (S25W_PCREL_PLT, REL) +RELOC_TYPE (S21H_PCREL_PLT, REL) +RELOC_TYPE (NPS_CMEM16, REL) diff --git a/backends/arc_symbol.c b/backends/arc_symbol.c new file mode 100644 index 00000000..e996c5d9 --- /dev/null +++ b/backends/arc_symbol.c @@ -0,0 +1,81 @@ +/* ARC specific symbolic name handling. + This file is part of elfutils. + + This file is free software; you can redistribute it and/or modify + it under the terms of either + + * the GNU Lesser General Public License as published by the Free + Software Foundation; either version 3 of the License, or (at + your option) any later version + + or + + * the GNU General Public License as published by the Free + Software Foundation; either version 2 of the License, or (at + your option) any later version + + or both in parallel, as here. + + elfutils is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received copies of the GNU General Public License and + the GNU Lesser General Public License along with this program. If + not, see . */ + +#ifdef HAVE_CONFIG_H +# include +#endif + +#include +#include +#include +#include + +#define BACKEND arc_ +#include "libebl_CPU.h" + + +/* Check whether machine flags are valid. */ +bool +arc_machine_flag_check (GElf_Word flags) +{ + return ((flags &~ EF_ARC_ALL_MSK) == 0); +} + +/* Check for the simple reloc types. */ +Elf_Type +arc_reloc_simple_type (Ebl *ebl __attribute__ ((unused)), int type, + int *addsub __attribute ((unused))) +{ + switch (type) + { + case R_ARC_32: + return ELF_T_WORD; + case R_ARC_16: + return ELF_T_HALF; + case R_ARC_8: + return ELF_T_BYTE; + default: + return ELF_T_NUM; + } +} + +/* Return symbolic representation of section type. */ +const char * +arc_section_type_name (int type, + char *buf __attribute__ ((unused)), + size_t len __attribute__ ((unused))) +{ + switch (type) + { + case SHT_ARC_ATTRIBUTES: + return "ARC_ATTRIBUTES"; + default: + break; + } + + return NULL; +} diff --git a/libebl/eblopenbackend.c b/libebl/eblopenbackend.c index 02f80653..f2288f63 100644 --- a/libebl/eblopenbackend.c +++ b/libebl/eblopenbackend.c @@ -55,6 +55,7 @@ Ebl *m68k_init (Elf *, GElf_Half, Ebl *); Ebl *bpf_init (Elf *, GElf_Half, Ebl *); Ebl *riscv_init (Elf *, GElf_Half, Ebl *); Ebl *csky_init (Elf *, GElf_Half, Ebl *); +Ebl *arc_init (Elf *, GElf_Half, Ebl *); /* This table should contain the complete list of architectures as far as the ELF specification is concerned. */ @@ -150,6 +151,7 @@ static const struct { riscv_init, "elf_riscv", "riscv", 5, EM_RISCV, ELFCLASS64, ELFDATA2LSB }, { riscv_init, "elf_riscv", "riscv", 5, EM_RISCV, ELFCLASS32, ELFDATA2LSB }, { csky_init, "elf_csky", "csky", 4, EM_CSKY, ELFCLASS32, ELFDATA2LSB }, + { arc_init, "elf_arc", "arc", 3, EM_ARCV2, ELFCLASS32, ELFDATA2LSB }, }; #define nmachines (sizeof (machines) / sizeof (machines[0])) diff --git a/libelf/elf.h b/libelf/elf.h index 02a1b3f5..8428e3df 100644 --- a/libelf/elf.h +++ b/libelf/elf.h @@ -4148,24 +4148,48 @@ enum #define R_LARCH_GNU_VTINHERIT 57 #define R_LARCH_GNU_VTENTRY 58 +/* ARC specific declarations. */ + +/* Processor specific flags for the Ehdr e_flags field. */ +#define EF_ARC_MACH_MSK 0x000000ff +#define EF_ARC_OSABI_MSK 0x00000f00 +#define EF_ARC_ALL_MSK (EF_ARC_MACH_MSK | EF_ARC_OSABI_MSK) + +/* Various CPU types. These numbers are exposed in the ELF header flags + (e_flags field), and so must never change. */ +#define E_ARC_MACH_ARC600 0x00000002 +#define E_ARC_MACH_ARC601 0x00000004 +#define E_ARC_MACH_ARC700 0x00000003 +#define EF_ARC_CPU_ARCV2EM 0x00000005 +#define EF_ARC_CPU_ARCV2HS 0x00000006 +#define EF_ARC_CPU_ARC64 0x00000007 + +/* ARC Linux specific ABIs. */ +#define E_ARC_OSABI_ORIG 0x00000000 /* MUST be 0 for back-compat. */ +#define E_ARC_OSABI_V2 0x00000200 +#define E_ARC_OSABI_V3 0x00000300 +#define E_ARC_OSABI_V4 0x00000400 +#define E_ARC_OSABI_CURRENT E_ARC_OSABI_V4 +/* Leave bits 0xf0 alone in case we ever have more than 16 cpu types. */ + +/* Additional section types. */ +#define SHT_ARC_ATTRIBUTES 0x70000001 /* Section holds attributes. */ /* ARCompact/ARCv2 specific relocs. */ -#define R_ARC_NONE 0x0 -#define R_ARC_8 0x1 -#define R_ARC_16 0x2 -#define R_ARC_24 0x3 -#define R_ARC_32 0x4 -#define R_ARC_B26 0x5 -#define R_ARC_B22_PCREL 0x6 -#define R_ARC_H30 0x7 -#define R_ARC_N8 0x8 -#define R_ARC_N16 0x9 -#define R_ARC_N24 0xA -#define R_ARC_N32 0xB -#define R_ARC_SDA 0xC -#define R_ARC_SECTOFF 0xD -#define R_ARC_S21H_PCREL 0xE -#define R_ARC_S21W_PCREL 0xF +#define R_ARC_NONE 0x00 +#define R_ARC_8 0x01 +#define R_ARC_16 0x02 +#define R_ARC_24 0x03 +#define R_ARC_32 0x04 + +#define R_ARC_N8 0x08 +#define R_ARC_N16 0x09 +#define R_ARC_N24 0x0A +#define R_ARC_N32 0x0B +#define R_ARC_SDA 0x0C +#define R_ARC_SECTOFF 0x0D +#define R_ARC_S21H_PCREL 0x0E +#define R_ARC_S21W_PCREL 0x0F #define R_ARC_S25H_PCREL 0x10 #define R_ARC_S25W_PCREL 0x11 #define R_ARC_SDA32 0x12 @@ -4182,29 +4206,24 @@ enum #define R_ARC_SECTOFF_ME 0x1D #define R_ARC_SDA32_ME 0x1E #define R_ARC_W_ME 0x1F -#define R_ARC_H30_ME 0x20 -#define R_ARC_SECTOFF_U8 0x21 -#define R_ARC_SECTOFF_S9 0x22 -#define R_AC_SECTOFF_U8 0x23 -#define R_AC_SECTOFF_U8_1 0x24 -#define R_AC_SECTOFF_U8_2 0x25 -#define R_AC_SECTOFF_S9 0x26 -#define R_AC_SECTOFF_S9_1 0x27 -#define R_AC_SECTOFF_S9_2 0x28 -#define R_ARC_SECTOFF_ME_1 0x29 -#define R_ARC_SECTOFF_ME_2 0x2A -#define R_ARC_SECTOFF_1 0x2B -#define R_ARC_SECTOFF_2 0x2C + +#define R_ARC_SDA_12 0x2D +#define R_ARC_SDA16_ST2 0x30 +#define R_ARC_32_PCREL 0x31 #define R_ARC_PC32 0x32 #define R_ARC_GOTPC32 0x33 #define R_ARC_PLT32 0x34 #define R_ARC_COPY 0x35 #define R_ARC_GLOB_DAT 0x36 -#define R_ARC_JUMP_SLOT 0x37 +#define R_ARC_JMP_SLOT 0x37 #define R_ARC_RELATIVE 0x38 #define R_ARC_GOTOFF 0x39 #define R_ARC_GOTPC 0x3A #define R_ARC_GOT32 0x3B +#define R_ARC_S21W_PCREL_PLT 0x3C +#define R_ARC_S25H_PCREL_PLT 0x3D + +#define R_ARC_JLI_SECTOFF 0x3F #define R_ARC_TLS_DTPMOD 0x42 #define R_ARC_TLS_DTPOFF 0x43 @@ -4213,9 +4232,12 @@ enum #define R_ARC_TLS_GD_LD 0x46 #define R_ARC_TLS_GD_CALL 0x47 #define R_ARC_TLS_IE_GOT 0x48 -#define R_ARC_TLS_DTPOFF_S9 0x4a -#define R_ARC_TLS_LE_S9 0x4a -#define R_ARC_TLS_LE_32 0x4b +#define R_ARC_TLS_DTPOFF_S9 0x49 +#define R_ARC_TLS_LE_S9 0x4A +#define R_ARC_TLS_LE_32 0x4B +#define R_ARC_S25W_PCREL_PLT 0x4C +#define R_ARC_S21H_PCREL_PLT 0x4D +#define R_ARC_NPS_CMEM16 0x4E /* OpenRISC 1000 specific relocs. */ #define R_OR1K_NONE 0 diff --git a/src/elflint.c b/src/elflint.c index 565cffdc..71521d6a 100644 --- a/src/elflint.c +++ b/src/elflint.c @@ -329,7 +329,7 @@ static const int valid_e_machine[] = EM_CRIS, EM_JAVELIN, EM_FIREPATH, EM_ZSP, EM_MMIX, EM_HUANY, EM_PRISM, EM_AVR, EM_FR30, EM_D10V, EM_D30V, EM_V850, EM_M32R, EM_MN10300, EM_MN10200, EM_PJ, EM_OPENRISC, EM_ARC_A5, EM_XTENSA, EM_ALPHA, - EM_TILEGX, EM_TILEPRO, EM_AARCH64, EM_BPF, EM_RISCV, EM_CSKY + EM_TILEGX, EM_TILEPRO, EM_AARCH64, EM_BPF, EM_RISCV, EM_CSKY, EM_ARC }; #define nvalid_e_machine \ (sizeof (valid_e_machine) / sizeof (valid_e_machine[0]))