flash/nor/stm32l4x: Remove redundant error messages
[openocd.git] / src / target / image.h
blob03bc068d62ffa9b50d1fe7f05c61b5ae5f07d388
1 /* SPDX-License-Identifier: GPL-2.0-or-later */
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 ***************************************************************************/
17 #ifndef OPENOCD_TARGET_IMAGE_H
18 #define OPENOCD_TARGET_IMAGE_H
20 #include <helper/fileio.h>
21 #include <helper/replacements.h>
23 #ifdef HAVE_ELF_H
24 #include <elf.h>
25 #endif
27 #define IMAGE_MAX_ERROR_STRING (256)
28 #define IMAGE_MAX_SECTIONS (512)
30 #define IMAGE_MEMORY_CACHE_SIZE (2048)
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 */
41 struct imagesection {
42 target_addr_t base_address;
43 uint32_t size;
44 uint64_t flags;
45 void *private; /* private data */
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 */
59 struct image_binary {
60 struct fileio *fileio;
63 struct image_ihex {
64 struct fileio *fileio;
65 uint8_t *buffer;
68 struct image_memory {
69 struct target *target;
70 uint8_t *cache;
71 uint32_t cache_address;
74 struct image_elf {
75 struct fileio *fileio;
76 bool is_64_bit;
77 union {
78 Elf32_Ehdr *header32;
79 Elf64_Ehdr *header64;
81 union {
82 Elf32_Phdr *segments32;
83 Elf64_Phdr *segments64;
85 uint32_t segment_count;
86 uint8_t endianness;
89 struct image_mot {
90 struct fileio *fileio;
91 uint8_t *buffer;
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,
103 uint32_t *checksum);
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 */