Hi Stefan,

On Mon, Aug 9, 2010 at 11:28 PM, Stefan Farfeleder <stef...@freebsd.org> wrote:
> On Tue, Aug 10, 2010 at 05:15:35AM +0000, Neel Natu wrote:
>> Author: neel
>> Date: Tue Aug 10 05:15:35 2010
>> New Revision: 211130
>> URL: http://svn.freebsd.org/changeset/base/211130
>>
>> Log:
>>   Fix compilation error for 64-bit little endian build:
>>   libexec/rtld-elf/mips/reloc.c:196: warning: right shift count >= width of 
>> type
>>
>>   When the expression '(r_info) >> 32' was passed to bswap32() it was 
>> promptly
>>   changed to '(uint32_t)(r_info) >> 32' which is not what we intended.
>
> Wouldn't it be better to fix the bswap32 macro instead?
>

I think you are right. Can you take a look at the following patch instead?

If I hear no objections, I will commit it tomorrow.

Index: libexec/rtld-elf/mips/reloc.c
===================================================================
--- libexec/rtld-elf/mips/reloc.c       (revision 211131)
+++ libexec/rtld-elf/mips/reloc.c       (working copy)
@@ -83,7 +83,7 @@
 #undef ELF_R_SYM
 #undef ELF_R_TYPE
 #define ELF_R_SYM(r_info)              ((r_info) & 0xffffffff)
-#define ELF_R_TYPE(r_info)             bswap32(((r_info) >> 32))
+#define ELF_R_TYPE(r_info)             bswap32((r_info) >> 32)
 #endif
 #else
 #define        ELF_R_NXTTYPE_64_P(r_type)      (0)
Index: sys/sys/endian.h
===================================================================
--- sys/sys/endian.h    (revision 211131)
+++ sys/sys/endian.h    (working copy)
@@ -56,9 +56,9 @@
 /*
  * General byte order swapping functions.
  */
-#define        bswap16(x)      __bswap16(x)
-#define        bswap32(x)      __bswap32(x)
-#define        bswap64(x)      __bswap64(x)
+#define        bswap16(x)      __bswap16((x))
+#define        bswap32(x)      __bswap32((x))
+#define        bswap64(x)      __bswap64((x))

 /*
  * Host to big endian, host to little endian, big endian to host, and little

best
Neel

>> Modified:
>>   head/libexec/rtld-elf/mips/reloc.c
>>
>> Modified: head/libexec/rtld-elf/mips/reloc.c
>> ==============================================================================
>> --- head/libexec/rtld-elf/mips/reloc.c        Mon Aug  9 23:32:37 2010       
>>  (r211129)
>> +++ head/libexec/rtld-elf/mips/reloc.c        Tue Aug 10 05:15:35 2010       
>>  (r211130)
>> @@ -75,7 +75,7 @@ void _rtld_relocate_nonplt_self(Elf_Dyn
>>   * ELF64 MIPS encodes the relocs uniquely.  The first 32-bits of info 
>> contain
>>   * the symbol index.  The top 32-bits contain three relocation types encoded
>>   * in big-endian integer with first relocation in LSB.  This means for 
>> little
>> - * endian we have to byte swap that interger (r_type).
>> + * endian we have to byte swap that integer (r_type).
>>   */
>>  #define      Elf_Sxword                      Elf64_Sxword
>>  #define      ELF_R_NXTTYPE_64_P(r_type)      ((((r_type) >> 8) & 0xff) == 
>> R_TYPE(64))
>> @@ -83,7 +83,7 @@ void _rtld_relocate_nonplt_self(Elf_Dyn
>>  #undef ELF_R_SYM
>>  #undef ELF_R_TYPE
>>  #define ELF_R_SYM(r_info)            ((r_info) & 0xffffffff)
>> -#define ELF_R_TYPE(r_info)           bswap32((r_info) >> 32)
>> +#define ELF_R_TYPE(r_info)           bswap32(((r_info) >> 32))
>>  #endif
>>  #else
>>  #define      ELF_R_NXTTYPE_64_P(r_type)      (0)
>>
>
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to