[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:56:22 AEST 2018


On Monday, 10 September 2018 11:43:30 AM AEST Rashmica Gupta wrote:
> On Mon, 2018-09-10 at 11:33 +1000, Alistair Popple wrote:
> > 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
> > 
> 
> interesting... I don't get this... How are you building this? 

Just in the standard way for x86_64. Although you're right - ram_instructions
isn't defined as static so it should build.

> > 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.
> > 
> 
> Will do that :)

Would still prefer it done this way though. Patches 1-12 look like some pretty
solid clean-ups/bugfixes so I will likely merge those as is. Thanks!

> > - Alistair
> 




More information about the Pdbg mailing list