From patchwork Thu Mar 12 06:30:32 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Giuliano Procida X-Patchwork-Id: 39026 From: gprocida@google.com (Giuliano Procida) Date: Thu, 12 Mar 2020 06:30:32 +0000 Subject: [PATCH 1/5] Fix interaction of --redundant and --leaf-changes-only options. In-Reply-To: <20200312063036.29419-1-gprocida@google.com> References: <20200312063036.29419-1-gprocida@google.com> Message-ID: <20200312063036.29419-2-gprocida@google.com> The --redundant (meaning show-redundant-changes) option is supposed to be implied by --leaf-changes-only and this is currently implemented by making diff_context's --leaf-changes-only setter also duplicate the behaviour of its --redundant setter. In both abidiff and abipkgdiff, the diff_context setters are called unconditionally, but the relative order of the calls for these two options is different in each case, resulting in two different issues. In abidiff, the --redundant setter is called second, undoing the intended side-effect of any --leaf-changes-only flag. So --redundant is not actually turned on in --leaf-changes-only mode unless requested explicitly. In abipkgdiff, the leaf-changes-only setter is called second, undoing (in non-leaf mode) the effect of any --redundant flag. So --redundant has no effect in default reporting mode. The fix is move to move the "--leaf-changes-only implies --redundant" logic from the setter to the set_diff_context_from_opts functions. This patch also documents the implied behaviour in the usage strings. * src/abg-comparison.cc (diff_context::show_leaf_changes_only): Remove "--leaf-changes-only implies --redundant" logic. * tools/abidiff.cc (display_usage): Mention that --leaf-changes-only implies --redundant. (set_diff_context_from_opts): Make --leaf-changes-only imply --redundant; document this behaviour in a comment. * tools/abipkgdiff.cc: Ditto. * tests/data/Makefile.am: Add new test case files. * tests/data/test-abidiff-exit/test-leaf3-report.txt: Add new test case, to show --leaf-changes-only implies --redundant. * tests/data/test-abidiff-exit/test-leaf3-v0.c: Ditto. * tests/data/test-abidiff-exit/test-leaf3-v0.o: Ditto. * tests/data/test-abidiff-exit/test-leaf3-v1.c: Ditto. * tests/data/test-abidiff-exit/test-leaf3-v1.o: Ditto. * tests/test-abidiff-exit.cc: Run new test case. * tests/data/test-diff-pkg/libcdio-0.94-1.fc26.x86_64--libcdio-0.94-2.fc26.x86_64-report.1.txt: Update abipkgdiff report with --redundant output. * tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-1.txt: Ditto. * tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-2.txt: Ditto. Signed-off-by: Giuliano Procida --- src/abg-comparison.cc | 13 - tests/data/Makefile.am | 5 + .../test-abidiff-exit/test-leaf3-report.txt | 29 + tests/data/test-abidiff-exit/test-leaf3-v0.c | 19 + tests/data/test-abidiff-exit/test-leaf3-v0.o | Bin 0 -> 3320 bytes tests/data/test-abidiff-exit/test-leaf3-v1.c | 20 + tests/data/test-abidiff-exit/test-leaf3-v1.o | Bin 0 -> 3384 bytes ...4--libcdio-0.94-2.fc26.x86_64-report.1.txt | 8 +- ...l7.x86_64-0.12.8-1.el7.x86_64-report-1.txt | 3 +- ...l7.x86_64-0.12.8-1.el7.x86_64-report-2.txt | 496 +++++++++++++++++- tests/test-abidiff-exit.cc | 9 + tools/abidiff.cc | 16 +- tools/abipkgdiff.cc | 6 +- 13 files changed, 587 insertions(+), 37 deletions(-) create mode 100644 tests/data/test-abidiff-exit/test-leaf3-report.txt create mode 100644 tests/data/test-abidiff-exit/test-leaf3-v0.c create mode 100644 tests/data/test-abidiff-exit/test-leaf3-v0.o create mode 100644 tests/data/test-abidiff-exit/test-leaf3-v1.c create mode 100644 tests/data/test-abidiff-exit/test-leaf3-v1.o diff --git a/src/abg-comparison.cc b/src/abg-comparison.cc index b99cfa7d..48a2d22e 100644 --- a/src/abg-comparison.cc +++ b/src/abg-comparison.cc @@ -1521,20 +1521,7 @@ diff_context::show_leaf_changes_only(bool f) // created. Once it's been created, we are supposed to live with // it. ABG_ASSERT(priv_->reporter_ == 0); - priv_->leaf_changes_only_ = f; - // So when we are showing only leaf changes, we want to show - // redundant changes because of this: Suppose several functions have - // their return type changed from void* to int*. We want them all - // to be reported. In that case the change is not redundant. As - // far as user-defined type changes (like struct/class) they are - // already put inside a map which makes them be non-redundant, so we - // don't have to worry about that case. - // - // TODO: maybe that in this case we should avoid firing the - // redundancy analysis pass altogether. That could help save a - // couple of CPU cycle here and there! - priv_->show_redundant_changes_ = f; } /// Get the flag that indicates if the diff using this context should diff --git a/tests/data/Makefile.am b/tests/data/Makefile.am index 5dab8685..bf76ca2e 100644 --- a/tests/data/Makefile.am +++ b/tests/data/Makefile.am @@ -120,6 +120,11 @@ test-abidiff-exit/test-leaf1-v0.o \ test-abidiff-exit/test-leaf1-v1.cc \ test-abidiff-exit/test-leaf1-v1.o \ test-abidiff-exit/test-leaf1-report.txt \ +test-abidiff-exit/test-leaf3-v0.c \ +test-abidiff-exit/test-leaf3-v0.o \ +test-abidiff-exit/test-leaf3-v1.c \ +test-abidiff-exit/test-leaf3-v1.o \ +test-abidiff-exit/test-leaf3-report.txt \ \ test-diff-dwarf/test0-v0.cc \ test-diff-dwarf/test0-v0.o \ diff --git a/tests/data/test-abidiff-exit/test-leaf3-report.txt b/tests/data/test-abidiff-exit/test-leaf3-report.txt new file mode 100644 index 00000000..d02c71a7 --- /dev/null +++ b/tests/data/test-abidiff-exit/test-leaf3-report.txt @@ -0,0 +1,29 @@ +Leaf changes summary: 4 artifacts changed +Changed leaf types summary: 0 leaf type changed +Removed/Changed/Added functions summary: 0 Removed, 4 Changed, 0 Added function +Removed/Changed/Added variables summary: 0 Removed, 0 Changed, 0 Added variable + +4 functions with some sub-type change: + + [C] 'function void fn1(sto1)' at test-leaf3-v1.c:10:1 has some sub-type changes: + parameter 1 of type 'struct sto1' changed: + type name changed from 'sto1' to 'stn1' + type size hasn't changed + + + [C] 'function void fn2(sto2)' at test-leaf3-v1.c:13:1 has some sub-type changes: + parameter 1 of type 'struct sto2' changed: + type name changed from 'sto2' to 'stn2' + type size changed from 64 to 128 (in bits) + 1 data member insertion: + 'double stn2::y', at offset 64 (in bits) at test-leaf3-v1.c:7:1 + + [C] 'function void fn3(sto1*)' at test-leaf3-v1.c:16:1 has some sub-type changes: + parameter 1 of type 'sto1*' changed: + pointer type changed from: 'sto1*' to: 'stn1*' + + [C] 'function void fn4(sto2*)' at test-leaf3-v1.c:19:1 has some sub-type changes: + parameter 1 of type 'sto2*' changed: + pointer type changed from: 'sto2*' to: 'stn2*' + + diff --git a/tests/data/test-abidiff-exit/test-leaf3-v0.c b/tests/data/test-abidiff-exit/test-leaf3-v0.c new file mode 100644 index 00000000..1d9c6266 --- /dev/null +++ b/tests/data/test-abidiff-exit/test-leaf3-v0.c @@ -0,0 +1,19 @@ +struct sto1 { + int x; +}; + +struct sto2 { + long x; +}; + +void fn1(struct sto1 s) { +} + +void fn2(struct sto2 s) { +} + +void fn3(struct sto1* s) { +} + +void fn4(struct sto2* s) { +} diff --git a/tests/data/test-abidiff-exit/test-leaf3-v0.o b/tests/data/test-abidiff-exit/test-leaf3-v0.o new file mode 100644 index 0000000000000000000000000000000000000000..1e74a51b929f63ba77041febe2b2aa064e41cc78 GIT binary patch literal 3320 zcmbtWTW=dx5T4`p#%r877ef;#AZ@wyqOgnYgf=N87(&xlK!p&M`aqSgo%Kbv*Ok34 zDNum~LgX!xkSJ2#c;K}!`~n{N1^fUc9^nnCMKH5_X1zYyyue64XXg86=FGXSKfnC$ zc1j3f5wHm(i&20zW29FDwF(88gBw@(f7^fXh_PNtbFKXJm^vitKo{Na?Bz-@R3&6d661BDDZuOk;{`$Yf85!UA8WBJqdb zLCeiDD@y+%+8Ug}R*1*>DQtt2hPyAocL%=Jah=ABb+2UCgGjvy*)Ttvi@F%<#Z6s& zsV|P&l!jRbeydl#-;zhQ2bFPiIi#V(tbQhB{xE>%pc>kmD5 zqv?8XzgDOBudutc03#+EpG_8g+xbM|l{hrqw4y>W~aogLqe5clN2LM;Lwl10H z-gawk#|txC<%{Q)G2rQ7LO9V+J^-;dBbFvJ#sNjqw^XNutT?uW}kh z*J6y)ATwsOp+T0_v0jUA`527VOpOE5(f}_>f@pB;X@Xhwn~SXj-`{5>&UUaTh!rJH zJPG5^p-y>B0#O)0c9QA6Xm}O;t>AAp^u{|a6&jCqg1BPBX?4yKh(dLfFwS*yU5vjF zx&?KUN;@9k-Sd(s|M=y%V|aX5t}A%(C?nQZ@I`44WzXZ9(*9Awx$a*Toad#>qsn=t zTeMc>$F&eQBOO%#S5LrAiPPG|*QcuBT+eL<=lZ`;a8ue~5AJvIslndwhkc7R-`(@U z-gSHj?Al-ecHiwd_O4qSHh0=yqla9eJGENhy*EZXeaCC!>lF{_v^|$Ya0syLy>8dV zx6}4|zH8&-X$^d*en$qmt(`{S>AGC#|Ld19oYp*khACr}8kFU*i(0v@k$oC9!qk`M zPUJDJsPSi!rgQvX)%C8&501)lH=bb zBPOcv4suE3FUU^@uM>?=?~*$HUBoCS*NJK%Kgsd=8_GD3&;6%JB*mBIfui#j7mnlp zDFnxdM>#N4oo+M568+rauBOe!;E`lg;Qv89e|A)vkRMhx?0pT#>z5oCK literal 0 HcmV?d00001 diff --git a/tests/data/test-abidiff-exit/test-leaf3-v1.c b/tests/data/test-abidiff-exit/test-leaf3-v1.c new file mode 100644 index 00000000..fe182cd8 --- /dev/null +++ b/tests/data/test-abidiff-exit/test-leaf3-v1.c @@ -0,0 +1,20 @@ +struct stn1 { + int x; +}; + +struct stn2 { + long x; + double y; +}; + +void fn1(struct stn1 s) { +} + +void fn2(struct stn2 s) { +} + +void fn3(struct stn1* s) { +} + +void fn4(struct stn2* s) { +} diff --git a/tests/data/test-abidiff-exit/test-leaf3-v1.o b/tests/data/test-abidiff-exit/test-leaf3-v1.o new file mode 100644 index 0000000000000000000000000000000000000000..f7db3a0cd5c0d44e14a1d00e7503a07e50a7e1cd GIT binary patch literal 3384 zcmbtW&u<%55T57F#+$fyoEVyz0CFTsTf}bTG&D&e!4Q(VDpXaa2oRuT?W_|EdmZd` z>re`nia@zF5)wtqjUxxRa&7+sPKXOfPF&zt2_%?#`^H|s7!EK}_RW0X{Ccx*pYzGu z>+3NgfJMLx^ejdJI#y3FNVNbNn1GGq!7m55|Gf9!L(+-|k1EBnj~^5d)_yA5PhYYfRWmaKN7mp#-LB0!AvAt9`FT#XKhSe!J(hRmuTfaKG{v_4S$u++fV2N56b zAZUSUnG|7Kvg&Zfp9hf{CWs^vE+CG+K`q`wZj!Xv;VxL#8>nH#c@XIV5kISl^dxCv zgdIlAfk<{ECJ`eMM`O5Us*yZNnPZ1rFjDdJAV#~sqtcUn$#3)|<%=EG5EvJyQkjI2 znof<2iFg{5#xlZ4B@!1CFD8}}B7+l3f?66UAC5n+n9nO!l3wQN3t%iZu9Gcb`J-U|FV zs5ShZ9G#c#M!Qt=;9OAO17z}W>FP#qHNTKsa^{?TZf-Wel+Vx3ojsACI#twZqpU&japaPos-#JjJpk2jDRB!;>gbk2b82hv9w z5bv|uFkpn$zSZb{?|m?Klk5kSWdMFI1H^!1*A|SU-$Y~%{3SoGaJJ<;LoBQC8C*&D zCVC2W%0nL&3FF7U47xcgc)IC+qFYS~Pm1cXP84@cI8Emqfhg2B3FDy!Kz)-iekwF& z-=xwTkG|criYNc*HQ+>Ws{5R>uWEQ&*@1?0AGb98X=Q(|R_=%A_PvJloPX7D>X&4a z5}Q{Nyi*BDi1O{{_YCcuwIov*_Fk8qWP}Y50t??`Syh7o6699j_o)jh<~vS)d1s{-Z;_QK2~! zrr$s}qfQZBk3WqZo$vn|pT}4|Cza#+iyEn!@?M~SWeOA&k)PDzyru%^e3Bo3i}+hE zWf`A(P9nZl;F0v|J#^n|Na+}PUr~p8wihZj-S-NjgZe+Cu5ym2{t43i-$qQ&i4fdU z_1_^QBD(J;a)au>rRwvXs6O3Sdi_1bC@1%cs+1p9{ksgPmFx3L_t>ELx7C57^A#12 zFX4ylS_bg5&RZkx=3NGyDZAgXXuV=C`FBX@2zU$?-f_>PN3l uAybqT<-Tf|ewXN1S&yf8GH9#csq;UBd{p%PQ{F-GKdAn{js~Ny$NvoiB<>FY literal 0 HcmV?d00001 diff --git a/tests/data/test-diff-pkg/libcdio-0.94-1.fc26.x86_64--libcdio-0.94-2.fc26.x86_64-report.1.txt b/tests/data/test-diff-pkg/libcdio-0.94-1.fc26.x86_64--libcdio-0.94-2.fc26.x86_64-report.1.txt index d73fae52..23b12adf 100644 --- a/tests/data/test-diff-pkg/libcdio-0.94-1.fc26.x86_64--libcdio-0.94-2.fc26.x86_64-report.1.txt +++ b/tests/data/test-diff-pkg/libcdio-0.94-1.fc26.x86_64--libcdio-0.94-2.fc26.x86_64-report.1.txt @@ -1,8 +1,8 @@ ================ changes of 'libcdio.so.16.0.0'=============== - Functions changes summary: 0 Removed, 1 Changed (1 filtered out), 0 Added functions + Functions changes summary: 0 Removed, 2 Changed, 0 Added functions Variables changes summary: 0 Removed, 0 Changed, 0 Added variable - 1 function with some indirect sub-type change: + 2 functions with some indirect sub-type change: [C] 'function discmode_t mmc_get_dvd_struct_physical(const CdIo_t*, cdio_dvd_struct_t*)' at mmc.c:949:1 has some indirect sub-type changes: parameter 2 of type 'cdio_dvd_struct_t*' has sub-type changes: @@ -37,6 +37,10 @@ + [C] 'function discmode_t mmc_get_dvd_struct_physical_private(void*, mmc_run_cmd_fn_t, cdio_dvd_struct_t*)' at mmc.c:450:1 has some indirect sub-type changes: + parameter 3 of type 'cdio_dvd_struct_t*' has sub-type changes: + pointed to type 'typedef cdio_dvd_struct_t' changed at dvd.h:130:1, as reported earlier + ================ end of changes of 'libcdio.so.16.0.0'=============== diff --git a/tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-1.txt b/tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-1.txt index bf081f52..7b86b964 100644 --- a/tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-1.txt +++ b/tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-1.txt @@ -50,8 +50,7 @@ [C] 'function int spice_server_set_image_compression(SpiceServer*, spice_image_compression_t)' at reds.c:3602:1 has some indirect sub-type changes: parameter 2 of type 'typedef spice_image_compression_t' changed: typedef name changed from spice_image_compression_t to SpiceImageCompression at enums.h:197:1 - underlying type 'enum __anonymous_enum__2' at spice.h:471:1 changed: - enum type 'enum __anonymous_enum__2' changed at spice.h:471:1, as reported earlier + underlying type 'enum __anonymous_enum__2' changed at spice.h:471:1, as reported earlier ================ end of changes of 'libspice-server.so.1.8.0'=============== diff --git a/tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-2.txt b/tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-2.txt index b4104bda..3d20caf1 100644 --- a/tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-2.txt +++ b/tests/data/test-diff-pkg/spice-server-0.12.4-19.el7.x86_64-0.12.8-1.el7.x86_64-report-2.txt @@ -1,5 +1,5 @@ ================ changes of 'libspice-server.so.1.8.0'=============== - Functions changes summary: 1 Removed, 6 Changed (73 filtered out), 8 Added functions + Functions changes summary: 1 Removed, 79 Changed, 8 Added functions Variables changes summary: 0 Removed, 0 Changed, 0 Added variable 1 Removed function: @@ -17,7 +17,7 @@ 'function void spice_server_set_playback_rate(SpicePlaybackInstance*, uint32_t)' {spice_server_set_playback_rate@@SPICE_SERVER_0.12.5} 'function void spice_server_set_record_rate(SpiceRecordInstance*, uint32_t)' {spice_server_set_record_rate@@SPICE_SERVER_0.12.5} - 6 functions with some indirect sub-type change: + 79 functions with some indirect sub-type change: [C] 'function void spice_qxl_add_memslot(QXLInstance*, QXLDevMemSlot*)' at red_dispatcher.c:879:1 has some indirect sub-type changes: parameter 1 of type 'QXLInstance*' has sub-type changes: @@ -34,7 +34,11 @@ in pointed to type 'typedef RedDispatcher' at red_worker.h:87:1: underlying type 'struct RedDispatcher' at red_dispatcher.c:53:1 changed: type size changed from 3264 to 3328 (in bits) - 12 data member changes (1 filtered): + 13 data member changes: + type of 'QXLInstance* RedDispatcher::qxl' changed: + in pointed to type 'typedef QXLInstance' at spice-qxl.h:34:1: + underlying type 'struct QXLInstance' changed; details are being reported + type of 'Dispatcher RedDispatcher::dispatcher' changed: underlying type 'struct Dispatcher' at dispatcher.h:22:1 changed: type size changed from 960 to 1024 (in bits) @@ -47,7 +51,10 @@ 'int RedDispatcher::x_res' offset changed from 2176 to 2240 (in bits) (by +64 bits) 'int RedDispatcher::y_res' offset changed from 2208 to 2272 (in bits) (by +64 bits) 'int RedDispatcher::use_hardware_cursor' offset changed from 2240 to 2304 (in bits) (by +64 bits) - 'RedDispatcher* RedDispatcher::next' offset changed from 2304 to 2368 (in bits) (by +64 bits) + type of 'RedDispatcher* RedDispatcher::next' changed: + in pointed to type 'typedef RedDispatcher' at red_worker.h:87:1: + underlying type 'struct RedDispatcher' changed; details are being reported + and offset changed from 2304 to 2368 (in bits) (by +64 bits) 'Ring RedDispatcher::async_commands' offset changed from 2368 to 2432 (in bits) (by +64 bits) 'pthread_mutex_t RedDispatcher::async_lock' offset changed from 2496 to 2560 (in bits) (by +64 bits) 'QXLDevSurfaceCreate RedDispatcher::surface_create' offset changed from 2816 to 2880 (in bits) (by +64 bits) @@ -55,6 +62,102 @@ + [C] 'function void spice_qxl_add_memslot_async(QXLInstance*, QXLDevMemSlot*, uint64_t)' at red_dispatcher.c:948:1 has some indirect sub-type changes: + parameter 1 of type 'QXLInstance*' has sub-type changes: + pointed to type 'typedef QXLInstance' changed at spice.h:103:1, as reported earlier + + [C] 'function void spice_qxl_create_primary_surface(QXLInstance*, uint32_t, QXLDevSurfaceCreate*)' at red_dispatcher.c:909:1 has some indirect sub-type changes: + parameter 1 of type 'QXLInstance*' has sub-type changes: + pointed to type 'typedef QXLInstance' changed at spice.h:103:1, as reported earlier + + [C] 'function void spice_qxl_create_primary_surface_async(QXLInstance*, uint32_t, QXLDevSurfaceCreate*, uint64_t)' at red_dispatcher.c:966:1 has some indirect sub-type changes: + parameter 1 of type 'QXLInstance*' has sub-type changes: + pointed to type 'typedef QXLInstance' changed at spice.h:103:1, as reported earlier + + [C] 'function void spice_qxl_del_memslot(QXLInstance*, uint32_t, uint32_t)' at red_dispatcher.c:885:1 has some indirect sub-type changes: + parameter 1 of type 'QXLInstance*' has sub-type changes: + pointed to type 'typedef QXLInstance' changed at spice.h:103:1, as reported earlier + + [C] 'function void spice_qxl_destroy_primary_surface(QXLInstance*, uint32_t)' at red_dispatcher.c:903:1 has some indirect sub-type changes: + parameter 1 of type 'QXLInstance*' has sub-type changes: + pointed to type 'typedef QXLInstance' changed at spice.h:103:1, as reported earlier + + [C] 'function void spice_qxl_destroy_primary_surface_async(QXLInstance*, uint32_t, uint64_t)' at red_dispatcher.c:960:1 has some indirect sub-type changes: + parameter 1 of type 'QXLInstance*' has sub-type changes: + pointed to type 'typedef QXLInstance' changed at spice.h:103:1, as reported earlier + + [C] 'function void spice_qxl_destroy_surface_async(QXLInstance*, uint32_t, uint64_t)' at red_dispatcher.c:973:1 has some indirect sub-type changes: + parameter 1 of type 'QXLInstance*' has sub-type changes: + pointed to type 'typedef QXLInstance' changed at spice.h:103:1, as reported earlier + + [C] 'function void spice_qxl_destroy_surface_wait(QXLInstance*, uint32_t)' at red_dispatcher.c:928:1 has some indirect sub-type changes: + parameter 1 of type 'QXLInstance*' has sub-type changes: + pointed to type 'typedef QXLInstance' changed at spice.h:103:1, as reported earlier + + [C] 'function void spice_qxl_destroy_surfaces(QXLInstance*)' at red_dispatcher.c:897:1 has some indirect sub-type changes: + parameter 1 of type 'QXLInstance*' has sub-type changes: + pointed to type 'typedef QXLInstance' changed at spice.h:103:1, as reported earlier + + [C] 'function void spice_qxl_destroy_surfaces_async(QXLInstance*, uint64_t)' at red_dispatcher.c:954:1 has some indirect sub-type changes: + parameter 1 of type 'QXLInstance*' has sub-type changes: + pointed to type 'typedef QXLInstance' changed at spice.h:103:1, as reported earlier + + [C] 'function void spice_qxl_driver_unload(QXLInstance*)' at red_dispatcher.c:998:1 has some indirect sub-type changes: + parameter 1 of type 'QXLInstance*' has sub-type changes: + pointed to type 'typedef QXLInstance' changed at spice.h:103:1, as reported earlier + + [C] 'function void spice_qxl_flush_surfaces_async(QXLInstance*, uint64_t)' at red_dispatcher.c:979:1 has some indirect sub-type changes: + parameter 1 of type 'QXLInstance*' has sub-type changes: + pointed to type 'typedef QXLInstance' changed at spice.h:103:1, as reported earlier + + [C] 'function void spice_qxl_loadvm_commands(QXLInstance*, QXLCommandExt*, uint32_t)' at red_dispatcher.c:934:1 has some indirect sub-type changes: + parameter 1 of type 'QXLInstance*' has sub-type changes: + pointed to type 'typedef QXLInstance' changed at spice.h:103:1, as reported earlier + + [C] 'function void spice_qxl_monitors_config_async(QXLInstance*, QXLPHYSICAL, int, uint64_t)' at red_dispatcher.c:985:1 has some indirect sub-type changes: + parameter 1 of type 'QXLInstance*' has sub-type changes: + pointed to type 'typedef QXLInstance' changed at spice.h:103:1, as reported earlier + + [C] 'function void spice_qxl_oom(QXLInstance*)' at red_dispatcher.c:852:1 has some indirect sub-type changes: + parameter 1 of type 'QXLInstance*' has sub-type changes: + pointed to type 'typedef QXLInstance' changed at spice.h:103:1, as reported earlier + + [C] 'function void spice_qxl_reset_cursor(QXLInstance*)' at red_dispatcher.c:922:1 has some indirect sub-type changes: + parameter 1 of type 'QXLInstance*' has sub-type changes: + pointed to type 'typedef QXLInstance' changed at spice.h:103:1, as reported earlier + + [C] 'function void spice_qxl_reset_image_cache(QXLInstance*)' at red_dispatcher.c:916:1 has some indirect sub-type changes: + parameter 1 of type 'QXLInstance*' has sub-type changes: + pointed to type 'typedef QXLInstance' changed at spice.h:103:1, as reported earlier + + [C] 'function void spice_qxl_reset_memslots(QXLInstance*)' at red_dispatcher.c:891:1 has some indirect sub-type changes: + parameter 1 of type 'QXLInstance*' has sub-type changes: + pointed to type 'typedef QXLInstance' changed at spice.h:103:1, as reported earlier + + [C] 'function void spice_qxl_set_max_monitors(QXLInstance*, unsigned int)' at red_dispatcher.c:992:1 has some indirect sub-type changes: + parameter 1 of type 'QXLInstance*' has sub-type changes: + pointed to type 'typedef QXLInstance' changed at spice.h:103:1, as reported earlier + + [C] 'function void spice_qxl_start(QXLInstance*)' at red_dispatcher.c:858:1 has some indirect sub-type changes: + parameter 1 of type 'QXLInstance*' has sub-type changes: + pointed to type 'typedef QXLInstance' changed at spice.h:103:1, as reported earlier + + [C] 'function void spice_qxl_stop(QXLInstance*)' at red_dispatcher.c:864:1 has some indirect sub-type changes: + parameter 1 of type 'QXLInstance*' has sub-type changes: + pointed to type 'typedef QXLInstance' changed at spice.h:103:1, as reported earlier + + [C] 'function void spice_qxl_update_area(QXLInstance*, uint32_t, QXLRect*, QXLRect*, uint32_t, uint32_t)' at red_dispatcher.c:870:1 has some indirect sub-type changes: + parameter 1 of type 'QXLInstance*' has sub-type changes: + pointed to type 'typedef QXLInstance' changed at spice.h:103:1, as reported earlier + + [C] 'function void spice_qxl_update_area_async(QXLInstance*, uint32_t, QXLRect*, uint32_t, uint64_t)' at red_dispatcher.c:940:1 has some indirect sub-type changes: + parameter 1 of type 'QXLInstance*' has sub-type changes: + pointed to type 'typedef QXLInstance' changed at spice.h:103:1, as reported earlier + + [C] 'function void spice_qxl_wakeup(QXLInstance*)' at red_dispatcher.c:846:1 has some indirect sub-type changes: + parameter 1 of type 'QXLInstance*' has sub-type changes: + pointed to type 'typedef QXLInstance' changed at spice.h:103:1, as reported earlier + [C] 'function int spice_server_add_client(SpiceServer*, int, int)' at reds.c:2391:1 has some indirect sub-type changes: parameter 1 of type 'SpiceServer*' has sub-type changes: in pointed to type 'typedef SpiceServer' at spice-server.h:38:1: @@ -79,10 +182,28 @@ 'Ring SpiceCharDeviceState::clients' offset changed from 640 to 704 (in bits) (by +64 bits) 'uint32_t SpiceCharDeviceState::num_clients' offset changed from 768 to 832 (in bits) (by +64 bits) 'uint64_t SpiceCharDeviceState::client_tokens_interval' offset changed from 832 to 896 (in bits) (by +64 bits) - 'SpiceCharDeviceInstance* SpiceCharDeviceState::sin' offset changed from 896 to 960 (in bits) (by +64 bits) + type of 'SpiceCharDeviceInstance* SpiceCharDeviceState::sin' changed: + in pointed to type 'typedef SpiceCharDeviceInstance' at spice-char.h:33:1: + underlying type 'struct SpiceCharDeviceInstance' at spice.h:416:1 changed: + type size hasn't changed + 1 data member change: + type of 'SpiceCharDeviceState* SpiceCharDeviceInstance::st' changed: + in pointed to type 'typedef SpiceCharDeviceState' at spice-char.h:34:1: + underlying type 'struct SpiceCharDeviceState' changed; details are being reported + + and offset changed from 896 to 960 (in bits) (by +64 bits) 'int SpiceCharDeviceState::during_read_from_device' offset changed from 960 to 1024 (in bits) (by +64 bits) 'int SpiceCharDeviceState::during_write_to_device' offset changed from 992 to 1056 (in bits) (by +64 bits) - 'SpiceCharDeviceCallbacks SpiceCharDeviceState::cbs' offset changed from 1024 to 1088 (in bits) (by +64 bits) + type of 'SpiceCharDeviceCallbacks SpiceCharDeviceState::cbs' changed: + underlying type 'struct SpiceCharDeviceCallbacks' at char_device.h:81:1 changed: + type size hasn't changed + 1 data member change: + type of 'SpiceCharDeviceMsgToClient* (SpiceCharDeviceInstance*, void*)* SpiceCharDeviceCallbacks::read_one_msg_from_device' changed: + in pointed to type 'function type SpiceCharDeviceMsgToClient* (SpiceCharDeviceInstance*, void*)': + parameter 1 of type 'SpiceCharDeviceInstance*' has sub-type changes: + pointed to type 'typedef SpiceCharDeviceInstance' changed at spice.h:399:1, as reported earlier + + and offset changed from 1024 to 1088 (in bits) (by +64 bits) 'void* SpiceCharDeviceState::opaque' offset changed from 1472 to 1536 (in bits) (by +64 bits) no data member changes (3 filtered); @@ -95,19 +216,23 @@ type of 'RedChannel MainChannel::base' changed: underlying type 'struct RedChannel' at red_channel.h:303:1 changed: type size hasn't changed - 1 data member changes (2 filtered): + 2 data member changes (1 filtered): type of 'ChannelCbs RedChannel::channel_cbs' changed: underlying type 'struct {channel_configure_socket_proc config_socket; channel_disconnect_proc on_disconnect; channel_send_pipe_item_proc send_item; channel_hold_pipe_item_proc hold_item; channel_release_pipe_item_proc release_item; channel_alloc_msg_recv_buf_proc alloc_recv_buf; channel_release_msg_recv_buf_proc release_recv_buf; channel_handle_migrate_flush_mark_proc handle_migrate_flush_mark; channel_handle_migrate_data_proc handle_migrate_data; channel_handle_migrate_data_get_serial_proc handle_migrate_data_get_serial;}' at red_channel.h:195:1 changed: type size hasn't changed - 1 data member changes (9 filtered): - type of 'channel_alloc_msg_recv_buf_proc alloc_recv_buf' changed: - underlying type 'uint8_t* (RedChannelClient*, typedef uint16_t, typedef uint32_t)*' changed: - in pointed to type 'function type uint8_t* (RedChannelClient*, typedef uint16_t, typedef uint32_t)': + 10 data member changes: + type of 'channel_configure_socket_proc config_socket' changed: + underlying type 'int (RedChannelClient*)*' changed: + in pointed to type 'function type int (RedChannelClient*)': parameter 1 of type 'RedChannelClient*' has sub-type changes: in pointed to type 'typedef RedChannelClient' at red_channel.h:131:1: underlying type 'struct RedChannelClient' at red_channel.h:247:1 changed: type size hasn't changed - 1 data member changes (3 filtered): + 2 data member changes (2 filtered): + type of 'RedChannel* RedChannelClient::channel' changed: + in pointed to type 'typedef RedChannel' at red_channel.h:130:1: + underlying type 'struct RedChannel' changed; details are being reported + type of 'RedsStream* RedChannelClient::stream' changed: in pointed to type 'typedef RedsStream' at reds_stream.h:31:1: underlying type 'struct RedsStream' at reds.h:68:1 changed: @@ -322,11 +447,111 @@ and name of 'RedsStream::ssl' changed to 'RedsStream::priv' at reds_stream.h:42:1 + type of 'channel_disconnect_proc on_disconnect' changed: + underlying type 'void (RedChannelClient*)*' changed: + in pointed to type 'function type void (RedChannelClient*)': + parameter 1 of type 'RedChannelClient*' has sub-type changes: + pointed to type 'typedef RedChannelClient' changed at red_channel.h:136:1, as reported earlier + + type of 'channel_send_pipe_item_proc send_item' changed: + underlying type 'void (RedChannelClient*, PipeItem*)*' changed: + in pointed to type 'function type void (RedChannelClient*, PipeItem*)': + parameter 1 of type 'RedChannelClient*' has sub-type changes: + pointed to type 'typedef RedChannelClient' changed at red_channel.h:136:1, as reported earlier + + type of 'channel_hold_pipe_item_proc hold_item' changed: + underlying type 'void (RedChannelClient*, PipeItem*)*' changed: + in pointed to type 'function type void (RedChannelClient*, PipeItem*)': + parameter 1 of type 'RedChannelClient*' has sub-type changes: + pointed to type 'typedef RedChannelClient' changed at red_channel.h:136:1, as reported earlier + + type of 'channel_release_pipe_item_proc release_item' changed: + underlying type 'void (RedChannelClient*, PipeItem*, int)*' changed: + in pointed to type 'function type void (RedChannelClient*, PipeItem*, int)': + parameter 1 of type 'RedChannelClient*' has sub-type changes: + pointed to type 'typedef RedChannelClient' changed at red_channel.h:136:1, as reported earlier + + type of 'channel_alloc_msg_recv_buf_proc alloc_recv_buf' changed: + underlying type 'uint8_t* (RedChannelClient*, typedef uint16_t, typedef uint32_t)*' changed: + in pointed to type 'function type uint8_t* (RedChannelClient*, typedef uint16_t, typedef uint32_t)': + parameter 1 of type 'RedChannelClient*' has sub-type changes: + pointed to type 'typedef RedChannelClient' changed at red_channel.h:136:1, as reported earlier + + type of 'channel_release_msg_recv_buf_proc release_recv_buf' changed: + underlying type 'void (RedChannelClient*, typedef uint16_t, typedef uint32_t, uint8_t*)*' changed: + in pointed to type 'function type void (RedChannelClient*, typedef uint16_t, typedef uint32_t, uint8_t*)': + parameter 1 of type 'RedChannelClient*' has sub-type changes: + pointed to type 'typedef RedChannelClient' changed at red_channel.h:136:1, as reported earlier + + type of 'channel_handle_migrate_flush_mark_proc handle_migrate_flush_mark' changed: + underlying type 'int (RedChannelClient*)*' changed: + in pointed to type 'function type int (RedChannelClient*)': + parameter 1 of type 'RedChannelClient*' has sub-type changes: + pointed to type 'typedef RedChannelClient' changed at red_channel.h:136:1, as reported earlier + + type of 'channel_handle_migrate_data_proc handle_migrate_data' changed: + underlying type 'int (RedChannelClient*, typedef uint32_t, void*)*' changed: + in pointed to type 'function type int (RedChannelClient*, typedef uint32_t, void*)': + parameter 1 of type 'RedChannelClient*' has sub-type changes: + pointed to type 'typedef RedChannelClient' changed at red_channel.h:136:1, as reported earlier + + type of 'channel_handle_migrate_data_get_serial_proc handle_migrate_data_get_serial' changed: + underlying type 'typedef uint64_t (RedChannelClient*, typedef uint32_t, void*)*' changed: + in pointed to type 'function type typedef uint64_t (RedChannelClient*, typedef uint32_t, void*)': + parameter 1 of type 'RedChannelClient*' has sub-type changes: + pointed to type 'typedef RedChannelClient' changed at red_channel.h:136:1, as reported earlier + + + type of 'ClientCbs RedChannel::client_cbs' changed: + underlying type 'struct {channel_client_connect_proc connect; channel_client_disconnect_proc disconnect; channel_client_migrate_proc migrate;}' at red_channel.h:213:1 changed: + type size hasn't changed + 3 data member changes: + type of 'channel_client_connect_proc connect' changed: + underlying type 'void (RedChannel*, RedClient*, RedsStream*, int, int, uint32_t*, int, uint32_t*)*' changed: + in pointed to type 'function type void (RedChannel*, RedClient*, RedsStream*, int, int, uint32_t*, int, uint32_t*)': + parameter 1 of type 'RedChannel*' has sub-type changes: + in pointed to type 'typedef RedChannel' at red_channel.h:130:1: + underlying type 'struct RedChannel' changed; details are being reported + parameter 3 of type 'RedsStream*' has sub-type changes: + pointed to type 'typedef RedsStream' changed at red_channel.h:134:1, as reported earlier + + type of 'channel_client_disconnect_proc disconnect' changed: + underlying type 'void (RedChannelClient*)*' changed: + in pointed to type 'function type void (RedChannelClient*)': + parameter 1 of type 'RedChannelClient*' has sub-type changes: + pointed to type 'typedef RedChannelClient' changed at red_channel.h:136:1, as reported earlier + + type of 'channel_client_migrate_proc migrate' changed: + underlying type 'void (RedChannelClient*)*' changed: + in pointed to type 'function type void (RedChannelClient*)': + parameter 1 of type 'RedChannelClient*' has sub-type changes: + pointed to type 'typedef RedChannelClient' changed at red_channel.h:136:1, as reported earlier + no data member change (1 filtered); + [C] 'function int spice_server_add_interface(SpiceServer*, SpiceBaseInstance*)' at reds.c:3159:1 has some indirect sub-type changes: + parameter 1 of type 'SpiceServer*' has sub-type changes: + pointed to type 'typedef SpiceServer' changed at spice.h:440:1, as reported earlier + + [C] 'function int spice_server_add_renderer(SpiceServer*, const char*)' at reds.c:3704:1 has some indirect sub-type changes: + parameter 1 of type 'SpiceServer*' has sub-type changes: + pointed to type 'typedef SpiceServer' changed at spice.h:440:1, as reported earlier + + [C] 'function int spice_server_add_ssl_client(SpiceServer*, int, int)' at reds.c:2408:1 has some indirect sub-type changes: + parameter 1 of type 'SpiceServer*' has sub-type changes: + pointed to type 'typedef SpiceServer' changed at spice.h:440:1, as reported earlier + + [C] 'function void spice_server_char_device_wakeup(SpiceCharDeviceInstance*)' at reds.c:3024:1 has some indirect sub-type changes: + parameter 1 of type 'SpiceCharDeviceInstance*' has sub-type changes: + pointed to type 'typedef SpiceCharDeviceInstance' changed at spice.h:399:1, as reported earlier + + [C] 'function void spice_server_destroy(SpiceServer*)' at reds.c:3419:1 has some indirect sub-type changes: + parameter 1 of type 'SpiceServer*' has sub-type changes: + pointed to type 'typedef SpiceServer' changed at spice.h:440:1, as reported earlier + [C] 'function spice_image_compression_t spice_server_get_image_compression(SpiceServer*)' at reds.c:3618:1 has some indirect sub-type changes: return type changed: typedef name changed from spice_image_compression_t to SpiceImageCompression at enums.h:197:1 @@ -354,6 +579,52 @@ 'SpiceImageCompression::SPICE_IMAGE_COMPRESSION_LZ4' value '7' 'SpiceImageCompression::SPICE_IMAGE_COMPRESSION_ENUM_END' value '8' + parameter 1 of type 'SpiceServer*' has sub-type changes: + pointed to type 'typedef SpiceServer' changed at spice.h:440:1, as reported earlier + + [C] 'function int spice_server_get_num_clients(SpiceServer*)' at reds.c:845:1 has some indirect sub-type changes: + parameter 1 of type 'SpiceServer*' has sub-type changes: + pointed to type 'typedef SpiceServer' changed at spice.h:440:1, as reported earlier + + [C] 'function int spice_server_get_peer_info(SpiceServer*, sockaddr*, socklen_t*)' at reds.c:3689:1 has some indirect sub-type changes: + parameter 1 of type 'SpiceServer*' has sub-type changes: + pointed to type 'typedef SpiceServer' changed at spice.h:440:1, as reported earlier + + [C] 'function int spice_server_get_sock_info(SpiceServer*, sockaddr*, socklen_t*)' at reds.c:3680:1 has some indirect sub-type changes: + parameter 1 of type 'SpiceServer*' has sub-type changes: + pointed to type 'typedef SpiceServer' changed at spice.h:440:1, as reported earlier + + [C] 'function int spice_server_init(SpiceServer*, SpiceCoreInterface*)' at reds.c:3407:1 has some indirect sub-type changes: + parameter 1 of type 'SpiceServer*' has sub-type changes: + pointed to type 'typedef SpiceServer' changed at spice.h:440:1, as reported earlier + + [C] 'function int spice_server_is_server_mouse(SpiceServer*)' at reds.c:3698:1 has some indirect sub-type changes: + parameter 1 of type 'SpiceServer*' has sub-type changes: + pointed to type 'typedef SpiceServer' changed at spice.h:440:1, as reported earlier + + [C] 'function int spice_server_migrate_connect(SpiceServer*, const char*, int, int, const char*)' at reds.c:3791:1 has some indirect sub-type changes: + parameter 1 of type 'SpiceServer*' has sub-type changes: + pointed to type 'typedef SpiceServer' changed at spice.h:440:1, as reported earlier + + [C] 'function int spice_server_migrate_end(SpiceServer*, int)' at reds.c:3866:1 has some indirect sub-type changes: + parameter 1 of type 'SpiceServer*' has sub-type changes: + pointed to type 'typedef SpiceServer' changed at spice.h:440:1, as reported earlier + + [C] 'function int spice_server_migrate_info(SpiceServer*, const char*, int, int, const char*)' at reds.c:3842:1 has some indirect sub-type changes: + parameter 1 of type 'SpiceServer*' has sub-type changes: + pointed to type 'typedef SpiceServer' changed at spice.h:440:1, as reported earlier + + [C] 'function int spice_server_migrate_start(SpiceServer*)' at reds.c:3856:1 has some indirect sub-type changes: + parameter 1 of type 'SpiceServer*' has sub-type changes: + pointed to type 'typedef SpiceServer' changed at spice.h:440:1, as reported earlier + + [C] 'function int spice_server_migrate_switch(SpiceServer*)' at reds.c:3899:1 has some indirect sub-type changes: + parameter 1 of type 'SpiceServer*' has sub-type changes: + pointed to type 'typedef SpiceServer' changed at spice.h:440:1, as reported earlier + + [C] 'function SpiceServer* spice_server_new()' at reds.c:3398:1 has some indirect sub-type changes: + return type changed: + pointed to type 'typedef SpiceServer' changed at spice.h:440:1, as reported earlier [C] 'function void spice_server_playback_get_buffer(SpicePlaybackInstance*, uint32_t**, uint32_t*)' at snd_worker.c:1081:1 has some indirect sub-type changes: parameter 1 of type 'SpicePlaybackInstance*' has sub-type changes: @@ -367,9 +638,86 @@ type size changed from 512 to 576 (in bits) 1 data member insertion: 'uint32_t SpicePlaybackState::frequency', at offset 512 (in bits) at snd_worker.c:159:1 - no data member changes (2 filtered); + 2 data member changes: + type of 'SndWorker SpicePlaybackState::worker' changed: + type size hasn't changed + 3 data member changes: + type of 'RedChannel* SndWorker::base_channel' changed: + pointed to type 'typedef RedChannel' changed at red_channel.h:135:1, as reported earlier + + type of 'SndChannel* SndWorker::connection' changed: + in pointed to type 'typedef SndChannel' at snd_worker.c:74:1: + underlying type 'struct SndChannel' at snd_worker.c:89:1 changed: + type size hasn't changed + 6 data member changes: + type of 'RedsStream* SndChannel::stream' changed: + pointed to type 'typedef RedsStream' changed at red_channel.h:134:1, as reported earlier + + type of 'SndWorker* SndChannel::worker' changed: + in pointed to type 'typedef SndWorker' at snd_worker.c:80:1: + underlying type 'struct SndWorker' changed; details are being reported + + type of 'RedChannelClient* SndChannel::channel_client' changed: + pointed to type 'typedef RedChannelClient' changed at red_channel.h:136:1, as reported earlier + + type of 'snd_channel_handle_message_proc SndChannel::handle_message' changed: + underlying type 'int (SndChannel*, typedef size_t, typedef uint32_t, void*)*' changed: + in pointed to type 'function type int (SndChannel*, typedef size_t, typedef uint32_t, void*)': + parameter 1 of type 'SndChannel*' has sub-type changes: + in pointed to type 'typedef SndChannel' at snd_worker.c:74:1: + underlying type 'struct SndChannel' changed; details are being reported + + type of 'snd_channel_on_message_done_proc SndChannel::on_message_done' changed: + underlying type 'void (SndChannel*)*' changed: + in pointed to type 'function type void (SndChannel*)': + parameter 1 of type 'SndChannel*' has sub-type changes: + in pointed to type 'typedef SndChannel' at snd_worker.c:74:1: + underlying type 'struct SndChannel' changed; details are being reported + + type of 'snd_channel_cleanup_channel_proc SndChannel::cleanup' changed: + underlying type 'void (SndChannel*)*' changed: + in pointed to type 'function type void (SndChannel*)': + parameter 1 of type 'SndChannel*' has sub-type changes: + in pointed to type 'typedef SndChannel' at snd_worker.c:74:1: + underlying type 'struct SndChannel' changed; details are being reported + + no data member change (1 filtered); + + type of 'SndWorker* SndWorker::next' changed: + in pointed to type 'typedef SndWorker' at snd_worker.c:80:1: + underlying type 'struct SndWorker' changed; details are being reported + type of 'SpicePlaybackInstance* SpicePlaybackState::sin' changed: + in pointed to type 'typedef SpicePlaybackInstance' at spice-audio.h:33:1: + underlying type 'struct SpicePlaybackInstance' changed; details are being reported + + + + [C] 'function void spice_server_playback_put_samples(SpicePlaybackInstance*, uint32_t*)' at snd_worker.c:1100:1 has some indirect sub-type changes: + parameter 1 of type 'SpicePlaybackInstance*' has sub-type changes: + pointed to type 'typedef SpicePlaybackInstance' changed at spice.h:335:1, as reported earlier + + [C] 'function void spice_server_playback_set_mute(SpicePlaybackInstance*, uint8_t)' at snd_worker.c:1021:1 has some indirect sub-type changes: + parameter 1 of type 'SpicePlaybackInstance*' has sub-type changes: + pointed to type 'typedef SpicePlaybackInstance' changed at spice.h:335:1, as reported earlier + + [C] 'function void spice_server_playback_set_volume(SpicePlaybackInstance*, uint8_t, uint16_t*)' at snd_worker.c:1003:1 has some indirect sub-type changes: + parameter 1 of type 'SpicePlaybackInstance*' has sub-type changes: + pointed to type 'typedef SpicePlaybackInstance' changed at spice.h:335:1, as reported earlier + + [C] 'function void spice_server_playback_start(SpicePlaybackInstance*)' at snd_worker.c:1035:1 has some indirect sub-type changes: + parameter 1 of type 'SpicePlaybackInstance*' has sub-type changes: + pointed to type 'typedef SpicePlaybackInstance' changed at spice.h:335:1, as reported earlier + + [C] 'function void spice_server_playback_stop(SpicePlaybackInstance*)' at snd_worker.c:1054:1 has some indirect sub-type changes: + parameter 1 of type 'SpicePlaybackInstance*' has sub-type changes: + pointed to type 'typedef SpicePlaybackInstance' changed at spice.h:335:1, as reported earlier + + [C] 'function void spice_server_port_event(SpiceCharDeviceInstance*, uint8_t)' at spicevmc.c:574:1 has some indirect sub-type changes: + parameter 1 of type 'SpiceCharDeviceInstance*' has sub-type changes: + pointed to type 'typedef SpiceCharDeviceInstance' changed at spice.h:399:1, as reported earlier + [C] 'function uint32_t spice_server_record_get_samples(SpiceRecordInstance*, uint32_t*, uint32_t)' at snd_worker.c:1331:1 has some indirect sub-type changes: parameter 1 of type 'SpiceRecordInstance*' has sub-type changes: in pointed to type 'typedef SpiceRecordInstance' at spice-audio.h:67:1: @@ -382,14 +730,130 @@ type size changed from 512 to 576 (in bits) 1 data member insertion: 'uint32_t SpiceRecordState::frequency', at offset 512 (in bits) at snd_worker.c:166:1 - no data member changes (2 filtered); + 2 data member changes: + type of 'SndWorker SpiceRecordState::worker' changed: + details were reported earlier + + type of 'SpiceRecordInstance* SpiceRecordState::sin' changed: + in pointed to type 'typedef SpiceRecordInstance' at spice-audio.h:67:1: + underlying type 'struct SpiceRecordInstance' changed; details are being reported + + + + [C] 'function void spice_server_record_set_mute(SpiceRecordInstance*, uint8_t)' at snd_worker.c:1279:1 has some indirect sub-type changes: + parameter 1 of type 'SpiceRecordInstance*' has sub-type changes: + pointed to type 'typedef SpiceRecordInstance' changed at spice.h:369:1, as reported earlier + + [C] 'function void spice_server_record_set_volume(SpiceRecordInstance*, uint8_t, uint16_t*)' at snd_worker.c:1261:1 has some indirect sub-type changes: + parameter 1 of type 'SpiceRecordInstance*' has sub-type changes: + pointed to type 'typedef SpiceRecordInstance' changed at spice.h:369:1, as reported earlier + [C] 'function void spice_server_record_start(SpiceRecordInstance*)' at snd_worker.c:1293:1 has some indirect sub-type changes: + parameter 1 of type 'SpiceRecordInstance*' has sub-type changes: + pointed to type 'typedef SpiceRecordInstance' changed at spice.h:369:1, as reported earlier + + [C] 'function void spice_server_record_stop(SpiceRecordInstance*)' at snd_worker.c:1313:1 has some indirect sub-type changes: + parameter 1 of type 'SpiceRecordInstance*' has sub-type changes: + pointed to type 'typedef SpiceRecordInstance' changed at spice.h:369:1, as reported earlier + + [C] 'function void spice_server_set_addr(SpiceServer*, const char*, int)' at reds.c:3455:1 has some indirect sub-type changes: + parameter 1 of type 'SpiceServer*' has sub-type changes: + pointed to type 'typedef SpiceServer' changed at spice.h:440:1, as reported earlier + + [C] 'function int spice_server_set_agent_copypaste(SpiceServer*, int)' at reds.c:3747:1 has some indirect sub-type changes: + parameter 1 of type 'SpiceServer*' has sub-type changes: + pointed to type 'typedef SpiceServer' changed at spice.h:440:1, as reported earlier + + [C] 'function int spice_server_set_agent_file_xfer(SpiceServer*, int)' at reds.c:3756:1 has some indirect sub-type changes: + parameter 1 of type 'SpiceServer*' has sub-type changes: + pointed to type 'typedef SpiceServer' changed at spice.h:440:1, as reported earlier + + [C] 'function int spice_server_set_agent_mouse(SpiceServer*, int)' at reds.c:3739:1 has some indirect sub-type changes: + parameter 1 of type 'SpiceServer*' has sub-type changes: + pointed to type 'typedef SpiceServer' changed at spice.h:440:1, as reported earlier + + [C] 'function int spice_server_set_channel_security(SpiceServer*, const char*, int)' at reds.c:3648:1 has some indirect sub-type changes: + parameter 1 of type 'SpiceServer*' has sub-type changes: + pointed to type 'typedef SpiceServer' changed at spice.h:440:1, as reported earlier + + [C] 'function int spice_server_set_compat_version(SpiceServer*, spice_compat_version_t)' at reds.c:3430:1 has some indirect sub-type changes: + parameter 1 of type 'SpiceServer*' has sub-type changes: + pointed to type 'typedef SpiceServer' changed at spice.h:440:1, as reported earlier + + [C] 'function int spice_server_set_exit_on_disconnect(SpiceServer*, int)' at reds.c:3479:1 has some indirect sub-type changes: + parameter 1 of type 'SpiceServer*' has sub-type changes: + pointed to type 'typedef SpiceServer' changed at spice.h:440:1, as reported earlier [C] 'function int spice_server_set_image_compression(SpiceServer*, spice_image_compression_t)' at reds.c:3602:1 has some indirect sub-type changes: + parameter 1 of type 'SpiceServer*' has sub-type changes: + pointed to type 'typedef SpiceServer' changed at spice.h:440:1, as reported earlier parameter 2 of type 'typedef spice_image_compression_t' changed: typedef name changed from spice_image_compression_t to SpiceImageCompression at enums.h:197:1 - underlying type 'enum __anonymous_enum__2' at spice.h:471:1 changed: - enum type 'enum __anonymous_enum__2' changed at spice.h:471:1, as reported earlier + underlying type 'enum __anonymous_enum__2' changed at spice.h:471:1, as reported earlier + + [C] 'function int spice_server_set_jpeg_compression(SpiceServer*, spice_wan_compression_t)' at reds.c:3624:1 has some indirect sub-type changes: + parameter 1 of type 'SpiceServer*' has sub-type changes: + pointed to type 'typedef SpiceServer' changed at spice.h:440:1, as reported earlier + + [C] 'function int spice_server_set_listen_socket_fd(SpiceServer*, int)' at reds.c:3472:1 has some indirect sub-type changes: + parameter 1 of type 'SpiceServer*' has sub-type changes: + pointed to type 'typedef SpiceServer' changed at spice.h:440:1, as reported earlier + + [C] 'function void spice_server_set_name(SpiceServer*, const char*)' at reds.c:3517:1 has some indirect sub-type changes: + parameter 1 of type 'SpiceServer*' has sub-type changes: + pointed to type 'typedef SpiceServer' changed at spice.h:440:1, as reported earlier + + [C] 'function int spice_server_set_noauth(SpiceServer*)' at reds.c:3486:1 has some indirect sub-type changes: + parameter 1 of type 'SpiceServer*' has sub-type changes: + pointed to type 'typedef SpiceServer' changed at spice.h:440:1, as reported earlier + + [C] 'function int spice_server_set_playback_compression(SpiceServer*, int)' at reds.c:3732:1 has some indirect sub-type changes: + parameter 1 of type 'SpiceServer*' has sub-type changes: + pointed to type 'typedef SpiceServer' changed at spice.h:440:1, as reported earlier + + [C] 'function int spice_server_set_port(SpiceServer*, int)' at reds.c:3445:1 has some indirect sub-type changes: + parameter 1 of type 'SpiceServer*' has sub-type changes: + pointed to type 'typedef SpiceServer' changed at spice.h:440:1, as reported earlier + + [C] 'function int spice_server_set_sasl(SpiceServer*, int)' at reds.c:3494:1 has some indirect sub-type changes: + parameter 1 of type 'SpiceServer*' has sub-type changes: + pointed to type 'typedef SpiceServer' changed at spice.h:440:1, as reported earlier + + [C] 'function int spice_server_set_sasl_appname(SpiceServer*, const char*)' at reds.c:3505:1 has some indirect sub-type changes: + parameter 1 of type 'SpiceServer*' has sub-type changes: + pointed to type 'typedef SpiceServer' changed at spice.h:440:1, as reported earlier + + [C] 'function void spice_server_set_seamless_migration(SpiceServer*, int)' at reds.c:3941:1 has some indirect sub-type changes: + parameter 1 of type 'SpiceServer*' has sub-type changes: + pointed to type 'typedef SpiceServer' changed at spice.h:440:1, as reported earlier + + [C] 'function int spice_server_set_streaming_video(SpiceServer*, int)' at reds.c:3720:1 has some indirect sub-type changes: + parameter 1 of type 'SpiceServer*' has sub-type changes: + pointed to type 'typedef SpiceServer' changed at spice.h:440:1, as reported earlier + + [C] 'function int spice_server_set_ticket(SpiceServer*, const char*, int, int, int)' at reds.c:3529:1 has some indirect sub-type changes: + parameter 1 of type 'SpiceServer*' has sub-type changes: + pointed to type 'typedef SpiceServer' changed at spice.h:440:1, as reported earlier + + [C] 'function int spice_server_set_tls(SpiceServer*, int, const char*, const char*, const char*, const char*, const char*, const char*)' at reds.c:3564:1 has some indirect sub-type changes: + parameter 1 of type 'SpiceServer*' has sub-type changes: + pointed to type 'typedef SpiceServer' changed at spice.h:440:1, as reported earlier + + [C] 'function void spice_server_set_uuid(SpiceServer*, const uint8_t*)' at reds.c:3523:1 has some indirect sub-type changes: + parameter 1 of type 'SpiceServer*' has sub-type changes: + pointed to type 'typedef SpiceServer' changed at spice.h:440:1, as reported earlier + + [C] 'function int spice_server_set_zlib_glz_compression(SpiceServer*, spice_wan_compression_t)' at reds.c:3636:1 has some indirect sub-type changes: + parameter 1 of type 'SpiceServer*' has sub-type changes: + pointed to type 'typedef SpiceServer' changed at spice.h:440:1, as reported earlier + + [C] 'function void spice_server_vm_start(SpiceServer*)' at reds.c:3911:1 has some indirect sub-type changes: + parameter 1 of type 'SpiceServer*' has sub-type changes: + pointed to type 'typedef SpiceServer' changed at spice.h:440:1, as reported earlier + + [C] 'function void spice_server_vm_stop(SpiceServer*)' at reds.c:3926:1 has some indirect sub-type changes: + parameter 1 of type 'SpiceServer*' has sub-type changes: + pointed to type 'typedef SpiceServer' changed at spice.h:440:1, as reported earlier ================ end of changes of 'libspice-server.so.1.8.0'=============== diff --git a/tests/test-abidiff-exit.cc b/tests/test-abidiff-exit.cc index cb87f63f..45258a9f 100644 --- a/tests/test-abidiff-exit.cc +++ b/tests/test-abidiff-exit.cc @@ -139,6 +139,15 @@ InOutSpec in_out_specs[] = "data/test-abidiff-exit/test-leaf1-report.txt", "output/test-abidiff-exit/test-leaf1-report.txt" }, + { + "data/test-abidiff-exit/test-leaf3-v0.o", + "data/test-abidiff-exit/test-leaf3-v1.o", + "", + "--leaf-changes-only", + abigail::tools_utils::ABIDIFF_ABI_CHANGE, + "data/test-abidiff-exit/test-leaf3-report.txt", + "output/test-abidiff-exit/test-leaf3-report.txt" + }, {0, 0, 0 ,0, abigail::tools_utils::ABIDIFF_OK, 0, 0} }; diff --git a/tools/abidiff.cc b/tools/abidiff.cc index f83a7e54..bbe2f4f2 100644 --- a/tools/abidiff.cc +++ b/tools/abidiff.cc @@ -198,7 +198,7 @@ display_usage(const string& prog_name, ostream& out) << " --no-corpus-path do not take the path to the corpora into account\n" << " --fail-no-debug-info bail out if no debug info was found\n" << " --leaf-changes-only|-l only show leaf changes, " - "so no change impact analysis\n" + "so no change impact analysis (implies --redundant)\n" << " --deleted-fns display deleted public functions\n" << " --changed-fns display changed public functions\n" << " --added-fns display added public functions\n" @@ -649,7 +649,19 @@ set_diff_context_from_opts(diff_context_sptr ctxt, ctxt->show_added_vars(opts.show_all_vars || opts.show_added_vars); ctxt->show_linkage_names(opts.show_linkage_names); ctxt->show_locs(opts.show_locs); - ctxt->show_redundant_changes(opts.show_redundant_changes); + // So when we are showing only leaf changes, we want to show + // redundant changes because of this: Suppose several functions have + // their return type changed from void* to int*. We want them all + // to be reported. In that case the change is not redundant. As + // far as user-defined type changes (like struct/class) they are + // already put inside a map which makes them be non-redundant, so we + // don't have to worry about that case. + // + // TODO: maybe that in this case we should avoid firing the + // redundancy analysis pass altogether. That could help save a + // couple of CPU cycle here and there! + ctxt->show_redundant_changes(opts.show_redundant_changes + || opts.leaf_changes_only); ctxt->show_symbols_unreferenced_by_debug_info (opts.show_symbols_not_referenced_by_debug_info); ctxt->show_added_symbols_unreferenced_by_debug_info diff --git a/tools/abipkgdiff.cc b/tools/abipkgdiff.cc index 87950020..83fdc2b6 100644 --- a/tools/abipkgdiff.cc +++ b/tools/abipkgdiff.cc @@ -849,7 +849,7 @@ display_usage(const string& prog_name, ostream& out) << " --private-dso compare DSOs that are private " "to the package as well\n" << " --leaf-changes-only|-l only show leaf changes, " - "so no change impact analysis\n" + "so no change impact analysis (implies --redundant)\n" << " --impacted-interfaces|-i when in leaf mode, show " "interfaces impacted by ABI changes\n" << " --full-impact|-f when comparing kernel packages, show the " @@ -1173,7 +1173,9 @@ set_diff_context_from_opts(diff_context_sptr ctxt, { ctxt->default_output_stream(&cout); ctxt->error_output_stream(&cerr); - ctxt->show_redundant_changes(opts.show_redundant_changes); + // See comment in abidiff.cc's set_diff_context_from_opts. + ctxt->show_redundant_changes(opts.show_redundant_changes + || opts.leaf_changes_only); ctxt->show_leaf_changes_only(opts.leaf_changes_only); ctxt->show_impacted_interfaces(opts.show_impacted_interfaces); ctxt->show_unreachable_types(opts.show_all_types);