+++ This bug was initially created as a clone of Bug #146093 +++ Testcase: #include <stdio.h> int main(void) { FILE *f; char a[100]; char *b; f=fopen("abc","r"); b=fgets(a,3,f); printf("b=%p\n",b); } On s390x with both 4.5.8-1 and 4.5.9-2.EL4, getting the following when running against the 32-bit version of the above. mmap(0x28b9e, 4294967298, PROT_NONE, MAP_FILE, 0, 0) = 0x77fd7000 mmap(0x49a330000013e8e4, 21474838530, PROT_NONE, 0x6 /* MAP_??? */|MAP_FIXED|MAP_ANONYMOUS|MAP_POPULATE|MAP_GROWSDOWN|0xc9a20400, 2147478920, 0) = 0x49a33000 mmap(0x49b6c00000004000, 12884903954, 0x138000, 0x6 /* MAP_??? */|MAP_FIXED|MAP_ANONYMOUS|MAP_POPULATE|MAP_GROWSDOWN|0xc9a20400, 2147478920, 0) = 0x49b6c000 mmap(0x49b70000000018e4, 12884901938, PROT_NONE, 0x6 /* MAP_??? */|MAP_FIXED|MAP_ANONYMOUS|MAP_POPULATE|MAP_GROWSDOWN|0xc9a20400, 2147478920, 0) = 0x49b70000 mmap(0x1000, 12884901922, PROT_NONE, MAP_FILE|MAP_NONBLOCK|MAP_DENYWRITE|0x49a20200, 0, 0xffffff2cfffe986c) = 0x77fd6000 mmap(0x1000, 12884901922, PROT_NONE, 0xc /* MAP_??? */|MAP_FIXED|0x4002c0, 1, 0x40030c00000000) = 0x77fff000 mmap(0x1000, 12884901922, PROT_NONE, 0x3 /* MAP_??? */, 4194876, 0x1300000012) = 0x77ffe000
s390x strace does not support tracing 32-bit processes and never has to my knowledge. If split 32-64 installs are common and there should be s390x strace64 and s390 (32-bit) strace on s390, we can do that. But it has never been requested by customers as the ppc64 case was. (I've removed the IT links since they refer only to x86_64.)
Makes sense to me.