Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F163250758
D32315.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
2 KB
Referenced Files
None
Subscribers
None
D32315.diff
View Options
diff --git a/contrib/elftoolchain/readelf/readelf.c b/contrib/elftoolchain/readelf/readelf.c
--- a/contrib/elftoolchain/readelf/readelf.c
+++ b/contrib/elftoolchain/readelf/readelf.c
@@ -229,6 +229,12 @@
const char *desc;
};
+struct flag_desc_list {
+ uint32_t type;
+ const char *desc_str;
+ struct flag_desc *desc;
+};
+
struct mips_option {
uint64_t flag;
const char *desc;
@@ -3539,15 +3545,50 @@
free(bl);
}
+static struct flag_desc gnu_property_aarch64_feature_1_and_bits[] = {
+ { GNU_PROPERTY_AARCH64_FEATURE_1_BTI, "BTI" },
+ { GNU_PROPERTY_AARCH64_FEATURE_1_PAC, "PAC" },
+ { 0, NULL }
+};
+
+static struct flag_desc_list gnu_property_aarch64[] = {
+ {
+ GNU_PROPERTY_AARCH64_FEATURE_1_AND,
+ "AArch64 features",
+ gnu_property_aarch64_feature_1_and_bits
+ },
+ { 0, NULL, NULL }
+};
+
static struct flag_desc gnu_property_x86_feature_1_and_bits[] = {
{ GNU_PROPERTY_X86_FEATURE_1_IBT, "IBT" },
{ GNU_PROPERTY_X86_FEATURE_1_SHSTK, "SHSTK" },
{ 0, NULL }
};
+static struct flag_desc_list gnu_property_x86[] = {
+ {
+ GNU_PROPERTY_X86_FEATURE_1_AND,
+ "x64 features",
+ gnu_property_x86_feature_1_and_bits
+ },
+ { 0, NULL, NULL }
+};
+
+static struct {
+ unsigned int emachine;
+ struct flag_desc_list *flag_list;
+} gnu_property_archs[] = {
+ { EM_AARCH64, gnu_property_aarch64 },
+ { EM_X86_64, gnu_property_x86 },
+ { 0, NULL }
+};
+
static void
dump_gnu_property_type_0(struct readelf *re, const char *buf, size_t sz)
{
+ struct flag_desc_list *desc_list;
+ struct flag_desc *desc;
size_t i;
uint32_t type, prop_sz;
@@ -3566,19 +3607,35 @@
if (type >= GNU_PROPERTY_LOPROC &&
type <= GNU_PROPERTY_HIPROC) {
- if (re->ehdr.e_machine != EM_X86_64) {
+ desc_list = NULL;
+ for (i = 0; gnu_property_archs[i].flag_list != NULL;
+ i++) {
+ if (gnu_property_archs[i].emachine ==
+ re->ehdr.e_machine) {
+ desc_list =
+ gnu_property_archs[i].flag_list;
+ break;
+ }
+ }
+ if (desc_list == NULL) {
printf("machine type %x unknown\n",
re->ehdr.e_machine);
goto unknown;
}
- switch (type) {
- case GNU_PROPERTY_X86_FEATURE_1_AND:
- printf("x86 features:");
+
+ desc = NULL;
+ for (i = 0; desc_list[i].desc != NULL; i++) {
+ if (desc_list[i].type == type) {
+ desc = desc_list[i].desc;
+ break;
+ }
+ }
+ if (desc != NULL) {
+ printf("%s:", desc_list[i].desc_str);
if (prop_sz != 4)
goto bad;
- dump_flags(gnu_property_x86_feature_1_and_bits,
+ dump_flags(desc,
*(const uint32_t *)(const void *)buf);
- break;
}
}
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Wed, Jul 22, 10:31 AM (1 h, 30 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
35361165
Default Alt Text
D32315.diff (2 KB)
Attached To
Mode
D32315: Teach the readelf about arm64 gnu properties
Attached
Detach File
Event Timeline
Log In to Comment