@rm -f $@
$(CC) $(FULL_CFLAGS) -c $(srcdir)/$*.c
-CSRC = tcpdump.c
+CSRC = fptype.c tcpdump.c
LIBNETDISSECT_SRC=\
addrtoname.c \
#include "print.h"
+#include "fptype.h"
+
#ifndef PATH_MAX
#define PATH_MAX 1024
#endif
#define OPTION_LIST_REMOTE_INTERFACES 132
#define OPTION_TSTAMP_MICRO 133
#define OPTION_TSTAMP_NANO 134
+#define OPTION_FP_TYPE 135
static const struct option longopts[] = {
#if defined(HAVE_PCAP_CREATE) || defined(_WIN32)
{ "debug-filter-parser", no_argument, NULL, 'Y' },
#endif
{ "relinquish-privileges", required_argument, NULL, 'Z' },
+ { "fp-type", no_argument, NULL, OPTION_FP_TYPE },
{ "number", no_argument, NULL, '#' },
{ "print", no_argument, NULL, OPTION_PRINT },
{ "version", no_argument, NULL, OPTION_VERSION },
break;
#endif
+ case OPTION_FP_TYPE:
+ /*
+ * Print out the type of floating-point arithmetic
+ * we're doing; it's probably IEEE, unless somebody
+ * tries to run this on a VAX, but the precision
+ * may differ (e.g., it might be 32-bit, 64-bit,
+ * or 80-bit).
+ */
+ switch (float_type_check(0x4e93312d)) {
+
+ case 0x461a5794:
+ printf("FPTYPE1\n");
+ break;
+
+ default:
+ printf("FPTYPE2\n");
+ break;
+ }
+ return 0;
+
default:
print_usage();
exit_tcpdump(S_ERR_HOST_PROGRAM);
close(CONFIG_H);
#print Dumper($main::confighhash);
- # also grovel Makefile for some things and pretend they are config options.
- open(MAKEFILE, "Makefile") || die "can not open Makefile: $!\n";
- while(<MAKEFILE>) {
- chomp;
- #print "Processing $_\n";
- if(/^CC\s*=.*gcc.*/) {
- #print "GCC FOUND\n";
- $main::confighhash->{'USING_GCC'} = 1;
- }
- }
- close(MAKEFILE);
+ # also run tcpdump --fp-type to get the type of floating-point
+ # arithmetic we're doing, setting a HAVE_{fptype} key
+ open(FPTYPE_PIPE, "./tcpdump --fp-type |") or die("piping tcpdump --fp-type failed\n");
+ my $have_fptype = "HAVE_" . <FPTYPE_PIPE>;
+ close(FPTYPE_PIPE);
+ $have_fptype =~ s/^\s+|\s+$//g;
+ $main::confighhash->{$have_fptype} = 1;
return $main::confighhash;
}
# -*- perl -*-
# This "verbose" ISIS protocol test involves a float calculation that
-# may produce a slightly different result if the compiler is not GCC.
-# Test only with GCC (similar to GitHub issue #333).
+# may produce a slightly different result depending on the compiler and
+# the version of the instruction set for which it's generating code (see
+# GitHub issue #333 for another example). The test is done only if we have
+# a floating-point type, as reported by "./tcpdump --fp-type", of FPTYPE1.
$testlist = [
{
+ config_set => 'HAVE_FPTYPE1',
name => 'isis-seg-fault-1-v',
input => 'isis-seg-fault-1.pcapng',
output => 'isis-seg-fault-1-v.out',
# -*- perl -*-
# The "verbose" Link Management Protocol test involves a float calculation that
-# may produce a slightly different result depending on the architecture and the
-# compiler (see GitHub issue #333). The reference output was produced using a
-# GCC build and must reproduce correctly on any other GCC build regardless of
-# the architecture.
+# may produce a slightly different result depending on the compiler and the
+# version of the instruction set for which it's generating code (see GitHub
+# issue #333). The test is done only if we have a floating-point type, as
+# reported by "./tcpdump --fp-type", of FPTYPE1.
$testlist = [
{
+ config_set => 'HAVE_FPTYPE1',
name => 'lmp-v',
input => 'lmp.pcap',
output => 'lmp-v.out',