From patchwork Mon Mar 6 13:31:53 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ulf Samuelsson X-Patchwork-Id: 64655 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:5915:0:0:0:0:0 with SMTP id v21csp1843619wrd; Mon, 6 Mar 2023 05:35:48 -0800 (PST) X-Google-Smtp-Source: AK7set/lCwkt+8kiiG65rnMBl5n0fllnDxCxbokeN+zm7CUAZi8y/m4REBcgcW5Nqt6RwUfzE7Pt X-Received: by 2002:a17:906:40d7:b0:871:d59d:4f54 with SMTP id a23-20020a17090640d700b00871d59d4f54mr11365158ejk.27.1678109748354; Mon, 06 Mar 2023 05:35:48 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1678109748; cv=none; d=google.com; s=arc-20160816; b=QXeb8NYSiWxZOjume5Zoymi8etBc5Whtcic6bFYDT2e8KUywfIxC5UZs5daN7eXvHo DWTi1777Q8nP+hOF7s2MTYWY0Sw9LBmvPoHdmAFzXaws2zYwOqsPtPzXrPBCgz5dHUVJ zb8Cur6ac6wzEkMrsxlRVm2EcHtk5D2EyooBbiyf+HEe/aX0CodslOqEmjoMwI9SxNIZ Hf6agZ+9EvKuZ52m41NayWmJS8/OqtAW4RMR9IJ5Tcu9LLi93pcFYURKuCrT17OxfOTc lzharh4c7E1mICb64SvxFujxnLfhRu8pj0HRY+ynwMDKRjeLp72JABWSjRzdvx/0TwIL QuUA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:reply-to:from:list-subscribe:list-help:list-post :list-archive:list-unsubscribe:list-id:precedence :content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:dmarc-filter:delivered-to :dkim-signature:dkim-filter; bh=nxqpnSjp/GT/bu8/8I+Bnh1QxNBn1GGc8PRchan+IMY=; b=hHSVDonZryDp+czCJdm4bDj5Rc5vZgILvljcTkjdGLeXXisybdqUSGTqQO6137lr0S Dn18yKxHhyc1s2VZUwa7iXabpSWnqqvH3v7nde1igtXEZF90E5G6dtqmVkGfrG7dUNLW G748ht0ICWFQyvzzAqXim9ij6/Ln7UKbzasiHio/TYzX8GO9aCawxO8aVGZ+iUFk8DzL XKQ4z4CMMYm4SWGaTyRAoAGLpLeCaMmIWdpPOgFT56L53ktlA3ylXUEXKPNG+qkOq1D3 YaTHgVLtlamZoD3n6dR42bkhvgKZfB5A6km8cUHQjgeejgPjdUKxWqDHljVBj2ZsqFag pnFQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@sourceware.org header.s=default header.b=Y4P+CWHe; spf=pass (google.com: domain of binutils-bounces+ouuuleilei=gmail.com@sourceware.org designates 2620:52:3:1:0:246e:9693:128c as permitted sender) smtp.mailfrom="binutils-bounces+ouuuleilei=gmail.com@sourceware.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=sourceware.org Received: from sourceware.org (server2.sourceware.org. [2620:52:3:1:0:246e:9693:128c]) by mx.google.com with ESMTPS id v23-20020a17090606d700b008e01fdef87fsi10112566ejb.831.2023.03.06.05.35.48 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 06 Mar 2023 05:35:48 -0800 (PST) Received-SPF: pass (google.com: domain of binutils-bounces+ouuuleilei=gmail.com@sourceware.org designates 2620:52:3:1:0:246e:9693:128c as permitted sender) client-ip=2620:52:3:1:0:246e:9693:128c; Authentication-Results: mx.google.com; dkim=pass header.i=@sourceware.org header.s=default header.b=Y4P+CWHe; spf=pass (google.com: domain of binutils-bounces+ouuuleilei=gmail.com@sourceware.org designates 2620:52:3:1:0:246e:9693:128c as permitted sender) smtp.mailfrom="binutils-bounces+ouuuleilei=gmail.com@sourceware.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 40CBA384F485 for ; Mon, 6 Mar 2023 13:34:28 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 40CBA384F485 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1678109668; bh=nxqpnSjp/GT/bu8/8I+Bnh1QxNBn1GGc8PRchan+IMY=; h=To:Cc:Subject:Date:In-Reply-To:References:List-Id: List-Unsubscribe:List-Archive:List-Post:List-Help:List-Subscribe: From:Reply-To:From; b=Y4P+CWHeHyEuqsB8ZAG8x1dPyHStspnh9886nnWer8/QQqbU2tCvUgShDVnTHkIR5 bs0w76O62T+Dk0CChUnuEwpznlCO7dvsnGYKdK0zQPtLT0h5/uiq6/U7A4MCsc9off 5i6g64UAspQw5BRs0JxIyjj7Xhor1v1X5HTxcBKY= X-Original-To: binutils@sourceware.org Delivered-To: binutils@sourceware.org Received: from emagii.se (www.emagii.com [185.133.207.17]) by sourceware.org (Postfix) with ESMTPS id 43584385B525 for ; Mon, 6 Mar 2023 13:32:19 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 43584385B525 Received: from valinor.ownit.se (84-55-68-216.customers.ownit.se [84.55.68.216]) by emagii.se (Postfix) with ESMTPSA id BF58E12020B; Mon, 6 Mar 2023 14:32:17 +0100 (CET) Received-SPF: pass (emagii.beebytevps.io: connection is authenticated) To: binutils@sourceware.org Cc: nickc@redhat.com, Ulf Samuelsson Subject: [PATCH v12 06/11] DIGEST: ldgram.y Date: Mon, 6 Mar 2023 14:31:53 +0100 Message-Id: <20230306133158.91917-7-binutils@emagii.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230306133158.91917-1-binutils@emagii.com> References: <20230306133158.91917-1-binutils@emagii.com> MIME-Version: 1.0 X-PPP-Message-ID: <167810953813.340196.4401387464734625503@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 X-BeenThere: binutils@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Binutils mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Ulf Samuelsson via Binutils From: Ulf Samuelsson Reply-To: binutils@emagii.com Errors-To: binutils-bounces+ouuuleilei=gmail.com@sourceware.org Sender: "Binutils" X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1759625607388663178?= X-GMAIL-MSGID: =?utf-8?q?1759625607388663178?= 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 26e56fe1566..ea0c569279a 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 +%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; @@ -685,6 +689,31 @@ 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); + } + | TIMESTAMP + { + lang_add_timestamp (); + } | ASSERT_K { ldlex_expression (); } '(' exp ',' NAME ')' separator @@ -692,13 +721,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