Thread overview |
---|
August 24, 2019 [Help!] Use two different assembly symbol in D, but they are same address. | ||||
---|---|---|---|---|
| ||||
Hi: definition _vga_x and _vga_y symbol in asm, compile use nasm -f elf64 -o boot.o boot.asm [section .bss] ... [global _vga_x] _vga_x: resb 8 [global _vga_y] _vga_y: resb 8 and nm boot.o show below ... 00107000 B _vga_x 00107008 B _vga_y and In another D file use this two symbol extern(C) { extern __gshared int _vga_x; //definition in boot.asm extern __gshared int _vga_y; //definition in boot.asm } void tt() { if (_vga_x == _vga_y) //where is true, why? } but when a run tt so strange things happend that the test is true. Is where has a coding mistake. src https://github.com/lilijreey/OS-D |
August 24, 2019 Re: [Help!] Use two different assembly symbol in D, but they are same address. | ||||
---|---|---|---|---|
| ||||
Posted in reply to lili | On Saturday, 24 August 2019 at 11:53:01 UTC, lili wrote:
> Hi:
> definition _vga_x and _vga_y symbol in asm, compile use nasm -f elf64 -o boot.o boot.asm
> [section .bss]
> ...
>
> [global _vga_x]
> _vga_x:
> resb 8
> [global _vga_y]
> _vga_y:
> resb 8
>
>
> and nm boot.o show below
> ...
> 00107000 B _vga_x
> 00107008 B _vga_y
>
> and In another D file use this two symbol
>
> extern(C) {
> extern __gshared int _vga_x; //definition in boot.asm
> extern __gshared int _vga_y; //definition in boot.asm
> }
>
> void tt()
> {
> if (_vga_x == _vga_y)
> //where is true, why?
> }
>
> but when a run tt so strange things happend that the test is true.
> Is where has a coding mistake.
> src https://github.com/lilijreey/OS-D
resb 8
just reserving 8 bytes not initializing it.
probably u compare some garbage. sometimes it equals, sometimes not.
no?
|
August 24, 2019 Re: [Help!] Use two different assembly symbol in D, but they are same address. | ||||
---|---|---|---|---|
| ||||
Posted in reply to a11e99z | On Saturday, 24 August 2019 at 12:09:19 UTC, a11e99z wrote:
> On Saturday, 24 August 2019 at 11:53:01 UTC, lili wrote:
>> [...]
>
> resb 8
> just reserving 8 bytes not initializing it.
> probably u compare some garbage. sometimes it equals, sometimes not.
> no?
I write wrong, not if (_vga_x == _vga_y) but if (&_vga_x == &_vga_y)
|
August 24, 2019 Re: [Help!] Use two different assembly symbol in D, but they are same address. | ||||
---|---|---|---|---|
| ||||
Posted in reply to lili | On Saturday, 24 August 2019 at 12:16:34 UTC, lili wrote:
> On Saturday, 24 August 2019 at 12:09:19 UTC, a11e99z wrote:
>> On Saturday, 24 August 2019 at 11:53:01 UTC, lili wrote:
>>> [...]
>>
>> resb 8
>> just reserving 8 bytes not initializing it.
>> probably u compare some garbage. sometimes it equals, sometimes not.
>> no?
>
> I write wrong, not if (_vga_x == _vga_y) but if (&_vga_x == &_vga_y)
try to do next:
add funtion in asm that returns real addresses to vga_x,y
extern(C) void asmVgas( int** px, int** py)
call it
int *px, *py;
asmVgas( &px, &py);
writefln( "%s=%s,%s=%s",px, &_vga_x,py, &_vga_y);
and see result
|
August 25, 2019 Re: [Help!] Use two different assembly symbol in D, but they are same address. | ||||
---|---|---|---|---|
| ||||
Posted in reply to a11e99z | On Saturday, 24 August 2019 at 12:55:57 UTC, a11e99z wrote:
> On Saturday, 24 August 2019 at 12:16:34 UTC, lili wrote:
>> On Saturday, 24 August 2019 at 12:09:19 UTC, a11e99z wrote:
>>> On Saturday, 24 August 2019 at 11:53:01 UTC, lili wrote:
>>>> [...]
>>>
>>> resb 8
>>> just reserving 8 bytes not initializing it.
>>> probably u compare some garbage. sometimes it equals, sometimes not.
>>> no?
>>
>> I write wrong, not if (_vga_x == _vga_y) but if (&_vga_x == &_vga_y)
>
> try to do next:
> add funtion in asm that returns real addresses to vga_x,y
> extern(C) void asmVgas( int** px, int** py)
> call it
> int *px, *py;
> asmVgas( &px, &py);
> writefln( "%s=%s,%s=%s",px, &_vga_x,py, &_vga_y);
> and see result
I followed your suggest, call asm_fn in d function. it return address not 0 but is a correct
address same as the var address show in link map file.
when a try define a __shared int xx, the &xx also 0.
after linked all variables address is 0 that in .bss segment.
do you know why occur this?
[global asm_fn]
asm_fn:
mov rax, p2_table
ret
|
August 25, 2019 Re: [Help!] Use two different assembly symbol in D, but they are same address. | ||||
---|---|---|---|---|
| ||||
Posted in reply to lili | On Sunday, 25 August 2019 at 13:24:57 UTC, lili wrote:
> On Saturday, 24 August 2019 at 12:55:57 UTC, a11e99z wrote:
>> On Saturday, 24 August 2019 at 12:16:34 UTC, lili wrote:
>>> On Saturday, 24 August 2019 at 12:09:19 UTC, a11e99z wrote:
>>>> On Saturday, 24 August 2019 at 11:53:01 UTC, lili wrote:
>>>>> [...]
>>>>
>>>> resb 8
>>>> just reserving 8 bytes not initializing it.
>>>> probably u compare some garbage. sometimes it equals, sometimes not.
>>>> no?
>>>
>>> I write wrong, not if (_vga_x == _vga_y) but if (&_vga_x == &_vga_y)
>>
>> try to do next:
>> add funtion in asm that returns real addresses to vga_x,y
>> extern(C) void asmVgas( int** px, int** py)
>> call it
>> int *px, *py;
>> asmVgas( &px, &py);
>> writefln( "%s=%s,%s=%s",px, &_vga_x,py, &_vga_y);
>> and see result
>
> I followed your suggest, call asm_fn in d function. it return address not 0 but is a correct
> address same as the var address show in link map file.
> when a try define a __shared int xx, the &xx also 0.
> after linked all variables address is 0 that in .bss segment.
> do you know why occur this?
>
> [global asm_fn]
> asm_fn:
> mov rax, p2_table
> ret
no idea.
u can to define _vga_x,_vga_y in D code and export it to asm (vice versa than now).
see result again.
in case still not working:
make very simple app with global vars: 2 D-files OR 1 D-file and 1 asm-file
(maybe its not working even for D+D files).
try to get same bug from compiler/linker.
fill the issue and attach both files as sample.
add point (for case D+asm) "how to compile asm file for linking with D" as u did.
then wait and hope.
|
August 25, 2019 Re: [Help!] Use two different assembly symbol in D, but they are same address. | ||||
---|---|---|---|---|
| ||||
Posted in reply to a11e99z | On Sunday, 25 August 2019 at 13:43:42 UTC, a11e99z wrote:
> On Sunday, 25 August 2019 at 13:24:57 UTC, lili wrote:
>> On Saturday, 24 August 2019 at 12:55:57 UTC, a11e99z wrote:
and try to use any compiler DMD/LDC/GDC.
maybe result will be that u want.
|
Copyright © 1999-2021 by the D Language Foundation