diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/lib.c | 26 | ||||
-rw-r--r-- | lib/lib.h | 1 |
2 files changed, 27 insertions, 0 deletions
@@ -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 @@ -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 |