# Linker script for libgdiagnostics.so
#   Copyright (C) 2023-2025 Free Software Foundation, Inc.
#   Contributed by David Malcolm <dmalcolm@redhat.com>.
#
# This file is part of GCC.
#
# GCC is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3, or (at your option)
# any later version.
#
# GCC is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with GCC; see the file COPYING3.  If not see
# <http://www.gnu.org/licenses/>.  */

# The initial release of the library.
LIBGDIAGNOSTICS_ABI_0
{
  global:
    # Keep this list in order of decls in header file.
    diagnostic_manager_new;
    diagnostic_manager_release;
    diagnostic_manager_set_tool_name;
    diagnostic_manager_set_full_name;
    diagnostic_manager_set_version_string;
    diagnostic_manager_set_version_url;
    diagnostic_manager_add_text_sink;
    diagnostic_text_sink_set_source_printing_enabled;
    diagnostic_text_sink_set_colorize;
    diagnostic_text_sink_set_labelled_source_colorization_enabled;
    diagnostic_manager_add_sarif_sink;
    diagnostic_manager_write_patch;
    diagnostic_manager_new_file;
    diagnostic_file_set_buffered_content;
    diagnostic_manager_debug_dump_file;
    diagnostic_manager_new_location_from_file_and_line;
    diagnostic_manager_new_location_from_file_line_column;
    diagnostic_manager_new_location_from_range;
    diagnostic_manager_debug_dump_location;
    diagnostic_manager_new_logical_location;
    diagnostic_manager_debug_dump_logical_location;
    diagnostic_manager_begin_group;
    diagnostic_manager_end_group;
    diagnostic_begin;
    diagnostic_set_cwe;
    diagnostic_add_rule;
    diagnostic_set_location;
    diagnostic_set_location_with_label;
    diagnostic_add_location;
    diagnostic_add_location_with_label;
    diagnostic_set_logical_location;
    diagnostic_add_fix_it_hint_insert_before;
    diagnostic_add_fix_it_hint_insert_after;
    diagnostic_add_fix_it_hint_replace;
    diagnostic_add_fix_it_hint_delete;

    diagnostic_add_execution_path;
    diagnostic_manager_new_execution_path;
    diagnostic_take_execution_path;
    diagnostic_execution_path_release;
    diagnostic_execution_path_add_event;
    diagnostic_execution_path_add_event_va;

    diagnostic_finish;
    diagnostic_finish_va;


    diagnostic_physical_location_get_file;

  local: *;
};

# Add accessors for diagnostic_logical_location.
LIBGDIAGNOSTICS_ABI_1 {
  global:
    diagnostic_logical_location_get_kind;
    diagnostic_logical_location_get_parent;
    diagnostic_logical_location_get_short_name;
    diagnostic_logical_location_get_fully_qualified_name;
    diagnostic_logical_location_get_decorated_name;
} LIBGDIAGNOSTICS_ABI_0;

# Add hooks needed for HTML output from sarif-replay
LIBGDIAGNOSTICS_ABI_2 {
  global:
    diagnostic_manager_add_sink_from_spec;
    diagnostic_manager_set_analysis_target;
} LIBGDIAGNOSTICS_ABI_1;

# Add hooks needed for diagnostic_graph support.
LIBGDIAGNOSTICS_ABI_3 {
  global:
    diagnostic_manager_new_graph;
    diagnostic_manager_take_global_graph;
    diagnostic_take_graph;
    diagnostic_graph_release;
    diagnostic_graph_set_description;
    diagnostic_graph_add_node;
    diagnostic_graph_add_edge;
    diagnostic_graph_get_node_by_id;
    diagnostic_graph_get_edge_by_id;
    diagnostic_node_set_label;
    diagnostic_node_set_location;
    diagnostic_node_set_logical_location;

    # Private hooks used by sarif-replay
    private_diagnostic_graph_set_property_bag;
    private_diagnostic_node_set_property_bag;
    private_diagnostic_edge_set_property_bag;
} LIBGDIAGNOSTICS_ABI_2;

# Add diagnostic_message_buffer
LIBGDIAGNOSTICS_ABI_4 {
  global:
    diagnostic_message_buffer_new;
    diagnostic_message_buffer_release;
    diagnostic_message_buffer_append_str;
    diagnostic_message_buffer_append_text;
    diagnostic_message_buffer_append_byte;
    diagnostic_message_buffer_append_printf;
    diagnostic_message_buffer_append_event_id;
    diagnostic_message_buffer_begin_url;
    diagnostic_message_buffer_end_url;
    diagnostic_message_buffer_begin_quote;
    diagnostic_message_buffer_end_quote;
    diagnostic_message_buffer_begin_color;
    diagnostic_message_buffer_end_color;
    diagnostic_message_buffer_dump;
    diagnostic_finish_via_msg_buf;
    diagnostic_add_location_with_label_via_msg_buf;
    diagnostic_execution_path_add_event_via_msg_buf;
    diagnostic_graph_set_description_via_msg_buf;
    diagnostic_graph_add_edge_via_msg_buf;
    diagnostic_node_set_label_via_msg_buf;

    # Private hook used by sarif-replay
    private_diagnostic_execution_path_add_event_3;
} LIBGDIAGNOSTICS_ABI_3;
