Страница 1 из 1

отладочная информация для gdb (ARM)

Добавлено: 01.11.22 10:58
БудДен
#отладчик
Надо было начать с интела, но ладно.

Код: Выделить всё

# https://stackoverflow.com/questions/19419782/exit-c-text0x18-undefined-reference-to-exit-when-using-arm-none-eabi-gcc
arm-none-eabi-gcc dummy.c --specs=nosys.specs


Вернёмся к интелу

Код: Выделить всё

gcc -g -c dummy.c
ld dummy.o --defsym something=0x100500
ld: warning: cannot find entry symbol _start; defaulting to 00000000004000b0
den73@deb8:~/gddb$ gdb a.out
GNU gdb (Debian 7.12-6) 7.12.0.20161007-git
Reading symbols from a.out...done.
(gdb) info symbol something
Cannot access memory at address 0x100500
(gdb) ^d
Делим a.out на отладочную инфу и остальное, оно работает:

Код: Выделить всё

den73@deb8:~/gddb$ objcopy a.out --only-keep-debug a.debug
den73@deb8:~/gddb$ strip a.out
den73@deb8:~/gddb$ gdb a.out
Reading symbols from a.out...(no debugging symbols found)...done.
(gdb) symbol-file a.debug
Reading symbols from a.debug...done.
(gdb) info symbol something
Cannot access memory at address 0x100500

Re: отладочная информация для gdb (ARM)

Добавлено: 01.11.22 12:32
БудДен
И теперь то же самое для arm (dummy.c - это hello,world на Си).

Код: Выделить всё

arm-none-eabi-ld dummy.c -g -c --specs=nosys.specs -o dummy.o
arm-none-eabi-ld dummy.o --defsym v2=0x8020
arm-none-eabi-ld: warning: cannot find entry symbol _start; defaulting to 0000000000008000
arm-none-eabi-objcopy a.out --only-keep-debug a.debug
# запукаем в другом окне QEMU с ядром ЯОС с -s -S
arm-none-eabi-gdb -tui --command=~/commands.gdb 
(gdb) symbol-file a.debug
(gdb) x &v2
0x8020:       0x0001b000
Но в распечатке ассемблера это имя не попадается. На этом на сегодня хватит.

Re: отладочная информация для gdb (ARM)

Добавлено: 02.11.22 14:04
БудДен

Код: Выделить всё

git clone https://github.com/TinyCC/tinycc
cd tinycc
./configure
make
make test
cd ..
echo '#include <stdio.h>
int main() {
 printf("Hi!\n");
}' > a.c
tinycc/tcc -Btinycc a.c -o a.o
./a.o
tcc_debug_start, put_stabs, tcc_debug_end, tcc_debug_funcstart, tcc_debug_*line

Re: отладочная информация для gdb (ARM)

Добавлено: 02.11.22 19:58
БудДен
Частичный успех - удалось увидеть в отладчике ядра отладочную инфу, которую сгенерил tcc для левой программы. Осталось подсунуть свою инфу вместо той, которая выдаётся.

Re: отладочная информация для gdb (ARM)

Добавлено: 03.11.22 00:25
БудДен
global_identifier_push - кладёт глоб. идентификатор. Есть ещё хеш-таблица, в неё запись происходит в tok_alloc.

Будем повторять структуру вызова decl из верхнего уровня компиляции, дублируя дерево. Вот, наконец методику придумал.

Re: отладочная информация для gdb (ARM)

Добавлено: 07.11.22 00:28
БудДен
Похоже, что модуль содержит единую секцию кода, а отдельные функции - лишь точки в ней. Значит, границы функций внутри модуля нужно определять вычитанием - где началась следующая процедура, там и закончилась предыдущая.