Scott Zhong wrote:
cat t.cpp && aCC -V +DD32 t.cpp && file a.out && ./a.out
#include <stdio.h>
int main()
{
printf("%s", (char*)(void*)(0x0 - 1));
FYI: a SIGSEGV on this code doesn't necessarily tell us that (0x0 - 1)
isn't a valid address. It might be valid and there might be a non-NUL
byte there but 0x0 or 0x1 might be the invalid one.
But it does look like (0x0 - 1) is invalid and gives a SIGSEGV on all
HP-UX platforms (at least the four we tested), including the 32-bit
MPAS model.
Thanks
Martin
return 0;
}
aCC: HP ANSI C++ B3910B A.03.63
92453-07 linker command s800.sgs ld PA64 B.11.45 REL 050725
/usr/ccs/bin/ld: 92453-07 linker linker ld B.11.45 050725
a.out: PA-RISC1.1 shared executable dynamically linked -not
stripped dynamically linked
Segmentation fault (core dumped)
aCC -V +DD64 t.cpp && file a.out && ./a.out
aCC: HP ANSI C++ B3910B A.03.63
92453-07 linker command s800.sgs ld PA64 B.11.45 REL 050725
a.out: ELF-64 executable object file - PA-RISC 2.0 (LP64)
Segmentation fault (core dumped)
cat t.cpp && aCC +DD32 t.cpp && file a.out && ./a.out
#include <stdio.h>
int main()
{
printf ("%s", (char*)(void*)(0x0 - 1));
return 0;
}
a.out: ELF-32 executable object file - IA64
Segmentation fault (core dumped)
cat t.cpp && aCC +DD64 t.cpp && file a.out && ./a.out
#include <stdio.h>
int main()
{
printf ("%s", (char*)(void*)(0x0 - 1));
return 0;
}
a.out: ELF-64 executable object file - IA64
Segmentation fault (core dumped)
-----Original Message-----
From: Martin Sebor [mailto:[EMAIL PROTECTED]
Sent: Tuesday, January 29, 2008 3:07 PM
To: [email protected]
Subject: Re: [PATCH] STDCXX-705
Scott Zhong wrote:
I tried to access the red zone and a seg fault didn't occur
Odd.
but when
trying to access the kernel address space it does cause a seg fault.
What about the 32-bit address spaces, especially in the MPAS
model where the stack (supposedly) starts at 0xffffffff? And
what about HP-UX on PA-RISC?
Martin
I
propose to change 0.printf.cpp to the following:
Index: 0.printf.cpp
===================================================================
--- 0.printf.cpp (revision 616446)
+++ 0.printf.cpp (working copy)
@@ -165,15 +165,7 @@
++addr;
}
else {
-
-#ifndef _RWSTD_OS_HP_UX
- // the first page is usually unmapped
- addr = (char*)32;
-#else
- // the first page on HP-UX is readable, this might work
- addr = (char*)(void*)bad_address + 1024 * 1024 * 16;
-#endif // _RWSTD_OS_HP_UX
-
+ addr = (char*)(void*)(0x0 - 1);
}
return addr;