c++linuxarmlock-freeoprofile

oprofile: what does "[vectors] (tgid:20712 range:0xffff0000-0xffff1000)" mean?


I profile my application using oprofile on an ARM Cortex-A8 and I notice a lot of samples with image name "[vectors] (tgid:20712 range:0xffff0000-0xffff1000)"

oprofile reports that this is responsible for 17% of my process time so hopefully someone can explain what this is. I've searched extensively and can't find an explanation.

I was thinking perhaps something to do with exception handling?


Solution

  • Linux uses the "high vectors" setting, which places the exception entry vectors at 0xffff0000 - thus all system calls, interrupts, faults, etc. will pass through this page.

    However, since the vectors page must always be present, The ARM kernel makes use of the otherwise wasted space in the rest of the page to house some user-accessible helper functions for a few things that would be otherwise difficult to implement in a portable way. Your process (most likely lower-level libraries) may well be making use of these too - since typical usage is to just call their fixed addresses directly there probably aren't any symbols to resolve for them.