// REQUIRES: system-linux, native, python

// This test verifies that loading an ELF file from memory works and the new
// features that were added when loading from memory work like:
// - Loading the .dynamic section from the PT_DYNAMIC since ELF files loaded
//   from memory don't have the section headers available.
// This test will make a simple executable that:
//   - links against libc
//   - runs and stops at a breakpoint
//   - create a memory ELF file
//   - verify that "image dump objfile" will dump the dynamic section of the
//     memory elf file and find the .dynamic string table.

// RUN: %clang_host %p/Inputs/memory-elf.cpp -g -O0 -o %t

// RUN: %lldb %t -b \
// RUN:   -o "b main" \
// RUN:   -o "run" \
// RUN:   -o "script real_module = lldb.target.module[0]" \
// RUN:   -o "script base_addr = real_module.GetObjectFileHeaderAddress().GetLoadAddress(lldb.target)" \
// RUN:   -o "script mem_module = lldb.SBModule(lldb.process, base_addr)" \
// RUN:   -o "script target2 = lldb.debugger.CreateTarget('')" \
// RUN:   -o "script target2.AddModule(mem_module)" \
// RUN:   -o "target select 1" \
// RUN:   -o "image dump objfile" \
// RUN:   | FileCheck %s --check-prefix=MAIN --dump-input=always
// MAIN: (lldb) image dump objfile
// MAIN: Dumping headers for 1 module(s).
// MAIN: ObjectFileELF, file = '', arch = {{.*, addr = 0x[0-9a-f]+}}
// MAIN: ELF Header

// Make sure we find the program headers and see a PT_DYNAMIC entry.
// MAIN: Program Headers
// MAIN: ] PT_DYNAMIC

// Make sure we see some sections created from the program headers
// MAIN: SectID
// MAIN: PT_LOAD[0]

// Ensure we find some dependent modules as won't find these if we aren't able
// to load the .dynamic section from the PT_DYNAMIC program header.
// MAIN: Dependent Modules:

// Check for the .dynamic dump and ensure we find all dynamic entries that are
// required to be there and needed to get the .dynstr section and the symbol
// table, and the DT_DEBUG entry to find the list of shared libraries.
// MAIN: .dynamic:
// Make sure we found the .dynstr section by checking for valid strings after NEEDED
// MAIN-DAG: NEEDED {{0x[0-9a-f]+ ".*libc.*"}}
// MAIN-DAG: STRTAB {{0x[0-9a-f]+}}
// MAIN-DAG: SYMTAB {{0x[0-9a-f]+}}
// MAIN-DAG: STRSZ {{0x[0-9a-f]+}}
// MAIN-DAG: SYMENT {{0x[0-9a-f]+}}
// MAIN-DAG: DEBUG {{0x[0-9a-f]+}}
// MAIN:     NULL {{0x[0-9a-f]+}}
