S/390: Get rid of assembler warning value truncated.

Stefan Liebler stli@linux.vnet.ibm.com
Fri Nov 21 15:42:00 GMT 2014


Hi Andreas,

On 11/20/2014 05:43 PM, Andreas Schwab wrote:> Stefan Liebler 
<stli@linux.vnet.ibm.com> writes:
 > This is only equivalent if _dl_start - 1b is always negative.
 >
 > Andreas.
 >

Yes you are right. Thanks.
The function elf_machine_load_address (void) is inlined in _dl_start,
thus (_dl_start - 1b) is negative. If it wouldn´t be inlined and would 
be located after elf_machine_load_address, this is not correct.

But truncating the expression (in this case: 0xffffffff7fffffea) by 
anding it with 0x00000000ffffffff, the resulting value isn´t changed 
regardless of (_dl_start - 1b) is positive or negative, but the 
assembler does not warn about truncating the value.

Bye
Stefan

---
2014-11-21  Stefan Liebler  <stli@linux.vnet.ibm.com>

	sysdeps/s390/s390-32/dl-machine.h (elf_machine_load_address):
	Truncating assembler expression to a .long expression.
-------------- next part --------------
diff --git a/sysdeps/s390/s390-32/dl-machine.h b/sysdeps/s390/s390-32/dl-machine.h
index 6780405..72fb7fe 100644
--- a/sysdeps/s390/s390-32/dl-machine.h
+++ b/sysdeps/s390/s390-32/dl-machine.h
@@ -72,7 +72,7 @@ elf_machine_load_address (void)
 
   asm( "   bras  1,2f\n"
        "1: .long _GLOBAL_OFFSET_TABLE_ - 1b\n"
-       "   .long _dl_start - 1b - 0x80000000\n"
+       "   .long (_dl_start - 1b - 0x80000000) & 0x00000000ffffffff\n"
        "2: l     %0,4(1)\n"
        "   ar    %0,1\n"
        "   al    1,0(1)\n"


More information about the Libc-alpha mailing list