diff options
Diffstat (limited to 'results/classifier/zero-shot-user-mode/output/runtime/1880225')
| -rw-r--r-- | results/classifier/zero-shot-user-mode/output/runtime/1880225 | 143 |
1 files changed, 0 insertions, 143 deletions
diff --git a/results/classifier/zero-shot-user-mode/output/runtime/1880225 b/results/classifier/zero-shot-user-mode/output/runtime/1880225 deleted file mode 100644 index 287a1c10..00000000 --- a/results/classifier/zero-shot-user-mode/output/runtime/1880225 +++ /dev/null @@ -1,143 +0,0 @@ -runtime: 0.409 -instruction: 0.389 -syscall: 0.202 - - - -Emulation of some arm programs fail with "Assertion `have_guest_base' failed." - -This issue is observer with QEMU ToT, checked out around May 15th (but I believe it is present in current master too), and wasn't present in QEMU v5.0.0. - -I am using 32-bit Intel(R) Pentium(R) M processor 1.73GHz host. - -Arm cross-compiler is a standard cross-compiler that comes with Debian-based distributions, and gcc version is: - -$ arm-linux-gnueabi-gcc --version -arm-linux-gnueabi-gcc (Debian 8.3.0-2) 8.3.0 - -Compile this program with cross compiler: - -$ arm-linux-gnueabi-gcc -O2 -static toupper_string.c -o toupper_string-arm - -Emulation with QEMU v5.0.0 is correct, and gives expected output: - -$ ~/Build/qemu-5.0.0/build-gcc/arm-linux-user/qemu-arm ./toupper_string-arm -CONTROL RESULT: (toupper_string) - nwlrbbmqbhcdarz owkkyhiddqscdxr jmowfrxsjybldbe fsarcbynecdyggx xpklorellnmpapq - NWLRBBMQBHCDARZ OWKKYHIDDQSCDXR JMOWFRXSJYBLDBE FSARCBYNECDYGGX XPKLORELLNMPAPQ - -While, in case of QEMU master it fails: - -$ ~/Build/qemu-master/build-gcc/arm-linux-user/qemu-arm ./toupper_string-arm -qemu-arm: /home/rtrk/Build/qemu-master/linux-user/elfload.c:2294: probe_guest_base: Assertion `have_guest_base' failed. -Aborted - -There are many other programs that exibit the same behavior. The failure is arm-sprecific. - - ------------------------------------------------------ - -source code: (let's call this file toupper_string.c) (similar file is also in attachment) - - -#include <stdlib.h> -#include <string.h> -#include <stdio.h> -#include <unistd.h> - - -#define MAX_STRING_LENGHT 15 -#define NUMBER_OF_RANDOM_STRINGS 100 -#define DEFAULT_NUMBER_OF_REPETITIONS 30000 -#define MAX_NUMBER_OF_REPETITIONS 1000000000 -#define NUMBER_OF_CONTROL_PRINT_ITEMS 5 - -/* Structure for keeping an array of strings */ -struct StringStruct { - char chars[MAX_STRING_LENGHT + 1]; -}; - -/** - * Sets characters of the given string to random small letters a-z. - * @param s String to get random characters. - * @len Length of the input string. - */ -static void gen_random_string(char *chars, const int len) -{ - static const char letters[] = "abcdefghijklmnopqrstuvwxyz"; - - for (size_t i = 0; i < len; i++) { - chars[i] = letters[rand() % (sizeof(letters) - 1)]; - } - chars[len] = 0; -} - -void main (int argc, char* argv[]) -{ - struct StringStruct random_strings[NUMBER_OF_RANDOM_STRINGS]; - struct StringStruct strings_to_be_uppercased[NUMBER_OF_RANDOM_STRINGS]; - int32_t number_of_repetitions = DEFAULT_NUMBER_OF_REPETITIONS; - int32_t option; - - /* Parse command line options */ - while ((option = getopt(argc, argv, "n:")) != -1) { - if (option == 'n') { - int32_t user_number_of_repetitions = atoi(optarg); - /* Check if the value is a negative number */ - if (user_number_of_repetitions < 1) { - fprintf(stderr, "Error ... Value for option '-n' cannot be a " - "negative number.\n"); - exit(EXIT_FAILURE); - } - /* Check if the value is a string or zero */ - if (user_number_of_repetitions == 0) { - fprintf(stderr, "Error ... Invalid value for option '-n'.\n"); - exit(EXIT_FAILURE); - } - /* Check if the value is too large */ - if (user_number_of_repetitions > MAX_NUMBER_OF_REPETITIONS) { - fprintf(stderr, "Error ... Value for option '-n' cannot be " - "more than %d.\n", MAX_NUMBER_OF_REPETITIONS); - exit(EXIT_FAILURE); - } - number_of_repetitions = user_number_of_repetitions; - } else { - exit(EXIT_FAILURE); - } - } - - /* Create an array of strings with random content */ - srand(1); - for (size_t i = 0; i < NUMBER_OF_RANDOM_STRINGS; i++) { - gen_random_string(random_strings[i].chars, MAX_STRING_LENGHT); - } - - /* Perform uppercasing of a set of random strings multiple times */ - for (size_t j = 0; j < number_of_repetitions; j++) { - /* Copy initial set of random strings to the set to be uppercased */ - memcpy(strings_to_be_uppercased, random_strings, - NUMBER_OF_RANDOM_STRINGS * (MAX_STRING_LENGHT + 1)); - /* Do actual changing case to uppercase */ - for (size_t i = 0; i < NUMBER_OF_RANDOM_STRINGS; i++) { - int k = 0; - - while (strings_to_be_uppercased[i].chars[k]) { - char ch = strings_to_be_uppercased[i].chars[k] - 32; - memcpy((void *)strings_to_be_uppercased[i].chars + k, - &ch, 1); - k++; - } - } - } - - /* Control printing */ - printf("CONTROL RESULT: (toupper_string)\n"); - for (size_t i = 0; i < NUMBER_OF_CONTROL_PRINT_ITEMS; i++) { - printf(" %s", random_strings[i].chars); - } - printf("\n"); - for (size_t i = 0; i < NUMBER_OF_CONTROL_PRINT_ITEMS; i++) { - printf(" %s", strings_to_be_uppercased[i].chars); - } - printf("\n"); -} \ No newline at end of file |