From 24631e2263e341a5228d8444d6e557d8305c0c9e Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Mon, 11 Mar 2019 09:33:28 +0100 Subject: tcpdump: Move static variables to special section This fixes some issues if tcpdump is invoked a second time. --- freebsd/contrib/tcpdump/addrtoname.c | 12 ++++++++++++ freebsd/contrib/tcpdump/print-atalk.c | 3 +++ freebsd/contrib/tcpdump/print-esp.c | 3 +++ freebsd/contrib/tcpdump/print-hncp.c | 9 +++++++++ freebsd/contrib/tcpdump/print-smb.c | 6 ++++++ freebsd/contrib/tcpdump/util-print.c | 6 ++++++ 6 files changed, 39 insertions(+) diff --git a/freebsd/contrib/tcpdump/addrtoname.c b/freebsd/contrib/tcpdump/addrtoname.c index a47b3615..e182b22a 100644 --- a/freebsd/contrib/tcpdump/addrtoname.c +++ b/freebsd/contrib/tcpdump/addrtoname.c @@ -1266,7 +1266,13 @@ struct hnamemem * newhnamemem(netdissect_options *ndo) { register struct hnamemem *p; +#ifdef __rtems__ + __section(".rtemsrwset.bsd_prog_tcpdump.content") +#endif /* __rtems__ */ static struct hnamemem *ptr = NULL; +#ifdef __rtems__ + __section(".rtemsrwset.bsd_prog_tcpdump.content") +#endif /* __rtems__ */ static u_int num = 0; if (num <= 0) { @@ -1285,7 +1291,13 @@ struct h6namemem * newh6namemem(netdissect_options *ndo) { register struct h6namemem *p; +#ifdef __rtems__ + __section(".rtemsrwset.bsd_prog_tcpdump.content") +#endif /* __rtems__ */ static struct h6namemem *ptr = NULL; +#ifdef __rtems__ + __section(".rtemsrwset.bsd_prog_tcpdump.content") +#endif /* __rtems__ */ static u_int num = 0; if (num <= 0) { diff --git a/freebsd/contrib/tcpdump/print-atalk.c b/freebsd/contrib/tcpdump/print-atalk.c index 5616dbc6..c8179eae 100644 --- a/freebsd/contrib/tcpdump/print-atalk.c +++ b/freebsd/contrib/tcpdump/print-atalk.c @@ -576,6 +576,9 @@ ataddr_string(netdissect_options *ndo, register struct hnamemem *tp, *tp2; register int i = (atnet << 8) | athost; char nambuf[256+1]; +#ifdef __rtems__ + __section(".rtemsrwset.bsd_prog_tcpdump.content") +#endif /* __rtems__ */ static int first = 1; FILE *fp; diff --git a/freebsd/contrib/tcpdump/print-esp.c b/freebsd/contrib/tcpdump/print-esp.c index c92d6fbe..a7961716 100644 --- a/freebsd/contrib/tcpdump/print-esp.c +++ b/freebsd/contrib/tcpdump/print-esp.c @@ -608,6 +608,9 @@ void esp_print_decodesecret(netdissect_options *ndo) { char *line; char *p; +#ifdef __rtems__ + __section(".rtemsrwset.bsd_prog_tcpdump.content") +#endif /* __rtems__ */ static int initialized = 0; if (!initialized) { diff --git a/freebsd/contrib/tcpdump/print-hncp.c b/freebsd/contrib/tcpdump/print-hncp.c index 34297772..26224249 100644 --- a/freebsd/contrib/tcpdump/print-hncp.c +++ b/freebsd/contrib/tcpdump/print-hncp.c @@ -165,6 +165,9 @@ static const char * format_nid(const u_char *data) { static char buf[4][11+5]; +#ifdef __rtems__ + __section(".rtemsrwset.bsd_prog_tcpdump.content") +#endif /* __rtems__ */ static int i = 0; i = (i + 1) % 4; snprintf(buf[i], 16, "%02x:%02x:%02x:%02x", @@ -176,6 +179,9 @@ static const char * format_256(const u_char *data) { static char buf[4][64+5]; +#ifdef __rtems__ + __section(".rtemsrwset.bsd_prog_tcpdump.content") +#endif /* __rtems__ */ static int i = 0; i = (i + 1) % 4; snprintf(buf[i], 28, "%016" PRIx64 "%016" PRIx64 "%016" PRIx64 "%016" PRIx64, @@ -191,6 +197,9 @@ static const char * format_interval(const uint32_t n) { static char buf[4][sizeof("0000000.000s")]; +#ifdef __rtems__ + __section(".rtemsrwset.bsd_prog_tcpdump.content") +#endif /* __rtems__ */ static int i = 0; i = (i + 1) % 4; snprintf(buf[i], sizeof(buf[i]), "%u.%03us", n / 1000, n % 1000); diff --git a/freebsd/contrib/tcpdump/print-smb.c b/freebsd/contrib/tcpdump/print-smb.c index 2ce8dc37..72a42b26 100644 --- a/freebsd/contrib/tcpdump/print-smb.c +++ b/freebsd/contrib/tcpdump/print-smb.c @@ -115,6 +115,9 @@ static void trans2_qfsinfo(netdissect_options *ndo, const u_char *param, const u_char *data, int pcnt, int dcnt) { +#ifdef __rtems__ + __section(".rtemsrwset.bsd_prog_tcpdump.content") +#endif /* __rtems__ */ static int level = 0; const char *fmt=""; @@ -179,6 +182,9 @@ print_trans2(netdissect_options *ndo, const u_char *words, const u_char *dat, const u_char *buf, const u_char *maxbuf) { u_int bcc; +#ifdef __rtems__ + __section(".rtemsrwset.bsd_prog_tcpdump.content") +#endif /* __rtems__ */ static const struct smbfnsint *fn = &trans2_fns[0]; const u_char *data, *param; const u_char *w = words + 1; diff --git a/freebsd/contrib/tcpdump/util-print.c b/freebsd/contrib/tcpdump/util-print.c index 8a995534..ef1454a1 100644 --- a/freebsd/contrib/tcpdump/util-print.c +++ b/freebsd/contrib/tcpdump/util-print.c @@ -323,6 +323,9 @@ ts_print(netdissect_options *ndo, struct tm *tm; time_t Time; char buf[TS_BUF_SIZE]; +#ifdef __rtems__ + __section(".rtemsrwset.bsd_prog_tcpdump.content") +#endif /* __rtems__ */ static struct timeval tv_ref; struct timeval tv_result; int negative_offset; @@ -510,6 +513,9 @@ tok2str(register const struct tok *lp, register const char *fmt, register u_int v) { static char buf[4][TOKBUFSIZE]; +#ifdef __rtems__ + __section(".rtemsrwset.bsd_prog_tcpdump.content") +#endif /* __rtems__ */ static int idx = 0; char *ret; -- cgit v1.2.3