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: Target specific Relobj?


"Doug Kwan (éæå)" <dougkwan@google.com> writes:

>     I need to attach some ARM specific information to Relobj objects.
> To do that I can think of two ways
>
>     1.  Use an Unordered_map<Relobj*, Arm_specific_info*>
>     2.  Sub-classing Relobj (or Sized_relobj)
>
> I actually prefer 2.  I would like to check make_elf_sized_object() to
> check if a target has its own make_elf_sized_object.  If so, it calls
> the target's own version.  We'll need to pass size and big_endian as
> two extra parameters.  What do you think?

Creating a child class makes sense to me.

> -Targets have size and endianity, so there is no need to pass size and
> endianity to target-specific  make_elf_sized_object.
> -make_elf_sized_object takes a elfcpp::Ehdr<size, big_endian>& ehdr as
> parameter,  I would change this back to a plain unsigned char pointer
> so that we only need one hook, instead of 4.

Probably the way to do it is to always call the target to create the
object.  Then the hook would simply be

   template<int size, bool big_endian>
   make_object(const elfcpp::Ehdr<size, big_endian>&);

with the obvious default implementation.

Admittedly targets which needed to override this would have to
explicitly instantiate the required forms of the function.  This would
also mean reworking the current way that set_target works, to call
select_target before creating the object.

Ian


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