This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
Re: [PATCH 0/2] nptl: Update struct pthread_unwind_buf
On 02/09/2018 03:13 PM, H.J. Lu wrote:
I built glibc master with gcc-8.0.1 -mcet -fcf-protection. Some object
files do get CET marker as expected. But static executable isn't:
I said static libraries. If I compile this code (based on the example
from the manual page) on Fedora rawhide:
#include <pthread.h>
#include <stdio.h>
static int done = 0;
static int cleanup_pop_arg = 0;
static int cnt = 0;
static void
cleanup_handler(void *arg)
{
printf("Called clean-up handler\n");
cnt = 0;
}
void *
thread_start(void *arg)
{
time_t start, curr;
printf("New thread started\n");
pthread_cleanup_push(cleanup_handler, NULL);
curr = start = time(NULL);
while (!done) {
pthread_testcancel(); /* A cancellation point */
if (curr < time(NULL)) {
curr = time(NULL);
printf("cnt = %d\n", cnt); /* A cancellation point */
cnt++;
}
}
pthread_cleanup_pop(cleanup_pop_arg);
return NULL;
}
the small jump buffer is used:
0000000000000030 <thread_start>:
30: f3 0f 1e fa endbr64
34: 53 push %rbx
35: bf 00 00 00 00 mov $0x0,%edi
36: R_X86_64_32 .rodata.str1.1+0x18
3a: 48 83 ec 70 sub $0x70,%rsp
3e: e8 00 00 00 00 callq 43 <thread_start+0x13>
3f: R_X86_64_PC32 puts-0x4
43: 31 f6 xor %esi,%esi
45: 48 89 e7 mov %rsp,%rdi
48: e8 00 00 00 00 callq 4d <thread_start+0x1d>
49: R_X86_64_PC32 __sigsetjmp-0x4
4d: f3 0f 1e fa endbr64
51: 85 c0 test %eax,%eax
53: 75 51 jne a6 <thread_start+0x76>
55: 48 89 e7 mov %rsp,%rdi
58: e8 00 00 00 00 callq 5d <thread_start+0x2d>
59: R_X86_64_PC32 __pthread_register_cancel-0x4
And it looks to me that readelf says the object file is compatible with CET:
Displaying notes found in: .note.gnu.property
Owner Data size Description
GNU 0x00000010 NT_GNU_PROPERTY_TYPE_0
Properties: x86 feature: IBT, SHSTK
Thanks,
Florian