diff options
author | Maciej Żenczykowski <maze@google.com> | 2023-03-03 19:38:48 +0000 |
---|---|---|
committer | Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> | 2023-03-03 19:38:48 +0000 |
commit | b5fda916c68821a415073ea4cf1336fe351fab55 (patch) | |
tree | 63c36b4fbb777f851efdc651a487e6590c72569c | |
parent | 7b00f3b496a2c0c98f5e4d4c9e989391f33ad1ea (diff) | |
parent | b3abef6f6e2df7f3cf8c8db41a2b4533e42aba45 (diff) | |
download | iproute2-b5fda916c68821a415073ea4cf1336fe351fab55.tar.gz |
Merge "Generate static-syms.h at build time." am: 494234160c am: 204573a093 am: b3abef6f6e
Original change: https://android-review.googlesource.com/c/platform/external/iproute2/+/2468220
Change-Id: I1386d51e7d5795dd2a90e6a590df3705b4b6c7c9
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
-rw-r--r-- | tc/Android.bp | 13 | ||||
-rwxr-xr-x | tc/make-static-syms.sh | 10 | ||||
-rw-r--r-- | tc/static-syms.h | 72 |
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; |