OpenOCD
image.h
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-or-later */
2 
3 /***************************************************************************
4  * Copyright (C) 2007 by Dominic Rath *
5  * Dominic.Rath@gmx.de *
6  * *
7  * Copyright (C) 2007,2008 Øyvind Harboe *
8  * oyvind.harboe@zylin.com *
9  * *
10  * Copyright (C) 2008 by Spencer Oliver *
11  * spen@spen-soft.co.uk *
12  * *
13  * Copyright (C) 2018 by Advantest *
14  * florian.meister@advantest.com *
15  ***************************************************************************/
16 
17 #ifndef OPENOCD_TARGET_IMAGE_H
18 #define OPENOCD_TARGET_IMAGE_H
19 
20 #include <helper/fileio.h>
21 #include <helper/replacements.h>
22 
23 #ifdef HAVE_ELF_H
24 #include <elf.h>
25 #endif
26 
27 #define IMAGE_MAX_ERROR_STRING (256)
28 #define IMAGE_MAX_SECTIONS (512)
29 
30 #define IMAGE_MEMORY_CACHE_SIZE (2048)
31 
32 enum image_type {
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 */
39 };
40 
41 struct imagesection {
43  uint32_t size;
44  uint64_t flags;
45  void *private; /* private data */
46 };
47 
48 struct image {
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 */
57 };
58 
59 struct image_binary {
60  struct fileio *fileio;
61 };
62 
63 struct image_ihex {
64  struct fileio *fileio;
65  uint8_t *buffer;
66 };
67 
68 struct image_memory {
69  struct target *target;
70  uint8_t *cache;
71  uint32_t cache_address;
72 };
73 
74 struct image_elf {
75  struct fileio *fileio;
76  bool is_64_bit;
77  union {
80  };
81  union {
84  };
85  uint32_t segment_count;
86  uint8_t endianness;
87 };
88 
89 struct image_mot {
90  struct fileio *fileio;
91  uint8_t *buffer;
92 };
93 
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);
98 
99 int image_add_section(struct image *image, target_addr_t base, uint32_t size,
100  uint64_t flags, uint8_t const *data);
101 
102 int image_calculate_checksum(const uint8_t *buffer, uint32_t nbytes,
103  uint32_t *checksum);
104 
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)
109 
110 #endif /* OPENOCD_TARGET_IMAGE_H */
void image_close(struct image *image)
Definition: image.c:1197
int image_read_section(struct image *image, int section, target_addr_t offset, uint32_t size, uint8_t *buffer, size_t *size_read)
Definition: image.c:1065
int image_calculate_checksum(const uint8_t *buffer, uint32_t nbytes, uint32_t *checksum)
Definition: image.c:1254
int image_add_section(struct image *image, target_addr_t base, uint32_t size, uint64_t flags, uint8_t const *data)
Definition: image.c:1160
image_type
Definition: image.h:32
@ IMAGE_ELF
Definition: image.h:36
@ IMAGE_SRECORD
Definition: image.h:37
@ IMAGE_BINARY
Definition: image.h:33
@ IMAGE_MEMORY
Definition: image.h:35
@ IMAGE_BUILDER
Definition: image.h:38
@ IMAGE_IHEX
Definition: image.h:34
int image_open(struct image *image, const char *url, const char *type_string)
Definition: image.c:949
size_t size
Size of the control block search area.
Definition: rtt/rtt.c:30
char * url
Definition: helper/fileio.c:24
struct fileio * fileio
Definition: image.h:60
uint8_t endianness
Definition: image.h:86
Elf32_Ehdr * header32
Definition: image.h:78
uint32_t segment_count
Definition: image.h:85
Elf32_Phdr * segments32
Definition: image.h:82
struct fileio * fileio
Definition: image.h:75
Elf64_Ehdr * header64
Definition: image.h:79
bool is_64_bit
Definition: image.h:76
Elf64_Phdr * segments64
Definition: image.h:83
uint8_t * buffer
Definition: image.h:65
struct fileio * fileio
Definition: image.h:64
uint8_t * cache
Definition: image.h:70
struct target * target
Definition: image.h:69
uint32_t cache_address
Definition: image.h:71
struct fileio * fileio
Definition: image.h:90
uint8_t * buffer
Definition: image.h:91
Definition: image.h:48
uint32_t start_address
Definition: image.h:56
enum image_type type
Definition: image.h:49
unsigned int num_sections
Definition: image.h:51
bool start_address_set
Definition: image.h:55
void * type_private
Definition: image.h:50
struct imagesection * sections
Definition: image.h:52
long long base_address
Definition: image.h:54
bool base_address_set
Definition: image.h:53
uint64_t flags
Definition: image.h:44
target_addr_t base_address
Definition: image.h:42
uint32_t size
Definition: image.h:43
Definition: target.h:120
uint64_t target_addr_t
Definition: types.h:335
uint8_t offset[4]
Definition: vdebug.c:9