This revision was automatically updated to reflect the committed changes.
Closed by commit rL331173: ObjectFileELF: Add support for arbitrarily named 
code sections (authored by labath, committed by ).
Herald added a subscriber: JDevlieghere.

Changed prior to commit:
  https://reviews.llvm.org/D44998?vs=140628&id=144547#toc

Repository:
  rL LLVM

https://reviews.llvm.org/D44998

Files:
  lldb/trunk/lit/Modules/dwarf-gnu-debugaltlink.yaml
  lldb/trunk/lit/Modules/elf-section-types.yaml
  
lldb/trunk/packages/Python/lldbsuite/test/arm/breakpoint-thumb-codesection/Makefile
  
lldb/trunk/packages/Python/lldbsuite/test/arm/breakpoint-thumb-codesection/TestBreakpointThumbCodesection.py
  
lldb/trunk/packages/Python/lldbsuite/test/arm/breakpoint-thumb-codesection/main.c
  lldb/trunk/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp

Index: lldb/trunk/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp
===================================================================
--- lldb/trunk/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp
+++ lldb/trunk/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp
@@ -1950,6 +1950,16 @@
         sect_type = kalimbaSectionType(m_header, header);
       }
 
+      // In common case ELF code section can have arbitrary name (for example,
+      // we can specify it using section attribute for particular function) so
+      // assume that section is a code section if it has SHF_EXECINSTR flag set
+      // and has SHT_PROGBITS type.
+      if (eSectionTypeOther == sect_type &&
+          llvm::ELF::SHT_PROGBITS == header.sh_type &&
+          (header.sh_flags & SHF_EXECINSTR)) {
+        sect_type = eSectionTypeCode;
+      }
+
       const uint32_t target_bytes_size =
           (eSectionTypeData == sect_type || eSectionTypeZeroFill == sect_type)
               ? m_arch_spec.GetDataByteSize()
Index: lldb/trunk/lit/Modules/elf-section-types.yaml
===================================================================
--- lldb/trunk/lit/Modules/elf-section-types.yaml
+++ lldb/trunk/lit/Modules/elf-section-types.yaml
@@ -0,0 +1,39 @@
+# RUN: yaml2obj %s > %t
+# RUN: lldb-test module-sections %t | FileCheck %s
+
+# CHECK: Name: .text
+# CHECK-NEXT: Type: code
+
+# CHECK: Name: .gnu_debugaltlink
+# CHECK-NEXT: Type: dwarf-gnu-debugaltlink
+# CHECK-NEXT: VM size: 0
+# CHECK-NEXT: File size: 8
+
+# CHECK: Name: __codesection
+# CHECK-NEXT: Type: code
+
+--- !ELF
+FileHeader:      
+  Class:           ELFCLASS64
+  Data:            ELFDATA2LSB
+  Type:            ET_DYN
+  Machine:         EM_X86_64
+  Entry:           0x00000000000007A0
+Sections:        
+  - Name:            .text
+    Type:            SHT_PROGBITS
+    Flags:           [ SHF_ALLOC, SHF_EXECINSTR ]
+    Content:         DEADBEEFBAADF00D
+  - Name:            .debug_info
+    Type:            SHT_PROGBITS
+    AddressAlign:    0x0000000000000001
+    Content:         DEADBEEFBAADF00D
+  - Name:            .gnu_debugaltlink
+    Type:            SHT_PROGBITS
+    AddressAlign:    0x0000000000000001
+    Content:         DEADBEEFBAADF00D
+  - Name:            __codesection
+    Type:            SHT_PROGBITS
+    Flags:           [ SHF_ALLOC, SHF_EXECINSTR ]
+    Content:         DEADBEEFBAADF00D
+...
Index: lldb/trunk/packages/Python/lldbsuite/test/arm/breakpoint-thumb-codesection/main.c
===================================================================
--- lldb/trunk/packages/Python/lldbsuite/test/arm/breakpoint-thumb-codesection/main.c
+++ lldb/trunk/packages/Python/lldbsuite/test/arm/breakpoint-thumb-codesection/main.c
@@ -0,0 +1,8 @@
+__attribute__((section("__codesection")))
+int f(int a) {
+  return a + 1; // Set break point at this line.
+}
+
+int main() {
+  return f(10);
+}
Index: lldb/trunk/packages/Python/lldbsuite/test/arm/breakpoint-thumb-codesection/TestBreakpointThumbCodesection.py
===================================================================
--- lldb/trunk/packages/Python/lldbsuite/test/arm/breakpoint-thumb-codesection/TestBreakpointThumbCodesection.py
+++ lldb/trunk/packages/Python/lldbsuite/test/arm/breakpoint-thumb-codesection/TestBreakpointThumbCodesection.py
@@ -0,0 +1,35 @@
+"""
+Test that breakpoints correctly work in an thumb function in an arbitrary
+named codesection.
+"""
+from __future__ import print_function
+
+
+import lldb
+import os
+import time
+from lldbsuite.test.decorators import *
+from lldbsuite.test.lldbtest import *
+from lldbsuite.test import lldbutil
+
+
+class TestBreakpointThumbCodesection(TestBase):
+
+    mydir = TestBase.compute_mydir(__file__)
+
+    @skipIf(archs=no_match(["arm"]))
+    def test_breakpoint(self):
+        self.build()
+        exe = self.getBuildArtifact("a.out")
+        line = line_number('main.c', '// Set break point at this line.')
+
+        self.runCmd("target create %s" % exe)
+        bpid = lldbutil.run_break_set_by_file_and_line(self, "main.c", line)
+
+        self.runCmd("run")
+
+        self.assertIsNotNone(lldbutil.get_one_thread_stopped_at_breakpoint_id(
+            self.process(), bpid), "Process is not stopped at breakpoint")
+
+        self.process().Continue()
+        self.assertEqual(self.process().GetState(), lldb.eStateExited, PROCESS_EXITED)
Index: lldb/trunk/packages/Python/lldbsuite/test/arm/breakpoint-thumb-codesection/Makefile
===================================================================
--- lldb/trunk/packages/Python/lldbsuite/test/arm/breakpoint-thumb-codesection/Makefile
+++ lldb/trunk/packages/Python/lldbsuite/test/arm/breakpoint-thumb-codesection/Makefile
@@ -0,0 +1,6 @@
+LEVEL = ../../make
+
+C_SOURCES := main.c
+CFLAGS_EXTRAS = -mthumb
+
+include $(LEVEL)/Makefile.rules
\ No newline at end of file
Index: lldb/trunk/lit/Modules/dwarf-gnu-debugaltlink.yaml
===================================================================
--- lldb/trunk/lit/Modules/dwarf-gnu-debugaltlink.yaml
+++ lldb/trunk/lit/Modules/dwarf-gnu-debugaltlink.yaml
@@ -1,25 +0,0 @@
-# RUN: yaml2obj %s > %t
-# RUN: lldb-test module-sections %t | FileCheck %s
-
-# CHECK: Name: .gnu_debugaltlink
-# CHECK-NEXT: Type: dwarf-gnu-debugaltlink
-# CHECK-NEXT: VM size: 0
-# CHECK-NEXT: File size: 8
-
---- !ELF
-FileHeader:      
-  Class:           ELFCLASS64
-  Data:            ELFDATA2LSB
-  Type:            ET_DYN
-  Machine:         EM_X86_64
-  Entry:           0x00000000000007A0
-Sections:        
-  - Name:            .debug_info
-    Type:            SHT_PROGBITS
-    AddressAlign:    0x0000000000000001
-    Content:         DEADBEEFBAADF00D
-  - Name:            .gnu_debugaltlink
-    Type:            SHT_PROGBITS
-    AddressAlign:    0x0000000000000001
-    Content:         DEADBEEFBAADF00D
-...
_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to