From: Jiong Wang <jiong.wang@foss.arm.com>
To: Jakub Jelinek <jakub@redhat.com>
Cc: gcc-patches <gcc-patches@gcc.gnu.org>,
gdb-patches@sourceware.org, Binutils <binutils@sourceware.org>,
"Richard Earnshaw (lists)" <Richard.Earnshaw@arm.com>
Subject: Re: [1/9][RFC][DWARF] Reserve three DW_OP numbers in vendor extension space
Date: Tue, 15 Nov 2016 16:00:00 -0000 [thread overview]
Message-ID: <e69bcade-9596-7679-ebfe-d0c56e24f8b5@foss.arm.com> (raw)
In-Reply-To: <20161111193859.GJ3541@tucnak.redhat.com>
On 11/11/16 19:38, Jakub Jelinek wrote:
> On Fri, Nov 11, 2016 at 06:21:48PM +0000, Jiong Wang wrote:
>> This patch introduces three AARCH64 private DWARF operations in vendor extension
>> space.
>>
>> DW_OP_AARCH64_pauth 0xea
>> ===
>> Takes one unsigned LEB 128 Pointer Authentication Description. Bits [3:0] of
>> the description contain the Authentication Action Code. All unused bits are
>> initialized to 0. The operation then proceeds according to the value of the
>> action code as described in the Action Code Table.
>>
>> DW_OP_AARCH64_paciasp 0xeb
>> ===
>> Authenticates the contents in X30/LR register as per A key for instruction
>> pointer using current CFA as salt. The result is pushed onto the stack.
>>
>> DW_OP_AARCH64_paciasp_deref 0xec
>> ===
>> Takes one signed LEB128 offset and retrieves 8-byte contents from the address
>> calculated by CFA plus this offset, the contents then authenticated as per A
>> key for instruction pointer using current CFA as salt. The result is pushed
>> onto the stack.
> I'd like to point out that especially the vendor range of DW_OP_* is
> extremely scarce resource, we have only a couple of unused values, so taking
> 3 out of the remaining unused 12 for a single architecture is IMHO too much.
> Can't you use just a single opcode and encode which of the 3 operations it is
> in say the low 2 bits of a LEB 128 operand?
> We'll likely need to do RSN some multiplexing even for the generic GNU
> opcodes if we need just a few further ones (say 0xff as an extension,
> followed by uleb128 containing the opcode - 0xff).
> In the non-vendor area we still have 54 values left, so there is more space
> for future expansion.
>
> Jakub
Seperate DWARF operations are introduced instead of combining all of them into
one are mostly because these operations are going to be used for most of the
functions once return address signing are enabled, and they are used for
describing frame unwinding that they will go into unwind table for C++ program
or C program compiled with -fexceptions, the impact on unwind table size is
significant. So I was trying to lower the unwind table size overhead as much as
I can.
IMHO, three numbers actually is not that much for one architecture in DWARF
operation vendor extension space as vendors can overlap with each other. The
only painful thing from my understand is there are platform vendors, for example
"GNU" and "LLVM" etc, for which architecture vendor can't overlap with.
In include/dwarf2.def, I saw DW_OP_GNU* has reserved 13, DW_OP_HP* has reserved
7 and DW_OP_PGI has reserved 1.
So for an alternative approach, can these AArch64 extensions overlap and reuse
those numbers reserved for DW_OP_HP* ? for example 0xe4, 0xe5, 0xe6. I am even
thinking GNU toolchain makes the 8 numbers reserved by existed DW_OP_HP* and
DW_OP_SGI* as architecture vendor area and allow multiplexing on them for
different architectures. This may offer more flexibilities for architecture
vendors.
Under current code base, my search shows the overlap should be safe inside
GCC/GDB and we only needs minor disassemble tweak in Binutils.
Thanks.
Regards,
Jiong
next prev parent reply other threads:[~2016-11-15 16:00 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <c9da17a6-c3de-4466-c023-4e4ddbe38efb@foss.arm.com>
2016-11-11 18:22 ` Jiong Wang
2016-11-11 19:39 ` Jakub Jelinek
2016-11-15 16:00 ` Jiong Wang [this message]
2016-11-15 16:18 ` Jakub Jelinek
2016-11-15 16:48 ` Jiong Wang
2016-11-15 19:25 ` Richard Earnshaw (lists)
2016-11-16 10:00 ` Jiong Wang
[not found] ` <1479304496.14569.256.camel@redhat.com>
2016-11-16 14:02 ` Jakub Jelinek
2016-11-30 11:15 ` Jiong Wang
2016-11-30 18:25 ` Yao Qi
2016-12-12 13:40 ` [Ping~][1/9][RFC][DWARF] " Jiong Wang
2016-12-19 13:59 ` [Ping^2][1/9][RFC][DWARF] " Jiong Wang
2016-12-28 18:21 ` [Ping^3][1/9][RFC][DWARF] " Jiong Wang
2016-12-28 19:54 ` [1/9][RFC][DWARF] " Cary Coutant
2017-01-03 9:32 ` Jiong Wang
2017-01-03 10:10 ` Jiong Wang
2017-01-03 10:57 ` Yao Qi
2017-01-03 15:21 ` Nick Clifton
2017-01-03 17:47 ` Yao Qi
2016-11-30 21:44 ` Cary Coutant
2016-12-01 10:42 ` Richard Earnshaw (lists)
2016-12-01 11:09 ` Jiong Wang
2016-11-15 16:51 ` Jiong Wang
2016-12-28 19:48 ` Cary Coutant
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=e69bcade-9596-7679-ebfe-d0c56e24f8b5@foss.arm.com \
--to=jiong.wang@foss.arm.com \
--cc=Richard.Earnshaw@arm.com \
--cc=binutils@sourceware.org \
--cc=gcc-patches@gcc.gnu.org \
--cc=gdb-patches@sourceware.org \
--cc=jakub@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox