PERF_SAMPLE_DATA_SRC | PERF_SAMPLE_IDENTIFIER | \
        PERF_SAMPLE_TRANSACTION | PERF_SAMPLE_PHYS_ADDR | \
        PERF_SAMPLE_REGS_INTR | PERF_SAMPLE_REGS_USER | \
-       PERF_SAMPLE_PERIOD)
+       PERF_SAMPLE_PERIOD | PERF_SAMPLE_CODE_PAGE_SIZE)
 
 #define PEBS_GP_REGS                   \
        ((1ULL << PERF_REG_X86_AX)    | \
 
        PERF_SAMPLE_AUX                         = 1U << 20,
        PERF_SAMPLE_CGROUP                      = 1U << 21,
        PERF_SAMPLE_DATA_PAGE_SIZE              = 1U << 22,
+       PERF_SAMPLE_CODE_PAGE_SIZE              = 1U << 23,
 
-       PERF_SAMPLE_MAX = 1U << 23,             /* non-ABI */
+       PERF_SAMPLE_MAX = 1U << 24,             /* non-ABI */
 
        __PERF_SAMPLE_CALLCHAIN_EARLY           = 1ULL << 63, /* non-ABI; internal use */
 };
         *      { u64                   size;
         *        char                  data[size]; } && PERF_SAMPLE_AUX
         *      { u64                   data_page_size;} && PERF_SAMPLE_DATA_PAGE_SIZE
+        *      { u64                   code_page_size;} && PERF_SAMPLE_CODE_PAGE_SIZE
         * };
         */
        PERF_RECORD_SAMPLE                      = 9,
 
        if (sample_type & PERF_SAMPLE_DATA_PAGE_SIZE)
                size += sizeof(data->data_page_size);
 
+       if (sample_type & PERF_SAMPLE_CODE_PAGE_SIZE)
+               size += sizeof(data->code_page_size);
+
        event->header_size = size;
 }
 
        if (sample_type & PERF_SAMPLE_DATA_PAGE_SIZE)
                perf_output_put(handle, data->data_page_size);
 
+       if (sample_type & PERF_SAMPLE_CODE_PAGE_SIZE)
+               perf_output_put(handle, data->code_page_size);
+
        if (sample_type & PERF_SAMPLE_AUX) {
                perf_output_put(handle, data->aux_size);
 
 
        __perf_event_header__init_id(header, data, event);
 
-       if (sample_type & PERF_SAMPLE_IP)
+       if (sample_type & (PERF_SAMPLE_IP | PERF_SAMPLE_CODE_PAGE_SIZE))
                data->ip = perf_instruction_pointer(regs);
 
        if (sample_type & PERF_SAMPLE_CALLCHAIN) {
        if (sample_type & PERF_SAMPLE_DATA_PAGE_SIZE)
                data->data_page_size = perf_get_page_size(data->addr);
 
+       if (sample_type & PERF_SAMPLE_CODE_PAGE_SIZE)
+               data->code_page_size = perf_get_page_size(data->ip);
+
        if (sample_type & PERF_SAMPLE_AUX) {
                u64 size;