aboutsummaryrefslogtreecommitdiff
path: root/libsframe/testsuite/libsframe.encode/encode-1.c
diff options
context:
space:
mode:
Diffstat (limited to 'libsframe/testsuite/libsframe.encode/encode-1.c')
-rw-r--r--libsframe/testsuite/libsframe.encode/encode-1.c70
1 files changed, 45 insertions, 25 deletions
diff --git a/libsframe/testsuite/libsframe.encode/encode-1.c b/libsframe/testsuite/libsframe.encode/encode-1.c
index 1ba75d7..da477e5 100644
--- a/libsframe/testsuite/libsframe.encode/encode-1.c
+++ b/libsframe/testsuite/libsframe.encode/encode-1.c
@@ -15,22 +15,13 @@
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 "config.h"
-
-#include <stdlib.h>
-#include <string.h>
-#include <sys/stat.h>
-
-#include "sframe-api.h"
-
-/* DejaGnu should not use gnulib's vsnprintf replacement here. */
-#undef vsnprintf
-#include <dejagnu.h>
+#include "sframe-test.h"
static int
-add_fde1 (sframe_encoder_ctx *encode, int idx)
+add_fde1 (sframe_encoder_ctx *encode, uint32_t start_pc_vaddr,
+ uint32_t sframe_vaddr, int idx, uint32_t *func_size)
{
- int i, err;
+#define FDE1_NUM_FRES 4
/* A contiguous block containing 4 FREs. */
sframe_frame_row_entry fres[]
= { {0x0, {0x8, 0, 0}, 0x3},
@@ -38,40 +29,60 @@ add_fde1 (sframe_encoder_ctx *encode, int idx)
{0x4, {0x10, 0xf0, 0}, 0x4},
{0x1a, {0x8, 0xf0, 0}, 0x5}
};
-
+ /* Function size in bytes. P.S. Must be a value greater than the
+ fre_start_addr of the last FRE above (0x1a). */
+ *func_size = 0x1b;
+
+ uint32_t offsetof_fde_in_sec
+ = sframe_encoder_get_offsetof_fde_start_addr (encode, idx, NULL);
+ int32_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_FDE_TYPE_PCINC);
- err = sframe_encoder_add_funcdesc (encode, 0xfffff022, 0x1b, finfo, 4);
+ int err = sframe_encoder_add_funcdesc_v2 (encode, func1_start_addr,
+ *func_size, finfo, 0,
+ FDE1_NUM_FRES);
if (err == -1)
return err;
- for (i = 0; i < 4; i++)
- if (sframe_encoder_add_fre (encode, idx,fres+i) == SFRAME_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, int idx)
+add_fde2 (sframe_encoder_ctx *encode, uint32_t start_pc_vaddr,
+ uint32_t sframe_vaddr, int idx, uint32_t *func_size)
+
{
- int i, err;
/* A contiguous block containing 4 FREs. */
+#define FDE2_NUM_FRES 4
sframe_frame_row_entry fres[]
= { {0x0, {0x8, 0, 0}, 0x3},
{0x1, {0x10, 0xf0, 0}, 0x5},
{0x4, {0x10, 0xf0, 0}, 0x4},
{0xf, {0x8, 0xf0, 0}, 0x5}
};
-
+ /* Function size in bytes. P.S. Must be a value greater than the
+ fre_start_addr of the last FRE above (0xf). */
+ *func_size = 0x10;
+
+ uint32_t offsetof_fde_in_sec
+ = sframe_encoder_get_offsetof_fde_start_addr (encode, idx, NULL);
+ int32_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_FDE_TYPE_PCINC);
- err = sframe_encoder_add_funcdesc (encode, 0xfffff029, 0x10, finfo, 4);
+ int err = sframe_encoder_add_funcdesc_v2 (encode, func1_start_addr,
+ *func_size, finfo, 0,
+ FDE1_NUM_FRES);
if (err == -1)
return err;
- for (i = 0; i < 4; i++)
- if (sframe_encoder_add_fre (encode, idx, fres+i) == SFRAME_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;
@@ -129,6 +140,11 @@ int main (void)
{
sframe_encoder_ctx *encode;
sframe_frame_row_entry frep;
+ uint32_t sframe_vaddr;
+ uint32_t func1_start_vaddr;
+ uint32_t func2_start_vaddr;
+ uint32_t func1_size = 0;
+ uint32_t func2_size = 0;
char *sframe_buf;
size_t sf_size;
int err = 0;
@@ -145,6 +161,7 @@ int main (void)
} \
while (0)
+ sframe_vaddr = 0x4020c8;
encode = sframe_encode (SFRAME_VERSION,
SFRAME_F_FDE_FUNC_START_PCREL,
SFRAME_ABI_AMD64_ENDIAN_LITTLE,
@@ -158,10 +175,13 @@ int main (void)
err = sframe_encoder_add_fre (encode, 1, &frep);
TEST ("encode-1: Encoder update workflow", err == SFRAME_ERR);
- err = add_fde1 (encode, 0);
+ func1_start_vaddr = 0x401106;
+ err = add_fde1 (encode, func1_start_vaddr, sframe_vaddr, 0, &func1_size);
TEST ("encode-1: Encoder adding FDE1", err == 0);
- err = add_fde2 (encode, 1);
+ /* Function 2 is placed after 0x0 bytes from the end of Function 1. */
+ func2_start_vaddr = func1_start_vaddr + func1_size + 0x0;
+ err = add_fde2 (encode, func2_start_vaddr, sframe_vaddr, 1, &func2_size);
TEST ("encode-1: Encoder adding FDE2", err == 0);
fde_cnt = sframe_encoder_get_num_fidx (encode);