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;



Reply via email to