[llvm-branch-commits] [llvm] a630217 - [WebAssembly] fix __stack_pointer being added to .debug_aranges

2021-11-08 Thread Wouter van Oortmerssen via llvm-branch-commits

Author: Wouter van Oortmerssen
Date: 2021-11-08T15:55:17-08:00
New Revision: a630217313fcd38fa0071206ab832c081d0eac37

URL: 
https://github.com/llvm/llvm-project/commit/a630217313fcd38fa0071206ab832c081d0eac37
DIFF: 
https://github.com/llvm/llvm-project/commit/a630217313fcd38fa0071206ab832c081d0eac37.diff

LOG: [WebAssembly] fix __stack_pointer being added to .debug_aranges

When emitting a reloc for the Wasm global __stack_pointer, it was inadvertedly 
added to the symbols used for generating aranges, which caused some aranges to 
use it as the end symbol in a symbol diff, which caused a reloc for it to be 
emitted, which then caused an assert in `wasm64` since we have no 64-bit relocs 
for Wasm globals.
Fixes: https://bugs.llvm.org/show_bug.cgi?id=52376
Differential Revision: https://reviews.llvm.org/D113438

Added: 


Modified: 
llvm/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp
llvm/test/MC/WebAssembly/debug-info.ll
llvm/test/MC/WebAssembly/debug-info64.ll

Removed: 




diff  --git a/llvm/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp 
b/llvm/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp
index b4c27dc86d8d8..f51fb041f5599 100644
--- a/llvm/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp
+++ b/llvm/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp
@@ -490,7 +490,6 @@ DIE &DwarfCompileUnit::updateSubprogramScopeDIE(const 
DISubprogram *SP) {
 addSInt(*Loc, dwarf::DW_FORM_sdata, TI_GLOBAL_RELOC);
 if (!isDwoUnit()) {
   addLabel(*Loc, dwarf::DW_FORM_data4, SPSym);
-  DD->addArangeLabel(SymbolCU(this, SPSym));
 } else {
   // FIXME: when writing dwo, we need to avoid relocations. Probably
   // the "right" solution is to treat globals the way func and data

diff  --git a/llvm/test/MC/WebAssembly/debug-info.ll 
b/llvm/test/MC/WebAssembly/debug-info.ll
index a4a9ed9ed1936..d2a815f097164 100644
--- a/llvm/test/MC/WebAssembly/debug-info.ll
+++ b/llvm/test/MC/WebAssembly/debug-info.ll
@@ -1,4 +1,4 @@
-; RUN: llc -filetype=obj %s -o - | llvm-readobj -S -r --symbols - | FileCheck 
%s
+; RUN: llc -generate-arange-section -filetype=obj %s -o - | llvm-readobj -S -r 
--symbols - | FileCheck %s
 
 ; CHECK: Format: WASM
 ; CHECK-NEXT:Arch: wasm32
@@ -65,68 +65,80 @@
 ; CHECK-NEXT:  }
 ; CHECK-NEXT:  Section {
 ; CHECK-NEXT:Type: CUSTOM (0x0)
-; CHECK-NEXT:Size: 121
+; CHECK-NEXT:Size: 48
 ; CHECK-NEXT:Offset: 406
+; CHECK-NEXT:Name: .debug_aranges
+; CHECK-NEXT:  }
+; CHECK-NEXT:  Section {
+; CHECK-NEXT:Type: CUSTOM (0x0)
+; CHECK-NEXT:Size: 121
+; CHECK-NEXT:Offset: 475
 ; CHECK-NEXT:Name: .debug_str
 ; CHECK-NEXT:  }
 ; CHECK-NEXT:  Section {
 ; CHECK-NEXT:Type: CUSTOM (0x0)
 ; CHECK-NEXT:Size: 42
-; CHECK-NEXT:Offset: 544
+; CHECK-NEXT:Offset: 613
 ; CHECK-NEXT:Name: .debug_pubnames
 ; CHECK-NEXT:  }
 ; CHECK-NEXT:  Section {
 ; CHECK-NEXT:Type: CUSTOM (0x0)
 ; CHECK-NEXT:Size: 26
-; CHECK-NEXT:Offset: 608
+; CHECK-NEXT:Offset: 677
 ; CHECK-NEXT:Name: .debug_pubtypes
 ; CHECK-NEXT:  }
 ; CHECK-NEXT:  Section {
 ; CHECK-NEXT:Type: CUSTOM (0x0)
 ; CHECK-NEXT:Size: 57
-; CHECK-NEXT:Offset: 656
+; CHECK-NEXT:Offset: 725
 ; CHECK-NEXT:Name: .debug_line
 ; CHECK-NEXT:  }
 ; CHECK-NEXT:  Section {
 ; CHECK-NEXT:Type: CUSTOM (0x0)
 ; CHECK-NEXT:Size: 91
-; CHECK-NEXT:Offset: 731
+; CHECK-NEXT:Offset: 800
 ; CHECK-NEXT:Name: linking
 ; CHECK-NEXT:  }
 ; CHECK-NEXT:  Section {
 ; CHECK-NEXT:Type: CUSTOM (0x0)
 ; CHECK-NEXT:Size: 9
-; CHECK-NEXT:Offset: 836
+; CHECK-NEXT:Offset: 905
 ; CHECK-NEXT:Name: reloc.DATA
 ; CHECK-NEXT:  }
 ; CHECK-NEXT:  Section {
 ; CHECK-NEXT:Type: CUSTOM (0x0)
 ; CHECK-NEXT:Size: 61
-; CHECK-NEXT:Offset: 862
+; CHECK-NEXT:Offset: 931
 ; CHECK-NEXT:Name: reloc..debug_info
 ; CHECK-NEXT:  }
 ; CHECK-NEXT:  Section {
 ; CHECK-NEXT:Type: CUSTOM (0x0)
+; CHECK-NEXT:Size: 18
+; CHECK-NEXT:Offset: 1016
+; CHECK-NEXT:Name: reloc..debug_aranges
+; CHECK-NEXT:  }
+; CHECK-NEXT:  Section {
+; CHECK-NEXT:Type: CUSTOM (0x0)
 ; CHECK-NEXT:Size: 6
-; CHECK-NEXT:Offset: 947
+; CHECK-NEXT:Offset: 1061
 ; CHECK-NEXT:Name: reloc..debug_pubnames
 ; CHECK-NEXT:  }
 ; CHECK-NEXT:  Section {
 ; CHECK-NEXT:Type: CUSTOM (0x0)
 ; CHECK-NEXT:Size: 6
-; CHECK-NEXT:Offset: 981
+; CHECK-NEXT:Offset: 1095
 ; CHECK-NEXT:Name: reloc..debug_pubtypes
 ; CHECK-NEXT:  }
 ; CHECK-NEXT:  Section {
 ; CHECK-NEXT:Type: CUSTOM (0x0)
 ; CHECK-NEXT:Size: 6
-; CHECK-NEXT:Offset: 1015
+; CHECK-NEXT:Offset: 1129
 ; CHECK-NEXT:Name: reloc..debug_line
 ; CHECK-NEXT:  }
 ; CHECK-NEXT:  Section {
 ; CHECK-NEXT:Type: CUSTOM (0x0)
 ; CHECK-NEXT:Size: 77
-; CHECK-NEXT:Offset: 1045
+; CHECK-NEXT:Offset: 1159
 ; CHECK-NEXT:Name: producers
 ; CHECK-NEXT:  }
 ; CHECK-N

[llvm-branch-commits] [lld] 5c38ae3 - [WebAssembly] Fixed byval args missing DWARF DW_AT_LOCATION

2021-01-07 Thread Wouter van Oortmerssen via llvm-branch-commits

Author: Wouter van Oortmerssen
Date: 2021-01-07T10:31:38-08:00
New Revision: 5c38ae36c58f5b6bb4a32e9ec2187fde86cf94b8

URL: 
https://github.com/llvm/llvm-project/commit/5c38ae36c58f5b6bb4a32e9ec2187fde86cf94b8
DIFF: 
https://github.com/llvm/llvm-project/commit/5c38ae36c58f5b6bb4a32e9ec2187fde86cf94b8.diff

LOG: [WebAssembly] Fixed byval args missing DWARF DW_AT_LOCATION

A struct in C passed by value did not get debug information. Such values are 
currently
lowered to a Wasm local even in -O0 (not to an alloca like on other archs), 
which becomes
a Target Index operand (TI_LOCAL). The DWARF writing code was not emitting 
locations
in for TI's specifically if the location is a single range (not a list).

In addition, the ExplicitLocals pass which removes the ARGUMENT pseudo 
instructions did
not update the associated DBG_VALUEs, and couldn't even find these values since 
the code
assumed such instructions are adjacent, which is not the case here.

Also fixed asm printing of TIs needed by a test.

Differential Revision: https://reviews.llvm.org/D94140

Added: 
llvm/test/MC/WebAssembly/debug-byval-struct.ll

Modified: 
lld/test/wasm/debuginfo.test
llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
llvm/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp
llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
llvm/lib/Target/WebAssembly/WebAssemblyDebugValueManager.cpp
llvm/lib/Target/WebAssembly/WebAssemblyExplicitLocals.cpp
llvm/test/CodeGen/WebAssembly/dbgvalue.ll

Removed: 




diff  --git a/lld/test/wasm/debuginfo.test b/lld/test/wasm/debuginfo.test
index 94d183a3c1d4..9cb1cc31e515 100644
--- a/lld/test/wasm/debuginfo.test
+++ b/lld/test/wasm/debuginfo.test
@@ -21,6 +21,7 @@ CHECK-NEXT:DW_AT_decl_line(3)
 CHECK-NEXT:DW_AT_prototyped(true)
 
 CHECK: DW_TAG_formal_parameter
+CHECK-NEXT:  DW_AT_location (DW_OP_WASM_location 0x0 0x0, 
DW_OP_stack_value)
 CHECK-NEXT:  DW_AT_name("t")
 CHECK-NEXT:  DW_AT_decl_file   
("/Users/yury/llvmwasm{{(/|\\)}}hi.c")
 CHECK-NEXT:  DW_AT_decl_line   (3)
@@ -45,7 +46,7 @@ CHECK-NEXT:  DW_AT_name   ("hi_foo.c")
 
 CHECK:   DW_TAG_variable
 CHECK-NEXT:DW_AT_name  ("y")
-CHECK-NEXT:DW_AT_type  (0x00a7 "int[2]")
+CHECK-NEXT:DW_AT_type  (0x00ac "int[2]")
 CHECK-NEXT:DW_AT_external  (true)
 CHECK-NEXT:DW_AT_decl_file ("{{.*}}hi_foo.c")
 CHECK-NEXT:DW_AT_decl_line (1)
@@ -67,7 +68,7 @@ CHECK-NEXT:DW_AT_encoding 
(DW_ATE_unsigned)
 
 CHECK:   DW_TAG_variable
 CHECK-NEXT:DW_AT_name  ("z")
-CHECK-NEXT:DW_AT_type  (0x00a7 "int[2]")
+CHECK-NEXT:DW_AT_type  (0x00ac "int[2]")
 CHECK-NEXT:DW_AT_external  (true)
 CHECK-NEXT:DW_AT_decl_file ("{{.*}}hi_foo.c")
 CHECK-NEXT:DW_AT_decl_line (8)
@@ -82,6 +83,7 @@ CHECK-NEXT:DW_AT_decl_file
("{{.*}}hi_foo.c")
 CHECK-NEXT:DW_AT_decl_line (3)
 
 CHECK: DW_TAG_formal_parameter
+CHECK-NEXT:  DW_AT_location (DW_OP_WASM_location 0x0 0x0, 
DW_OP_stack_value)
 CHECK-NEXT:  DW_AT_name("p")
 CHECK-NEXT:  DW_AT_decl_file   ("{{.*}}hi_foo.c")
 CHECK-NEXT:  DW_AT_decl_line   (3)

diff  --git a/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp 
b/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
index 85a5d0c59b83..d72a91825061 100644
--- a/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
+++ b/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
@@ -948,6 +948,8 @@ static bool emitDebugValueComment(const MachineInstr *MI, 
AsmPrinter &AP) {
   } else if (MI->getDebugOperand(0).isTargetIndex()) {
 auto Op = MI->getDebugOperand(0);
 OS << "!target-index(" << Op.getIndex() << "," << Op.getOffset() << ")";
+// NOTE: Want this comment at start of line, don't emit with AddComment.
+AP.OutStreamer->emitRawComment(OS.str());
 return true;
   } else {
 Register Reg;

diff  --git a/llvm/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp 
b/llvm/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp
index ea279e4914b0..befc4bba19a2 100644
--- a/llvm/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp
+++ b/llvm/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp
@@ -720,6 +720,13 @@ DIE *DwarfCompileUnit::constructVariableDIEImpl(const 
DbgVariable &DV,
   addConstantFPValue(*VariableDie, DVal->getConstantFP());
 } else if (DVal->isConstantInt()) {
   addConstantValue(*VariableDie, DVal->getConstantInt(), DV.getType());
+} else if (DVal->isTargetIndexLocation()) {
+  DIELoc *Loc = new (DIEValueAllocator) DIELoc;
+  DIEDwarfExpression DwarfExpr(*Asm, *this, *Loc);
+  const DIBasicType *BT = dyn_cast(
+ 

[llvm-branch-commits] [lld] fd65e48 - [WebAssembly] Fixed Writer::createInitMemoryFunction to work for wasm64

2020-12-03 Thread Wouter van Oortmerssen via llvm-branch-commits

Author: Wouter van Oortmerssen
Date: 2020-12-03T16:20:55-08:00
New Revision: fd65e4815cb2019c5e02679ede0c5f6fbd7e19ad

URL: 
https://github.com/llvm/llvm-project/commit/fd65e4815cb2019c5e02679ede0c5f6fbd7e19ad
DIFF: 
https://github.com/llvm/llvm-project/commit/fd65e4815cb2019c5e02679ede0c5f6fbd7e19ad.diff

LOG: [WebAssembly] Fixed Writer::createInitMemoryFunction to work for wasm64

Differential Revision: https://reviews.llvm.org/D92348

Added: 


Modified: 
lld/test/wasm/data-segment-merging.ll
lld/test/wasm/data-segments.ll
lld/wasm/Writer.cpp
lld/wasm/WriterUtils.cpp
lld/wasm/WriterUtils.h

Removed: 




diff  --git a/lld/test/wasm/data-segment-merging.ll 
b/lld/test/wasm/data-segment-merging.ll
index a7d2e5552483..bc347d193574 100644
--- a/lld/test/wasm/data-segment-merging.ll
+++ b/lld/test/wasm/data-segment-merging.ll
@@ -1,5 +1,3 @@
-target triple = "wasm32-unknown-unknown"
-
 @a = hidden global [6 x i8] c"hello\00", align 1
 @b = hidden global [8 x i8] c"goodbye\00", align 1
 @c = hidden global [9 x i8] c"whatever\00", align 1
@@ -8,8 +6,9 @@ target triple = "wasm32-unknown-unknown"
 @e = private constant [9 x i8] c"constant\00", align 1
 @f = private constant i8 43, align 4
 
-; RUN: llc -mattr=+bulk-memory,+atomics -filetype=obj %s -o %t.passive.o
-; RUN: llc -filetype=obj %s -o %t.o
+; RUN: llc --mtriple=wasm32-unknown-unknown -mattr=+bulk-memory,+atomics 
-filetype=obj %s -o %t.passive.o
+; RUN: llc --mtriple=wasm64-unknown-unknown -mattr=+bulk-memory,+atomics 
-filetype=obj %s -o %t.passive64.o
+; RUN: llc --mtriple=wasm32-unknown-unknown -filetype=obj %s -o %t.o
 
 ; RUN: wasm-ld -no-gc-sections --no-entry -o %t.merged.wasm %t.o
 ; RUN: obj2yaml %t.merged.wasm | FileCheck %s --check-prefix=MERGE
@@ -76,6 +75,8 @@ target triple = "wasm32-unknown-unknown"
 
 ; RUN: wasm-ld -no-gc-sections --no-entry --shared-memory --max-memory=131072 
-o %t.merged.passive.wasm %t.passive.o
 ; RUN: obj2yaml %t.merged.passive.wasm | FileCheck %s 
--check-prefix=PASSIVE-MERGE
+; RUN: wasm-ld -mwasm64 -no-gc-sections --no-entry --shared-memory 
--max-memory=131072 -o %t.merged.passive64.wasm %t.passive64.o
+; RUN: obj2yaml %t.merged.passive64.wasm | FileCheck %s 
--check-prefix=PASSIVE-MERGE
 
 ; PASSIVE-MERGE-LABEL: - Type:DATACOUNT
 ; PASSIVE-MERGE-NEXT:Count:   2
@@ -99,6 +100,8 @@ target triple = "wasm32-unknown-unknown"
 
 ; RUN: wasm-ld -no-gc-sections --no-entry --shared-memory --max-memory=131072 
-no-merge-data-segments -o %t.separate.passive.wasm %t.passive.o
 ; RUN: obj2yaml %t.separate.passive.wasm | FileCheck %s 
--check-prefix=PASSIVE-SEPARATE
+; RUN: wasm-ld -mwasm64 -no-gc-sections --no-entry --shared-memory 
--max-memory=131072 -no-merge-data-segments -o %t.separate.passive64.wasm 
%t.passive64.o
+; RUN: obj2yaml %t.separate.passive64.wasm | FileCheck %s 
--check-prefix=PASSIVE-SEPARATE
 
 ; PASSIVE-SEPARATE-LABEL: - Type:DATACOUNT
 ; PASSIVE-SEPARATE-NEXT:Count:   6

diff  --git a/lld/test/wasm/data-segments.ll b/lld/test/wasm/data-segments.ll
index 835aa31b7ab1..a31fe467e942 100644
--- a/lld/test/wasm/data-segments.ll
+++ b/lld/test/wasm/data-segments.ll
@@ -1,6 +1,7 @@
-; RUN: llc -filetype=obj %s -o %t.atomics.o -mattr=+atomics
-; RUN: llc -filetype=obj %s -o %t.bulk-mem.o -mattr=+bulk-memory
-; RUN: llc -filetype=obj %s -o %t.atomics.bulk-mem.o 
-mattr=+atomics,+bulk-memory
+; RUN: llc --mtriple=wasm32-unknown-unknown -filetype=obj %s -o %t.atomics.o 
-mattr=+atomics
+; RUN: llc --mtriple=wasm32-unknown-unknown -filetype=obj %s -o %t.bulk-mem.o 
-mattr=+bulk-memory
+; RUN: llc --mtriple=wasm32-unknown-unknown -filetype=obj %s -o 
%t.atomics.bulk-mem.o -mattr=+atomics,+bulk-memory
+; RUN: llc --mtriple=wasm64-unknown-unknown -filetype=obj %s -o 
%t.atomics.bulk-mem64.o -mattr=+atomics,+bulk-memory
 
 ; atomics, shared memory => error
 ; RUN: not wasm-ld -no-gc-sections --no-entry --shared-memory 
--max-memory=131072 %t.atomics.o -o %t.atomics.wasm 2>&1 | FileCheck %s 
--check-prefix ERROR
@@ -11,14 +12,16 @@
 
 ; atomics, bulk memory, shared memory => passive segments
 ; RUN: wasm-ld -no-gc-sections --no-entry --shared-memory --max-memory=131072 
%t.atomics.bulk-mem.o -o %t.atomics.bulk-mem.wasm
-; RUN: obj2yaml %t.atomics.bulk-mem.wasm | FileCheck %s --check-prefixes 
PASSIVE
+; RUN: obj2yaml %t.atomics.bulk-mem.wasm | FileCheck %s --check-prefixes 
PASSIVE,PASSIVE32
+
+; Also test with wasm64
+; RUN: wasm-ld -mwasm64 -no-gc-sections --no-entry --shared-memory 
--max-memory=131072 %t.atomics.bulk-mem64.o -o %t.atomics.bulk-mem64.wasm
+; RUN: obj2yaml %t.atomics.bulk-mem64.wasm | FileCheck %s --check-prefixes 
PASSIVE,PASSIVE64
 
 ; Also test in combination with PIC/pie
-; RUN: llc -filetype=obj -relocation-model=pic %s -o %t.atomics.bulk-mem.pic.o 
-mattr=+atomics,+bulk-memory,+mutable-globals
+; RUN: llc --mtriple=wasm32-unknown-unknown