On 25/08/16 07:30, Waldemar Brodkorb wrote:
> Hi Greg,
> Greg Ungerer wrote,
> 
>> Hi Waldemar,
>>
>> On 06/05/16 05:06, Waldemar Brodkorb wrote:
>>> Hi Greg,
>>> Waldemar Brodkorb wrote,
>>>
>>>> Hi Greg,
>>>> Greg Ungerer wrote,
>>>>
>>>>> Attached is a kernel patch that modifies binfmt_flat to print
>>>>> out the reloc number along with the reloc error. That way we can
>>>>> map that back to the reloc entry number printed out in the verbose
>>>>> output from elf2flt at compile time.
>>>>
>>>> The stm32 is now working, here is the output with patched
>>>> kernel:
>>>> ~ # /hello
>>>> [  162.460000] BINFMT_FLAT: Loading file: /hello
>>>> [  162.460000] Mapping is 90520000, Entry point is 45, data_start is 8984
>>>> [  162.460000] Load /hello: TEXT=90520040-90528984 DATA=905289a0-9052e1b0 
>>>> BSS=9052e1b0-9053240c
>>>> [  162.460000] BINFMT_FLAT: reference 0x870000 to shared library 237, 
>>>> killing hello!
>>>> SEGV
>>>>
>>>> /hello
>>>> [   11.230000] BINFMT_FLAT: reference 0x870000 to shared library 237, 
>>>> killing hello!
>>>> SEGV
>>>>
>>>> Hmm, on the stm32 with latest buildroot, I now get this errors.
>>>>
>>>> But I just use UCLIBC_FORMAT_FLAT. The kernel defconfig used has
>>>> CONFIG_BINFMT_SHARED_FLAT enabled.
>>>
>>> I disabled CONFIG_BINFMT_SHARED_FLAT in the kernel.
>>> And now I get:
>>> ~ # /hello
>>> [   90.830000] BINFMT_FLAT: reloc[405] outside program 0xed870000 (0
>>> - 0x123b0/0x8944), killing hello!
>>> SEGV
>>>
>>> Compiling with
>>> ./output/host/usr/bin/arm-buildroot-uclinux-uclibcgnueabi-gcc
>>> -Wl,-elf2flt=-v -o hello hello.c -lpthread :
>>> ..
>>> reloc[403] = 0xe140
>>>  RELOC[404]: offset=0x5724 symbol=frame_dummy+0x0 section=.text
>>> size=0 fixup=0xac (reloc=0xe144)
>>> reloc[404] = 0xe144
>>>  RELOC[405]: offset=0x5728 symbol=pthread_initialize+0x0
>>> section=.text size=0 fixup=0x87ec (reloc=0xe148)
>>> reloc[405] = 0xe148
>>>  RELOC[406]: offset=0x572c symbol=__do_global_dtors_aux+0x0
>>> section=.text size=0 fixup=0x80 (reloc=0xe14c)
>>> reloc[406] = 0xe14c
>>> ..
>>>
>>> So pthread_initialize() is the problem?
>>
>> I have an idea what is broken here now.
>>
>> I am able to run this same test on qemu/versatile and get the
>> same result as you above with "hello" pthread test.
>>
>> I think elf2flt is not properly handling R_ARM_TARGET1 relocation
>> types. And this causes a bad relocation calculation at runtime.
>>
>> Can you try the attached patch?
>>
>> This fixes it for me, and I can run "hello" and get expected result.
> 
> Thanks. This works for me, too.
> 
> Great that we have a solution for it!
> Please push it :=)

Pushed up to the git tree on github.
(https://github.com/uclinux-dev/elf2flt)

Regards
Greg



_______________________________________________
uClinux-dev mailing list
uClinux-dev@uclinux.org
http://mailman.uclinux.org/mailman/listinfo/uclinux-dev
This message was resent by uclinux-dev@uclinux.org
To unsubscribe see:
http://mailman.uclinux.org/mailman/options/uclinux-dev

Reply via email to