]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
[SFrame-V3] libsframe: testsuite: add new testcases for SFRAME_FDE_TYPE_FLEX
authorIndu Bhagat <indu.bhagat@oracle.com>
Fri, 16 Jan 2026 00:44:03 +0000 (16:44 -0800)
committerIndu Bhagat <indu.bhagat@oracle.com>
Fri, 16 Jan 2026 01:02:28 +0000 (17:02 -0800)
This patch adds two new tests for SFrame V3 changes, focusing on the
newly added flexible FDE TYPE SFRAME_FDE_TYPE_FLEX.

Following tests are added:
  - be-flipping-v3.c: Validates that big-endian SFrame V3 data is
    correctly endian flipped when run on little-endian hosts.  It
    verifies the decoding of CFA offsets and the new V3 register/offset
    metadata bitfields using the SFRAME_V3_FLEX_FDE_OFFSET_REG_* macros.
  - findfre-flex-1.c: Tests a variety of sframe_find_fre lookup
    scenarios, apart from checking the basic encoder/decoder APIs.

Documentation for the binary test data DATA-BE-V3 is provided in
README-be-flipping-v3 to ensure reproducibility.

libsframe/
* Makefile.in: Regenerate.
* testsuite/libsframe.decode/DATA-BE-V3: New test data.
* testsuite/libsframe.decode/README-be-flipping-v3: New file.
* testsuite/libsframe.decode/be-flipping-v3.c: New test.
* testsuite/libsframe.decode/decode.exp: Run be-flipping-v3.
* testsuite/libsframe.decode/local.mk: Add be-flipping-v3.
* testsuite/libsframe.find/find.exp: Run findfre-flex-1.
* testsuite/libsframe.find/findfre-flex-1.c: New test.
* testsuite/libsframe.find/local.mk: Add findfre-flex-1.

libsframe/Makefile.in
libsframe/testsuite/libsframe.decode/DATA-BE-V3 [new file with mode: 0644]
libsframe/testsuite/libsframe.decode/README-be-flipping-v3 [new file with mode: 0644]
libsframe/testsuite/libsframe.decode/be-flipping-v3.c [new file with mode: 0644]
libsframe/testsuite/libsframe.decode/decode.exp
libsframe/testsuite/libsframe.decode/local.mk
libsframe/testsuite/libsframe.find/find.exp
libsframe/testsuite/libsframe.find/findfre-flex-1.c [new file with mode: 0644]
libsframe/testsuite/libsframe.find/local.mk

index 308ec16d97db747fa9f3be349b87e5ab69ff114c..bd61638262bb5ad9f625181d9b9f72136a625c63 100644 (file)
@@ -113,11 +113,13 @@ target_triplet = @target@
 @BUILD_INFO_TRUE@am__append_3 = doc/sframe-spec.info
 check_PROGRAMS = $(am__EXEEXT_1)
 @HAVE_COMPAT_DEJAGNU_TRUE@am__append_4 = testsuite/libsframe.decode/be-flipping \
+@HAVE_COMPAT_DEJAGNU_TRUE@     testsuite/libsframe.decode/be-flipping-v3 \
 @HAVE_COMPAT_DEJAGNU_TRUE@     testsuite/libsframe.decode/frecnt-1 \
 @HAVE_COMPAT_DEJAGNU_TRUE@     testsuite/libsframe.decode/frecnt-2 \
 @HAVE_COMPAT_DEJAGNU_TRUE@     testsuite/libsframe.decode/frecnt-v2 \
 @HAVE_COMPAT_DEJAGNU_TRUE@     testsuite/libsframe.encode/encode-1 \
 @HAVE_COMPAT_DEJAGNU_TRUE@     testsuite/libsframe.find/findfre-1 \
+@HAVE_COMPAT_DEJAGNU_TRUE@     testsuite/libsframe.find/findfre-flex-1 \
 @HAVE_COMPAT_DEJAGNU_TRUE@     testsuite/libsframe.find/findfunc-1 \
 @HAVE_COMPAT_DEJAGNU_TRUE@     testsuite/libsframe.find/plt-findfre-1 \
 @HAVE_COMPAT_DEJAGNU_TRUE@     testsuite/libsframe.find/plt-findfre-2
@@ -192,11 +194,13 @@ libsframe_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
 @INSTALL_LIBBFD_FALSE@am_libsframe_la_rpath =
 @INSTALL_LIBBFD_TRUE@am_libsframe_la_rpath = -rpath $(libdir)
 @HAVE_COMPAT_DEJAGNU_TRUE@am__EXEEXT_1 = testsuite/libsframe.decode/be-flipping$(EXEEXT) \
+@HAVE_COMPAT_DEJAGNU_TRUE@     testsuite/libsframe.decode/be-flipping-v3$(EXEEXT) \
 @HAVE_COMPAT_DEJAGNU_TRUE@     testsuite/libsframe.decode/frecnt-1$(EXEEXT) \
 @HAVE_COMPAT_DEJAGNU_TRUE@     testsuite/libsframe.decode/frecnt-2$(EXEEXT) \
 @HAVE_COMPAT_DEJAGNU_TRUE@     testsuite/libsframe.decode/frecnt-v2$(EXEEXT) \
 @HAVE_COMPAT_DEJAGNU_TRUE@     testsuite/libsframe.encode/encode-1$(EXEEXT) \
 @HAVE_COMPAT_DEJAGNU_TRUE@     testsuite/libsframe.find/findfre-1$(EXEEXT) \
+@HAVE_COMPAT_DEJAGNU_TRUE@     testsuite/libsframe.find/findfre-flex-1$(EXEEXT) \
 @HAVE_COMPAT_DEJAGNU_TRUE@     testsuite/libsframe.find/findfunc-1$(EXEEXT) \
 @HAVE_COMPAT_DEJAGNU_TRUE@     testsuite/libsframe.find/plt-findfre-1$(EXEEXT) \
 @HAVE_COMPAT_DEJAGNU_TRUE@     testsuite/libsframe.find/plt-findfre-2$(EXEEXT)
@@ -206,6 +210,11 @@ testsuite_libsframe_decode_be_flipping_OBJECTS =  \
        $(am_testsuite_libsframe_decode_be_flipping_OBJECTS)
 testsuite_libsframe_decode_be_flipping_DEPENDENCIES =  \
        $(testsuite_LDADD)
+am_testsuite_libsframe_decode_be_flipping_v3_OBJECTS = testsuite/libsframe.decode/testsuite_libsframe_decode_be_flipping_v3-be-flipping-v3.$(OBJEXT)
+testsuite_libsframe_decode_be_flipping_v3_OBJECTS =  \
+       $(am_testsuite_libsframe_decode_be_flipping_v3_OBJECTS)
+testsuite_libsframe_decode_be_flipping_v3_DEPENDENCIES =  \
+       $(testsuite_LDADD)
 am_testsuite_libsframe_decode_frecnt_1_OBJECTS = testsuite/libsframe.decode/testsuite_libsframe_decode_frecnt_1-frecnt-1.$(OBJEXT)
 testsuite_libsframe_decode_frecnt_1_OBJECTS =  \
        $(am_testsuite_libsframe_decode_frecnt_1_OBJECTS)
@@ -227,6 +236,11 @@ am_testsuite_libsframe_find_findfre_1_OBJECTS = testsuite/libsframe.find/testsui
 testsuite_libsframe_find_findfre_1_OBJECTS =  \
        $(am_testsuite_libsframe_find_findfre_1_OBJECTS)
 testsuite_libsframe_find_findfre_1_DEPENDENCIES = $(testsuite_LDADD)
+am_testsuite_libsframe_find_findfre_flex_1_OBJECTS = testsuite/libsframe.find/testsuite_libsframe_find_findfre_flex_1-findfre-flex-1.$(OBJEXT)
+testsuite_libsframe_find_findfre_flex_1_OBJECTS =  \
+       $(am_testsuite_libsframe_find_findfre_flex_1_OBJECTS)
+testsuite_libsframe_find_findfre_flex_1_DEPENDENCIES =  \
+       $(testsuite_LDADD)
 am_testsuite_libsframe_find_findfunc_1_OBJECTS = testsuite/libsframe.find/testsuite_libsframe_find_findfunc_1-findfunc-1.$(OBJEXT)
 testsuite_libsframe_find_findfunc_1_OBJECTS =  \
        $(am_testsuite_libsframe_find_findfunc_1_OBJECTS)
@@ -277,21 +291,25 @@ am__v_CCLD_0 = @echo "  CCLD    " $@;
 am__v_CCLD_1 = 
 SOURCES = $(libsframe_la_SOURCES) \
        $(testsuite_libsframe_decode_be_flipping_SOURCES) \
+       $(testsuite_libsframe_decode_be_flipping_v3_SOURCES) \
        $(testsuite_libsframe_decode_frecnt_1_SOURCES) \
        $(testsuite_libsframe_decode_frecnt_2_SOURCES) \
        $(testsuite_libsframe_decode_frecnt_v2_SOURCES) \
        $(testsuite_libsframe_encode_encode_1_SOURCES) \
        $(testsuite_libsframe_find_findfre_1_SOURCES) \
+       $(testsuite_libsframe_find_findfre_flex_1_SOURCES) \
        $(testsuite_libsframe_find_findfunc_1_SOURCES) \
        $(testsuite_libsframe_find_plt_findfre_1_SOURCES) \
        $(testsuite_libsframe_find_plt_findfre_2_SOURCES)
 DIST_SOURCES = $(libsframe_la_SOURCES) \
        $(testsuite_libsframe_decode_be_flipping_SOURCES) \
+       $(testsuite_libsframe_decode_be_flipping_v3_SOURCES) \
        $(testsuite_libsframe_decode_frecnt_1_SOURCES) \
        $(testsuite_libsframe_decode_frecnt_2_SOURCES) \
        $(testsuite_libsframe_decode_frecnt_v2_SOURCES) \
        $(testsuite_libsframe_encode_encode_1_SOURCES) \
        $(testsuite_libsframe_find_findfre_1_SOURCES) \
+       $(testsuite_libsframe_find_findfre_flex_1_SOURCES) \
        $(testsuite_libsframe_find_findfunc_1_SOURCES) \
        $(testsuite_libsframe_find_plt_findfre_1_SOURCES) \
        $(testsuite_libsframe_find_plt_findfre_2_SOURCES)
@@ -569,6 +587,9 @@ testsuite_CPPFLAGS = -I$(srcdir)/testsuite -I$(srcdir)/../include
 testsuite_libsframe_decode_be_flipping_SOURCES = testsuite/libsframe.decode/be-flipping.c
 testsuite_libsframe_decode_be_flipping_LDADD = $(testsuite_LDADD)
 testsuite_libsframe_decode_be_flipping_CPPFLAGS = $(testsuite_CPPFLAGS)
+testsuite_libsframe_decode_be_flipping_v3_SOURCES = testsuite/libsframe.decode/be-flipping-v3.c
+testsuite_libsframe_decode_be_flipping_v3_LDADD = $(testsuite_LDADD)
+testsuite_libsframe_decode_be_flipping_v3_CPPFLAGS = $(testsuite_CPPFLAGS)
 testsuite_libsframe_decode_frecnt_1_SOURCES = testsuite/libsframe.decode/frecnt-1.c
 testsuite_libsframe_decode_frecnt_1_LDADD = $(testsuite_LDADD)
 testsuite_libsframe_decode_frecnt_1_CPPFLAGS = $(testsuite_CPPFLAGS)
@@ -584,6 +605,9 @@ testsuite_libsframe_encode_encode_1_CPPFLAGS = $(testsuite_CPPFLAGS)
 testsuite_libsframe_find_findfre_1_SOURCES = testsuite/libsframe.find/findfre-1.c
 testsuite_libsframe_find_findfre_1_LDADD = $(testsuite_LDADD)
 testsuite_libsframe_find_findfre_1_CPPFLAGS = $(testsuite_CPPFLAGS)
+testsuite_libsframe_find_findfre_flex_1_SOURCES = testsuite/libsframe.find/findfre-flex-1.c
+testsuite_libsframe_find_findfre_flex_1_LDADD = $(testsuite_LDADD)
+testsuite_libsframe_find_findfre_flex_1_CPPFLAGS = $(testsuite_CPPFLAGS)
 testsuite_libsframe_find_findfunc_1_SOURCES = testsuite/libsframe.find/findfunc-1.c
 testsuite_libsframe_find_findfunc_1_LDADD = $(testsuite_LDADD)
 testsuite_libsframe_find_findfunc_1_CPPFLAGS = $(testsuite_CPPFLAGS)
@@ -718,6 +742,13 @@ testsuite/libsframe.decode/testsuite_libsframe_decode_be_flipping-be-flipping.$(
 testsuite/libsframe.decode/be-flipping$(EXEEXT): $(testsuite_libsframe_decode_be_flipping_OBJECTS) $(testsuite_libsframe_decode_be_flipping_DEPENDENCIES) $(EXTRA_testsuite_libsframe_decode_be_flipping_DEPENDENCIES) testsuite/libsframe.decode/$(am__dirstamp)
        @rm -f testsuite/libsframe.decode/be-flipping$(EXEEXT)
        $(AM_V_CCLD)$(LINK) $(testsuite_libsframe_decode_be_flipping_OBJECTS) $(testsuite_libsframe_decode_be_flipping_LDADD) $(LIBS)
+testsuite/libsframe.decode/testsuite_libsframe_decode_be_flipping_v3-be-flipping-v3.$(OBJEXT):  \
+       testsuite/libsframe.decode/$(am__dirstamp) \
+       testsuite/libsframe.decode/$(DEPDIR)/$(am__dirstamp)
+
+testsuite/libsframe.decode/be-flipping-v3$(EXEEXT): $(testsuite_libsframe_decode_be_flipping_v3_OBJECTS) $(testsuite_libsframe_decode_be_flipping_v3_DEPENDENCIES) $(EXTRA_testsuite_libsframe_decode_be_flipping_v3_DEPENDENCIES) testsuite/libsframe.decode/$(am__dirstamp)
+       @rm -f testsuite/libsframe.decode/be-flipping-v3$(EXEEXT)
+       $(AM_V_CCLD)$(LINK) $(testsuite_libsframe_decode_be_flipping_v3_OBJECTS) $(testsuite_libsframe_decode_be_flipping_v3_LDADD) $(LIBS)
 testsuite/libsframe.decode/testsuite_libsframe_decode_frecnt_1-frecnt-1.$(OBJEXT):  \
        testsuite/libsframe.decode/$(am__dirstamp) \
        testsuite/libsframe.decode/$(DEPDIR)/$(am__dirstamp)
@@ -765,6 +796,13 @@ testsuite/libsframe.find/testsuite_libsframe_find_findfre_1-findfre-1.$(OBJEXT):
 testsuite/libsframe.find/findfre-1$(EXEEXT): $(testsuite_libsframe_find_findfre_1_OBJECTS) $(testsuite_libsframe_find_findfre_1_DEPENDENCIES) $(EXTRA_testsuite_libsframe_find_findfre_1_DEPENDENCIES) testsuite/libsframe.find/$(am__dirstamp)
        @rm -f testsuite/libsframe.find/findfre-1$(EXEEXT)
        $(AM_V_CCLD)$(LINK) $(testsuite_libsframe_find_findfre_1_OBJECTS) $(testsuite_libsframe_find_findfre_1_LDADD) $(LIBS)
+testsuite/libsframe.find/testsuite_libsframe_find_findfre_flex_1-findfre-flex-1.$(OBJEXT):  \
+       testsuite/libsframe.find/$(am__dirstamp) \
+       testsuite/libsframe.find/$(DEPDIR)/$(am__dirstamp)
+
+testsuite/libsframe.find/findfre-flex-1$(EXEEXT): $(testsuite_libsframe_find_findfre_flex_1_OBJECTS) $(testsuite_libsframe_find_findfre_flex_1_DEPENDENCIES) $(EXTRA_testsuite_libsframe_find_findfre_flex_1_DEPENDENCIES) testsuite/libsframe.find/$(am__dirstamp)
+       @rm -f testsuite/libsframe.find/findfre-flex-1$(EXEEXT)
+       $(AM_V_CCLD)$(LINK) $(testsuite_libsframe_find_findfre_flex_1_OBJECTS) $(testsuite_libsframe_find_findfre_flex_1_LDADD) $(LIBS)
 testsuite/libsframe.find/testsuite_libsframe_find_findfunc_1-findfunc-1.$(OBJEXT):  \
        testsuite/libsframe.find/$(am__dirstamp) \
        testsuite/libsframe.find/$(DEPDIR)/$(am__dirstamp)
@@ -800,11 +838,13 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libsframe_la-sframe-error.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libsframe_la-sframe.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@testsuite/libsframe.decode/$(DEPDIR)/testsuite_libsframe_decode_be_flipping-be-flipping.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@testsuite/libsframe.decode/$(DEPDIR)/testsuite_libsframe_decode_be_flipping_v3-be-flipping-v3.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@testsuite/libsframe.decode/$(DEPDIR)/testsuite_libsframe_decode_frecnt_1-frecnt-1.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@testsuite/libsframe.decode/$(DEPDIR)/testsuite_libsframe_decode_frecnt_2-frecnt-2.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@testsuite/libsframe.decode/$(DEPDIR)/testsuite_libsframe_decode_frecnt_v2-frecnt-v2.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@testsuite/libsframe.encode/$(DEPDIR)/testsuite_libsframe_encode_encode_1-encode-1.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@testsuite/libsframe.find/$(DEPDIR)/testsuite_libsframe_find_findfre_1-findfre-1.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@testsuite/libsframe.find/$(DEPDIR)/testsuite_libsframe_find_findfre_flex_1-findfre-flex-1.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@testsuite/libsframe.find/$(DEPDIR)/testsuite_libsframe_find_findfunc_1-findfunc-1.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@testsuite/libsframe.find/$(DEPDIR)/testsuite_libsframe_find_plt_findfre_1-plt-findfre-1.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@testsuite/libsframe.find/$(DEPDIR)/testsuite_libsframe_find_plt_findfre_2-plt-findfre-2.Po@am__quote@
@@ -868,6 +908,20 @@ testsuite/libsframe.decode/testsuite_libsframe_decode_be_flipping-be-flipping.ob
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(testsuite_libsframe_decode_be_flipping_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o testsuite/libsframe.decode/testsuite_libsframe_decode_be_flipping-be-flipping.obj `if test -f 'testsuite/libsframe.decode/be-flipping.c'; then $(CYGPATH_W) 'testsuite/libsframe.decode/be-flipping.c'; else $(CYGPATH_W) '$(srcdir)/testsuite/libsframe.decode/be-flipping.c'; fi`
 
+testsuite/libsframe.decode/testsuite_libsframe_decode_be_flipping_v3-be-flipping-v3.o: testsuite/libsframe.decode/be-flipping-v3.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(testsuite_libsframe_decode_be_flipping_v3_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT testsuite/libsframe.decode/testsuite_libsframe_decode_be_flipping_v3-be-flipping-v3.o -MD -MP -MF testsuite/libsframe.decode/$(DEPDIR)/testsuite_libsframe_decode_be_flipping_v3-be-flipping-v3.Tpo -c -o testsuite/libsframe.decode/testsuite_libsframe_decode_be_flipping_v3-be-flipping-v3.o `test -f 'testsuite/libsframe.decode/be-flipping-v3.c' || echo '$(srcdir)/'`testsuite/libsframe.decode/be-flipping-v3.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) testsuite/libsframe.decode/$(DEPDIR)/testsuite_libsframe_decode_be_flipping_v3-be-flipping-v3.Tpo testsuite/libsframe.decode/$(DEPDIR)/testsuite_libsframe_decode_be_flipping_v3-be-flipping-v3.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='testsuite/libsframe.decode/be-flipping-v3.c' object='testsuite/libsframe.decode/testsuite_libsframe_decode_be_flipping_v3-be-flipping-v3.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(testsuite_libsframe_decode_be_flipping_v3_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o testsuite/libsframe.decode/testsuite_libsframe_decode_be_flipping_v3-be-flipping-v3.o `test -f 'testsuite/libsframe.decode/be-flipping-v3.c' || echo '$(srcdir)/'`testsuite/libsframe.decode/be-flipping-v3.c
+
+testsuite/libsframe.decode/testsuite_libsframe_decode_be_flipping_v3-be-flipping-v3.obj: testsuite/libsframe.decode/be-flipping-v3.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(testsuite_libsframe_decode_be_flipping_v3_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT testsuite/libsframe.decode/testsuite_libsframe_decode_be_flipping_v3-be-flipping-v3.obj -MD -MP -MF testsuite/libsframe.decode/$(DEPDIR)/testsuite_libsframe_decode_be_flipping_v3-be-flipping-v3.Tpo -c -o testsuite/libsframe.decode/testsuite_libsframe_decode_be_flipping_v3-be-flipping-v3.obj `if test -f 'testsuite/libsframe.decode/be-flipping-v3.c'; then $(CYGPATH_W) 'testsuite/libsframe.decode/be-flipping-v3.c'; else $(CYGPATH_W) '$(srcdir)/testsuite/libsframe.decode/be-flipping-v3.c'; fi`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) testsuite/libsframe.decode/$(DEPDIR)/testsuite_libsframe_decode_be_flipping_v3-be-flipping-v3.Tpo testsuite/libsframe.decode/$(DEPDIR)/testsuite_libsframe_decode_be_flipping_v3-be-flipping-v3.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='testsuite/libsframe.decode/be-flipping-v3.c' object='testsuite/libsframe.decode/testsuite_libsframe_decode_be_flipping_v3-be-flipping-v3.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(testsuite_libsframe_decode_be_flipping_v3_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o testsuite/libsframe.decode/testsuite_libsframe_decode_be_flipping_v3-be-flipping-v3.obj `if test -f 'testsuite/libsframe.decode/be-flipping-v3.c'; then $(CYGPATH_W) 'testsuite/libsframe.decode/be-flipping-v3.c'; else $(CYGPATH_W) '$(srcdir)/testsuite/libsframe.decode/be-flipping-v3.c'; fi`
+
 testsuite/libsframe.decode/testsuite_libsframe_decode_frecnt_1-frecnt-1.o: testsuite/libsframe.decode/frecnt-1.c
 @am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(testsuite_libsframe_decode_frecnt_1_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT testsuite/libsframe.decode/testsuite_libsframe_decode_frecnt_1-frecnt-1.o -MD -MP -MF testsuite/libsframe.decode/$(DEPDIR)/testsuite_libsframe_decode_frecnt_1-frecnt-1.Tpo -c -o testsuite/libsframe.decode/testsuite_libsframe_decode_frecnt_1-frecnt-1.o `test -f 'testsuite/libsframe.decode/frecnt-1.c' || echo '$(srcdir)/'`testsuite/libsframe.decode/frecnt-1.c
 @am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) testsuite/libsframe.decode/$(DEPDIR)/testsuite_libsframe_decode_frecnt_1-frecnt-1.Tpo testsuite/libsframe.decode/$(DEPDIR)/testsuite_libsframe_decode_frecnt_1-frecnt-1.Po
@@ -938,6 +992,20 @@ testsuite/libsframe.find/testsuite_libsframe_find_findfre_1-findfre-1.obj: tests
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(testsuite_libsframe_find_findfre_1_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o testsuite/libsframe.find/testsuite_libsframe_find_findfre_1-findfre-1.obj `if test -f 'testsuite/libsframe.find/findfre-1.c'; then $(CYGPATH_W) 'testsuite/libsframe.find/findfre-1.c'; else $(CYGPATH_W) '$(srcdir)/testsuite/libsframe.find/findfre-1.c'; fi`
 
+testsuite/libsframe.find/testsuite_libsframe_find_findfre_flex_1-findfre-flex-1.o: testsuite/libsframe.find/findfre-flex-1.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(testsuite_libsframe_find_findfre_flex_1_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT testsuite/libsframe.find/testsuite_libsframe_find_findfre_flex_1-findfre-flex-1.o -MD -MP -MF testsuite/libsframe.find/$(DEPDIR)/testsuite_libsframe_find_findfre_flex_1-findfre-flex-1.Tpo -c -o testsuite/libsframe.find/testsuite_libsframe_find_findfre_flex_1-findfre-flex-1.o `test -f 'testsuite/libsframe.find/findfre-flex-1.c' || echo '$(srcdir)/'`testsuite/libsframe.find/findfre-flex-1.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) testsuite/libsframe.find/$(DEPDIR)/testsuite_libsframe_find_findfre_flex_1-findfre-flex-1.Tpo testsuite/libsframe.find/$(DEPDIR)/testsuite_libsframe_find_findfre_flex_1-findfre-flex-1.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='testsuite/libsframe.find/findfre-flex-1.c' object='testsuite/libsframe.find/testsuite_libsframe_find_findfre_flex_1-findfre-flex-1.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(testsuite_libsframe_find_findfre_flex_1_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o testsuite/libsframe.find/testsuite_libsframe_find_findfre_flex_1-findfre-flex-1.o `test -f 'testsuite/libsframe.find/findfre-flex-1.c' || echo '$(srcdir)/'`testsuite/libsframe.find/findfre-flex-1.c
+
+testsuite/libsframe.find/testsuite_libsframe_find_findfre_flex_1-findfre-flex-1.obj: testsuite/libsframe.find/findfre-flex-1.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(testsuite_libsframe_find_findfre_flex_1_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT testsuite/libsframe.find/testsuite_libsframe_find_findfre_flex_1-findfre-flex-1.obj -MD -MP -MF testsuite/libsframe.find/$(DEPDIR)/testsuite_libsframe_find_findfre_flex_1-findfre-flex-1.Tpo -c -o testsuite/libsframe.find/testsuite_libsframe_find_findfre_flex_1-findfre-flex-1.obj `if test -f 'testsuite/libsframe.find/findfre-flex-1.c'; then $(CYGPATH_W) 'testsuite/libsframe.find/findfre-flex-1.c'; else $(CYGPATH_W) '$(srcdir)/testsuite/libsframe.find/findfre-flex-1.c'; fi`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) testsuite/libsframe.find/$(DEPDIR)/testsuite_libsframe_find_findfre_flex_1-findfre-flex-1.Tpo testsuite/libsframe.find/$(DEPDIR)/testsuite_libsframe_find_findfre_flex_1-findfre-flex-1.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='testsuite/libsframe.find/findfre-flex-1.c' object='testsuite/libsframe.find/testsuite_libsframe_find_findfre_flex_1-findfre-flex-1.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(testsuite_libsframe_find_findfre_flex_1_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o testsuite/libsframe.find/testsuite_libsframe_find_findfre_flex_1-findfre-flex-1.obj `if test -f 'testsuite/libsframe.find/findfre-flex-1.c'; then $(CYGPATH_W) 'testsuite/libsframe.find/findfre-flex-1.c'; else $(CYGPATH_W) '$(srcdir)/testsuite/libsframe.find/findfre-flex-1.c'; fi`
+
 testsuite/libsframe.find/testsuite_libsframe_find_findfunc_1-findfunc-1.o: testsuite/libsframe.find/findfunc-1.c
 @am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(testsuite_libsframe_find_findfunc_1_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT testsuite/libsframe.find/testsuite_libsframe_find_findfunc_1-findfunc-1.o -MD -MP -MF testsuite/libsframe.find/$(DEPDIR)/testsuite_libsframe_find_findfunc_1-findfunc-1.Tpo -c -o testsuite/libsframe.find/testsuite_libsframe_find_findfunc_1-findfunc-1.o `test -f 'testsuite/libsframe.find/findfunc-1.c' || echo '$(srcdir)/'`testsuite/libsframe.find/findfunc-1.c
 @am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) testsuite/libsframe.find/$(DEPDIR)/testsuite_libsframe_find_findfunc_1-findfunc-1.Tpo testsuite/libsframe.find/$(DEPDIR)/testsuite_libsframe_find_findfunc_1-findfunc-1.Po
diff --git a/libsframe/testsuite/libsframe.decode/DATA-BE-V3 b/libsframe/testsuite/libsframe.decode/DATA-BE-V3
new file mode 100644 (file)
index 0000000..2266b9a
Binary files /dev/null and b/libsframe/testsuite/libsframe.decode/DATA-BE-V3 differ
diff --git a/libsframe/testsuite/libsframe.decode/README-be-flipping-v3 b/libsframe/testsuite/libsframe.decode/README-be-flipping-v3
new file mode 100644 (file)
index 0000000..22d1c68
--- /dev/null
@@ -0,0 +1,58 @@
+$ cat be-flipping-v3.s
+       .text
+       .type bar, @function
+bar:
+       .cfi_sections
+       .cfi_startproc
+       ldgr    %f0,%r14
+       .cfi_register 14, 16
+       ldgr    %f2,%r11
+       .cfi_register 11, 17
+       la      %r11,0
+       la      %r14,0
+.Lreturn:
+       lgdr    %r11,%f2
+       .cfi_restore 11
+       lgdr    %r14,%f0
+       .cfi_restore 14
+       br      %r14
+       .cfi_endproc
+       .size   bar,.-bar
+
+       .globl  _start
+       .type   _start, @function
+_start:
+       brasl   %r14,bar@PLT
+       .size   _start,.-_start
+
+$ s390x-ibm-linux-gnu-as --gsframe-3 -o be-flipping-v3.o be-flipping-v3.s
+
+Although running ld is not strictly necessary for the current set of tests, it
+is being done in case future testing desires invoking sframe_find_fre ().
+SFrame FDE lookup APIs in libsframe currently implement binary search of index
+entires (and check for SFRAME_F_FDE_SORTED).
+
+$ s390x-ibm-linux-gnu-ld be-flipping-v3.o -o be-flipping-v3
+$ s390x-ibm-linux-gnu-objdump --sframe be-flipping-v3
+
+be-flipping-v3:     file format elf64-s390
+
+Contents of the SFrame section .sframe:
+  Header :
+
+    Version: SFRAME_VERSION_3
+    Flags: SFRAME_F_FDE_SORTED,
+           SFRAME_F_FDE_FUNC_START_PCREL
+    Num FDEs: 1
+    Num FREs: 5
+
+  Function Index :
+
+    func idx [0]: pc = 0x10000b0, size = 26 bytes, attr = "F"
+    STARTPC         CFA       FP        RA
+    00000000010000b0  sp+160    u         u
+    00000000010000b4  sp+160    u         r16+0
+    00000000010000b8  sp+160    r17+0     r16+0
+    00000000010000c4  sp+160    u         r16+0
+    00000000010000c8  sp+160    u         u
+$ s390x-ibm-linux-gnu-objcopy --dump-section .sframe=DATA-BE-V3 be-flipping-v3
diff --git a/libsframe/testsuite/libsframe.decode/be-flipping-v3.c b/libsframe/testsuite/libsframe.decode/be-flipping-v3.c
new file mode 100644 (file)
index 0000000..f573c4b
--- /dev/null
@@ -0,0 +1,118 @@
+/* be-flipping-v3.c -- Test for handling different endianness for SFrame V3
+   flex FDE in libsframe.
+
+   Copyright (C) 2026 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+#include "sframe-test.h"
+
+/* SFrame info from the source specified in README-be-flipping-v3.  It contains
+   one flex FDE with 5 FREs.  */
+#define DATA   "DATA-BE-V3"
+
+int
+main (void)
+{
+  sframe_decoder_ctx *dctx = NULL;
+  uint32_t nfres, fsize;
+  int32_t fstart;
+  unsigned char finfo;
+  int err = 0, err_reg_data = 0;
+  uint32_t reg_data = 0;
+
+  FILE *fp;
+  struct stat st;
+  char *sf_buf;
+  size_t sf_size;
+  uint8_t rep_block_size;
+
+  /* Test setup.  */
+  fp = fopen (DATA, "r");
+  if (fp == NULL)
+    goto setup_fail;
+  if (fstat (fileno (fp), &st) < 0)
+    {
+      perror ("fstat");
+      fclose (fp);
+      goto setup_fail;
+    }
+  sf_buf = malloc (st.st_size);
+  if (sf_buf == NULL)
+    {
+      perror ("malloc");
+      goto setup_fail;
+    }
+  sf_size = fread (sf_buf, 1, st.st_size, fp);
+  fclose (fp);
+  if (sf_size == 0)
+    {
+      fprintf (stderr, "Decode: Read buffer failed\n");
+      goto setup_fail;
+    }
+
+  uint32_t dfde = SFRAME_FDE_TYPE_FLEX;
+  /* Execute tests.  */
+
+  /* Call to sframe_decode will endian flip the input buffer (big-endian) if
+     the host running the test is a little-endian system.  This endian-flipped
+     copy of the buffer is kept internally in dctx.  */
+  dctx = sframe_decode (sf_buf, sf_size, &err);
+  TEST (dctx != NULL, "be-flipping-v3: Decoder setup");
+
+  unsigned int fde_cnt = sframe_decoder_get_num_fidx (dctx);
+  TEST (fde_cnt == 1, "be-flipping-v3: Decoder FDE count");
+
+  err = sframe_decoder_get_funcdesc_v2 (dctx, 0, &nfres, &fsize, &fstart,
+                                       &finfo, &rep_block_size);
+  TEST (err == 0, "be-flipping-v3: Decoder get FDE");
+  TEST (nfres == 5, "be-flipping-v3: Decoder FRE count");
+
+  /* Get the FRE at index 2.  */
+  sframe_frame_row_entry fre = {0};
+  err = sframe_decoder_get_fre (dctx, 0, 2, &fre);
+  TEST (err == 0, "be-flipping-v3: Decoder get third FRE");
+
+  /* Expected CFA offset of 160.  */
+  TEST ((err == 0 && sframe_fre_get_cfa_offset (dctx, &fre, dfde, &err) == 0xa0),
+       "be-flipping-v3: Get CFA offset of third FRE");
+
+  /* Expected RA reg r16.  */
+  reg_data = sframe_get_fre_udata (&fre, SFRAME_FRE_RA_OFFSET_IDX * 2,
+                                  &err_reg_data);
+  TEST ((err_reg_data == 0 && SFRAME_V3_FLEX_FDE_OFFSET_REG_P (reg_data) == 0x1),
+       "be-flipping-v3: Whether RA reg_p is true");
+  TEST ((err_reg_data == 0 && SFRAME_V3_FLEX_FDE_OFFSET_REG_NUM (reg_data) == 16),
+       "be-flipping-v3: Get RA reg of third FRE");
+
+  /* Expected FP reg r17.  */
+  err_reg_data = 0;
+  reg_data = sframe_get_fre_udata (&fre, SFRAME_FRE_FP_OFFSET_IDX * 2,
+                                  &err_reg_data);
+  TEST ((err_reg_data == 0 && SFRAME_V3_FLEX_FDE_OFFSET_REG_P (reg_data) == 0x1),
+       "be-flipping-v3: Whether FP reg_p is true");
+  TEST ((err_reg_data == 0 && SFRAME_V3_FLEX_FDE_OFFSET_REG_NUM (reg_data) == 17),
+       "be-flipping-v3: Get FP reg of third FRE");
+
+  free (sf_buf);
+  sf_buf = NULL;
+
+  sframe_decoder_free (&dctx);
+  return 0;
+
+setup_fail:
+  sframe_decoder_free (&dctx);
+  fail ("be-flipping-v3: Test setup");
+  return 1;
+}
index 37a2726285827caf0590150ed916bfe79a046fab..9afc9d21b0c84c2174c9f9664d22dd8c3d7f3693 100644 (file)
@@ -33,11 +33,16 @@ catch "exec ln -s $srcdir/libsframe.decode/DATA1 ." status
 catch "exec ln -s $srcdir/libsframe.decode/DATA2 ." status
 catch "exec ln -s $srcdir/libsframe.decode/DATA-V2 ." status
 catch "exec ln -s $srcdir/libsframe.decode/DATA-BE ." status
+catch "exec ln -s $srcdir/libsframe.decode/DATA-BE-V3 ." status
 
 if { [host_execute "testsuite/libsframe.decode/be-flipping"] ne "" } {
     fail "be-flipping"
 }
 
+if { [host_execute "testsuite/libsframe.decode/be-flipping-v3"] ne "" } {
+    fail "be-flipping-v3"
+}
+
 if { [host_execute "testsuite/libsframe.decode/frecnt-1"] ne "" } {
     fail "frecnt-1"
 }
@@ -54,3 +59,4 @@ catch "exec rm DATA1" status
 catch "exec rm DATA2" status
 catch "exec rm DATA-V2" status
 catch "exec rm DATA-BE" status
+catch "exec rm DATA-BE-V3" status
index aacbfdcfdd198b813e82a85b6431575a930d70c0..5976edd5fbed356de5e71c31ce786e7c036ec5fe 100644 (file)
@@ -1,12 +1,17 @@
 check_PROGRAMS =
 if HAVE_COMPAT_DEJAGNU
-  check_PROGRAMS += %D%/be-flipping %D%/frecnt-1 %D%/frecnt-2 %D%/frecnt-v2
+  check_PROGRAMS += %D%/be-flipping %D%/be-flipping-v3 \
+                    %D%/frecnt-1 %D%/frecnt-2 %D%/frecnt-v2
 endif
 
 %C%_be_flipping_SOURCES = %D%/be-flipping.c
 %C%_be_flipping_LDADD = $(testsuite_LDADD)
 %C%_be_flipping_CPPFLAGS = $(testsuite_CPPFLAGS)
 
+%C%_be_flipping_v3_SOURCES = %D%/be-flipping-v3.c
+%C%_be_flipping_v3_LDADD = $(testsuite_LDADD)
+%C%_be_flipping_v3_CPPFLAGS = $(testsuite_CPPFLAGS)
+
 %C%_frecnt_1_SOURCES = %D%/frecnt-1.c
 %C%_frecnt_1_LDADD = $(testsuite_LDADD)
 %C%_frecnt_1_CPPFLAGS = $(testsuite_CPPFLAGS)
index bbe9e1f4623082976c5d066c9cd080b14096411d..52494f3ec408460ee1b36ea85dc034103b50a83d 100644 (file)
@@ -34,6 +34,10 @@ if { [host_execute "testsuite/libsframe.find/findfre-1"] ne "" } {
     fail "findfre-1"
 }
 
+if { [host_execute "testsuite/libsframe.find/findfre-flex-1"] ne "" } {
+    fail "findfre-flex-1"
+}
+
 if { [host_execute "testsuite/libsframe.find/findfunc-1"] ne "" } {
     fail "findfunc-1"
 }
diff --git a/libsframe/testsuite/libsframe.find/findfre-flex-1.c b/libsframe/testsuite/libsframe.find/findfre-flex-1.c
new file mode 100644 (file)
index 0000000..6cb7385
--- /dev/null
@@ -0,0 +1,205 @@
+/* findfre-flex-1.c -- Test for sframe_find_fre and access APIs for
+   SFRAME_FDE_TYPE_FLEX in libsframe.
+
+   Copyright (C) 2026 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+#include "sframe-test.h"
+
+static int
+add_fde1 (sframe_encoder_ctx *encode, int64_t start_pc_vaddr,
+         int64_t sframe_vaddr, int idx, uint32_t *func_size)
+{
+  /* A contiguous block containing 6 FREs which look like:
+       func idx [0]: pc = 0x0, size = 95 bytes, attr = "F"
+       STARTPC         CFA       FP        RA
+       0000000000000000  sp+8      u         f
+       0000000000000009  r10+0     u         f
+       0000000000000018  r10+0     (fp+0)    U
+       000000000000001a  (fp-8)    (fp+0)    U
+       0000000000000052  r10+0     (fp+0)    U
+       000000000000005e  sp+8      (fp+0)    U  */
+#define FDE1_NUM_FRES    6
+  sframe_frame_row_entry fres[FDE1_NUM_FRES]
+    = { {0x0, {0x39, 0x08}, 0x4},
+       {0x9, {0x51, 0x0}, 0x4},
+       {0x18, {0x51, 0x0, 0x0, 0x33, 0x0}, 0xa},
+       {0x1a, {0x33, 0xf8, 0x0, 0x33, 0x0}, 0xa},
+       {0x52, {0x51, 0x0, 0x0, 0x33, 0x0}, 0xa},
+       {0x5e, {0x39, 0x08, 0x0, 0x33, 0x0}, 0xa}
+      };
+ /* Function size in bytes.  P.S. Must be a value greater than the
+    fre_start_addr of the last FRE above (0x5e).  */
+  *func_size = 0x5f;
+
+  uint32_t offsetof_fde_in_sec
+    = sframe_encoder_get_offsetof_fde_start_addr (encode, idx, NULL);
+  int64_t func1_start_addr = (start_pc_vaddr
+                             - (sframe_vaddr + offsetof_fde_in_sec));
+  unsigned char finfo = sframe_fde_create_func_info (SFRAME_FRE_TYPE_ADDR1,
+                                                    SFRAME_V3_FDE_PCTYPE_INC);
+  unsigned char finfo2 = 0;
+  finfo2 = SFRAME_V3_SET_FDE_TYPE (finfo2, SFRAME_FDE_TYPE_FLEX);
+  int err = sframe_encoder_add_funcdesc_v3 (encode, func1_start_addr,
+                                           *func_size, finfo, finfo2, 0,
+                                           FDE1_NUM_FRES);
+  if (err == -1)
+    return err;
+
+  for (unsigned int i = 0; i < FDE1_NUM_FRES; i++)
+    if (sframe_encoder_add_fre (encode, idx, fres + i) == SFRAME_ERR)
+      return -1;
+
+  return 0;
+}
+
+static int
+add_fde2 (sframe_encoder_ctx *encode, int64_t start_pc_vaddr,
+         int64_t sframe_vaddr, int idx, uint32_t *func_size)
+{
+  /* A contiguous block containing 3 FREs which look like:
+       func idx [0]: pc = 0x0, size = 7 bytes, attr = "F"
+       STARTPC         CFA       FP        RA
+       0000000000000000  sp+8      u         f
+       0000000000000004  sp+40     u         f
+       0000000000000005  sp+0      u         r2+0  */
+#define FDE2_NUM_FRES    3
+  sframe_frame_row_entry fres[FDE2_NUM_FRES]
+    = { {0x0, {0x39, 0x8, 0}, 0x4},
+       {0x4, {0x39, 0x28, 0}, 0x8},
+       {0x5, {0x39, 0x0, 0x11, 0x0}, 0x8}
+      };
+ /* Function size in bytes.  P.S. Must be a value greater than the
+    fre_start_addr of the last FRE above (0x5).  */
+  *func_size = 0x7;
+
+  uint32_t offsetof_fde_in_sec
+    = sframe_encoder_get_offsetof_fde_start_addr (encode, idx, NULL);
+  int64_t func2_start_addr = (start_pc_vaddr
+                             - (sframe_vaddr + offsetof_fde_in_sec));
+  unsigned char finfo = sframe_fde_create_func_info (SFRAME_FRE_TYPE_ADDR1,
+                                                    SFRAME_V3_FDE_PCTYPE_INC);
+  unsigned char finfo2 = 0;
+  finfo2 = SFRAME_V3_SET_FDE_TYPE (finfo2, SFRAME_FDE_TYPE_FLEX);
+  int err = sframe_encoder_add_funcdesc_v3 (encode, func2_start_addr,
+                                           *func_size, finfo, finfo2, 0,
+                                           FDE2_NUM_FRES);
+  if (err == -1)
+    return err;
+
+  for (unsigned int i = 0; i < FDE2_NUM_FRES; i++)
+    if (sframe_encoder_add_fre (encode, idx, fres + i) == SFRAME_ERR)
+      return -1;
+
+  return 0;
+}
+
+static
+void test_text_findfre (const char suffix, int64_t text_vaddr,
+                       int64_t sframe_vaddr)
+{
+  sframe_encoder_ctx *encode;
+  sframe_decoder_ctx *dctx;
+  sframe_frame_row_entry frep;
+  int64_t func1_start_vaddr;
+  int64_t func2_start_vaddr;
+  uint32_t func1_size = 0;
+  uint32_t func2_size = 0;
+  uint32_t fde_cnt = 0;
+  int64_t lookup_pc;
+  char *sframe_buf;
+  size_t sf_size;
+  int err = 0;
+  uint32_t dfde = SFRAME_FDE_TYPE_FLEX;
+
+  encode = sframe_encode (SFRAME_VERSION,
+                         SFRAME_F_FDE_FUNC_START_PCREL,
+                         SFRAME_ABI_AMD64_ENDIAN_LITTLE,
+                         SFRAME_CFA_FIXED_FP_INVALID,
+                         -8, /* Fixed RA offset for AMD64.  */
+                         &err);
+
+  func1_start_vaddr = text_vaddr;
+  err = add_fde1 (encode, func1_start_vaddr, sframe_vaddr, 0, &func1_size);
+  TEST (err == 0, "findfre-flex-1%c: Adding FDE1", suffix);
+
+  /* Function 2 is placed after 0x10 bytes from the end of Function 1.  */
+  func2_start_vaddr = func1_start_vaddr + func1_size + 0x10;
+  err = add_fde2 (encode, func2_start_vaddr, sframe_vaddr, 1, &func2_size);
+  TEST (err == 0, "findfre-flex-1%c: Adding FDE2", suffix);
+
+  fde_cnt = sframe_encoder_get_num_fidx (encode);
+  TEST (fde_cnt == 2, "findfre-flex-1%c: Test FDE count", suffix);
+
+  sframe_buf = sframe_encoder_write (encode, &sf_size, true, &err);
+  TEST (err == 0, "findfre-flex-1%c: Encoder write", suffix);
+
+  dctx = sframe_decode (sframe_buf, sf_size, &err);
+  TEST (dctx != NULL, "findfre-flex-1%c: Decoder setup", suffix);
+
+  /* Find the third FRE in first FDE.  */
+  lookup_pc = func1_start_vaddr + 0x19 - sframe_vaddr;
+  err = sframe_find_fre (dctx, lookup_pc, &frep);
+  TEST ((err == 0 && sframe_fre_get_fp_offset (dctx, &frep, dfde, &err) == 0x0),
+       "findfre-flex-1%c: Find third FRE in FDE1", suffix);
+
+  /* Find an FRE for PC at the end of range covered by FRE.  */
+  lookup_pc = func1_start_vaddr + 0x8 - sframe_vaddr;
+  err = sframe_find_fre (dctx, lookup_pc, &frep);
+  TEST ((err == 0 && sframe_fre_get_cfa_offset (dctx, &frep, dfde, &err) == 0x8),
+       "findfre-flex-1%c: Find FRE for last PC covered by FRE", suffix);
+
+  /* Find the last FRE in first FDE.  */
+  lookup_pc = func1_start_vaddr + 0x5e - sframe_vaddr;
+  err = sframe_find_fre (dctx, lookup_pc, &frep);
+  TEST ((err == 0 && sframe_fre_get_cfa_offset (dctx, &frep, dfde, &err) == 0x8),
+       "findfre-flex-1%c: Find last FRE", suffix);
+
+  /* Find the second FRE in second FDE.  */
+  lookup_pc = func2_start_vaddr + 0x4 - sframe_vaddr;
+  err = sframe_find_fre (dctx, lookup_pc, &frep);
+  TEST ((err == 0 && sframe_fre_get_cfa_offset (dctx, &frep, dfde, &err) == 0x28),
+       "findfre-flex-1%c: Find second FRE", suffix);
+
+  /* Find the third FRE in second FDE.  */
+  lookup_pc = func2_start_vaddr + 0x5 - sframe_vaddr;
+  err = sframe_find_fre (dctx, lookup_pc, &frep);
+  TEST ((err == 0 && sframe_fre_get_ra_offset (dctx, &frep, dfde, &err) == 0x0),
+       "findfre-flex-1%c: Find third FRE in FDE2", suffix);
+
+  /* Find FRE for PC out of range.  Expect error code.  */
+  lookup_pc = func1_start_vaddr + func1_size - sframe_vaddr;
+  err = sframe_find_fre (dctx, lookup_pc, &frep);
+  TEST (err == SFRAME_ERR,
+       "findfre-flex-1%c: Find FRE for out of range PC", suffix);
+
+  sframe_encoder_free (&encode);
+  sframe_decoder_free (&dctx);
+}
+
+int main (void)
+{
+  int64_t sframe_vaddr = 0x402220;
+  int64_t text_vaddr = 0x401020;
+  printf ("Testing with text_vaddr = %#lx; sframe_vaddr = %#lx\n", text_vaddr,
+         sframe_vaddr);
+  test_text_findfre ('a', text_vaddr, sframe_vaddr);
+
+  sframe_vaddr = 0x401020;
+  text_vaddr = 0x402220;
+  printf ("Testing with text_vaddr = %#lx; sframe_vaddr = %#lx\n", text_vaddr,
+         sframe_vaddr);
+  test_text_findfre ('b', text_vaddr, sframe_vaddr);
+}
index 05c7a10a8db045c362bc30eb47502c1084222951..30b06b16a1e9bada83cdc90e220451bc54a33005 100644 (file)
@@ -1,5 +1,5 @@
 if HAVE_COMPAT_DEJAGNU
-  check_PROGRAMS += %D%/findfre-1 %D%/findfunc-1 %D%/plt-findfre-1
+  check_PROGRAMS += %D%/findfre-1 %D%/findfre-flex-1 %D%/findfunc-1 %D%/plt-findfre-1
   check_PROGRAMS += %D%/plt-findfre-2
 endif
 
@@ -7,6 +7,10 @@ endif
 %C%_findfre_1_LDADD = $(testsuite_LDADD)
 %C%_findfre_1_CPPFLAGS = $(testsuite_CPPFLAGS)
 
+%C%_findfre_flex_1_SOURCES = %D%/findfre-flex-1.c
+%C%_findfre_flex_1_LDADD = $(testsuite_LDADD)
+%C%_findfre_flex_1_CPPFLAGS = $(testsuite_CPPFLAGS)
+
 %C%_findfunc_1_SOURCES = %D%/findfunc-1.c
 %C%_findfunc_1_LDADD = $(testsuite_LDADD)
 %C%_findfunc_1_CPPFLAGS = $(testsuite_CPPFLAGS)