* [PATCH] define SHT_LLVM_ADDRSIG section rather than error out
@ 2020-11-13 15:15 Navin P
2020-11-17 14:19 ` Mark Wielaard
0 siblings, 1 reply; 7+ messages in thread
From: Navin P @ 2020-11-13 15:15 UTC (permalink / raw)
To: elfutils-devel
make elflint ignore it rather error as unsupported type. Other tools like
readelf , objdump understand this section.
Signed-off-by: Navin P <navinp0304@gmail.com>
---
libelf/elf.h | 1 +
src/elflint.c | 1 +
2 files changed, 2 insertions(+)
diff --git a/libelf/elf.h b/libelf/elf.h
index 6439c1a4..26420b45 100644
--- a/libelf/elf.h
+++ b/libelf/elf.h
@@ -444,6 +444,7 @@ typedef struct
#define SHT_SYMTAB_SHNDX 18 /* Extended section indeces */
#define SHT_NUM 19 /* Number of defined types. */
#define SHT_LOOS 0x60000000 /* Start OS-specific. */
+#define SHT_LLVM_ADDRSIG 0x6FFF4C03 /* llvm address sig */
#define SHT_GNU_ATTRIBUTES 0x6ffffff5 /* Object attributes. */
#define SHT_GNU_HASH 0x6ffffff6 /* GNU-style hash table. */
#define SHT_GNU_LIBLIST 0x6ffffff7 /* Prelink library list */
diff --git a/src/elflint.c b/src/elflint.c
index ef3e3732..62663800 100644
--- a/src/elflint.c
+++ b/src/elflint.c
@@ -3905,6 +3905,7 @@ section [%2zu] '%s': size not multiple of entry size\n"),
&& shdr->sh_type != SHT_GNU_ATTRIBUTES
&& shdr->sh_type != SHT_GNU_LIBLIST
&& shdr->sh_type != SHT_CHECKSUM
+ && shdr->sh_type != SHT_LLVM_ADDRSIG
&& shdr->sh_type != SHT_GNU_verdef
&& shdr->sh_type != SHT_GNU_verneed
&& shdr->sh_type != SHT_GNU_versym
--
2.25.1
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH] define SHT_LLVM_ADDRSIG section rather than error out
2020-11-13 15:15 [PATCH] define SHT_LLVM_ADDRSIG section rather than error out Navin P
@ 2020-11-17 14:19 ` Mark Wielaard
2020-11-18 5:34 ` Navin P
0 siblings, 1 reply; 7+ messages in thread
From: Mark Wielaard @ 2020-11-17 14:19 UTC (permalink / raw)
To: Navin P, elfutils-devel
Hi Navin,
On Fri, 2020-11-13 at 20:45 +0530, Navin P via Elfutils-devel wrote:
> make elflint ignore it rather error as unsupported type. Other tools
> like
> readelf , objdump understand this section.
Is there a specification of this section type?
diff --git a/libelf/elf.h b/libelf/elf.h
> index 6439c1a4..26420b45 100644
> --- a/libelf/elf.h
> +++ b/libelf/elf.h
> @@ -444,6 +444,7 @@ typedef struct
> #define SHT_SYMTAB_SHNDX 18 /* Extended section indeces */
> #define SHT_NUM 19 /* Number of defined types. */
> #define SHT_LOOS 0x60000000 /* Start OS-specific. */
> +#define SHT_LLVM_ADDRSIG 0x6FFF4C03 /* llvm address sig */
> #define SHT_GNU_ATTRIBUTES 0x6ffffff5 /* Object attributes. */
> #define SHT_GNU_HASH 0x6ffffff6 /* GNU-style hash table. */
> #define SHT_GNU_LIBLIST 0x6ffffff7 /* Prelink library list */
elf.h comes from the glibc project.
We should first try to upstream new constants there
(glibc-alpha@sourceware.org)
> diff --git a/src/elflint.c b/src/elflint.c
> index ef3e3732..62663800 100644
> --- a/src/elflint.c
> +++ b/src/elflint.c
> @@ -3905,6 +3905,7 @@ section [%2zu] '%s': size not multiple of entry
> size\n"),
> && shdr->sh_type != SHT_GNU_ATTRIBUTES
> && shdr->sh_type != SHT_GNU_LIBLIST
> && shdr->sh_type != SHT_CHECKSUM
> + && shdr->sh_type != SHT_LLVM_ADDRSIG
> && shdr->sh_type != SHT_GNU_verdef
> && shdr->sh_type != SHT_GNU_verneed
> && shdr->sh_type != SHT_GNU_versym
Note that for various of these SHT_GNU extensions we actually do have
some extra checks. Do we need to check anything for a section marked
SHT_LLVM_ADDRSIG?
Thanks,
Mark
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH] define SHT_LLVM_ADDRSIG section rather than error out
2020-11-17 14:19 ` Mark Wielaard
@ 2020-11-18 5:34 ` Navin P
2021-03-04 13:44 ` Timm Bäder
0 siblings, 1 reply; 7+ messages in thread
From: Navin P @ 2020-11-18 5:34 UTC (permalink / raw)
To: Mark Wielaard; +Cc: elfutils-devel
On Tue, Nov 17, 2020 at 7:49 PM Mark Wielaard <mark@klomp.org> wrote:
>
> Hi Navin,
>
> On Fri, 2020-11-13 at 20:45 +0530, Navin P via Elfutils-devel wrote:
> > make elflint ignore it rather error as unsupported type. Other tools
> > like
> > readelf , objdump understand this section.
>
> Is there a specification of this section type?
>
> diff --git a/libelf/elf.h b/libelf/elf.h
> > index 6439c1a4..26420b45 100644
> > --- a/libelf/elf.h
> > +++ b/libelf/elf.h
> > @@ -444,6 +444,7 @@ typedef struct
> > #define SHT_SYMTAB_SHNDX 18 /* Extended section indeces */
> > #define SHT_NUM 19 /* Number of defined types. */
> > #define SHT_LOOS 0x60000000 /* Start OS-specific. */
> > +#define SHT_LLVM_ADDRSIG 0x6FFF4C03 /* llvm address sig */
> > #define SHT_GNU_ATTRIBUTES 0x6ffffff5 /* Object attributes. */
> > #define SHT_GNU_HASH 0x6ffffff6 /* GNU-style hash table. */
> > #define SHT_GNU_LIBLIST 0x6ffffff7 /* Prelink library list */
>
> elf.h comes from the glibc project.
> We should first try to upstream new constants there
> (glibc-alpha@sourceware.org)
>
> > diff --git a/src/elflint.c b/src/elflint.c
> > index ef3e3732..62663800 100644
> > --- a/src/elflint.c
> > +++ b/src/elflint.c
> > @@ -3905,6 +3905,7 @@ section [%2zu] '%s': size not multiple of entry
> > size\n"),
> > && shdr->sh_type != SHT_GNU_ATTRIBUTES
> > && shdr->sh_type != SHT_GNU_LIBLIST
> > && shdr->sh_type != SHT_CHECKSUM
> > + && shdr->sh_type != SHT_LLVM_ADDRSIG
> > && shdr->sh_type != SHT_GNU_verdef
> > && shdr->sh_type != SHT_GNU_verneed
> > && shdr->sh_type != SHT_GNU_versym
>
> Note that for various of these SHT_GNU extensions we actually do have
> some extra checks. Do we need to check anything for a section marked
> SHT_LLVM_ADDRSIG?
>
We can do two things here
a) Recognize the section exists but ignore its contents which is what i
do. This needn't be the correct approach.
You may need to check the contents to sht_llvm_addrsig but that is
lot of work after the format has been frozen.
https://www.mail-archive.com/netdev@vger.kernel.org/msg348254.html
readelf output
[22] .llvm_addrsig LOOS+0xfff4c03 0000000000000000 ...
b) If we don't want to recognize SHT_LLVM_ADDRSIG
you can strip section from object file by objcopy -R .llvm_addrsig size.o
conditionally based on clang compiler.
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH] define SHT_LLVM_ADDRSIG section rather than error out
2020-11-18 5:34 ` Navin P
@ 2021-03-04 13:44 ` Timm Bäder
2021-03-04 13:59 ` Mark Wielaard
2021-03-04 14:00 ` Navin P
0 siblings, 2 replies; 7+ messages in thread
From: Timm Bäder @ 2021-03-04 13:44 UTC (permalink / raw)
To: Navin P, Mark Wielaard; +Cc: elfutils-devel
On 18/11/2020 06:34, Navin P via Elfutils-devel wrote:
>>> diff --git a/src/elflint.c b/src/elflint.c
>>> index ef3e3732..62663800 100644
>>> --- a/src/elflint.c
>>> +++ b/src/elflint.c
>>> @@ -3905,6 +3905,7 @@ section [%2zu] '%s': size not multiple of entry
>>> size\n"),
>>> && shdr->sh_type != SHT_GNU_ATTRIBUTES
>>> && shdr->sh_type != SHT_GNU_LIBLIST
>>> && shdr->sh_type != SHT_CHECKSUM
>>> + && shdr->sh_type != SHT_LLVM_ADDRSIG
>>> && shdr->sh_type != SHT_GNU_verdef
>>> && shdr->sh_type != SHT_GNU_verneed
>>> && shdr->sh_type != SHT_GNU_versym
>>
>> Note that for various of these SHT_GNU extensions we actually do have
>> some extra checks. Do we need to check anything for a section marked
>> SHT_LLVM_ADDRSIG?
>>
> We can do two things here
> a) Recognize the section exists but ignore its contents which is what i
> do. This needn't be the correct approach.
> You may need to check the contents to sht_llvm_addrsig but that is
> lot of work after the format has been frozen.
> https://www.mail-archive.com/netdev@vger.kernel.org/msg348254.html
> readelf output
> [22] .llvm_addrsig LOOS+0xfff4c03 0000000000000000 ...
>
> b) If we don't want to recognize SHT_LLVM_ADDRSIG
> you can strip section from object file by objcopy -R .llvm_addrsig size.o
> conditionally based on clang compiler.
>
Hey Navin and Mark,
any update on this? I see that SHT_LLVM_ADDRSIG is still not in upstream
glibc. Are you working on that, Navin?
As for the checks, I'm not sure we can do anything here since elfutils
can't know whether a symbol is rightfully marked as address-significant.
Thanks,
Timm
--
Red Hat GmbH, http://www.de.redhat.com/, Registered seat: Grasbrunn,
Commercial register: Amtsgericht Muenchen, HRB 153243,
Managing Directors: Charles Cachera, Michael O'Neill, Tom Savage, Eric
Shander
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH] define SHT_LLVM_ADDRSIG section rather than error out
2021-03-04 13:44 ` Timm Bäder
@ 2021-03-04 13:59 ` Mark Wielaard
2021-03-09 7:40 ` Timm Bäder
2021-03-04 14:00 ` Navin P
1 sibling, 1 reply; 7+ messages in thread
From: Mark Wielaard @ 2021-03-04 13:59 UTC (permalink / raw)
To: Timm Bäder, Navin P; +Cc: elfutils-devel
Hi Timm,
On Thu, 2021-03-04 at 14:44 +0100, Timm Bäder wrote:
> any update on this? I see that SHT_LLVM_ADDRSIG is still not in upstream
> glibc. Are you working on that, Navin?
>
> As for the checks, I'm not sure we can do anything here since elfutils
> can't know whether a symbol is rightfully marked as address-significant.
I tried to lookup some more information about SHT_LLVM_ADDRSIG, but
couldn't really find much. There is this comment about it from the
binutils maintainers:
https://www.sourceware.org/bugzilla/show_bug.cgi?id=23817#c1
I would suggest following that and wait till the design is fixed before
trying to handle SHT_LLVM_ADDRSIG.
Cheers,
Mark
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH] define SHT_LLVM_ADDRSIG section rather than error out
2021-03-04 13:44 ` Timm Bäder
2021-03-04 13:59 ` Mark Wielaard
@ 2021-03-04 14:00 ` Navin P
1 sibling, 0 replies; 7+ messages in thread
From: Navin P @ 2021-03-04 14:00 UTC (permalink / raw)
To: Timm Bäder; +Cc: Mark Wielaard, elfutils-devel
On Thu, Mar 4, 2021 at 7:14 PM Timm Bäder <tbaeder@redhat.com> wrote:
>
> On 18/11/2020 06:34, Navin P via Elfutils-devel wrote:
> >>> diff --git a/src/elflint.c b/src/elflint.c
> >>> index ef3e3732..62663800 100644
> >>> --- a/src/elflint.c
> >>> +++ b/src/elflint.c
> >>> @@ -3905,6 +3905,7 @@ section [%2zu] '%s': size not multiple of entry
> >>> size\n"),
> >>> && shdr->sh_type != SHT_GNU_ATTRIBUTES
> >>> && shdr->sh_type != SHT_GNU_LIBLIST
> >>> && shdr->sh_type != SHT_CHECKSUM
> >>> + && shdr->sh_type != SHT_LLVM_ADDRSIG
> >>> && shdr->sh_type != SHT_GNU_verdef
> >>> && shdr->sh_type != SHT_GNU_verneed
> >>> && shdr->sh_type != SHT_GNU_versym
> >>
> >> Note that for various of these SHT_GNU extensions we actually do have
> >> some extra checks. Do we need to check anything for a section marked
> >> SHT_LLVM_ADDRSIG?
> >>
> > We can do two things here
> > a) Recognize the section exists but ignore its contents which is what i
> > do. This needn't be the correct approach.
> > You may need to check the contents to sht_llvm_addrsig but that is
> > lot of work after the format has been frozen.
> > https://www.mail-archive.com/netdev@vger.kernel.org/msg348254.html
> > readelf output
> > [22] .llvm_addrsig LOOS+0xfff4c03 0000000000000000 ...
> >
> > b) If we don't want to recognize SHT_LLVM_ADDRSIG
> > you can strip section from object file by objcopy -R .llvm_addrsig size.o
> > conditionally based on clang compiler.
> >
>
> Hey Navin and Mark,
>
> any update on this? I see that SHT_LLVM_ADDRSIG is still not in upstream
> glibc. Are you working on that, Navin?
>
> As for the checks, I'm not sure we can do anything here since elfutils
> can't know whether a symbol is rightfully marked as address-significant.
>
clang has a flag -fno-addrsig that doesn't generate the addrsig section.
https://releases.llvm.org/7.0.0/tools/clang/docs/ClangCommandLineReference.html#cmdoption-clang-faddrsig
So adding that for option for only clang should work. I remember I
ran the tests and it worked. But you should check again.
As far as i remember this should complete the changes
Here is a small example
navin@mint-Aspire:~/c$ cat tmp.c
int main() { return 0 ; }
navin@mint-Aspire:~/c$ clang tmp.c -c
navin@mint-Aspire:~/c$ readelf -a tmp.o | grep -i addrsig
[ 7] .llvm_addrsig LOOS+0xfff4c03 0000000000000000 00000120
navin@mint-Aspire:~/c$ clang tmp.c -c -fno-addrsig
navin@mint-Aspire:~/c$ readelf -a tmp.o | grep -i addrsig
navin@mint-Aspire:~/c$
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH] define SHT_LLVM_ADDRSIG section rather than error out
2021-03-04 13:59 ` Mark Wielaard
@ 2021-03-09 7:40 ` Timm Bäder
0 siblings, 0 replies; 7+ messages in thread
From: Timm Bäder @ 2021-03-09 7:40 UTC (permalink / raw)
To: Mark Wielaard, Navin P; +Cc: elfutils-devel
On 04/03/2021 14:59, Mark Wielaard wrote:
> Hi Timm,
>
> On Thu, 2021-03-04 at 14:44 +0100, Timm Bäder wrote:
>> any update on this? I see that SHT_LLVM_ADDRSIG is still not in upstream
>> glibc. Are you working on that, Navin?
>>
>> As for the checks, I'm not sure we can do anything here since elfutils
>> can't know whether a symbol is rightfully marked as address-significant.
>
> I tried to lookup some more information about SHT_LLVM_ADDRSIG, but
> couldn't really find much. There is this comment about it from the
> binutils maintainers:
> https://www.sourceware.org/bugzilla/show_bug.cgi?id=23817#c1
Hm, that is unfortunate of course. I can't find a bug report about this
in llvm's bugzilla. I could try to get a discussion going there.
Are you opposed to work around this in elflint in the meantime?
E.g. ignore all sections starting with 'llvm_'?
diff --git a/src/elflint.c b/src/elflint.c
index 85cc7833..9a40045c 100644
--- a/src/elflint.c
+++ b/src/elflint.c
@@ -3766,6 +3766,9 @@ cannot get section header for section [%2zu] '%s':
%s\n"),
const char *scnname = elf_strptr (ebl->elf, shstrndx,
shdr->sh_name);
+ if (strncmp (scnname, ".llvm_", 6) == 0)
+ continue;
+
if (scnname == NULL)
ERROR (_("section [%2zu]: invalid name\n"), cnt);
else
(But I guess that belong after the NULL check)
Or does elflint use the any llvm_ section?
Asking because they only exist when compiling with clang of course and
elflint not handling (or ignoring) them causes the testsuite to fail.
- Timm
--
Red Hat GmbH, http://www.de.redhat.com/, Registered seat: Grasbrunn,
Commercial register: Amtsgericht Muenchen, HRB 153243,
Managing Directors: Charles Cachera, Michael O'Neill, Tom Savage, Eric
Shander
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2021-03-09 7:40 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-11-13 15:15 [PATCH] define SHT_LLVM_ADDRSIG section rather than error out Navin P
2020-11-17 14:19 ` Mark Wielaard
2020-11-18 5:34 ` Navin P
2021-03-04 13:44 ` Timm Bäder
2021-03-04 13:59 ` Mark Wielaard
2021-03-09 7:40 ` Timm Bäder
2021-03-04 14:00 ` Navin P
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).