* windres.h: New file.
* windres.c: New file.
* resrc.c: New file.
* rcparse.y: New file.
* rclex.l: New file.
* configure.in: Define and substitute BUILD_WINDRES.
* configure: Rebuild.
* Makefile.in: Rebuild dependencies.
(WINDRES_PROG): New variable.
(PROGS): Add @BUILD_WINDRES@.
(HFILES): Add dlltool.h and windres.h.
(CFILES): Add windres.c and resrc.c.
(GENERATED_CFILES): Add rcparse.c and rclex.c.
(WINDRES_OBJS): New variable.
$(WINDRES_PROG): New target.
(rcparse.c, rcparse.h, rclex.c): New targets.
Snapshot. windres can parse and print rc files.
(def_exports): Add data parameter. Change all callers.
(dump_def_info): Print data field.
(gen_def_file): Likewise.
(make_one_lib_file): Handle data field by not emitting simple
label and not emitting anything in SEC_TEXT.
(dtab): Print data field.
(process_duplicates): Merge data field.
* dlltool.h (def_exports): Update declaration.
* defparse.y (expline): Accept opt_DATA. Pass it to def_exports.
(opt_DATA): New non-terminal.
* deflex.l: Include dlltool.h and libiberty.h. Don't declare
strdup. Use xstrdup rather than strdup.
* defparse.y: Include bfd.h, bucomm.h, and dlltool.h.
* dlltool.c: Include dlltool.h and time.h. Make a lot of
variables and functions static. Make a lot of char * variables
and parameters const. Add declarations for static functions. Do
some reindenting. Hide more PowerPC stuff inside DLLTOOL_PPC.
(INSTALL_XFORM, INSTALL_XFORM1): Remove.
(install): Depend upon installdirs. Use $(program_transform_name)
directly, rather than using $(INSTALL_XFORM) and
$(INSTALL_XFORM1).
(installdirs): New target.
(install-info): Run mkinstalldirs.
* Makefile.in ($(OBJDUMP_PROG)): Don't link against BFDLIB twice.
* configure.in: Add AC_ARG_ENABLE for commonbfdlib. If it is set,
set OPCODES to empty.
* configure: Rebuild.
* Many files: Add function prototypes.
* ar.c (mri_emul, get_pos_bfd): Make static.
* arlex.l: Include "libiberty.h". Don't declare strdup. Use
xstrdup rather than strdup.
* arparse.y (yyerror): Make argument const. Correct typo.
* arsup.c (strdup): Don't declare.
(ar_save): Use xstrdup rather than strdup.
* filemode.c: Include "bucomm.h".
* nm.c (usage): Make static.
(print_symname): Make format and name const.
* objcopy.c (cat): Remove.
(copy_archive): Make output_target const. Use concat, not cat.
(copy_file, simple_copy, smart_rename): Make arguments const.
* objdump.c (read_section_stabs): Likewise.
(print_section_stabs): Likewise.
(display_target_tables): Don't declare getenv.
* strings.c (strings_object_file): Change file to const.
(print_strings): Change filename to const.
* Makefile.in: Rebuild dependencies.
Tue Mar 18 11:37:24 1997 Ian Lance Taylor <ian@cygnus.com>
* configure.in: Add BFD_NEED_DECLARATION(getenv).
* acconfig.h: Add NEED_DECLARATION_GETENV.
* bucomm.h (getenv): Declare if NEED_DECLARATION_GETENV.
* configure, config.in: Rebuild.
* nlmconv.c (getenv): Don't declare.
(usage): Mention --adjust-section-vma.
(OPTION_ADJUST_VMA): Define.
(long_options): Add "addjust-vma".
(display_bfd): If adjust_section_vma is not 0, add it to all the
section addresses.
(main): Handle OPTION_ADJUST_VMA.
* binutils.texi, objdump.1: Document --adjust-vma.
* objdump.c (disassemble_bytes): Make output of raw instructions
work better for non-standard values of bytes_per_chunk and
bytes_per_line.
I also fixed the spacing in the last patch.
(push_bincl): Put the new file on both bincl_list and
bincl_stack. Clear the file_types field.
(pop_bincl): Use the next_stack field when popping the stack.
Don't put the file on bincl_list.
(find_excl): Include the file name when warning about an unfound
N_EXCL.
* debug.c (debug_type_samep): Don't crash if we are passed NULL.
PR 11465.
Change all callers.
(objdump_print_addr_with_sym): Likewise. Call objdump_print_value
to print address.
(objdump_print_addr): New static function.
(objdump_print_address): Just call objdump_print_addr.
(disassemble_bytes): Print real address, not function offset.
Skip a certain number of leading zeroes.
* objdump.c (disassemble_zeroes): New static variable.
(usage): Mention --disassemble-zeroes.
(long_options): Add "disassemble-zeroes".
(disassemble_bytes): Check disassemble_zeroes.
Changes requested by LSI.
(parse_stab): Pass value to push_bincl. Call find_excl for
N_EXCL.
(struct bincl_file): Add hash, file and file_types fields.
(push_bincl): Add hash parameter. Save it in the new hash field.
Save the file number in the new file field.
(pop_bincl): Put the bincl_file on bincl_list, rather than freeing
it. Save the file types in the new file_types field.
(find_excl): New static function.
PR 10980.
(start_stab): Initialize function_end.
(finish_stab): Pass info->function_end to debug_end_function.
(parse_stab): If info->function_end is set, use it as the address
which ends a function.
that are up to 0x1000 bytes apart, not just 64.
(ieee_add_bb11_blocks): Don't bother to emit a BB11 that is less
than 0x100 bytes.
(ieee_lineno): Only emit line numbers that are less than
info->highaddr.
(ieee_enum_type): If the enum tag has been seen before but not
defined, reuse the same type index, and define it.
(ieee_tag_type): If this enum has not been defined, add an
undefined entry to the list of enums.
PR 10946.
(long_options): Add "prefix-addresses".
(compare_symbols): Sort BSF_FUNCTION symbols before other
symbols.
(find_symbol_for_address): New static function, broken out of
objdump_print_address.
(objdump_print_addr_with_sym): New static function, broken out of
objdump_print_address.
(objdump_print_address): Call new functions.
(disassemble_bytes): New static function, broken out of
disassemble_data. Change disassembly format, unless
prefix_addresses is set.
(disassemble_data): Call disassemble_bytes. Unless
prefix_addresses is set, disassemble in chunks headed by a
symbol.
* binutils.texi, objdump.1: Document --prefix-addresses.
(ieee_pointer_type): Set reflocalp after pushing type.
(ieee_function_type): If reflocalp is set, make this type local.
(ieee_range_type, ieee_array_type, ieee_set_type): Likewise.
(ieee_const_type, ieee_volatile_type): Likewise.
(ieee_struct_field, ieee_class_baseclass): Likewise.
PR 10638.
(parse_ieee_bb): When starting a BB1, initialize the types field
to the global_types field.
(parse_ieee_be): When ending a BB2, copy the types field to the
global_types field.
(struct stab_write_handle): Change strings to a pointer to
string_hash_entry. Add last_strings field. Remove strings_alloc
field.
(string_hash_newfunc): Initialize next field.
(stab_write_symbol): Copy string into hash table rather than into
buffer. Keep a list of hash table entries.
(write_stabs_in_sections_debugging_info): Initialize last_string.
Copy strings from list of hash table entries in memory.
(stab_modify_type): If the entry on the stack is a definition,
make a new definition rather than failing an assert.
(stab_array_type): The size is only zero if high is strictly less
than low.
PR 10377.
* configure.in: Call BFD_NEED_DECLARATION on strstr and sbrk.
* acconfig.h (NEED_DECLARATION_STRSTR): New macro.
(NEED_DECLARATION_SBRK): New macro.
* configure, config.in: Rebuild.
* bucomm.h (strstr): Declare if NEED_DECLARATION_STRSTR.
(sbrk): Declare if HAVE_SBRK and NEED_DECLARATION_SBRK.
(usage): Mention -EB/-EL/--endian.
(long_options): Add "endian".
(disassemble_data): If endianness was specified, replace
abfd->xvec with a copy of itself with the given endianness.
(main): Handle -EB/-EL/--endian.
* binutils.texi, objdump.1: Mention -EB/-EL/--endian.
(start_stab): Add abfd parameter.
(parse_stab_string): Skip the symbol leading char when searching
for the value of a global symbol.
* budbg.h (start_stab): Update declaration.
* rddbg.c (read_section_stabs_debugging_info): Pass abfd to
start_stab.
(read_symbol_stabs_debugging_info): Likewise.
* objdump.c (disassemble_data): Make sure sym_name is always set.
(dump_section_header): Always put a space after the section name.
(dump_bfd_header): Terminate output with newline.
complex_double_index.
(ieee_complex_type): Cache type index in complex_float_index and
complex_double_index, depending upon size. Set size on type stack
to size * 2.
* ieee.c (ieee_empty_type): Use builtin_unknown, not 0.
(ieee_void_type): Use builtin_void, not 1.
* ieee.c (parse_ieee_ty): Handle 'V' type code.
(parse_ieee_atn): Don't require two numbers for type 10.
* ieee.c (parse_ieee_be): Add one to offset at end of function or
block.
* ieee.c (struct ieee_block): Add field skip.
(parse_ieee_bb): Don't call debug_record_function for __XRYCPP
function, and set skip field.
(parse_ieee_be): Don't call debug_end_function if skip is set.
each stab entry, call stab_context on an error, and call
free_saved_stabs before rturning.
(read_symbol_stabs_debugging_info): Likewise.
(SAVE_STABS_COUNT): Define.
(struct saved_stab): Define.
(saved_stabs, saved_stabs_index): New static variables.
(save_stab, stab_context, free_saved_stabs): New static functios.
(struct stab_print): Remove.
(stab_print): Remove.
(dump_stabs): Don't initialize stab_name.
(print_section_stabs): Call bfd_get_stab_name rather than using
the stab_name array.
id_list and compare_list fields.
(struct debug_class_id): Define.
(struct debug_type_compare_list): Define.
(debug_write): Initialize info->id_list
(debug_write_name): Remove reference to info->class_mark.
(debug_write_type): Get id for all structs and classes. Simplify
test for whether struct has already been written.
(debug_write_class_type): Get id for all classes. Simplify test
for whether class has already been written.
(debug_write_block): Don't write out blocks other than the top
level block if they have no local variables.
(debug_set_class_id): New static function.
(debug_type_samep): New static function.
(debug_class_type_samep): New static function.
* prdbg.c (pr_start_struct_type): Always print id.
(pr_start_class_type): Likewise.
(pr_tag_type): Likewise.
* objcopy.c (remove_leading_char): New static variable.
(OPTION_REMOVE_LEADING_CHAR): Define.
(copy_usage): Mention --remove-leading-char.
(filter_symbols): If remove_leading_char, and the first character
of a global symbol matches the symbol leading char of the BFD,
remove the first character.
(copy_object): Filter the symbols if remove_leading_char is set.
(copy_main): Handle --remove-leading-char.
* binutils.texi, objcopy.1: Document --remove-leading-char.
(struct ieee_write_type): Add name field.
(struct ieee_type_class): Remove name field. Change all uses to
use new name field in type instead.
(struct ieee_name_type): Likewise.
(ieee_start_struct_type): Initialize name field of type.
(ieee_start_class_type): Don't initialize classdef entry of tag.
(ieee_class_method_var): Don't adjust voffset.
(ieee_end_class_type): Likewise.
(ieee_tag_type): Initialize new name field of type.
(ieee_typdef): Set name after copying in type information.
anonymous struct, copy the name into memory.
(ieee_tag_type): Likewise.
* debug.c (debug_write_type): Only check and set id field for an
unnamed object.
(debug_write_class_type): Likewise.
field, and define some enum constants for it.
(parse_ieee_ty): Set kind field of variable for 'x' and 'X' types.
(parse_ieee_atn): Make an indirect slot for an external variable,
although we otherwise don't record it. Set kind field rather than
variable field of pvar.
(ieee_read_cxx_class): Try to get the type of a static member.
(ieee_read_reference): Check kind field rather than variable
field.
so_string and so_value fields.
(finish_stab): Call stab_emit_pending_vars before calling
debug_end_function. Don't warn about pending variables.
(parse_stab): Accumulate N_SO strings until a non N_SO symbol is
seen, rather than calling debug_append_filename. Call
stab_emit_pending_vars before calling debug_end_function. Don't
set info->last_type.
* objdump.c (show_raw_insn): New global.
(usage): Update.
(long_options): Update.
(disassemble_data): Set disasm_info.flags if --show-raw-insn.
* objdump.c (disassemble_data): Set new arch,mach,endian fields in
disasm_info.
(debug_get_field_name): Declare.
(debug_get_field_bitpos): Declare.
(debug_get_field_bitsize): Declare.
(debug_get_field_visibility): Declare.
(debug_get_field_physname): Declare.
* debug.c (debug_get_real_type): Handle DEBUG_KIND_TAGGED.
(debug_get_type_size): New function.
(debug_get_field_name): New function.
(debug_get_field_bitpos): New function.
(debug_get_field_bitsize): New function.
(debug_get_field_visibility): New function.
(debug_get_field_physname): New function.
(debug_write_type): Make sure we pass the real kind, not INDIRECT,
to tag_type. Pass the name recursively for INDIRECT.
and boolean parameters to function_type. Add boolean parameter to
method_type.
(debug_make_ellipsis_type): Don't declare.
(debug_make_function_type): Add debug_type * and boolean
parameters. Change all callers.
(debug_make_method_type): Add boolean parameter. Change all
callers.
(debug_get_parameter_types): Add boolean * parameter. Change all
callers.
(debug_get_target_type): Declare.
* debug.c (struct debug_function_type): Add fields arg_types and
varargs.
(struct debug_method_type): Add field varargs.
(debug_ellipsis_type, ELLIPSIS_P): Remove.
(debug_make_ellipsis_type): Remove.
(debug_make_function_type): Add arg_types and varargs parameters.
(debug_make_method_type): Add varargs parameter.
(debug_get_parameter_types): Add pvarargs parameter.
(debug_get_target_type): New function.
(debug_write_type): In case DEBUG_KIND_FUNCTION, push argument
types and pass count to function_type. In DEBUG_KIND_METHOD, use
a signed int for the count, don't call ellipsis_type, and pass
varargs to method_type.
* stabs.c (struct stab_demangle_info): Add varargs field.
(stab_demangle_argtypes): Add pvarargs parameter. Change all
callers.
(stab_demangle_args): Likewise.
(stab_demangle_type): In case 'F', pick up argument types.
* prdbg.c (pr_ellipsis_type): Remove.
(pr_function_type): Add argcount and varargs parameters.
(pr_method_type): Add varargs parameter.
* ieee.c (ieee_ellipsis_type): Remove.
(ieee_function_type): Add argcount and varargs parameters.
(ieee_method_type): Add varargs parameter. Remove most of
function body, and just call ieee_function_type.
functions not listed below to demangle argument types; they are
all called via stab_demangle_argtypes.
(finish_stab): If the kind of an undefined tag is
DEBUG_KIND_ILLEGAL, use DEBUG_KIND_STRUCT instead. Warn if there
are any pending variable.
(parse_stab): Don't close the function when the block depth goes
to zero. Pass value to debug_end_function.
(parse_stab_string): In case 'T', pass the name to
parse_stab_type.
(parse_stab_type): In case 'x', use stab_find_tagged_type. In
case '#', handle functions with variable numbers of arguments.
(parse_stab_struct_type): Add tagname parameter. Change all
callers.
(parse_stab_members): Add tagname and typenums parameters. Change
all callers. If the type of a method is a stub, call
parse_stab_argtypes to demangle the argument types and get the
physical name of the function.
(parse_stab_argtypes): New static function.
(stab_record_variable): For a DEBUG_GLOBAL or DEBUG_STATIC
variable, call debug_record_variable immediately.
(stab_find_tagged_type): New static function.
(struct debug_write_fns): Add field ellipsis_type. Add id
parameter to start_struct_type, start_class_type, and tag_type.
(debug_make_ellipsis_type): Declare.
(debug_find_named_type): Declare.
(debug_get_type_kind): Declare.
(debug_get_return_type): Declare.
(debug_get_parameter_types): Declare.
(debug_get_fields): Declare.
(debug_get_field_type): Declare.
* debug.c (struct debug_handle): Add fields class_id and base_id.
(struct debug_class_type): Add field id.
(struct debug_method_variant): Rename argtypes to physname.
Change all uses.
(debug_ellipsis_type): New static variable.
(ELLIPSIS_P): New macro.
(debug_make_ellipsis_type): New function.
(debug_make_method_variant): Rename argtypes to physname.
(debug_make_static_method_variant): Likewise.
(debug_name_type): Always put types in the global namespace.
(debug_find_named_type): New function.
(debug_find_tagged_type): Treat DEBUG_KIND_ILLEGAL specially,
rather than DEBUG_KIND_VOID.
(debug_get_real_type): New static function.
(debug_get_type_kind): New function.
(debug_get_return_type): New function.
(debug_get_parameter_types): New function.
(debug_get_fields): New function.
(debug_get_field_type): New function.
(debug_write): Initialize base_id.
(debug_write_type): Pass new id argument to tag_type. Handle
DEBUG_KIND_ILLEGAL. Use id for DEBUG_KIND_STRUCT and
DEBUG_KIND_UNION. Handle ellipsis for method arguments.
(debug_write_class_type): Don't dereference kclass if it is NULL.
Use id.
* prdbg.c (pr_fns): Add pr_ellipsis_type.
(pr_ellipsis_type): New static function.
(pr_pointer_type): If this is a pointer to an array, parenthesize
it correctly.
(pr_start_struct_type): Add id parameter.
(pr_start_class_type): Likewise.
(pr_tag_type): Likewise.
(pr_fix_visibility): Add the visibility to the top of the stack,
not the second element on the stack.
(pr_struct_field): Pop the stack before calling pr_fix_visibility.
(pr_class_static_member): Likewise.
(pr_class_start_method): Don't push a type, just set the method
name in the type on the top of the stack.
(pr_class_end_method): Don't pop the stack.
(pr_class_method_variant): Rename argtypes parameter to physname.
Append const and volatile rather than prepending them. Add a
space after the physname.
(pr_class_static_method_variant): Likewise.
* ieee.c (ieee_fns): Add ieee_ellipsis_type.
(ieee_define_named_type): Use DEBUG_KIND_ILLEGAL rather than
DEBUG_KIND_VOID.
(write_ieee_debugging_info): Likewise.
(ieee_typdef): Likewise.
(ieee_ellipsis_type): New static function.
(ieee_start_struct_type): Add id parameter.
(ieee_start_class_type): Likewise.
(ieee_tag_type): Likewise.
(ieee_class_method_variant): Rename name to physname.
(ieee_class_static_method_variant): Likewise.
BUILD_DLLTOOL): Put definitions for these into makefile when
configuring, instead of always clearing in mpw-make.sed.
* mpw-make.sed: Edit out any host_alias or target_alias settings,
fix pathname to BFD internal include files, remove dependency
calculation rules.
given a kind of type we can handle.
(debug_write_type): Handle undefined enums and structs.
(debug_write_class_type): Handle undefined classes.
* prdbg.c (pr_enum_type): Handle an undefined enum.
Also comment changes to debug.h.
bunch of static functions and structs used to write out IEEE
debugging information.
* budbg.h (write_ieee_debugging_info): Declare.
* ieee.c (struct ieee_type): Add pslot field.
(enum builtin_types): Define.
(ieee_builtin_type): For a pointer, return a pointer to the named
type. Use enum values rather than numbers.
(ieee_alloc_type): New static function.
(ieee_read_type_index): Use ieee_alloc_type.
(parse_ieee_bb): Likewise.
(parse_ieee_ty): Likewise. Use ieee_builtin_type for array range,
rather than making a new integer type. Store the new type in the
slot, if there is one.
(parse_ieee_atn): Treat ATN10 as defining a register variable.
(ieee_regno_to_genreg): Rename from ieee_regno_to_gen. Change all
callers.
(ieee_genreg_to_regno): New static function.
enum_type, start_struct_type, and start_class_type.
* debug.c (debug_write_type): Pass any tag name to
start_struct_type, debug_write_class_type, and enum_type. If
DEBUG_KIND_TAGGED, pass the name in the recursive call.
(debug_write_class_type): Accept a new tag parameter, and pass it
to start_class_type.
* prdbg.c (pop_type): Don't remove '+' character.
(pr_enum_type): Accept and use tag parameter.
(pr_start_struct_type): Likewise.
(pr_start_class_type): Likewise.
(pr_class_baseclass): Adjust algorithm used to find where to put
the baseclass name.
(pr_tag): Don't bother to insert the tag name.
Remove targets which just listed dependencies of .o files.
(DEP): New variable.
(HFILES, GENERATED_HFILES): New variables.
(CFILES, GENERATED_CFILES): New variables.
(underscore.c): Don't do anything, just depend upon stamp-under.
(stamp-under): New target; do what underscore.c used to do.
(nlmconv.o): Depend upon sym.h and ecoff.h.
(.dep, .dep1, dep.sed, dep, dep-in): New targets.
(stage1, stage2, stage3, against, comparison): Remove.
(de-stage1, de-stage2, de-stage3): Remove.
(clean, distclean): Remove stamp-under and dep.sed.
* dep-in.sed: New file.
* Makefile.in (OBJDUMP_OBJS): New variable.
($(OBJDUMP_PROG)): Use $(OBJDUMP_OBJS).