
बहु-आर्किटेक्चर लाइब्रेरी जो प्रोग्राम कॉल स्टैक्स को अनवाइंड करने के लिए है, जो 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 का उपसर्ग उपयोग करना चाह सकते हैं।
** संस्करण 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 (खराब अनवाइंड-जानकारी के कारण क्रैश?)
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() पर बैकट्रेस कट गया)
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