1. A method of collecting program trace information of program code executed by a processor, the method comprising: computing a program call signature at program calls and returns within the program code that uniquely identifies a call and return history extending to a currently executing instruction; specifying a root instruction at which to collect the program call signature by storing an address of the root instruction in a root instruction register of the processor; during execution of the program code, detecting that the execution has reached the root instruction; and responsive to detecting that the execution has reached the root instruction, storing a current value of the program call signature in a call signature register and commencing capture of program trace information in a branch history buffer as execution of the program code proceeds.