< prev index next >

src/os/linux/vm/os_linux.cpp

Print this page




1727   int file_descriptor= ::open(filename, O_RDONLY | O_NONBLOCK);
1728 
1729   if (file_descriptor < 0) {
1730     // Can't open library, report dlerror() message
1731     return NULL;
1732   }
1733 
1734   bool failed_to_read_elf_head=
1735     (sizeof(elf_head)!=
1736      (::read(file_descriptor, &elf_head,sizeof(elf_head))));
1737 
1738   ::close(file_descriptor);
1739   if (failed_to_read_elf_head) {
1740     // file i/o error - report dlerror() msg
1741     return NULL;
1742   }
1743 
1744   typedef struct {
1745     Elf32_Half  code;         // Actual value as defined in elf.h
1746     Elf32_Half  compat_class; // Compatibility of archs at VM's sense
1747     char        elf_class;    // 32 or 64 bit
1748     char        endianess;    // MSB or LSB
1749     char*       name;         // String representation
1750   } arch_t;
1751 
1752 #ifndef EM_486
1753   #define EM_486          6               /* Intel 80486 */
1754 #endif
1755 #ifndef EM_AARCH64
1756   #define EM_AARCH64    183               /* ARM AARCH64 */
1757 #endif
1758 
1759   static const arch_t arch_array[]={
1760     {EM_386,         EM_386,     ELFCLASS32, ELFDATA2LSB, (char*)"IA 32"},
1761     {EM_486,         EM_386,     ELFCLASS32, ELFDATA2LSB, (char*)"IA 32"},
1762     {EM_IA_64,       EM_IA_64,   ELFCLASS64, ELFDATA2LSB, (char*)"IA 64"},
1763     {EM_X86_64,      EM_X86_64,  ELFCLASS64, ELFDATA2LSB, (char*)"AMD 64"},
1764     {EM_SPARC,       EM_SPARC,   ELFCLASS32, ELFDATA2MSB, (char*)"Sparc 32"},
1765     {EM_SPARC32PLUS, EM_SPARC,   ELFCLASS32, ELFDATA2MSB, (char*)"Sparc 32"},
1766     {EM_SPARCV9,     EM_SPARCV9, ELFCLASS64, ELFDATA2MSB, (char*)"Sparc v9 64"},
1767     {EM_PPC,         EM_PPC,     ELFCLASS32, ELFDATA2MSB, (char*)"Power PC 32"},
1768 #if defined(VM_LITTLE_ENDIAN)




1727   int file_descriptor= ::open(filename, O_RDONLY | O_NONBLOCK);
1728 
1729   if (file_descriptor < 0) {
1730     // Can't open library, report dlerror() message
1731     return NULL;
1732   }
1733 
1734   bool failed_to_read_elf_head=
1735     (sizeof(elf_head)!=
1736      (::read(file_descriptor, &elf_head,sizeof(elf_head))));
1737 
1738   ::close(file_descriptor);
1739   if (failed_to_read_elf_head) {
1740     // file i/o error - report dlerror() msg
1741     return NULL;
1742   }
1743 
1744   typedef struct {
1745     Elf32_Half    code;         // Actual value as defined in elf.h
1746     Elf32_Half    compat_class; // Compatibility of archs at VM's sense
1747     unsigned char elf_class;    // 32 or 64 bit
1748     unsigned char endianess;    // MSB or LSB
1749     char*         name;         // String representation
1750   } arch_t;
1751 
1752 #ifndef EM_486
1753   #define EM_486          6               /* Intel 80486 */
1754 #endif
1755 #ifndef EM_AARCH64
1756   #define EM_AARCH64    183               /* ARM AARCH64 */
1757 #endif
1758 
1759   static const arch_t arch_array[]={
1760     {EM_386,         EM_386,     ELFCLASS32, ELFDATA2LSB, (char*)"IA 32"},
1761     {EM_486,         EM_386,     ELFCLASS32, ELFDATA2LSB, (char*)"IA 32"},
1762     {EM_IA_64,       EM_IA_64,   ELFCLASS64, ELFDATA2LSB, (char*)"IA 64"},
1763     {EM_X86_64,      EM_X86_64,  ELFCLASS64, ELFDATA2LSB, (char*)"AMD 64"},
1764     {EM_SPARC,       EM_SPARC,   ELFCLASS32, ELFDATA2MSB, (char*)"Sparc 32"},
1765     {EM_SPARC32PLUS, EM_SPARC,   ELFCLASS32, ELFDATA2MSB, (char*)"Sparc 32"},
1766     {EM_SPARCV9,     EM_SPARCV9, ELFCLASS64, ELFDATA2MSB, (char*)"Sparc v9 64"},
1767     {EM_PPC,         EM_PPC,     ELFCLASS32, ELFDATA2MSB, (char*)"Power PC 32"},
1768 #if defined(VM_LITTLE_ENDIAN)


< prev index next >