1/* Section hash table implementation.
2   Copyright (C) 2001, 2002, 2005 Red Hat, Inc.
3   This file is part of elfutils.
4   Written by Ulrich Drepper <drepper@redhat.com>, 2001.
5
6   This file is free software; you can redistribute it and/or modify
7   it under the terms of the GNU General Public License as published by
8   the Free Software Foundation; either version 3 of the License, or
9   (at your option) any later version.
10
11   elfutils is distributed in the hope that it will be useful, but
12   WITHOUT ANY WARRANTY; without even the implied warranty of
13   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14   GNU General Public License for more details.
15
16   You should have received a copy of the GNU General Public License
17   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
18
19#ifdef HAVE_CONFIG_H
20# include <config.h>
21#endif
22
23#include <string.h>
24
25#include <elf-knowledge.h>
26#include <ld.h>
27
28
29/* Comparison function for sections.  */
30static int
31scnhead_compare (struct scnhead *one, struct scnhead *two)
32{
33  int result = strcmp (one->name, two->name);
34
35  if (result == 0)
36    {
37      result = one->type - two->type;
38
39      if (result == 0)
40	{
41	  GElf_Sxword diff = (SH_FLAGS_IMPORTANT (one->flags)
42			     - SH_FLAGS_IMPORTANT (two->flags));
43	  result = diff < 0 ? -1 : diff == 0 ? 0 : 1;
44
45	  if (result == 0)
46	    {
47	      result = one->entsize - two->entsize;
48
49	      if (result == 0)
50		{
51		  result = (one->grp_signature == NULL
52			    ? (two->grp_signature == NULL ? 0 : -1)
53			    : (two->grp_signature == NULL
54			       ? 1 : strcmp (one->grp_signature,
55					     two->grp_signature)));
56
57		  if (result == 0)
58		    result = one->kind - two->kind;
59		}
60	    }
61	}
62    }
63
64  return result;
65}
66
67/* Definitions for the section hash table.  */
68#define TYPE struct scnhead *
69#define NAME ld_section_tab
70#define ITERATE 1
71#define COMPARE(a, b) scnhead_compare (a, b)
72
73#include "../lib/dynamicsizehash.c"
74