public inbox for [email protected]help / color / mirror / Atom feed
Development of ABI Compliance Checker for official PostgreSQL Repo 12+ messages / 5 participants [nested] [flat]
* Development of ABI Compliance Checker for official PostgreSQL Repo @ 2025-05-16 06:42 Mankirat Singh <[email protected]> 0 siblings, 3 replies; 12+ messages in thread From: Mankirat Singh @ 2025-05-16 06:42 UTC (permalink / raw) To: [email protected]; +Cc: [email protected]; [email protected] <[email protected]> Hello Postgres Community, I am Mankirat - 3rd year Computer Engineering undergrad. I am excited to share that I will be developing an ABI compliance checker and reporting system this summers as my GSoC 2025 project under the mentorship of David Wheeler <https://justatheory.com/; and Pavlo Golub <https://pashagolub.github.io/blog/;. This project will help identify and prevent unintentional ABI changes in future minor Postgres releases. This follows on the heels of the addition of ABI and API guidance <https://justatheory.com/2024/06/abi-api-guidance/; in Postgres 18, as well as the ABI-breaking Postgres 17.1 release <https://www.enterprisedb.com/blog/explaining-abi-breakage-postgresql-171;. I had wrote two blogs for the same discussing about importance of this project and how I plan to work on this at blog.mankiratsingh.com I’d greatly appreciate any feedback or suggestions. Best, Mankirat Singh ^ permalink raw reply [nested|flat] 12+ messages in thread
* Re: Development of ABI Compliance Checker for official PostgreSQL Repo @ 2025-05-16 16:06 Daniel Gustafsson <[email protected]> parent: Mankirat Singh <[email protected]> 2 siblings, 0 replies; 12+ messages in thread From: Daniel Gustafsson @ 2025-05-16 16:06 UTC (permalink / raw) To: Mankirat Singh <[email protected]>; +Cc: [email protected]; [email protected]; [email protected] <[email protected]> > On 16 May 2025, at 02:42, Mankirat Singh <[email protected]> wrote: > > Hello Postgres Community, > > I am Mankirat - 3rd year Computer Engineering undergrad. I am excited to share that I will be developing an ABI compliance checker and reporting system this summers as my GSoC 2025 project under the mentorship of David Wheeler and Pavlo Golub. Welcome to the community, we look forward to seeing your work! -- Daniel Gustafsson ^ permalink raw reply [nested|flat] 12+ messages in thread
* Re: Development of ABI Compliance Checker for official PostgreSQL Repo @ 2025-05-16 19:15 Akshat Jaimini <[email protected]> parent: Mankirat Singh <[email protected]> 2 siblings, 0 replies; 12+ messages in thread From: Akshat Jaimini @ 2025-05-16 19:15 UTC (permalink / raw) To: Mankirat Singh <[email protected]>; +Cc: PostgreSQL WWW <[email protected]>; [email protected]; Pavlo Golub <[email protected]> Looking forward to your contributions Mankirat and Welcome to the community! Regards, Akshat Jaimini On Fri, 16 May, 2025, 12:12 pm Mankirat Singh, <[email protected]> wrote: > Hello Postgres Community, > > I am Mankirat - 3rd year Computer Engineering undergrad. I am excited to > share that I will be developing an ABI compliance checker and reporting > system this summers as my GSoC 2025 project under the mentorship of David > Wheeler <https://justatheory.com/; and Pavlo Golub > <https://pashagolub.github.io/blog/;. > > This project will help identify and prevent unintentional ABI changes in > future minor Postgres releases. This follows on the heels of the addition > of ABI and API guidance > <https://justatheory.com/2024/06/abi-api-guidance/; in Postgres 18, as > well as the ABI-breaking Postgres 17.1 release > <https://www.enterprisedb.com/blog/explaining-abi-breakage-postgresql-171; > . > > I had wrote two blogs for the same discussing about importance of this > project and how I plan to work on this at blog.mankiratsingh.com > I’d greatly appreciate any feedback or suggestions. > > Best, > Mankirat Singh > ^ permalink raw reply [nested|flat] 12+ messages in thread
* Re: Development of ABI Compliance Checker for official PostgreSQL Repo @ 2025-05-18 18:29 David E. Wheeler <[email protected]> parent: Mankirat Singh <[email protected]> 2 siblings, 1 reply; 12+ messages in thread From: David E. Wheeler @ 2025-05-18 18:29 UTC (permalink / raw) To: Mankirat Singh <[email protected]>; +Cc: [email protected]; [email protected] <[email protected]> On May 16, 2025, at 02:42, Mankirat Singh <[email protected]> wrote: > I had wrote two blogs for the same discussing about importance of this project and how I plan to work on this at blog.mankiratsingh.com I’d greatly appreciate any feedback or suggestions. Anyone have thoughts on Mankirat’s proposal[1] to start with libabigail’s abidiff utility to produce the the raw data for each report, and then write Perl code to transform it to a publishable report? Best, David [1]: https://blog.mankiratsingh.com/posts/abi-compliance-reporting-part-2/ Attachments: [application/pgp-signature] signature.asc (833B, ../../[email protected]/2-signature.asc) download ^ permalink raw reply [nested|flat] 12+ messages in thread
* Re: Development of ABI Compliance Checker for official PostgreSQL Repo @ 2025-05-19 14:17 Peter Eisentraut <[email protected]> parent: David E. Wheeler <[email protected]> 0 siblings, 1 reply; 12+ messages in thread From: Peter Eisentraut @ 2025-05-19 14:17 UTC (permalink / raw) To: David E. Wheeler <[email protected]>; Mankirat Singh <[email protected]>; +Cc: [email protected]; [email protected] <[email protected]> On 18.05.25 20:29, David E. Wheeler wrote: > On May 16, 2025, at 02:42, Mankirat Singh <[email protected]> wrote: > >> I had wrote two blogs for the same discussing about importance of this project and how I plan to work on this at blog.mankiratsingh.com I’d greatly appreciate any feedback or suggestions. > > Anyone have thoughts on Mankirat’s proposal[1] to start with libabigail’s abidiff utility to produce the the raw data for each report, and then write Perl code to transform it to a publishable report? Well, normally (if there are no problematic ABI changes) the report will be empty. So I wouldn't spend too much time on the formatting. If there is a violation, you can just show the raw abidiff output inside <pre> or whatever. Generally, this looks like the right direction. As an additional tip, check the Python source code, they are doing something like that with libabigail as well. > > Best, > > David > > [1]: https://blog.mankiratsingh.com/posts/abi-compliance-reporting-part-2/ > ^ permalink raw reply [nested|flat] 12+ messages in thread
* Re: Development of ABI Compliance Checker for official PostgreSQL Repo @ 2025-05-20 18:57 David E. Wheeler <[email protected]> parent: Peter Eisentraut <[email protected]> 0 siblings, 1 reply; 12+ messages in thread From: David E. Wheeler @ 2025-05-20 18:57 UTC (permalink / raw) To: Peter Eisentraut <[email protected]>; +Cc: Mankirat Singh <[email protected]>; [email protected]; [email protected] <[email protected]> On May 19, 2025, at 10:17, Peter Eisentraut <[email protected]> wrote: > Well, normally (if there are no problematic ABI changes) the report will be empty. So I wouldn't spend too much time on the formatting. If there is a violation, you can just show the raw abidiff output inside <pre> or whatever. Interesting point, though it looks like maybe the output doesn’t work that way? In his second post, Mankirat linked to the output from abidiff[1] and abicc[2] comparing 17.2 to 17.3. The latter is HTML, but abidiff’s plan is pretty straightforward text that reports a bunch of changes. I imagine it’ll need some massaging to determine which are proper ABI breaks. Mankirat, did you try it with 17.0 to 17.1? That would be interesting, as there was an ABI break in 17.1[3]. > Generally, this looks like the right direction. > > As an additional tip, check the Python source code, they are doing something like that with libabigail as well. Ooh, good to know, thanks! D [1]: https://drive.google.com/file/d/1EFW2BHsRglAuNTjF6DpizRiX8iSNBsaN/view [2]: https://abicc-17-2-17-3-postgres.mankiratsingh.com/ [3]: https://www.enterprisedb.com/blog/explaining-abi-breakage-postgresql-171 Attachments: [application/pgp-signature] signature.asc (833B, ../../[email protected]/2-signature.asc) download ^ permalink raw reply [nested|flat] 12+ messages in thread
* Re: Development of ABI Compliance Checker for official PostgreSQL Repo @ 2025-05-21 12:52 Mankirat Singh <[email protected]> parent: David E. Wheeler <[email protected]> 0 siblings, 2 replies; 12+ messages in thread From: Mankirat Singh @ 2025-05-21 12:52 UTC (permalink / raw) To: David E. Wheeler <[email protected]>; [email protected]; +Cc: [email protected]; [email protected] On Wed, 21 May 2025 at 00:27, David E. Wheeler <[email protected]> wrote: > Interesting point, though it looks like maybe the output doesn’t work that > way? In his second post, Mankirat linked to the output from abidiff[1] and > abicc[2] comparing 17.2 to 17.3. The latter is HTML, but abidiff’s plan is > pretty straightforward text that reports a bunch of changes. I imagine > it’ll need some massaging to determine which are proper ABI breaks. Mankirat, did you try it with 17.0 to 17.1? That would be interesting, as > there was an ABI break in 17.1[3]. I have attached below the compliance reports for that version. I had not included it in the blog earlier, as it was complicated and some readers might not understand. But as per my understanding, the outputs given by abidiff are way too detailed as compared to html report output by abi-compliance-checker for the same PostgreSQL version, though it backfires abidiff's usefulness since it lists all the symbols which got affected due to a change instead of directly mentioning the root cause. For example, in version 17.1 instability struct ResultRelInfo got changed with a new data member, in execnodes.h file as per this blog[1], but the abidiff report gives "14 functions with some indirect sub-type change" and all those 14 were affected due to the same cause, i.e. ResultRelInfo struct - thus making a need to parse the output in a better format, I believe. > Generally, this looks like the right direction. > That's great :) > As an additional tip, check the Python source code, they are doing > something like that with libabigail as well. > Can you please provide some reference on that? - Do you mean something like this[2]? Regards, Mankirat [1]: https://www.enterprisedb.com/blog/explaining-abi-breakage-postgresql-171 [2]: https://developers.redhat.com/blog/2020/04/02/how-to-write-an-abi-compliance-checker-using-libabigai... Functions changes summary: 0 Removed, 14 Changed (1619 filtered out), 16 Added functions Variables changes summary: 0 Removed, 0 Changed (22 filtered out), 0 Added variables Function symbols changes summary: 0 Removed, 0 Added function symbol not referenced by debug info Variable symbols changes summary: 0 Removed, 5 Added variable symbols not referenced by debug info 16 Added functions: [A] 'function bool GetSessionUserIsSuperuser()' {GetSessionUserIsSuperuser} [A] 'function void SIResetAll()' {SIResetAll} [A] 'function HeapTuple SearchSysCacheLocked1(int, Datum)' {SearchSysCacheLocked1} [A] 'function HeapTuple SearchSysCacheLockedCopy1(int, Datum)' {SearchSysCacheLockedCopy1} [A] 'function void SetAuthenticatedUserId(Oid)' {SetAuthenticatedUserId} [A] 'function bool heap_inplace_lock(Relation, HeapTuple, Buffer, void (void*)*, void*)' {heap_inplace_lock} [A] 'function void heap_inplace_unlock(Relation, HeapTuple, Buffer)' {heap_inplace_unlock} [A] 'function void heap_inplace_update_and_unlock(Relation, HeapTuple, HeapTuple, Buffer)' {heap_inplace_update_and_unlock} [A] 'function void pg_xml_done(PgXmlErrorContext*, bool)' {pg_xml_done} [A] 'function bool pg_xml_error_occurred(PgXmlErrorContext*)' {pg_xml_error_occurred} [A] 'function PgXmlErrorContext* pg_xml_init(PgXmlStrictness)' {pg_xml_init} [A] 'function void pg_xml_init_library()' {pg_xml_init_library} [A] 'function void systable_inplace_update_begin(Relation, Oid, bool, Snapshot, int, const ScanKeyData*, HeapTuple*, void**)' {systable_inplace_update_begin} [A] 'function void systable_inplace_update_cancel(void*)' {systable_inplace_update_cancel} [A] 'function void systable_inplace_update_finish(void*, HeapTuple)' {systable_inplace_update_finish} [A] 'function void xml_ereport(PgXmlErrorContext*, int, int, const char*)' {xml_ereport} 14 functions with some indirect sub-type change: [C] 'function List* AddRelationNewConstraints(Relation, List*, List*, bool, bool, bool, const char*)' at heap.c:2259:1 has some indirect sub-type changes: parameter 1 of type 'typedef Relation' has sub-type changes: underlying type 'RelationData*' changed: in pointed to type 'struct RelationData' at rel.h:55:1: type size hasn't changed 1 data member changes (3 filtered): type of 'PgStat_TableStatus* pgstat_info' changed: in pointed to type 'struct PgStat_TableStatus' at pgstat.h:197:1: type size hasn't changed 1 data member changes (1 filtered): type of 'PgStat_TableXactStatus* trans' changed: in pointed to type 'struct PgStat_TableXactStatus' at pgstat.h:210:1: type size hasn't changed 1 data member changes (2 filtered): type of 'PgStat_TableStatus* parent' changed: in pointed to type 'typedef PgStat_TableStatus' at pgstat.h:204:1: underlying type 'struct PgStat_TableStatus' at pgstat.h:197:1 changed: type size hasn't changed 1 data member changes (1 filtered): type of 'Relation relation' changed: underlying type 'RelationData*' changed: in pointed to type 'struct RelationData' at rel.h:55:1: type size hasn't changed 1 data member changes (3 filtered): type of 'FdwRoutine* rd_fdwroutine' changed: in pointed to type 'struct FdwRoutine' at fdwapi.h:204:1: type size hasn't changed 3 data member changes (39 filtered): type of 'AddForeignUpdateTargets_function AddForeignUpdateTargets' changed: underlying type 'void (PlannerInfo*, typedef Index, RangeTblEntry*, typedef Relation)*' changed: in pointed to type 'function type void (PlannerInfo*, typedef Index, RangeTblEntry*, typedef Relation)': parameter 1 of type 'PlannerInfo*' has sub-type changes: in pointed to type 'typedef PlannerInfo' at pathnodes.h:191:1: underlying type 'struct PlannerInfo' at pathnodes.h:195:1 changed: type size hasn't changed 1 data member changes (3 filtered): type of 'PlannerGlobal* glob' changed: in pointed to type 'typedef PlannerGlobal' at pathnodes.h:166:1: underlying type 'struct PlannerGlobal' at pathnodes.h:95:1 changed: type size hasn't changed 1 data member change: type of 'ParamListInfo boundParams' changed: underlying type 'ParamListInfoData*' changed: in pointed to type 'struct ParamListInfoData' at params.h:110:1: type size hasn't changed 1 data member changes (2 filtered): type of 'ParamCompileHook paramCompile' changed: underlying type 'void (typedef ParamListInfo, Param*, ExprState*, Datum*, bool*)*' changed: in pointed to type 'function type void (typedef ParamListInfo, Param*, ExprState*, Datum*, bool*)': parameter 3 of type 'ExprState*' has sub-type changes: in pointed to type 'struct ExprState' at execnodes.h:78:1: type size hasn't changed 1 data member changes (2 filtered): type of 'ExprStateEvalFunc evalfunc' changed: underlying type 'typedef Datum (ExprState*, ExprContext*, bool*)*' changed: in pointed to type 'function type typedef Datum (ExprState*, ExprContext*, bool*)': parameter 2 of type 'ExprContext*' has sub-type changes: in pointed to type 'typedef ExprContext' at execnodes.h:297:1: underlying type 'struct ExprContext' at execnodes.h:251:1 changed: type size hasn't changed 1 data member changes (1 filtered): type of 'EState* ecxt_estate' changed: in pointed to type 'typedef EState' at execnodes.h:730:1: underlying type 'struct EState' at execnodes.h:620:1 changed: type size hasn't changed 1 data member changes (5 filtered): type of 'ResultRelInfo** es_result_relations' changed: in pointed to type 'ResultRelInfo*': in pointed to type 'struct ResultRelInfo' at execnodes.h:450:1: type size changed from 3008 to 3072 (in bits) 1 data member insertion: 'bool ri_needLockTagTuple', at offset 3008 (in bits) at execnodes.h:597:1 1 data member changes (14 filtered): type of 'CopyMultiInsertBuffer* ri_CopyMultiInsertBuffer' changed: in pointed to type 'struct CopyMultiInsertBuffer' at copyfrom.c:75:1: type size hasn't changed 1 data member change: type of 'ResultRelInfo* resultRelInfo' changed: in pointed to type 'struct ResultRelInfo' at execnodes.h:450:1: type size changed from 3008 to 3072 (in bits) 1 data member insertion: 'bool ri_needLockTagTuple', at offset 3008 (in bits) at execnodes.h:597:1 1 data member changes (14 filtered): type of 'ExprState** ri_ConstraintExprs' changed: in pointed to type 'ExprState*': in pointed to type 'typedef ExprState' at execnodes.h:141:1: underlying type 'struct ExprState' at execnodes.h:78:1 changed: type size hasn't changed 1 data member changes (2 filtered): type of 'PlanState* parent' changed: in pointed to type 'typedef PlanState' at execnodes.h:1207:1: underlying type 'struct PlanState' at execnodes.h:1112:1 changed: type size hasn't changed 1 data member changes (7 filtered): type of 'ExprContext* ps_ExprContext' changed: in pointed to type 'typedef ExprContext' at execnodes.h:297:1: underlying type 'struct ExprContext' at execnodes.h:251:1 changed: type size hasn't changed 1 data member changes (1 filtered): type of 'EState* ecxt_estate' changed: in pointed to type 'struct EState' at execnodes.h:623:1: type size hasn't changed 1 data member changes (5 filtered): type of 'EPQState* es_epq_active' changed: in pointed to type 'struct EPQState' at execnodes.h:1254:1: type size hasn't changed 1 data member changes (3 filtered): type of 'ExecAuxRowMark** relsubs_rowmark' changed: in pointed to type 'ExecAuxRowMark*': in pointed to type 'typedef ExecAuxRowMark' at execnodes.h:782:1: underlying type 'struct ExecAuxRowMark' at execnodes.h:773:1 changed: type size hasn't changed 1 data member change: type of 'ExecRowMark* rowmark' changed: in pointed to type 'struct ExecRowMark' at execnodes.h:752:1: type size hasn't changed 1 data member change: type of 'Relation relation' changed: underlying type 'RelationData*' changed: in pointed to type 'struct RelationData' at rel.h:55:1: type size hasn't changed 1 data member changes (3 filtered): type of 'const TableAmRoutine* rd_tableam' changed: in pointed to type 'const TableAmRoutine': in unqualified underlying type 'struct TableAmRoutine' at tableam.h:290:1: type size hasn't changed 1 data member changes (32 filtered): type of 'bool (typedef TableScanDesc, SampleScanState*)* scan_sample_next_block' changed: in pointed to type 'function type bool (typedef TableScanDesc, SampleScanState*)': parameter 2 of type 'SampleScanState*' has sub-type changes: in pointed to type 'struct SampleScanState' at execnodes.h:1588:1: type size hasn't changed 1 data member changes (2 filtered): type of 'TsmRoutine* tsmroutine' changed: in pointed to type 'struct TsmRoutine' at tsmapi.h:56:1: type size hasn't changed 1 data member changes (5 filtered): type of 'BeginSampleScan_function BeginSampleScan' changed: underlying type 'void (SampleScanState*, Datum*, int, typedef uint32)*' changed: in pointed to type 'function type void (SampleScanState*, Datum*, int, typedef uint32)': parameter 1 of type 'SampleScanState*' has sub-type changes: in pointed to type 'typedef SampleScanState' at execnodes.h:1603:1: underlying type 'struct SampleScanState' at execnodes.h:1585:1 changed: type size hasn't changed 1 data member changes (2 filtered): type of 'ExprState* repeatable' changed: in pointed to type 'typedef ExprState' at execnodes.h:141:1: underlying type 'struct ExprState' at execnodes.h:78:1 changed: type size hasn't changed 1 data member changes (2 filtered): type of 'PlanState* parent' changed: in pointed to type 'struct PlanState' at execnodes.h:1115:1: type size hasn't changed 1 data member changes (7 filtered): type of 'ExprContext* ps_ExprContext' changed: in pointed to type 'typedef ExprContext' at execnodes.h:297:1: underlying type 'struct ExprContext' at execnodes.h:251:1 changed: type size hasn't changed 1 data member changes (1 filtered): type of 'EState* ecxt_estate' changed: in pointed to type 'struct EState' at execnodes.h:623:1: type size hasn't changed 1 data member changes (3 filtered): type of 'ResultRelInfo** es_result_relations' changed: in pointed to type 'ResultRelInfo*': in pointed to type 'struct ResultRelInfo' at execnodes.h:450:1: type size changed from 3008 to 3072 (in bits) 1 data member insertion: 'bool ri_needLockTagTuple', at offset 3008 (in bits) at execnodes.h:597:1 no data member changes (13 filtered); type of 'BeginForeignInsert_function BeginForeignInsert' changed: underlying type 'void (ModifyTableState*, ResultRelInfo*)*' changed: in pointed to type 'function type void (ModifyTableState*, ResultRelInfo*)': parameter 1 of type 'ModifyTableState*' has sub-type changes: in pointed to type 'typedef ModifyTableState' at execnodes.h:1420:1: underlying type 'struct ModifyTableState' at execnodes.h:1354:1 changed: type size hasn't changed 1 data member changes (5 filtered): type of 'PartitionTupleRouting* mt_partition_tuple_routing' changed: in pointed to type 'struct PartitionTupleRouting' at execPartition.c:91:1: type size hasn't changed 1 data member changes (3 filtered): type of 'ResultRelInfo** nonleaf_partitions' changed: in pointed to type 'ResultRelInfo*': in pointed to type 'struct ResultRelInfo' at execnodes.h:450:1: type size changed from 3008 to 3072 (in bits) 1 data member insertion: 'bool ri_needLockTagTuple', at offset 3008 (in bits) at execnodes.h:597:1 no data member changes (15 filtered); type of 'BeginDirectModify_function BeginDirectModify' changed: underlying type 'void (ForeignScanState*, int)*' changed: in pointed to type 'function type void (ForeignScanState*, int)': parameter 1 of type 'ForeignScanState*' has sub-type changes: in pointed to type 'typedef ForeignScanState' at execnodes.h:2049:1: underlying type 'struct ForeignScanState' at execnodes.h:2037:1 changed: type size hasn't changed 1 data member changes (3 filtered): type of 'ExprState* fdw_recheck_quals' changed: in pointed to type 'typedef ExprState' at execnodes.h:141:1: underlying type 'struct ExprState' at execnodes.h:78:1 changed: type size hasn't changed 1 data member changes (2 filtered): type of 'PlanState* parent' changed: in pointed to type 'struct PlanState' at execnodes.h:1115:1: type size hasn't changed 1 data member changes (7 filtered): type of 'ExprContext* ps_ExprContext' changed: in pointed to type 'typedef ExprContext' at execnodes.h:297:1: underlying type 'struct ExprContext' at execnodes.h:251:1 changed: type size hasn't changed 1 data member changes (1 filtered): type of 'EState* ecxt_estate' changed: in pointed to type 'struct EState' at execnodes.h:623:1: type size hasn't changed 1 data member changes (5 filtered): type of 'ResultRelInfo** es_result_relations' changed: in pointed to type 'ResultRelInfo*': in pointed to type 'struct ResultRelInfo' at execnodes.h:450:1: type size changed from 3008 to 3072 (in bits) 1 data member insertion: 'bool ri_needLockTagTuple', at offset 3008 (in bits) at execnodes.h:597:1 no data member changes (15 filtered); [C] 'function void AtEOSubXact_PgStat_Relations(PgStat_SubXactStatus*, bool, int)' at pgstat_relation.c:595:1 has some indirect sub-type changes: parameter 1 of type 'PgStat_SubXactStatus*' has sub-type changes: in pointed to type 'struct PgStat_SubXactStatus' at pgstat_internal.h:152:1: type size hasn't changed 1 data member changes (1 filtered): type of 'PgStat_TableXactStatus* first' changed: in pointed to type 'typedef PgStat_TableXactStatus' at pgstat.h:210:1: entity changed from 'typedef PgStat_TableXactStatus' to compatible type 'struct PgStat_TableXactStatus' at pgstat.h:210:1 type size hasn't changed 1 data member changes (2 filtered): type of 'PgStat_TableStatus* parent' changed: in pointed to type 'struct PgStat_TableStatus' at pgstat.h:204:1: entity changed from 'struct PgStat_TableStatus' to compatible type 'typedef PgStat_TableStatus' at pgstat.h:204:1 [C] 'function IndexInfo* BuildDummyIndexInfo(Relation)' at index.h:126:1 has some indirect sub-type changes: return type changed: in pointed to type 'typedef IndexInfo' at execnodes.h:211:1: underlying type 'struct IndexInfo' at execnodes.h:183:1 changed: type size hasn't changed 1 data member change: type of 'ExprState* ii_PredicateState' changed: in pointed to type 'typedef ExprState' at execnodes.h:141:1: underlying type 'struct ExprState' at execnodes.h:78:1 changed: type size hasn't changed 1 data member changes (2 filtered): type of 'PlanState* parent' changed: in pointed to type 'typedef PlanState' at execnodes.h:1207:1: underlying type 'struct PlanState' at execnodes.h:1112:1 changed: type size hasn't changed 1 data member changes (7 filtered): type of 'ExprContext* ps_ExprContext' changed: in pointed to type 'typedef ExprContext' at execnodes.h:297:1: underlying type 'struct ExprContext' at execnodes.h:251:1 changed: type size hasn't changed 1 data member changes (1 filtered): type of 'EState* ecxt_estate' changed: in pointed to type 'struct EState' at execnodes.h:623:1: type size hasn't changed 1 data member changes (5 filtered): type of 'ResultRelInfo** es_result_relations' changed: in pointed to type 'ResultRelInfo*': in pointed to type 'struct ResultRelInfo' at execnodes.h:450:1: type size changed from 3008 to 3072 (in bits) 1 data member insertion: 'bool ri_needLockTagTuple', at offset 3008 (in bits) at execnodes.h:597:1 no data member changes (15 filtered); [C] 'function TupleHashTable BuildTupleHashTable(PlanState*, TupleDesc, int, AttrNumber*, const Oid*, FmgrInfo*, Oid*, long int, Size, MemoryContext, MemoryContext, bool)' at execGrouping.c:254:1 has some indirect sub-type changes: return type changed: underlying type 'TupleHashTableData*' changed: in pointed to type 'struct TupleHashTableData' at execnodes.h:820:1: type size hasn't changed 1 data member changes (2 filtered): type of 'ExprState* cur_eq_func' changed: in pointed to type 'typedef ExprState' at execnodes.h:141:1: underlying type 'struct ExprState' at execnodes.h:78:1 changed: type size hasn't changed 1 data member changes (2 filtered): type of 'PlanState* parent' changed: in pointed to type 'struct PlanState' at execnodes.h:1115:1: type size hasn't changed 1 data member changes (7 filtered): type of 'ExprContext* ps_ExprContext' changed: in pointed to type 'typedef ExprContext' at execnodes.h:297:1: underlying type 'struct ExprContext' at execnodes.h:251:1 changed: type size hasn't changed 1 data member changes (1 filtered): type of 'EState* ecxt_estate' changed: in pointed to type 'typedef EState' at execnodes.h:730:1: underlying type 'struct EState' at execnodes.h:620:1 changed: type size hasn't changed 1 data member changes (3 filtered): type of 'ResultRelInfo** es_result_relations' changed: in pointed to type 'ResultRelInfo*': in pointed to type 'struct ResultRelInfo' at execnodes.h:450:1: type size changed from 3008 to 3072 (in bits) 1 data member insertion: 'bool ri_needLockTagTuple', at offset 3008 (in bits) at execnodes.h:597:1 no data member changes (13 filtered); [C] 'function void CatalogTupleUpdateWithInfo(Relation, ItemPointer, HeapTuple, CatalogIndexState)' at indexing.c:337:1 has some indirect sub-type changes: parameter 4 of type 'typedef CatalogIndexState' has sub-type changes: underlying type 'ResultRelInfo*' changed: in pointed to type 'struct ResultRelInfo' at execnodes.h:450:1: type size changed from 3008 to 3072 (in bits) 1 data member insertion: 'bool ri_needLockTagTuple', at offset 3008 (in bits) at execnodes.h:597:1 no data member changes (15 filtered); [C] 'function ExprContext* CreateExprContext(EState*)' at executor.h:538:1 has some indirect sub-type changes: parameter 1 of type 'EState*' has sub-type changes: in pointed to type 'typedef EState' at execnodes.h:730:1: underlying type 'struct EState' at execnodes.h:620:1 changed: type size hasn't changed 1 data member changes (5 filtered): type of 'ResultRelInfo** es_result_relations' changed: in pointed to type 'ResultRelInfo*': in pointed to type 'struct ResultRelInfo' at execnodes.h:450:1: type size changed from 3008 to 3072 (in bits) 1 data member insertion: 'bool ri_needLockTagTuple', at offset 3008 (in bits) at execnodes.h:597:1 no data member changes (15 filtered); [C] 'function ExprContext* CreateWorkExprContext(EState*)' at execUtils.c:319:1 has some indirect sub-type changes: return type changed: in pointed to type 'typedef ExprContext' at execnodes.h:297:1: underlying type 'struct ExprContext' at execnodes.h:251:1 changed: type size hasn't changed 1 data member changes (1 filtered): type of 'EState* ecxt_estate' changed: in pointed to type 'struct EState' at execnodes.h:623:1: type size hasn't changed 1 data member changes (5 filtered): type of 'ResultRelInfo** es_result_relations' changed: in pointed to type 'ResultRelInfo*': in pointed to type 'typedef ResultRelInfo' at execnodes.h:598:1: underlying type 'struct ResultRelInfo' at execnodes.h:450:1 changed: type size changed from 3008 to 3072 (in bits) 1 data member insertion: 'bool ri_needLockTagTuple', at offset 3008 (in bits) at execnodes.h:597:1 no data member changes (15 filtered); [C] 'function TupleTableSlot* EvalPlanQual(EPQState*, Relation, Index, TupleTableSlot*)' at executor.h:234:1 has some indirect sub-type changes: parameter 1 of type 'EPQState*' has sub-type changes: in pointed to type 'struct EPQState' at execnodes.h:1254:1: type size hasn't changed 1 data member changes (3 filtered): type of 'EState* parentestate' changed: in pointed to type 'struct EState' at execnodes.h:623:1: type size hasn't changed 1 data member changes (5 filtered): type of 'ResultRelInfo** es_result_relations' changed: in pointed to type 'ResultRelInfo*': in pointed to type 'typedef ResultRelInfo' at execnodes.h:598:1: underlying type 'struct ResultRelInfo' at execnodes.h:450:1 changed: type size changed from 3008 to 3072 (in bits) 1 data member insertion: 'bool ri_needLockTagTuple', at offset 3008 (in bits) at execnodes.h:597:1 no data member changes (15 filtered); [C] 'function void EvalPlanQualBegin(EPQState*)' at execMain.c:2759:1 has some indirect sub-type changes: parameter 1 of type 'EPQState*' has sub-type changes: in pointed to type 'struct EPQState' at execnodes.h:1254:1: type size hasn't changed 1 data member changes (3 filtered): type of 'EState* parentestate' changed: in pointed to type 'typedef EState' at execnodes.h:730:1: underlying type 'struct EState' at execnodes.h:620:1 changed: type size hasn't changed 1 data member changes (5 filtered): type of 'ResultRelInfo** es_result_relations' changed: in pointed to type 'ResultRelInfo*': in pointed to type 'struct ResultRelInfo' at execnodes.h:450:1: type size changed from 3008 to 3072 (in bits) 1 data member insertion: 'bool ri_needLockTagTuple', at offset 3008 (in bits) at execnodes.h:597:1 no data member changes (15 filtered); [C] 'function void ExecAsyncAppendResponse(AsyncRequest*)' at nodeAppend.h:28:1 has some indirect sub-type changes: parameter 1 of type 'AsyncRequest*' has sub-type changes: in pointed to type 'typedef AsyncRequest' at execnodes.h:615:1: underlying type 'struct AsyncRequest' at execnodes.h:603:1 changed: type size hasn't changed 1 data member changes (1 filtered): type of 'PlanState* requestee' changed: in pointed to type 'struct PlanState' at execnodes.h:1115:1: type size hasn't changed 1 data member changes (7 filtered): type of 'ExprContext* ps_ExprContext' changed: in pointed to type 'typedef ExprContext' at execnodes.h:297:1: underlying type 'struct ExprContext' at execnodes.h:251:1 changed: type size hasn't changed 1 data member changes (1 filtered): type of 'EState* ecxt_estate' changed: in pointed to type 'struct EState' at execnodes.h:623:1: type size hasn't changed 1 data member changes (3 filtered): type of 'ResultRelInfo** es_result_relations' changed: in pointed to type 'ResultRelInfo*': in pointed to type 'struct ResultRelInfo' at execnodes.h:450:1: type size changed from 3008 to 3072 (in bits) 1 data member insertion: 'bool ri_needLockTagTuple', at offset 3008 (in bits) at execnodes.h:597:1 no data member changes (13 filtered); [C] 'function ExprState* ExecBuildAggTrans(AggState*, AggStatePerPhase, bool, bool, bool)' at execExpr.c:3493:1 has some indirect sub-type changes: return type changed: in pointed to type 'typedef ExprState' at execnodes.h:141:1: underlying type 'struct ExprState' at execnodes.h:78:1 changed: type size hasn't changed 1 data member changes (3 filtered): type of 'PlanState* parent' changed: in pointed to type 'struct PlanState' at execnodes.h:1115:1: type size hasn't changed 1 data member changes (7 filtered): type of 'ExprContext* ps_ExprContext' changed: in pointed to type 'typedef ExprContext' at execnodes.h:297:1: underlying type 'struct ExprContext' at execnodes.h:251:1 changed: type size hasn't changed 1 data member changes (1 filtered): type of 'EState* ecxt_estate' changed: in pointed to type 'typedef EState' at execnodes.h:730:1: underlying type 'struct EState' at execnodes.h:620:1 changed: type size hasn't changed 1 data member changes (5 filtered): type of 'ResultRelInfo** es_result_relations' changed: in pointed to type 'ResultRelInfo*': in pointed to type 'struct ResultRelInfo' at execnodes.h:450:1: type size changed from 3008 to 3072 (in bits) 1 data member insertion: 'bool ri_needLockTagTuple', at offset 3008 (in bits) at execnodes.h:597:1 no data member changes (15 filtered); [C] 'function ExprState* ExecPrepareExpr(Expr*, EState*)' at executor.h:314:1 has some indirect sub-type changes: parameter 2 of type 'EState*' has sub-type changes: in pointed to type 'struct EState' at execnodes.h:623:1: type size hasn't changed 1 data member changes (5 filtered): type of 'ResultRelInfo** es_result_relations' changed: in pointed to type 'ResultRelInfo*': in pointed to type 'struct ResultRelInfo' at execnodes.h:450:1: type size changed from 3008 to 3072 (in bits) 1 data member insertion: 'bool ri_needLockTagTuple', at offset 3008 (in bits) at execnodes.h:597:1 no data member changes (15 filtered); [C] 'function void ExplainPrintJITSummary(ExplainState*, QueryDesc*)' at explain.c:985:1 has some indirect sub-type changes: parameter 2 of type 'QueryDesc*' has sub-type changes: in pointed to type 'typedef QueryDesc' at execdesc.h:56:1: underlying type 'struct QueryDesc' at execdesc.h:33:1 changed: type size hasn't changed 1 data member changes (2 filtered): type of 'EState* estate' changed: in pointed to type 'struct EState' at execnodes.h:623:1: type size hasn't changed 1 data member changes (5 filtered): type of 'ResultRelInfo** es_result_relations' changed: in pointed to type 'ResultRelInfo*': in pointed to type 'struct ResultRelInfo' at execnodes.h:450:1: type size changed from 3008 to 3072 (in bits) 1 data member insertion: 'bool ri_needLockTagTuple', at offset 3008 (in bits) at execnodes.h:597:1 no data member changes (15 filtered); [C] 'function void PortalSetResultFormat(Portal, int, int16*)' at pquery.h:35:1 has some indirect sub-type changes: parameter 1 of type 'typedef Portal' has sub-type changes: underlying type 'PortalData*' changed: in pointed to type 'struct PortalData' at portal.h:115:1: type size hasn't changed 1 data member changes (2 filtered): type of 'QueryDesc* queryDesc' changed: in pointed to type 'typedef QueryDesc' at execdesc.h:56:1: underlying type 'struct QueryDesc' at execdesc.h:33:1 changed: type size hasn't changed 1 data member changes (2 filtered): type of 'EState* estate' changed: in pointed to type 'typedef EState' at execnodes.h:730:1: underlying type 'struct EState' at execnodes.h:620:1 changed: type size hasn't changed 1 data member changes (5 filtered): type of 'ResultRelInfo** es_result_relations' changed: in pointed to type 'ResultRelInfo*': in pointed to type 'struct ResultRelInfo' at execnodes.h:450:1: type size changed from 3008 to 3072 (in bits) 1 data member insertion: 'bool ri_needLockTagTuple', at offset 3008 (in bits) at execnodes.h:597:1 no data member changes (15 filtered); 5 Added variable symbols not referenced by debug info: [A] xmlFree [A] xmlIsBaseCharGroup [A] xmlIsCombiningGroup [A] xmlIsDigitGroup [A] xmlIsExtenderGroup Attachments: [text/plain] abidiff_postgres_17_0_17_1.txt (56.1K, ../../CAOtk82RVyDjtcNJTg1GPFLUAMO3fSWO5HQEenzF6M4jH25p3Bw@mail.gmail.com/3-abidiff_postgres_17_0_17_1.txt) download | inline: Functions changes summary: 0 Removed, 14 Changed (1619 filtered out), 16 Added functions Variables changes summary: 0 Removed, 0 Changed (22 filtered out), 0 Added variables Function symbols changes summary: 0 Removed, 0 Added function symbol not referenced by debug info Variable symbols changes summary: 0 Removed, 5 Added variable symbols not referenced by debug info 16 Added functions: [A] 'function bool GetSessionUserIsSuperuser()' {GetSessionUserIsSuperuser} [A] 'function void SIResetAll()' {SIResetAll} [A] 'function HeapTuple SearchSysCacheLocked1(int, Datum)' {SearchSysCacheLocked1} [A] 'function HeapTuple SearchSysCacheLockedCopy1(int, Datum)' {SearchSysCacheLockedCopy1} [A] 'function void SetAuthenticatedUserId(Oid)' {SetAuthenticatedUserId} [A] 'function bool heap_inplace_lock(Relation, HeapTuple, Buffer, void (void*)*, void*)' {heap_inplace_lock} [A] 'function void heap_inplace_unlock(Relation, HeapTuple, Buffer)' {heap_inplace_unlock} [A] 'function void heap_inplace_update_and_unlock(Relation, HeapTuple, HeapTuple, Buffer)' {heap_inplace_update_and_unlock} [A] 'function void pg_xml_done(PgXmlErrorContext*, bool)' {pg_xml_done} [A] 'function bool pg_xml_error_occurred(PgXmlErrorContext*)' {pg_xml_error_occurred} [A] 'function PgXmlErrorContext* pg_xml_init(PgXmlStrictness)' {pg_xml_init} [A] 'function void pg_xml_init_library()' {pg_xml_init_library} [A] 'function void systable_inplace_update_begin(Relation, Oid, bool, Snapshot, int, const ScanKeyData*, HeapTuple*, void**)' {systable_inplace_update_begin} [A] 'function void systable_inplace_update_cancel(void*)' {systable_inplace_update_cancel} [A] 'function void systable_inplace_update_finish(void*, HeapTuple)' {systable_inplace_update_finish} [A] 'function void xml_ereport(PgXmlErrorContext*, int, int, const char*)' {xml_ereport} 14 functions with some indirect sub-type change: [C] 'function List* AddRelationNewConstraints(Relation, List*, List*, bool, bool, bool, const char*)' at heap.c:2259:1 has some indirect sub-type changes: parameter 1 of type 'typedef Relation' has sub-type changes: underlying type 'RelationData*' changed: in pointed to type 'struct RelationData' at rel.h:55:1: type size hasn't changed 1 data member changes (3 filtered): type of 'PgStat_TableStatus* pgstat_info' changed: in pointed to type 'struct PgStat_TableStatus' at pgstat.h:197:1: type size hasn't changed 1 data member changes (1 filtered): type of 'PgStat_TableXactStatus* trans' changed: in pointed to type 'struct PgStat_TableXactStatus' at pgstat.h:210:1: type size hasn't changed 1 data member changes (2 filtered): type of 'PgStat_TableStatus* parent' changed: in pointed to type 'typedef PgStat_TableStatus' at pgstat.h:204:1: underlying type 'struct PgStat_TableStatus' at pgstat.h:197:1 changed: type size hasn't changed 1 data member changes (1 filtered): type of 'Relation relation' changed: underlying type 'RelationData*' changed: in pointed to type 'struct RelationData' at rel.h:55:1: type size hasn't changed 1 data member changes (3 filtered): type of 'FdwRoutine* rd_fdwroutine' changed: in pointed to type 'struct FdwRoutine' at fdwapi.h:204:1: type size hasn't changed 3 data member changes (39 filtered): type of 'AddForeignUpdateTargets_function AddForeignUpdateTargets' changed: underlying type 'void (PlannerInfo*, typedef Index, RangeTblEntry*, typedef Relation)*' changed: in pointed to type 'function type void (PlannerInfo*, typedef Index, RangeTblEntry*, typedef Relation)': parameter 1 of type 'PlannerInfo*' has sub-type changes: in pointed to type 'typedef PlannerInfo' at pathnodes.h:191:1: underlying type 'struct PlannerInfo' at pathnodes.h:195:1 changed: type size hasn't changed 1 data member changes (3 filtered): type of 'PlannerGlobal* glob' changed: in pointed to type 'typedef PlannerGlobal' at pathnodes.h:166:1: underlying type 'struct PlannerGlobal' at pathnodes.h:95:1 changed: type size hasn't changed 1 data member change: type of 'ParamListInfo boundParams' changed: underlying type 'ParamListInfoData*' changed: in pointed to type 'struct ParamListInfoData' at params.h:110:1: type size hasn't changed 1 data member changes (2 filtered): type of 'ParamCompileHook paramCompile' changed: underlying type 'void (typedef ParamListInfo, Param*, ExprState*, Datum*, bool*)*' changed: in pointed to type 'function type void (typedef ParamListInfo, Param*, ExprState*, Datum*, bool*)': parameter 3 of type 'ExprState*' has sub-type changes: in pointed to type 'struct ExprState' at execnodes.h:78:1: type size hasn't changed 1 data member changes (2 filtered): type of 'ExprStateEvalFunc evalfunc' changed: underlying type 'typedef Datum (ExprState*, ExprContext*, bool*)*' changed: in pointed to type 'function type typedef Datum (ExprState*, ExprContext*, bool*)': parameter 2 of type 'ExprContext*' has sub-type changes: in pointed to type 'typedef ExprContext' at execnodes.h:297:1: underlying type 'struct ExprContext' at execnodes.h:251:1 changed: type size hasn't changed 1 data member changes (1 filtered): type of 'EState* ecxt_estate' changed: in pointed to type 'typedef EState' at execnodes.h:730:1: underlying type 'struct EState' at execnodes.h:620:1 changed: type size hasn't changed 1 data member changes (5 filtered): type of 'ResultRelInfo** es_result_relations' changed: in pointed to type 'ResultRelInfo*': in pointed to type 'struct ResultRelInfo' at execnodes.h:450:1: type size changed from 3008 to 3072 (in bits) 1 data member insertion: 'bool ri_needLockTagTuple', at offset 3008 (in bits) at execnodes.h:597:1 1 data member changes (14 filtered): type of 'CopyMultiInsertBuffer* ri_CopyMultiInsertBuffer' changed: in pointed to type 'struct CopyMultiInsertBuffer' at copyfrom.c:75:1: type size hasn't changed 1 data member change: type of 'ResultRelInfo* resultRelInfo' changed: in pointed to type 'struct ResultRelInfo' at execnodes.h:450:1: type size changed from 3008 to 3072 (in bits) 1 data member insertion: 'bool ri_needLockTagTuple', at offset 3008 (in bits) at execnodes.h:597:1 1 data member changes (14 filtered): type of 'ExprState** ri_ConstraintExprs' changed: in pointed to type 'ExprState*': in pointed to type 'typedef ExprState' at execnodes.h:141:1: underlying type 'struct ExprState' at execnodes.h:78:1 changed: type size hasn't changed 1 data member changes (2 filtered): type of 'PlanState* parent' changed: in pointed to type 'typedef PlanState' at execnodes.h:1207:1: underlying type 'struct PlanState' at execnodes.h:1112:1 changed: type size hasn't changed 1 data member changes (7 filtered): type of 'ExprContext* ps_ExprContext' changed: in pointed to type 'typedef ExprContext' at execnodes.h:297:1: underlying type 'struct ExprContext' at execnodes.h:251:1 changed: type size hasn't changed 1 data member changes (1 filtered): type of 'EState* ecxt_estate' changed: in pointed to type 'struct EState' at execnodes.h:623:1: type size hasn't changed 1 data member changes (5 filtered): type of 'EPQState* es_epq_active' changed: in pointed to type 'struct EPQState' at execnodes.h:1254:1: type size hasn't changed 1 data member changes (3 filtered): type of 'ExecAuxRowMark** relsubs_rowmark' changed: in pointed to type 'ExecAuxRowMark*': in pointed to type 'typedef ExecAuxRowMark' at execnodes.h:782:1: underlying type 'struct ExecAuxRowMark' at execnodes.h:773:1 changed: type size hasn't changed 1 data member change: type of 'ExecRowMark* rowmark' changed: in pointed to type 'struct ExecRowMark' at execnodes.h:752:1: type size hasn't changed 1 data member change: type of 'Relation relation' changed: underlying type 'RelationData*' changed: in pointed to type 'struct RelationData' at rel.h:55:1: type size hasn't changed 1 data member changes (3 filtered): type of 'const TableAmRoutine* rd_tableam' changed: in pointed to type 'const TableAmRoutine': in unqualified underlying type 'struct TableAmRoutine' at tableam.h:290:1: type size hasn't changed 1 data member changes (32 filtered): type of 'bool (typedef TableScanDesc, SampleScanState*)* scan_sample_next_block' changed: in pointed to type 'function type bool (typedef TableScanDesc, SampleScanState*)': parameter 2 of type 'SampleScanState*' has sub-type changes: in pointed to type 'struct SampleScanState' at execnodes.h:1588:1: type size hasn't changed 1 data member changes (2 filtered): type of 'TsmRoutine* tsmroutine' changed: in pointed to type 'struct TsmRoutine' at tsmapi.h:56:1: type size hasn't changed 1 data member changes (5 filtered): type of 'BeginSampleScan_function BeginSampleScan' changed: underlying type 'void (SampleScanState*, Datum*, int, typedef uint32)*' changed: in pointed to type 'function type void (SampleScanState*, Datum*, int, typedef uint32)': parameter 1 of type 'SampleScanState*' has sub-type changes: in pointed to type 'typedef SampleScanState' at execnodes.h:1603:1: underlying type 'struct SampleScanState' at execnodes.h:1585:1 changed: type size hasn't changed 1 data member changes (2 filtered): type of 'ExprState* repeatable' changed: in pointed to type 'typedef ExprState' at execnodes.h:141:1: underlying type 'struct ExprState' at execnodes.h:78:1 changed: type size hasn't changed 1 data member changes (2 filtered): type of 'PlanState* parent' changed: in pointed to type 'struct PlanState' at execnodes.h:1115:1: type size hasn't changed 1 data member changes (7 filtered): type of 'ExprContext* ps_ExprContext' changed: in pointed to type 'typedef ExprContext' at execnodes.h:297:1: underlying type 'struct ExprContext' at execnodes.h:251:1 changed: type size hasn't changed 1 data member changes (1 filtered): type of 'EState* ecxt_estate' changed: in pointed to type 'struct EState' at execnodes.h:623:1: type size hasn't changed 1 data member changes (3 filtered): type of 'ResultRelInfo** es_result_relations' changed: in pointed to type 'ResultRelInfo*': in pointed to type 'struct ResultRelInfo' at execnodes.h:450:1: type size changed from 3008 to 3072 (in bits) 1 data member insertion: 'bool ri_needLockTagTuple', at offset 3008 (in bits) at execnodes.h:597:1 no data member changes (13 filtered); type of 'BeginForeignInsert_function BeginForeignInsert' changed: underlying type 'void (ModifyTableState*, ResultRelInfo*)*' changed: in pointed to type 'function type void (ModifyTableState*, ResultRelInfo*)': parameter 1 of type 'ModifyTableState*' has sub-type changes: in pointed to type 'typedef ModifyTableState' at execnodes.h:1420:1: underlying type 'struct ModifyTableState' at execnodes.h:1354:1 changed: type size hasn't changed 1 data member changes (5 filtered): type of 'PartitionTupleRouting* mt_partition_tuple_routing' changed: in pointed to type 'struct PartitionTupleRouting' at execPartition.c:91:1: type size hasn't changed 1 data member changes (3 filtered): type of 'ResultRelInfo** nonleaf_partitions' changed: in pointed to type 'ResultRelInfo*': in pointed to type 'struct ResultRelInfo' at execnodes.h:450:1: type size changed from 3008 to 3072 (in bits) 1 data member insertion: 'bool ri_needLockTagTuple', at offset 3008 (in bits) at execnodes.h:597:1 no data member changes (15 filtered); type of 'BeginDirectModify_function BeginDirectModify' changed: underlying type 'void (ForeignScanState*, int)*' changed: in pointed to type 'function type void (ForeignScanState*, int)': parameter 1 of type 'ForeignScanState*' has sub-type changes: in pointed to type 'typedef ForeignScanState' at execnodes.h:2049:1: underlying type 'struct ForeignScanState' at execnodes.h:2037:1 changed: type size hasn't changed 1 data member changes (3 filtered): type of 'ExprState* fdw_recheck_quals' changed: in pointed to type 'typedef ExprState' at execnodes.h:141:1: underlying type 'struct ExprState' at execnodes.h:78:1 changed: type size hasn't changed 1 data member changes (2 filtered): type of 'PlanState* parent' changed: in pointed to type 'struct PlanState' at execnodes.h:1115:1: type size hasn't changed 1 data member changes (7 filtered): type of 'ExprContext* ps_ExprContext' changed: in pointed to type 'typedef ExprContext' at execnodes.h:297:1: underlying type 'struct ExprContext' at execnodes.h:251:1 changed: type size hasn't changed 1 data member changes (1 filtered): type of 'EState* ecxt_estate' changed: in pointed to type 'struct EState' at execnodes.h:623:1: type size hasn't changed 1 data member changes (5 filtered): type of 'ResultRelInfo** es_result_relations' changed: in pointed to type 'ResultRelInfo*': in pointed to type 'struct ResultRelInfo' at execnodes.h:450:1: type size changed from 3008 to 3072 (in bits) 1 data member insertion: 'bool ri_needLockTagTuple', at offset 3008 (in bits) at execnodes.h:597:1 no data member changes (15 filtered); [C] 'function void AtEOSubXact_PgStat_Relations(PgStat_SubXactStatus*, bool, int)' at pgstat_relation.c:595:1 has some indirect sub-type changes: parameter 1 of type 'PgStat_SubXactStatus*' has sub-type changes: in pointed to type 'struct PgStat_SubXactStatus' at pgstat_internal.h:152:1: type size hasn't changed 1 data member changes (1 filtered): type of 'PgStat_TableXactStatus* first' changed: in pointed to type 'typedef PgStat_TableXactStatus' at pgstat.h:210:1: entity changed from 'typedef PgStat_TableXactStatus' to compatible type 'struct PgStat_TableXactStatus' at pgstat.h:210:1 type size hasn't changed 1 data member changes (2 filtered): type of 'PgStat_TableStatus* parent' changed: in pointed to type 'struct PgStat_TableStatus' at pgstat.h:204:1: entity changed from 'struct PgStat_TableStatus' to compatible type 'typedef PgStat_TableStatus' at pgstat.h:204:1 [C] 'function IndexInfo* BuildDummyIndexInfo(Relation)' at index.h:126:1 has some indirect sub-type changes: return type changed: in pointed to type 'typedef IndexInfo' at execnodes.h:211:1: underlying type 'struct IndexInfo' at execnodes.h:183:1 changed: type size hasn't changed 1 data member change: type of 'ExprState* ii_PredicateState' changed: in pointed to type 'typedef ExprState' at execnodes.h:141:1: underlying type 'struct ExprState' at execnodes.h:78:1 changed: type size hasn't changed 1 data member changes (2 filtered): type of 'PlanState* parent' changed: in pointed to type 'typedef PlanState' at execnodes.h:1207:1: underlying type 'struct PlanState' at execnodes.h:1112:1 changed: type size hasn't changed 1 data member changes (7 filtered): type of 'ExprContext* ps_ExprContext' changed: in pointed to type 'typedef ExprContext' at execnodes.h:297:1: underlying type 'struct ExprContext' at execnodes.h:251:1 changed: type size hasn't changed 1 data member changes (1 filtered): type of 'EState* ecxt_estate' changed: in pointed to type 'struct EState' at execnodes.h:623:1: type size hasn't changed 1 data member changes (5 filtered): type of 'ResultRelInfo** es_result_relations' changed: in pointed to type 'ResultRelInfo*': in pointed to type 'struct ResultRelInfo' at execnodes.h:450:1: type size changed from 3008 to 3072 (in bits) 1 data member insertion: 'bool ri_needLockTagTuple', at offset 3008 (in bits) at execnodes.h:597:1 no data member changes (15 filtered); [C] 'function TupleHashTable BuildTupleHashTable(PlanState*, TupleDesc, int, AttrNumber*, const Oid*, FmgrInfo*, Oid*, long int, Size, MemoryContext, MemoryContext, bool)' at execGrouping.c:254:1 has some indirect sub-type changes: return type changed: underlying type 'TupleHashTableData*' changed: in pointed to type 'struct TupleHashTableData' at execnodes.h:820:1: type size hasn't changed 1 data member changes (2 filtered): type of 'ExprState* cur_eq_func' changed: in pointed to type 'typedef ExprState' at execnodes.h:141:1: underlying type 'struct ExprState' at execnodes.h:78:1 changed: type size hasn't changed 1 data member changes (2 filtered): type of 'PlanState* parent' changed: in pointed to type 'struct PlanState' at execnodes.h:1115:1: type size hasn't changed 1 data member changes (7 filtered): type of 'ExprContext* ps_ExprContext' changed: in pointed to type 'typedef ExprContext' at execnodes.h:297:1: underlying type 'struct ExprContext' at execnodes.h:251:1 changed: type size hasn't changed 1 data member changes (1 filtered): type of 'EState* ecxt_estate' changed: in pointed to type 'typedef EState' at execnodes.h:730:1: underlying type 'struct EState' at execnodes.h:620:1 changed: type size hasn't changed 1 data member changes (3 filtered): type of 'ResultRelInfo** es_result_relations' changed: in pointed to type 'ResultRelInfo*': in pointed to type 'struct ResultRelInfo' at execnodes.h:450:1: type size changed from 3008 to 3072 (in bits) 1 data member insertion: 'bool ri_needLockTagTuple', at offset 3008 (in bits) at execnodes.h:597:1 no data member changes (13 filtered); [C] 'function void CatalogTupleUpdateWithInfo(Relation, ItemPointer, HeapTuple, CatalogIndexState)' at indexing.c:337:1 has some indirect sub-type changes: parameter 4 of type 'typedef CatalogIndexState' has sub-type changes: underlying type 'ResultRelInfo*' changed: in pointed to type 'struct ResultRelInfo' at execnodes.h:450:1: type size changed from 3008 to 3072 (in bits) 1 data member insertion: 'bool ri_needLockTagTuple', at offset 3008 (in bits) at execnodes.h:597:1 no data member changes (15 filtered); [C] 'function ExprContext* CreateExprContext(EState*)' at executor.h:538:1 has some indirect sub-type changes: parameter 1 of type 'EState*' has sub-type changes: in pointed to type 'typedef EState' at execnodes.h:730:1: underlying type 'struct EState' at execnodes.h:620:1 changed: type size hasn't changed 1 data member changes (5 filtered): type of 'ResultRelInfo** es_result_relations' changed: in pointed to type 'ResultRelInfo*': in pointed to type 'struct ResultRelInfo' at execnodes.h:450:1: type size changed from 3008 to 3072 (in bits) 1 data member insertion: 'bool ri_needLockTagTuple', at offset 3008 (in bits) at execnodes.h:597:1 no data member changes (15 filtered); [C] 'function ExprContext* CreateWorkExprContext(EState*)' at execUtils.c:319:1 has some indirect sub-type changes: return type changed: in pointed to type 'typedef ExprContext' at execnodes.h:297:1: underlying type 'struct ExprContext' at execnodes.h:251:1 changed: type size hasn't changed 1 data member changes (1 filtered): type of 'EState* ecxt_estate' changed: in pointed to type 'struct EState' at execnodes.h:623:1: type size hasn't changed 1 data member changes (5 filtered): type of 'ResultRelInfo** es_result_relations' changed: in pointed to type 'ResultRelInfo*': in pointed to type 'typedef ResultRelInfo' at execnodes.h:598:1: underlying type 'struct ResultRelInfo' at execnodes.h:450:1 changed: type size changed from 3008 to 3072 (in bits) 1 data member insertion: 'bool ri_needLockTagTuple', at offset 3008 (in bits) at execnodes.h:597:1 no data member changes (15 filtered); [C] 'function TupleTableSlot* EvalPlanQual(EPQState*, Relation, Index, TupleTableSlot*)' at executor.h:234:1 has some indirect sub-type changes: parameter 1 of type 'EPQState*' has sub-type changes: in pointed to type 'struct EPQState' at execnodes.h:1254:1: type size hasn't changed 1 data member changes (3 filtered): type of 'EState* parentestate' changed: in pointed to type 'struct EState' at execnodes.h:623:1: type size hasn't changed 1 data member changes (5 filtered): type of 'ResultRelInfo** es_result_relations' changed: in pointed to type 'ResultRelInfo*': in pointed to type 'typedef ResultRelInfo' at execnodes.h:598:1: underlying type 'struct ResultRelInfo' at execnodes.h:450:1 changed: type size changed from 3008 to 3072 (in bits) 1 data member insertion: 'bool ri_needLockTagTuple', at offset 3008 (in bits) at execnodes.h:597:1 no data member changes (15 filtered); [C] 'function void EvalPlanQualBegin(EPQState*)' at execMain.c:2759:1 has some indirect sub-type changes: parameter 1 of type 'EPQState*' has sub-type changes: in pointed to type 'struct EPQState' at execnodes.h:1254:1: type size hasn't changed 1 data member changes (3 filtered): type of 'EState* parentestate' changed: in pointed to type 'typedef EState' at execnodes.h:730:1: underlying type 'struct EState' at execnodes.h:620:1 changed: type size hasn't changed 1 data member changes (5 filtered): type of 'ResultRelInfo** es_result_relations' changed: in pointed to type 'ResultRelInfo*': in pointed to type 'struct ResultRelInfo' at execnodes.h:450:1: type size changed from 3008 to 3072 (in bits) 1 data member insertion: 'bool ri_needLockTagTuple', at offset 3008 (in bits) at execnodes.h:597:1 no data member changes (15 filtered); [C] 'function void ExecAsyncAppendResponse(AsyncRequest*)' at nodeAppend.h:28:1 has some indirect sub-type changes: parameter 1 of type 'AsyncRequest*' has sub-type changes: in pointed to type 'typedef AsyncRequest' at execnodes.h:615:1: underlying type 'struct AsyncRequest' at execnodes.h:603:1 changed: type size hasn't changed 1 data member changes (1 filtered): type of 'PlanState* requestee' changed: in pointed to type 'struct PlanState' at execnodes.h:1115:1: type size hasn't changed 1 data member changes (7 filtered): type of 'ExprContext* ps_ExprContext' changed: in pointed to type 'typedef ExprContext' at execnodes.h:297:1: underlying type 'struct ExprContext' at execnodes.h:251:1 changed: type size hasn't changed 1 data member changes (1 filtered): type of 'EState* ecxt_estate' changed: in pointed to type 'struct EState' at execnodes.h:623:1: type size hasn't changed 1 data member changes (3 filtered): type of 'ResultRelInfo** es_result_relations' changed: in pointed to type 'ResultRelInfo*': in pointed to type 'struct ResultRelInfo' at execnodes.h:450:1: type size changed from 3008 to 3072 (in bits) 1 data member insertion: 'bool ri_needLockTagTuple', at offset 3008 (in bits) at execnodes.h:597:1 no data member changes (13 filtered); [C] 'function ExprState* ExecBuildAggTrans(AggState*, AggStatePerPhase, bool, bool, bool)' at execExpr.c:3493:1 has some indirect sub-type changes: return type changed: in pointed to type 'typedef ExprState' at execnodes.h:141:1: underlying type 'struct ExprState' at execnodes.h:78:1 changed: type size hasn't changed 1 data member changes (3 filtered): type of 'PlanState* parent' changed: in pointed to type 'struct PlanState' at execnodes.h:1115:1: type size hasn't changed 1 data member changes (7 filtered): type of 'ExprContext* ps_ExprContext' changed: in pointed to type 'typedef ExprContext' at execnodes.h:297:1: underlying type 'struct ExprContext' at execnodes.h:251:1 changed: type size hasn't changed 1 data member changes (1 filtered): type of 'EState* ecxt_estate' changed: in pointed to type 'typedef EState' at execnodes.h:730:1: underlying type 'struct EState' at execnodes.h:620:1 changed: type size hasn't changed 1 data member changes (5 filtered): type of 'ResultRelInfo** es_result_relations' changed: in pointed to type 'ResultRelInfo*': in pointed to type 'struct ResultRelInfo' at execnodes.h:450:1: type size changed from 3008 to 3072 (in bits) 1 data member insertion: 'bool ri_needLockTagTuple', at offset 3008 (in bits) at execnodes.h:597:1 no data member changes (15 filtered); [C] 'function ExprState* ExecPrepareExpr(Expr*, EState*)' at executor.h:314:1 has some indirect sub-type changes: parameter 2 of type 'EState*' has sub-type changes: in pointed to type 'struct EState' at execnodes.h:623:1: type size hasn't changed 1 data member changes (5 filtered): type of 'ResultRelInfo** es_result_relations' changed: in pointed to type 'ResultRelInfo*': in pointed to type 'struct ResultRelInfo' at execnodes.h:450:1: type size changed from 3008 to 3072 (in bits) 1 data member insertion: 'bool ri_needLockTagTuple', at offset 3008 (in bits) at execnodes.h:597:1 no data member changes (15 filtered); [C] 'function void ExplainPrintJITSummary(ExplainState*, QueryDesc*)' at explain.c:985:1 has some indirect sub-type changes: parameter 2 of type 'QueryDesc*' has sub-type changes: in pointed to type 'typedef QueryDesc' at execdesc.h:56:1: underlying type 'struct QueryDesc' at execdesc.h:33:1 changed: type size hasn't changed 1 data member changes (2 filtered): type of 'EState* estate' changed: in pointed to type 'struct EState' at execnodes.h:623:1: type size hasn't changed 1 data member changes (5 filtered): type of 'ResultRelInfo** es_result_relations' changed: in pointed to type 'ResultRelInfo*': in pointed to type 'struct ResultRelInfo' at execnodes.h:450:1: type size changed from 3008 to 3072 (in bits) 1 data member insertion: 'bool ri_needLockTagTuple', at offset 3008 (in bits) at execnodes.h:597:1 no data member changes (15 filtered); [C] 'function void PortalSetResultFormat(Portal, int, int16*)' at pquery.h:35:1 has some indirect sub-type changes: parameter 1 of type 'typedef Portal' has sub-type changes: underlying type 'PortalData*' changed: in pointed to type 'struct PortalData' at portal.h:115:1: type size hasn't changed 1 data member changes (2 filtered): type of 'QueryDesc* queryDesc' changed: in pointed to type 'typedef QueryDesc' at execdesc.h:56:1: underlying type 'struct QueryDesc' at execdesc.h:33:1 changed: type size hasn't changed 1 data member changes (2 filtered): type of 'EState* estate' changed: in pointed to type 'typedef EState' at execnodes.h:730:1: underlying type 'struct EState' at execnodes.h:620:1 changed: type size hasn't changed 1 data member changes (5 filtered): type of 'ResultRelInfo** es_result_relations' changed: in pointed to type 'ResultRelInfo*': in pointed to type 'struct ResultRelInfo' at execnodes.h:450:1: type size changed from 3008 to 3072 (in bits) 1 data member insertion: 'bool ri_needLockTagTuple', at offset 3008 (in bits) at execnodes.h:597:1 no data member changes (15 filtered); 5 Added variable symbols not referenced by debug info: [A] xmlFree [A] xmlIsBaseCharGroup [A] xmlIsCombiningGroup [A] xmlIsDigitGroup [A] xmlIsExtenderGroup [text/html] abicc_17_0_17_1.html (79.3K, ../../CAOtk82RVyDjtcNJTg1GPFLUAMO3fSWO5HQEenzF6M4jH25p3Bw@mail.gmail.com/4-abicc_17_0_17_1.html) download ^ permalink raw reply [nested|flat] 12+ messages in thread
* Re: Development of ABI Compliance Checker for official PostgreSQL Repo @ 2025-05-21 13:39 David E. Wheeler <[email protected]> parent: Mankirat Singh <[email protected]> 1 sibling, 1 reply; 12+ messages in thread From: David E. Wheeler @ 2025-05-21 13:39 UTC (permalink / raw) To: Mankirat Singh <[email protected]>; +Cc: [email protected]; [email protected]; [email protected] On May 21, 2025, at 08:52, Mankirat Singh <[email protected]> wrote: > > I have attached below the compliance reports for that version. I had not included it in the blog earlier, as it was complicated and some readers might not understand. Certainly true for the plain text output, but this bit of the abicc report seems clear enough: Great to see it caught that issue. > For example, in version 17.1 instability struct ResultRelInfo got changed with a new data member, in execnodes.h file as per this blog[1], but the abidiff report gives "14 functions with some indirect sub-type change" and all those 14 were affected due to the same cause, i.e. ResultRelInfo struct - thus making a need to parse the output in a better format, I believe. Presumably, then, you could write a tool to parse it and produce conclusions similar to those from the abicc report, yes? Best, David Attachments: [image/png] PastedGraphic-1.png (135.4K, ../../[email protected]/2-PastedGraphic-1.png) download | view image [application/pgp-signature] signature.asc (833B, ../../[email protected]/4-signature.asc) download ^ permalink raw reply [nested|flat] 12+ messages in thread
* Re: Development of ABI Compliance Checker for official PostgreSQL Repo @ 2025-05-21 13:53 Mankirat Singh <[email protected]> parent: David E. Wheeler <[email protected]> 0 siblings, 1 reply; 12+ messages in thread From: Mankirat Singh @ 2025-05-21 13:53 UTC (permalink / raw) To: David E. Wheeler <[email protected]>; +Cc: [email protected]; [email protected] On Wed, 21 May, 2025, 7:09 pm David E. Wheeler, <[email protected]> wrote: > Presumably, then, you could write a tool to parse it and produce > conclusions similar to those from the abicc report, yes? > For sure, I will! Would it be good idea if I write an in general tool for this purpose and then use it for build farm extension as other tools in the open source community might also need the same? > ^ permalink raw reply [nested|flat] 12+ messages in thread
* Re: Development of ABI Compliance Checker for official PostgreSQL Repo @ 2025-05-21 14:31 David E. Wheeler <[email protected]> parent: Mankirat Singh <[email protected]> 0 siblings, 0 replies; 12+ messages in thread From: David E. Wheeler @ 2025-05-21 14:31 UTC (permalink / raw) To: Mankirat Singh <[email protected]>; +Cc: [email protected]; [email protected] On May 21, 2025, at 09:53, Mankirat Singh <[email protected]> wrote: > Would it be good idea if I write an in general tool for this purpose and then use it for build farm extension as other tools in the open source community might also need the same? I certainly always appreciate that approach, yes. Best, David Attachments: [application/pgp-signature] signature.asc (833B, ../../[email protected]/2-signature.asc) download ^ permalink raw reply [nested|flat] 12+ messages in thread
* Re: Development of ABI Compliance Checker for official PostgreSQL Repo @ 2025-05-21 14:51 Peter Eisentraut <[email protected]> parent: Mankirat Singh <[email protected]> 1 sibling, 1 reply; 12+ messages in thread From: Peter Eisentraut @ 2025-05-21 14:51 UTC (permalink / raw) To: Mankirat Singh <[email protected]>; David E. Wheeler <[email protected]>; +Cc: [email protected]; [email protected] On 21.05.25 14:52, Mankirat Singh wrote: > On Wed, 21 May 2025 at 00:27, David E. Wheeler <[email protected] > <mailto:[email protected]>> wrote: > > Interesting point, though it looks like maybe the output doesn’t > work that way? In his second post, Mankirat linked to the output > from abidiff[1] and abicc[2] comparing 17.2 to 17.3. The latter is > HTML, but abidiff’s plan is pretty straightforward text that reports > a bunch of changes. I imagine it’ll need some massaging to determine > which are proper ABI breaks. > > Mankirat, did you try it with 17.0 to 17.1? That would be > interesting, as there was an ABI break in 17.1[3]. > > I have attached below the compliance reports for that version. I had not > included it in the blog earlier, as it was complicated and some readers > might not understand. > > But as per my understanding, the outputs given by abidiff are way too > detailed as compared to html report output by abi-compliance-checker for > the same PostgreSQL version, though it backfires abidiff's usefulness > since it lists all the symbols which got affected due to a change > instead of directly mentioning the root cause. > For example, in version 17.1 instability struct ResultRelInfo got > changed with a new data member, in execnodes.h file as per this blog[1], > but the abidiff report gives "14 functions with some indirect sub-type > change" and all those 14 were affected due to the same cause, i.e. > ResultRelInfo struct - thus making a need to parse the output in a > better format, I believe. First, you should use abidiff --no-added-syms, to remove all the output about added symbols. And then you should create a suppression file so that situations like the above can be checked and added to an approved list. I think it is essential for this project that the output is empty if there are no problems ("no news is good news"). No one will want to dig through the output if it produces warnings about harmless things. ^ permalink raw reply [nested|flat] 12+ messages in thread
* Re: Development of ABI Compliance Checker for official PostgreSQL Repo @ 2025-05-21 18:45 Mankirat Singh <[email protected]> parent: Peter Eisentraut <[email protected]> 0 siblings, 0 replies; 12+ messages in thread From: Mankirat Singh @ 2025-05-21 18:45 UTC (permalink / raw) To: Peter Eisentraut <[email protected]>; +Cc: [email protected]; David E. Wheeler <[email protected]>; [email protected] On Wed, 21 May, 2025, 8:22 pm Peter Eisentraut, <[email protected]> wrote: > And then you should create a suppression file so that situations like > the above can be checked and added to an approved list. > Oh, I didn't knew much about suppression file in libabigail before, just read it's documentation in detail. Will surely look into it specifically for postgres use case and update on it asap. Thanks for the direction. I think it is essential for this project that the output is empty if > there are no problems ("no news is good news"). No one will want to dig > through the output if it produces warnings about harmless things. > True that :) Regards, Mankirat > ^ permalink raw reply [nested|flat] 12+ messages in thread
end of thread, other threads:[~2025-05-21 18:45 UTC | newest] Thread overview: 12+ messages (download: mbox mbox.gz follow: Atom feed) -- links below jump to the message on this page -- 2025-05-16 06:42 Development of ABI Compliance Checker for official PostgreSQL Repo Mankirat Singh <[email protected]> 2025-05-16 16:06 ` Daniel Gustafsson <[email protected]> 2025-05-16 19:15 ` Akshat Jaimini <[email protected]> 2025-05-18 18:29 ` David E. Wheeler <[email protected]> 2025-05-19 14:17 ` Peter Eisentraut <[email protected]> 2025-05-20 18:57 ` David E. Wheeler <[email protected]> 2025-05-21 12:52 ` Mankirat Singh <[email protected]> 2025-05-21 13:39 ` David E. Wheeler <[email protected]> 2025-05-21 13:53 ` Mankirat Singh <[email protected]> 2025-05-21 14:31 ` David E. Wheeler <[email protected]> 2025-05-21 14:51 ` Peter Eisentraut <[email protected]> 2025-05-21 18:45 ` Mankirat Singh <[email protected]>
This inbox is served by agora; see mirroring instructions for how to clone and mirror all data and code used for this inbox