
बहु-आर्किटेक्चर C लाइब्रेरी stack unwinding, backtrace generation और exception handling के लिए, जिसका उपयोग Linux, FreeBSD और HP-UX पर डीबगिंग, प्रोफाइलिंग और बाइनरी विश्लेषण के लिए किया जाता है।
-- mode: Outline --
यह unwind लाइब्रेरी का संस्करण 1.0 है। यह लाइब्रेरी कई आर्किटेक्चर/ऑपरेटिंग-सिस्टम संयोजनों का समर्थन करती है:
Linux/x86-64: अच्छी तरह काम करता है। Linux/x86: अच्छी तरह काम करता है। Linux/ARM: अच्छी तरह काम करता है। Linux/IA-64: पूरी तरह से परीक्षण और समर्थित। Linux/PARISC: अच्छी तरह काम करता है, लेकिन C लाइब्रेरी में unwind-info गायब है। HP-UX/IA-64: ज्यादातर काम करता है लेकिन इसमें कुछ गंभीर सीमाएं हैं। Linux/AArch64: नवीनतम जोड़ा गया। Linux/PPC64: नवीनतम जोड़ा गया। Linux/SuperH: नवीनतम जोड़ा गया। FreeBSD/i386: नवीनतम जोड़ा गया। FreeBSD/x86-64: नवीनतम जोड़ा गया (FreeBSD आर्किटेक्चर को amd64 के रूप में जाना जाता है)।
सामान्यतः, इस लाइब्रेरी को निम्नलिखित कमांड के साथ बनाया और स्थापित किया जा सकता है:
$ autoreconf -i # केवल git से बनाने के लिए आवश्यक है। libtool पर निर्भर करता है।
$ ./configure
$ make
$ make install prefix=PREFIX
जहाँ PREFIX स्थापना उपसर्ग है। डिफ़ॉल्ट रूप से, /usr/local का उपसर्ग उपयोग किया जाता है, जैसे कि libunwind.a /usr/local/lib में और unwind.h /usr/local/include में स्थापित होता है। परीक्षण के लिए, आप /usr/local के बजाय कोई अन्य उपसर्ग उपयोग करना चाह सकते हैं।
** Version 8 और बाद के
संस्करण 8 से शुरू करते हुए, IA-64 Intel कंपाइलर के लिए पसंदीदा नाम "icc" है (x86 पर भी यही नाम)। इस प्रकार, configure-लाइन इस प्रकार दिखनी चाहिए:
$ ./configure CC=icc CFLAGS="-g -O3 -ip" CXX=icc CCAS=gcc CCASFLAGS=-g \
LDFLAGS="-L$PWD/src/.libs"
फिलहाल, HP-UX पर libunwind को GCC के साथ बनाया जाना चाहिए।
libunwind को HP-UX पर इस प्रकार कॉन्फ़िगर और स्थापित किया जाना चाहिए:
$ ./configure CFLAGS="-g -O2 -mlp64" CXXFLAGS="-g -O2 -mlp64"
चेतावनी: 32-बिट (ILP32) बाइनरी का अनविंडिंग वर्तमान में समर्थित नहीं है।
** GCC के पुराने संस्करणों के लिए वर्कअराउंड
GCC v3.0 और GCC v3.2 sys/types.h के खराब संस्करण के साथ आते हैं। वर्कअराउंड "configure" चलाने से पहले निम्नलिखित कमांड जारी करना है:
$ mkdir $top_dir/include/sys
$ cp /usr/include/sys/types.h $top_dir/include/sys
GCC v3.3.2 या बाद के संस्करण ठीक कर दिए गए हैं और इस वर्कअराउंड की आवश्यकता नहीं है।
power64 के लिए बनाने के लिए आपको उपयोग करना चाहिए:
$ ./configure CFLAGS="-g -O2 -m64" CXXFLAGS="-g -O2 -m64"
यदि आपका पावर altivec रजिस्टरों का समर्थन करता है: $ ./configure CFLAGS="-g -O2 -m64 -maltivec" CXXFLAGS="-g -O2 -m64 -maltivec"
यह जाँचने के लिए कि क्या आपके प्रोसेसर में वेक्टर रजिस्टरों (altivec) के लिए समर्थन है: cat /proc/cpuinfo | grep altivec और कुछ इस प्रकार दिखना चाहिए: cpu : PPC970, altivec supported
यदि libunwind काम नहीं करता प्रतीत होता है (बैकट्रेसिंग विफल), तो इसे -O0 के साथ, अनुकूलन के बिना संकलित करने का प्रयास करें। आपके gcc के संस्करण के आधार पर कुछ कंपाइलर समस्याएं हैं।
सामान्य निर्माण निर्देश लागू होते हैं। कई परीक्षणों को बनाने और निष्पादित करने के लिए, आपको ports में devel/libexecinfo के रूप में उपलब्ध libexecinfo लाइब्रेरी की आवश्यकता है।
पोर्ट का विकास FreeBSD 8.0-STABLE पर किया गया था। लाइब्रेरी को सिस्टम कंपाइलर से बनाया गया था जो gcc 4.2.1 का संशोधित संस्करण है, साथ ही gcc 4.4.3 भी।
लाइब्रेरी बनाने के बाद, आप निम्नलिखित के साथ प्रतिगमन परीक्षणों का एक सेट चला सकते हैं:
$ make check
** IA-64 Linux पर अपेक्षित परिणाम
जब तक आपके पास बहुत हाल की C लाइब्रेरी और कंपाइलर स्थापित नहीं है, तब तक IA-64 Linux पर निम्नलिखित परीक्षणों के विफल होने की उम्मीद है:
Gtest-init (glibc-2.3.x/gcc-3.4 से शुरू होकर पास होना चाहिए)
Ltest-init (glibc-2.3.x/gcc-3.4 से शुरू होकर पास होना चाहिए)
test-ptrace (glibc-2.3.x/gcc-3.4 से शुरू होकर पास होना चाहिए)
run-ia64-test-dyn1 (glibc-2.3.x से शुरू होकर पास होना चाहिए)
इसका मतलब यह नहीं है कि libunwind का उपयोग पुराने कंपाइलरों या C लाइब्रेरियों के साथ नहीं किया जा सकता है, बस इसका मतलब है कि कुछ कोने के मामलों के लिए, अनविंडिंग विफल हो जाएगी। चूंकि वे कोने के मामले हैं, इसलिए एप्लिकेशन में उन्हें ट्रिगर करने की संभावना नहीं है।
नोट: यदि आपको Gia64-test-nat और Lia64-test-nat में बहुत सारी त्रुटियां मिलती हैं, तो यह लगभग निश्चित रूप से पुराने असेंबलर का संकेत है। GNU असेंबलर पिछले-स्टैक-पॉइंटर-सापेक्ष ऑफसेट को गलत तरीके से एन्कोड करता था। यह बग 21-Sep-2004 पर ठीक किया गया था, इसलिए कोई भी बाद का असेंबलर ठीक काम करेगा।
** x86 Linux पर अपेक्षित परिणाम
x86 Linux पर निम्नलिखित परीक्षणों के विफल होने की उम्मीद है:
Gtest-resume-sig (SIGUSR2 प्राप्त करने में विफल)
Ltest-resume-sig (उसी तरह)
Gtest-dyn1 (अभी तक डायनामिक अनवाइंड जानकारी का समर्थन नहीं)
Ltest-dyn1 (उसी तरह)
test-setjmp (longjmp() अभी तक लागू नहीं)
run-check-namespace (अभी तक _Ux86_getcontext नहीं)
test-ptrace
** x86-64 Linux पर अपेक्षित परिणाम
x86-64 Linux पर निम्नलिखित परीक्षणों के विफल होने की उम्मीद है:
Gtest-dyn1 (अभी तक डायनामिक अनवाइंड जानकारी का समर्थन नहीं)
Ltest-dyn1 (उसी तरह)
Gtest-init (http://gcc.gnu.org/bugzilla/show_bug.cgi?id=18743 देखें)
Ltest-init (उसी तरह)
test-async-sig (खराब unwind-info के कारण क्रैश?)
test-setjmp (longjmp() अभी तक लागू नहीं)
run-check-namespace (अभी तक _Ux86_64_getcontext नहीं)
run-ptrace-mapper (??? जांच करें)
run-ptrace-misc (http://gcc.gnu.org/bugzilla/show_bug.cgi?id=18748
और http://gcc.gnu.org/bugzilla/show_bug.cgi?id=18749 देखें)
** PARISC Linux पर अपेक्षित परिणाम
चेतावनी: PA-RISC Linux पर GCC v3.4 या नए की आवश्यकता है। कंपाइलर के पुराने संस्करण अनवाइंडिंग के लिए आवश्यक अपवाद-हैंडलिंग प्रोग्राम हेडर (GNU_EH_FRAME) उत्पन्न करने में विफल रहे।
x86-64 Linux पर निम्नलिखित परीक्षणों के विफल होने की उम्मीद है:
Gtest-bt (बैकट्रेस kill() पर कट जाता है क्योंकि unwind-info की कमी)
Ltest-bt (उसी तरह)
Gtest-resume-sig (Gresume.c:my_rt_sigreturn() किसी तरह गलत है)
Ltest-resume-sig (उसी तरह)
Gtest-init (उसी तरह)
Ltest-init (उसी तरह)
Gtest-dyn1 (अभी तक डायनामिक अनवाइंड जानकारी का समर्थन नहीं)
Ltest-dyn1 (अभी तक डायनामिक अनवाइंड जानकारी का समर्थन नहीं)
test-setjmp (longjmp() अभी तक लागू नहीं)
run-check-namespace (टूलचेन अभी तक HIDDEN का समर्थन नहीं करता)
** HP-UX पर अपेक्षित परिणाम
"make check" वर्तमान में HP-UX के लिए असमर्थित है। आप इसे चलाने का प्रयास कर सकते हैं, लेकिन अधिकांश परीक्षण विफल होंगे (और कुछ समाप्त होने में विफल हो सकते हैं)। वर्तमान में केवल निम्नलिखित परीक्षण प्रोग्राम काम करने के लिए जाने जाते हैं:
tests/bt
tests/Gperf-simple
tests/test-proc-info
tests/test-static-link
tests/Gtest-init
tests/Ltest-init
tests/Gtest-resume-sig
tests/Ltest-resume-sig
** PPC64 Linux पर अपेक्षित परिणाम
"make check" को 24 में से 10 से अधिक परीक्षणों के विफल हुए बिना चलना चाहिए।
इस वितरण में कुछ सरल प्रदर्शन परीक्षण शामिल हैं जो विभिन्न libunwind संचालनों की मूल लागत का कुछ अंदाजा देते हैं। लाइब्रेरी बनाने के बाद, आप इन परीक्षणों को निम्नलिखित कमांड के साथ चला सकते हैं:
$ cd tests $ make perf
कृपया इस लाइब्रेरी से संबंधित सभी प्रश्नों को निर्देशित करें:
आप ऐसा [email protected] पर एक मेल भेजकर कर सकते हैं जिसका मुख्य भाग हो:
subscribe libunwind-devel
या आप सदस्यता ले सकते हैं और अपनी सदस्यता को वेब-इंटरफ़ेस के माध्यम से प्रबंधित कर सकते हैं:
https://savannah.nongnu.org/mail/?group=libunwind