diff options
author | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2023-03-05 00:08:45 +0000 |
---|---|---|
committer | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2023-03-05 00:08:45 +0000 |
commit | a34dbc36546c75441c56a321dae9e245424e5fa7 (patch) | |
tree | 8875fa0f27533cfd26a14eaec6d5e7ed94fd8f96 | |
parent | 1527968c8b7d27fcabf56306b034a56e30059a4b (diff) | |
parent | a16dd6b4ec3a36f72e1b994ce719623f9db7ad65 (diff) | |
download | iproute2-a34dbc36546c75441c56a321dae9e245424e5fa7.tar.gz |
Snap for 9690662 from a16dd6b4ec3a36f72e1b994ce719623f9db7ad65 to udc-release
Change-Id: I9ccd633d4196a8eb9e1ec0b0994fe736788226b5
-rw-r--r-- | Android.bp | 2 | ||||
-rw-r--r-- | ip/Android.bp | 2 | ||||
-rw-r--r-- | tc/Android.bp | 13 | ||||
-rwxr-xr-x | tc/make-static-syms.sh | 10 | ||||
-rw-r--r-- | tc/static-syms.h | 72 |
5 files changed, 26 insertions, 73 deletions
@@ -85,5 +85,7 @@ cc_defaults { "-DHAVE_UTIME_H", "-DNO_SHARED_LIBS", + + "-Dstrdupa(__S)=strcpy(alloca(strlen(__S) + 1), __S)", ], } diff --git a/ip/Android.bp b/ip/Android.bp index 25a44677..b40fc4a0 100644 --- a/ip/Android.bp +++ b/ip/Android.bp @@ -43,6 +43,8 @@ cc_binary { "ipfou.c", "ipila.c", "ipl2tp.c", + "iplink_bond.c", + "iplink_bond_slave.c", "iplink_bridge.c", "iplink_bridge_slave.c", "iplink.c", diff --git a/tc/Android.bp b/tc/Android.bp index 426e14fd..1838acf7 100644 --- a/tc/Android.bp +++ b/tc/Android.bp @@ -32,6 +32,14 @@ license { } genrule { + name: "static-syms.h", + out: ["static-syms.h"], + srcs: ["*.c"], + tool_files: ["make-static-syms.sh"], + cmd: "$(location make-static-syms.sh) $(in) > $(out)", +} + +genrule { name: "emp_ematch.yacc.c", cmd: "$(location bison) -y --output=$(genDir)/emp_ematch.yacc.c $(in)", out: ["emp_ematch.yacc.c"], @@ -51,7 +59,10 @@ cc_binary { name: "tc", defaults: ["iproute2_defaults"], - generated_headers: ["emp_ematch.yacc.h"], + generated_headers: [ + "emp_ematch.yacc.h", + "static-syms.h", + ], // ordering affects link order, so cannot be quite fully sorted srcs: [ diff --git a/tc/make-static-syms.sh b/tc/make-static-syms.sh new file mode 100755 index 00000000..6a5972ae --- /dev/null +++ b/tc/make-static-syms.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +# This is the rule from the end of Makefile, with $* instead of $^ on the +# first line, and $ instead of $$ on the other lines, but otherwise identical. +# (Which is why the indentation is weird!) + + files="$*" ; \ + for s in `grep -B 3 '\<dlsym' $files | sed -n '/snprintf/{s:.*"\([^"]*\)".*:\1:;s:%s::;p}'` ; do \ + sed -n '/'$s'[^ ]* =/{s:.* \([^ ]*'$s'[^ ]*\) .*:extern char \1[] __attribute__((weak)); if (!strcmp(sym, "\1")) return \1;:;p}' $files ; \ + done diff --git a/tc/static-syms.h b/tc/static-syms.h deleted file mode 100644 index 2aa735f3..00000000 --- a/tc/static-syms.h +++ /dev/null @@ -1,72 +0,0 @@ -extern char police_action_util[] __attribute__((weak)); if (!strcmp(sym, "police_action_util")) return police_action_util; -extern char gact_action_util[] __attribute__((weak)); if (!strcmp(sym, "gact_action_util")) return gact_action_util; -extern char mirred_action_util[] __attribute__((weak)); if (!strcmp(sym, "mirred_action_util")) return mirred_action_util; -extern char tunnel_key_action_util[] __attribute__((weak)); if (!strcmp(sym, "tunnel_key_action_util")) return tunnel_key_action_util; -extern char nat_action_util[] __attribute__((weak)); if (!strcmp(sym, "nat_action_util")) return nat_action_util; -extern char simple_action_util[] __attribute__((weak)); if (!strcmp(sym, "simple_action_util")) return simple_action_util; -extern char ipt_action_util[] __attribute__((weak)); if (!strcmp(sym, "ipt_action_util")) return ipt_action_util; -extern char bpf_action_util[] __attribute__((weak)); if (!strcmp(sym, "bpf_action_util")) return bpf_action_util; -extern char connmark_action_util[] __attribute__((weak)); if (!strcmp(sym, "connmark_action_util")) return connmark_action_util; -extern char ife_action_util[] __attribute__((weak)); if (!strcmp(sym, "ife_action_util")) return ife_action_util; -extern char sample_action_util[] __attribute__((weak)); if (!strcmp(sym, "sample_action_util")) return sample_action_util; -extern char skbedit_action_util[] __attribute__((weak)); if (!strcmp(sym, "skbedit_action_util")) return skbedit_action_util; -extern char ipt_action_util[] __attribute__((weak)); if (!strcmp(sym, "ipt_action_util")) return ipt_action_util; -extern char pedit_action_util[] __attribute__((weak)); if (!strcmp(sym, "pedit_action_util")) return pedit_action_util; -extern char csum_action_util[] __attribute__((weak)); if (!strcmp(sym, "csum_action_util")) return csum_action_util; -extern char xt_action_util[] __attribute__((weak)); if (!strcmp(sym, "xt_action_util")) return xt_action_util; -extern char vlan_action_util[] __attribute__((weak)); if (!strcmp(sym, "vlan_action_util")) return vlan_action_util; -extern char skbmod_action_util[] __attribute__((weak)); if (!strcmp(sym, "skbmod_action_util")) return skbmod_action_util; -extern char canid_ematch_util[] __attribute__((weak)); if (!strcmp(sym, "canid_ematch_util")) return canid_ematch_util; -extern char cmp_ematch_util[] __attribute__((weak)); if (!strcmp(sym, "cmp_ematch_util")) return cmp_ematch_util; -extern char u32_ematch_util[] __attribute__((weak)); if (!strcmp(sym, "u32_ematch_util")) return u32_ematch_util; -extern char meta_ematch_util[] __attribute__((weak)); if (!strcmp(sym, "meta_ematch_util")) return meta_ematch_util; -extern char nbyte_ematch_util[] __attribute__((weak)); if (!strcmp(sym, "nbyte_ematch_util")) return nbyte_ematch_util; -extern char ipset_ematch_util[] __attribute__((weak)); if (!strcmp(sym, "ipset_ematch_util")) return ipset_ematch_util; -extern char bpf_exec_util[] __attribute__((weak)); if (!strcmp(sym, "bpf_exec_util")) return bpf_exec_util; -extern char p_pedit_udp[] __attribute__((weak)); if (!strcmp(sym, "p_pedit_udp")) return p_pedit_udp; -extern char p_pedit_ip[] __attribute__((weak)); if (!strcmp(sym, "p_pedit_ip")) return p_pedit_ip; -extern char p_pedit_ip6[] __attribute__((weak)); if (!strcmp(sym, "p_pedit_ip6")) return p_pedit_ip6; -extern char p_pedit_tcp[] __attribute__((weak)); if (!strcmp(sym, "p_pedit_tcp")) return p_pedit_tcp; -extern char p_pedit_icmp[] __attribute__((weak)); if (!strcmp(sym, "p_pedit_icmp")) return p_pedit_icmp; -extern char p_pedit_eth[] __attribute__((weak)); if (!strcmp(sym, "p_pedit_eth")) return p_pedit_eth; -extern char fq_qdisc_util[] __attribute__((weak)); if (!strcmp(sym, "fq_qdisc_util")) return fq_qdisc_util; -extern char mqprio_qdisc_util[] __attribute__((weak)); if (!strcmp(sym, "mqprio_qdisc_util")) return mqprio_qdisc_util; -extern char sfq_qdisc_util[] __attribute__((weak)); if (!strcmp(sym, "sfq_qdisc_util")) return sfq_qdisc_util; -extern char hfsc_qdisc_util[] __attribute__((weak)); if (!strcmp(sym, "hfsc_qdisc_util")) return hfsc_qdisc_util; -extern char hhf_qdisc_util[] __attribute__((weak)); if (!strcmp(sym, "hhf_qdisc_util")) return hhf_qdisc_util; -extern char pie_qdisc_util[] __attribute__((weak)); if (!strcmp(sym, "pie_qdisc_util")) return pie_qdisc_util; -extern char fq_codel_qdisc_util[] __attribute__((weak)); if (!strcmp(sym, "fq_codel_qdisc_util")) return fq_codel_qdisc_util; -extern char rr_qdisc_util[] __attribute__((weak)); if (!strcmp(sym, "rr_qdisc_util")) return rr_qdisc_util; -extern char clsact_qdisc_util[] __attribute__((weak)); if (!strcmp(sym, "clsact_qdisc_util")) return clsact_qdisc_util; -extern char dsmark_qdisc_util[] __attribute__((weak)); if (!strcmp(sym, "dsmark_qdisc_util")) return dsmark_qdisc_util; -extern char red_qdisc_util[] __attribute__((weak)); if (!strcmp(sym, "red_qdisc_util")) return red_qdisc_util; -extern char choke_qdisc_util[] __attribute__((weak)); if (!strcmp(sym, "choke_qdisc_util")) return choke_qdisc_util; -extern char codel_qdisc_util[] __attribute__((weak)); if (!strcmp(sym, "codel_qdisc_util")) return codel_qdisc_util; -extern char htb_qdisc_util[] __attribute__((weak)); if (!strcmp(sym, "htb_qdisc_util")) return htb_qdisc_util; -extern char tbf_qdisc_util[] __attribute__((weak)); if (!strcmp(sym, "tbf_qdisc_util")) return tbf_qdisc_util; -extern char sfb_qdisc_util[] __attribute__((weak)); if (!strcmp(sym, "sfb_qdisc_util")) return sfb_qdisc_util; -extern char qfq_qdisc_util[] __attribute__((weak)); if (!strcmp(sym, "qfq_qdisc_util")) return qfq_qdisc_util; -extern char drr_qdisc_util[] __attribute__((weak)); if (!strcmp(sym, "drr_qdisc_util")) return drr_qdisc_util; -extern char bfifo_qdisc_util[] __attribute__((weak)); if (!strcmp(sym, "bfifo_qdisc_util")) return bfifo_qdisc_util; -extern char pfifo_qdisc_util[] __attribute__((weak)); if (!strcmp(sym, "pfifo_qdisc_util")) return pfifo_qdisc_util; -extern char pfifo_head_drop_qdisc_util[] __attribute__((weak)); if (!strcmp(sym, "pfifo_head_drop_qdisc_util")) return pfifo_head_drop_qdisc_util; -extern char pfifo_fast_qdisc_util[] __attribute__((weak)); if (!strcmp(sym, "pfifo_fast_qdisc_util")) return pfifo_fast_qdisc_util; -extern char multiq_qdisc_util[] __attribute__((weak)); if (!strcmp(sym, "multiq_qdisc_util")) return multiq_qdisc_util; -extern char atm_qdisc_util[] __attribute__((weak)); if (!strcmp(sym, "atm_qdisc_util")) return atm_qdisc_util; -extern char gred_qdisc_util[] __attribute__((weak)); if (!strcmp(sym, "gred_qdisc_util")) return gred_qdisc_util; -extern char cbq_qdisc_util[] __attribute__((weak)); if (!strcmp(sym, "cbq_qdisc_util")) return cbq_qdisc_util; -extern char prio_qdisc_util[] __attribute__((weak)); if (!strcmp(sym, "prio_qdisc_util")) return prio_qdisc_util; -extern char ingress_qdisc_util[] __attribute__((weak)); if (!strcmp(sym, "ingress_qdisc_util")) return ingress_qdisc_util; -extern char netem_qdisc_util[] __attribute__((weak)); if (!strcmp(sym, "netem_qdisc_util")) return netem_qdisc_util; -extern char flow_filter_util[] __attribute__((weak)); if (!strcmp(sym, "flow_filter_util")) return flow_filter_util; -extern char tcindex_filter_util[] __attribute__((weak)); if (!strcmp(sym, "tcindex_filter_util")) return tcindex_filter_util; -extern char matchall_filter_util[] __attribute__((weak)); if (!strcmp(sym, "matchall_filter_util")) return matchall_filter_util; -extern char u32_filter_util[] __attribute__((weak)); if (!strcmp(sym, "u32_filter_util")) return u32_filter_util; -extern char rsvp_filter_util[] __attribute__((weak)); if (!strcmp(sym, "rsvp_filter_util")) return rsvp_filter_util; -extern char rsvp6_filter_util[] __attribute__((weak)); if (!strcmp(sym, "rsvp6_filter_util")) return rsvp6_filter_util; -extern char cgroup_filter_util[] __attribute__((weak)); if (!strcmp(sym, "cgroup_filter_util")) return cgroup_filter_util; -extern char route_filter_util[] __attribute__((weak)); if (!strcmp(sym, "route_filter_util")) return route_filter_util; -extern char basic_filter_util[] __attribute__((weak)); if (!strcmp(sym, "basic_filter_util")) return basic_filter_util; -extern char flower_filter_util[] __attribute__((weak)); if (!strcmp(sym, "flower_filter_util")) return flower_filter_util; -extern char bpf_filter_util[] __attribute__((weak)); if (!strcmp(sym, "bpf_filter_util")) return bpf_filter_util; -extern char fw_filter_util[] __attribute__((weak)); if (!strcmp(sym, "fw_filter_util")) return fw_filter_util; |