aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/lib.c26
-rw-r--r--lib/lib.h1
2 files changed, 27 insertions, 0 deletions
diff --git a/lib/lib.c b/lib/lib.c
index b14e2e9f..4eef1355 100644
--- a/lib/lib.c
+++ b/lib/lib.c
@@ -1409,3 +1409,29 @@ int is_tar_header(void *pkt)
return i && tar_cksum(pkt) == i;
}
+
+char *elf_arch_name(int type)
+{
+ int i;
+ // Values from include/linux/elf-em.h (plus arch/*/include/asm/elf.h)
+ // Names are linux/arch/ directory (sometimes before 32/64 bit merges)
+ struct {int val; char *name;} types[] = {{0x9026, "alpha"}, {93, "arc"},
+ {195, "arcv2"}, {40, "arm"}, {183, "arm64"}, {0x18ad, "avr32"},
+ {247, "bpf"}, {106, "blackfin"}, {140, "c6x"}, {23, "cell"}, {76, "cris"},
+ {252, "csky"}, {0x5441, "frv"}, {46, "h8300"}, {164, "hexagon"},
+ {50, "ia64"}, {88, "m32r"}, {0x9041, "m32r"}, {4, "m68k"}, {174, "metag"},
+ {189, "microblaze"}, {0xbaab, "microblaze-old"}, {8, "mips"},
+ {10, "mips-old"}, {89, "mn10300"}, {0xbeef, "mn10300-old"}, {113, "nios2"},
+ {92, "openrisc"}, {0x8472, "openrisc-old"}, {15, "parisc"}, {20, "ppc"},
+ {21, "ppc64"}, {243, "riscv"}, {22, "s390"}, {0xa390, "s390-old"},
+ {135, "score"}, {42, "sh"}, {2, "sparc"}, {18, "sparc8+"}, {43, "sparc9"},
+ {188, "tile"}, {191, "tilegx"}, {3, "386"}, {6, "486"}, {62, "x86-64"},
+ {94, "xtensa"}, {0xabc7, "xtensa-old"}
+ };
+
+ for (i = 0; i<ARRAY_LEN(types); i++) {
+ if (type==types[i].val) return types[i].name;
+ }
+ sprintf(libbuf, "unknown arch %d", type);
+ return libbuf;
+} \ No newline at end of file
diff --git a/lib/lib.h b/lib/lib.h
index 9e933401..e2914a09 100644
--- a/lib/lib.h
+++ b/lib/lib.h
@@ -271,6 +271,7 @@ void reset_env(struct passwd *p, int clear);
void loggit(int priority, char *format, ...);
unsigned tar_cksum(void *data);
int is_tar_header(void *pkt);
+char *elf_arch_name(int type);
#define HR_SPACE 1 // Space between number and units
#define HR_B 2 // Use "B" for single byte units