forked from Imagelibrary/binutils-gdb
binutils/
2008-10-09 Kai Tietz <kai.tietz@onevision.com> * dlltool.c (PAGE_SIZE): Make sure it has bfd_vma type. (PAGE_MASK): Likewise. (sfunc): Change to address size of bfd_vma for base-file. (flush_page): Likewise. (gen_exp_file): Likewise. bfd/ 2008-10-09 Kai Tietz <kai.tietz@onevision.com> * cofflink.c (_bfd_coff_generic_relocate_section): Dump bfd_vma sized addresses instead of long sized.
This commit is contained in:
@@ -1,3 +1,7 @@
|
|||||||
|
2008-10-09 Kai Tietz <kai.tietz@onevision.com>
|
||||||
|
|
||||||
|
* cofflink.c (_bfd_coff_generic_relocate_section): Dump bfd_vma sized addresses instead of long sized.
|
||||||
|
|
||||||
2008-10-09 Alan Modra <amodra@bigpond.net.au>
|
2008-10-09 Alan Modra <amodra@bigpond.net.au>
|
||||||
|
|
||||||
* elf64-ppc.c (ppc64_elf_get_synthetic_symtab): Don't attempt to
|
* elf64-ppc.c (ppc64_elf_get_synthetic_symtab): Don't attempt to
|
||||||
|
|||||||
@@ -2985,16 +2985,16 @@ _bfd_coff_generic_relocate_section (bfd *output_bfd,
|
|||||||
absolute. We output the address here to a file.
|
absolute. We output the address here to a file.
|
||||||
This file is then read by dlltool when generating the
|
This file is then read by dlltool when generating the
|
||||||
reloc section. Note that the base file is not
|
reloc section. Note that the base file is not
|
||||||
portable between systems. We write out a long here,
|
portable between systems. We write out a bfd_vma here,
|
||||||
and dlltool reads in a long. */
|
and dlltool reads in a bfd_vma. */
|
||||||
long addr = (rel->r_vaddr
|
bfd_vma addr = (rel->r_vaddr
|
||||||
- input_section->vma
|
- input_section->vma
|
||||||
+ input_section->output_offset
|
+ input_section->output_offset
|
||||||
+ input_section->output_section->vma);
|
+ input_section->output_section->vma);
|
||||||
if (coff_data (output_bfd)->pe)
|
if (coff_data (output_bfd)->pe)
|
||||||
addr -= pe_data(output_bfd)->pe_opthdr.ImageBase;
|
addr -= pe_data(output_bfd)->pe_opthdr.ImageBase;
|
||||||
if (fwrite (&addr, 1, sizeof (long), (FILE *) info->base_file)
|
if (fwrite (&addr, 1, sizeof (bfd_vma), (FILE *) info->base_file)
|
||||||
!= sizeof (long))
|
!= sizeof (bfd_vma))
|
||||||
{
|
{
|
||||||
bfd_set_error (bfd_error_system_call);
|
bfd_set_error (bfd_error_system_call);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|||||||
@@ -1,3 +1,11 @@
|
|||||||
|
2008-10-09 Kai Tietz <kai.tietz@onevision.com>
|
||||||
|
|
||||||
|
* dlltool.c (PAGE_SIZE): Make sure it has bfd_vma type.
|
||||||
|
(PAGE_MASK): Likewise.
|
||||||
|
(sfunc): Change to address size of bfd_vma for base-file.
|
||||||
|
(flush_page): Likewise.
|
||||||
|
(gen_exp_file): Likewise.
|
||||||
|
|
||||||
2008-10-07 Jan Kratochvil <jan.kratochvil@redhat.com>
|
2008-10-07 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||||
|
|
||||||
* readelf.c (process_section_headers): Do not cut the section names and
|
* readelf.c (process_section_headers): Do not cut the section names and
|
||||||
|
|||||||
@@ -241,8 +241,8 @@
|
|||||||
|
|
||||||
#define show_allnames 0
|
#define show_allnames 0
|
||||||
|
|
||||||
#define PAGE_SIZE 4096
|
#define PAGE_SIZE ((bfd_vma) 4096)
|
||||||
#define PAGE_MASK (-PAGE_SIZE)
|
#define PAGE_MASK ((bfd_vma) (-4096))
|
||||||
#include "sysdep.h"
|
#include "sysdep.h"
|
||||||
#include "bfd.h"
|
#include "bfd.h"
|
||||||
#include "libiberty.h"
|
#include "libiberty.h"
|
||||||
@@ -712,7 +712,7 @@ static void scan_open_obj_file (bfd *);
|
|||||||
static void scan_obj_file (const char *);
|
static void scan_obj_file (const char *);
|
||||||
static void dump_def_info (FILE *);
|
static void dump_def_info (FILE *);
|
||||||
static int sfunc (const void *, const void *);
|
static int sfunc (const void *, const void *);
|
||||||
static void flush_page (FILE *, long *, int, int);
|
static void flush_page (FILE *, bfd_vma *, bfd_vma, int);
|
||||||
static void gen_def_file (void);
|
static void gen_def_file (void);
|
||||||
static void generate_idata_ofile (FILE *);
|
static void generate_idata_ofile (FILE *);
|
||||||
static void assemble_file (const char *, const char *);
|
static void assemble_file (const char *, const char *);
|
||||||
@@ -1584,18 +1584,21 @@ dump_def_info (FILE *f)
|
|||||||
static int
|
static int
|
||||||
sfunc (const void *a, const void *b)
|
sfunc (const void *a, const void *b)
|
||||||
{
|
{
|
||||||
return *(const long *) a - *(const long *) b;
|
if (*(const bfd_vma *) a == *(const bfd_vma *) b)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
return ((*(const bfd_vma *) a > *(const bfd_vma *) b) ? 1 : -1);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
flush_page (FILE *f, long *need, int page_addr, int on_page)
|
flush_page (FILE *f, bfd_vma *need, bfd_vma page_addr, int on_page)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
/* Flush this page. */
|
/* Flush this page. */
|
||||||
fprintf (f, "\t%s\t0x%08x\t%s Starting RVA for chunk\n",
|
fprintf (f, "\t%s\t0x%08x\t%s Starting RVA for chunk\n",
|
||||||
ASM_LONG,
|
ASM_LONG,
|
||||||
page_addr,
|
(int) page_addr,
|
||||||
ASM_C);
|
ASM_C);
|
||||||
fprintf (f, "\t%s\t0x%x\t%s Size of block\n",
|
fprintf (f, "\t%s\t0x%x\t%s Size of block\n",
|
||||||
ASM_LONG,
|
ASM_LONG,
|
||||||
@@ -1604,12 +1607,20 @@ flush_page (FILE *f, long *need, int page_addr, int on_page)
|
|||||||
|
|
||||||
for (i = 0; i < on_page; i++)
|
for (i = 0; i < on_page; i++)
|
||||||
{
|
{
|
||||||
unsigned long needed = need[i];
|
bfd_vma needed = need[i];
|
||||||
|
|
||||||
if (needed)
|
if (needed)
|
||||||
|
{
|
||||||
|
#ifndef DLLTOOL_MX86_64
|
||||||
|
/* Relocation via HIGHLOW. */
|
||||||
needed = ((needed - page_addr) | 0x3000) & 0xffff;
|
needed = ((needed - page_addr) | 0x3000) & 0xffff;
|
||||||
|
#else
|
||||||
|
/* Relocation via DIR64. */
|
||||||
|
needed = ((needed - page_addr) | 0xa000) & 0xffff;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
fprintf (f, "\t%s\t0x%lx\n", ASM_SHORT, needed);
|
fprintf (f, "\t%s\t0x%lx\n", ASM_SHORT, (long) needed);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* And padding */
|
/* And padding */
|
||||||
@@ -1977,12 +1988,12 @@ gen_exp_file (void)
|
|||||||
/* Dump the reloc section if a base file is provided. */
|
/* Dump the reloc section if a base file is provided. */
|
||||||
if (base_file)
|
if (base_file)
|
||||||
{
|
{
|
||||||
int addr;
|
bfd_vma addr;
|
||||||
long need[PAGE_SIZE];
|
bfd_vma need[PAGE_SIZE];
|
||||||
long page_addr;
|
bfd_vma page_addr;
|
||||||
int numbytes;
|
int numbytes;
|
||||||
int num_entries;
|
int num_entries;
|
||||||
long *copy;
|
bfd_vma *copy;
|
||||||
int j;
|
int j;
|
||||||
int on_page;
|
int on_page;
|
||||||
fprintf (f, "\t.section\t.init\n");
|
fprintf (f, "\t.section\t.init\n");
|
||||||
@@ -1993,7 +2004,7 @@ gen_exp_file (void)
|
|||||||
fseek (base_file, 0, SEEK_SET);
|
fseek (base_file, 0, SEEK_SET);
|
||||||
copy = xmalloc (numbytes);
|
copy = xmalloc (numbytes);
|
||||||
fread (copy, 1, numbytes, base_file);
|
fread (copy, 1, numbytes, base_file);
|
||||||
num_entries = numbytes / sizeof (long);
|
num_entries = numbytes / sizeof (bfd_vma);
|
||||||
|
|
||||||
|
|
||||||
fprintf (f, "\t.section\t.reloc\n");
|
fprintf (f, "\t.section\t.reloc\n");
|
||||||
@@ -2001,8 +2012,8 @@ gen_exp_file (void)
|
|||||||
{
|
{
|
||||||
int src;
|
int src;
|
||||||
int dst = 0;
|
int dst = 0;
|
||||||
int last = -1;
|
bfd_vma last = (bfd_vma) -1;
|
||||||
qsort (copy, num_entries, sizeof (long), sfunc);
|
qsort (copy, num_entries, sizeof (bfd_vma), sfunc);
|
||||||
/* Delete duplicates */
|
/* Delete duplicates */
|
||||||
for (src = 0; src < num_entries; src++)
|
for (src = 0; src < num_entries; src++)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user