Skip to content
Permalink
Browse files

[lldb] [ObjectFile/ELF] Fix negated seg ids on 32-bit arches

Scale segment identifier up to user_id_t before negating it.  This fixes
the identifers being wrongly e.g. 0x00000000fffffffe instead of
0xfffffffffffffffe.  Fix suggested by Pavel Labath.

This fixes 5 tests failing on i386 (PR #44748):

  lldb-shell :: ObjectFile/ELF/PT_LOAD-overlap-PT_INTERP.yaml
  lldb-shell :: ObjectFile/ELF/PT_LOAD-overlap-PT_TLS.yaml
  lldb-shell :: ObjectFile/ELF/PT_LOAD-overlap-section.yaml
  lldb-shell :: ObjectFile/ELF/PT_LOAD.yaml
  lldb-shell :: ObjectFile/ELF/PT_TLS-overlap-PT_LOAD.yaml

Differential Revision: https://reviews.llvm.org/D73914
  • Loading branch information
mgorny committed Feb 3, 2020
1 parent 4c05019 commit 98594a44aaa8410492d25793e1f01fb6b8bef45c
Showing with 3 additions and 1 deletion.
  1. +3 −1 lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp
@@ -206,7 +206,9 @@ unsigned ELFRelocation::RelocAddend64(const ELFRelocation &rel) {

} // end anonymous namespace

static user_id_t SegmentID(size_t PHdrIndex) { return ~PHdrIndex; }
static user_id_t SegmentID(size_t PHdrIndex) {
return ~user_id_t(PHdrIndex);
}

bool ELFNote::Parse(const DataExtractor &data, lldb::offset_t *offset) {
// Read all fields.

0 comments on commit 98594a4

Please sign in to comment.
You can’t perform that action at this time.