summaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAgeFilesLines
...
* add support for d symbol demanglingLieven Hey2022-06-088-30/+163
| | | | | | | | I added a system that simplifies adding new demanglers and provides a fast path when demangling symbols Change-Id: Ie5ca43632b53e41c0a4214772193af09ca4593cc Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
* skip PERF_RECORD_THROTTLE/PERF_RECORD_UNTHROTTLESimon Sobisch2022-05-301-0/+7
| | | | | | | fixes https://github.com/KDAB/hotspot/issues/177 Change-Id: Ifd31af2344214a02550bab9cf8513f88608c60e8 Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
* fix: word order in debug messageRaphael von der GrĂ¼n2022-05-301-1/+1
| | | | | Change-Id: Id291a3753c5b890a34a83e89d3df3dda5847268e Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
* Merge remote-tracking branch 'origin/7.0'8.0Ulf Hermann2022-01-286-10/+15
|\ | | | | | | Change-Id: I8ea621b1f308692591c256e22eeebe070740a3c9
| * Bump version to 7.07.0Ulf Hermann2022-01-281-1/+1
| | | | | | | | | | Change-Id: I1d6ba0705275abb851c1dbf0f25d1f94f018e105 Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
| * Merge remote-tracking branch 'origin/5.0' into 7.0Ulf Hermann2022-01-280-0/+0
| |\ | | | | | | | | | Change-Id: I104132dfc29cc7fa74fd2dca7554e65ef770f95c
| | * Fix warnings about signedness5.0Christian Kandeler2021-06-241-2/+2
| | | | | | | | | | | | | | | Change-Id: I00ae8d6ac2094a2b5655693d678445296856fb00 Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
| * | Merge remote-tracking branch 'origin/4.15' into 7.0Ulf Hermann2022-01-283-7/+10
| |\ \ | | | | | | | | | | | | Change-Id: I4855a81ce48a117c6a34e0a4770b0bf5ee49473a
| | * | cmake: fix ODR violation4.15Tim Blechmann2021-06-301-3/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | `perfdata.h` is included from downstream code, but HAVE_ZSTD is not propagated downstream. this leads to gcc complaining about ODR violations Change-Id: Ib6995d9be4102f4e3262d84b25d0c8129e165ec1 Reviewed-by: Milian Wolff <milian.wolff@kdab.com>
| | * | Fix build with Qt 6Eike Ziller2021-03-251-4/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Explicitly cast some qsizetype to int. Explicitly include time.h for time_t, which possibly was included by Qt headers before, and is needed for libelf.h (ar_date) Change-Id: I03807cbd2bb7e25e736a7842fd45b919db274488 Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
| | * | Add missing QLocale include for building with Qt 6Eike Ziller2021-03-051-0/+1
| | | | | | | | | | | | | | | | | | | | Change-Id: I65a47203cbf935c71feda007f09e49c8ea8a87b6 Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
| * | | Merge remote-tracking branch 'origin/4.11' into 7.0Ulf Hermann2022-01-281-0/+2
| |\ \ \ | | | | | | | | | | | | | | | Change-Id: I2eb05cdb49e2798b477d1122a135461d91d1e67e
| | * | | Add missing checks to PerfEventAttributes::operator==4.11Christian Kandeler2020-02-051-0/+2
| | | | | | | | | | | | | | | | | | | | | | | | | Change-Id: I3ecb3b2354968f75b416f2561132432dd66726ee Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
| * | | | Revert "Fix clang warnings about unused class members"Ulf Hermann2022-01-281-2/+2
|/ / / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This reverts commit f0ad7794a4d03827262ca0a3a952e7e0ccd47cf0. We actually use those members in a change we forgot to merge from 4.11. Change-Id: Ibee5fd43f1d5685f5c510338db878a9fbcbea50f Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
* | | / Fix compiler warnings about signedness6.0Christian Kandeler2021-08-181-2/+2
| |_|/ |/| | | | | | | | | | | Change-Id: I7578e582ac7fd3dd2012f783f273080ec2c2b18b Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
* | | Add LBR unwinding method proper processing for DisassemblyDarya Knysh2021-03-304-4/+752
| |/ |/| | | | | | | | | | | | | | | | | | | There are some required frames not looked up for LBR unwinding method. Added traversal the deepest frames for LBR by callchain to compute then Disassembly events costs within function/method properly. Added test into perfdata/vector_static_gcc for perf.lbr.data recorded with LBR. Change-Id: Ie6413415c573e659505a4715978c65fce135d979 Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
* | Use QLibrary to find librustc_demangle at runtimeMilian Wolff2021-01-114-15/+55
| | | | | | | | | | | | | | | | | | | | Don't link to librustc_demangle at compile time, just try to find it at runtime via QLibrary and then use it. This makes it much easier to enable/disable support for rust demangling for packagers. Fixes: https://github.com/KDAB/hotspot/issues/269 Change-Id: Ib33e2699780ed6d827bddeea75f82137daeacc9d Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
* | Port away from deprecated non-namespaced stream modifiersMilian Wolff2021-01-064-8/+8
| | | | | | | | | | | | | | Use the namespaced Qt:: equivalent instead. Change-Id: I3b82febee77a8cce55a1a17ac65018999e51fd43 Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
* | Make sure we demangle on direct cache hits tooMilian Wolff2021-01-041-8/+12
| | | | | | | | | | | | | | | | | | Previously we only did that when the relAddr fell somewhere into the symbol. If it matched the symbol start directly, we didn't do this yet. Change-Id: I853e6735c83c9deeeec3be47fbdea0a032598ed8 Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
* | Fix #if/#ifdef confusion, detected by -Werror=undefDavid Faure2021-01-041-1/+1
| | | | | | | | | | | | Change-Id: If34e761dc6a3b38ca60433adc674332fb5c7721b Reviewed-by: David Faure <david.faure@kdab.com> Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
* | Add actual file path computation for symbolsDarya Knysh2020-12-156-17/+21
| | | | | | | | | | | | | | | | Actual file path can differ from perf recorded. Compute and pass it to hotspot through Symbol struct field actualPath. Change-Id: I556035234cbcffa42497bf02e225d63565e4a0bf Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
* | Add alignment for ARM addressesDarya Knysh2020-12-151-8/+21
| | | | | | | | | | | | | | It is required to compute proper addresses on ARM. Change-Id: Ifc93375707507fff0fcc62e164133771e43bd4b5 Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
* | Add location's relative address computationDarya Knysh2020-12-1510-3257/+3395
| | | | | | | | | | | | | | | | | | It is equal to symbol start added by offset inside function. Disassembler can then use them to compute and show events costs locations within function by instructions. Added stream output. Change-Id: Iba32e1764633d7ffc3f0f36088525ed7a3d1c9d0 Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
* | Add Disassembler functionalityDarya Knysh2020-12-1512-3257/+3272
| | | | | | | | | | | | | | | | | | Added start address and size into Symbol and their stream output. A disassembler can then use the relative address and size of a symbol to find the instructions that belong to a function. Change-Id: I96709ca380d0e58cd5cf5a8cc87116147b2754d6 Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
* | Allow zero sized symbols in the address cachedknysh2020-10-075-5/+8
| | | | | | | | | | | | | | | | | | | | | | Apparently there are situations where the compiler generates entries in the symbol table with zero size which are still referenced by some callstacks. After commit d8d56b7e we ended up losing the symbol names in such cases. This patch fixes it again and restores the symbol names for such zero-size symbols. Change-Id: If98f68626ab4251ccfed89d791ebd333f6a6a60a Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
* | Transmit the number of lost events in the LostDefinition4.14Milian Wolff2020-09-294-10/+16
| | | | | | | | | | | | | | | | | | | | This allows a more detailed report on the GUI side then. Because the count has a quint64 type, we now use a QVariant to store the task event payload. To reduce the padding overhead, the struct is slightly reordered. Change-Id: I01d16da2ba4d3df9f32d6ae53bcff120355eb2c9 Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
* | Fix compiling tests with QMakeMilian Wolff2020-09-292-4/+10
| | | | | | | | | | Change-Id: Iddaf07e55eb777d53b9ed992b496939ef93af07a Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
* | Parse PERF_RECORD_SWITCH_CPU_WIDEMilian Wolff2020-09-252-0/+35
| | | | | | | | | | | | | | | | | | | | | | For now this just allows off-CPU cost analysis for data recorded with `perf record -a --switch-events`. In the future, we could even send the nextPrev{P,T}id too, which would allow us to draw arrows beetween the context switch targets. Change-Id: Ie9b88bb9c54a3238ba8d6addd013b8419c03c42f Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
* | tst_addresscache: Fix qbs buildChristian Kandeler2020-09-253-4/+17
| | | | | | | | | | | | | | | | While we're at it, also consider the ELFUTILS_INSTALL_DIR environment variable. Change-Id: Ifeb5cc7df6e29426633d27a840185ba67ed838b6 Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
* | Bump versionChristian Kandeler2020-09-231-1/+1
| | | | | | | | | | Change-Id: Ic70d22575b9dd38f0df9f04e61c82a0dbc83a01a Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
* | Merge "Merge remote-tracking branch 'origin/4.13' into master"The Qt Project2020-09-231-1/+1
|\ \
| * \ Merge remote-tracking branch 'origin/4.13' into masterUlf Hermann2020-09-231-1/+1
| |\ \ | | | | | | | | | | | | Change-Id: I60ee993a753729853b91353a7083347e90cb721c
| | * | Bump version to 4.134.13Ulf Hermann2020-07-061-1/+1
| | | | | | | | | | | | | | | | | | | | Change-Id: If91e36a370d8fed183680ea156f39fde5175b899 Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
* | | | Fix autotest build for qbsChristian Kandeler2020-09-231-0/+2
|/ / / | | | | | | | | | | | | Change-Id: I9dc6ab44596244fb342495c5d4a5e719e9b6c26b Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
* | | Only call dwfl_attach_state with user-level CPU registers and stackMilian Wolff2020-09-112-1/+12
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | For samples with frame pointer or LBR call chains, we may not have the CPU registers or stack information available. Under such circumstances we would spam the command line with repeated warnings of the form: ``` <pid> failed to attach state Couldn't find architecture of any ELF ``` Prevent that by checking whether the sample has register and stack information available and only attach dwfl state then. Note that symbol resolution and inline-frame resolution is independent of the dwfl_attach_state call - that really is only required for stack unwinding. Based on a patch by vtoropov, thanks! Fixes: https://github.com/kdab/hotspot/issues/178 Change-Id: I8b88ee5b97d3e9d3ded82a17c4487d01add6d5ca Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
* | | Remove dead codeMilian Wolff2020-09-112-6/+0
| | | | | | | | | | | | | | | Change-Id: Icdb4a0147d74e5349eec7d5bfea7a1b08828601d Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
* | | Build a sorted symbol map once and use it for lookupsMilian Wolff2020-09-118-302/+339
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Apparently the symtab isn't necessarily sorted. That means every call to dwfl_module_addrinfo we do may potentially end up iterating over many symbol entries to find a match. For libxul.so, which contains roughly one million symbols, this can be exceedingly slow. Now, we instead just iterate over all symbols once and store them in a sorted array for quick lookups later on. Then when we lookup a symbol, we just need to demangle it on-demand. I believe the following numbers speak for themselves. Both are for a 1.1GB perf.data file profiling firefox with debug symbols in libxul. A hefty 10x speedup! Before: ``` 592.765,37 msec task-clock:u # 0,999 CPUs utilized 0 context-switches:u # 0,000 K/sec 0 cpu-migrations:u # 0,000 K/sec 587.913 page-faults:u # 0,992 K/sec 2.610.836.174.604 cycles:u # 4,405 GHz (83,33%) 9.249.001.490 stalled-cycles-frontend:u # 0,35% frontend cycles idle (83,33%) 188.323.380.515 stalled-cycles-backend:u # 7,21% backend cycles idle (83,33%) 6.294.821.871.279 instructions:u # 2,41 insn per cycle # 0,03 stalled cycles per insn (83,33%) 1.593.493.508.805 branches:u # 2688,236 M/sec (83,33%) 1.613.875.121 branch-misses:u # 0,10% of all branches (83,34%) 593,078170383 seconds time elapsed 589,590379000 seconds user 1,591781000 seconds sys ``` After: ``` 57.292,74 msec task-clock:u # 0,999 CPUs utilized 0 context-switches:u # 0,000 K/sec 0 cpu-migrations:u # 0,000 K/sec 598.808 page-faults:u # 0,010 M/sec 246.209.111.444 cycles:u # 4,297 GHz (83,34%) 8.990.996.482 stalled-cycles-frontend:u # 3,65% frontend cycles idle (83,33%) 52.443.604.272 stalled-cycles-backend:u # 21,30% backend cycles idle (83,34%) 583.136.689.772 instructions:u # 2,37 insn per cycle # 0,09 stalled cycles per insn (83,33%) 150.053.278.261 branches:u # 2619,063 M/sec (83,33%) 833.143.959 branch-misses:u # 0,56% of all branches (83,34%) 57,370841100 seconds time elapsed 55,799767000 seconds user 1,291568000 seconds sys ``` Note that this patch also uncovers some broken offset computations. Checking the offsets manually with addr2line indicates that the new offsets we report now are better than the old ones. At least for the cases I compared, e.g.: ``` $ addr2line -C -i -f -e .../fork -a 255800 22c800 0x0000000000255800 __vfwprintf_internal fork.c:? 0x000000000022c800 __cos_fma ??:? $ addr2line -C -i -f -e .../fork -a 252585 229585 0x0000000000252585 printf_positional fork.c:? 0x0000000000229585 main ??:? $ addr2line -C -i -f -e .../vector_static_gcc_v9.1.0 -a 45d3e0 0x000000000045d3e0 __munmap crtstuff.c:? ``` Then, we now resolve symbols like binutils, i.e. we pick the first symbol we find and don't skip weak symbols like eu-addr2line seems to be doing. I.e. for this: ``` 0000000000417a40 w F .text 0000000000000074 hypot 0000000000417a40 w F .text 0000000000000074 hypotf64 0000000000417a40 w F .text 0000000000000074 hypotf32x 0000000000417a40 g F .text 0000000000000074 __hypot ``` We used to get `__hypot`, but now we get `hypot`. I think this is just as good, and as I said - it's also what you'd get from binutils with `addr2line`: ``` $ addr2line -C -i -f -e vector_static_gcc_v9.1.0 -a 417a40 0x0000000000418480 hypot ??:? $ eu-addr2line -C -i -f -e vector_static_gcc_v9.1.0 -a 417a40 0x0000000000418480 __hypot ??:0 ``` Initially, I thought about just skipping all weak symbols, but that's not a feasible approach. There are some symbols that are weak and not overridden by a non-weak symbol, like this one: ``` $ objdump -C -t .../vector_static_gcc_v9.1.0 | grep 401c70 0000000000401c70 w F .text 0000000000000162 void std::vector<double, std::allocator<double> >::_M_realloc_insert<double>(__gnu_cxx::__normal_iterator<double*, std::vector<double, std::allocator<double> > >, double&&) ``` And that one even contains a bunch of inlined frames, so we definitely want to keep that in. We could potentially pass that information along and then implement a custom logic to prefer non-weak symbols. Quite frankly, I don't think that effort is worth it. Change-Id: Ic91764aaab36e77be1c4df4a32d4ac2b4c28e7e0 Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
* | | Show the diff between files when the perfdata test failsMilian Wolff2020-09-111-0/+7
| | | | | | | | | | | | | | | | | | | | | Only works when the diff program is available on the system. Change-Id: Id4cd5fe96a1a10b03153900600b3fcb43f755100 Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
* | | Reduce calls to dwarf_getscopes to improve performanceMilian Wolff2020-09-118-247/+597
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Implement an alternative approach to resolving inline frames and cache subprogram die names. The problem with dwarf_getscopes and dwarf_getscopes_die is that it often has to traverse a large part of the DIE tree within a CU DIE to find its result. For larger DSOs this repeated tree walking can consume a lot of time. The idea behind this patch is the following: We find (and cache) the Dwarf_Die's with DW_TAG_subprogram and then look for inline frames in that subtree directly. Additionally, we cache the scope names within a CU DIE more aggressively. I hope that in the future this area can be improved even further, as the remaining calls to dwarf_getscopes_die still make up a large fraction of the overall analysis cost. The following shows the performance impact of this patch for a perf.data file with about 6M samples. Many frames in the callstacks point to a self-compiled libclang.so with debug symbols. That library alone is roughly 600MB large. This makes finding inline frames quite slow. Before: ``` 80.159,75 msec task-clock # 0,984 CPUs utilized 4.075 context-switches # 0,051 K/sec 1 cpu-migrations # 0,000 K/sec 152.257 page-faults # 0,002 M/sec 346.071.892.881 cycles # 4,317 GHz (83,33%) 1.940.060.936 stalled-cycles-frontend # 0,56% frontend cycles idle (83,33%) 38.399.679.774 stalled-cycles-backend # 11,10% backend cycles idle (83,34%) 999.298.133.335 instructions # 2,89 insn per cycle # 0,04 stalled cycles per insn (83,31%) 239.561.868.424 branches # 2988,556 M/sec (83,34%) 1.163.589.915 branch-misses # 0,49% of all branches (83,34%) 81,497496973 seconds time elapsed 79,554970000 seconds user 0,404933000 seconds sys ``` After: ``` 15.558,09 msec task-clock # 1,000 CPUs utilized 99 context-switches # 0,006 K/sec 1 cpu-migrations # 0,000 K/sec 151.446 page-faults # 0,010 M/sec 67.961.461.389 cycles # 4,368 GHz (83,32%) 759.299.629 stalled-cycles-frontend # 1,12% frontend cycles idle (83,32%) 7.369.116.441 stalled-cycles-backend # 10,84% backend cycles idle (83,34%) 187.648.727.850 instructions # 2,76 insn per cycle # 0,04 stalled cycles per insn (83,34%) 45.231.315.052 branches # 2907,254 M/sec (83,34%) 200.377.846 branch-misses # 0,44% of all branches (83,33%) 15,560370834 seconds time elapsed 15,230305000 seconds user 0,285776000 seconds sys ``` Which means we are now roughly 5x faster than before, which is a pretty significant gain. Relates-To: https://github.com/KDAB/hotspot/issues/192 Change-Id: I0669cc3aad886b22165eaf1d0836a56e5183898d Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
* | | Free symbol table resources when a process existsMilian Wolff2020-09-111-0/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | For perf.data files that span many (small) processes, we held on to the symbol tables even after a process exited. This wastes resources and can even lead to potential confusion when a PID is recycled - we would have reused the symbol table from the last process then, which could be a completely different one. Change-Id: I858dce578619191babdd1a8410ad038c0b686ff6 Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
* | | Improve support for applications that rely on fork for parallelismMilian Wolff2020-09-1112-8/+1420
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | A forked process inherits the elfmap of the parent, thus we need to copy that data when we encounter a fork event. This is complicated by the fact that the task events and mmap events need to be sorted first. Thus, we need to find the fork event when we deplete the buffers after sorting and then initialize the child process elf map with the one from the parent process. Furthermore, pass the ppid through the ThreadStart event, to allow client applications to inherit the comm for the newly created process. Fixes: https://github.com/KDAB/hotspot/issues/241 Change-Id: I5de13644e12def6704c5f622428a815fd87d2af4 Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
* | | Add support for zstd decompressionMilian Wolff2020-09-1111-2/+854
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When compiled with HAVE_ZSTD=1, transparently decompress perf records contained in PERF_RECORD_COMPRESSED and parse those then. This way, we can finally open data files recorded with `perf record -z`, which are often two orders of magnitude smaller for the common `--call-graph dwarf` case. Change-Id: Ic26f049b955b20038b947d03c7ff1c6c5eb22ba3 Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
* | | Generalize TestPerfData::testFilesMilian Wolff2020-09-094-12/+15
| | | | | | | | | | | | | | | | | | | | | | | | | | | This patch allows us to more easily add new data files that reuse the same binaries we have already added to our test data, instead of requiring a single copy per directory. Change-Id: Ia635f6d5444a4b92e2a4a684d9c44bce61ad017c Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
* | | Update expected results for clang symbolsMilian Wolff2020-09-092-15/+18
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Apparently newer elfutils or demangling contains a fix for the weird complex symbols encountered in clang-compiled binaries. Now, the symbol is better readable: Before: `doublecomplex ` After: `double _Complex` Update the testdata accordingly, instead of failing. To keep backwards compatibility, replace the old form to the new form in the actual file output. Change-Id: I49bc956f5f2032ae7d71c59e7d6c82bc65d81e81 Reviewed-by: Christian Kandeler <christian.kandeler@qt.io> Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
* | | Add optional rust demangling support in perfparserMilian Wolff2020-09-093-3/+23
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When librustc_demangle.so and rustc_demangle.h are provided externally, perfparser can now leverage that to demangle rust symbols. See also: https://github.com/alexcrichton/rustc-demangle Relates-To: https://github.com/KDAB/hotspot/issues/237 Change-Id: I0a66598e4ae3aa1dbf2776587934677beadd5968 Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
* | | PerfParser: Make it compile with Qt 6hjk2020-08-203-2/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Note that this creates a hard dependency on Qt 5.14. If that's not wanted the uses of Qt::SkipEmptyParts would need to be #ifdef-ed, too. Task-number: QTCREATORBUG-24098 Change-Id: I9b26fa9ed39c2200bb8329fa228c96613e529efe Reviewed-by: Ulf Hermann <ulf.hermann@qt.io> Reviewed-by: Eike Ziller <eike.ziller@qt.io>
* | | Skip vector_static_clang variant of perfdata testUlf Hermann2020-07-151-0/+2
| | | | | | | | | | | | | | | | | | | | | The results seem to differ depending on platform. Change-Id: I18ca22ffb7e2ead988680963fe39ac7ea9068430 Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
* | | Fix build on MIPSDmitry Shachnev2020-06-301-0/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | On MIPS systems, "mips" is a built-in compiler macro. Undefine it to fix compilation errors: app/perfregisterinfo.cpp:55:12: error: expected unqualified-id before numeric constant 55 | static int mips[] = { 32, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, | ^~~~ Change-Id: I80680337a019629e53828d60fc8a233a7cc819d2 Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
* | | Fix build on big endian systemsDmitry Shachnev2020-06-301-1/+1
|/ / | | | | | | | | | | | | | | | | | | | | | | | | Without this fix, the build was failing with: /usr/bin/ld: perfunwind.o: in function `QDataStream::Version qToLittleEndian<QDataStream::Version>(QDataStream::Version)' QtCore/qendian.h:207: undefined reference to `QDataStream::Version qbswap<QDataStream::Version>(QDataStream::Version)' Fix it by explicitly casting QDataStream::Qt_DefaultCompiledVersion to qint32 before calling qToLittleEndian. Change-Id: If51ab99ba4825219cbaa74c68ff4605928b1a776 Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
* | Fix Qt 5.15 deprecation warningsChristian Kandeler2020-06-261-0/+2
| | | | | | | | | | Change-Id: I9df420d6ad46249ce6f0091b159dc56a563e93b8 Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>