summaryrefslogtreecommitdiffstats
path: root/backends/ppc64_symbol.c
diff options
context:
space:
mode:
authorMark Wielaard <[email protected]>2014-07-04 14:30:48 +0200
committerMark Wielaard <[email protected]>2014-07-04 14:30:48 +0200
commita95c4ad24cf83b2b0273fee73162bf476cebec8f (patch)
treea50510b5ef12ec3ea8a68bf73e38f0e5f818ae17 /backends/ppc64_symbol.c
parent16e2d351bf31d0ce09ce9632ff196cbd973b656b (diff)
Add ppc64le ELFv2 abi support to backends and elflint.
The big endian vs little endian changes are already handled by detecting the EI_DATA data encoding. And the function descriptors are already not used when we see there is no .opd section. This change adds new checks for st_other bits, new relocations and recognizes DT_PPC64_OPT. Signed-off-by: Menanteau Guy <[email protected]> Signed-off-by: Mark Wielaard <[email protected]>
Diffstat (limited to 'backends/ppc64_symbol.c')
-rw-r--r--backends/ppc64_symbol.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/backends/ppc64_symbol.c b/backends/ppc64_symbol.c
index 212d4145..5a020d8d 100644
--- a/backends/ppc64_symbol.c
+++ b/backends/ppc64_symbol.c
@@ -72,6 +72,8 @@ ppc64_dynamic_tag_name (int64_t tag, char *buf __attribute__ ((unused)),
return "PPC64_OPD";
case DT_PPC64_OPDSZ:
return "PPC64_OPDSZ";
+ case DT_PPC64_OPT:
+ return "PPC64_OPT";
default:
break;
}
@@ -84,7 +86,8 @@ ppc64_dynamic_tag_check (int64_t tag)
{
return (tag == DT_PPC64_GLINK
|| tag == DT_PPC64_OPD
- || tag == DT_PPC64_OPDSZ);
+ || tag == DT_PPC64_OPDSZ
+ || tag == DT_PPC64_OPT);
}
@@ -120,3 +123,9 @@ ppc64_machine_flag_check (GElf_Word flags)
{
return flags == 0 || flags == 1 || flags == 2;
}
+
+bool
+ppc64_check_st_other_bits (unsigned char st_other)
+{
+ return (PPC64_LOCAL_ENTRY_OFFSET (st_other) != 0);
+}