1. A method of collecting program trace information of program code executed by a processor, the method comprising: selecting a trace capture mode of the processor from a first operating mode and a second operating mode; 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; 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; and responsive to the selecting having selected the first operating mode, specifying a particular value of the program call signature at which to commence the capture of the program trace information, wherein the detecting further detects that a current value of the program call signature matches the particular value of the program call signature when the execution has reached the root instruction, and wherein the commencing capture of program trace information is performed responsive to detecting that the execution has reached the root instruction and that the current value of the program call signature matches the particular value of the program call signature, and wherein responsive to the selecting having selected the second operating mode, the commencing capture is performed responsive to detecting that the execution has reached the root instruction independent of the current value of the program call signature.