+2020-12-16 Alan Modra <amodra@gmail.com>
+
+ * coffcode.h (pelength, peheader): Delete static variables.
+ (coff_apply_checksum): Instead, define them as auto vars, and pass..
+ (coff_read_word, coff_compute_checksum): ..to here. Delete
+ unnecessary forward declarations.
+ * pei-x86_64.c (pdata_count): Delete static variable.
+ (struct pex64_paps): New.
+ (pex64_print_all_pdata_sections, pex64_bfd_print_pdata): Pass
+ a pex64_paps for counting.
+ * peicode.h (jtab): Constify.
+
2020-12-15 Vivek Das Mohapatra <vivek@collabora.com>
* elflink.c (bfd_elf_size_dynamic_sections): Call
static flagword handle_COMDAT
(bfd *, flagword, void *, const char *, asection *);
#endif
-#ifdef COFF_IMAGE_WITH_PE
-static bfd_boolean coff_read_word
- (bfd *, unsigned int *);
-static unsigned int coff_compute_checksum
- (bfd *);
-static bfd_boolean coff_apply_checksum
- (bfd *);
-#endif
#ifdef TICOFF
static bfd_boolean ticoff0_bad_format_hook
(bfd *, void * );
#ifdef COFF_IMAGE_WITH_PE
-static unsigned int pelength;
-static unsigned int peheader;
-
static bfd_boolean
-coff_read_word (bfd *abfd, unsigned int *value)
+coff_read_word (bfd *abfd, unsigned int *value, unsigned int *pelength)
{
unsigned char b[2];
int status;
else
*value = (unsigned int) (b[0] + (b[1] << 8));
- pelength += (unsigned int) status;
+ *pelength += status;
return TRUE;
}
static unsigned int
-coff_compute_checksum (bfd *abfd)
+coff_compute_checksum (bfd *abfd, unsigned int *pelength)
{
bfd_boolean more_data;
file_ptr filepos;
unsigned int total;
total = 0;
- pelength = 0;
+ *pelength = 0;
filepos = (file_ptr) 0;
do
if (bfd_seek (abfd, filepos, SEEK_SET) != 0)
return 0;
- more_data = coff_read_word (abfd, &value);
+ more_data = coff_read_word (abfd, &value, pelength);
total += value;
total = 0xffff & (total + (total >> 0x10));
filepos += 2;
{
unsigned int computed;
unsigned int checksum = 0;
+ unsigned int peheader;
+ unsigned int pelength;
if (bfd_seek (abfd, 0x3c, SEEK_SET) != 0)
return FALSE;
- if (!coff_read_word (abfd, &peheader))
+ if (!coff_read_word (abfd, &peheader, &pelength))
return FALSE;
if (bfd_seek (abfd, peheader + 0x58, SEEK_SET) != 0)
if (bfd_seek (abfd, peheader, SEEK_SET) != 0)
return FALSE;
- computed = coff_compute_checksum (abfd);
+ computed = coff_compute_checksum (abfd, &pelength);
checksum = computed + pelength;
return TRUE;
}
-/* Static counter of number of found pdata sections. */
-static bfd_boolean pdata_count;
+struct pex64_paps
+{
+ void *obj;
+ /* Number of found pdata sections. */
+ unsigned int pdata_count;
+};
/* Functionn prototype. */
bfd_boolean pex64_bfd_print_pdata (bfd *, void *);
/* Helper function for bfd_map_over_section. */
static void
-pex64_print_all_pdata_sections (bfd *abfd, asection *pdata, void *obj)
+pex64_print_all_pdata_sections (bfd *abfd, asection *pdata, void *arg)
{
+ struct pex64_paps *paps = arg;
if (CONST_STRNEQ (pdata->name, ".pdata"))
{
- if (pex64_bfd_print_pdata_section (abfd, obj, pdata))
- pdata_count++;
+ if (pex64_bfd_print_pdata_section (abfd, paps->obj, pdata))
+ paps->pdata_count++;
}
}
pex64_bfd_print_pdata (bfd *abfd, void *vfile)
{
asection *pdata_section = bfd_get_section_by_name (abfd, ".pdata");
+ struct pex64_paps paps;
if (pdata_section)
return pex64_bfd_print_pdata_section (abfd, vfile, pdata_section);
- pdata_count = 0;
- bfd_map_over_sections (abfd, pex64_print_all_pdata_sections, vfile);
- return (pdata_count > 0);
+ paps.obj = vfile;
+ paps.pdata_count = 0;
+ bfd_map_over_sections (abfd, pex64_print_all_pdata_sections, &paps);
+ return paps.pdata_count != 0;
}
#define bfd_pe_print_pdata pex64_bfd_print_pdata
}
jump_table;
-static jump_table jtab[] =
+static const jump_table jtab[] =
{
#ifdef I386MAGIC
{ I386MAGIC,