aboutsummaryrefslogtreecommitdiffstats
path: root/libebl/eblobjnote.c
diff options
context:
space:
mode:
authorandroid-build-prod (mdb) <android-build-team-robot@google.com>2020-10-01 21:18:42 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2020-10-01 21:18:42 +0000
commit60533dc6090cbc4036a49ca5213e9cca43ee63d0 (patch)
tree4256b06ec4429e4e80bd73186ad107bfbd0581bc /libebl/eblobjnote.c
parentfe5814ae0d81e43667acb198b00250499dd51d8a (diff)
parent6edd8e54faf3b55179b0791716d48bf3109f0d6a (diff)
downloadplatform_external_elfutils-sdk-release.tar.gz
platform_external_elfutils-sdk-release.tar.bz2
platform_external_elfutils-sdk-release.zip
Merge "Snap for 6877830 from d219b55202eae5964ebcd1637b8c59e01a0cfc81 to sdk-release" into sdk-releasesdk-release
Diffstat (limited to 'libebl/eblobjnote.c')
-rw-r--r--libebl/eblobjnote.c67
1 files changed, 67 insertions, 0 deletions
diff --git a/libebl/eblobjnote.c b/libebl/eblobjnote.c
index f7ac915c..37cbc499 100644
--- a/libebl/eblobjnote.c
+++ b/libebl/eblobjnote.c
@@ -476,6 +476,73 @@ ebl_object_note (Ebl *ebl, uint32_t namesz, const char *name, uint32_t type,
}
}
}
+ else if (prop.pr_type >= GNU_PROPERTY_LOPROC
+ && prop.pr_type <= GNU_PROPERTY_HIPROC
+ && ehdr.e_machine == EM_AARCH64)
+ {
+ printf ("AARCH64 ");
+ if (prop.pr_type == GNU_PROPERTY_AARCH64_FEATURE_1_AND)
+ {
+ printf ("FEATURE_1_AND: ");
+
+ if (prop.pr_datasz == 4)
+ {
+ GElf_Word data;
+ in.d_type = ELF_T_WORD;
+ out.d_type = ELF_T_WORD;
+ in.d_size = 4;
+ out.d_size = 4;
+ in.d_buf = (void *) desc;
+ out.d_buf = (void *) &data;
+
+ if (gelf_xlatetom (ebl->elf, &out, &in,
+ elfident[EI_DATA]) == NULL)
+ {
+ printf ("%s\n", elf_errmsg (-1));
+ return;
+ }
+ printf ("%08" PRIx32 " ", data);
+
+ if ((data & GNU_PROPERTY_AARCH64_FEATURE_1_BTI)
+ != 0)
+ {
+ printf ("BTI");
+ data &= ~GNU_PROPERTY_AARCH64_FEATURE_1_BTI;
+ if (data != 0)
+ printf (" ");
+ }
+
+ if ((data & GNU_PROPERTY_AARCH64_FEATURE_1_PAC)
+ != 0)
+ {
+ printf ("PAC");
+ data &= ~GNU_PROPERTY_AARCH64_FEATURE_1_PAC;
+ if (data != 0)
+ printf (" ");
+ }
+
+ if (data != 0)
+ printf ("UNKNOWN");
+ }
+ else
+ printf ("<bad datasz: %" PRId32 ">",
+ prop.pr_datasz);
+
+ printf ("\n");
+ }
+ else
+ {
+ printf ("%#" PRIx32, prop.pr_type);
+ if (prop.pr_datasz > 0)
+ {
+ printf (" data: ");
+ size_t i;
+ for (i = 0; i < prop.pr_datasz - 1; i++)
+ printf ("%02" PRIx8 " ", (uint8_t) desc[i]);
+ printf ("%02" PRIx8 "\n", (uint8_t) desc[i]);
+ }
+ }
+ }
else
{
if (prop.pr_type >= GNU_PROPERTY_LOPROC