/* Populate the cache object and return it */
 
        ACPI_MEMSET(cache, 0, sizeof(struct acpi_memory_list));
-       cache->link_offset = 8;
        cache->list_name = cache_name;
        cache->object_size = object_size;
        cache->max_depth = max_depth;
 
 acpi_status acpi_os_purge_cache(struct acpi_memory_list * cache)
 {
-       char *next;
+       void *next;
        acpi_status status;
 
        ACPI_FUNCTION_ENTRY();
 
                /* Delete and unlink one cached state object */
 
-               next = *(ACPI_CAST_INDIRECT_PTR(char,
-                                               &(((char *)cache->
-                                                  list_head)[cache->
-                                                             link_offset])));
+               next =
+                   ((struct acpi_object_common *)cache->list_head)->
+                   next_object;
                ACPI_FREE(cache->list_head);
 
                cache->list_head = next;
 
                /* Put the object at the head of the cache list */
 
-               *(ACPI_CAST_INDIRECT_PTR(char,
-                                        &(((char *)object)[cache->
-                                                           link_offset]))) =
+               ((struct acpi_object_common *)object)->next_object =
                    cache->list_head;
                cache->list_head = object;
                cache->current_depth++;
                /* There is an object available, use it */
 
                object = cache->list_head;
-               cache->list_head = *(ACPI_CAST_INDIRECT_PTR(char,
-                                                           &(((char *)
-                                                              object)[cache->
-                                                                      link_offset])));
+               cache->list_head =
+                   ((struct acpi_object_common *)object)->next_object;
 
                cache->current_depth--;