diff for duplicates of <87tv07dbi5.fsf@linaro.org> diff --git a/a/1.txt b/N1/1.txt index e2ac7e1..923fda1 100644 --- a/a/1.txt +++ b/N1/1.txt @@ -1,4 +1,3 @@ - Aleksandar Markovic <1880225@bugs.launchpad.net> writes: > Public bug reported: @@ -46,3 +45,161 @@ see /proc/self/maps but I guess that isn't the case here. -- Alex Bennée + +-- +You received this bug notification because you are a member of qemu- +devel-ml, which is subscribed to QEMU. +https://bugs.launchpad.net/bugs/1880225 + +Title: + Emulation of some arm programs fail with "Assertion `have_guest_base' + failed." + +Status in QEMU: + New + +Bug description: + 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"); + } + +To manage notifications about this bug go to: +https://bugs.launchpad.net/qemu/+bug/1880225/+subscriptions diff --git a/a/content_digest b/N1/content_digest index e01642c..9b02de4 100644 --- a/a/content_digest +++ b/N1/content_digest @@ -1,12 +1,10 @@ "ref\0159017301531.7966.9120113243897778171.malonedeb@gac.canonical.com\0" - "From\0Alex Benn\303\251e <alex.bennee@linaro.org>\0" + "From\0Alex Benn\303\251e <1880225@bugs.launchpad.net>\0" "Subject\0Re: [Bug 1880225] [NEW] Emulation of some arm programs fail with \"Assertion `have_guest_base' failed.\"\0" - "Date\0Fri, 22 May 2020 20:18:26 +0100\0" - "To\0Bug 1880225 <1880225@bugs.launchpad.net>\0" - "Cc\0qemu-devel@nongnu.org\0" + "Date\0Fri, 22 May 2020 19:18:26 -0000\0" + "To\0qemu-devel@nongnu.org\0" "\00:1\0" "b\0" - "\n" "Aleksandar Markovic <1880225@bugs.launchpad.net> writes:\n" "\n" "> Public bug reported:\n" @@ -53,6 +51,164 @@ "see /proc/self/maps but I guess that isn't the case here.\n" "\n" "-- \n" - "Alex Benn\303\251e" + "Alex Benn\303\251e\n" + "\n" + "-- \n" + "You received this bug notification because you are a member of qemu-\n" + "devel-ml, which is subscribed to QEMU.\n" + "https://bugs.launchpad.net/bugs/1880225\n" + "\n" + "Title:\n" + " Emulation of some arm programs fail with \"Assertion `have_guest_base'\n" + " failed.\"\n" + "\n" + "Status in QEMU:\n" + " New\n" + "\n" + "Bug description:\n" + " This issue is observer with QEMU ToT, checked out around May 15th (but\n" + " I believe it is present in current master too), and wasn't present in\n" + " QEMU v5.0.0.\n" + "\n" + " I am using 32-bit Intel(R) Pentium(R) M processor 1.73GHz host.\n" + "\n" + " Arm cross-compiler is a standard cross-compiler that comes with\n" + " Debian-based distributions, and gcc version is:\n" + "\n" + " $ arm-linux-gnueabi-gcc --version\n" + " arm-linux-gnueabi-gcc (Debian 8.3.0-2) 8.3.0\n" + "\n" + " Compile this program with cross compiler:\n" + "\n" + " $ arm-linux-gnueabi-gcc -O2 -static toupper_string.c -o\n" + " toupper_string-arm\n" + "\n" + " Emulation with QEMU v5.0.0 is correct, and gives expected output:\n" + "\n" + " $ ~/Build/qemu-5.0.0/build-gcc/arm-linux-user/qemu-arm ./toupper_string-arm\n" + " CONTROL RESULT: (toupper_string)\n" + " nwlrbbmqbhcdarz owkkyhiddqscdxr jmowfrxsjybldbe fsarcbynecdyggx xpklorellnmpapq\n" + " NWLRBBMQBHCDARZ OWKKYHIDDQSCDXR JMOWFRXSJYBLDBE FSARCBYNECDYGGX XPKLORELLNMPAPQ\n" + "\n" + " While, in case of QEMU master it fails:\n" + "\n" + " $ ~/Build/qemu-master/build-gcc/arm-linux-user/qemu-arm ./toupper_string-arm\n" + " qemu-arm: /home/rtrk/Build/qemu-master/linux-user/elfload.c:2294: probe_guest_base: Assertion `have_guest_base' failed.\n" + " Aborted\n" + "\n" + " There are many other programs that exibit the same behavior. The\n" + " failure is arm-sprecific.\n" + "\n" + " \n" + " -----------------------------------------------------\n" + "\n" + " source code: (let's call this file toupper_string.c) (similar file is\n" + " also in attachment)\n" + "\n" + " \n" + " #include <stdlib.h>\n" + " #include <string.h>\n" + " #include <stdio.h>\n" + " #include <unistd.h>\n" + "\n" + " \n" + " #define MAX_STRING_LENGHT 15\n" + " #define NUMBER_OF_RANDOM_STRINGS 100\n" + " #define DEFAULT_NUMBER_OF_REPETITIONS 30000\n" + " #define MAX_NUMBER_OF_REPETITIONS 1000000000\n" + " #define NUMBER_OF_CONTROL_PRINT_ITEMS 5\n" + "\n" + " /* Structure for keeping an array of strings */\n" + " struct StringStruct {\n" + " char chars[MAX_STRING_LENGHT + 1];\n" + " };\n" + "\n" + " /**\n" + " * Sets characters of the given string to random small letters a-z.\n" + " * @param s String to get random characters.\n" + " * @len Length of the input string.\n" + " */\n" + " static void gen_random_string(char *chars, const int len)\n" + " {\n" + " static const char letters[] = \"abcdefghijklmnopqrstuvwxyz\";\n" + "\n" + " for (size_t i = 0; i < len; i++) {\n" + " chars[i] = letters[rand() % (sizeof(letters) - 1)];\n" + " }\n" + " chars[len] = 0;\n" + " }\n" + "\n" + " void main (int argc, char* argv[])\n" + " {\n" + " struct StringStruct random_strings[NUMBER_OF_RANDOM_STRINGS];\n" + " struct StringStruct strings_to_be_uppercased[NUMBER_OF_RANDOM_STRINGS];\n" + " int32_t number_of_repetitions = DEFAULT_NUMBER_OF_REPETITIONS;\n" + " int32_t option;\n" + "\n" + " /* Parse command line options */\n" + " while ((option = getopt(argc, argv, \"n:\")) != -1) {\n" + " if (option == 'n') {\n" + " int32_t user_number_of_repetitions = atoi(optarg);\n" + " /* Check if the value is a negative number */\n" + " if (user_number_of_repetitions < 1) {\n" + " fprintf(stderr, \"Error ... Value for option '-n' cannot be a \"\n" + " \"negative number.\\n\");\n" + " exit(EXIT_FAILURE);\n" + " }\n" + " /* Check if the value is a string or zero */\n" + " if (user_number_of_repetitions == 0) {\n" + " fprintf(stderr, \"Error ... Invalid value for option '-n'.\\n\");\n" + " exit(EXIT_FAILURE);\n" + " }\n" + " /* Check if the value is too large */\n" + " if (user_number_of_repetitions > MAX_NUMBER_OF_REPETITIONS) {\n" + " fprintf(stderr, \"Error ... Value for option '-n' cannot be \"\n" + " \"more than %d.\\n\", MAX_NUMBER_OF_REPETITIONS);\n" + " exit(EXIT_FAILURE);\n" + " }\n" + " number_of_repetitions = user_number_of_repetitions;\n" + " } else {\n" + " exit(EXIT_FAILURE);\n" + " }\n" + " }\n" + "\n" + " /* Create an array of strings with random content */\n" + " srand(1);\n" + " for (size_t i = 0; i < NUMBER_OF_RANDOM_STRINGS; i++) {\n" + " gen_random_string(random_strings[i].chars, MAX_STRING_LENGHT);\n" + " }\n" + "\n" + " /* Perform uppercasing of a set of random strings multiple times */\n" + " for (size_t j = 0; j < number_of_repetitions; j++) {\n" + " /* Copy initial set of random strings to the set to be uppercased */\n" + " memcpy(strings_to_be_uppercased, random_strings,\n" + " NUMBER_OF_RANDOM_STRINGS * (MAX_STRING_LENGHT + 1));\n" + " /* Do actual changing case to uppercase */\n" + " for (size_t i = 0; i < NUMBER_OF_RANDOM_STRINGS; i++) {\n" + " int k = 0;\n" + " \n" + " while (strings_to_be_uppercased[i].chars[k]) { \n" + " char ch = strings_to_be_uppercased[i].chars[k] - 32; \n" + " memcpy((void *)strings_to_be_uppercased[i].chars + k,\n" + " &ch, 1);\n" + " k++; \n" + " } \n" + " }\n" + " }\n" + "\n" + " /* Control printing */\n" + " printf(\"CONTROL RESULT: (toupper_string)\\n\");\n" + " for (size_t i = 0; i < NUMBER_OF_CONTROL_PRINT_ITEMS; i++) {\n" + " printf(\" %s\", random_strings[i].chars);\n" + " }\n" + " printf(\"\\n\");\n" + " for (size_t i = 0; i < NUMBER_OF_CONTROL_PRINT_ITEMS; i++) {\n" + " printf(\" %s\", strings_to_be_uppercased[i].chars);\n" + " }\n" + " printf(\"\\n\");\n" + " }\n" + "\n" + "To manage notifications about this bug go to:\n" + https://bugs.launchpad.net/qemu/+bug/1880225/+subscriptions -d6127861410d0bb06e14a153a616668591158b17e4534e494f4f9b1ccd79565c +0ab3a4c9e97395a1a46d3881693d2cc6b4c227ec59372a1509df1468d73b0692
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.