[llvm] Support big endian in llvm-symbolizer's data location dwarf info parser (PR #67284)

Chen Zheng via llvm-commits llvm-commits at lists.llvm.org
Sun Sep 24 22:25:53 PDT 2023


https://github.com/chenzheng1030 created https://github.com/llvm/llvm-project/pull/67284

For now, data location expression is hard coded to little endian. We are going to support sanitizers on AIX which is big endian. Support big endian too in the data location expression parser of llvm-symbolizer.

Currently obj2yaml/yaml2obj can not support debug info for xcoff, so I used an object. Will update this once obj2yaml/yaml2obj are ready for XCOFF objects with DWARF info

>From e2659ff614b83a99be941c35a6a479d6d476597a Mon Sep 17 00:00:00 2001
From: Chen Zheng <czhengsz at cn.ibm.com>
Date: Mon, 25 Sep 2023 01:06:28 -0400
Subject: [PATCH 1/2] base case, nfc

---
 .../llvm-symbolizer/Inputs/xcoff-dwarf.o      | Bin 0 -> 2256 bytes
 llvm/test/tools/llvm-symbolizer/xcoff.test    |  42 ++++++++++++++++++
 2 files changed, 42 insertions(+)
 create mode 100644 llvm/test/tools/llvm-symbolizer/Inputs/xcoff-dwarf.o
 create mode 100644 llvm/test/tools/llvm-symbolizer/xcoff.test

diff --git a/llvm/test/tools/llvm-symbolizer/Inputs/xcoff-dwarf.o b/llvm/test/tools/llvm-symbolizer/Inputs/xcoff-dwarf.o
new file mode 100644
index 0000000000000000000000000000000000000000..04326b6ccedd0462394ebaafb3fe4d6eda50e0c1
GIT binary patch
literal 2256
zcmah~&u<$=6n?YzChK2KTnj;4AX`LAXp at cCWbLGtLQ0fFsz6JVLz|1UYp-L2V_S}s
z=FmeVklI5JIpmNN2gI=l4oKYi6SyEw94c|>-+)8}eDCer-b9Uf(#(AG%{TAO?@_O4
zgv9h;P<+JD>iGvf;Re|jk%|+=e-tJrxoK71o*PKePMq at 4RiXP8n8=WP$?|r01rZ&g
z<dhEU(c;jmK5 at OSzaJrA!rw`xP8jVtbd6T69ig=xk at kp4e_zNk<VtkSM$3=rsEDy0
zK=+f73b{t(haS-vhhz$uFqcqri$QvM)2{6k+T(}clX3VB(G*tUX=UoWvwFpPws(R)
z9@&LY=A2?_KA<JnkZ*+bZ^P0=*~h#t$4D|?l~t2QPLCPmBiD?qx{LtY9L0>)+^6Z=
zsXHkxNfi4K#9}Iy!ldSCHP`2LrB<;ZBiF%|&^USn0P|saDzykEF(ypXLYT{HDfw*4
zh#B0S-4msPNPU0lXcbbTj1E_U9s_=}X=5bkB(7FJ``o<W at muDjHFJ4(`PMD7*6x~X
zjn>|Q*>0H++E4thX_qY9DwtDFso=~kmkQISQz|+$_X_!sr_Fu8yW4;?5Lx+Yv(j{1
z+fhDm<;|(>MsEqJzUNsDZ^x>%cWxtf8cn}D+idRd%yhc#ul!2Sg2-I39ebhZS4(zf
z&iCB;nqP8C^TmR<;1)`bQ}q43U2_p1%iFUmosP_Nwm;i-4ad5?-E4bqletr+l+H8W
ziZxn2(&HLmkFx?z1XY|NbyMk5+0aob;ts0i1dXD&6RXtSE*Z)wm+wA&c=vI6eRXrC
zyz%(KO1VtNsJ7edB8qA%6&DZn1be`F5Svh62B)@03hp#rrD}VvN)O9-W-NyEJ)*Sd
z2bcI%WrR8|Z?4S=nRc6<y31ZqRa)9k(B=dz$1{=EgLobx-X)2b at dA`242(`=Uc22S
zt$#y6g;tRB at orrGeJMj&JXRnn8ZLH{biOroHTg_SLnA$zd25VU`U9l51>FF;BB%~D
zI)RLMS7L&A=W>E at _emG@bincbyC&Rop!Wp50GbfQuj6$=zXMGQ`U6M_dNn|Q0VSAI
zSCFLy at u*}hibs_ZPWDa^zjNY6{Qx8*P(K672-I&tG6MDIK=-<j=w^V1D at FA0KZ)2j
z=!jvxzUDPs4>%lTF)KJAK?UuyH^JKCIgDsL!6xs at n>3*mry1`WG!l#V9F`6J1vR>g
za*LgdAMOFm;^;?g5x9DhCOGt>u3w~yObZ7tjD_cnEgRks)&$d{gNrm9_m_iC{5Hdn
z%qwKF{I?8k5^$*L&x_9{Y;ci?o)7$-(*#Pohw{b$XgJmp-x(QC=qDGhcO=&FMVd&g
zlZ!NG{$RxD at IJl_dxpiC{}+468vcQ!2F>vA#T^nq_<hgWhShEJGihOeZOdM>EJhT0
VS<9RJ2d~)9`ByCZx(=VE{{R!!2KN8}

literal 0
HcmV?d00001

diff --git a/llvm/test/tools/llvm-symbolizer/xcoff.test b/llvm/test/tools/llvm-symbolizer/xcoff.test
new file mode 100644
index 000000000000000..b42001ef3b1488c
--- /dev/null
+++ b/llvm/test/tools/llvm-symbolizer/xcoff.test
@@ -0,0 +1,42 @@
+
+RUN: llvm-symbolizer --obj=%p/Inputs/xcoff-dwarf.o 'DATA 0x60' \
+RUN:    'DATA 0x61' 'DATA 0x64' 'DATA 0X68' 'DATA 0x90' 'DATA 0x94' \
+RUN:    'DATA 0X98' | FileCheck %s
+
+CHECK: bss_global
+CHECK-NEXT: 96 4
+CHECK-NEXT: ??:?
+CHECK-EMPTY:
+
+CHECK: bss_global
+CHECK-NEXT: 96 4
+CHECK-NEXT: ??:?
+CHECK-EMPTY:
+
+CHECK: data_global
+CHECK-NEXT: 100 4
+CHECK-NEXT: ??:?
+CHECK-EMPTY:
+
+CHECK: str
+CHECK-NEXT: 104 4
+CHECK-NEXT: ??:?
+CHECK-EMPTY:
+
+FIXME: fix the wrong size 152
+CHECK: f()::function_global
+CHECK-NEXT: 144 152
+CHECK-NEXT: ??:?
+CHECK-EMPTY:
+
+FIXME: fix the wrong size 152
+CHECK: beta
+CHECK-NEXT: 148 152
+CHECK-NEXT: ??:?
+CHECK-EMPTY:
+
+FIXME: fix the wrong size 152
+CHECK: alpha
+CHECK-NEXT: 152 152
+CHECK-NEXT: ??:?
+CHECK-EMPTY:

>From 93e3ef18ed386d47cc17fac189a626085a77c0ce Mon Sep 17 00:00:00 2001
From: Chen Zheng <czhengsz at cn.ibm.com>
Date: Mon, 25 Sep 2023 01:21:28 -0400
Subject: [PATCH 2/2] support big endian while processing data location

---
 llvm/lib/DebugInfo/DWARF/DWARFUnit.cpp     |  2 +-
 llvm/test/tools/llvm-symbolizer/xcoff.test | 14 +++++++-------
 2 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/llvm/lib/DebugInfo/DWARF/DWARFUnit.cpp b/llvm/lib/DebugInfo/DWARF/DWARFUnit.cpp
index 387345a4ac2d601..0cd45bde3e25349 100644
--- a/llvm/lib/DebugInfo/DWARF/DWARFUnit.cpp
+++ b/llvm/lib/DebugInfo/DWARF/DWARFUnit.cpp
@@ -784,7 +784,7 @@ void DWARFUnit::updateVariableDieMap(DWARFDie Die) {
 
   for (const DWARFLocationExpression &Location : *Locations) {
     uint8_t AddressSize = getAddressByteSize();
-    DataExtractor Data(Location.Expr, /*IsLittleEndian=*/true, AddressSize);
+    DataExtractor Data(Location.Expr, isLittleEndian(), AddressSize);
     DWARFExpression Expr(Data, AddressSize);
     auto It = Expr.begin();
     if (It == Expr.end())
diff --git a/llvm/test/tools/llvm-symbolizer/xcoff.test b/llvm/test/tools/llvm-symbolizer/xcoff.test
index b42001ef3b1488c..26a57f1f87b16bd 100644
--- a/llvm/test/tools/llvm-symbolizer/xcoff.test
+++ b/llvm/test/tools/llvm-symbolizer/xcoff.test
@@ -5,38 +5,38 @@ RUN:    'DATA 0X98' | FileCheck %s
 
 CHECK: bss_global
 CHECK-NEXT: 96 4
-CHECK-NEXT: ??:?
+CHECK-NEXT: /t.cpp:1
 CHECK-EMPTY:
 
 CHECK: bss_global
 CHECK-NEXT: 96 4
-CHECK-NEXT: ??:?
+CHECK-NEXT: /t.cpp:1
 CHECK-EMPTY:
 
 CHECK: data_global
 CHECK-NEXT: 100 4
-CHECK-NEXT: ??:?
+CHECK-NEXT: /t.cpp:2
 CHECK-EMPTY:
 
 CHECK: str
 CHECK-NEXT: 104 4
-CHECK-NEXT: ??:?
+CHECK-NEXT: /t.cpp:4
 CHECK-EMPTY:
 
 FIXME: fix the wrong size 152
 CHECK: f()::function_global
 CHECK-NEXT: 144 152
-CHECK-NEXT: ??:?
+CHECK-NEXT: /t.cpp:8
 CHECK-EMPTY:
 
 FIXME: fix the wrong size 152
 CHECK: beta
 CHECK-NEXT: 148 152
-CHECK-NEXT: ??:?
+CHECK-NEXT: /t.cpp:13
 CHECK-EMPTY:
 
 FIXME: fix the wrong size 152
 CHECK: alpha
 CHECK-NEXT: 152 152
-CHECK-NEXT: ??:?
+CHECK-NEXT: /t.cpp:12
 CHECK-EMPTY:



More information about the llvm-commits mailing list