char * name;
unsigned char * name;
display_debug_lines (section, start, file)     Elf32_Internal_Shdr * section;     unsigned char *       start;     FILE *                file ATTRIBUTE_UNUSED;{  DWARF2_External_LineInfo * external;  DWARF2_Internal_LineInfo   info;  unsigned char *            standard_opcodes;  unsigned char *            data = start;  unsigned char *            end  = start + section->sh_size;  unsigned char *            end_of_sequence;  int                        i;  printf (_("\nDump of debug contents of section %s:\n\n"),	  SECTION_NAME (section));  while (data < end)    {      external = (DWARF2_External_LineInfo *) data;      /* Check the length of the block.  */      info.li_length = BYTE_GET (external->li_length);      if (info.li_length > section->sh_size)	{	  warn	    (_("The line info appears to be corrupt - the section is too small\n"));	  return 0;	}      /* Check its version number.  */      info.li_version = BYTE_GET (external->li_version);      if (info.li_version != 2)	{	  warn (_("Only DWARF version 2 line info is currently supported.\n"));	  return 0;	}      info.li_prologue_length = BYTE_GET (external->li_prologue_length);      info.li_min_insn_length = BYTE_GET (external->li_min_insn_length);      info.li_default_is_stmt = BYTE_GET (external->li_default_is_stmt);      info.li_line_base       = BYTE_GET (external->li_line_base);      info.li_line_range      = BYTE_GET (external->li_line_range);      info.li_opcode_base     = BYTE_GET (external->li_opcode_base);      /* Sign extend the line base field.  */      info.li_line_base <<= 24;      info.li_line_base >>= 24;      printf (_("  Length:                      %ld\n"), info.li_length);      printf (_("  DWARF Version:               %d\n"), info.li_version);      printf (_("  Prolgue Length:              %d\n"), info.li_prologue_length);      printf (_("  Minimum Instruction Length:  %d\n"), info.li_min_insn_length);      printf (_("  Initial value of 'is_stmt':  %d\n"), info.li_default_is_stmt);      printf (_("  Line Base:                   %d\n"), info.li_line_base);      printf (_("  Line Range:                  %d\n"), info.li_line_range);      printf (_("  Opcode Base:                 %d\n"), info.li_opcode_base);      end_of_sequence = data + info.li_length + sizeof (info.li_length);      reset_state_machine (info.li_default_is_stmt);      /* Display the contents of the Opcodes table.  */      standard_opcodes = data + sizeof (* external);      printf (_("\n Opcodes:\n"));      for (i = 1; i < info.li_opcode_base; i++)	printf (_("  Opcode %d has %d args\n"), i, standard_opcodes[i - 1]);      /* Display the contents of the Directory table.  */      data = standard_opcodes + info.li_opcode_base - 1;      if (* data == 0)	printf (_("\n The Directory Table is empty.\n"));      else	{	  printf (_("\n The Directory Table:\n"));	  while (* data != 0)	    {	      printf (_("  %s\n"), data);	      data += strlen (data) + 1;	    }	}      /* Skip the NUL at the end of the table.  */      data ++;      /* Display the contents of the File Name table.  */      if (* data == 0)	printf (_("\n The File Name Table is empty.\n"));      else	{	  printf (_("\n The File Name Table:\n"));	  printf (_("  Entry\tDir\tTime\tSize\tName\n"));	  while (* data != 0)	    {	      char * name;	      int bytes_read;	      printf (_("  %d\t"), ++ state_machine_regs.last_file_entry);	      name = data;	      data += strlen (data) + 1;	      printf (_("%lu\t"), read_leb128 (data, & bytes_read, 0));	      data += bytes_read;	      printf (_("%lu\t"), read_leb128 (data, & bytes_read, 0));	      data += bytes_read;	      printf (_("%lu\t"), read_leb128 (data, & bytes_read, 0));	      data += bytes_read;	      printf (_("%s\n"), name);	    }	}      /* Skip the NUL at the end of the table.  */      data ++;      /* Now display the statements.  */      printf (_("\n Line Number Statements:\n"));      while (data < end_of_sequence)	{	  unsigned char op_code;	  int           adv;	  int           bytes_read;	  op_code = * data ++;	  switch (op_code)	    {	    case DW_LNS_extended_op:	      data += process_extended_line_op (data, info.li_default_is_stmt,                                                debug_line_pointer_size);	      break;	    case DW_LNS_copy:	      printf (_("  Copy\n"));	      break;	    case DW_LNS_advance_pc:	      adv = info.li_min_insn_length * read_leb128 (data, & bytes_read, 0);	      data += bytes_read;	      state_machine_regs.address += adv;	      printf (_("  Advance PC by %d to %lx\n"), adv,		      state_machine_regs.address);	      break;	    case DW_LNS_advance_line:	      adv = read_leb128 (data, & bytes_read, 1);	      data += bytes_read;	      state_machine_regs.line += adv;	      printf (_("  Advance Line by %d to %d\n"), adv,		      state_machine_regs.line);	      break;	    case DW_LNS_set_file:	      adv = read_leb128 (data, & bytes_read, 0);	      data += bytes_read;	      printf (_("  Set File Name to entry %d in the File Name Table\n"),		      adv);	      state_machine_regs.file = adv;	      break;	    case DW_LNS_set_column:	      adv = read_leb128 (data, & bytes_read, 0);	      data += bytes_read;	      printf (_("  Set column to %d\n"), adv);	      state_machine_regs.column = adv;	      break;	    case DW_LNS_negate_stmt:	      adv = state_machine_regs.is_stmt;	      adv = ! adv;	      printf (_("  Set is_stmt to %d\n"), adv);	      state_machine_regs.is_stmt = adv;	      break;	    case DW_LNS_set_basic_block:	      printf (_("  Set basic block\n"));	      state_machine_regs.basic_block = 1;	      break;	    case DW_LNS_const_add_pc:	      adv = (((255 - info.li_opcode_base) / info.li_line_range)		     * info.li_min_insn_length);	      state_machine_regs.address += adv;	      printf (_("  Advance PC by constant %d to 0x%lx\n"), adv,		      state_machine_regs.address);	      break;	    case DW_LNS_fixed_advance_pc:	      adv = byte_get (data, 2);	      data += 2;	      state_machine_regs.address += adv;	      printf (_("  Advance PC by fixed size amount %d to 0x%lx\n"),		      adv, state_machine_regs.address);	      break;	    default:	      op_code -= info.li_opcode_base;	      adv      = (op_code / info.li_line_range) * info.li_min_insn_length;	      state_machine_regs.address += adv;	      printf (_("  Special opcode %d: advance Address by %d to 0x%lx"),		      op_code, adv, state_machine_regs.address);	      adv = (op_code % info.li_line_range) + info.li_line_base;	      state_machine_regs.line += adv;	      printf (_(" and Line by %d to %d\n"),		      adv, state_machine_regs.line);	      break;	    }	}      printf ("\n");    }  return 1;}