Skip to content

building llvm compiler-rt(?) fails when compiler using fortify headers #45

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
nekopsykose opened this issue Dec 18, 2023 · 2 comments
Labels

Comments

@nekopsykose
Copy link
Contributor

nekopsykose commented Dec 18, 2023

FAILED: lib/builtins/CMakeFiles/clang_rt.builtins-i386.dir/eprintf.c.o 
/builddir/llvm-bootstrap-17.0.6/build/./bin/clang --target=x86_64-chimera-linux-musl -DVISIBILITY_HIDDEN  -Wformat -Werror=format-security -ftrivial-auto-var-init=zero -fstack-clash-protection -O2 -pipe -ffile-prefix-map=/builddir/llvm-bootstrap-17.0.6=. -fPIC -O3 -DNDEBUG -m32 -fno-lto -std=c11 -fno-builtin -fvisibility=hidden -fomit-frame-pointer -DCOMPILER_RT_HAS_FLOAT16 -MD -MT lib/builtins/CMakeFiles/clang_rt.builtins-i386.dir/eprintf.c.o -MF lib/builtins/CMakeFiles/clang_rt.builtins-i386.dir/eprintf.c.o.d -o lib/builtins/CMakeFiles/clang_rt.builtins-i386.dir/eprintf.c.o -c /builddir/llvm-bootstrap-17.0.6/compiler-rt/lib/builtins/eprintf.c
In file included from /builddir/llvm-bootstrap-17.0.6/compiler-rt/lib/builtins/eprintf.c:10:
/usr/include/fortify/stdio.h:150:47: error: 'diagnose_as_builtin' attribute parameter types do not match: parameter 2 of function '__orig_vsnprintf' has type 'size_t' (aka 'unsigned long'), but parameter 2 of function '__builtin_vsnprintf' has type 'unsigned int'
  150 | __diagnose_as_builtin(__builtin_vsnprintf, 1, 2, 3, 4)
      |                                               ^
1 error generated.
[105/310] Building C object lib/builtins/CMakeFiles/clang_rt.builtins-i386.dir/udivsi3.c.o
[106/310] Building C object lib/builtins/CMakeFiles/clang_rt.builtins-i386.dir/udivti3.c.o
[107/310] Building C object lib/builtins/CMakeFiles/clang_rt.builtins-i386.dir/clear_cache.c.o
[108/310] Building C object lib/builtins/CMakeFiles/clang_rt.builtins-i386.dir/i386/fp_mode.c.o
[109/310] Building C object lib/builtins/CMakeFiles/clang_rt.builtins-i386.dir/umodsi3.c.o
[110/310] Building C object lib/builtins/CMakeFiles/clang_rt.builtins-i386.dir/enable_execute_stack.c.o
[111/310] Building C object lib/builtins/CMakeFiles/clang_rt.builtins-i386.dir/emutls.c.o
FAILED: lib/builtins/CMakeFiles/clang_rt.builtins-i386.dir/emutls.c.o 
/builddir/llvm-bootstrap-17.0.6/build/./bin/clang --target=x86_64-chimera-linux-musl -DVISIBILITY_HIDDEN  -Wformat -Werror=format-security -ftrivial-auto-var-init=zero -fstack-clash-protection -O2 -pipe -ffile-prefix-map=/builddir/llvm-bootstrap-17.0.6=. -fPIC -O3 -DNDEBUG -m32 -fno-lto -std=c11 -fno-builtin -fvisibility=hidden -fomit-frame-pointer -DCOMPILER_RT_HAS_FLOAT16 -MD -MT lib/builtins/CMakeFiles/clang_rt.builtins-i386.dir/emutls.c.o -MF lib/builtins/CMakeFiles/clang_rt.builtins-i386.dir/emutls.c.o.d -o lib/builtins/CMakeFiles/clang_rt.builtins-i386.dir/emutls.c.o -c /builddir/llvm-bootstrap-17.0.6/compiler-rt/lib/builtins/emutls.c
In file included from /builddir/llvm-bootstrap-17.0.6/compiler-rt/lib/builtins/emutls.c:11:
/usr/include/fortify/string.h:45:47: error: 'diagnose_as_builtin' attribute parameter types do not match: parameter 3 of function '__orig_memcpy' has type 'size_t' (aka 'unsigned long'), but parameter 3 of function '__builtin_memcpy' has type 'unsigned int'
   45 | __diagnose_as_builtin(__builtin_memcpy, 1, 2, 3)
      |                                               ^
/usr/include/fortify/string.h:70:48: error: 'diagnose_as_builtin' attribute parameter types do not match: parameter 3 of function '__orig_memmove' has type 'size_t' (aka 'unsigned long'), but parameter 3 of function '__builtin_memmove' has type 'unsigned int'
   70 | __diagnose_as_builtin(__builtin_memmove, 1, 2, 3)
      |                                                ^
/usr/include/fortify/string.h:89:47: error: 'diagnose_as_builtin' attribute parameter types do not match: parameter 3 of function '__orig_memset' has type 'size_t' (aka 'unsigned long'), but parameter 3 of function '__builtin_memset' has type 'unsigned int'
   89 | __diagnose_as_builtin(__builtin_memset, 1, 2, 3)
      |                                               ^
/usr/include/fortify/string.h:107:47: error: 'diagnose_as_builtin' attribute parameter types do not match: parameter 3 of function '__orig_memchr' has type 'size_t' (aka 'unsigned long'), but parameter 3 of function '__builtin_memchr' has type 'unsigned int'
  107 | __diagnose_as_builtin(__builtin_memchr, 1, 2, 3)
      |                                               ^
/usr/include/fortify/string.h:262:48: error: 'diagnose_as_builtin' attribute parameter types do not match: parameter 3 of function '__orig_strncat' has type 'size_t' (aka 'unsigned long'), but parameter 3 of function '__builtin_strncat' has type 'unsigned int'
  262 | __diagnose_as_builtin(__builtin_strncat, 1, 2, 3)
      |                                                ^
/usr/include/fortify/string.h:285:48: error: 'diagnose_as_builtin' attribute parameter types do not match: parameter 3 of function '__orig_strncpy' has type 'size_t' (aka 'unsigned long'), but parameter 3 of function '__builtin_strncpy' has type 'unsigned int'
  285 | __diagnose_as_builtin(__builtin_strncpy, 1, 2, 3)
      |                                                ^
6 errors generated.

trying to reproduce normally with -fno-builtin or similar doesn't repro, so there is probably something funny in the compiler-rt build

@nekopsykose
Copy link
Contributor Author

ah, a repro:

copypaste online example:

/* vsnprintf example */
#include <stdio.h>
#include <stdarg.h>

void PrintFError ( const char * format, ... )
{
  char buffer[256];
  va_list args;
  va_start (args, format);
  vsnprintf (buffer,256,format, args);
  perror (buffer);
  va_end (args);
}

int main ()
{
   FILE * pFile;
   char szFileName[]="myfile.txt";

   pFile = fopen (szFileName,"r");
   if (pFile == NULL)
     PrintFError ("Error opening '%s'",szFileName);
   else
   {
     // file successfully open
     fclose (pFile);
   }
   return 0;
}

then:

$ cc main.c -m32 -c -O1                                                                                                            
In file included from /tmp/mytemp.ADnlpp/main.c:2:
/usr/include/fortify/stdio.h:150:47: error: 'diagnose_as_builtin' attribute parameter types do not match: parameter 2 of function '__orig_vsnprintf' has type 'size_t' (aka 'unsigned long'), but parameter 2 of function '__builtin_vsnprintf' has type 'unsigned int'
  150 | __diagnose_as_builtin(__builtin_vsnprintf, 1, 2, 3, 4)
      |                                               ^
1 error generated.

removing either optimisation (-O0 or no arg) or -m32 doesn't reproduce

@nekopsykose
Copy link
Contributor Author

you can use a chimeralinux/chimera container and apk add clang to repro this manually if you need

@jvoisin jvoisin added the bug label Dec 18, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants