From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mx0a-002e3701.pphosted.com (mx0a-002e3701.pphosted.com [148.163.147.86]) by mx.groups.io with SMTP id smtpd.web11.2768.1649399230254684140 for ; Thu, 07 Apr 2022 23:27:10 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@hpe.com header.s=pps0720 header.b=D4n+Hf1w; spf=permerror, err=parse error for token &{10 18 %{ir}.%{v}.%{d}.spf.has.pphosted.com}: invalid domain name (domain: hpe.com, ip: 148.163.147.86, mailfrom: prvs=0097613c5e=abner.chang@hpe.com) Received: from pps.filterd (m0148663.ppops.net [127.0.0.1]) by mx0a-002e3701.pphosted.com (8.16.1.2/8.16.1.2) with ESMTP id 23855BRW002620; Fri, 8 Apr 2022 06:26:30 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=hpe.com; h=from : to : cc : subject : date : message-id : references : in-reply-to : content-type : content-transfer-encoding : mime-version; s=pps0720; bh=ZO3pZejR76uQDo+g+hezMOS2lF6SSk9A1RYC6Qtse6c=; b=D4n+Hf1wXgexsGKdXZ/n/JLEvgLvFERcbkE7gqmzIP1P811HyIZog3WGTA4JcnTCgx0Z te0JHLiDGnV3iSJJ6zhjI/3pnyiFLTgTEYsK9Qz2SJHm88oci1xVA8Ln5uq6LV+gW7Kc YAciKnIwySLE/hPbdtf3p+OGa57K++kw0C1o7QrJVEnDEh9Mlp056S/+YMiQchpNA0EO Jh2EADKiWUkqCeb+f7WhVTynSMk3El7yV8JKC3UajZh41xnkvdwlQN+0huMB48bWcom5 +q6t965Hys9QydnNHND7tzjP51KlTuKeuqKGGGZ6Q8HTqNizyJXYAcPr8ZoR3+c01GPP TA== Received: from p1lg14879.it.hpe.com (p1lg14879.it.hpe.com [16.230.97.200]) by mx0a-002e3701.pphosted.com (PPS) with ESMTPS id 3fa2hk5tng-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 08 Apr 2022 06:26:30 +0000 Received: from p1wg14923.americas.hpqcorp.net (unknown [10.119.18.111]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by p1lg14879.it.hpe.com (Postfix) with ESMTPS id 093E513173; Fri, 8 Apr 2022 06:26:25 +0000 (UTC) Received: from p1wg14928.americas.hpqcorp.net (10.119.18.116) by p1wg14923.americas.hpqcorp.net (10.119.18.111) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.15; Thu, 7 Apr 2022 18:26:00 -1200 Received: from p1wg14927.americas.hpqcorp.net (10.119.18.117) by p1wg14928.americas.hpqcorp.net (10.119.18.116) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.15; Thu, 7 Apr 2022 18:25:59 -1200 Received: from P1WG14918.americas.hpqcorp.net (16.230.19.121) by p1wg14927.americas.hpqcorp.net (10.119.18.117) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.15 via Frontend Transport; Thu, 7 Apr 2022 18:25:59 -1200 Received: from NAM10-MW2-obe.outbound.protection.outlook.com (192.58.206.38) by edge.it.hpe.com (16.230.19.121) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.15; Fri, 8 Apr 2022 06:25:59 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=drCZCSe4GXz+C/y25rPpdXTeiQFhK2bYLGhbOK3bow/RBG7r93et2U3gGqPYey6/JLgX5vA3M3zWi+t6HiokgwrN5UU2I7o41Y1jlbpgMzC1GrP0QiWIzlq6/xLQaYP046v1epBPqQOVG8O0/+mH/fOeMAuhD2UHecoNZhVhmRhxOadbPwzy6o+kWv6rmhwGJAY4h9aPQH0E+Xx1YU5nRhM4hy8Ml9lVxy+W9NewclwETmKpFoc33/rAQ6Uf1JnWxbSeStObzhBkLR8Sejtqwj77kQNRSaj8MDtLhmfKaa3guPPAwPU9RsB4w4wj2cNsZLN9bk+G2Gbdlxi3it5Srw== 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=DaU9RWsy8/dbNp14Sv0lsLyTKhgz0cWWA+o6ZubQZME=; b=k8t38PQH1xBMPMYpyczsiV0VIqfkyjIpaJGBFhpLehw/BDyzBDJQGu8KM7G1aQAShx5Rz3eWjw1GQXR5IQoC+pgCrQfP3tKjKzz2Cct4R+1Gd+QQE+FCMg0XIvc3/oYEjuEPmQc4yWIaAGTm46yt/8e+Hy6bLzn/PJtb+RW5anL0xGS0s/mq1R3FVBA4evFvDDXuqRp+ivC4RnsTKdTQUUfP51LvRO4dy87Q/sGzkcYRdl2M1/yWOJxMYYjB7BH9SCp6WNDHyVdTGS3OCqxIk78jvkGIJkeMZbfg8cQXXFTVODs7bAOtivwJALBk4zw0vA4QitG0Cga7g9CU+v0c9A== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=hpe.com; dmarc=pass action=none header.from=hpe.com; dkim=pass header.d=hpe.com; arc=none Received: from PH7PR84MB1885.NAMPRD84.PROD.OUTLOOK.COM (2603:10b6:510:154::18) by MW5PR84MB1379.NAMPRD84.PROD.OUTLOOK.COM (2603:10b6:303:1c1::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5144.22; Fri, 8 Apr 2022 06:25:56 +0000 Received: from PH7PR84MB1885.NAMPRD84.PROD.OUTLOOK.COM ([fe80::2053:811f:bd4a:7c21]) by PH7PR84MB1885.NAMPRD84.PROD.OUTLOOK.COM ([fe80::2053:811f:bd4a:7c21%8]) with mapi id 15.20.5144.022; Fri, 8 Apr 2022 06:25:56 +0000 From: "Abner Chang" To: "devel@edk2.groups.io" , "lichao@loongson.cn" CC: Bob Feng , Liming Gao , Yuwei Chen , Baoqi Zhang Subject: Re: [edk2-devel] [staging/LoongArch RESEND PATCH v1 13/33] BaseTools: BaseTools changes for LoongArch platform. Thread-Topic: [edk2-devel] [staging/LoongArch RESEND PATCH v1 13/33] BaseTools: BaseTools changes for LoongArch platform. Thread-Index: AQHYHYH86VhhEf9uOkiqMc32pSlUMKzl3k0Q Date: Fri, 8 Apr 2022 06:25:55 +0000 Message-ID: References: <20220209065452.2985600-1-lichao@loongson.cn> In-Reply-To: <20220209065452.2985600-1-lichao@loongson.cn> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 9a58c613-31fb-4ab8-eac7-08da1928a398 x-ms-traffictypediagnostic: MW5PR84MB1379:EE_ x-microsoft-antispam-prvs: x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: 8MWN4BaCsVb6W1F4toDYJFudi4e3GxUt06q4ocyT2ZAoEBtOC8sh2Mt+YHE95eqBy9TBu1s0ZBnnwRknOaqHCosj13crbwjIa3qb4GVlB3f6HJO5Uq+IrXCYkHjS3tUqSdElfG4xPFNrU1w2tVlnEd4XwnoIWrnUmGY9lX3E0poxfVJVERRwKayR4Uy+dEV+DvRuQukFqNYsV/bgWgLxq3eXtLPh3kTfIZsRtXlZfswAoBsLHq6n4R8gFgI6uv1wGu9CVfdX7VzhxNuF0w/0AZVo/Zfihv758TZq3+FTU1Q75LpEsqa/ScgcGBlE5qJlh8sCBN6uHS/erHK1Qm8Xko8QMiXLvVOlge0XW6hXMCBXPm2bN444XtX5LWvXM79/8hOThulpgshZ9Vj6BXhVCZOaOH9yzV6IJS+xgopaw6WBh68QtsuabVg00P9r5bqnqODQfXRoKmh1aJl451LeKb6Vqz39PnjybbBdfkqLg6A/AiOmf2ZhIF7kfoUL4lD+dm+Lu+S05pJiUbNSZ1PBVxYQbWu9tc1HrzGFqQn2fXNfEvqpx5trgdAFLquIw3zch1wLiluteamFsoxjYrxwZjqkHat2iPiSWDPG3GUBGKMd135eaJuQkLzuqnkt81pJIyo8ftwn1V3W9ctFUoplZGJ2XByeHQxRuBqFd7uOq6gc7/lg6D949+AC/CiH4fm6USGy4fffeVZtGbV/TqpwD8Zm/kq8w5zMBXcJk1jaQW1UXqWzho+yNr7c+7efsDpL+XOJwvFTMeUqeHHBkADo7sK9vK2Z36OSVWRRwxM+HRX25IX79Mx+YpVKGAjHwPBfsaH+U10DsTovK/GlvzycCg== x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PH7PR84MB1885.NAMPRD84.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230001)(366004)(64756008)(66446008)(53546011)(66476007)(66556008)(4326008)(8676002)(9686003)(122000001)(30864003)(19627235002)(110136005)(33656002)(316002)(54906003)(966005)(2906002)(26005)(82960400001)(6506007)(7696005)(5660300002)(86362001)(83380400001)(38100700002)(52536014)(8936002)(76116006)(38070700005)(66946007)(55016003)(71200400001)(508600001)(186003)(579004)(559001);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?BjMAzGVwdKG6UE9kcQa+LgZlqmgWatlQZFwr8iK9Ef3hdxm93ob5rBPlfxAK?= =?us-ascii?Q?Mp9FGn3eA8ixcs85Yph3DrvvM8XjbDo6aSB2M+/cZx7Iu/iHmacFRNZ17H6X?= =?us-ascii?Q?Yg3G3DbQjbfrAQi4zrEJVMOhe0g5BaNeNrFT6lEEET5iusDeduRnXlnifNIt?= =?us-ascii?Q?bpJKxICu2fs7h5Blzhth//wz2GUO1PBu+YLOQkQxvCMWaR8/gis/UqPwqdCO?= =?us-ascii?Q?aIn+7pONt1hqA/XXta/tnNfrBlyaLrcERwzHQuEn6OxlvHeOHTbjcsxPy6G9?= =?us-ascii?Q?+WtqEbyIfvh0a1rGOdoDf5oASla6VP+yHjAl0fZEf2BP42DZ0Aw+nshheIl/?= =?us-ascii?Q?E1N01O5ujX7/GnqHEZ7v0CrFQNFisHYTtRoDyUszSmpiy3M7mdwZwCjhw/3I?= =?us-ascii?Q?m57hzrRjxbLTNc4S/qqi3uvtE0w0tQ/BZXZqQFO1h7SMFMjP2NirfQXbJl0j?= =?us-ascii?Q?7vtTjp3v9Ho6TbpUsbuYh9U2UPYHHXgtHGDAJN/cKD9955ONgY5Zt0x7ltVT?= =?us-ascii?Q?/01WnfOmrc1eDITdbw/xKF16coS1j9z8x4OmZabDNJ1qJ2DeeJ37/n5zouxb?= =?us-ascii?Q?MjG9AmcP613PWyFv1sKyPt5DEtn0Bx6T5ChV2CF256otZQUzLyoi6TLVP0zH?= =?us-ascii?Q?zKj2F3GRcHU/RaFVXGHkN3W5nh+WN7eFVNTPWFzw5jIbyzHmv4QglP7tkKpa?= =?us-ascii?Q?oVrZ7XnA2perBPEnlva+dUViRBsMBWgqeA3yOhq+iicZ13w9FlWB9P5FK9Fo?= =?us-ascii?Q?1sf0OVhHS4WiJ6cZNhJAEqlqf8RoL1lno6Cm3mg4asFIxoXOg18hEIgyCsTs?= =?us-ascii?Q?Cw5kDmda34Ki4MDr+RiFu6sjFt3fO0hRvs+Ia29BC1RZeGiLUyqUBMWdkMSy?= =?us-ascii?Q?kD3Eh1haZxNsShhmZH6ifcuIfQWgcd//ADSdsVHhAb98bX1BkeurA2qWCXKz?= =?us-ascii?Q?z6G5nM1UcZTk/PCDbiaS+9TlnZSqpekTBGUW7LgWcsbChmEut9JkmcudtxEv?= =?us-ascii?Q?fjKDD4IyCp+PXW/qLJMJ7ksPgtd+/j0tdIrbNWCKA/LhI/pOCA4KBCubq1ZU?= =?us-ascii?Q?pLC/X8on2YT5FKLkVc+jX4l9xxxVjTsXPVoboQd9rnQ5xYQWCmGxwAtn/YVU?= =?us-ascii?Q?+2QIoJLdQa2NdhZWk6Q50gq4N7zlhyfQLNp8kSHQ/9k8bJy7p94/58I8N/eX?= =?us-ascii?Q?nrBjYwiUCF6FW2FKXxFu0JLprAqZA4B16cDTWnJ5NajUjmLxhi5S+eHLVa4F?= =?us-ascii?Q?s4A9svAVMqfWn79UapCsEXV7mC7d9NvrD2/L0bdDAdsE5rOQvwjadarbTnH4?= =?us-ascii?Q?ZoVoETD2i7HNk4X7F5Lt5ei+XMsp0dqngKNh12rrAgmj/K1+e/HWSuXih5yP?= =?us-ascii?Q?r+YpszZ8MLAKl8fZO1kiAwF7EeEOtRPAxI47b8VHR140jOBW5TviVZt48iP9?= =?us-ascii?Q?mgWr/oLk6606B4J303YNAH7atbUYPbqFiNYaFVLz91cgEPliqGJr9j6sjj0Q?= =?us-ascii?Q?ws9SzSHkiywycJYo/M/v5dXDD9b6YuRLSWZ5SyPcympBsAR3y4VQ8d6h6/VK?= =?us-ascii?Q?b9KcyM0Fn6XQgpMzYRB/SG00pTmzFlFHUxu8VuBbPm1Uk5dxBR/sxJO3xARO?= =?us-ascii?Q?h3lNZaLNLWOmwvu8fQ8FvcrjIkTG80v6yZQnqZgFuoEso2fhCJiPdW3NpAVD?= =?us-ascii?Q?DLt29VO+VixfEXkGH85zaltSq2OP68YjHutZxz6lHJhx1TdN2H3lercinigr?= =?us-ascii?Q?XhUQ3diq2Q=3D=3D?= X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: PH7PR84MB1885.NAMPRD84.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-Network-Message-Id: 9a58c613-31fb-4ab8-eac7-08da1928a398 X-MS-Exchange-CrossTenant-originalarrivaltime: 08 Apr 2022 06:25:55.8877 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 105b2061-b669-4b31-92ac-24d304d195dc X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: nByeDBtMU3ob3tPnYoOQkuByV0oKKH8H2nkT6QTTeJs5SGYRuHn994vR38vMVy44oOy/b+eiOdLB8D+qRAnV7w== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MW5PR84MB1379 X-OriginatorOrg: hpe.com X-Proofpoint-ORIG-GUID: py90-SoyLtl9739Z4mUCn4CoN_NvwC6O X-Proofpoint-GUID: py90-SoyLtl9739Z4mUCn4CoN_NvwC6O X-Proofpoint-UnRewURL: 2 URL's were un-rewritten MIME-Version: 1.0 X-HPE-SCL: -1 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.205,Aquarius:18.0.858,Hydra:6.0.425,FMLib:17.11.64.514 definitions=2022-04-08_02,2022-04-07_01,2022-02-23_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 impostorscore=0 phishscore=0 spamscore=0 suspectscore=0 mlxlogscore=999 lowpriorityscore=0 clxscore=1015 mlxscore=0 adultscore=0 bulkscore=0 malwarescore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2202240000 definitions=main-2204080035 Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable > -----Original Message----- > From: devel@edk2.groups.io On Behalf Of Chao Li > Sent: Wednesday, February 9, 2022 2:55 PM > To: devel@edk2.groups.io > Cc: Bob Feng ; Liming Gao > ; Yuwei Chen ; Baoqi > Zhang > Subject: [edk2-devel] [staging/LoongArch RESEND PATCH v1 13/33] > BaseTools: BaseTools changes for LoongArch platform. >=20 > C code changes for building EDK2 LoongArch platform. >=20 > Cc: Bob Feng > Cc: Liming Gao > Cc: Yuwei Chen >=20 > Signed-off-by: Chao Li > Co-authored-by: Baoqi Zhang > --- > BaseTools/Source/C/Common/BasePeCoff.c | 15 +- > BaseTools/Source/C/Common/PeCoffLoaderEx.c | 76 +++++++++ > BaseTools/Source/C/GenFv/GenFvInternalLib.c | 128 ++++++++++++++- > BaseTools/Source/C/GenFw/Elf64Convert.c | 153 +++++++++++++++++- > BaseTools/Source/C/GenFw/elf_common.h | 58 +++++++ > .../C/Include/IndustryStandard/PeImage.h | 57 ++++--- > 6 files changed, 454 insertions(+), 33 deletions(-) >=20 > diff --git a/BaseTools/Source/C/Common/BasePeCoff.c > b/BaseTools/Source/C/Common/BasePeCoff.c > index 62fbb2985c..30400d1341 100644 > --- a/BaseTools/Source/C/Common/BasePeCoff.c > +++ b/BaseTools/Source/C/Common/BasePeCoff.c > @@ -5,6 +5,7 @@ > Copyright (c) 2004 - 2018, Intel Corporation. All rights reserved.
> Portions Copyright (c) 2011 - 2013, ARM Ltd. All rights reserved.
> Portions Copyright (c) 2020, Hewlett Packard Enterprise Development LP. = All > rights reserved.
> +Portions Copyright (c) 2022, Loongson Technology Corporation Limited. Al= l > rights reserved.
> SPDX-License-Identifier: BSD-2-Clause-Patent >=20 > **/ > @@ -68,6 +69,14 @@ PeCoffLoaderRelocateRiscVImage ( > IN UINT64 Adjust > ); >=20 > +RETURN_STATUS > +PeCoffLoaderRelocateLoongArch64Image ( > + IN UINT16 *Reloc, > + IN OUT CHAR8 *Fixup, > + IN OUT CHAR8 **FixupData, > + IN UINT64 Adjust > + ); > + > STATIC > RETURN_STATUS > PeCoffLoaderGetPeHeader ( > @@ -184,7 +193,8 @@ Returns: > ImageContext->Machine !=3D EFI_IMAGE_MACHINE_ARMT && \ > ImageContext->Machine !=3D EFI_IMAGE_MACHINE_EBC && \ > ImageContext->Machine !=3D EFI_IMAGE_MACHINE_AARCH64 && \ > - ImageContext->Machine !=3D EFI_IMAGE_MACHINE_RISCV64) { > + ImageContext->Machine !=3D EFI_IMAGE_MACHINE_RISCV64 && \ > + ImageContext->Machine !=3D EFI_IMAGE_MACHINE_LOONGARCH64) { > if (ImageContext->Machine =3D=3D IMAGE_FILE_MACHINE_ARM) { > // > // There are two types of ARM images. Pure ARM and ARM/Thumb. > @@ -815,6 +825,9 @@ Returns: > case EFI_IMAGE_MACHINE_RISCV64: > Status =3D PeCoffLoaderRelocateRiscVImage (Reloc, Fixup, &Fixu= pData, > Adjust); > break; > + case EFI_IMAGE_MACHINE_LOONGARCH64: > + Status =3D PeCoffLoaderRelocateLoongArch64Image (Reloc, Fixup, > &FixupData, Adjust); > + break; > default: > Status =3D RETURN_UNSUPPORTED; > break; > diff --git a/BaseTools/Source/C/Common/PeCoffLoaderEx.c > b/BaseTools/Source/C/Common/PeCoffLoaderEx.c > index 799f282970..b50ce8bdef 100644 > --- a/BaseTools/Source/C/Common/PeCoffLoaderEx.c > +++ b/BaseTools/Source/C/Common/PeCoffLoaderEx.c > @@ -4,6 +4,7 @@ IA32 and X64 Specific relocation fixups > Copyright (c) 2004 - 2018, Intel Corporation. All rights reserved.
> Portions Copyright (c) 2011 - 2013, ARM Ltd. All rights reserved.
> Copyright (c) 2020, Hewlett Packard Enterprise Development LP. All right= s > reserved.
> +Copyright (c) 2022, Loongson Technology Corporation Limited. All rights > reserved.
> SPDX-License-Identifier: BSD-2-Clause-Patent >=20 > --*/ > @@ -332,3 +333,78 @@ PeCoffLoaderRelocateArmImage ( >=20 > return RETURN_SUCCESS; > } > + > +/** > + Performs a LoongArch specific relocation fixup. > + > + @param Reloc Pointer to the relocation record. > + @param Fixup Pointer to the address to fix up. > + @param FixupData Pointer to a buffer to log the fixups. > + @param Adjust The offset to adjust the fixup. > + > + @return Status code. > +**/ > +RETURN_STATUS > +PeCoffLoaderRelocateLoongArch64Image ( > + IN UINT16 *Reloc, > + IN OUT CHAR8 *Fixup, > + IN OUT CHAR8 **FixupData, > + IN UINT64 Adjust > + ) > +{ > + UINT8 RelocType; > + UINT64 Value =3D 0; > + UINT64 Tmp1 =3D 0; > + UINT64 Tmp2 =3D 0; > + > + RelocType =3D ((*Reloc) >> 12); > + > + switch (RelocType) { > + case EFI_IMAGE_REL_BASED_LOONGARCH64_MARK_LA: > + /* The next four instructions are used to load a 64 bit address, w= e > change it together*/ > + Value =3D (*(UINT32*)Fixup & 0x1ffffe0) << 7 | /* lu12i.w 20= bits from > bit5 */ Please use double back slash for the comment in the function. So the commen= t in the entire file look consistent. This applied to the changes in this p= atch. > + (*((UINT32*)Fixup + 1) & 0x3ffc00) >> 10; /* ori 12bits = from bit10 */ > + Tmp1 =3D *((UINT32*)Fixup + 2) & 0x1ffffe0; /* lu32i.d 20= bits from bit5 > */ > + Tmp2 =3D *((UINT32*)Fixup + 3) & 0x3ffc00; /* lu52i.d 12= bits from > bit10 */ > + Value =3D Value | (Tmp1 << 27) | (Tmp2 << 42); > + > + Value +=3D Adjust; > + > + *(UINT32*)Fixup =3D (*(UINT32*)Fixup & ~0x1ffffe0) | (((Value >> 1= 2) & > 0xfffff) << 5); > + if (*FixupData !=3D NULL) { > + *FixupData =3D ALIGN_POINTER (*FixupData, sizeof (UI= NT32)); > + *(UINT32 *) (*FixupData) =3D *(UINT32*)Fixup; > + *FixupData =3D *FixupData + sizeof (UINT32); > + } > + > + Fixup +=3D sizeof(UINT32); > + *(UINT32*)Fixup =3D (*(UINT32*)Fixup & ~0x3ffc00) | ((Value & 0xff= f) << > 10); > + if (*FixupData !=3D NULL) { > + *FixupData =3D ALIGN_POINTER (*FixupData, sizeof (UI= NT32)); > + *(UINT32 *) (*FixupData) =3D *(UINT32*)Fixup; > + *FixupData =3D *FixupData + sizeof (UINT32); > + } > + > + Fixup +=3D sizeof(UINT32); > + *(UINT32*)Fixup =3D (*(UINT32*)Fixup & ~0x1ffffe0) | (((Value >> 3= 2) & > 0xfffff) << 5); > + if (*FixupData !=3D NULL) { > + *FixupData =3D ALIGN_POINTER (*FixupData, sizeof (UI= NT32)); > + *(UINT32 *) (*FixupData) =3D *(UINT32*)Fixup; > + *FixupData =3D *FixupData + sizeof (UINT32); > + } > + > + Fixup +=3D sizeof(UINT32); > + *(UINT32*)Fixup =3D (*(UINT32*)Fixup & ~0x3ffc00) | (((Value >> 52= ) & > 0xfff) << 10); > + if (*FixupData !=3D NULL) { > + *FixupData =3D ALIGN_POINTER (*FixupData, sizeof (UI= NT32)); > + *(UINT32 *) (*FixupData) =3D *(UINT32*)Fixup; > + *FixupData =3D *FixupData + sizeof (UINT32); > + } > + break; > + default: > + Error (NULL, 0, 3000, "", "PeCoffLoaderRelocateLoongArch64Image: > Fixup[0x%x] Adjust[0x%llx] *Reloc[0x%x], type[0x%x].", *(UINT32*)Fixup, > Adjust, *Reloc, RelocType); > + return RETURN_UNSUPPORTED; > + } > + > + return RETURN_SUCCESS; > +} > diff --git a/BaseTools/Source/C/GenFv/GenFvInternalLib.c > b/BaseTools/Source/C/GenFv/GenFvInternalLib.c > index d650a527a5..9c518b3609 100644 > --- a/BaseTools/Source/C/GenFv/GenFvInternalLib.c > +++ b/BaseTools/Source/C/GenFv/GenFvInternalLib.c > @@ -5,6 +5,7 @@ Copyright (c) 2004 - 2018, Intel Corporation. All rights > reserved.
> Portions Copyright (c) 2011 - 2013, ARM Ltd. All rights reserved.
> Portions Copyright (c) 2016 HP Development Company, L.P.
> Portions Copyright (c) 2020, Hewlett Packard Enterprise Development LP. = All > rights reserved.
> +Portions Copyright (c) 2022, Loongson Technology Corporation Limited. Al= l > rights reserved.
> SPDX-License-Identifier: BSD-2-Clause-Patent >=20 > **/ > @@ -57,6 +58,7 @@ SPDX-License-Identifier: BSD-2-Clause-Patent >=20 > BOOLEAN mArm =3D FALSE; > BOOLEAN mRiscV =3D FALSE; > +BOOLEAN mLoongArch =3D FALSE; > STATIC UINT32 MaxFfsAlignment =3D 0; > BOOLEAN VtfFileFlag =3D FALSE; >=20 > @@ -2416,6 +2418,102 @@ Returns: > return EFI_SUCCESS; > } >=20 > +EFI_STATUS > +UpdateLoongArchResetVectorIfNeeded ( > + IN MEMORY_FILE *FvImage, > + IN FV_INFO *FvInfo > + ) > +/*++ > + > +Routine Description: > + This parses the FV looking for SEC and patches that address into the > + beginning of the FV header. > + > + For LoongArch ISA, the reset vector is at 0x1c000000. > + > + We relocate it to SecCoreEntry and copy the ResetVector code to the > + beginning of the FV. > + > +Arguments: > + FvImage Memory file for the FV memory image > + FvInfo Information read from INF file. > + > +Returns: > + > + EFI_SUCCESS Function Completed successfully. > + EFI_ABORTED Error encountered. > + EFI_INVALID_PARAMETER A required parameter was NULL. > + EFI_NOT_FOUND PEI Core file not found. > + > +--*/ > +{ > + EFI_STATUS Status; > + EFI_FILE_SECTION_POINTER SecPe32; > + BOOLEAN UpdateVectorSec =3D FALSE; > + UINT16 MachineType =3D 0; > + EFI_PHYSICAL_ADDRESS SecCoreEntryAddress =3D 0; > + > + // > + // Verify input parameters > + // > + if (FvImage =3D=3D NULL || FvInfo =3D=3D NULL) { > + return EFI_INVALID_PARAMETER; > + } > + > + // > + // Locate an SEC Core instance and if found extract the machine type a= nd > entry point address > + // > + Status =3D FindCorePeSection(FvImage->FileImage, FvInfo->Size, > EFI_FV_FILETYPE_SECURITY_CORE, &SecPe32); > + if (!EFI_ERROR(Status)) { > + > + Status =3D GetCoreMachineType(SecPe32, &MachineType); > + if (EFI_ERROR(Status)) { > + Error(NULL, 0, 3000, "Invalid", "Could not get the PE32 machine ty= pe for > SEC Core."); > + return EFI_ABORTED; > + } > + > + Status =3D GetCoreEntryPointAddress(FvImage->FileImage, FvInfo, > SecPe32, &SecCoreEntryAddress); > + if (EFI_ERROR(Status)) { > + Error(NULL, 0, 3000, "Invalid", "Could not get the PE32 entry poin= t > address for SEC Core."); > + return EFI_ABORTED; > + } > + > + UpdateVectorSec =3D TRUE; > + } > + > + if (!UpdateVectorSec) > + return EFI_SUCCESS; > + > + if (MachineType =3D=3D EFI_IMAGE_MACHINE_LOONGARCH64) { > + UINT32 ResetVector[3]; > + UINT32 InstrStack; > + > + memset(ResetVector, 0, sizeof (ResetVector)); > + > + /* if we found an SEC core entry point then generate a branch instru= ction > */ > + if (UpdateVectorSec) { > + VerboseMsg("UpdateLoongArchResetVectorIfNeeded updating > LOONGARCH64 SEC vector"); > + > + InstrStack =3D (SecCoreEntryAddress >> 12) & 0xfffff; > + ResetVector[0] =3D 0x14000001 | (InstrStack << 5); /* lu12i.w r= a si20 */ > + > + InstrStack =3D (SecCoreEntryAddress & 0x0fff); > + ResetVector[1] =3D 0x03800021 | (InstrStack << 10); /* ori ra, r= a, ui12 */ > + ResetVector[2] =3D 0x4c000021; /* jirl ra, = ra, 0 */ > + } > + > + // > + // Copy to the beginning of the FV > + // > + memcpy(FvImage->FileImage, ResetVector, sizeof (ResetVector)); > + } else { > + Error(NULL, 0, 3000, "Invalid", "Unknown machine type"); > + return EFI_ABORTED; > + } > + > + return EFI_SUCCESS; > +} > + > EFI_STATUS > GetPe32Info ( > IN UINT8 *Pe32, > @@ -2509,7 +2607,7 @@ Returns: > // > if ((*MachineType !=3D EFI_IMAGE_MACHINE_IA32) && (*MachineType !=3D > EFI_IMAGE_MACHINE_X64) && (*MachineType !=3D > EFI_IMAGE_MACHINE_EBC) && > (*MachineType !=3D EFI_IMAGE_MACHINE_ARMT) && (*MachineType !=3D > EFI_IMAGE_MACHINE_AARCH64) && > - (*MachineType !=3D EFI_IMAGE_MACHINE_RISCV64)) { > + (*MachineType !=3D EFI_IMAGE_MACHINE_RISCV64) && > (*MachineType !=3D EFI_IMAGE_MACHINE_LOONGARCH64)) { > Error (NULL, 0, 3000, "Invalid", "Unrecognized machine type in the P= E32 > file."); > return EFI_UNSUPPORTED; > } > @@ -2953,7 +3051,7 @@ Returns: > goto Finish; > } >=20 > - if (!mArm && !mRiscV) { > + if (!mArm && !mRiscV && !mLoongArch) { > // > // Update reset vector (SALE_ENTRY for IPF) > // Now for IA32 and IA64 platform, the fv which has bsf file must = have the > @@ -3004,6 +3102,19 @@ Returns: > FvHeader->Checksum =3D CalculateChecksum16 ((UINT16 *) FvHeader, > FvHeader->HeaderLength / sizeof (UINT16)); > } >=20 > + if (mLoongArch) { > + Status =3D UpdateLoongArchResetVectorIfNeeded (&FvImageMemoryFile, > &mFvDataInfo); > + if (EFI_ERROR (Status)) { > + Error (NULL, 0, 3000, "Invalid", "Could not update the reset vecto= r."); > + goto Finish; > + } > + // > + // Update Checksum for FvHeader > + // > + FvHeader->Checksum =3D 0; > + FvHeader->Checksum =3D CalculateChecksum16 ((UINT16 *) FvHeader, > FvHeader->HeaderLength / sizeof (UINT16)); > + } > + > // > // Update FV Alignment attribute to the largest alignment of all the F= FS files > in the FV > // > @@ -3450,6 +3561,11 @@ Returns: > VerboseMsg("Located ARM/AArch64 SEC/PEI core in child FV"); > mArm =3D TRUE; > } > + // machine type is LOONGARCH64, set a flag so LOONGARCH64 reset > vector procesing occurs > + if ((MachineType =3D=3D EFI_IMAGE_MACHINE_LOONGARCH64)) { > + VerboseMsg("Located LOONGARCH64 SEC core in child FV"); > + mLoongArch =3D TRUE; > + } > } >=20 > // > @@ -3608,6 +3724,10 @@ Returns: > mRiscV =3D TRUE; > } >=20 > + if ( (ImageContext.Machine =3D=3D EFI_IMAGE_MACHINE_LOONGARCH64) ) { > + mLoongArch =3D TRUE; > + } > + > // > // Keep Image Context for PE image in FV > // > @@ -3885,6 +4005,10 @@ Returns: > mArm =3D TRUE; > } >=20 > + if ( (ImageContext.Machine =3D=3D EFI_IMAGE_MACHINE_LOONGARCH64) ) { > + mLoongArch =3D TRUE; > + } > + > // > // Keep Image Context for TE image in FV > // > diff --git a/BaseTools/Source/C/GenFw/Elf64Convert.c > b/BaseTools/Source/C/GenFw/Elf64Convert.c > index 0bb3ead228..b66aadfd6c 100644 > --- a/BaseTools/Source/C/GenFw/Elf64Convert.c > +++ b/BaseTools/Source/C/GenFw/Elf64Convert.c > @@ -4,6 +4,7 @@ Elf64 convert solution > Copyright (c) 2010 - 2021, Intel Corporation. All rights reserved.
> Portions copyright (c) 2013-2014, ARM Ltd. All rights reserved.
> Portions Copyright (c) 2020, Hewlett Packard Enterprise Development LP. = All > rights reserved.
> +Portions Copyright (c) 2022, Loongson Technology Corporation Limited. Al= l > rights reserved.
>=20 > SPDX-License-Identifier: BSD-2-Clause-Patent >=20 > @@ -163,7 +164,7 @@ InitializeElf64 ( > Error (NULL, 0, 3000, "Unsupported", "ELF e_type not ET_EXEC or > ET_DYN"); > return FALSE; > } > - if (!((mEhdr->e_machine =3D=3D EM_X86_64) || (mEhdr->e_machine =3D=3D > EM_AARCH64) || (mEhdr->e_machine =3D=3D EM_RISCV64))) { > + if (!((mEhdr->e_machine =3D=3D EM_X86_64) || (mEhdr->e_machine =3D=3D > EM_AARCH64) || (mEhdr->e_machine =3D=3D EM_RISCV64) || (mEhdr- > >e_machine =3D=3D EM_LOONGARCH64))) { > Warning (NULL, 0, 3000, "Unsupported", "ELF e_machine is not Elf64 > machine."); > } > if (mEhdr->e_version !=3D EV_CURRENT) { > @@ -730,6 +731,7 @@ ScanSections64 ( > case EM_X86_64: > case EM_AARCH64: > case EM_RISCV64: > + case EM_LOONGARCH64: > mCoffOffset +=3D sizeof (EFI_IMAGE_NT_HEADERS64); > break; > default: > @@ -943,6 +945,10 @@ ScanSections64 ( > NtHdr->Pe32Plus.FileHeader.Machine =3D EFI_IMAGE_MACHINE_RISCV64; > NtHdr->Pe32Plus.OptionalHeader.Magic =3D > EFI_IMAGE_NT_OPTIONAL_HDR64_MAGIC; > break; > + case EM_LOONGARCH64: > + NtHdr->Pe32Plus.FileHeader.Machine =3D > EFI_IMAGE_MACHINE_LOONGARCH64; > + NtHdr->Pe32Plus.OptionalHeader.Magic =3D > EFI_IMAGE_NT_OPTIONAL_HDR64_MAGIC; > + break; >=20 > default: > VerboseMsg ("%s unknown e_machine type. Assume X64", > (UINTN)mEhdr->e_machine); > @@ -1149,10 +1155,10 @@ WriteSections64 ( > } >=20 > // > - // Skip error on EM_RISCV64 becasue no symble name is built > - // from RISC-V toolchain. > + // Skip error on EM_RISCV64 and EM_LOONGARCH64 becasue no > symble name is built > + // from RISC-V and LoongArch toolchain. > // > - if (mEhdr->e_machine !=3D EM_RISCV64) { > + if ((mEhdr->e_machine !=3D EM_RISCV64) && (mEhdr->e_machine != =3D > EM_LOONGARCH64)) { > Error (NULL, 0, 3000, "Invalid", > "%s: Bad definition for symbol '%s'@%#llx or unsuppor= ted symbol > type. " > "For example, absolute and undefined symbols are not > supported.", > @@ -1417,6 +1423,74 @@ WriteSections64 ( > // Write section for RISC-V 64 architecture. > // > WriteSectionRiscV64 (Rel, Targ, SymShdr, Sym); > + } else if (mEhdr->e_machine =3D=3D EM_LOONGARCH64) { > + switch (ELF_R_TYPE(Rel->r_info)) { > + > + case R_LARCH_SOP_PUSH_ABSOLUTE: > + // > + // Absolute relocation. > + // > + *(UINT64 *)Targ =3D *(UINT64 *)Targ - SymShdr->sh_addr + > mCoffSectionsOffset[Sym->st_shndx]; > + break; > + > + case R_LARCH_MARK_LA: > + case R_LARCH_64: > + case R_LARCH_NONE: > + case R_LARCH_32: > + case R_LARCH_RELATIVE: > + case R_LARCH_COPY: > + case R_LARCH_JUMP_SLOT: > + case R_LARCH_TLS_DTPMOD32: > + case R_LARCH_TLS_DTPMOD64: > + case R_LARCH_TLS_DTPREL32: > + case R_LARCH_TLS_DTPREL64: > + case R_LARCH_TLS_TPREL32: > + case R_LARCH_TLS_TPREL64: > + case R_LARCH_IRELATIVE: > + case R_LARCH_MARK_PCREL: > + case R_LARCH_SOP_PUSH_PCREL: > + case R_LARCH_SOP_PUSH_DUP: > + case R_LARCH_SOP_PUSH_GPREL: > + case R_LARCH_SOP_PUSH_TLS_TPREL: > + case R_LARCH_SOP_PUSH_TLS_GOT: > + case R_LARCH_SOP_PUSH_TLS_GD: > + case R_LARCH_SOP_PUSH_PLT_PCREL: > + case R_LARCH_SOP_ASSERT: > + case R_LARCH_SOP_NOT: > + case R_LARCH_SOP_SUB: > + case R_LARCH_SOP_SL: > + case R_LARCH_SOP_SR: > + case R_LARCH_SOP_ADD: > + case R_LARCH_SOP_AND: > + case R_LARCH_SOP_IF_ELSE: > + case R_LARCH_SOP_POP_32_S_10_5: > + case R_LARCH_SOP_POP_32_U_10_12: > + case R_LARCH_SOP_POP_32_S_10_12: > + case R_LARCH_SOP_POP_32_S_10_16: > + case R_LARCH_SOP_POP_32_S_10_16_S2: > + case R_LARCH_SOP_POP_32_S_5_20: > + case R_LARCH_SOP_POP_32_S_0_5_10_16_S2: > + case R_LARCH_SOP_POP_32_S_0_10_10_16_S2: > + case R_LARCH_SOP_POP_32_U: > + case R_LARCH_ADD8: > + case R_LARCH_ADD16: > + case R_LARCH_ADD24: > + case R_LARCH_ADD32: > + case R_LARCH_ADD64: > + case R_LARCH_SUB8: > + case R_LARCH_SUB16: > + case R_LARCH_SUB24: > + case R_LARCH_SUB32: > + case R_LARCH_SUB64: > + case R_LARCH_GNU_VTINHERIT: > + case R_LARCH_GNU_VTENTRY: > + // > + // These types are not used or do not need to fix the offset= s. > + // > + break; > + default: > + Error (NULL, 0, 3000, "Invalid", "WriteSections64(): %s unsu= pported > ELF EM_LOONGARCH64 relocation 0x%x.", mInImageName, (unsigned) > ELF64_R_TYPE(Rel->r_info)); > + } > } else { > Error (NULL, 0, 3000, "Invalid", "Not a supported machine type= "); > } > @@ -1647,6 +1721,77 @@ WriteRelocations64 ( > default: > Error (NULL, 0, 3000, "Invalid", "WriteRelocations64(): %s > unsupported ELF EM_RISCV64 relocation 0x%x.", mInImageName, (unsigned) > ELF_R_TYPE(Rel->r_info)); > } > + } else if (mEhdr->e_machine =3D=3D EM_LOONGARCH64) { > + switch (ELF_R_TYPE(Rel->r_info)) { > + case R_LARCH_MARK_LA: > + CoffAddFixup( > + (UINT32) ((UINT64) mCoffSectionsOffset[RelShdr->sh_inf= o] > + + (Rel->r_offset - SecShdr->sh_addr)), > + EFI_IMAGE_REL_BASED_LOONGARCH64_MARK_LA); > + break; > + case R_LARCH_64: > + CoffAddFixup( > + (UINT32) ((UINT64) mCoffSectionsOffset[RelShdr->sh_inf= o] > + + (Rel->r_offset - SecShdr->sh_addr)), > + EFI_IMAGE_REL_BASED_DIR64); > + break; > + case R_LARCH_NONE: > + case R_LARCH_32: > + case R_LARCH_RELATIVE: > + case R_LARCH_COPY: > + case R_LARCH_JUMP_SLOT: > + case R_LARCH_TLS_DTPMOD32: > + case R_LARCH_TLS_DTPMOD64: > + case R_LARCH_TLS_DTPREL32: > + case R_LARCH_TLS_DTPREL64: > + case R_LARCH_TLS_TPREL32: > + case R_LARCH_TLS_TPREL64: > + case R_LARCH_IRELATIVE: > + case R_LARCH_MARK_PCREL: > + case R_LARCH_SOP_PUSH_PCREL: > + case R_LARCH_SOP_PUSH_ABSOLUTE: > + case R_LARCH_SOP_PUSH_DUP: > + case R_LARCH_SOP_PUSH_GPREL: > + case R_LARCH_SOP_PUSH_TLS_TPREL: > + case R_LARCH_SOP_PUSH_TLS_GOT: > + case R_LARCH_SOP_PUSH_TLS_GD: > + case R_LARCH_SOP_PUSH_PLT_PCREL: > + case R_LARCH_SOP_ASSERT: > + case R_LARCH_SOP_NOT: > + case R_LARCH_SOP_SUB: > + case R_LARCH_SOP_SL: > + case R_LARCH_SOP_SR: > + case R_LARCH_SOP_ADD: > + case R_LARCH_SOP_AND: > + case R_LARCH_SOP_IF_ELSE: > + case R_LARCH_SOP_POP_32_S_10_5: > + case R_LARCH_SOP_POP_32_U_10_12: > + case R_LARCH_SOP_POP_32_S_10_12: > + case R_LARCH_SOP_POP_32_S_10_16: > + case R_LARCH_SOP_POP_32_S_10_16_S2: > + case R_LARCH_SOP_POP_32_S_5_20: > + case R_LARCH_SOP_POP_32_S_0_5_10_16_S2: > + case R_LARCH_SOP_POP_32_S_0_10_10_16_S2: > + case R_LARCH_SOP_POP_32_U: > + case R_LARCH_ADD8: > + case R_LARCH_ADD16: > + case R_LARCH_ADD24: > + case R_LARCH_ADD32: > + case R_LARCH_ADD64: > + case R_LARCH_SUB8: > + case R_LARCH_SUB16: > + case R_LARCH_SUB24: > + case R_LARCH_SUB32: > + case R_LARCH_SUB64: > + case R_LARCH_GNU_VTINHERIT: > + case R_LARCH_GNU_VTENTRY: > + // > + // These types are not used or do not require fixup in P= E format > files. > + // > + break; > + default: > + Error (NULL, 0, 3000, "Invalid", "WriteRelocations64()= : %s > unsupported ELF EM_LOONGARCH64 relocation 0x%x.", mInImageName, > (unsigned) ELF64_R_TYPE(Rel->r_info)); > + } > } else { > Error (NULL, 0, 3000, "Not Supported", "This tool does not s= upport > relocations for ELF with e_machine %u (processor type).", (unsigned) mEhd= r- > >e_machine); > } > diff --git a/BaseTools/Source/C/GenFw/elf_common.h > b/BaseTools/Source/C/GenFw/elf_common.h > index b67f59e7a0..34c8748f39 100644 > --- a/BaseTools/Source/C/GenFw/elf_common.h > +++ b/BaseTools/Source/C/GenFw/elf_common.h > @@ -4,6 +4,7 @@ Ported ELF include files from FreeBSD > Copyright (c) 2009 - 2010, Apple Inc. All rights reserved.
> Portions Copyright (c) 2011 - 2013, ARM Ltd. All rights reserved.
> Portion Copyright (c) 2020, Hewlett Packard Enterprise Development LP. A= ll > rights reserved.
> +Portions Copyright (c) 2022, Loongson Technology Corporation Limited. Al= l > rights reserved.
> SPDX-License-Identifier: BSD-2-Clause-Patent >=20 >=20 > @@ -181,6 +182,7 @@ typedef struct { > #define EM_AARCH64 183 /* ARM 64bit Architecture */ > #define EM_RISCV64 243 /* 64bit RISC-V Architecture */ > #define EM_RISCV 244 /* 32bit RISC-V Architecture */ > +#define EM_LOONGARCH64 258 /* LoongArch 64-bit Architecture */ Do you have 32-bit LOONGARCH that also requires a value in spec? Abner >=20 > /* Non-standard or deprecated. */ > #define EM_486 6 /* Intel i486. */ > @@ -1042,4 +1044,60 @@ typedef struct { > #define R_RISCV_SET8 54 > #define R_RISCV_SET16 55 > #define R_RISCV_SET32 56 > + > +/* > + * LoongArch relocation types > + */ > +#define R_LARCH_NONE 0 > +#define R_LARCH_32 1 > +#define R_LARCH_64 2 > +#define R_LARCH_RELATIVE 3 > +#define R_LARCH_COPY 4 > +#define R_LARCH_JUMP_SLOT 5 > +#define R_LARCH_TLS_DTPMOD32 6 > +#define R_LARCH_TLS_DTPMOD64 7 > +#define R_LARCH_TLS_DTPREL32 8 > +#define R_LARCH_TLS_DTPREL64 9 > +#define R_LARCH_TLS_TPREL32 10 > +#define R_LARCH_TLS_TPREL64 11 > +#define R_LARCH_IRELATIVE 12 > +#define R_LARCH_MARK_LA 20 > +#define R_LARCH_MARK_PCREL 21 > +#define R_LARCH_SOP_PUSH_PCREL 22 > +#define R_LARCH_SOP_PUSH_ABSOLUTE 23 > +#define R_LARCH_SOP_PUSH_DUP 24 > +#define R_LARCH_SOP_PUSH_GPREL 25 > +#define R_LARCH_SOP_PUSH_TLS_TPREL 26 > +#define R_LARCH_SOP_PUSH_TLS_GOT 27 > +#define R_LARCH_SOP_PUSH_TLS_GD 28 > +#define R_LARCH_SOP_PUSH_PLT_PCREL 29 > +#define R_LARCH_SOP_ASSERT 30 > +#define R_LARCH_SOP_NOT 31 > +#define R_LARCH_SOP_SUB 32 > +#define R_LARCH_SOP_SL 33 > +#define R_LARCH_SOP_SR 34 > +#define R_LARCH_SOP_ADD 35 > +#define R_LARCH_SOP_AND 36 > +#define R_LARCH_SOP_IF_ELSE 37 > +#define R_LARCH_SOP_POP_32_S_10_5 38 > +#define R_LARCH_SOP_POP_32_U_10_12 39 > +#define R_LARCH_SOP_POP_32_S_10_12 40 > +#define R_LARCH_SOP_POP_32_S_10_16 41 > +#define R_LARCH_SOP_POP_32_S_10_16_S2 42 > +#define R_LARCH_SOP_POP_32_S_5_20 43 > +#define R_LARCH_SOP_POP_32_S_0_5_10_16_S2 44 > +#define R_LARCH_SOP_POP_32_S_0_10_10_16_S2 45 > +#define R_LARCH_SOP_POP_32_U 46 > +#define R_LARCH_ADD8 47 > +#define R_LARCH_ADD16 48 > +#define R_LARCH_ADD24 49 > +#define R_LARCH_ADD32 50 > +#define R_LARCH_ADD64 51 > +#define R_LARCH_SUB8 52 > +#define R_LARCH_SUB16 53 > +#define R_LARCH_SUB24 54 > +#define R_LARCH_SUB32 55 > +#define R_LARCH_SUB64 56 > +#define R_LARCH_GNU_VTINHERIT 57 > +#define R_LARCH_GNU_VTENTRY 58 > #endif /* !_SYS_ELF_COMMON_H_ */ > diff --git a/BaseTools/Source/C/Include/IndustryStandard/PeImage.h > b/BaseTools/Source/C/Include/IndustryStandard/PeImage.h > index f17b8ee19b..80961e5576 100644 > --- a/BaseTools/Source/C/Include/IndustryStandard/PeImage.h > +++ b/BaseTools/Source/C/Include/IndustryStandard/PeImage.h > @@ -7,6 +7,7 @@ > Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.
> Portions copyright (c) 2011 - 2013, ARM Ltd. All rights reserved.
> Copyright (c) 2020, Hewlett Packard Enterprise Development LP. All rig= hts > reserved.
> + Copyright (c) 2022, Loongson Technology Corporation Limited. All right= s > reserved.
>=20 > SPDX-License-Identifier: BSD-2-Clause-Patent >=20 > @@ -36,23 +37,25 @@ > // > // PE32+ Machine type for EFI images > // > -#define IMAGE_FILE_MACHINE_I386 0x014c > -#define IMAGE_FILE_MACHINE_EBC 0x0EBC > -#define IMAGE_FILE_MACHINE_X64 0x8664 > -#define IMAGE_FILE_MACHINE_ARM 0x01c0 // Thumb only > -#define IMAGE_FILE_MACHINE_ARMT 0x01c2 // 32bit Mixed ARM and > Thumb/Thumb 2 Little Endian > -#define IMAGE_FILE_MACHINE_ARM64 0xAA64 // 64bit ARM > Architecture, Little Endian > -#define IMAGE_FILE_MACHINE_RISCV64 0x5064 // 64bit RISC-V ISA > +#define IMAGE_FILE_MACHINE_I386 0x014c > +#define IMAGE_FILE_MACHINE_EBC 0x0EBC > +#define IMAGE_FILE_MACHINE_X64 0x8664 > +#define IMAGE_FILE_MACHINE_ARM 0x01c0 // Thumb only > +#define IMAGE_FILE_MACHINE_ARMT 0x01c2 // 32bit Mixed ARM and > Thumb/Thumb 2 Little Endian > +#define IMAGE_FILE_MACHINE_ARM64 0xAA64 // 64bit ARM > Architecture, Little Endian > +#define IMAGE_FILE_MACHINE_RISCV64 0x5064 // 64bit RISC-V ISA > +#define IMAGE_FILE_MACHINE_LOONGARCH64 0x6264 // 64bit LoongArch > Architecture >=20 > // > // Support old names for backward compatible > // > -#define EFI_IMAGE_MACHINE_IA32 IMAGE_FILE_MACHINE_I386 > -#define EFI_IMAGE_MACHINE_EBC IMAGE_FILE_MACHINE_EBC > -#define EFI_IMAGE_MACHINE_X64 IMAGE_FILE_MACHINE_X64 > -#define EFI_IMAGE_MACHINE_ARMT IMAGE_FILE_MACHINE_ARMT > -#define EFI_IMAGE_MACHINE_AARCH64 IMAGE_FILE_MACHINE_ARM64 > -#define EFI_IMAGE_MACHINE_RISCV64 IMAGE_FILE_MACHINE_RISCV64 > +#define EFI_IMAGE_MACHINE_IA32 IMAGE_FILE_MACHINE_I386 > +#define EFI_IMAGE_MACHINE_EBC IMAGE_FILE_MACHINE_EBC > +#define EFI_IMAGE_MACHINE_X64 IMAGE_FILE_MACHINE_X64 > +#define EFI_IMAGE_MACHINE_ARMT IMAGE_FILE_MACHINE_ARMT > +#define EFI_IMAGE_MACHINE_AARCH64 > IMAGE_FILE_MACHINE_ARM64 > +#define EFI_IMAGE_MACHINE_RISCV64 IMAGE_FILE_MACHINE_RISCV64 > +#define EFI_IMAGE_MACHINE_LOONGARCH64 > IMAGE_FILE_MACHINE_LOONGARCH64 >=20 > #define EFI_IMAGE_DOS_SIGNATURE 0x5A4D // MZ > #define EFI_IMAGE_OS2_SIGNATURE 0x454E // NE > @@ -500,19 +503,21 @@ typedef struct { > // > // Based relocation types. > // > -#define EFI_IMAGE_REL_BASED_ABSOLUTE 0 > -#define EFI_IMAGE_REL_BASED_HIGH 1 > -#define EFI_IMAGE_REL_BASED_LOW 2 > -#define EFI_IMAGE_REL_BASED_HIGHLOW 3 > -#define EFI_IMAGE_REL_BASED_HIGHADJ 4 > -#define EFI_IMAGE_REL_BASED_MIPS_JMPADDR 5 > -#define EFI_IMAGE_REL_BASED_ARM_MOV32A 5 > -#define EFI_IMAGE_REL_BASED_RISCV_HI20 5 > -#define EFI_IMAGE_REL_BASED_ARM_MOV32T 7 > -#define EFI_IMAGE_REL_BASED_RISCV_LOW12I 7 > -#define EFI_IMAGE_REL_BASED_RISCV_LOW12S 8 > -#define EFI_IMAGE_REL_BASED_IA64_IMM64 9 > -#define EFI_IMAGE_REL_BASED_DIR64 10 > +#define EFI_IMAGE_REL_BASED_ABSOLUTE 0 > +#define EFI_IMAGE_REL_BASED_HIGH 1 > +#define EFI_IMAGE_REL_BASED_LOW 2 > +#define EFI_IMAGE_REL_BASED_HIGHLOW 3 > +#define EFI_IMAGE_REL_BASED_HIGHADJ 4 > +#define EFI_IMAGE_REL_BASED_MIPS_JMPADDR 5 > +#define EFI_IMAGE_REL_BASED_ARM_MOV32A 5 > +#define EFI_IMAGE_REL_BASED_RISCV_HI20 5 > +#define EFI_IMAGE_REL_BASED_ARM_MOV32T 7 > +#define EFI_IMAGE_REL_BASED_RISCV_LOW12I 7 > +#define EFI_IMAGE_REL_BASED_RISCV_LOW12S 8 > +#define EFI_IMAGE_REL_BASED_LOONGARCH32_MARK_LA 8 > +#define EFI_IMAGE_REL_BASED_LOONGARCH64_MARK_LA 8 > +#define EFI_IMAGE_REL_BASED_IA64_IMM64 9 > +#define EFI_IMAGE_REL_BASED_DIR64 10 >=20 >=20 > /// > -- > 2.27.0 >=20 >=20 >=20 >=20 >=20