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 31BE03858296 for ; Thu, 2 Mar 2023 23:12:17 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 31BE03858296 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 A0D9A120190; Fri, 3 Mar 2023 00:12:10 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=emagii.com; s=default; t=1677798736; bh=utV2Uj/zGrDIZE8YPuoJ7imvHbgQH+kT2YntNqCOx5o=; h=From:To:Subject; b=yyXjHcz6Sk5sW0QlG9lJS3xcB0mTfyw/swgTWMPW4BdX8xdWbe40OmUUa601u6YJD 6K5WwCB/G4NJ3I3cAeI92dbEkb+Rk4V28w7t2GVbiqP1q/M7OFnB8kKGdcadmbHTyE iMHHbsneKY5WcjpgWT7nA0tNwQvAr4ADCW0sorYU= 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 v10 06/11] DIGEST: ldgram.y Date: Fri, 3 Mar 2023 00:10:46 +0100 Message-Id: <20230302231051.1928782-7-binutils@emagii.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230302231051.1928782-1-binutils@emagii.com> References: <20230302231051.1928782-1-binutils@emagii.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-PPP-Message-ID: <167779873463.1212517.84501930952582324@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 Signed-off-by: Ulf Samuelsson --- ld/ldgram.y | 65 ++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 64 insertions(+), 1 deletion(-) diff --git a/ld/ldgram.y b/ld/ldgram.y index faffeec94b8..516aec257ab 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,35 @@ statement: { lang_add_fill ($3); } + | DIGEST NAME + { /* CRC_ADDRESS is set in , but polynome reserves space, so we use a temporary */ + digest_label = lang_get_label($2, &digest_big_endian); + lang_add_assignment (exp_assign (digest_label, exp_nameop (NAME, "."), false)); + } + polynome '(' mustbe_exp ',' mustbe_exp ')' + { + if (polynome_valid) + { + lang_add_assignment (exp_assign (CRC_ADDRESS, exp_nameop (NAME, digest_label), false)); + lang_add_assignment (exp_assign (CRC_START, $6, false)); + lang_add_assignment (exp_assign (CRC_END, $8, false)); + } + } + | DIGEST TABLE NAME + { + bool big_endian; + const char *label = lang_get_label($3, &big_endian); + lang_add_assignment (exp_assign (label, exp_nameop (NAME,"."), false)); + lang_add_digest_table (big_endian); + } + | DIGEST SECTION NAME + { + lang_set_digest_section ($3); + } + | TIMESTAMP + { + lang_add_timestamp (); + } | ASSERT_K { ldlex_expression (); } '(' exp ',' NAME ')' separator @@ -689,13 +722,43 @@ 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 + { + polynome_valid = lang_set_digest($1); + } + | POLY '(' mustbe_exp ',' + mustbe_exp ',' mustbe_exp ',' mustbe_exp ',' + mustbe_exp ',' mustbe_exp ',' mustbe_exp ')' + { + lang_add_digest ( + $3->value.value, /* size */ + $5->value.value, /* polynome */ + $7->value.value, /* initial value */ + $9->value.value, /* xor value */ + $11->value.value, /* input reflected */ + $13->value.value, /* output reflected */ + $15->value.value /* reciprocal */ + ); + polynome_valid = true; + } + statement_list: statement_list statement | statement -- 2.34.1