aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMaciej Żenczykowski <maze@google.com>2023-03-03 01:21:30 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2023-03-03 01:21:30 +0000
commit494234160c4b1f1b03e9796687f65a098014afbe (patch)
tree63c36b4fbb777f851efdc651a487e6590c72569c
parentb57891f017d275d9818bbc3c38ba901f3256173b (diff)
parent342960e4d1b82136eb2226221c6255d5adec1a62 (diff)
downloadiproute2-494234160c4b1f1b03e9796687f65a098014afbe.tar.gz
Merge "Generate static-syms.h at build time."
-rw-r--r--tc/Android.bp13
-rwxr-xr-xtc/make-static-syms.sh10
-rw-r--r--tc/static-syms.h72
3 files changed, 22 insertions, 73 deletions
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;