[Pdbg] [PATCH v2 13/16] pdbg/gdbserver: Add in basic skeleton for a gdbserver on p8

Alistair Popple alistair at popple.id.au
Mon Sep 10 11:33:52 AEST 2018


Hi Rashmica,

I get the following error trying to build this series:

make --no-print-directory all-am
  CCLD     pdbg
src/pdbg-pdbgproxy.o: In function `get_gprs':
/home/alistair/Source/pdbg/src/pdbgproxy.c:109: undefined reference to `mtspr'
/home/alistair/Source/pdbg/src/pdbgproxy.c:112: undefined reference to `ram_instructions'
/usr/bin/ld: .libs/pdbg: hidden symbol `ram_instructions' isn't defined
/usr/bin/ld: final link failed: Bad value
collect2: error: ld returned 1 exit status
Makefile:1105: recipe for target 'pdbg' failed
make[1]: *** [pdbg] Error 1
Makefile:792: recipe for target 'all' failed
make: *** [all] Error 2

Which is because we don't export ram_instructions from libpdbg. We only use it
here though:

> +/* 32 registers represented as 16 char hex numbers with null-termination */
> +#define REG_DATA_SIZE (32*16+1)
> +static void get_gprs(uint64_t *stack, void *priv)
> +{
> +	char data[REG_DATA_SIZE] = "";
> +	uint64_t regs[32] = {0};
> +	uint64_t opcodes[32] = {0};
> +	int i;
> +
> +	for (i = 0; i < 32; i++) {
> +		opcodes[i] = mtspr(277, i);
> +	}
> +
> +	if(ram_instructions(thread_target, opcodes, regs, ARRAY_SIZE(opcodes), 0))
> +		PR_ERROR("Error reading gprs\n");
> +
> +	for (i = 0; i < 32; i++) {
> +		PR_INFO("r%d = 0x%016" PRIx64 "\n", i, regs[i]);
> +		snprintf(data + i*16, 17, "%016" PRIx64 , __builtin_bswap64(regs[i]));
> +	}
> +
> +	send_response(fd, data);
> +}

Nick recently added functionality to the library in ram_state_thread() to read
all the GPRs (and some other registers) so it would be best to call that here
instead of reimplementing it, which would also solve the build issue.

- Alistair


More information about the Pdbg mailing list