Hi,
On Thu, Mar 23, 2017 at 8:31 AM, William Cohen <wco...@redhat.com> wrote: > > Hi Stephane, > > There is ABI change between libpfm-4.7 and libpfm-4.8 that is visible > to programs using libpfm that break compatability. This change can be > observed with libabigail's abidiff command > (https://sourceware.org/libabigail/manual/abidiff.html) I found that > following patch has changed the layout of struct pfm_event_attr_info_t > in pfmlib.h: > > commit 4dc4c6ada254f30eee8cd2ae27bb0869a111b613 > Author: Stephane Eranian <eran...@gmail.com> > Date: Sat May 28 03:49:04 2016 +0200 > > Allow raw umask for OFFCORE_RESPONSE on Intel core PMUs > > This patch makes it possible to specify the raw umask as > hexadecimal for the Intel core PMU OFFCORE_RESPONSE_* event. > This makes it possible to encode a umask which could have been > omitted by mistake from the library or not yet supported. > > $ examples/check_events offcore_response_0:0xffff > > Added validation tests for this new support. > > Signed-off-by: Stephane Eranian <eran...@gmail.com> > > --------------------------- include/perfmon/pfmlib.h > --------------------------- > index 24a2a60..8921164 100644 > @@ -420,8 +420,8 @@ typedef struct { > size_t size; /* struct sizeof */ > uint64_t code; /* attribute code */ > pfm_attr_t type; /* attribute type */ > - int idx; /* attribute opaque index */ > - pfm_attr_ctrl_t ctrl; /* what is providing attr */ > + uint64_t idx; /* attribute opaque index */ > + pfm_attr_ctrl_t ctrl; /* what is providing attr */ > struct { > unsigned int is_dfl:1; /* is default umask */ > unsigned int is_precise:1; /* Intel X86: supports PEBS */ > > > > The struct in libpfm-4.7 is > > typedef struct { > const char *name; /* attribute symbolic name */ > const char *desc; /* attribute description */ > const char *equiv; /* attribute is equivalent to */ > size_t size; /* struct sizeof */ > uint64_t code; /* attribute code */ > pfm_attr_t type; /* attribute type */ > int idx; /* attribute opaque index */ > pfm_attr_ctrl_t ctrl; /* what is providing attr */ > struct { > unsigned int is_dfl:1; /* is default umask */ > unsigned int is_precise:1; /* Intel X86: supports PEBS */ > unsigned int reserved_bits:30; > } SWIG_NAME(flags); > union { > uint64_t dfl_val64; /* default 64-bit value */ > const char *dfl_str; /* default string value */ > int dfl_bool; /* default boolean value */ > int dfl_int; /* default integer value */ > } SWIG_NAME(defaults); > } pfm_event_attr_info_t; > > The patch changes idx from a 32-bit to 64-bit value. This causes > padding (made explicit by commit > 06b296c72838be44d8950dc03227fe0dc8ca1fb1) to be inserted so idx and > following fields are at different locations in the struct. The struct > is also made 8 bytes larger (512 bits to 576 bits). > Ok, my bad. That was not my goal here. We can revert this change. But to enable support, this struct will need to change. So it will incur some ABI change. > > abidiff /usr/lib64/libpfm.so.4.7.0 libpfm.so > ... > [C]'function int pfm_get_event_attr_info(int, int, pfm_os_t, > pfm_event_attr_info_t*)' at pfmlib_common.c:1812:1 has some indirect sub-type > changes: > parameter 4 of type 'pfm_event_attr_info_t*' has sub-type changes: > in pointed to type 'typedef pfm_event_attr_info_t' at pfmlib.h:507:1: > underlying type 'struct __anonymous_struct__' at pfmlib.h:486:1 > changed: > type size changed from 512 to 576 bits > 1 data member insertion: > 'int __anonymous_struct__::pad', at offset 352 (in bits) at > pfmlib.h:493:1 > 3 data member changes: > type of 'int __anonymous_struct__::idx' changed: > entity changed from 'int' to compatible type 'typedef uint64_t' > at stdint.h:55:1 > type name changed from 'int' to 'unsigned long int' > type size changed from 32 to 64 bits > and offset changed from 352 to 384 (in bits) > 'pfm_attr_ctrl_t __anonymous_struct__::ctrl' offset changed from > 384 to 448 (in bits) > '__anonymous_struct__ ' offset changed from 416 to 480 (in bits) > > ... > > -Will ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot _______________________________________________ perfmon2-devel mailing list perfmon2-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/perfmon2-devel