aboutsummaryrefslogtreecommitdiffstats
path: root/epan
diff options
context:
space:
mode:
authorJoão Valverde <joao.valverde@tecnico.ulisboa.pt>2017-11-05 13:05:20 +0000
committerAnders Broman <a.broman58@gmail.com>2017-11-05 23:20:20 +0000
commitba6dd97081c7490db0d6e98c9e8cd3b819b9dd6f (patch)
tree074acbab5aff45651e03617936d4d74d29d0bafc /epan
parent93bda0b18d68d07f7601811687e44811d14e97f4 (diff)
Remove epan win32 x86 assembly
Not used. Remove also weird pre-hash hash optimization in proto.c. Change-Id: Ibebc12dbe90ac1d05fb1ba601d32fe98797fbd56 Reviewed-on: https://code.wireshark.org/review/24254 Reviewed-by: Michael Mann <mmann78@netscape.net> Reviewed-by: João Valverde <j@v6e.pt> Petri-Dish: João Valverde <j@v6e.pt> Tested-by: Petri Dish Buildbot Reviewed-by: Anders Broman <a.broman58@gmail.com>
Diffstat (limited to 'epan')
-rw-r--r--epan/CMakeLists.txt17
-rw-r--r--epan/Makefile.am3
-rw-r--r--epan/asm_utils.c85
-rw-r--r--epan/asm_utils.h36
-rw-r--r--epan/asm_utils_win32_x86.asm184
-rw-r--r--epan/packet.c3
-rw-r--r--epan/proto.c52
7 files changed, 23 insertions, 357 deletions
diff --git a/epan/CMakeLists.txt b/epan/CMakeLists.txt
index 0cdf17425e..7883464090 100644
--- a/epan/CMakeLists.txt
+++ b/epan/CMakeLists.txt
@@ -41,21 +41,6 @@ include_directories(
${CMAKE_CURRENT_SOURCE_DIR}
)
-set(LIBWIRESHARK_ASM_FILES
- asm_utils.c
-# todo
-# !IFDEF NASM
-# asm_utils_win32_x86.obj: asm_utils_win32_x86.asm
-# $(NASM) -f $(WIRESHARK_TARGET_PLATFORM) -o $@ $?
-# !ENDIF
-# ...
-# !IF defined(NASM) && "$(WIRESHARK_TARGET_PLATFORM)" == "win32"
-# asm_utils_win32_x86.obj
-# !ELSE
-# asm_utils.obj
-# !ENDIF
-)
-
add_custom_command(
OUTPUT ps.c
COMMAND ${PYTHON_EXECUTABLE}
@@ -314,7 +299,6 @@ set(epan_LIBS
set(CLEAN_FILES
${LIBWIRESHARK_CLEAN_FILES}
- ${LIBWIRESHARK_ASM_FILES}
)
set_source_files_properties(
@@ -333,7 +317,6 @@ endif()
add_library(epan ${LINK_MODE_LIB}
${LIBWIRESHARK_FILES}
${GENERATED_FILES}
- ${LIBWIRESHARK_ASM_FILES}
$<TARGET_OBJECTS:crypt>
$<TARGET_OBJECTS:dfilter>
$<TARGET_OBJECTS:dissectors>
diff --git a/epan/Makefile.am b/epan/Makefile.am
index e09bee4809..2d31aa5dd5 100644
--- a/epan/Makefile.am
+++ b/epan/Makefile.am
@@ -44,7 +44,6 @@ LIBWIRESHARK_SRC = \
afn.c \
aftypes.c \
app_mem_usage.c \
- asm_utils.c \
asn1.c \
capture_dissectors.c \
charsets.c \
@@ -285,7 +284,6 @@ LIBWIRESHARK_INCLUDES_PUBLIC = \
xdlc.h
LIBWIRESHARK_INCLUDES_PRIVATE = \
- asm_utils.h \
epan-int.h \
to_str-int.h
@@ -362,7 +360,6 @@ libwireshark_generated_la_CFLAGS = $(GENERATED_CFLAGS)
EXTRA_DIST = \
.editorconfig \
- asm_utils_win32_x86.asm \
diam_dict.l \
dtd_grammar.lemon \
dtd_parse.l \
diff --git a/epan/asm_utils.c b/epan/asm_utils.c
deleted file mode 100644
index 62ef49b095..0000000000
--- a/epan/asm_utils.c
+++ /dev/null
@@ -1,85 +0,0 @@
-/* asm_utils.c
- * Functions optionally implemented in assembler
- *
- * Wireshark - Network traffic analyzer
- * By Gerald Combs <gerald@wireshark.org>
- * Copyright 1998 Gerald Combs
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- */
-
-#include "config.h"
-
-#include <string.h>
-#include <glib.h>
-
-#include "asm_utils.h"
-#include "ws_attributes.h"
-
-/* String comparison func for dfilter_token GTree */
-gint
-wrs_strcmp(gconstpointer a, gconstpointer b)
-{
- return strcmp((const char*)a, (const char*)b);
-}
-
-gint
-wrs_strcmp_with_data(gconstpointer a, gconstpointer b, gpointer user_data _U_)
-{
- return strcmp((const char*)a, (const char*)b);
-}
-
-gboolean
-wrs_str_equal(gconstpointer a, gconstpointer b)
-{
- return !strcmp((const char*)a, (const char*)b);
-}
-
-guchar
-wrs_check_charset(const guint8 table[256], const char *str)
-{
- const char *p = str;
- guchar c;
-
- do {
- c = *(p++);
- } while (table[c]);
- return c;
-}
-
-guint
-wrs_str_hash(gconstpointer v)
-{
- /* 31 bit hash function */
- const signed char *p = (const signed char *)v;
- guint32 h = *p;
- if (h)
- for (p += 1; *p != '\0'; p++)
- h = (h << 5) - h + *p;
- return h;
-}
-
-/*
- * Editor modelines - http://www.wireshark.org/tools/modelines.html
- *
- * Local variables:
- * c-basic-offset: 4
- * tab-width: 8
- * indent-tabs-mode: nil
- * End:
- *
- * vi: set shiftwidth=4 tabstop=8 expandtab:
- * :indentSize=4:tabSize=8:noTabs=true:
- */
diff --git a/epan/asm_utils.h b/epan/asm_utils.h
deleted file mode 100644
index b363c58134..0000000000
--- a/epan/asm_utils.h
+++ /dev/null
@@ -1,36 +0,0 @@
-/* asm_utils.h
- * Functions optionally implemented in assembler
- *
- * Wireshark - Network traffic analyzer
- * By Gerald Combs <gerald@wireshark.org>
- * Copyright 1998 Gerald Combs
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- */
-
-#ifndef __ASM_UTILS_H__
-#define __ASM_UTILS_H__
-
-gint wrs_strcmp(gconstpointer a, gconstpointer b);
-gint wrs_strcmp_with_data(gconstpointer a, gconstpointer b, gpointer user_data);
-gboolean wrs_str_equal(gconstpointer a, gconstpointer b);
-
-guchar wrs_check_charset(const guchar table[256], const char *str);
-
-guint wrs_str_hash(gconstpointer v);
-
-/* int wrs_count_bitshift(guint32 bitmask); */
-
-#endif /* __ASM_UTILS_H__ */
diff --git a/epan/asm_utils_win32_x86.asm b/epan/asm_utils_win32_x86.asm
deleted file mode 100644
index 4d36fca9c5..0000000000
--- a/epan/asm_utils_win32_x86.asm
+++ /dev/null
@@ -1,184 +0,0 @@
-; asm_utils_win32_x86.asm
-; Functions optionally implemented in assembler
-;
-; Wireshark - Network traffic analyzer
-; By Gerald Combs <gerald@wireshark.org>
-; Copyright 1998 Gerald Combs
-;
-; This program is free software; you can redistribute it and/or
-; modify it under the terms of the GNU General Public License
-; as published by the Free Software Foundation; either version 2
-; of the License, or (at your option) any later version.
-;
-; This program is distributed in the hope that it will be useful,
-; but WITHOUT ANY WARRANTY; without even the implied warranty of
-; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-; GNU General Public License for more details.
-;
-; You should have received a copy of the GNU General Public License
-; along with this program; if not, write to the Free Software
-; Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-;
-
-SECTION .text
-
-GLOBAL _wrs_strcmp
-GLOBAL _wrs_strcmp_with_data
-GLOBAL _wrs_str_equal
-GLOBAL _wrs_check_charset
-GLOBAL _wrs_str_hash
-
- align 16
-_wrs_strcmp:
-_wrs_strcmp_with_data:
- mov ecx, dword [esp + 4] ; a
- mov edx, dword [esp + 8] ; b
- push ebx
-CMP_LOOP:
- mov eax, dword [ecx]
- mov ebx, dword [edx]
- cmp al, bl
- jne CMP_NEQ_END
- or al, al
- jz CMP_EQ_END
- cmp ah, bh
- jne CMP_NEQ_END
- or ah, ah
- jz CMP_EQ_END
- shr eax, 16
- shr ebx, 16
- add ecx, byte 4
- add edx, byte 4
- cmp al, bl
- jne CMP_NEQ_END
- or al, al
- jz CMP_EQ_END
- cmp ah, bh
- jne CMP_NEQ_END
- or ah, ah
- jnz CMP_LOOP
-CMP_EQ_END:
- pop ebx
- xor eax, eax
- retn
-CMP_NEQ_END:
- ; returns 1 or -1 based on CF flag from the last comparision
- sbb eax, eax
- pop ebx
- shl eax, 1
- inc eax
- retn
-
- align 16
-_wrs_str_equal:
- mov ecx, dword [esp + 4] ; a
- mov edx, dword [esp + 8] ; b
- push ebx
-EQL_LOOP:
- mov eax, dword [ecx]
- mov ebx, dword [edx]
- cmp al, bl
- jne EQL_NEQ_END
- or al, al
- jz EQL_EQ_END
- cmp ah, bh
- jne EQL_NEQ_END
- or ah, ah
- jz EQL_EQ_END
- shr eax, 16
- shr ebx, 16
- add ecx, byte 4
- add edx, byte 4
- cmp al, bl
- jne EQL_NEQ_END
- or al, al
- jz EQL_EQ_END
- cmp ah, bh
- jne EQL_NEQ_END
- or ah, ah
- jnz EQL_LOOP
-EQL_EQ_END:
- xor eax, eax
- pop ebx
- not eax
- retn
-EQL_NEQ_END:
- pop ebx
- xor eax, eax
- retn
-
- align 16
-_wrs_check_charset:
- mov edx, dword [esp + 4] ; table
- mov ecx, dword [esp + 8] ; str
- push edi
- push ebx
- mov edi, edx
- mov bl, byte 0xFF
-CHK_LOOP:
- mov eax, dword [ecx]
- movzx edx, al
- test bl, byte [edi+edx]
- jz CHK_AL_END
- movzx edx, ah
- test bl, byte [edi+edx]
- jz CHK_AH_END
- shr eax, 16
- add ecx, byte 4
- movzx edx, al
- test bl, byte [edi+edx]
- jz CHK_AL_END
- movzx edx, ah
- test bl, byte [edi+edx]
- jnz CHK_LOOP
-CHK_AH_END:
- movzx eax, ah
- pop ebx
- pop edi
- retn
-CHK_AL_END:
- movzx eax, al
- pop ebx
- pop edi
- retn
-
- align 16
-_wrs_str_hash:
- mov edx, dword [esp + 4] ; v
- push ebx
- xor eax, eax
- mov ecx, dword [edx]
- or cl, cl
- movzx ebx, cl
- jz HASH_END
-HASH_LOOP:
- sub ebx, eax
- shl eax, 5
- add eax, ebx
- or ch, ch
- movzx ebx, ch
- jz HASH_END
- sub ebx, eax
- shl eax, 5
- add eax, ebx
- shr ecx, 16
- add edx, byte 4
- or cl, cl
- movzx ebx, cl
- jz HASH_END
- sub ebx, eax
- shl eax, 5
- add eax, ebx
- or ch, ch
- movzx ebx, ch
- jz HASH_END
- sub ebx, eax
- shl eax, 5
- add eax, ebx
- mov ecx, dword [edx]
- or cl, cl
- movzx ebx, cl
- jnz HASH_LOOP
-HASH_END:
- pop ebx
- retn
diff --git a/epan/packet.c b/epan/packet.c
index 25c4d1b7af..e1a218d146 100644
--- a/epan/packet.c
+++ b/epan/packet.c
@@ -49,7 +49,6 @@
#include <epan/expert.h>
#include <epan/prefs.h>
#include <epan/range.h>
-#include <epan/asm_utils.h>
#include <wsutil/str_util.h>
#include <wsutil/ws_printf.h> /* ws_debug_printf */
@@ -215,7 +214,7 @@ packet_init(void)
heur_dissector_lists = g_hash_table_new_full(g_str_hash, g_str_equal,
NULL, destroy_heuristic_dissector_list);
- heuristic_short_names = g_hash_table_new(wrs_str_hash, g_str_equal);
+ heuristic_short_names = g_hash_table_new(g_str_hash, g_str_equal);
}
void
diff --git a/epan/proto.c b/epan/proto.c
index 57dcdaf537..0c45b53897 100644
--- a/epan/proto.c
+++ b/epan/proto.c
@@ -46,7 +46,6 @@
#include "tvbuff.h"
#include "wmem/wmem.h"
#include "charsets.h"
-#include "asm_utils.h"
#include "column-utils.h"
#include "to_str-int.h"
#include "to_str.h"
@@ -421,6 +420,18 @@ proto_compare_name(gconstpointer p1_arg, gconstpointer p2_arg)
return g_ascii_strcasecmp(p1->short_name, p2->short_name);
}
+static inline guchar
+check_charset(const guint8 table[256], const char *str)
+{
+ const char *p = str;
+ guchar c;
+
+ do {
+ c = *(p++);
+ } while (table[c]);
+ return c;
+}
+
#ifdef HAVE_PLUGINS
/*
* List of dissector plugins.
@@ -525,9 +536,9 @@ proto_init(void (register_all_protocols_func)(register_cb cb, gpointer client_da
{
proto_cleanup_base();
- proto_names = g_hash_table_new_full(g_int_hash, g_int_equal, g_free, NULL);
- proto_short_names = g_hash_table_new(wrs_str_hash, g_str_equal);
- proto_filter_names = g_hash_table_new(wrs_str_hash, g_str_equal);
+ proto_names = g_hash_table_new(g_str_hash, g_str_equal);
+ proto_short_names = g_hash_table_new(g_str_hash, g_str_equal);
+ proto_filter_names = g_hash_table_new(g_str_hash, g_str_equal);
gpa_hfinfo.len = 0;
gpa_hfinfo.allocated_len = 0;
@@ -6504,8 +6515,6 @@ proto_register_protocol(const char *name, const char *short_name,
const protocol_t *existing_protocol = NULL;
header_field_info *hfinfo;
int proto_id;
- const char *existing_name;
- gint *key;
guint i;
gchar c;
gboolean found_invalid;
@@ -6516,26 +6525,14 @@ proto_register_protocol(const char *name, const char *short_name,
* or an inappropriate plugin.
* This situation has to be fixed to not register more than one
* protocol with the same name.
- *
- * This is done by reducing the number of strcmp (and alike) calls
- * as much as possible, as this significally slows down startup time.
- *
- * Drawback: As a hash value is used to reduce insert time,
- * this might lead to a hash collision.
- * However, although we have somewhat over 1000 protocols, we're using
- * a 32 bit int so this is very, very unlikely.
*/
- key = (gint *)g_malloc (sizeof(gint));
- *key = wrs_str_hash(name);
-
- existing_name = (const char *)g_hash_table_lookup(proto_names, key);
- if (existing_name != NULL) {
+ existing_protocol = (const protocol_t *)g_hash_table_lookup(proto_names, name);
+ if (existing_protocol != NULL) {
/* g_error will terminate the program */
g_error("Duplicate protocol name \"%s\"!"
" This might be caused by an inappropriate plugin or a development error.", name);
}
- g_hash_table_insert(proto_names, key, (gpointer)name);
existing_protocol = (const protocol_t *)g_hash_table_lookup(proto_short_names, short_name);
if (existing_protocol != NULL) {
@@ -6577,6 +6574,7 @@ proto_register_protocol(const char *name, const char *short_name,
protocol->heur_list = NULL;
/* list will be sorted later by name, when all protocols completed registering */
protocols = g_list_prepend(protocols, protocol);
+ g_hash_table_insert(proto_names, (gpointer)name, protocol);
g_hash_table_insert(proto_filter_names, (gpointer)filter_name, protocol);
g_hash_table_insert(proto_short_names, (gpointer)short_name, protocol);
@@ -6674,7 +6672,6 @@ proto_deregister_protocol(const char *short_name)
protocol_t *protocol;
header_field_info *hfinfo;
int proto_id;
- gint key;
guint i;
proto_id = proto_get_id_by_short_name(short_name);
@@ -6682,9 +6679,7 @@ proto_deregister_protocol(const char *short_name)
if (protocol == NULL)
return FALSE;
- key = wrs_str_hash(protocol->name);
- g_hash_table_remove(proto_names, &key);
-
+ g_hash_table_remove(proto_names, protocol->name);
g_hash_table_remove(proto_short_names, (gpointer)short_name);
g_hash_table_remove(proto_filter_names, (gpointer)protocol->filter_name);
@@ -6811,12 +6806,9 @@ proto_get_id(const protocol_t *protocol)
gboolean
proto_name_already_registered(const gchar *name)
{
- gint key;
-
DISSECTOR_ASSERT_HINT(name, "No name present");
- key = wrs_str_hash(name);
- if (g_hash_table_lookup(proto_names, &key) != NULL)
+ if (g_hash_table_lookup(proto_names, name) != NULL)
return TRUE;
return FALSE;
}
@@ -7931,7 +7923,7 @@ proto_register_field_init(header_field_info *hfinfo, const int parent)
/* Check that the filter name (abbreviation) is legal;
* it must contain only alphanumerics, '-', "_", and ".". */
- c = wrs_check_charset(fld_abbrev_chars, hfinfo->abbrev);
+ c = check_charset(fld_abbrev_chars, hfinfo->abbrev);
if (c) {
if (g_ascii_isprint(c))
fprintf(stderr, "Invalid character '%c' in filter name '%s'\n", c, hfinfo->abbrev);
@@ -11892,7 +11884,7 @@ proto_tree_add_checksum(proto_tree *tree, tvbuff_t *tvb, const guint offset,
guchar
proto_check_field_name(const gchar *field_name)
{
- return wrs_check_charset(fld_abbrev_chars, field_name);
+ return check_charset(fld_abbrev_chars, field_name);
}
gboolean