Hi Ulrich, Sure. This is done.. The code is if (register_size (gdbarch, regno) == 8) memcpy (&buf, addr, 8); else buf = *addr; printf ("val in regno = %d via buf is %lld and *addr is %d, regsize = %d\n", regno, buf, *addr, register_size (gdbarch, regno)); rs6000_ptrace64 (PT_WRITE_GPR, pid, nr, 0, &buf); } in store_register (struct regcache *regcache, int regno)... The output is as shown below:- Reading symbols from /home/XYZ/gdb_tests... (gdb) b main Breakpoint 1 at 0x100007dc: file /home/XYZ/gdb_tests.c, line 22. (gdb) r Starting program: /home/XYZ/gdb_tests BFD: /usr/lib/libc.a(/usr/lib/libc.a(shr_64.o)): wrong auxtype 0xff for storage class 0x2 BFD: /usr/lib/libc.a(/usr/lib/libc.a(shr_64.o)): wrong auxtype 0xff for storage class 0x6b Breakpoint 1, main (argc=1, argv=0xffffffffffffad0) at /home/aditya/gdb_tests.c:22 warning: Source file is more recent than executable. 22 printf("Hi Bangalore %x\n",num2print(27, 16, 13, 9.9)); (gdb) call num2print $1 = {int (long, float, int, int)} 0x1000006a0 (gdb) call num2print (2, 3, 4, 6) val in regno = 3 via buf is 2 and *addr is 0, regsize = 8 val in regno = 4 via buf is 4629700416936869888 and *addr is 1077936128, regsize = 8 val in regno = 5 via buf is 17179869184 and *addr is 4, regsize = 8 val in regno = 6 via buf is 25769803776 and *addr is 6, regsize = 8.... R2 R3.000000 R0 R0.000000 $2 = 2 I have cut short those print statements.. Full output is below Have a nice day ahead.. Thanks, Aditya.. -------------------- 22 printf("Hi Bangalore %x\n",num2print(27, 16, 13, 9.9)); (gdb) call num2print $1 = {int (long, float, int, int)} 0x1000006a0 (gdb) call num2print (2, 3, 4, 6) val in regno = 3 via buf is 2 and *addr is 0, regsize = 8 val in regno = 4 via buf is 4629700416936869888 and *addr is 1077936128, regsize = 8 val in regno = 5 via buf is 17179869184 and *addr is 4, regsize = 8 val in regno = 6 via buf is 25769803776 and *addr is 6, regsize = 8 val in regno = 1 via buf is 1152921504606845280 and *addr is 268435455, regsize = 8 val in regno = 67 via buf is 4294968448 and *addr is 1, regsize = 8 val in regno = 0 via buf is 4294968564 and *addr is 1, regsize = 8 val in regno = 1 via buf is 1152921504606845280 and *addr is 268435455, regsize = 8 val in regno = 2 via buf is 4563403472 and *addr is 1, regsize = 8 val in regno = 3 via buf is 2 and *addr is 0, regsize = 8 val in regno = 4 via buf is 4629700416936869888 and *addr is 1077936128, regsize = 8 val in regno = 5 via buf is 17179869184 and *addr is 4, regsize = 8 val in regno = 6 via buf is 25769803776 and *addr is 6, regsize = 8 val in regno = 7 via buf is 1152921504606846944 and *addr is 268435455, regsize = 8 val in regno = 8 via buf is 0 and *addr is 0, regsize = 8 val in regno = 9 via buf is 1 and *addr is 0, regsize = 8 val in regno = 10 via buf is 0 and *addr is 0, regsize = 8 val in regno = 11 via buf is 4144 and *addr is 0, regsize = 8 val in regno = 12 via buf is -1080857313497259912 and *addr is -251656704, regsize = 8 val in regno = 13 via buf is -4982089500409860083 and *addr is -1159983106, regsize = 8 val in regno = 14 via buf is 1 and *addr is 0, regsize = 8 val in regno = 15 via buf is 1152921504606845648 and *addr is 268435455, regsize = 8 val in regno = 16 via buf is 1152921504606845664 and *addr is 268435455, regsize = 8 val in regno = 17 via buf is 576495942044221440 and *addr is 134225921, regsize = 8 val in regno = 18 via buf is 1152921504606846672 and *addr is 268435455, regsize = 8 val in regno = 19 via buf is 720575940110904384 and *addr is 167772159, regsize = 8 val in regno = 20 via buf is -4982089500409860083 and *addr is -1159983106, regsize = 8 val in regno = 21 via buf is -4982089500409860083 and *addr is -1159983106, regsize = 8 val in regno = 22 via buf is -4982089500409860083 and *addr is -1159983106, regsize = 8 val in regno = 23 via buf is -4982089500409860083 and *addr is -1159983106, regsize = 8 val in regno = 24 via buf is -4982089500409860083 and *addr is -1159983106, regsize = 8 val in regno = 25 via buf is -4982089500409860083 and *addr is -1159983106, regsize = 8 val in regno = 26 via buf is -4982089500409860083 and *addr is -1159983106, regsize = 8 val in regno = 27 via buf is -4982089500409860083 and *addr is -1159983106, regsize = 8 val in regno = 28 via buf is -4982089500409860083 and *addr is -1159983106, regsize = 8 val in regno = 29 via buf is -4982089500409860083 and *addr is -1159983106, regsize = 8 val in regno = 30 via buf is -4982089500409860083 and *addr is -1159983106, regsize = 8 val in regno = 31 via buf is 1152921504606845408 and *addr is 268435455, regsize = 8 val in regno = 64 via buf is 4294969308 and *addr is 1, regsize = 8 val in regno = 65 via buf is -6917529027640897486 and *addr is -1610612736, regsize = 8 val in regno = 66 via buf is 1109656104 and *addr is 1109656104, regsize = 4 val in regno = 67 via buf is 4294968448 and *addr is 1, regsize = 8 val in regno = 68 via buf is 0 and *addr is 0, regsize = 8 val in regno = 69 via buf is 0 and *addr is 0, regsize = 4 val in regno = 70 via buf is 0 and *addr is 0, regsize = 4 val in regno = 64 via buf is 4294968992 and *addr is 1, regsize = 8 R2 R3.000000 R0 R0.000000 val in regno = 0 via buf is 4294968564 and *addr is 1, regsize = 8 val in regno = 1 via buf is 1152921504606845408 and *addr is 268435455, regsize = 8 val in regno = 2 via buf is 4563403472 and *addr is 1, regsize = 8 val in regno = 3 via buf is 1 and *addr is 0, regsize = 8 val in regno = 4 via buf is 1152921504606845648 and *addr is 268435455, regsize = 8 val in regno = 5 via buf is 1152921504606845664 and *addr is 268435455, regsize = 8 val in regno = 6 via buf is -9223372036854722510 and *addr is -2147483648, regsize = 8 val in regno = 7 via buf is 1152921504606846944 and *addr is 268435455, regsize = 8 val in regno = 8 via buf is 0 and *addr is 0, regsize = 8 val in regno = 9 via buf is 1 and *addr is 0, regsize = 8 val in regno = 10 via buf is 0 and *addr is 0, regsize = 8 val in regno = 11 via buf is 4144 and *addr is 0, regsize = 8 val in regno = 12 via buf is -1080857313497259912 and *addr is -251656704, regsize = 8 val in regno = 13 via buf is -4982089500409860083 and *addr is -1159983106, regsize = 8 val in regno = 14 via buf is 1 and *addr is 0, regsize = 8 val in regno = 15 via buf is 1152921504606845648 and *addr is 268435455, regsize = 8 val in regno = 16 via buf is 1152921504606845664 and *addr is 268435455, regsize = 8 val in regno = 17 via buf is 576495942044221440 and *addr is 134225921, regsize = 8 val in regno = 18 via buf is 1152921504606846672 and *addr is 268435455, regsize = 8 val in regno = 19 via buf is 720575940110904384 and *addr is 167772159, regsize = 8 val in regno = 20 via buf is -4982089500409860083 and *addr is -1159983106, regsize = 8 val in regno = 21 via buf is -4982089500409860083 and *addr is -1159983106, regsize = 8 val in regno = 22 via buf is -4982089500409860083 and *addr is -1159983106, regsize = 8 val in regno = 23 via buf is -4982089500409860083 and *addr is -1159983106, regsize = 8 val in regno = 24 via buf is -4982089500409860083 and *addr is -1159983106, regsize = 8 val in regno = 25 via buf is -4982089500409860083 and *addr is -1159983106, regsize = 8 val in regno = 26 via buf is -4982089500409860083 and *addr is -1159983106, regsize = 8 val in regno = 27 via buf is -4982089500409860083 and *addr is -1159983106, regsize = 8 val in regno = 28 via buf is -4982089500409860083 and *addr is -1159983106, regsize = 8 val in regno = 29 via buf is -4982089500409860083 and *addr is -1159983106, regsize = 8 val in regno = 30 via buf is -4982089500409860083 and *addr is -1159983106, regsize = 8 val in regno = 31 via buf is 1152921504606845408 and *addr is 268435455, regsize = 8 val in regno = 64 via buf is 4294969308 and *addr is 1, regsize = 8 val in regno = 65 via buf is -6917529027640897486 and *addr is -1610612736, regsize = 8 val in regno = 66 via buf is 1109656104 and *addr is 1109656104, regsize = 4 val in regno = 67 via buf is 4294968564 and *addr is 1, regsize = 8 val in regno = 68 via buf is 0 and *addr is 0, regsize = 8 val in regno = 69 via buf is 0 and *addr is 0, regsize = 4 val in regno = 70 via buf is 0 and *addr is 0, regsize = 4 $2 = 2 (gdb) val = 0 in regno 51 val = 0 in regno 52 val = 0 in regno 52 val = 0 in regno 53 val = 0 in regno 53 val = 0 in regno 54 val = 0 in regno 54 val = 0 in regno 55 val = 0 in regno 55 val = 0 in regno 56 val = 0 in regno 56 val = 0 in regno 57 val = 0 in regno 57 val = 0 in regno 58 val = 0 in regno 58 val = 0 in regno 59 val = 0 in regno 59 val = 0 in regno 60 val = 0 in regno 60 val = 0 in regno 61 val = 0 in regno 61 val = 0 in regno 62 val = 0 in regno 62 (gdb) (gdb) ________________________________ From: Ulrich Weigand Sent: 15 November 2022 00:13 To: gdb-patches@sourceware.org ; Aditya Kamath1 ; simon.marchi@efficios.com Cc: Sangamesh Mallayya ; Sanket Rathi Subject: Re: [PATCH] Fix call functions command bug in 64-bit programs for AIX Aditya Kamath1 wrote: > { > /* PT_WRITE_GPR requires the buffer parameter to point to an 8-byte > area, even if the register is really only 32 bits. */ > long long buf; > if (register_size (gdbarch, regno) == 8) > memcpy (&buf, addr, 8); > else > buf = *addr; > printf ("val in regno = %d via buf is %d and *addr is %d\n", regno, bu f, *addr); This doesn't work - buf is a "long long", so you need to use "%lld" to print it, not just "%d". That's why the output for "buf" was wrong. Also, please print the result of "register_size (gdbarch, regno)" as well, so we know for sure which part of the if condition is actually taken. Bye, Ulrich