Summary: | debugedit: invalid path for source file (for elfutils/eu-stack) | ||
---|---|---|---|
Product: | Sisyphus | Reporter: | Vitaly Chikunov <vt> |
Component: | rpm-build | Assignee: | placeholder <placeholder> |
Status: | CLOSED FIXED | QA Contact: | qa-sisyphus |
Severity: | normal | ||
Priority: | P5 | CC: | arseny, glebfm, imz, iv, ldv, placeholder, vt |
Version: | unstable | ||
Hardware: | x86 | ||
OS: | Linux |
Description
Vitaly Chikunov
2020-11-02 06:33:55 MSK
Несколько пакетов, которые я посмотрел - собранные autotools не прямо в $RPM_BUILD_DIR, а в подкаталоге - так. А с cmake - собранные в BUILD - проблем нет. (In reply to Vitaly Chikunov from comment #1) > Несколько пакетов, которые я посмотрел - собранные autotools не прямо в > $RPM_BUILD_DIR, а в подкаталоге - так. А с cmake - собранные в BUILD - > проблем нет. Потому что autotools собирает так (относительный путь к stack.c): x86_64-alt-linux-gcc -D_GNU_SOURCE -DHAVE_CONFIG_H -DLOCALEDIR='"/usr/share/locale"' -DDEBUGPRED=0 -DSRCDIR=\"/usr/src/RPM/BUILD/elfutils-0.182-alt2/src\" -DOBJDIR=\"/usr/src/RPM/BUILD/elfutils-0.182-alt2/build-x86_64-alt-linux/src\" -I. -I../../src -I.. -I. -I../../src -I../../lib -I.. -I../../src/../libelf -I../../src/../libebl -I../../src/../libdw -I../../src/../libdwelf -I../../src/../libdwfl -I../../src/../libasm -std=gnu99 -Wall -Wshadow -Wformat=2 -Wold-style-definition -Wstrict-prototypes -Wtrampolines -Wlogical-op -Wduplicated-cond -Wnull-dereference -Wimplicit-fallthrough=5 -Werror -Wunused -Wextra -Wstack-usage=262144 -D_FORTIFY_SOURCE=2 -pipe -frecord-gcc-switches -Wall -g -O2 -fexceptions -MT stack.o -MD -MP -MF .deps/stack.Tpo -c -o stack.o ../../src/stack.c А cmake так (абсолютный путь к main.cpp): /usr/bin/clang++ -DBUILD_DATE=\"20201102\" -DBUILD_VERSION=\"\" -DISPC_ANDROID_TARGET_OFF -DISPC_FREEBSD_TARGET_OFF -DISPC_IOS_TARGET_OFF -DISPC_MACOS_TARGET_OFF -DISPC_NO_DUMPS -DISPC_PS4_TARGET_OFF -DISPC_WINDOWS_TARGET_OFF -DISPC_X86_ENABLED -DLLVM_10_0 -D_FORTIFY_SOURCE=2 -I/include -I/usr/src/RPM/BUILD/ispc-1.14.1/src -I/usr/src/RPM/BUILD/ispc-1.14.1/BUILD/. -pipe -frecord-gcc-switches -Wall -g -O2 -O2 -g -Wall -Wno-sign-compare -Wno-unused-function -Werror -I/usr/include -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -fstack-protector-strong -fdata-sections -ffunction-sections -fno-delete-null-pointer-checks -Wformat -Wformat-security -fpie -fwrapv -Wno-c99-extensions -Wno-deprecated-register -fno-rtti -std=c++14 -o CMakeFiles/ispc.dir/src/main.cpp.o -c /usr/src/RPM/BUILD/ispc-1.14.1/src/main.cpp Чтоб понять исправлена ли эта ошибка в апстриме debugiedit, нашел пакет собранный с ../configure в Федоре -- gnuplot. У них тоже остается "../../src" в Directory Table (в .debug_line), так что пути к исходникам его содержат. Но, в отличии от нас, нужные пустые диры запакованы. Таким образом путь с "../../src" не дает ошибки. % objdump -Wl ./usr/lib/debug/usr/bin/gnuplot-qt-5.2.8-6.fc33.x86_64.debug ... The Directory Table (offset 0x1b): 1 ../../src 2 ../../term 3 /usr/include/bits 4 /usr/include ... (gdb) i sources ... /usr/src/debug/gnuplot-5.2.8-6.fc33.x86_64/minimal/src/../../src/qtterminal/QtGnuplotEvent.h ... % less gnuplot-debugsource-5.2.8-6.fc33.x86_64.rpm ... drwxr-xr-x 2 root root 0 авг 6 05:22 /usr/src/debug/gnuplot-5.2.8-6.fc33.x86_64 drwxr-xr-x 2 root root 0 авг 6 05:22 /usr/src/debug/gnuplot-5.2.8-6.fc33.x86_64/minimal drwxr-xr-x 2 root root 0 авг 6 05:20 /usr/src/debug/gnuplot-5.2.8-6.fc33.x86_64/minimal/src drwxr-xr-x 2 root root 0 авг 6 05:22 /usr/src/debug/gnuplot-5.2.8-6.fc33.x86_64/qt ... -rw-r--r-- 1 root root 5158 дек 22 2017 /usr/src/debug/gnuplot-5.2.8-6.fc33.x86_64/src/qtterminal/QtGnuplotEvent.h ... Задание #261678: rpm-build.git=4.0.4-alt155 elfutils.git=0.182-alt2 - сделано как в Fedora - запакованы пустые диры в /usr/src/debug. До изменений: # gdb -q eu-stack Reading symbols from eu-stack... Reading symbols from /usr/lib/debug/usr/bin/eu-stack.debug... (gdb) b main Breakpoint 1 at 0x402450: file ../../src/stack.c, line 632. (gdb) list 1 <built-in>: Нет такого файла или каталога. (gdb) list main 627 ../../src/stack.c: Нет такого файла или каталога. (gdb) r Starting program: /usr/bin/eu-stack [Thread debugging using libthread_db enabled] Using host libthread_db library "/lib64/libthread_db.so.1". Breakpoint 1, main (argc=1, argv=0x7fffffffe3f8) at ../../src/stack.c:632 632 in ../../src/stack.c (gdb) list 627 in ../../src/stack.c (gdb) После сборки elfutils/eu-stack rpm-build'ом из задания: # gdb -q eu-stack Reading symbols from eu-stack... Reading symbols from /usr/lib/debug/usr/bin/eu-stack.debug... (gdb) b main Breakpoint 1 at 0x402450: file ../../src/stack.c, line 632. (gdb) list 1 <built-in>: Нет такого файла или каталога. (gdb) list main 627 return 0; 628 } 629 630 int 631 main (int argc, char **argv) 632 { 633 /* We use no threads here which can interfere with handling a stream. */ 634 __fsetlocking (stdin, FSETLOCKING_BYCALLER); 635 __fsetlocking (stdout, FSETLOCKING_BYCALLER); 636 __fsetlocking (stderr, FSETLOCKING_BYCALLER); (gdb) r Starting program: /usr/bin/eu-stack [Thread debugging using libthread_db enabled] Using host libthread_db library "/lib64/libthread_db.so.1". Breakpoint 1, main (argc=1, argv=0x7fffffffe3c8) at ../../src/stack.c:632 632 { (gdb) list 627 return 0; 628 } 629 630 int 631 main (int argc, char **argv) 632 { 633 /* We use no threads here which can interfere with handling a stream. */ 634 __fsetlocking (stdin, FSETLOCKING_BYCALLER); 635 __fsetlocking (stdout, FSETLOCKING_BYCALLER); 636 __fsetlocking (stderr, FSETLOCKING_BYCALLER); (gdb) Исходники стали отображаться. (ps. Почему у нас list по-умолчанию пытается показать некое 1 <built-in> не понятно. Думаю, это какая-то другая проблема.) `list` по-умолчанию ведет себя странно и в Fedora, но иначе: [root@a7a0fa830f90 /]# gdb -q eu-stack Reading symbols from eu-stack... Reading symbols from /usr/lib/debug/usr/bin/eu-stack-0.182-1.fc33.x86_64.debug... (gdb) i line No line number information available. (gdb) list 618 619 /* Makes sure we are properly attached. */ 620 if (dwfl_pid (dwfl) < 0) 621 error (EXIT_BAD, 0, "dwfl_pid: %s\n", dwfl_errmsg (-1)); 622 break; 623 624 default: 625 return ARGP_ERR_UNKNOWN; 626 } 627 return 0; (gdb) i line Line 618 of "stack.c" is at address 0x302e <parse_opt+286> but contains no code. (gdb) list 628 } 629 630 int 631 main (int argc, char **argv) 632 { 633 /* We use no threads here which can interfere with handling a stream. */ 634 __fsetlocking (stdin, FSETLOCKING_BYCALLER); 635 __fsetlocking (stdout, FSETLOCKING_BYCALLER); 636 __fsetlocking (stderr, FSETLOCKING_BYCALLER); 637 То есть показывает какую-то строку выше main, но из правильного исходника. А у нас, если так сделать, то "показывает" `Line 1 of "../sysdeps/x86_64/start.S"`. rpm-build-4.0.4-alt155 -> sisyphus: Thu Nov 12 2020 Vitaly Chikunov <vt@altlinux> 4.0.4-alt155 - debugedit: Fix 'Unhandled relocation 0 in .debug_info section' on e2k. - debuginfo: Fix source paths with `..` by creating appropriate empty dirs under `/usr/src/debug` tree (closes: #39175). JFYI. В gdb-10 list по-умолчанию стал показывать (вместо '1 <built-in>: Нет такого файла или каталога.') часть исходника рядом с main. \o/ # gdb -q --args eu-stack Reading symbols from eu-stack... Reading symbols from /usr/lib/debug/usr/bin/eu-stack.debug... (gdb) list 618 619 /* Makes sure we are properly attached. */ 620 if (dwfl_pid (dwfl) < 0) 621 error (EXIT_BAD, 0, "dwfl_pid: %s\n", dwfl_errmsg (-1)); 622 break; 623 624 default: 625 return ARGP_ERR_UNKNOWN; 626 } 627 return 0; |