Date: Thursday, May 27, 2021 @ 12:25:28 Author: foutrelis Revision: 416523
upgpkg: lldb 12.0.0-1: new upstream release Added: lldb/trunk/lldb-no-sphinx-automodapi.patch lldb/trunk/support-DWARF-5-DW_FORM_line_strp-used-by-GCC.patch Modified: lldb/trunk/PKGBUILD -----------------------------------------------------+ PKGBUILD | 18 - lldb-no-sphinx-automodapi.patch | 14 support-DWARF-5-DW_FORM_line_strp-used-by-GCC.patch | 319 ++++++++++++++++++ 3 files changed, 347 insertions(+), 4 deletions(-) Modified: PKGBUILD =================================================================== --- PKGBUILD 2021-05-27 11:24:17 UTC (rev 416522) +++ PKGBUILD 2021-05-27 12:25:28 UTC (rev 416523) @@ -2,7 +2,7 @@ # Contributor: Jan "heftig" Steffens <jan.steff...@gmail.com> pkgname=lldb -pkgver=11.1.0 +pkgver=12.0.0 pkgrel=1 pkgdesc="Next generation, high-performance debugger" arch=('x86_64') @@ -11,9 +11,13 @@ depends=('llvm-libs' 'clang' 'python' 'python-six') makedepends=('llvm' 'cmake' 'ninja' 'swig' 'python-sphinx') _source_base=https://github.com/llvm/llvm-project/releases/download/llvmorg-$pkgver -source=($_source_base/$pkgname-$pkgver.src.tar.xz{,.sig}) -sha256sums=('b273480ab46d32ebd65752e9be229da8c7940d158fa185fb20cffa5602789eee' - 'SKIP') +source=($_source_base/$pkgname-$pkgver.src.tar.xz{,.sig} + support-DWARF-5-DW_FORM_line_strp-used-by-GCC.patch + lldb-no-sphinx-automodapi.patch) +sha256sums=('14bcc0f55644df1a50ae9830e1f1751a7b3f633fb8605ee50e685a3db0c705ed' + 'SKIP' + 'd3f689fcfc40fb5219056c38f25cdbea95acf1f439b792ef043505ef22091909' + '08e31dbaeffc77caf6c77771814e4c5aefa4cfa2cf33ff5fe1ad7ca8b35e5dd4') validpgpkeys+=('B6C8F98282B944E3B0D5C2530FC3042E345AD05D') # Hans Wennborg <h...@chromium.org> validpgpkeys+=('474E22316ABF4785A88C6E8EA2C794A986419D8A') # Tom Stellard <tstel...@redhat.com> @@ -20,6 +24,12 @@ prepare() { cd "$srcdir/$pkgname-$pkgver.src" mkdir build + + # https://reviews.llvm.org/D97721 + patch -Np2 -i ../support-DWARF-5-DW_FORM_line_strp-used-by-GCC.patch + + # sphinx-automodapi is not needed to generate the man page + patch -Np2 -i ../lldb-no-sphinx-automodapi.patch } build() { Added: lldb-no-sphinx-automodapi.patch =================================================================== --- lldb-no-sphinx-automodapi.patch (rev 0) +++ lldb-no-sphinx-automodapi.patch 2021-05-27 12:25:28 UTC (rev 416523) @@ -0,0 +1,14 @@ +diff --git a/lldb/docs/conf.py b/lldb/docs/conf.py +index b9b94672cbde..d318762e7440 100644 +--- a/lldb/docs/conf.py ++++ b/lldb/docs/conf.py +@@ -37,8 +37,7 @@ automodapi_toctreedirnm = 'python_api' + + # Add any Sphinx extension module names here, as strings. They can be extensions + # coming with Sphinx (named 'sphinx.ext.*') or your custom ones. +-extensions = ['sphinx.ext.todo', 'sphinx.ext.mathjax', 'sphinx.ext.intersphinx', +- 'sphinx_automodapi.automodapi'] ++extensions = ['sphinx.ext.todo', 'sphinx.ext.mathjax', 'sphinx.ext.intersphinx'] + + # Add any paths that contain templates here, relative to this directory. + templates_path = ['_templates'] Added: support-DWARF-5-DW_FORM_line_strp-used-by-GCC.patch =================================================================== --- support-DWARF-5-DW_FORM_line_strp-used-by-GCC.patch (rev 0) +++ support-DWARF-5-DW_FORM_line_strp-used-by-GCC.patch 2021-05-27 12:25:28 UTC (rev 416523) @@ -0,0 +1,319 @@ +From 4096ae06f47af9db2c2550a2c34979edfbd91b8d Mon Sep 17 00:00:00 2001 +From: Jan Kratochvil <jan.kratoch...@redhat.com> +Date: Tue, 2 Mar 2021 15:17:23 +0100 +Subject: [PATCH] [lldb] Support DWARF-5 DW_FORM_line_strp (used by GCC) + +LLDB has been failing on binaries produced by new GCC 11.0 with -gdwarf-5. + +Differential Revision: https://reviews.llvm.org/D97721 +--- + .../SymbolFile/DWARF/DWARFDebugInfoEntry.cpp | 1 + + .../SymbolFile/DWARF/DWARFFormValue.cpp | 73 +++---- + .../Shell/SymbolFile/DWARF/dwarf5-line-strp.s | 181 ++++++++++++++++++ + 3 files changed, 220 insertions(+), 35 deletions(-) + create mode 100755 lldb/test/Shell/SymbolFile/DWARF/dwarf5-line-strp.s + +diff --git a/lldb/source/Plugins/SymbolFile/DWARF/DWARFDebugInfoEntry.cpp b/lldb/source/Plugins/SymbolFile/DWARF/DWARFDebugInfoEntry.cpp +index 421298802645..bce25297c4c7 100644 +--- a/lldb/source/Plugins/SymbolFile/DWARF/DWARFDebugInfoEntry.cpp ++++ b/lldb/source/Plugins/SymbolFile/DWARF/DWARFDebugInfoEntry.cpp +@@ -173,6 +173,7 @@ bool DWARFDebugInfoEntry::Extract(const DWARFDataExtractor &data, + break; + + case DW_FORM_strp: ++ case DW_FORM_line_strp: + case DW_FORM_sec_offset: + data.GetU32(&offset); + break; +diff --git a/lldb/source/Plugins/SymbolFile/DWARF/DWARFFormValue.cpp b/lldb/source/Plugins/SymbolFile/DWARF/DWARFFormValue.cpp +index 305f1cbd2826..ec78c5bbc9f4 100644 +--- a/lldb/source/Plugins/SymbolFile/DWARF/DWARFFormValue.cpp ++++ b/lldb/source/Plugins/SymbolFile/DWARF/DWARFFormValue.cpp +@@ -150,40 +150,40 @@ struct FormSize { + uint8_t valid:1, size:7; + }; + static FormSize g_form_sizes[] = { +- {0,0}, // 0x00 unused +- {0,0}, // 0x01 DW_FORM_addr +- {0,0}, // 0x02 unused +- {0,0}, // 0x03 DW_FORM_block2 +- {0,0}, // 0x04 DW_FORM_block4 +- {1,2}, // 0x05 DW_FORM_data2 +- {1,4}, // 0x06 DW_FORM_data4 +- {1,8}, // 0x07 DW_FORM_data8 +- {0,0}, // 0x08 DW_FORM_string +- {0,0}, // 0x09 DW_FORM_block +- {0,0}, // 0x0a DW_FORM_block1 +- {1,1}, // 0x0b DW_FORM_data1 +- {1,1}, // 0x0c DW_FORM_flag +- {0,0}, // 0x0d DW_FORM_sdata +- {1,4}, // 0x0e DW_FORM_strp +- {0,0}, // 0x0f DW_FORM_udata +- {0,0}, // 0x10 DW_FORM_ref_addr (addr size for DWARF2 and earlier, 4 bytes for +- // DWARF32, 8 bytes for DWARF32 in DWARF 3 and later +- {1,1}, // 0x11 DW_FORM_ref1 +- {1,2}, // 0x12 DW_FORM_ref2 +- {1,4}, // 0x13 DW_FORM_ref4 +- {1,8}, // 0x14 DW_FORM_ref8 +- {0,0}, // 0x15 DW_FORM_ref_udata +- {0,0}, // 0x16 DW_FORM_indirect +- {1,4}, // 0x17 DW_FORM_sec_offset +- {0,0}, // 0x18 DW_FORM_exprloc +- {1,0}, // 0x19 DW_FORM_flag_present +- {0,0}, // 0x1a +- {0,0}, // 0x1b +- {0,0}, // 0x1c +- {0,0}, // 0x1d +- {0,0}, // 0x1e +- {0,0}, // 0x1f +- {1,8}, // 0x20 DW_FORM_ref_sig8 ++ {0, 0}, // 0x00 unused ++ {0, 0}, // 0x01 DW_FORM_addr ++ {0, 0}, // 0x02 unused ++ {0, 0}, // 0x03 DW_FORM_block2 ++ {0, 0}, // 0x04 DW_FORM_block4 ++ {1, 2}, // 0x05 DW_FORM_data2 ++ {1, 4}, // 0x06 DW_FORM_data4 ++ {1, 8}, // 0x07 DW_FORM_data8 ++ {0, 0}, // 0x08 DW_FORM_string ++ {0, 0}, // 0x09 DW_FORM_block ++ {0, 0}, // 0x0a DW_FORM_block1 ++ {1, 1}, // 0x0b DW_FORM_data1 ++ {1, 1}, // 0x0c DW_FORM_flag ++ {0, 0}, // 0x0d DW_FORM_sdata ++ {1, 4}, // 0x0e DW_FORM_strp ++ {0, 0}, // 0x0f DW_FORM_udata ++ {0, 0}, // 0x10 DW_FORM_ref_addr (addr size for DWARF2 and earlier, 4 bytes ++ // for DWARF32, 8 bytes for DWARF32 in DWARF 3 and later ++ {1, 1}, // 0x11 DW_FORM_ref1 ++ {1, 2}, // 0x12 DW_FORM_ref2 ++ {1, 4}, // 0x13 DW_FORM_ref4 ++ {1, 8}, // 0x14 DW_FORM_ref8 ++ {0, 0}, // 0x15 DW_FORM_ref_udata ++ {0, 0}, // 0x16 DW_FORM_indirect ++ {1, 4}, // 0x17 DW_FORM_sec_offset ++ {0, 0}, // 0x18 DW_FORM_exprloc ++ {1, 0}, // 0x19 DW_FORM_flag_present ++ {0, 0}, // 0x1a DW_FORM_strx (ULEB128) ++ {0, 0}, // 0x1b DW_FORM_addrx (ULEB128) ++ {1, 4}, // 0x1c DW_FORM_ref_sup4 ++ {0, 0}, // 0x1d DW_FORM_strp_sup (4 bytes for DWARF32, 8 bytes for DWARF64) ++ {1, 16}, // 0x1e DW_FORM_data16 ++ {1, 4}, // 0x1f DW_FORM_line_strp ++ {1, 8}, // 0x20 DW_FORM_ref_sig8 + }; + + llvm::Optional<uint8_t> +@@ -286,6 +286,7 @@ bool DWARFFormValue::SkipValue(dw_form_t form, + // 32 bit for DWARF 32, 64 for DWARF 64 + case DW_FORM_sec_offset: + case DW_FORM_strp: ++ case DW_FORM_line_strp: + *offset_ptr += 4; + return true; + +@@ -398,7 +399,8 @@ void DWARFFormValue::Dump(Stream &s) const { + case DW_FORM_udata: + s.PutULEB128(uvalue); + break; +- case DW_FORM_strp: { ++ case DW_FORM_strp: ++ case DW_FORM_line_strp: { + const char *dbg_str = AsCString(); + if (dbg_str) { + s.QuotedCString(dbg_str); +@@ -606,6 +608,7 @@ bool DWARFFormValue::FormIsSupported(dw_form_t form) { + case DW_FORM_flag: + case DW_FORM_sdata: + case DW_FORM_strp: ++ case DW_FORM_line_strp: + case DW_FORM_strx: + case DW_FORM_strx1: + case DW_FORM_strx2: +diff --git a/lldb/test/Shell/SymbolFile/DWARF/dwarf5-line-strp.s b/lldb/test/Shell/SymbolFile/DWARF/dwarf5-line-strp.s +new file mode 100755 +index 000000000000..87bc61e19c5d +--- /dev/null ++++ b/lldb/test/Shell/SymbolFile/DWARF/dwarf5-line-strp.s +@@ -0,0 +1,181 @@ ++# Test handling of DWARF5 DW_FORM_line_strp from .debug_info as used by GCC. ++ ++# UNSUPPORTED: system-darwin, system-windows ++# REQUIRES: x86 ++ ++# RUN: llvm-mc -filetype=obj -o %t -triple x86_64-pc-linux %s ++# RUN: %lldb %t -o "p main" \ ++# RUN: -o exit | FileCheck %s ++ ++# CHECK: (void (*)()) $0 = 0x0000000000000000 ++ ++ .text ++.Ltext0: ++ .globl main ++ .type main, @function ++main: ++.LFB0: ++.LM1: ++ .long 0 ++.LM2: ++ .long 0 ++.LFE0: ++ .size main, .-main ++.Letext0: ++ .section .debug_info,"",@progbits ++.Ldebug_info0: ++ .long .Ldebug_info0_end - .Ldebug_info0_start # Length of Compilation Unit Info ++.Ldebug_info0_start: ++ .value 0x5 # DWARF version number ++ .byte 0x1 # DW_UT_compile ++ .byte 0x8 # Pointer Size (in bytes) ++ .long .Ldebug_abbrev0 # Offset Into Abbrev. Section ++ .uleb128 0x1 # (DIE (0xc) DW_TAG_compile_unit) ++ .long .LASF2 # DW_AT_producer: "GNU C17 11.0.0 20210210 (Red Hat 11.0.0-0) -mtune=generic -march=x86-64 -gdwarf-5 -gno-as-loc-support" ++ .byte 0x1d # DW_AT_language ++ .long .LASF0 # DW_AT_name: "main.c" ++ .long .LASF1 # DW_AT_comp_dir: "" ++ .quad .Ltext0 # DW_AT_low_pc ++ .quad .Letext0-.Ltext0 # DW_AT_high_pc ++ .long .Ldebug_line0 # DW_AT_stmt_list ++ .uleb128 0x2 # (DIE (0x2e) DW_TAG_subprogram) ++ # DW_AT_external ++ .long .LASF3 # DW_AT_name: "main" ++ .byte 0x1 # DW_AT_decl_file (main.c) ++ .byte 0x1 # DW_AT_decl_line ++ .quad .LFB0 # DW_AT_low_pc ++ .quad .LFE0-.LFB0 # DW_AT_high_pc ++ .byte 0 # end of children of DIE 0xc ++.Ldebug_info0_end: ++ .section .debug_abbrev,"",@progbits ++.Ldebug_abbrev0: ++ .uleb128 0x1 # (abbrev code) ++ .uleb128 0x11 # (TAG: DW_TAG_compile_unit) ++ .byte 0x1 # DW_children_yes ++ .uleb128 0x25 # (DW_AT_producer) ++ .uleb128 0xe # (DW_FORM_strp) ++ .uleb128 0x13 # (DW_AT_language) ++ .uleb128 0xb # (DW_FORM_data1) ++ .uleb128 0x3 # (DW_AT_name) ++ .uleb128 0x1f # (DW_FORM_line_strp) ++ .uleb128 0x1b # (DW_AT_comp_dir) ++ .uleb128 0x1f # (DW_FORM_line_strp) ++ .uleb128 0x11 # (DW_AT_low_pc) ++ .uleb128 0x1 # (DW_FORM_addr) ++ .uleb128 0x12 # (DW_AT_high_pc) ++ .uleb128 0x7 # (DW_FORM_data8) ++ .uleb128 0x10 # (DW_AT_stmt_list) ++ .uleb128 0x17 # (DW_FORM_sec_offset) ++ .byte 0 ++ .byte 0 ++ .uleb128 0x2 # (abbrev code) ++ .uleb128 0x2e # (TAG: DW_TAG_subprogram) ++ .byte 0 # DW_children_no ++ .uleb128 0x3f # (DW_AT_external) ++ .uleb128 0x19 # (DW_FORM_flag_present) ++ .uleb128 0x3 # (DW_AT_name) ++ .uleb128 0xe # (DW_FORM_strp) ++ .uleb128 0x3a # (DW_AT_decl_file) ++ .uleb128 0xb # (DW_FORM_data1) ++ .uleb128 0x3b # (DW_AT_decl_line) ++ .uleb128 0xb # (DW_FORM_data1) ++ .uleb128 0x11 # (DW_AT_low_pc) ++ .uleb128 0x1 # (DW_FORM_addr) ++ .uleb128 0x12 # (DW_AT_high_pc) ++ .uleb128 0x7 # (DW_FORM_data8) ++ .byte 0 ++ .byte 0 ++ .uleb128 0x3 # (abbrev code) ++ .uleb128 0x24 # (TAG: DW_TAG_base_type) ++ .byte 0 # DW_children_no ++ .uleb128 0xb # (DW_AT_byte_size) ++ .uleb128 0xb # (DW_FORM_data1) ++ .uleb128 0x3e # (DW_AT_encoding) ++ .uleb128 0xb # (DW_FORM_data1) ++ .uleb128 0x3 # (DW_AT_name) ++ .uleb128 0x8 # (DW_FORM_string) ++ .byte 0 ++ .byte 0 ++ .byte 0 ++ .section .debug_line,"",@progbits ++.Ldebug_line0: ++ .long .LELT0-.LSLT0 # Length of Source Line Info ++.LSLT0: ++ .value 0x5 # DWARF version number ++ .byte 0x8 # Address Size ++ .byte 0 # Segment Size ++ .long .LELTP0-.LASLTP0 # Prolog Length ++.LASLTP0: ++ .byte 0x1 # Minimum Instruction Length ++ .byte 0x1 # Maximum Operations Per Instruction ++ .byte 0x1 # Default is_stmt_start flag ++ .byte 0xf6 # Line Base Value (Special Opcodes) ++ .byte 0xf2 # Line Range Value (Special Opcodes) ++ .byte 0xd # Special Opcode Base ++ .byte 0 # opcode: 0x1 has 0 args ++ .byte 0x1 # opcode: 0x2 has 1 args ++ .byte 0x1 # opcode: 0x3 has 1 args ++ .byte 0x1 # opcode: 0x4 has 1 args ++ .byte 0x1 # opcode: 0x5 has 1 args ++ .byte 0 # opcode: 0x6 has 0 args ++ .byte 0 # opcode: 0x7 has 0 args ++ .byte 0 # opcode: 0x8 has 0 args ++ .byte 0x1 # opcode: 0x9 has 1 args ++ .byte 0 # opcode: 0xa has 0 args ++ .byte 0 # opcode: 0xb has 0 args ++ .byte 0x1 # opcode: 0xc has 1 args ++ .byte 0x1 # Directory entry format count ++ .uleb128 0x1 # DW_LNCT_path ++ .uleb128 0x1f # DW_FORM_line_strp ++ .uleb128 0x2 # Directories count ++ .long .LASF1 # Directory Entry: 0: "" ++ .long .LASF4 # Directory Entry: 0: "" ++ .byte 0x2 # File name entry format count ++ .uleb128 0x1 # DW_LNCT_path ++ .uleb128 0x1f # DW_FORM_line_strp ++ .uleb128 0x2 # DW_LNCT_directory_index ++ .uleb128 0xb # DW_FORM_data1 ++ .uleb128 0x2 # File names count ++ .long .LASF0 # File Entry: 0: "main.c" ++ .byte 0 ++ .long .LASF5 # File Entry: 0: "main.c" ++ .byte 0x1 ++.LELTP0: ++ .byte 0 # set address *.LM1 ++ .uleb128 0x9 ++ .byte 0x2 ++ .quad .LM1 ++ .byte 0x1 # copy line 1 ++ .byte 0x5 # column 12 ++ .uleb128 0xc # 12 ++ .byte 0 # set address *.LM2 ++ .uleb128 0x9 ++ .byte 0x2 ++ .quad .LM2 ++ .byte 0x1 # copy line 1 ++ .byte 0x5 # column 13 ++ .uleb128 0xd # 13 ++ .byte 0 # set address *.Letext0 ++ .uleb128 0x9 ++ .byte 0x2 ++ .quad .Letext0 ++ .byte 0 # end sequence ++ .uleb128 0x1 ++ .byte 0x1 ++.LELT0: ++ .section .debug_str,"MS",@progbits,1 ++.LASF2: ++ .string "GNU C17 11.0.0 20210210 (Red Hat 11.0.0-0) -mtune=generic -march=x86-64 -gdwarf-5 -gno-as-loc-support" ++.LASF3: ++ .string "main" ++ .section .debug_line_str,"MS",@progbits,1 ++.LASF1: ++ .string "" ++.LASF4: ++ .string "" ++.LASF0: ++ .string "main.c" ++.LASF5: ++ .string "main.c" ++ .ident "GCC: (GNU) 11.0.0 20210210 (Red Hat 11.0.0-0)" ++ .section .note.GNU-stack,"",@progbits