{
   abbrev_entry *        first_abbrev;
   abbrev_entry *        last_abbrev;
-  dwarf_vma             abbrev_base;
-  dwarf_vma             abbrev_offset;
+  unsigned char *       raw;
   struct abbrev_list *  next;
   unsigned char *       start_of_next_abbrevs;
 }
 }
 
 static abbrev_list *
-find_abbrev_list_by_abbrev_offset (dwarf_vma abbrev_base,
-                                  dwarf_vma abbrev_offset)
+find_abbrev_list_by_raw_abbrev (unsigned char *raw)
 {
   abbrev_list * list;
 
   for (list = abbrev_lists; list != NULL; list = list->next)
-    if (list->abbrev_base == abbrev_base
-       && list->abbrev_offset == abbrev_offset)
+    if (list->raw == raw)
       return list;
 
   return NULL;
   abbrev_list *list = xmalloc (sizeof (*list));
   list->first_abbrev = NULL;
   list->last_abbrev = NULL;
+  list->raw = start;
 
   while (start < end)
     {
         the caller.  */
       if (start == end || entry == 0)
        {
+         list->next = NULL;
          list->start_of_next_abbrevs = start != end ? start : NULL;
          return list;
        }
   unsigned char *end = section->start + abbrev_base + abbrev_size;
   abbrev_list *list = NULL;
   if (free_list)
-    list = find_abbrev_list_by_abbrev_offset (abbrev_base, abbrev_offset);
+    list = find_abbrev_list_by_raw_abbrev (start);
   if (list == NULL)
     {
       list = process_abbrev_set (section, start, end);
-      if (list)
-       {
-         list->abbrev_base = abbrev_base;
-         list->abbrev_offset = abbrev_offset;
-         list->next = NULL;
-       }
       if (free_list)
        *free_list = list;
     }