From 4637f3d66db541034bbd930dd054a1880ed0a137 Mon Sep 17 00:00:00 2001 From: Dmitriy Ivanov Date: Mon, 4 May 2015 11:11:23 -0700 Subject: [PATCH] Do not adjust PT_GNU_STACK segment Bug: http://b/20687795 Bug: http://b/18051137 Change-Id: Ie8af3892cfbebcc0249e7981284c4ad97ff40317 (cherry picked from commit 064a9800f372b8efd6d7b08150ab5204e5304c84) --- tools/relocation_packer/src/elf_file.cc | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/tools/relocation_packer/src/elf_file.cc b/tools/relocation_packer/src/elf_file.cc index d06bd6392..102d61423 100644 --- a/tools/relocation_packer/src/elf_file.cc +++ b/tools/relocation_packer/src/elf_file.cc @@ -312,6 +312,13 @@ static void AdjustProgramHeaderOffsets(typename ELF::Phdr* program_headers, for (size_t i = 0; i < count; ++i) { typename ELF::Phdr* program_header = &program_headers[i]; + // Do not adjust PT_GNU_STACK - it confuses gdb and results + // in incorrect unwinding if the executable is stripped after + // packing. + if (program_header->p_type == PT_GNU_STACK) { + continue; + } + if (program_header->p_offset > hole_start) { // The hole start is past this segment, so adjust offset. program_header->p_offset += hole_size;