mirror of
https://github.com/bminor/binutils-gdb.git
synced 2026-02-04 03:51:30 +00:00
[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:
@@ -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
|
||||
|
||||
BIN
libsframe/testsuite/libsframe.decode/DATA-BE-V3
Normal file
BIN
libsframe/testsuite/libsframe.decode/DATA-BE-V3
Normal file
Binary file not shown.
58
libsframe/testsuite/libsframe.decode/README-be-flipping-v3
Normal file
58
libsframe/testsuite/libsframe.decode/README-be-flipping-v3
Normal 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
|
||||
118
libsframe/testsuite/libsframe.decode/be-flipping-v3.c
Normal file
118
libsframe/testsuite/libsframe.decode/be-flipping-v3.c
Normal 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;
|
||||
}
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
|
||||
205
libsframe/testsuite/libsframe.find/findfre-flex-1.c
Normal file
205
libsframe/testsuite/libsframe.find/findfre-flex-1.c
Normal 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);
|
||||
}
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user