[v6,01/14] Rewrite abi-note.S in C.

Message ID 896f9afab21b31d0e168e61eb8781d477bf3a7dd.1593612309.git.szabolcs.nagy@arm.com
State Superseded
Headers show
Series
  • aarch64: branch protection support
Related show

Commit Message

Szabolcs Nagy July 1, 2020, 2:37 p.m.
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

-- 
2.17.1

Comments

Adhemerval Zanella via Libc-alpha July 1, 2020, 2:41 p.m. | #1
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

>



-- 
H.J.
Szabolcs Nagy July 1, 2020, 5:31 p.m. | #2
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.
Adhemerval Zanella via Libc-alpha July 1, 2020, 5:43 p.m. | #3
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.

-- 
H.J.
Szabolcs Nagy July 2, 2020, 8:39 a.m. | #4
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.

Patch

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>