On samedi 4 juin 2022 19:24:46 CEST mark_at_yahoo via Rosegarden-devel wrote:
> I created ("painted") four notes, each time getting:
>
> BasicCommand::execute
> MatrixScene::handleEventRemoved
> QGraphicsScene::update
> QGraphicsScene::update
>
> I have no idea where the second update is coming from.
That's an artefact of your debugging technique, due to a not very well known
feature of shared libraries called (PLT Procedure Linkage Table).
After doing
dprintf QGraphicsScene::update, "QGraphicsScene::update\n"
if you ask gdb for its breakpoints, you'll see that this matched two locations:
(gdb) info br
Num Type Disp Enb Address What
2 dprintf keep y <MULTIPLE>
breakpoint already hit 411 times
printf "QGraphicsScene::update\n"
2.1 y 0x00007ffff6b71a66 in
QGraphicsScene::update(QRectF const&) at
qtbase/src/widgets/graphicsview/qgraphicsscene.cpp:3213
2.2 y 0x00007ffff722a950
<QGraphicsScene::update(QRectF const&)@plt>
The second one (@plt) is a thin wrapper over the first one, to implement
Position Independent Code.
The question in
https://stackoverflow.com/questions/70589450/why-functions-in-same-shared-library-using-plt
explains this better than I would:
"For each function we call (func) in our library, there's a func@plt small
procedure, which is the one actually being called. This procedure then jumps to
an address stored in a corresponding entry in the GOT. First, this address will
point back to the PLT entry which will then call the dynamic linker resolver to
resolve the actual function's address. The dynamic linker will now override the
entry in the GOT to point to the correct actual function."
Executive summary: QGraphicsScene::update() is called only once in practice, in
your scenario.
--
David Faure, [email protected], http://www.davidfaure.fr
Working on KDE Frameworks 5
_______________________________________________
Rosegarden-devel mailing list
[email protected] - use the link below to unsubscribe
https://lists.sourceforge.net/lists/listinfo/rosegarden-devel