uint32_t object_table_offset = bp->object_info_tbl_offset + offset;
 
-       table = GET_IMAGE(ATOM_OBJECT_TABLE, object_table_offset);
+       table = ((ATOM_OBJECT_TABLE *) bios_get_image(&bp->base,
+                               object_table_offset,
+                               struct_size(table, asObjects, 1)));
 
        if (!table)
                return 0;
        uint32_t connector_table_offset = bp->object_info_tbl_offset
                + le16_to_cpu(bp->object_info_tbl.v1_1->usConnectorObjectTableOffset);
 
-       ATOM_OBJECT_TABLE *tbl =
-               GET_IMAGE(ATOM_OBJECT_TABLE, connector_table_offset);
+       ATOM_OBJECT_TABLE *tbl = ((ATOM_OBJECT_TABLE *) bios_get_image(&bp->base,
+                               connector_table_offset,
+                               struct_size(tbl, asObjects, 1)));
 
        if (!tbl) {
                dm_error("Can't get connector table from atom bios.\n");
        if (!DATA_TABLES(GPIO_Pin_LUT))
                return BP_RESULT_BADBIOSTABLE;
 
-       header = GET_IMAGE(ATOM_GPIO_PIN_LUT, DATA_TABLES(GPIO_Pin_LUT));
+       header = ((ATOM_GPIO_PIN_LUT *) bios_get_image(&bp->base,
+                               DATA_TABLES(GPIO_Pin_LUT),
+                               struct_size(header, asGPIO_Pin, 1)));
        if (!header)
                return BP_RESULT_BADBIOSTABLE;
 
-       if (sizeof(ATOM_COMMON_TABLE_HEADER) + sizeof(ATOM_GPIO_PIN_LUT)
+       if (sizeof(ATOM_COMMON_TABLE_HEADER) + struct_size(header, asGPIO_Pin, 1)
                        > le16_to_cpu(header->sHeader.usStructureSize))
                return BP_RESULT_BADBIOSTABLE;
 
 
        offset += bp->object_info_tbl_offset;
 
-       tbl = GET_IMAGE(ATOM_OBJECT_TABLE, offset);
+       tbl = ((ATOM_OBJECT_TABLE *) bios_get_image(&bp->base, offset,
+                               struct_size(tbl, asObjects, 1)));
        if (!tbl)
                return NULL;
 
 
        genericTableOffset = bp->object_info_tbl_offset +
                bp->object_info_tbl.v1_3->usMiscObjectTableOffset;
-       object_table = (ATOM_OBJECT_TABLE *)
-               GET_IMAGE(ATOM_OBJECT_TABLE, genericTableOffset);
+       object_table = ((ATOM_OBJECT_TABLE *) bios_get_image(&bp->base,
+                               genericTableOffset,
+                               struct_size(object_table, asObjects, 1)));
        if (!object_table)
                return BP_RESULT_FAILURE;
 
 
 typedef struct _ATOM_GPIO_PIN_LUT
 {
   ATOM_COMMON_TABLE_HEADER  sHeader;
-  ATOM_GPIO_PIN_ASSIGNMENT   asGPIO_Pin[1];
+  ATOM_GPIO_PIN_ASSIGNMENT   asGPIO_Pin[];
 }ATOM_GPIO_PIN_LUT;
 
 /****************************************************************************/
   USHORT    usSize;                                        //the size of ATOM_DISPLAY_OBJECT_PATH
   USHORT    usConnObjectId;                                //Connector Object ID
   USHORT    usGPUObjectId;                                 //GPU ID
-  USHORT    usGraphicObjIds[1];                            //1st Encoder Obj source from GPU to last Graphic Obj destinate to connector.
+  USHORT    usGraphicObjIds[];                            //1st Encoder Obj source from GPU to last Graphic Obj destinate to connector.
 }ATOM_DISPLAY_OBJECT_PATH;
 
 typedef struct  _ATOM_DISPLAY_EXTERNAL_OBJECT_PATH
   UCHAR                           ucNumOfDispPath;
   UCHAR                           ucVersion;
   UCHAR                           ucPadding[2];
-  ATOM_DISPLAY_OBJECT_PATH        asDispPath[1];
+  ATOM_DISPLAY_OBJECT_PATH        asDispPath[];
 }ATOM_DISPLAY_OBJECT_PATH_TABLE;
 
 typedef struct _ATOM_OBJECT                                //each object has this structure
 {
   UCHAR               ucNumberOfObjects;
   UCHAR               ucPadding[3];
-  ATOM_OBJECT         asObjects[1];
+  ATOM_OBJECT         asObjects[];
 }ATOM_OBJECT_TABLE;
 
 typedef struct _ATOM_SRC_DST_TABLE_FOR_ONE_OBJECT         //usSrcDstTableOffset pointing to this structure