Hello, I'm hitting a strange issue with GCC while trying to wrap and mock snprintf() for unit testing purposes. I'm setting -fno-builtin and -fno-inline, but __builtin___snprintf_chk() is getting called instead of snprintf(). The net effect is that my __wrap__snprintf() never gets called. Do you have any advice on how to prevent object size checking builtins from being used, without setting a lower optimization level? I expected -fno-builtin to take care of it. Note that out of my whole multi-distro test bed, I've only observed this issue on Ubuntu 22.04, Ubuntu 20.04, and Fedora 36 Power 9. I don't have direct access to the test machines, but I spun up an Ubuntu 22.04 reproducer. It uses gcc version 11.2.0-19ubuntu1. A known working Fedora 36 x86_64 system uses gcc version 12.1.1 20220507. On that system, snprintf() (or more accurately __wrap_snprintf()) gets called as expected, instead of the builtin. There are also RHEL 7 machines in the testbed, so it works fine on older versions as well. Minimal reproducer: ``` # cat test.c #include <stdio.h> void func(const char *s) { char buf[16]; snprintf(buf, 16, "%s", s); printf("%s\n", buf); } int main(void) { func("hello world"); } # gcc -g -O2 -fno-builtin -fno-inline test.c -o test # gdb -q ./test Reading symbols from ./test... (gdb) b 5 Breakpoint 1 at 0x10a0: file test.c, line 9. (gdb) r Starting program: /root/git/pacemaker/test [Thread debugging using libthread_db enabled] Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1". Breakpoint 1, main () at test.c:9 9 { (gdb) s 10 func("hello world"); (gdb) func (s=s@entry=0x55555555600b "hello world") at test.c:3 3 { (gdb) 5 snprintf(buf, 16, "%s", s); (gdb) 0x00005555555551b9 in snprintf (__fmt=<optimized out>, __n=<optimized out>, __s=<optimized out>) at /usr/include/x86_64-linux-gnu/bits/stdio2.h:71 71 return __builtin___snprintf_chk (__s, __n, __USE_FORTIFY_LEVEL - 1, ``` Thank you. -- Regards, Reid Wahl (He/Him) Senior Software Engineer, Red Hat RHEL High Availability - Pacemaker