From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from emagii.se (www.emagii.com [185.133.207.17]) by sourceware.org (Postfix) with ESMTPS id 330E93833C58 for ; Mon, 20 Feb 2023 10:15:48 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 330E93833C58 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=emagii.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=emagii.com Received: from valinor.ownit.se (84-55-68-216.customers.ownit.se [84.55.68.216]) by emagii.se (Postfix) with ESMTPSA id C1D8C120224; Sun, 19 Feb 2023 20:45:55 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=emagii.com; s=default; t=1676835956; bh=igJJSZZCqKQLOy30NPMXadbwlIw70quBk3Hmyt4PrLc=; h=From:To:Subject; b=LbSHWEy2tagAhhGjZy7fvL0qzgyRaIEk288l3Kh+5N0gEGm1FNbzrD8dy/jr2wQ+y LapC9jh+o0ERubcKYzs1Vpi+ezAzSdweYBsi06JyEFViFmEYAPEgH87uXUCnHSF214 GDz3FExkv9CBV1uYmGFBwF7Jm80REmcy6grCdg9c= Authentication-Results: emagii.beebytevps.io; spf=pass (sender IP is 84.55.68.216) smtp.mailfrom=binutils@emagii.com smtp.helo=valinor.ownit.se Received-SPF: pass (emagii.beebytevps.io: connection is authenticated) From: binutils@emagii.com To: binutils@sourceware.org Cc: nickc@redhat.com Subject: [PATCH v4 0/5 Add support for CRC64 generation in linker Date: Sun, 19 Feb 2023 20:45:44 +0100 Message-Id: <20230219194549.22554-1-binutils@emagii.com> X-Mailer: git-send-email 2.17.1 X-PPP-Message-ID: <167683595609.666991.3547525978459245381@localhost.localdomain> X-PPP-Vhost: emagii.com X-Spam-Status: No, score=-6.5 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,SPF_HELO_FAIL,SPF_PASS,TXREP autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: Fourth patchset. Get rid of binaries in testsuite. Here is the third patchset for introducing CRC64 generation. This has focused on supporting maintainability of the feature. In order to do so, CRC32 generation has been introduced to detect issues when extending the linker with another algoritm for checking integrity of the image. This will simplify adding other algorithms like SHA algoritms in the future. In addition, the TIMESTAMP command is used to store the current time in seconds since Epoch is stored in the image. The main routine for calculating CRCs has been broken down in subroutines which allow other algorithms. An algorithm typically needs *init__tab( poly ) calc__inv( const unsigned char *input_str, size_t num_bytes ); calc_ ( const unsigned char *input_str, size_t num_bytes ); void lang_add__syndrome(bool invert, bfd_vma poly) void lang_add__table(void) The common functions are: * bool get_text_section_contents(void) This reads the '.text' section and its contents Pointers are stored in the global variables asection *text_section char *text_contents * bool set_crc_checksum(bfd_vma crc, bfd_vma addr, bfd_vma size) Stores the CRC at the index addr. The size of the CRC in bytes is specified. Storing something larger that 64-bit is not supported here. * bool symbol_lookup(char *name, bfd_vma *val) Gets the value of a symbol into 'val'. Returns false if not found. To add CRC32 support means adding the following commands * CRC32 CRC32 '(' crc_start ',' crc_end ')' * CRC32 POLY '[' mustbe_exp ']' '(' crc_start ',' crc_end ')' * CRC32 POLYI '[' mustbe_exp ']' '(' crc_start ',' crc_end ')' ================ Here is the second patchset for introducing CRC64 generation in the linker This is mainly looking at indentation and whitespace errors. The patches applies cleanly without whitespace error except for the last patch which contains the testsuite. When the contents of .text is printed out, sometimes the last byte of a line in the CRC table is a space. This is reported as a whitespace error. Supports the following new linker commands: * CRC64 ECMA '(' crc_start ',' crc_end ')' * CRC64 ISO '(' crc_start ',' crc_end ')' * CRC64 POLY '[' mustbe_exp ']' '(' crc_start ',' crc_end ')' * CRC64 POLYI '[' mustbe_exp ']' '(' crc_start ',' crc_end ')' * CRC64 TABLE ECMA == 0x42F0E1EBA9EA3693 ISO == 0xD800000000000000 POLY == Allows your own polynome POLYI == Allows your own polynome, with inversion during calc The CRC is calculated from crc_start to crc_end (not included) The "CRC64 command * Allows specifying the polynom (ECMA(default), ISO or your own) * Allows for inversion in the CRC calculation (CRC64-WE) * Allows specifying the area that should be checked. * reserves room for the CRC (8 bytes) * Declares a symbol ___CRC64___ for the address of the CRC. * Declares a symbol ___CRC64_START___ for the first address of the checked area * Declares a symbol ___CRC64_END___ for the first address after the checked area The symbols names are declared in "checksum.h". If the names are unsuitable, it is easy to change. The CRC TABLE command This is used to speed up the CRC calculation. * Creates a 2kB table which speeds up the CRC calculation * Can insert the 2kB table into the .text section at current location. * Declares a symbol ___CRC64_TABLE___ if the table is inserted. Comments on the code: The process of calculation involves: * Check if CRC is requested * Validation of CRC prerequisites * get .text section * get .text section contents * calculate CRC over the area * insert the CRC in the correct location ==================================== This version also supports the * DEBUG ON * DEBUG OFF turning on/off yydebug I find it useful for debugging the build, but it can easly be removed. This patch contains a lot of debug output, that is enabled by #define DEBUG_CRC 1 This should be removed in the final version. The ld.texi stuff needs some more work. Not very experienced with that. Added an entry in NEWS Added 4 test cases for the different CRC64 polynome commands. All testcases generate a CRC table. The code is using the libcrc released under an MIT license found in * https://www.libcrc.org/ * https://github.com/lammertb/libcrc/tree/v2.0 Author: Lammert Bies A license for libcrc is added to the patch. [PATCH v4 1/5] CRC64 commands documentation [PATCH v4 2/5] CRC64 testsuite [PATCH v4 3/5] ldlex.l: CRC64 [PATCH v4 4/5] ldgram.y: CRC64 [PATCH v4 5/5] Calculate CRC64 over the .text area