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 77B82385087D for ; Wed, 1 Mar 2023 15:46:07 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 77B82385087D 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 031331204E4; Wed, 1 Mar 2023 16:46:01 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=emagii.com; s=default; t=1677685566; bh=xGamQeEnLS/foHCu3zWZDhxjkS+4IiovWdjb7h5zS4U=; h=From:To:Subject; b=sCs7fmY2CGguBfU1LIYjllk+qJ9OqBVXWrvwGaw+w2vN6INh/W4/PjtxbDmZPd9RC AanT6Xi9r98hDWslaROAqaOoE9PoQ9lMDv3HRQ6axRWyDcDlO1Xx66afiVUH3Au/NH ahedoS2A9ZH5FxZEPEqVmoyVQhslZS1o7k/MpJgs= 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 v7 06/11] DIGEST: ldgram.y Date: Wed, 1 Mar 2023 16:45:08 +0100 Message-Id: <20230301154513.1850449-7-binutils@emagii.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230301154513.1850449-1-binutils@emagii.com> References: <20230301154513.1850449-1-binutils@emagii.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-PPP-Message-ID: <167768556481.100508.18026801414450722063@localhost.localdomain> X-PPP-Vhost: emagii.com X-Spam-Status: No, score=-12.4 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 | 61 ++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 60 insertions(+), 1 deletion(-) diff --git a/ld/ldgram.y b/ld/ldgram.y index faffeec94b8..fcc47712b11 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,32 @@ 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 ')' + { + 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 +719,42 @@ 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 ',' 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 */ + ); + } + statement_list: statement_list statement | statement -- 2.34.1