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

Szabolcs Nagy szabolcs.nagy@arm.com
Wed Jul 1 17:31:33 GMT 2020


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.


More information about the Libc-alpha mailing list