aboutsummaryrefslogtreecommitdiff
path: root/winsup/utils/parse_pe.cc
diff options
context:
space:
mode:
Diffstat (limited to 'winsup/utils/parse_pe.cc')
-rw-r--r--winsup/utils/parse_pe.cc88
1 files changed, 0 insertions, 88 deletions
diff --git a/winsup/utils/parse_pe.cc b/winsup/utils/parse_pe.cc
deleted file mode 100644
index 00aeb55..0000000
--- a/winsup/utils/parse_pe.cc
+++ /dev/null
@@ -1,88 +0,0 @@
-/* parse_pe.cc
-
- Copyright 1999 Cygnus Solutions.
-
- Written by Egor Duda <deo@logos-m.ru>
-
-This file is part of Cygwin.
-
-This software is a copyrighted work licensed under the terms of the
-Cygwin license. Please consult the file "CYGWIN_LICENSE" for
-details. */
-
-#include <bfd.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-#include "dumper.h"
-
-int
-exclusion::add ( LPBYTE mem_base, DWORD mem_size )
-{
- while ( last >= size ) size += step;
- region = (process_mem_region*) realloc ( region, size * sizeof ( process_mem_region ) );
- if ( region == NULL ) return 0;
- region [ last ].base = mem_base;
- region [ last ].size = mem_size;
- last++;
- return 1;
-};
-
-int cmp_regions ( const void* r1, const void* r2 )
-{
- if ( ((process_mem_region*) r1)->base < ((process_mem_region*) r2)->base )
- return -1;
- if ( ((process_mem_region*) r1)->base > ((process_mem_region*) r2)->base )
- return 1;
- return 0;
-}
-
-int
-exclusion::sort_and_check ()
-{
- qsort ( region, last, sizeof ( process_mem_region ), &cmp_regions );
- for ( process_mem_region* p = region; p < region + last - 1; p++ )
- {
- process_mem_region* q = p + 1;
- if ( p->base + size > q->base )
- {
- fprintf ( stderr, "region error @ %08x", p->base );
- return 0;
- }
- }
- return 1;
-}
-
-static void
-select_data_section ( bfd *abfd, asection *sect, PTR obj )
-{
- exclusion* excl_list = (exclusion*) obj;
-
- if ( ( sect->flags & ( SEC_CODE | SEC_DEBUGGING ) ) &&
- sect->vma && sect->_raw_size )
- {
- excl_list->add ( (LPBYTE)sect->vma, (DWORD)sect->_raw_size );
- deb_printf ( "excluding section: %20s %08lx\n", sect->name, sect->_raw_size);
- }
-}
-
-int
-parse_pe ( const char* file_name, exclusion* excl_list )
-{
- if ( file_name == NULL || excl_list == NULL ) return 0;
-
- bfd* abfd = bfd_openr ( file_name, "pei-i386" );
- if ( abfd == NULL )
- {
- bfd_perror ( "failed to open file" );
- return 0;
- }
-
- bfd_check_format ( abfd, bfd_object );
- bfd_map_over_sections ( abfd, &select_data_section, (PTR)excl_list );
- excl_list->sort_and_check ();
-
- bfd_close ( abfd );
- return 1;
-}
-