[SFrame-V3] libsframe: testsuite: add new testcases for SFRAME_FDE_TYPE_FLEX

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.
This commit is contained in:
Indu Bhagat
2026-01-15 16:44:03 -08:00
parent c1929fda66
commit 55575b6058
9 changed files with 470 additions and 2 deletions

View 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

Binary file not shown.

View File

@@ -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

View File

@@ -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;
}

View 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

View 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)

View 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"
}

View File

@@ -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);
}

View 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)