From c57562725d219c4249b82f4a4fb5aaeee3ae0d53 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Sat, 9 Jul 2016 15:00:22 -0400 Subject: [PATCH] Improve recording of IA64 stack data. Examination of the results from anole and gharial suggests that we're only managing to track the size of one of the two stacks of IA64 machines. Some googling gave the answer: on HPUX11, the register stack is reported as a page type I don't see in pstat.h on my HPUX10 box. Let's try testing for that. --- src/backend/storage/ipc/ipc.c | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/src/backend/storage/ipc/ipc.c b/src/backend/storage/ipc/ipc.c index 1b349e12db..9dda93f0bd 100644 --- a/src/backend/storage/ipc/ipc.c +++ b/src/backend/storage/ipc/ipc.c @@ -94,12 +94,14 @@ report_stack_size(void) #if defined(__hpux) /* HPUX: examine process's memory map with pstat_getprocvm() */ int targetpid = getpid(); - struct pst_vm_status buf; - int res; int ndx; for (ndx = 0;; ndx++) { + struct pst_vm_status buf; + const char *pagetype; + int res; + res = pstat_getprocvm(&buf, sizeof(buf), targetpid, ndx); if (res < 0) { @@ -108,13 +110,25 @@ report_stack_size(void) } if (res != 1) break; - if (buf.pst_type != PS_STACK) - continue; - fprintf(stderr, "%d: stack addr 0x%lx, length %ld, physical pages %ld\n", + switch (buf.pst_type) + { + case PS_STACK: + pagetype = "STACK"; + break; +#ifdef PS_RSESTACK + case PS_RSESTACK: + pagetype = "REGSTACK"; + break; +#endif + default: + continue; + } + fprintf(stderr, "%d: stack addr 0x%lx, length %ld, physical pages %ld, type %s\n", targetpid, buf.pst_vaddr, buf.pst_length, - buf.pst_phys_pages); + buf.pst_phys_pages, + pagetype); } #else /* non HPUX */ /* Otherwise: try to use pmap. No error if that doesn't work. */