summaryrefslogtreecommitdiffstats
path: root/contrib/elftoolchain/readelf
diff options
context:
space:
mode:
authoremaste <emaste@FreeBSD.org>2016-02-05 20:56:11 +0000
committeremaste <emaste@FreeBSD.org>2016-02-05 20:56:11 +0000
commite76c56eec876ba994cae09d2d465992d9be5d093 (patch)
treea3bc3ae0735da9a09cadcdc2fa3398ca773616e9 /contrib/elftoolchain/readelf
parent860ed9e53f6883401334547dea3fcede88e39d50 (diff)
downloadFreeBSD-src-e76c56eec876ba994cae09d2d465992d9be5d093.zip
FreeBSD-src-e76c56eec876ba994cae09d2d465992d9be5d093.tar.gz
readelf: report value of unknown relocation types
Obtained from: ELF Tool Chain r3387 Sponsored by: The FreeBSD Foundation
Diffstat (limited to 'contrib/elftoolchain/readelf')
-rw-r--r--contrib/elftoolchain/readelf/readelf.c26
1 files changed, 14 insertions, 12 deletions
diff --git a/contrib/elftoolchain/readelf/readelf.c b/contrib/elftoolchain/readelf/readelf.c
index 7e9343e..c2779ba 100644
--- a/contrib/elftoolchain/readelf/readelf.c
+++ b/contrib/elftoolchain/readelf/readelf.c
@@ -1053,8 +1053,9 @@ static struct {
static const char *
r_type(unsigned int mach, unsigned int type)
{
+ static char s_type[32];
+
switch(mach) {
- case EM_NONE: return "";
case EM_386:
case EM_IAMCU:
switch(type) {
@@ -1089,8 +1090,8 @@ r_type(unsigned int mach, unsigned int type)
case 35: return "R_386_TLS_DTPMOD32";
case 36: return "R_386_TLS_DTPOFF32";
case 37: return "R_386_TLS_TPOFF32";
- default: return "";
}
+ break;
case EM_AARCH64:
switch(type) {
case 0: return "R_AARCH64_NONE";
@@ -1154,8 +1155,8 @@ r_type(unsigned int mach, unsigned int type)
case 1030: return "R_AARCH64_TLS_TPREL64";
case 1031: return "R_AARCH64_TLSDESC";
case 1032: return "R_AARCH64_IRELATIVE";
- default: return "";
}
+ break;
case EM_ARM:
switch(type) {
case 0: return "R_ARM_NONE";
@@ -1206,8 +1207,8 @@ r_type(unsigned int mach, unsigned int type)
case 253: return "R_ARM_RABS32";
case 254: return "R_ARM_RPC24";
case 255: return "R_ARM_RBASE";
- default: return "";
}
+ break;
case EM_IA_64:
switch(type) {
case 0: return "R_IA_64_NONE";
@@ -1290,8 +1291,8 @@ r_type(unsigned int mach, unsigned int type)
case 182: return "R_IA_64_DTPREL64MSB";
case 183: return "R_IA_64_DTPREL64LSB";
case 186: return "R_IA_64_LTOFF_DTPREL22";
- default: return "";
}
+ break;
case EM_MIPS:
switch(type) {
case 0: return "R_MIPS_NONE";
@@ -1324,9 +1325,8 @@ r_type(unsigned int mach, unsigned int type)
case 48: return "R_MIPS_TLS_TPREL64";
case 49: return "R_MIPS_TLS_TPREL_HI16";
case 50: return "R_MIPS_TLS_TPREL_LO16";
-
- default: return "";
}
+ break;
case EM_PPC:
switch(type) {
case 0: return "R_PPC_NONE";
@@ -1406,8 +1406,8 @@ r_type(unsigned int mach, unsigned int type)
case 114: return "R_PPC_EMB_RELST_HA";
case 115: return "R_PPC_EMB_BIT_FLD";
case 116: return "R_PPC_EMB_RELSDA";
- default: return "";
}
+ break;
case EM_RISCV:
switch(type) {
case 0: return "R_RISCV_NONE";
@@ -1452,8 +1452,8 @@ r_type(unsigned int mach, unsigned int type)
case 43: return "R_RISCV_ALIGN";
case 44: return "R_RISCV_RVC_BRANCH";
case 45: return "R_RISCV_RVC_JUMP";
- default: return "";
}
+ break;
case EM_SPARC:
case EM_SPARCV9:
switch(type) {
@@ -1537,8 +1537,8 @@ r_type(unsigned int mach, unsigned int type)
case 77: return "R_SPARC_TLS_DTPOFF64";
case 78: return "R_SPARC_TLS_TPOFF32";
case 79: return "R_SPARC_TLS_TPOFF64";
- default: return "";
}
+ break;
case EM_X86_64:
switch(type) {
case 0: return "R_X86_64_NONE";
@@ -1579,10 +1579,12 @@ r_type(unsigned int mach, unsigned int type)
case 35: return "R_X86_64_TLSDESC_CALL";
case 36: return "R_X86_64_TLSDESC";
case 37: return "R_X86_64_IRELATIVE";
- default: return "";
}
- default: return "";
+ break;
}
+
+ snprintf(s_type, sizeof(s_type), "<unknown: %#x>", type);
+ return (s_type);
}
static const char *
OpenPOWER on IntegriCloud