From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wm1-x333.google.com (mail-wm1-x333.google.com [IPv6:2a00:1450:4864:20::333]) by sourceware.org (Postfix) with ESMTPS id 26823385735A for ; Mon, 11 Dec 2023 13:10:13 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 26823385735A Authentication-Results: sourceware.org; dmarc=pass (p=quarantine dis=none) header.from=suse.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=suse.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 26823385735A Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2a00:1450:4864:20::333 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1702300216; cv=none; b=keZ3ea6oUJAXUyPN5zCeKTwQgBiQB4ImDDJos+vHB+CYZogrhKb9iQ3FdvZFRMc91KBQIlJ8hiugPOPJrYfhue6Mhwp/KmN4/3Gxvd7UtXWeAFySg/FSvzgw0VnUG6N1pPhLYzCQ4w6VK2AIjk3KHV1vHCIICOt1NIoaN64ltyk= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1702300216; c=relaxed/simple; bh=5BxyDWz3RgODbE2iUeOi+0i9GZIOAZlss5oMN6+C+3A=; h=DKIM-Signature:Message-ID:Date:MIME-Version:Subject:From:To; b=JG5+/DNmCCIZ76m4DfhsWnoJCztkU2ha1ncUxHqDrLoEmQ+ktL2bewZ8WwrfjYVcq7y1YXzDZlI980zbGiQCYXNy+FLPyZq9M/zbFx6g36p3jS2x4XF5XufuAqBBfDpG/2mYKjAjdilyfSiG5dBcknX1q8KtQTQvy7pGe3mfGBE= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-wm1-x333.google.com with SMTP id 5b1f17b1804b1-40c41b43e1eso17006845e9.1 for ; Mon, 11 Dec 2023 05:10:13 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=google; t=1702300212; x=1702905012; darn=sourceware.org; h=content-transfer-encoding:in-reply-to:autocrypt:references:cc:to :from:content-language:subject:user-agent:mime-version:date :message-id:from:to:cc:subject:date:message-id:reply-to; bh=9mEMcMc4MzHxZZFPrA4O742B7xGCp+7sU94WvgFFgOg=; b=Wj9J25DSZx+5t8h2PcB9HPPW0WiGLlu51TiEpcjAwKmpdmFkraBDGFCE7MnFv6xp+X iew6EpfsYVOF/MPfU4fgd06dsiYKO4SZzXxUeACGnLKahvncmcrgVA7w3u+GHFaUgWOm gRKAh0UNPOMmk4QEQJiOsQUYWHr6YdDJ2yIKjfel82hz/PqnE+oX/8YQxwzatDjt4Nr0 SnO6lnNhZK+qVRc9xSdaO0q6cRY0FOLNMcPw2eXN4E7s0jb3Lh03UreXZBSgIITKLAoY P1H9Mm8kU5jdU7r8SIa1hXsgWZJvBneWeRv6ost1GQfKfZJYBVbDZHoInaMB42SgG+Rt GiWQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1702300212; x=1702905012; h=content-transfer-encoding:in-reply-to:autocrypt:references:cc:to :from:content-language:subject:user-agent:mime-version:date :message-id:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=9mEMcMc4MzHxZZFPrA4O742B7xGCp+7sU94WvgFFgOg=; b=Onvl30xx+rWiYEAD3WRNDu4Mg21F1Bbg1SjQ9vMJfor8Wlf1NzOQctENjRjaxWEIMw fmzUGd2wtKX2wlp5y2e0RqHEAxpBy+KF+Ua/GZouZH0ehLOhTfkMQBunLS+ChS36Wj+A kXiv8iXzvTHs7D3FPEj3nbdR2pbPBz0dxcoeaDRUY1PsWIOTVyn/0MYEZOVKkqFELBbz JkH0FgdNn5SZEXRk6bWLwA6n967HclWyrC5kHXGW2JxRuZM4vpaoPhA8q3cxUhM+alOi IRNtkeLI6oGs7Jy7To9ho5XicBz0zDsI73x+7K55zMVZSNOVXJQJ57gMsiETwlq36rlV 3kLg== X-Gm-Message-State: AOJu0YwnLWh7BG+ABRpCxotI4mzQL9NEAs4hMhuKR6yaSENdrww977EK oEFLt6h2ab/vh16vDq/OfA/Pu1RbJjsJthicPh18 X-Google-Smtp-Source: AGHT+IF0Quw2ZtqjD1jVH9gKoO2zhwyN1YCaRglH21pGQxh5DibxxqX1PsbvVJR0ZKhfWKeigmt0LA== X-Received: by 2002:a1c:4c16:0:b0:40c:513:eae4 with SMTP id z22-20020a1c4c16000000b0040c0513eae4mr1976493wmf.44.1702300211971; Mon, 11 Dec 2023 05:10:11 -0800 (PST) Received: from [10.156.60.236] (ip-037-024-206-209.um08.pools.vodafone-ip.de. [37.24.206.209]) by smtp.gmail.com with ESMTPSA id he10-20020a05600c540a00b0040b3829eb50sm12829168wmb.20.2023.12.11.05.10.11 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 11 Dec 2023 05:10:11 -0800 (PST) Message-ID: Date: Mon, 11 Dec 2023 14:10:11 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: [PATCH v2 4/4] x86: last-insn recording should be per-subsection Content-Language: en-US From: Jan Beulich To: Binutils Cc: "H.J. Lu" References: <25484cfc-e9d3-4b6b-968d-7642ae53301d@suse.com> Autocrypt: addr=jbeulich@suse.com; keydata= xsDiBFk3nEQRBADAEaSw6zC/EJkiwGPXbWtPxl2xCdSoeepS07jW8UgcHNurfHvUzogEq5xk hu507c3BarVjyWCJOylMNR98Yd8VqD9UfmX0Hb8/BrA+Hl6/DB/eqGptrf4BSRwcZQM32aZK 7Pj2XbGWIUrZrd70x1eAP9QE3P79Y2oLrsCgbZJfEwCgvz9JjGmQqQkRiTVzlZVCJYcyGGsD /0tbFCzD2h20ahe8rC1gbb3K3qk+LpBtvjBu1RY9drYk0NymiGbJWZgab6t1jM7sk2vuf0Py O9Hf9XBmK0uE9IgMaiCpc32XV9oASz6UJebwkX+zF2jG5I1BfnO9g7KlotcA/v5ClMjgo6Gl MDY4HxoSRu3i1cqqSDtVlt+AOVBJBACrZcnHAUSuCXBPy0jOlBhxPqRWv6ND4c9PH1xjQ3NP nxJuMBS8rnNg22uyfAgmBKNLpLgAGVRMZGaGoJObGf72s6TeIqKJo/LtggAS9qAUiuKVnygo 3wjfkS9A3DRO+SpU7JqWdsveeIQyeyEJ/8PTowmSQLakF+3fote9ybzd880fSmFuIEJldWxp Y2ggPGpiZXVsaWNoQHN1c2UuY29tPsJgBBMRAgAgBQJZN5xEAhsDBgsJCAcDAgQVAggDBBYC AwECHgECF4AACgkQoDSui/t3IH4J+wCfQ5jHdEjCRHj23O/5ttg9r9OIruwAn3103WUITZee e7Sbg12UgcQ5lv7SzsFNBFk3nEQQCACCuTjCjFOUdi5Nm244F+78kLghRcin/awv+IrTcIWF hUpSs1Y91iQQ7KItirz5uwCPlwejSJDQJLIS+QtJHaXDXeV6NI0Uef1hP20+y8qydDiVkv6l IreXjTb7DvksRgJNvCkWtYnlS3mYvQ9NzS9PhyALWbXnH6sIJd2O9lKS1Mrfq+y0IXCP10eS FFGg+Av3IQeFatkJAyju0PPthyTqxSI4lZYuJVPknzgaeuJv/2NccrPvmeDg6Coe7ZIeQ8Yj t0ARxu2xytAkkLCel1Lz1WLmwLstV30g80nkgZf/wr+/BXJW/oIvRlonUkxv+IbBM3dX2OV8 AmRv1ySWPTP7AAMFB/9PQK/VtlNUJvg8GXj9ootzrteGfVZVVT4XBJkfwBcpC/XcPzldjv+3 HYudvpdNK3lLujXeA5fLOH+Z/G9WBc5pFVSMocI71I8bT8lIAzreg0WvkWg5V2WZsUMlnDL9 mpwIGFhlbM3gfDMs7MPMu8YQRFVdUvtSpaAs8OFfGQ0ia3LGZcjA6Ik2+xcqscEJzNH+qh8V m5jjp28yZgaqTaRbg3M/+MTbMpicpZuqF4rnB0AQD12/3BNWDR6bmh+EkYSMcEIpQmBM51qM EKYTQGybRCjpnKHGOxG0rfFY1085mBDZCH5Kx0cl0HVJuQKC+dV2ZY5AqjcKwAxpE75MLFkr wkkEGBECAAkFAlk3nEQCGwwACgkQoDSui/t3IH7nnwCfcJWUDUFKdCsBH/E5d+0ZnMQi+G0A nAuWpQkjM1ASeQwSHEeAWPgskBQL In-Reply-To: <25484cfc-e9d3-4b6b-968d-7642ae53301d@suse.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-Spam-Status: No, score=-3026.4 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS,TXREP,T_SCC_BODY_TEXT_LINE 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: Otherwise intermediate subsection switches result in inconsistent behavior. Leverage ELF's section change hook to switch state as necessary, limiting overhead to the bare minimum when subsections aren't used. --- a/gas/config/tc-i386.c +++ b/gas/config/tc-i386.c @@ -15920,6 +15920,39 @@ i386_elf_section_type (const char *str, return -1; } +void +i386_elf_section_change_hook (void) +{ + struct i386_segment_info *info = &seg_info(now_seg)->tc_segment_info_data; + struct i386_segment_info *curr, *prev; + + if (info->subseg == now_subseg) + return; + + /* Find the (or make a) list entry to save state into. */ + for (prev = info; (curr = prev->next) != NULL; prev = curr) + if (curr->subseg == info->subseg) + break; + if (!curr) + { + curr = XNEW (struct i386_segment_info); + curr->subseg = info->subseg; + curr->next = NULL; + prev->next = curr; + } + curr->last_insn = info->last_insn; + + /* Find the list entry to load state from. */ + for (curr = info->next; curr; curr = curr->next) + if (curr->subseg == now_subseg) + break; + if (curr) + info->last_insn = curr->last_insn; + else + memset (&info->last_insn, 0, sizeof (info->last_insn)); + info->subseg = now_subseg; +} + #ifdef TE_SOLARIS void i386_solaris_fix_up_eh_frame (segT sec) --- a/gas/config/tc-i386.h +++ b/gas/config/tc-i386.h @@ -294,6 +294,8 @@ struct i386_segment_info { last_insn_prefix } kind; } last_insn; + subsegT subseg; + struct i386_segment_info *next; }; #define TC_SEGMENT_INFO_TYPE struct i386_segment_info @@ -395,6 +397,9 @@ extern void tc_x86_frame_initial_instruc #define md_elf_section_type(str,len) i386_elf_section_type (str, len) extern int i386_elf_section_type (const char *, size_t); +#define md_elf_section_change_hook i386_elf_section_change_hook +extern void i386_elf_section_change_hook (void); + #ifdef TE_SOLARIS #define md_fix_up_eh_frame(sec) i386_solaris_fix_up_eh_frame (sec) extern void i386_solaris_fix_up_eh_frame (segT); --- a/gas/testsuite/gas/i386/i386.exp +++ b/gas/testsuite/gas/i386/i386.exp @@ -745,6 +745,8 @@ if [gas_32_check] then { run_dump_test "nop-6" run_dump_test "unique" + run_dump_test "lfence-subsect" + run_dump_test "property-1" if {[istarget "*-*-linux*"]} then { --- /dev/null +++ b/gas/testsuite/gas/i386/lfence-subsect.d @@ -0,0 +1,18 @@ +#as: -mlfence-before-indirect-branch=all +#warning_output: lfence-section.e +#objdump: -dw +#name: -mlfence-before-indirect-branch=all w/ subsection switches + +.*: +file format .* + +Disassembly of section .text: + +0+ <_start>: + +[a-f0-9]+: f3 ff d0 repz call \*%eax + +[a-f0-9]+: f3 c3 repz ret + +[a-f0-9]+: cc int3 + +[a-f0-9]+: cc int3 + +[a-f0-9]+: cc int3 + +0+8 : +#pass --- /dev/null +++ b/gas/testsuite/gas/i386/lfence-subsect.s @@ -0,0 +1,19 @@ + .text +_start: + rep + + .subsection 2 +aux1: + nop + + .previous + call *%eax + rep + + .pushsection .text, 2 +aux2: + nop + + .popsection + ret + .p2align 2, 0xcc