Browse Source

bfd/

* hash.c (bfd_hash_hash): Extract from..
	(bfd_hash_lookup): ..here.
	(bfd_hash_rename): New function.
	* section.c (bfd_rename_section): New function.
	* bfd-in.h (bfd_hash_rename): Declare.
	* bfd-in2.h: Regenerate.
	* elf.c (_bfd_elf_make_section_from_shdr): Rename input sections
	when compressing or decompressing.  Don't assert name match.
	* elf64-hppa.c (get_reloc_section): Don't assert name match.
	* elfxx-ia64.c (get_reloc_section): Likewise.
binutils/
	* objcopy.c (copy_main): No need to rename sections when compressing
	or decompressing.
binutils/testsuite/
	* binutils-all/objdump.W: Adjust expected result for debug section
	rename.
gdb_7_3-branch
Alan Modra 16 years ago
parent
commit
4e011fb578
  1. 13
      bfd/ChangeLog
  2. 4
      bfd/bfd-in.h
  3. 7
      bfd/bfd-in2.h
  4. 31
      bfd/elf.c
  5. 7
      bfd/elf64-hppa.c
  6. 7
      bfd/elfxx-ia64.c
  7. 58
      bfd/hash.c
  8. 23
      bfd/section.c
  9. 5
      binutils/ChangeLog
  10. 17
      binutils/objcopy.c
  11. 5
      binutils/testsuite/ChangeLog
  12. 2
      binutils/testsuite/binutils-all/objdump.W

13
bfd/ChangeLog

@ -1,3 +1,16 @@
2010-11-08 Alan Modra <amodra@gmail.com>
* hash.c (bfd_hash_hash): Extract from..
(bfd_hash_lookup): ..here.
(bfd_hash_rename): New function.
* section.c (bfd_rename_section): New function.
* bfd-in.h (bfd_hash_rename): Declare.
* bfd-in2.h: Regenerate.
* elf.c (_bfd_elf_make_section_from_shdr): Rename input sections
when compressing or decompressing. Don't assert name match.
* elf64-hppa.c (get_reloc_section): Don't assert name match.
* elfxx-ia64.c (get_reloc_section): Likewise.
2010-11-05 Joseph Myers <joseph@codesourcery.com>
* elf32-tic6x.c (elf32_tic6x_obj_attrs_handle_unknown): New.

4
bfd/bfd-in.h

@ -404,6 +404,10 @@ extern struct bfd_hash_entry *bfd_hash_lookup
extern struct bfd_hash_entry *bfd_hash_insert
(struct bfd_hash_table *, const char *, unsigned long);
/* Rename an entry in a hash table. */
extern void bfd_hash_rename
(struct bfd_hash_table *, const char *, struct bfd_hash_entry *);
/* Replace an entry in a hash table. */
extern void bfd_hash_replace
(struct bfd_hash_table *, struct bfd_hash_entry *old,

7
bfd/bfd-in2.h

@ -411,6 +411,10 @@ extern struct bfd_hash_entry *bfd_hash_lookup
extern struct bfd_hash_entry *bfd_hash_insert
(struct bfd_hash_table *, const char *, unsigned long);
/* Rename an entry in a hash table. */
extern void bfd_hash_rename
(struct bfd_hash_table *, const char *, struct bfd_hash_entry *);
/* Replace an entry in a hash table. */
extern void bfd_hash_replace
(struct bfd_hash_table *, struct bfd_hash_entry *old,
@ -1713,6 +1717,9 @@ asection *bfd_make_section (bfd *, const char *name);
bfd_boolean bfd_set_section_flags
(bfd *abfd, asection *sec, flagword flags);
void bfd_rename_section
(bfd *abfd, asection *sec, const char *newname);
void bfd_map_over_sections
(bfd *abfd,
void (*func) (bfd *abfd, asection *sect, void *obj),

31
bfd/elf.c

@ -822,11 +822,7 @@ _bfd_elf_make_section_from_shdr (bfd *abfd,
const struct elf_backend_data *bed;
if (hdr->bfd_section != NULL)
{
BFD_ASSERT (strcmp (name,
bfd_get_section_name (abfd, hdr->bfd_section)) == 0);
return TRUE;
}
return TRUE;
newsect = bfd_make_section_anyway (abfd, name);
if (newsect == NULL)
@ -1016,6 +1012,7 @@ _bfd_elf_make_section_from_shdr (bfd *abfd,
|| (name[1] == 'z' && name[7] == '_')))
{
enum { nothing, compress, decompress } action = nothing;
char *new_name;
if (bfd_is_section_compressed (abfd, newsect))
{
@ -1030,6 +1027,7 @@ _bfd_elf_make_section_from_shdr (bfd *abfd,
action = compress;
}
new_name = NULL;
switch (action)
{
case nothing:
@ -1042,6 +1040,17 @@ _bfd_elf_make_section_from_shdr (bfd *abfd,
abfd, name);
return FALSE;
}
if (name[1] != 'z')
{
unsigned int len = strlen (name);
new_name = bfd_alloc (abfd, len + 2);
if (new_name == NULL)
return FALSE;
new_name[0] = '.';
new_name[1] = 'z';
memcpy (new_name + 2, name + 1, len);
}
break;
case decompress:
if (!bfd_init_section_decompress_status (abfd, newsect))
@ -1051,8 +1060,20 @@ _bfd_elf_make_section_from_shdr (bfd *abfd,
abfd, name);
return FALSE;
}
if (name[1] == 'z')
{
unsigned int len = strlen (name);
new_name = bfd_alloc (abfd, len);
if (new_name == NULL)
return FALSE;
new_name[0] = '.';
memcpy (new_name + 1, name + 2, len - 1);
}
break;
}
if (new_name != NULL)
bfd_rename_section (abfd, newsect, new_name);
}
return TRUE;

7
bfd/elf64-hppa.c

@ -411,13 +411,6 @@ get_reloc_section (bfd *abfd,
if (srel_name == NULL)
return FALSE;
BFD_ASSERT ((CONST_STRNEQ (srel_name, ".rela")
&& strcmp (bfd_get_section_name (abfd, sec),
srel_name + 5) == 0)
|| (CONST_STRNEQ (srel_name, ".rel")
&& strcmp (bfd_get_section_name (abfd, sec),
srel_name + 4) == 0));
dynobj = hppa_info->root.dynobj;
if (!dynobj)
hppa_info->root.dynobj = dynobj = abfd;

7
bfd/elfxx-ia64.c

@ -2602,13 +2602,6 @@ get_reloc_section (bfd *abfd,
if (srel_name == NULL)
return NULL;
BFD_ASSERT ((CONST_STRNEQ (srel_name, ".rela")
&& strcmp (bfd_get_section_name (abfd, sec),
srel_name+5) == 0)
|| (CONST_STRNEQ (srel_name, ".rel")
&& strcmp (bfd_get_section_name (abfd, sec),
srel_name+4) == 0));
dynobj = ia64_info->root.dynobj;
if (!dynobj)
ia64_info->root.dynobj = dynobj = abfd;

58
bfd/hash.c

@ -1,6 +1,6 @@
/* hash.c -- hash table routines for BFD
Copyright 1993, 1994, 1995, 1997, 1999, 2001, 2002, 2003, 2004, 2005,
2006, 2007, 2009 Free Software Foundation, Inc.
2006, 2007, 2009, 2010 Free Software Foundation, Inc.
Written by Steve Chamberlain <sac@cygnus.com>
This file is part of BFD, the Binary File Descriptor library.
@ -412,20 +412,13 @@ bfd_hash_table_free (struct bfd_hash_table *table)
table->memory = NULL;
}
/* Look up a string in a hash table. */
struct bfd_hash_entry *
bfd_hash_lookup (struct bfd_hash_table *table,
const char *string,
bfd_boolean create,
bfd_boolean copy)
static inline unsigned long
bfd_hash_hash (const char *string, unsigned int *lenp)
{
const unsigned char *s;
unsigned long hash;
unsigned int c;
struct bfd_hash_entry *hashp;
unsigned int len;
unsigned int _index;
unsigned int c;
hash = 0;
len = 0;
@ -438,7 +431,25 @@ bfd_hash_lookup (struct bfd_hash_table *table,
len = (s - (const unsigned char *) string) - 1;
hash += len + (len << 17);
hash ^= hash >> 2;
if (lenp != NULL)
*lenp = len;
return hash;
}
/* Look up a string in a hash table. */
struct bfd_hash_entry *
bfd_hash_lookup (struct bfd_hash_table *table,
const char *string,
bfd_boolean create,
bfd_boolean copy)
{
unsigned long hash;
struct bfd_hash_entry *hashp;
unsigned int len;
unsigned int _index;
hash = bfd_hash_hash (string, &len);
_index = hash % table->size;
for (hashp = table->table[_index];
hashp != NULL;
@ -535,6 +546,31 @@ bfd_hash_insert (struct bfd_hash_table *table,
return hashp;
}
/* Rename an entry in a hash table. */
void
bfd_hash_rename (struct bfd_hash_table *table,
const char *string,
struct bfd_hash_entry *ent)
{
unsigned int _index;
struct bfd_hash_entry **pph;
_index = ent->hash % table->size;
for (pph = &table->table[_index]; *pph != NULL; pph = &(*pph)->next)
if (*pph == ent)
break;
if (*pph == NULL)
abort ();
*pph = ent->next;
ent->string = string;
ent->hash = bfd_hash_hash (string, NULL);
_index = ent->hash % table->size;
ent->next = table->table[_index];
table->table[_index] = ent;
}
/* Replace an entry in a hash table. */
void

23
bfd/section.c

@ -1213,6 +1213,29 @@ bfd_set_section_flags (bfd *abfd ATTRIBUTE_UNUSED,
return TRUE;
}
/*
FUNCTION
bfd_rename_section
SYNOPSIS
void bfd_rename_section
(bfd *abfd, asection *sec, const char *newname);
DESCRIPTION
Rename section @var{sec} in @var{abfd} to @var{newname}.
*/
void
bfd_rename_section (bfd *abfd, sec_ptr sec, const char *newname)
{
struct section_hash_entry *sh;
sh = (struct section_hash_entry *)
((char *) sec - offsetof (struct section_hash_entry, section));
sh->section.name = newname;
bfd_hash_rename (&abfd->section_htab, newname, &sh->root);
}
/*
FUNCTION
bfd_map_over_sections

5
binutils/ChangeLog

@ -1,3 +1,8 @@
2010-11-08 Alan Modra <amodra@gmail.com>
* objcopy.c (copy_main): No need to rename sections when compressing
or decompressing.
2010-11-05 Alan Modra <amodra@gmail.com>
* bin2c.c: Remove internationalization and version report.

17
binutils/objcopy.c

@ -3196,7 +3196,6 @@ copy_main (int argc, char *argv[])
struct section_list *p;
struct stat statbuf;
const bfd_arch_info_type *input_arch = NULL;
struct dwarf_debug_section *d;
while ((c = getopt_long (argc, argv, "b:B:i:I:j:K:N:s:O:d:F:L:G:R:SpgxXHhVvW:w",
copy_options, (int *) 0)) != EOF)
@ -3912,22 +3911,6 @@ copy_main (int argc, char *argv[])
fatal (_("warning: could not create temporary file whilst copying '%s', (error: %s)"),
input_filename, strerror (errno));
switch (do_debug_sections)
{
case compress:
for (d = dwarf_debug_sections; d->uncompressed_name; d++)
add_section_rename (d->uncompressed_name, d->compressed_name,
(flagword) -1);
break;
case decompress:
for (d = dwarf_debug_sections; d->uncompressed_name; d++)
add_section_rename (d->compressed_name, d->uncompressed_name,
(flagword) -1);
break;
default:
break;
}
copy_file (input_filename, tmpname, input_target, output_target, input_arch);
if (status == 0)
{

5
binutils/testsuite/ChangeLog

@ -1,3 +1,8 @@
2010-11-08 Alan Modra <amodra@gmail.com>
* binutils-all/objdump.W: Adjust expected result for debug section
rename.
2010-11-02 H.J. Lu <hongjiu.lu@intel.com>
* binutils-all/libdw2.out: Also accept MIPS_DWARF.

2
binutils/testsuite/binutils-all/objdump.W

@ -73,7 +73,7 @@ Raw dump of debug contents of section .debug_line:
Extended opcode 1: End of Sequence
Contents of the .zdebug_abbrev section:
Contents of the .debug_abbrev section:
Number TAG
1 DW_TAG_compile_unit \[has children\]

Loading…
Cancel
Save