https://sourceware.org/bugzilla/show_bug.cgi?id=33262
Bug ID: 33262
Summary: unknown program property type -1342144512 in
.note.gnu.property section using
-mno-direct-extern-access
Product: binutils
Version: unspecified
Status: UNCONFIRMED
Severity: normal
Priority: P2
Component: gold
Assignee: ccoutant at gmail dot com
Reporter: thiago at kde dot org
CC: ian at airs dot com
Target Milestone: ---
It looks like Gold is not handling properties of type
GNU_PROPERTY_UINT32_OR_LO, or potentially any of the OR or AND properties.
Testcase:
$ cat a.c
#define EXPORT __attribute__((visibility("protected")))
EXPORT void my_func() {}
$ cat b.c
#define EXPORT __attribute__((visibility("protected")))
EXPORT void my_func(void);
static void (*vtable[])(void) = {
&my_func,
};
void *f() { my_func(); return vtable; }
When either file is compiled by GCC with -mno-direct-extern-access or Clang
with its equivalent option, the ELF notes for the .o files contain this
property:
$ eu-readelf -n a.o b.o
a.o:
Note section [ 6] '.note.gnu.property' of 80 bytes at offset 0x68:
Owner Data size Type
GNU 16 GNU_PROPERTY_TYPE_0
unknown_type 0xb0008000 data: 01 00 00 00
GNU 32 GNU_PROPERTY_TYPE_0
X86 0xc0010002 data: 00 00 00 00
X86 0xc0010001 data: 01 00 00 00
b.o:
Note section [ 9] '.note.gnu.property' of 80 bytes at offset 0x88:
Owner Data size Type
GNU 16 GNU_PROPERTY_TYPE_0
unknown_type 0xb0008000 data: 01 00 00 00
GNU 32 GNU_PROPERTY_TYPE_0
X86 0xc0010002 data: 00 00 00 00
X86 0xc0010001 data: 01 00 00 00
binutils readelf decodes it as GNU_PROPERTY_1_NEEDED_INDIRECT_EXTERN_ACCESS:
$ readelf -n a.o b.o
File: a.o
Displaying notes found in: .note.gnu.property
Owner Data size Description
GNU 0x00000010 NT_GNU_PROPERTY_TYPE_0
Properties: 1_needed: indirect external access
GNU 0x00000020 NT_GNU_PROPERTY_TYPE_0
Properties: x86 ISA used:
x86 feature used: x86
File: b.o
Displaying notes found in: .note.gnu.property
Owner Data size Description
GNU 0x00000010 NT_GNU_PROPERTY_TYPE_0
Properties: 1_needed: indirect external access
GNU 0x00000020 NT_GNU_PROPERTY_TYPE_0
Properties: x86 ISA used:
x86 feature used: x86
When compiled with the bfd ld, the above produces no warning and does produce
the ELF note:
$ gcc -fPIC -O2 -fvisibility=hidden -mno-direct-extern-access -shared -o a.so
a.c b.c
$ readelf -n a.so
Displaying notes found in: .note.gnu.property
Owner Data size Description
GNU 0x00000030 NT_GNU_PROPERTY_TYPE_0
Properties: 1_needed: indirect external access
x86 feature used: x86
x86 ISA used:
However, gold produces a warning:
$ gcc -fuse-ld=gold -fPIC -O2 -fvisibility=hidden -mno-direct-extern-access
-shared -o a.so a.c b.c
/usr/bin/ld.gold: warning: /tmp/cc9linBj.o: unknown program property type
-1342144512 in .note.gnu.property section
It does add the note to the output:
$ readelf -n a.so
Displaying notes found in: .note.gnu.property
Owner Data size Description
GNU 0x00000020 NT_GNU_PROPERTY_TYPE_0
Properties: 1_needed: indirect external access
x86 feature used: x86
However, it's very likely it's not properly handling the notes and is just
copying one of the input files' notes, instead of OR'ing the payloads together.
--
You are receiving this mail because:
You are on the CC list for the bug.