Message ID | 896f9afab21b31d0e168e61eb8781d477bf3a7dd.1593612309.git.szabolcs.nagy@arm.com |
---|---|
State | New |
Headers | show |
Series | aarch64: branch protection support | expand |
On Wed, Jul 1, 2020 at 7:38 AM Szabolcs Nagy <szabolcs.nagy@arm.com> wrote: > > Using C code allows the compiler to add target specific object file > markings based on CFLAGS. > > The arm specific abi-note.S is removed and similar object file fix > up will be avoided on AArch64 with standard branch-prtection. > --- > csu/{abi-note.S => abi-note.c} | 23 +++++++++++++---------- > sysdeps/arm/abi-note.S | 8 -------- > 2 files changed, 13 insertions(+), 18 deletions(-) > rename csu/{abi-note.S => abi-note.c} (90%) > delete mode 100644 sysdeps/arm/abi-note.S > > diff --git a/csu/abi-note.S b/csu/abi-note.c > similarity index 90% > rename from csu/abi-note.S > rename to csu/abi-note.c > index 2b4b5f8824..db195c7ab7 100644 > --- a/csu/abi-note.S > +++ b/csu/abi-note.c > @@ -53,6 +53,8 @@ offset length contents > identify the earliest release of that OS that supports this ABI. > See abi-tags (top level) for details. */ > > +#include <link.h> > +#include <stdint.h> > #include <config.h> > #include <abi-tag.h> /* OS-specific ABI tag value */ > > @@ -60,13 +62,14 @@ offset length contents > name begins with `.note' and creates a PT_NOTE program header entry > pointing at it. */ > > - .section ".note.ABI-tag", "a" > - .p2align 2 > - .long 1f - 0f /* name length */ > - .long 3f - 2f /* data length */ > - .long 1 /* note type */ > -0: .asciz "GNU" /* vendor name */ > -1: .p2align 2 > -2: .long __ABI_TAG_OS /* note data: the ABI tag */ > - .long __ABI_TAG_VERSION > -3: .p2align 2 /* pad out section */ > +__attribute__ ((used, aligned (4), section (".note.ABI-tag"))) > +static const struct > +{ > + ElfW(Nhdr) nhdr; > + char name[4]; > + int32_t desc[4]; > +} __abi_tag = { > + { .n_namesz = 4, .n_descsz = 16, .n_type = 1 }, sizeof "GNU"? and sizeof desc? > + "GNU", > + { __ABI_TAG_OS, __ABI_TAG_VERSION } > +}; > diff --git a/sysdeps/arm/abi-note.S b/sysdeps/arm/abi-note.S > deleted file mode 100644 > index 07bd4c4619..0000000000 > --- a/sysdeps/arm/abi-note.S > +++ /dev/null > @@ -1,8 +0,0 @@ > -/* Tag_ABI_align8_preserved: This code preserves 8-byte > - alignment in any callee. */ > - .eabi_attribute 25, 1 > -/* Tag_ABI_align8_needed: This code may require 8-byte alignment from > - the caller. */ > - .eabi_attribute 24, 1 > - > -#include <csu/abi-note.S> > -- > 2.17.1 >
The 07/01/2020 07:41, H.J. Lu wrote: > On Wed, Jul 1, 2020 at 7:38 AM Szabolcs Nagy <szabolcs.nagy@arm.com> wrote: > > Using C code allows the compiler to add target specific object file > > markings based on CFLAGS. > > > > The arm specific abi-note.S is removed and similar object file fix > > up will be avoided on AArch64 with standard branch-prtection. > > --- > > csu/{abi-note.S => abi-note.c} | 23 +++++++++++++---------- > > sysdeps/arm/abi-note.S | 8 -------- > > 2 files changed, 13 insertions(+), 18 deletions(-) > > rename csu/{abi-note.S => abi-note.c} (90%) > > delete mode 100644 sysdeps/arm/abi-note.S > > > > diff --git a/csu/abi-note.S b/csu/abi-note.c > > similarity index 90% > > rename from csu/abi-note.S > > rename to csu/abi-note.c > > index 2b4b5f8824..db195c7ab7 100644 > > --- a/csu/abi-note.S > > +++ b/csu/abi-note.c > > @@ -53,6 +53,8 @@ offset length contents > > identify the earliest release of that OS that supports this ABI. > > See abi-tags (top level) for details. */ > > > > +#include <link.h> > > +#include <stdint.h> > > #include <config.h> > > #include <abi-tag.h> /* OS-specific ABI tag value */ > > > > @@ -60,13 +62,14 @@ offset length contents > > name begins with `.note' and creates a PT_NOTE program header entry > > pointing at it. */ > > > > - .section ".note.ABI-tag", "a" > > - .p2align 2 > > - .long 1f - 0f /* name length */ > > - .long 3f - 2f /* data length */ > > - .long 1 /* note type */ > > -0: .asciz "GNU" /* vendor name */ > > -1: .p2align 2 > > -2: .long __ABI_TAG_OS /* note data: the ABI tag */ > > - .long __ABI_TAG_VERSION > > -3: .p2align 2 /* pad out section */ > > +__attribute__ ((used, aligned (4), section (".note.ABI-tag"))) > > +static const struct > > +{ > > + ElfW(Nhdr) nhdr; > > + char name[4]; > > + int32_t desc[4]; > > +} __abi_tag = { > > + { .n_namesz = 4, .n_descsz = 16, .n_type = 1 }, > > sizeof "GNU"? and sizeof desc? i can do { .n_namesz = sizeof __abi_tag.name, .n_descsz = sizeof __abi_tag.desc, .n_type = 1 }, is that better? (for me the int literal looks clear in the context and shorter. i don't like sizeof "GNU" i think that's less clear.) > > + "GNU", > > + { __ABI_TAG_OS, __ABI_TAG_VERSION } > > +}; > > diff --git a/sysdeps/arm/abi-note.S b/sysdeps/arm/abi-note.S > > deleted file mode 100644 > > index 07bd4c4619..0000000000 > > --- a/sysdeps/arm/abi-note.S > > +++ /dev/null > > @@ -1,8 +0,0 @@ > > -/* Tag_ABI_align8_preserved: This code preserves 8-byte > > - alignment in any callee. */ > > - .eabi_attribute 25, 1 > > -/* Tag_ABI_align8_needed: This code may require 8-byte alignment from > > - the caller. */ > > - .eabi_attribute 24, 1 > > - > > -#include <csu/abi-note.S> > > -- > > 2.17.1 > > > > > -- > H.J.
On Wed, Jul 1, 2020 at 10:31 AM Szabolcs Nagy <szabolcs.nagy@arm.com> wrote: > > The 07/01/2020 07:41, H.J. Lu wrote: > > On Wed, Jul 1, 2020 at 7:38 AM Szabolcs Nagy <szabolcs.nagy@arm.com> wrote: > > > Using C code allows the compiler to add target specific object file > > > markings based on CFLAGS. > > > > > > The arm specific abi-note.S is removed and similar object file fix > > > up will be avoided on AArch64 with standard branch-prtection. > > > --- > > > csu/{abi-note.S => abi-note.c} | 23 +++++++++++++---------- > > > sysdeps/arm/abi-note.S | 8 -------- > > > 2 files changed, 13 insertions(+), 18 deletions(-) > > > rename csu/{abi-note.S => abi-note.c} (90%) > > > delete mode 100644 sysdeps/arm/abi-note.S > > > > > > diff --git a/csu/abi-note.S b/csu/abi-note.c > > > similarity index 90% > > > rename from csu/abi-note.S > > > rename to csu/abi-note.c > > > index 2b4b5f8824..db195c7ab7 100644 > > > --- a/csu/abi-note.S > > > +++ b/csu/abi-note.c > > > @@ -53,6 +53,8 @@ offset length contents > > > identify the earliest release of that OS that supports this ABI. > > > See abi-tags (top level) for details. */ > > > > > > +#include <link.h> > > > +#include <stdint.h> > > > #include <config.h> > > > #include <abi-tag.h> /* OS-specific ABI tag value */ > > > > > > @@ -60,13 +62,14 @@ offset length contents > > > name begins with `.note' and creates a PT_NOTE program header entry > > > pointing at it. */ > > > > > > - .section ".note.ABI-tag", "a" > > > - .p2align 2 > > > - .long 1f - 0f /* name length */ > > > - .long 3f - 2f /* data length */ > > > - .long 1 /* note type */ > > > -0: .asciz "GNU" /* vendor name */ > > > -1: .p2align 2 > > > -2: .long __ABI_TAG_OS /* note data: the ABI tag */ > > > - .long __ABI_TAG_VERSION > > > -3: .p2align 2 /* pad out section */ > > > +__attribute__ ((used, aligned (4), section (".note.ABI-tag"))) > > > +static const struct > > > +{ > > > + ElfW(Nhdr) nhdr; > > > + char name[4]; > > > + int32_t desc[4]; > > > +} __abi_tag = { > > > + { .n_namesz = 4, .n_descsz = 16, .n_type = 1 }, > > > > sizeof "GNU"? and sizeof desc? > > i can do > > { .n_namesz = sizeof __abi_tag.name, > .n_descsz = sizeof __abi_tag.desc, > .n_type = 1 }, > > is that better? (for me the int literal looks > clear in the context and shorter. i don't like > sizeof "GNU" i think that's less clear.) It is better.
The 07/01/2020 10:43, H.J. Lu wrote: > On Wed, Jul 1, 2020 at 10:31 AM Szabolcs Nagy <szabolcs.nagy@arm.com> wrote: > > The 07/01/2020 07:41, H.J. Lu wrote: > > > sizeof "GNU"? and sizeof desc? > > > > i can do > > > > { .n_namesz = sizeof __abi_tag.name, > > .n_descsz = sizeof __abi_tag.desc, > > .n_type = 1 }, > > > > is that better? (for me the int literal looks > > clear in the context and shorter. i don't like > > sizeof "GNU" i think that's less clear.) > > It is better. fixed and force pushed into nsz/pacbti-v6.
diff --git a/csu/abi-note.S b/csu/abi-note.c similarity index 90% rename from csu/abi-note.S rename to csu/abi-note.c index 2b4b5f8824..db195c7ab7 100644 --- a/csu/abi-note.S +++ b/csu/abi-note.c @@ -53,6 +53,8 @@ offset length contents identify the earliest release of that OS that supports this ABI. See abi-tags (top level) for details. */ +#include <link.h> +#include <stdint.h> #include <config.h> #include <abi-tag.h> /* OS-specific ABI tag value */ @@ -60,13 +62,14 @@ offset length contents name begins with `.note' and creates a PT_NOTE program header entry pointing at it. */ - .section ".note.ABI-tag", "a" - .p2align 2 - .long 1f - 0f /* name length */ - .long 3f - 2f /* data length */ - .long 1 /* note type */ -0: .asciz "GNU" /* vendor name */ -1: .p2align 2 -2: .long __ABI_TAG_OS /* note data: the ABI tag */ - .long __ABI_TAG_VERSION -3: .p2align 2 /* pad out section */ +__attribute__ ((used, aligned (4), section (".note.ABI-tag"))) +static const struct +{ + ElfW(Nhdr) nhdr; + char name[4]; + int32_t desc[4]; +} __abi_tag = { + { .n_namesz = 4, .n_descsz = 16, .n_type = 1 }, + "GNU", + { __ABI_TAG_OS, __ABI_TAG_VERSION } +}; diff --git a/sysdeps/arm/abi-note.S b/sysdeps/arm/abi-note.S deleted file mode 100644 index 07bd4c4619..0000000000 --- a/sysdeps/arm/abi-note.S +++ /dev/null @@ -1,8 +0,0 @@ -/* Tag_ABI_align8_preserved: This code preserves 8-byte - alignment in any callee. */ - .eabi_attribute 25, 1 -/* Tag_ABI_align8_needed: This code may require 8-byte alignment from - the caller. */ - .eabi_attribute 24, 1 - -#include <csu/abi-note.S>