From 5f08555a59523b2bcdd04bea9d14c497fc8ab01a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Duval?= Date: Fri, 26 Apr 2013 20:10:23 +0200 Subject: [PATCH] GCC 4.7.x doesn't allow writes in a referenced packed struct. * error: cannot bind packed field 'image->preloaded_elf64_image::elf_header' to 'ELFLoader::EhdrType& {aka Elf64_Ehdr&}' --- src/system/boot/loader/elf.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/system/boot/loader/elf.cpp b/src/system/boot/loader/elf.cpp index d12e3b11da..7616e897bd 100644 --- a/src/system/boot/loader/elf.cpp +++ b/src/system/boot/loader/elf.cpp @@ -151,15 +151,15 @@ ELFLoader::Create(int fd, preloaded_image** _image) ImageType* image = (ImageType*)kernel_args_malloc(sizeof(ImageType)); if (image == NULL) return B_NO_MEMORY; - - EhdrType& elfHeader = image->elf_header; - - ssize_t length = read_pos(fd, 0, &elfHeader, sizeof(EhdrType)); + + ssize_t length = read_pos(fd, 0, &image->elf_header, sizeof(EhdrType)); if (length < (ssize_t)sizeof(EhdrType)) { kernel_args_free(image); return B_BAD_TYPE; } + const EhdrType& elfHeader = image->elf_header; + if (memcmp(elfHeader.e_ident, ELF_MAGIC, 4) != 0 || elfHeader.e_ident[4] != Class::kIdentClass || elfHeader.e_phoff == 0 @@ -186,7 +186,7 @@ ELFLoader::Load(int fd, preloaded_image* _image) void* mappedRegion = NULL; ImageType* image = static_cast(_image); - EhdrType& elfHeader = image->elf_header; + const EhdrType& elfHeader = image->elf_header; ssize_t size = elfHeader.e_phnum * elfHeader.e_phentsize; PhdrType* programHeaders = (PhdrType*)malloc(size); @@ -445,7 +445,7 @@ template /*static*/ status_t ELFLoader::_LoadSymbolTable(int fd, ImageType* image) { - EhdrType& elfHeader = image->elf_header; + const EhdrType& elfHeader = image->elf_header; SymType* symbolTable = NULL; ShdrType* stringHeader = NULL; uint32 numSymbols = 0;