Mark Wielaard b9fd0eee50 libelf: Split checks for ehdr and shdr, drop phdr check in file_read_elf.
There are various places in the code that check whether mmapped structures
are correctly aligned (or ALLOW_UNALIGNED is set). Some of these checks
are asserts. Like the one in elf(32|64)_getshdr. We should not get into
that part of the code if the shdr scn structure was cached in elf_begin
because it was mmapped in and properly aligned.

These asserts could trigger because in elf_begin.c file_read_elf ()
all alignment checks were combined. So even though only one of the ehdr,
shdr or phdr structures were not properly aligned all structures would be
copied. Also the phdr structure was not even read in elf_begin, so the
alignment check was unnecessary.

This patch splits the alignment checks and reading of ehdr and shdr
structures into separate code paths. It also drops the phdr alignment
checks in elf_begin. Those phdr checks are done in elf(32|64)_getphdr
already.

Signed-off-by: Mark Wielaard <mjw@redhat.com>
2015-06-08 11:12:38 +02:00
2015-04-28 14:41:12 +02:00
2014-12-18 23:47:22 +01:00
2014-04-18 11:46:51 +02:00
2014-12-18 23:41:41 +01:00
2009-01-10 18:17:09 -08:00
2013-08-21 10:41:12 +02:00
2005-07-26 05:00:05 +00:00
2005-07-26 05:00:05 +00:00
2009-01-10 18:17:09 -08:00

Fundamental design decision:

- the sizes of external and internal types are assumed to be the same.
  This leaves byte ordering aside.  While assuming this the code can be
  greatly simplified and speed increases.  Since no change violating this
  assumption is in sight this is believed to be a worthwhile optimization.

- the ABI of the backend modules is not guaranteed.  Really, no guarantee
  whatsoever.  We are enforcing this in the code.  The modules and their
  users must match.  No third-party EBL module are supported or allowed.
  The only reason there are separate modules is to not have the code for
  all architectures in all the binaries.

- although the public libraries (libasm, libdw) have a stable API and are
  backwards ABI compatible they, and the elfutils tools, do depend on each
  others internals, and on internals of libelf to provide their interfaces.
  So they should always be upgraded in lockstep when packaging the tools
  and libraries separately. For one example of how to do that, see the
  config/elfutils.spec.
S
Description
暂无描述
Readme 23 MiB
Languages
C 70.8%
Shell 22.6%
C++ 3.3%
Makefile 1.4%
M4 1%
Other 0.8%