gprofng: fix build with -mx32
authorVladimir Mezentsev <vladimir.mezentsev@oracle.com>
Thu, 26 May 2022 19:59:19 +0000 (12:59 -0700)
committerVladimir Mezentsev <vladimir.mezentsev@oracle.com>
Fri, 27 May 2022 06:27:50 +0000 (23:27 -0700)
gprofng/ChangeLog
2022-05-26  Vladimir Mezentsev  <vladimir.mezentsev@oracle.com>

PR gprofng/28983
* libcollector/libcol_util.h (__collector_getsp, __collector_getfp,
__collector_getpc): Adapt for build with -mx32
* libcollector/heaptrace.c: Fix -Wpointer-to-int-cast warnings.
* libcollector/hwprofile.h: Likewise.
* libcollector/mmaptrace.c: Likewise.
* libcollector/synctrace.c: Likewise.
* libcollector/unwind.c: Likewise.

gprofng/libcollector/heaptrace.c
gprofng/libcollector/hwprofile.h
gprofng/libcollector/libcol_util.h
gprofng/libcollector/mmaptrace.c
gprofng/libcollector/synctrace.c
gprofng/libcollector/unwind.c

index 470a269064fdfd1a152ba045ff83ed5b91225eba..24e6d2642ec4baca02b68c4b5491b07d456176e2 100644 (file)
@@ -298,8 +298,7 @@ malloc (size_t size)
   hpacket.comm.tstamp = gethrtime ();
   hpacket.mtype = MALLOC_TRACE;
   hpacket.size = (Size_type) size;
-  hpacket.vaddr = (Vaddr_type) ret;
-  hpacket.ovaddr = (Vaddr_type) 0;
+  hpacket.vaddr = (intptr_t) ret;
   hpacket.comm.frinfo = collector_interface->getFrameInfo (heap_hndl, hpacket.comm.tstamp, FRINFO_FROM_STACK, &hpacket);
   collector_interface->writeDataRecord (heap_hndl, (Common_packet*) & hpacket);
   POP_REENTRANCE (guard);
@@ -338,9 +337,7 @@ free (void *ptr)
   hpacket.comm.tsize = sizeof ( Heap_packet);
   hpacket.comm.tstamp = ts;
   hpacket.mtype = FREE_TRACE;
-  hpacket.size = (Size_type) 0;
-  hpacket.vaddr = (Vaddr_type) ptr;
-  hpacket.ovaddr = (Vaddr_type) 0;
+  hpacket.vaddr = (intptr_t) ptr;
   hpacket.comm.frinfo = collector_interface->getFrameInfo (heap_hndl, hpacket.comm.tstamp, FRINFO_FROM_STACK, &hpacket);
   collector_interface->writeDataRecord (heap_hndl, (Common_packet*) & hpacket);
   POP_REENTRANCE (guard);
@@ -378,8 +375,7 @@ realloc (void *ptr, size_t size)
   hpacket.comm.tstamp = ts;
   hpacket.mtype = REALLOC_TRACE;
   hpacket.size = (Size_type) size;
-  hpacket.vaddr = (Vaddr_type) ret;
-  hpacket.ovaddr = (Vaddr_type) ptr;
+  hpacket.vaddr = (intptr_t) ret;
   hpacket.comm.frinfo = collector_interface->getFrameInfo (heap_hndl, hpacket.comm.tstamp, FRINFO_FROM_STACK, &hpacket);
   collector_interface->writeDataRecord (heap_hndl, (Common_packet*) & hpacket);
   POP_REENTRANCE (guard);
@@ -407,8 +403,7 @@ memalign (size_t align, size_t size)
   hpacket.comm.tstamp = gethrtime ();
   hpacket.mtype = MALLOC_TRACE;
   hpacket.size = (Size_type) size;
-  hpacket.vaddr = (Vaddr_type) ret;
-  hpacket.ovaddr = (Vaddr_type) 0;
+  hpacket.vaddr = (intptr_t) ret;
   hpacket.comm.frinfo = collector_interface->getFrameInfo (heap_hndl, hpacket.comm.tstamp, FRINFO_FROM_STACK, &hpacket);
   collector_interface->writeDataRecord (heap_hndl, (Common_packet*) & hpacket);
   POP_REENTRANCE (guard);
@@ -437,8 +432,7 @@ valloc (size_t size)
   hpacket.comm.tstamp = gethrtime ();
   hpacket.mtype = MALLOC_TRACE;
   hpacket.size = (Size_type) size;
-  hpacket.vaddr = (Vaddr_type) ret;
-  hpacket.ovaddr = (Vaddr_type) 0;
+  hpacket.vaddr = (intptr_t) ret;
   hpacket.comm.frinfo = collector_interface->getFrameInfo (heap_hndl, hpacket.comm.tstamp, FRINFO_FROM_STACK, &hpacket);
   collector_interface->writeDataRecord (heap_hndl, (Common_packet*) & hpacket);
   POP_REENTRANCE (guard);
@@ -470,8 +464,7 @@ calloc (size_t size, size_t esize)
   hpacket.comm.tstamp = gethrtime ();
   hpacket.mtype = MALLOC_TRACE;
   hpacket.size = (Size_type) (size * esize);
-  hpacket.vaddr = (Vaddr_type) ret;
-  hpacket.ovaddr = (Vaddr_type) 0;
+  hpacket.vaddr = (intptr_t) ret;
   hpacket.comm.frinfo = collector_interface->getFrameInfo (heap_hndl, hpacket.comm.tstamp, FRINFO_FROM_STACK, &hpacket);
   collector_interface->writeDataRecord (heap_hndl, (Common_packet*) & hpacket);
   POP_REENTRANCE (guard);
@@ -494,8 +487,7 @@ __collector_heap_record (int mtype, size_t size, void *vaddr)
   hpacket.comm.tstamp = gethrtime ();
   hpacket.mtype = mtype;
   hpacket.size = (Size_type) size;
-  hpacket.vaddr = (Vaddr_type) vaddr;
-  hpacket.ovaddr = (Vaddr_type) 0;
+  hpacket.vaddr = (intptr_t) vaddr;
   hpacket.comm.frinfo = collector_interface->getFrameInfo (heap_hndl, hpacket.comm.tstamp, FRINFO_FROM_STACK, &hpacket);
   collector_interface->writeDataRecord (heap_hndl, (Common_packet*) & hpacket);
   POP_REENTRANCE (guard);
index 4d01bf17694123442f973887442740a0aae464d7..a234b78be56eb0a0977a64ab55b6c4916bc1f0c4 100644 (file)
@@ -72,7 +72,7 @@ typedef struct MHwcntr_packet
 #define CONTEXT_SP REG_ESP
 #endif /* WSIZE() */
 #define SETFUNCTIONCONTEXT(ucp,funcp) \
-    (ucp)->uc_mcontext.gregs[CONTEXT_PC] = (greg_t)(funcp); \
+    (ucp)->uc_mcontext.gregs[CONTEXT_PC] = (intptr_t)(funcp); \
     (ucp)->uc_mcontext.gregs[CONTEXT_SP] = 0; \
     (ucp)->uc_mcontext.gregs[CONTEXT_FP] = 0;
 
index 4384d47df5cda4dcda9821834119f24f0ab4104e..e13a02ea6d772cb02313b3f3f38d246af6bcb2e6 100644 (file)
@@ -133,6 +133,7 @@ __collector_dec_32 (volatile uint32_t *ptr)
                       : // "=m" (*ptr)    // output
                       : "m" (*ptr)); // input
 }
+
 /**
  * This function subtrackts the value "off" of the value stored in target
  * to occur in an atomic manner, and returns new value stored in target.
@@ -148,6 +149,7 @@ __collector_subget_32 (uint32_t *ptr, uint32_t off)
                       );
   return (r - offset);
 }
+
 /**
  * This function returns the value of the stack pointer register
  */
@@ -155,14 +157,15 @@ static __attribute__ ((always_inline)) inline void *
 __collector_getsp ()
 {
   void *r;
-#if WSIZE(64)
-  __asm__ __volatile__("movq %%rsp, %0"
-#else
+#if WSIZE(32) || defined(__ILP32__)
   __asm__ __volatile__("movl %%esp, %0"
-#endif
+#else
+  __asm__ __volatile__("movq %%rsp, %0"
+#endif 
          : "=r" (r)); // output
   return r;
 }
+
 /**
  * This function returns the value of the frame pointer register
  */
@@ -170,14 +173,15 @@ static __attribute__ ((always_inline)) inline void *
 __collector_getfp ()
 {
   void *r;
-#if WSIZE(64)
-  __asm__ __volatile__("movq %%rbp, %0"
-#else
+#if WSIZE(32) || defined(__ILP32__)
   __asm__ __volatile__("movl %%ebp, %0"
+#else
+  __asm__ __volatile__("movq %%rbp, %0"
 #endif
          : "=r" (r)); // output
   return r;
 }
+
 /**
  * This function returns the value of the processor counter register
  */
@@ -185,15 +189,12 @@ static __attribute__ ((always_inline)) inline void *
 __collector_getpc ()
 {
   void *r;
-  __asm__ __volatile__(
-#if WSIZE(32)
-         "     call  1f \n"
-                      "1: popl  %0 \n"
+#if defined(__x86_64)
+  __asm__ __volatile__("lea (%%rip), %0" : "=r" (r));
 #else
-         "     call  1f \n"
-                      "1: popq  %0 \n"
+  __asm__ __volatile__("call  1f \n"
+                      "1: popl  %0" : "=r" (r));
 #endif
-         : "=r" (r)); // output
   return r;
 }
 
@@ -258,7 +259,7 @@ static __attribute__ ((always_inline)) inline void *
 __collector_cas_ptr (void *mem, void *cmp, void *new)
 {
   void *r;
-#if WSIZE(32)
+#if WSIZE(32) || defined(__ILP32__)
   r = (void *) __collector_cas_32 ((volatile uint32_t *)mem, (uint32_t) cmp, (uint32_t)new);
 #else
   __asm__ __volatile__("lock; cmpxchgq %2, (%1)"
index bf3294d484375137cd73fc5b68950ccaef40f0b3..ba5c9129f4c3c1a72e7475173cb22f8d9bd7e1fe 100644 (file)
@@ -982,7 +982,7 @@ process_vsyscall_page ()
       if (ap->a_type == AT_SYSINFO_EHDR)
        {
          // newer Linuxes do not have a_ptr field, they just have a_val
-         ehdr = (ELF_EHDR*) ap->a_un.a_val;
+         ehdr = (ELF_EHDR*)(intptr_t) ap->a_un.a_val;
          if (ehdr != NULL)
            break;
        }
index 969c681d842c5cc0f39785146450ea3b03349f33..492ef9993f70a0797f1cbaf2c8481d3dfc476e5a 100644 (file)
@@ -707,11 +707,11 @@ __collector_jsync_end (hrtime_t reqt, void *object)
   if (grnt - reqt >= sync_threshold)
     {
       Sync_packet spacket;
-      collector_memset (&spacket, 0, sizeof ( Sync_packet));
-      spacket.comm.tsize = sizeof ( Sync_packet);
+      collector_memset (&spacket, 0, sizeof (Sync_packet));
+      spacket.comm.tsize = sizeof (Sync_packet);
       spacket.comm.tstamp = grnt;
       spacket.requested = reqt;
-      spacket.objp = (Vaddr_type) object;
+      spacket.objp = (intptr_t) object;
       spacket.comm.frinfo = collector_interface->getFrameInfo (sync_hndl, spacket.comm.tstamp, FRINFO_FROM_STACK_ARG, &spacket);
       collector_interface->writeDataRecord (sync_hndl, (Common_packet*) & spacket);
     }
@@ -740,11 +740,11 @@ pthread_mutex_lock (pthread_mutex_t *mp)
   if (grnt - reqt >= sync_threshold)
     {
       Sync_packet spacket;
-      collector_memset (&spacket, 0, sizeof ( Sync_packet));
-      spacket.comm.tsize = sizeof ( Sync_packet);
+      collector_memset (&spacket, 0, sizeof (Sync_packet));
+      spacket.comm.tsize = sizeof (Sync_packet);
       spacket.comm.tstamp = grnt;
       spacket.requested = reqt;
-      spacket.objp = (Vaddr_type) mp;
+      spacket.objp = (intptr_t) mp;
       spacket.comm.frinfo = collector_interface->getFrameInfo (sync_hndl, spacket.comm.tstamp, FRINFO_FROM_STACK, &spacket);
       collector_interface->writeDataRecord (sync_hndl, (Common_packet*) & spacket);
     }
@@ -831,11 +831,11 @@ __collector_pthread_cond_wait_symver (int(real_pthread_cond_wait) (), pthread_co
   if (grnt - reqt >= sync_threshold)
     {
       Sync_packet spacket;
-      collector_memset (&spacket, 0, sizeof ( Sync_packet));
-      spacket.comm.tsize = sizeof ( Sync_packet);
+      collector_memset (&spacket, 0, sizeof (Sync_packet));
+      spacket.comm.tsize = sizeof (Sync_packet);
       spacket.comm.tstamp = grnt;
       spacket.requested = reqt;
-      spacket.objp = (Vaddr_type) mutex;
+      spacket.objp = (intptr_t) mutex;
       spacket.comm.frinfo = collector_interface->getFrameInfo (sync_hndl, spacket.comm.tstamp, FRINFO_FROM_STACK_ARG, &spacket);
       collector_interface->writeDataRecord (sync_hndl, (Common_packet*) & spacket);
     }
@@ -938,7 +938,7 @@ __collector_pthread_cond_timedwait_symver (int(real_pthread_cond_timedwait) (),
       spacket.comm.tsize = sizeof ( Sync_packet);
       spacket.comm.tstamp = grnt;
       spacket.requested = reqt;
-      spacket.objp = (Vaddr_type) mutex;
+      spacket.objp = (intptr_t) mutex;
       spacket.comm.frinfo = collector_interface->getFrameInfo (sync_hndl, spacket.comm.tstamp, FRINFO_FROM_STACK_ARG, &spacket);
       collector_interface->writeDataRecord (sync_hndl, (Common_packet*) & spacket);
     }
@@ -1047,7 +1047,7 @@ sem_wait (sem_t *sp)
       spacket.comm.tsize = sizeof ( Sync_packet);
       spacket.comm.tstamp = grnt;
       spacket.requested = reqt;
-      spacket.objp = (Vaddr_type) sp;
+      spacket.objp = (intptr_t) sp;
 
 #if ARCH(Intel) && WSIZE(32)
       spacket.comm.frinfo = collector_interface->getFrameInfo (sync_hndl, spacket.comm.tstamp, FRINFO_FROM_STACK_ARG, &spacket);
index f309c54bd335f1ef0624fddff43d7742edbaaa7f..119243788020e8f5bc71e571c2b25c4962d68988 100644 (file)
@@ -223,9 +223,9 @@ memory_error_func (int status ATTRIBUTE_UNUSED, bfd_vma addr ATTRIBUTE_UNUSED,
        { \
            context->uc_link = NULL; \
            void *sp = __collector_getsp(); \
-           GET_SP(context) = (greg_t)sp; \
-           GET_FP(context) = (greg_t)__collector_getfp(); \
-           GET_PC(context) = (greg_t)__collector_getpc(); \
+           GET_SP(context) = (intptr_t)sp; \
+           GET_FP(context) = (intptr_t)__collector_getfp(); \
+           GET_PC(context) = (intptr_t)__collector_getpc(); \
            context->uc_stack.ss_sp = sp; \
            context->uc_stack.ss_size = 0x100000; \
        }