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<ELF64Class>::EhdrType& {aka Elf64_Ehdr&}'
This commit is contained in:
Jérôme Duval
2013-04-26 21:17:36 +02:00
parent 44d2f5f53e
commit 5f08555a59
+6 -6
View File
@@ -151,15 +151,15 @@ ELFLoader<Class>::Create(int fd, preloaded_image** _image)
ImageType* image = (ImageType*)kernel_args_malloc(sizeof(ImageType)); ImageType* image = (ImageType*)kernel_args_malloc(sizeof(ImageType));
if (image == NULL) if (image == NULL)
return B_NO_MEMORY; return B_NO_MEMORY;
EhdrType& elfHeader = image->elf_header; ssize_t length = read_pos(fd, 0, &image->elf_header, sizeof(EhdrType));
ssize_t length = read_pos(fd, 0, &elfHeader, sizeof(EhdrType));
if (length < (ssize_t)sizeof(EhdrType)) { if (length < (ssize_t)sizeof(EhdrType)) {
kernel_args_free(image); kernel_args_free(image);
return B_BAD_TYPE; return B_BAD_TYPE;
} }
const EhdrType& elfHeader = image->elf_header;
if (memcmp(elfHeader.e_ident, ELF_MAGIC, 4) != 0 if (memcmp(elfHeader.e_ident, ELF_MAGIC, 4) != 0
|| elfHeader.e_ident[4] != Class::kIdentClass || elfHeader.e_ident[4] != Class::kIdentClass
|| elfHeader.e_phoff == 0 || elfHeader.e_phoff == 0
@@ -186,7 +186,7 @@ ELFLoader<Class>::Load(int fd, preloaded_image* _image)
void* mappedRegion = NULL; void* mappedRegion = NULL;
ImageType* image = static_cast<ImageType*>(_image); ImageType* image = static_cast<ImageType*>(_image);
EhdrType& elfHeader = image->elf_header; const EhdrType& elfHeader = image->elf_header;
ssize_t size = elfHeader.e_phnum * elfHeader.e_phentsize; ssize_t size = elfHeader.e_phnum * elfHeader.e_phentsize;
PhdrType* programHeaders = (PhdrType*)malloc(size); PhdrType* programHeaders = (PhdrType*)malloc(size);
@@ -445,7 +445,7 @@ template<typename Class>
/*static*/ status_t /*static*/ status_t
ELFLoader<Class>::_LoadSymbolTable(int fd, ImageType* image) ELFLoader<Class>::_LoadSymbolTable(int fd, ImageType* image)
{ {
EhdrType& elfHeader = image->elf_header; const EhdrType& elfHeader = image->elf_header;
SymType* symbolTable = NULL; SymType* symbolTable = NULL;
ShdrType* stringHeader = NULL; ShdrType* stringHeader = NULL;
uint32 numSymbols = 0; uint32 numSymbols = 0;