
प्रोसेसर कॉल स्टैक को अनवाइंड करने के लिए लाइब्रेरी, कई आर्किटेक्चर और ऑपरेटिंग सिस्टम का समर्थन, बिल्ड और रिग्रेशन परीक्षण निर्देशों के साथ।
-- 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 # Needed only for building from git. Depends on libtool.
$ ./configure
$ make
$ make install prefix=PREFIX
जहाँ PREFIX स्थापना उपसर्ग है। डिफ़ॉल्ट रूप से, /usr/local का उपसर्ग उपयोग किया जाता है, जैसे कि libunwind.a को /usr/local/lib में और unwind.h को /usr/local/include में स्थापित किया जाता है। परीक्षण के लिए, आप इसके बजाय /usr/local का उपसर्ग उपयोग करना चाह सकते हैं।
** संस्करण 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) बाइनरी का अनवाइंडिंग (unwinding) वर्तमान में समर्थित नहीं है।
** GCC के पुराने संस्करणों के लिए समाधान (Workaround for older versions of 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 के संस्करण के आधार पर कुछ कंपाइलर समस्याएँ हैं।
सामान्य निर्माण निर्देश लागू होते हैं। कई परीक्षणों को बनाने और निष्पादित करने के लिए, आपको पोर्ट्स में 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-सितंबर-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 पर अपेक्षित परिणाम
HP-UX के लिए "make check" वर्तमान में असमर्थित है। आप इसे चलाने का प्रयास कर सकते हैं, लेकिन अधिकांश परीक्षण विफल होंगे (और कुछ समाप्त होने में विफल हो सकते हैं)। इस समय केवल निम्नलिखित परीक्षण प्रोग्राम काम करने के लिए जाने जाते हैं:
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