elf: Add GNU_PROPERTY_UINT32_AND_XXX/GNU_PROPERTY_UINT32_OR_XXX
authorH.J. Lu <hjl.tools@gmail.com>
Fri, 18 Jun 2021 14:18:02 +0000 (07:18 -0700)
committerH.J. Lu <hjl.tools@gmail.com>
Fri, 18 Jun 2021 14:19:01 +0000 (07:19 -0700)
commit5a767724d7e4d8dfe70a82edceaeaa6d57ff2b84
tree003f3353aeeda64e64ce591c1a70d66380f4195e
parent982c3a65ca5dbea8d6de3afd934f0a06fef54383
elf: Add GNU_PROPERTY_UINT32_AND_XXX/GNU_PROPERTY_UINT32_OR_XXX

Implement GNU_PROPERTY_UINT32_AND_XXX/GNU_PROPERTY_UINT32_OR_XXX:

https://sourceware.org/pipermail/gnu-gabi/2021q1/000467.html

1. GNU_PROPERTY_UINT32_AND_LO..GNU_PROPERTY_UINT32_AND_HI

 #define GNU_PROPERTY_UINT32_AND_LO 0xb0000000
 #define GNU_PROPERTY_UINT32_AND_HI 0xb0007fff

A bit in the output pr_data field is set only if it is set in all
relocatable input pr_data fields.  If all bits in the the output
pr_data field are zero, this property should be removed from output.

If the bit is 1, all input relocatables have the feature.  If the
bit is 0 or the property is missing, the info is unknown.

2. GNU_PROPERTY_UINT32_OR_LO..GNU_PROPERTY_UINT32_OR_HI

 #define GNU_PROPERTY_UINT32_OR_LO 0xb0008000
 #define GNU_PROPERTY_UINT32_OR_HI 0xb000ffff

A bit in the output pr_data field is set if it is set in any
relocatable input pr_data fields. If all bits in the the output
pr_data field are zero, this property should be removed from output.

If the bit is 1, some input relocatables have the feature.  If the
bit is 0 or the property is missing, the info is unknown.

bfd/

* elf-properties.c (_bfd_elf_parse_gnu_properties): Handle
GNU_PROPERTY_UINT32_AND_LO, GNU_PROPERTY_UINT32_AND_HI,
GNU_PROPERTY_UINT32_OR_LO and GNU_PROPERTY_UINT32_OR_HI.
(elf_merge_gnu_properties): Likewise.

binutils/

* readelf.c (print_gnu_property_note): Handle
GNU_PROPERTY_UINT32_AND_LO, GNU_PROPERTY_UINT32_AND_HI,
GNU_PROPERTY_UINT32_OR_LO and GNU_PROPERTY_UINT32_OR_HI.

include/

* elf/common.h (GNU_PROPERTY_UINT32_AND_LO): New.
(GNU_PROPERTY_UINT32_AND_HI): Likewise.
(GNU_PROPERTY_UINT32_OR_LO): Likewise.
(GNU_PROPERTY_UINT32_OR_HI): Likewise.

ld/

* testsuite/ld-elf/property-and-1.d: New file.
* testsuite/ld-elf/property-and-1.s: Likewise.
* testsuite/ld-elf/property-and-2.d: Likewise.
* testsuite/ld-elf/property-and-2.s: Likewise.
* testsuite/ld-elf/property-and-3.d: Likewise.
* testsuite/ld-elf/property-and-3.s: Likewise.
* testsuite/ld-elf/property-and-4.d: Likewise.
* testsuite/ld-elf/property-and-empty.s: Likewise.
* testsuite/ld-elf/property-or-1.d: Likewise.
* testsuite/ld-elf/property-or-1.s: Likewise.
* testsuite/ld-elf/property-or-2.d: Likewise.
* testsuite/ld-elf/property-or-2.s: Likewise.
* testsuite/ld-elf/property-or-3.d: Likewise.
* testsuite/ld-elf/property-or-3.s: Likewise.
* testsuite/ld-elf/property-or-4.d: Likewise.
* testsuite/ld-elf/property-or-empty.s: Likewise.
23 files changed:
bfd/ChangeLog
bfd/elf-properties.c
binutils/ChangeLog
binutils/readelf.c
include/ChangeLog
include/elf/common.h
ld/ChangeLog
ld/testsuite/ld-elf/property-and-1.d [new file with mode: 0644]
ld/testsuite/ld-elf/property-and-1.s [new file with mode: 0644]
ld/testsuite/ld-elf/property-and-2.d [new file with mode: 0644]
ld/testsuite/ld-elf/property-and-2.s [new file with mode: 0644]
ld/testsuite/ld-elf/property-and-3.d [new file with mode: 0644]
ld/testsuite/ld-elf/property-and-3.s [new file with mode: 0644]
ld/testsuite/ld-elf/property-and-4.d [new file with mode: 0644]
ld/testsuite/ld-elf/property-and-empty.s [new file with mode: 0644]
ld/testsuite/ld-elf/property-or-1.d [new file with mode: 0644]
ld/testsuite/ld-elf/property-or-1.s [new file with mode: 0644]
ld/testsuite/ld-elf/property-or-2.d [new file with mode: 0644]
ld/testsuite/ld-elf/property-or-2.s [new file with mode: 0644]
ld/testsuite/ld-elf/property-or-3.d [new file with mode: 0644]
ld/testsuite/ld-elf/property-or-3.s [new file with mode: 0644]
ld/testsuite/ld-elf/property-or-4.d [new file with mode: 0644]
ld/testsuite/ld-elf/property-or-empty.s [new file with mode: 0644]