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