xref: /netbsd-src/external/gpl3/gdb/dist/libsframe/testsuite/libsframe.decode/frecnt-1.c (revision d16b7486a53dcb8072b60ec6fcb4373a2d0c27b7)
1 /* frecnt-1.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 (1 fde 4 fres):
32  * static int cnt;
33  * int main() { cnt++; return (cnt); }
34  */
35 #define DATA	"DATA1"
36 
37 int
38 main (void)
39 {
40   sframe_decoder_ctx *dctx = NULL;
41   uint32_t nfres, fsize;
42   int32_t fstart;
43   unsigned char finfo;
44   int err = 0;
45   FILE *fp;
46   struct stat st;
47   char *sf_buf;
48   size_t sf_size;
49 
50 #define TEST(name, cond)                                                      \
51   do                                                                          \
52     {                                                                         \
53       if (cond)                                                               \
54 	pass (name);                                                          \
55       else                                                                    \
56 	fail (name);                                                          \
57     }                                                                         \
58     while (0)
59 
60   /* Test Setup.  */
61   fp = fopen (DATA, "r");
62   if (fp == NULL)
63     goto setup_fail;
64   if (fstat (fileno (fp), &st) < 0)
65     {
66       perror ("fstat");
67       fclose (fp);
68       goto setup_fail;
69     }
70   sf_buf = malloc (st.st_size);
71   if (sf_buf == NULL)
72     {
73       perror ("malloc");
74       goto setup_fail;
75     }
76 
77   /* Execute tests.  */
78   sf_size = fread (sf_buf, 1, st.st_size, fp);
79   fclose (fp);
80   TEST ("frecnt-1: Read data", sf_size != 0);
81 
82   dctx = sframe_decode (sf_buf, sf_size, &err);
83   TEST ("frecnt-1: Decoder setup", dctx != NULL);
84 
85   unsigned int fde_cnt = sframe_decoder_get_num_fidx (dctx);
86   TEST ("frecnt-1: Decoder FDE count", fde_cnt == 1);
87 
88   err = sframe_decoder_get_funcdesc (dctx, 0, &nfres, &fsize, &fstart, &finfo);
89   TEST ("frecnt-1: Decoder get FDE", err == 0);
90   TEST ("frecnt-1: Decoder FRE count", nfres == 4);
91 
92   sframe_decoder_free (&dctx);
93   return 0;
94 
95 setup_fail:
96   sframe_decoder_free (&dctx);
97   fail ("frecnt-1: Test setup");
98   return 1;
99 }
100