| diff -rNu rpm-4.6.0-orig/lib/rpmrc.c rpm-4.6.0/lib/rpmrc.c |
| |
| |
| @@ -763,6 +763,31 @@ |
| return rc; |
| } |
| |
| +#if defined(__linux__) && defined(__sparc__) |
| +static int is_sun4v() |
| +{ |
| + char buffer[4096], *p; |
| + int fd = open("/proc/cpuinfo", O_RDONLY); |
| + if (read(fd, &buffer, sizeof(buffer) - 1) == -1) { |
| + rpmlog(RPMLOG_WARNING, _("read(/proc/cpuinfo) failed\n")); |
| + close(fd); |
| + return 0; |
| + } |
| + close(fd); |
| + |
| + p = strstr(buffer, "type"); |
| + p = strtok(p, "\n"); |
| + p = strstr(p, "sun"); |
| + if (p == NULL) { |
| + rpmlog(RPMLOG_WARNING, _("/proc/cpuinfo has no 'type' line\n")); |
| + return 0; |
| + } else if (strcmp(p, "sun4v") == 0) { |
| + return 1; |
| + } |
| + return 0; |
| +} |
| +#endif |
| + |
| |
| # if defined(__linux__) && defined(__i386__) |
| #include <setjmp.h> |
| @@ -1179,6 +1204,13 @@ |
| personality(oldpers); |
| } |
| } |
| + if (is_sun4v()){ |
| + if (strcmp(un.machine, "sparcv9") == 0 || strcmp(un.machine, "sparc") == 0 ) { |
| + strcpy(un.machine, "sparcv9v"); |
| + } else if (strcmp(un.machine, "sparc64") == 0 ) { |
| + strcpy(un.machine, "sparc64v"); |
| + } |
| + } |
| # endif /* sparc*-linux */ |
| |
| # if defined(__GNUC__) && defined(__alpha__) |
| diff -rNu rpm-4.6.0-orig/rpmrc.in rpm-4.6.0/rpmrc.in |
| |
| |
| @@ -312,7 +312,7 @@ |
| arch_compat: sun4d: sparc |
| arch_compat: sun4m: sparc |
| arch_compat: sun4u: sparc64 |
| -arch_compat: sparc64v: sparc64 |
| +arch_compat: sparc64v: sparc64 sparcv9v |
| arch_compat: sparc64: sparcv9 |
| arch_compat: sparcv9v: sparcv9 |
| arch_compat: sparcv9: sparcv8 |