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:
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user