I'm trying to debug a very simple program in GDB to see what its code looks
like in assembly. I built tcc-0.9.27 on x86_64 windows. My source code
looks like this:
```c
int main(int argc, char **argv)
{
int test = 255;
test = test + 1;
return 0;
}
```
```bash
tcc -g -o main.exe main.c
gdb main
GNU gdb (GDB) 16.3
(gdb) b main
(gdb) r
(gdb) disas /s
Dump of assembler code for function main:
main.c
2 {
0x0000000000401000 <+0>: push rbp
0x0000000000401001 <+1>: mov rbp,rsp
0x0000000000401004 <+4>: sub rsp,0x10
0x000000000040100b <+11>: mov QWORD PTR [rbp+0x10],rcx
0x000000000040100f <+15>: mov QWORD PTR [rbp+0x18],rdx
=> 0x0000000000401013 <+19>: mov eax,0xff
0x0000000000401018 <+24>: mov DWORD PTR [rbp-0x4],eax
3 int test = 255;
```
It seems like the source code is not mapped to assembly correctly here. I
would expect for the source line 3 to appear above the program address
0x0000000000401013 (which has an arrow next to it), since this is actually
where we move 255 to the register which is then moved onto the stack
variable.
For comparison, GCC maps the source code like this:
```bash
(gdb) disas /s
Dump of assembler code for function main:
main.c:
2 {
0x00007ff7b6b71450 <+0>: push rbp
0x00007ff7b6b71451 <+1>: mov rbp,rsp
0x00007ff7b6b71454 <+4>: sub rsp,0x30
0x00007ff7b6b71458 <+8>: mov DWORD PTR [rbp+0x10],ecx
0x00007ff7b6b7145b <+11>: mov QWORD PTR [rbp+0x18],rdx
0x00007ff7b6b7145f <+15>: call 0x7ff7b6b71550 <__main>
3 int test = 255;
=> 0x00007ff7b6b71464 <+20>: mov DWORD PTR [rbp-0x4],0xff
```
_______________________________________________
Tinycc-devel mailing list
[email protected]
https://lists.nongnu.org/mailman/listinfo/tinycc-devel