1753
1754 #ifndef EM_486
1755 #define EM_486 6 /* Intel 80486 */
1756 #endif
1757 #ifndef EM_AARCH64
1758 #define EM_AARCH64 183 /* ARM AARCH64 */
1759 #endif
1760
1761 static const arch_t arch_array[]={
1762 {EM_386, EM_386, ELFCLASS32, ELFDATA2LSB, (char*)"IA 32"},
1763 {EM_486, EM_386, ELFCLASS32, ELFDATA2LSB, (char*)"IA 32"},
1764 {EM_IA_64, EM_IA_64, ELFCLASS64, ELFDATA2LSB, (char*)"IA 64"},
1765 {EM_X86_64, EM_X86_64, ELFCLASS64, ELFDATA2LSB, (char*)"AMD 64"},
1766 {EM_SPARC, EM_SPARC, ELFCLASS32, ELFDATA2MSB, (char*)"Sparc 32"},
1767 {EM_SPARC32PLUS, EM_SPARC, ELFCLASS32, ELFDATA2MSB, (char*)"Sparc 32"},
1768 {EM_SPARCV9, EM_SPARCV9, ELFCLASS64, ELFDATA2MSB, (char*)"Sparc v9 64"},
1769 {EM_PPC, EM_PPC, ELFCLASS32, ELFDATA2MSB, (char*)"Power PC 32"},
1770 #if defined(VM_LITTLE_ENDIAN)
1771 {EM_PPC64, EM_PPC64, ELFCLASS64, ELFDATA2LSB, (char*)"Power PC 64"},
1772 #else
1773 {EM_PPC64, EM_PPC64, ELFCLASS64, ELFDATA2MSB, (char*)"Power PC 64"},
1774 #endif
1775 {EM_ARM, EM_ARM, ELFCLASS32, ELFDATA2LSB, (char*)"ARM"},
1776 {EM_S390, EM_S390, ELFCLASSNONE, ELFDATA2MSB, (char*)"IBM System/390"},
1777 {EM_ALPHA, EM_ALPHA, ELFCLASS64, ELFDATA2LSB, (char*)"Alpha"},
1778 {EM_MIPS_RS3_LE, EM_MIPS_RS3_LE, ELFCLASS32, ELFDATA2LSB, (char*)"MIPSel"},
1779 {EM_MIPS, EM_MIPS, ELFCLASS32, ELFDATA2MSB, (char*)"MIPS"},
1780 {EM_PARISC, EM_PARISC, ELFCLASS32, ELFDATA2MSB, (char*)"PARISC"},
1781 {EM_68K, EM_68K, ELFCLASS32, ELFDATA2MSB, (char*)"M68k"},
1782 {EM_AARCH64, EM_AARCH64, ELFCLASS64, ELFDATA2LSB, (char*)"AARCH64"},
1783 };
1784
1785 #if (defined IA32)
1786 static Elf32_Half running_arch_code=EM_386;
1787 #elif (defined AMD64)
1788 static Elf32_Half running_arch_code=EM_X86_64;
1789 #elif (defined IA64)
1790 static Elf32_Half running_arch_code=EM_IA_64;
1791 #elif (defined __sparc) && (defined _LP64)
1792 static Elf32_Half running_arch_code=EM_SPARCV9;
1793 #elif (defined __sparc) && (!defined _LP64)
2196 }
2197 fclose(fp);
2198 }
2199 #endif // x86 platforms
2200 return false;
2201 }
2202
2203 void os::pd_print_cpu_info(outputStream* st, char* buf, size_t buflen) {
2204 // Only print the model name if the platform provides this as a summary
2205 if (!print_model_name_and_flags(st, buf, buflen)) {
2206 st->print("\n/proc/cpuinfo:\n");
2207 if (!_print_ascii_file("/proc/cpuinfo", st)) {
2208 st->print_cr(" <Not Available>");
2209 }
2210 }
2211 }
2212
2213 #if defined(AMD64) || defined(IA32) || defined(X32)
2214 const char* search_string = "model name";
2215 #elif defined(SPARC)
2216 const char* search_string = "cpu";
2217 #else
2218 const char* search_string = "Processor";
2219 #endif
2220
2221 // Parses the cpuinfo file for string representing the model name.
2222 void os::get_summary_cpu_info(char* cpuinfo, size_t length) {
2223 FILE* fp = fopen("/proc/cpuinfo", "r");
2224 if (fp != NULL) {
2225 while (!feof(fp)) {
2226 char buf[256];
2227 if (fgets(buf, sizeof(buf), fp)) {
2228 char* start = strstr(buf, search_string);
2229 if (start != NULL) {
2230 char *ptr = start + strlen(search_string);
2231 char *end = buf + strlen(buf);
2232 while (ptr != end) {
2233 // skip whitespace and colon for the rest of the name.
2234 if (*ptr != ' ' && *ptr != '\t' && *ptr != ':') {
2235 break;
|
1753
1754 #ifndef EM_486
1755 #define EM_486 6 /* Intel 80486 */
1756 #endif
1757 #ifndef EM_AARCH64
1758 #define EM_AARCH64 183 /* ARM AARCH64 */
1759 #endif
1760
1761 static const arch_t arch_array[]={
1762 {EM_386, EM_386, ELFCLASS32, ELFDATA2LSB, (char*)"IA 32"},
1763 {EM_486, EM_386, ELFCLASS32, ELFDATA2LSB, (char*)"IA 32"},
1764 {EM_IA_64, EM_IA_64, ELFCLASS64, ELFDATA2LSB, (char*)"IA 64"},
1765 {EM_X86_64, EM_X86_64, ELFCLASS64, ELFDATA2LSB, (char*)"AMD 64"},
1766 {EM_SPARC, EM_SPARC, ELFCLASS32, ELFDATA2MSB, (char*)"Sparc 32"},
1767 {EM_SPARC32PLUS, EM_SPARC, ELFCLASS32, ELFDATA2MSB, (char*)"Sparc 32"},
1768 {EM_SPARCV9, EM_SPARCV9, ELFCLASS64, ELFDATA2MSB, (char*)"Sparc v9 64"},
1769 {EM_PPC, EM_PPC, ELFCLASS32, ELFDATA2MSB, (char*)"Power PC 32"},
1770 #if defined(VM_LITTLE_ENDIAN)
1771 {EM_PPC64, EM_PPC64, ELFCLASS64, ELFDATA2LSB, (char*)"Power PC 64"},
1772 #else
1773 {EM_PPC64, EM_PPC64, ELFCLASS64, ELFDATA2MSB, (char*)"Power PC 64 LE"},
1774 #endif
1775 {EM_ARM, EM_ARM, ELFCLASS32, ELFDATA2LSB, (char*)"ARM"},
1776 {EM_S390, EM_S390, ELFCLASSNONE, ELFDATA2MSB, (char*)"IBM System/390"},
1777 {EM_ALPHA, EM_ALPHA, ELFCLASS64, ELFDATA2LSB, (char*)"Alpha"},
1778 {EM_MIPS_RS3_LE, EM_MIPS_RS3_LE, ELFCLASS32, ELFDATA2LSB, (char*)"MIPSel"},
1779 {EM_MIPS, EM_MIPS, ELFCLASS32, ELFDATA2MSB, (char*)"MIPS"},
1780 {EM_PARISC, EM_PARISC, ELFCLASS32, ELFDATA2MSB, (char*)"PARISC"},
1781 {EM_68K, EM_68K, ELFCLASS32, ELFDATA2MSB, (char*)"M68k"},
1782 {EM_AARCH64, EM_AARCH64, ELFCLASS64, ELFDATA2LSB, (char*)"AARCH64"},
1783 };
1784
1785 #if (defined IA32)
1786 static Elf32_Half running_arch_code=EM_386;
1787 #elif (defined AMD64)
1788 static Elf32_Half running_arch_code=EM_X86_64;
1789 #elif (defined IA64)
1790 static Elf32_Half running_arch_code=EM_IA_64;
1791 #elif (defined __sparc) && (defined _LP64)
1792 static Elf32_Half running_arch_code=EM_SPARCV9;
1793 #elif (defined __sparc) && (!defined _LP64)
2196 }
2197 fclose(fp);
2198 }
2199 #endif // x86 platforms
2200 return false;
2201 }
2202
2203 void os::pd_print_cpu_info(outputStream* st, char* buf, size_t buflen) {
2204 // Only print the model name if the platform provides this as a summary
2205 if (!print_model_name_and_flags(st, buf, buflen)) {
2206 st->print("\n/proc/cpuinfo:\n");
2207 if (!_print_ascii_file("/proc/cpuinfo", st)) {
2208 st->print_cr(" <Not Available>");
2209 }
2210 }
2211 }
2212
2213 #if defined(AMD64) || defined(IA32) || defined(X32)
2214 const char* search_string = "model name";
2215 #elif defined(SPARC)
2216 const char* search_string = "cpu";
2217 #elif defined(PPC64)
2218 const char* search_string = "cpu";
2219 #else
2220 const char* search_string = "Processor";
2221 #endif
2222
2223 // Parses the cpuinfo file for string representing the model name.
2224 void os::get_summary_cpu_info(char* cpuinfo, size_t length) {
2225 FILE* fp = fopen("/proc/cpuinfo", "r");
2226 if (fp != NULL) {
2227 while (!feof(fp)) {
2228 char buf[256];
2229 if (fgets(buf, sizeof(buf), fp)) {
2230 char* start = strstr(buf, search_string);
2231 if (start != NULL) {
2232 char *ptr = start + strlen(search_string);
2233 char *end = buf + strlen(buf);
2234 while (ptr != end) {
2235 // skip whitespace and colon for the rest of the name.
2236 if (*ptr != ' ' && *ptr != '\t' && *ptr != ':') {
2237 break;
|