Import from AlmaLinux stable repository
This commit is contained in:
		
							parent
							
								
									16edd0e9ba
								
							
						
					
					
						commit
						1ea26c05af
					
				
							
								
								
									
										2
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @ -1 +1 @@ | |||||||
| SOURCES/libabigail-2.2.tar.xz | SOURCES/libabigail-2.4.tar.xz | ||||||
|  | |||||||
| @ -1 +1 @@ | |||||||
| ddc2ce1e3ab0670e743ce97530d69918600ff2f0 SOURCES/libabigail-2.2.tar.xz | f73cc6c9bb815561dca6391dee5f32add8d085d0 SOURCES/libabigail-2.4.tar.xz | ||||||
|  | |||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @ -0,0 +1,708 @@ | |||||||
|  | From 9923fb345b7652b5d4beb5230ee3ea11199fe4f8 Mon Sep 17 00:00:00 2001 | ||||||
|  | From: Dodji Seketeli <dodji@redhat.com> | ||||||
|  | Date: Fri, 3 Nov 2023 17:47:57 -0700 | ||||||
|  | Subject: [PATCH 2/2] suppression: Add | ||||||
|  |  "has_strict_flexible_array_data_member_conversion" property | ||||||
|  | 
 | ||||||
|  | In the past, it was common to have a "fake flex array" at the end of a | ||||||
|  | structure. Like this: | ||||||
|  | 
 | ||||||
|  | Nowadays, with improved compiler support, it's more common to use a real | ||||||
|  | flex array. As this is a common change which changes ABI representation | ||||||
|  | in a compatible way, we should have a suppression for it. | ||||||
|  | 
 | ||||||
|  | For example, if you have a change like this: | ||||||
|  | 
 | ||||||
|  | struct foo | ||||||
|  | { | ||||||
|  |   int x; | ||||||
|  |   int flex[1]; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | ... | ||||||
|  | 
 | ||||||
|  | struct foo | ||||||
|  | { | ||||||
|  |   int x; | ||||||
|  |   int flex[]; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | abidiff reports: | ||||||
|  | 
 | ||||||
|  |   [C] 'struct foo' changed: | ||||||
|  |     type size changed from 64 to 32 (in bits) | ||||||
|  |     1 data member change: | ||||||
|  |       type of 'int flex[1]' changed: | ||||||
|  |         type name changed from 'int[1]' to 'int[]' | ||||||
|  |         array type size changed from 32 to 'unknown' | ||||||
|  |         array type subrange 1 changed length from 1 to 'unknown' | ||||||
|  | 
 | ||||||
|  | With a new has_strict_flexible_array_data_member_conversion property, | ||||||
|  | users can specify a suppression which stops abidiff from emitting | ||||||
|  | this diff for any "fake" flex arrays being converted to real ones: | ||||||
|  | 
 | ||||||
|  | [suppress_type] | ||||||
|  |   type_kind = struct | ||||||
|  |   has_size_change = true | ||||||
|  |   has_strict_flexible_array_data_member_conversion = true | ||||||
|  | 
 | ||||||
|  | 	* include/abg-comp-filter.h (has_strict_fam_conversion): Declare | ||||||
|  | 	new functions. | ||||||
|  | 	* include/abg-fwd.h | ||||||
|  | 	(ir::has_fake_flexible_array_data_member): Declare new accessor | ||||||
|  | 	functions. | ||||||
|  | 	* include/abg-suppression.h | ||||||
|  | 	(type_suppression::{,set_}has_strict_fam_conversion): Declare new | ||||||
|  | 	accessor functions. | ||||||
|  | 	* src/abg-comp-filter.cc (has_strict_fam_conversion): Define new | ||||||
|  | 	functions. | ||||||
|  | 	* src/abg-ir.cc | ||||||
|  | 	(ir::has_fake_flexible_array_data_member): Define new accessor | ||||||
|  | 	functions. | ||||||
|  | 	* src/abg-suppression-priv.h | ||||||
|  | 	(type_suppression::priv::has_strict_fam_conv_): Define new | ||||||
|  | 	data member. | ||||||
|  | 	* src/abg-suppression.cc | ||||||
|  | 	(type_suppression::{,set_}has_strict_fam_conversion): Define new | ||||||
|  | 	accessor functions. | ||||||
|  | 	(type_suppression::suppresses_diff): For a type suppression to | ||||||
|  | 	match a fake flex array conversion, either the size of the type | ||||||
|  | 	hasn't change or has_size_change must be true and then the type | ||||||
|  | 	must change from a fake flex array to a real flex array. | ||||||
|  | 	(read_type_suppression): Parse the new | ||||||
|  | 	'has_strict_flexible_array_data_member_conversion' property to | ||||||
|  | 	set the type_suppression::set_has_strict_fam_conversion property. | ||||||
|  | 	* doc/manuals/libabigail-concepts.rst: Add an entry for the new | ||||||
|  | 	'has_strict_flexible_array_data_member_conversion' property. | ||||||
|  | 	* tests/data/test-diff-suppr/test-has-strict-flexible-array-data-member-conversion-{1,2}.suppr: | ||||||
|  | 	Add new test suppression files. | ||||||
|  | 	* tests/data/test-diff-suppr/test-has-strict-flexible-array-data-member-conversion-report-{1,2}.txt: | ||||||
|  | 	Add new test reference output files. | ||||||
|  | 	* tests/data/test-diff-suppr/test-has-strict-flexible-array-data-member-conversion-v{0,1}.c: | ||||||
|  | 	Add source code for new binary test input files. | ||||||
|  | 	* tests/data/test-diff-suppr/test-has-strict-flexible-array-data-member-conversion-v{0,1}.o: | ||||||
|  | 	Add new binary test input files. | ||||||
|  | 	* tests/data/Makefile.am: Add the new test files to the source | ||||||
|  | 	distribution. | ||||||
|  | 	* tests/test-diff-suppr.cc (in_out_specs): Add the new test input | ||||||
|  | 	files to this test harness. | ||||||
|  | 
 | ||||||
|  | Signed-off-by: Dodji Seketeli <dodji@redhat.com> | ||||||
|  | Signed-off-by: John Moon <quic_johmoo@quicinc.com> | ||||||
|  | ---
 | ||||||
|  |  doc/manuals/libabigail-concepts.rst           |  26 +++++- | ||||||
|  |  include/abg-comp-filter.h                     |   7 ++ | ||||||
|  |  include/abg-fwd.h                             |   9 ++ | ||||||
|  |  include/abg-suppression.h                     |   6 ++ | ||||||
|  |  src/abg-comp-filter.cc                        |  49 +++++++++++ | ||||||
|  |  src/abg-ir.cc                                 |  83 +++++++++++++++++- | ||||||
|  |  src/abg-suppression-priv.h                    |   6 +- | ||||||
|  |  src/abg-suppression.cc                        |  52 +++++++++-- | ||||||
|  |  tests/data/Makefile.am                        |   8 ++ | ||||||
|  |  ...xible-array-data-member-conversion-1.suppr |   4 + | ||||||
|  |  ...xible-array-data-member-conversion-2.suppr |   3 + | ||||||
|  |  ...-array-data-member-conversion-report-1.txt |   4 + | ||||||
|  |  ...-array-data-member-conversion-report-2.txt |  14 +++ | ||||||
|  |  ...flexible-array-data-member-conversion-v0.c |  11 +++ | ||||||
|  |  ...flexible-array-data-member-conversion-v0.o | Bin 0 -> 2440 bytes | ||||||
|  |  ...flexible-array-data-member-conversion-v1.c |  11 +++ | ||||||
|  |  ...flexible-array-data-member-conversion-v1.o | Bin 0 -> 2432 bytes | ||||||
|  |  tests/test-diff-suppr.cc                      |  20 +++++ | ||||||
|  |  18 files changed, 303 insertions(+), 10 deletions(-) | ||||||
|  |  create mode 100644 tests/data/test-diff-suppr/test-has-strict-flexible-array-data-member-conversion-1.suppr | ||||||
|  |  create mode 100644 tests/data/test-diff-suppr/test-has-strict-flexible-array-data-member-conversion-2.suppr | ||||||
|  |  create mode 100644 tests/data/test-diff-suppr/test-has-strict-flexible-array-data-member-conversion-report-1.txt | ||||||
|  |  create mode 100644 tests/data/test-diff-suppr/test-has-strict-flexible-array-data-member-conversion-report-2.txt | ||||||
|  |  create mode 100644 tests/data/test-diff-suppr/test-has-strict-flexible-array-data-member-conversion-v0.c | ||||||
|  |  create mode 100644 tests/data/test-diff-suppr/test-has-strict-flexible-array-data-member-conversion-v0.o | ||||||
|  |  create mode 100644 tests/data/test-diff-suppr/test-has-strict-flexible-array-data-member-conversion-v1.c | ||||||
|  |  create mode 100644 tests/data/test-diff-suppr/test-has-strict-flexible-array-data-member-conversion-v1.o | ||||||
|  | 
 | ||||||
|  | diff --git a/doc/manuals/libabigail-concepts.rst b/doc/manuals/libabigail-concepts.rst
 | ||||||
|  | index 28e71684..7b73aaa8 100644
 | ||||||
|  | --- a/doc/manuals/libabigail-concepts.rst
 | ||||||
|  | +++ b/doc/manuals/libabigail-concepts.rst
 | ||||||
|  | @@ -619,9 +619,28 @@ names start with the string "private_data_member".
 | ||||||
|  |  	  {72, end} | ||||||
|  |       } | ||||||
|  |   | ||||||
|  | +.. _suppr_has_strict_flexible_array_data_member_conversion_label:
 | ||||||
|  |   | ||||||
|  |   | ||||||
|  | - .. _suppr_has_size_change_property_label:
 | ||||||
|  | +* ``has_strict_flexible_array_data_member_conversion``
 | ||||||
|  | +
 | ||||||
|  | + Usage:
 | ||||||
|  | +
 | ||||||
|  | +   ``has_strict_flexible_array_data_member_conversion`` ``=`` yes | no
 | ||||||
|  | +
 | ||||||
|  | + Suppresses change reports involving a type which has a "fake"
 | ||||||
|  | + flexible array member at the end of the struct which is converted
 | ||||||
|  | + to a real flexible array member. This would be a member like
 | ||||||
|  | + ``data[1]`` being converted to ``data[]``.
 | ||||||
|  | +
 | ||||||
|  | + Please note that if the size of the type changed, then the type
 | ||||||
|  | + change will *NOT* be suppressed by the evaluation of this property,
 | ||||||
|  | + unless the
 | ||||||
|  | + :ref:`has_size_change<suppr_has_size_change_property_label>` property
 | ||||||
|  | + is present and set to ``yes``.
 | ||||||
|  | +
 | ||||||
|  | +.. _suppr_has_size_change_property_label:
 | ||||||
|  | +
 | ||||||
|  |   | ||||||
|  |  * ``has_size_change`` | ||||||
|  |   | ||||||
|  | @@ -631,9 +650,10 @@ names start with the string "private_data_member".
 | ||||||
|  |   | ||||||
|  |   | ||||||
|  |  This property is to be used in conjunction with the properties | ||||||
|  | -:ref:`has_data_member_inserted_between<suppr_has_data_member_inserted_between_label>`
 | ||||||
|  | +:ref:`has_data_member_inserted_between<suppr_has_data_member_inserted_between_label>`,
 | ||||||
|  | +:ref:`has_data_members_inserted_between<suppr_has_data_members_inserted_between_label>`,
 | ||||||
|  |  and | ||||||
|  | -:ref:`has_data_members_inserted_between<suppr_has_data_members_inserted_between_label>`.
 | ||||||
|  | +:ref:`has_strict_flexible_array_data_member_conversion<suppr_has_strict_flexible_array_data_member_conversion_label>`
 | ||||||
|  |  Those properties will not match a type change if the size of the type | ||||||
|  |  changes, unless the ``has_size_changes`` property is set to ``yes``. | ||||||
|  |   | ||||||
|  | diff --git a/include/abg-comp-filter.h b/include/abg-comp-filter.h
 | ||||||
|  | index cd12b314..8d11fdd2 100644
 | ||||||
|  | --- a/include/abg-comp-filter.h
 | ||||||
|  | +++ b/include/abg-comp-filter.h
 | ||||||
|  | @@ -98,6 +98,13 @@ bool
 | ||||||
|  |  is_var_1_dim_unknown_size_array_change(const var_decl_sptr& var1, | ||||||
|  |  				       const var_decl_sptr& var2); | ||||||
|  |   | ||||||
|  | +bool
 | ||||||
|  | +has_strict_fam_conversion(const class_decl_sptr& first,
 | ||||||
|  | +			  const class_decl_sptr& second);
 | ||||||
|  | +
 | ||||||
|  | +bool
 | ||||||
|  | +has_strict_fam_conversion(const diff *d);
 | ||||||
|  | +
 | ||||||
|  |  struct filter_base; | ||||||
|  |  /// Convenience typedef for a shared pointer to filter_base | ||||||
|  |  typedef shared_ptr<filter_base> filter_base_sptr; | ||||||
|  | diff --git a/include/abg-fwd.h b/include/abg-fwd.h
 | ||||||
|  | index 7d6637b9..de5b72b0 100644
 | ||||||
|  | --- a/include/abg-fwd.h
 | ||||||
|  | +++ b/include/abg-fwd.h
 | ||||||
|  | @@ -490,6 +490,15 @@ has_flexible_array_data_member(const class_decl*);
 | ||||||
|  |  var_decl_sptr | ||||||
|  |  has_flexible_array_data_member(const class_decl_sptr&); | ||||||
|  |   | ||||||
|  | +var_decl_sptr
 | ||||||
|  | +has_fake_flexible_array_data_member(const class_decl&);
 | ||||||
|  | +
 | ||||||
|  | +var_decl_sptr
 | ||||||
|  | +has_fake_flexible_array_data_member(const class_decl*);
 | ||||||
|  | +
 | ||||||
|  | +var_decl_sptr
 | ||||||
|  | +has_fake_flexible_array_data_member(const class_decl_sptr&);
 | ||||||
|  | +
 | ||||||
|  |  bool | ||||||
|  |  is_declaration_only_class_or_union_type(const type_base *t, | ||||||
|  |  					bool look_through_decl_only = false); | ||||||
|  | diff --git a/include/abg-suppression.h b/include/abg-suppression.h
 | ||||||
|  | index 996600bb..dd0870bc 100644
 | ||||||
|  | --- a/include/abg-suppression.h
 | ||||||
|  | +++ b/include/abg-suppression.h
 | ||||||
|  | @@ -336,6 +336,12 @@ public:
 | ||||||
|  |    void | ||||||
|  |    set_changed_enumerators_regexp(const vector<regex::regex_t_sptr>&); | ||||||
|  |   | ||||||
|  | +  bool
 | ||||||
|  | +  has_strict_fam_conversion () const;
 | ||||||
|  | +
 | ||||||
|  | +  void
 | ||||||
|  | +  set_has_strict_fam_conversion(bool);
 | ||||||
|  | +
 | ||||||
|  |    virtual bool | ||||||
|  |    suppresses_diff(const diff* diff) const; | ||||||
|  |   | ||||||
|  | diff --git a/src/abg-comp-filter.cc b/src/abg-comp-filter.cc
 | ||||||
|  | index e02e9430..82a819d6 100644
 | ||||||
|  | --- a/src/abg-comp-filter.cc
 | ||||||
|  | +++ b/src/abg-comp-filter.cc
 | ||||||
|  | @@ -712,6 +712,55 @@ is_var_1_dim_unknown_size_array_change(const diff* diff)
 | ||||||
|  |    return is_var_1_dim_unknown_size_array_change(f, s); | ||||||
|  |  } | ||||||
|  |   | ||||||
|  | +/// Test if a class with a fake flexible data member got changed into
 | ||||||
|  | +/// a class with a real fexible data member.
 | ||||||
|  | +///
 | ||||||
|  | +/// A fake flexible array data member is a data member that is the
 | ||||||
|  | +/// last of the class/struct which type is an array of one element.
 | ||||||
|  | +/// This was used before C99 standardized flexible array data members.
 | ||||||
|  | +///
 | ||||||
|  | +/// @param first the first version of the class to consider.
 | ||||||
|  | +///
 | ||||||
|  | +/// @param second the second version of the class to consider.
 | ||||||
|  | +///
 | ||||||
|  | +/// @return true iff @p first has a fake flexible array data member
 | ||||||
|  | +/// that got changed into @p second with a real flexible array data
 | ||||||
|  | +/// member.
 | ||||||
|  | +bool
 | ||||||
|  | +has_strict_fam_conversion(const class_decl_sptr& first,
 | ||||||
|  | +			  const class_decl_sptr& second)
 | ||||||
|  | +{
 | ||||||
|  | +  if (has_fake_flexible_array_data_member(first)
 | ||||||
|  | +      && has_flexible_array_data_member(second))
 | ||||||
|  | +    // A fake flexible array member has been changed into
 | ||||||
|  | +    // a real flexible array ...
 | ||||||
|  | +    return true;
 | ||||||
|  | +  return false;
 | ||||||
|  | +}
 | ||||||
|  | +
 | ||||||
|  | +/// Test if a diff node carries a change from class with a fake
 | ||||||
|  | +/// flexible data member into a class with a real fexible data member.
 | ||||||
|  | +///
 | ||||||
|  | +/// A fake flexible array data member is a data member that is the
 | ||||||
|  | +/// last of the class/struct which type is an array of one element.
 | ||||||
|  | +/// This was used before C99 standardized flexible array data members.
 | ||||||
|  | +///
 | ||||||
|  | +/// @param the diff node to consider.
 | ||||||
|  | +///
 | ||||||
|  | +/// @return true iff @p dif carries a change from class with a fake
 | ||||||
|  | +/// flexible data member into a class with a real fexible data member.
 | ||||||
|  | +/// member.
 | ||||||
|  | +bool
 | ||||||
|  | +has_strict_fam_conversion(const diff *dif)
 | ||||||
|  | +{
 | ||||||
|  | +  const class_diff* d = is_class_diff(dif);
 | ||||||
|  | +  if (!d)
 | ||||||
|  | +    return false;
 | ||||||
|  | +
 | ||||||
|  | +  return has_strict_fam_conversion(d->first_class_decl(),
 | ||||||
|  | +				   d->second_class_decl());
 | ||||||
|  | +}
 | ||||||
|  | +
 | ||||||
|  |  /// Test if a class_diff node has static members added or removed. | ||||||
|  |  /// | ||||||
|  |  /// @param diff the diff node to consider. | ||||||
|  | diff --git a/src/abg-ir.cc b/src/abg-ir.cc
 | ||||||
|  | index 5a569c36..78a4dfe0 100644
 | ||||||
|  | --- a/src/abg-ir.cc
 | ||||||
|  | +++ b/src/abg-ir.cc
 | ||||||
|  | @@ -10840,6 +10840,88 @@ var_decl_sptr
 | ||||||
|  |  has_flexible_array_data_member(const class_decl_sptr& klass) | ||||||
|  |  {return has_flexible_array_data_member(klass.get());} | ||||||
|  |   | ||||||
|  | +/// Test if the last data member of a class is an array with
 | ||||||
|  | +/// one element.
 | ||||||
|  | +///
 | ||||||
|  | +/// An array with one element is a way to mimic the flexible data
 | ||||||
|  | +/// member idiom that was later standardized in C99.
 | ||||||
|  | +///
 | ||||||
|  | +/// To learn more about the flexible data member idiom, please
 | ||||||
|  | +/// consider reading :
 | ||||||
|  | +/// https://en.wikipedia.org/wiki/Flexible_array_member.
 | ||||||
|  | +///
 | ||||||
|  | +/// The various ways of representing that idiom pre-standardization
 | ||||||
|  | +/// are presented in this article:
 | ||||||
|  | +/// https://developers.redhat.com/articles/2022/09/29/benefits-limitations-flexible-array-members#
 | ||||||
|  | +///
 | ||||||
|  | +/// @param klass the class to consider.
 | ||||||
|  | +///
 | ||||||
|  | +/// @return the data member which type is a fake flexible array, if
 | ||||||
|  | +/// any, or nil.
 | ||||||
|  | +var_decl_sptr
 | ||||||
|  | +has_fake_flexible_array_data_member(const class_decl& klass)
 | ||||||
|  | +{
 | ||||||
|  | +  var_decl_sptr nil;
 | ||||||
|  | +  const class_or_union::data_members& dms = klass.get_data_members();
 | ||||||
|  | +  if (dms.empty())
 | ||||||
|  | +    return nil;
 | ||||||
|  | +
 | ||||||
|  | +  if (array_type_def_sptr array = is_array_type(dms.back()->get_type()))
 | ||||||
|  | +    {// The type of the last data member is an array.
 | ||||||
|  | +      if (array->get_subranges().size() == 1
 | ||||||
|  | +	  && array->get_subranges()[0]->get_length() == 1)
 | ||||||
|  | +	// The array has a size of one. We are thus looking at a
 | ||||||
|  | +	// "fake" flexible array data member.  Let's return it.
 | ||||||
|  | +	return dms.back();
 | ||||||
|  | +    }
 | ||||||
|  | +
 | ||||||
|  | +  return nil;
 | ||||||
|  | +}
 | ||||||
|  | +
 | ||||||
|  | +/// Test if the last data member of a class is an array with
 | ||||||
|  | +/// one element.
 | ||||||
|  | +///
 | ||||||
|  | +/// An array with one element is a way to mimic the flexible data
 | ||||||
|  | +/// member idiom that was later standardized in C99.
 | ||||||
|  | +///
 | ||||||
|  | +/// To learn more about the flexible data member idiom, please
 | ||||||
|  | +/// consider reading :
 | ||||||
|  | +/// https://en.wikipedia.org/wiki/Flexible_array_member.
 | ||||||
|  | +///
 | ||||||
|  | +/// The various ways of representing that idiom pre-standardization
 | ||||||
|  | +/// are presented in this article:
 | ||||||
|  | +/// https://developers.redhat.com/articles/2022/09/29/benefits-limitations-flexible-array-members#
 | ||||||
|  | +///
 | ||||||
|  | +/// @param klass the class to consider.
 | ||||||
|  | +///
 | ||||||
|  | +/// @return the data member which type is a fake flexible array, if
 | ||||||
|  | +/// any, or nil.
 | ||||||
|  | +var_decl_sptr
 | ||||||
|  | +has_fake_flexible_array_data_member(const class_decl* klass)
 | ||||||
|  | +{return has_fake_flexible_array_data_member(*klass);}
 | ||||||
|  | +
 | ||||||
|  | +/// Test if the last data member of a class is an array with
 | ||||||
|  | +/// one element.
 | ||||||
|  | +///
 | ||||||
|  | +/// An array with one element is a way to mimic the flexible data
 | ||||||
|  | +/// member idiom that was later standardized in C99.
 | ||||||
|  | +///
 | ||||||
|  | +/// To learn more about the flexible data member idiom, please
 | ||||||
|  | +/// consider reading :
 | ||||||
|  | +/// https://en.wikipedia.org/wiki/Flexible_array_member.
 | ||||||
|  | +///
 | ||||||
|  | +/// The various ways of representing that idiom pre-standardization
 | ||||||
|  | +/// are presented in this article:
 | ||||||
|  | +/// https://developers.redhat.com/articles/2022/09/29/benefits-limitations-flexible-array-members#
 | ||||||
|  | +///
 | ||||||
|  | +/// @param klass the class to consider.
 | ||||||
|  | +///
 | ||||||
|  | +/// @return the data member which type is a fake flexible array, if
 | ||||||
|  | +/// any, or nil.
 | ||||||
|  | +var_decl_sptr
 | ||||||
|  | +has_fake_flexible_array_data_member(const class_decl_sptr& klass)
 | ||||||
|  | +{return has_fake_flexible_array_data_member(klass.get());}
 | ||||||
|  | +
 | ||||||
|  |  /// Test wheter a type is a declaration-only class. | ||||||
|  |  /// | ||||||
|  |  /// @param t the type to considier. | ||||||
|  | @@ -10862,7 +10944,6 @@ is_declaration_only_class_or_union_type(const type_base *t,
 | ||||||
|  |    return false; | ||||||
|  |  } | ||||||
|  |   | ||||||
|  | -
 | ||||||
|  |  /// Test wheter a type is a declaration-only class. | ||||||
|  |  /// | ||||||
|  |  /// @param t the type to considier. | ||||||
|  | diff --git a/src/abg-suppression-priv.h b/src/abg-suppression-priv.h
 | ||||||
|  | index 351c5965..e4d65df8 100644
 | ||||||
|  | --- a/src/abg-suppression-priv.h
 | ||||||
|  | +++ b/src/abg-suppression-priv.h
 | ||||||
|  | @@ -586,6 +586,9 @@ class type_suppression::priv
 | ||||||
|  |    mutable regex::regex_t_sptr		source_location_to_keep_regex_; | ||||||
|  |    mutable vector<string>		changed_enumerator_names_; | ||||||
|  |    mutable vector<regex::regex_t_sptr>	changed_enumerators_regexp_; | ||||||
|  | +  // Whether the "has_strict_flexible_array_data_member_conversion"
 | ||||||
|  | +  // property was set.
 | ||||||
|  | +  bool					has_strict_fam_conv_;
 | ||||||
|  |   | ||||||
|  |    priv(); | ||||||
|  |   | ||||||
|  | @@ -602,7 +605,8 @@ public:
 | ||||||
|  |        type_kind_(type_kind), | ||||||
|  |        consider_reach_kind_(consider_reach_kind), | ||||||
|  |        reach_kind_(reach_kind), | ||||||
|  | -      has_size_change_(false)
 | ||||||
|  | +      has_size_change_(false),
 | ||||||
|  | +      has_strict_fam_conv_(false)
 | ||||||
|  |    {} | ||||||
|  |   | ||||||
|  |    /// Get the regular expression object associated to the 'type_name_regex' | ||||||
|  | diff --git a/src/abg-suppression.cc b/src/abg-suppression.cc
 | ||||||
|  | index 326d003e..0fb6d057 100644
 | ||||||
|  | --- a/src/abg-suppression.cc
 | ||||||
|  | +++ b/src/abg-suppression.cc
 | ||||||
|  | @@ -808,6 +808,21 @@ void
 | ||||||
|  |  type_suppression::set_changed_enumerators_regexp(const vector<regex::regex_t_sptr>& n) | ||||||
|  |  {priv_->changed_enumerators_regexp_ = n;} | ||||||
|  |   | ||||||
|  | +/// Getter of the "has_string_fam_conversion" property.
 | ||||||
|  | +///
 | ||||||
|  | +/// @return the value of the "has_string_fam_conversion" property.
 | ||||||
|  | +bool
 | ||||||
|  | +type_suppression::has_strict_fam_conversion () const
 | ||||||
|  | +{return priv_->has_strict_fam_conv_;}
 | ||||||
|  | +
 | ||||||
|  | +/// Setter of the "has_string_fam_conversion" property.
 | ||||||
|  | +///
 | ||||||
|  | +/// @param f the new value of the "has_string_fam_conversion"
 | ||||||
|  | +/// property.
 | ||||||
|  | +void
 | ||||||
|  | +type_suppression::set_has_strict_fam_conversion(bool f)
 | ||||||
|  | +{priv_->has_strict_fam_conv_ = f;}
 | ||||||
|  | +
 | ||||||
|  |  /// Evaluate this suppression specification on a given diff node and | ||||||
|  |  /// say if the diff node should be suppressed or not. | ||||||
|  |  /// | ||||||
|  | @@ -967,6 +982,11 @@ type_suppression::suppresses_diff(const diff* diff) const
 | ||||||
|  |    const class_diff* klass_diff = dynamic_cast<const class_diff*>(d); | ||||||
|  |    if (klass_diff) | ||||||
|  |      { | ||||||
|  | +      const class_decl_sptr& first_class =
 | ||||||
|  | +	klass_diff->first_class_decl();
 | ||||||
|  | +      const class_decl_sptr& second_class =
 | ||||||
|  | +	klass_diff->second_class_decl();
 | ||||||
|  | +
 | ||||||
|  |        // We are looking at a class diff ... | ||||||
|  |        if (!get_data_member_insertion_ranges().empty()) | ||||||
|  |  	{ | ||||||
|  | @@ -981,9 +1001,6 @@ type_suppression::suppresses_diff(const diff* diff) const
 | ||||||
|  |  	      // that suppression applies to types that have size | ||||||
|  |  	      // change. | ||||||
|  |   | ||||||
|  | -	      const class_decl_sptr& first_type_decl =
 | ||||||
|  | -		klass_diff->first_class_decl();
 | ||||||
|  | -
 | ||||||
|  |  	      if (klass_diff->inserted_data_members().empty() | ||||||
|  |  		  && klass_diff->changed_data_members().empty()) | ||||||
|  |  		// So there is a has_data_member_inserted_* clause, | ||||||
|  | @@ -1001,7 +1018,7 @@ type_suppression::suppresses_diff(const diff* diff) const
 | ||||||
|  |  		  for (const auto& range : get_data_member_insertion_ranges()) | ||||||
|  |  		    if (is_data_member_offset_in_range(is_var_decl(member), | ||||||
|  |  						       range, | ||||||
|  | -						       first_type_decl.get()))
 | ||||||
|  | +						       first_class.get()))
 | ||||||
|  |  		      matched = true; | ||||||
|  |   | ||||||
|  |  		  if (!matched) | ||||||
|  | @@ -1017,7 +1034,7 @@ type_suppression::suppresses_diff(const diff* diff) const
 | ||||||
|  |   | ||||||
|  |  		  for (const auto& range : get_data_member_insertion_ranges()) | ||||||
|  |  		    if (is_data_member_offset_in_range(member, range, | ||||||
|  | -						       first_type_decl.get()))
 | ||||||
|  | +						       first_class.get()))
 | ||||||
|  |  		      matched = true; | ||||||
|  |   | ||||||
|  |  		  if (!matched) | ||||||
|  | @@ -1027,6 +1044,20 @@ type_suppression::suppresses_diff(const diff* diff) const
 | ||||||
|  |  	  else | ||||||
|  |  	    return false; | ||||||
|  |  	} | ||||||
|  | +
 | ||||||
|  | +      // Support for the
 | ||||||
|  | +      // "has_strict_flexible_array_data_member_conversion = true"
 | ||||||
|  | +      // clause.
 | ||||||
|  | +      if (has_strict_fam_conversion())
 | ||||||
|  | +	{
 | ||||||
|  | +	  // Let's detect if the first class of the diff has a fake
 | ||||||
|  | +	  // flexible array data member that got turned into a real
 | ||||||
|  | +	  // flexible array data member.
 | ||||||
|  | +	  if (!((get_has_size_change() || ((first_class->get_size_in_bits()
 | ||||||
|  | +					    == second_class->get_size_in_bits())))
 | ||||||
|  | +		&& filtering::has_strict_fam_conversion(klass_diff)))
 | ||||||
|  | +	    return false;
 | ||||||
|  | +	}
 | ||||||
|  |      } | ||||||
|  |   | ||||||
|  |    const enum_diff* enum_dif = dynamic_cast<const enum_diff*>(d); | ||||||
|  | @@ -2321,6 +2352,14 @@ read_type_suppression(const ini::config::section& section)
 | ||||||
|  |        } | ||||||
|  |      } | ||||||
|  |   | ||||||
|  | +  // Support "has_strict_flexible_array_data_member_conversion"
 | ||||||
|  | +  ini::simple_property_sptr has_strict_fam_conv =
 | ||||||
|  | +    is_simple_property
 | ||||||
|  | +    (section.find_property("has_strict_flexible_array_data_member_conversion"));
 | ||||||
|  | +  string has_strict_fam_conv_str = has_strict_fam_conv
 | ||||||
|  | +    ? has_strict_fam_conv->get_value()->as_string()
 | ||||||
|  | +    : "";
 | ||||||
|  | +
 | ||||||
|  |    if (section.get_name() == "suppress_type") | ||||||
|  |      result.reset(new type_suppression(label_str, name_regex_str, name_str)); | ||||||
|  |    else if (section.get_name() == "allow_type") | ||||||
|  | @@ -2388,6 +2427,9 @@ read_type_suppression(const ini::config::section& section)
 | ||||||
|  |        && !changed_enumerators_regexp.empty()) | ||||||
|  |      result->set_changed_enumerators_regexp(changed_enumerators_regexp); | ||||||
|  |   | ||||||
|  | +  if (has_strict_fam_conv_str == "yes" || has_strict_fam_conv_str == "true")
 | ||||||
|  | +    result->set_has_strict_fam_conversion(true);
 | ||||||
|  | +
 | ||||||
|  |    return result; | ||||||
|  |  } | ||||||
|  |   | ||||||
|  | diff --git a/tests/data/Makefile.am b/tests/data/Makefile.am
 | ||||||
|  | index 15c685e3..8af6a2c4 100644
 | ||||||
|  | --- a/tests/data/Makefile.am
 | ||||||
|  | +++ b/tests/data/Makefile.am
 | ||||||
|  | @@ -1934,6 +1934,14 @@ test-diff-suppr/test-has-data-member-inserted-at-1-v0.o \
 | ||||||
|  |  test-diff-suppr/test-has-data-member-inserted-at-1-v1.c \ | ||||||
|  |  test-diff-suppr/test-has-data-member-inserted-at-1-v1.o \ | ||||||
|  |  test-diff-suppr/test-has-data-member-inserted-at-1.1.suppr \ | ||||||
|  | +test-diff-suppr/test-has-strict-flexible-array-data-member-conversion-1.suppr \
 | ||||||
|  | +test-diff-suppr/test-has-strict-flexible-array-data-member-conversion-2.suppr \
 | ||||||
|  | +test-diff-suppr/test-has-strict-flexible-array-data-member-conversion-report-1.txt \
 | ||||||
|  | +test-diff-suppr/test-has-strict-flexible-array-data-member-conversion-report-2.txt \
 | ||||||
|  | +test-diff-suppr/test-has-strict-flexible-array-data-member-conversion-v0.c \
 | ||||||
|  | +test-diff-suppr/test-has-strict-flexible-array-data-member-conversion-v1.c \
 | ||||||
|  | +test-diff-suppr/test-has-strict-flexible-array-data-member-conversion-v0.o \
 | ||||||
|  | +test-diff-suppr/test-has-strict-flexible-array-data-member-conversion-v1.o \
 | ||||||
|  |  \ | ||||||
|  |  test-diff-dwarf-abixml/test0-pr19026-libvtkIOSQL-6.1.so.1 \ | ||||||
|  |  test-diff-dwarf-abixml/test0-pr19026-libvtkIOSQL-6.1.so.1.abi \ | ||||||
|  | diff --git a/tests/data/test-diff-suppr/test-has-strict-flexible-array-data-member-conversion-1.suppr b/tests/data/test-diff-suppr/test-has-strict-flexible-array-data-member-conversion-1.suppr
 | ||||||
|  | new file mode 100644 | ||||||
|  | index 00000000..5cb8d880
 | ||||||
|  | --- /dev/null
 | ||||||
|  | +++ b/tests/data/test-diff-suppr/test-has-strict-flexible-array-data-member-conversion-1.suppr
 | ||||||
|  | @@ -0,0 +1,4 @@
 | ||||||
|  | +[suppress_type]
 | ||||||
|  | +  type_kind = struct
 | ||||||
|  | +  has_size_change = true
 | ||||||
|  | +  has_strict_flexible_array_data_member_conversion = true
 | ||||||
|  | diff --git a/tests/data/test-diff-suppr/test-has-strict-flexible-array-data-member-conversion-2.suppr b/tests/data/test-diff-suppr/test-has-strict-flexible-array-data-member-conversion-2.suppr
 | ||||||
|  | new file mode 100644 | ||||||
|  | index 00000000..384409d0
 | ||||||
|  | --- /dev/null
 | ||||||
|  | +++ b/tests/data/test-diff-suppr/test-has-strict-flexible-array-data-member-conversion-2.suppr
 | ||||||
|  | @@ -0,0 +1,3 @@
 | ||||||
|  | +[suppress_type]
 | ||||||
|  | +  type_kind = struct
 | ||||||
|  | +  has_strict_flexible_array_data_member_conversion = true
 | ||||||
|  | diff --git a/tests/data/test-diff-suppr/test-has-strict-flexible-array-data-member-conversion-report-1.txt b/tests/data/test-diff-suppr/test-has-strict-flexible-array-data-member-conversion-report-1.txt
 | ||||||
|  | new file mode 100644 | ||||||
|  | index 00000000..b4ea5bf1
 | ||||||
|  | --- /dev/null
 | ||||||
|  | +++ b/tests/data/test-diff-suppr/test-has-strict-flexible-array-data-member-conversion-report-1.txt
 | ||||||
|  | @@ -0,0 +1,4 @@
 | ||||||
|  | +Functions changes summary: 0 Removed, 0 Changed, 0 Added function
 | ||||||
|  | +Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
 | ||||||
|  | +Unreachable types summary: 0 removed, 0 changed (1 filtered out), 0 added type
 | ||||||
|  | +
 | ||||||
|  | diff --git a/tests/data/test-diff-suppr/test-has-strict-flexible-array-data-member-conversion-report-2.txt b/tests/data/test-diff-suppr/test-has-strict-flexible-array-data-member-conversion-report-2.txt
 | ||||||
|  | new file mode 100644 | ||||||
|  | index 00000000..2352dd4e
 | ||||||
|  | --- /dev/null
 | ||||||
|  | +++ b/tests/data/test-diff-suppr/test-has-strict-flexible-array-data-member-conversion-report-2.txt
 | ||||||
|  | @@ -0,0 +1,14 @@
 | ||||||
|  | +Functions changes summary: 0 Removed, 0 Changed, 0 Added function
 | ||||||
|  | +Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
 | ||||||
|  | +Unreachable types summary: 0 removed, 1 changed, 0 added type
 | ||||||
|  | +
 | ||||||
|  | +1 changed type unreachable from any public interface:
 | ||||||
|  | +
 | ||||||
|  | +  [C] 'struct foo' changed:
 | ||||||
|  | +    type size changed from 64 to 32 (in bits)
 | ||||||
|  | +    1 data member change:
 | ||||||
|  | +      type of 'int flex[1]' changed:
 | ||||||
|  | +        type name changed from 'int[1]' to 'int[]'
 | ||||||
|  | +        array type size changed from 32 to 'unknown'
 | ||||||
|  | +        array type subrange 1 changed length from 1 to 'unknown'
 | ||||||
|  | +
 | ||||||
|  | diff --git a/tests/data/test-diff-suppr/test-has-strict-flexible-array-data-member-conversion-v0.c b/tests/data/test-diff-suppr/test-has-strict-flexible-array-data-member-conversion-v0.c
 | ||||||
|  | new file mode 100644 | ||||||
|  | index 00000000..1397cd52
 | ||||||
|  | --- /dev/null
 | ||||||
|  | +++ b/tests/data/test-diff-suppr/test-has-strict-flexible-array-data-member-conversion-v0.c
 | ||||||
|  | @@ -0,0 +1,11 @@
 | ||||||
|  | +/*
 | ||||||
|  | + * Compile this with:
 | ||||||
|  | + *   gcc -g -c test-has-strict-flexible-array-data-member-conversion-v0.c
 | ||||||
|  | + */
 | ||||||
|  | +struct foo
 | ||||||
|  | +{
 | ||||||
|  | +  int x;
 | ||||||
|  | +  int flex[1];
 | ||||||
|  | +};
 | ||||||
|  | +
 | ||||||
|  | +struct foo S;
 | ||||||
|  | diff --git a/tests/data/test-diff-suppr/test-has-strict-flexible-array-data-member-conversion-v0.o b/tests/data/test-diff-suppr/test-has-strict-flexible-array-data-member-conversion-v0.o
 | ||||||
|  | new file mode 100644 | ||||||
|  | index 0000000000000000000000000000000000000000..8d0a755d353d580e6afb96dc55a021322caf5a93
 | ||||||
|  | GIT binary patch | ||||||
|  | literal 2440 | ||||||
|  | zcmbtV!EVz)5FN)&<6;_GMF^^b<Vqk4!cGFERE3sE6_g5uKvjhVhssViiD_a-wo}>* | ||||||
|  | zJ;IGM=UzDT1$+hP{sNqkIFy<7Zt5&SNOUCc%)FV|ncbaTA3S{eD5q&4NrP25(Ig7+ | ||||||
|  | zA%7y*xLAWJI0pgBV_Y|Q*jX-%A=eB;FtmIPb$t)C0tu<RW~_5DKbH4{1jfno62Afs | ||||||
|  | z0EST@Hn9nsd6@*AR8HEocC}bC_2O)C>H<Knr0IrfE}QpEt%PYNK{rU*C@q<o3)SL@ | ||||||
|  | zn!f_3xoYYLz__MulqjMw2OFg_`WnJm#B>XTSsu*fE@IwG_~m$hj2%H#b`D<PsA<27 | ||||||
|  | zlQ{BC#XZp=VR2%&-Pn$k$gd}Mv%~g$ufuFNirjs>;U=!#WnGU&c0CMsSrq$WVDDC( | ||||||
|  | zI!{FIr<r5@*_O3dty*`TJ5I&2yGcJ_D=ii<ECy9Ks<&76mKN>B1<P((b~8@g`i|X; | ||||||
|  | z!i3e6Fruo%pamTqtbP#tt$;NwI<#^>j&7CTgzat^mfwcaPTX_rtlaTE*YjJh-zn3| | ||||||
|  | z<1#Ifi+00rHto3I>qP+TYirBa{Fc`bl73p7eY?-K>bvTaQ(3s4q9Zmt15wkB!S~|~ | ||||||
|  | zG!XTXos2yqPIBNV1RX7-NEaQh+H@FKA+GDdoA(c!4ikT11n6+)FZj@H8u;jd-Kx-i | ||||||
|  | z)TiOcvFuLCPt!P?IHz18RVZajEh{6OR#n4~XgXzlMTE;|<Gg}@68cOAAJmN4LI%(7 | ||||||
|  | z+A9TrFLYmU>IYdHL9%A5Q`SN_IPrcraXsWol=8Ne61JCsLtP7w7sud4tm8Tj=Ji|K | ||||||
|  | ze$Wij#%0&@BDOnZb|W`vF$_sPI)1>UjI)DN54&B4SH}tPb~$)6@pj>D;}xB1n8j#X | ||||||
|  | zyIilFtR@A8lW&&hP$5jc0ky1CMpommp^eV(f8(ndtIkR3YBV6>gE2&^?@hGQf2cO( | ||||||
|  | z1z@E=C-^GxN#q2{UZc02XazrYPQt&?fV7*k!KnH^M~jM)^Sl5pQZl6aK0({4`j15Y | ||||||
|  | zvQDa>UKh3gZN$_$5rW48d`(J*R9|XA!YUab5)XyrHwBmRlGFZ-ir-IvnsDPE@dqMa | ||||||
|  | zaf3q<ui`SV#7Q6J`dNTWA^?Bx{C!aOkKP!ycWLe;0j`pgAvHg}d!yoiiu3!Ji6v2u | ||||||
|  | F{|#4^;2Zz| | ||||||
|  | 
 | ||||||
|  | literal 0 | ||||||
|  | HcmV?d00001 | ||||||
|  | 
 | ||||||
|  | diff --git a/tests/data/test-diff-suppr/test-has-strict-flexible-array-data-member-conversion-v1.c b/tests/data/test-diff-suppr/test-has-strict-flexible-array-data-member-conversion-v1.c
 | ||||||
|  | new file mode 100644 | ||||||
|  | index 00000000..95386d41
 | ||||||
|  | --- /dev/null
 | ||||||
|  | +++ b/tests/data/test-diff-suppr/test-has-strict-flexible-array-data-member-conversion-v1.c
 | ||||||
|  | @@ -0,0 +1,11 @@
 | ||||||
|  | +/*
 | ||||||
|  | + * Compile this with:
 | ||||||
|  | + *   gcc -g -c test-has-strict-flexible-array-data-member-conversion-v1.c
 | ||||||
|  | + */
 | ||||||
|  | +struct foo
 | ||||||
|  | +{
 | ||||||
|  | +  int x;
 | ||||||
|  | +  int flex[];
 | ||||||
|  | +};
 | ||||||
|  | +
 | ||||||
|  | +struct foo S;
 | ||||||
|  | diff --git a/tests/data/test-diff-suppr/test-has-strict-flexible-array-data-member-conversion-v1.o b/tests/data/test-diff-suppr/test-has-strict-flexible-array-data-member-conversion-v1.o
 | ||||||
|  | new file mode 100644 | ||||||
|  | index 0000000000000000000000000000000000000000..da8d4137ad4639af460b144ceb464a021fb843ce
 | ||||||
|  | GIT binary patch | ||||||
|  | literal 2432 | ||||||
|  | zcmbtVUr!T35TEO{w0Ke>jS+$-M<Vf0yerj;4GK0PNQlH}2pVG|xofxWNqblCt`%Oy | ||||||
|  | zZ{V|Ud<DOOpTh7l)K?#H=5Dtf%NY}yq&qXenc11$o7o<$Z9d5;3J6kQ1x_@90({Dy | ||||||
|  | z$n{99!z5gS9?IEBFGOJ%BbhImmghlM$<<L;_dv;$5W6dd^+?QRbB-Ir7+GH8FHZ{; | ||||||
|  | z3VCAVTcBvyNKi?QNSRXRizQ7h&K4)H0AxyvTF|s5?V+ZWFv|p}1yVLjH4RgtT0Bv6 | ||||||
|  | z*Fn=(G_?RQrYIXFipbBw2C@P-6){<Lw8!I_%rs`bioZ;h9V1id6=E59fvckYE>7SY | ||||||
|  | z-6&p&0wD`Rqhkd|5c*CdG+JG@=h$6lSiW!V8%-;;j2`RR%r_dIJ7j*~c&;(5n2jhA | ||||||
|  | zxx@OiZGE*;(I1%i%>~`)g#(u@x0%auM^r7p(OKTBEgFke-DvAZD+sN|uF?0skTpWj | ||||||
|  | zr_`R?hAuApzzv+X%bGe}`#Fj$4+8&g`JLD4d0zR0=kEr6tHH`$$F^*zZ8_aCZ61{A | ||||||
|  | zfRSi4omR^T2K~Mdu)eywq~F}O2W~isk7e8&L|WxzrDiTvZ^dZJWycUTTNZvEr#Yyp | ||||||
|  | z9gNMvKcXC?q9u(~-r2HEg)te5bQPkmJ!4a0{0v5b3K#x@pPHhPj|$k*5<NnF3Vt2O | ||||||
|  | zGbm;e!E=1tEesbYqzZ+MB8bWer&Eb%VTz1M0)HE;aG7&~f8qK}0#6QAHGwB@?X`q& | ||||||
|  | za=pVj^@FI5AW<{r6*UqLX0YE2EgO00$Gjt?knM$FQp1922LYHq>sn@$*@O0u<F-7s | ||||||
|  | zMY3hvJ{z7gTfXJC8HU6jUB_iY#@)eec)cFOfiqp4NfYN8XA);Ls_0zHEJoAW#d*bM | ||||||
|  | zbs<Qce3LYX3SsgD)RRsLS&qMfHu`@58(+a#c~44Lrv>SK%tov1dj~Dl`}L7WEKKu( | ||||||
|  | z_{Q-G<OGRcqi3CH8GrJggny+4DU8`@m3^P1MaIZ^o`X6m36g!EqAjidBVNC#lj^6} | ||||||
|  | zMXrAbF?mmfV2y)sNJ)_FOD#y)Lc)i{L+<!p!bQB`L$s&G599w!xc!g#10FBA!6A>A | ||||||
|  | zagkTxq^G%x_!<wu|Mlp7knfM)7`b<8?;{Sbkdh!dKfQZt@jv+Y`<#d+QI7uuX6xT{ | ||||||
|  | 
 | ||||||
|  | literal 0 | ||||||
|  | HcmV?d00001 | ||||||
|  | 
 | ||||||
|  | diff --git a/tests/test-diff-suppr.cc b/tests/test-diff-suppr.cc
 | ||||||
|  | index 8c9ad070..119be55b 100644
 | ||||||
|  | --- a/tests/test-diff-suppr.cc
 | ||||||
|  | +++ b/tests/test-diff-suppr.cc
 | ||||||
|  | @@ -2376,6 +2376,26 @@ InOutSpec in_out_specs[] =
 | ||||||
|  |      "data/test-diff-suppr/test-has-data-member-inserted-at-2-report.3.txt", | ||||||
|  |      "output/test-diff-suppr/test-has-data-member-inserted-at-2-report.3.txt" | ||||||
|  |    }, | ||||||
|  | +  {
 | ||||||
|  | +    "data/test-diff-suppr/test-has-strict-flexible-array-data-member-conversion-v0.o",
 | ||||||
|  | +    "data/test-diff-suppr/test-has-strict-flexible-array-data-member-conversion-v1.o",
 | ||||||
|  | +    "",
 | ||||||
|  | +    "",
 | ||||||
|  | +    "data/test-diff-suppr/test-has-strict-flexible-array-data-member-conversion-1.suppr",
 | ||||||
|  | +    "--drop-private-types --no-default-suppression --non-reachable-types",
 | ||||||
|  | +    "data/test-diff-suppr/test-has-strict-flexible-array-data-member-conversion-report-1.txt",
 | ||||||
|  | +    "output/test-diff-suppr/test-has-strict-flexible-array-data-member-conversion-report-1.txt",
 | ||||||
|  | +  },
 | ||||||
|  | +  {
 | ||||||
|  | +    "data/test-diff-suppr/test-has-strict-flexible-array-data-member-conversion-v0.o",
 | ||||||
|  | +    "data/test-diff-suppr/test-has-strict-flexible-array-data-member-conversion-v1.o",
 | ||||||
|  | +    "",
 | ||||||
|  | +    "",
 | ||||||
|  | +    "data/test-diff-suppr/test-has-strict-flexible-array-data-member-conversion-2.suppr",
 | ||||||
|  | +    "--drop-private-types --no-default-suppression --non-reachable-types",
 | ||||||
|  | +    "data/test-diff-suppr/test-has-strict-flexible-array-data-member-conversion-report-2.txt",
 | ||||||
|  | +    "output/test-diff-suppr/test-has-strict-flexible-array-data-member-conversion-report-2.txt",
 | ||||||
|  | +  },
 | ||||||
|  |    // This should be the last entry | ||||||
|  |    {NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL} | ||||||
|  |  }; | ||||||
|  | -- 
 | ||||||
|  | 2.42.0 | ||||||
|  | 
 | ||||||
| @ -2,23 +2,26 @@ | |||||||
| %global tarball_name %{name}-%{version} | %global tarball_name %{name}-%{version} | ||||||
| 
 | 
 | ||||||
| Name: libabigail | Name: libabigail | ||||||
| Version: 2.2 | Version: 2.4 | ||||||
| Release: 2%{?dist} | Release: 3%{?dist} | ||||||
| Summary: Set of ABI analysis tools | Summary: Set of ABI analysis tools | ||||||
| 
 | 
 | ||||||
| License: ASL 2.0 | License: Apache-2.0 WITH LLVM-exception | ||||||
| URL: https://sourceware.org/libabigail/ | URL: https://sourceware.org/libabigail/ | ||||||
| Source0: http://mirrors.kernel.org/sourceware/libabigail/%{tarball_name}.tar.xz | Source0: http://mirrors.kernel.org/sourceware/libabigail/%{tarball_name}.tar.xz | ||||||
|  | Patch1: 0001-Bug-31045-Don-t-try-setting-translation-unit-for-uni.patch | ||||||
|  | Patch2: 0002-suppression-Add-has_strict_flexible_array_data_membe.patch | ||||||
| 
 | 
 | ||||||
|  | BuildRequires: git | ||||||
| BuildRequires: gcc-c++ | BuildRequires: gcc-c++ | ||||||
| BuildRequires: libtool | BuildRequires: libtool | ||||||
| BuildRequires: elfutils-devel | BuildRequires: elfutils-devel | ||||||
|  | BuildRequires: libbpf-devel | ||||||
| BuildRequires: libxml2-devel | BuildRequires: libxml2-devel | ||||||
| BuildRequires: doxygen | BuildRequires: doxygen | ||||||
| BuildRequires: %{_bindir}/python3 | BuildRequires: %{_bindir}/python3 | ||||||
| BuildRequires: python3-sphinx | BuildRequires: python3-sphinx | ||||||
| BuildRequires: texinfo | BuildRequires: texinfo | ||||||
| BuildRequires: dos2unix |  | ||||||
| 
 | 
 | ||||||
| %description | %description | ||||||
| The libabigail package comprises six command line utilities: | The libabigail package comprises six command line utilities: | ||||||
| @ -59,10 +62,11 @@ form of man pages, texinfo documentation and API documentation in html | |||||||
| format. | format. | ||||||
| 
 | 
 | ||||||
| %prep | %prep | ||||||
| %setup -n %{tarball_name} | %autosetup -v -S git | ||||||
|  | autoreconf | ||||||
| 
 | 
 | ||||||
| %build | %build | ||||||
| %configure --disable-deb  --disable-fedabipkgdiff --disable-zip-archive --disable-static | %configure --enable-btf --disable-deb  --disable-fedabipkgdiff --disable-zip-archive --disable-static | ||||||
| make %{?_smp_mflags} | make %{?_smp_mflags} | ||||||
| pushd doc | pushd doc | ||||||
| make html-doc | make html-doc | ||||||
| @ -80,10 +84,10 @@ find %{buildroot} -name '*.la' -exec rm -f {} ';' | |||||||
| # Install man and texinfo files as they are not installed by the | # Install man and texinfo files as they are not installed by the | ||||||
| # default 'install' target of the makefile. | # default 'install' target of the makefile. | ||||||
| make -C doc/manuals install-man-and-info-doc DESTDIR=%{buildroot} | make -C doc/manuals install-man-and-info-doc DESTDIR=%{buildroot} | ||||||
| dos2unix doc/manuals/html/_static/jquery.js |  | ||||||
| 
 | 
 | ||||||
| %check | %check | ||||||
| time make %{?_smp_mflags} check check-self-compare || (cat tests/test-suite.log && exit 2) | time make %{?_smp_mflags} check  || (cat tests/test-suite.log && exit 2) | ||||||
|  | time make %{?_smp_mflags} check-self-compare || (cat tests/test-suite.log && exit 2) | ||||||
| 
 | 
 | ||||||
| if test $? -ne 0; then | if test $? -ne 0; then | ||||||
|   cat tests/tests-suite.log |   cat tests/tests-suite.log | ||||||
| @ -107,8 +111,8 @@ fi | |||||||
| %{_bindir}/abilint | %{_bindir}/abilint | ||||||
| %{_bindir}/abipkgdiff | %{_bindir}/abipkgdiff | ||||||
| %{_bindir}/kmidiff | %{_bindir}/kmidiff | ||||||
| %{_libdir}/libabigail.so.1 | %{_libdir}/libabigail.so.3 | ||||||
| %{_libdir}/libabigail.so.1.0.0 | %{_libdir}/libabigail.so.3.0.0 | ||||||
| %{_libdir}/libabigail/default.abignore | %{_libdir}/libabigail/default.abignore | ||||||
| %doc README AUTHORS ChangeLog | %doc README AUTHORS ChangeLog | ||||||
| %license LICENSE.txt license-change-2020.txt | %license LICENSE.txt license-change-2020.txt | ||||||
| @ -127,6 +131,35 @@ fi | |||||||
| %doc doc/manuals/html/* | %doc doc/manuals/html/* | ||||||
| 
 | 
 | ||||||
| %changelog | %changelog | ||||||
|  | * Fri Nov 17 2023 Dodji Seketeli <dodji@redhat.com> - 2.4-3 | ||||||
|  | - Fix SPDX Licensing string | ||||||
|  | 
 | ||||||
|  | * Thu Nov 16 2023 Dodji Seketeli <dodji@redhat.com> - 2.4-2 | ||||||
|  | - Apply patch: 0001-Bug-31045-Don-t-try-setting-translation-unit-for-uni.patch | ||||||
|  |   Resolves: https://issues.redhat.com/browse/RHEL-16614 | ||||||
|  | - Apply patch: 0002-suppression-Add-has_strict_flexible_array_data_membe.patch | ||||||
|  |   Resolves: https://issues.redhat.com/browse/RHEL-16629 | ||||||
|  | - Add git as a build requirement as we need git to apply the patches | ||||||
|  |   aboves that apply binaries. | ||||||
|  | - Use %%autosetup to handle applying the patches using git. | ||||||
|  | - autoreconf after the patches touched at least one Makefile.am file. | ||||||
|  | 
 | ||||||
|  | * Wed Nov 01 2023 Dodji Seketeli <dodji@redhat.com> - 2.4-1 | ||||||
|  | - Update to upstream 2.4 | ||||||
|  | - Use SPDX licensing naming | ||||||
|  | - Build BTF support | ||||||
|  | - Add BuildRequires: libbpf-devel | ||||||
|  | - Update for SONAME bump | ||||||
|  | - Show details about the check and check-self-targets targets | ||||||
|  |   separatly. | ||||||
|  | - Resolves: RHEL-12491 | ||||||
|  | 
 | ||||||
|  | * Tue May 09 2023 Dodji Seketeli <dodji@redhat.com> - 2.3-1 | ||||||
|  | - Update to upstream 2.3 | ||||||
|  | - Remove the dos2unix surgery as it's now useless | ||||||
|  | - Update for the soname bump | ||||||
|  | - Resolves: RHELPLAN-154803 | ||||||
|  | 
 | ||||||
| * Tue Dec 13 2022 Dodji Seketeli <dodji@redhat.com> - 2.2-1 | * Tue Dec 13 2022 Dodji Seketeli <dodji@redhat.com> - 2.2-1 | ||||||
| - Update to upstream 2.2 | - Update to upstream 2.2 | ||||||
| - Switch to .xz tarball | - Switch to .xz tarball | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user