Allocating Dynamic Patch Space
Dynamic patch space allocation means that TotalView dynamically allocates patch space for code fragments. If you do not specify the size and location for this space, TotalView allocates 1 MB. TotalView creates this space using system calls.
TotalView allocates memory for read, write, and execute access in the addresses shown in the following table:
Platform | Address Range |
IBM AIX (-q32) | 0xEFF00000 - 0xEFFFFFFF |
IBM AIX (-q64) | 0x07f0000000000000 - 0x07ffffffffffffff |
NOTE >> You can allocate dynamic patch space only for the computers listed in this table.
If the default address range conflicts with your program, or you would like to change the size of the dynamically allocated patch space, you can change the following:
• Patch space base address by using the -patch_area_base command-line option.
• Patch space length by using the -patch_area_length command-line option.
Allocating Static Patch Space TotalView can statically allocate patch space if you add a specially named array to your program. When TotalView needs to use patch space, it uses the space created for this array.
You can include, for example, a 1 MB statically allocated patch space in your program by adding the TVDB_patch_base_address data object in a C module. Because this object must be 8-byte aligned, declare it as an array of doubles; for example:
/* 1 megabyte == size TV expects */
#define PATCH_LEN 0x100000
double TVDB_patch_base_address [PATCH_LEN / sizeof(double)]
If you need to use a static patch space size that differs from the 1 MB default, you must use assembler language. The following table shows sample assembler code for IBM AIX-Power and Blue Gene/Q:
Platform | Assembler Code |
IBM AIX-Power | .csect .data{RW}, 3 .globl TVDB_patch_base_address .globl TVDB_patch_end_address TVDB_patch_base_address: .space PATCH_SIZE TVDB_patch_end_address: |
Blue Gene/Q | .section .TVDB_patch_space,"awx" .globl TVDB_patch_base_address .globl TVDB_patch_end_address TVDB_patch_base_address: .space 1024*1024,0 TVDB_patch_end_address: .previous |
To use the static patch space assembler code:
1. Use an ASCII editor and place the assembler code into a file named tvdb_patch_space.s.
2. Replace the PATCH_SIZE tag with the decimal number of bytes you want. This value must be a multiple of 8.
3. Assemble the file into an object file by using a command such as:
cc -c tvdb_patch_space.s
4. Link the resulting tvdb_patch_space.o into your program.