Under what circumstances does the “[shared] static this” not run, On ARM

Dsby dushibaiyu at yahoo.com
Tue Nov 7 02:15:28 UTC 2023


On Monday, 6 November 2023 at 03:23:08 UTC, Dsby wrote:
> I corss to ARM(contex A7) ,the static this and static ~this 
> does nit work.
> Whether the system compiles parameters or what happens, I have 
> no idea.
> 我使用LDC交叉编译到 armv7l linux上,“static 
> this”不能执行。可能出现什么情况不调用?会不会是我编译系统参数有影响。
>
> the Code(代码如下):
> ``` D
> import std.stdio;
> // import core.thread;
> import core.runtime;
>
> shared static this(){
> writeln("run shared static this");
> }
>
> static this(){
> writeln("run static this");
> }
>
> shared static ~this(){
> writeln("run shared static ~this");
> }
>
> static ~this(){
> writeln("run static ~this");
> }
>
>
> void main()
> {
> 	writeln("run main");
> 	writeln("exit main");
>
> }
> ```
>
>
> when I use linux on X86-64(在主机 linux运行效果(Opensuse):):
> ``` Bash
> dub run -f
>     Starting Performing "debug" build using 
> /home/duyu/bin/ldc2-1.34.0-linux-x86_64/bin/ldc2 for x86_64.
>     Building dtest ~master: building configuration [application]
>      Linking dtest
>      Running dtest
> run shared static this
> run static this
> run main
> exit main
> run static ~this
> run shared static ~this
>
> ```
>
> But I corss to ARM(contex A7) ,the static this and static ~this 
> does nit work.
> Whether the system compiles parameters or what happens, I have 
> no idea.
> In the borad Arm (在ARM   linux 上)。
> ``` Bash
> # chmod +x ./dtest
> # uname -a
> Linux PQ-A40i 3.10.65 #13 SMP PREEMPT Sun Oct 22 11:29:35 CST 
> 2023 armv7l GNU/Linux
> # ./dtest
> run main
> exit main
> #
> ```

我看了下 ldd, 在 arm linux 上没有 “linux-vdso.so.1 ” 
,可能这就是原因把。我差了下代码,runtime 使用 DSOs 加载的 static this 。

I looked at ldd and there is no "linux-vdso.so.1" on arm linux, 
maybe that's why. I messed up the code. runtime uses DSOs to load 
static this.

IN amd64 :
``` Bash
export LD_TRACE_LOADED_OBJECTS=1
> ./dtest
         linux-vdso.so.1 (0x00007ffdf5ffd000)
         libm.so.6 => /lib64/libm.so.6 (0x00007fb20b851000)
         libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007fb20b82c000)
         libc.so.6 => /lib64/libc.so.6 (0x00007fb20b600000)
         /lib64/ld-linux-x86-64.so.2 (0x00007fb20b95d000)
```

In ARMV7:
``` Bash
# export LD_TRACE_LOADED_OBJECTS=1
# ./dtest
         librt.so.1 => /lib/librt.so.1 (0xb6f66000)
         libdl.so.2 => /lib/libdl.so.2 (0xb6f53000)
         libpthread.so.0 => /lib/libpthread.so.0 (0xb6f3f000)
         libm.so.6 => /lib/libm.so.6 (0xb6eca000)
         libgcc_s.so.1 => /lib/libgcc_s.so.1 (0xb6ea1000)
         libc.so.6 => /lib/libc.so.6 (0xb6db4000)
         /lib/ld-linux-armhf.so.3 (0xb6f7c000)
#
```


More information about the digitalmars-d-ldc mailing list