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 E421D38515EC for ; Wed, 22 Feb 2023 16:17:18 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org E421D38515EC 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 3FFD312029E; Wed, 22 Feb 2023 17:17:14 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=emagii.com; s=default; t=1677082637; bh=w2mTB/RnzYzw0U8ega7g14qDShVz0EiIzNTrcru+AoY=; h=From:To:Subject; b=kR2hyaqZ3BdObL2kJnZwsATQwJ27oYzrcUjRPpCGPyZ3gyhiOaN/dyr0QpCuUgkLF O0E1bWSlybcy01mBj5Hz1u9acfPwEDkz1jloUKiHInSGIs0uht5wzsGt72v3vjgmib J6EZRY/Eb9EEXvSezlOm579ITBHmSOUUGNyKIoUI= 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, Ulf Samuelsson Subject: [PATCH v5 06/10] DIGEST: ldgram.y Date: Wed, 22 Feb 2023 17:16:05 +0100 Message-Id: <20230222161609.239928-7-binutils@emagii.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230222161609.239928-1-binutils@emagii.com> References: <20230222161609.239928-1-binutils@emagii.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-PPP-Message-ID: <167708263666.2544580.2539583769537494383@localhost.localdomain> X-PPP-Vhost: emagii.com X-Spam-Status: No, score=-12.5 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,GIT_PATCH_0,SPF_HELO_FAIL,SPF_PASS,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 List-Id: From: Ulf Samuelsson Parse the following commands DIGEST "NAME" (start, end) DIGEST POLY (size, polynome) (start, end) DIGEST POLYI (size, polynome) (start, end) DIGEST TABLE DIGEST SECTION "NAME" TIMESTAMP DEBUG ON DEBUG OFF Signed-off-by: Ulf Samuelsson --- ld/ldgram.y | 48 +++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 47 insertions(+), 1 deletion(-) diff --git a/ld/ldgram.y b/ld/ldgram.y index faffeec94b8..2d752e52b6d 100644 --- a/ld/ldgram.y +++ b/ld/ldgram.y @@ -41,6 +41,7 @@ #include "mri.h" #include "ldctor.h" #include "ldlex.h" +#include "lddigest.h" #ifndef YYDEBUG #define YYDEBUG 1 @@ -130,6 +131,9 @@ static int error_index; %token DATA_SEGMENT_ALIGN DATA_SEGMENT_RELRO_END DATA_SEGMENT_END %token SORT_BY_NAME SORT_BY_ALIGNMENT SORT_NONE %token SORT_BY_INIT_PRIORITY +%token DIGEST POLY POLYI TABLE SECTION +%token TIMESTAMP +%token DEBUG ON OFF %token '{' '}' %token SIZEOF_HEADERS OUTPUT_FORMAT FORCE_COMMON_ALLOCATION OUTPUT_ARCH %token INHIBIT_COMMON_ALLOCATION FORCE_GROUP_ALLOCATION @@ -668,7 +672,7 @@ statement: { lang_add_data ((int) $1, $3); } - | ASCII '(' mustbe_exp ')' NAME + | ASCII '(' mustbe_exp ')' NAME { /* 'value' is a memory leak, do we care? */ etree_type *value = $3; @@ -682,6 +686,25 @@ statement: { lang_add_fill ($3); } + | DIGEST polynome '(' mustbe_exp ',' mustbe_exp ')' + { + lang_add_assignment (exp_assign (CRC_ADDRESS, exp_nameop (NAME,"."), false)); + lang_add_assignment (exp_assign (CRC_START, $4, false)); + lang_add_assignment (exp_assign (CRC_END, $6, false)); + } + | DIGEST TABLE + { + lang_add_assignment (exp_assign (CRC_TABLE, exp_nameop (NAME,"."), false)); + lang_add_digest_table (); + } + | DIGEST SECTION NAME + { + lang_set_digest_section ($3); + } + | TIMESTAMP + { + lang_add_timestamp (); + } | ASSERT_K { ldlex_expression (); } '(' exp ',' NAME ')' separator @@ -689,13 +712,36 @@ statement: ldlex_popstate (); lang_add_assignment (exp_assert ($4, $6)); } + | DEBUG ON + { + yydebug = 1; + } + | DEBUG OFF + { + yydebug = 0; + } | INCLUDE filename { ldfile_open_command_file ($2); } + statement_list_opt END ; +polynome: + NAME + { + lang_set_digest($1); + } + | POLY '(' mustbe_exp ',' mustbe_exp ')' + { + lang_add_digest (false, $3->value.value, $5->value.value); + } + | POLYI '(' mustbe_exp ',' mustbe_exp ')' + { + lang_add_digest (true, $3->value.value, $5->value.value); + } + statement_list: statement_list statement | statement -- 2.34.1