X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=gdb%2Fsolib-frv.c;h=10476f6250c94554c7ca6adef4609b34424fb018;hb=bb1183e25ae74ba21500fb4e39bc1ca9822e3086;hp=fd748f46a9a7458e54f28e51259fe217dd02f8c5;hpb=bf4692711232eb96cd840f96d88897a2746d8190;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/solib-frv.c b/gdb/solib-frv.c index fd748f46a9..10476f6250 100644 --- a/gdb/solib-frv.c +++ b/gdb/solib-frv.c @@ -1,5 +1,5 @@ /* Handle FR-V (FDPIC) shared libraries for GDB, the GNU Debugger. - Copyright (C) 2004-2017 Free Software Foundation, Inc. + Copyright (C) 2004-2020 Free Software Foundation, Inc. This file is part of GDB. @@ -377,7 +377,7 @@ frv_current_sos (void) if (got_addr != mgot) { int errcode; - char *name_buf; + gdb::unique_xmalloc_ptr name_buf; struct int_elf32_fdpic_loadmap *loadmap; struct so_list *sop; CORE_ADDR addr; @@ -409,16 +409,16 @@ frv_current_sos (void) if (solib_frv_debug) fprintf_unfiltered (gdb_stdlog, "current_sos: name = %s\n", - name_buf); + name_buf.get ()); if (errcode != 0) warning (_("Can't read pathname for link map entry: %s."), safe_strerror (errcode)); else { - strncpy (sop->so_name, name_buf, SO_NAME_MAX_PATH_SIZE - 1); + strncpy (sop->so_name, name_buf.get (), + SO_NAME_MAX_PATH_SIZE - 1); sop->so_name[SO_NAME_MAX_PATH_SIZE - 1] = '\0'; - xfree (name_buf); strcpy (sop->so_original_name, sop->so_name); } @@ -546,7 +546,7 @@ enable_break2 (void) /* Read the contents of the .interp section into a local buffer; the contents specify the dynamic linker this program uses. */ - interp_sect_size = bfd_section_size (exec_bfd, interp_sect); + interp_sect_size = bfd_section_size (interp_sect); buf = (char *) alloca (interp_sect_size); bfd_get_section_contents (exec_bfd, interp_sect, buf, 0, interp_sect_size); @@ -561,14 +561,13 @@ enable_break2 (void) mechanism to find the dynamic linker's base address. */ gdb_bfd_ref_ptr tmp_bfd; - TRY + try { tmp_bfd = solib_bfd_open (buf); } - CATCH (ex, RETURN_MASK_ALL) + catch (const gdb_exception &ex) { } - END_CATCH if (tmp_bfd == NULL) { @@ -604,24 +603,20 @@ enable_break2 (void) interp_sect = bfd_get_section_by_name (tmp_bfd.get (), ".text"); if (interp_sect) { - interp_text_sect_low - = bfd_section_vma (tmp_bfd.get (), interp_sect); + interp_text_sect_low = bfd_section_vma (interp_sect); interp_text_sect_low += displacement_from_map (ldm, interp_text_sect_low); interp_text_sect_high - = interp_text_sect_low + bfd_section_size (tmp_bfd.get (), - interp_sect); + = interp_text_sect_low + bfd_section_size (interp_sect); } interp_sect = bfd_get_section_by_name (tmp_bfd.get (), ".plt"); if (interp_sect) { - interp_plt_sect_low = - bfd_section_vma (tmp_bfd.get (), interp_sect); + interp_plt_sect_low = bfd_section_vma (interp_sect); interp_plt_sect_low += displacement_from_map (ldm, interp_plt_sect_low); interp_plt_sect_high = - interp_plt_sect_low + bfd_section_size (tmp_bfd.get (), - interp_sect); + interp_plt_sect_low + bfd_section_size (interp_sect); } addr = gdb_bfd_lookup_symbol (tmp_bfd.get (), cmp_name, "_dl_debug_addr"); @@ -769,8 +764,6 @@ frv_relocate_main_executable (void) int status; CORE_ADDR exec_addr, interp_addr; struct int_elf32_fdpic_loadmap *ldm; - struct cleanup *old_chain; - struct section_offsets *new_offsets; int changed; struct obj_section *osect; @@ -792,9 +785,7 @@ frv_relocate_main_executable (void) main_executable_lm_info = new lm_info_frv; main_executable_lm_info->map = ldm; - new_offsets = XCNEWVEC (struct section_offsets, - symfile_objfile->num_sections); - old_chain = make_cleanup (xfree, new_offsets); + section_offsets new_offsets (symfile_objfile->section_offsets.size ()); changed = 0; ALL_OBJFILE_OSECTIONS (symfile_objfile, osect) @@ -808,7 +799,7 @@ frv_relocate_main_executable (void) /* Current address of section. */ addr = obj_section_addr (osect); /* Offset from where this section started. */ - offset = ANOFFSET (symfile_objfile->section_offsets, osect_idx); + offset = symfile_objfile->section_offsets[osect_idx]; /* Original address prior to any past relocations. */ orig_addr = addr - offset; @@ -817,10 +808,10 @@ frv_relocate_main_executable (void) if (ldm->segs[seg].p_vaddr <= orig_addr && orig_addr < ldm->segs[seg].p_vaddr + ldm->segs[seg].p_memsz) { - new_offsets->offsets[osect_idx] + new_offsets[osect_idx] = ldm->segs[seg].addr - ldm->segs[seg].p_vaddr; - if (new_offsets->offsets[osect_idx] != offset) + if (new_offsets[osect_idx] != offset) changed = 1; break; } @@ -830,8 +821,6 @@ frv_relocate_main_executable (void) if (changed) objfile_relocate (symfile_objfile, new_offsets); - do_cleanups (old_chain); - /* Now that symfile_objfile has been relocated, we can compute the GOT value and stash it away. */ main_executable_lm_info->got_value = main_got (); @@ -969,7 +958,7 @@ frv_fdpic_find_canonical_descriptor (CORE_ADDR entry_point) if (sym == 0) name = 0; else - name = SYMBOL_LINKAGE_NAME (sym); + name = sym->linkage_name (); /* Check the main executable. */ addr = find_canonical_descriptor_in_load_object