Skip to content

Commit b7d828b

Browse files
thk123peterschrammel
thk123
authored andcommitted
Updated dump-C to use the new class
1 parent 02d2b9d commit b7d828b

File tree

4 files changed

+11
-267
lines changed

4 files changed

+11
-267
lines changed

src/goto-instrument/dump_c.cpp

+4-256
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,8 @@ void dump_ct::operator()(std::ostream &os)
163163
}
164164

165165
// we don't want to dump in full all definitions
166-
if(!tag_added && ignore(symbol))
166+
if(!tag_added &&
167+
system_symbols.is_symbol_internal_symbol(symbol, system_headers))
167168
continue;
168169

169170
if(!symbols_sorted.insert(name_str).second)
@@ -344,7 +345,7 @@ void dump_ct::convert_compound(
344345
ns.lookup(to_symbol_type(type).get_identifier());
345346
assert(symbol.is_type);
346347

347-
if(!ignore(symbol))
348+
if(!system_symbols.is_symbol_internal_symbol(symbol, system_headers))
348349
convert_compound(symbol.type, unresolved, recursive, os);
349350
}
350351
else if(type.id()==ID_c_enum_tag)
@@ -353,7 +354,7 @@ void dump_ct::convert_compound(
353354
ns.lookup(to_c_enum_tag_type(type).get_identifier());
354355
assert(symbol.is_type);
355356

356-
if(!ignore(symbol))
357+
if(!system_symbols.is_symbol_internal_symbol(symbol, system_headers))
357358
convert_compound(symbol.type, unresolved, recursive, os);
358359
}
359360
else if(type.id()==ID_array || type.id()==ID_pointer)
@@ -610,259 +611,6 @@ void dump_ct::convert_compound_enum(
610611

611612
/*******************************************************************\
612613
613-
Function: dump_ct::init_system_library_map
614-
615-
Inputs:
616-
617-
Outputs:
618-
619-
Purpose:
620-
621-
\*******************************************************************/
622-
623-
#define ADD_TO_SYSTEM_LIBRARY(v, header) \
624-
for(size_t i=0; i<sizeof(v)/sizeof(char*); ++i) \
625-
system_library_map.insert( \
626-
std::make_pair(v[i], header))
627-
628-
void dump_ct::init_system_library_map()
629-
{
630-
// ctype.h
631-
const char* ctype_syms[]=
632-
{
633-
"isalnum", "isalpha", "isblank", "iscntrl", "isdigit", "isgraph",
634-
"islower", "isprint", "ispunct", "isspace", "isupper", "isxdigit",
635-
"tolower", "toupper"
636-
};
637-
ADD_TO_SYSTEM_LIBRARY(ctype_syms, "ctype.h");
638-
639-
// fcntl.h
640-
const char* fcntl_syms[]=
641-
{
642-
"creat", "fcntl", "open"
643-
};
644-
ADD_TO_SYSTEM_LIBRARY(fcntl_syms, "fcntl.h");
645-
646-
// locale.h
647-
const char* locale_syms[]=
648-
{
649-
"setlocale"
650-
};
651-
ADD_TO_SYSTEM_LIBRARY(locale_syms, "locale.h");
652-
653-
// math.h
654-
const char* math_syms[]=
655-
{
656-
"acos", "acosh", "asin", "asinh", "atan", "atan2", "atanh",
657-
"cbrt", "ceil", "copysign", "cos", "cosh", "erf", "erfc", "exp",
658-
"exp2", "expm1", "fabs", "fdim", "floor", "fma", "fmax", "fmin",
659-
"fmod", "fpclassify", "frexp", "hypot", "ilogb", "isfinite",
660-
"isinf", "isnan", "isnormal", "j0", "j1", "jn", "ldexp", "lgamma",
661-
"llrint", "llround", "log", "log10", "log1p", "log2", "logb",
662-
"lrint", "lround", "modf", "nan", "nearbyint", "nextafter", "pow",
663-
"remainder", "remquo", "rint", "round", "scalbln", "scalbn",
664-
"signbit", "sin", "sinh", "sqrt", "tan", "tanh", "tgamma",
665-
"trunc", "y0", "y1", "yn"
666-
};
667-
ADD_TO_SYSTEM_LIBRARY(math_syms, "math.h");
668-
669-
// pthread.h
670-
const char* pthread_syms[]=
671-
{
672-
"pthread_cleanup_pop", "pthread_cleanup_push",
673-
"pthread_cond_broadcast", "pthread_cond_destroy",
674-
"pthread_cond_init", "pthread_cond_signal",
675-
"pthread_cond_timedwait", "pthread_cond_wait", "pthread_create",
676-
"pthread_detach", "pthread_equal", "pthread_exit",
677-
"pthread_getspecific", "pthread_join", "pthread_key_delete",
678-
"pthread_mutex_destroy", "pthread_mutex_init",
679-
"pthread_mutex_lock", "pthread_mutex_trylock",
680-
"pthread_mutex_unlock", "pthread_once", "pthread_rwlock_destroy",
681-
"pthread_rwlock_init", "pthread_rwlock_rdlock",
682-
"pthread_rwlock_unlock", "pthread_rwlock_wrlock",
683-
"pthread_rwlockattr_destroy", "pthread_rwlockattr_getpshared",
684-
"pthread_rwlockattr_init", "pthread_rwlockattr_setpshared",
685-
"pthread_self", "pthread_setspecific"
686-
};
687-
ADD_TO_SYSTEM_LIBRARY(pthread_syms, "pthread.h");
688-
689-
// setjmp.h
690-
const char* setjmp_syms[]=
691-
{
692-
"_longjmp", "_setjmp", "longjmp", "longjmperror", "setjmp",
693-
"siglongjmp", "sigsetjmp"
694-
};
695-
ADD_TO_SYSTEM_LIBRARY(setjmp_syms, "setjmp.h");
696-
697-
// stdio.h
698-
const char* stdio_syms[]=
699-
{
700-
"asprintf", "clearerr", "fclose", "fdopen", "feof", "ferror",
701-
"fflush", "fgetc", "fgetln", "fgetpos", "fgets", "fgetwc",
702-
"fgetws", "fileno", "fopen", "fprintf", "fpurge", "fputc",
703-
"fputs", "fputwc", "fputws", "fread", "freopen", "fropen",
704-
"fscanf", "fseek", "fsetpos", "ftell", "funopen", "fwide",
705-
"fwopen", "fwprintf", "fwrite", "getc", "getchar", "getdelim",
706-
"getline", "gets", "getw", "getwc", "getwchar", "mkdtemp",
707-
"mkstemp", "mktemp", "perror", "printf", "putc", "putchar",
708-
"puts", "putw", "putwc", "putwchar", "remove", "rewind", "scanf",
709-
"setbuf", "setbuffer", "setlinebuf", "setvbuf", "snprintf",
710-
"sprintf", "sscanf", "strerror", "swprintf", "sys_errlist",
711-
"sys_nerr", "tempnam", "tmpfile", "tmpnam", "ungetc", "ungetwc",
712-
"vasprintf", "vfprintf", "vfscanf", "vfwprintf", "vprintf",
713-
"vscanf", "vsnprintf", "vsprintf", "vsscanf", "vswprintf",
714-
"vwprintf", "wprintf",
715-
/* non-public struct types */
716-
"tag-__sFILE", "tag-__sbuf", // OS X
717-
"tag-_IO_FILE", "tag-_IO_marker", // Linux
718-
};
719-
ADD_TO_SYSTEM_LIBRARY(stdio_syms, "stdio.h");
720-
721-
// stdlib.h
722-
const char* stdlib_syms[]=
723-
{
724-
"abort", "abs", "atexit", "atof", "atoi", "atol", "atoll",
725-
"bsearch", "calloc", "div", "exit", "free", "getenv", "labs",
726-
"ldiv", "llabs", "lldiv", "malloc", "mblen", "mbstowcs", "mbtowc",
727-
"qsort", "rand", "realloc", "srand", "strtod", "strtof", "strtol",
728-
"strtold", "strtoll", "strtoul", "strtoull", "system", "wcstombs",
729-
"wctomb"
730-
};
731-
ADD_TO_SYSTEM_LIBRARY(stdlib_syms, "stdlib.h");
732-
733-
// string.h
734-
const char* string_syms[]=
735-
{
736-
"strcat", "strncat", "strchr", "strrchr", "strcmp", "strncmp",
737-
"strcpy", "strncpy", "strerror", "strlen", "strpbrk", "strspn",
738-
"strcspn", "strstr", "strtok"
739-
};
740-
ADD_TO_SYSTEM_LIBRARY(string_syms, "string.h");
741-
742-
// time.h
743-
const char* time_syms[]=
744-
{
745-
"asctime", "asctime_r", "ctime", "ctime_r", "difftime", "gmtime",
746-
"gmtime_r", "localtime", "localtime_r", "mktime",
747-
/* non-public struct types */
748-
"tag-timespec", "tag-timeval"
749-
};
750-
ADD_TO_SYSTEM_LIBRARY(time_syms, "time.h");
751-
752-
// unistd.h
753-
const char* unistd_syms[]=
754-
{
755-
"_exit", "access", "alarm", "chdir", "chown", "close", "dup",
756-
"dup2", "execl", "execle", "execlp", "execv", "execve", "execvp",
757-
"fork", "fpathconf", "getcwd", "getegid", "geteuid", "getgid",
758-
"getgroups", "getlogin", "getpgrp", "getpid", "getppid", "getuid",
759-
"isatty", "link", "lseek", "pathconf", "pause", "pipe", "read",
760-
"rmdir", "setgid", "setpgid", "setsid", "setuid", "sleep",
761-
"sysconf", "tcgetpgrp", "tcsetpgrp", "ttyname", "ttyname_r",
762-
"unlink", "write"
763-
};
764-
ADD_TO_SYSTEM_LIBRARY(unistd_syms, "unistd.h");
765-
766-
// sys/select.h
767-
const char* sys_select_syms[]=
768-
{
769-
"select"
770-
};
771-
ADD_TO_SYSTEM_LIBRARY(sys_select_syms, "sys/select.h");
772-
773-
// sys/socket.h
774-
const char* sys_socket_syms[]=
775-
{
776-
"accept", "bind", "connect"
777-
};
778-
ADD_TO_SYSTEM_LIBRARY(sys_socket_syms, "sys/socket.h");
779-
780-
// sys/stat.h
781-
const char* sys_stat_syms[]=
782-
{
783-
"fstat", "lstat", "stat"
784-
};
785-
ADD_TO_SYSTEM_LIBRARY(sys_stat_syms, "sys/stat.h");
786-
787-
/*
788-
// sys/types.h
789-
const char* sys_types_syms[]=
790-
{
791-
};
792-
ADD_TO_SYSTEM_LIBRARY(sys_types_syms, "sys/types.h");
793-
*/
794-
795-
// sys/wait.h
796-
const char* sys_wait_syms[]=
797-
{
798-
"wait", "waitpid"
799-
};
800-
ADD_TO_SYSTEM_LIBRARY(sys_wait_syms, "sys/wait.h");
801-
}
802-
803-
/*******************************************************************\
804-
805-
Function: dump_ct::ignore
806-
807-
Inputs:
808-
809-
Outputs:
810-
811-
Purpose:
812-
813-
\*******************************************************************/
814-
815-
bool dump_ct::ignore(const symbolt &symbol)
816-
{
817-
const std::string &name_str=id2string(symbol.name);
818-
819-
if(has_prefix(name_str, CPROVER_PREFIX) ||
820-
name_str=="__func__" ||
821-
name_str=="__FUNCTION__" ||
822-
name_str=="__PRETTY_FUNCTION__" ||
823-
name_str=="argc'" ||
824-
name_str=="argv'" ||
825-
name_str=="envp'" ||
826-
name_str=="envp_size'")
827-
return true;
828-
829-
const std::string &file_str=id2string(symbol.location.get_file());
830-
831-
// don't dump internal GCC builtins
832-
if((file_str=="gcc_builtin_headers_alpha.h" ||
833-
file_str=="gcc_builtin_headers_arm.h" ||
834-
file_str=="gcc_builtin_headers_ia32.h" ||
835-
file_str=="gcc_builtin_headers_mips.h" ||
836-
file_str=="gcc_builtin_headers_power.h" ||
837-
file_str=="gcc_builtin_headers_generic.h") &&
838-
has_prefix(name_str, "__builtin_"))
839-
return true;
840-
841-
if(name_str=="__builtin_va_start" ||
842-
name_str=="__builtin_va_end" ||
843-
symbol.name==ID_gcc_builtin_va_arg)
844-
{
845-
system_headers.insert("stdarg.h");
846-
return true;
847-
}
848-
849-
if(name_str.find("$link")!=std::string::npos)
850-
return false;
851-
852-
system_library_mapt::const_iterator it=
853-
system_library_map.find(symbol.name);
854-
855-
if(it!=system_library_map.end())
856-
{
857-
system_headers.insert(it->second);
858-
return true;
859-
}
860-
861-
return false;
862-
}
863-
864-
/*******************************************************************\
865-
866614
Function: dump_ct::cleanup_decl
867615
868616
Inputs:

src/goto-instrument/dump_c_class.h

+3-8
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ Author: Daniel Kroening, [email protected]
1515
#include <util/language.h>
1616

1717
#include <langapi/mode.h>
18+
#include <goto-programs/system_library_symbols.h>
1819

1920
class dump_ct
2021
{
@@ -30,7 +31,7 @@ class dump_ct
3031
language(factory())
3132
{
3233
if(use_system_headers)
33-
init_system_library_map();
34+
system_symbols=system_library_symbolst();
3435
}
3536

3637
virtual ~dump_ct()
@@ -51,21 +52,15 @@ class dump_ct
5152

5253
std::set<std::string> system_headers;
5354

54-
typedef std::unordered_map<irep_idt, std::string, irep_id_hash>
55-
system_library_mapt;
56-
system_library_mapt system_library_map;
55+
system_library_symbolst system_symbols;
5756

5857
typedef std::unordered_map<irep_idt, irep_idt, irep_id_hash>
5958
declared_enum_constants_mapt;
6059
declared_enum_constants_mapt declared_enum_constants;
6160

62-
void init_system_library_map();
63-
6461
std::string type_to_string(const typet &type);
6562
std::string expr_to_string(const exprt &expr);
6663

67-
bool ignore(const symbolt &symbol);
68-
6964
static std::string indent(const unsigned n)
7065
{
7166
return std::string(2*n, ' ');

src/goto-programs/system_library_symbols.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -284,7 +284,7 @@ Purpose: To find out if a symbol is an internal symbol.
284284

285285
bool system_library_symbolst::is_symbol_internal_symbol(
286286
const symbolt &symbol,
287-
std::set<irep_idt> &out_system_headers) const
287+
std::set<std::string> &out_system_headers) const
288288
{
289289
const std::string &name_str=id2string(symbol.name);
290290

@@ -345,7 +345,7 @@ bool system_library_symbolst::is_symbol_internal_symbol(
345345

346346
if(it!=system_library_map.end())
347347
{
348-
out_system_headers.insert(it->second);
348+
out_system_headers.insert(id2string(it->second));
349349
return true;
350350
}
351351

src/goto-programs/system_library_symbols.h

+2-1
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ Author: Thomas Kiley
1111

1212
#include <list>
1313
#include <set>
14+
#include <string>
1415
#include <util/irep.h>
1516

1617
class symbolt;
@@ -22,7 +23,7 @@ class system_library_symbolst
2223

2324
bool is_symbol_internal_symbol(
2425
const symbolt &symbol,
25-
std::set<irep_idt> &out_system_headers) const;
26+
std::set<std::string> &out_system_headers) const;
2627

2728
private:
2829
void init_system_library_map();

0 commit comments

Comments
 (0)