bring RRGraph object and writer online
This commit is contained in:
parent
9269d7106d
commit
5006a4395d
|
@ -163,9 +163,10 @@ enum e_interconnect {
|
|||
COMPLETE_INTERC = 1,
|
||||
DIRECT_INTERC = 2,
|
||||
MUX_INTERC = 3,
|
||||
NUM_INTERC_TYPES
|
||||
NUM_INTERC_TYPES /* Xifan Tang - Invalid types for interconnect */
|
||||
};
|
||||
constexpr std::array<const char*, NUM_INTERC_TYPES> INTERCONNECT_TYPE_STRING = {{"complete", "direct", "mux"}}; //String versions of interconnection type
|
||||
/* Xifan Tang - String versions of interconnection type */
|
||||
constexpr std::array<const char*, NUM_INTERC_TYPES> INTERCONNECT_TYPE_STRING = {{"complete", "direct", "mux"}};
|
||||
|
||||
/* Orientations. */
|
||||
enum e_side : unsigned char {
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
# Run VPR for the s298 design
|
||||
vpr ./test_vpr_arch/k6_frac_N10_40nm.xml ./test_blif/s298.blif
|
||||
vpr ./test_vpr_arch/k6_frac_N10_40nm.xml ./test_blif/s298.blif --write_rr_graph example_rr_graph.xml
|
||||
|
||||
# Read OpenFPGA architecture definition
|
||||
read_openfpga_arch -f ./test_openfpga_arch/k6_frac_N10_40nm_openfpga.xml
|
||||
|
|
|
@ -22,6 +22,8 @@
|
|||
#include "place_macro.h"
|
||||
#include "compressed_grid.h"
|
||||
|
||||
#include "rr_graph_obj.h"
|
||||
|
||||
//A Context is collection of state relating to a particular part of VPR
|
||||
//
|
||||
//This is a base class who's only purpose is to disable copying of contexts.
|
||||
|
@ -143,6 +145,9 @@ struct DeviceContext : public Context {
|
|||
/* chan_width is for x|y-directed channels; i.e. between rows */
|
||||
t_chan_width chan_width;
|
||||
|
||||
/* RRGraph object */
|
||||
RRGraph rr_graph;
|
||||
|
||||
/* Structures to define the routing architecture of the FPGA. */
|
||||
std::vector<t_rr_node> rr_nodes; /* autogenerated in build_rr_graph */
|
||||
|
||||
|
|
|
@ -0,0 +1,138 @@
|
|||
/* Standard header files required go first */
|
||||
#include <map>
|
||||
|
||||
/* EXTERNAL library header files go second*/
|
||||
#include "vtr_assert.h"
|
||||
#include "vtr_time.h"
|
||||
#include "vtr_memory.h"
|
||||
|
||||
/* VPR header files go then */
|
||||
#include "vpr_types.h"
|
||||
#include "rr_graph_obj.h"
|
||||
#include "check_rr_graph_obj.h"
|
||||
#include "create_rr_graph.h"
|
||||
|
||||
/* Finally we include global variables */
|
||||
#include "globals.h"
|
||||
|
||||
/********************************************************************
|
||||
* TODO: remove when this conversion (from traditional to new data structure)
|
||||
* is no longer needed
|
||||
* This function will convert an existing rr_graph in device_ctx to the RRGraph
|
||||
*object
|
||||
* This function is used to test our RRGraph if it is acceptable in downstream
|
||||
*routers
|
||||
********************************************************************/
|
||||
void convert_rr_graph(std::vector<t_segment_inf>& vpr_segments) {
|
||||
/* Release freed memory before start building rr_graph */
|
||||
vtr::malloc_trim(0);
|
||||
|
||||
vtr::ScopedStartFinishTimer timer("Conversion to routing resource graph object");
|
||||
|
||||
/* IMPORTANT: to build clock tree,
|
||||
* vpr added segments to the original arch segments
|
||||
* This is why to use vpr_segments as an inputs!!!
|
||||
*/
|
||||
auto& device_ctx = g_vpr_ctx.mutable_device();
|
||||
|
||||
/* The number of switches are in general small,
|
||||
* reserve switches may not bring significant memory efficiency
|
||||
* So, we just use create_switch to push_back each time
|
||||
*/
|
||||
device_ctx.rr_graph.reserve_switches(device_ctx.rr_switch_inf.size());
|
||||
// Create the switches
|
||||
for (size_t iswitch = 0; iswitch < device_ctx.rr_switch_inf.size(); ++iswitch) {
|
||||
device_ctx.rr_graph.create_switch(device_ctx.rr_switch_inf[iswitch]);
|
||||
}
|
||||
|
||||
/* The number of segments are in general small, reserve segments may not bring
|
||||
* significant memory efficiency */
|
||||
device_ctx.rr_graph.reserve_segments(vpr_segments.size());
|
||||
// Create the segments
|
||||
for (size_t iseg = 0; iseg < vpr_segments.size(); ++iseg) {
|
||||
device_ctx.rr_graph.create_segment(vpr_segments[iseg]);
|
||||
}
|
||||
|
||||
/* Reserve list of nodes to be memory efficient */
|
||||
device_ctx.rr_graph.reserve_nodes((unsigned long)device_ctx.rr_nodes.size());
|
||||
|
||||
// Create the nodes
|
||||
for (size_t inode = 0; inode < device_ctx.rr_nodes.size(); ++inode) {
|
||||
auto& node = device_ctx.rr_nodes[inode];
|
||||
RRNodeId rr_node = device_ctx.rr_graph.create_node(node.type());
|
||||
|
||||
device_ctx.rr_graph.set_node_xlow(rr_node, node.xlow());
|
||||
device_ctx.rr_graph.set_node_ylow(rr_node, node.ylow());
|
||||
device_ctx.rr_graph.set_node_xhigh(rr_node, node.xhigh());
|
||||
device_ctx.rr_graph.set_node_yhigh(rr_node, node.yhigh());
|
||||
|
||||
device_ctx.rr_graph.set_node_capacity(rr_node, node.capacity());
|
||||
|
||||
device_ctx.rr_graph.set_node_ptc_num(rr_node, node.ptc_num());
|
||||
|
||||
device_ctx.rr_graph.set_node_cost_index(rr_node, node.cost_index());
|
||||
|
||||
if (CHANX == node.type() || CHANY == node.type()) {
|
||||
device_ctx.rr_graph.set_node_direction(rr_node, node.direction());
|
||||
}
|
||||
if (IPIN == node.type() || OPIN == node.type()) {
|
||||
device_ctx.rr_graph.set_node_side(rr_node, node.side());
|
||||
}
|
||||
device_ctx.rr_graph.set_node_R(rr_node, node.R());
|
||||
device_ctx.rr_graph.set_node_C(rr_node, node.C());
|
||||
|
||||
/* Set up segment id */
|
||||
short irc_data = node.cost_index();
|
||||
short iseg = device_ctx.rr_indexed_data[irc_data].seg_index;
|
||||
device_ctx.rr_graph.set_node_segment(rr_node, RRSegmentId(iseg));
|
||||
}
|
||||
|
||||
/* Reserve list of edges to be memory efficient */
|
||||
unsigned long num_edges_to_reserve = 0;
|
||||
for (size_t inode = 0; inode < device_ctx.rr_nodes.size(); ++inode) {
|
||||
const auto& node = device_ctx.rr_nodes[inode];
|
||||
num_edges_to_reserve += node.num_edges();
|
||||
}
|
||||
device_ctx.rr_graph.reserve_edges(num_edges_to_reserve);
|
||||
|
||||
/* Add edges for each node */
|
||||
for (size_t inode = 0; inode < device_ctx.rr_nodes.size(); ++inode) {
|
||||
const auto& node = device_ctx.rr_nodes[inode];
|
||||
for (int iedge = 0; iedge < node.num_edges(); ++iedge) {
|
||||
size_t isink_node = node.edge_sink_node(iedge);
|
||||
int iswitch = node.edge_switch(iedge);
|
||||
|
||||
device_ctx.rr_graph.create_edge(RRNodeId(inode),
|
||||
RRNodeId(isink_node),
|
||||
RRSwitchId(iswitch));
|
||||
}
|
||||
}
|
||||
|
||||
/* Ensure that we reserved what we want */
|
||||
VTR_ASSERT(num_edges_to_reserve == (unsigned long)device_ctx.rr_graph.edges().size());
|
||||
|
||||
/* Partition edges to be two class: configurable (1st part) and
|
||||
* non-configurable (2nd part)
|
||||
* See how the router will use the edges and determine the strategy
|
||||
* if we want to partition the edges first or depends on the routing needs
|
||||
*/
|
||||
device_ctx.rr_graph.rebuild_node_edges();
|
||||
|
||||
/* Essential check for rr_graph, build look-up and */
|
||||
if (false == device_ctx.rr_graph.validate()) {
|
||||
/* Error out if built-in validator of rr_graph fails */
|
||||
vpr_throw(VPR_ERROR_ROUTE,
|
||||
__FILE__,
|
||||
__LINE__,
|
||||
"Fundamental errors occurred when validating rr_graph object!\n");
|
||||
}
|
||||
|
||||
/* Error out if advanced checker of rr_graph fails */
|
||||
if (false == check_rr_graph(device_ctx.rr_graph)) {
|
||||
vpr_throw(VPR_ERROR_ROUTE,
|
||||
__FILE__,
|
||||
__LINE__,
|
||||
"Advanced checking rr_graph object fails! Routing may still work "
|
||||
"but not smooth\n");
|
||||
}
|
||||
}
|
|
@ -0,0 +1,17 @@
|
|||
#ifndef CREATE_RR_GRAPH_H
|
||||
#define CREATE_RR_GRAPH_H
|
||||
|
||||
/*
|
||||
* Notes in include header files in a head file
|
||||
* Only include the neccessary header files
|
||||
* that is required by the data types in the function/class declarations!
|
||||
*/
|
||||
#include "rr_graph_obj.h"
|
||||
|
||||
/* IMPORTANT: to build clock tree,
|
||||
* vpr added segments to the original arch segments
|
||||
* This is why to use vpr_segments as an inputs!!!
|
||||
*/
|
||||
void convert_rr_graph(std::vector<t_segment_inf>& vpr_segments);
|
||||
|
||||
#endif
|
|
@ -27,62 +27,36 @@ using namespace std;
|
|||
constexpr int FLOAT_PRECISION = std::numeric_limits<float>::max_digits10;
|
||||
|
||||
/*********************** External Subroutines to this module *******************/
|
||||
void add_metadata_to_xml(fstream &fp, const char *tab_prefix, const t_metadata_dict & meta);
|
||||
void write_rr_channel(fstream &fp);
|
||||
void write_rr_grid(fstream &fp);
|
||||
void write_rr_block_types(fstream &fp);
|
||||
|
||||
/*********************** Subroutines local to this module *******************/
|
||||
void write_rr_graph_node(fstream &fp, const RRGraph& rr_graph);
|
||||
void write_rr_graph_switches(fstream &fp, const RRGraph& rr_graph);
|
||||
void write_rr_graph_edges(fstream &fp, const RRGraph& rr_graph);
|
||||
void write_rr_graph_segments(fstream &fp, const RRGraph& rr_graph);
|
||||
|
||||
/************************ Subroutine definitions ****************************/
|
||||
static
|
||||
void add_metadata_to_xml(std::fstream& fp, const char* tab_prefix, const t_metadata_dict& meta) {
|
||||
fp << tab_prefix << "<metadata>" << std::endl;
|
||||
|
||||
/* This function is used to write the rr_graph into xml format into a a file with name: file_name */
|
||||
void write_xml_rr_graph_obj(const char *file_name, const RRGraph& rr_graph) {
|
||||
fstream fp;
|
||||
fp.open(file_name, fstream::out | fstream::trunc);
|
||||
|
||||
/* Prints out general info for easy error checking*/
|
||||
if (!fp.is_open() || !fp.good()) {
|
||||
vpr_throw(VPR_ERROR_OTHER, __FILE__, __LINE__,
|
||||
"couldn't open file \"%s\" for generating RR graph file\n", file_name);
|
||||
for (const auto& meta_elem : meta) {
|
||||
const std::string& key = meta_elem.first;
|
||||
const std::vector<t_metadata_value>& values = meta_elem.second;
|
||||
for (const auto& value : values) {
|
||||
fp << tab_prefix << "\t<meta name=\"" << key << "\"";
|
||||
fp << ">" << value.as_string() << "</meta>" << std::endl;
|
||||
}
|
||||
}
|
||||
cout << "Writing RR graph" << endl;
|
||||
fp << "<rr_graph tool_name=\"vpr\" tool_version=\"" << vtr::VERSION <<
|
||||
"\" tool_comment=\"Generated from arch file "
|
||||
<< get_arch_file_name() << "\">" << endl;
|
||||
|
||||
/* Write out each individual component
|
||||
* Use existing write_rr_* functions as much as possible
|
||||
* 1. For those using external data structures outside RRGraph,
|
||||
* leave as it is.
|
||||
* 2. For those using RRGraph internal data,
|
||||
* write new functions
|
||||
*/
|
||||
write_rr_channel(fp);
|
||||
write_rr_graph_switches(fp, rr_graph);
|
||||
write_rr_graph_segments(fp, rr_graph);
|
||||
write_rr_block_types(fp);
|
||||
write_rr_grid(fp);
|
||||
write_rr_graph_node(fp, rr_graph);
|
||||
write_rr_graph_edges(fp, rr_graph);
|
||||
fp << "</rr_graph>";
|
||||
|
||||
fp.close();
|
||||
|
||||
cout << "Finished generating RR graph file named " << file_name << endl << endl;
|
||||
fp << tab_prefix << "</metadata>" << std::endl;
|
||||
}
|
||||
|
||||
/* All relevant rr node info is written out to the graph.
|
||||
* This includes location, timing, and segment info
|
||||
*/
|
||||
static
|
||||
void write_rr_graph_node(fstream &fp, const RRGraph& rr_graph) {
|
||||
/* TODO: we should make it function full independent from device_ctx !!! */
|
||||
auto& device_ctx = g_vpr_ctx.device();
|
||||
|
||||
std::array<const char*, NUM_DIRECTIONS> DIRECTION_STRING_WRITE_XML = {{"INC_DIR", "DEC_DIR", "BI_DIR", "NO_DIR"}};
|
||||
|
||||
fp << "\t<rr_nodes>" << endl;
|
||||
|
||||
for (auto node : rr_graph.nodes()) {
|
||||
|
@ -90,7 +64,7 @@ void write_rr_graph_node(fstream &fp, const RRGraph& rr_graph) {
|
|||
fp << " id=\"" << rr_graph.node_index(node);
|
||||
fp << "\" type=\"" << rr_node_typename[rr_graph.node_type(node)];
|
||||
if (CHANX == rr_graph.node_type(node) || CHANY == rr_graph.node_type(node)) {
|
||||
fp << "\" direction=\"" << DIRECTION_STRING[rr_graph.node_direction(node)];
|
||||
fp << "\" direction=\"" << DIRECTION_STRING_WRITE_XML[rr_graph.node_direction(node)];
|
||||
}
|
||||
fp << "\" capacity=\"" << rr_graph.node_capacity(node);
|
||||
fp << "\">" << endl;
|
||||
|
@ -128,6 +102,7 @@ void write_rr_graph_node(fstream &fp, const RRGraph& rr_graph) {
|
|||
/* Segment information in the t_segment_inf data structure is written out.
|
||||
* Information includes segment id, name, and optional timing parameters
|
||||
*/
|
||||
static
|
||||
void write_rr_graph_segments(fstream &fp, const RRGraph& rr_graph) {
|
||||
fp << "\t<segments>" << endl;
|
||||
|
||||
|
@ -146,6 +121,7 @@ void write_rr_graph_segments(fstream &fp, const RRGraph& rr_graph) {
|
|||
/* Switch info is written out into xml format. This includes
|
||||
* general, sizing, and optional timing information
|
||||
*/
|
||||
static
|
||||
void write_rr_graph_switches(fstream &fp, const RRGraph& rr_graph) {
|
||||
fp << "\t<switches>" << endl;
|
||||
|
||||
|
@ -176,6 +152,7 @@ void write_rr_graph_switches(fstream &fp, const RRGraph& rr_graph) {
|
|||
fp << "\t\t\t<timing R=\"" << setprecision(FLOAT_PRECISION) << cur_switch.R <<
|
||||
"\" Cin=\"" << setprecision(FLOAT_PRECISION) << cur_switch.Cin <<
|
||||
"\" Cout=\"" << setprecision(FLOAT_PRECISION) << cur_switch.Cout <<
|
||||
"\" Cinternal=\"" << setprecision(FLOAT_PRECISION) << cur_switch.Cinternal <<
|
||||
"\" Tdel=\"" << setprecision(FLOAT_PRECISION) << cur_switch.Tdel << "\"/>" << endl;
|
||||
fp << "\t\t\t<sizing mux_trans_size=\"" << setprecision(FLOAT_PRECISION) << cur_switch.mux_trans_size <<
|
||||
"\" buf_size=\"" << setprecision(FLOAT_PRECISION) << cur_switch.buf_size << "\"/>" << endl;
|
||||
|
@ -189,6 +166,7 @@ void write_rr_graph_switches(fstream &fp, const RRGraph& rr_graph) {
|
|||
/* Edges connecting to each rr node is printed out. The two nodes
|
||||
* it connects to are also printed
|
||||
*/
|
||||
static
|
||||
void write_rr_graph_edges(fstream &fp, const RRGraph& rr_graph) {
|
||||
auto& device_ctx = g_vpr_ctx.device();
|
||||
fp << "\t<rr_edges>" << endl;
|
||||
|
@ -220,3 +198,40 @@ void write_rr_graph_edges(fstream &fp, const RRGraph& rr_graph) {
|
|||
}
|
||||
fp << "\t</rr_edges>" << endl << endl;
|
||||
}
|
||||
|
||||
/* This function is used to write the rr_graph into xml format into a a file with name: file_name */
|
||||
void write_xml_rr_graph_obj(const char *file_name, const RRGraph& rr_graph) {
|
||||
fstream fp;
|
||||
fp.open(file_name, fstream::out | fstream::trunc);
|
||||
|
||||
/* Prints out general info for easy error checking*/
|
||||
if (!fp.is_open() || !fp.good()) {
|
||||
vpr_throw(VPR_ERROR_OTHER, __FILE__, __LINE__,
|
||||
"couldn't open file \"%s\" for generating RR graph file\n", file_name);
|
||||
}
|
||||
cout << "Writing RR graph" << endl;
|
||||
fp << "<rr_graph tool_name=\"vpr\" tool_version=\"" << vtr::VERSION <<
|
||||
"\" tool_comment=\"Generated from arch file "
|
||||
<< get_arch_file_name() << "\">" << endl;
|
||||
|
||||
/* Write out each individual component
|
||||
* Use existing write_rr_* functions as much as possible
|
||||
* 1. For those using external data structures outside RRGraph,
|
||||
* leave as it is.
|
||||
* 2. For those using RRGraph internal data,
|
||||
* write new functions
|
||||
*/
|
||||
write_rr_channel(fp);
|
||||
write_rr_graph_switches(fp, rr_graph);
|
||||
write_rr_graph_segments(fp, rr_graph);
|
||||
write_rr_block_types(fp);
|
||||
write_rr_grid(fp);
|
||||
write_rr_graph_node(fp, rr_graph);
|
||||
write_rr_graph_edges(fp, rr_graph);
|
||||
fp << "</rr_graph>";
|
||||
|
||||
fp.close();
|
||||
|
||||
cout << "Finished generating RR graph file named " << file_name << endl << endl;
|
||||
}
|
||||
|
||||
|
|
|
@ -36,6 +36,9 @@
|
|||
|
||||
#include "rr_types.h"
|
||||
|
||||
#include "create_rr_graph.h"
|
||||
#include "write_xml_rr_graph_obj.h"
|
||||
|
||||
//#define VERBOSE
|
||||
|
||||
struct t_mux {
|
||||
|
@ -331,6 +334,9 @@ void create_rr_graph(const t_graph_type graph_type,
|
|||
base_cost_type,
|
||||
&det_routing_arch->wire_to_rr_ipin_switch,
|
||||
det_routing_arch->read_rr_graph_filename.c_str());
|
||||
|
||||
/* Xifan Tang - Create rr_graph object: load rr_nodes to the object */
|
||||
convert_rr_graph(segment_inf);
|
||||
}
|
||||
} else {
|
||||
if (channel_widths_unchanged(device_ctx.chan_width, nodes_per_chan) && !device_ctx.rr_nodes.empty()) {
|
||||
|
@ -369,6 +375,9 @@ void create_rr_graph(const t_graph_type graph_type,
|
|||
det_routing_arch->wire_to_rr_ipin_switch,
|
||||
base_cost_type);
|
||||
}
|
||||
|
||||
/* Xifan Tang - Create rr_graph object: load rr_nodes to the object */
|
||||
convert_rr_graph(segment_inf);
|
||||
}
|
||||
|
||||
process_non_config_sets();
|
||||
|
@ -378,6 +387,11 @@ void create_rr_graph(const t_graph_type graph_type,
|
|||
//Write out rr graph file if needed
|
||||
if (!det_routing_arch->write_rr_graph_filename.empty()) {
|
||||
write_rr_graph(det_routing_arch->write_rr_graph_filename.c_str(), segment_inf);
|
||||
|
||||
/* Just to test the writer of rr_graph_obj, give a filename in a fixed style*/
|
||||
std::string rr_graph_obj_filename(det_routing_arch->write_rr_graph_filename);
|
||||
rr_graph_obj_filename += std::string(".obj");
|
||||
write_xml_rr_graph_obj(rr_graph_obj_filename.c_str(), device_ctx.rr_graph);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1391,6 +1405,9 @@ void free_rr_graph() {
|
|||
device_ctx.rr_edge_metadata.clear();
|
||||
|
||||
invalidate_router_lookahead_cache();
|
||||
|
||||
/* Xifan Tang - Clear the rr_graph object */
|
||||
device_ctx.rr_graph.clear();
|
||||
}
|
||||
|
||||
static void build_rr_sinks_sources(const int i,
|
||||
|
|
|
@ -0,0 +1,711 @@
|
|||
#
|
||||
# Valgrind suppression file for EZGL
|
||||
#
|
||||
|
||||
#pango
|
||||
{
|
||||
libpango
|
||||
Memcheck:Leak
|
||||
...
|
||||
obj:/usr/lib*/libpango*
|
||||
}
|
||||
|
||||
#GTK
|
||||
{
|
||||
g_type_register
|
||||
Memcheck:Leak
|
||||
fun:*alloc
|
||||
...
|
||||
fun:g_type_register_*
|
||||
...
|
||||
fun:_dl_init
|
||||
...
|
||||
}
|
||||
|
||||
{
|
||||
g_quark_from_static_string
|
||||
Memcheck:Leak
|
||||
fun:*alloc
|
||||
...
|
||||
fun:g_quark_from_static_string
|
||||
...
|
||||
fun:_dl_init
|
||||
...
|
||||
}
|
||||
|
||||
{
|
||||
g_main_thread
|
||||
Memcheck:Leak
|
||||
fun:*alloc
|
||||
...
|
||||
fun:g_main*
|
||||
...
|
||||
fun:start_thread
|
||||
fun:clone
|
||||
}
|
||||
|
||||
{
|
||||
g_closure
|
||||
Memcheck:Leak
|
||||
match-leak-kinds:possible
|
||||
fun:*alloc
|
||||
...
|
||||
fun:g_cclosure_new
|
||||
fun:g_signal_connect_data
|
||||
...
|
||||
}
|
||||
|
||||
#
|
||||
{
|
||||
g_object
|
||||
Memcheck:Leak
|
||||
match-leak-kinds:possible
|
||||
...
|
||||
fun:g_object_new
|
||||
...
|
||||
}
|
||||
|
||||
{
|
||||
g_type_register_static
|
||||
Memcheck:Leak
|
||||
match-leak-kinds:possible
|
||||
...
|
||||
fun:g_type_register_static
|
||||
...
|
||||
}
|
||||
|
||||
{
|
||||
g_signal_connect_closure
|
||||
Memcheck:Leak
|
||||
match-leak-kinds:possible
|
||||
...
|
||||
fun:g_signal_connect_closure
|
||||
fun:gtk_*group*
|
||||
...
|
||||
}
|
||||
|
||||
{
|
||||
gtk_module_init
|
||||
Memcheck:Leak
|
||||
|
||||
fun:*alloc
|
||||
...
|
||||
fun:gtk_module_init
|
||||
...
|
||||
}
|
||||
|
||||
{
|
||||
g_closure_invoke
|
||||
Memcheck:Leak
|
||||
|
||||
fun:*alloc
|
||||
...
|
||||
fun:g_closure_invoke
|
||||
...
|
||||
}
|
||||
|
||||
{
|
||||
gtk_style_context_set_state
|
||||
Memcheck:Leak
|
||||
|
||||
fun:*alloc
|
||||
...
|
||||
fun:gtk_style_context_set_state
|
||||
...
|
||||
}
|
||||
|
||||
#
|
||||
{
|
||||
call_init
|
||||
Memcheck:Leak
|
||||
|
||||
fun:*alloc
|
||||
...
|
||||
fun:call_init
|
||||
fun:_dl_init
|
||||
...
|
||||
}
|
||||
|
||||
{
|
||||
XML_ParseBuffer
|
||||
Memcheck:Leak
|
||||
fun:*alloc
|
||||
...
|
||||
fun:XML_ParseBuffer
|
||||
...
|
||||
}
|
||||
|
||||
{
|
||||
FcConfigParseAndLoad
|
||||
Memcheck:Leak
|
||||
fun:*alloc
|
||||
...
|
||||
fun:FcConfigParseAndLoad
|
||||
...
|
||||
}
|
||||
|
||||
#
|
||||
{
|
||||
g_objectv
|
||||
Memcheck:Leak
|
||||
|
||||
...
|
||||
fun:g_object_newv
|
||||
...
|
||||
}
|
||||
|
||||
{
|
||||
g_type_add_interface_static
|
||||
Memcheck:Leak
|
||||
match-leak-kinds:possible
|
||||
...
|
||||
fun:g_type_add_interface_static
|
||||
...
|
||||
}
|
||||
|
||||
{
|
||||
gtk_container_get_children
|
||||
Memcheck:Leak
|
||||
fun:*alloc
|
||||
...
|
||||
fun:gtk_container_get_children
|
||||
...
|
||||
}
|
||||
|
||||
{
|
||||
cairo_select_font_face
|
||||
Memcheck:Leak
|
||||
fun:*alloc
|
||||
...
|
||||
fun:cairo_select_font_face
|
||||
...
|
||||
}
|
||||
|
||||
{
|
||||
libfontconfig
|
||||
Memcheck:Leak
|
||||
fun:*alloc
|
||||
...
|
||||
obj:*libfontconfig.so.*
|
||||
...
|
||||
}
|
||||
|
||||
{
|
||||
X11_XGetDefault
|
||||
Memcheck:Leak
|
||||
fun:realloc
|
||||
obj:*libX11.so.6.3.0
|
||||
obj:*libX11.so.6.3.0
|
||||
obj:*libX11.so.6.3.0
|
||||
fun:_XlcCreateLC
|
||||
fun:_XlcDefaultLoader
|
||||
fun:_XOpenLC
|
||||
fun:_XrmInitParseInfo
|
||||
obj:*libX11.so.6.3.0
|
||||
fun:XrmGetStringDatabase
|
||||
obj:*libX11.so.6.3.0
|
||||
fun:XGetDefault
|
||||
}
|
||||
|
||||
{
|
||||
XInternAtom_via_event_loop
|
||||
Memcheck:Leak
|
||||
fun:*alloc
|
||||
fun:_XEnq
|
||||
obj:*libX11.so.6.3.0
|
||||
fun:_XReply
|
||||
fun:XInternAtom
|
||||
...
|
||||
}
|
||||
|
||||
{
|
||||
cairo_deep_*alloc
|
||||
Memcheck:Leak
|
||||
fun:*alloc
|
||||
obj:*libcairo.*
|
||||
...
|
||||
}
|
||||
|
||||
#openmp
|
||||
{
|
||||
GOMP_parallel
|
||||
Memcheck:Leak
|
||||
|
||||
fun:*alloc
|
||||
fun:allocate_dtv
|
||||
fun:_dl_allocate_tls
|
||||
fun:allocate_stack
|
||||
fun:pthread_create@@GLIBC_2.2.5
|
||||
...
|
||||
}
|
||||
|
||||
|
||||
#GTK engines
|
||||
{
|
||||
engines
|
||||
Memcheck:Leak
|
||||
fun:*alloc
|
||||
...
|
||||
obj:/usr/lib*/gtk*/*/engines*
|
||||
...
|
||||
obj:/usr/lib*/libgtk*
|
||||
}
|
||||
|
||||
#nvidia
|
||||
{
|
||||
libGL
|
||||
Memcheck:Leak
|
||||
...
|
||||
obj:/usr/lib*/libGL.so*
|
||||
}
|
||||
{
|
||||
<insert_a_suppression_name_here>
|
||||
Memcheck:Leak
|
||||
fun:*alloc
|
||||
...
|
||||
fun:g_socket_create_source
|
||||
...
|
||||
fun:g_main_context_dispatch
|
||||
}
|
||||
{
|
||||
<insert_a_suppression_name_here>
|
||||
Memcheck:Leak
|
||||
fun:*alloc
|
||||
...
|
||||
fun:g_type_class_ref
|
||||
...
|
||||
fun:gtk_init_check
|
||||
fun:gtk_init
|
||||
obj:*libgtk-3*
|
||||
}
|
||||
{
|
||||
<insert_a_suppression_name_here>
|
||||
Memcheck:Leak
|
||||
fun:*alloc
|
||||
...
|
||||
fun:g_markup_parse_context_parse
|
||||
obj:*libgtk-3*
|
||||
}
|
||||
{
|
||||
<insert_a_suppression_name_here>
|
||||
Memcheck:Leak
|
||||
fun:*alloc
|
||||
...
|
||||
fun:g_socket_new
|
||||
obj:*libgio-2*
|
||||
fun:g_socket_client_connect
|
||||
obj:*libgio-2*
|
||||
}
|
||||
{
|
||||
<insert_a_suppression_name_here>
|
||||
Memcheck:Leak
|
||||
fun:*alloc
|
||||
...
|
||||
fun:atk_add_focus_tracker
|
||||
obj:*libgtk-3*
|
||||
...
|
||||
fun:gtk_parse_args
|
||||
fun:gtk_init_check
|
||||
}
|
||||
{
|
||||
<insert_a_suppression_name_here>
|
||||
Memcheck:Leak
|
||||
fun:m*alloc
|
||||
...
|
||||
fun:g_bus_get_sync
|
||||
...
|
||||
fun:g_application_register
|
||||
obj:*libgio-2*
|
||||
fun:g_application_run
|
||||
}
|
||||
{
|
||||
<insert_a_suppression_name_here>
|
||||
Memcheck:Leak
|
||||
fun:*alloc
|
||||
...
|
||||
obj:*libgtk-3*
|
||||
fun:g_closure_invoke
|
||||
...
|
||||
fun:g_signal_emit_valist
|
||||
fun:g_signal_emit
|
||||
}
|
||||
{
|
||||
<insert_a_suppression_name_here>
|
||||
Memcheck:Leak
|
||||
fun:*alloc
|
||||
...
|
||||
fun:g_simple_async_result_complete
|
||||
...
|
||||
fun:g_main_context_dispatch
|
||||
...
|
||||
}
|
||||
{
|
||||
<insert_a_suppression_name_here>
|
||||
Memcheck:Leak
|
||||
fun:*alloc
|
||||
...
|
||||
fun:g_type_class_ref
|
||||
...
|
||||
fun:atk_add_focus_tracker
|
||||
obj:*libgtk-3*
|
||||
...
|
||||
fun:g_option_context_parse
|
||||
}
|
||||
{
|
||||
<insert_a_suppression_name_here>
|
||||
Memcheck:Leak
|
||||
fun:*alloc
|
||||
...
|
||||
fun:g_type_class_ref
|
||||
obj:*libgtk-3*
|
||||
fun:atk_add_focus_tracker
|
||||
obj:*libgtk-3*
|
||||
}
|
||||
{
|
||||
<insert_a_suppression_name_here>
|
||||
Memcheck:Leak
|
||||
fun:*alloc
|
||||
...
|
||||
fun:g_type_class_ref
|
||||
obj:*libgtk-3*
|
||||
}
|
||||
{
|
||||
<insert_a_suppression_name_here>
|
||||
Memcheck:Leak
|
||||
fun:*alloc
|
||||
...
|
||||
fun:g_dbus_proxy_new_sync
|
||||
obj:*libgtk-3*
|
||||
}
|
||||
{
|
||||
<insert_a_suppression_name_here>
|
||||
Memcheck:Leak
|
||||
fun:*alloc
|
||||
...
|
||||
fun:g_signal_new
|
||||
...
|
||||
obj:*libgobject-2*
|
||||
fun:g_type_class_ref
|
||||
fun:g_object_new_valist
|
||||
fun:g_initable_new_valist
|
||||
fun:g_initable_new
|
||||
}
|
||||
{
|
||||
<insert_a_suppression_name_here>
|
||||
Memcheck:Leak
|
||||
fun:*alloc
|
||||
...
|
||||
fun:g_signal_new
|
||||
obj:*libgtk-3*
|
||||
fun:g_type_class_ref
|
||||
obj:*libgtk-3*
|
||||
...
|
||||
}
|
||||
{
|
||||
<insert_a_suppression_name_here>
|
||||
Memcheck:Leak
|
||||
fun:*alloc
|
||||
...
|
||||
fun:g_signal_new
|
||||
obj:*libgtk-3*
|
||||
...
|
||||
fun:g_type_class_ref
|
||||
obj:*libgtk-3*
|
||||
...
|
||||
}
|
||||
{
|
||||
<insert_a_suppression_name_here>
|
||||
Memcheck:Leak
|
||||
|
||||
fun:*alloc
|
||||
...
|
||||
fun:g_type_class_ref
|
||||
obj:*libgtk-3*
|
||||
fun:atk_add_focus_tracker
|
||||
obj:*libgtk-3*
|
||||
...
|
||||
fun:g_option_context_parse
|
||||
}
|
||||
{
|
||||
<insert_a_suppression_name_here>
|
||||
Memcheck:Leak
|
||||
|
||||
fun:*alloc
|
||||
...
|
||||
fun:g_signal_new_class_handler
|
||||
obj:*libgtk-3*
|
||||
...
|
||||
fun:g_type_class_ref
|
||||
obj:*libgtk-3*
|
||||
...
|
||||
}
|
||||
{
|
||||
<insert_a_suppression_name_here>
|
||||
Memcheck:Leak
|
||||
fun:*alloc
|
||||
...
|
||||
fun:g_signal_connect_data
|
||||
obj:*libgtk-3*
|
||||
...
|
||||
fun:gtk_widget_show
|
||||
obj:*libgtk-3*
|
||||
...
|
||||
}
|
||||
{
|
||||
<insert_a_suppression_name_here>
|
||||
Memcheck:Leak
|
||||
fun:*alloc
|
||||
...
|
||||
fun:g_type_class_ref
|
||||
fun:g_object_new_valist
|
||||
fun:g_initable_new_valist
|
||||
fun:g_initable_new
|
||||
fun:gvfs_dbus_mount_tracker_proxy_new_for_bus_sync
|
||||
...
|
||||
fun:g_type_create_instance
|
||||
}
|
||||
{
|
||||
<insert_a_suppression_name_here>
|
||||
Memcheck:Leak
|
||||
fun:*alloc
|
||||
fun:g_*alloc
|
||||
...
|
||||
fun:g_type_class_ref
|
||||
obj:*libgtk-3*
|
||||
...
|
||||
fun:g_markup_parse_context_parse
|
||||
}
|
||||
{
|
||||
<insert_a_suppression_name_here>
|
||||
Memcheck:Leak
|
||||
fun:*alloc
|
||||
...
|
||||
fun:g_type_class_ref
|
||||
obj:*libgtk-3*
|
||||
...
|
||||
fun:g_option_context_parse
|
||||
fun:gtk_parse_args
|
||||
fun:gtk_init_check
|
||||
}
|
||||
{
|
||||
<insert_a_suppression_name_here>
|
||||
Memcheck:Leak
|
||||
fun:*alloc
|
||||
...
|
||||
fun:g_type_class_ref
|
||||
fun:atk_bridge_adaptor_init
|
||||
obj:*libgtk-3*
|
||||
...
|
||||
fun:g_option_context_parse
|
||||
fun:gtk_parse_args
|
||||
fun:gtk_init_check
|
||||
fun:gtk_init
|
||||
}
|
||||
{
|
||||
<insert_a_suppression_name_here>
|
||||
Memcheck:Leak
|
||||
fun:*alloc
|
||||
...
|
||||
fun:g_signal_new
|
||||
...
|
||||
fun:g_type_class_ref
|
||||
obj:*libgtk-3*
|
||||
fun:atk_add_focus_tracker
|
||||
obj:*libgtk-3*
|
||||
}
|
||||
{
|
||||
<insert_a_suppression_name_here>
|
||||
Memcheck:Leak
|
||||
|
||||
fun:*alloc
|
||||
...
|
||||
fun:g_signal_new
|
||||
...
|
||||
fun:g_type_class_ref
|
||||
obj:*libgtk-3*
|
||||
}
|
||||
{
|
||||
<insert_a_suppression_name_here>
|
||||
Memcheck:Leak
|
||||
fun:*alloc
|
||||
...
|
||||
fun:g_signal_new
|
||||
...
|
||||
fun:g_initable_new
|
||||
}
|
||||
{
|
||||
<insert_a_suppression_name_here>
|
||||
Memcheck:Leak
|
||||
fun:*alloc
|
||||
...
|
||||
fun:g_signal_new
|
||||
obj:*libgtk-3*
|
||||
fun:g_type_class_ref
|
||||
obj:*libgtk-3*
|
||||
...
|
||||
}
|
||||
{
|
||||
<insert_a_suppression_name_here>
|
||||
Memcheck:Leak
|
||||
fun:*alloc
|
||||
...
|
||||
fun:g_signal_new
|
||||
...
|
||||
fun:g_type_class_ref
|
||||
obj:*libgtk-3*
|
||||
...
|
||||
}
|
||||
{
|
||||
<insert_a_suppression_name_here>
|
||||
Memcheck:Leak
|
||||
fun:*alloc
|
||||
...
|
||||
fun:g_signal_new
|
||||
...
|
||||
fun:g_type_class_ref
|
||||
obj:*libgtk-3*
|
||||
...
|
||||
}
|
||||
{
|
||||
<insert_a_suppression_name_here>
|
||||
Memcheck:Leak
|
||||
fun:*alloc
|
||||
...
|
||||
fun:g_signal_new
|
||||
...
|
||||
fun:g_type_class_ref
|
||||
obj:*libgtk-3*
|
||||
...
|
||||
}
|
||||
{
|
||||
<insert_a_suppression_name_here>
|
||||
Memcheck:Leak
|
||||
fun:*alloc
|
||||
...
|
||||
fun:g_signal_new
|
||||
...
|
||||
fun:g_type_class_ref
|
||||
obj:*libgio-2.0.so.0.4002.0
|
||||
...
|
||||
}
|
||||
{
|
||||
<insert_a_suppression_name_here>
|
||||
Memcheck:Leak
|
||||
fun:*alloc
|
||||
...
|
||||
fun:g_signal_new_class_handler
|
||||
...
|
||||
fun:g_type_class_ref
|
||||
obj:*libgtk-3*
|
||||
...
|
||||
}
|
||||
{
|
||||
<insert_a_suppression_name_here>
|
||||
Memcheck:Leak
|
||||
fun:*alloc
|
||||
...
|
||||
fun:g_signal_connect_data
|
||||
...
|
||||
fun:gtk_widget_show
|
||||
obj:*libgtk-3*
|
||||
...
|
||||
}
|
||||
{
|
||||
<insert_a_suppression_name_here>
|
||||
Memcheck:Leak
|
||||
fun:*alloc
|
||||
...
|
||||
fun:g_initable_new
|
||||
...
|
||||
fun:g_type_create_instance
|
||||
}
|
||||
{
|
||||
<insert_a_suppression_name_here>
|
||||
Memcheck:Leak
|
||||
fun:*alloc
|
||||
...
|
||||
fun:g_type_class_ref
|
||||
obj:*libgtk-3*
|
||||
...
|
||||
fun:g_markup_parse_context_parse
|
||||
}
|
||||
{
|
||||
<insert_a_suppression_name_here>
|
||||
Memcheck:Leak
|
||||
fun:malloc
|
||||
...
|
||||
fun:g_type_class_ref
|
||||
obj:*libgtk-3*
|
||||
...
|
||||
fun:gtk_init_check
|
||||
}
|
||||
{
|
||||
<insert_a_suppression_name_here>
|
||||
Memcheck:Leak
|
||||
fun:malloc
|
||||
...
|
||||
fun:atk_bridge_adaptor_init
|
||||
obj:*libgtk-3*
|
||||
...
|
||||
fun:gtk_init
|
||||
}
|
||||
{
|
||||
<insert_a_suppression_name_here>
|
||||
Memcheck:Leak
|
||||
fun:*alloc
|
||||
...
|
||||
fun:g_application_register
|
||||
obj:*libgio-2*
|
||||
}
|
||||
{
|
||||
<insert_a_suppression_name_here>
|
||||
Memcheck:Leak
|
||||
fun:*alloc
|
||||
...
|
||||
fun:g_thread_new
|
||||
obj:*libgio-2*
|
||||
}
|
||||
{
|
||||
<insert_a_suppression_name_here>
|
||||
Memcheck:Leak
|
||||
fun:*alloc
|
||||
...
|
||||
fun:g_thread_pool_push
|
||||
...
|
||||
fun:g_bus_get
|
||||
fun:g_bus_watch_name
|
||||
}
|
||||
{
|
||||
<insert_a_suppression_name_here>
|
||||
Memcheck:Leak
|
||||
match-leak-kinds: possible
|
||||
fun:*alloc
|
||||
...
|
||||
fun:g_param_spec_enum
|
||||
...
|
||||
fun:g_bus_get_sync
|
||||
obj:*libgio-*
|
||||
fun:g_application_register
|
||||
}
|
||||
{
|
||||
<insert_a_suppression_name_here>
|
||||
Memcheck:Leak
|
||||
match-leak-kinds: possible
|
||||
fun:*alloc
|
||||
fun:g_realloc
|
||||
...
|
||||
fun:gtk_button_set_image_position
|
||||
fun:g_object_setv
|
||||
...
|
||||
obj:*libgtk-3*
|
||||
}
|
||||
{
|
||||
<insert_a_suppression_name_here>
|
||||
Memcheck:Leak
|
||||
match-leak-kinds: possible
|
||||
fun:*alloc
|
||||
...
|
||||
fun:gtk_cell_renderer_render
|
||||
...
|
||||
obj:*libgtk-3*
|
||||
}
|
Loading…
Reference in New Issue