]> git.gag.com Git - fw/openocd/commitdiff
target/image: fix - p_flags field in ELF64 segment headers is 64 bits wide
authorJan Matyas <matyas@codasip.com>
Tue, 12 Apr 2022 11:33:51 +0000 (13:33 +0200)
committerAntonio Borneo <borneo.antonio@gmail.com>
Sat, 23 Apr 2022 09:26:15 +0000 (09:26 +0000)
Fixed the reading of p_flags in ELF64 segment headers - that field
is 64 bits wide.

Change-Id: I053ca57d36efb54b7c638484acd6c7a2fbcbd05a
Signed-off-by: Jan Matyas <matyas@codasip.com>
Reviewed-on: https://review.openocd.org/c/openocd/+/6927
Tested-by: jenkins
Reviewed-by: Antonio Borneo <borneo.antonio@gmail.com>
src/target/image.c
src/target/image.h

index eafa73eaae648e4c347e128091702d5ed35d29de..130ea6c1f98cc4fae9f468f77ac816967bd4263a 100644 (file)
@@ -596,7 +596,7 @@ static int image_elf64_read_headers(struct image *image)
                                image->sections[j].base_address = field64(elf,
                                                elf->segments64[i].p_paddr);
                        image->sections[j].private = &elf->segments64[i];
-                       image->sections[j].flags = field32(elf, elf->segments64[i].p_flags);
+                       image->sections[j].flags = field64(elf, elf->segments64[i].p_flags);
                        j++;
                }
        }
@@ -1168,7 +1168,7 @@ int image_read_section(struct image *image,
        return ERROR_OK;
 }
 
-int image_add_section(struct image *image, target_addr_t base, uint32_t size, int flags, uint8_t const *data)
+int image_add_section(struct image *image, target_addr_t base, uint32_t size, uint64_t flags, uint8_t const *data)
 {
        struct imagesection *section;
 
index 5b5d11f6b94485220e9e131ad156df5d9b3bd375..bf06064ac983174a615e3d982d9c8cea82b6ec82 100644 (file)
@@ -52,7 +52,7 @@ enum image_type {
 struct imagesection {
        target_addr_t base_address;
        uint32_t size;
-       int flags;
+       uint64_t flags;
        void *private;          /* private data */
 };
 
@@ -108,7 +108,7 @@ int image_read_section(struct image *image, int section, target_addr_t offset,
 void image_close(struct image *image);
 
 int image_add_section(struct image *image, target_addr_t base, uint32_t size,
-               int flags, uint8_t const *data);
+               uint64_t flags, uint8_t const *data);
 
 int image_calculate_checksum(const uint8_t *buffer, uint32_t nbytes,
                uint32_t *checksum);