mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-11-23 10:03:47 +08:00
2010-04-01 Tristan Gingold <gingold@adacore.com>
* vms.h: Include time.h. Add prototypes for vms_get_module_name, vms_time_to_time_t and vms_rawtime_to_time_t. * vms.c (vms_alpha_vec): Add archives support. * vms-misc.c: Include safe-ctype.h (vms_get_module_name): New function. (vms_time_to_time_t, vms_rawtime_to_time_t): Ditto. * vms-hdr.c (_bfd_vms_write_hdr): Put module name creation to the vms_get_module_name function. Use this function. * targets.c: Declare vms_lib_txt_vec. Add it to _bfd_target_vector. * libbfd-in.h: Add prototype for _bfd_append_relative_path. Add prototypes for vms-lib.c * libbfd.h: Regenerate. * configure.in (TDEFINES): Add an entry for vms_lib_txt_vec. Add vms-lib.lo to vms_alpha_vec. * config.bfd (targ_cpu): Add targ_selvecs for alpha*-*-*vms*. * configure: Regenerate. * bfd.c: Add selective_search field. * bfd-in2.h: Regenerate. * archive.c (append_relative_path): Rename to _bfd_append_relative_path and make it public. (_bfd_get_elt_at_filepos): Adjust for above renaming. * Makefile.am (BFD32_BACKENDS): Add vms-lib.lo (BFD32_BACKENDS_CFILES): Add vms-lib.c * Makefile.in: Regenerate.
This commit is contained in:
parent
932fd279a9
commit
4b544b6468
@ -1,3 +1,30 @@
|
||||
2010-04-01 Tristan Gingold <gingold@adacore.com>
|
||||
|
||||
* vms.h: Include time.h. Add prototypes for vms_get_module_name,
|
||||
vms_time_to_time_t and vms_rawtime_to_time_t.
|
||||
* vms.c (vms_alpha_vec): Add archives support.
|
||||
* vms-misc.c: Include safe-ctype.h
|
||||
(vms_get_module_name): New function.
|
||||
(vms_time_to_time_t, vms_rawtime_to_time_t): Ditto.
|
||||
* vms-hdr.c (_bfd_vms_write_hdr): Put module name creation to the
|
||||
vms_get_module_name function. Use this function.
|
||||
* targets.c: Declare vms_lib_txt_vec. Add it to _bfd_target_vector.
|
||||
* libbfd-in.h: Add prototype for _bfd_append_relative_path.
|
||||
Add prototypes for vms-lib.c
|
||||
* libbfd.h: Regenerate.
|
||||
* configure.in (TDEFINES): Add an entry for vms_lib_txt_vec. Add
|
||||
vms-lib.lo to vms_alpha_vec.
|
||||
* config.bfd (targ_cpu): Add targ_selvecs for alpha*-*-*vms*.
|
||||
* configure: Regenerate.
|
||||
* bfd.c: Add selective_search field.
|
||||
* bfd-in2.h: Regenerate.
|
||||
* archive.c (append_relative_path): Rename to
|
||||
_bfd_append_relative_path and make it public.
|
||||
(_bfd_get_elt_at_filepos): Adjust for above renaming.
|
||||
* Makefile.am (BFD32_BACKENDS): Add vms-lib.lo
|
||||
(BFD32_BACKENDS_CFILES): Add vms-lib.c
|
||||
* Makefile.in: Regenerate.
|
||||
|
||||
2010-04-01 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* dwarf2.c (read_attribute_value): Handle CU version 4
|
||||
|
@ -393,6 +393,7 @@ BFD32_BACKENDS = \
|
||||
versados.lo \
|
||||
vms-gsd.lo \
|
||||
vms-hdr.lo \
|
||||
vms-lib.lo \
|
||||
vms-misc.lo \
|
||||
vms-tir.lo \
|
||||
vms.lo \
|
||||
@ -577,6 +578,7 @@ BFD32_BACKENDS_CFILES = \
|
||||
versados.c \
|
||||
vms-gsd.c \
|
||||
vms-hdr.c \
|
||||
vms-lib.c \
|
||||
vms-misc.c \
|
||||
vms-tir.c \
|
||||
vms.c \
|
||||
|
@ -690,6 +690,7 @@ BFD32_BACKENDS = \
|
||||
versados.lo \
|
||||
vms-gsd.lo \
|
||||
vms-hdr.lo \
|
||||
vms-lib.lo \
|
||||
vms-misc.lo \
|
||||
vms-tir.lo \
|
||||
vms.lo \
|
||||
@ -874,6 +875,7 @@ BFD32_BACKENDS_CFILES = \
|
||||
versados.c \
|
||||
vms-gsd.c \
|
||||
vms-hdr.c \
|
||||
vms-lib.c \
|
||||
vms-misc.c \
|
||||
vms-tir.c \
|
||||
vms.c \
|
||||
@ -1488,6 +1490,7 @@ distclean-compile:
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/versados.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vms-gsd.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vms-hdr.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vms-lib.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vms-misc.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vms-tir.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vms.Plo@am__quote@
|
||||
|
@ -536,8 +536,8 @@ _bfd_generic_read_ar_hdr_mag (bfd *abfd, const char *mag)
|
||||
/* Append the relative pathname for a member of the thin archive
|
||||
to the pathname of the directory containing the archive. */
|
||||
|
||||
static char *
|
||||
append_relative_path (bfd *arch, char *elt_name)
|
||||
char *
|
||||
_bfd_append_relative_path (bfd *arch, char *elt_name)
|
||||
{
|
||||
const char *arch_name = arch->filename;
|
||||
const char *base_name = lbasename (arch_name);
|
||||
@ -591,7 +591,7 @@ _bfd_get_elt_at_filepos (bfd *archive, file_ptr filepos)
|
||||
/* This is a proxy entry for an external file. */
|
||||
if (! IS_ABSOLUTE_PATH (filename))
|
||||
{
|
||||
filename = append_relative_path (archive, filename);
|
||||
filename = _bfd_append_relative_path (archive, filename);
|
||||
if (filename == NULL)
|
||||
return NULL;
|
||||
}
|
||||
|
@ -5119,6 +5119,10 @@ struct bfd
|
||||
|
||||
/* Set if this is a thin archive. */
|
||||
unsigned int is_thin_archive : 1;
|
||||
|
||||
/* Set if only required symbols should be added in the link hash table for
|
||||
this object. Used by VMS linkers. */
|
||||
unsigned int selective_search : 1;
|
||||
};
|
||||
|
||||
typedef enum bfd_error
|
||||
|
@ -286,6 +286,10 @@ CODE_FRAGMENT
|
||||
.
|
||||
. {* Set if this is a thin archive. *}
|
||||
. unsigned int is_thin_archive : 1;
|
||||
.
|
||||
. {* Set if only required symbols should be added in the link hash table for
|
||||
. this object. Used by VMS linkers. *}
|
||||
. unsigned int selective_search : 1;
|
||||
.};
|
||||
.
|
||||
*/
|
||||
|
@ -177,6 +177,7 @@ case "${targ}" in
|
||||
;;
|
||||
alpha*-*-*vms*)
|
||||
targ_defvec=vms_alpha_vec
|
||||
targ_selvecs=vms_lib_txt_vec
|
||||
want64=true
|
||||
;;
|
||||
alpha*-*-*)
|
||||
|
3
bfd/configure
vendored
3
bfd/configure
vendored
@ -15260,7 +15260,8 @@ do
|
||||
vax1knetbsd_vec) tb="$tb vax1knetbsd.lo aout32.lo" ;;
|
||||
vaxbsd_vec) tb="$tb vaxbsd.lo aout32.lo" ;;
|
||||
versados_vec) tb="$tb versados.lo" ;;
|
||||
vms_alpha_vec) tb="$tb vms.lo vms-hdr.lo vms-gsd.lo vms-tir.lo vms-misc.lo"; target_size=64 ;;
|
||||
vms_alpha_vec) tb="$tb vms.lo vms-hdr.lo vms-gsd.lo vms-tir.lo vms-misc.lo vms-lib.lo"; target_size=64 ;;
|
||||
vms_lib_txt_vec) tb="$tb vms-lib.lo vms-misc.lo" ;;
|
||||
vms_vax_vec) tb="$tb vms.lo vms-hdr.lo vms-gsd.lo vms-tir.lo vms-misc.lo" ;;
|
||||
w65_vec) tb="$tb coff-w65.lo reloc16.lo" ;;
|
||||
we32kcoff_vec) tb="$tb coff-we32k.lo" ;;
|
||||
|
@ -919,7 +919,8 @@ do
|
||||
vax1knetbsd_vec) tb="$tb vax1knetbsd.lo aout32.lo" ;;
|
||||
vaxbsd_vec) tb="$tb vaxbsd.lo aout32.lo" ;;
|
||||
versados_vec) tb="$tb versados.lo" ;;
|
||||
vms_alpha_vec) tb="$tb vms.lo vms-hdr.lo vms-gsd.lo vms-tir.lo vms-misc.lo"; target_size=64 ;;
|
||||
vms_alpha_vec) tb="$tb vms.lo vms-hdr.lo vms-gsd.lo vms-tir.lo vms-misc.lo vms-lib.lo"; target_size=64 ;;
|
||||
vms_lib_txt_vec) tb="$tb vms-lib.lo vms-misc.lo" ;;
|
||||
vms_vax_vec) tb="$tb vms.lo vms-hdr.lo vms-gsd.lo vms-tir.lo vms-misc.lo" ;;
|
||||
w65_vec) tb="$tb coff-w65.lo reloc16.lo" ;;
|
||||
we32kcoff_vec) tb="$tb coff-we32k.lo" ;;
|
||||
|
@ -137,6 +137,8 @@ bfd_boolean _bfd_add_bfd_to_archive_cache
|
||||
(bfd *, file_ptr, bfd *);
|
||||
bfd_boolean _bfd_generic_mkarchive
|
||||
(bfd *abfd);
|
||||
char *_bfd_append_relative_path
|
||||
(bfd *arch, char *elt_name);
|
||||
const bfd_target *bfd_generic_archive_p
|
||||
(bfd *abfd);
|
||||
bfd_boolean bfd_slurp_armap
|
||||
@ -351,6 +353,30 @@ extern bfd_boolean _bfd_archive_bsd44_construct_extended_name_table
|
||||
#define _bfd_archive_bsd44_update_armap_timestamp \
|
||||
_bfd_archive_bsd_update_armap_timestamp
|
||||
|
||||
/* Routines to use for BFD_JUMP_TABLE_ARCHIVE to get VMS style
|
||||
archives. Use BFD_JUMP_TABLE_ARCHIVE (_bfd_vms_lib). Some of them
|
||||
are irrelevant and never called, so defined as NULL. */
|
||||
|
||||
extern bfd_boolean _bfd_vms_lib_write_archive_contents (bfd *arch);
|
||||
#define _bfd_vms_lib_slurp_armap NULL
|
||||
#define _bfd_vms_lib_slurp_extended_name_table NULL
|
||||
#define _bfd_vms_lib_construct_extended_name_table NULL
|
||||
#define _bfd_vms_lib_truncate_arname NULL
|
||||
#define _bfd_vms_lib_write_armap NULL
|
||||
#define _bfd_vms_lib_read_ar_hdr NULL
|
||||
#define _bfd_vms_lib_write_ar_hdr NULL
|
||||
extern bfd *_bfd_vms_lib_openr_next_archived_file (bfd *, bfd *);
|
||||
extern bfd *_bfd_vms_lib_get_elt_at_index (bfd *, symindex);
|
||||
extern int _bfd_vms_lib_generic_stat_arch_elt (bfd *, struct stat *);
|
||||
#define _bfd_vms_lib_update_armap_timestamp bfd_true
|
||||
|
||||
/* Extra routines for VMS style archives. */
|
||||
|
||||
extern symindex _bfd_vms_lib_find_symbol (bfd *, const char *);
|
||||
extern bfd *_bfd_vms_lib_get_imagelib_file (bfd *);
|
||||
extern const bfd_target *_bfd_vms_lib_alpha_archive_p (bfd *abfd);
|
||||
extern bfd_boolean _bfd_vms_lib_mkarchive (bfd *abfd);
|
||||
|
||||
/* Routines to use for BFD_JUMP_TABLE_SYMBOLS where there is no symbol
|
||||
support. Use BFD_JUMP_TABLE_SYMBOLS (_bfd_nosymbols). */
|
||||
|
||||
|
26
bfd/libbfd.h
26
bfd/libbfd.h
@ -142,6 +142,8 @@ bfd_boolean _bfd_add_bfd_to_archive_cache
|
||||
(bfd *, file_ptr, bfd *);
|
||||
bfd_boolean _bfd_generic_mkarchive
|
||||
(bfd *abfd);
|
||||
char *_bfd_append_relative_path
|
||||
(bfd *arch, char *elt_name);
|
||||
const bfd_target *bfd_generic_archive_p
|
||||
(bfd *abfd);
|
||||
bfd_boolean bfd_slurp_armap
|
||||
@ -356,6 +358,30 @@ extern bfd_boolean _bfd_archive_bsd44_construct_extended_name_table
|
||||
#define _bfd_archive_bsd44_update_armap_timestamp \
|
||||
_bfd_archive_bsd_update_armap_timestamp
|
||||
|
||||
/* Routines to use for BFD_JUMP_TABLE_ARCHIVE to get VMS style
|
||||
archives. Use BFD_JUMP_TABLE_ARCHIVE (_bfd_vms_lib). Some of them
|
||||
are irrelevant and never called, so defined as NULL. */
|
||||
|
||||
extern bfd_boolean _bfd_vms_lib_write_archive_contents (bfd *arch);
|
||||
#define _bfd_vms_lib_slurp_armap NULL
|
||||
#define _bfd_vms_lib_slurp_extended_name_table NULL
|
||||
#define _bfd_vms_lib_construct_extended_name_table NULL
|
||||
#define _bfd_vms_lib_truncate_arname NULL
|
||||
#define _bfd_vms_lib_write_armap NULL
|
||||
#define _bfd_vms_lib_read_ar_hdr NULL
|
||||
#define _bfd_vms_lib_write_ar_hdr NULL
|
||||
extern bfd *_bfd_vms_lib_openr_next_archived_file (bfd *, bfd *);
|
||||
extern bfd *_bfd_vms_lib_get_elt_at_index (bfd *, symindex);
|
||||
extern int _bfd_vms_lib_generic_stat_arch_elt (bfd *, struct stat *);
|
||||
#define _bfd_vms_lib_update_armap_timestamp bfd_true
|
||||
|
||||
/* Extra routines for VMS style archives. */
|
||||
|
||||
extern symindex _bfd_vms_lib_find_symbol (bfd *, const char *);
|
||||
extern bfd *_bfd_vms_lib_get_imagelib_file (bfd *);
|
||||
extern const bfd_target *_bfd_vms_lib_alpha_archive_p (bfd *abfd);
|
||||
extern bfd_boolean _bfd_vms_lib_mkarchive (bfd *abfd);
|
||||
|
||||
/* Routines to use for BFD_JUMP_TABLE_SYMBOLS where there is no symbol
|
||||
support. Use BFD_JUMP_TABLE_SYMBOLS (_bfd_nosymbols). */
|
||||
|
||||
|
@ -827,6 +827,7 @@ extern const bfd_target vaxnetbsd_vec;
|
||||
extern const bfd_target vax1knetbsd_vec;
|
||||
extern const bfd_target versados_vec;
|
||||
extern const bfd_target vms_alpha_vec;
|
||||
extern const bfd_target vms_lib_txt_vec;
|
||||
extern const bfd_target vms_vax_vec;
|
||||
extern const bfd_target w65_vec;
|
||||
extern const bfd_target we32kcoff_vec;
|
||||
@ -1227,6 +1228,7 @@ static const bfd_target * const _bfd_target_vector[] =
|
||||
#ifdef BFD64
|
||||
&vms_alpha_vec,
|
||||
#endif
|
||||
&vms_lib_txt_vec,
|
||||
&vms_vax_vec,
|
||||
&w65_vec,
|
||||
&we32kcoff_vec,
|
||||
|
@ -237,43 +237,9 @@ _bfd_vms_write_hdr (bfd *abfd, int objtype)
|
||||
/* Create module name from filename. */
|
||||
if (bfd_get_filename (abfd) != 0)
|
||||
{
|
||||
/* Strip path and suffix information. */
|
||||
char *fname, *fout, *fptr;
|
||||
|
||||
fptr = bfd_get_filename (abfd);
|
||||
fname = strdup (fptr);
|
||||
|
||||
/* Strip VMS path. */
|
||||
fout = strrchr (fname, ']');
|
||||
if (fout == NULL)
|
||||
fout = strchr (fname, ':');
|
||||
if (fout != NULL)
|
||||
fout++;
|
||||
else
|
||||
fout = fname;
|
||||
|
||||
/* Strip UNIX path. */
|
||||
fptr = strrchr (fout, '/');
|
||||
if (fptr != NULL)
|
||||
fout = fptr + 1;
|
||||
|
||||
/* Strip suffix. */
|
||||
fptr = strrchr (fout, '.');
|
||||
if (fptr != 0)
|
||||
*fptr = 0;
|
||||
|
||||
/* Convert to upper case and truncate at 31 characters.
|
||||
(VMS object file format restricts module name length to 31). */
|
||||
fptr = fout;
|
||||
while (*fptr != 0)
|
||||
{
|
||||
*fptr = TOUPPER (*fptr);
|
||||
fptr++;
|
||||
if (*fptr == ';' || (fptr - fout) >= 31)
|
||||
*fptr = 0;
|
||||
}
|
||||
_bfd_vms_output_counted (abfd, fout);
|
||||
free (fname);
|
||||
char *module = vms_get_module_name (bfd_get_filename (abfd), TRUE);
|
||||
_bfd_vms_output_counted (abfd, module);
|
||||
free (module);
|
||||
}
|
||||
else
|
||||
_bfd_vms_output_counted (abfd, "NONAME");
|
||||
|
@ -30,6 +30,7 @@
|
||||
#include "bfd.h"
|
||||
#include "bfdlink.h"
|
||||
#include "libbfd.h"
|
||||
#include "safe-ctype.h"
|
||||
|
||||
#include "vms.h"
|
||||
|
||||
@ -1045,3 +1046,93 @@ _bfd_vms_enter_symbol (bfd * abfd, char *name)
|
||||
#endif
|
||||
return entry;
|
||||
}
|
||||
|
||||
/* Create module name from filename (ie, extract the basename and convert it
|
||||
in upper cases). Works on both VMS and UNIX pathes.
|
||||
The result has to be free(). */
|
||||
|
||||
char *
|
||||
vms_get_module_name (const char *filename, bfd_boolean upcase)
|
||||
{
|
||||
char *fname, *fptr;
|
||||
const char *fout;
|
||||
|
||||
/* Strip VMS path. */
|
||||
fout = strrchr (filename, ']');
|
||||
if (fout == NULL)
|
||||
fout = strchr (filename, ':');
|
||||
if (fout != NULL)
|
||||
fout++;
|
||||
else
|
||||
fout = filename;
|
||||
|
||||
/* Strip UNIX path. */
|
||||
fptr = strrchr (fout, '/');
|
||||
if (fptr != NULL)
|
||||
fout = fptr + 1;
|
||||
|
||||
fname = strdup (fout);
|
||||
|
||||
/* Strip suffix. */
|
||||
fptr = strrchr (fname, '.');
|
||||
if (fptr != 0)
|
||||
*fptr = 0;
|
||||
|
||||
/* Convert to upper case and truncate at 31 characters.
|
||||
(VMS object file format restricts module name length to 31). */
|
||||
fptr = fname;
|
||||
for (fptr = fname; *fptr != 0; fptr++)
|
||||
{
|
||||
if (*fptr == ';' || (fptr - fname) >= 31)
|
||||
{
|
||||
*fptr = 0;
|
||||
break;
|
||||
}
|
||||
if (upcase)
|
||||
*fptr = TOUPPER (*fptr);
|
||||
}
|
||||
return fname;
|
||||
}
|
||||
|
||||
/* Convert a raw VMS time to a unix time. */
|
||||
|
||||
time_t
|
||||
vms_time_to_time_t (unsigned int hi, unsigned int lo)
|
||||
{
|
||||
const unsigned int off = 3506716800U;
|
||||
const unsigned int factor = 10000000;
|
||||
unsigned int tmp;
|
||||
unsigned int rlo;
|
||||
int i;
|
||||
|
||||
/* First convert to seconds. */
|
||||
tmp = hi % factor;
|
||||
hi = hi / factor;
|
||||
rlo = 0;
|
||||
for (i = 0; i < 4; i++)
|
||||
{
|
||||
tmp = (tmp << 8) | (lo >> 24);
|
||||
lo <<= 8;
|
||||
|
||||
rlo = (rlo << 8) | (tmp / factor);
|
||||
tmp %= factor;
|
||||
}
|
||||
lo = rlo;
|
||||
|
||||
/* Return 0 in case of overflow. */
|
||||
if (lo > off && hi > 1)
|
||||
return 0;
|
||||
|
||||
return lo - off;
|
||||
}
|
||||
|
||||
/* Convert a raw (stored in a buffer) VMS time to a unix time. */
|
||||
|
||||
time_t
|
||||
vms_rawtime_to_time_t (unsigned char *buf)
|
||||
{
|
||||
unsigned int hi = bfd_getl32 (buf + 4);
|
||||
unsigned int lo = bfd_getl32 (buf + 0);
|
||||
|
||||
return vms_time_to_time_t (hi, lo);
|
||||
}
|
||||
|
@ -1450,16 +1450,16 @@ const bfd_target vms_alpha_vec =
|
||||
bfd_getl16, bfd_getl_signed_16, bfd_putl16,
|
||||
|
||||
{_bfd_dummy_target, vms_object_p, /* bfd_check_format. */
|
||||
_bfd_dummy_target, _bfd_dummy_target},
|
||||
_bfd_vms_lib_alpha_archive_p, _bfd_dummy_target},
|
||||
{bfd_false, vms_mkobject, /* bfd_set_format. */
|
||||
bfd_false, bfd_false},
|
||||
_bfd_vms_lib_mkarchive, bfd_false},
|
||||
{bfd_false, vms_write_object_contents, /* bfd_write_contents. */
|
||||
bfd_false, bfd_false},
|
||||
_bfd_vms_lib_write_archive_contents, bfd_false},
|
||||
|
||||
BFD_JUMP_TABLE_GENERIC (vms),
|
||||
BFD_JUMP_TABLE_COPY (vms),
|
||||
BFD_JUMP_TABLE_CORE (_bfd_nocore),
|
||||
BFD_JUMP_TABLE_ARCHIVE (_bfd_noarchive),
|
||||
BFD_JUMP_TABLE_ARCHIVE (_bfd_vms_lib),
|
||||
BFD_JUMP_TABLE_SYMBOLS (vms),
|
||||
BFD_JUMP_TABLE_RELOCS (vms),
|
||||
BFD_JUMP_TABLE_WRITE (vms),
|
||||
|
@ -23,6 +23,8 @@
|
||||
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
|
||||
MA 02110-1301, USA. */
|
||||
|
||||
#include <time.h>
|
||||
|
||||
#undef vms
|
||||
#ifndef VMS_H
|
||||
#define VMS_H
|
||||
@ -480,6 +482,10 @@ extern int _bfd_vms_write_tbt (bfd *abfd, int objtype);
|
||||
extern int _bfd_vms_get_object_record (bfd *abfd);
|
||||
extern int _bfd_vms_get_first_record (bfd *abfd);
|
||||
|
||||
extern char *vms_get_module_name (const char *filename, bfd_boolean);
|
||||
extern time_t vms_time_to_time_t (unsigned int hi, unsigned int lo);
|
||||
extern time_t vms_rawtime_to_time_t (unsigned char *buf);
|
||||
|
||||
/* vms-hdr.c. */
|
||||
|
||||
extern int _bfd_vms_slurp_hdr (bfd *abfd, int objtype);
|
||||
|
Loading…
Reference in New Issue
Block a user