/* Read ELF (Executable and Linking Format) object files for GDB.
Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
- 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
+ 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
Free Software Foundation, Inc.
Written by Fred Fish at Cygnus Support.
for (j = 0; j < num_segments; j++)
if (segments[j]->p_memsz > 0
&& vma >= segments[j]->p_vaddr
- && vma < segments[j]->p_vaddr + segments[j]->p_memsz)
+ && (vma - segments[j]->p_vaddr) < segments[j]->p_memsz)
{
data->segment_info[i] = j + 1;
break;
address = gdbarch_smash_text_address (gdbarch, address);
return prim_record_minimal_symbol_and_info
- (name, address, ms_type, NULL, bfd_section->index, bfd_section, objfile);
+ (name, address, ms_type, bfd_section->index, bfd_section, objfile);
}
/*
interested in will have a section. */
/* Bfd symbols are section relative. */
symaddr = sym->value + sym->section->vma;
- /* Relocate all non-absolute symbols by the section offset. */
- if (sym->section != &bfd_abs_section)
+ /* Relocate all non-absolute and non-TLS symbols by the
+ section offset. */
+ if (sym->section != &bfd_abs_section
+ && !(sym->section->flags & SEC_THREAD_LOCAL))
{
symaddr += offset;
}
int max_index;
size_t size;
- max_index
- = max (SECT_OFF_BSS (objfile),
- max (SECT_OFF_DATA (objfile),
- SECT_OFF_RODATA (objfile)));
+ max_index = SECT_OFF_BSS (objfile);
+ if (objfile->sect_index_data > max_index)
+ max_index = objfile->sect_index_data;
+ if (objfile->sect_index_rodata > max_index)
+ max_index = objfile->sect_index_rodata;
/* max_index is the largest index we'll
use into this array, so we must