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: 32bits specific code in do_adjust_elf_header()


Roman Divacky <rdivacky@freebsd.org> writes:

> Target_freebsd<size, big_endian>::do_adjust_elf_header()
>
> there is 32specific code that does not work on 64bit platforms
>
> this:
>
>      gold_assert(len == elfcpp::Elf_sizes<32>::ehdr_size);
>
>      elfcpp::Ehdr<32, false> ehdr(view);
>
>
> the 32 does not work on 64bit platform (ie. amd64), I believe
> it should be either 32 or 64. When I manually enter 64 there
> on amd64 gold works for me just fine.

Thanks for the report.  I think it was just dumb coding on my part.  I
committed this patch to fix it.

Ian


2009-07-01  Ian Lance Taylor  <ian@airs.com>

	* freebsd.h (Target_freebsd::do_adjust_elf_header): Use size
	instead of 32.


Index: freebsd.h
===================================================================
RCS file: /cvs/src/src/gold/freebsd.h,v
retrieving revision 1.1
diff -p -u -r1.1 freebsd.h
--- freebsd.h	24 Mar 2009 00:31:28 -0000	1.1
+++ freebsd.h	1 Jul 2009 16:20:44 -0000
@@ -68,15 +68,15 @@ Target_freebsd<size, big_endian>::do_adj
 {
   if (this->osabi_ != elfcpp::ELFOSABI_NONE)
     {
-      gold_assert(len == elfcpp::Elf_sizes<32>::ehdr_size);
+      gold_assert(len == elfcpp::Elf_sizes<size>::ehdr_size);
 
-      elfcpp::Ehdr<32, false> ehdr(view);
+      elfcpp::Ehdr<size, false> ehdr(view);
       unsigned char e_ident[elfcpp::EI_NIDENT];
       memcpy(e_ident, ehdr.get_e_ident(), elfcpp::EI_NIDENT);
 
       e_ident[elfcpp::EI_OSABI] = this->osabi_;
 
-      elfcpp::Ehdr_write<32, false> oehdr(view);
+      elfcpp::Ehdr_write<size, false> oehdr(view);
       oehdr.put_e_ident(e_ident);
     }
 }

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