build: explicitly whitelist symbols in NetworkManager binary

- this allows the linker to drop unused symbols via link-time optimization
  or with --gc-sections:

    git clean -fdx
    ./autogen.sh --enable-ld-gc --enable-ifcfg-rh --enable-ifupdown \
        --enable-ifnet --enable-ibft --enable-teamdctl --enable-wifi \
        --with-modem-manager-1 --with-ofono --with-more-asserts \
        --with-more-logging
    make -j20
    strip ./src/NetworkManager

  gives 2822840 vs. 2625960 bytes (-7%).

- this also gives more control over the symbols that are used by the
  plugins. Yes, it means if you modify a plugin to use a new symbols,
  you have to extend NetworkManager.ver file.
  You can run the script to create the version file:

    $ ./tools/create-exports-NetworkManager.sh update

  but be sure that your current configuration enables all plugins
  and debugging options to actually use all symbols that are in use.

- If you compile with certain plugins enabled, you could theoretically
  re-compile NetworkManager to expose less symbols. Try:

    $ ./tools/create-exports-NetworkManager.sh build

- note that we have `make check` tests to ensure that all used
  symbols of the plugins can be found. So, it should not be possible
  to accidentally forget to expose a symbol.
This commit is contained in:
Thomas Haller 2016-10-11 16:40:00 +02:00
parent 76a057b4ec
commit b171fbc9ca
2 changed files with 657 additions and 9 deletions

View file

@ -1,15 +1,559 @@
# this file is generated by ./tools/create-exports-NetworkManager.sh
{
global:
nm_*;
nmp_*;
_nm*;
NM*;
_NM*;
NM_ASSERT_VALID_PATH_COMPONENT;
_nm_dbus_error_has_name;
_nm_dbus_proxy_call_finish;
_nm_dbus_signal_connect_data;
_nm_device_factory_no_default_links;
_nm_exported_object_clear_and_unexport;
_nm_log_impl;
_nm_logging_enabled_state;
_nm_platform_error_to_string;
_nm_singleton_instance_register_destruction;
_nm_utils_ascii_str_to_int64;
_nm_utils_dns_option_find_idx;
_nm_utils_hash_values_to_slist;
_nm_utils_strsplit_set;
_nm_utils_uuid_generate_from_strings;
nm_act_request_cancel_secrets;
nm_act_request_clear_secrets;
nm_act_request_get_applied_connection;
nm_act_request_get_secrets;
nm_act_request_get_settings_connection;
nm_act_request_get_type;
nm_active_connection_get_specific_object;
nm_active_connection_get_type;
nm_active_connection_set_specific_object;
nm_config_data_get_connection_default;
nm_config_data_get_device_config;
nm_config_data_get_device_config_boolean;
nm_config_data_get_value_boolean;
nm_config_get;
nm_config_get_data;
nm_config_get_data_orig;
nm_config_get_dhcp_client;
nm_config_get_monitor_connection_files;
nm_connection_add_setting;
nm_connection_compare;
nm_connection_error_quark;
nm_connection_for_each_setting_value;
nm_connection_get_id;
nm_connection_get_interface_name;
nm_connection_get_path;
nm_connection_get_setting_802_1x;
nm_connection_get_setting_adsl;
nm_connection_get_setting_bluetooth;
nm_connection_get_setting_bond;
nm_connection_get_setting_bridge;
nm_connection_get_setting_bridge_port;
nm_connection_get_setting_cdma;
nm_connection_get_setting_connection;
nm_connection_get_setting_dcb;
nm_connection_get_setting_gsm;
nm_connection_get_setting_infiniband;
nm_connection_get_setting_ip4_config;
nm_connection_get_setting_ip6_config;
nm_connection_get_setting_olpc_mesh;
nm_connection_get_setting_ppp;
nm_connection_get_setting_pppoe;
nm_connection_get_setting_proxy;
nm_connection_get_setting_serial;
nm_connection_get_setting_team;
nm_connection_get_setting_team_port;
nm_connection_get_setting_vlan;
nm_connection_get_setting_wired;
nm_connection_get_setting_wireless;
nm_connection_get_setting_wireless_security;
nm_connection_get_type;
nm_connection_get_uuid;
nm_connection_is_type;
nm_connection_need_secrets;
nm_connection_normalize;
nm_connection_set_path;
nm_connection_verify;
nm_device_activate_ip4_state_done;
nm_device_activate_ip4_state_in_conf;
nm_device_activate_ip6_state_done;
nm_device_activate_ip6_state_in_conf;
nm_device_activate_schedule_ip4_config_result;
nm_device_activate_schedule_ip4_config_timeout;
nm_device_activate_schedule_ip6_config_result;
nm_device_activate_schedule_ip6_config_timeout;
nm_device_activate_schedule_stage1_device_prepare;
nm_device_activate_schedule_stage2_device_config;
nm_device_activate_schedule_stage3_ip_config_start;
nm_device_add_pending_action;
nm_device_bring_up;
nm_device_emit_recheck_auto_activate;
nm_device_error_quark;
nm_device_factory_emit_component_added;
nm_device_factory_get_type;
nm_device_get_act_request;
nm_device_get_applied_connection;
nm_device_get_applied_setting;
nm_device_get_firmware_missing;
nm_device_get_hw_address;
nm_device_get_iface;
nm_device_get_ifindex;
nm_device_get_initial_hw_address;
nm_device_get_ip_iface;
nm_device_get_ip_ifindex;
nm_device_get_permanent_hw_address;
nm_device_get_settings;
nm_device_get_settings_connection;
nm_device_get_state;
nm_device_get_type;
nm_device_has_unmodified_applied_connection;
nm_device_hw_addr_reset;
nm_device_hw_addr_set;
nm_device_hw_addr_set_cloned;
nm_device_ip_method_failed;
nm_device_ipv6_sysctl_set;
nm_device_is_activating;
nm_device_master_check_slave_physical_port;
nm_device_queue_recheck_assume;
nm_device_queue_recheck_available;
nm_device_queue_state;
nm_device_recheck_available_connections;
nm_device_remove_pending_action;
nm_device_set_autoconnect;
nm_device_set_carrier;
nm_device_set_dhcp_anycast_address;
nm_device_set_dhcp_timeout;
nm_device_set_firmware_missing;
nm_device_set_ip_iface;
nm_device_set_wwan_ip4_config;
nm_device_set_wwan_ip6_config;
nm_device_state_changed;
nm_device_take_down;
nm_device_uses_assumed_connection;
nm_ethernet_address_is_valid;
nm_exported_object_class_add_interface;
nm_exported_object_export;
nm_exported_object_get_path;
nm_exported_object_get_type;
nm_exported_object_is_exported;
nm_exported_object_skeleton_create;
nm_exported_object_skeleton_release;
nm_exported_object_skeletonify_method_name;
nm_exported_object_unexport;
nm_inotify_helper_add_watch;
nm_inotify_helper_get;
nm_inotify_helper_remove_watch;
nm_ip4_config_add_address;
nm_ip4_config_add_nameserver;
nm_ip4_config_add_route;
nm_ip4_config_get_address;
nm_ip4_config_get_nameserver;
nm_ip4_config_get_num_nameservers;
nm_ip4_config_new;
nm_ip4_config_reset_nameservers;
nm_ip4_config_set_gateway;
nm_ip4_config_set_mtu;
nm_ip6_config_add_address;
nm_ip6_config_add_nameserver;
nm_ip6_config_get_address;
nm_ip6_config_get_num_addresses;
nm_ip6_config_new;
nm_ip6_config_set_gateway;
nm_ip_address_get_address;
nm_ip_address_get_attribute;
nm_ip_address_get_prefix;
nm_ip_address_new;
nm_ip_address_set_attribute;
nm_ip_address_unref;
nm_ip_route_get_dest;
nm_ip_route_get_metric;
nm_ip_route_get_next_hop;
nm_ip_route_get_prefix;
nm_ip_route_new;
nm_ip_route_unref;
nm_manager_get;
nm_manager_get_devices;
nm_manager_set_capability;
nm_platform_address_flush;
nm_platform_get;
nm_platform_link_enslave;
nm_platform_link_get_by_ifname;
nm_platform_link_get_ifindex;
nm_platform_link_get_mtu;
nm_platform_link_get_type;
nm_platform_link_release;
nm_platform_link_set_down;
nm_platform_link_set_noarp;
nm_platform_link_set_up;
nm_platform_link_team_add;
nm_platform_mesh_get_channel;
nm_platform_mesh_set_channel;
nm_platform_mesh_set_ssid;
nm_platform_sysctl_get_int_checked;
nm_platform_wifi_find_frequency;
nm_platform_wifi_get_bssid;
nm_platform_wifi_get_capabilities;
nm_platform_wifi_get_frequency;
nm_platform_wifi_get_mode;
nm_platform_wifi_get_quality;
nm_platform_wifi_get_rate;
nm_platform_wifi_indicate_addressing_running;
nm_platform_wifi_set_mode;
nm_platform_wifi_set_powersave;
nm_ppp_manager_new;
nm_ppp_manager_start;
nm_ppp_manager_stop;
nm_ppp_manager_stop_finish;
nm_route_manager_get;
nm_route_manager_route_flush;
nm_setting_802_1x_add_eap_method;
nm_setting_802_1x_get_altsubject_match;
nm_setting_802_1x_get_anonymous_identity;
nm_setting_802_1x_get_ca_cert_blob;
nm_setting_802_1x_get_ca_cert_path;
nm_setting_802_1x_get_ca_cert_scheme;
nm_setting_802_1x_get_client_cert_blob;
nm_setting_802_1x_get_client_cert_path;
nm_setting_802_1x_get_client_cert_scheme;
nm_setting_802_1x_get_domain_suffix_match;
nm_setting_802_1x_get_eap_method;
nm_setting_802_1x_get_identity;
nm_setting_802_1x_get_num_altsubject_matches;
nm_setting_802_1x_get_num_eap_methods;
nm_setting_802_1x_get_num_phase2_altsubject_matches;
nm_setting_802_1x_get_pac_file;
nm_setting_802_1x_get_password;
nm_setting_802_1x_get_password_flags;
nm_setting_802_1x_get_phase1_fast_provisioning;
nm_setting_802_1x_get_phase1_peaplabel;
nm_setting_802_1x_get_phase1_peapver;
nm_setting_802_1x_get_phase2_altsubject_match;
nm_setting_802_1x_get_phase2_auth;
nm_setting_802_1x_get_phase2_autheap;
nm_setting_802_1x_get_phase2_ca_cert_blob;
nm_setting_802_1x_get_phase2_ca_cert_path;
nm_setting_802_1x_get_phase2_ca_cert_scheme;
nm_setting_802_1x_get_phase2_client_cert_blob;
nm_setting_802_1x_get_phase2_client_cert_path;
nm_setting_802_1x_get_phase2_client_cert_scheme;
nm_setting_802_1x_get_phase2_domain_suffix_match;
nm_setting_802_1x_get_phase2_private_key_blob;
nm_setting_802_1x_get_phase2_private_key_format;
nm_setting_802_1x_get_phase2_private_key_password;
nm_setting_802_1x_get_phase2_private_key_password_flags;
nm_setting_802_1x_get_phase2_private_key_path;
nm_setting_802_1x_get_phase2_private_key_scheme;
nm_setting_802_1x_get_phase2_subject_match;
nm_setting_802_1x_get_private_key_blob;
nm_setting_802_1x_get_private_key_format;
nm_setting_802_1x_get_private_key_password;
nm_setting_802_1x_get_private_key_password_flags;
nm_setting_802_1x_get_private_key_path;
nm_setting_802_1x_get_private_key_scheme;
nm_setting_802_1x_get_subject_match;
nm_setting_802_1x_new;
nm_setting_802_1x_set_ca_cert;
nm_setting_802_1x_set_client_cert;
nm_setting_802_1x_set_phase2_ca_cert;
nm_setting_802_1x_set_phase2_client_cert;
nm_setting_802_1x_set_phase2_private_key;
nm_setting_802_1x_set_private_key;
nm_setting_adsl_get_encapsulation;
nm_setting_adsl_get_protocol;
nm_setting_adsl_get_type;
nm_setting_adsl_get_username;
nm_setting_adsl_get_vci;
nm_setting_adsl_get_vpi;
nm_setting_bluetooth_get_bdaddr;
nm_setting_bluetooth_get_connection_type;
nm_setting_bluetooth_new;
nm_setting_bond_add_option;
nm_setting_bond_get_num_options;
nm_setting_bond_get_option;
nm_setting_bond_get_type;
nm_setting_bond_new;
nm_setting_bridge_get_ageing_time;
nm_setting_bridge_get_forward_delay;
nm_setting_bridge_get_hello_time;
nm_setting_bridge_get_mac_address;
nm_setting_bridge_get_max_age;
nm_setting_bridge_get_multicast_snooping;
nm_setting_bridge_get_priority;
nm_setting_bridge_get_stp;
nm_setting_bridge_get_type;
nm_setting_bridge_new;
nm_setting_bridge_port_get_hairpin_mode;
nm_setting_bridge_port_get_path_cost;
nm_setting_bridge_port_get_priority;
nm_setting_bridge_port_new;
nm_setting_cdma_get_number;
nm_setting_cdma_get_password;
nm_setting_cdma_get_username;
nm_setting_cdma_new;
nm_setting_connection_add_permission;
nm_setting_connection_add_secondary;
nm_setting_connection_get_autoconnect;
nm_setting_connection_get_autoconnect_priority;
nm_setting_connection_get_autoconnect_slaves;
nm_setting_connection_get_connection_type;
nm_setting_connection_get_gateway_ping_timeout;
nm_setting_connection_get_id;
nm_setting_connection_get_interface_name;
nm_setting_connection_get_lldp;
nm_setting_connection_get_master;
nm_setting_connection_get_metered;
nm_setting_connection_get_num_permissions;
nm_setting_connection_get_num_secondaries;
nm_setting_connection_get_permission;
nm_setting_connection_get_secondary;
nm_setting_connection_get_stable_id;
nm_setting_connection_get_type;
nm_setting_connection_get_uuid;
nm_setting_connection_get_zone;
nm_setting_connection_is_slave_type;
nm_setting_connection_new;
nm_setting_dcb_get_app_fcoe_flags;
nm_setting_dcb_get_app_fcoe_mode;
nm_setting_dcb_get_app_fcoe_priority;
nm_setting_dcb_get_app_fip_flags;
nm_setting_dcb_get_app_fip_priority;
nm_setting_dcb_get_app_iscsi_flags;
nm_setting_dcb_get_app_iscsi_priority;
nm_setting_dcb_get_priority_bandwidth;
nm_setting_dcb_get_priority_flow_control;
nm_setting_dcb_get_priority_flow_control_flags;
nm_setting_dcb_get_priority_group_bandwidth;
nm_setting_dcb_get_priority_group_flags;
nm_setting_dcb_get_priority_group_id;
nm_setting_dcb_get_priority_strict_bandwidth;
nm_setting_dcb_get_priority_traffic_class;
nm_setting_dcb_new;
nm_setting_dcb_set_priority_bandwidth;
nm_setting_dcb_set_priority_flow_control;
nm_setting_dcb_set_priority_group_bandwidth;
nm_setting_dcb_set_priority_group_id;
nm_setting_dcb_set_priority_strict_bandwidth;
nm_setting_dcb_set_priority_traffic_class;
nm_setting_generic_new;
nm_setting_get_secret_flags;
nm_setting_get_type;
nm_setting_gsm_get_apn;
nm_setting_gsm_get_device_id;
nm_setting_gsm_get_home_only;
nm_setting_gsm_get_network_id;
nm_setting_gsm_get_number;
nm_setting_gsm_get_password;
nm_setting_gsm_get_pin;
nm_setting_gsm_get_sim_id;
nm_setting_gsm_get_sim_operator_id;
nm_setting_gsm_get_username;
nm_setting_infiniband_get_mac_address;
nm_setting_infiniband_get_mtu;
nm_setting_infiniband_get_p_key;
nm_setting_infiniband_get_parent;
nm_setting_infiniband_get_transport_mode;
nm_setting_infiniband_get_type;
nm_setting_infiniband_new;
nm_setting_ip4_config_get_dhcp_client_id;
nm_setting_ip4_config_get_dhcp_fqdn;
nm_setting_ip4_config_get_type;
nm_setting_ip4_config_new;
nm_setting_ip6_config_addr_gen_mode_get_type;
nm_setting_ip6_config_get_addr_gen_mode;
nm_setting_ip6_config_get_ip6_privacy;
nm_setting_ip6_config_get_token;
nm_setting_ip6_config_get_type;
nm_setting_ip6_config_new;
nm_setting_ip_config_add_address;
nm_setting_ip_config_add_dns;
nm_setting_ip_config_add_dns_option;
nm_setting_ip_config_add_dns_search;
nm_setting_ip_config_add_route;
nm_setting_ip_config_clear_dns_options;
nm_setting_ip_config_get_address;
nm_setting_ip_config_get_dad_timeout;
nm_setting_ip_config_get_dhcp_hostname;
nm_setting_ip_config_get_dhcp_send_hostname;
nm_setting_ip_config_get_dhcp_timeout;
nm_setting_ip_config_get_dns;
nm_setting_ip_config_get_dns_option;
nm_setting_ip_config_get_dns_priority;
nm_setting_ip_config_get_dns_search;
nm_setting_ip_config_get_gateway;
nm_setting_ip_config_get_ignore_auto_dns;
nm_setting_ip_config_get_ignore_auto_routes;
nm_setting_ip_config_get_may_fail;
nm_setting_ip_config_get_method;
nm_setting_ip_config_get_never_default;
nm_setting_ip_config_get_num_addresses;
nm_setting_ip_config_get_num_dns;
nm_setting_ip_config_get_num_dns_options;
nm_setting_ip_config_get_num_dns_searches;
nm_setting_ip_config_get_num_routes;
nm_setting_ip_config_get_route;
nm_setting_ip_config_get_route_metric;
nm_setting_ip_config_get_type;
nm_setting_ip_config_has_dns_options;
nm_setting_olpc_mesh_get_channel;
nm_setting_olpc_mesh_get_dhcp_anycast_address;
nm_setting_olpc_mesh_get_ssid;
nm_setting_olpc_mesh_new;
nm_setting_ppp_get_noauth;
nm_setting_ppp_get_refuse_chap;
nm_setting_ppp_get_refuse_eap;
nm_setting_ppp_get_refuse_mschap;
nm_setting_ppp_get_refuse_mschapv2;
nm_setting_ppp_get_refuse_pap;
nm_setting_ppp_new;
nm_setting_pppoe_get_password;
nm_setting_pppoe_get_type;
nm_setting_pppoe_get_username;
nm_setting_pppoe_new;
nm_setting_proxy_get_browser_only;
nm_setting_proxy_get_method;
nm_setting_proxy_get_pac_script;
nm_setting_proxy_get_pac_url;
nm_setting_proxy_new;
nm_setting_team_get_config;
nm_setting_team_get_type;
nm_setting_team_new;
nm_setting_team_port_get_config;
nm_setting_team_port_new;
nm_setting_verify;
nm_setting_vlan_add_priority_str;
nm_setting_vlan_get_flags;
nm_setting_vlan_get_id;
nm_setting_vlan_get_parent;
nm_setting_vlan_get_type;
nm_setting_vlan_new;
nm_setting_wired_add_s390_option;
nm_setting_wired_get_cloned_mac_address;
nm_setting_wired_get_generate_mac_address_mask;
nm_setting_wired_get_mac_address;
nm_setting_wired_get_mac_address_blacklist;
nm_setting_wired_get_mtu;
nm_setting_wired_get_num_s390_options;
nm_setting_wired_get_s390_nettype;
nm_setting_wired_get_s390_option;
nm_setting_wired_get_s390_option_by_key;
nm_setting_wired_get_s390_subchannels;
nm_setting_wired_get_type;
nm_setting_wired_get_wake_on_lan;
nm_setting_wired_get_wake_on_lan_password;
nm_setting_wired_new;
nm_setting_wireless_ap_security_compatible;
nm_setting_wireless_get_band;
nm_setting_wireless_get_bssid;
nm_setting_wireless_get_channel;
nm_setting_wireless_get_cloned_mac_address;
nm_setting_wireless_get_generate_mac_address_mask;
nm_setting_wireless_get_hidden;
nm_setting_wireless_get_mac_address;
nm_setting_wireless_get_mac_address_blacklist;
nm_setting_wireless_get_mac_address_randomization;
nm_setting_wireless_get_mode;
nm_setting_wireless_get_mtu;
nm_setting_wireless_get_powersave;
nm_setting_wireless_get_ssid;
nm_setting_wireless_get_type;
nm_setting_wireless_new;
nm_setting_wireless_security_add_group;
nm_setting_wireless_security_add_pairwise;
nm_setting_wireless_security_add_proto;
nm_setting_wireless_security_get_auth_alg;
nm_setting_wireless_security_get_group;
nm_setting_wireless_security_get_key_mgmt;
nm_setting_wireless_security_get_leap_password;
nm_setting_wireless_security_get_leap_password_flags;
nm_setting_wireless_security_get_leap_username;
nm_setting_wireless_security_get_num_groups;
nm_setting_wireless_security_get_num_pairwise;
nm_setting_wireless_security_get_num_protos;
nm_setting_wireless_security_get_pairwise;
nm_setting_wireless_security_get_proto;
nm_setting_wireless_security_get_psk;
nm_setting_wireless_security_get_psk_flags;
nm_setting_wireless_security_get_type;
nm_setting_wireless_security_get_wep_key;
nm_setting_wireless_security_get_wep_key_flags;
nm_setting_wireless_security_get_wep_key_type;
nm_setting_wireless_security_get_wep_tx_keyidx;
nm_setting_wireless_security_new;
nm_setting_wireless_security_set_wep_key;
nm_settings_add_connection;
nm_settings_connection_add_seen_bssid;
nm_settings_connection_commit_changes;
nm_settings_connection_delete;
nm_settings_connection_get_filename;
nm_settings_connection_get_nm_generated;
nm_settings_connection_get_timestamp;
nm_settings_connection_get_type;
nm_settings_connection_has_seen_bssid;
nm_settings_connection_replace_settings;
nm_settings_connection_set_autoconnect_blocked_reason;
nm_settings_connection_set_filename;
nm_settings_connection_set_flags;
nm_settings_connection_set_ready;
nm_settings_connection_signal_remove;
nm_settings_error_quark;
nm_settings_get;
nm_settings_get_best_connections;
nm_settings_get_connections;
nm_settings_get_type;
nm_settings_plugin_get_type;
nm_simple_connection_new;
nm_supplicant_config_add_no_security;
nm_supplicant_config_add_setting_wireless;
nm_supplicant_config_add_setting_wireless_security;
nm_supplicant_config_new;
nm_supplicant_interface_disconnect;
nm_supplicant_interface_get_ap_support;
nm_supplicant_interface_get_current_bss;
nm_supplicant_interface_get_last_scan_time;
nm_supplicant_interface_get_max_scan_ssids;
nm_supplicant_interface_get_scanning;
nm_supplicant_interface_get_state;
nm_supplicant_interface_request_scan;
nm_supplicant_interface_set_config;
nm_supplicant_interface_state_to_string;
nm_supplicant_manager_create_interface;
nm_supplicant_manager_get;
nm_utils_bin2hexstr;
nm_utils_complete_generic;
nm_utils_enum_from_str;
nm_utils_enum_to_str;
nm_utils_escape_ssid;
nm_utils_file_set_contents;
nm_utils_find_helper;
nm_utils_g_value_set_object_path;
nm_utils_get_ip_config_method;
nm_utils_get_monotonic_timestamp_s;
nm_utils_hexstr2bin;
nm_utils_hw_addr_gen_random_eth;
nm_utils_hwaddr_aton;
nm_utils_hwaddr_matches;
nm_utils_hwaddr_ntoa;
nm_utils_hwaddr_valid;
nm_utils_iface_valid_name;
nm_utils_inet4_ntop;
nm_utils_ip4_get_default_prefix;
nm_utils_ip4_netmask_to_prefix;
nm_utils_ip4_prefix_to_netmask;
nm_utils_ipaddr_valid;
nm_utils_is_empty_ssid;
nm_utils_is_json_object;
nm_utils_kill_child_async;
nm_utils_monotonic_timestamp_as_boottime;
nm_utils_rsa_key_encrypt;
nm_utils_same_ssid;
nm_utils_setpgid;
nm_utils_ssid_to_utf8;
nm_utils_strbuf_append;
nm_utils_strbuf_append_str;
nm_utils_uuid_generate;
nm_utils_uuid_generate_from_string;
nm_utils_wep_key_valid;
nm_utils_wifi_channel_to_freq;
nm_utils_wifi_freq_to_channel;
/* The _IO_stdin_used symbol is used by the GNU libc to determine
which version of the I/O function should be used. Not
exporting it means that the "old" version is used, causing
crashes or other issues on some architectures. */
_IO_stdin_used;
local:
*;

View file

@ -0,0 +1,104 @@
#!/bin/bash
set -e
# generates the linker version script src/NetworkManager.ver
# by looking at the symbols needed by the device and settings
# plugins. Note that this depends on how NetworkManager and
# the plugins are build. For example, compiling without
# --with-more-asserts will yield less symbols.
#
# _build re-builds NetworkManager with relevant compile time
# options to yield the most symbols.
_build() {
git clean -fdx
./autogen.sh --enable-ld-gc --enable-ifcfg-rh --enable-ifupdown \
--enable-ifnet --enable-ibft --enable-teamdctl --enable-wifi \
--with-modem-manager-1 --with-ofono --with-more-asserts \
--with-more-logging
make -j20
}
_sort() {
LANG=C sort -u
}
call_nm() {
nm "$1" |
sed -n 's/^................ \(.\) \(.*\)$/\1 \2/p'
}
get_symbols_nm () {
call_nm ./src/NetworkManager |
sed -n 's/^[tTDR] //p' |
_sort
}
get_symbols_explict() {
cat <<EOF | _sort
_IO_stdin_used
EOF
}
get_symbols_missing() {
(for f in ./src/settings/plugins/*/.libs/*.so ./src/devices/*/.libs/*.so; do
call_nm "$f" |
sed -n 's/^\([U]\) \(\(nm_\|nmp_\|_nm\|NM\|_NM\).*\)$/\2/p'
done) |
_sort |
grep -Fx -f <(get_symbols_explict) -v |
grep -Fx -f <(get_symbols_nm)
}
pretty() {
sed 's/.*/\t\0;/'
}
do_build() {
do_update
touch src/main.c
make
}
do_rebuild() {
_build
do_build
}
do_update() {
do_generate > ./src/NetworkManager.ver
}
do_generate() {
cd "$(realpath $(dirname "$0"))/.."
test -f ./src/NetworkManager
cat <<EOF
# this file is generated by $0
{
global:
$(get_symbols_missing | pretty)
$(get_symbols_explict | pretty)
local:
*;
};
EOF
}
case "$1" in
rebuild)
do_rebuild
;;
build)
do_build
;;
update)
do_update
;;
*)
do_generate
;;
esac