xref: /netbsd-src/external/gpl3/gdb/dist/libsframe/testsuite/libsframe.decode/frecnt-2.c (revision d16b7486a53dcb8072b60ec6fcb4373a2d0c27b7)
1 /* frecnt-2.c -- Test for decoder in libsframe.
2 
3    Copyright (C) 2022 Free Software Foundation, Inc.
4 
5    This program is free software; you can redistribute it and/or modify
6    it under the terms of the GNU General Public License as published by
7    the Free Software Foundation; either version 3 of the License, or
8    (at your option) any later version.
9 
10    This program is distributed in the hope that it will be useful,
11    but WITHOUT ANY WARRANTY; without even the implied warranty of
12    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13    GNU General Public License for more details.
14 
15    You should have received a copy of the GNU General Public License
16    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
17 
18 #include "config.h"
19 
20 #include <stdio.h>
21 #include <stdlib.h>
22 #include <sys/stat.h>
23 
24 #include "sframe-api.h"
25 
26 /* DejaGnu should not use gnulib's vsnprintf replacement here.  */
27 #undef vsnprintf
28 #include <dejagnu.h>
29 
30 /*
31  * SFrame info from the following source (2 fde 8 fres):
32  * static int cnt;
33  * int foo() { return ++cnt; }
34  * int main() { return foo(); }
35  */
36 #define DATA	"DATA2"
37 
38 int
39 main (void)
40 {
41   sframe_decoder_ctx *dctx = NULL;
42   uint32_t nfres, fsize;
43   int32_t fstart;
44   unsigned char finfo;
45   unsigned int i;
46   int err = 0;
47   FILE *fp;
48   struct stat st;
49   char *sf_buf;
50   size_t sf_size;
51 
52 #define TEST(name, cond)                                                      \
53   do                                                                          \
54     {                                                                         \
55       if (cond)                                                               \
56 	pass (name);                                                          \
57       else                                                                    \
58 	fail (name);                                                          \
59     }                                                                         \
60     while (0)
61 
62   fp = fopen (DATA, "r");
63   if (fp == NULL)
64     goto setup_fail;
65   if (fstat (fileno (fp), &st) < 0)
66     {
67       perror ("fstat");
68       fclose (fp);
69       goto setup_fail;
70     }
71   sf_buf = malloc (st.st_size);
72   if (sf_buf == NULL)
73     {
74       perror ("malloc");
75       goto setup_fail;
76     }
77 
78   /* Execute tests.  */
79   sf_size = fread (sf_buf, 1, st.st_size, fp);
80   fclose (fp);
81   TEST ("frecnt-2: Read data", sf_size != 0);
82 
83   dctx = sframe_decode (sf_buf, sf_size, &err);
84   TEST ("frecnt-2: Decode setup", dctx != NULL);
85 
86   unsigned int fde_cnt = sframe_decoder_get_num_fidx (dctx);
87   TEST ("frecnt-2: Decode FDE count", fde_cnt == 2);
88 
89   for (i = 0; i < fde_cnt; ++i)
90     {
91       err = sframe_decoder_get_funcdesc (dctx, i, &nfres, &fsize, &fstart,
92 					 &finfo);
93       TEST ("frecnt-2: Decode get FDE", err == 0);
94       TEST ("frecnt-2: Decode get FRE", nfres == 4);
95     }
96 
97   sframe_decoder_free (&dctx);
98   return 0;
99 
100 setup_fail:
101   sframe_decoder_free (&dctx);
102   fail ("frecnt-2: Test setup");
103   return 1;
104 }
105