1 /* SPDX-License-Identifier: GPL-2.0-or-later */
3 /***************************************************************************
4 * Copyright (C) 2007 by Dominic Rath *
5 * Dominic.Rath@gmx.de *
7 * Copyright (C) 2007,2008 Øyvind Harboe *
8 * oyvind.harboe@zylin.com *
10 * Copyright (C) 2008 by Spencer Oliver *
11 * spen@spen-soft.co.uk *
13 * Copyright (C) 2018 by Advantest *
14 * florian.meister@advantest.com *
15 ***************************************************************************/
17 #ifndef OPENOCD_TARGET_IMAGE_H
18 #define OPENOCD_TARGET_IMAGE_H
20 #include <helper/fileio.h>
21 #include <helper/replacements.h>
27 #define IMAGE_MAX_ERROR_STRING (256)
28 #define IMAGE_MAX_SECTIONS (512)
30 #define IMAGE_MEMORY_CACHE_SIZE (2048)
33 IMAGE_BINARY
, /* plain binary */
34 IMAGE_IHEX
, /* intel hex-record format */
35 IMAGE_MEMORY
, /* target-memory pseudo-image */
36 IMAGE_ELF
, /* ELF binary */
37 IMAGE_SRECORD
, /* motorola s19 */
38 IMAGE_BUILDER
, /* when building a new image */
42 target_addr_t base_address
;
45 void *private; /* private data */
49 enum image_type type
; /* image type (plain, ihex, ...) */
50 void *type_private
; /* type private data */
51 unsigned int num_sections
; /* number of sections contained in the image */
52 struct imagesection
*sections
; /* array of sections */
53 bool base_address_set
; /* whether the image has a base address set (for relocation purposes) */
54 long long base_address
; /* base address, if one is set */
55 bool start_address_set
; /* whether the image has a start address (entry point) associated */
56 uint32_t start_address
; /* start address, if one is set */
60 struct fileio
*fileio
;
64 struct fileio
*fileio
;
69 struct target
*target
;
71 uint32_t cache_address
;
75 struct fileio
*fileio
;
82 Elf32_Phdr
*segments32
;
83 Elf64_Phdr
*segments64
;
85 uint32_t segment_count
;
90 struct fileio
*fileio
;
94 int image_open(struct image
*image
, const char *url
, const char *type_string
);
95 int image_read_section(struct image
*image
, int section
, target_addr_t offset
,
96 uint32_t size
, uint8_t *buffer
, size_t *size_read
);
97 void image_close(struct image
*image
);
99 int image_add_section(struct image
*image
, target_addr_t base
, uint32_t size
,
100 uint64_t flags
, uint8_t const *data
);
102 int image_calculate_checksum(const uint8_t *buffer
, uint32_t nbytes
,
105 #define ERROR_IMAGE_FORMAT_ERROR (-1400)
106 #define ERROR_IMAGE_TYPE_UNKNOWN (-1401)
107 #define ERROR_IMAGE_TEMPORARILY_UNAVAILABLE (-1402)
108 #define ERROR_IMAGE_CHECKSUM (-1403)
110 #endif /* OPENOCD_TARGET_IMAGE_H */