)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":1002273,"name":"Richard Allen","email":"rsaxvc@gmail.com","username":"rsaxvc","status":"@BryghtLabs, @rsaxvc.net"},"change_message_id":"c0acbe4c3d53ac89d5da9e3cc2f5a8f51e802b31","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"a6a05a41_a8fde03b","updated":"2025-02-07 04:07:20.000000000","message":"Valgrind reports no memory errors, and no additional memory leaks.","commit_id":"72c6a9b339cead91ced17267745a703e8abe1837"},{"author":{"_account_id":1001803,"name":"Samuel Obuch","email":"samuel.obuch@espressif.com","username":"sobuch"},"change_message_id":"3a8a011afafd8cfc7be357765f28495a392a3afc","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"820f364e_be373d24","updated":"2025-02-13 14:54:49.000000000","message":"One last minor nitpick, but this looks good to me as is already.","commit_id":"b9c7051beae016d5e02bb05f09961407d9e4a2d2"},{"author":{"_account_id":1002306,"name":"Richard Allen","display_name":"Richard Allen","email":"rsaxvc@rsaxvc.net"},"change_message_id":"b9e800ff6a2d7975e1e851738206365aa770c0e9","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"d89f2874_4e1ead9f","updated":"2025-02-12 22:01:48.000000000","message":"Valgrind reports no memory errors, and no additional memory leaks.","commit_id":"b9c7051beae016d5e02bb05f09961407d9e4a2d2"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"4800fbb3dd2e8cd3e6e4c4880084298253e6f73b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"5e607fb2_0a474e62","updated":"2026-05-11 07:34:56.000000000","message":"Thanks","commit_id":"37c06cbca636915dace77ef2d53e35d434fa1fda"}],"src/target/target.c":[{"author":{"_account_id":1001803,"name":"Samuel Obuch","email":"samuel.obuch@espressif.com","username":"sobuch"},"change_message_id":"55b543e33d937f46d9d999f928b1091cd9e81ebb","unresolved":true,"context_lines":[{"line_number":4211,"context_line":"{"},{"line_number":4212,"context_line":"\tuint32_t i;"},{"line_number":4213,"context_line":""},{"line_number":4214,"context_line":"\t/* trim out of address range samples */"},{"line_number":4215,"context_line":"\tif (with_range) {"},{"line_number":4216,"context_line":"\t\twhile (sample_num \u0026\u0026 samples[0] \u003c start_address) {"},{"line_number":4217,"context_line":"\t\t\tsample_num--;"}],"source_content_type":"text/x-csrc","patch_set":2,"id":"cc8a6b16_11670494","line":4214,"updated":"2025-01-31 13:38:26.000000000","message":"Given the samples are sorted, could the search for in-address-range samples be more efficient, maybe using binary search?","commit_id":"743cf8d82db614966a783a3b1e4d11f738f301ee"},{"author":{"_account_id":1001803,"name":"Samuel Obuch","email":"samuel.obuch@espressif.com","username":"sobuch"},"change_message_id":"a46820354550b2d0a5935933ca9512b53dd83b8e","unresolved":true,"context_lines":[{"line_number":4211,"context_line":"{"},{"line_number":4212,"context_line":"\tuint32_t i;"},{"line_number":4213,"context_line":""},{"line_number":4214,"context_line":"\t/* trim out of address range samples */"},{"line_number":4215,"context_line":"\tif (with_range) {"},{"line_number":4216,"context_line":"\t\twhile (sample_num \u0026\u0026 samples[0] \u003c start_address) {"},{"line_number":4217,"context_line":"\t\t\tsample_num--;"}],"source_content_type":"text/x-csrc","patch_set":2,"id":"75d2996e_f66675c5","line":4214,"in_reply_to":"652f42f4_b118c634","updated":"2025-02-03 14:47:28.000000000","message":"Yes, you are right, better to filter before sorting.\n\nSeems like a nice improvement, it would simplify write_gmon as min/max are then known just from samples and sample_num, no need for start/end_address or with_range parameters.","commit_id":"743cf8d82db614966a783a3b1e4d11f738f301ee"},{"author":{"_account_id":1002273,"name":"Richard Allen","email":"rsaxvc@gmail.com","username":"rsaxvc","status":"@BryghtLabs, @rsaxvc.net"},"change_message_id":"267e5909ce9c6d7a2b62242bdc43e9d3abc4e197","unresolved":true,"context_lines":[{"line_number":4211,"context_line":"{"},{"line_number":4212,"context_line":"\tuint32_t i;"},{"line_number":4213,"context_line":""},{"line_number":4214,"context_line":"\t/* trim out of address range samples */"},{"line_number":4215,"context_line":"\tif (with_range) {"},{"line_number":4216,"context_line":"\t\twhile (sample_num \u0026\u0026 samples[0] \u003c start_address) {"},{"line_number":4217,"context_line":"\t\t\tsample_num--;"}],"source_content_type":"text/x-csrc","patch_set":2,"id":"ff6ebfe0_9bdaf891","line":4214,"in_reply_to":"75d2996e_f66675c5","updated":"2025-02-04 04:08:46.000000000","message":"I\u0027m also looking at generating multiple, smaller histograms, and refactoring the address range out of this function helps. Might take me a few days to test it all out.","commit_id":"743cf8d82db614966a783a3b1e4d11f738f301ee"},{"author":{"_account_id":1002278,"name":"bryghtlabs-richard","display_name":"Richard Allen","username":"bryghtlabs-richard","status":"Firmware at BryghtLabs. Also rsaxvc at home."},"change_message_id":"c4653f246b0f3b63cd593775cbb00b5b2a5029fb","unresolved":true,"context_lines":[{"line_number":4211,"context_line":"{"},{"line_number":4212,"context_line":"\tuint32_t i;"},{"line_number":4213,"context_line":""},{"line_number":4214,"context_line":"\t/* trim out of address range samples */"},{"line_number":4215,"context_line":"\tif (with_range) {"},{"line_number":4216,"context_line":"\t\twhile (sample_num \u0026\u0026 samples[0] \u003c start_address) {"},{"line_number":4217,"context_line":"\t\t\tsample_num--;"}],"source_content_type":"text/x-csrc","patch_set":2,"id":"f5904285_1819b2e2","line":4214,"in_reply_to":"cc8a6b16_11670494","updated":"2025-01-31 14:28:10.000000000","message":"It could, though I wasn\u0027t considering runtime efficiency when I wrote this patch series.\n\nA better place to trim might be directly at the architecture-specific samplers instead of here.","commit_id":"743cf8d82db614966a783a3b1e4d11f738f301ee"},{"author":{"_account_id":1002273,"name":"Richard Allen","email":"rsaxvc@gmail.com","username":"rsaxvc","status":"@BryghtLabs, @rsaxvc.net"},"change_message_id":"590ea61ccaeb05a6b62295160fd01efa8c476786","unresolved":true,"context_lines":[{"line_number":4211,"context_line":"{"},{"line_number":4212,"context_line":"\tuint32_t i;"},{"line_number":4213,"context_line":""},{"line_number":4214,"context_line":"\t/* trim out of address range samples */"},{"line_number":4215,"context_line":"\tif (with_range) {"},{"line_number":4216,"context_line":"\t\twhile (sample_num \u0026\u0026 samples[0] \u003c start_address) {"},{"line_number":4217,"context_line":"\t\t\tsample_num--;"}],"source_content_type":"text/x-csrc","patch_set":2,"id":"652f42f4_b118c634","line":4214,"in_reply_to":"f5904285_1819b2e2","updated":"2025-02-02 06:42:39.000000000","message":"What do you think about this: before sorting, I can filter the samples by min/max address and scale the duration_ms by (keptSamples/totalSamples). Then there is no need to sort unused samples, and the timing doesn\u0027t skew so badly.","commit_id":"743cf8d82db614966a783a3b1e4d11f738f301ee"},{"author":{"_account_id":1002306,"name":"Richard Allen","display_name":"Richard Allen","email":"rsaxvc@rsaxvc.net"},"change_message_id":"b9e800ff6a2d7975e1e851738206365aa770c0e9","unresolved":false,"context_lines":[{"line_number":4211,"context_line":"{"},{"line_number":4212,"context_line":"\tuint32_t i;"},{"line_number":4213,"context_line":""},{"line_number":4214,"context_line":"\t/* trim out of address range samples */"},{"line_number":4215,"context_line":"\tif (with_range) {"},{"line_number":4216,"context_line":"\t\twhile (sample_num \u0026\u0026 samples[0] \u003c start_address) {"},{"line_number":4217,"context_line":"\t\t\tsample_num--;"}],"source_content_type":"text/x-csrc","patch_set":2,"id":"ae215101_d110e936","line":4214,"in_reply_to":"ff6ebfe0_9bdaf891","updated":"2025-02-12 22:01:48.000000000","message":"Done","commit_id":"743cf8d82db614966a783a3b1e4d11f738f301ee"},{"author":{"_account_id":1001803,"name":"Samuel Obuch","email":"samuel.obuch@espressif.com","username":"sobuch"},"change_message_id":"dfa23921c7778b7ae6fbe8322675718323e6b37c","unresolved":true,"context_lines":[{"line_number":4212,"context_line":"{"},{"line_number":4213,"context_line":"\tuint32_t i;"},{"line_number":4214,"context_line":""},{"line_number":4215,"context_line":"\tif (!sample_num) {"},{"line_number":4216,"context_line":"\t\tLOG_WARNING(\"no samples to write\");"},{"line_number":4217,"context_line":"\t\treturn;"},{"line_number":4218,"context_line":"\t}"}],"source_content_type":"text/x-csrc","patch_set":4,"id":"f69fd6ef_8854e5be","line":4215,"updated":"2025-02-10 10:19:21.000000000","message":"Seems to me the preferred style is `if (sample_num \u003d\u003d 0)`\n\nWhat do you think about moving this check out of the function as well, to have it together with the filtering?","commit_id":"72c6a9b339cead91ced17267745a703e8abe1837"},{"author":{"_account_id":1002306,"name":"Richard Allen","display_name":"Richard Allen","email":"rsaxvc@rsaxvc.net"},"change_message_id":"b9e800ff6a2d7975e1e851738206365aa770c0e9","unresolved":false,"context_lines":[{"line_number":4212,"context_line":"{"},{"line_number":4213,"context_line":"\tuint32_t i;"},{"line_number":4214,"context_line":""},{"line_number":4215,"context_line":"\tif (!sample_num) {"},{"line_number":4216,"context_line":"\t\tLOG_WARNING(\"no samples to write\");"},{"line_number":4217,"context_line":"\t\treturn;"},{"line_number":4218,"context_line":"\t}"}],"source_content_type":"text/x-csrc","patch_set":4,"id":"5ca85c9b_4584c242","line":4215,"in_reply_to":"f69fd6ef_8854e5be","updated":"2025-02-12 22:01:48.000000000","message":"Good idea - done","commit_id":"72c6a9b339cead91ced17267745a703e8abe1837"},{"author":{"_account_id":1001803,"name":"Samuel Obuch","email":"samuel.obuch@espressif.com","username":"sobuch"},"change_message_id":"dfa23921c7778b7ae6fbe8322675718323e6b37c","unresolved":true,"context_lines":[{"line_number":4259,"context_line":"\tfor (i \u003d 0, bidx \u003d 0; bidx \u003c num_buckets; ++bidx) {"},{"line_number":4260,"context_line":"\t\tint val \u003d 0;"},{"line_number":4261,"context_line":"\t\tlong long bmax \u003d min + (long long)address_space * (bidx + 1) / num_buckets;"},{"line_number":4262,"context_line":"\t\tfor ( ; i \u003c sample_num \u0026\u0026 samples[i] \u003c bmax; ++i)"},{"line_number":4263,"context_line":"\t\t\tif (val \u003c 65535)"},{"line_number":4264,"context_line":"\t\t\t\tval++;"},{"line_number":4265,"context_line":""},{"line_number":4266,"context_line":"\t\tuint8_t data[2];"},{"line_number":4267,"context_line":"\t\tdata[0] \u003d val \u0026 0xff;"}],"source_content_type":"text/x-csrc","patch_set":4,"id":"82d294b8_ca76528d","line":4264,"range":{"start_line":4262,"start_character":0,"end_line":4264,"end_character":6},"updated":"2025-02-10 10:19:21.000000000","message":"I think this is more readable if we move the check for overflow out of the inner loop:\n```\nint val \u003d 0;\nfor ( ; i \u003c sample_num \u0026\u0026 samples[i] \u003c bmax; ++i)\n    val++;\nif (val \u003e 65535)\n    val \u003d 65535;\n```","commit_id":"72c6a9b339cead91ced17267745a703e8abe1837"},{"author":{"_account_id":1002306,"name":"Richard Allen","display_name":"Richard Allen","email":"rsaxvc@rsaxvc.net"},"change_message_id":"b9e800ff6a2d7975e1e851738206365aa770c0e9","unresolved":false,"context_lines":[{"line_number":4259,"context_line":"\tfor (i \u003d 0, bidx \u003d 0; bidx \u003c num_buckets; ++bidx) {"},{"line_number":4260,"context_line":"\t\tint val \u003d 0;"},{"line_number":4261,"context_line":"\t\tlong long bmax \u003d min + (long long)address_space * (bidx + 1) / num_buckets;"},{"line_number":4262,"context_line":"\t\tfor ( ; i \u003c sample_num \u0026\u0026 samples[i] \u003c bmax; ++i)"},{"line_number":4263,"context_line":"\t\t\tif (val \u003c 65535)"},{"line_number":4264,"context_line":"\t\t\t\tval++;"},{"line_number":4265,"context_line":""},{"line_number":4266,"context_line":"\t\tuint8_t data[2];"},{"line_number":4267,"context_line":"\t\tdata[0] \u003d val \u0026 0xff;"}],"source_content_type":"text/x-csrc","patch_set":4,"id":"188233ec_2fae736e","line":4264,"range":{"start_line":4262,"start_character":0,"end_line":4264,"end_character":6},"in_reply_to":"82d294b8_ca76528d","updated":"2025-02-12 22:01:48.000000000","message":"Done","commit_id":"72c6a9b339cead91ced17267745a703e8abe1837"},{"author":{"_account_id":1002278,"name":"bryghtlabs-richard","display_name":"Richard Allen","username":"bryghtlabs-richard","status":"Firmware at BryghtLabs. Also rsaxvc at home."},"change_message_id":"98d2bdbd578776886e4b16ebdbba17152f522404","unresolved":true,"context_lines":[{"line_number":4211,"context_line":"\t\t\tstruct target *target, uint32_t duration_ms)"},{"line_number":4212,"context_line":"{"},{"line_number":4213,"context_line":"\tuint32_t i;"},{"line_number":4214,"context_line":""},{"line_number":4215,"context_line":"\tFILE *f \u003d fopen(filename, \"wb\");"},{"line_number":4216,"context_line":"\tif (!f)"},{"line_number":4217,"context_line":"\t\treturn;"}],"source_content_type":"text/x-csrc","patch_set":5,"id":"0f93226f_7972c27f","line":4214,"updated":"2025-02-14 20:02:23.000000000","message":"oops, will remove this extra newline","commit_id":"b9c7051beae016d5e02bb05f09961407d9e4a2d2"},{"author":{"_account_id":1002273,"name":"Richard Allen","email":"rsaxvc@gmail.com","username":"rsaxvc","status":"@BryghtLabs, @rsaxvc.net"},"change_message_id":"2d19f6559c1c75df291b944e067c65bb69061968","unresolved":false,"context_lines":[{"line_number":4211,"context_line":"\t\t\tstruct target *target, uint32_t duration_ms)"},{"line_number":4212,"context_line":"{"},{"line_number":4213,"context_line":"\tuint32_t i;"},{"line_number":4214,"context_line":""},{"line_number":4215,"context_line":"\tFILE *f \u003d fopen(filename, \"wb\");"},{"line_number":4216,"context_line":"\tif (!f)"},{"line_number":4217,"context_line":"\t\treturn;"}],"source_content_type":"text/x-csrc","patch_set":5,"id":"f1f51537_100fae7e","line":4214,"in_reply_to":"0f93226f_7972c27f","updated":"2025-02-18 03:34:41.000000000","message":"Done","commit_id":"b9c7051beae016d5e02bb05f09961407d9e4a2d2"},{"author":{"_account_id":1001803,"name":"Samuel Obuch","email":"samuel.obuch@espressif.com","username":"sobuch"},"change_message_id":"3a8a011afafd8cfc7be357765f28495a392a3afc","unresolved":true,"context_lines":[{"line_number":4249,"context_line":"\t\twrite_data(f, \u0026zero, 1);"},{"line_number":4250,"context_line":"\twrite_string(f, \"s\");"},{"line_number":4251,"context_line":""},{"line_number":4252,"context_line":"\t/*append binary memory gmon.out profile_hist_data (profile_hist_data + profile_hist_hdr.hist_size) */"},{"line_number":4253,"context_line":"\tuint32_t bidx;"},{"line_number":4254,"context_line":"\tfor (i \u003d 0, bidx \u003d 0; bidx \u003c num_buckets; ++bidx) {"},{"line_number":4255,"context_line":"\t\tuint32_t val \u003d 0;"},{"line_number":4256,"context_line":"\t\tlong long bmax \u003d min + (long long)address_space * (bidx + 1) / num_buckets;"},{"line_number":4257,"context_line":"\t\tfor ( ; i \u003c sample_num \u0026\u0026 samples[i] \u003c bmax; ++i)"}],"source_content_type":"text/x-csrc","patch_set":5,"id":"66eb22e7_d3c59761","line":4254,"range":{"start_line":4252,"start_character":102,"end_line":4254,"end_character":52},"updated":"2025-02-13 14:54:49.000000000","message":"I think this is better the way you updated in the later patch, as the variables are not used outside of the loop\n```\n\tfor (uint32_t i \u003d 0, bidx \u003d 0; bidx \u003c num_buckets; ++bidx) {\n```","commit_id":"b9c7051beae016d5e02bb05f09961407d9e4a2d2"},{"author":{"_account_id":1002278,"name":"bryghtlabs-richard","display_name":"Richard Allen","username":"bryghtlabs-richard","status":"Firmware at BryghtLabs. Also rsaxvc at home."},"change_message_id":"98d2bdbd578776886e4b16ebdbba17152f522404","unresolved":true,"context_lines":[{"line_number":4249,"context_line":"\t\twrite_data(f, \u0026zero, 1);"},{"line_number":4250,"context_line":"\twrite_string(f, \"s\");"},{"line_number":4251,"context_line":""},{"line_number":4252,"context_line":"\t/*append binary memory gmon.out profile_hist_data (profile_hist_data + profile_hist_hdr.hist_size) */"},{"line_number":4253,"context_line":"\tuint32_t bidx;"},{"line_number":4254,"context_line":"\tfor (i \u003d 0, bidx \u003d 0; bidx \u003c num_buckets; ++bidx) {"},{"line_number":4255,"context_line":"\t\tuint32_t val \u003d 0;"},{"line_number":4256,"context_line":"\t\tlong long bmax \u003d min + (long long)address_space * (bidx + 1) / num_buckets;"},{"line_number":4257,"context_line":"\t\tfor ( ; i \u003c sample_num \u0026\u0026 samples[i] \u003c bmax; ++i)"}],"source_content_type":"text/x-csrc","patch_set":5,"id":"f6bd1458_37e9f5df","line":4254,"range":{"start_line":4252,"start_character":102,"end_line":4254,"end_character":52},"in_reply_to":"66eb22e7_d3c59761","updated":"2025-02-14 20:02:23.000000000","message":"I think it looks cleaner too. But now I notice a lot of other places keep the variable declaration separate. Does OpenOCD try to keep C89 compatibility or is C99 variable-in-loop ok? I will try to find out.","commit_id":"b9c7051beae016d5e02bb05f09961407d9e4a2d2"},{"author":{"_account_id":1002273,"name":"Richard Allen","email":"rsaxvc@gmail.com","username":"rsaxvc","status":"@BryghtLabs, @rsaxvc.net"},"change_message_id":"2d19f6559c1c75df291b944e067c65bb69061968","unresolved":false,"context_lines":[{"line_number":4249,"context_line":"\t\twrite_data(f, \u0026zero, 1);"},{"line_number":4250,"context_line":"\twrite_string(f, \"s\");"},{"line_number":4251,"context_line":""},{"line_number":4252,"context_line":"\t/*append binary memory gmon.out profile_hist_data (profile_hist_data + profile_hist_hdr.hist_size) */"},{"line_number":4253,"context_line":"\tuint32_t bidx;"},{"line_number":4254,"context_line":"\tfor (i \u003d 0, bidx \u003d 0; bidx \u003c num_buckets; ++bidx) {"},{"line_number":4255,"context_line":"\t\tuint32_t val \u003d 0;"},{"line_number":4256,"context_line":"\t\tlong long bmax \u003d min + (long long)address_space * (bidx + 1) / num_buckets;"},{"line_number":4257,"context_line":"\t\tfor ( ; i \u003c sample_num \u0026\u0026 samples[i] \u003c bmax; ++i)"}],"source_content_type":"text/x-csrc","patch_set":5,"id":"646e733b_3583a798","line":4254,"range":{"start_line":4252,"start_character":102,"end_line":4254,"end_character":52},"in_reply_to":"f6bd1458_37e9f5df","updated":"2025-02-18 03:34:41.000000000","message":"Seems variable-in-loop is ok, just not used in this file.","commit_id":"b9c7051beae016d5e02bb05f09961407d9e4a2d2"},{"author":{"_account_id":1002278,"name":"bryghtlabs-richard","display_name":"Richard Allen","username":"bryghtlabs-richard","status":"Firmware at BryghtLabs. Also rsaxvc at home."},"change_message_id":"98d2bdbd578776886e4b16ebdbba17152f522404","unresolved":true,"context_lines":[{"line_number":4256,"context_line":"\t\tlong long bmax \u003d min + (long long)address_space * (bidx + 1) / num_buckets;"},{"line_number":4257,"context_line":"\t\tfor ( ; i \u003c sample_num \u0026\u0026 samples[i] \u003c bmax; ++i)"},{"line_number":4258,"context_line":"\t\t\tval++;"},{"line_number":4259,"context_line":"\t\tif (val \u003e UINT16_MAX)"},{"line_number":4260,"context_line":"\t\t\tval \u003d UINT16_MAX;"},{"line_number":4261,"context_line":""},{"line_number":4262,"context_line":"\t\tuint8_t data[2];"}],"source_content_type":"text/x-csrc","patch_set":5,"id":"f816a009_d57c67b2","line":4259,"updated":"2025-02-14 20:02:23.000000000","message":"I think we should print an error when clipping histogram bin, and include the clipped address.","commit_id":"b9c7051beae016d5e02bb05f09961407d9e4a2d2"},{"author":{"_account_id":1002273,"name":"Richard Allen","email":"rsaxvc@gmail.com","username":"rsaxvc","status":"@BryghtLabs, @rsaxvc.net"},"change_message_id":"2d19f6559c1c75df291b944e067c65bb69061968","unresolved":false,"context_lines":[{"line_number":4256,"context_line":"\t\tlong long bmax \u003d min + (long long)address_space * (bidx + 1) / num_buckets;"},{"line_number":4257,"context_line":"\t\tfor ( ; i \u003c sample_num \u0026\u0026 samples[i] \u003c bmax; ++i)"},{"line_number":4258,"context_line":"\t\t\tval++;"},{"line_number":4259,"context_line":"\t\tif (val \u003e UINT16_MAX)"},{"line_number":4260,"context_line":"\t\t\tval \u003d UINT16_MAX;"},{"line_number":4261,"context_line":""},{"line_number":4262,"context_line":"\t\tuint8_t data[2];"}],"source_content_type":"text/x-csrc","patch_set":5,"id":"c785f7ec_59ec08e7","line":4259,"in_reply_to":"f816a009_d57c67b2","updated":"2025-02-18 03:34:41.000000000","message":"Done. Did not include address since it\u0027s not really an address, but a bin-range.","commit_id":"b9c7051beae016d5e02bb05f09961407d9e4a2d2"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"ee58083ba8b15c9f40321b06b71f7a724c419656","unresolved":true,"context_lines":[{"line_number":4247,"context_line":"\tfloat sample_rate \u003d sample_num / (duration_ms / 1000.0);"},{"line_number":4248,"context_line":"\twrite_long(f, sample_rate, target);"},{"line_number":4249,"context_line":"\twrite_string(f, \"seconds\");"},{"line_number":4250,"context_line":"\tfor (uint32_t i \u003d 0; i \u003c (15 - strlen(\"seconds\")); i++)"},{"line_number":4251,"context_line":"\t\twrite_data(f, \u0026zero, 1);"},{"line_number":4252,"context_line":"\twrite_string(f, \"s\");"},{"line_number":4253,"context_line":""}],"source_content_type":"text/x-csrc","patch_set":7,"id":"83d5e5d0_8d731c97","line":4250,"updated":"2026-05-09 20:09:54.000000000","message":"This code \u0027abuses\u0027 of `uint32_t` type.\nThe OpenOCD coding style in\nhttps://review.openocd.org/c/openocd/+/8605/7/doc/manual/style.txt#168\nreports that we should not use `uint32_t` when we don\u0027t care about the data size.\nI\u0027m not asking you to fix all the incorrect uses in this file, it\u0027s not your fault.\nBut since you are changing this line, please do it accordingly to the coding style.\nHere `strlen()` returns `size_t`, that has unsigned value.\nI think the best way to avoid signed vs unsigned comparison it to rewrite it as:\n`for (size_t i \u003d strlen(\"seconds\"); i \u003c 15; i++)`","commit_id":"21475a0b4463b82d97f3be13452f46cd889ce103"},{"author":{"_account_id":1002273,"name":"Richard Allen","email":"rsaxvc@gmail.com","username":"rsaxvc","status":"@BryghtLabs, @rsaxvc.net"},"change_message_id":"15ec0a8e710061408e0af80b9481d1c9d903fa88","unresolved":false,"context_lines":[{"line_number":4247,"context_line":"\tfloat sample_rate \u003d sample_num / (duration_ms / 1000.0);"},{"line_number":4248,"context_line":"\twrite_long(f, sample_rate, target);"},{"line_number":4249,"context_line":"\twrite_string(f, \"seconds\");"},{"line_number":4250,"context_line":"\tfor (uint32_t i \u003d 0; i \u003c (15 - strlen(\"seconds\")); i++)"},{"line_number":4251,"context_line":"\t\twrite_data(f, \u0026zero, 1);"},{"line_number":4252,"context_line":"\twrite_string(f, \"s\");"},{"line_number":4253,"context_line":""}],"source_content_type":"text/x-csrc","patch_set":7,"id":"7df9bf97_2d247429","line":4250,"in_reply_to":"83d5e5d0_8d731c97","updated":"2026-05-11 04:39:23.000000000","message":"Thanks - that is more clear too.","commit_id":"21475a0b4463b82d97f3be13452f46cd889ce103"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"ee58083ba8b15c9f40321b06b71f7a724c419656","unresolved":false,"context_lines":[{"line_number":4252,"context_line":"\twrite_string(f, \"s\");"},{"line_number":4253,"context_line":""},{"line_number":4254,"context_line":"\t/*append binary memory gmon.out profile_hist_data (profile_hist_data + profile_hist_hdr.hist_size) */"},{"line_number":4255,"context_line":"\tfor (uint32_t i \u003d 0, bidx \u003d 0; bidx \u003c num_buckets; ++bidx) {"},{"line_number":4256,"context_line":"\t\tuint32_t val \u003d 0;"},{"line_number":4257,"context_line":"\t\tlong long bmax \u003d min + (long long)address_space * (bidx + 1) / num_buckets;"},{"line_number":4258,"context_line":"\t\tfor (; i \u003c sample_num \u0026\u0026 samples[i] \u003c bmax; ++i)"}],"source_content_type":"text/x-csrc","patch_set":7,"id":"c59b2fab_3721397a","line":4255,"updated":"2026-05-09 20:09:54.000000000","message":"Here `i` will be compared vs `uint32_t sample_num`, so it can be kept as `uint32_t`.\nAlso `bidx` compared vs `uint32_t num_buckets`, so ok.","commit_id":"21475a0b4463b82d97f3be13452f46cd889ce103"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"ee58083ba8b15c9f40321b06b71f7a724c419656","unresolved":true,"context_lines":[{"line_number":4254,"context_line":"\t/*append binary memory gmon.out profile_hist_data (profile_hist_data + profile_hist_hdr.hist_size) */"},{"line_number":4255,"context_line":"\tfor (uint32_t i \u003d 0, bidx \u003d 0; bidx \u003c num_buckets; ++bidx) {"},{"line_number":4256,"context_line":"\t\tuint32_t val \u003d 0;"},{"line_number":4257,"context_line":"\t\tlong long bmax \u003d min + (long long)address_space * (bidx + 1) / num_buckets;"},{"line_number":4258,"context_line":"\t\tfor (; i \u003c sample_num \u0026\u0026 samples[i] \u003c bmax; ++i)"},{"line_number":4259,"context_line":"\t\t\tval++;"},{"line_number":4260,"context_line":"\t\tif (val \u003e UINT16_MAX) {"}],"source_content_type":"text/x-csrc","patch_set":7,"id":"52b74b2e_182bc9eb","line":4257,"updated":"2026-05-09 20:09:54.000000000","message":"Please try to avoid cast, when possible.\nIf you change the type of `address_space` above:\n4234: `long long address_space \u003d max - min;`\nhere you can skip the cast.","commit_id":"21475a0b4463b82d97f3be13452f46cd889ce103"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"597ceadf2b416aaeea655a066207d3f0cd92396d","unresolved":false,"context_lines":[{"line_number":4254,"context_line":"\t/*append binary memory gmon.out profile_hist_data (profile_hist_data + profile_hist_hdr.hist_size) */"},{"line_number":4255,"context_line":"\tfor (uint32_t i \u003d 0, bidx \u003d 0; bidx \u003c num_buckets; ++bidx) {"},{"line_number":4256,"context_line":"\t\tuint32_t val \u003d 0;"},{"line_number":4257,"context_line":"\t\tlong long bmax \u003d min + (long long)address_space * (bidx + 1) / num_buckets;"},{"line_number":4258,"context_line":"\t\tfor (; i \u003c sample_num \u0026\u0026 samples[i] \u003c bmax; ++i)"},{"line_number":4259,"context_line":"\t\t\tval++;"},{"line_number":4260,"context_line":"\t\tif (val \u003e UINT16_MAX) {"}],"source_content_type":"text/x-csrc","patch_set":7,"id":"1aab0101_ba09d22e","line":4257,"in_reply_to":"52b74b2e_182bc9eb","updated":"2026-05-09 20:29:23.000000000","message":"I see that in next commit this cast disappear.\nNo need to change it in this commit. Keep the cast, here.","commit_id":"21475a0b4463b82d97f3be13452f46cd889ce103"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"ee58083ba8b15c9f40321b06b71f7a724c419656","unresolved":true,"context_lines":[{"line_number":4256,"context_line":"\t\tuint32_t val \u003d 0;"},{"line_number":4257,"context_line":"\t\tlong long bmax \u003d min + (long long)address_space * (bidx + 1) / num_buckets;"},{"line_number":4258,"context_line":"\t\tfor (; i \u003c sample_num \u0026\u0026 samples[i] \u003c bmax; ++i)"},{"line_number":4259,"context_line":"\t\t\tval++;"},{"line_number":4260,"context_line":"\t\tif (val \u003e UINT16_MAX) {"},{"line_number":4261,"context_line":"\t\t\tLOG_WARNING(\"profiler bucket saturated, will read as 65535\");"},{"line_number":4262,"context_line":"\t\t\tval \u003d UINT16_MAX;"}],"source_content_type":"text/x-csrc","patch_set":7,"id":"42ceb36d_4bd8ec56","line":4259,"updated":"2026-05-09 20:09:54.000000000","message":"Instead of incrementing two variables, rewrite it as:\n```\nuint32_t val \u003d i;\nwhile (i \u003c sample_num \u0026\u0026 samples[i] \u003c bmax)\n    ++i;\nval \u003d i - val;\n```","commit_id":"21475a0b4463b82d97f3be13452f46cd889ce103"},{"author":{"_account_id":1002273,"name":"Richard Allen","email":"rsaxvc@gmail.com","username":"rsaxvc","status":"@BryghtLabs, @rsaxvc.net"},"change_message_id":"a09073bf7aa7598625451420509ab303de211082","unresolved":false,"context_lines":[{"line_number":4256,"context_line":"\t\tuint32_t val \u003d 0;"},{"line_number":4257,"context_line":"\t\tlong long bmax \u003d min + (long long)address_space * (bidx + 1) / num_buckets;"},{"line_number":4258,"context_line":"\t\tfor (; i \u003c sample_num \u0026\u0026 samples[i] \u003c bmax; ++i)"},{"line_number":4259,"context_line":"\t\t\tval++;"},{"line_number":4260,"context_line":"\t\tif (val \u003e UINT16_MAX) {"},{"line_number":4261,"context_line":"\t\t\tLOG_WARNING(\"profiler bucket saturated, will read as 65535\");"},{"line_number":4262,"context_line":"\t\t\tval \u003d UINT16_MAX;"}],"source_content_type":"text/x-csrc","patch_set":7,"id":"c6b1e9b7_8de18651","line":4259,"in_reply_to":"42ceb36d_4bd8ec56","updated":"2026-05-11 04:39:42.000000000","message":"Done","commit_id":"21475a0b4463b82d97f3be13452f46cd889ce103"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"ee58083ba8b15c9f40321b06b71f7a724c419656","unresolved":true,"context_lines":[{"line_number":4258,"context_line":"\t\tfor (; i \u003c sample_num \u0026\u0026 samples[i] \u003c bmax; ++i)"},{"line_number":4259,"context_line":"\t\t\tval++;"},{"line_number":4260,"context_line":"\t\tif (val \u003e UINT16_MAX) {"},{"line_number":4261,"context_line":"\t\t\tLOG_WARNING(\"profiler bucket saturated, will read as 65535\");"},{"line_number":4262,"context_line":"\t\t\tval \u003d UINT16_MAX;"},{"line_number":4263,"context_line":"\t\t}"},{"line_number":4264,"context_line":""}],"source_content_type":"text/x-csrc","patch_set":7,"id":"07e4a48d_14539150","line":4261,"updated":"2026-05-09 20:09:54.000000000","message":"This new warning can be quite annoying if it gets repeated for several buckets.\nTo limit the flood, declare before the loop in line 4255 a boolean\n`bool saturated_once \u003d false;`\nand here use\n```\nif (val \u003e UINT16_MAX) {\n    if (!saturated_once)\n        LOG_WARNING(\"profiler bucket saturated, will read as 65535\");\n    saturated_once \u003d true;\n    val \u003d UINT16_MAX;\n}\n```","commit_id":"21475a0b4463b82d97f3be13452f46cd889ce103"},{"author":{"_account_id":1002273,"name":"Richard Allen","email":"rsaxvc@gmail.com","username":"rsaxvc","status":"@BryghtLabs, @rsaxvc.net"},"change_message_id":"a09073bf7aa7598625451420509ab303de211082","unresolved":false,"context_lines":[{"line_number":4258,"context_line":"\t\tfor (; i \u003c sample_num \u0026\u0026 samples[i] \u003c bmax; ++i)"},{"line_number":4259,"context_line":"\t\t\tval++;"},{"line_number":4260,"context_line":"\t\tif (val \u003e UINT16_MAX) {"},{"line_number":4261,"context_line":"\t\t\tLOG_WARNING(\"profiler bucket saturated, will read as 65535\");"},{"line_number":4262,"context_line":"\t\t\tval \u003d UINT16_MAX;"},{"line_number":4263,"context_line":"\t\t}"},{"line_number":4264,"context_line":""}],"source_content_type":"text/x-csrc","patch_set":7,"id":"37beada0_4b48ebe1","line":4261,"in_reply_to":"07e4a48d_14539150","updated":"2026-05-11 04:39:42.000000000","message":"Done","commit_id":"21475a0b4463b82d97f3be13452f46cd889ce103"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"ee58083ba8b15c9f40321b06b71f7a724c419656","unresolved":true,"context_lines":[{"line_number":4263,"context_line":"\t\t}"},{"line_number":4264,"context_line":""},{"line_number":4265,"context_line":"\t\tuint8_t data[2];"},{"line_number":4266,"context_line":"\t\tdata[0] \u003d val \u0026 0xff;"},{"line_number":4267,"context_line":"\t\tdata[1] \u003d (val \u003e\u003e 8) \u0026 0xff;"},{"line_number":4268,"context_line":"\t\twrite_data(f, data, 2);"},{"line_number":4269,"context_line":"\t}"},{"line_number":4270,"context_line":""}],"source_content_type":"text/x-csrc","patch_set":7,"id":"87231568_d873ab42","line":4267,"range":{"start_line":4266,"start_character":2,"end_line":4267,"end_character":7},"updated":"2026-05-09 20:09:54.000000000","message":"to unpack `val`, use the existing helper:\n`h_u16_to_le(data, val);`","commit_id":"21475a0b4463b82d97f3be13452f46cd889ce103"},{"author":{"_account_id":1000021,"name":"Antonio Borneo","email":"borneo.antonio@gmail.com","username":"borneoa"},"change_message_id":"4800fbb3dd2e8cd3e6e4c4880084298253e6f73b","unresolved":false,"context_lines":[{"line_number":4263,"context_line":"\t\t}"},{"line_number":4264,"context_line":""},{"line_number":4265,"context_line":"\t\tuint8_t data[2];"},{"line_number":4266,"context_line":"\t\tdata[0] \u003d val \u0026 0xff;"},{"line_number":4267,"context_line":"\t\tdata[1] \u003d (val \u003e\u003e 8) \u0026 0xff;"},{"line_number":4268,"context_line":"\t\twrite_data(f, data, 2);"},{"line_number":4269,"context_line":"\t}"},{"line_number":4270,"context_line":""}],"source_content_type":"text/x-csrc","patch_set":7,"id":"1c5021c1_8a6ba907","line":4267,"range":{"start_line":4266,"start_character":2,"end_line":4267,"end_character":7},"in_reply_to":"789e0a0f_817d9f02","updated":"2026-05-11 07:34:56.000000000","message":"Done","commit_id":"21475a0b4463b82d97f3be13452f46cd889ce103"},{"author":{"_account_id":1002273,"name":"Richard Allen","email":"rsaxvc@gmail.com","username":"rsaxvc","status":"@BryghtLabs, @rsaxvc.net"},"change_message_id":"15ec0a8e710061408e0af80b9481d1c9d903fa88","unresolved":true,"context_lines":[{"line_number":4263,"context_line":"\t\t}"},{"line_number":4264,"context_line":""},{"line_number":4265,"context_line":"\t\tuint8_t data[2];"},{"line_number":4266,"context_line":"\t\tdata[0] \u003d val \u0026 0xff;"},{"line_number":4267,"context_line":"\t\tdata[1] \u003d (val \u003e\u003e 8) \u0026 0xff;"},{"line_number":4268,"context_line":"\t\twrite_data(f, data, 2);"},{"line_number":4269,"context_line":"\t}"},{"line_number":4270,"context_line":""}],"source_content_type":"text/x-csrc","patch_set":7,"id":"789e0a0f_817d9f02","line":4267,"range":{"start_line":4266,"start_character":2,"end_line":4267,"end_character":7},"in_reply_to":"87231568_d873ab42","updated":"2026-05-11 04:39:23.000000000","message":"I\u0027ve done so, but both approaches are wrong for big endian targets. Is there something like `h_u16_to_target(data, va)`? I could write my own in another patch if not.","commit_id":"21475a0b4463b82d97f3be13452f46cd889ce103"}]}
