ftmemsim-valgrind/tests/arch_test.c
Nicholas Nethercote 07045477ca Merge the DARWIN branch onto the trunk.
I tried using 'svn merge' to do the merge but it did a terrible job and
there were bazillions of conflicts.  So instead I just took the diff between
the branch and trunk  at r10155, applied the diff to the trunk, 'svn add'ed
the added files (no files needed to be 'svn remove'd) and committed.


git-svn-id: svn://svn.valgrind.org/valgrind/trunk@10156
2009-05-28 01:53:07 +00:00

84 lines
2.3 KiB
C

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// This program determines which architectures that this Valgrind installation
// supports, which depends on the what was chosen at configure-time. For
// example, if Valgrind is installed on an AMD64 machine but has been
// configured with --enable-only32bit then this program will match "x86" but
// not "amd64".
//
// We return:
// - 0 if the machine matches the asked-for arch
// - 1 if it doesn't match but does match the name of another arch
// - 2 if it doesn't match the name of any arch
// - 3 if there was a usage error (it also prints an error message)
// Nb: When updating this file for a new architecture, add the name to
// 'all_archs' as well as adding go().
#define False 0
#define True 1
typedef int Bool;
char* all_archs[] = {
"x86",
"amd64",
"ppc32",
"ppc64",
NULL
};
static Bool go(char* arch)
{
#if defined(VGP_x86_linux) || defined(VGP_x86_darwin)
if ( 0 == strcmp( arch, "x86" ) ) return True;
#elif defined(VGP_amd64_linux) || defined(VGP_amd64_darwin)
if ( 0 == strcmp( arch, "x86" ) ) return True;
if ( 0 == strcmp( arch, "amd64" ) ) return True;
#elif defined(VGP_ppc32_linux)
if ( 0 == strcmp( arch, "ppc32" ) ) return True;
#elif defined(VGP_ppc64_linux)
if ( 0 == strcmp( arch, "ppc64" ) ) return True;
if ( 0 == strcmp( arch, "ppc32" ) ) return True;
#elif defined(VGP_ppc32_aix5) || defined(VGP_ppc64_aix5)
if (sizeof(void*) == 8) {
/* CPU is in 64-bit mode */
if ( 0 == strcmp( arch, "ppc64" ) ) return True;
if ( 0 == strcmp( arch, "ppc32" ) ) return True;
} else {
if ( 0 == strcmp( arch, "ppc32" ) ) return True;
}
#else
# error Unknown platform
#endif // VGP_*
return False;
}
//---------------------------------------------------------------------------
// main
//---------------------------------------------------------------------------
int main(int argc, char **argv)
{
int i;
if ( argc != 2 ) {
fprintf( stderr, "usage: arch_test <arch-type>\n" );
exit(3); // Usage error.
}
if (go( argv[1] )) {
return 0; // Matched.
}
for (i = 0; NULL != all_archs[i]; i++) {
if ( 0 == strcmp( argv[1], all_archs[i] ) )
return 1; // Didn't match, but named another arch.
}
return 2; // Didn't match any archs.
}