This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [RFC PATCH, binutils, ARM 11/11, ping] Add support for stable secure gateway veneers addresses


On 30 August 2016 at 10:10, Thomas Preudhomme
<thomas.preudhomme@foss.arm.com> wrote:
> Hi Christophe,
>
>
> On 29/08/16 15:56, Christophe Lyon wrote:
>>
>> On 26 August 2016 at 16:18, Thomas Preudhomme
>> <thomas.preudhomme@foss.arm.com> wrote:
>>>
>>> On 26/08/16 13:36, Thomas Preudhomme wrote:
>>>>
>>>>
>>>> Hi Christophe,
>>>>
>>>> On 26/08/16 12:55, Christophe Lyon wrote:
>>>>>
>>>>>
>>>>>
>>>>> I've noticed that the new tests fail on armeb. I didn't look at the
>>>>> detailed logs yet, but I guess you can a look?
>>>>>
>>>>> ./ld/ld.sum:FAIL: Input secure gateway import library
>>>>> ./ld/ld.sum:FAIL: Input secure gateway import library: no output import
>>>>> library
>>>>> ./ld/ld.sum:FAIL: Input secure gateway import library: earlier stub
>>>>> section base
>>>>> ./ld/ld.sum:FAIL: Input secure gateway import library: later stub
>>>>> section
>>>>> base
>>>>> ./ld/ld.sum:FAIL: Input secure gateway import library: veneer comeback
>>>>> ./ld/ld.sum:FAIL: Input secure gateway import library: entry function
>>>>> change
>>>>
>>>>
>>>>
>>>> I can reproduce indeed. I'll have a look, thanks for the notice. Note
>>>> that
>>>> Monday is a bank holidays here so might only answer after that if I'm
>>>> too
>>>> slow
>>>> to find the root cause.
>>>
>>>
>>>
>>> Doh, the code checks for a SG instruction by comparing the 4 bytes in the
>>> code against its litteral value. The problem of course is that the read
>>> puts
>>> the 4 bytes of the instruction in memory order but these will then be
>>> interpreted according to the endianness.
>>>
>>> The fix should be easy.
>>>
>>
>> Indeed, thanks to your analysis it was quick enough.
>>
>> Here is a patch, maybe there is a simpler way?
>
>
> diff --git a/bfd/elf32-arm.c b/bfd/elf32-arm.c
> index 9ff418a..5c04b9b 100644
> --- a/bfd/elf32-arm.c
> +++ b/bfd/elf32-arm.c
> @@ -5791,11 +5791,19 @@ cmse_entry_fct_p (struct elf32_arm_link_hash_entry
> *hash)
>    section = hash->root.root.u.def.section;
>    abfd = section->owner;
>    offset = hash->root.root.u.def.value - section->vma;
> -  if (!bfd_get_section_contents (abfd, section, &first_insn, offset,
> -                                sizeof (first_insn)))
> -    return FALSE;
>
>    /* Start by SG instruction.  */
> +  bfd_byte * contents;
> +  /* Get cached copy if it exists.  */
> +  if (elf_section_data (section)->this_hdr.contents != NULL)
> +    contents = elf_section_data (section)->this_hdr.contents;
> +  else
> +    {
> +      /* Go get them off disk.  */
> +      if (! bfd_malloc_and_get_section (abfd, section, &contents))
> +       return FALSE;
> +    }
> +  first_insn = bfd_get_32 (abfd, contents + offset);
>    return first_insn == 0xe97fe97f;
>  }
>
> I have a similar patch but I'm still using bfd_get_section_contents with a
> 4byte buffer named contents. It avoids reading the entire section to just
> analyze 4 bytes. I did it on Friday so wanted to test it a bit more today.
>

OK that's fine, it sounds better than mine. I posted mine because
I wasn't sure you were actually working on a fix.

Thanks

Christophe

> Best regards,
>
> Thomas


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]