So I don't really understand why the preloading doesn't seem work on arm; it seems to work on x86; I've run gdb on dpkg-split with:
set environment CLICK_PACKAGE_FD=0
set environment CLICK_PACKAGE_PATH=ar.com.beuno.hello-world-0.6.click
set environment LD_PRELOAD=/usr/lib/arm-linux-gnueabihf/click/libclickpreload.so
break open
run -Qao /foobar ar.com.beuno.hello-world-0.6.click
but backtrace isn't in the right library:
Starting program: /usr/bin/dpkg-split -Qao /foobar /ar.com.beuno.hello-world-0.6.click
Breakpoint 1, 0x401c2710 in open () from /lib/arm-linux-gnueabihf/libc.so.6
(gdb) bt
#0 0x401c2710 in open () from /lib/arm-linux-gnueabihf/libc.so.6
#1 0x4018bce6 in _IO_file_open () from /lib/arm-linux-gnueabihf/libc.so.6
#2 0x4018be3c in _IO_file_fopen () from /lib/arm-linux-gnueabihf/libc.so.6
#3 0x40183df6 in ?? () from /lib/arm-linux-gnueabihf/libc.so.6
on x86 this works:
Breakpoint 1, open64 () at ../sysdeps/unix/syscall-template.S:81
81 ../sysdeps/unix/syscall-template.S: Aucun fichier ou dossier de ce type.
(gdb) bt
#0 open64 () at ../sysdeps/unix/syscall-template.S:81
#1 0x00007ffff7ddfd0f in open_verify (name=0x7ffff7ff94a0 "/usr/lib/x86_64-linux-gnu/click/libclickpreload.so", fbp=fbp@entry=0x7fffffffdbc8, loader=<optimized out>,
whatcode=whatcode@entry=0, found_other_class=found_other_class@entry=0x7fffffffdbb0, free_name=free_name@entry=true) at dl-load.c:1924
#2 0x00007ffff7de28e2 in _dl_map_object (loader=0x7ffff7ffe268, name=0x7fffffffe100 "/usr/lib/x86_64-linux-gnu/click/libclickpreload.so", type=type@entry=1,
trace_mode=trace_mode@entry=0, mode=67108864, nsid=nsid@entry=0) at dl-load.c:2544
#3 0x00007ffff7ddb81e in map_doit (a=a@entry=0x7fffffffe0b0) at rtld.c:632
#4 0x00007ffff7de96e6 in _dl_catch_error (objname=objname@entry=0x7fffffffe0a0, errstring=errstring@entry=0x7fffffffe0a8, mallocedp=mallocedp@entry=0x7fffffffe09f,
operate=operate@entry=0x7ffff7ddb800 <map_doit>, args=args@entry=0x7fffffffe0b0) at dl-error.c:177
#5 0x00007ffff7ddb087 in do_preload (fname=0x7fffffffe100 "/usr/lib/x86_64-linux-gnu/click/libclickpreload.so", main_map=<optimized out>, where=0x7ffff7df6725 "LD_PRELOAD")
at rtld.c:821
#6 0x00007ffff7dddac2 in dl_main (phdr=<optimized out>, phnum=0, user_entry=0x0, auxv=<optimized out>) at rtld.c:1635
#7 0x00007ffff7df076e in _dl_sysdep_start (start_argptr=start_argptr@entry=0x7fffffffe340, dl_main=dl_main@entry=0x7ffff7ddbe00 <dl_main>) at ../elf/dl-sysdep.c:241
#8 0x00007ffff7ddf208 in _dl_start_final (arg=0x7fffffffe340) at rtld.c:337
#9 _dl_start (arg=0x7fffffffe340) at rtld.c:563
#10 0x00007ffff7ddb638 in _start () from /lib64/ld-linux-x86-64.so.2
#11 0x0000000000000004 in ?? ()
So I don't really understand why the preloading doesn't seem work on arm; it seems to work on x86; I've run gdb on dpkg-split with: PATH=ar. com.beuno. hello-world- 0.6.click /usr/lib/ arm-linux- gnueabihf/ click/libclickp reload. so beuno.hello- world-0. 6.click
set environment CLICK_PACKAGE_FD=0
set environment CLICK_PACKAGE_
set environment LD_PRELOAD=
break open
run -Qao /foobar ar.com.
but backtrace isn't in the right library: beuno.hello- world-0. 6.click
Starting program: /usr/bin/dpkg-split -Qao /foobar /ar.com.
Breakpoint 1, 0x401c2710 in open () from /lib/arm- linux-gnueabihf /libc.so. 6 linux-gnueabihf /libc.so. 6 linux-gnueabihf /libc.so. 6 linux-gnueabihf /libc.so. 6 linux-gnueabihf /libc.so. 6
(gdb) bt
#0 0x401c2710 in open () from /lib/arm-
#1 0x4018bce6 in _IO_file_open () from /lib/arm-
#2 0x4018be3c in _IO_file_fopen () from /lib/arm-
#3 0x40183df6 in ?? () from /lib/arm-
on x86 this works: unix/syscall- template. S:81 unix/syscall- template. S: Aucun fichier ou dossier de ce type. unix/syscall- template. S:81 f94a0 "/usr/lib/ x86_64- linux-gnu/ click/libclickp reload. so", fbp=fbp@ entry=0x7ffffff fdbc8, loader=<optimized out>, whatcode@ entry=0, found_other_ class=found_ other_class@ entry=0x7ffffff fdbb0, free_name= free_name@ entry=true) at dl-load.c:1924 0x7ffff7ffe268, name=0x7fffffffe100 "/usr/lib/ x86_64- linux-gnu/ click/libclickp reload. so", type=type@entry=1, mode=trace_ mode@entry= 0, mode=67108864, nsid=nsid@entry=0) at dl-load.c:2544 0x7fffffffe0b0) at rtld.c:632 objname@ entry=0x7ffffff fe0a0, errstring= errstring@ entry=0x7ffffff fe0a8, mallocedp= mallocedp@ entry=0x7ffffff fe09f, operate@ entry=0x7ffff7d db800 <map_doit>, args=args@ entry=0x7ffffff fe0b0) at dl-error.c:177 0x7fffffffe100 "/usr/lib/ x86_64- linux-gnu/ click/libclickp reload. so", main_map=<optimized out>, where=0x7ffff7d f6725 "LD_PRELOAD") argptr= start_argptr@ entry=0x7ffffff fe340, dl_main= dl_main@ entry=0x7ffff7d dbe00 <dl_main>) at ../elf/ dl-sysdep. c:241 e340) at rtld.c:337 e340) at rtld.c:563 ld-linux- x86-64. so.2
Breakpoint 1, open64 () at ../sysdeps/
81 ../sysdeps/
(gdb) bt
#0 open64 () at ../sysdeps/
#1 0x00007ffff7ddfd0f in open_verify (name=0x7ffff7f
whatcode=
#2 0x00007ffff7de28e2 in _dl_map_object (loader=
trace_
#3 0x00007ffff7ddb81e in map_doit (a=a@entry=
#4 0x00007ffff7de96e6 in _dl_catch_error (objname=
operate=
#5 0x00007ffff7ddb087 in do_preload (fname=
at rtld.c:821
#6 0x00007ffff7dddac2 in dl_main (phdr=<optimized out>, phnum=0, user_entry=0x0, auxv=<optimized out>) at rtld.c:1635
#7 0x00007ffff7df076e in _dl_sysdep_start (start_
#8 0x00007ffff7ddf208 in _dl_start_final (arg=0x7fffffff
#9 _dl_start (arg=0x7fffffff
#10 0x00007ffff7ddb638 in _start () from /lib64/
#11 0x0000000000000004 in ?? ()